#383

feat: add autonomous deep assessments with adaptive planning and evidence memory

OpenSycunwants to merge intofrom

新增独立侧边栏「深度测评」,让测评以持久化任务持续规划、执行和积累证据。离开页面不影响后台执行;获得新进展后可以派生后续工作,走不通的方向可以保留缺口并由替代路线继续推进。整个生命周期不依赖聊天,也不创建隐藏会话。

实现:

  • 规划器与有限并发 Worker 独立调度。执行槽就绪即推进依赖步骤;慢 Worker、慢规划请求不阻塞其他就绪工作。完成步骤和带证据的检查点触发再规划,审批轮询不消耗模型调用。
  • 跨轮保存 strategy 路线,支持带原因淘汰失效的 pending/blocked 分支;运行中、待审批、已完成步骤不可被规划器淘汰。退休分支的结果、证据和覆盖缺口保留在页面与报告。
  • 内置任务范围内的记忆搜索、按事件分页读取和进度检查点;可核验并复用其他 Worker 的成功执行证据。上下文保留全部方向索引、优先提供最新观察,旧工具交互按完整调用/结果组移出活动上下文。
  • 结构化输出最多修复两次,修复阶段不执行工具且仍计费;最后一轮用于收尾。共享 Token 预留被并发请求占用时等待结算,已经付费返回的结果不会因触及预算而被丢弃。
  • SQLite 事务化任务和事件、预算与轮数限制、暂停/继续/停止、重启恢复、明确重试、进程及异步 MCP worker 清理。MCP 后台提交必须等到真实终态后才能作为成功证据。
  • 复用模型渠道、OpenAI/Claude 适配、MCP authorizer、Tool Guard、全局 HITL 策略;可选择逐次人工审批。每次启动/继续绑定实际操作者,协作者不会继承任务所有者的更高权限。
  • 总览、执行 DAG、计划、探索图、证据、日志、Markdown 报告,支持向项目事实、资产和候选漏洞发布带来源的观察;候选漏洞原子登记并去重。
  • assessment:read/write/delete、资源归属/授权、OpenAPI、中英俄界面、使用文档,以及纳入 CI 的并发/恢复回归。

验收与长程能力:

  • 支持用户验收条件和独立复核模型。候选发现会生成独立 verification 步骤;确认/否定必须引用复测的新执行记录。复核按每批最多八个候选保存,证据不足或复核不完整时返回 partial;继续任务时保留上一轮验收缺口供规划器调整路线。
  • 基于动作参数和结果摘要检测停滞,阻止仅改标题的重复探索;保留等待/轮询例外和显式重试路径。
  • 模型限流/临时故障最多退避重试两次,且仅重试模型请求。认证失败、策略拒绝、操作不明和停滞分别记录;安全的模型失败恢复保留已完成工具轨迹。
  • 记忆支持多关键词、资产/工具/成功失败过滤、最近优先与负面方向检索。
  • 专业 Worker 可选择 general/recon/auth/validation/verification,限制单步工具子集,绑定不同模型渠道;支持从配置目录安全加载用户选定技能正文。修复外部 MCP 展示名筛选不兼容,以及其他角色查询覆盖运行中外部工具映射的问题。
  • 暂停后可调整预算,普通探索预留 20%(最多 64,000 Token)用于验收和收尾;增加指标下载和离线 cohort 比较脚本 scripts/assessment-evaluate.py。

安全边界:

  • 审批使用服务器生成的 approval_id,绑定完整参数摘要和执行者;执行前重新检查审批人及独立的 hitl:write 资源范围。恢复、切换执行者或策略变化不会沿用失效授权。

  • 证据发布要求 revision 匹配所展示的内容;前端切换任务时立即清空旧控制界面。

  • 暂停/停止返回前关闭新进程与异步 MCP worker 的提交入口;截止时间同样关闭入口,防止取消等待后仍新提交动作。

  • 非全局资产导入不再更新无 owner 的已有记录;项目内去重在事务中检查原资产归属。项目绑定透传给 MCP,资源读取、更新、删除和目标项目受同一边界约束。

  • 所有测评 JSON 写入口限制为 128 KiB,Cookie 写操作检查来源;工具批次/参数和历史调用 ID 有界且不可重放。

  • 模型/审批配置按写入锁生成独立快照。列表不加载私有轨迹,日志按条数和约 1 MiB 分页,减少长任务轮询开销。

  • API 客户端需提交当前 approval_id / evidence revision;过期请求返回 409,旧页面应刷新后操作。详细触发条件与回归入口见 docs/DEEP_ASSESSMENT_SECURITY_REVIEW.md。

  • 新增独立「执行 DAG」页签,直接展示真实步骤依赖;分层布局正确处理并行分支与多前置步骤汇合。支持状态更新、缩放/适应画布、节点定位、依赖路径高亮及详情;状态刷新保留视口、选择与拖动位置。适配深色和窄屏,提供空任务、缺失依赖/环路提示及图形组件不可用时的可操作后备视图。复用本地 Cytoscape,不新增 CDN 或图形依赖。

  • 新建界面采用居中分区布局、可搜索工具选择和固定操作栏,适配窄屏与深色模式。所有工作台 API 和下载复用真实 apiFetch 登录凭据;浏览器夹具通过实际 auth.js 登录,验证列表/新建/控制/下载均携带令牌。

验证:

  • go test ./... 通过。
  • go test -race ./internal/assessment ./internal/handler ./internal/app ./internal/database ./internal/multiagent 通过;最后的调度和检查点改动另经 assessment race 检查。
  • 新增能力回归:独立复核否决提前完成、自动复测与新证据要求、21 个候选分批验收、停滞拦截、分类重试、预算调整、技能路径隔离、MCP 本地协议集成、评测指标比较。
  • 新增长程场景:12 阶段依赖链、慢 Worker/慢规划器隔离、失败分支换路、长输出尾部检索、跨 Worker 证据复用、检查点恢复、格式修复、预算边界、完整工具交互压缩及跨任务数据隔离。关键调度场景重复运行通过。
  • node --test web/static/js/*.test.cjs:342/342 通过。
  • node scripts/assessment-browser-smoke.mjs:真实前端与本地夹具 API 的创建、选择、策略显示、启动、审批、完成、图、XSS 转义、轮询保留输入、390px 布局通过;DAG 覆盖并行/汇合、增量规划、轮询保留视口与节点位置、缩放定位、键盘选择、暗色/窄屏、空草稿和组件缺失后备视图。布局单测另覆盖 100 个步骤、缺失引用、环路及特殊键名。
  • 服务端构建、go vet ./internal/assessment ./internal/handler ./internal/app ./internal/database 和 git diff --check 通过。
  • 安全回归覆盖审批重放、参数/执行者变化、审批人撤权、权限范围组合、失效证据版本、跨项目写入、无 owner 资产、暂停后的新工具提交、热更新快照、请求体与日志分页上限。

验证边界:模型/工具使用本地模拟服务和确定性夹具,未做真实模型与真实目标的长时对标,不能据此宣称漏洞发现率或成本已优于其他系统。范围文本传给规划器和 Worker;任意 Shell/外部 MCP 的网络隔离由部署环境提供。任务时间包含审批等待;缺失 usage 时保守计费。全局 review_edit 在工作台采用人工批准,参数修改通过拒绝、补充方向及重试完成。面向单服务进程。

额外扩大到整个 security 包的 race 检查时,未改动的 internal/security/shell_noninteractive_test.go 中 TestNonInteractiveStdinReadBlocksWithoutRedirect 报告 cmd.Process 并发访问;常规全量测试通过,本 PR 未修改该测试。

文档:docs/DEEP_ASSESSMENTS.md。