@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.
- package/.agents/skills/execute/SKILL.md +5 -5
- package/.agents/skills/inspect/SKILL.md +2 -2
- package/.agents/skills/quick/SKILL.md +5 -5
- package/README.md +161 -270
- package/defaults/install-manifest.json +1 -2
- package/defaults/opencode-ecosystem.yaml +3 -3
- package/dist/argo-graph.js +94 -0
- package/dist/argo-submit.d.ts +56 -0
- package/dist/argo-submit.js +184 -0
- package/dist/argo-workflow.d.ts +154 -0
- package/dist/argo-workflow.js +365 -0
- package/dist/commands/pipeline-command.js +6 -2
- package/dist/commands/runner-command-command.js +13 -0
- package/dist/config.d.ts +14 -24
- package/dist/config.js +29 -62
- package/dist/gates.js +0 -1
- package/dist/index.js +95 -40
- package/dist/install-commands.js +45 -221
- package/dist/mcp/bootstrap.js +1 -1
- package/dist/mcp/gateway.js +6 -22
- package/dist/moka-submit.js +190 -0
- package/dist/path-refs.js +1 -1
- package/dist/pipeline-init.js +13 -11
- package/dist/pipeline-runtime.d.ts +6 -1
- package/dist/pipeline-runtime.js +44 -101
- package/dist/run-state/git-refs.js +103 -0
- package/dist/runner-command/finalize.js +74 -0
- package/dist/runner-command/run.js +130 -0
- package/dist/runner-command/task-descriptor.js +17 -0
- package/dist/{runner-job-contract.d.ts → runner-command-contract.d.ts} +40 -88
- package/dist/{runner-job-contract.js → runner-command-contract.js} +85 -42
- package/dist/runner-event-sink.js +3 -3
- package/dist/runner-output.js +0 -12
- package/dist/runner.d.ts +1 -1
- package/dist/runner.js +33 -74
- package/dist/runtime/agent-node/agent-node.js +3 -3
- package/dist/runtime/changed-files/changed-files.js +1 -1
- package/dist/runtime/context/context.js +5 -14
- package/dist/runtime/contracts/contracts.d.ts +1 -2
- package/dist/runtime/events/events.js +3 -2
- package/dist/runtime/gates/gates.js +3 -3
- package/dist/runtime/goal-state.js +1 -1
- package/dist/runtime/hooks/hooks.js +3 -3
- package/dist/runtime/json-validation/json-validation.js +2 -5
- package/dist/runtime/parallel-node/parallel-node.js +2 -7
- package/dist/runtime-machines/workflow-machine.js +1 -1
- package/dist/schedule-planner.d.ts +3 -315
- package/dist/schedule-planner.js +6 -44
- package/dist/standard-output-schemas.js +1 -1
- package/dist/workflow-planner.d.ts +0 -2
- package/dist/workflow-planner.js +1 -3
- package/docs/adr-opencode-first-goal-loop-runtime.md +2 -2
- package/docs/config-architecture.md +33 -30
- package/docs/mcp-gateway.md +8 -8
- package/docs/mcp-host-isolation.md +3 -17
- package/docs/operator-guide.md +225 -535
- package/docs/pipeline-console-runner-contract.md +29 -30
- package/docs/pipeline-smoke-recovery-plan.md +4 -4
- package/docs/slash-command-adapter-contract.md +4 -7
- package/package.json +17 -14
- package/dist/commands/runner-job-command.js +0 -14
- package/dist/k8s-submit.js +0 -267
- package/dist/runner-job/delivery.js +0 -134
- package/dist/runner-job/devspace.js +0 -34
- package/dist/runner-job/pr-summary.js +0 -117
- package/dist/runner-job/run.js +0 -409
- package/dist/runner-job/workspace.js +0 -86
- package/dist/runner-job-k8s.d.ts +0 -68
- package/dist/runner-job-k8s.js +0 -146
- package/dist/runtime/worktrees/index.js +0 -2
- package/dist/runtime/worktrees/worktrees.js +0 -65
- 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
|
|
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 `
|
|
28
|
-
The pipeline runtime executes
|
|
29
|
-
Use
|
|
30
|
-
Use `
|
|
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
|
|
40
|
-
Do not bypass configured runner subprocesses or package-configured gates when executing
|
|
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
|
|
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 `
|
|
28
|
-
The pipeline runtime executes
|
|
29
|
-
Use
|
|
30
|
-
Use `
|
|
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.
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
43
|
+
moka init
|
|
28
44
|
```
|
|
29
45
|
|
|
30
|
-
`
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
60
|
+
Check or refresh generated host files after package upgrades:
|
|
46
61
|
|
|
47
62
|
```shell
|
|
48
|
-
|
|
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
|
-
|
|
69
|
+
moka doctor
|
|
55
70
|
```
|
|
56
71
|
|
|
57
|
-
|
|
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
|
-
|
|
75
|
+
moka validate
|
|
64
76
|
```
|
|
65
77
|
|
|
66
|
-
Inspect the execution plan
|
|
78
|
+
Inspect the execution plan:
|
|
67
79
|
|
|
68
80
|
```shell
|
|
69
|
-
|
|
81
|
+
moka explain-plan
|
|
70
82
|
```
|
|
71
83
|
|
|
72
|
-
|
|
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
|
-
|
|
93
|
+
moka submit "Implement PIPE-123 user-facing behavior"
|
|
76
94
|
```
|
|
77
95
|
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
`moka submit "<task>" --quick`
|
|
97
|
+
|
|
98
|
+
Uses the compact graph for smaller work.
|
|
80
99
|
|
|
81
100
|
```shell
|
|
82
|
-
|
|
101
|
+
moka submit "Fix the login bug" --quick
|
|
83
102
|
```
|
|
84
103
|
|
|
85
|
-
|
|
104
|
+
`moka submit --schedule <schedule.yaml> "<task>"`
|
|
105
|
+
|
|
106
|
+
Submits a previously approved schedule artifact.
|
|
86
107
|
|
|
87
108
|
```shell
|
|
88
|
-
|
|
109
|
+
moka submit --schedule .pipeline/runs/<runId>/schedule.yaml "Implement PIPE-123"
|
|
89
110
|
```
|
|
90
111
|
|
|
91
|
-
|
|
112
|
+
`moka submit --command -- <argv...>`
|
|
113
|
+
|
|
114
|
+
Submits one explicit command as a one-task Argo Workflow.
|
|
92
115
|
|
|
93
116
|
```shell
|
|
94
|
-
|
|
117
|
+
moka submit --command -- opencode run "fix this bug"
|
|
95
118
|
```
|
|
96
119
|
|
|
97
|
-
|
|
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
|
-
|
|
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
|
-
|
|
104
|
-
schedule artifact, and stops. Execution uses the same `pipe run --schedule`
|
|
105
|
-
approval boundary as `pipe`.
|
|
133
|
+
`moka inspect "<task>"`
|
|
106
134
|
|
|
107
|
-
|
|
135
|
+
Runs the configured read-only inspection entrypoint.
|
|
108
136
|
|
|
109
137
|
```shell
|
|
110
|
-
|
|
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
|
|
114
|
-
target repository.
|
|
141
|
+
Use `PIPELINE_TARGET_PATH=/path/to/worktree` when invoking `moka` from outside
|
|
142
|
+
the target repository.
|
|
115
143
|
|
|
116
|
-
|
|
144
|
+
For a compact command reference, see
|
|
145
|
+
[`docs/operator-guide.md`](docs/operator-guide.md).
|
|
117
146
|
|
|
118
|
-
|
|
119
|
-
|
|
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-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
132
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
171
|
+
Package-owned defaults declare:
|
|
143
172
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
181
|
+
Current default entrypoints:
|
|
161
182
|
|
|
162
183
|
```yaml
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
193
|
+
Current schedule policies:
|
|
187
194
|
|
|
188
195
|
```yaml
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
|
|
224
|
-
|
|
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
|
-
|
|
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
|
-
|
|
218
|
+
Generate native host files during setup:
|
|
237
219
|
|
|
238
|
-
```
|
|
239
|
-
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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
|
-
- `
|
|
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
|
|
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
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
329
|
+
```shell
|
|
330
|
+
bun run test:image
|
|
331
|
+
```
|
|
@@ -2,7 +2,7 @@ version: 1
|
|
|
2
2
|
generated_by: "@oisincoveney/pipeline"
|
|
3
3
|
runtime:
|
|
4
4
|
default_runner: opencode
|
|
5
|
-
compatibility_runners: [
|
|
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:
|
|
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
|
|
91
|
+
role: singleton MCP server exposed to generated OpenCode host config
|
|
92
92
|
- id: context7
|
|
93
93
|
name: Context7
|
|
94
94
|
locality: shared-remote
|