Repository navigation
v1.6.7 — 武器输出结构化解析(P0)
P0:武器输出 → 结构化落库(路线图第 1 项主体)
问题
代码里没有任何解析器:nmap/nuclei 的输出动辄上千行,靠 agent 逐条 pentest_add_asset /
pentest_add_fact 必然漏项、重复、丢字段,且无法度量覆盖率。
新增
lib/ingest.mjs:纯函数解析器(零依赖、零 I/O、可复现)- nmap
-oXXML → ip/subdomain 资产、port/service fact、脚本输出 info(只收 open 端口) - nuclei
-jsonl→kind=vuln候选(severity / template-id / matcher / extracted) - httpx
-jsonl→ 存活端点 +httpfact(title/tech/webserver/状态码) - ffuf
-of json→ 端点候选 +httpfact - masscan
-oJ/ naabu-json→ 端口 fact kind: auto按内容嗅探,嗅探不出报错而不猜- 坏行/缺字段只记
notes,绝不静默丢数据
- nmap
pentest_ingest工具(决策层):读文件(≤64MB)→ 解析 → 合并去重 → 落库- 去重键:资产
type|value、事实kind|target|detail;重复只合并来源 - 每条记录带
sources=文件名@sha256前12位(溯源) - 资产按父类优先创建,解析器只给逻辑父子(不给 id),id 由工具解析
- 已加入子 agent 的
toolFilter.deny(store 写入仍归决策 agent)
- 去重键:资产
- 明确不产出 finding:nuclei 命中落成
vulnfact,必须验证后才能pentest_add_finding
测试
新增 test/ingest.test.mjs 30 项(真实工具输出样例:类型嗅探、字段完整性、
前缀陷阱、坏行留痕、去重合并、可复现性、坏输入报错)。npm test 共 11 个测试文件全绿。
同时补上已知事故的回归测试与文档(test/repair-v0-logs.test.mjs 15 项 + 旧会话修复章节),
并新增 ROADMAP.md 记录 1-10 项补齐计划的交付物与验收标准。