artex-bot
6c781f21f4
feat: Agent 任务名与对话标题双能力自动生成
...
新增 task_auto_title_enabled / chat_auto_title_enabled(默认关)、
共享 GenerateAutoTitle、spawn_task 同步写 name、对话首条先截断再异步 AI,
设置页「自动标题」双 Switch。closes #55
2026-10-27 12:33:53 +08:00
RuoJi6
3a4c66d41f
Merge pull request #48 from RuoJi6/feat/finding-dedup-1-2-3
...
feat(findings): 降低重复确认噪音——分组疑似重复建议、候选打分排序、放宽归并验收(方案1+2+3)
2026-10-25 18:37:16 -07:00
RuoJi6
5b342f9f78
fix(findings): address Grok review r1 (Codex gpt-6-astra)
...
Authored by Codex CLI (gpt-6-astra, reasoning high) after 3 gpt-6.1-sol
capacity failures. Scope sweep aggregates per suggestion, veto only kept
suggestion members on exclusion, refresh finding-case tool schemas on existing
DBs, clarify weak tier wording, keep card state across reloads, filter stale
exclusions, always reload after confirm, guard task-switch toasts.
2026-10-24 22:47:16 +08:00
RuoJi6
09e90b4170
feat(findings): grouped duplicate suggestions, ranked candidates, relaxed merged acceptance (Codex rewrite)
...
Authored entirely by Codex CLI (codex exec, reasoning effort high), one session
resumed across capacity fallbacks:
- gpt-6.1-sol (schema + initial db work, stopped at capacity)
- gpt-6-astra (db/server/agent/frontend, stopped at capacity)
- gpt-6-sol (remaining items, tests, fixes; stopped at capacity after final checks)
Schemes 1+2+3: prompt/acceptance (2..20, evidenced differences justify
independent, merged no longer blocked by unified report), group suggestions with
member table, superset reuse/subset superseded, veto-aware reject/exclusion,
anchor re-anchoring trigger, sweep after merge/reject/remove, frontend group card
with stale-response guard, candidate scoring with tier/hit_reasons/strong_total.
2026-10-24 21:55:45 +08:00
RuoJi6
b0d6ad5d76
revert(findings): reset dedup files to origin/main before Codex rewrite
...
Pure git restore (git checkout origin/main -- <files>) so the scheme 1+2+3
implementation can be re-authored entirely by Codex. No hand-written code.
2026-10-24 21:09:20 +08:00
RuoJi6
0c346a7c0a
fix(findings): address Grok review — keep folders mergeable after group reject, re-anchor groups on finding delete, guard stale suggestion list writes
2026-10-24 20:48:35 +08:00
RuoJi6
00ec84d14e
feat(findings): reduce duplicate-confirmation noise with grouped suggestions and ranked candidates
...
- Prompt: evidenced endpoint/handler/param differences justify independent; suggest only with concrete shared points
- Review acceptance: merged no longer blocked by unified report
- Suggestions: 2..N member groups, one-click group confirm with per-member exclusion, related cards cleared
- Candidates: score/tier/hit_reasons ranking, low-score kept paginated
2026-10-24 20:01:37 +08:00
ji ruo
b855370e1b
Remove flag references from agent prompts
2026-10-21 09:22:52 +08:00
ji ruo
851e3f99ed
feat: add optional credential processing with dependent switches and traffic evidence
2026-10-20 13:01:03 +08:00
ji ruo
d70dd15e11
feat: add optional task intelligence recording and views
2026-10-20 11:16:04 +08:00
ji ruo
bfc5e6236e
fix: enforce strict LLM HTTP request rate limits
2026-10-15 14:53:33 +08:00
ji ruo
9b0d1bdb3c
feat: expose scripts to review and add approval side chat
2026-10-12 11:06:38 +08:00
ji ruo
3254c90a03
新增日历式计划任务
2026-10-09 23:05:44 +08:00
ji ruo
7db7b71cdb
fix(findings): protect historical reports and verify consolidation results
2026-10-09 12:23:11 +08:00
ji ruo
24d4726aee
feat(findings): consolidate duplicate reports into expandable cases
2026-10-09 10:43:53 +08:00
榆木
25b6018818
fix(llm): 一次性 LLM 调用补挂 session id,让自定义会话头真正生效 ( #175 )
...
自定义会话头(profile 的 session_header_key)的头值取自请求 context 上的
session id,而该 id 由 agentcore 仅在挂载 transcript store 时才写入 context
(agentcore.Prompt 中 `if s.writer != nil` 那一行)。
目标拆解(第 0 轮,DecomposeGoalsWithProvider)与冷节点压缩(§4 body 调用)
都是不挂 store 的一次性调用,context 上没有 session id,quotaAwareTransport
因此跳过该头。对 opencode zen 这类「缺 x-opencode-session 直接 400
MissingSessionID」的端点,表现为「第 0 轮目标拆解 400 失败、后续 planner
轮次却完全正常」;压缩失败则只留一行日志,极难关联到本设置。
改为在这两条路径显式挂上按探索稳定的 session id(exp<N>-goals /
exp<N>-compactor),与旁路问答、连接测试已有的做法一致。附带修好用量归因:
这两个 id 能被 llmrec.parseSession 正确解析,此前这两条路径的 token 完全
记不进 llm_usage。
2026-09-29 18:21:30 +08:00
Autumn-27
b5704eb361
refactor(graph_overview): related_tasks 冷区统一走 coldDigestsRecent 并封顶
...
- coldDigestsRecent 改为接收 store 的自由函数,主概览与关联任务概览共用
- related_tasks 的 cold_digests 由无上限的 activeDigestBodies 换成
coldDigestsRecent(ts, 6):按最新成员时间排序、每源截 6,溢出 digest id
带 inherited/source_task_id 入 cold_digests_more,仍可 expand_digest 展开
- 删除随之无用的 activeDigestBodies
2026-09-24 13:11:28 -04:00
Autumn-27
3aac6754a8
refactor(graph_overview): 概览各列表加数量上限,止住上下文膨胀
...
用"最新一窗 + 计数/pull 兜底"替换 hot/cold 拆分与 balancedCap:
- recent_facts 20、recent_done_intents 12、open_intents 30(按 priority)
- cold_digests 15,按最新成员时间(max member id)降序,溢出的更旧 digest
只给裸 id(cold_digests_more),仍可 expand_digest 展开
- 新增 CountOpenIntents,frontier_open 报开放意图真实总数(与截断视图解耦)
- 删除 balancedCap/unfoldedCap/unfolded_truncated 及其测试
掉出窗口的节点不丢:facts/done_intents_total/frontier_open/findings_total
计数在,list_facts/list_findings/node_detail/expand_digest 可按需回捞
2026-09-24 13:05:27 -04:00
Autumn-27
43d1743dc0
refactor(graph_overview): finding_list 限最新 10 条,findings 计数改名 findings_total
...
- finding_list 只带最新一窗(≤10,vulnNodes 按 id 降序即最新在前),
全量/更早的用 list_findings 取
- 顶层计数字段 findings → findings_total,与 done_intents_total 命名惯例
一致、并与 finding_list 明确区分计数/明细;同步 planner 验收提示文案
2026-09-24 12:32:43 -04:00
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-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
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
RuoJi6
2366636575
fix(agent): 使用通用网络安全平台角色描述 ( #138 )
2026-09-16 23:07:51 +08: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
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
5963281582
fix(agent): 探索图工具在无任务上下文时拒绝而非 nil 崩溃
...
buildDomainReg 构造的 server 级 ToolSet 恒持 nil ExplorationStore(taskID=0),
tools 表可把其中任一工具绑给不在任务内运行的 agent(auto/pentest/reporter/
自定义/旁路提问)。node_detail 等探索图工具直接解引用 t.ts,被这类 agent 调用即
nil deref;panic 发生在 harness 自己的 goroutine 上,server 侧任何 recover 都
够不到,整进程退出,重启后调度器又拉起同一 agent 再崩,形成崩溃循环。
- 新增 readExpTool/writeExpTool + needExploration:t.ts==nil 时返回可读的工具
错误(提示改用带 task_id 的跨任务读取工具),把 17 个探索图工具切过去
- anchorOwner 补判空
- AugmentTools 出口给每个工具套 guardPanic:handler panic 降级成工具错误并打
stack,覆盖域工具/SDK/MCP/skill,进程不再陪葬
- 注明 buildDomainReg 的 nil-store 契约
2026-09-14 13:56:56 -04:00
Autumn-27
a5abe8ec3c
style(agent): 清理 compaction.go 静态检查提示
...
- generationFor 移除未使用的 genBySig 参数(连同只写不读的 map 构造)
- 两处 WriteString(x+"\n") 改为 WriteString + WriteByte,避免多余拼接
- 一处 WriteString(fmt.Sprintf(...)) 改为 fmt.Fprintf
2026-09-13 12:05:11 -04:00
Autumn-27
edbc296e29
feat(agent): add_hint 触发的规划轮显式播报「本轮由新增 hint 触发」
...
此前 add_hint 走裸 notify,触发的规划轮 triggers 为空,开场白说"无具体变动",
hint 只折在 graph_overview 里让 planner 自己发现。仿照 set_goals/NotifyGoal,
让 add_hint 记一条 hint 触发事件并带上提示文本。
- TriggerEvent 增加 Hints 字段;renderTriggers 增加 hint 分支,播报「人新增了
N 条战略提示:…」
- ToolSet 增加 notifyHint 回调 + SetNotifyHint;add_hint 整批写完统一唤醒一次
(优先 notifyHint,未接则退回裸 notify),notify 从 addOneHint 上移到 handler
- 主 agent(server.go) 与跨任务编排(orchestration.go) 均接上 Task.NotifyHint
2026-09-13 11:36:31 -04:00
Autumn-27
0b9341ac8b
refactor(agent): 精简 worker 边界#2 措辞,聚焦"绕过手段走完再下结论"
2026-09-13 10:08:34 -04:00
Autumn-27
c9bfa35113
feat(agent): node_detail 也默认给 worker,并随回看工具一起补绑
...
worker 已能通过 search_all_worker_traces / get_worker_trace 拿到 intent_id/
节点 id,配套把 node_detail 也下放给 worker,便于就地查节点完整详情。
- WorkerTools() 增加 node_detail
- 从 seedWorkerReadToolsUnbind 解绑清单去掉 node_detail(保留 list_facts/
list_companies/list_worker_traces)
- 原 seedWorkerCrossTraceRebind 泛化为 seedWorkerReadbackRebind,补绑清单追加
node_detail,flag 升到 v2 让已跑过旧迁移的库也补上
2026-09-13 09:35:18 -04:00
Autumn-27
d531ea9850
feat(agent): worker 增加跨 work 回看工具 search_all_worker_traces / get_worker_trace
...
worker 也可复用其他 work 的观察、避免重复劳动:search_all 无需先知 intent_id 按关键字全局捞命中步骤,get_worker_trace 锁定某条 work 后列步骤/就地搜/取完整内容。list_worker_traces 仍归 planner/main。
2026-09-12 13:05:01 -04:00
Autumn-27
e4c744a318
feat(search): 网络搜索新增 DeepSeek 官方来源
...
不单独配置凭据,直接复用当前激活的 LLM 配置(base_url/api_key/model)。
这个来源与 ddgs/brave/tavily 性质不同:DeepSeek 没有可直接调用的搜索接口,
搜索只存在于其 Anthropic 兼容 messages 接口内部,以 web_search_20250305
服务端工具的形式由 DeepSeek 服务端执行。由此带来几个必须让用户知道的差异,
已在设置页写明:
- 仅支持 DeepSeek 官方端点 + anthropic 协议。实测其 OpenAI 协议端点会直接以
"unknown variant, expected `function`" 拒绝一切服务端工具,web_search_options
之类的顶层字段则被静默忽略,没有可用的替代写法。
- 每次搜索额外消耗一次模型调用。
- 搜索请求由 DeepSeek 服务端发出,不经过搜索出口代理,也不计入流量留痕。
- 返回结果只有标题与链接,没有摘要(DeepSeek 只给 encrypted_content),需要正文
时仍由 WebFetch 抓取。
上述条件不做程序校验,仅在界面说明,由用户自行确认——配置不满足时搜索会在实际
调用时报错,与其它来源填错 Key 的反馈路径一致,可用「测试搜索」按钮实跑验证。
依赖 norma v0.3.8。
2026-09-12 07:13:46 -04:00
Autumn-27
abf701e03c
refactor(agent): 全局态势提示改松绑口吻,鼓励发散与跨意图线索上报
...
原措辞连用 4 个"绝不",且把上报写成"最多写进 fact"的退让,易让
worker 为自保而不敢深想、漏报跨意图关键线索。改为:唯一红线收窄到
"别真去执行别的意图",明确"发散是好事",上报改为"务必写进 fact"。
2026-09-12 06:12:55 -04:00
Autumn-27
4ccb8f4ff2
fix(agent): list_assets 按任务范围过滤,修复任务间资产互串 ( #59 )
...
list_assets 此前把任务 id 写死为 0、裸查整个共享资产库,模型又无从写出
范围过滤条件,于是把别的任务的资产(尤其 IP)当成本任务目标,测试方向
被带偏。
- 新增 QueryDSLInScope / GetByIDsInScope:只返回落在【本任务及直接关联
任务】task_scope 内的资产,按归属匹配而非字面值(根域范围含其全部子域/
服务/接口,网段范围含段内主机及服务);越权 id 静默丢弃
- 新增 scopeTargetCTE(纯 scope 归属判定,不含 anchor/tested);whereBuilder
加占位符偏移,$1 留给 taskID
- 修复 IP 直连主机(http://1.2.3.4/api )无法被网段范围命中的盲区:谓词加
OR ts.net >>= try_inet(a.domain)
- 非任务上下文(Auto/pentest, taskID<=0)无范围可依,回退全库
- QueryDSL/CountDSL 原样未动,UI 的「测试资产」视图(按生产者过滤)不受影响
2026-09-12 03:25:47 -04:00
Autumn-27
42f0ff97d3
refactor(agent): 测试范围与资产覆盖度开关解耦,移除 insert_assets 的 related 入参
...
task_scope 是任务的授权边界、资产查询的过滤基准,覆盖度开关只该决定要不要
拿它当分母算指标,不该决定要不要累积范围本身。此前关闭覆盖度会让 auto 与
agent 两条写入路径同时失效,task_scope 只剩界面手工添加的行。
- insert_assets 的自动入范围(source='auto')无条件执行,不再判 coverageDisabled
- add_task_scope 移出 coverageOnlyTools,planner / 任务内主 Agent / 目标拆解
Agent 在覆盖度关闭时照样持有;list_untested_assets 仍随开关隐藏(纯覆盖度视角)
- 移除 insert_assets 每条资产的 related 入参:唯一作用是决定要不要入范围,值又
不落库(同一资产再次登记即作废、界面上也看不出谁被判为无关),连带删除
StripCoverageParams 及其专用的 deepCopyJSONMap / nestedMap
- add_task_scope 与 goalsScopeTail 的描述改为「授权边界」优先、「覆盖度分母」其次
2026-09-11 13:33:44 -04:00
Autumn-27
557317491b
feat(assets): 任务测试资产支持 DSL 搜索
...
任务详情「测试资产」接口/服务多时不好找。复用资产管理页的 DSL
搜索(字段自动补全 + 分页),搜索始终限定在当前任务范围内。
- 抽出共享组件 asset-dsl-search.tsx,资产页与任务页复用,UI/交互一致
- QueryDSL/CountDSL 增加 taskID 参数,taskID>0 时强制 AND $N = ANY(task_ids)
并补 task 来源信息;即便 DSL 内写 task_id 也无法越出当前任务
- 任务资产 tab 接入搜索框:有 DSL 走 searchTaskAssets,否则走 taskAssets
Closes #107
2026-09-11 11:59:46 -04:00
Autumn
4d7d65a1cf
Merge pull request #106 from RuoJi6/codex/btw-side-question
...
feat: add /btw side questions
2026-09-11 23:08:46 +08:00
Autumn-27
399f971f41
fix(llm): 测试连接补发自定义会话头,修 opencode zen 400
...
testLLM 单发路径既没往 context 挂 session id,也没把 profile 的
session_header_key 透传给 cfg,导致强制要求 x-opencode-session 的端点
(opencode zen)在"对话正常"时"点击测试"却 400 MissingSessionID。
- provider.go: TestConnection 挂一个一次性随机 session id 作头值
- server.go: testLLM 透传 session_header_key,并从已存 profile 兜底
- web: api.ts / llm page 把该字段传到 /llm/test
2026-09-11 10:45:27 -04:00
ji ruo
272004c2e4
Merge upstream/main into codex/btw-side-question
...
同步官方 main 的任务会话与 spawn_task 更新,保留 /btw 旁路上下文能力。
2026-09-11 08:47:57 +08:00
Autumn-27
ee3eb22433
feat(agent): 任务内主 Agent 支持多会话,可切换且上下文可重置
...
主 Agent 会话原为一个任务恒定单例,对话历史随 transcript 只增不减、
上下文越滚越大。现引入会话分段(seq):新建会话切一个干净的 transcript
段,任务的图谱/资产/目标共享保留,旧段以只读历史随时切回查看。
- db: 新增 main_sessions 表与 activity.main_seg 列(ALTER ADD COLUMN
IF NOT EXISTS 兼容旧库);ActivitySessionFilter 按段过滤(段 0 兼容
旧 NULL 行);新增 CurrentMainSeg/ListMainSessions/NewMainSession;
per-session token 统计按 main:<seg> 分段
- agent: MainAgent.Chat 增加 mainSeg,transcript SessionID 分段
(段 0 保留旧名 exp<id>-main 兼容既有对话)
- server: parseActivitySession 支持 main:<seq>;chat handler 每轮
stamp 当前段;新增 GET main-sessions / POST main-session/new
- web: 主 Agent 分组渲染多段会话,支持新建(轻确认)、切换、旧段只读
2026-09-10 12:56:59 -04:00
ji ruo
2930c4b915
Merge origin/main into codex/btw-side-question
...
合入 main 的 norma v0.3.7、会话分组与流量证据更新,保留 /btw 快照和输入布局。同步自动放行、关闭流量绑定的测试断言,并等待归档测试夹具的旁路后台退出。
2026-09-11 00:54:51 +08:00
Autumn-27
01760aa345
refactor(agent): 精简 worker 默认提示词
...
- 边界①收敛为「只做领到的这一条意图」,去掉指纹意图的冗长举例
- report_finding 去掉流量绑定的细节段落(traffic_refs 用法另在 [B] 段)
- 删除可选流量绑定说明与结尾的措辞冗余,收尾一句话总结保留
2026-09-10 11:08:06 -04:00
Autumn-27
eb5290039a
refactor: 升级 norma v0.3.7 并精简 insert_assets/list_assets 描述
...
- go.mod/go.sum: norma v0.3.6 -> v0.3.7(含 shell_* 工具描述精简)。
- insert_assets: 顶层描述去掉与字段 schema 重复的逐类型字段罗列,
仅保留各类型条件必填字段、非 HTTP service 的 ip/domain 约束、
append 合并语义与返回结构。
- list_assets: 字段清单合并、示例保留 2 条覆盖全部语法,去掉多处
重复的 dsl 必填约束与示例。语义不变。
2026-09-10 10:46:47 -04:00
Autumn-27
97ce284c98
refactor(worker): 关闭跨 engagement 记忆,收敛默认工具面
...
- 移除 worker 的 memory 挂载:删掉两处 SetMemory 调用及 worker.go
里的 mem 字段/SetMemory 方法/opts.Memory 装配,RecallMemory、
RecordMemory 两个工具及每轮记忆自动注入不再启用。
- worker 默认工具集剔除 MultiEdit/Glob/Grep:新增 defaultToolsExcept
按名过滤 SDK 默认工具;文件精改用 Edit、检索走 Bash(grep/find)。
planner/mainagent 不受影响。
2026-09-10 10:29:35 -04:00
Autumn-27
ae22e456ce
refactor(tools): get_worker_output 移除 terminated 与 worker_name 字段
...
terminated 仅凭有无 result 记录推断,会把运行中(尚无最终结论)的 work
误报为 terminated=true,语义不可靠;worker_name 对调用方也无实际用途。
两字段一并从返回中删除,并同步更新工具描述。
2026-09-10 10:19:19 -04:00
Autumn-27
72a52e9202
fix: 修复合并后审查发现的 6 个中/高问题
...
#102 高:证据正文下载在全局 advisory lock 事务内 io.Copy 给 HTTP 客户端,
verifyFile 又要整读一遍算 SHA-256 —— 一次大文件下载或慢客户端就会挂住
全进程的证据写入。改为事务内只解析绑定元数据(Store.Binding),出锁后再校验
与串流;blob 内容寻址且 GC 有 24h 宽限,已打开的 fd 也不受 unlink 影响。
#102 高:traffic_evidence_snapshots 的 url/req_head/resp_head 直接来自目标
原始报文,未清洗就写 PG TEXT。目标返回非 UTF-8 头(GBK filename)或 NUL 会让
RecordFindingTx 整个事务回滚,已确认的漏洞完全不落库。新增
TrafficEvidenceSnapshot.Normalize(),在算 ID 之前套用仓库既有的 utf8Clean,
保证哈希与入库字节一致。
#102 中:自动绑定默认关闭,reporter 便不会传 evidence_version,
SetFindingReportVersionByNodeID 按 legacy 语义写 -1,报告永久显示「待更新」
且 UI 无处清除;老库还因 reporter_agent_seed_v1 守卫拿不到新触发文案。
触发消息改为无条件先读 get_finding_traffic(只读工具,不依赖捕获开关)并回传
版本,并加一次性迁移刷新老库中未被用户改动的默认文案。
#102 中:开关关闭时 report_finding 只要收到 traffic_refs/evidence_hint_id
就在写入前报错,模型幻觉出多余字段即丢掉一个真实漏洞。改为忽略这两个参数
照常登记,由既有的 evidence_status=not_bound 说明未绑定。
#101 中:删掉 RuleID!=0 判断后,每次模型放行都写一行带完整审计快照的
intercept_pending(单行最坏 24×8KiB 上下文 + 32KiB 输入)。开启兜底裁判的
渗透任务会灌入数百 MB,并经 task_archives 的 SELECT * 进入归档。放行行改为
只留决策元数据与执行结果,丢掉重放快照;ask/deny 路径不变。
#103 中:FindingRetestForConversation 出错时在收尾 defer 注册前就 return,
复测行永远停在 pending —— 漏洞列表常驻「复测中」,后续发起复测被去重拦下,
只有重启才能清。新增 FailPendingRetestForConversation 按会话 ID 收尾。
2026-09-10 10:15:24 -04:00
Autumn-27
e8efce605c
Merge PR #102 : feat: 支持漏洞关联多条流量证据
...
冲突解决:
- db/schema.sql: 复测表(#103 )与流量证据表(#102 )均为追加,两者保留
- server/server.go: 启动序列同时保留 seedFindingRetester 与 evidence GC
- web/src/lib/types.ts: InterceptAudit/InterceptDetail(#101 ) 与流量证据类型(#102 )并存
- findings/detail/page.tsx: 去掉 #103 带入的重复 import,仅保留 FindingRetestPanel
- chat/page.tsx: 保留 #103 的 Spinner import
2026-09-10 10:04:53 -04:00