@coralai/sps-cli 0.25.2 → 0.26.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-CN.md +59 -9
- package/README.md +99 -67
- package/dist/commands/acpCommand.d.ts.map +1 -1
- package/dist/commands/acpCommand.js +2 -19
- package/dist/commands/acpCommand.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +3 -13
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +58 -2
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/monitorTick.d.ts.map +1 -1
- package/dist/commands/monitorTick.js +2 -3
- package/dist/commands/monitorTick.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +4 -0
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +3 -4
- package/dist/commands/tick.js.map +1 -1
- package/dist/commands/workerDashboard.d.ts.map +1 -1
- package/dist/commands/workerDashboard.js +55 -95
- package/dist/commands/workerDashboard.js.map +1 -1
- package/dist/core/config.d.ts +8 -7
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +15 -7
- package/dist/core/config.js.map +1 -1
- package/dist/core/config.test.js +23 -5
- package/dist/core/config.test.js.map +1 -1
- package/dist/core/sessionLiveness.d.ts +0 -1
- package/dist/core/sessionLiveness.d.ts.map +1 -1
- package/dist/core/sessionLiveness.js +7 -15
- package/dist/core/sessionLiveness.js.map +1 -1
- package/dist/core/state.d.ts +4 -5
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +0 -1
- package/dist/core/state.js.map +1 -1
- package/dist/core/state.test.js +0 -1
- package/dist/core/state.test.js.map +1 -1
- package/dist/engines/CloseoutEngine.js +1 -1
- package/dist/engines/CloseoutEngine.js.map +1 -1
- package/dist/engines/ExecutionEngine.d.ts +1 -1
- package/dist/engines/ExecutionEngine.js +3 -3
- package/dist/engines/ExecutionEngine.js.map +1 -1
- package/dist/engines/MonitorEngine.d.ts +4 -7
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +10 -68
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/interfaces/ACPClient.d.ts +10 -0
- package/dist/interfaces/ACPClient.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/manager/completion-judge.d.ts.map +1 -1
- package/dist/manager/completion-judge.js +7 -0
- package/dist/manager/completion-judge.js.map +1 -1
- package/dist/manager/integration-queue.d.ts +1 -1
- package/dist/manager/integration-queue.d.ts.map +1 -1
- package/dist/manager/runtime-coordinator.js +1 -1
- package/dist/manager/runtime-coordinator.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts +9 -1
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.js +74 -8
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/manager/worker-manager.d.ts +4 -4
- package/dist/manager/worker-manager.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.js +5 -0
- package/dist/providers/ACPWorkerRuntime.js.map +1 -1
- package/dist/providers/LocalACPClient.d.ts +1 -2
- package/dist/providers/LocalACPClient.d.ts.map +1 -1
- package/dist/providers/LocalACPClient.js +7 -22
- package/dist/providers/LocalACPClient.js.map +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.d.ts +14 -0
- package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +1 -0
- package/dist/providers/adapters/AcpSdkAdapter.js +270 -0
- package/dist/providers/adapters/AcpSdkAdapter.js.map +1 -0
- package/dist/providers/adapters/acp-fs-handlers.d.ts +26 -0
- package/dist/providers/adapters/acp-fs-handlers.d.ts.map +1 -0
- package/dist/providers/adapters/acp-fs-handlers.js +52 -0
- package/dist/providers/adapters/acp-fs-handlers.js.map +1 -0
- package/dist/providers/adapters/acp-fs-handlers.test.d.ts +2 -0
- package/dist/providers/adapters/acp-fs-handlers.test.d.ts.map +1 -0
- package/dist/providers/adapters/acp-fs-handlers.test.js +65 -0
- package/dist/providers/adapters/acp-fs-handlers.test.js.map +1 -0
- package/dist/providers/adapters/acp-permissions.d.ts +35 -0
- package/dist/providers/adapters/acp-permissions.d.ts.map +1 -0
- package/dist/providers/adapters/acp-permissions.js +69 -0
- package/dist/providers/adapters/acp-permissions.js.map +1 -0
- package/dist/providers/adapters/acp-permissions.test.d.ts +2 -0
- package/dist/providers/adapters/acp-permissions.test.d.ts.map +1 -0
- package/dist/providers/adapters/acp-permissions.test.js +88 -0
- package/dist/providers/adapters/acp-permissions.test.js.map +1 -0
- package/dist/providers/adapters/acp-session-accumulator.d.ts +23 -0
- package/dist/providers/adapters/acp-session-accumulator.d.ts.map +1 -0
- package/dist/providers/adapters/acp-session-accumulator.js +99 -0
- package/dist/providers/adapters/acp-session-accumulator.js.map +1 -0
- package/dist/providers/adapters/acp-session-accumulator.test.d.ts +2 -0
- package/dist/providers/adapters/acp-session-accumulator.test.d.ts.map +1 -0
- package/dist/providers/adapters/acp-session-accumulator.test.js +73 -0
- package/dist/providers/adapters/acp-session-accumulator.test.js.map +1 -0
- package/dist/providers/adapters/acp-terminal-manager.d.ts +56 -0
- package/dist/providers/adapters/acp-terminal-manager.d.ts.map +1 -0
- package/dist/providers/adapters/acp-terminal-manager.js +118 -0
- package/dist/providers/adapters/acp-terminal-manager.js.map +1 -0
- package/dist/providers/adapters/acp-terminal-manager.test.d.ts +2 -0
- package/dist/providers/adapters/acp-terminal-manager.test.d.ts.map +1 -0
- package/dist/providers/adapters/acp-terminal-manager.test.js +71 -0
- package/dist/providers/adapters/acp-terminal-manager.test.js.map +1 -0
- package/dist/providers/registry.d.ts +0 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +0 -26
- package/dist/providers/registry.js.map +1 -1
- package/package.json +4 -2
package/README-CN.md
CHANGED
|
@@ -26,6 +26,9 @@ SPS(Smart Pipeline System)是一套 AI Agent 驱动的全自动开发流水
|
|
|
26
26
|
- [sps pm](#sps-pm)
|
|
27
27
|
- [sps qa tick](#sps-qa-tick)
|
|
28
28
|
- [sps monitor tick](#sps-monitor-tick)
|
|
29
|
+
- [sps stop](#sps-stop)
|
|
30
|
+
- [sps reset](#sps-reset)
|
|
31
|
+
- [sps logs](#sps-logs)
|
|
29
32
|
- [Worker 规则文件](#worker-规则文件)
|
|
30
33
|
- [项目配置](#项目配置)
|
|
31
34
|
- [多项目并行](#多项目并行)
|
|
@@ -707,18 +710,65 @@ sps monitor tick my-project --json
|
|
|
707
710
|
|
|
708
711
|
---
|
|
709
712
|
|
|
713
|
+
### sps stop
|
|
714
|
+
|
|
715
|
+
停止运行中的 tick 进程。
|
|
716
|
+
|
|
717
|
+
```bash
|
|
718
|
+
sps stop <project> # 停止指定项目
|
|
719
|
+
sps stop --all # 停止所有运行中的 tick
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
---
|
|
723
|
+
|
|
724
|
+
### sps reset
|
|
725
|
+
|
|
726
|
+
重置卡片状态,准备重新执行。一键完成 5 步清理:停 tick、清 state、清 worktree+branch、移卡回 Planning、报告。
|
|
727
|
+
|
|
728
|
+
```bash
|
|
729
|
+
sps reset <project> # 重置所有未完成的卡片(Done 保留)
|
|
730
|
+
sps reset <project> --all # 重置全部卡片(包括 Done)
|
|
731
|
+
sps reset <project> --card 5 # 重置指定卡片
|
|
732
|
+
sps reset <project> --card 5,6,7 # 重置多张卡片
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
版本升级后重新测试的典型流程:
|
|
736
|
+
|
|
737
|
+
```bash
|
|
738
|
+
npm i -g @coralai/sps-cli # 升级
|
|
739
|
+
sps reset my-project # 一键清理
|
|
740
|
+
sps tick my-project # 重新跑
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
---
|
|
744
|
+
|
|
745
|
+
### sps logs
|
|
746
|
+
|
|
747
|
+
实时日志查看器。
|
|
748
|
+
|
|
749
|
+
```bash
|
|
750
|
+
sps logs [project] # 跟踪 pipeline 日志
|
|
751
|
+
sps logs <project> --err # 跟踪 error 日志
|
|
752
|
+
sps logs <project> --lines 50 # 显示最近 50 行
|
|
753
|
+
sps logs <project> --no-follow # 打印后退出
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
---
|
|
757
|
+
|
|
710
758
|
## Worker 规则文件
|
|
711
759
|
|
|
712
|
-
`sps doctor --fix`
|
|
760
|
+
`sps doctor --fix` 会根据 `WORKER_TOOL` 配置在业务仓库根目录生成规则文件并自动提交:
|
|
761
|
+
|
|
762
|
+
| 文件 | 用途 | 要求 | 提交到 git |
|
|
763
|
+
|------|------|------|-----------|
|
|
764
|
+
| `CLAUDE.md` | Claude Code Worker 的项目规则 | `WORKER_TOOL=claude` 时必需 | 是 |
|
|
765
|
+
| `AGENTS.md` | Codex Worker 的项目规则 | `WORKER_TOOL=codex` 时必需 | 是 |
|
|
766
|
+
| `.sps/development_prompt.txt` | Development 阶段提示词(调试存档) | 自动生成 | 否(.gitignore) |
|
|
767
|
+
| `.sps/integration_prompt.txt` | Integration 阶段提示词(调试存档) | 自动生成 | 否(.gitignore) |
|
|
768
|
+
| `docs/DECISIONS.md` | 项目知识库——架构决策和技术选择 | — | 是(Worker 自动维护) |
|
|
769
|
+
| `docs/CHANGELOG.md` | 项目知识库——变更记录 | — | 是(Worker 自动维护) |
|
|
713
770
|
|
|
714
|
-
|
|
715
|
-
|------|------|-----------|
|
|
716
|
-
| `CLAUDE.md` | Claude Code Worker 的项目规则 | 是 |
|
|
717
|
-
| `AGENTS.md` | Codex Worker 的项目规则 | 是 |
|
|
718
|
-
| `.sps/task_prompt.txt` | 每次任务的具体描述(每个 worktree 独立生成) | 否(.gitignore) |
|
|
719
|
-
| `.sps/merge.sh` | 合并脚本(MR_MODE=none 时做 git merge,MR_MODE=create 时调 GitLab API 创建 MR) | 否(.gitignore) |
|
|
720
|
-
| `docs/DECISIONS.md` | 项目知识库——架构决策和技术选择 | 是(Worker 自动维护) |
|
|
721
|
-
| `docs/CHANGELOG.md` | 项目知识库——变更记录 | 是(Worker 自动维护) |
|
|
771
|
+
> **注意(v0.25.0+):** 提示词在内存中生成,通过 stdin 传递给 worker。`.sps/` 下的文件仅为调试存档,缺失不影响流程。
|
|
722
772
|
|
|
723
773
|
**Skill Profile 注入(v0.16+):**
|
|
724
774
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
> **中文文档**: See `README-CN.md` in the source repository for Chinese documentation.
|
|
6
6
|
|
|
7
|
-
**v0.
|
|
7
|
+
**v0.26.1**
|
|
8
8
|
|
|
9
9
|
SPS (Smart Pipeline System) is a fully automated development pipeline CLI tool driven by AI Agents. From task card creation to code merging, the entire process runs unattended.
|
|
10
10
|
|
|
@@ -12,16 +12,14 @@ SPS (Smart Pipeline System) is a fully automated development pipeline CLI tool d
|
|
|
12
12
|
Create cards -> Start pipeline -> Development worker completes branch work -> QA worker integrates branch -> Notify completion
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
**v0.
|
|
15
|
+
**v0.26.0 highlights**:
|
|
16
16
|
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
- **
|
|
21
|
-
- **Timeouts**: Soft timeout emits status event; hard timeout (1.5x) force-kills. All timers use `.unref()`.
|
|
22
|
-
- **pendingPMActions**: Failed PM operations saved to state.json and retried next tick cycle.
|
|
17
|
+
- **ACP SDK Transport**: Worker communication uses structured ACP JSON-RPC over stdio instead of terminal screen-scraping. Claude uses Anthropic's official `claude-agent-sdk`, Codex uses Zed's Rust native `codex-acp` binary. Deterministic state detection — no regex, no guessing.
|
|
18
|
+
- **Unified adapter**: One `AcpSdkAdapter` replaces 6 legacy providers (ClaudePrint, CodexExec, ClaudeTmux, CodexTmux + tmux utilities). Adding new agents (Gemini, Cursor, etc.) requires only a registry entry.
|
|
19
|
+
- **Real-time worker logs**: ACP events stream to `*-acp-*.log` files. `sps logs` and `sps worker dashboard` display worker output in real-time.
|
|
20
|
+
- **Permission handling**: ACP `requestPermission` callback enables programmatic per-tool-call approval (default: auto-approve all).
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
**Architecture**: Two-phase state machine (`Inprogress` = development, `QA` = integration/merge). WorkerManager ACP interface mediates all worker lifecycle. IntegrationQueue serializes merges. Default transport is `acp-sdk` (structured protocol); `proc` one-shot mode available as fallback via `WORKER_TRANSPORT=proc`.
|
|
25
23
|
|
|
26
24
|
## Table of Contents
|
|
27
25
|
|
|
@@ -44,6 +42,9 @@ The two-phase state machine continues: `Inprogress` = development, `QA` = integr
|
|
|
44
42
|
- [sps pm](#sps-pm)
|
|
45
43
|
- [sps qa tick](#sps-qa-tick)
|
|
46
44
|
- [sps monitor tick](#sps-monitor-tick)
|
|
45
|
+
- [sps stop](#sps-stop)
|
|
46
|
+
- [sps reset](#sps-reset)
|
|
47
|
+
- [sps logs](#sps-logs)
|
|
47
48
|
- [Worker Rule Files](#worker-rule-files)
|
|
48
49
|
- [Project Configuration](#project-configuration)
|
|
49
50
|
- [Multi-Project Parallel Execution](#multi-project-parallel-execution)
|
|
@@ -74,7 +75,7 @@ npx tsx src/main.ts --help
|
|
|
74
75
|
| Node.js | 18+ | CLI runtime |
|
|
75
76
|
| git | 2.x | Branch and worktree management |
|
|
76
77
|
| Claude Code CLI or Codex CLI | Latest | AI Worker |
|
|
77
|
-
| tmux | 3.x |
|
|
78
|
+
| tmux | 3.x | No longer required (legacy dependency removed in v0.26.1) |
|
|
78
79
|
|
|
79
80
|
## Quick Start
|
|
80
81
|
|
|
@@ -135,7 +136,7 @@ Planning -> Backlog -> Todo -> Inprogress -> QA -> Done
|
|
|
135
136
|
|
|
136
137
|
In this model, the development worker stops at “implementation complete and committed on the task branch”. The QA worker owns integration: it must inspect the current worktree, rebase/merge the task branch back into the target branch, resolve conflicts, and finish the integration. If a development worker merges early anyway, SPS absorbs that as an exception from git evidence and closes the task directly instead of forcing an extra QA run. See `docs/design/10-acp-worker-runtime-design.md` for the persistent Agent transport model, the full worker state breakdown, and the local same-user OAuth reuse boundary. See `docs/design/11-runtime-state-authority-and-recovery-redesign.md` for the redesign that demotes `state.json` / `acp-state.json` to projections and re-centers recovery around PM state plus worktree/git evidence. See `docs/design/12-unified-runtime-state-machine.md` for the current unified state-machine model. See `docs/design/13-development-guardrails.md` for the non-negotiable development rules that prevent future features from reintroducing old state, merge, or prompt-model drift.
|
|
137
138
|
|
|
138
|
-
The autonomous main path
|
|
139
|
+
The autonomous main path uses ACP SDK transport by default. `WORKER_TRANSPORT=acp-sdk` is the workflow transport for `tick`, `pipeline tick`, `qa tick`, `worker launch`, and `recovery`; workers communicate via structured ACP JSON-RPC over stdio. `proc` one-shot mode (`codex exec` / `claude -p`) is available as fallback via `WORKER_TRANSPORT=proc`. `sps acp` commands provide diagnostic and manual-control capabilities.
|
|
139
140
|
|
|
140
141
|
### MR_MODE=create (Optional)
|
|
141
142
|
|
|
@@ -275,7 +276,7 @@ Equivalent to `sps project doctor <project>`.
|
|
|
275
276
|
| plane | Plane API connectivity (PM_TOOL=plane only) | -- |
|
|
276
277
|
| pm-states / pm-lists | Whether PM state/list UUIDs are valid | Auto-create + write to conf |
|
|
277
278
|
| worker-tool | Whether Claude Code / Codex CLI is in PATH | -- |
|
|
278
|
-
|
|
|
279
|
+
| acp-runtime | Whether ACP agent binaries are available | -- |
|
|
279
280
|
|
|
280
281
|
| Option | Description |
|
|
281
282
|
|--------|-------------|
|
|
@@ -297,7 +298,7 @@ sps doctor my-project --fix
|
|
|
297
298
|
# ok worker-rules Generated and committed: CLAUDE.md, AGENTS.md
|
|
298
299
|
# ok skill-profiles DEFAULT_WORKER_SKILLS="senior" -- all profiles found
|
|
299
300
|
# ok state-json Initialized with 3 worker slots
|
|
300
|
-
# -
|
|
301
|
+
# ok acp-runtime claude-agent-acp and codex-acp available
|
|
301
302
|
|
|
302
303
|
# JSON output
|
|
303
304
|
sps doctor my-project --json
|
|
@@ -497,7 +498,7 @@ sps acp stop <project> <slot> [--json]
|
|
|
497
498
|
|
|
498
499
|
Current behavior:
|
|
499
500
|
|
|
500
|
-
- `ensure` starts or reuses
|
|
501
|
+
- `ensure` starts or reuses an ACP SDK session for the specified worker slot
|
|
501
502
|
- `run` submits a prompt onto the session and records a new run snapshot
|
|
502
503
|
- `status` refreshes session and run state from the local gateway
|
|
503
504
|
- `stop` terminates the persistent session and marks the slot `offline`
|
|
@@ -593,30 +594,33 @@ If the card is in Backlog state, it will automatically execute prepare first (cr
|
|
|
593
594
|
3. Launch Worker process
|
|
594
595
|
4. Push card to Inprogress
|
|
595
596
|
|
|
596
|
-
**Worker
|
|
597
|
+
**Worker transport modes (`WORKER_TRANSPORT`):**
|
|
597
598
|
|
|
598
|
-
|
|
|
599
|
-
|
|
600
|
-
| `
|
|
601
|
-
| `
|
|
599
|
+
| Transport | Default | Description |
|
|
600
|
+
|-----------|---------|-------------|
|
|
601
|
+
| `acp-sdk` | **Yes** | ACP JSON-RPC over stdio — structured, deterministic state detection |
|
|
602
|
+
| `proc` | No | One-shot execution (`claude -p` / `codex exec`), process exit = task complete |
|
|
602
603
|
|
|
603
|
-
**
|
|
604
|
+
**ACP SDK mode (default):**
|
|
604
605
|
|
|
605
|
-
|
|
606
|
+
Workers communicate via structured ACP JSON-RPC protocol over stdio. Claude uses `claude-agent-acp` (Anthropic's official SDK), Codex uses `codex-acp` (Zed's Rust native binary).
|
|
607
|
+
|
|
608
|
+
Key advantages:
|
|
609
|
+
- **Structured communication** -- JSON-RPC protocol, no terminal screen-scraping
|
|
610
|
+
- **Deterministic state detection** -- No regex parsing, no guessing
|
|
611
|
+
- **Permission handling** -- Programmatic per-tool-call approval via `requestPermission` callback
|
|
612
|
+
- **Real-time logs** -- ACP events stream to `*-acp-*.log` files
|
|
613
|
+
- **No external dependencies** -- Pure process management, suitable for CI/CD environments
|
|
614
|
+
|
|
615
|
+
**Proc mode (fallback):**
|
|
616
|
+
|
|
617
|
+
The Worker runs as a one-shot subprocess:
|
|
606
618
|
|
|
607
619
|
```
|
|
608
620
|
Claude: claude -p --output-format stream-json --dangerously-skip-permissions
|
|
609
621
|
Codex: codex exec - --json --sandbox danger-full-access
|
|
610
622
|
```
|
|
611
623
|
|
|
612
|
-
Key advantages:
|
|
613
|
-
- **Never gets stuck** -- No TUI interaction, process exit means completion
|
|
614
|
-
- **No confirmation needed** -- Permission flags skip all confirmation dialogs
|
|
615
|
-
- **Context continuation** -- Via `--resume <sessionId>` for cross-task context reuse (hits prompt cache, saves tokens)
|
|
616
|
-
- **No tmux dependency** -- Pure process management, suitable for CI/CD environments
|
|
617
|
-
|
|
618
|
-
When resuming an existing Codex session, SPS uses `codex exec resume <sessionId> - --json --sandbox danger-full-access`.
|
|
619
|
-
|
|
620
624
|
**Session Resume chain:**
|
|
621
625
|
|
|
622
626
|
Multiple tasks on the same worktree (initial implementation -> CI fix -> conflict resolution) share the same session:
|
|
@@ -627,16 +631,6 @@ CI fix: claude -p "Fix CI" --resume sid -> Inherits full context fro
|
|
|
627
631
|
Conflict: claude -p "Resolve conflict" --resume sid -> Inherits all historical context
|
|
628
632
|
```
|
|
629
633
|
|
|
630
|
-
**Interactive mode (fallback):**
|
|
631
|
-
|
|
632
|
-
Set `WORKER_MODE=interactive` to fall back to tmux interactive mode. Reuse strategy in this mode:
|
|
633
|
-
|
|
634
|
-
| Scenario | Behavior |
|
|
635
|
-
|----------|----------|
|
|
636
|
-
| Session exists + Claude running | Reuse: `/clear` + `cd worktree` |
|
|
637
|
-
| Session exists + Claude not running | Reuse session: `cd` + launch Claude |
|
|
638
|
-
| No session | Create new session + launch Claude |
|
|
639
|
-
|
|
640
634
|
**Example:**
|
|
641
635
|
|
|
642
636
|
```bash
|
|
@@ -664,9 +658,8 @@ sps worker dashboard [project1] [project2] ... [--once] [--json]
|
|
|
664
658
|
- Press `q` to quit, press `r` to force refresh
|
|
665
659
|
- Uses alternate screen buffer (does not pollute terminal scrollback)
|
|
666
660
|
- Adaptive grid layout, one panel per Worker
|
|
667
|
-
-
|
|
668
|
-
-
|
|
669
|
-
- Interactive tmux panels now show a sanitized summary instead of dumping the raw pane screen
|
|
661
|
+
- Proc mode panels show: PID, exit code, JSONL-rendered human-readable output
|
|
662
|
+
- ACP SDK panels show: transport, session/run status, model, cwd, pending confirmation, and the latest structured summary line
|
|
670
663
|
|
|
671
664
|
**Example:**
|
|
672
665
|
|
|
@@ -812,10 +805,8 @@ sps monitor tick <project> [--json]
|
|
|
812
805
|
|
|
813
806
|
| Check | Description |
|
|
814
807
|
|-------|-------------|
|
|
815
|
-
| Orphan slot cleanup |
|
|
808
|
+
| Orphan slot cleanup | Worker process is dead but slot is still marked active |
|
|
816
809
|
| Timeout detection | Inprogress exceeds `INPROGRESS_TIMEOUT_HOURS` |
|
|
817
|
-
| Awaiting confirmation detection | Worker waiting for user confirmation (interactive mode only; print mode has no confirmations) |
|
|
818
|
-
| Block detection | Worker encountering error/fatal/stuck (interactive mode only) |
|
|
819
810
|
| State alignment | Whether PM state and runtime state are consistent |
|
|
820
811
|
|
|
821
812
|
**Example:**
|
|
@@ -827,19 +818,65 @@ sps monitor tick my-project --json
|
|
|
827
818
|
|
|
828
819
|
---
|
|
829
820
|
|
|
821
|
+
### sps stop
|
|
822
|
+
|
|
823
|
+
Stop running tick process(es).
|
|
824
|
+
|
|
825
|
+
```bash
|
|
826
|
+
sps stop <project> # stop specific project
|
|
827
|
+
sps stop --all # stop all running ticks
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
---
|
|
831
|
+
|
|
832
|
+
### sps reset
|
|
833
|
+
|
|
834
|
+
Reset cards for re-execution. Performs 5 atomic steps: stop tick, clean state, remove worktrees + branches, move cards to Planning, report.
|
|
835
|
+
|
|
836
|
+
```bash
|
|
837
|
+
sps reset <project> # reset all non-Done cards
|
|
838
|
+
sps reset <project> --all # reset ALL cards including Done
|
|
839
|
+
sps reset <project> --card 5 # reset specific card
|
|
840
|
+
sps reset <project> --card 5,6,7 # reset multiple cards
|
|
841
|
+
```
|
|
842
|
+
|
|
843
|
+
Typical workflow after version upgrade:
|
|
844
|
+
|
|
845
|
+
```bash
|
|
846
|
+
npm i -g @coralai/sps-cli # upgrade
|
|
847
|
+
sps reset my-project # clean reset
|
|
848
|
+
sps tick my-project # re-run
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
---
|
|
852
|
+
|
|
853
|
+
### sps logs
|
|
854
|
+
|
|
855
|
+
Real-time log viewer.
|
|
856
|
+
|
|
857
|
+
```bash
|
|
858
|
+
sps logs [project] # follow pipeline log
|
|
859
|
+
sps logs <project> --err # follow error log
|
|
860
|
+
sps logs <project> --lines 50 # show last 50 lines
|
|
861
|
+
sps logs <project> --no-follow # print and exit
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
---
|
|
865
|
+
|
|
830
866
|
## Worker Rule Files
|
|
831
867
|
|
|
832
|
-
`sps doctor --fix` generates
|
|
868
|
+
`sps doctor --fix` generates rule files based on the configured `WORKER_TOOL`:
|
|
869
|
+
|
|
870
|
+
| File | Purpose | Required by | Committed to git |
|
|
871
|
+
|------|---------|-------------|-----------------|
|
|
872
|
+
| `CLAUDE.md` | Project rules for Claude Code Worker | `WORKER_TOOL=claude` | Yes |
|
|
873
|
+
| `AGENTS.md` | Project rules for Codex Worker | `WORKER_TOOL=codex` | Yes |
|
|
874
|
+
| `.sps/development_prompt.txt` | Development-phase prompt (debug archive) | — | No (.gitignore) |
|
|
875
|
+
| `.sps/integration_prompt.txt` | Integration-phase prompt (debug archive) | — | No (.gitignore) |
|
|
876
|
+
| `docs/DECISIONS.md` | Architecture decisions (worker auto-maintained) | — | Yes |
|
|
877
|
+
| `docs/CHANGELOG.md` | Change log (worker auto-maintained) | — | Yes |
|
|
833
878
|
|
|
834
|
-
|
|
835
|
-
|------|---------|-----------------|
|
|
836
|
-
| `CLAUDE.md` | Project rules for Claude Code Worker | Yes |
|
|
837
|
-
| `AGENTS.md` | Project rules for Codex Worker | Yes |
|
|
838
|
-
| `.sps/task_prompt.txt` | Development-phase compatibility prompt alias | No (.gitignore) |
|
|
839
|
-
| `.sps/development_prompt.txt` | Development-phase worker prompt | No (.gitignore) |
|
|
840
|
-
| `.sps/integration_prompt.txt` | Integration-phase worker prompt | No (.gitignore) |
|
|
841
|
-
| `docs/DECISIONS.md` | Project knowledge base -- architecture decisions and technical choices | Yes (Worker auto-maintained) |
|
|
842
|
-
| `docs/CHANGELOG.md` | Project knowledge base -- change log | Yes (Worker auto-maintained) |
|
|
879
|
+
**Note**: Prompts are generated in-memory and passed via stdin (v0.25.0+). The `.sps/` files are debug archives only — their absence does not block the pipeline.
|
|
843
880
|
|
|
844
881
|
**Skill Profile injection (v0.16+):**
|
|
845
882
|
|
|
@@ -925,15 +962,14 @@ Project conf can reference global variables (e.g., `${PLANE_URL}`).
|
|
|
925
962
|
| Field | Required | Default | Description |
|
|
926
963
|
|-------|----------|---------|-------------|
|
|
927
964
|
| `WORKER_TOOL` | No | `claude` | Worker type: `claude` / `codex` |
|
|
928
|
-
| `
|
|
929
|
-
| `WORKER_TRANSPORT` | No | `proc` | Worker transport. `proc` is the autonomous workflow path. `acp` / `pty` are retained for `sps acp`, dashboard observability, and manual diagnostics, not as the default `tick` execution chain. |
|
|
965
|
+
| `WORKER_TRANSPORT` | No | `acp-sdk` | Worker transport: `acp-sdk` (ACP JSON-RPC, default), `proc` (one-shot fallback) |
|
|
930
966
|
| `ACP_GATEWAY_MODE` | No | `local` | ACP gateway deployment mode; current releases support `local` only |
|
|
931
967
|
| `ACP_AGENT` | No | `WORKER_TOOL` | Default ACP tool when `sps acp` does not receive a tool override |
|
|
932
968
|
| `ACP_SESSION_STRATEGY` | No | `per-slot` | Session allocation strategy; current releases support `per-slot` only |
|
|
933
969
|
| `MAX_CONCURRENT_WORKERS` | No | `3` | Maximum parallel Workers (worker slot ceiling) |
|
|
934
970
|
| `WORKER_RESTART_LIMIT` | No | `2` | Maximum restart count after Worker death |
|
|
935
971
|
| `AUTOFIX_ATTEMPTS` | No | `2` | CI failure auto-fix attempt count |
|
|
936
|
-
| `WORKER_SESSION_REUSE` | No | `true` | Whether to reuse
|
|
972
|
+
| `WORKER_SESSION_REUSE` | No | `true` | Whether to reuse ACP sessions across tasks |
|
|
937
973
|
| `MAX_ACTIONS_PER_TICK` | No | `1` | Maximum launches per tick cycle; raise with `MAX_CONCURRENT_WORKERS` if one tick should fill all slots |
|
|
938
974
|
|
|
939
975
|
#### Timeouts and Policies
|
|
@@ -976,8 +1012,7 @@ PLANE_PROJECT_ID="project-uuid-here"
|
|
|
976
1012
|
|
|
977
1013
|
# Worker
|
|
978
1014
|
WORKER_TOOL="claude"
|
|
979
|
-
|
|
980
|
-
WORKER_TRANSPORT="proc" # proc (autonomous workflow default); acp/pty are manual diagnostic transports
|
|
1015
|
+
WORKER_TRANSPORT="acp-sdk" # acp-sdk (default) or proc (one-shot fallback)
|
|
981
1016
|
ACP_GATEWAY_MODE="local"
|
|
982
1017
|
ACP_AGENT="claude"
|
|
983
1018
|
ACP_SESSION_STRATEGY="per-slot"
|
|
@@ -1087,21 +1122,18 @@ workflow-cli/
|
|
|
1087
1122
|
│ │ └── recovery.ts # Post-restart PID scan recovery
|
|
1088
1123
|
│ ├── interfaces/ # Abstract interfaces
|
|
1089
1124
|
│ │ ├── TaskBackend.ts # PM backend interface
|
|
1090
|
-
│ │ ├── WorkerProvider.ts # Worker interface
|
|
1091
1125
|
│ │ ├── RepoBackend.ts # Code repository interface
|
|
1092
1126
|
│ │ ├── Notifier.ts # Notification interface
|
|
1093
1127
|
│ │ └── HookProvider.ts # Hook interface
|
|
1094
1128
|
│ ├── models/ # Type definitions
|
|
1095
1129
|
│ │ └── types.ts # Card, CommandResult, WorkerStatus, etc.
|
|
1096
1130
|
│ └── providers/ # Concrete implementations
|
|
1097
|
-
│ ├── registry.ts # Provider factory
|
|
1131
|
+
│ ├── registry.ts # Provider factory
|
|
1098
1132
|
│ ├── PlaneTaskBackend.ts
|
|
1099
1133
|
│ ├── TrelloTaskBackend.ts
|
|
1100
1134
|
│ ├── MarkdownTaskBackend.ts
|
|
1101
|
-
│ ├──
|
|
1102
|
-
│
|
|
1103
|
-
│ ├── ClaudeTmuxProvider.ts # tmux interactive mode (fallback)
|
|
1104
|
-
│ ├── CodexTmuxProvider.ts # tmux interactive mode (fallback)
|
|
1135
|
+
│ ├── adapters/ # ACP SDK adapters
|
|
1136
|
+
│ │ └── AcpSdkAdapter.ts # Unified ACP adapter (JSON-RPC over stdio)
|
|
1105
1137
|
│ ├── outputParser.ts # JSONL output parsing, process management utilities
|
|
1106
1138
|
│ ├── streamRenderer.ts # JSONL -> human-readable text (for Dashboard)
|
|
1107
1139
|
│ ├── GitLabRepoBackend.ts
|
|
@@ -1127,7 +1159,7 @@ v0.16.0 introduced the `src/manager/` directory, decoupling Worker process manag
|
|
|
1127
1159
|
|
|
1128
1160
|
**Refactoring results:**
|
|
1129
1161
|
- ExecutionEngine reduced from 1219 to 916 lines (removed attemptResume, completeAndRelease)
|
|
1130
|
-
- MonitorEngine reduced from 974 to 750 lines (removed direct PID
|
|
1162
|
+
- MonitorEngine reduced from 974 to 750 lines (removed direct PID detection)
|
|
1131
1163
|
- tick.ts added ~80 lines (initialize shared Manager modules, run Recovery on startup)
|
|
1132
1164
|
|
|
1133
1165
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acpCommand.d.ts","sourceRoot":"","sources":["../../src/commands/acpCommand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"acpCommand.d.ts","sourceRoot":"","sources":["../../src/commands/acpCommand.ts"],"names":[],"mappings":"AAyBA,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA4Hf"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ProjectContext } from '../core/context.js';
|
|
2
|
-
import { enqueuePTYResponse } from '../core/ptyControl.js';
|
|
3
2
|
import { createAgentRuntime } from '../providers/registry.js';
|
|
4
3
|
import { Logger } from '../core/logger.js';
|
|
5
4
|
function parseTool(value) {
|
|
@@ -127,24 +126,8 @@ export async function executeAcpCommand(project, subcommand, positionals, flags)
|
|
|
127
126
|
if (!slot) {
|
|
128
127
|
throw new Error('Usage: sps acp respond <project> <slot> "<response>"');
|
|
129
128
|
}
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
if (transport === 'pty') {
|
|
133
|
-
enqueuePTYResponse(ctx, slot, response, 'acp-respond');
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
// For tmux ACP, use tmux send-keys as fallback
|
|
137
|
-
const { execFileSync } = await import('node:child_process');
|
|
138
|
-
const sessionName = `sps-acp-${project}-${slot.startsWith('worker-') ? slot : 'worker-' + slot}`;
|
|
139
|
-
try {
|
|
140
|
-
execFileSync('tmux', ['send-keys', '-t', sessionName, response, 'Enter'], {
|
|
141
|
-
timeout: 5000, stdio: ['ignore', 'pipe', 'pipe'],
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
throw new Error(`Failed to send response to ${sessionName}: ${err}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
129
|
+
// Send response via ACP runtime
|
|
130
|
+
await runtime.resumeRun(slot, response);
|
|
148
131
|
if (jsonOutput) {
|
|
149
132
|
console.log(JSON.stringify({ ok: true, project, slot, response }));
|
|
150
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acpCommand.js","sourceRoot":"","sources":["../../src/commands/acpCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"acpCommand.js","sourceRoot":"","sources":["../../src/commands/acpCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACpC;AAkBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACpC;AAkBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsTtF"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -282,19 +282,9 @@ export async function executeDoctor(project, flags) {
|
|
|
282
282
|
catch {
|
|
283
283
|
checks.push({ name: 'worker-tool', status: 'warn', message: `${tool} not found in PATH` });
|
|
284
284
|
}
|
|
285
|
-
// 10.
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
execSync('which tmux', { encoding: 'utf-8', timeout: 5000 });
|
|
289
|
-
checks.push({ name: 'tmux', status: 'pass', message: 'tmux available (required for interactive mode)' });
|
|
290
|
-
}
|
|
291
|
-
catch {
|
|
292
|
-
checks.push({ name: 'tmux', status: 'fail', message: 'tmux not found (required for WORKER_MODE=interactive)' });
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
checks.push({ name: 'tmux', status: 'skip', message: 'Not required (WORKER_MODE=print)' });
|
|
297
|
-
}
|
|
285
|
+
// 10. Worker transport check
|
|
286
|
+
const transport = ctx.config.WORKER_TRANSPORT;
|
|
287
|
+
checks.push({ name: 'worker-transport', status: 'pass', message: `WORKER_TRANSPORT=${transport}` });
|
|
298
288
|
// ── State reset ────────────────────────────────────────────────
|
|
299
289
|
if (flags['reset-state']) {
|
|
300
290
|
const stateFile = ctx.paths.stateFile;
|