@coralai/sps-cli 0.37.2 → 0.38.0
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 +27 -63
- package/dist/commands/acpCommand.js +3 -3
- package/dist/commands/acpCommand.js.map +1 -1
- package/dist/commands/agentCommand.d.ts.map +1 -1
- package/dist/commands/agentCommand.js +12 -15
- package/dist/commands/agentCommand.js.map +1 -1
- package/dist/commands/agentDaemon.js +1 -1
- package/dist/commands/agentDaemon.js.map +1 -1
- package/dist/commands/cardAdd.js +1 -1
- package/dist/commands/cardAdd.js.map +1 -1
- package/dist/commands/cardDashboard.js +1 -1
- package/dist/commands/cardDashboard.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +11 -30
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pipelineRunner.js +1 -1
- package/dist/commands/pipelineRunner.js.map +1 -1
- package/dist/commands/pipelineTick.d.ts.map +1 -1
- package/dist/commands/pipelineTick.js +1 -1
- package/dist/commands/pipelineTick.js.map +1 -1
- package/dist/commands/projectInit.d.ts.map +1 -1
- package/dist/commands/projectInit.js +2 -12
- package/dist/commands/projectInit.js.map +1 -1
- package/dist/commands/qaTick.d.ts.map +1 -1
- package/dist/commands/qaTick.js +1 -1
- package/dist/commands/qaTick.js.map +1 -1
- package/dist/commands/reset.js +1 -1
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +16 -30
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +16 -1
- package/dist/commands/tick.js.map +1 -1
- package/dist/commands/workerDashboard.d.ts.map +1 -1
- package/dist/commands/workerDashboard.js +10 -60
- package/dist/commands/workerDashboard.js.map +1 -1
- package/dist/commands/workerLaunch.d.ts.map +1 -1
- package/dist/commands/workerLaunch.js +1 -1
- package/dist/commands/workerLaunch.js.map +1 -1
- package/dist/commands/workerPs.d.ts +1 -1
- package/dist/commands/workerPs.d.ts.map +1 -1
- package/dist/commands/workerPs.js +3 -3
- package/dist/commands/workerPs.js.map +1 -1
- package/dist/core/config.d.ts +0 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +0 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/config.test.js +12 -14
- package/dist/core/config.test.js.map +1 -1
- package/dist/core/context.d.ts +0 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +0 -1
- package/dist/core/context.js.map +1 -1
- package/dist/core/logger.js +1 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/memory.js.map +1 -1
- package/dist/core/pipelineConfig.d.ts +1 -1
- package/dist/core/pipelineConfig.d.ts.map +1 -1
- package/dist/core/projectPipelineAdapter.d.ts +1 -1
- package/dist/core/projectPipelineAdapter.d.ts.map +1 -1
- package/dist/core/projectPipelineAdapter.js +4 -5
- package/dist/core/projectPipelineAdapter.js.map +1 -1
- package/dist/core/queue.d.ts.map +1 -1
- package/dist/core/queue.js.map +1 -1
- package/dist/core/runtimeStore.d.ts.map +1 -1
- package/dist/core/runtimeStore.js.map +1 -1
- package/dist/core/sessionCleanup.d.ts +18 -0
- package/dist/core/sessionCleanup.d.ts.map +1 -0
- package/dist/core/sessionCleanup.js +97 -0
- package/dist/core/sessionCleanup.js.map +1 -0
- package/dist/core/sessionCleanup.test.d.ts +2 -0
- package/dist/core/sessionCleanup.test.d.ts.map +1 -0
- package/dist/core/sessionCleanup.test.js +158 -0
- package/dist/core/sessionCleanup.test.js.map +1 -0
- package/dist/core/sessionContext.d.ts +0 -3
- package/dist/core/sessionContext.d.ts.map +1 -1
- package/dist/core/sessionContext.js +1 -4
- package/dist/core/sessionContext.js.map +1 -1
- package/dist/core/sessionLiveness.d.ts +1 -1
- package/dist/core/sessionLiveness.d.ts.map +1 -1
- package/dist/core/sessionLiveness.js +1 -1
- package/dist/core/sessionLiveness.js.map +1 -1
- package/dist/core/state.d.ts +3 -3
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.test.js.map +1 -1
- package/dist/engines/EventHandler.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.d.ts +1 -0
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +63 -0
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/engines/MonitorEngine.test.d.ts +2 -0
- package/dist/engines/MonitorEngine.test.d.ts.map +1 -0
- package/dist/engines/MonitorEngine.test.js +171 -0
- package/dist/engines/MonitorEngine.test.js.map +1 -0
- package/dist/engines/SchedulerEngine.js +1 -1
- package/dist/engines/SchedulerEngine.js.map +1 -1
- package/dist/engines/StageEngine.d.ts +1 -2
- package/dist/engines/StageEngine.d.ts.map +1 -1
- package/dist/engines/StageEngine.js +4 -6
- package/dist/engines/StageEngine.js.map +1 -1
- package/dist/engines/engine-pipeline-adapter.test.js +2 -4
- package/dist/engines/engine-pipeline-adapter.test.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/manager/completion-judge.test.js +1 -1
- package/dist/manager/completion-judge.test.js.map +1 -1
- package/dist/manager/pm-client.js.map +1 -1
- package/dist/manager/runtime-coordinator.d.ts +2 -2
- package/dist/manager/runtime-coordinator.d.ts.map +1 -1
- package/dist/manager/runtime-coordinator.js +3 -3
- package/dist/manager/runtime-coordinator.js.map +1 -1
- package/dist/manager/supervisor.d.ts +2 -3
- package/dist/manager/supervisor.d.ts.map +1 -1
- package/dist/manager/supervisor.js +3 -12
- package/dist/manager/supervisor.js.map +1 -1
- package/dist/manager/supervisor.test.js +4 -4
- package/dist/manager/supervisor.test.js.map +1 -1
- package/dist/manager/worker-manager-impl.js +2 -2
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/manager/worker-manager-impl.test.js.map +1 -1
- package/dist/manager/worker-manager.d.ts +2 -2
- package/dist/manager/worker-manager.d.ts.map +1 -1
- package/dist/models/acp.d.ts +1 -1
- package/dist/models/acp.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.js +2 -2
- package/dist/providers/ACPWorkerRuntime.js.map +1 -1
- package/dist/providers/MarkdownTaskBackend.js +1 -1
- package/dist/providers/MarkdownTaskBackend.js.map +1 -1
- package/dist/providers/PlaneTaskBackend.js +1 -1
- package/dist/providers/PlaneTaskBackend.js.map +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.js +1 -3
- package/dist/providers/adapters/AcpSdkAdapter.js.map +1 -1
- package/dist/providers/adapters/acp-permissions.test.js.map +1 -1
- package/dist/providers/outputParser.d.ts +0 -6
- package/dist/providers/outputParser.d.ts.map +1 -1
- package/dist/providers/outputParser.js +0 -33
- package/dist/providers/outputParser.js.map +1 -1
- package/dist/providers/outputParser.test.js +1 -34
- package/dist/providers/outputParser.test.js.map +1 -1
- package/dist/providers/registry.d.ts +0 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/streamRenderer.d.ts +0 -4
- package/dist/providers/streamRenderer.d.ts.map +1 -1
- package/dist/providers/streamRenderer.js +0 -35
- package/dist/providers/streamRenderer.js.map +1 -1
- package/package.json +1 -1
- package/project-template/conf.template +1 -1
- package/skills/sps-pipeline/SKILL.md +150 -205
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamRenderer.js","sourceRoot":"","sources":["../../src/providers/streamRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;YACzD,IAAI,IAAI,CAAC,IAAI,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAA4B;IACrD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,CAAC,uBAAuB;QAEtC,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,GAAG,CAAC,OAA8C,CAAC;YAC/D,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAA4C,CAAC;YAC/D,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;oBAAE,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;qBAC7E,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;oBAAE,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;qBACpE,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;oBAAE,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/E,CAAC;YACD,OAAO,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QAC9B,CAAC;QAED,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC,CAAC,4BAA4B;QAE3C,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;gBACjD,CAAC,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBACxC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,CAAC;YAC3E,OAAO,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC;QAC9B,CAAC;QAED;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"streamRenderer.js","sourceRoot":"","sources":["../../src/providers/streamRenderer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -43,7 +43,7 @@ export PIPELINE_LABEL="AI-PIPELINE"
|
|
|
43
43
|
export MR_MODE="none"
|
|
44
44
|
|
|
45
45
|
# ── Worker / Agent ───────────────────────────────────────────────
|
|
46
|
-
|
|
46
|
+
# claude is the only supported CLI; no selector exposed.
|
|
47
47
|
export MAX_CONCURRENT_WORKERS=3
|
|
48
48
|
# export MAX_ACTIONS_PER_TICK=1
|
|
49
49
|
# export WORKER_RESTART_LIMIT=2
|
|
@@ -1,305 +1,250 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sps-pipeline
|
|
3
3
|
description: |
|
|
4
|
-
SPS pipeline management — create YAML
|
|
5
|
-
|
|
6
|
-
"
|
|
7
|
-
|
|
4
|
+
SPS pipeline management — create projects, configure YAML pipelines, manage task cards,
|
|
5
|
+
start/stop pipelines, and monitor worker status. Single worker serial execution model.
|
|
6
|
+
Use when asked to "create a pipeline", "set up a project", "add tasks", "start the pipeline",
|
|
7
|
+
"check pipeline status", or manage SPS workflow. (🪸 Coral SPS)
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# SPS Pipeline Management (v0.37.
|
|
10
|
+
# SPS Pipeline Management (v0.37.2 — Single Worker Model)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
SPS runs a single AI worker that processes task cards one at a time. Each card goes through
|
|
13
|
+
one or more stages (develop, review, etc.) before moving to Done. If a card fails, the
|
|
14
|
+
pipeline halts until the issue is resolved.
|
|
13
15
|
|
|
14
16
|
## Interactive Pipeline Creation
|
|
15
17
|
|
|
16
|
-
When the user asks to create a pipeline, set up a project, or configure YAML
|
|
18
|
+
When the user asks to create a pipeline, set up a project, or configure YAML:
|
|
17
19
|
|
|
18
20
|
### Step 1: Gather project info
|
|
19
21
|
|
|
20
22
|
Ask the user:
|
|
21
|
-
1.
|
|
22
|
-
2.
|
|
23
|
-
3. **Git
|
|
24
|
-
4.
|
|
25
|
-
5. **PM
|
|
23
|
+
1. **Project name** — SPS identifier (e.g. `my-app`)
|
|
24
|
+
2. **Repository path** — local path (e.g. `~/projects/my-app`)
|
|
25
|
+
3. **Git remote** — GitLab/GitHub project path (e.g. `user/my-app`), blank to skip
|
|
26
|
+
4. **Target branch** — default `main` or `develop`
|
|
27
|
+
5. **PM backend** — `markdown` (zero-config) / `plane` / `trello`
|
|
26
28
|
|
|
27
|
-
### Step 2: Design the pipeline
|
|
29
|
+
### Step 2: Design the pipeline
|
|
28
30
|
|
|
29
31
|
Ask the user:
|
|
30
|
-
1.
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
5. **最大并发 Worker 数?** — 默认 `1`
|
|
38
|
-
|
|
39
|
-
**If git: false:**
|
|
40
|
-
- All stages MUST use `completion: exit-code` (no git-evidence or fast-forward-merge)
|
|
41
|
-
- Workers operate directly in PROJECT_DIR, no branch/worktree isolation
|
|
42
|
-
- Recommend MAX_CONCURRENT_WORKERS=1 or task-specific subdirectories to avoid conflicts
|
|
43
|
-
|
|
44
|
-
### CRITICAL: State Chain Rules
|
|
45
|
-
|
|
46
|
-
When generating multi-stage YAML, follow these rules strictly:
|
|
47
|
-
|
|
48
|
-
1. **Each stage's `on_complete` MUST point to the NEXT stage's `trigger` state** — never skip stages, never loop back to the same state
|
|
49
|
-
2. **Each stage MUST have a unique `card_state`** — no two stages share the same active state
|
|
50
|
-
3. **The last stage's `on_complete` MUST be `"move_card Done"`**
|
|
51
|
-
4. **The last stage SHOULD have `queue: fifo`** and `completion: fast-forward-merge` for safe merging
|
|
52
|
-
5. **States flow in one direction**: Ready → Stage1Active → Stage2Active → ... → Done
|
|
53
|
-
|
|
54
|
-
Example state chain for 3 stages:
|
|
55
|
-
```
|
|
56
|
-
Ready → [develop] Inprogress → [code-review] CodeReview → [integrate] QA → Done
|
|
57
|
-
trigger card_state trigger card_state trigger card_state
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
WRONG patterns to avoid:
|
|
61
|
-
- `on_complete: "move_card Done"` on a non-last stage (skips remaining stages)
|
|
62
|
-
- `trigger: "card_enters 'Done'"` (Done is the terminal state, never trigger from it)
|
|
63
|
-
- Two stages with same `card_state: QA` (ambiguous, both stages compete)
|
|
32
|
+
1. **Project type:**
|
|
33
|
+
- `git: true` (default) — code project, worker commits + pushes to current branch
|
|
34
|
+
- `git: false` — non-code project (document processing, data tasks, no git ops)
|
|
35
|
+
2. **How many stages?**
|
|
36
|
+
- **Simple** (1 stage): develop → Done
|
|
37
|
+
- **With review** (2 stages): develop → review → Done
|
|
38
|
+
3. **Skill profile?** — e.g. `fullstack`, `frontend`, `backend`, `reviewer`, `tax-worker` (optional)
|
|
64
39
|
|
|
65
40
|
### Step 3: Generate and deploy
|
|
66
41
|
|
|
67
|
-
Based on the answers:
|
|
68
42
|
1. Run `sps project init <name>` if project doesn't exist
|
|
69
|
-
2. Generate
|
|
70
|
-
3.
|
|
71
|
-
4. Run `sps doctor <name> --fix` to validate
|
|
72
|
-
5. Show the user the generated YAML and explain each section
|
|
43
|
+
2. Generate YAML at `~/.coral/projects/<name>/pipelines/project.yaml`
|
|
44
|
+
3. Show the generated YAML and explain each section
|
|
73
45
|
|
|
74
|
-
###
|
|
46
|
+
### CRITICAL: YAML Rules
|
|
75
47
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
```
|
|
48
|
+
1. **`on_complete` of each stage MUST point to the next stage's target state** — no skipping, no looping
|
|
49
|
+
2. **Last stage's `on_complete` MUST be `"move_card Done"`**
|
|
50
|
+
3. **`trigger` and `card_state` are auto-derived** — you don't need to specify them
|
|
51
|
+
4. **Completion is always `exit-code`** — worker finishes when the AI process exits
|
|
52
|
+
5. **Single worker** — cards are processed one at a time, no concurrency
|
|
82
53
|
|
|
83
|
-
###
|
|
84
|
-
|
|
85
|
-
User: "帮我创建一个新项目的 pipeline"
|
|
86
|
-
|
|
87
|
-
Agent flow:
|
|
88
|
-
1. Ask project name and repo path
|
|
89
|
-
2. Ask how many stages they want
|
|
90
|
-
3. Ask agent preference
|
|
91
|
-
4. Generate YAML + conf
|
|
92
|
-
5. Run doctor to validate
|
|
93
|
-
6. Show next steps (add cards, start pipeline)
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Quick Reference
|
|
98
|
-
|
|
99
|
-
### Project Setup
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
# Install SPS CLI
|
|
103
|
-
npm install -g @coralai/sps-cli
|
|
104
|
-
|
|
105
|
-
# Initial setup (creates directories, installs skills, configures credentials)
|
|
106
|
-
sps setup
|
|
54
|
+
### YAML Examples
|
|
107
55
|
|
|
108
|
-
|
|
109
|
-
sps project init <project-name>
|
|
110
|
-
|
|
111
|
-
# Edit project config
|
|
112
|
-
vim ~/.coral/projects/<project-name>/conf
|
|
113
|
-
|
|
114
|
-
# Health check
|
|
115
|
-
sps doctor <project-name> --fix
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Pipeline YAML Configuration
|
|
119
|
-
|
|
120
|
-
Create `.sps/pipelines/<name>.yaml` in the project repo. Minimum viable config (1 stage):
|
|
56
|
+
**Simple (1 stage):**
|
|
121
57
|
|
|
122
58
|
```yaml
|
|
123
59
|
mode: project
|
|
124
|
-
|
|
125
|
-
states:
|
|
126
|
-
backlog: Backlog
|
|
127
|
-
ready: Todo
|
|
128
|
-
done: Done
|
|
60
|
+
git: true
|
|
129
61
|
|
|
130
62
|
stages:
|
|
131
63
|
- name: develop
|
|
132
|
-
trigger: "card_enters 'Todo'"
|
|
133
|
-
card_state: Inprogress
|
|
134
64
|
agent: claude
|
|
135
|
-
completion: git-evidence
|
|
136
65
|
on_complete: "move_card Done"
|
|
66
|
+
on_fail:
|
|
67
|
+
action: "label NEEDS-FIX"
|
|
68
|
+
halt: true
|
|
137
69
|
```
|
|
138
70
|
|
|
139
|
-
|
|
71
|
+
**With review (2 stages):**
|
|
140
72
|
|
|
141
73
|
```yaml
|
|
142
74
|
mode: project
|
|
143
|
-
|
|
144
|
-
states:
|
|
145
|
-
backlog: Backlog
|
|
146
|
-
ready: Ready
|
|
147
|
-
done: Done
|
|
75
|
+
git: true
|
|
148
76
|
|
|
149
77
|
stages:
|
|
150
78
|
- name: develop
|
|
151
|
-
trigger: "card_enters 'Ready'"
|
|
152
|
-
card_state: Active
|
|
153
79
|
agent: claude
|
|
154
80
|
profile: fullstack
|
|
155
|
-
|
|
156
|
-
on_complete: "move_card CodeReview"
|
|
81
|
+
on_complete: "move_card Review"
|
|
157
82
|
on_fail:
|
|
158
83
|
action: "label NEEDS-FIX"
|
|
159
|
-
|
|
84
|
+
halt: true
|
|
160
85
|
|
|
161
|
-
- name:
|
|
162
|
-
trigger: "card_enters 'CodeReview'"
|
|
163
|
-
card_state: CodeReview
|
|
164
|
-
agent: claude
|
|
86
|
+
- name: review
|
|
165
87
|
profile: reviewer
|
|
166
|
-
completion: exit-code
|
|
167
|
-
on_complete: "move_card QA"
|
|
168
|
-
|
|
169
|
-
- name: integrate
|
|
170
|
-
trigger: "card_enters 'QA'"
|
|
171
|
-
card_state: QA
|
|
172
|
-
agent: claude
|
|
173
|
-
completion: fast-forward-merge
|
|
174
88
|
on_complete: "move_card Done"
|
|
175
|
-
|
|
89
|
+
on_fail:
|
|
90
|
+
action: "label REVIEW-FAILED"
|
|
91
|
+
halt: true
|
|
176
92
|
```
|
|
177
93
|
|
|
178
|
-
|
|
94
|
+
**Non-code (data processing):**
|
|
179
95
|
|
|
180
|
-
|
|
96
|
+
```yaml
|
|
97
|
+
mode: project
|
|
98
|
+
git: false
|
|
181
99
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
100
|
+
stages:
|
|
101
|
+
- name: process
|
|
102
|
+
profile: tax-worker
|
|
103
|
+
on_complete: "move_card Done"
|
|
104
|
+
on_fail:
|
|
105
|
+
action: "label PROCESS-FAILED"
|
|
106
|
+
halt: true
|
|
185
107
|
```
|
|
186
108
|
|
|
187
|
-
###
|
|
109
|
+
### YAML Location
|
|
188
110
|
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
sps card dashboard <project>
|
|
192
|
-
sps reset <project> <seq1> <seq2> ...
|
|
111
|
+
```
|
|
112
|
+
~/.coral/projects/<name>/pipelines/project.yaml
|
|
193
113
|
```
|
|
194
114
|
|
|
195
|
-
###
|
|
115
|
+
### YAML Field Reference
|
|
116
|
+
|
|
117
|
+
| Field | Required | Description |
|
|
118
|
+
|-------|----------|-------------|
|
|
119
|
+
| `mode` | yes | Always `project` |
|
|
120
|
+
| `git` | no | `true` (default, commit+push) or `false` (no git) |
|
|
121
|
+
| `stages` | yes | Array of stage definitions |
|
|
122
|
+
| `stages[].name` | yes | Stage name (unique) |
|
|
123
|
+
| `stages[].agent` | no | Accepted for backward-compat only; value ignored (claude is the only supported CLI) |
|
|
124
|
+
| `stages[].profile` | no | Skill profile to load |
|
|
125
|
+
| `stages[].on_complete` | yes | `"move_card <State>"` — next state |
|
|
126
|
+
| `stages[].on_fail.action` | no | `"label <LABEL>"` — add label on failure |
|
|
127
|
+
| `stages[].on_fail.halt` | no | `true` (default) stop pipeline / `false` continue |
|
|
128
|
+
| `stages[].on_fail.comment` | no | Comment text on failure |
|
|
129
|
+
| `stages[].timeout` | no | Max duration: `30s` / `5m` / `2h` |
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Quick Reference
|
|
134
|
+
|
|
135
|
+
### Project Lifecycle
|
|
196
136
|
|
|
197
137
|
```bash
|
|
198
|
-
#
|
|
199
|
-
|
|
200
|
-
|
|
138
|
+
# Install
|
|
139
|
+
npm install -g @coralai/sps-cli
|
|
140
|
+
|
|
141
|
+
# Setup (credentials, skills, directories)
|
|
142
|
+
sps setup
|
|
143
|
+
|
|
144
|
+
# Initialize project (interactive)
|
|
145
|
+
sps project init <name>
|
|
201
146
|
|
|
202
|
-
#
|
|
203
|
-
|
|
147
|
+
# Create pipeline YAML
|
|
148
|
+
vim ~/.coral/projects/<name>/pipelines/project.yaml
|
|
204
149
|
|
|
205
|
-
#
|
|
150
|
+
# Add task cards
|
|
151
|
+
sps card add <name> "Task title" "Description"
|
|
152
|
+
|
|
153
|
+
# Start pipeline
|
|
154
|
+
sps tick <name>
|
|
155
|
+
|
|
156
|
+
# Monitor
|
|
157
|
+
sps card dashboard <name>
|
|
158
|
+
sps worker ps <name>
|
|
206
159
|
sps status
|
|
160
|
+
|
|
161
|
+
# Stop
|
|
162
|
+
sps stop <name>
|
|
207
163
|
```
|
|
208
164
|
|
|
209
|
-
###
|
|
165
|
+
### Card Management
|
|
210
166
|
|
|
211
167
|
```bash
|
|
212
|
-
sps
|
|
213
|
-
sps
|
|
214
|
-
sps
|
|
168
|
+
sps card add <project> "Title" "Description"
|
|
169
|
+
sps card dashboard <project>
|
|
170
|
+
sps reset <project> # Reset all non-Done cards
|
|
171
|
+
sps reset <project> 5 6 7 # Reset specific cards
|
|
215
172
|
```
|
|
216
173
|
|
|
217
174
|
### Memory System
|
|
218
175
|
|
|
219
|
-
Three-layer persistent memory at `~/.coral/memory/`:
|
|
220
|
-
|
|
221
176
|
```bash
|
|
222
|
-
# View memory index
|
|
223
177
|
sps memory list <project>
|
|
224
|
-
|
|
225
|
-
# Generate memory context for prompt injection
|
|
226
178
|
sps memory context <project>
|
|
227
|
-
|
|
228
|
-
# Add memory entries
|
|
229
|
-
sps memory add <project> --type convention --name "API naming" --body "Use camelCase"
|
|
230
|
-
sps memory add <project> --type decision --name "Use PostgreSQL" --body "Concurrent writes needed"
|
|
231
|
-
sps memory add <project> --type lesson --name "Migration order" --body "Schema first, then data"
|
|
232
|
-
sps memory add <project> --type reference --name "Design docs" --body "figma.com/file/..."
|
|
179
|
+
sps memory add <project> --type convention --name "Title" --body "Content"
|
|
233
180
|
```
|
|
234
181
|
|
|
235
|
-
Types: `convention` (no decay), `decision` (slow
|
|
182
|
+
Types: `convention` (no decay), `decision` (slow), `lesson` (30 days), `reference` (no decay).
|
|
236
183
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
### Skill Management
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
sps skill sync
|
|
243
|
-
```
|
|
184
|
+
---
|
|
244
185
|
|
|
245
|
-
## Architecture
|
|
186
|
+
## Architecture
|
|
246
187
|
|
|
247
188
|
```
|
|
248
|
-
SchedulerEngine
|
|
249
|
-
→
|
|
189
|
+
SchedulerEngine
|
|
190
|
+
→ Planning cards with AI-PIPELINE label → Backlog → Ready
|
|
250
191
|
|
|
251
|
-
StageEngine
|
|
252
|
-
→
|
|
253
|
-
→
|
|
254
|
-
→ Worker runs directly in PROJECT_DIR (no worktree/branch)
|
|
255
|
-
→ Failure halts pipeline until resolved
|
|
192
|
+
StageEngine (single worker, serial)
|
|
193
|
+
→ Take one card → run stage 1 → run stage 2 → ... → Done
|
|
194
|
+
→ Fail → NEEDS-FIX → halt pipeline
|
|
256
195
|
|
|
257
|
-
MonitorEngine
|
|
196
|
+
MonitorEngine
|
|
258
197
|
→ Worker health check
|
|
259
198
|
```
|
|
260
199
|
|
|
261
|
-
|
|
200
|
+
### Execution Model
|
|
262
201
|
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
-
|
|
266
|
-
-
|
|
202
|
+
- **One card at a time** — no concurrency, no worktrees, no feature branches
|
|
203
|
+
- **Worker runs in PROJECT_DIR** — directly on the current branch
|
|
204
|
+
- **git: true** — worker commits and pushes to current branch
|
|
205
|
+
- **git: false** — worker processes files, no git operations
|
|
206
|
+
- **Failure halts pipeline** — NEEDS-FIX label blocks next card until resolved
|
|
207
|
+
- **Auto-recovery** — orphaned Inprogress cards reset to Ready on tick restart
|
|
267
208
|
|
|
268
|
-
|
|
209
|
+
### Card State Flow
|
|
269
210
|
|
|
270
211
|
```
|
|
271
|
-
Planning → Backlog → Ready →
|
|
272
|
-
|
|
273
|
-
|
|
212
|
+
Planning → Backlog → Ready → Inprogress → [Review] → Done
|
|
213
|
+
↓ fail
|
|
214
|
+
NEEDS-FIX (halt)
|
|
274
215
|
```
|
|
275
216
|
|
|
276
|
-
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Config Reference (conf)
|
|
277
220
|
|
|
278
|
-
| Field | Description |
|
|
279
|
-
|
|
280
|
-
| `PROJECT_NAME` | Project identifier |
|
|
281
|
-
| `PROJECT_DIR` | Repository path |
|
|
282
|
-
| `GITLAB_PROJECT` | Git remote
|
|
283
|
-
| `GITLAB_MERGE_BRANCH` |
|
|
284
|
-
| `PM_TOOL` |
|
|
285
|
-
| `
|
|
286
|
-
| `MAX_CONCURRENT_WORKERS` | Max parallel workers | `1-5` |
|
|
221
|
+
| Field | Description |
|
|
222
|
+
|-------|-------------|
|
|
223
|
+
| `PROJECT_NAME` | Project identifier |
|
|
224
|
+
| `PROJECT_DIR` | Repository path |
|
|
225
|
+
| `GITLAB_PROJECT` | Git remote path (optional) |
|
|
226
|
+
| `GITLAB_MERGE_BRANCH` | Target branch |
|
|
227
|
+
| `PM_TOOL` | `markdown` / `plane` / `trello` |
|
|
228
|
+
| `PIPELINE_LABEL` | Card label for pipeline (default: `AI-PIPELINE`) |
|
|
287
229
|
|
|
288
230
|
## Card Labels
|
|
289
231
|
|
|
290
232
|
| Label | Purpose |
|
|
291
233
|
|-------|---------|
|
|
292
|
-
| `AI-PIPELINE` |
|
|
293
|
-
| `skill:xxx` | Load specific skill profile
|
|
294
|
-
| `
|
|
295
|
-
| `
|
|
296
|
-
| `BLOCKED` | External dependency blocking |
|
|
234
|
+
| `AI-PIPELINE` | Required — marks card for pipeline |
|
|
235
|
+
| `skill:xxx` | Load specific skill profile |
|
|
236
|
+
| `NEEDS-FIX` | Worker failed — pipeline halted |
|
|
237
|
+
| `BLOCKED` | External dependency |
|
|
297
238
|
|
|
298
239
|
## Troubleshooting
|
|
299
240
|
|
|
300
241
|
```bash
|
|
301
|
-
sps doctor <project> --fix
|
|
302
|
-
sps logs <project>
|
|
303
|
-
|
|
304
|
-
sps reset <project> <seq>
|
|
242
|
+
sps doctor <project> --fix # Health check
|
|
243
|
+
sps logs <project> # View logs
|
|
244
|
+
sps reset <project> <seq> # Reset stuck card
|
|
305
245
|
```
|
|
246
|
+
|
|
247
|
+
Common issues:
|
|
248
|
+
- **Pipeline halted** — check `sps card dashboard`, remove NEEDS-FIX label from failed card
|
|
249
|
+
- **Worker not starting** — check `sps worker ps`, verify API credentials
|
|
250
|
+
- **Cards stuck in Planning** — ensure cards have `AI-PIPELINE` label
|