BaaRai
e233c02314
Translate all Chinese text to English
...
Comments, doc comments, UI labels, log and error messages, LLM prompt
strings, markdown docs, test data and assertions. Identifiers, enum
keys, routes, placeholders and code structure are unchanged.
Notes:
- docs/漏洞流量证据.md renamed to docs/vulnerability-traffic-evidence.md
- tests that exercised CJK specific handling (GBK zip names, Chinese
full text search) now use ASCII equivalents; go build passes and the
test suite matches the pre translation baseline (remaining failures
need a PostgreSQL DSN and fail identically on the original)
- frontend mention syntax now uses English kinds (finding, asset, ...)
matching the backend, chat mentions tests pass
2026-10-08 23:14:34 +02:00
Autumn-27
6d8c50a12e
feat(traffic): 流量列表支持内容检索、路径/状态码/长度筛选与列排序 ( #177 )
...
- 后端 traffic.Page 改为 PageQuery:新增响应内容(FTS)、路径(url_template)、
状态码(精确/Nxx 分桶)、响应长度范围筛选,并支持按 ts/status/resp_len 排序
(尾随 id DESC 保证分页稳定);补 status/resp_len 两个索引(IF NOT EXISTS,旧库自动生效)
- server getTraffic 解析 body/path/status/resp_min/resp_max/sort/order 参数
- 前端流量页新增高级筛选行(响应内容/路径/状态码/长度范围)与可排序表头,
排序偏好持久化到 localStorage;抽出公共组件 ui/sortable-head
- 仅改动前端页走的 Page,不动 Agent 工具的 query 契约
2026-09-29 21:58:17 -04:00
Autumn-27
625f6eee50
fix(graph): 折叠后消除 digest↔finding 的反向重复边
...
yields(A→B) 与 derived_from(B→A) 互为逆关系,原图因产出/引用的 intent 不同
不成环;折叠进同一 digest 后两条边塌缩到 digest↔finding 同一对节点,分层布局
把其中一条画成叠着的反向箭头。重连后丢弃已存在正向 yields 的反向 derived_from,
保留生产方向(→成员)。
2026-09-24 13:23:06 -04:00
Autumn-27
93431651be
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
7dfd5f3210
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
ec818da8f5
fix(chat): constrain long message bubbles to the conversation pane ( #137 )
2026-09-16 22:37:11 +08:00
RuoJi6
48b26be980
feat(chat): 支持多类型记录 @ 引用及滚动分页 ( #135 )
2026-09-16 22:36:07 +08:00
RuoJi6
a601a4d21c
fix(approvals): load pending requests independently of history pagination ( #133 )
2026-09-16 22:13:08 +08:00
ji ruo
f7cd518f79
feat: filter approval records by status and decision source
2026-09-16 17:24:15 +08:00
RuoJi6
eee40408ee
精简动作审查输入并支持审批来源定位 ( #125 )
...
* fix: 精简审查背景并区分人工消息与调度输入
* fix: 模型审查仅提交当前调用与选定背景
* feat: 审批来源定位原会话并移除 Worker 审查背景
2026-09-15 23:51:37 +08:00
RuoJi6
d9628d7cc0
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
RuoJi6
9f58ff303e
feat: 为审批记录增加翻页 ( #115 )
2026-09-15 00:52:48 +08:00
Autumn-27
4882b91333
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
ji ruo
f62f1cc1a4
Merge origin/main into codex/btw-side-question
...
合入 main 的 norma v0.3.7、会话分组与流量证据更新,保留 /btw 快照和输入布局。同步自动放行、关闭流量绑定的测试断言,并等待归档测试夹具的旁路后台退出。
2026-09-11 00:54:51 +08:00
ji ruo
6378791cc2
fix(btw): 修复长对话上下文预算与旁路输入布局
2026-09-11 00:41:01 +08:00
Autumn-27
15ee599497
feat(web): 攻击链路图渲染压缩(digest)节点并收缩其成员
...
- ExploreKind/ExploreRel 增加 digest/covers 类型
- digest 节点独立样式(青色 Layers)、图例与摘要(body)
- collapseDigestGraph:active digest 覆盖的 fact/intent 成员从图中隐藏,
触及成员的边端点改接到 digest,成员内部边丢弃并去重,covers 边不渲染
- 详情抽屉展示压缩结论与被压缩成员列表,成员可点击下钻
2026-09-10 11:02:33 -04:00
Autumn-27
028d9bd25c
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
Autumn-27
e237d3c9f3
Merge PR #103 : feat: 支持会话级漏洞复测与运行状态展示
2026-09-10 10:02:39 -04:00
ji ruo
aacc303706
feat(agent): 支持持久化 /btw 旁路提问
2026-09-10 21:42:25 +08:00
ji ruo
1c77195e79
feat: 支持会话级漏洞复测与运行状态展示
2026-09-10 16:06:08 +08:00
ji ruo
009799e160
feat(intercept): 增加审批记录详情与执行审计
2026-09-10 15:10:50 +08:00
ji ruo
e6f8195500
feat: 支持漏洞关联多条流量证据
2026-09-10 13:03:20 +08:00
pphua
809e94f6e4
归档
2026-08-28 12:56:29 +08:00
pphua
32ec7fef72
抽屉优化
2026-08-25 12:05:26 +08:00
pphua
de55c824a4
fix(ui): harden pagination and selection controls
2026-08-24 19:31:09 +08:00
pphua
dcf3e35659
feat(tasks): enhance detail sessions and runtime status
2026-08-24 19:30:44 +08:00
pphua
67a7427078
feat(ui): add traffic and tool detail drawers
2026-08-24 19:30:35 +08:00
pphua
f2b340af4c
feat(tasks): add categories templates and batch controls
2026-08-24 19:29:46 +08:00
pphua
980cf82282
feat(assets): add editable company and task scopes
2026-08-24 19:29:14 +08:00
pphua
76aa2006e8
feat(llm): add profile failover and pool health
2026-08-24 19:28:18 +08:00
Autumn-27
e3594c8031
perf: 探索图减少卡顿(数据未变不重建 + 只渲染可见节点)
...
- graph-tab:轮询按签名判重,图数据无变化时跳过 setState,避免整图重建;
拖动不再被 20s 轮询打断
- ExplorationGraph:ReactFlow 加 onlyRenderVisibleElements,屏幕外节点不渲染
2026-08-18 13:18:32 -04:00
Autumn-27
e4c86c881d
refactor: 抽出共享 ExplorationGraph 画布,漏洞链路图改用 React Flow
...
- 新增 components/exploration-graph.tsx:把任务图谱 Tab 的 React Flow 渲染
(节点卡片/自动分层布局/连线/小地图/图例/点击抽屉)整体抽成 <ExplorationGraph
nodes edges> 复用组件,取 {nodes,edges} 作为 props
- graph-tab.tsx 精简为纯取数(轮询 explorationGraph)+ 复用该画布
- 漏洞详情「链路图」Tab 改用同一画布渲染 lineage 子图(从初始节点到漏洞节点),
与任务攻击链路图完全一致的观感;之前的纵向卡片版删除
纯前端重构,后端 lineage 接口不变。tsc 通过(tasks/page.tsx 的既有报错与本次无关)。
2026-08-18 13:13:48 -04:00
Autumn-27
6d12cc65a9
feat: 触发器支持编辑(前端补齐,后端早已支持 PATCH)
...
触发器 Tab 之前只能新增/删除/启停。改造「新增」表单为「新增/编辑」双模式:
- 每条触发器加「编辑」按钮 → 灌入表单进入编辑态(高亮该行),改完点「保存修改」
调 api.updateTrigger;可「取消编辑」
- 编辑时保留该触发器原有启用状态;删除正在编辑的触发器会自动退出编辑态
后端 PATCH /api/triggers/{id} 与 api.updateTrigger 早已存在,本次仅补前端 UI。
2026-08-18 12:38:14 -04:00
Autumn-27
c1ea0d51be
feat: 主 Agent 对话支持文件上传(方式1:落盘 + Read/Bash 读取)
...
- 前置:task 工作目录 <workDir>/<taskID> → <workDir>/tasks/<taskID>(改中心
ensureRunDir,与 sessions/<id> 对称;三 agent 全走它)。
- 上传接口(方案B,一个/两 scope):POST /api/chat/upload?scope=task|session&id=X,
落到 tasks|sessions/<id>/uploads/,路径安全化 + 同名加序号,返回 {name,path,size}。
- 后端注入(task main agent):chat handler 收 attachments;user 活动 Detail 存
{text,attachments} JSON 供消息渲染;发给 agent 的清单用【绝对路径】(baseDir+相对,
与落盘/CWD 完全对齐)保证一定 Read 得到。
- 前端(会话与任务共用 transcript 渲染):
· api.chatUpload + chat(attachments) + ChatAttachment 类型;
· transcript UserRow 解析 Detail JSON,气泡上方渲染附件卡片(乐观回显内联 detail);
· sessions-tab 输入区加回形针上传按钮 + 发送前 chip 预览(可移除)+ 带附件发送。
- 说明:文本/代码/二进制经 Read/Bash 处理;图片视觉不支持(norma 无 image block)。
会话(ChatAgent)面暂只共用了渲染,后端注入 + Composer 上传待后续补。
2026-08-17 11:10:03 -04:00
Autumn-27
4e36eb8974
feat: 提示词新增全局变量 DataDir + 触发合并/种子意图默认值调整
...
- prompt: 新增全局运行时变量 {{.DataDir}}(服务端数据根目录 s.m.dir),
与 {{.Now}} 一样对所有 agent(planner/worker/mainagent/goals/chat 及自定义)可用;
各 Vars 结构体加 DataDir 字段并在渲染时填入根 workDir,globalPromptVars 登记以便
校验/UI 变量列表/预览识别(纯运行时变量,不入库,无需迁移)。
- trigger_merge_mode 默认 by_task→all(schema/config/后端兜底/前端初值同步)。
- seed_first_intent 默认 true→false(走标准先规划再执行);spawn_task 不再暴露该参数,
工具建任务一律 false。
2026-08-15 00:19:14 -04:00
Autumn-27
9ad38361e3
feat(agent): 支持为每个 agent 绑定 LLM 配置(agent 级默认模型)
...
按优先级 Agent 绑定 > 任务/会话指定 > 全局激活 解析每个 agent 运行的模型,
使 planner/worker/goals/mainagent/自定义 agent 可各自走不同 profile(如 plan 用
强模型、work 用弱模型)。未绑定时行为与原先完全一致。
- db: Agent 增 llm_profile_id + SetAgentLLMProfile;schema 幂等兜底 ALTER
- server: 新增 effectiveProfileForAgent/providerForProfile/providerForAgent;
buildPlannerWorker 让 planner/worker 各自解析 provider;provider 按 profile id
缓存以共享限速器;goals/会话链同步走绑定;绑定变更热重载
- api: agent 配置接口收 llm_profile_id(三态) + 返回可选 profile 列表
- web: agent 编辑器「配置与提示词」页新增「默认模型」下拉
2026-08-11 12:15:38 -04:00
Autumn-27 and Claude Opus 4.8
aef03762c3
fix(ui): 抽屉/对话框内 Select 等弹层不再误关抽屉
...
抽屉内 Radix 弹层(Select 下拉等)portal 到抽屉外,开着弹层时点遮罩,同一次
pointerdown 被 Select 与 Sheet 两个 DismissableLayer 处理:Select 先关闭且是
discrete 事件、React 同步 flush,轮到 Sheet 判断时弹层 data-state 已翻成 closed,
"当下检测弹层是否打开"不可靠,导致抽屉被连带关闭。
改为在 pointerdown 的 capture 阶段(早于 Radix 冒泡监听)先记录"此刻有无弹层开着",
onInteractOutside 据此:开着弹层时点遮罩→只收弹层不关抽屉;无弹层时点遮罩→正常关闭。
下沉到 sheet.tsx/dialog.tsx 基础组件,一次覆盖所有含下拉的抽屉/对话框;移除 agents
页此前重复的 per-callsite 处理。已用无头浏览器验证三种场景(点选项/点遮罩收下拉/
无弹层点遮罩关闭)均正确。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-08-09 03:17:49 -04:00
Autumn-27 and Claude Opus 4.8
0bebb4bf96
feat(trigger): 新增"任务创建"触发机制(on_task_create)
...
自定义 agent 触发条件从 5 种扩展到 6 种,新增任务被创建时触发。
用 tasks.id 单调水位线 + scheduler_state 防重复,重启不补触发;
触发消息完整分行给出任务ID/描述/目标。DB 加列并带 ALTER 迁移。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-08-09 02:19:29 -04:00
Autumn-27 and Claude Opus 4.8
92041b9444
feat(agent): 触发后处理可配置(运行模式/合并模式/并发上限) + 修复抽屉内下拉误关
...
每个自定义 agent 可配置触发后如何调度运行:
- 运行模式 serial|parallel:串行排队一次一个 / 每次触发各自并发一个会话
- 合并模式 by_task|all|none(仅 serial):同任务合并 / 全部合并成一条 / 不合并
- parallel 带每 agent 最大并发上限(0=不限),超限排队等空位
实现:
- DB: agents 加 trigger_run_mode/trigger_merge_mode/trigger_max_parallel 三列
(schema + 幂等 ALTER 迁移,已发版补旧库);Agent 结构/scan/SetAgentTriggerBehavior
- 调度重构: triggerRun bool → triggerActive 计数 + triggerCfg 缓存;
StartTriggeredRun 走 pumpLocked/runAndPump 统一泵模型,nextTriggerRun 按合并模式
取(新增 mergeAllRuns);并发安全(session 按 conv-id 隔离,已确认)
- config 接口暴露/接收三字段;max_turns 改可选指针,避免触发 tab 部分 patch 清零
- 前端: 触发 tab 顶部加运行/合并模式下拉 + 最大并发输入,改动即存
修复: 抽屉(Sheet)内 Select 下拉 portal 到抽屉外,点选项/点别处被当成点击外部
误关抽屉。SelectContent 改 position=popper,并给 SheetContent 加 onInteractOutside
守卫(按 e.detail.originalEvent.target 判定弹层内点击则不关)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-08-08 04:23:09 -04:00
Autumn-27 and Claude Opus 4.8
7bc0a00694
feat(agent): 触发器新增「工具调用」条件 + 定时触发改为复选框展开
...
- 定时触发统一为前置复选框,勾选后展开「每 N 秒」+ 消息(与其它条件一致)
- 新增工具调用触发(P3 第 5 种条件):
- 选中系统工具列表(至少一个),任务执行中这些工具每次调用完成即触发 agent
- 触发消息带上任务 id/描述/目标 + 工具名 + 入参 + 返回内容(各截断 1500 字)
- 只读任务执行的 activity,触发跑的会话写 conversation_activities,天然无自触发循环
- DB: agent_triggers 加 on_tool_call/tool_call_message/tool_names 三列;
已发版,附幂等 ALTER TABLE ADD COLUMN IF NOT EXISTS 供旧库升级补列
- scheduler: 新增 last_toolcall_id 水位线(首启 seed) + fireToolCalls,以 tool_result
为水位、回连 tool_use 取入参,按选中工具集合匹配后触发
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-08-08 02:59:07 -04:00
Autumn-27 and Claude Opus 5
c102043926
fix(ui): 表单弹窗溢出( #11 ) + LLM 配置弹窗点外部误关闭( #13 )
...
#11 Textarea(field-sizing-content 自动增高)加 max-h-[45vh]+overflow-auto 到顶改内部滚动,DialogContent 加 max-h-[90dvh]+overflow-y-auto 兜底;#13 新建 Profile 弹窗加 onInteractOutside preventDefault,点外部不再关闭。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-07 12:20:15 -04:00
Autumn-27 and Claude Opus 5
9edc458fd8
fix(chat): 修复会话刷新丢失最终答案( #3 ) + 反向分页/详情懒加载/会话URL持久化
...
- 后端消息列表默认按 id 升序取最旧一页,长会话刷新后最终答案落在页外而丢失
(发新消息推进游标才重现)。改为:
- db.ConvActivityPage:反向分页,取最新/更早一页 + hasMore
- 消息接口按 since(增量)/before(更早页)/最新页 三种模式返回
- 前端聊天页:
- 打开会话仅加载最新一页,滚动到顶部再反向加载更早(保持滚动位置不跳)
- Transcript 的 UserRow/AnswerBlock 改为进入视口才拉 detail,避免打开会话即对
整页每步发详情请求
- 选中会话 id 持久化到 URL(?c=<id>),刷新回到当前会话
- 修复新建会话后被"清理失效 id"effect 误清导致停留在新建页、输入框内容与灰色
发送按钮卡死:移除该 effect + onStarted 乐观插入
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-07 11:45:33 -04:00
Autumn-27 and Claude Opus 4.8
0ef8561411
chore: ARTEX 初始化
...
ARTEX — AI 自主渗透测试系统(Go 后端 + Next.js 前端,单二进制内嵌)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-26 04:27:45 -04:00