From aa3ef631214b5454bd27175f365f0bcee04da104 Mon Sep 17 00:00:00 2001 From: Autumn-27 <53844290+Autumn-27@users.noreply.github.com> Date: Fri, 11 Sep 2026 12:45:23 -0400 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E8=A1=A5=E9=BD=90=200.3.8?= =?UTF-8?q?=20=E4=BB=A5=E6=9D=A5=E7=9A=84=E5=8F=98=E6=9B=B4=E6=9D=A1?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c40f9ea..23db4a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,26 +6,93 @@ ### Agent +#### 新增的功能 + +- 任务内主 Agent 支持**多会话**:可新建、切换、独立重置上下文,每个会话都能交互。 +- 支持持久化的 `/btw` **旁路提问**:不打断主线追问,问答落库,重启后仍在。 +- `spawn_task` 新增 `source_task_ids`,新任务可**只读继承**来源任务的资产与发现。 + +#### 修改的功能 + +- 关闭 worker 的跨 engagement 记忆并收敛其默认工具面:读上下文、跨 work 复盘属规划职责,worker 只管单条意图的执行与写回。 +- 精简 worker 默认提示词;`get_worker_output` 移除 `terminated` 与 `worker_name` 字段;精简 `insert_assets` / `list_assets` 的描述。 + #### 修复的问题 - 修复 work 因**空转回合**提前中断的问题:模型有时会用一整轮只输出思考,既不给正文也不调工具,此时 harness 看到的是一次自然结束(`end_turn` 且无 `tool_use`),直接以 `completed` + 空总结收场——一条还没做完的意图就断在半路,表现为「任务正常结束但没有任何文字总结」。五层 LLM 重试一层都够不着它:它不是错误,同 provider 安全窗口重试的入口是"流失败",熔断在 `err == nil` 时直接判成功,意图重跑只认 `model_error`;SDK 的空响应重试也够不着,因为那层以"有没有 yield 过事件"判空,而思考增量本身就是事件。现在 work 的 Stop 钩子会识别这种回合并注入一条续跑指令,让模型带着已经产出的思考继续执行下一步——刻意不选"原样重发",因为这类空转通常由提示词与上下文形状决定,是稳定行为而非随机抽风,重发只会让模型再想一遍。 - 次数复用 LLM 页「重试与退避」里的**空响应重试次数**(两者都在回答"模型完成了却没产出实质内容",只是判据与手段不同),默认 2 次,填 `-1` 即关掉、退回原先"空转即收场"的行为。它是一条意图的**总量**上限而非连续次数:harness 自身已限死连续空转只推一次,只有真正发生过工具回合配额才刷新,所以这个数挡的是「工具 → 空转 → 推 → 工具 → 空转」这类循环把意图预算耗光。触发时日志记 `[work · #<意图>] 空转回合…注入续跑指令 (n/N)`。设计见 `docs/LLM重试设计.md` §1.1。 +- 修复长对话下 `/btw` 的上下文预算与输入布局;非安全上下文(非 HTTPS 访问)降级生成旁路请求 ID。 + +### 流量 + +#### 新增的功能 + +- 漏洞支持**关联多条流量证据**,可排序、加备注、按角色区分(请求/响应/佐证)。 +- 报告 Agent 会在写报告前**自动关联**相关流量证据。 +- 新增 Agent **流量绑定开关**,并补齐证据在 Agent 之间的交接。 + +### 任务 + +#### 新增的功能 + +- 支持**会话级漏洞复测**:复测跑在独立 Agent 会话里,列表与详情显示运行状态。 + +### 拦截 + +#### 新增的功能 + +- 审批记录新增**详情与执行审计**:可查看工具请求上下文、模型/规则初判、执行输出与参数指纹。 + +### 资产 + +#### 新增的功能 + +- 任务测试资产支持 **DSL 搜索**。 + +### LLM + +#### 修复的问题 + +- 修复测试连接未补发自定义会话头,导致 opencode zen 返回 400 的问题。 + +### 网络 + +#### 新增的功能 + +- MCP 的 HTTP 传输支持**跳过 TLS 证书校验**,便于接入自签证书的服务。 + +### UI + +#### 新增的功能 + +- 会话列表按 Agent 分组,支持展开收起与独立置顶;对话支持按 Agent 筛选。 +- 攻击链路图渲染压缩(digest)节点,并收缩其成员。 + +#### 修复的问题 + +- 修复登录凭据不同步导致的白屏。 +- 拦截提示文案改为明确标示「平台管控」,避免被误读成目标侧的防御。 ### 部署与更新 #### 新增的功能 -- 支持**页面一键更新**:系统配置页新增「版本与更新」卡片,可直接从 GitHub Release 检查并安装新版本;顶栏版本号旁在有新版时亮出提示胶囊,点击直达。链路为「下载当前平台发布包 → 比对 Release 的 `SHA256SUMS` → 用 `-h` 冒烟测试新二进制 → 暂存为 `artex.new` → 进程以退出码 75 退出 → 守护脚本重新拉起并完成换装」,页面轮询 `/api/health` 等版本号变化后自动刷新。判据刻意是"版本变了"而非"能连上了"——换装过程中旧版本会短暂重新起来一次(那一次只负责把 `artex.new` 换上去然后立刻退出),只看连通性会误判成功。走完整 zip 而非裸二进制,是因为现有 Release 的 `SHA256SUMS` 本就只覆盖 zip,这样不必改 CI,也兼容已发布的历史版本。 -- 新增守护启动脚本 `start.sh` / `start.bat` 作为正式启动入口(发布包与 Docker 镜像均已带上,`install.sh` 不变)。它只按退出码决定是否重新拉起:`0` = 正常停止、退出循环,`75` = 应用新版本、立刻重跑,其余 = 崩溃并按 1→2→4…最多 60 秒退避重启。刻意不在脚本里做校验与换装——那些逻辑在 sh 和 bat 上要写两套,而它们恰恰最不能出错:一旦换上跑不起来的二进制,守护进程会忠实地反复拉起它,用户只能上机器手工救。因此校验 / 冒烟 / 换装 / 回滚全部收在 Go 里(`selfupdate` 包),由 artex 自己在启动时完成,脚本保持傻瓜化。Docker 的 ENTRYPOINT 一并改为该脚本,它同时负责把 SIGTERM 转发给 artex——`docker stop` 只把信号发给 PID 1,不转发的话 artex 收不到信号、做不了优雅关闭,10 秒后被 SIGKILL 硬杀,正在跑的任务直接断在半路。 -- 更新失败不会留下坏程序:校验或冒烟不通过就丢弃暂存件、继续跑当前版本;换装后的新版若连续 3 次启动失败则自动回滚到 `artex.old`(起不来的那个留作 `artex.failed` 供排查)。两道闸门互补——「根本无法 exec」(下载截断、架构选错、缺依赖)由换装前的冒烟挡住,「能执行但初始化时崩溃」(配置不兼容、端口被占)由启动计数兜住,少任何一道都有漏网。设置页另有「回滚到上一版本」可主动退回,但数据库结构不会回退,旧版本可能无法识别新版写入的数据。 -- 后端对 GitHub 的查询结果缓存 30 分钟(失败结果 2 分钟,网络恢复后能很快自愈):未认证的 GitHub API 是每 IP 每小时 60 次,而顶栏提示每次整页加载都会查一次,且这 60 次是**服务器 IP** 上所有用户共用的——不缓存的话多开几个标签页或刷几次页面就把配额耗光,之后顶栏提示不再出现、点「检查更新」也报错,真想更新时反而点不动。用户显式点「检查更新」时带 `force=1` 绕过缓存拿实时结果(人工触发,频率天然有限)。取数期间全程持锁,并发请求排队等同一次查询而不是各自去打 GitHub。 -- 安全约束:更新只从 GitHub 域名下载并强制 HTTPS,每一跳重定向都校验域名;发布源写死、不做成配置项——更新源可配等于给任何能改配置的人一条远程代码执行通道,对渗透测试平台这个口子开不得。所有升级文件都挂在**可执行文件所在目录**而非 CWD:服务化运行时工作目录可能是 `/`,用 CWD 会让暂存件落到别处、换装彻底失效。开发构建(版本号为 `dev` 或 `git describe` 带后缀的不可比较版本)禁用一键更新,避免正式版覆盖掉本地正在调试的二进制。 +- 支持**页面一键更新**:系统配置页新增「版本与更新」卡片,顶栏在有新版时亮出提示。流程为下载发布包 → 校验 `SHA256SUMS` → 冒烟测试 → 暂存 → 退出由守护脚本重新拉起完成换装,页面自动刷新。 +- 新增守护启动脚本 `start.sh` / `start.bat` 作为正式启动入口(发布包与 Docker 镜像均已带上,`install.sh` 不变),按退出码决定是否重新拉起,并负责把 SIGTERM 转发给 artex。校验与换装逻辑都在 Go 里,脚本保持傻瓜化。 +- 失败自动兜底:校验或冒烟不通过就丢弃、继续跑当前版本;新版连续 3 次启动失败则回滚上一版本。设置页另有手动回滚(注意数据库结构不会回退)。 +- 更新只认 GitHub 域名且强制 HTTPS,发布源不可配置;开发构建禁用一键更新。GitHub 查询结果缓存 30 分钟,避免顶栏提示耗尽 API 配额。 #### 已知限制 -- Docker 下只换程序、不换镜像:镜像里的 playwright / nmap / node 等工具链不会跟着升级,新版若依赖新工具会坏;且 `docker compose up -d` 重建容器后会退回镜像自带的版本(换装写的是容器可写层)。要连镜像一起升级仍请用 `docker compose pull artex && docker compose up -d artex`。界面与确认弹窗均已就此提示。 -- 更新只替换二进制,不同步发布包里的 `skills/`,新版新增的内置 skill 不会自动生效(原先靠 `update.sh` 的 `git pull` 顺带解决;Docker 下 `./skills:/app/skills` 的绑定挂载也会盖掉镜像内置的那份)。 -- 更新即重启,会中断正在运行的任务,目前不做拦截,仅在确认弹窗中提示。 +- Docker 下只换程序、不换镜像:工具链不会跟着升级,且重建容器会退回镜像自带版本,需要时仍用 `docker compose pull artex`。 +- 不同步发布包里的 `skills/`,新版新增的内置 skill 不会自动生效。 +- 更新即重启,会中断正在运行的任务。 + +### 依赖 + +#### 修改的功能 + +- 升级 norma 至 v0.3.7。 ## [0.3.8] - 2026-09-09