From 0ab5e31a64586831129f445b3b13081914b6d384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Fri, 24 Apr 2026 18:24:52 +0800 Subject: [PATCH] Add files via upload --- .../src/main/java/burp/BurpExtender.java | 2 +- .../main/java/burp/CyberStrikeAIClient.java | 38 ++++++++++++++----- .../src/main/java/burp/CyberStrikeAITab.java | 15 +++++--- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/BurpExtender.java b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/BurpExtender.java index 1f40da51..8bd50b29 100644 --- a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/BurpExtender.java +++ b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/BurpExtender.java @@ -64,7 +64,7 @@ public class BurpExtender implements IBurpExtender, IContextMenuFactory { String prompt = HttpMessageFormatter.toPrompt(helpers, msg, instruction); String title = HttpMessageFormatter.getRequestTitle(helpers, msg); - String agentModeStr = (cfg.agentMode == CyberStrikeAIClient.AgentMode.MULTI) ? "Multi Agent" : "Single Agent"; + String agentModeStr = cfg.agentMode.displayName; String runId = tab.startNewRun(title, agentModeStr, msg); tab.appendProgressToRun(runId, "\n[server] " + cfg.baseUrl + "\n\n"); diff --git a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAIClient.java b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAIClient.java index c7713f58..2511ef13 100644 --- a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAIClient.java +++ b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAIClient.java @@ -26,8 +26,21 @@ final class CyberStrikeAIClient { } enum AgentMode { - SINGLE, - MULTI + NATIVE_REACT("Native ReAct", "/api/agent-loop/stream", null), + EINO_SINGLE("Eino Single (ADK)", "/api/eino-agent/stream", null), + DEEP("Deep (DeepAgent)", "/api/multi-agent/stream", "deep"), + PLAN_EXECUTE("Plan-Execute", "/api/multi-agent/stream", "plan_execute"), + SUPERVISOR("Supervisor", "/api/multi-agent/stream", "supervisor"); + + final String displayName; + final String streamPath; + final String orchestration; + + AgentMode(String displayName, String streamPath, String orchestration) { + this.displayName = displayName; + this.streamPath = streamPath; + this.orchestration = orchestration; + } } interface StreamListener { @@ -94,13 +107,15 @@ final class CyberStrikeAIClient { } void streamTest(Config cfg, String token, String message, StreamListener listener) { - String path = (cfg.agentMode == AgentMode.MULTI) ? "/api/multi-agent/stream" : "/api/agent-loop/stream"; - String urlStr = cfg.baseUrl + path; + String urlStr = cfg.baseUrl + cfg.agentMode.streamPath; Map payload = new HashMap<>(); payload.put("message", message); payload.put("conversationId", ""); payload.put("role", ""); + if (cfg.agentMode.orchestration != null) { + payload.put("orchestration", cfg.agentMode.orchestration); + } new Thread(() -> { HttpURLConnection conn = null; @@ -184,11 +199,16 @@ final class CyberStrikeAIClient { String message = payload.get("message") != null ? String.valueOf(payload.get("message")) : ""; String conversationId = payload.get("conversationId") != null ? String.valueOf(payload.get("conversationId")) : ""; String role = payload.get("role") != null ? String.valueOf(payload.get("role")) : ""; - return "{" - + "\"message\":\"" + escapeJson(message) + "\"," - + "\"conversationId\":\"" + escapeJson(conversationId) + "\"," - + "\"role\":\"" + escapeJson(role) + "\"" - + "}"; + StringBuilder sb = new StringBuilder(); + sb.append("{"); + sb.append("\"message\":\"").append(escapeJson(message)).append("\","); + sb.append("\"conversationId\":\"").append(escapeJson(conversationId)).append("\","); + sb.append("\"role\":\"").append(escapeJson(role)).append("\""); + if (payload.containsKey("orchestration") && payload.get("orchestration") != null) { + sb.append(",\"orchestration\":\"").append(escapeJson(String.valueOf(payload.get("orchestration")))).append("\""); + } + sb.append("}"); + return sb.toString(); } private static String escapeJson(String s) { diff --git a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java index 410d1031..e3df85be 100644 --- a/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java +++ b/plugins/burp-suite/cyberstrikeai-burp-extension/src/main/java/burp/CyberStrikeAITab.java @@ -15,7 +15,9 @@ final class CyberStrikeAITab implements ITab { private final JTextField hostField = new JTextField("127.0.0.1"); private final JTextField portField = new JTextField("8080"); private final JPasswordField passwordField = new JPasswordField(); - private final JComboBox agentModeBox = new JComboBox<>(new String[]{"Single Agent", "Multi Agent"}); + private final JComboBox agentModeBox = new JComboBox<>(new String[]{ + "Native ReAct", "Eino Single (ADK)", "Deep (DeepAgent)", "Plan-Execute", "Supervisor" + }); private final JButton validateButton = new JButton("Validate"); private final JButton clearButton = new JButton("Clear Output"); private final JButton stopButton = new JButton("Stop"); @@ -98,7 +100,7 @@ final class CyberStrikeAITab implements ITab { hostField.setColumns(14); portField.setColumns(6); passwordField.setColumns(12); - agentModeBox.setPreferredSize(new Dimension(160, agentModeBox.getPreferredSize().height)); + agentModeBox.setPreferredSize(new Dimension(200, agentModeBox.getPreferredSize().height)); JPanel row1 = new JPanel(new FlowLayout(FlowLayout.LEFT, 8, 2)); row1.add(new JLabel("Host")); @@ -475,14 +477,17 @@ final class CyberStrikeAITab implements ITab { renderMarkdownBox.addActionListener(e -> refreshOutputView()); } + private static final CyberStrikeAIClient.AgentMode[] AGENT_MODES = CyberStrikeAIClient.AgentMode.values(); + CyberStrikeAIClient.Config currentConfig() { String host = hostField.getText().trim(); String port = portField.getText().trim(); String password = new String(passwordField.getPassword()); String baseUrl = "http://" + host + ":" + port; - CyberStrikeAIClient.AgentMode mode = agentModeBox.getSelectedIndex() == 1 - ? CyberStrikeAIClient.AgentMode.MULTI - : CyberStrikeAIClient.AgentMode.SINGLE; + int idx = agentModeBox.getSelectedIndex(); + CyberStrikeAIClient.AgentMode mode = (idx >= 0 && idx < AGENT_MODES.length) + ? AGENT_MODES[idx] + : CyberStrikeAIClient.AgentMode.NATIVE_REACT; return new CyberStrikeAIClient.Config(baseUrl, password, mode); }