@jterrats/open-orchestra 1.0.6 → 1.0.8
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/CHANGELOG.md +41 -0
- package/dist/args.js +6 -2
- package/dist/args.js.map +1 -1
- package/dist/autonomous-run-state.js +12 -18
- package/dist/autonomous-run-state.js.map +1 -1
- package/dist/benchmark.js +6 -1
- package/dist/benchmark.js.map +1 -1
- package/dist/cli.js +5 -454
- package/dist/cli.js.map +1 -1
- package/dist/command-manifest.js +1 -0
- package/dist/command-manifest.js.map +1 -1
- package/dist/command-route-utils.d.ts +18 -0
- package/dist/command-route-utils.js +18 -0
- package/dist/command-route-utils.js.map +1 -0
- package/dist/command-routes-integrations.d.ts +2 -0
- package/dist/command-routes-integrations.js +82 -0
- package/dist/command-routes-integrations.js.map +1 -0
- package/dist/command-routes.d.ts +2 -0
- package/dist/command-routes.js +173 -0
- package/dist/command-routes.js.map +1 -0
- package/dist/commands.d.ts +1 -0
- package/dist/commands.js +5 -0
- package/dist/commands.js.map +1 -1
- package/dist/cursor-canvas.js +1 -1
- package/dist/cursor-canvas.js.map +1 -1
- package/dist/delivery-dashboard.js +8 -5
- package/dist/delivery-dashboard.js.map +1 -1
- package/dist/extensions.js +2 -1
- package/dist/extensions.js.map +1 -1
- package/dist/instruction-blocks.js +6 -1
- package/dist/instruction-blocks.js.map +1 -1
- package/dist/lesson-assist.js +1 -1
- package/dist/lesson-assist.js.map +1 -1
- package/dist/mcp-tool-adapter.js +2 -2
- package/dist/mcp-tool-adapter.js.map +1 -1
- package/dist/memory.js +1 -1
- package/dist/memory.js.map +1 -1
- package/dist/package-info.d.ts +7 -0
- package/dist/package-info.js +32 -0
- package/dist/package-info.js.map +1 -0
- package/dist/phase-executor.js +6 -22
- package/dist/phase-executor.js.map +1 -1
- package/dist/planning-commands.js +2 -10
- package/dist/planning-commands.js.map +1 -1
- package/dist/prompt-registry-validation.js +1 -1
- package/dist/prompt-registry-validation.js.map +1 -1
- package/dist/qa-coverage.js +2 -11
- package/dist/qa-coverage.js.map +1 -1
- package/dist/refresh-generated.js +6 -17
- package/dist/refresh-generated.js.map +1 -1
- package/dist/release-commands.js +5 -2
- package/dist/release-commands.js.map +1 -1
- package/dist/release-readiness.d.ts +7 -0
- package/dist/release-readiness.js +31 -1
- package/dist/release-readiness.js.map +1 -1
- package/dist/runtime-bootstrap-targets.d.ts +15 -0
- package/dist/runtime-bootstrap-targets.js +68 -0
- package/dist/runtime-bootstrap-targets.js.map +1 -0
- package/dist/runtime-budget-envelopes.d.ts +33 -0
- package/dist/runtime-budget-envelopes.js +93 -0
- package/dist/runtime-budget-envelopes.js.map +1 -0
- package/dist/runtime-commands.js +1 -1
- package/dist/runtime-commands.js.map +1 -1
- package/dist/runtime-execution-renderer.js +16 -52
- package/dist/runtime-execution-renderer.js.map +1 -1
- package/dist/runtime-execution.js +4 -2
- package/dist/runtime-execution.js.map +1 -1
- package/dist/runtime-guardrails.js +4 -0
- package/dist/runtime-guardrails.js.map +1 -1
- package/dist/runtime-parent-actions.d.ts +10 -0
- package/dist/runtime-parent-actions.js +63 -0
- package/dist/runtime-parent-actions.js.map +1 -0
- package/dist/runtime-renderer-lines.d.ts +5 -0
- package/dist/runtime-renderer-lines.js +58 -0
- package/dist/runtime-renderer-lines.js.map +1 -0
- package/dist/runtime-scheduler.d.ts +64 -0
- package/dist/runtime-scheduler.js +171 -0
- package/dist/runtime-scheduler.js.map +1 -0
- package/dist/runtime-spawn-bridge.js +20 -0
- package/dist/runtime-spawn-bridge.js.map +1 -1
- package/dist/runtime-spawn-quality.d.ts +2 -0
- package/dist/runtime-spawn-quality.js +11 -0
- package/dist/runtime-spawn-quality.js.map +1 -0
- package/dist/skills-catalog.js +69 -0
- package/dist/skills-catalog.js.map +1 -1
- package/dist/sonar-commands.d.ts +2 -0
- package/dist/sonar-commands.js +56 -0
- package/dist/sonar-commands.js.map +1 -0
- package/dist/sonar-insights.d.ts +63 -0
- package/dist/sonar-insights.js +144 -0
- package/dist/sonar-insights.js.map +1 -0
- package/dist/sonar-provider.d.ts +12 -0
- package/dist/sonar-provider.js +54 -0
- package/dist/sonar-provider.js.map +1 -0
- package/dist/telemetry-redaction.js +7 -4
- package/dist/telemetry-redaction.js.map +1 -1
- package/dist/tracker-adapters.js +7 -6
- package/dist/tracker-adapters.js.map +1 -1
- package/dist/types/model-config.d.ts +3 -0
- package/dist/types/runtime.d.ts +35 -0
- package/dist/types/workflow-run.d.ts +5 -2
- package/dist/types.d.ts +2 -1
- package/dist/types.js.map +1 -1
- package/dist/upgrade-commands.js +1 -11
- package/dist/upgrade-commands.js.map +1 -1
- package/dist/web-api-read-routes.js +19 -10
- package/dist/web-api-read-routes.js.map +1 -1
- package/dist/web-api.js +8 -6
- package/dist/web-api.js.map +1 -1
- package/dist/web-console/assets/index-CgSKcay8.js +11 -0
- package/dist/web-console/index.html +1 -1
- package/dist/workflow-markdown.d.ts +2 -1
- package/dist/workflow-markdown.js +11 -0
- package/dist/workflow-markdown.js.map +1 -1
- package/dist/workflow-run-commands.js +37 -2
- package/dist/workflow-run-commands.js.map +1 -1
- package/dist/workflow-services.d.ts +1 -0
- package/dist/workflow-services.js +67 -6
- package/dist/workflow-services.js.map +1 -1
- package/dist/workflow-task-service.js +11 -3
- package/dist/workflow-task-service.js.map +1 -1
- package/dist/workspace-init-artifacts.d.ts +8 -0
- package/dist/workspace-init-artifacts.js +53 -0
- package/dist/workspace-init-artifacts.js.map +1 -0
- package/dist/workspace-runtime-bootstrap.d.ts +10 -0
- package/dist/workspace-runtime-bootstrap.js +59 -0
- package/dist/workspace-runtime-bootstrap.js.map +1 -0
- package/dist/workspace.js +6 -107
- package/dist/workspace.js.map +1 -1
- package/docs/audio-video-transcription-skill.md +58 -0
- package/docs/autonomous-workflow.md +7 -0
- package/docs/command-contracts.md +11 -0
- package/docs/core-command-surface.md +6 -0
- package/docs/e2e-test-batteries.md +95 -0
- package/docs/generated-artifact-api-catalog.md +366 -0
- package/docs/release-test-matrix.md +16 -5
- package/docs/runtime-adapters.md +38 -1
- package/docs/site-manifest.json +3 -0
- package/docs/sonar-quality-gates.md +79 -5
- package/package.json +2 -1
- package/skills/audio-video-transcription/SKILL.md +129 -0
- package/skills/audio-video-transcription/manifest.json +61 -0
- package/dist/web-console/assets/index-BNESIVvk.js +0 -11
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
# Generated Artifact API Catalog
|
|
2
|
+
|
|
3
|
+
Open Orchestra keeps the human-facing flow small: use `orchestra init` to create
|
|
4
|
+
or repair a workspace, and use `orchestra refresh` to reconcile managed
|
|
5
|
+
generated artifacts after initialization.
|
|
6
|
+
|
|
7
|
+
The lower-level commands in this catalog remain available as APIs for tests,
|
|
8
|
+
automation, integrations, and advanced troubleshooting. They should not be the
|
|
9
|
+
first commands shown to new users.
|
|
10
|
+
|
|
11
|
+
## API Tags
|
|
12
|
+
|
|
13
|
+
- `system`: manages generated files, instruction blocks, manifests, or runtime
|
|
14
|
+
bootstrap artifacts.
|
|
15
|
+
- `process`: derives workflow, phase, skill, or playbook guidance from task
|
|
16
|
+
state.
|
|
17
|
+
- `experience`: renders runtime-specific output for an agent, IDE, web console,
|
|
18
|
+
or other user-facing integration.
|
|
19
|
+
|
|
20
|
+
## Safety Contract
|
|
21
|
+
|
|
22
|
+
Generated artifact APIs must preserve user-authored content outside managed
|
|
23
|
+
Open Orchestra blocks. `--check` and `--dry-run` must not write files. `--force`
|
|
24
|
+
may replace managed blocks, but it must not overwrite unrelated project
|
|
25
|
+
instructions.
|
|
26
|
+
|
|
27
|
+
Prefer these top-level commands for normal use:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
orchestra init --check
|
|
31
|
+
orchestra init --force --target codex,claude
|
|
32
|
+
orchestra refresh --check --json
|
|
33
|
+
orchestra refresh --force --runtime-artifacts
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## APIs
|
|
37
|
+
|
|
38
|
+
### `runtime bootstrap`
|
|
39
|
+
|
|
40
|
+
Tags: `system`, `experience`
|
|
41
|
+
|
|
42
|
+
Renders or upserts runtime bootstrap instructions for a specific agent target.
|
|
43
|
+
Use it when an integration needs a single target file instead of the full
|
|
44
|
+
workspace initialization flow.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
orchestra runtime bootstrap --target codex --file AGENTS.md --check --json
|
|
48
|
+
orchestra runtime bootstrap --target claude --file CLAUDE.md --force
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Representative JSON result:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mode": "check",
|
|
56
|
+
"target": "codex",
|
|
57
|
+
"file": "AGENTS.md",
|
|
58
|
+
"status": "unchanged",
|
|
59
|
+
"managedBlock": "runtime-bootstrap",
|
|
60
|
+
"changed": false,
|
|
61
|
+
"blocked": false
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### `instructions apply`
|
|
66
|
+
|
|
67
|
+
Tags: `system`
|
|
68
|
+
|
|
69
|
+
Applies an instruction manifest that may contain multiple managed blocks. Use it
|
|
70
|
+
for tests and bulk reconciliation, not for first-run onboarding.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
orchestra instructions apply --manifest .agent-workflow/instructions.json --check --json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Representative manifest payload:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"version": 1,
|
|
81
|
+
"entries": [
|
|
82
|
+
{
|
|
83
|
+
"file": "AGENTS.md",
|
|
84
|
+
"blockId": "runtime-bootstrap",
|
|
85
|
+
"target": "codex",
|
|
86
|
+
"contentFile": ".agent-workflow/generated/codex-bootstrap.md"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### `instructions block`
|
|
93
|
+
|
|
94
|
+
Tags: `system`
|
|
95
|
+
|
|
96
|
+
Upserts one managed instruction block into one file. Use it for focused
|
|
97
|
+
automation when the caller already knows the exact block and target file.
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
orchestra instructions block \
|
|
101
|
+
--file AGENTS.md \
|
|
102
|
+
--block runtime-bootstrap \
|
|
103
|
+
--content-file .agent-workflow/generated/codex-bootstrap.md \
|
|
104
|
+
--target codex \
|
|
105
|
+
--dry-run \
|
|
106
|
+
--json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Representative JSON result:
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"file": "AGENTS.md",
|
|
114
|
+
"blockId": "runtime-bootstrap",
|
|
115
|
+
"target": "codex",
|
|
116
|
+
"mode": "dry-run",
|
|
117
|
+
"status": "changed",
|
|
118
|
+
"changed": true
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### `instructions imports`
|
|
123
|
+
|
|
124
|
+
Tags: `system`
|
|
125
|
+
|
|
126
|
+
Resolves imported instruction fragments from a registry entry. Use it when a
|
|
127
|
+
runtime or installer needs to preview composed instructions before writing a
|
|
128
|
+
managed block.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
orchestra instructions imports \
|
|
132
|
+
--registry .agent-workflow/instruction-registry.json \
|
|
133
|
+
--entry codex-runtime-bootstrap \
|
|
134
|
+
--target codex \
|
|
135
|
+
--json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Representative JSON result:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"entry": "codex-runtime-bootstrap",
|
|
143
|
+
"target": "codex",
|
|
144
|
+
"imports": [
|
|
145
|
+
{
|
|
146
|
+
"id": "workflow-required",
|
|
147
|
+
"source": "runtime-bootstrap"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"content": "Use Open Orchestra as the local control plane..."
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### `instructions stale`
|
|
155
|
+
|
|
156
|
+
Tags: `system`
|
|
157
|
+
|
|
158
|
+
Detects stale managed instruction blocks by comparing embedded content hashes
|
|
159
|
+
with current generated content.
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
orchestra instructions stale --manifest .agent-workflow/instructions.json --json
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Representative JSON result:
|
|
166
|
+
|
|
167
|
+
```json
|
|
168
|
+
{
|
|
169
|
+
"stale": [
|
|
170
|
+
{
|
|
171
|
+
"file": "CLAUDE.md",
|
|
172
|
+
"blockId": "runtime-bootstrap",
|
|
173
|
+
"target": "claude",
|
|
174
|
+
"expectedHash": "abc123",
|
|
175
|
+
"actualHash": "def456"
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### `protocol render`
|
|
182
|
+
|
|
183
|
+
Tags: `process`, `experience`
|
|
184
|
+
|
|
185
|
+
Renders subagent collaboration protocol text without writing files.
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
orchestra protocol render --target codex --task STORY-001 --json
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Representative JSON result:
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"target": "codex",
|
|
196
|
+
"task": "STORY-001",
|
|
197
|
+
"sections": [
|
|
198
|
+
"delegation boundaries",
|
|
199
|
+
"handoff requirements",
|
|
200
|
+
"lifecycle commands"
|
|
201
|
+
],
|
|
202
|
+
"content": "Use runtime-native subagents only when the parent runtime supports them..."
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### `protocol block`
|
|
207
|
+
|
|
208
|
+
Tags: `system`, `process`, `experience`
|
|
209
|
+
|
|
210
|
+
Upserts the rendered subagent protocol into a runtime instruction file.
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
orchestra protocol block --file AGENTS.md --target codex --task STORY-001 --check --json
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Representative JSON result:
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"file": "AGENTS.md",
|
|
221
|
+
"blockId": "subagent-protocol",
|
|
222
|
+
"target": "codex",
|
|
223
|
+
"task": "STORY-001",
|
|
224
|
+
"status": "unchanged"
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### `skills plan`
|
|
229
|
+
|
|
230
|
+
Tags: `process`
|
|
231
|
+
|
|
232
|
+
Selects task-scoped skills from role, phase, paths, risks, and acceptance
|
|
233
|
+
criteria. This is a planning API; it does not write runtime files.
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
orchestra skills plan --task STORY-001 --json
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Representative JSON result:
|
|
240
|
+
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"task": "STORY-001",
|
|
244
|
+
"selectedSkills": [
|
|
245
|
+
{
|
|
246
|
+
"id": "qa-evidence",
|
|
247
|
+
"reason": "acceptance criteria require observable CLI evidence"
|
|
248
|
+
}
|
|
249
|
+
]
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### `skills advise`
|
|
254
|
+
|
|
255
|
+
Tags: `process`, `experience`
|
|
256
|
+
|
|
257
|
+
Selects skills from an advisory prompt without requiring a registered task.
|
|
258
|
+
Use it for advisory mode, discovery, and integrations that have not created a
|
|
259
|
+
workflow task yet.
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
orchestra skills advise \
|
|
263
|
+
--prompt "Generate a release-ready Playwright plan for the web console" \
|
|
264
|
+
--role qa \
|
|
265
|
+
--phase qa \
|
|
266
|
+
--json
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Representative JSON result:
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"role": "qa",
|
|
274
|
+
"phase": "qa",
|
|
275
|
+
"selectedSkills": [
|
|
276
|
+
{
|
|
277
|
+
"id": "qa-evidence",
|
|
278
|
+
"activation": "Playwright evidence and acceptance coverage"
|
|
279
|
+
}
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### `skills render`
|
|
285
|
+
|
|
286
|
+
Tags: `process`, `experience`
|
|
287
|
+
|
|
288
|
+
Renders selected skills into target-specific text for Codex, Claude, Cursor,
|
|
289
|
+
VS Code, Windsurf, or generic runtimes.
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
orchestra skills render --target codex --task STORY-001 --json
|
|
293
|
+
orchestra skills render --target cursor --skills qa-evidence,diagram-export
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Representative JSON result:
|
|
297
|
+
|
|
298
|
+
```json
|
|
299
|
+
{
|
|
300
|
+
"target": "codex",
|
|
301
|
+
"task": "STORY-001",
|
|
302
|
+
"skills": [
|
|
303
|
+
{
|
|
304
|
+
"id": "qa-evidence",
|
|
305
|
+
"title": "QA Evidence Pack"
|
|
306
|
+
}
|
|
307
|
+
],
|
|
308
|
+
"content": "When validating QA evidence, map every assertion to acceptance criteria..."
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### `workflow render`
|
|
313
|
+
|
|
314
|
+
Tags: `process`, `experience`
|
|
315
|
+
|
|
316
|
+
Renders workflow phase guidance, optionally scoped to a runtime and phase.
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
orchestra workflow render --task STORY-001 --target claude --phase developer --json
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
Representative JSON result:
|
|
323
|
+
|
|
324
|
+
```json
|
|
325
|
+
{
|
|
326
|
+
"task": "STORY-001",
|
|
327
|
+
"target": "claude",
|
|
328
|
+
"phase": "developer",
|
|
329
|
+
"loadedPlaybooks": [
|
|
330
|
+
"developer"
|
|
331
|
+
],
|
|
332
|
+
"content": "Implement domain/model changes before command entry points..."
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### `playbooks scaffold`
|
|
337
|
+
|
|
338
|
+
Tags: `system`, `process`
|
|
339
|
+
|
|
340
|
+
Creates missing phase playbook stubs. It should preserve existing playbooks and
|
|
341
|
+
is best used during project setup or repository maintenance.
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
orchestra playbooks scaffold --phase developer,qa --dry-run --json
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Representative JSON result:
|
|
348
|
+
|
|
349
|
+
```json
|
|
350
|
+
{
|
|
351
|
+
"mode": "dry-run",
|
|
352
|
+
"created": [
|
|
353
|
+
".agent-workflow/playbooks/developer.md",
|
|
354
|
+
".agent-workflow/playbooks/qa.md"
|
|
355
|
+
],
|
|
356
|
+
"unchanged": []
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Documentation Guidance
|
|
361
|
+
|
|
362
|
+
- Public onboarding should mention only `init` and `refresh` for generated
|
|
363
|
+
artifact management.
|
|
364
|
+
- Reference docs may link to this catalog for advanced automation and testing.
|
|
365
|
+
- API examples should remain representative and avoid depending on local user
|
|
366
|
+
paths, secrets, or generated IDs.
|
|
@@ -4,6 +4,12 @@ The release test matrix is the minimum validation surface for a production
|
|
|
4
4
|
`1.0.0` candidate. It is intentionally explicit so release readiness can attach
|
|
5
5
|
reviewable evidence instead of relying on conversational sign-off.
|
|
6
6
|
|
|
7
|
+
Detailed release-blocking and extended E2E batteries are defined in
|
|
8
|
+
[End-to-End Test Batteries](e2e-test-batteries.md). This matrix lists the
|
|
9
|
+
current release commands; the battery catalog defines the required growth path
|
|
10
|
+
for installed CLI, temporary workspaces, runtime delegation, browser, recovery,
|
|
11
|
+
security, and provider-backed coverage.
|
|
12
|
+
|
|
7
13
|
## Command
|
|
8
14
|
|
|
9
15
|
```bash
|
|
@@ -43,9 +49,10 @@ manual intervention is required.
|
|
|
43
49
|
| Secret scanning gate | `npm run secret-scan` | Gitleaks scan with `.gitleaks.toml` when the binary is installed; lightweight fallback for offline local development |
|
|
44
50
|
| Duplicate-code gate | `npm run duplicates` | jscpd duplicate-code report with generated/runtime outputs excluded and collection-standards follow-up for duplicated domain lists |
|
|
45
51
|
| Task split guard | `node --test test/task-split-assessment.test.js` | PO/BA functional oversize, Architect technical complexity, routine small-task non-blocking behavior, and markdown evidence rendering |
|
|
46
|
-
| Sonar quality gate | GitHub Actions: `Sonar`
|
|
52
|
+
| Sonar quality gate | GitHub Actions: `Sonar` or local SonarQube import | conditional quality gate for duplication, bugs, code smells, maintainability, coverage readiness, and security hotspots when a Sonar provider is configured |
|
|
47
53
|
| Browser E2E | `npm run test:e2e` | Playwright checks map scenario acceptance criteria to visible UI state, API persistence, artifact attachment, responsive layout, and recovery behavior |
|
|
48
54
|
| Installed package init | `npm run test:e2e:init` | Installed CLI checks map scenario acceptance criteria to stdout, stderr, exit code, filesystem state, JSON contracts, evidence records, and release-readiness outcomes |
|
|
55
|
+
| Runtime manual queue | `npm run test:e2e:runtime` | Temporary-workspace runtime checks prove manual spawn requests queue under delegate pressure and expose queued artifacts through runtime sessions |
|
|
49
56
|
| Public site build | `npm run site:build` | production site build |
|
|
50
57
|
| Release readiness | `orchestra release check --json` | `releaseReadiness` and `gaReadiness` report |
|
|
51
58
|
| Package contents | `npm pack --dry-run --json` | package file list and provenance check |
|
|
@@ -57,10 +64,14 @@ The default release matrix is offline-friendly. Provider and tracker tests that
|
|
|
57
64
|
need network access must honor `SKIP_NETWORK_TESTS` and report skipped status
|
|
58
65
|
instead of failing offline CI.
|
|
59
66
|
|
|
60
|
-
Sonar is conditional because it requires
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
Sonar is conditional because it requires a configured provider and token.
|
|
68
|
+
SonarCloud automatic runs should be intentionally enabled with
|
|
69
|
+
`SONAR_CLOUD_ENABLED=true`; private or large repositories can use local or
|
|
70
|
+
self-hosted SonarQube instead. When configured, a failing Sonar quality gate
|
|
71
|
+
blocks release on new-code quality after findings are triaged as fix-required,
|
|
72
|
+
accepted risk, false positive, tool limitation, or deferred debt. When
|
|
73
|
+
unavailable or offline, release evidence must state that Sonar was skipped and
|
|
74
|
+
attach the local quality gates that ran instead.
|
|
64
75
|
|
|
65
76
|
The duplicate-code gate is local and CI-friendly after dependencies are
|
|
66
77
|
installed. When it reports copied domain lists, command matrices, providers,
|
package/docs/runtime-adapters.md
CHANGED
|
@@ -56,6 +56,15 @@ config. Runtime packets keep `directProviderApiAllowed: false`; provider API
|
|
|
56
56
|
execution only happens in the workflow phase provider layer when policy allows
|
|
57
57
|
it.
|
|
58
58
|
|
|
59
|
+
Provider-backed phases require explicit opt-in. Connecting a provider with
|
|
60
|
+
`--allow-direct-provider-api` records both the allowed provider and
|
|
61
|
+
`runtimePolicy.delegation.allowDirectProviderApi=true`; without that opt-in,
|
|
62
|
+
workflow phases fail before calling the provider. Successful provider-backed
|
|
63
|
+
phases are recorded as `executor: provider-backed-phase` with provider, model,
|
|
64
|
+
fallbacks, and `directProviderApiAllowed: true`. Runtime-native subagent
|
|
65
|
+
requests remain `directProviderApiAllowed: false`, even when provider routing is
|
|
66
|
+
configured for the same role.
|
|
67
|
+
|
|
59
68
|
## Init Modes
|
|
60
69
|
|
|
61
70
|
Default project init keeps the current compact bootstrap behavior:
|
|
@@ -163,6 +172,14 @@ failed, or timed-out events so the parent runtime can reconcile claimed work,
|
|
|
163
172
|
spawned agent ids, stale sessions, and handoff state without inventing a second
|
|
164
173
|
source of truth.
|
|
165
174
|
|
|
175
|
+
Spawn request JSON includes `parentRuntimeAction`, a structured instruction for
|
|
176
|
+
the active parent runtime. Codex receives `kind=codex-spawn-agent` with
|
|
177
|
+
`tool=spawn_agent`; Claude receives `kind=claude-agent-request` with
|
|
178
|
+
`tool=claude-code-agent`; Cursor receives `kind=cursor-background-agent` with
|
|
179
|
+
`tool=cursor-background-agent`. The action points to the prompt artifact,
|
|
180
|
+
expected result artifact, ownership paths, allowed commands, and lifecycle
|
|
181
|
+
commands. It does not include secrets or direct provider credentials.
|
|
182
|
+
|
|
166
183
|
## Native Background Agent Notes
|
|
167
184
|
|
|
168
185
|
Claude Code and Cursor do not need Orchestra to call vendor APIs directly.
|
|
@@ -173,6 +190,9 @@ They need a precise packet and lifecycle hooks:
|
|
|
173
190
|
Claude runtime exposes `Task` as the tool name, treat it as the compatible
|
|
174
191
|
legacy alias. Record the returned child id or role label through
|
|
175
192
|
`runtime spawn-lifecycle`.
|
|
193
|
+
- Codex: render `runtime spawn-request`, read `parentRuntimeAction`, and call
|
|
194
|
+
the parent `spawn_agent` tool with the prompt artifact as the role-scoped
|
|
195
|
+
assignment. Keep the child detached unless the parent is blocked.
|
|
176
196
|
- Cursor: render `runtime spawn-request`, then launch it as a Cursor Background
|
|
177
197
|
Agent. Background work should stay detached from the current chat and report
|
|
178
198
|
lifecycle state back to Orchestra before the workflow is resumed.
|
|
@@ -225,13 +245,29 @@ parent-agent fallback reason. `subagents` requires runtime-native support and
|
|
|
225
245
|
fails fast if the runtime cannot satisfy it. `single-agent` forces the parent
|
|
226
246
|
agent path and records that choice in phase provenance.
|
|
227
247
|
|
|
248
|
+
Subagent spawning is fully asynchronous by default. A spawn request returns the
|
|
249
|
+
`sessionId`, request artifact, prompt artifact, expected result artifact, status,
|
|
250
|
+
next lifecycle commands, and quality warnings, then the parent agent should
|
|
251
|
+
return control to the user. The parent should not wait for the child unless the
|
|
252
|
+
next parent action is explicitly blocked on that result. Completion is
|
|
253
|
+
reconciled later through `runtime spawn-lifecycle`, runtime notifications, or an
|
|
254
|
+
explicit `runtime sessions` poll.
|
|
255
|
+
|
|
228
256
|
Subagent spawning is bounded by `runtimePolicy.delegation.guardrails`.
|
|
229
257
|
`maxConcurrentDelegates` is the threshold for simultaneously running delegated
|
|
230
258
|
sessions, `maxSpawnsPerTask` limits fan-out for one task, and `limitAction`
|
|
231
259
|
controls whether pressure should `queue` or `reject`. With the default `queue`
|
|
232
260
|
policy, a phase that cannot acquire capacity is paused as a queued runtime
|
|
233
261
|
subagent instead of silently falling back to the parent agent. Resume the
|
|
234
|
-
workflow after capacity is released.
|
|
262
|
+
workflow after capacity is released. Manual `runtime spawn-request` calls follow
|
|
263
|
+
the same guardrails: `queue` materializes a queued request artifact and session,
|
|
264
|
+
while `reject` fails before creating a delegation artifact.
|
|
265
|
+
|
|
266
|
+
For multi-squad work, the parent renders one spawn request per independent
|
|
267
|
+
squad/role/phase. Each detached session is tracked independently by `sessionId`;
|
|
268
|
+
completion order is intentionally non-deterministic. Release aggregation,
|
|
269
|
+
handoff review, and QA reconciliation happen at explicit gates or status checks,
|
|
270
|
+
not by sequential waits in the parent conversation.
|
|
235
271
|
|
|
236
272
|
Each phase stores executor provenance in the workflow run and handoff:
|
|
237
273
|
execution mode, executor type, phase, role, runtime id, delegation packet path
|
|
@@ -291,6 +327,7 @@ orchestra runtime adapters --json
|
|
|
291
327
|
orchestra runtime brief --task <id> --runtime codex-cli --json
|
|
292
328
|
orchestra runtime delegate-plan --task <id> --runtime opencode-cli --roles qa --json
|
|
293
329
|
orchestra runtime spawn-request --task <id> --role developer --runtime codex-cli --json
|
|
330
|
+
orchestra runtime sessions --task <id> --json
|
|
294
331
|
orchestra runtime spawn-lifecycle --session <id> --status completed --agent-id <id> --json
|
|
295
332
|
orchestra model providers --json
|
|
296
333
|
```
|
package/docs/site-manifest.json
CHANGED
|
@@ -112,6 +112,7 @@
|
|
|
112
112
|
"links": [
|
|
113
113
|
{ "title": "Adoption guide", "source": "docs/adoption-guide.md", "heading": "Open Orchestra 1.0.0 Adoption Guide" },
|
|
114
114
|
{ "title": "Core command surface", "source": "docs/core-command-surface.md", "heading": "Core Command Surface" },
|
|
115
|
+
{ "title": "E2E test batteries", "source": "docs/e2e-test-batteries.md", "heading": "End-to-End Test Batteries" },
|
|
115
116
|
{ "title": "Duplicate-code enforcement", "source": "docs/duplicate-code-enforcement.md", "heading": "Duplicate-Code Enforcement" },
|
|
116
117
|
{ "title": "Sonar quality gates", "source": "docs/sonar-quality-gates.md", "heading": "Sonar Quality Gates" },
|
|
117
118
|
{ "title": "Sonar architecture model", "source": "docs/sonar-architecture-model.md", "heading": "Sonar Architecture Model" },
|
|
@@ -122,6 +123,7 @@
|
|
|
122
123
|
"releaseDocs": {
|
|
123
124
|
"links": [
|
|
124
125
|
{ "title": "Release test matrix", "source": "docs/release-test-matrix.md", "heading": "1.0.0 Release Test Matrix" },
|
|
126
|
+
{ "title": "E2E test batteries", "source": "docs/e2e-test-batteries.md", "heading": "End-to-End Test Batteries" },
|
|
125
127
|
{ "title": "Sonar quality gates", "source": "docs/sonar-quality-gates.md", "heading": "Sonar Quality Gates" },
|
|
126
128
|
{ "title": "Sonar architecture model", "source": "docs/sonar-architecture-model.md", "heading": "Sonar Architecture Model" },
|
|
127
129
|
{ "title": "QA evidence", "source": "docs/site-content-workflow.md", "heading": "QA Evidence" },
|
|
@@ -140,6 +142,7 @@
|
|
|
140
142
|
"reference": {
|
|
141
143
|
"links": [
|
|
142
144
|
{ "title": "Command contracts", "source": "docs/command-contracts.md", "heading": "Command Contracts" },
|
|
145
|
+
{ "title": "Generated artifact APIs", "source": "docs/generated-artifact-api-catalog.md", "heading": "Generated Artifact API Catalog" },
|
|
143
146
|
{ "title": "Runtime LLM flow", "source": "docs/runtime-llm-flow.md", "heading": "Runtime LLM Flow" },
|
|
144
147
|
{ "title": "Tracker adapter contract", "source": "docs/tracker-adapter-contract.md", "heading": "Tracker Adapter Contract" },
|
|
145
148
|
{ "title": "Source of truth and learning", "source": "docs/source-of-truth-and-agent-learning.md", "heading": "Source of Truth and Agent Learning" }
|
|
@@ -8,18 +8,39 @@ does not replace secret scanning or runtime policy enforcement.
|
|
|
8
8
|
The repository includes `sonar-project.properties` and a dedicated GitHub
|
|
9
9
|
Actions workflow at `.github/workflows/sonar.yml`.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Supported provider modes:
|
|
12
|
+
|
|
13
|
+
- `sonarcloud`: hosted SonarQube Cloud. Best for quick setup and public or
|
|
14
|
+
small repositories where hosted analysis is acceptable.
|
|
15
|
+
- `sonarqube-local`: local SonarQube for development and private-repo
|
|
16
|
+
dogfooding. The default local host is `http://localhost:9000`.
|
|
17
|
+
- `sonarqube-self-hosted`: organization-managed SonarQube Server. Use this for
|
|
18
|
+
regulated tenants, private codebases, or repositories where hosted LOC limits
|
|
19
|
+
and external API permissions are a concern.
|
|
20
|
+
|
|
21
|
+
Required GitHub secret when the GitHub Actions workflow is enabled:
|
|
12
22
|
|
|
13
23
|
- `SONAR_TOKEN`: token for SonarQube Cloud or SonarQube Server.
|
|
14
24
|
|
|
15
25
|
Optional GitHub secret:
|
|
16
26
|
|
|
17
|
-
- `SONAR_HOST_URL`: required
|
|
18
|
-
for
|
|
27
|
+
- `SONAR_HOST_URL`: required for self-hosted SonarQube Server. Leave unset for
|
|
28
|
+
SonarQube Cloud, or set `http://localhost:9000` only for local commands.
|
|
29
|
+
|
|
30
|
+
Optional GitHub variables:
|
|
31
|
+
|
|
32
|
+
- `SONAR_PROVIDER`: `sonarcloud`, `sonarqube-local`, or
|
|
33
|
+
`sonarqube-self-hosted`. GitHub-hosted runners normally use `sonarcloud` or a
|
|
34
|
+
reachable self-hosted server; local SonarQube is intended for local commands.
|
|
35
|
+
- `SONAR_CLOUD_ENABLED`: set to `true` to run SonarCloud automatically on push
|
|
36
|
+
and pull request events. When unset, SonarCloud runs only through manual
|
|
37
|
+
`workflow_dispatch`.
|
|
38
|
+
- `SONAR_QUALITY_GATE_WAIT`: set to `true` to fail the workflow when the remote
|
|
39
|
+
quality gate fails.
|
|
19
40
|
|
|
20
41
|
The workflow skips analysis when `SONAR_TOKEN` is not configured. This keeps
|
|
21
|
-
forks and offline development usable
|
|
22
|
-
|
|
42
|
+
forks and offline development usable. For private repositories, keep
|
|
43
|
+
`SONAR_CLOUD_ENABLED` unset unless hosted analysis is intentionally approved.
|
|
23
44
|
|
|
24
45
|
The workflow supports remote quality gate enforcement when the repository
|
|
25
46
|
variable `SONAR_QUALITY_GATE_WAIT=true` is configured. In that mode the scanner
|
|
@@ -32,6 +53,59 @@ gate status. If the scanner can upload analysis but the wait step fails with
|
|
|
32
53
|
`Project not found`, update the `SONAR_TOKEN` permissions or keep
|
|
33
54
|
`SONAR_QUALITY_GATE_WAIT` unset until the token can read the project.
|
|
34
55
|
|
|
56
|
+
## Local SonarQube
|
|
57
|
+
|
|
58
|
+
Open Orchestra includes `docker-compose.sonar.yml` for local SonarQube
|
|
59
|
+
dogfooding:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
docker compose -f docker-compose.sonar.yml up -d
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Open `http://localhost:9000`, complete the SonarQube first-run setup, create a
|
|
66
|
+
project key, and generate a project token. Then run scanner/import commands
|
|
67
|
+
against the local host. Example import after analysis is available:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
SONAR_TOKEN=<local-token> node bin/orchestra.js sonar import \
|
|
71
|
+
--provider sonarqube-local \
|
|
72
|
+
--host-url http://localhost:9000 \
|
|
73
|
+
--project-key open-orchestra \
|
|
74
|
+
--branch main \
|
|
75
|
+
--task GH-368-LOCAL-SONARQUBE-PROVIDER \
|
|
76
|
+
--json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
HTTP is accepted only for `sonarqube-local` on localhost. Self-hosted and cloud
|
|
80
|
+
hosts must use HTTPS.
|
|
81
|
+
|
|
82
|
+
Sonar reads TypeScript through `tsconfig.sonar.json`, a standalone analyzer
|
|
83
|
+
config that mirrors the build compiler options but lowers only the analyzer
|
|
84
|
+
target to `ES2022`. Keep the main build target unchanged unless runtime support
|
|
85
|
+
changes; the Sonar-specific file exists because SonarQube 9.9 analyzers reject
|
|
86
|
+
newer TypeScript targets such as `ES2023`, including when they appear in an
|
|
87
|
+
extended config.
|
|
88
|
+
|
|
89
|
+
Do not commit local SonarQube data, tokens, database volumes, or exported source
|
|
90
|
+
snippets.
|
|
91
|
+
|
|
92
|
+
## Finding Triage
|
|
93
|
+
|
|
94
|
+
Sonar findings are not automatic fixes. Before remediation, classify each
|
|
95
|
+
finding as one of:
|
|
96
|
+
|
|
97
|
+
- `fix-required`: confirmed defect or maintainability issue that should be
|
|
98
|
+
corrected now.
|
|
99
|
+
- `accepted-risk`: real finding accepted for a documented reason, owner, and
|
|
100
|
+
review date.
|
|
101
|
+
- `false-positive`: analyzer cannot model the actual behavior.
|
|
102
|
+
- `tool-limitation`: edition, language, generated-code, or framework limitation.
|
|
103
|
+
- `deferred-debt`: valid issue intentionally scheduled for a later task.
|
|
104
|
+
|
|
105
|
+
ESLint suppressions and similar static-analysis exceptions must not be removed
|
|
106
|
+
blindly. Validate whether the suppression is still required, can be narrowed,
|
|
107
|
+
should be fixed, or must be accepted with linked rationale.
|
|
108
|
+
|
|
35
109
|
Recommended minimum quality gate for new code:
|
|
36
110
|
|
|
37
111
|
- 0 new blocker or critical issues.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jterrats/open-orchestra",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
"extensions/vscode-open-orchestra",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"test:coverage": "npm run build && c8 --reporter=lcov --reports-dir coverage --exclude \"test/**\" --exclude \"e2e/**\" --exclude \"extensions/**/test/**\" --exclude \"dist/assets/**\" --exclude \"dist/web-console/**\" node --test test/**/*.js extensions/**/*.test.cjs",
|
|
18
18
|
"test:e2e": "npm run build && npm run site:build && playwright test",
|
|
19
19
|
"test:e2e:init": "node --test e2e/init-onboarding.test.js",
|
|
20
|
+
"test:e2e:runtime": "node --test e2e/runtime-manual-queue.test.js",
|
|
20
21
|
"lint": "eslint . && prettier --check \"{bin,e2e,scripts,test,src}/**/*.js\" \"{site,web-console}/src/**/*.{css,js,jsx}\" \"{site,web-console}/*.{html,js,json}\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.{js,json}\"",
|
|
21
22
|
"format": "prettier --write \"{bin,e2e,scripts,test,src}/**/*.js\" \"{site,web-console}/src/**/*.{css,js,jsx}\" \"{site,web-console}/*.{html,js,json}\" \"extensions/**/*.{cjs,json,md}\" \"src/**/*.ts\" \"*.{js,json}\"",
|
|
22
23
|
"secret-scan": "node scripts/secret-scan.js",
|