@jterrats/open-orchestra 1.0.7 → 1.0.9
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.md +12 -2
- package/CHANGELOG.md +41 -0
- package/CLAUDE.md +13 -2
- package/dist/acceptance-criteria-quality.d.ts +12 -0
- package/dist/acceptance-criteria-quality.js +137 -0
- package/dist/acceptance-criteria-quality.js.map +1 -0
- package/dist/architecture-debt-inventory.d.ts +31 -0
- package/dist/architecture-debt-inventory.js +200 -0
- package/dist/architecture-debt-inventory.js.map +1 -0
- package/dist/architecture-debt-report.d.ts +2 -0
- package/dist/architecture-debt-report.js +28 -0
- package/dist/architecture-debt-report.js.map +1 -0
- package/dist/autonomous-phase-lifecycle.d.ts +5 -1
- package/dist/autonomous-phase-lifecycle.js +87 -17
- package/dist/autonomous-phase-lifecycle.js.map +1 -1
- package/dist/cli-payloads.d.ts +4 -0
- package/dist/cli-payloads.js +24 -0
- package/dist/cli-payloads.js.map +1 -0
- package/dist/cli.js +4 -446
- package/dist/cli.js.map +1 -1
- package/dist/command-manifest.js +3 -1
- 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 +175 -0
- package/dist/command-routes.js.map +1 -0
- package/dist/commands.d.ts +1 -1
- package/dist/commands.js +16 -3
- package/dist/commands.js.map +1 -1
- package/dist/github.js +22 -7
- package/dist/github.js.map +1 -1
- package/dist/metrics-commands.js +69 -17
- package/dist/metrics-commands.js.map +1 -1
- package/dist/phase-executor.js +5 -169
- package/dist/phase-executor.js.map +1 -1
- package/dist/phase-playbooks.js +17 -0
- package/dist/phase-playbooks.js.map +1 -1
- package/dist/qa-e2e-artifacts.d.ts +7 -0
- package/dist/qa-e2e-artifacts.js +225 -0
- package/dist/qa-e2e-artifacts.js.map +1 -0
- package/dist/quality-contracts.d.ts +83 -0
- package/dist/quality-contracts.js +463 -0
- package/dist/quality-contracts.js.map +1 -0
- package/dist/refresh-generated.js +87 -45
- package/dist/refresh-generated.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-bootstrap.js +3 -0
- package/dist/runtime-bootstrap.js.map +1 -1
- package/dist/runtime-commands.d.ts +2 -0
- package/dist/runtime-commands.js +187 -2
- package/dist/runtime-commands.js.map +1 -1
- package/dist/runtime-context-manifest.d.ts +27 -0
- package/dist/runtime-context-manifest.js +151 -0
- package/dist/runtime-context-manifest.js.map +1 -0
- package/dist/runtime-execution-renderer.d.ts +3 -1
- package/dist/runtime-execution-renderer.js +17 -53
- package/dist/runtime-execution-renderer.js.map +1 -1
- package/dist/runtime-execution.d.ts +2 -1
- package/dist/runtime-execution.js +166 -4
- package/dist/runtime-execution.js.map +1 -1
- package/dist/runtime-guardrails.js +9 -1
- package/dist/runtime-guardrails.js.map +1 -1
- package/dist/runtime-lifecycle-watch.d.ts +93 -0
- package/dist/runtime-lifecycle-watch.js +391 -0
- package/dist/runtime-lifecycle-watch.js.map +1 -0
- package/dist/runtime-parent-actions.d.ts +7 -2
- package/dist/runtime-parent-actions.js +132 -1
- package/dist/runtime-parent-actions.js.map +1 -1
- 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-spawn-bridge.js +40 -10
- 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/sonar-insights.d.ts +1 -0
- package/dist/sonar-insights.js +6 -2
- package/dist/sonar-insights.js.map +1 -1
- package/dist/types/model-config.d.ts +6 -0
- package/dist/types/runtime.d.ts +26 -2
- package/dist/types/tasks.d.ts +12 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js.map +1 -1
- package/dist/web-api.js +8 -0
- package/dist/web-api.js.map +1 -1
- package/dist/web-console/assets/index-DXbrxR_d.js +11 -0
- package/dist/web-console/index.html +1 -1
- package/dist/workflow-handoff-assessment.d.ts +3 -0
- package/dist/workflow-handoff-assessment.js +246 -0
- package/dist/workflow-handoff-assessment.js.map +1 -0
- package/dist/workflow-handoff-contract.d.ts +32 -0
- package/dist/workflow-handoff-contract.js +123 -0
- package/dist/workflow-handoff-contract.js.map +1 -0
- package/dist/workflow-phase-transition.d.ts +16 -0
- package/dist/workflow-phase-transition.js +76 -0
- package/dist/workflow-phase-transition.js.map +1 -0
- package/dist/workflow-run-commands.js +47 -12
- package/dist/workflow-run-commands.js.map +1 -1
- package/dist/workflow-services.js +57 -27
- package/dist/workflow-services.js.map +1 -1
- package/dist/workspace-init-artifacts.d.ts +17 -0
- package/dist/workspace-init-artifacts.js +81 -0
- package/dist/workspace-init-artifacts.js.map +1 -0
- package/dist/workspace-runtime-bootstrap.d.ts +12 -0
- package/dist/workspace-runtime-bootstrap.js +64 -0
- package/dist/workspace-runtime-bootstrap.js.map +1 -0
- package/dist/workspace.d.ts +5 -2
- package/dist/workspace.js +43 -145
- package/dist/workspace.js.map +1 -1
- package/docs/architecture-debt-inventory.md +25 -0
- package/docs/autonomous-workflow.md +7 -0
- package/docs/e2e-test-batteries.md +106 -0
- package/docs/orchestra-mvp.md +8 -0
- package/docs/release-test-matrix.md +7 -0
- package/docs/runtime-adapters.md +86 -9
- package/docs/site-manifest.json +2 -0
- package/docs/sonar-quality-gates.md +133 -11
- package/package.json +5 -1
- package/rules/delivery-quality-gates.mdc +6 -0
- package/rules/devops-tooling.mdc +1 -0
- package/rules/security-guardrails.mdc +3 -0
- package/rules/testing-discipline.mdc +9 -0
- package/dist/web-console/assets/index-CgSKcay8.js +0 -11
package/dist/workspace.js
CHANGED
|
@@ -7,15 +7,16 @@ import { defaultSourceOfTruthCatalog } from "./knowledge-base.js";
|
|
|
7
7
|
import { initPhasePlaybooks } from "./phase-playbooks.js";
|
|
8
8
|
import { DEFAULT_ACTION_POLICY } from "./policy-defaults.js";
|
|
9
9
|
import { initPromptRegistry, PROMPT_REGISTRY_DIR } from "./prompt-registry.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { resolveInitRuntimeBootstrapTargets } from "./runtime-bootstrap-targets.js";
|
|
11
|
+
import { existingInitArtifacts, backupExistingWorkflowFiles, initGeneratedArtifacts, WORKFLOW_STATE_FILES, } from "./workspace-init-artifacts.js";
|
|
12
|
+
import { initAdvisoryRuntimeBootstrapFiles, initRuntimeBootstrapFiles, } from "./workspace-runtime-bootstrap.js";
|
|
12
13
|
import { classifyWorkspace } from "./workspace-classification.js";
|
|
13
14
|
import { appendJsonLine, ensureDir, exists, readJson, resolveWorkflowPath, writeJson, } from "./fs-utils.js";
|
|
14
15
|
import { validateRoles, validateTasks } from "./validation.js";
|
|
15
16
|
export function workflowRoot(root = process.cwd()) {
|
|
16
17
|
return path.join(root, WORKFLOW_DIR);
|
|
17
18
|
}
|
|
18
|
-
export async function inspectInitWorkspace({ root = process.cwd(), force = false, advisory = false, bootstrapTargetFile, runtimeTargets, } = {}) {
|
|
19
|
+
export async function inspectInitWorkspace({ root = process.cwd(), force = false, resetState = false, advisory = false, bootstrapTargetFile, runtimeTargets, } = {}) {
|
|
19
20
|
const classification = await classifyWorkspace({ root, advisory });
|
|
20
21
|
const workflowPath = workflowRoot(root);
|
|
21
22
|
const generatedArtifacts = await initGeneratedArtifacts({
|
|
@@ -29,36 +30,50 @@ export async function inspectInitWorkspace({ root = process.cwd(), force = false
|
|
|
29
30
|
workflowRoot: workflowPath,
|
|
30
31
|
mode: advisory ? "advisory" : "project",
|
|
31
32
|
force,
|
|
33
|
+
resetState,
|
|
32
34
|
workflowExists: await exists(workflowPath),
|
|
33
35
|
existingArtifacts: await existingInitArtifacts(root, generatedArtifacts),
|
|
34
36
|
generatedArtifacts,
|
|
35
37
|
workspaceClassification: classification,
|
|
36
38
|
};
|
|
37
39
|
}
|
|
38
|
-
export async function initWorkspace({ root = process.cwd(), force = false, advisory = false, confirmUnknown = false, bootstrapTargetFile, runtimeTargets, } = {}) {
|
|
40
|
+
export async function initWorkspace({ root = process.cwd(), force = false, resetState = false, advisory = false, confirmUnknown = false, bootstrapTargetFile, runtimeTargets, } = {}) {
|
|
39
41
|
const classification = await classifyWorkspace({ root, advisory });
|
|
40
42
|
assertInitAllowed(classification, confirmUnknown);
|
|
41
43
|
const base = workflowRoot(root);
|
|
42
|
-
|
|
44
|
+
const workflowExists = await exists(base);
|
|
45
|
+
if (resetState && !force) {
|
|
46
|
+
throw new Error("--reset-state requires --force");
|
|
47
|
+
}
|
|
48
|
+
if (workflowExists && !force) {
|
|
43
49
|
throw new Error(`${WORKFLOW_DIR} already exists. Run orchestra status or orchestra health --json to inspect it, use --force to refresh generated files, or use --target-dir <dir> to initialize another workspace.`);
|
|
44
50
|
}
|
|
51
|
+
const shouldOverwriteState = !workflowExists || resetState;
|
|
52
|
+
const stateBackups = workflowExists && resetState
|
|
53
|
+
? await backupExistingWorkflowFiles({
|
|
54
|
+
root,
|
|
55
|
+
fileNames: WORKFLOW_STATE_FILES,
|
|
56
|
+
})
|
|
57
|
+
: [];
|
|
45
58
|
await ensureDir(base);
|
|
46
59
|
for (const directory of DIRECTORIES) {
|
|
47
60
|
await ensureDir(path.join(base, directory));
|
|
48
61
|
}
|
|
49
|
-
await
|
|
62
|
+
await writeJsonIfAllowed(path.join(base, FILES.config), {
|
|
50
63
|
...defaultConfig,
|
|
51
64
|
mode: advisory ? "advisory" : "project",
|
|
52
65
|
workspaceClassification: classification,
|
|
53
|
-
});
|
|
54
|
-
await
|
|
55
|
-
await
|
|
56
|
-
await
|
|
57
|
-
await
|
|
58
|
-
await
|
|
59
|
-
await
|
|
60
|
-
await
|
|
61
|
-
const phasePlaybooks = advisory
|
|
66
|
+
}, shouldOverwriteState);
|
|
67
|
+
await writeJsonIfAllowed(path.join(base, FILES.policy), DEFAULT_ACTION_POLICY, shouldOverwriteState);
|
|
68
|
+
await writeJsonIfAllowed(path.join(base, FILES.roles), defaultRoles, shouldOverwriteState);
|
|
69
|
+
await writeJsonIfAllowed(path.join(base, FILES.tasks), [], shouldOverwriteState);
|
|
70
|
+
await writeJsonIfAllowed(path.join(base, FILES.locks), [], shouldOverwriteState);
|
|
71
|
+
await writeTextIfAllowed(path.join(base, FILES.events), "", shouldOverwriteState);
|
|
72
|
+
await writeJsonIfAllowed(path.join(base, FILES.sourceOfTruth), defaultSourceOfTruthCatalog(), shouldOverwriteState);
|
|
73
|
+
await writeTextIfAllowed(path.join(base, FILES.agentLessons), "", shouldOverwriteState);
|
|
74
|
+
const phasePlaybooks = advisory
|
|
75
|
+
? []
|
|
76
|
+
: await initPhasePlaybooks(root, { force });
|
|
62
77
|
const promptRegistry = advisory
|
|
63
78
|
? { mode: "advisory", skipped: true }
|
|
64
79
|
: await initPromptRegistry({ root, force });
|
|
@@ -68,7 +83,7 @@ export async function initWorkspace({ root = process.cwd(), force = false, advis
|
|
|
68
83
|
...(bootstrapTargetFile ? { bootstrapTargetFile } : {}),
|
|
69
84
|
...(runtimeTargets ? { runtimeTargets } : {}),
|
|
70
85
|
})
|
|
71
|
-
: await initRuntimeBootstrapFiles(root, await
|
|
86
|
+
: await initRuntimeBootstrapFiles(root, await resolveInitRuntimeBootstrapTargets({ root, runtimeTargets }), { force });
|
|
72
87
|
const advisoryArtifacts = advisory
|
|
73
88
|
? await writeAdvisoryArtifacts({ root, classification })
|
|
74
89
|
: undefined;
|
|
@@ -91,51 +106,26 @@ export async function initWorkspace({ root = process.cwd(), force = false, advis
|
|
|
91
106
|
promptRegistry,
|
|
92
107
|
phasePlaybooks,
|
|
93
108
|
runtimeBootstrap,
|
|
109
|
+
statePreservation: {
|
|
110
|
+
resetState,
|
|
111
|
+
preserved: workflowExists && !resetState,
|
|
112
|
+
backups: stateBackups,
|
|
113
|
+
},
|
|
94
114
|
...(advisoryArtifacts ? { advisoryArtifacts } : {}),
|
|
95
115
|
workspaceClassification: classification,
|
|
96
116
|
},
|
|
97
117
|
});
|
|
98
118
|
return base;
|
|
99
119
|
}
|
|
100
|
-
async function
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
...Object.values(FILES).map((file) => workflowArtifact(file)),
|
|
105
|
-
];
|
|
106
|
-
const promptArtifacts = advisory ? [] : [PROMPT_REGISTRY_DIR];
|
|
107
|
-
const advisoryArtifacts = advisory
|
|
108
|
-
? [
|
|
109
|
-
workflowArtifact("advisory", "README.md"),
|
|
110
|
-
workflowArtifact("advisory", "role-guides.md"),
|
|
111
|
-
workflowArtifact("advisory", "decisions.md"),
|
|
112
|
-
workflowArtifact("advisory", "conversion.md"),
|
|
113
|
-
workflowArtifact("advisory", "project-task.json"),
|
|
114
|
-
]
|
|
115
|
-
: [];
|
|
116
|
-
const runtimeFiles = advisory
|
|
117
|
-
? [
|
|
118
|
-
...(bootstrapTargetFile ? [bootstrapTargetFile] : []),
|
|
119
|
-
...(await initBootstrapTargets(root, runtimeTargets, false)).map((item) => item.file),
|
|
120
|
-
]
|
|
121
|
-
: (await initBootstrapTargets(root, runtimeTargets)).map((item) => item.file);
|
|
122
|
-
return [
|
|
123
|
-
...new Set([
|
|
124
|
-
...workflowArtifacts,
|
|
125
|
-
...promptArtifacts,
|
|
126
|
-
...advisoryArtifacts,
|
|
127
|
-
...runtimeFiles,
|
|
128
|
-
]),
|
|
129
|
-
];
|
|
120
|
+
async function writeJsonIfAllowed(filePath, value, shouldOverwrite) {
|
|
121
|
+
if (shouldOverwrite || !(await exists(filePath))) {
|
|
122
|
+
await writeJson(filePath, value);
|
|
123
|
+
}
|
|
130
124
|
}
|
|
131
|
-
async function
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (await exists(path.join(root, artifact))) {
|
|
135
|
-
existing.push(artifact);
|
|
136
|
-
}
|
|
125
|
+
async function writeTextIfAllowed(filePath, value, shouldOverwrite) {
|
|
126
|
+
if (shouldOverwrite || !(await exists(filePath))) {
|
|
127
|
+
await writeFile(filePath, value, "utf8");
|
|
137
128
|
}
|
|
138
|
-
return existing;
|
|
139
129
|
}
|
|
140
130
|
function assertInitAllowed(classification, confirmUnknown) {
|
|
141
131
|
if (classification.writePolicy === "blocked") {
|
|
@@ -145,98 +135,6 @@ function assertInitAllowed(classification, confirmUnknown) {
|
|
|
145
135
|
throw new Error(`workspace requires explicit confirmation: ${classification.reasons.join(", ")}. ${classification.recommendedAction}`);
|
|
146
136
|
}
|
|
147
137
|
}
|
|
148
|
-
async function initAdvisoryRuntimeBootstrapFile(root, bootstrapTargetFile) {
|
|
149
|
-
const target = targetFromBootstrapFile(bootstrapTargetFile);
|
|
150
|
-
return initRuntimeBootstrapFiles(root, [
|
|
151
|
-
{ file: bootstrapTargetFile, target },
|
|
152
|
-
]);
|
|
153
|
-
}
|
|
154
|
-
async function initAdvisoryRuntimeBootstrapFiles({ root, bootstrapTargetFile, runtimeTargets, }) {
|
|
155
|
-
const targets = await initBootstrapTargets(root, runtimeTargets, false);
|
|
156
|
-
if (bootstrapTargetFile) {
|
|
157
|
-
return [
|
|
158
|
-
...(await initAdvisoryRuntimeBootstrapFile(root, bootstrapTargetFile)),
|
|
159
|
-
...(await initRuntimeBootstrapFiles(root, targets)),
|
|
160
|
-
];
|
|
161
|
-
}
|
|
162
|
-
return initRuntimeBootstrapFiles(root, targets);
|
|
163
|
-
}
|
|
164
|
-
async function initRuntimeBootstrapFiles(root, targets = [
|
|
165
|
-
{ file: "ORCHESTRA.md", target: "generic" },
|
|
166
|
-
{ file: "AGENTS.md", target: "codex" },
|
|
167
|
-
]) {
|
|
168
|
-
const changed = [];
|
|
169
|
-
for (const item of targets) {
|
|
170
|
-
const filePath = path.join(root, item.file);
|
|
171
|
-
const existing = await readFile(filePath, "utf8").catch(() => "");
|
|
172
|
-
const result = upsertRuntimeBootstrapBlock(existing, renderRuntimeBootstrap(item.target));
|
|
173
|
-
if (result.changed && !result.drift) {
|
|
174
|
-
await ensureDir(path.dirname(filePath));
|
|
175
|
-
await writeFile(filePath, result.content, "utf8");
|
|
176
|
-
changed.push(item.file);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return changed;
|
|
180
|
-
}
|
|
181
|
-
async function initBootstrapTargets(root, runtimeTargets, useProjectDefaults = true) {
|
|
182
|
-
if (!runtimeTargets || runtimeTargets.length === 0) {
|
|
183
|
-
const defaultTargets = useProjectDefaults
|
|
184
|
-
? [
|
|
185
|
-
{ file: "ORCHESTRA.md", target: "generic" },
|
|
186
|
-
{ file: "AGENTS.md", target: "codex" },
|
|
187
|
-
]
|
|
188
|
-
: [];
|
|
189
|
-
return uniqueBootstrapTargets([
|
|
190
|
-
...defaultTargets,
|
|
191
|
-
...(useProjectDefaults ? await detectedBootstrapTargets(root) : []),
|
|
192
|
-
]);
|
|
193
|
-
}
|
|
194
|
-
return uniqueBootstrapTargets(runtimeTargets.flatMap((target) => getRuntimeAdapter(target).defaultInstructionFiles.map((file) => ({
|
|
195
|
-
file,
|
|
196
|
-
target,
|
|
197
|
-
}))));
|
|
198
|
-
}
|
|
199
|
-
async function detectedBootstrapTargets(root) {
|
|
200
|
-
const detected = [];
|
|
201
|
-
if (await exists(path.join(root, ".codex")))
|
|
202
|
-
detected.push("codex");
|
|
203
|
-
if (await exists(path.join(root, ".claude")))
|
|
204
|
-
detected.push("claude");
|
|
205
|
-
if (await exists(path.join(root, ".cursor")))
|
|
206
|
-
detected.push("cursor");
|
|
207
|
-
if (await exists(path.join(root, ".windsurf")))
|
|
208
|
-
detected.push("windsurf");
|
|
209
|
-
return detected.flatMap((target) => getRuntimeAdapter(target).defaultInstructionFiles.map((file) => ({
|
|
210
|
-
file,
|
|
211
|
-
target,
|
|
212
|
-
})));
|
|
213
|
-
}
|
|
214
|
-
function uniqueBootstrapTargets(targets) {
|
|
215
|
-
const seen = new Set();
|
|
216
|
-
return targets.filter((target) => {
|
|
217
|
-
const key = `${target.file}:${target.target}`;
|
|
218
|
-
if (seen.has(key))
|
|
219
|
-
return false;
|
|
220
|
-
seen.add(key);
|
|
221
|
-
return true;
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
function targetFromBootstrapFile(filePath) {
|
|
225
|
-
const baseName = path.basename(filePath).toLowerCase();
|
|
226
|
-
if (baseName === "claude.md") {
|
|
227
|
-
return "claude";
|
|
228
|
-
}
|
|
229
|
-
if (baseName.includes("cursor")) {
|
|
230
|
-
return "cursor";
|
|
231
|
-
}
|
|
232
|
-
if (baseName.includes("windsurf")) {
|
|
233
|
-
return "windsurf";
|
|
234
|
-
}
|
|
235
|
-
if (baseName === "agents.md") {
|
|
236
|
-
return "codex";
|
|
237
|
-
}
|
|
238
|
-
return "generic";
|
|
239
|
-
}
|
|
240
138
|
export async function loadWorkspace(root = process.cwd()) {
|
|
241
139
|
const base = workflowRoot(root);
|
|
242
140
|
if (!(await exists(base))) {
|
package/dist/workspace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Architecture Debt Inventory
|
|
2
|
+
|
|
3
|
+
Open Orchestra includes a report-only architecture debt inventory for spotting files that may need future refactoring.
|
|
4
|
+
|
|
5
|
+
Run it with:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm run architecture:inventory
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
For machine-readable output:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm run build
|
|
15
|
+
node scripts/architecture-debt-inventory.js --json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The inventory reports:
|
|
19
|
+
|
|
20
|
+
- Large files over the configured line threshold.
|
|
21
|
+
- Long functions over the configured function threshold.
|
|
22
|
+
- Command-facing modules that may contain orchestration logic.
|
|
23
|
+
- Module-boundary candidates that mix CLI, filesystem, workflow, and domain concerns.
|
|
24
|
+
|
|
25
|
+
This slice is intentionally warn-only. It does not fail CI yet because the current repository still needs threshold tuning and incremental refactor stories. Future enforcement slices can promote selected categories to CI failures once the baseline is reviewed.
|
|
@@ -128,6 +128,13 @@ after active delegation sessions complete or close. This prevents a parent
|
|
|
128
128
|
agent from launching more subagents than the local runtime or SaaS tenant can
|
|
129
129
|
handle.
|
|
130
130
|
|
|
131
|
+
Detached phase execution is full async. The workflow records the spawn request
|
|
132
|
+
and session metadata, then returns control to the parent agent. The parent can
|
|
133
|
+
continue conversation or other commands while child sessions run. Session
|
|
134
|
+
completion is reconciled through lifecycle events, runtime notifications, or an
|
|
135
|
+
explicit later `runtime sessions` check. Waiting is only appropriate when the
|
|
136
|
+
next parent action is truly blocked by that specific child result.
|
|
137
|
+
|
|
131
138
|
Phase executor provenance is written to `.agent-workflow/workflow-runs.jsonl`
|
|
132
139
|
and into handoff artifacts. It includes phase, role, runtime, executor type,
|
|
133
140
|
delegation packet artifact when rendered, session id when known, fallback
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# End-to-End Test Batteries
|
|
2
|
+
|
|
3
|
+
Open Orchestra needs E2E coverage that proves installed-user journeys, browser
|
|
4
|
+
journeys, runtime delegation, and release gates work together. Unit tests can
|
|
5
|
+
prove helpers; E2E batteries must prove observable behavior from the public
|
|
6
|
+
entry points a user or CI runner actually executes.
|
|
7
|
+
|
|
8
|
+
## Policy
|
|
9
|
+
|
|
10
|
+
- Every E2E scenario must run against an isolated temporary workspace unless it
|
|
11
|
+
is explicitly validating this repository's site or web console.
|
|
12
|
+
- Tests must validate command output, exit code, JSON contracts, filesystem
|
|
13
|
+
artifacts, workflow events, and release-readiness effects when applicable.
|
|
14
|
+
- Browser tests must validate visible UI state, persisted API effects, keyboard
|
|
15
|
+
or responsive behavior when relevant, and evidence artifacts for user-facing
|
|
16
|
+
flows.
|
|
17
|
+
- External provider, GitHub, Sonar, or network-dependent paths must be opt-in
|
|
18
|
+
and must report skipped or deferred evidence when offline.
|
|
19
|
+
- A release can ship only when P0 batteries pass or a release-manager accepted
|
|
20
|
+
risk records the unavailable environment and compensating evidence.
|
|
21
|
+
|
|
22
|
+
## P0 Release-Blocking Batteries
|
|
23
|
+
|
|
24
|
+
| Battery | Scope | Command | Minimum Assertions | Evidence |
|
|
25
|
+
| ------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ |
|
|
26
|
+
| Source quality | Static checks, build, unit tests, workflow validation, secret scan, security audit | `npm run precommit` | exit code 0, no leaks, no audit blockers, workflow valid | command log |
|
|
27
|
+
| Local CLI onboarding | Current source CLI in `/tmp` workspaces | `ORCHESTRA_NODE_SCRIPT=$PWD/bin/orchestra.js npm run test:e2e:init` | `--version`, `init`, `status`, `validate`, first-use task, handoff, evidence, release readiness | stdout/stderr, JSON output, filesystem assertions |
|
|
28
|
+
| Installed CLI onboarding | Installed or packaged CLI in `/tmp` workspaces | `npm run test:e2e:init` after installing the candidate package | same assertions as local CLI onboarding, proving the packaged binary matches source behavior | stdout/stderr, JSON output, filesystem assertions, package version |
|
|
29
|
+
| Browser console | Web console task, cost, provider, delegation, recovery, evidence, workflow, accessibility, artifacts | `npm run test:e2e` | visible state, API persistence, evidence attachment, lifecycle transitions, responsive/keyboard behavior | Playwright report, screenshots/traces on failure |
|
|
30
|
+
| Public site | Documentation/site navigation, docs catalog, architecture viewer, mobile fit | `npm run test:e2e` | navigation order, local docs catalog search, no raw GitHub redirect for docs, mobile content fit | Playwright report |
|
|
31
|
+
| Runtime manual queue | Manual runtime delegation in a `/tmp` workspace | `npm run test:e2e:runtime` | two active sessions, third manual `spawn-request` materializes `queued`, artifact includes lifecycle commands, `runtime sessions` lists queued session | stdout/stderr, JSON output, artifact content |
|
|
32
|
+
| Init refresh environments | Simulated Codex, Claude, Cursor, generic workspaces | `node --test e2e/init-refresh-environments.test.js` | missing runtime guidance files regenerate on `init --force`, user content is preserved, managed blocks are updated only inside managed ranges | filesystem diff assertions |
|
|
33
|
+
| Workflow lifecycle CLI | CLI workflow run, gate, resume, QA failback, release readiness | `node --test e2e/workflow-lifecycle-cli.test.js` | task phases create handoffs, blocked QA routes back, routine gate resumes immediately, release readiness maps acceptance to evidence | JSON output, events, handoffs |
|
|
34
|
+
|
|
35
|
+
## P1 High-Risk Regression Batteries
|
|
36
|
+
|
|
37
|
+
| Battery | Scope | Command | Minimum Assertions | Evidence |
|
|
38
|
+
| ------------------------------ | --------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
|
|
39
|
+
| Multi-squad runtime | Parallel squad delegation with queue and threshold policy | `node --test e2e/runtime-multi-squad.test.js` | independent sessions, non-blocking parent, queued sessions do not fall back to parent, completion order reconciles | JSON output, lifecycle events |
|
|
40
|
+
| Acceptance evidence | CLI, API, browser, and deferred integration evidence | `node --test e2e/acceptance-evidence.test.js` | evidence maps to named acceptance criteria, deferred external validation requires owner and rationale | evidence artifacts |
|
|
41
|
+
| Recovery and repair | Interrupted runs, stale locks, failed provider phases | `node --test e2e/recovery-cli.test.js` plus browser recovery coverage | recovery detects issue, repair requires confirmation, repaired state is observable | JSON output, before/after state |
|
|
42
|
+
| Docs/site content source | Site content generated from docs and manifest | `npm run site:build && npm run test:e2e -- --grep docs` | docs render as human-friendly catalog, no markdown-only dead ends, search works | Playwright report |
|
|
43
|
+
| Security-sensitive operations | File paths, shell execution, web writes, secrets, telemetry redaction | `node --test e2e/security-boundaries.test.js` | path traversal blocked, unsafe writes rejected, secret-like data redacted, no raw stack traces | command/API evidence |
|
|
44
|
+
| Ollama provider-backed runtime | Local OpenAI-compatible Ollama provider route in a `/tmp` workspace | `npm run test:e2e:runtime:ollama` | `model connect --provider ollama`, provider-backed developer phase, OpenAI-compatible request shape, provider provenance, no runtime subagent credentials in artifacts | stdout/stderr, JSON output, mock provider request, event log |
|
|
45
|
+
|
|
46
|
+
## P2 Extended Confidence Batteries
|
|
47
|
+
|
|
48
|
+
| Battery | Scope | Command | Minimum Assertions | Evidence |
|
|
49
|
+
| -------------------------- | ----------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------- |
|
|
50
|
+
| Tracker and GitHub sync | Issue import/export and close readiness | opt-in CI job with network credentials | labels, comments, close gate, release readiness, no secret exposure | sanitized logs |
|
|
51
|
+
| Sonar quality loop | Local or remote Sonar import and release gate mapping | configured Sonar workflow or local compose job | insights imported, release readiness reflects quality gate, unavailable token is explicit | artifact import report |
|
|
52
|
+
| Provider-backed delegation | OpenAI, Gemini, Ollama, Claude/Cursor runtime bridges | opt-in provider E2E | budget checks, rate-limit/backpressure, lifecycle events, no direct API when disallowed | redacted provider provenance |
|
|
53
|
+
| Package release dry run | npm package contents and release check | `npm pack --dry-run --json && orchestra release check --json` | generated/private state excluded, version/tag policy valid, release readiness complete | package list, release report |
|
|
54
|
+
|
|
55
|
+
## Required `/tmp` Fixture Patterns
|
|
56
|
+
|
|
57
|
+
Each temporary-workspace E2E must create its own root with a deterministic
|
|
58
|
+
prefix and must cleanly assert the following when relevant:
|
|
59
|
+
|
|
60
|
+
- workspace classification before and after `init`;
|
|
61
|
+
- generated `.agent-workflow` state and target runtime guidance files;
|
|
62
|
+
- command JSON shape and human stdout where users rely on it;
|
|
63
|
+
- event records for task, estimate, workflow, handoff, evidence, review, and
|
|
64
|
+
runtime lifecycle;
|
|
65
|
+
- artifact contents for handoffs, evidence, spawn requests, and generated
|
|
66
|
+
prompts;
|
|
67
|
+
- release-readiness output before and after required evidence exists.
|
|
68
|
+
|
|
69
|
+
CLI E2E must run in two modes before release: source mode through
|
|
70
|
+
`ORCHESTRA_NODE_SCRIPT=$PWD/bin/orchestra.js`, and installed-package mode through
|
|
71
|
+
the candidate package binary. A pass in source mode and a fail in installed mode
|
|
72
|
+
means the implementation is correct locally but the installed binary is stale or
|
|
73
|
+
the packaging/install path is wrong.
|
|
74
|
+
|
|
75
|
+
## Implementation Order
|
|
76
|
+
|
|
77
|
+
1. Keep `e2e/runtime-manual-queue.test.js` release-blocking as runtime
|
|
78
|
+
delegation evolves.
|
|
79
|
+
2. Add `e2e/init-refresh-environments.test.js` for Codex, Claude, Cursor, and
|
|
80
|
+
generic project simulations.
|
|
81
|
+
3. Add `e2e/workflow-lifecycle-cli.test.js` for workflow run, gate, failback,
|
|
82
|
+
resume, and release readiness.
|
|
83
|
+
4. Add `e2e/runtime-multi-squad.test.js` for async background squad behavior.
|
|
84
|
+
5. Add focused security and acceptance-evidence E2E only where unit tests cannot
|
|
85
|
+
prove the user-visible contract.
|
|
86
|
+
|
|
87
|
+
## Opt-In Provider Runtime Batteries
|
|
88
|
+
|
|
89
|
+
Provider-backed runtime batteries are not part of default CI because they may
|
|
90
|
+
need local services or paid credentials. They must still be deterministic enough
|
|
91
|
+
to run on a developer machine. `npm run test:e2e:runtime:ollama` uses a local
|
|
92
|
+
OpenAI-compatible mock endpoint by default to prove the Ollama adapter contract,
|
|
93
|
+
workflow provenance, and no-secret behavior without requiring a real Ollama
|
|
94
|
+
daemon. A separate real-model smoke can be run with `ORCHESTRA_OLLAMA_SMOKE=1`
|
|
95
|
+
when validating a local model installation.
|
|
96
|
+
|
|
97
|
+
## Definition Of Done
|
|
98
|
+
|
|
99
|
+
An E2E battery is complete only when it has:
|
|
100
|
+
|
|
101
|
+
- isolated fixtures;
|
|
102
|
+
- acceptance criteria listed in the test;
|
|
103
|
+
- assertions for all criteria;
|
|
104
|
+
- failure output that names the broken user contract;
|
|
105
|
+
- evidence expectations documented in the test or matrix;
|
|
106
|
+
- CI placement documented as P0, P1, or P2.
|
package/docs/orchestra-mvp.md
CHANGED
|
@@ -109,6 +109,14 @@ when release readiness passes. If release readiness is blocked, closure
|
|
|
109
109
|
requires `--accepted-risk <text>`. `--dry-run --json` prints planned commands
|
|
110
110
|
without writing local tasks, comments, or issue state.
|
|
111
111
|
|
|
112
|
+
GitHub comment payloads are file-backed. Generated commands use
|
|
113
|
+
`gh issue comment --body-file <payload-file>` for new comments and
|
|
114
|
+
`gh api --input <payload-json-file>` for comment updates instead of embedding
|
|
115
|
+
multiline markdown after `--body` or `-f body=...`. Agents should keep this
|
|
116
|
+
pattern for any copied or derived command: write markdown or JSON payload bytes
|
|
117
|
+
to a temporary file, pass the file path as an argv value, and avoid logging the
|
|
118
|
+
payload contents when command execution fails.
|
|
119
|
+
|
|
112
120
|
The transport boundary is intentionally tracker-agnostic. The local CLI can
|
|
113
121
|
execute `gh` because it is a child process with stable arguments. MCP-backed
|
|
114
122
|
trackers such as GitHub MCP, Jira, Bitbucket, GitLab, or a custom work tracker
|
|
@@ -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
|
|
@@ -46,6 +52,7 @@ manual intervention is required.
|
|
|
46
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 |
|
package/docs/runtime-adapters.md
CHANGED
|
@@ -161,6 +161,8 @@ orchestra runtime session --session STORY-001:claude-cli --action suspend --json
|
|
|
161
161
|
orchestra runtime session --session STORY-001:claude-cli --action resume --json
|
|
162
162
|
orchestra runtime session --session STORY-001:claude-cli --action cancel --json
|
|
163
163
|
orchestra runtime spawn-request --task STORY-001 --role developer --runtime codex-cli --json
|
|
164
|
+
orchestra runtime parent-actions --task STORY-001 --json
|
|
165
|
+
orchestra runtime parent-actions --task STORY-001 --dispatch --until-idle --runtime codex-cli --timeout 5m --idle-timeout 10s --json
|
|
164
166
|
orchestra runtime spawn-lifecycle --session STORY-001:manual:developer:codex-cli --status spawned --agent-id <runtime-agent-id> --json
|
|
165
167
|
```
|
|
166
168
|
|
|
@@ -172,13 +174,36 @@ failed, or timed-out events so the parent runtime can reconcile claimed work,
|
|
|
172
174
|
spawned agent ids, stale sessions, and handoff state without inventing a second
|
|
173
175
|
source of truth.
|
|
174
176
|
|
|
175
|
-
Spawn request JSON
|
|
176
|
-
the active parent runtime. Codex receives
|
|
177
|
-
`tool=spawn_agent`; Claude receives
|
|
178
|
-
`tool=claude-code-agent`; Cursor receives
|
|
179
|
-
`tool=cursor-background-agent`. The action
|
|
180
|
-
expected result artifact, ownership paths,
|
|
181
|
-
commands. It does not include secrets or direct
|
|
177
|
+
Spawn request JSON and `runtime parent-actions` include `parentRuntimeAction`, a
|
|
178
|
+
structured instruction for the active parent runtime. Codex receives
|
|
179
|
+
`kind=codex-spawn-agent` with `tool=spawn_agent`; Claude receives
|
|
180
|
+
`kind=claude-agent-request` with `tool=claude-code-agent`; Cursor receives
|
|
181
|
+
`kind=cursor-background-agent` with `tool=cursor-background-agent`. The action
|
|
182
|
+
points to the prompt artifact, expected result artifact, ownership paths,
|
|
183
|
+
allowed commands, and lifecycle commands. It does not include secrets or direct
|
|
184
|
+
provider credentials.
|
|
185
|
+
|
|
186
|
+
When `workflow run` pauses with a pending parent runtime action, parent agents
|
|
187
|
+
have two supported paths:
|
|
188
|
+
|
|
189
|
+
- Manual inspection: run `runtime parent-actions --task <id> --json`, inspect
|
|
190
|
+
each requested action, call the active runtime's native tool, then record
|
|
191
|
+
`runtime spawn-lifecycle` with the returned child id.
|
|
192
|
+
- Auto-dispatch: run
|
|
193
|
+
`runtime parent-actions --task <id> --dispatch --until-idle --runtime <runtime-id>`.
|
|
194
|
+
The dispatcher repeatedly inspects pending parent actions, dispatches only
|
|
195
|
+
safe actions for the active runtime, records spawned lifecycle events with
|
|
196
|
+
dispatcher session ids, applies `runtime watch` completions when expected
|
|
197
|
+
handoff artifacts appear, resumes paused workflow runs, and continues across
|
|
198
|
+
later phases until idle or timeout.
|
|
199
|
+
|
|
200
|
+
The auto-dispatch loop is bounded by `--timeout`, `--idle-timeout`, and
|
|
201
|
+
`--interval`, so it never polls forever. It skips queued actions, suspended
|
|
202
|
+
sessions, runtime mismatches, unavailable runtimes, manual/unsupported action
|
|
203
|
+
kinds, and tool mismatches. This keeps the boundary explicit: Orchestra emits
|
|
204
|
+
auditable actions and lifecycle commands; the active parent runtime executes
|
|
205
|
+
native tools such as Codex `spawn_agent`, and the dispatcher only consumes
|
|
206
|
+
actions that are safe for the runtime declared on the command line.
|
|
182
207
|
|
|
183
208
|
## Native Background Agent Notes
|
|
184
209
|
|
|
@@ -192,7 +217,10 @@ They need a precise packet and lifecycle hooks:
|
|
|
192
217
|
`runtime spawn-lifecycle`.
|
|
193
218
|
- Codex: render `runtime spawn-request`, read `parentRuntimeAction`, and call
|
|
194
219
|
the parent `spawn_agent` tool with the prompt artifact as the role-scoped
|
|
195
|
-
assignment.
|
|
220
|
+
assignment. In workflow auto-consumer mode, use
|
|
221
|
+
`runtime parent-actions --dispatch --until-idle --runtime codex-cli` to
|
|
222
|
+
discover and consume safe actions after the run pauses. Keep the child
|
|
223
|
+
detached unless the parent is blocked.
|
|
196
224
|
- Cursor: render `runtime spawn-request`, then launch it as a Cursor Background
|
|
197
225
|
Agent. Background work should stay detached from the current chat and report
|
|
198
226
|
lifecycle state back to Orchestra before the workflow is resumed.
|
|
@@ -245,13 +273,45 @@ parent-agent fallback reason. `subagents` requires runtime-native support and
|
|
|
245
273
|
fails fast if the runtime cannot satisfy it. `single-agent` forces the parent
|
|
246
274
|
agent path and records that choice in phase provenance.
|
|
247
275
|
|
|
276
|
+
When no task or role executor is configured and the default executor is
|
|
277
|
+
`generic-runtime`, `auto` and strict `subagents` mode infer the active runtime
|
|
278
|
+
from `OPEN_ORCHESTRA_ACTIVE_RUNTIME`, known parent-runtime environment markers,
|
|
279
|
+
or managed runtime bootstrap files. Codex maps to `codex-cli`, Claude maps to
|
|
280
|
+
`claude-cli`, Cursor maps to `cursor-cli`, Windsurf maps to `windsurf-agent`,
|
|
281
|
+
and VS Code maps to `vscode-agent`.
|
|
282
|
+
|
|
283
|
+
Explicit selections always take precedence in this order: `--runtime`, task
|
|
284
|
+
override, role override, then `runtimePolicy.defaults.executor`. Automatic
|
|
285
|
+
inference never rewrites `.agent-workflow/config.json`; it only affects the
|
|
286
|
+
current planning decision. Set `workflow.phaseExecutionMode` to `single-agent`
|
|
287
|
+
or configure `runtimePolicy.defaults.executor` to override inference for
|
|
288
|
+
deterministic local or CI runs. If `OPEN_ORCHESTRA_ACTIVE_RUNTIME` names an
|
|
289
|
+
unknown runtime, workflow planning fails with supported values and the same
|
|
290
|
+
override options instead of requiring hidden config edits.
|
|
291
|
+
|
|
292
|
+
Subagent spawning is fully asynchronous by default. A spawn request returns the
|
|
293
|
+
`sessionId`, request artifact, prompt artifact, expected result artifact, status,
|
|
294
|
+
next lifecycle commands, and quality warnings, then the parent agent should
|
|
295
|
+
return control to the user. The parent should not wait for the child unless the
|
|
296
|
+
next parent action is explicitly blocked on that result. Completion is
|
|
297
|
+
reconciled later through `runtime spawn-lifecycle`, runtime notifications, or an
|
|
298
|
+
explicit `runtime sessions` poll.
|
|
299
|
+
|
|
248
300
|
Subagent spawning is bounded by `runtimePolicy.delegation.guardrails`.
|
|
249
301
|
`maxConcurrentDelegates` is the threshold for simultaneously running delegated
|
|
250
302
|
sessions, `maxSpawnsPerTask` limits fan-out for one task, and `limitAction`
|
|
251
303
|
controls whether pressure should `queue` or `reject`. With the default `queue`
|
|
252
304
|
policy, a phase that cannot acquire capacity is paused as a queued runtime
|
|
253
305
|
subagent instead of silently falling back to the parent agent. Resume the
|
|
254
|
-
workflow after capacity is released.
|
|
306
|
+
workflow after capacity is released. Manual `runtime spawn-request` calls follow
|
|
307
|
+
the same guardrails: `queue` materializes a queued request artifact and session,
|
|
308
|
+
while `reject` fails before creating a delegation artifact.
|
|
309
|
+
|
|
310
|
+
For multi-squad work, the parent renders one spawn request per independent
|
|
311
|
+
squad/role/phase. Each detached session is tracked independently by `sessionId`;
|
|
312
|
+
completion order is intentionally non-deterministic. Release aggregation,
|
|
313
|
+
handoff review, and QA reconciliation happen at explicit gates or status checks,
|
|
314
|
+
not by sequential waits in the parent conversation.
|
|
255
315
|
|
|
256
316
|
Each phase stores executor provenance in the workflow run and handoff:
|
|
257
317
|
execution mode, executor type, phase, role, runtime id, delegation packet path
|
|
@@ -311,6 +371,23 @@ orchestra runtime adapters --json
|
|
|
311
371
|
orchestra runtime brief --task <id> --runtime codex-cli --json
|
|
312
372
|
orchestra runtime delegate-plan --task <id> --runtime opencode-cli --roles qa --json
|
|
313
373
|
orchestra runtime spawn-request --task <id> --role developer --runtime codex-cli --json
|
|
374
|
+
orchestra runtime sessions --task <id> --json
|
|
314
375
|
orchestra runtime spawn-lifecycle --session <id> --status completed --agent-id <id> --json
|
|
315
376
|
orchestra model providers --json
|
|
316
377
|
```
|
|
378
|
+
|
|
379
|
+
## Ollama E2E
|
|
380
|
+
|
|
381
|
+
The Ollama adapter has an opt-in E2E battery that runs in a temporary workspace
|
|
382
|
+
and uses a local OpenAI-compatible endpoint controlled by the test:
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
npm run test:e2e:runtime:ollama
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
The test configures `model connect --provider ollama`, runs a developer phase
|
|
389
|
+
through provider-backed execution, validates the request body sent to
|
|
390
|
+
`/v1/chat/completions`, and checks model provenance events. It intentionally
|
|
391
|
+
does not require a real Ollama daemon, so default CI and local development do
|
|
392
|
+
not degrade when Ollama is unavailable. Use `ORCHESTRA_OLLAMA_SMOKE=1` for a
|
|
393
|
+
separate real-model smoke check.
|