Autumn-27
|
06a43f37ff
|
refactor(graph_overview): 精简态势概览字段
- 删除 cold_index 字段及其 expand_index 工具(含两处注册),移除
仅服务它的 coldDigestOverview 分桶逻辑(改用 activeDigestBodies)
- 删除 covered_members 字段(悬空血缘解析表)
- 删除 coverage.scope 字段(范围根资产 + company 富化)
- finding_list 每条仅保留 id/summary/from_intent,去掉 evidence/assets,
并清理随之无用的 findingMeta 预计算与 assetValue 辅助函数
|
2026-09-24 12:24:01 -04:00 |
|
Autumn
|
bf7f414477
|
Update CHANGELOG.md
|
2026-09-19 23:37:57 +08:00 |
|
Autumn-27
|
7b92395aa0
|
docs(changelog): 版本号改为 0.3.13
|
2026-09-19 11:23:33 -04:00 |
|
Autumn-27
|
2943eb2ea6
|
docs(changelog): 定版 0.4.0
|
2026-09-19 11:20:03 -04:00 |
|
Autumn-27
|
37950f4a6f
|
fix(task-archive): 遇到符号链接跳过而非整包失败
归档格式端到端只支持普通文件与目录(解包端对其它类型直接报错),原打包器遇到
任何 symlink 即整包失败(task archive refuses symlink),导致工作目录里一条软链
就卡死整个任务归档。改为跳过该符号链接并记日志:lstat 不跟随、不越出目录树、
不写 symlink 条目;链接指向树内时目标文件仍会被单独遍历归档。安全防护不变。
新增 TestTaskArchivePackageSkipsSymlink 覆盖。
|
2026-09-19 11:08:15 -04:00 |
|
Autumn-27
|
33c26dc72a
|
fix(intercept): 收紧裁判输出协议,减少 1024 截断导致的 fail-open
- 裁判 comment 上限 500→120 汉字,每段一句话、宁短勿长,合规裁决远低于
MaxTokens=1024,基本消除截断(截断会致输出无法解析而按失败策略放行)。
- 硬化「只输出 JSON、不带思考/前言/代码块包裹」,减少非 JSON 前言吃掉 token
预算。保留 实际操作/成功后的后果/命中规则 三段结构,与 ParseVerdict 一致。
- docs(readme): 精简审批详情/上下文模型审查一节。
|
2026-09-19 10:24:08 -04:00 |
|
Autumn-27
|
777730e255
|
feat: 任务模板支持预设分类与任务级拦截/允许规则
- db: task_templates 加 category_id(FK task_categories, ON DELETE SET NULL)
与 intercept_rules JSONB(规则快照);带幂等 ALTER 补旧库。
- db/task_templates.go: 用 JSONB 存取规则;PATCH 用 Set 标志区分改/清。
- server: 模板请求体加 category_id + intercept_rules,复用 buildTaskInterceptRules
校验;PATCH 靠原始 key presence 判断是否更新(可清分类为 null)。
- web: 抽共享组件 asset-intercept-rules-editor(NativeSelect 版,避免 Sheet 内
下拉 portal 误关抽屉),创建表单与模板管理器共用;模板管理器新增分类下拉与
规则编辑区,另存为模板带当前分类/规则;应用模板回填分类与规则。
|
2026-09-19 09:27:03 -04:00 |
|
Autumn-27
|
d5359e1f04
|
feat: 资产拦截接入执行链,新增任务级拦截/允许规则
在 agent 下发意图(add_intent)与插入资产(insert_assets)两处接入资产闸门;
并新增任务级规则(拦截 block + 允许 allow 白名单),创建任务时录入、任务详情
总览里可编辑。
- 匹配/执行(db/asset_intercept_match.go):MatchAssetInterceptRules 纯匹配
(exact/fuzzy 的 域名·IP·URL + CIDR,URL host 会拆出归类);EvaluateAssetGate
「先拦截后允许」闸门——命中拦截即禁止;未命中但存在启用的允许规则且都不命中→
不允许测试;无启用允许规则则不启用白名单。附单元测试。
- 执行点:add_intent 命中即不下发意图;insert_assets 命中即跳过 Upsert 及
AddAutoScope 副作用。均合并 全局∪任务级 规则。
- 任务级规则:表 task_intercept_rules(task_id FK CASCADE + action block/allow,
幂等 ALTER 补旧库);db/task_intercept.go 提供 List/Split/CRUD/事务插入;
创建任务随 intercept_rules 提交;CRUD 路由 /api/tasks/{id}/intercept-rules。
- 前端:新建任务抽屉多行录入(拦截/允许 + 类型,用 NativeSelect 避免 Sheet 内
下拉 portal 导致误关抽屉);任务详情总览新增规则管理卡片(增删改+启用开关)。
|
2026-09-19 09:06:22 -04:00 |
|
Autumn-27
|
dfc9d2fa2e
|
feat: 新增资产拦截规则(全局黑名单)增删改查
新增独立于命令拦截(intercept_rules)的资产拦截功能,仅提供规则的
存储与管理;具体匹配/拦截逻辑另行实现。
- db: 新增 asset_intercept_rules 表(schema.sql,幂等)与 CRUD 层
(db/asset_intercept.go);kind 支持全等/模糊的 域名·IP·URL 及 CIDR
- db: 首启动 seed 内置模糊拦截政府(.gov/.gov.cn)与教育(.edu/.edu.cn)
网站,settings 标记位门控,可禁用/删除且重启不复活
- server: /api/asset-intercept/rules 的 list/create/update/delete/toggle;
cidr、exact_ip 做格式校验
- web: 新增「资产拦截」页(/system/intercept/assets)与侧边栏入口、
api 与类型定义
|
2026-09-19 07:58:23 -04:00 |
|
Autumn-27
|
a590b415ba
|
chore(deps): 升级 norma 至 v0.4.1
|
2026-09-19 07:26:47 -04:00 |
|
Autumn-27
|
6f6be46480
|
feat(web): 登录前新增使用须知与免责声明弹窗,须勾选同意后方可登录
|
2026-09-18 08:09:05 -04:00 |
|
Autumn-27
|
9b82b02fe2
|
docs: 采用 AGPL-3.0 开源协议
|
2026-09-18 07:47:13 -04:00 |
|
Autumn-27
|
2951e10a4d
|
docs(readme): 完善许可与免责声明
|
2026-09-18 07:43:58 -04:00 |
|
Autumn-27
|
0ec51e3799
|
docs(changelog): 定版 0.3.12
|
2026-09-17 13:17:39 -04:00 |
|
Autumn
|
ec0ae108c4
|
Merge pull request #150 from Autumn-27/feat/broadcast-search-node-id
feat(web): 播报板搜索支持按节点 id 筛选
|
2026-09-18 01:09:30 +08:00 |
|
Autumn
|
8a3f40b6f8
|
Merge pull request #149 from Autumn-27/feat/intent-delete-modes
feat(intent): 意图删除支持假删除/真删除两种模式
|
2026-09-18 01:05:03 +08:00 |
|
Autumn-27
|
4756bb1c45
|
feat(intent): 意图删除支持假删除/真删除两种模式
删除入口区分两种模式(待领/运行中/已暂停的意图均可删除):
- 假删除(默认):意图置 state='deleted'、删除原因记入新字段 delete_reason,
保留节点与全部产出/血缘,不再在图上另挂 fact。
- 真删除:物理删除意图及「仅由它支撑」的独占子孙(沿 yields/derived_from
级联到叶子),避免孤立数据;共享节点、目标、任务根事实保留。被删意图先做
token rollup 并清理 activity/副会话,被删 finding 先删 findings 行。
两种模式都照常用 cancelled 触发通知 planner(带删除前捕获的意图摘要 + 原因),
planner 文案不再声称原因挂为事实。
- DB: 新增 SoftDeleteIntent、重写 CancelIntent 为深度独占级联;schema 加
delete_reason 列与 intent 的 deleted 状态(含旧库迁移)。
- 前端: 删除对话框加模式切换与动态说明,状态徽章/图标新增「已删除」,
播报板展开展示删除原因。
|
2026-09-17 12:52:57 -04:00 |
|
Autumn-27
|
6e3dbf6452
|
fix(web): 修复新对话未创建时上传文件报「缺少上传文件」
Composer 的 file input onChange 里同步执行 e.target.value = "" 清空了与
input 活绑定的 FileList。DraftChat 的 pickFiles 要先 await 建会话才取文件,
恢复执行时 FileList 已空,FormData 里没有 file 字段,后端返回 400。
改为在清空 value 之前把 FileList 快照成 File[] 再回调,onPickFiles 签名
随之改为 (files: File[]),调用方去掉各自的 Array.from。
|
2026-09-17 12:40:38 -04:00 |
|
Autumn-27
|
e2ada7e494
|
feat(web): 播报板搜索支持按节点 id 筛选
搜索框在内容/来源之外,新增节点 id 匹配:纯数字或 UI 展示的「#41」形式
都会精确命中该节点。服务端 NodesPage 在 payload/origin ILIKE 的 OR 组里
追加 id 精确匹配;mock 同步;补 NodesPage id 搜索测试。
|
2026-09-17 11:31:27 -04:00 |
|
Autumn
|
c6c5329a18
|
Merge pull request #147 from Autumn-27/feat/broadcast-node-detail
feat(web): 播报板节点详情展示上游节点信息与锚定资产
|
2026-09-17 23:28:03 +08:00 |
|
Autumn-27
|
d95f0d002d
|
feat(web): 播报板节点详情展示上游节点信息与锚定资产
上游/下游节点从只显示 id 改为悬停弹出节点名片(类型/状态/来源/时间/摘要/payload);
展开时顺带展示该节点锚定的资产(类型标签 + 可辨识文本)。
服务端 /exploration/nodes 新增 assets 字段(节点id→资产),读 exploration_anchors
并复用发现列表的资产打标逻辑;同页节点互引时用本页 items 兜底 refs 查找表。
|
2026-09-17 11:23:53 -04:00 |
|
Autumn-27
|
3b60191e86
|
refactor(engine): 移除从不执行的全局 planner/worker 空壳,就绪信号改用谓词
权威解析器(SetAuthoritativeAgentResolver)落地后,引擎每轮规划/worker 都走
per-task 的 agentsForTask 路由;applyLLM 经 buildPlannerWorker 构建、UseLLM 装入
的全局 planner/worker 从不被执行,仅充当 Ready() 的'已配置'探针。这层空壳是
功能容易被错误接线的温床(冷节点压缩此前就误接在它上面)。
改动:
- 删除 buildPlannerWorker、providerForAgent(仅前者调用)、Engine.UseLLM/snapshot/
Mode、Engine.planner/worker/mu 字段。
- Ready() 改为读 SetReadiness 注入的谓词(基于 s.llmOn);snapshotFor 去掉全局
兜底,权威解析器返回 nil 即表示该任务不可用(语义不变)。
- applyLLM 不再构建全局 pair;NewServer 注入就绪谓词。
- 相应更新 3 处依赖旧注入方式的测试(改用权威解析器注入)。
生产行为不变(全局 pair 本就从不执行);go build/vet 通过,server 测试失败集合
与基线一致(均为需 DB 的既有用例),无新增失败。
|
2026-09-17 09:40:06 -04:00 |
|
Autumn
|
cd5e779a24
|
Merge pull request #145 from Autumn-27/feat/broadcast-node-id
feat(web): 播报板每行显示节点 id
|
2026-09-17 21:19:50 +08:00 |
|
Autumn-27
|
3cde43f64f
|
feat(web): 播报板每行显示节点 id
|
2026-09-17 09:17:30 -04:00 |
|
Autumn-27
|
e78b35869c
|
chore(server): 删除已死的全局 mainAgent 与 agentsForProfile 等冗余构建
per-task 路由(agentsForTask)落地后,这些全局副本已无人使用:
- 全局 mainAgent(字段 + applyLLM 里的构造 + mainAgentRef getter):真正在跑的是
agentsForTask(t).main,全局那份从不被读取,mainAgentRef 无调用者。
- agentsForProfile:旧的任务 pin 路径,已被 agentsForTask 取代,无调用者。
- 随之失活的 profBundle 类型与 profAgents 缓存(仅初始化/清空、再无存取)一并移除。
均为编译器可确认的死代码,不改变任何执行路径;chat 的全局兜底(chatAgent/
chatAgentForProfile)、provider 缓存(provByProfile)等仍在用,保留不动。
全局 planner/worker 空壳与 Ready()/Mode() 改造留待第二步。
|
2026-09-17 09:07:40 -04:00 |
|
Autumn-27
|
564096c063
|
fix(web): 修复静态导出版任务列表页丢失全局头部
判断任务详情页的前缀 "/function/tasks/" 在 trailingSlash 静态导出下
会把列表页自身(pathname 为 "/function/tasks/")也匹配进去,导致发布
二进制里的列表页走了 full-bleed 分支,侧边栏折叠、搜索、版本号、主题
与账号入口整条 header 都不渲染;dev 与 mock demo 未开 trailingSlash
故看不出问题。判前缀前先剥掉尾部斜杠。
|
2026-09-17 08:55:04 -04:00 |
|
Autumn-27
|
55869705ad
|
Merge fix/cold-digest-wire-per-task-planner: 给 per-task planner 接上 Compactor,修复冷节点压缩从不触发
|
2026-09-17 08:53:30 -04:00 |
|
Autumn-27
|
96ff07579e
|
fix(digest): 给 per-task planner 接上 Compactor,修复冷节点压缩从不触发
引擎经权威解析器实际驱动的是 agentsForTask 构建的 per-task planner,但
cold-digest 落地时只在 buildPlannerWorker(全局 fallback pair)接了
SetCompactor,而该 pair 被解析器旁路、从不跑规划轮。结果 per-task planner
的 compactor 恒为 nil,OnPlannerRound 每轮直接 no-op —— round_no 不递增、
cold_since_round 从不盖章、digest 从不生成,与阈值无关。
在 agentsForTask 补上 SetCompactor,provider 用 plannerRuntime、model 用
task-router,与该 planner 实际运行所用模型一致(§4)。
|
2026-09-17 08:52:52 -04:00 |
|
Autumn
|
357ef6a5ab
|
Merge pull request #144 from Autumn-27/feat/exploration-broadcast-board
feat(web): 任务详情页新增探索链路播报板
|
2026-09-17 20:50:17 +08:00 |
|
Autumn-27
|
c03e008d7b
|
feat(web): 任务详情页新增探索链路播报板
按创建时间分页平铺展示探索节点,作为探索链路图的时间轴视图,
复用同一份 exploration_nodes 数据,不影响链路图。
- 后端 NodesPage/NodesByIDs/EdgesTouching:分页下推 SQL,
支持 kind/state 过滤、payload/origin 搜索、正倒序,
并补出当页节点的相邻边与对端节点
- 新增 GET /api/exploration/nodes(仅本任务节点,不含继承)
- 播报板:时间轴分行、按天分组、类型快筛、搜索防抖、
自动刷新、直播位未读提示、展开看上下游与 payload
- 补 mock,NEXT_PUBLIC_MOCK=1 下可无后端预览
|
2026-09-17 08:42:49 -04:00 |
|
Autumn-27
|
13ce2ea6e3
|
Merge PR #139: 支持按状态和判定来源筛选审批记录
合并 codex/approval-record-filters,解决与 #133 在
web/src/components/approval-records.tsx 的冲突:
- 导入同时保留 InterceptApprovalFilter 与 InterceptPending。
- load() 采用 #133 的独立待审批队列(Promise.allSettled 拉取
/intercept/pending),并把 #139 的 filter 参数透传给历史分页调用;
筛选只作用于历史记录,待处理队列不受 filter 影响,保证跨页/被筛
记录仍可审批。
- decide() 保留 #133 的乐观更新(移除 pendingRows 对应项)叠加 #139
决策后重新拉取以对齐筛选后的计数与行。
验证:前端 tsc 通过、Biome 仅剩预存告警;go build/vet 通过;
db TestInterceptApprovalFilters(8 子用例)与 server
TestInterceptFilterHTTP 在本地 dev 库均通过。
Closes #139
|
2026-09-16 11:16:26 -04:00 |
|
RuoJi6
|
2366636575
|
fix(agent): 使用通用网络安全平台角色描述 (#138)
|
2026-09-16 23:07:51 +08:00 |
|
Autumn-27
|
a15285a7ae
|
Merge remote-tracking branch 'origin/main'
|
2026-09-16 11:07:02 -04:00 |
|
Autumn-27
|
6d0614ae79
|
Merge branch 'fix/demo-finding-traffic-mock':修 demo 漏洞详情页关联流量白屏
|
2026-09-16 11:06:12 -04:00 |
|
Autumn-27
|
5fbeb35b8c
|
fix(web): 补齐 demo 漏洞详情页关联流量 mock,修白屏
PR #102 给详情页加了 FindingTrafficPanel 并请求
GET /exploration/findings/{id}/traffic,但 demo mock handler 没有
对应路由,请求落到读兜底返回 {},前端读 data.bindings.length 时
因 undefined 崩掉整个概览 Tab —— 漏洞详情页白屏、展示不出信息。
补齐关联流量的全套 mock 路由(列表/绑定/编辑/解绑/排序/报文详情/
正文分页),返回与后端 db.FindingTraffic 一致的结构并维护内存态;
为 5 条代表性漏洞预置语义匹配的流量证据,其余走空状态;列表与详情
接口补上 traffic_count。
|
2026-09-16 11:05:21 -04:00 |
|
RuoJi6
|
d5c1995641
|
fix(chat): constrain long message bubbles to the conversation pane (#137)
|
2026-09-16 22:37:11 +08:00 |
|
RuoJi6
|
f6b5c11352
|
feat(chat): 支持多类型记录 @ 引用及滚动分页 (#135)
|
2026-09-16 22:36:07 +08:00 |
|
RuoJi6
|
1c6342d8b3
|
fix(approvals): load pending requests independently of history pagination (#133)
|
2026-09-16 22:13:08 +08:00 |
|
ji ruo
|
a91c0a7223
|
feat: filter approval records by status and decision source
|
2026-09-16 17:24:15 +08:00 |
|
dingpotian
|
80a085d157
|
fix(traffic): 流量录制代理默认只监听 127.0.0.1,避免默认开放代理暴露 (#129) (#130)
|
2026-09-16 09:36:32 +08:00 |
|
Autumn-27
|
7f71f77d16
|
fix(changelog): 移除历史遗留的裸 NUL 字节,恢复文本格式
0.3.10 的 /btw 条目把 NUL 字符本身字面写进了反引号,导致整个
CHANGELOG.md 被 git 和编辑器判为二进制/显示乱码。改为可读的 \u0000。
|
2026-09-15 12:39:49 -04:00 |
|
Autumn-27
|
8ee890771f
|
docs(changelog): 定版 0.3.11
|
2026-09-15 12:37:19 -04:00 |
|
Autumn-27
|
95bcd4ef9c
|
Merge branch 'feat/noa-experimental':noa 实验性上下文压缩
|
2026-09-15 12:09:24 -04:00 |
|
Autumn-27
|
c4579637dc
|
refactor(noa): 归档集中到 <workDir>/noa 下,不再分散在任务目录
各 agent 的 noa 归档基目录由本 run 的工作目录改为全局 workDir,
统一落在 <workDir>/noa/<SessionID>/。SessionID 全局唯一,同一基目录
内互不冲突。
|
2026-09-15 12:01:38 -04:00 |
|
RuoJi6
|
04d25eb133
|
精简动作审查输入并支持审批来源定位 (#125)
* fix: 精简审查背景并区分人工消息与调度输入
* fix: 模型审查仅提交当前调用与选定背景
* feat: 审批来源定位原会话并移除 Worker 审查背景
|
2026-09-15 23:51:37 +08:00 |
|
Autumn-27
|
865d52267d
|
feat(settings): 增加实验功能开关,可开启 noa 上下文压缩
系统设置新增「实验功能」区块,内含 noa 模型驱动上下文压缩开关(默认关)。
开启后平台接入的四类 agent(planner / worker / 主 agent / 对话)由 noa 接管
上下文压缩,取代内置 compaction;关闭即恢复内置压缩。
- agent: 新增 enableNoa 共享接入器(noaadapter.Enable 唯一入口,all-or-nothing),
四类 agent 各加 noaEnabledFn 解析器 + SetNoaEnabled,每 run 读一次,切换只影响
之后启动的 run,无需重建 agent。归档落在各 agent 本 run 工作目录下(任务级持久),
session id 与 transcript 同规则。启用失败经 onWarn 上报并回退内置压缩,不中断任务。
- server: settings key noa_compaction + Manager 读写;8 处 agent 装配点注入平台级
解析器(server 5 + task_llm 3);GET/PUT /api/settings 增加字段。
- web: 系统设置页新增实验功能卡片与开关(乐观更新、失败回滚),类型与 mock 补字段。
官方默认行为不变:开关默认关闭时 noaadapter.Enable 不被调用,内置 compaction
原样工作。
|
2026-09-15 09:20:35 -04:00 |
|
Autumn-27
|
4ae319feca
|
chore(deps): 升级 norma 至 v0.4.0(引入 noa 上下文压缩能力)
|
2026-09-15 09:11:55 -04:00 |
|
Autumn
|
0d6fa880b8
|
fix(intercept): 模型裁决被代码块包裹时不再静默放行 (#126)
ParseVerdict 要求裸 JSON,而模型把 JSON 套进 markdown 围栏是常见偏差。
围栏导致解析失败后,reviewer 返回错误、Judge 走 FailAction,其默认值是
allow —— 模型判定的 DENY 会被静默降级为放行,审批记录只显示“模型输出
无法解析”,看不到模型其实给了拒绝。
解析入口前置一次围栏解包。这是确定性解包而非修复:载荷仍交由原
ParseVerdict 严格校验,重复字段、多余字段、多个对象、尾部残留的判定
全部不变。
要求开围栏与闭围栏同时存在。回复在 MaxTokens 处被截断时的形态正是
“有开围栏、无闭围栏”,对其补全会造出模型从未给出的裁决,因此这种输入
继续视为无法解析。
测试:原先断言“围栏必须拒绝”的用例改为接受,另补未闭合围栏、围栏后
带尾随文本、散文夹 JSON 三条必拒用例。
|
2026-09-15 20:40:41 +08:00 |
|
RuoJi6
|
c0d1aa6f37
|
feat(intercept): 模型审查补充任务上下文与裁决说明 (#124)
审查模型改为接收版本化 JSON:任务描述/目标/操作约束、工作目录、Worker 意图、当前轮输入,以及按 tool_use_id 配对的近期工具执行记录;末尾是完整的 tool_name 与 arguments。
- 任务约束每次审查从数据库重新读取;读取失败或约束超预算转人工。
- 历史只保留唯一配对的执行事实,排除 Agent 自述、未完成请求与平台拒绝反馈。
- 裁决改为 JSON decision(allow/ask/deny) + comment,三种结果均须说明实际操作、成功后果与命中规则。
- 所有模型裁决(含自动放行)保存实际模型输入与 SHA-256 指纹,详情页可展开。
- 对话审批卡片支持展开完整请求、模型输入、裁决与执行结果。
- 修复父目录 lockfile 导致的 Turbopack 根目录误判。
官方默认拦截规则、工具范围与优先级不变。
|
2026-09-15 20:08:12 +08:00 |
|
Autumn-27
|
234bd8bf8e
|
test(side): SSE 扫描出错直接失败,不再误判为未收到累积请求
|
2026-09-15 07:54:33 -04:00 |
|