mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-11-13 15:57:22 +01:00
refactor(runtime): remove Eino and make Pi the sole agent engine
Delete the Eino model adapters, callbacks, middleware, orchestration, summarization and single-agent runner together with their dependencies. Chat, batch tasks, workflow Agent nodes and sub-agents now share the Pi runtime, and dispatch is a single code path instead of an engine switch. Configuration migrates eino_middleware/eino_skills to runtime/skills and drops the retired callback settings while old files still load. Settings, i18n and docs describe Pi only. Also carry the Pi follow-up fixes: empty required lists are omitted from tool schemas, historical tool results stay with their call batch, model proxies work over HTTP/1.1, single-query retrieval skips query expansion, and finalization docs match Pi lifecycle events.
This commit is contained in:
1 parent
35508eb614
commit
cfaa95d7bd
473 files changed
+3481
-37365
No files matched your search
@@ -66,7 +66,7 @@ Cookie: ...
|
||||
#### 发送到 CyberStrikeAI
|
||||
|
||||
- 弹窗选择:**项目 / 角色 / 对话模式**(动态 API)+ 测试指令
|
||||
- 支持 **Eino Single**、**Deep**、**Plan-Execute**、**Supervisor**
|
||||
- 支持 **Pi Single**、**Deep**、**Plan-Execute**、**Supervisor**
|
||||
- **Latest XHR**:一键选中最近 API 请求并打开发送弹窗
|
||||
- **Stop**:中止本地 SSE + 调用服务端 `/api/agent-loop/cancel`
|
||||
|
||||
|
||||
Vendored
BIN
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
const AGENT_MODES = [
|
||||
{ id: 'eino_single', label: 'Eino Single (ADK)', path: '/api/eino-agent/stream' },
|
||||
{ id: 'single', label: 'Pi Single', path: '/api/eino-agent/stream' },
|
||||
{ id: 'deep', label: 'Deep (DeepAgent)', path: '/api/multi-agent/stream', orchestration: 'deep' },
|
||||
{ id: 'plan_execute', label: 'Plan-Execute', path: '/api/multi-agent/stream', orchestration: 'plan_execute' },
|
||||
{ id: 'supervisor', label: 'Supervisor', path: '/api/multi-agent/stream', orchestration: 'supervisor' },
|
||||
|
||||
@@ -144,7 +144,7 @@ async function loadConfig() {
|
||||
tokenExpiresAt: sess[SESSION_TOKEN_EXPIRY_KEY] || '',
|
||||
lastProjectId: data[STORAGE_KEYS.lastProjectId] || '',
|
||||
lastRole: data[STORAGE_KEYS.lastRole] || '',
|
||||
lastAgentMode: data[STORAGE_KEYS.lastAgentMode] || 'eino_single',
|
||||
lastAgentMode: data[STORAGE_KEYS.lastAgentMode] || 'single',
|
||||
lastInstruction: data[STORAGE_KEYS.lastInstruction] || DEFAULTS.lastInstruction,
|
||||
filterApiOnly: data[STORAGE_KEYS.filterApiOnly] !== false,
|
||||
captureEnabled: data[STORAGE_KEYS.captureEnabled] !== false,
|
||||
|
||||
@@ -763,7 +763,7 @@ async function onValidate() {
|
||||
}
|
||||
|
||||
function fillAgentSelect(sel, selected) {
|
||||
fillSelect(sel, AGENT_MODES.map((m) => ({ id: m.id, label: m.label })), selected || 'eino_single');
|
||||
fillSelect(sel, AGENT_MODES.map((m) => ({ id: m.id, label: m.label })), selected || 'single');
|
||||
}
|
||||
|
||||
function csSelectWrap(input) {
|
||||
@@ -909,7 +909,7 @@ async function onSendConfirmed() {
|
||||
const instruction = $('dlg-instruction').value.trim() || defaultInstruction();
|
||||
const projectId = $('dlg-project').value || '';
|
||||
const role = $('dlg-role').value || '';
|
||||
const agentMode = $('dlg-agent').value || 'eino_single';
|
||||
const agentMode = $('dlg-agent').value || 'single';
|
||||
|
||||
try {
|
||||
await saveConfig({
|
||||
@@ -986,11 +986,17 @@ function handleStreamEvent(runId, type, message, ev) {
|
||||
if (message) appendToRun(runId, 'final', message);
|
||||
break;
|
||||
case 'eino_agent_reply_stream_start':
|
||||
case 'agent_reply_stream_start':
|
||||
appendToRun(runId, 'progress', '\n\n[Sub-agent reply]\n');
|
||||
break;
|
||||
case 'eino_agent_reply_stream_delta':
|
||||
case 'agent_reply_stream_delta':
|
||||
if (message) appendToRun(runId, 'progress', message);
|
||||
break;
|
||||
case 'eino_agent_reply':
|
||||
case 'agent_reply':
|
||||
if (message) appendToRun(runId, 'progress', '\n\n[Sub-agent reply]\n' + message + '\n');
|
||||
break;
|
||||
case 'progress':
|
||||
appendToRun(runId, 'progress', '\n[progress] ' + message + '\n');
|
||||
setRunStatus(runId, 'running');
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
- Configure **Host / Port / HTTPS / Username / Password** and choose an agent mode
|
||||
- Click **Validate** to login (`POST /api/auth/login`) and verify token (`GET /api/auth/validate`)
|
||||
- Right-click any HTTP message in Burp and send it to CyberStrikeAI for **streaming web pentest** (agent modes: **Eino Single**, Deep, Plan-Execute, Supervisor — maps to `/api/eino-agent/stream` or `/api/multi-agent/stream`)
|
||||
- Right-click any HTTP message in Burp and send it to CyberStrikeAI for **streaming web pentest** (agent modes: **Pi Single**, Deep, Plan-Execute, Supervisor — maps to `/api/eino-agent/stream` or `/api/multi-agent/stream`)
|
||||
- Keep a **test history sidebar** (searchable) so you can revisit previous runs
|
||||
- Output is split into **collapsible Progress** + **Final Response** (Markdown rendering supported)
|
||||
- View captured **Request / Response** for each run
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
- 弹出发送对话框,可针对**当前流量**选择:
|
||||
- **项目**(`GET /api/projects`,新建对话时绑定 `projectId`)
|
||||
- **角色**(`GET /api/roles`)
|
||||
- **对话模式**(Eino 单代理 / Deep / Plan-Execute / Supervisor,按次选择并记住上次取值)
|
||||
- **对话模式**(单代理 / Deep / Plan-Execute / Supervisor,按次选择并记住上次取值)
|
||||
- **测试指令**(可编辑 prompt 前缀)
|
||||
- 选择会记住上次取值,便于连续测同类流量
|
||||
- **测试历史侧边栏(可搜索)**:每次发送都会新增一条记录,方便回看与对比
|
||||
|
||||
BIN
Binary file not shown.
@@ -92,17 +92,21 @@ public class BurpExtender implements IBurpExtender, IContextMenuFactory {
|
||||
tab.setFinalResponse(runId, message);
|
||||
break;
|
||||
case "eino_agent_reply_stream_start":
|
||||
case "agent_reply_stream_start":
|
||||
tab.appendProgressToRun(runId, "\n\n[子代理回复]\n");
|
||||
break;
|
||||
case "eino_agent_reply_stream_delta":
|
||||
case "agent_reply_stream_delta":
|
||||
if (message != null && !message.isEmpty()) {
|
||||
tab.appendProgressToRun(runId, message);
|
||||
}
|
||||
break;
|
||||
case "eino_agent_reply_stream_end":
|
||||
case "agent_reply_stream_end":
|
||||
tab.appendProgressToRun(runId, "\n");
|
||||
break;
|
||||
case "eino_agent_reply":
|
||||
case "agent_reply":
|
||||
if (message != null && !message.isEmpty()) {
|
||||
tab.appendProgressToRun(runId, "\n\n[子代理回复]\n" + message + "\n");
|
||||
}
|
||||
|
||||
+3
-3
@@ -40,7 +40,7 @@ final class CyberStrikeAIClient {
|
||||
}
|
||||
|
||||
enum AgentMode {
|
||||
EINO_SINGLE("Eino Single (ADK)", "/api/eino-agent/stream", null),
|
||||
SINGLE("Pi Single", "/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");
|
||||
@@ -295,12 +295,12 @@ final class CyberStrikeAIClient {
|
||||
}
|
||||
|
||||
void streamTest(Config cfg, String token, String message, StreamListener listener) {
|
||||
streamTest(cfg, token, message, "", "", AgentMode.EINO_SINGLE, listener);
|
||||
streamTest(cfg, token, message, "", "", AgentMode.SINGLE, listener);
|
||||
}
|
||||
|
||||
void streamTest(Config cfg, String token, String message, String role, String projectId,
|
||||
AgentMode agentMode, StreamListener listener) {
|
||||
AgentMode mode = agentMode != null ? agentMode : AgentMode.EINO_SINGLE;
|
||||
AgentMode mode = agentMode != null ? agentMode : AgentMode.SINGLE;
|
||||
String urlStr = cfg.baseUrl + mode.streamPath;
|
||||
|
||||
Map<String, Object> payload = new HashMap<>();
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ final class SendOptionsDialog {
|
||||
) {
|
||||
CyberStrikeAIClient.AgentMode defaultMode = lastAgentMode != null
|
||||
? lastAgentMode
|
||||
: CyberStrikeAIClient.AgentMode.EINO_SINGLE;
|
||||
: CyberStrikeAIClient.AgentMode.SINGLE;
|
||||
|
||||
JPanel panel = new JPanel(new BorderLayout(0, 10));
|
||||
panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 0, 4));
|
||||
|
||||
BIN
Binary file not shown.
Reference in new issue
Block a user