@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.
Files changed (113) hide show
  1. package/README-CN.md +59 -9
  2. package/README.md +99 -67
  3. package/dist/commands/acpCommand.d.ts.map +1 -1
  4. package/dist/commands/acpCommand.js +2 -19
  5. package/dist/commands/acpCommand.js.map +1 -1
  6. package/dist/commands/doctor.d.ts.map +1 -1
  7. package/dist/commands/doctor.js +3 -13
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/logs.d.ts.map +1 -1
  10. package/dist/commands/logs.js +58 -2
  11. package/dist/commands/logs.js.map +1 -1
  12. package/dist/commands/monitorTick.d.ts.map +1 -1
  13. package/dist/commands/monitorTick.js +2 -3
  14. package/dist/commands/monitorTick.js.map +1 -1
  15. package/dist/commands/reset.d.ts.map +1 -1
  16. package/dist/commands/reset.js +4 -0
  17. package/dist/commands/reset.js.map +1 -1
  18. package/dist/commands/tick.d.ts.map +1 -1
  19. package/dist/commands/tick.js +3 -4
  20. package/dist/commands/tick.js.map +1 -1
  21. package/dist/commands/workerDashboard.d.ts.map +1 -1
  22. package/dist/commands/workerDashboard.js +55 -95
  23. package/dist/commands/workerDashboard.js.map +1 -1
  24. package/dist/core/config.d.ts +8 -7
  25. package/dist/core/config.d.ts.map +1 -1
  26. package/dist/core/config.js +15 -7
  27. package/dist/core/config.js.map +1 -1
  28. package/dist/core/config.test.js +23 -5
  29. package/dist/core/config.test.js.map +1 -1
  30. package/dist/core/sessionLiveness.d.ts +0 -1
  31. package/dist/core/sessionLiveness.d.ts.map +1 -1
  32. package/dist/core/sessionLiveness.js +7 -15
  33. package/dist/core/sessionLiveness.js.map +1 -1
  34. package/dist/core/state.d.ts +4 -5
  35. package/dist/core/state.d.ts.map +1 -1
  36. package/dist/core/state.js +0 -1
  37. package/dist/core/state.js.map +1 -1
  38. package/dist/core/state.test.js +0 -1
  39. package/dist/core/state.test.js.map +1 -1
  40. package/dist/engines/CloseoutEngine.js +1 -1
  41. package/dist/engines/CloseoutEngine.js.map +1 -1
  42. package/dist/engines/ExecutionEngine.d.ts +1 -1
  43. package/dist/engines/ExecutionEngine.js +3 -3
  44. package/dist/engines/ExecutionEngine.js.map +1 -1
  45. package/dist/engines/MonitorEngine.d.ts +4 -7
  46. package/dist/engines/MonitorEngine.d.ts.map +1 -1
  47. package/dist/engines/MonitorEngine.js +10 -68
  48. package/dist/engines/MonitorEngine.js.map +1 -1
  49. package/dist/interfaces/ACPClient.d.ts +10 -0
  50. package/dist/interfaces/ACPClient.d.ts.map +1 -1
  51. package/dist/main.js +1 -1
  52. package/dist/main.js.map +1 -1
  53. package/dist/manager/completion-judge.d.ts.map +1 -1
  54. package/dist/manager/completion-judge.js +7 -0
  55. package/dist/manager/completion-judge.js.map +1 -1
  56. package/dist/manager/integration-queue.d.ts +1 -1
  57. package/dist/manager/integration-queue.d.ts.map +1 -1
  58. package/dist/manager/runtime-coordinator.js +1 -1
  59. package/dist/manager/runtime-coordinator.js.map +1 -1
  60. package/dist/manager/worker-manager-impl.d.ts +9 -1
  61. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  62. package/dist/manager/worker-manager-impl.js +74 -8
  63. package/dist/manager/worker-manager-impl.js.map +1 -1
  64. package/dist/manager/worker-manager.d.ts +4 -4
  65. package/dist/manager/worker-manager.d.ts.map +1 -1
  66. package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
  67. package/dist/providers/ACPWorkerRuntime.js +5 -0
  68. package/dist/providers/ACPWorkerRuntime.js.map +1 -1
  69. package/dist/providers/LocalACPClient.d.ts +1 -2
  70. package/dist/providers/LocalACPClient.d.ts.map +1 -1
  71. package/dist/providers/LocalACPClient.js +7 -22
  72. package/dist/providers/LocalACPClient.js.map +1 -1
  73. package/dist/providers/adapters/AcpSdkAdapter.d.ts +14 -0
  74. package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +1 -0
  75. package/dist/providers/adapters/AcpSdkAdapter.js +270 -0
  76. package/dist/providers/adapters/AcpSdkAdapter.js.map +1 -0
  77. package/dist/providers/adapters/acp-fs-handlers.d.ts +26 -0
  78. package/dist/providers/adapters/acp-fs-handlers.d.ts.map +1 -0
  79. package/dist/providers/adapters/acp-fs-handlers.js +52 -0
  80. package/dist/providers/adapters/acp-fs-handlers.js.map +1 -0
  81. package/dist/providers/adapters/acp-fs-handlers.test.d.ts +2 -0
  82. package/dist/providers/adapters/acp-fs-handlers.test.d.ts.map +1 -0
  83. package/dist/providers/adapters/acp-fs-handlers.test.js +65 -0
  84. package/dist/providers/adapters/acp-fs-handlers.test.js.map +1 -0
  85. package/dist/providers/adapters/acp-permissions.d.ts +35 -0
  86. package/dist/providers/adapters/acp-permissions.d.ts.map +1 -0
  87. package/dist/providers/adapters/acp-permissions.js +69 -0
  88. package/dist/providers/adapters/acp-permissions.js.map +1 -0
  89. package/dist/providers/adapters/acp-permissions.test.d.ts +2 -0
  90. package/dist/providers/adapters/acp-permissions.test.d.ts.map +1 -0
  91. package/dist/providers/adapters/acp-permissions.test.js +88 -0
  92. package/dist/providers/adapters/acp-permissions.test.js.map +1 -0
  93. package/dist/providers/adapters/acp-session-accumulator.d.ts +23 -0
  94. package/dist/providers/adapters/acp-session-accumulator.d.ts.map +1 -0
  95. package/dist/providers/adapters/acp-session-accumulator.js +99 -0
  96. package/dist/providers/adapters/acp-session-accumulator.js.map +1 -0
  97. package/dist/providers/adapters/acp-session-accumulator.test.d.ts +2 -0
  98. package/dist/providers/adapters/acp-session-accumulator.test.d.ts.map +1 -0
  99. package/dist/providers/adapters/acp-session-accumulator.test.js +73 -0
  100. package/dist/providers/adapters/acp-session-accumulator.test.js.map +1 -0
  101. package/dist/providers/adapters/acp-terminal-manager.d.ts +56 -0
  102. package/dist/providers/adapters/acp-terminal-manager.d.ts.map +1 -0
  103. package/dist/providers/adapters/acp-terminal-manager.js +118 -0
  104. package/dist/providers/adapters/acp-terminal-manager.js.map +1 -0
  105. package/dist/providers/adapters/acp-terminal-manager.test.d.ts +2 -0
  106. package/dist/providers/adapters/acp-terminal-manager.test.d.ts.map +1 -0
  107. package/dist/providers/adapters/acp-terminal-manager.test.js +71 -0
  108. package/dist/providers/adapters/acp-terminal-manager.test.js.map +1 -0
  109. package/dist/providers/registry.d.ts +0 -2
  110. package/dist/providers/registry.d.ts.map +1 -1
  111. package/dist/providers/registry.js +0 -26
  112. package/dist/providers/registry.js.map +1 -1
  113. 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
- | 文件 | 用途 | 提交到 git |
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.24.0**
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.24.0 — Worker Manager architecture**: All worker lifecycle management is now mediated by the `WorkerManager` ACP interface (`src/manager/worker-manager.ts`). ExecutionEngine and CloseoutEngine call `WorkerManager.run()` instead of spawning workers directly. Key changes:
15
+ **v0.26.0 highlights**:
16
16
 
17
- - **WorkerManager**: Unified interface wrapping Supervisor, CompletionJudge, ResourceLimiter. Methods: `run/resume/cancel/sendInput/confirm/inspect/onEvent/recover`.
18
- - **IntegrationQueue**: Per project+targetBranch FIFO queue. Integration tasks serialize; development tasks parallelize.
19
- - **SPSEventHandler**: Event-driven PM operations. Worker exit CompletionJudge WorkerEvent EventHandler moves cards, adds labels, sends notifications.
20
- - **Recovery**: Decision matrix (R1-R9) with rescue push, worktree rebuild, integration queue reconstruction.
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
- The two-phase state machine continues: `Inprogress` = development, `QA` = integration/merge. One-shot `proc` workers (`codex exec` / `claude -p`) remain the main autonomous path. PTY/ACP available for `sps acp`, dashboard, and manual diagnostics.
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 | Required only for legacy `WORKER_MODE=interactive` and tmux-backed `WORKER_TRANSPORT=acp` |
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 now uses one-shot child processes by default. `WORKER_TRANSPORT=proc` is the workflow transport for `tick`, `pipeline tick`, `qa tick`, `worker launch`, and `recovery`; workers run through `codex exec` or `claude -p`, finish a single task phase, and exit. PTY/ACP still exist, but only for `sps acp`, dashboard observability, and manual diagnostics. Their strong runtime contract (`waiting_input`, `needs_confirmation`, `running`, `completed`, plus `stalled_submit`) remains useful for those manual surfaces, but it is no longer the default autonomous execution 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
- | tmux | Whether tmux is available (WORKER_MODE=interactive only) | -- |
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
- # - tmux Not required (WORKER_MODE=print)
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 a persistent PTY-backed local session when `WORKER_TRANSPORT=pty`, and falls back to the legacy tmux-backed gateway when the project still uses `WORKER_TRANSPORT=acp`
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 execution modes (`WORKER_MODE`):**
597
+ **Worker transport modes (`WORKER_TRANSPORT`):**
597
598
 
598
- | Mode | Default | Description |
599
- |------|---------|-------------|
600
- | `print` | **Yes** | One-shot execution, process exit = task complete, no tmux dependency |
601
- | `interactive` | No | Traditional tmux TUI interactive mode (fallback) |
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
- **Print mode (recommended):**
604
+ **ACP SDK mode (default):**
604
605
 
605
- The Worker runs as a subprocess, prompt is passed via stdin, output is written to a JSONL file:
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
- - Print mode panels show: PID, exit code, JSONL-rendered human-readable output
668
- - PTY / ACP panels show: transport, session/run status, model, cwd, pending confirmation, and the latest structured summary line
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 | Process/tmux session is dead but slot is still marked active |
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 the following files in the project repository root and auto-commits them:
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
- | File | Purpose | Committed to git |
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
- | `WORKER_MODE` | No | `print` | Execution mode: `print` (one-shot process) / `interactive` (tmux TUI) |
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 tmux sessions (interactive mode only) |
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
- WORKER_MODE="print" # print (recommended) or interactive (tmux fallback)
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 (routes by WORKER_MODE x WORKER_TOOL)
1131
+ │ ├── registry.ts # Provider factory
1098
1132
  │ ├── PlaneTaskBackend.ts
1099
1133
  │ ├── TrelloTaskBackend.ts
1100
1134
  │ ├── MarkdownTaskBackend.ts
1101
- │ ├── ClaudePrintProvider.ts # claude -p one-shot execution (default)
1102
- ├── CodexExecProvider.ts # codex exec one-shot execution (default)
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/tmux detection)
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":"AA0BA,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,CA0If"}
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
- // Try PTY first, then tmux ACP
131
- const transport = ctx.config.raw.WORKER_TRANSPORT || 'acp';
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":"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"}
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,CA8TtF"}
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"}
@@ -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. tmux (only required for WORKER_MODE=interactive)
286
- if (ctx.config.WORKER_MODE === 'interactive') {
287
- try {
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;