wangjia
|
645d36323e
|
merge: worker 池化 + SDK resume 抗抖动 [tsk_74Acz1Nh4K1J]
手工正确合并(破除补救死循环):带上 src/executor/cc.ts 池化 + SDK resume + test/cc.test.ts(typecheck + 189 测试全绿)。DESIGN.md 冲突取 main 新版(多进程 re-adopt / worker 不碰 DB 描述),保留 246 行 SDK-resume 新增条目,丢弃分支过时描述。
此前补救任务只啃了 DESIGN.md 冲突文件、没带 cc.ts 代码,导致真代码一直没落地、原任务卡 exec_review、每次重试又生新补救(xbtd6GpS4NYg→Yb8eFAX2VUxZ)的死循环,至此终结。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-13 20:32:10 +08:00 |
|
maestro
|
dcf610f6fd
|
merge: maestro/tsk_oTFzOMeAU20D [tsk_oTFzOMeAU20D]
|
2026-06-13 15:51:31 +08:00 |
|
wangjia
|
d0b807460e
|
feat(executor): worker OS 级沙箱 + 资源限额(sandbox-exec / ulimit)[tsk_oTFzOMeAU20D]
进程隔离之上再加一层 OS 级硬隔离,默认关闭,便于先在一个项目灰度:
- 新增 src/executor/sandbox.ts:
- macOS sandbox-exec 写围栏 profile(allow default 基线 + deny file-write* 收口
+ 逐条放行 worktree/主仓.git/node_modules/runs/transcripts/tmp/工具缓存)。
不 deny default 全围栏——合法 git/npm/go/node 需读海量系统路径,写才是破坏向量。
- ulimit 资源上限(CPU 时间/虚拟内存/打开文件数/单文件大小),经 sh -c 下发,
exec 链保证 pid 不变(daemon 记录的 workerPid 仍是真 worker)。
- 全部由 env 解析(MAESTRO_SANDBOX*),网络默认放行(SDK 连 Anthropic)。
- orchestrator.defaultSpawnWorker 接入:开启时把命令包成
sh -c 'ulimit…; exec sandbox-exec -f profile <原命令>';关闭时行为零变化。
startOrchestrator 启动时打印生效策略,每个 run 的 profile 落 runs/<runId>/sandbox.sb。
- README 增补环境变量与「worker 沙箱」说明。
- 新增 test/sandbox.test.ts(18 例:config 解析 / profile 生成 / ulimit / 包装 / 预建目录)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-13 15:08:18 +08:00 |
|
wangjia
|
53efe32a6e
|
feat(executor): SDK 抖动 resume 续跑 + worker 池化评估暂缓 [tsk_74Acz1Nh4K1J]
可选优化任务,先评估收益再做:
- worker 池化:评估后暂缓。当前「一 run ↔ 一 pid」模型干净(判活/回收/
re-adopt 全靠每 run 一 pid+心跳,worker 与 DB 隔离 + 重启 re-adopt 天然
崩溃恢复),池化会打破该不变量且只在高并发量下兑现收益。现规模保持
「每任务一进程 + 失败从头重跑」简单模型,仅记入 DESIGN.md。
- SDK resume:实现 worker 内部健壮性小优化。cc.ts 单次会话因流式异常中断
(流断/没收到 result,非超时取消、非 max_turns 终态)且已拿到 sessionId 时,
用 resume 接着原会话续跑一次(保留已干的活,不从头重来),剩余预算不足留 60s。
与「重启 re-adopt / 整体失败 daemon 从头重跑」正交不替代;与模型回退互斥;
MAESTRO_SDK_RESUME=0 可关闭。query 改为可注入便于单测。
测试:新增 test/cc.test.ts(6 例:续跑成功/终态不续/无 session 不续/
开关关闭/超时不续/模型回退)。npm test 全绿 163/163。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-13 15:03:25 +08:00 |
|
wangjia
|
52c053baf4
|
docs: 更新 DESIGN.md/README 到 Phase 3 多进程执行架构 [tsk_-HYVwxzHIbrS]
- 写清工作模式:daemon=唯一 DB 写者+监工;worker=哑执行器(不碰 DB)
- 通讯协议:job.json / outbox.ndjson(幂等 ingest)/ heartbeat / SIGTERM
- 重启语义:reconcile 按 worker_pid+心跳判活 → re-adopt 或回收重试 + 持久化退避
- 同步更新系统总览图、数据模型(worker_pid/last_seq/next_eligible_at)、后端架构、风险、Phase 进度、env 表
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-13 15:00:42 +08:00 |
|
wangjia
|
52169e412c
|
docs: 更新 DESIGN.md v0.2 + README 到现状 [tsk_ExRzLoBj12Fr]
新增/更新:score 调度算法(§8)、双复审 PR 流程(§9)、模型分级与回退
(§10)、自动合并边界(§11,两条路径 + 逃生口)、归档与运行历史(§12)、
macOS 通知(§13)、额度透传(§14)。分期实施状态更新为 Phase 1+2+3 已落地。
README 新增:环境变量表、各功能速览(score 调度公式、双复审流程、模型分级
表、归档 API、通知触发条件、自动合并逻辑);当前状态由「脚手架」更新为实际
已落地功能。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-13 04:10:16 +08:00 |
|
wangjia
|
c6e66baa19
|
feat: Phase1 完整交付——Web 看板(frontend-design) + MCP server(12 工具) + CLI/导入器
- web/: phosphor 调度台风格纯静态看板,审批闸内联 accept/reject(拒绝必填意见),WS 实时
- src/api/static.ts: 手写静态服务(路径穿越防护),daemon 接入
- src/mcp/: stdio MCP server,@modelcontextprotocol/sdk 1.29.0,12 工具薄封装 REST
- src/cli/: 零依赖 CLI(project/task/next/approvals/import-todo),旧 todo.json 导入器
- 实测: pangolin 18 条旧任务导入 45 条;端到端验证通过
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-12 21:23:08 +08:00 |
|
wangjia
|
3172718a94
|
feat: Phase1 核心——模型/状态机 + SQLite Store(守卫+审批闸) + REST/WS API + daemon
- src/model: 复杂度分级、16 状态状态机、实体类型
- src/store: better-sqlite3 接 schema,transition 受 canTransition 守卫,
decide 审批闸(reject 必带改进意见),事件订阅广播,nextExecutable
- src/api: Fastify REST + ws 事件广播(/ws)
- src/daemon: maestrod 入口(env 配置,默认 ~/.maestro :4517)
- test: 9 个生命周期单测全过;typecheck/build 干净;REST+WS 端到端实跑验证
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-12 20:44:45 +08:00 |
|