@coralai/sps-cli 0.15.12 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/dist/commands/monitorTick.d.ts.map +1 -1
- package/dist/commands/monitorTick.js +3 -1
- package/dist/commands/monitorTick.js.map +1 -1
- package/dist/commands/pipelineTick.d.ts.map +1 -1
- package/dist/commands/pipelineTick.js +16 -3
- package/dist/commands/pipelineTick.js.map +1 -1
- package/dist/commands/tick.d.ts +1 -0
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +73 -8
- package/dist/commands/tick.js.map +1 -1
- package/dist/commands/workerLaunch.d.ts.map +1 -1
- package/dist/commands/workerLaunch.js +16 -3
- package/dist/commands/workerLaunch.js.map +1 -1
- package/dist/engines/ExecutionEngine.d.ts +29 -32
- package/dist/engines/ExecutionEngine.d.ts.map +1 -1
- package/dist/engines/ExecutionEngine.js +247 -527
- package/dist/engines/ExecutionEngine.js.map +1 -1
- package/dist/engines/MonitorEngine.d.ts +14 -27
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +91 -313
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/main.js +0 -0
- package/dist/manager/completion-judge.d.ts +27 -0
- package/dist/manager/completion-judge.d.ts.map +1 -0
- package/dist/manager/completion-judge.js +94 -0
- package/dist/manager/completion-judge.js.map +1 -0
- package/dist/manager/pm-client.d.ts +10 -0
- package/dist/manager/pm-client.d.ts.map +1 -0
- package/dist/manager/pm-client.js +253 -0
- package/dist/manager/pm-client.js.map +1 -0
- package/dist/manager/post-actions.d.ts +60 -0
- package/dist/manager/post-actions.d.ts.map +1 -0
- package/dist/manager/post-actions.js +338 -0
- package/dist/manager/post-actions.js.map +1 -0
- package/dist/manager/recovery.d.ts +39 -0
- package/dist/manager/recovery.d.ts.map +1 -0
- package/dist/manager/recovery.js +135 -0
- package/dist/manager/recovery.js.map +1 -0
- package/dist/manager/resource-limiter.d.ts +44 -0
- package/dist/manager/resource-limiter.d.ts.map +1 -0
- package/dist/manager/resource-limiter.js +79 -0
- package/dist/manager/resource-limiter.js.map +1 -0
- package/dist/manager/supervisor.d.ts +88 -0
- package/dist/manager/supervisor.d.ts.map +1 -0
- package/dist/manager/supervisor.js +267 -0
- package/dist/manager/supervisor.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -684,6 +684,8 @@ sps monitor tick my-project --json
|
|
|
684
684
|
| `AGENTS.md` | Codex Worker 的项目规则 | 是 |
|
|
685
685
|
| `.jarvis_task_prompt.txt` | 每次任务的具体描述(每个 worktree 独立生成) | 否(.gitignore) |
|
|
686
686
|
| `.jarvis/merge.sh` | 合并脚本(MR_MODE=none 时做 git merge,MR_MODE=create 时调 GitLab API 创建 MR) | 否(.gitignore) |
|
|
687
|
+
| `docs/DECISIONS.md` | 项目知识库——架构决策和技术选择 | 是(Worker 自动维护) |
|
|
688
|
+
| `docs/CHANGELOG.md` | 项目知识库——变更记录 | 是(Worker 自动维护) |
|
|
687
689
|
|
|
688
690
|
### 工作原理
|
|
689
691
|
|
|
@@ -693,6 +695,15 @@ sps monitor tick my-project --json
|
|
|
693
695
|
4. 任务特有信息(seq、分支名、描述)写入 `.jarvis_task_prompt.txt`,通过 stdin 传给 Worker(print 模式)或通过 tmux paste 传入(interactive 模式)
|
|
694
696
|
5. `.jarvis/merge.sh` 在每个 worktree 中自动生成,Worker 在 push 后运行此脚本完成合并或 MR 创建
|
|
695
697
|
|
|
698
|
+
### 项目知识库
|
|
699
|
+
|
|
700
|
+
每个 Worker 在任务 prompt 中被要求:
|
|
701
|
+
|
|
702
|
+
- **开始前**:阅读 `docs/DECISIONS.md` 和 `docs/CHANGELOG.md`,了解前序任务的决策和变更
|
|
703
|
+
- **完成后**:将自己的架构决策追加到 `docs/DECISIONS.md`,变更摘要追加到 `docs/CHANGELOG.md`
|
|
704
|
+
|
|
705
|
+
这些文件随代码一起合并到目标分支,下一个 Worker 创建 worktree 时自动继承,实现跨任务的知识传递。
|
|
706
|
+
|
|
696
707
|
### 自定义项目规则
|
|
697
708
|
|
|
698
709
|
生成的 CLAUDE.md 包含"Project-Specific Rules"占位区,你可以在此添加:
|
|
@@ -897,6 +908,13 @@ workflow-cli/
|
|
|
897
908
|
│ │ ├── ExecutionEngine.ts # 执行链
|
|
898
909
|
│ │ ├── CloseoutEngine.ts # QA 闭环
|
|
899
910
|
│ │ └── MonitorEngine.ts # 异常检测
|
|
911
|
+
│ ├── manager/ # Worker 进程管理模块(v0.16.0)
|
|
912
|
+
│ │ ├── supervisor.ts # fd 重定向 spawn, child handle, exit 回调
|
|
913
|
+
│ │ ├── completion-judge.ts # git 产出检查, marker/keyword 检测
|
|
914
|
+
│ │ ├── post-actions.ts # merge + PM update + slot release + notify
|
|
915
|
+
│ │ ├── pm-client.ts # 轻量 PM 操作 (Plane/Trello/Markdown)
|
|
916
|
+
│ │ ├── resource-limiter.ts # 全局 worker 数上限 + 内存检查
|
|
917
|
+
│ │ └── recovery.ts # tick 重启后 PID 扫描恢复
|
|
900
918
|
│ ├── interfaces/ # 抽象接口
|
|
901
919
|
│ │ ├── TaskBackend.ts # PM 后端接口
|
|
902
920
|
│ │ ├── WorkerProvider.ts # Worker 接口
|
|
@@ -924,6 +942,53 @@ workflow-cli/
|
|
|
924
942
|
|
|
925
943
|
---
|
|
926
944
|
|
|
945
|
+
## Manager 模块 (v0.16.0)
|
|
946
|
+
|
|
947
|
+
v0.16.0 新增 `src/manager/` 目录,将 Worker 进程管理从 Engine 中解耦为独立模块,作为 tick 内部模块运行(非独立守护进程)。
|
|
948
|
+
|
|
949
|
+
| 模块 | 行数 | 职责 |
|
|
950
|
+
|------|------|------|
|
|
951
|
+
| `supervisor.ts` | 288 | fd 重定向 spawn(OS 级保证 output 写入),持有 child handle,exit 回调触发后置流程,三层环境变量合并(系统→全局凭据→项目配置) |
|
|
952
|
+
| `completion-judge.ts` | 110 | git 产出检查(分支是否已推送/已合并),auto-push,marker 文件检测,完成关键词匹配 |
|
|
953
|
+
| `post-actions.ts` | 412 | Worker 退出后完整后置链:merge → PM 状态更新 → slot 释放 → 通知 |
|
|
954
|
+
| `pm-client.ts` | 294 | 轻量 PM 操作封装,支持 Plane/Trello/Markdown 三种后端 |
|
|
955
|
+
| `resource-limiter.ts` | 103 | 全局 worker 数上限检查 + 内存检查 + 启动间隔控制 |
|
|
956
|
+
| `recovery.ts` | 205 | tick 重启后通过 PID 扫描恢复 orphan worker 进程 |
|
|
957
|
+
|
|
958
|
+
**改造效果:**
|
|
959
|
+
- ExecutionEngine 从 1219 行缩减至 916 行(删除 attemptResume, completeAndRelease)
|
|
960
|
+
- MonitorEngine 从 974 行缩减至 750 行(删除直接 PID/tmux 检测)
|
|
961
|
+
- tick.ts 新增约 80 行(初始化共享 Manager 模块,启动时执行 Recovery)
|
|
962
|
+
|
|
963
|
+
---
|
|
964
|
+
|
|
965
|
+
## 标签技能注入 (v0.16.0)
|
|
966
|
+
|
|
967
|
+
通过 PM 卡片标签驱动 Worker 专业能力注入,无需修改代码即可为不同任务定制 Worker 行为。
|
|
968
|
+
|
|
969
|
+
**机制:**
|
|
970
|
+
- PM 卡片添加 `skill:xxx` 标签 → 自动加载 `skills/worker-profiles/xxx.md` 到 Worker prompt
|
|
971
|
+
- 支持多个 `skill:` 标签叠加注入
|
|
972
|
+
- 项目可通过 `DEFAULT_WORKER_SKILLS` 配置默认技能,卡片标签可覆盖项目默认
|
|
973
|
+
|
|
974
|
+
**Prompt 组装顺序:**
|
|
975
|
+
1. Skill Profiles(技能模板)
|
|
976
|
+
2. Project Rules(CLAUDE.md / AGENTS.md)
|
|
977
|
+
3. Project Knowledge(docs/DECISIONS.md, docs/CHANGELOG.md)
|
|
978
|
+
4. Task(.jarvis_task_prompt.txt)
|
|
979
|
+
|
|
980
|
+
**内置技能模板:**
|
|
981
|
+
|
|
982
|
+
| 文件 | 用途 |
|
|
983
|
+
|------|------|
|
|
984
|
+
| `skills/worker-profiles/_template.md` | 创建新技能的模板 |
|
|
985
|
+
| `skills/worker-profiles/typescript.md` | TypeScript 项目编码规范 |
|
|
986
|
+
| `skills/worker-profiles/phaser.md` | Phaser 游戏框架开发指南 |
|
|
987
|
+
|
|
988
|
+
**新增技能零代码:** 只需创建 md 文件到 `skills/worker-profiles/` 目录,然后在 PM 卡片上添加对应的 `skill:xxx` 标签即可。
|
|
989
|
+
|
|
990
|
+
---
|
|
991
|
+
|
|
927
992
|
## License
|
|
928
993
|
|
|
929
994
|
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitorTick.d.ts","sourceRoot":"","sources":["../../src/commands/monitorTick.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"monitorTick.d.ts","sourceRoot":"","sources":["../../src/commands/monitorTick.ts"],"names":[],"mappings":"AAMA,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProjectContext } from '../core/context.js';
|
|
2
2
|
import { MonitorEngine } from '../engines/MonitorEngine.js';
|
|
3
|
+
import { ProcessSupervisor } from '../manager/supervisor.js';
|
|
3
4
|
import { createTaskBackend, createWorkerProvider, createRepoBackend, createNotifier } from '../providers/registry.js';
|
|
4
5
|
import { Logger } from '../core/logger.js';
|
|
5
6
|
export async function executeMonitorTick(project, flags) {
|
|
@@ -23,7 +24,8 @@ export async function executeMonitorTick(project, flags) {
|
|
|
23
24
|
const workerProvider = createWorkerProvider(ctx.config);
|
|
24
25
|
const repoBackend = createRepoBackend(ctx.config);
|
|
25
26
|
const notifier = createNotifier(ctx.config);
|
|
26
|
-
const
|
|
27
|
+
const supervisor = new ProcessSupervisor();
|
|
28
|
+
const engine = new MonitorEngine(ctx, taskBackend, workerProvider, repoBackend, notifier, supervisor);
|
|
27
29
|
const result = await engine.tick();
|
|
28
30
|
if (jsonOutput) {
|
|
29
31
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitorTick.js","sourceRoot":"","sources":["../../src/commands/monitorTick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACtH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,KAA8B;IAE9B,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAEhC,IAAI,GAAmB,CAAC;IACxB,IAAI,CAAC;QACH,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"monitorTick.js","sourceRoot":"","sources":["../../src/commands/monitorTick.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelineTick.d.ts","sourceRoot":"","sources":["../../src/commands/pipelineTick.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipelineTick.d.ts","sourceRoot":"","sources":["../../src/commands/pipelineTick.ts"],"names":[],"mappings":"AAUA,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ProjectContext } from '../core/context.js';
|
|
2
2
|
import { ExecutionEngine } from '../engines/ExecutionEngine.js';
|
|
3
|
-
import { createTaskBackend,
|
|
3
|
+
import { createTaskBackend, createRepoBackend, createNotifier } from '../providers/registry.js';
|
|
4
|
+
import { ProcessSupervisor } from '../manager/supervisor.js';
|
|
5
|
+
import { CompletionJudge } from '../manager/completion-judge.js';
|
|
6
|
+
import { PostActions } from '../manager/post-actions.js';
|
|
7
|
+
import { ResourceLimiter } from '../manager/resource-limiter.js';
|
|
8
|
+
import { createPMClient } from '../manager/pm-client.js';
|
|
4
9
|
import { Logger } from '../core/logger.js';
|
|
5
10
|
export async function executePipelineTick(project, flags) {
|
|
6
11
|
const log = new Logger('pipeline', project);
|
|
@@ -21,10 +26,18 @@ export async function executePipelineTick(project, flags) {
|
|
|
21
26
|
process.exit(3);
|
|
22
27
|
}
|
|
23
28
|
const taskBackend = createTaskBackend(ctx.config);
|
|
24
|
-
const workerProvider = createWorkerProvider(ctx.config);
|
|
25
29
|
const repoBackend = createRepoBackend(ctx.config);
|
|
26
30
|
const notifier = createNotifier(ctx.config);
|
|
27
|
-
const
|
|
31
|
+
const supervisor = new ProcessSupervisor();
|
|
32
|
+
const completionJudge = new CompletionJudge();
|
|
33
|
+
const resourceLimiter = new ResourceLimiter({
|
|
34
|
+
maxGlobalWorkers: parseInt(process.env.SPS_MANAGER_MAX_WORKERS || '30', 10),
|
|
35
|
+
staggerDelayMs: parseInt(process.env.SPS_MANAGER_STAGGER_MS || '5000', 10),
|
|
36
|
+
maxMemoryPercent: parseInt(process.env.SPS_MANAGER_MAX_MEMORY_PERCENT || '80', 10),
|
|
37
|
+
});
|
|
38
|
+
const pmClient = createPMClient(ctx.config);
|
|
39
|
+
const postActions = new PostActions(pmClient, supervisor, resourceLimiter, notifier);
|
|
40
|
+
const engine = new ExecutionEngine(ctx, taskBackend, repoBackend, supervisor, completionJudge, postActions, resourceLimiter, notifier);
|
|
28
41
|
const result = await engine.tick({ dryRun });
|
|
29
42
|
if (jsonOutput) {
|
|
30
43
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelineTick.js","sourceRoot":"","sources":["../../src/commands/pipelineTick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"pipelineTick.js","sourceRoot":"","sources":["../../src/commands/pipelineTick.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tick.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* sps tick project-a project-b project-c
|
|
6
6
|
*
|
|
7
7
|
* Each project is fully isolated (own context, providers, engines, lock, state).
|
|
8
|
+
* Manager modules (Supervisor, ResourceLimiter, CompletionJudge) are shared globally.
|
|
8
9
|
* Projects are ticked sequentially within each cycle. One project's error
|
|
9
10
|
* does not affect others.
|
|
10
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../src/commands/tick.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../src/commands/tick.ts"],"names":[],"mappings":"AAsIA;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAqJf"}
|
package/dist/commands/tick.js
CHANGED
|
@@ -7,7 +7,40 @@ import { ExecutionEngine } from '../engines/ExecutionEngine.js';
|
|
|
7
7
|
import { CloseoutEngine } from '../engines/CloseoutEngine.js';
|
|
8
8
|
import { MonitorEngine } from '../engines/MonitorEngine.js';
|
|
9
9
|
import { createTaskBackend, createWorkerProvider, createRepoBackend, createNotifier } from '../providers/registry.js';
|
|
10
|
+
import { ProcessSupervisor } from '../manager/supervisor.js';
|
|
11
|
+
import { CompletionJudge } from '../manager/completion-judge.js';
|
|
12
|
+
import { PostActions } from '../manager/post-actions.js';
|
|
13
|
+
import { ResourceLimiter } from '../manager/resource-limiter.js';
|
|
14
|
+
import { Recovery } from '../manager/recovery.js';
|
|
15
|
+
import { createPMClient } from '../manager/pm-client.js';
|
|
10
16
|
const DEFAULT_INTERVAL_S = 30;
|
|
17
|
+
// ─── Shared Manager modules (global across all projects) ──────
|
|
18
|
+
let sharedSupervisor = null;
|
|
19
|
+
let sharedResourceLimiter = null;
|
|
20
|
+
let sharedCompletionJudge = null;
|
|
21
|
+
function getSharedModules() {
|
|
22
|
+
if (!sharedSupervisor) {
|
|
23
|
+
sharedSupervisor = new ProcessSupervisor();
|
|
24
|
+
}
|
|
25
|
+
if (!sharedResourceLimiter) {
|
|
26
|
+
const maxWorkers = parseInt(process.env.SPS_MANAGER_MAX_WORKERS || '30', 10);
|
|
27
|
+
const staggerMs = parseInt(process.env.SPS_MANAGER_STAGGER_MS || '5000', 10);
|
|
28
|
+
const maxMem = parseInt(process.env.SPS_MANAGER_MAX_MEMORY_PERCENT || '80', 10);
|
|
29
|
+
sharedResourceLimiter = new ResourceLimiter({
|
|
30
|
+
maxGlobalWorkers: maxWorkers,
|
|
31
|
+
staggerDelayMs: staggerMs,
|
|
32
|
+
maxMemoryPercent: maxMem,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (!sharedCompletionJudge) {
|
|
36
|
+
sharedCompletionJudge = new CompletionJudge();
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
supervisor: sharedSupervisor,
|
|
40
|
+
resourceLimiter: sharedResourceLimiter,
|
|
41
|
+
completionJudge: sharedCompletionJudge,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
11
44
|
function createRunner(project) {
|
|
12
45
|
const log = new Logger('tick', project);
|
|
13
46
|
let ctx;
|
|
@@ -26,7 +59,7 @@ function createRunner(project) {
|
|
|
26
59
|
fullLog.info('Another tick is running for this project, skipping');
|
|
27
60
|
return null;
|
|
28
61
|
}
|
|
29
|
-
// Create providers
|
|
62
|
+
// Create providers
|
|
30
63
|
let taskBackend, workerProvider, repoBackend, notifier;
|
|
31
64
|
try {
|
|
32
65
|
taskBackend = createTaskBackend(ctx.config);
|
|
@@ -40,6 +73,11 @@ function createRunner(project) {
|
|
|
40
73
|
releaseTickLock(ctx.paths.tickLockFile);
|
|
41
74
|
return null;
|
|
42
75
|
}
|
|
76
|
+
// Get shared Manager modules
|
|
77
|
+
const { supervisor, resourceLimiter, completionJudge } = getSharedModules();
|
|
78
|
+
// Create per-project Manager modules
|
|
79
|
+
const pmClient = createPMClient(ctx.config);
|
|
80
|
+
const postActions = new PostActions(pmClient, supervisor, resourceLimiter, notifier);
|
|
43
81
|
return {
|
|
44
82
|
project,
|
|
45
83
|
ctx,
|
|
@@ -48,8 +86,8 @@ function createRunner(project) {
|
|
|
48
86
|
notifier,
|
|
49
87
|
scheduler: new SchedulerEngine(ctx, taskBackend, notifier),
|
|
50
88
|
closeout: new CloseoutEngine(ctx, taskBackend, repoBackend, workerProvider, notifier),
|
|
51
|
-
execution: new ExecutionEngine(ctx, taskBackend,
|
|
52
|
-
monitor: new MonitorEngine(ctx, taskBackend, workerProvider, repoBackend, notifier),
|
|
89
|
+
execution: new ExecutionEngine(ctx, taskBackend, repoBackend, supervisor, completionJudge, postActions, resourceLimiter, notifier),
|
|
90
|
+
monitor: new MonitorEngine(ctx, taskBackend, workerProvider, repoBackend, notifier, supervisor),
|
|
53
91
|
done: false,
|
|
54
92
|
fatalError: false,
|
|
55
93
|
tickNum: 0,
|
|
@@ -64,6 +102,7 @@ function createRunner(project) {
|
|
|
64
102
|
* sps tick project-a project-b project-c
|
|
65
103
|
*
|
|
66
104
|
* Each project is fully isolated (own context, providers, engines, lock, state).
|
|
105
|
+
* Manager modules (Supervisor, ResourceLimiter, CompletionJudge) are shared globally.
|
|
67
106
|
* Projects are ticked sequentially within each cycle. One project's error
|
|
68
107
|
* does not affect others.
|
|
69
108
|
*
|
|
@@ -94,6 +133,33 @@ export async function executeTick(projects, flags) {
|
|
|
94
133
|
if (runners.length > 1) {
|
|
95
134
|
globalLog.info(`Managing ${runners.length} projects: ${runners.map((r) => r.project).join(', ')}`);
|
|
96
135
|
}
|
|
136
|
+
// ─── Recovery: restore active workers from previous tick ───────
|
|
137
|
+
const { supervisor, completionJudge, resourceLimiter } = getSharedModules();
|
|
138
|
+
try {
|
|
139
|
+
const projectInfos = runners.map(r => ({
|
|
140
|
+
name: r.project,
|
|
141
|
+
config: r.ctx.config,
|
|
142
|
+
stateFile: r.ctx.paths.stateFile,
|
|
143
|
+
logsDir: r.ctx.paths.logsDir,
|
|
144
|
+
}));
|
|
145
|
+
// Per-project PostActions factory (each project uses its own PM config)
|
|
146
|
+
const runnerMap = new Map(runners.map(r => [r.project, r]));
|
|
147
|
+
const postActionsFactory = (config) => {
|
|
148
|
+
const pmClient = createPMClient(config);
|
|
149
|
+
const runner = runnerMap.get(config.PROJECT_NAME);
|
|
150
|
+
return new PostActions(pmClient, supervisor, resourceLimiter, runner?.notifier || null);
|
|
151
|
+
};
|
|
152
|
+
const recovery = new Recovery(supervisor, completionJudge, postActionsFactory, resourceLimiter);
|
|
153
|
+
const result = await recovery.recover(projectInfos);
|
|
154
|
+
if (result.found > 0) {
|
|
155
|
+
globalLog.info(`Recovery: ${result.found} workers found, ${result.alive} alive, ` +
|
|
156
|
+
`${result.completed} completed, ${result.failed} failed`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
161
|
+
globalLog.warn(`Recovery failed (non-fatal): ${msg}`);
|
|
162
|
+
}
|
|
97
163
|
// Cleanup all locks on exit
|
|
98
164
|
const cleanupAll = () => {
|
|
99
165
|
for (const runner of runners) {
|
|
@@ -110,6 +176,8 @@ export async function executeTick(projects, flags) {
|
|
|
110
176
|
const result = await runOneTick(runner, dryRun);
|
|
111
177
|
results.push(result);
|
|
112
178
|
}
|
|
179
|
+
// Wait for any exit callbacks / PostActions to complete
|
|
180
|
+
await supervisor.drainPendingActions();
|
|
113
181
|
if (jsonOutput) {
|
|
114
182
|
outputJson(runners.length === 1 ? results[0] : results);
|
|
115
183
|
}
|
|
@@ -122,7 +190,6 @@ export async function executeTick(projects, flags) {
|
|
|
122
190
|
runner.log.info(`Starting continuous tick (interval=${interval}s)`);
|
|
123
191
|
}
|
|
124
192
|
while (true) {
|
|
125
|
-
// Run one tick for each active project
|
|
126
193
|
for (const runner of runners) {
|
|
127
194
|
if (runner.done || runner.fatalError)
|
|
128
195
|
continue;
|
|
@@ -132,7 +199,6 @@ export async function executeTick(projects, flags) {
|
|
|
132
199
|
outputJson(result);
|
|
133
200
|
}
|
|
134
201
|
else {
|
|
135
|
-
// Compact summary
|
|
136
202
|
const actionsCount = result.steps.reduce((sum, s) => sum + (s.actions?.filter((a) => a.result === 'ok').length || 0), 0);
|
|
137
203
|
if (actionsCount > 0) {
|
|
138
204
|
const summary = result.steps
|
|
@@ -149,7 +215,6 @@ export async function executeTick(projects, flags) {
|
|
|
149
215
|
}
|
|
150
216
|
}
|
|
151
217
|
}
|
|
152
|
-
// Check auto-stop for this project
|
|
153
218
|
const allDone = await checkAllDone(runner.ctx, runner.taskBackend);
|
|
154
219
|
if (allDone) {
|
|
155
220
|
runner.log.ok('All cards done, no active workers — project complete.');
|
|
@@ -157,14 +222,12 @@ export async function executeTick(projects, flags) {
|
|
|
157
222
|
releaseTickLock(runner.ctx.paths.tickLockFile);
|
|
158
223
|
runner.done = true;
|
|
159
224
|
}
|
|
160
|
-
// Fatal error for this project
|
|
161
225
|
if (result.exitCode === 3) {
|
|
162
226
|
runner.log.error('Fatal error, stopping tick for this project');
|
|
163
227
|
releaseTickLock(runner.ctx.paths.tickLockFile);
|
|
164
228
|
runner.fatalError = true;
|
|
165
229
|
}
|
|
166
230
|
}
|
|
167
|
-
// Check if ALL projects are done or errored
|
|
168
231
|
const allFinished = runners.every((r) => r.done || r.fatalError);
|
|
169
232
|
if (allFinished) {
|
|
170
233
|
const doneCount = runners.filter((r) => r.done).length;
|
|
@@ -175,6 +238,8 @@ export async function executeTick(projects, flags) {
|
|
|
175
238
|
cleanupAll();
|
|
176
239
|
process.exit(errorCount > 0 ? 1 : 0);
|
|
177
240
|
}
|
|
241
|
+
// Drain any pending PostActions before sleeping
|
|
242
|
+
await supervisor.drainPendingActions();
|
|
178
243
|
await sleep(interval * 1000);
|
|
179
244
|
}
|
|
180
245
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tick.js","sourceRoot":"","sources":["../../src/commands/tick.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tick.js","sourceRoot":"","sources":["../../src/commands/tick.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerLaunch.d.ts","sourceRoot":"","sources":["../../src/commands/workerLaunch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workerLaunch.d.ts","sourceRoot":"","sources":["../../src/commands/workerLaunch.ts"],"names":[],"mappings":"AAUA,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ProjectContext } from '../core/context.js';
|
|
2
2
|
import { ExecutionEngine } from '../engines/ExecutionEngine.js';
|
|
3
|
-
import { createTaskBackend,
|
|
3
|
+
import { createTaskBackend, createRepoBackend, createNotifier } from '../providers/registry.js';
|
|
4
|
+
import { ProcessSupervisor } from '../manager/supervisor.js';
|
|
5
|
+
import { CompletionJudge } from '../manager/completion-judge.js';
|
|
6
|
+
import { PostActions } from '../manager/post-actions.js';
|
|
7
|
+
import { ResourceLimiter } from '../manager/resource-limiter.js';
|
|
8
|
+
import { createPMClient } from '../manager/pm-client.js';
|
|
4
9
|
import { Logger } from '../core/logger.js';
|
|
5
10
|
export async function executeWorkerLaunch(project, seq, flags) {
|
|
6
11
|
const log = new Logger('worker-launch', project);
|
|
@@ -30,10 +35,18 @@ export async function executeWorkerLaunch(project, seq, flags) {
|
|
|
30
35
|
process.exit(3);
|
|
31
36
|
}
|
|
32
37
|
const taskBackend = createTaskBackend(ctx.config);
|
|
33
|
-
const workerProvider = createWorkerProvider(ctx.config);
|
|
34
38
|
const repoBackend = createRepoBackend(ctx.config);
|
|
35
39
|
const notifier = createNotifier(ctx.config);
|
|
36
|
-
const
|
|
40
|
+
const supervisor = new ProcessSupervisor();
|
|
41
|
+
const completionJudge = new CompletionJudge();
|
|
42
|
+
const resourceLimiter = new ResourceLimiter({
|
|
43
|
+
maxGlobalWorkers: parseInt(process.env.SPS_MANAGER_MAX_WORKERS || '30', 10),
|
|
44
|
+
staggerDelayMs: parseInt(process.env.SPS_MANAGER_STAGGER_MS || '5000', 10),
|
|
45
|
+
maxMemoryPercent: parseInt(process.env.SPS_MANAGER_MAX_MEMORY_PERCENT || '80', 10),
|
|
46
|
+
});
|
|
47
|
+
const pmClient = createPMClient(ctx.config);
|
|
48
|
+
const postActions = new PostActions(pmClient, supervisor, resourceLimiter, notifier);
|
|
49
|
+
const engine = new ExecutionEngine(ctx, taskBackend, repoBackend, supervisor, completionJudge, postActions, resourceLimiter, notifier);
|
|
37
50
|
const result = await engine.launchSingle(seq, { dryRun });
|
|
38
51
|
if (jsonOutput) {
|
|
39
52
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerLaunch.js","sourceRoot":"","sources":["../../src/commands/workerLaunch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"workerLaunch.js","sourceRoot":"","sources":["../../src/commands/workerLaunch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import type { ProjectContext } from '../core/context.js';
|
|
2
2
|
import type { TaskBackend } from '../interfaces/TaskBackend.js';
|
|
3
|
-
import type { WorkerProvider } from '../interfaces/WorkerProvider.js';
|
|
4
3
|
import type { RepoBackend } from '../interfaces/RepoBackend.js';
|
|
5
4
|
import type { Notifier } from '../interfaces/Notifier.js';
|
|
6
5
|
import type { CommandResult } from '../models/types.js';
|
|
6
|
+
import { ProcessSupervisor } from '../manager/supervisor.js';
|
|
7
|
+
import { CompletionJudge } from '../manager/completion-judge.js';
|
|
8
|
+
import { PostActions } from '../manager/post-actions.js';
|
|
9
|
+
import { ResourceLimiter } from '../manager/resource-limiter.js';
|
|
7
10
|
export declare class ExecutionEngine {
|
|
8
11
|
private ctx;
|
|
9
12
|
private taskBackend;
|
|
10
|
-
private workerProvider;
|
|
11
13
|
private repoBackend;
|
|
14
|
+
private supervisor;
|
|
15
|
+
private completionJudge;
|
|
16
|
+
private postActions;
|
|
17
|
+
private resourceLimiter;
|
|
12
18
|
private notifier?;
|
|
13
19
|
private log;
|
|
14
|
-
constructor(ctx: ProjectContext, taskBackend: TaskBackend,
|
|
20
|
+
constructor(ctx: ProjectContext, taskBackend: TaskBackend, repoBackend: RepoBackend, supervisor: ProcessSupervisor, completionJudge: CompletionJudge, postActions: PostActions, resourceLimiter: ResourceLimiter, notifier?: Notifier | undefined);
|
|
15
21
|
tick(opts?: {
|
|
16
22
|
dryRun?: boolean;
|
|
17
23
|
}): Promise<CommandResult>;
|
|
@@ -24,17 +30,12 @@ export declare class ExecutionEngine {
|
|
|
24
30
|
}): Promise<CommandResult>;
|
|
25
31
|
private shouldSkip;
|
|
26
32
|
/**
|
|
27
|
-
* Check an Inprogress card:
|
|
28
|
-
* This is the critical Inprogress → QA bridge (01 §10.2).
|
|
33
|
+
* Check an Inprogress card: verify worker is still running or handled by exit callback.
|
|
29
34
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* BLOCKED → mark BLOCKED
|
|
35
|
-
* ALIVE → no action (worker still working)
|
|
36
|
-
* DEAD → mark STALE-RUNTIME (handled by MonitorEngine)
|
|
37
|
-
* DEAD_EXCEEDED → mark STALE-RUNTIME, notify
|
|
35
|
+
* The Supervisor exit callback triggers CompletionJudge → PostActions automatically,
|
|
36
|
+
* so this method only needs to:
|
|
37
|
+
* - Update heartbeat if worker is still running
|
|
38
|
+
* - Confirm completion if PostActions already processed it
|
|
38
39
|
*/
|
|
39
40
|
private checkInprogressCard;
|
|
40
41
|
/**
|
|
@@ -47,6 +48,11 @@ export declare class ExecutionEngine {
|
|
|
47
48
|
* Steps 4-7 per 01 §4.3.
|
|
48
49
|
*/
|
|
49
50
|
private launchCard;
|
|
51
|
+
/**
|
|
52
|
+
* Called by Supervisor when a worker process exits.
|
|
53
|
+
* Wires CompletionJudge → PostActions to handle completion or failure.
|
|
54
|
+
*/
|
|
55
|
+
private onWorkerExit;
|
|
50
56
|
/**
|
|
51
57
|
* Build branch name from card: feature/<seq>-<slug>
|
|
52
58
|
*/
|
|
@@ -71,33 +77,24 @@ export declare class ExecutionEngine {
|
|
|
71
77
|
*/
|
|
72
78
|
private writeMergeScript;
|
|
73
79
|
/**
|
|
74
|
-
*
|
|
75
|
-
* Used for
|
|
76
|
-
*/
|
|
77
|
-
private completeAndRelease;
|
|
78
|
-
/**
|
|
79
|
-
* Release a worker slot, cleanup tmux session, remove card from active cards.
|
|
80
|
+
* Release a worker slot and remove card from active cards.
|
|
81
|
+
* Used for launch failure rollback.
|
|
80
82
|
*/
|
|
81
83
|
private releaseSlot;
|
|
82
84
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
+
* Load skill profiles based on card labels (skill:xxx) or project default.
|
|
86
|
+
* Returns combined profile content for prompt injection.
|
|
85
87
|
*/
|
|
86
|
-
private
|
|
88
|
+
private loadSkillProfiles;
|
|
87
89
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* Uses metaRead/metaWrite to track resumeAttempts per card.
|
|
91
|
-
* Max retries = WORKER_RESTART_LIMIT (default 2).
|
|
92
|
-
*
|
|
93
|
-
* Returns an ActionRecord if resume was initiated, or null if retries exhausted.
|
|
90
|
+
* Load recent project knowledge from docs/DECISIONS.md and docs/CHANGELOG.md.
|
|
91
|
+
* Truncates to recent entries to keep prompt size manageable.
|
|
94
92
|
*/
|
|
95
|
-
private
|
|
93
|
+
private loadProjectKnowledge;
|
|
96
94
|
/**
|
|
97
|
-
*
|
|
98
|
-
* Used when worker completed coding + push but didn't create/merge MR.
|
|
95
|
+
* Extract the last N ## sections from a markdown file.
|
|
99
96
|
*/
|
|
100
|
-
private
|
|
97
|
+
private extractRecentSections;
|
|
101
98
|
private logEvent;
|
|
102
99
|
}
|
|
103
100
|
//# sourceMappingURL=ExecutionEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionEngine.d.ts","sourceRoot":"","sources":["../../src/engines/ExecutionEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ExecutionEngine.d.ts","sourceRoot":"","sources":["../../src/engines/ExecutionEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAsC,MAAM,oBAAoB,CAAC;AAK5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAA0B,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAIjE,qBAAa,eAAe;IAIxB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,QAAQ,CAAC;IAVnB,OAAO,CAAC,GAAG,CAAS;gBAGV,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,QAAQ,CAAC,EAAE,QAAQ,YAAA;IAKvB,IAAI,CAAC,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAkGnE;;;OAGG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAuDxF,OAAO,CAAC,UAAU;IAMlB;;;;;;;OAOG;YACW,mBAAmB;IAyDjC;;;OAGG;YACW,WAAW;IA6DzB;;;OAGG;YACW,UAAU;IA+KxB;;;OAGG;YACW,YAAY;IA2D1B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IAoGxB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAqGxB;;;OAGG;IACH,OAAO,CAAC,WAAW;IA6BnB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,QAAQ;CASjB"}
|