docs(changelog): 补全 v0.3.7 以来的未记录变更到 [Unreleased]

把 v0.3.7 之后除五层重试外的 25 个 commit 归类补入 [Unreleased]:
cold-digest 冷节点压缩、全局出口代理、自定义会话头、墙钟就地收尾、
worker/planner 提示词与工具集调整、graph_overview 改动、意图状态标签
语义修正等。新增「探索图」「网络」两个章节。
This commit is contained in:
Autumn-27 committed 2026-09-09 14:08:48 -04:00
1 parent 5327f88ebc
commit c585b196b5
1 file changed
+64
+64
View File
@@ -9,6 +9,70 @@
#### 新增的功能
- LLM 页新增「重试与退避」标签页:五层重试的**次数**与**间隔**都可以配。一次模型调用的失败由内到外经过建连重试(SDK,流开始前的连接重置 / 超时 / 429 / 5xx)、空响应重试(SDK,正常结束却没有任何内容,仅 openai 格式)、同 provider 安全窗口重试(未向调用方交付任何输出前的断流重放)、轮询熔断(连续失败到阈值就冷却跳过)、意图重跑(worker 以 model_error 收场后整条意图重跑)五层,内层用尽才轮到外层。每层两个旋钮,语义统一:留空 = 用原本的默认次数与指数退避;填次数就用该次数;填间隔就把指数退避换成固定间隔;填 -1 = 关掉这层重试。前三层跟着端点走,可在每个模型配置里逐字段覆盖全局默认(只钉间隔的仍继承全局次数);熔断与意图重跑是进程级语义,只有全局一份。保存后热生效,不需要重启。全部留空即当前行为,旧库升级后逐字节不变(新列默认 0、settings 键不存在即全默认)。连接测试刻意不带这些参数——它有 30s 硬超时,叠上用户配的重试只会把能用的端点测成超时失败。设计见 `docs/LLM重试设计.md`。
- 每个 LLM 配置支持自定义**会话头**(`session_header_key`):非空时每次 LLM 请求都会带上该 HTTP 头,头值为当前运行的 session id(chat 会话为 `conv-<id>`、worker 为 `exp<x>-worker-i<intent>` 等),用于某些按 session-id 头做提示缓存 / 粘性路由的网关。实现上从请求 context 里读取 session id 注入,无需改 norma,同一共享 provider 也能按会话发出不同头值。旧库带迁移,前端 LLM 配置弹窗新增输入框。
#### 修复的问题
- 修复保存 LLM 配置时因会话头字段为空直接报 `23502` 的问题:该列是 `NOT NULL DEFAULT ''`,此前误套 `NULLIF($n,'')` 把未填写的会话头写成 NULL 触发非空约束,现按空串语义直接传参。
### Agent
#### 新增的功能
- 墙钟超时改为**就地收尾**:依赖 norma v0.3.6,`MaxDuration` 到点会打断正在跑的工具并在活 ctx 上按收尾轮数续跑(写回已识别内容 + 总结,终态为 timeout),不再依赖 worker/planner 各自的 `maxDur+90s` 外部硬 ctx 把卡住的 run 直接杀成 `aborted_tools`。chat 走同一 harness 自动获得同样行为,mainagent 无 `MaxDuration` 不受影响。
- 停摆兜底:planner 在心跳 / 无变动唤醒且全图已无任何 open 或 running 意图时,开场白改为停摆告警,明确告知无 worker 在跑、无排队方向,本轮必须产出一个或多个互不重复的新意图(不得产出 0 意图)。
#### 修改的功能
- worker 提示词重构:意图 / 启动指令 / 锚定资产原始 JSON 移入 system prompt,每轮重拼、绝不被 compaction 压掉,续跑也不依赖 transcript 首消息留存;启动 user 消息瘦身为仅全局态势 overview(可降级、容忍 stale)。代价是 system 混入 per-intent 数据、失去跨意图缓存复用,是「不丢意图」的刻意取舍。
- 精简 planner / worker 默认正文并修正若干实战问题:planner 对 `recent_done` 按状态区分(blocked/exhausted 先查 trace 再决定,不当死路也不无脑重跑)、否定结论改为「观察 / 存疑、非定论」且采信前看 evidence、目标未达成且无 open/running 意图必须产出(硬底线)、深度优先于覆盖度;worker 否定类结论只写「观察 + 试探性读法」、判决权归 planner,跨意图线索写进 fact 的 summary 交规划者、不自己追。reseed 会把新默认作为新版本追加并切过去,用户自定义 / 旧版本保留在历史可回滚。
- 收敛 work agent 默认工具集与资产写回提示:worker 只负责单条意图的执行与写回,读上下文 / 跨 work 复盘属规划职责,故从其默认工具移除 `list_facts` / `node_detail` / `list_companies` 及跨 work 检索(`search_all_worker_traces` / `list_worker_traces` / `get_worker_trace`),只留 `list_findings`(报漏洞前查重)+ `add_finding` / `record_fact` + `insert_assets` / `list_assets`;提示词删掉与 `insert_assets` schema 冲突的陈旧字段说明(`type=tech`/`on_url`/`props`)。旧库带一次性迁移剥离对应绑定,planner/main 的同名绑定不动。
### 探索图
#### 新增的功能
- **探索图冷节点压缩(cold-digest)**:把老且长期不活跃的意图 / 事实折叠成 digest 节点在 `graph_overview` 里展示,原始节点永久保留、按 id 可完整还原(存储无损、只压呈现、折叠可逆)。冷热判定按逆向可达 + 任一活分支即热,配 R=6 轮防抖与连通分量分组;后台压缩(minor 折未覆盖冷块、major 回源重压合并碎片)带活跃度复核与冷却互斥,绝不上热路径也绝不覆盖已复活节点。概览侧提供 `cold_digests` 与按资产索引的 `cold_index`,`expand_digest` / `expand_index` 负责还原。关联 / 继承任务的概览同样复用其自身折叠视图,`expand_digest` 支持跨任务只读还原。`expand_digest` / `expand_index` 只给 planner 与 main agent,不给 worker。均带旧库迁移。
- `graph_overview` 全量输出 `finding_list`:findings 是任务最高价值产物且单任务通常不多,改为在概览里全量带出(不像 facts 只给最近窗口),planner/worker 每轮即可一眼看全所有确认漏洞,无需再调 `list_findings`。每条精简为 `{id, summary, evidence?, from_intent?, assets?}`,其中受影响资产直接给可读内容(url / 域名 / ip:port)而非裸 id。
#### 修改的功能
- `graph_overview` 不再平铺 `hosts`:coverage 块移除 host 列表(大范围任务里每轮最多携带 500 个 host 字符串,对规划决策价值有限),只保留 `host_count`,具体主机按需 `list_assets` 查。新增顶层 `done_intents_total`(已结束意图总数),与被截断到 ≤15 的 `recent_done_intents` 平行,让 planner 去重时知道有无被截。
### 工具
#### 修改的功能
- `add_company_scope` 默认绑定由 worker 改为 planner:定义企业资产范围属规划 / 主控 / Auto 的职责,worker 只执行探索。新库 seed 默认绑定为 mainagent/planner/auto,老库带一次性迁移。
- planner 默认绑定 `list_assets`:现同时具备 `list_assets`(DSL 全库检索)与 `list_untested_assets`(范围内未测),老库一次性回填、不覆盖用户解绑。
### 任务
#### 新增的功能
- 任务列表新增「运行中 Worker」列:统计该任务下 `state='running'` 的意图节点数,口径与任务详情页概览的「运行中 Worker」完全一致,无运行中 Worker 时显示 0。
### 网络
#### 新增的功能
- 新增**全局出口代理**配置:所有目标流量可经统一的全局代理出网(http/https/socks5,支持 `user:pass`)。开启流量捕获时作为 MITM 记录代理的上游(流量照录再经代理出网,拦截与透传两条路径都走上游、不泄露源 IP);关闭捕获时直接注入 agent 的 bash 环境与 WebFetch(`proxyEnv` 增加 `ALL_PROXY` 支持 socks5)。配置存于 settings KV 表(无需迁移),前端系统配置页新增「全局代理」卡片,与网络搜索代理、LLM 代理相互独立。
### UI
#### 修复的问题
- 修正意图状态标签的语义错误:`exhausted`「已穷尽」→「预算耗尽」(实为达步数 / 时间预算被中途掐断、只写回部分结果,并非该方向已探尽)、`blocked`「被拦截」→「执行出错」(实为模型 / API / 网络故障重试用尽、意图基本没真正探成,并非目标 / WAF 拦截),并补上此前缺失的 `stopped`「已停止」(用户手动停止的 work)。
### 依赖
#### 修改的功能
- 升级 norma 至 v0.3.4:MCP 工具输出增加截断与落盘(见 `651b961`),后续 v0.3.6 支撑墙钟就地收尾。
### 贡献者
- [@Autumn-27](https://github.com/Autumn-27)
## [0.3.7] - 2026-08-31