@oisincoveney/pipeline 1.23.3 → 1.25.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.
Files changed (72) hide show
  1. package/.agents/skills/execute/SKILL.md +5 -5
  2. package/.agents/skills/inspect/SKILL.md +2 -2
  3. package/.agents/skills/quick/SKILL.md +5 -5
  4. package/README.md +161 -270
  5. package/defaults/install-manifest.json +1 -2
  6. package/defaults/opencode-ecosystem.yaml +3 -3
  7. package/dist/argo-graph.js +94 -0
  8. package/dist/argo-submit.d.ts +56 -0
  9. package/dist/argo-submit.js +184 -0
  10. package/dist/argo-workflow.d.ts +154 -0
  11. package/dist/argo-workflow.js +365 -0
  12. package/dist/commands/pipeline-command.js +6 -2
  13. package/dist/commands/runner-command-command.js +13 -0
  14. package/dist/config.d.ts +14 -24
  15. package/dist/config.js +29 -62
  16. package/dist/gates.js +0 -1
  17. package/dist/index.js +95 -40
  18. package/dist/install-commands.js +45 -221
  19. package/dist/mcp/bootstrap.js +1 -1
  20. package/dist/mcp/gateway.js +6 -22
  21. package/dist/moka-submit.js +190 -0
  22. package/dist/path-refs.js +1 -1
  23. package/dist/pipeline-init.js +13 -11
  24. package/dist/pipeline-runtime.d.ts +6 -1
  25. package/dist/pipeline-runtime.js +44 -101
  26. package/dist/run-state/git-refs.js +103 -0
  27. package/dist/runner-command/finalize.js +74 -0
  28. package/dist/runner-command/run.js +130 -0
  29. package/dist/runner-command/task-descriptor.js +17 -0
  30. package/dist/{runner-job-contract.d.ts → runner-command-contract.d.ts} +40 -88
  31. package/dist/{runner-job-contract.js → runner-command-contract.js} +85 -42
  32. package/dist/runner-event-sink.js +3 -3
  33. package/dist/runner-output.js +0 -12
  34. package/dist/runner.d.ts +1 -1
  35. package/dist/runner.js +33 -74
  36. package/dist/runtime/agent-node/agent-node.js +3 -3
  37. package/dist/runtime/changed-files/changed-files.js +1 -1
  38. package/dist/runtime/context/context.js +5 -14
  39. package/dist/runtime/contracts/contracts.d.ts +1 -2
  40. package/dist/runtime/events/events.js +3 -2
  41. package/dist/runtime/gates/gates.js +3 -3
  42. package/dist/runtime/goal-state.js +1 -1
  43. package/dist/runtime/hooks/hooks.js +3 -3
  44. package/dist/runtime/json-validation/json-validation.js +2 -5
  45. package/dist/runtime/parallel-node/parallel-node.js +2 -7
  46. package/dist/runtime-machines/workflow-machine.js +1 -1
  47. package/dist/schedule-planner.d.ts +3 -315
  48. package/dist/schedule-planner.js +6 -44
  49. package/dist/standard-output-schemas.js +1 -1
  50. package/dist/workflow-planner.d.ts +0 -2
  51. package/dist/workflow-planner.js +1 -3
  52. package/docs/adr-opencode-first-goal-loop-runtime.md +2 -2
  53. package/docs/config-architecture.md +33 -30
  54. package/docs/mcp-gateway.md +8 -8
  55. package/docs/mcp-host-isolation.md +3 -17
  56. package/docs/operator-guide.md +225 -535
  57. package/docs/pipeline-console-runner-contract.md +29 -30
  58. package/docs/pipeline-smoke-recovery-plan.md +4 -4
  59. package/docs/slash-command-adapter-contract.md +4 -7
  60. package/package.json +17 -14
  61. package/dist/commands/runner-job-command.js +0 -14
  62. package/dist/k8s-submit.js +0 -267
  63. package/dist/runner-job/delivery.js +0 -134
  64. package/dist/runner-job/devspace.js +0 -34
  65. package/dist/runner-job/pr-summary.js +0 -117
  66. package/dist/runner-job/run.js +0 -409
  67. package/dist/runner-job/workspace.js +0 -86
  68. package/dist/runner-job-k8s.d.ts +0 -68
  69. package/dist/runner-job-k8s.js +0 -146
  70. package/dist/runtime/worktrees/index.js +0 -2
  71. package/dist/runtime/worktrees/worktrees.js +0 -65
  72. package/dist/toml.js +0 -12
@@ -20,11 +20,11 @@ hooks: generated-defaults-audit
20
20
  Instructions:
21
21
  Orchestrate package-owned pipeline config.
22
22
 
23
- Submit Kubernetes runner Jobs by default through `oisin-pipeline quick` and `oisin-pipeline execute`.
23
+ Submit Momokaya work as Argo Workflows through `moka submit` and `moka submit --quick`.
24
24
 
25
25
  Generate a schedule for entrypoint `execute` and the user task.
26
26
  The schedule policy is `execute-schedule`.
27
- Run `oisin-pipeline execute <task description>` to submit the pipeline as a k8s job.
28
- The pipeline runtime executes inside a Kubernetes pod using the package-owned runner image.
29
- Use `oisin-pipeline execute --local <task description>` for local execution instead.
30
- Use `oisin-pipeline run --schedule <schedule.yaml>` only when rerunning an existing schedule artifact.
27
+ Run `moka submit <task description>` to submit the `execute` graph as an Argo Workflow.
28
+ The pipeline runtime executes as Argo DAG tasks using the package-owned runner image.
29
+ Use `--kubeconfig <path>` and `--namespace <namespace>` to target a local or remote Kubernetes cluster.
30
+ Use `moka submit --schedule <schedule.yaml> <task description>` only when rerunning an existing schedule artifact.
@@ -36,6 +36,6 @@ For each CLI node prompt include:
36
36
  - dependency outputs
37
37
 
38
38
  Only package-configured gates are blocking. Do not invent RED, GREEN, full-suite, typecheck, or unrelated-drift gates.
39
- If a node returns targeted evidence and has no configured blocking gate, advance to the next workflow node.
40
- Do not bypass configured runner subprocesses or package-configured gates when executing workflow nodes.
39
+ If a node returns targeted evidence and has no configured blocking gate, advance to the next node.
40
+ Do not bypass configured runner subprocesses or package-configured gates when executing nodes.
41
41
  Do not claim these nodes are Codex subagents.
@@ -20,11 +20,11 @@ hooks: generated-defaults-audit
20
20
  Instructions:
21
21
  Orchestrate package-owned pipeline config.
22
22
 
23
- Submit Kubernetes runner Jobs by default through `oisin-pipeline quick` and `oisin-pipeline execute`.
23
+ Submit Momokaya work as Argo Workflows through `moka submit` and `moka submit --quick`.
24
24
 
25
25
  Generate a schedule for entrypoint `quick` and the user task.
26
26
  The schedule policy is `quick-schedule`.
27
- Run `oisin-pipeline quick <task description>` to submit the pipeline as a k8s job.
28
- The pipeline runtime executes inside a Kubernetes pod using the package-owned runner image.
29
- Use `oisin-pipeline quick --local <task description>` for local execution instead.
30
- Use `oisin-pipeline run --schedule <schedule.yaml>` only when rerunning an existing schedule artifact.
27
+ Run `moka submit --quick <task description>` to submit the graph as an Argo Workflow.
28
+ The pipeline runtime executes as Argo DAG tasks using the package-owned runner image.
29
+ Use `--kubeconfig <path>` and `--namespace <namespace>` to target a local or remote Kubernetes cluster.
30
+ Use `moka submit --schedule <schedule.yaml> <task description>` only when rerunning an existing schedule artifact.
package/README.md CHANGED
@@ -1,22 +1,38 @@
1
1
  # @oisincoveney/pipeline
2
2
 
3
- Config-driven multi-agent pipeline runner for repository work. Runtime config is
4
- owned by the installed `@oisincoveney/pipeline` package. Repo-local `.pipeline`
5
- paths are runtime artifact locations only; they are not the runtime config
6
- source.
3
+ Config-driven multi-agent pipeline runner for repository work. The installed
4
+ package owns the runtime defaults; target repositories use `.pipeline/runs/` for
5
+ generated schedules and run artifacts, not as the source of runtime config.
7
6
 
8
- ## Requirements
7
+ The published command is `moka`.
8
+
9
+ ## Install
10
+
11
+ Requirements:
9
12
 
10
- - Bun 1.1 or newer
11
13
  - Node.js 22.13 or newer
12
- - `npx`, `backlog`, `uvx`, and Docker on `PATH` for default skills and MCP gateway setup
13
- - At least one configured runner CLI on `PATH`: `codex`, `opencode`, `kimi`,
14
- `pi`, or a declared command runner
14
+ - Bun 1.1 or newer for repository development and package build scripts
15
+ - `npx`, `backlog`, `uvx`, and Docker on `PATH` for default skills and MCP
16
+ gateway setup
17
+ - At least one runner CLI on `PATH`: `opencode` or a configured command runner
18
+
19
+ Install the package in a target repository:
20
+
21
+ ```shell
22
+ npm install --save-dev @oisincoveney/pipeline
23
+ ```
24
+
25
+ Then run the local package binary:
15
26
 
16
- Install dependencies:
27
+ ```shell
28
+ moka --help
29
+ ```
30
+
31
+ For development inside this repository:
17
32
 
18
33
  ```shell
19
34
  bun install --frozen-lockfile
35
+ bun run build:cli
20
36
  ```
21
37
 
22
38
  ## Start A Repository
@@ -24,277 +40,198 @@ bun install --frozen-lockfile
24
40
  Initialize package-owned pipeline support:
25
41
 
26
42
  ```shell
27
- pipe init
43
+ moka init
28
44
  ```
29
45
 
30
- `pipe init` installs default project skills with
31
- `npx skills add oisincoveney/skills`, then writes generated OpenCode and Codex
32
- command surfaces plus their singleton `pipeline-gateway` MCP entries. OpenCode
33
- is the package default runtime; Codex remains a compatibility runner and host
34
- surface. The command does not create repo-local `.pipeline` config files.
46
+ `moka init` installs default project skills with `npx @uidotsh/install`, then
47
+ writes generated OpenCode command surfaces plus the singleton `pipeline-gateway`
48
+ MCP entry. Set `UIDOTSH_TOKEN` before running `moka init` so the ui.sh installer
49
+ does not prompt for the token. OpenCode is the package default runtime. The
50
+ command does not create repo-local `.pipeline` config files.
35
51
 
36
- The default MCP gateway can run locally or point at the hosted Momokaya
37
- gateway. Set `PIPELINE_MCP_GATEWAY_AUTHORIZATION` to the full HTTP
38
- `Authorization` header value before starting Codex or OpenCode when using a
39
- protected gateway:
52
+ The default MCP gateway can run locally or point at the hosted Momokaya gateway.
53
+ Set `PIPELINE_MCP_GATEWAY_AUTHORIZATION` to the full HTTP `Authorization` header
54
+ value before starting OpenCode when using a protected gateway:
40
55
 
41
56
  ```shell
42
57
  export PIPELINE_MCP_GATEWAY_AUTHORIZATION="Basic $(printf '%s' 'user:password' | base64)"
43
58
  ```
44
59
 
45
- To refresh or check generated host files later, use:
60
+ Check or refresh generated host files after package upgrades:
46
61
 
47
62
  ```shell
48
- pipe install-commands --host all --check
63
+ moka install-commands --host all --check
49
64
  ```
50
65
 
51
66
  Check local prerequisites and config health:
52
67
 
53
68
  ```shell
54
- pipe doctor
69
+ moka doctor
55
70
  ```
56
71
 
57
- For a compact operator guide covering every command plus how to attach skills
58
- and MCP servers to agent profiles, see `docs/operator-guide.md`.
59
-
60
- Validate the config and compiled DAG:
72
+ Validate the package-owned config and compiled workflow plan:
61
73
 
62
74
  ```shell
63
- pipe validate
75
+ moka validate
64
76
  ```
65
77
 
66
- Inspect the execution plan before running:
78
+ Inspect the execution plan:
67
79
 
68
80
  ```shell
69
- pipe explain-plan
81
+ moka explain-plan
70
82
  ```
71
83
 
72
- Generate the default schedule artifact:
84
+ ## Command Surface
85
+
86
+ `moka submit "<task>"`
87
+
88
+ Generates the full graph schedule for a task, builds the runner payload from the
89
+ current git context, and submits an Argo Workflow to the configured Momokaya
90
+ cluster.
73
91
 
74
92
  ```shell
75
- pipe "Implement PIPE-123 user-facing behavior"
93
+ moka submit "Implement PIPE-123 user-facing behavior"
76
94
  ```
77
95
 
78
- This writes `.pipeline/runs/<runId>/schedule.yaml` and stops for approval. Run
79
- the approved artifact explicitly:
96
+ `moka submit "<task>" --quick`
97
+
98
+ Uses the compact graph for smaller work.
80
99
 
81
100
  ```shell
82
- pipe run --schedule .pipeline/runs/<runId>/schedule.yaml "Implement PIPE-123 user-facing behavior"
101
+ moka submit "Fix the login bug" --quick
83
102
  ```
84
103
 
85
- Run a read-only repository inspection:
104
+ `moka submit --schedule <schedule.yaml> "<task>"`
105
+
106
+ Submits a previously approved schedule artifact.
86
107
 
87
108
  ```shell
88
- pipe run --workflow inspect "Report the app structure and available checks. Do not modify files."
109
+ moka submit --schedule .pipeline/runs/<runId>/schedule.yaml "Implement PIPE-123"
89
110
  ```
90
111
 
91
- Run a configured entrypoint alias:
112
+ `moka submit --command -- <argv...>`
113
+
114
+ Submits one explicit command as a one-task Argo Workflow.
92
115
 
93
116
  ```shell
94
- pipe run --entrypoint dogfood "Run deterministic local verification."
117
+ moka submit --command -- opencode run "fix this bug"
95
118
  ```
96
119
 
97
- Run an epic drain workflow:
120
+ `moka run "<task>"`
121
+
122
+ Runs package-owned workflow config from the current worktree. Scheduled
123
+ entrypoints generate a schedule artifact under `.pipeline/runs/<runId>/` and run
124
+ the compiled schedule through the runtime.
98
125
 
99
126
  ```shell
100
- pipe epic PIPE-31
127
+ moka run "Implement PIPE-123 user-facing behavior"
128
+ moka run --schedule .pipeline/runs/<runId>/schedule.yaml "Implement PIPE-123"
129
+ moka run --workflow inspect "Report the app structure and available checks. Do not modify files."
130
+ moka run --entrypoint quick "Implement a focused fix"
101
131
  ```
102
132
 
103
- The `epic` entrypoint generates a specialized schedule for the epic, writes the
104
- schedule artifact, and stops. Execution uses the same `pipe run --schedule`
105
- approval boundary as `pipe`.
133
+ `moka inspect "<task>"`
106
134
 
107
- The `pipe` binary also accepts the task directly:
135
+ Runs the configured read-only inspection entrypoint.
108
136
 
109
137
  ```shell
110
- pipe "Implement PIPE-123 user-facing behavior"
138
+ moka inspect "Explain the app structure and available checks"
111
139
  ```
112
140
 
113
- Use `PIPELINE_TARGET_PATH=/path/to/worktree` when invoking from outside the
114
- target repository.
141
+ Use `PIPELINE_TARGET_PATH=/path/to/worktree` when invoking `moka` from outside
142
+ the target repository.
115
143
 
116
- ## Pipeline Console Runner Image
144
+ For a compact command reference, see
145
+ [`docs/operator-guide.md`](docs/operator-guide.md).
117
146
 
118
- `oisin-pipeline` is also the runner package/image used by `pipeline-console`.
119
- The console owns Kubernetes Job creation, run listing, cancellation, event
147
+ ## Momokaya Runner Image
148
+
149
+ The package is also the runner code used by the Momokaya runner image. The
150
+ control plane owns Argo Workflow submission, run listing, cancellation, event
120
151
  storage, Kueue discovery, and UI rendering. This package owns the in-container
121
- `runner-job` command: payload validation, existing runtime invocation, event
122
- translation, authenticated event posting, signal cancellation, and final event
123
- flushing.
124
-
125
- The console starts the image with the payload as a mounted ConfigMap file and
126
- the event auth token as a mounted Secret file. The runner reads the payload
127
- from `--payload-file` and reads the event auth token from the file path
128
- specified in `events.authTokenFile`. No environment variables are used for
129
- payload or auth token delivery. The payload contract is documented in
152
+ `moka runner-command` and `moka runner-finalize` commands used by Argo Workflow
153
+ DAG tasks.
154
+
155
+ Argo starts the image with payload, schedule, and per-task descriptor files
156
+ mounted from ConfigMaps, plus the event auth token mounted from a Secret. The
157
+ runner reads `--payload-file`, `--schedule-file`, and `/etc/pipeline/task.json`;
158
+ payload JSON, task identity, and auth token material are not delivered through
159
+ environment variables. The payload contract is documented in
130
160
  [`docs/pipeline-console-runner-contract.md`](docs/pipeline-console-runner-contract.md).
131
- The executable contract is exported from
132
- `@oisincoveney/pipeline/runner-job-contract` for payload construction,
161
+
162
+ Submitters can import the executable contract from
163
+ `@oisincoveney/pipeline/runner-command-contract` for payload construction,
133
164
  validation, contract-version checks, and JSON Schema generation.
134
- Use `PIPELINE_TARGET_PATH=/path/to/worktree` when the checked-out target repo is
135
- mounted somewhere other than the process working directory.
136
165
 
137
- ## Custom YAML Parts
166
+ ## Configuration Model
138
167
 
139
168
  Runtime execution uses package-owned defaults. Tests and advanced embedding code
140
169
  can still parse explicit YAML parts with `parsePipelineConfigParts()`.
141
170
 
142
- `runners`:
171
+ Package-owned defaults declare:
143
172
 
144
- ```yaml
145
- version: 1
146
-
147
- runners:
148
- codex:
149
- type: codex
150
- command: codex
151
- model: gpt-5.5
152
- capabilities:
153
- native_subagents: true
154
- tools: [read, grep, bash, edit, write]
155
- filesystem: [read-only, workspace-write]
156
- network: [inherit]
157
- output_formats: [text, json, jsonl, json_schema]
158
- ```
173
+ - runner adapters and capabilities
174
+ - profiles, rules, skills, tools, filesystem grants, network grants, and output
175
+ contracts
176
+ - the singleton `pipeline-gateway` MCP connection
177
+ - workflows, schedules, hooks, gates, artifacts, retries, and timeouts
178
+ - generated OpenCode host resources
179
+ - goal-loop contracts and continuation context
159
180
 
160
- `profiles`:
181
+ Current default entrypoints:
161
182
 
162
183
  ```yaml
163
- version: 1
164
-
165
- profiles:
166
- orchestrator:
167
- runner: codex
168
- instructions:
169
- inline: Coordinate the workflow from this YAML file only.
170
- tools: [read, grep, bash]
171
- filesystem:
172
- mode: read-only
173
- network:
174
- mode: inherit
175
- implementer:
176
- runner: codex
177
- instructions:
178
- inline: Implement the requested change and return evidence.
179
- tools: [read, grep, bash, edit, write]
180
- filesystem:
181
- mode: workspace-write
182
- output:
183
- format: text
184
+ entrypoints:
185
+ quick:
186
+ schedule: quick-schedule
187
+ execute:
188
+ schedule: execute-schedule
189
+ inspect:
190
+ workflow: inspect
184
191
  ```
185
192
 
186
- Example workflow shape:
193
+ Current schedule policies:
187
194
 
188
195
  ```yaml
189
- version: 1
190
- default_workflow: default
191
-
192
- orchestrator:
193
- profile: orchestrator
194
-
195
- hooks:
196
- functions: {}
197
- on: {}
198
-
199
- workflows:
200
- default:
201
- execution:
202
- fail_fast: true
203
- max_parallel_nodes: 2
204
- nodes:
205
- - id: implement
206
- kind: agent
207
- profile: implementer
208
- timeout_ms: 300000
209
- retries:
210
- max_attempts: 2
211
- retry_on: [exit_nonzero, gate_failure, timeout]
212
- gates:
213
- - kind: builtin
214
- builtin: test
215
- - kind: builtin
216
- builtin: typecheck
196
+ scheduler:
197
+ commands:
198
+ quick:
199
+ schedule: quick-schedule
200
+ catalog: quick
201
+ execute:
202
+ schedule: execute-schedule
203
+ catalog: execute
217
204
  ```
218
205
 
219
- Package-owned defaults declare `entrypoints` that expose stable app or CLI names
220
- resolving to workflows or schedule policies. Direct `--workflow` selection
221
- remains available and takes precedence over `--entrypoint` when both are set.
206
+ Workflows and generated schedules can express fixed parallel structure. A
207
+ `kind: parallel` node contains a fixed set of child nodes that run concurrently
208
+ after dependencies pass. A `kind: group` node groups existing nodes behind a
209
+ single dependency target. Agents may route work to tracks, but the branch
210
+ topology stays auditable in YAML or in the generated schedule artifact.
222
211
 
223
- The package defaults include a full research, red, green, verify, learn
224
- workflow. See `docs/config-architecture.md` for the host support matrix.
212
+ See [`docs/config-architecture.md`](docs/config-architecture.md) for the config
213
+ shape and [`docs/xstate-runtime-actor-model.md`](docs/xstate-runtime-actor-model.md)
214
+ for the runtime actor model.
225
215
 
226
- ### Structural Parallelism
227
-
228
- Workflows can compose other workflows with fixed YAML structure. A
229
- `kind: workflow` node invokes another named workflow; without `worktree_root` it
230
- runs in the current worktree, and with `worktree_root` it runs in an isolated
231
- git worktree. A `kind: parallel` node contains a fixed set of child nodes that
232
- run concurrently after dependencies pass. This is structural parallelism, not
233
- dynamic fanout: agents may route work to tracks, but the branch topology stays
234
- auditable in YAML.
216
+ ## Generated Host Resources
235
217
 
236
- The built-in `epic` entrypoint uses those primitives:
218
+ Generate native host files during setup:
237
219
 
238
- ```yaml
239
- entrypoints:
240
- epic:
241
- workflow: epic-drain
242
- description: Route an epic's tickets into specialist tracks, run them in parallel, then thermo-nuclear review.
243
-
244
- workflows:
245
- epic-drain:
246
- description: Research, route, parallel-implement tracks in isolated worktrees, integrate, thermo-nuclear review.
247
- nodes:
248
- - id: research
249
- kind: agent
250
- profile: pipeline-researcher
251
- - id: plan
252
- kind: agent
253
- profile: pipeline-epic-router
254
- needs: [research]
255
- - id: implement
256
- kind: parallel
257
- needs: [plan]
258
- nodes:
259
- - id: test
260
- kind: workflow
261
- workflow: default
262
- worktree_root: .pipeline/runs/${runId}/test
263
- - id: frontend
264
- kind: workflow
265
- workflow: default
266
- worktree_root: .pipeline/runs/${runId}/frontend
267
- - id: backend
268
- kind: workflow
269
- workflow: default
270
- worktree_root: .pipeline/runs/${runId}/backend
271
- - id: k8s
272
- kind: workflow
273
- workflow: infra
274
- worktree_root: .pipeline/runs/${runId}/k8s
275
- - id: merge
276
- kind: builtin
277
- builtin: drain-merge
278
- needs: [implement]
279
- - id: review
280
- kind: agent
281
- profile: pipeline-thermo-nuclear-reviewer
282
- needs: [merge]
283
- gates:
284
- - { id: review-verdict, kind: verdict, target: stdout }
220
+ ```shell
221
+ moka init
285
222
  ```
286
223
 
287
- Use `.pipeline/runs/${runId}/<track>` for isolated track worktrees; the default
288
- `.gitignore` excludes `.pipeline/runs/`. The `drain-merge` builtin consumes the
289
- parallel output, skips non-passing or non-worktree children, verifies mergeable
290
- branches share a base SHA, and merges passing branches into an integration
291
- branch in declaration order. It reports merge conflicts; it does not resolve
292
- them automatically.
224
+ Generated resources are derived from package-owned config; they are not separate
225
+ sources of truth. Host resources use OpenCode native agents for model-backed
226
+ nodes. Otherwise generated instructions dispatch to the configured command
227
+ runner.
293
228
 
294
- Default profile skills and generated host resources are installed by
295
- `pipe init`. Runtime MCP projection and host-specific isolation policy live in
296
- `src/mcp`; see [`docs/mcp-host-isolation.md`](docs/mcp-host-isolation.md) and
297
- [`docs/mcp-gateway.md`](docs/mcp-gateway.md).
229
+ | Host | Generated files | Invocation |
230
+ | --- | --- | --- |
231
+ | OpenCode | `.opencode/commands/<entrypoint>.md`, `.opencode/agents/*.md`, `.opencode/skills/*/SKILL.md`, `.opencode/plugins/*.ts`, `.opencode/opencode.json` | `/quick <task>`, `/execute <task>`, `/inspect <task>` |
232
+
233
+ The installer is idempotent, supports `--check` and `--dry-run`, and refuses to
234
+ overwrite manually edited files unless `--force` is supplied.
298
235
 
299
236
  ## OpenCode-First Goal Loop
300
237
 
@@ -304,75 +241,19 @@ evidence, acceptance evidence, changed files, and failed gates are stored by the
304
241
  pipeline, not inferred from an OpenCode session. A goal is complete only when
305
242
  deterministic verifier evidence and acceptance coverage are both present.
306
243
 
307
- The curated OpenCode stack generated by package config includes:
308
-
309
- - project commands, agents, projected skills, explicit permissions, LSP, and the
310
- singleton `pipeline-gateway` MCP server;
311
- - `.opencode/plugins/pipeline-goal-context.ts`, a package-owned compaction hook
312
- that injects current goal-loop context into OpenCode continuation summaries;
313
- - `@devtheops/opencode-plugin-otel@1.1.0` in `.opencode/opencode.json`;
314
- - surfaced ecosystem inputs for DCP code, handoff/session capture,
315
- background-agent delegation, prompt snippets, memory/context helpers, and
316
- policy hooks.
317
-
318
244
  Team mode is generated as an auditable schedule graph. OpenCode subagents can
319
245
  execute graph nodes, but dependencies, retries, gates, verifier passes, and
320
246
  acceptance evidence stay pipeline-owned.
321
247
 
322
- ## Generated Host Resources
323
-
324
- Generate native host files during setup:
325
-
326
- ```shell
327
- pipe init
328
- ```
329
-
330
- Generated resources are derived from package-owned config; they are not separate
331
- sources of truth. Host resources use exact native agents when the node runner
332
- matches the host. OpenCode also uses native subagents for cross-runner
333
- model-backed nodes when the runner/profile provides an OpenCode-compatible
334
- `model` or `host_models.opencode` value. Otherwise generated instructions
335
- dispatch to that runner's CLI instead of inventing a host model.
336
- The installer creates one command surface per configured entrypoint.
337
-
338
- | Host | Generated files | Invocation |
339
- | ----------- | ----------------------------------------------------------------- | ---------------------------------- |
340
- | Codex | `.agents/skills/<entrypoint>/SKILL.md`, `.agents/plugins/oisin-pipeline/commands/<entrypoint>.md`, `.agents/plugins/oisin-pipeline/agents/*.md`, `.codex/config.toml` | `$pipe <task>`, `$inspect <task>`, `$epic <task>`, `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
341
- | OpenCode | `.opencode/commands/<entrypoint>.md`, `.opencode/agents/*.md`, `.opencode/skills/*/SKILL.md`, `.opencode/plugins/*.ts`, `.opencode/opencode.json` | `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
342
- | Kimi | `.kimi/commands/<entrypoint>.md`, `.kimi/agents/*.yaml` | `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
343
- | Pi | `.pi/prompts/<entrypoint>.md` | `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
344
-
345
- The installer is idempotent, supports `--check` and `--dry-run`, and refuses to
346
- overwrite manually edited files unless `--force` is supplied.
347
-
348
- Runner `model` is the canonical model id. Optional `host_models.<host>` entries
349
- are only needed when a host uses a different model identifier:
350
-
351
- ```yaml
352
- runners:
353
- kimi:
354
- type: kimi
355
- command: kimi
356
- model: moonshot/kimi-k2.6
357
- ```
358
-
359
248
  ## Runtime Guarantees
360
249
 
361
- - `pipe run` loads package-owned `@oisincoveney/pipeline` config even when the
250
+ - `moka run` loads package-owned `@oisincoveney/pipeline` config even when the
362
251
  repository has no repo-local `.pipeline` config files.
363
252
  - Multi-agent workflows execute as separate agent boundaries; nodes are not
364
253
  merged into one prompt.
365
254
  - Native subagent strategy is preferred when the selected runner can represent
366
255
  the configured semantics. Otherwise the runtime uses a subprocess boundary.
367
256
  - Parallel DAG batches run concurrently after dependencies and gates pass.
368
- - `kind: parallel` child sets are fixed in YAML; routing agents decide which
369
- work belongs in each declared track, not how many tracks exist.
370
- - `kind: workflow` nodes invoke named workflows and can run in isolated
371
- worktrees when `worktree_root` is set.
372
- - Worktree roots support `${runId}` and `${nodeId}` templates and should live
373
- under `.pipeline/runs/` for generated run artifacts.
374
- - `drain-merge` merges passing worktree branches in declaration order and
375
- reports conflicts for manual resolution.
376
257
  - Workflow execution can cap parallelism and enable fail-fast batch stopping.
377
258
  - Nodes can declare bounded retries, retry reasons, backoff, and execution
378
259
  timeouts.
@@ -384,7 +265,7 @@ runners:
384
265
 
385
266
  ## App-Facing API
386
267
 
387
- External apps can import the stable config, planner, schedule, and runtime surfaces
268
+ External apps can import stable config, planner, schedule, and runtime surfaces
388
269
  without deep-importing private source paths:
389
270
 
390
271
  ```ts
@@ -418,16 +299,23 @@ Runner Job producers can import the shared payload contract:
418
299
 
419
300
  ```ts
420
301
  import {
421
- RUNNER_JOB_CONTRACT_VERSION,
422
- buildRunnerJobPayload,
423
- parseRunnerJobPayload,
424
- runnerJobPayloadJsonSchema,
425
- } from "@oisincoveney/pipeline/runner-job-contract";
302
+ buildRunnerCommandPayload,
303
+ parseRunnerCommandPayload,
304
+ runnerCommandPayloadSchema,
305
+ } from "@oisincoveney/pipeline/runner-command-contract";
426
306
  ```
427
307
 
428
- ## Verification
308
+ Argo Workflows can be rendered with `buildRunnerArgoWorkflowManifest` from
309
+ `@oisincoveney/pipeline/argo-workflow` and submitted with
310
+ `submitRunnerArgoWorkflow` from `@oisincoveney/pipeline/argo-submit`.
311
+
312
+ ## Release And Verification
429
313
 
430
- Use these commands before committing changes in this repository:
314
+ Package and container publishing is owned by GitHub Actions. Do not publish from
315
+ a workstation with `npm publish`, `semantic-release`, Docker pushes, or direct
316
+ registry commands.
317
+
318
+ Before committing changes in this repository, run:
431
319
 
432
320
  ```shell
433
321
  bun run typecheck
@@ -436,5 +324,8 @@ bun run test
436
324
  bun run build:cli
437
325
  ```
438
326
 
327
+ For runner-image wiring, also run:
439
328
 
440
- Runner Kubernetes Jobs can be generated with `buildRunnerJobK8sManifest` from `@oisincoveney/pipeline/runner-job-k8s`.
329
+ ```shell
330
+ bun run test:image
331
+ ```
@@ -2,8 +2,7 @@
2
2
  "version": 1,
3
3
  "skills": [
4
4
  {
5
- "source": "oisincoveney/skills",
6
- "args": ["--agent", "codex", "--skill", "*", "--yes", "--copy"]
5
+ "source": "@uidotsh/install"
7
6
  }
8
7
  ]
9
8
  }
@@ -2,7 +2,7 @@ version: 1
2
2
  generated_by: "@oisincoveney/pipeline"
3
3
  runtime:
4
4
  default_runner: opencode
5
- compatibility_runners: [codex]
5
+ compatibility_runners: []
6
6
  default_stack_direct: true
7
7
  state_authority: pipeline
8
8
  official_dependencies:
@@ -56,7 +56,7 @@ ecosystem_code:
56
56
  plugin:
57
57
  kind: npm
58
58
  package: "@prevalentware/opencode-goal-plugin"
59
- role: Codex-style long-running goal mode with /goal slash command, persistent state, evidence-gated completion, and TUI sidebar
59
+ role: long-running goal mode with /goal slash command, persistent state, evidence-gated completion, and TUI sidebar
60
60
  default_stack: true
61
61
  source: https://www.npmjs.com/package/@prevalentware/opencode-goal-plugin
62
62
  - id: oc-codex-multi-auth
@@ -88,7 +88,7 @@ mcp_backends:
88
88
  locality: project-remote
89
89
  required: true
90
90
  credentials: [PIPELINE_MCP_GATEWAY_AUTHORIZATION]
91
- role: singleton MCP server exposed to generated Codex and OpenCode host config
91
+ role: singleton MCP server exposed to generated OpenCode host config
92
92
  - id: context7
93
93
  name: Context7
94
94
  locality: shared-remote