Skip to content

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

Open
Sycun wants to merge 10 commits into
AIPentest:mainfrom
Sycun:codex/deep-assessment
Open

Sycun wants to merge 10 commits into
AIPentest:mainfrom
Sycun:codex/deep-assessment

Conversation

@Sycun

@Sycun Sycun commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

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

实现:

  • 规划器与有限并发 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。

@Sycun Sycun changed the title feat: add durable deep assessment workbench independent of chat feat: add autonomous deep assessments with adaptive planning and evidence memory Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant