pphua
|
4392b4fee1
|
feat(tasks): add runtime controls and inherited context
|
2026-08-24 19:29:00 +08:00 |
|
Autumn-27
|
c85b2397e8
|
chore(plan): planner 心跳默认/下限 300s(5min) → 600s(10min)
|
2026-08-13 12:23:42 -04:00 |
|
Autumn-27
|
678025f850
|
feat(planner): 触发上下文带实际变动 + 心跳触发改为「定时巡检」措辞
把 planner 每轮的触发信号从「固定一句"图发生了变化"」升级为具体变动:
- 统一 TriggerEvent{Kind,IntentID,Detail} 累加器(替换原 doneIntents):
worker 结束→{done}, report_finding→{finding,摘要}。Task.NotifyDone/新增
NotifyFinding 记录, drainTriggers 消费, Plan 参数改为 []TriggerEvent。
- renderTriggers 渲染:worker 结束→哪个意图(摘要)+worker 输出结论(取 result/text
全文,截断800字);finding→哪个意图+finding 摘要。
- worker 回调 notify()→notifyFinding(intentID,summary),report_finding 落库带上下文。
- 时间/心跳触发(triggers 为空)不再谎称"图发生了变化",开场白改为「定时巡检」并
提示复查在跑意图(steer_work 纠偏/kill_work 止损),对齐心跳的飞行中监督职责。
|
2026-08-12 12:18:06 -04:00 |
|
Autumn-27
|
4835cb57bd
|
fix(engine): 种子意图任务误触发首轮 planner(Frontier 只数 open 与 worker claim 竞态)
Run 里「跳过首轮」依赖种子意图让 frontier 非空,但 Frontier 只数 state='open',
而 Run 先起 worker、后查 frontier——worker 抢先 claim 种子意图(open→running)后,
Frontier(open) 变空 → 误发 t.Notify() → 首轮 planner 立刻触发(日志 "edge 触发")。
改为 HasActiveIntent(open 或 running):种子无论 open 还是已被 claim 成 running 都算
「有活干」,一律跳过首轮。首轮延后到种子 worker 收工(NotifyDone)/出 finding/心跳。
顺带修好重启恢复时只剩 running 意图也会误 kick 的情况。
|
2026-08-12 11:37:54 -04:00 |
|
Autumn-27
|
47ba58bda6
|
feat(planner): finding 当场唤醒 + planner N 秒心跳触发(任务参数,默认5min)
触发机制补两条(见 docs/planner-trigger-impl-plan.md):
1) finding 当场唤醒:worker 飞行中 report_finding 落库即唤醒本任务 planner,
不再等 worker 整趟收工才反应。
- worker.Execute 加 notify 入参并 SetNotify(补上 worker toolset 之前缺失的接线)
- addFinding 写 KindFinding 成功后调 notify(只对 finding,不对 fact)
- engine 两处 worker.Execute 调用传 t.Notify
2) planner N 秒心跳:距上轮规划结束/任务开始满 N 秒且期间无触发 → 触发一轮,
兜底卡死 + 唤醒去监督飞行中的 worker(steer/kill) + 周期复查。
- plannerLoop 重构为 runRound 闭包 + 三臂 select(ctx/notify/heartbeat)
- 心跳在 loop 入口臂 = 从任务 start 计时(覆盖 seed 跳过首轮),每轮结束重臂
- 新增任务参数 plan_heartbeat_seconds,下限=默认=300(5min),低于自动抬到300
- DB 迁移:schema.sql 加列 + ALTER ADD COLUMN IF NOT EXISTS 补旧库
- 全链路接线:db.CreateTask/manager/server HTTP/orchestration spawn_task
- 前端:api.createTask 传参 + 建任务表单新增"planner 心跳(分钟)"字段
|
2026-08-12 11:18:07 -04:00 |
|
Autumn-27
|
95aba396c2
|
feat(activity): 丢弃记录日志合并为单条 error,带 reason/summary/累计数
- 把「丢弃该记录」与「FK 诊断」合并成一条 error 级日志(含"丢弃"关键字,
后台只筛 error 也能看到完整信息,不再漏掉 info 级诊断行)
- reason 分类:fk_violation(23503) / unique_violation(23505) / pg_error(code) / write_error
- 带 summary 预览(截断去换行)+ 该任务累计丢弃条数,便于判断丢的是哪条、丢弃规模
- 新增 dropReason/bumpDrop/preview 辅助与 dropCnt 计数
|
2026-08-11 09:10:35 -04:00 |
|
Autumn-27
|
ea833ad992
|
feat(activity): 写失败时带 expID,并对外键(23503)现场诊断
- AppendActivity 失败日志补上 store.expID,直观看到写的是哪个 exploration
- 丢弃记录时若为外键违反(SQLSTATE 23503),调用新增的 ExplorationDiag 现场查库:
exploration 是否存在 / 引用它的 task 数 / 当前 MAX(exploration.id),
一行日志区分「父行真没了」vs「expID 拿错了」vs「外键未按 RESTRICT 建」
- 系统日志页时间戳补上年月日(原来只有时分秒)
|
2026-08-11 08:44:55 -04:00 |
|
 Autumn-27andClaude Opus 4.8
|
f86885ec3d
|
feat(task): 创建任务可选下发种子意图,worker 免等首轮规划直接开跑
新增 seed_first_intent(默认开启):创建即把"描述+目标"作为一条意图
写入 frontier,worker 轮询领取立即执行,省掉开跑前的首轮 planner LLM;
跑完由 NotifyDone 正常唤醒 planner 判定/补充。CTF 场景常一 work 解决。
- Engine.Run 首轮 kick 改为"frontier 为空才触发",一处覆盖普通/种子/恢复三种情况
- HTTP createTask 与 spawn_task 工具同步支持;bump 工具 schema 刷新 flag 使旧库生效
Co-Authored-By: Claude Opus 4.8 <[email protected]>
|
2026-08-09 02:19:40 -04:00 |
|
 Autumn-27andClaude Opus 4.8
|
abc551cc76
|
fix(worker): 写回计数按事实/资产/漏洞分开统计
原先 record_fact/insert_assets/report_finding 共用一个 wrote 计数器,
日志却统一打印成"写回 N 条事实",把资产、漏洞也算进"事实"里,容易误导
(如枚举意图插入 25 个资产 + 1 条 fact 会显示"写回 26 条事实")。
改为 WriteCounts{Facts,Assets,Findings} 分类计数,日志打印
"写回 事实1 资产25 漏洞0",Total() 保留"是否落库任何东西"的判定。
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|
2026-07-28 11:52:53 -04:00 |
|
 Autumn-27andClaude Opus 4.8
|
0ef8561411
|
chore: ARTEX 初始化
ARTEX — AI 自主渗透测试系统(Go 后端 + Next.js 前端,单二进制内嵌)。
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|
2026-07-26 04:27:45 -04:00 |
|