From 6bb3a73f7392a391650d6e660b7ab54f692ab89a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Wed, 27 May 2026 11:44:15 +0800 Subject: [PATCH] Add files via upload --- internal/app/app.go | 4 ++++ internal/app/project_fact_tools.go | 1 + internal/app/vulnerability_tools.go | 2 +- internal/multiagent/orchestrator_instruction.go | 12 ++++-------- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index 5a44f795..528e2e85 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -1076,10 +1076,14 @@ func setupRoutes( // 项目管理与事实黑板 protected.GET("/projects", projectHandler.ListProjects) protected.POST("/projects", projectHandler.CreateProject) + protected.GET("/projects/:id/stats", projectHandler.GetProjectStats) + protected.GET("/projects/:id/conversations", projectHandler.ListProjectConversations) protected.GET("/projects/:id", projectHandler.GetProject) protected.PUT("/projects/:id", projectHandler.UpdateProject) protected.DELETE("/projects/:id", projectHandler.DeleteProject) protected.GET("/projects/:id/facts", projectHandler.ListFacts) + protected.GET("/projects/:id/facts/:factId/previous-version", projectHandler.GetFactPreviousVersion) + protected.GET("/projects/:id/facts/:factId/versions", projectHandler.ListFactVersions) protected.POST("/projects/:id/facts", projectHandler.CreateFact) protected.PUT("/projects/:id/facts/:factId", projectHandler.UpdateFact) protected.DELETE("/projects/:id/facts/:factId", projectHandler.DeleteFact) diff --git a/internal/app/project_fact_tools.go b/internal/app/project_fact_tools.go index 2be0c133..ffbff5dc 100644 --- a/internal/app/project_fact_tools.go +++ b/internal/app/project_fact_tools.go @@ -49,6 +49,7 @@ func registerProjectFactTools(mcpServer *mcp.Server, db *database.DB, cfg *confi upsertTool := mcp.Tool{ Name: builtin.ToolUpsertProjectFact, Description: "写入或更新项目黑板事实,用于跨会话沉淀可复现上下文(非正式漏洞条目;可交付漏洞另用 record_vulnerability)。" + + "边渗透边记录:每确认新认知(端口/入口/凭据/可利用点)后立即调用,同 fact_key 覆盖更新,勿等会话结束。" + "禁止仅写结论:summary 须含什么+在哪+如何验证;body 须含攻击链/请求响应/命令等复现细节。" + "发现类建议 fact_key 为 finding|chain|exploit|poc/,category 对应 finding|chain|exploit|poc,body 按攻击链模板填写。" + "环境类用 target|auth|infra|business/。同 fact_key 覆盖更新。需当前对话已绑定项目。", diff --git a/internal/app/vulnerability_tools.go b/internal/app/vulnerability_tools.go index 8359208c..2f16c718 100644 --- a/internal/app/vulnerability_tools.go +++ b/internal/app/vulnerability_tools.go @@ -163,7 +163,7 @@ func registerVulnerabilityTools(mcpServer *mcp.Server, db *database.DB, logger * func registerRecordVulnerabilityTool(mcpServer *mcp.Server, db *database.DB, logger *zap.Logger) { tool := mcp.Tool{ Name: builtin.ToolRecordVulnerability, - Description: "记录发现的漏洞详情到漏洞管理系统。当发现有效漏洞时,使用此工具记录漏洞信息,包括标题、描述、严重程度、类型、目标、证明、影响和建议等。记录前可先 list_vulnerabilities 避免重复。", + Description: "记录发现的漏洞详情到漏洞管理系统。边渗透边记录:每验证出一条可复现漏洞(含 POC/影响)后立即调用,勿等会话结束。包括标题、描述、严重程度、类型、目标、证明、影响和建议等。记录前可先 list_vulnerabilities 避免重复。", ShortDescription: "记录发现的漏洞详情到漏洞管理系统", InputSchema: map[string]interface{}{ "type": "object", diff --git a/internal/multiagent/orchestrator_instruction.go b/internal/multiagent/orchestrator_instruction.go index e7755fef..a9da5c4c 100644 --- a/internal/multiagent/orchestrator_instruction.go +++ b/internal/multiagent/orchestrator_instruction.go @@ -5,7 +5,6 @@ import ( "cyberstrike-ai/internal/agents" "cyberstrike-ai/internal/config" - "cyberstrike-ai/internal/mcp/builtin" "cyberstrike-ai/internal/project" ) @@ -107,13 +106,9 @@ func DefaultPlanExecuteOrchestratorInstruction() string { 当工具返回错误时,错误信息会包含在工具响应中,请仔细阅读并做出合理的决策。 -## 项目黑板(事实)与漏洞记录(分离) +` + project.FactRecordingBlackboardSection(true) + ` -绑定项目时会自动注入黑板索引(fact_key + 摘要)。**摘要不足必须 ` + builtin.ToolGetProjectFact + `(fact_key) 取 body,禁止臆造。** 环境认知用 ` + builtin.ToolUpsertProjectFact + `(key 如 target/primary_domain);发现/利用上下文用 finding|chain|exploit|poc/ 前缀且 body 含完整攻击链与 POC;正式漏洞用 ` + builtin.ToolRecordVulnerability + `(记前可先 ` + builtin.ToolListVulnerabilities + ` 防重复,详情用 ` + builtin.ToolGetVulnerability + `);二者可各记一次。误报用 ` + builtin.ToolDeprecateProjectFact + `。漏洞查询默认仅当前项目(未绑项目则仅当前会话)。 - -` + project.FactRecordingGuidanceBlock() + ` - -严重程度:critical / high / medium / low / info。证明须含足够证据。 +- **计划步骤须要求执行器落库**:不得在计划中写「会话结束再记录」;每步成功标准应包含「已 upsert 事实或已 record 漏洞(或已输出待落库块)」。 ## 技能库(Skills)与知识库 @@ -209,7 +204,8 @@ func DefaultSupervisorOrchestratorInstruction() string { - **委派优先**:可独立封装、需要专项上下文的子目标(枚举、验证、归纳、报告素材)优先 transfer 给匹配子代理,并在委派说明中写清:子目标、约束、期望交付物结构、证据要求。 - **亲自执行**:仅当无合适专家、需全局衔接或子代理结果不足时,由你直接调用工具。 - **汇总**:子代理输出是证据来源;你要对齐矛盾、补全上下文,给出统一结论与可复现验证步骤,避免机械拼接。 -- **事实与漏洞**:环境认知用 ` + builtin.ToolUpsertProjectFact + `;发现/利用须用 finding|chain|exploit|poc/ 类 key 并在 body 写全攻击链与 POC;正式漏洞用 ` + builtin.ToolRecordVulnerability + `,查询用 ` + builtin.ToolListVulnerabilities + ` / ` + builtin.ToolGetVulnerability + `;索引摘要不足时必须 ` + builtin.ToolGetProjectFact + ` 取详情。 + +` + project.FactRecordingBlackboardSection(true) + ` ## transfer 交接与防重复劳动