@deksden-com/dd-flow-cli 0.9.0-beta.136 → 0.9.0-beta.137
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 +8 -0
- package/dist/build-info.json +3 -3
- package/dist/harness-runtime/DD-ZCODE.md +13 -0
- package/dist/harness-runtime/bin/dd-opencode.mjs +3 -3
- package/dist/harness-runtime/lib/dd-opencode-daemon.mjs +14 -1
- package/dist/harness-runtime/lib/dd-zcode-daemon.mjs +36 -1
- package/dist/harness-runtime/lib/dd-zcode.mjs +7 -3
- package/dist/harness-runtime/lib/opencode-plugin.mjs +3 -1
- package/dist/services/controller-child-observer.js +99 -0
- package/dist/services/controller-fanout.js +9 -2
- package/dist/services/run-controller.js +83 -8
- package/dist/services/stage-lifecycle.js +2 -1
- package/dist/services/stage-report-renderer.js +13 -0
- package/dist/services/vnext-fanout.js +66 -1
- package/dist/services/vnext-protocolize.js +60 -2
- package/package.json +1 -1
- package/dist/cli/command-metadata.js +0 -144
- package/dist/cli/command-option-descriptions.js +0 -186
- package/dist/cli/completion-cli.js +0 -70
- package/dist/cli/completion.js +0 -57
- package/dist/cli/error-output.js +0 -52
- package/dist/cli/executor-onboarding.js +0 -71
- package/dist/cli/harnesses.js +0 -84
- package/dist/cli/models.js +0 -39
- package/dist/cli/operator-profiles.js +0 -61
- package/dist/cli/output-options.js +0 -35
- package/dist/cli/response-file.js +0 -69
- package/dist/cli/setup.js +0 -147
- package/dist/services/cli-upgrade-allowlist.js +0 -27
- package/dist/services/discovery/agy-discovery.js +0 -2
- package/dist/services/discovery/codex-discovery.js +0 -2
- package/dist/services/discovery/droid-discovery.js +0 -2
- package/dist/services/discovery/grok-discovery.js +0 -2
- package/dist/services/discovery/opencode-discovery.js +0 -2
- package/dist/services/discovery/static.js +0 -31
- package/dist/services/discovery/zcode-discovery.js +0 -2
- package/dist/services/executor-onboarding.js +0 -56
- package/dist/services/harness-discovery.js +0 -29
- package/dist/services/harness-doctor.js +0 -75
- package/dist/services/harness-probe-effects.js +0 -51
- package/dist/services/harness-version-probe.js +0 -100
- package/dist/services/hybrid-contracts.js +0 -455
- package/dist/services/installation-lock.js +0 -92
- package/dist/services/model-catalog.js +0 -109
- package/dist/services/model-discovery.js +0 -46
- package/dist/services/operator-profiles.js +0 -236
- package/dist/services/release-archive-producer.js +0 -52
- package/dist/services/release-archive.js +0 -143
- package/dist/services/release-cache.js +0 -142
- package/dist/services/release-compatibility.js +0 -18
- package/dist/services/release-download.js +0 -67
- package/dist/services/release-envelope.js +0 -104
- package/dist/services/release-manifest.js +0 -45
- package/dist/services/release-payload.js +0 -114
- package/dist/services/release-producer.js +0 -63
- package/dist/services/release-provenance.js +0 -160
- package/dist/services/release-registry.js +0 -66
- package/dist/services/release-source.js +0 -194
- package/dist/services/setup.js +0 -377
|
@@ -32,6 +32,62 @@ export function getStageFanoutCapacity(context, input) {
|
|
|
32
32
|
const available = variables.variables[subagentCapacityKey];
|
|
33
33
|
return { run_key: subagentCapacityKey, available_slots: typeof available === "number" && Number.isInteger(available) && available >= 0 ? available : null, source: "harness_qualification" };
|
|
34
34
|
}
|
|
35
|
+
function nativeFailureController(context, projectId, runId, stage, parent) {
|
|
36
|
+
if (!context.db.get("SELECT 1 FROM sqlite_master WHERE type='table' AND name='run_controllers'"))
|
|
37
|
+
return null;
|
|
38
|
+
const rows = context.db.all("SELECT controller_id,generation,state_json FROM run_controllers WHERE project_id=? AND run_id=? AND status NOT IN ('completed','cancelled','superseded')", [projectId, runId]);
|
|
39
|
+
const matching = rows.filter(row => {
|
|
40
|
+
try {
|
|
41
|
+
const state = JSON.parse(row.state_json);
|
|
42
|
+
return state.stage === stage && state.sessions?.[state.current_session]?.id === parent;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return matching.length === 1 ? matching[0] : null;
|
|
49
|
+
}
|
|
50
|
+
/** Failure metadata authored by a Work is not native evidence. Require the
|
|
51
|
+
* independently recorded reconciliation and its exact current registry links. */
|
|
52
|
+
export function verifiedNativeWorkFailure(context, input) {
|
|
53
|
+
const b = input.receipt.native_binding;
|
|
54
|
+
if (!b || b.schema_id !== "dd-flow/native-work-failure@1")
|
|
55
|
+
return;
|
|
56
|
+
const project = requireProjectByRoot(context, input.projectRoot);
|
|
57
|
+
const scope = stageGraphScope(context, project.id, input.runId, input.stage);
|
|
58
|
+
const controller = nativeFailureController(context, project.id, input.runId, input.stage, input.parentSessionId);
|
|
59
|
+
if (!controller || b.controller_id !== controller.controller_id || b.generation !== controller.generation
|
|
60
|
+
|| b.project_id !== project.id || b.run_id !== input.runId || b.stage !== input.stage
|
|
61
|
+
|| b.stage_attempt_id !== scope.attempt || b.stage_cycle !== scope.cycle
|
|
62
|
+
|| b.work_id !== input.workId || b.parent_work_id !== input.parentWorkId
|
|
63
|
+
|| b.parent_provider_session_id !== input.parentSessionId || b.terminal_turn_id !== input.receipt.terminal_turn_id
|
|
64
|
+
|| input.receipt.source !== "native_child_observation" || input.receipt.outcome !== "failed")
|
|
65
|
+
return;
|
|
66
|
+
const link = context.db.get(`SELECT ws.id FROM work_sessions ws JOIN works w ON w.work_id=ws.work_id JOIN sessions s ON s.project_id=w.project_id AND s.session_id=ws.session_id
|
|
67
|
+
WHERE ws.id=? AND w.project_id=? AND w.run_id=? AND w.work_id=? AND w.parent_work_id=? AND ws.status='failed' AND w.status='failed' AND s.parent_session_id=? AND s.provider_session_id=? AND s.harness=?`, [b.work_session_id, project.id, input.runId, input.workId, input.parentWorkId, storageSessionId({ harness_id: b.harness_id, session_id: input.parentSessionId }), b.provider_session_id, b.harness_id]);
|
|
68
|
+
if (!link)
|
|
69
|
+
return;
|
|
70
|
+
const run = context.db.get("SELECT run_root FROM runs WHERE project_id=? AND id=?", [project.id, input.runId]);
|
|
71
|
+
try {
|
|
72
|
+
const events = fs.readFileSync(path.join(run.run_root, "timeline.jsonl"), "utf8").trim().split("\n");
|
|
73
|
+
const proof = events.some(line => {
|
|
74
|
+
const event = JSON.parse(line);
|
|
75
|
+
if (event.type !== "native_child_reconciliation" || event.stage !== input.stage)
|
|
76
|
+
return false;
|
|
77
|
+
const terminal = event.observations?.children?.find((child) => child.session_id === b.provider_session_id && child.terminal_turn_id === b.terminal_turn_id);
|
|
78
|
+
if (event.observations?.parent_session_id !== b.parent_provider_session_id || event.observations?.harness_id !== b.harness_id
|
|
79
|
+
|| terminal?.status !== "failed" || terminal.terminal_observed_at !== input.receipt.terminal_observed_at
|
|
80
|
+
|| JSON.stringify(safeNativeFailure(terminal.provider_error)) !== JSON.stringify(safeNativeFailure(input.receipt.provider_error)))
|
|
81
|
+
return false;
|
|
82
|
+
return event.reconciled?.some((entry) => entry.outcome === "failed"
|
|
83
|
+
&& entry.native_binding && Object.keys(b).every(key => b[key] === entry.native_binding[key]));
|
|
84
|
+
});
|
|
85
|
+
return proof ? b : undefined;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
35
91
|
export function fanoutState(input) {
|
|
36
92
|
if (!input.hasWork)
|
|
37
93
|
return input.dispatch === "none" ? "coordinator_required" : "dispatch_required";
|
|
@@ -177,12 +233,21 @@ export async function reconcileVnextFanout(context, input) {
|
|
|
177
233
|
continue;
|
|
178
234
|
}
|
|
179
235
|
const providerError = safeNativeFailure(child.provider_error);
|
|
236
|
+
const controller = nativeFailureController(context, project.id, input.runId, input.stage, value.parent_session_id);
|
|
237
|
+
const scope = stageGraphScope(context, project.id, input.runId, input.stage);
|
|
238
|
+
const terminalTime = typeof child.terminal_observed_at === "string" ? Date.parse(child.terminal_observed_at) : NaN;
|
|
239
|
+
const nativeBinding = child.status === "failed" && controller && typeof child.terminal_turn_id === "string" && child.terminal_turn_id.length > 0 && child.terminal_turn_id.length <= 256 && Number.isFinite(terminalTime)
|
|
240
|
+
? { schema_id: "dd-flow/native-work-failure@1", project_id: project.id, run_id: input.runId, stage: input.stage, stage_attempt_id: scope.attempt, stage_cycle: scope.cycle,
|
|
241
|
+
parent_work_id: status.orchestration.parent_work_id, work_id: link.work_id, work_session_id: link.id, harness_id: value.harness_id,
|
|
242
|
+
parent_provider_session_id: value.parent_session_id, provider_session_id: String(child.session_id), terminal_turn_id: child.terminal_turn_id,
|
|
243
|
+
controller_id: controller.controller_id, generation: controller.generation } : undefined;
|
|
180
244
|
const reason = JSON.stringify({ source: "native_child_observation", harness_id: value.harness_id, session_id: child.session_id, work_session_id: link.id, outcome: child.status,
|
|
245
|
+
...(nativeBinding ? { native_binding: nativeBinding } : {}),
|
|
181
246
|
...(typeof child.terminal_turn_id === "string" ? { terminal_turn_id: child.terminal_turn_id } : {}),
|
|
182
247
|
...(typeof child.terminal_observed_at === "string" ? { terminal_observed_at: child.terminal_observed_at } : {}),
|
|
183
248
|
...(providerError ? { provider_error: providerError } : {}) });
|
|
184
249
|
const result = await (child.status === "failed" ? failWork : cancelWork)(context, link.work_id, reason);
|
|
185
|
-
reconciled.push({ work_id: link.work_id, work_session_id: link.id, outcome: child.status, result });
|
|
250
|
+
reconciled.push({ work_id: link.work_id, work_session_id: link.id, outcome: child.status, ...(nativeBinding ? { native_binding: nativeBinding } : {}), result });
|
|
186
251
|
}
|
|
187
252
|
appendFlowRunTimelineEvent(context, project.id, input.runId, { type: "native_child_reconciliation", stage: input.stage, observations: value, issues, reconciled });
|
|
188
253
|
return { ok: true, issues, reconciled };
|
|
@@ -4,6 +4,7 @@ import crypto from "node:crypto";
|
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import path from "node:path";
|
|
7
|
+
import { parse as parseYaml } from "yaml";
|
|
7
8
|
import { AppError } from "../shared/errors.js";
|
|
8
9
|
import { projectFeatureWorktreePath, resolveProjectRoot } from "../storage/paths.js";
|
|
9
10
|
import { previewNextEntityId } from "./ids.js";
|
|
@@ -189,6 +190,29 @@ export async function finishVnextProtocolize(context, input) {
|
|
|
189
190
|
const resultFile = prepareProtocolizeResultPath(requireRunHome(run), input.resultFile);
|
|
190
191
|
const result = input.result ?? readResult(resultFile, { projectRoot, ddFlowHome: context.ddFlowHome, runId: run.id, runRoot: requireRunHome(run) });
|
|
191
192
|
validateSchema({ schemaName: "vnext-protocolize-result", file: resultFile, data: result, projectRoot, ddFlowHome: context.ddFlowHome, runId: run.id, runRoot: requireRunHome(run) });
|
|
193
|
+
const acceptedIndex = JSON.parse(context.db.get("SELECT index_json FROM runs WHERE project_id = ? AND id = ?", [project.id, run.id]).index_json);
|
|
194
|
+
if (acceptedIndex.stage_runs.some(item => item.stage === stage && item.status === "done")) {
|
|
195
|
+
publishStageReport(context, project.id, run.id, stage, root);
|
|
196
|
+
const file = path.join(root, "stage-report.json");
|
|
197
|
+
if (!fs.existsSync(file))
|
|
198
|
+
throw new AppError("protocolize_report_missing", "Completed PROTOCOLIZE has no accepted report to replay", 1, { run_id: run.id });
|
|
199
|
+
const accepted = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
200
|
+
const authoredSha = accepted.semantic.materialization?.authored_result?.sha256;
|
|
201
|
+
if (authoredSha && authoredSha !== sha256(fs.readFileSync(resultFile)))
|
|
202
|
+
throw new AppError("protocolize_intent_conflict", "Completed PROTOCOLIZE result differs from accepted input", 1, { run_id: run.id });
|
|
203
|
+
const currentStage = acceptedIndex.current_stage ?? [...acceptedIndex.stage_runs].reverse().find(item => item.status === "running" || item.status === "done")?.stage;
|
|
204
|
+
const activeReplay = currentStage === stage && acceptedIndex.status === "running";
|
|
205
|
+
const resolvedPolicy = activeReplay ? requireVnextWorkspaceRoute({ projectRoot, runId: run.id, runHome: requireRunHome(run), workspaceRoot: run.workspace_root, stage: "protocolize" }) : accepted.mechanical?.workspace_route;
|
|
206
|
+
if (activeReplay) {
|
|
207
|
+
if (acceptedIndex.verdict !== "protocolized")
|
|
208
|
+
advanceFlowRun(context, { settlementStage: "protocolize", projectRoot, runId: run.id, status: "running", verdict: "protocolized", nextAction: "start_plan" });
|
|
209
|
+
refreshRunWorkProjection(context, project.id, run.id);
|
|
210
|
+
}
|
|
211
|
+
const next = activeReplay ? stageSuccessor(context, { projectRoot, runId: run.id, stage: "plan", command: `${flowCommand(context)} stage start ${run.id} --stage plan --project-root ${JSON.stringify(projectRoot)} --json`, metadata: { cwd: run.workspace_root, session_mode: resolvedPolicy.stage_session_mode } }) : { kind: "complete", outcome: "already_completed" };
|
|
212
|
+
return { ok: true, outcome: "protocolized", run_id: run.id, protocol_ids: accepted.semantic.acceptance, workspace_root: run.workspace_root, git_policy: resolvedPolicy, next_action: activeReplay ? "await_plan" : acceptedIndex.next_action, ...("command" in next && next.command ? { next_command: next.command } : {}), next,
|
|
213
|
+
artifacts: { result: resultFile, report_json: file, report_markdown: path.join(root, "stage-report.md"), report_html: path.join(root, "stage-report.html"), protocols: accepted.semantic.acceptance.map(id => path.join(run.workspace_root, ".memory-bank/protocol", id, "summary.md")) } };
|
|
214
|
+
}
|
|
215
|
+
const resolvedPolicy = requireVnextWorkspaceRoute({ projectRoot, runId: run.id, runHome: requireRunHome(run), workspaceRoot: run.workspace_root, stage: "protocolize" });
|
|
192
216
|
const acceptedObligations = acceptedSpecifyObligations(context, projectRoot, run.id, path.join(requireRunHome(run), "01-specify", "specify.json"));
|
|
193
217
|
let obligations;
|
|
194
218
|
try {
|
|
@@ -202,11 +226,11 @@ export async function finishVnextProtocolize(context, input) {
|
|
|
202
226
|
throw error;
|
|
203
227
|
throw new AppError(error.code, error.message, error.exitCode, { ...error.details, phase: "prepare", effect: "no_effect", recoverable: true });
|
|
204
228
|
}
|
|
205
|
-
const resolvedPolicy = requireVnextWorkspaceRoute({ projectRoot, runId: run.id, runHome: requireRunHome(run), workspaceRoot: run.workspace_root, stage: "protocolize" });
|
|
206
229
|
const receipt = readWorkspaceRouteReceipt(root);
|
|
207
230
|
const workspaceRoot = run.workspace_root;
|
|
208
231
|
const intent = await prepareProtocolizeIntent(context, run, resultFile, result, obligations);
|
|
209
232
|
publishProtocolizeIntent(context, project.id, intent);
|
|
233
|
+
const materialization = verifyProtocolizeMaterialization(intent, result, path.relative(requireRunHome(run), resultFile));
|
|
210
234
|
const protocolIds = intent.protocol_ids;
|
|
211
235
|
const changedFiles = intent.changed_files;
|
|
212
236
|
for (const protocolId of protocolIds)
|
|
@@ -216,9 +240,10 @@ export async function finishVnextProtocolize(context, input) {
|
|
|
216
240
|
ensureManagedWorktreeRecorded(context, { protocolId, projectRoot, branch: requiredPolicyValue(resolvedPolicy.feature_branch, "feature branch"), base: requiredPolicyValue(resolvedPolicy.base_ref, "base ref"), created: receipt.created, bootstrap: receipt.bootstrap });
|
|
217
241
|
}
|
|
218
242
|
const now = context.now();
|
|
219
|
-
const workSession =
|
|
243
|
+
const workSession = context.db.get("SELECT * FROM work_sessions WHERE work_id = ? AND status = 'running' ORDER BY created_at DESC LIMIT 1", [work.work_id]);
|
|
220
244
|
const routedRun = requireRun(context, projectRoot, run.id);
|
|
221
245
|
const report = stageReport(context, routedRun, resultFile, protocolIds, changedFiles, workSession?.session_id ?? null, now, resolvedPolicy);
|
|
246
|
+
Object.assign(report.semantic, { materialization });
|
|
222
247
|
const reportJson = path.join(root, "stage-report.json");
|
|
223
248
|
const reportMarkdown = path.join(root, "stage-report.md");
|
|
224
249
|
const reportHtml = path.join(root, "stage-report.html");
|
|
@@ -235,6 +260,7 @@ export async function finishVnextProtocolize(context, input) {
|
|
|
235
260
|
const completion = { projectRoot, runId: run.id, stage, status: "done", data: "protocolize-result.json", dataSchemaId: "dd-flow/vnext-protocolize-result@3", report: "stage-report.md", stageReport: "stage-report.html", dataSha256: crypto.createHash("sha256").update(fs.readFileSync(resultFile)).digest("hex") };
|
|
236
261
|
const preparedCompletion = prepareFlowRunStageCompletion(context, completion);
|
|
237
262
|
withStageSettlement(context, () => {
|
|
263
|
+
completeWorkSession(context, work.work_id, resultFile, now);
|
|
238
264
|
acceptStageReport(context, { projectId: project.id, runId: run.id, stage, root, prepared: preparedReport });
|
|
239
265
|
completeFlowRunStage(context, completion, preparedCompletion);
|
|
240
266
|
});
|
|
@@ -367,6 +393,38 @@ function ensureManagedWorktreeRecorded(context, input) {
|
|
|
367
393
|
recordManagedWorktree(context, input);
|
|
368
394
|
}
|
|
369
395
|
function sha256(bytes) { return crypto.createHash("sha256").update(bytes).digest("hex"); }
|
|
396
|
+
export function verifyProtocolizeMaterialization(intent, result, authoredPath) {
|
|
397
|
+
const documents = intent.files.map(file => {
|
|
398
|
+
const target = path.resolve(intent.workspace_root, file.relative);
|
|
399
|
+
inside(path.join(intent.workspace_root, ".memory-bank"), target);
|
|
400
|
+
assertNoSymlinkPath(path.join(intent.workspace_root, ".memory-bank"), target);
|
|
401
|
+
const bytes = fs.readFileSync(target);
|
|
402
|
+
if (sha256(bytes) !== file.after_sha256)
|
|
403
|
+
throw new AppError("protocolize_materialization_invalid", "Published document differs from accepted intent", 1, { path: file.relative });
|
|
404
|
+
return { path: file.relative, sha256: file.after_sha256 };
|
|
405
|
+
});
|
|
406
|
+
const featurePaths = intent.changed_files.filter(file => /\/features\/FT-[^/]+\/index\.md$/.test(file));
|
|
407
|
+
const featurePath = result.feature.action === "not_applicable" ? null : featurePaths.length === 1 ? featurePaths[0] : null;
|
|
408
|
+
if (result.feature.action !== "not_applicable" && !featurePath)
|
|
409
|
+
throw new AppError("protocolize_materialization_invalid", "Accepted feature output is ambiguous or missing", 1);
|
|
410
|
+
const frontmatter = (relative) => {
|
|
411
|
+
const text = fs.readFileSync(path.join(intent.workspace_root, relative), "utf8");
|
|
412
|
+
const match = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(text);
|
|
413
|
+
const value = match ? parseYaml(match[1]) : null;
|
|
414
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
415
|
+
throw new AppError("protocolize_materialization_invalid", "Published document lacks frontmatter", 1, { path: relative });
|
|
416
|
+
return value;
|
|
417
|
+
};
|
|
418
|
+
const edges = featurePath ? intent.protocol_ids.map(protocolId => ({ feature_path: featurePath, protocol_id: protocolId, protocol_path: `.memory-bank/protocol/${protocolId}/summary.md` })) : [];
|
|
419
|
+
for (const edge of edges) {
|
|
420
|
+
const protocols = frontmatter(edge.feature_path).related_protocols;
|
|
421
|
+
const features = frontmatter(edge.protocol_path).related_features;
|
|
422
|
+
if (!Array.isArray(protocols) || !protocols.includes(edge.protocol_id) || !Array.isArray(features) || !features.includes(edge.feature_path))
|
|
423
|
+
throw new AppError("protocolize_materialization_invalid", "Owned feature/protocol links are not reciprocal", 1, edge);
|
|
424
|
+
}
|
|
425
|
+
return { schema_id: "dd-flow/protocolize-materialization@1", run_id: intent.run_id, stage: "protocolize", action: result.feature.action, feature_path: featurePath,
|
|
426
|
+
protocol_ids: intent.protocol_ids, authored_result: { role: "authored_input", run_relative_path: authoredPath, sha256: intent.result_sha256 }, documents, owned_links: edges, status: "passed" };
|
|
427
|
+
}
|
|
370
428
|
async function materialize(projectRoot, runId, runHome, result, obligations, ids, psetId) {
|
|
371
429
|
const psetPath = psetId ? path.join(projectRoot, ".memory-bank", "protocol", "_set", `${psetId}.md`) : null;
|
|
372
430
|
const created = [];
|
package/package.json
CHANGED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { commandInputs, physicalPathOptions } from "./command-inputs.js";
|
|
2
|
-
import { runtimeOptionDescriptions } from "./command-option-descriptions.js";
|
|
3
|
-
const optionDescriptions = {
|
|
4
|
-
"harness": "Select one supported harness family. Static discovery checks executable presence, not authentication or model access; diagnostics require separate effect consent.",
|
|
5
|
-
"provider": "Exact provider namespace for model filtering or doctor observation binding, including namespaced IDs such as builtin:zai-coding-plan. An account binding requires --account-sha256; this selector does not authenticate credentials.",
|
|
6
|
-
"executable": "Explicit installed harness executable path, including paths with spaces. Resolves ambiguous installations without choosing an arbitrary PATH candidate. Discovery never executes it; probes require explicit effect flags.",
|
|
7
|
-
"state-dir": "Existing OpenCode server state directory for the selected doctor. Its daemon configuration must bind the selected executable; doctor does not start or stop an unrelated daemon. Not an executor profile or project directory.",
|
|
8
|
-
"model-observation-file": "Optional destination for a standalone model listing snapshot from the admitted doctor. Requires --provider and --account-sha256; operator scope is unverified. Artifact publication is explicit, separate from provider writes, and never proves account access. Must differ from --response-file.",
|
|
9
|
-
"save-profile-intent": "Explicit frozen dd-flow/profile-creation-intent@1 JSON file containing before/after settings, profile and default consent. Setup binds it to request identity, saves under revision CAS and reconciles exact replay. Conflicts with --skip-agent-setup; an additional selected profile must match. This file is not provider authorization.",
|
|
10
|
-
"set-default": "Explicitly select the newly created profile as global default in the same atomic settings write. Omission preserves the existing default. Does not change frozen RUN settings.",
|
|
11
|
-
"remove": "Remove the positional operator alias binding, not its target profile; conflicts with --target.",
|
|
12
|
-
"clear": "Clear the operator global default without removing profiles or changing project routing and frozen RUN snapshots.",
|
|
13
|
-
"allow-processes": "Explicit permission to execute installed diagnostic code. Version/doctor probes are opt-in; static discovery never requires this flag.",
|
|
14
|
-
"allow-services": "Permit the selected adapter doctor's possible service process effects. Does not authorize model Turns, a flow, or reuse of an unrelated service.",
|
|
15
|
-
"allow-credentials": "Permit possible credential reads by the installed diagnostic; no credentials or raw adapter output enter this command's result.",
|
|
16
|
-
"allow-writes": "Permit possible diagnostic temporary/runtime writes by installed code; not permission to modify project packs or RUN settings.",
|
|
17
|
-
"native-executable": "Absolute native ZCode executable for the selected ZCode ACP doctor; no ambient ZCODE_BIN fallback. Invalid for other families.",
|
|
18
|
-
"timeout-ms": "Timeout in milliseconds for the selected operation. Harness diagnostics accept 1..60000: version defaults to 3000 and doctor to 30000. Other commands retain their own operation timeout policy; this option is not a productive RUN inactivity policy.",
|
|
19
|
-
"seed-file": "Optional reviewed dd-flow/model-catalog@1 JSON input; default is the bundled seed. Seed-only entries cannot establish account access or runtime qualification.",
|
|
20
|
-
"observation-file": "Explicit regular-file model listing snapshot; requires --harness, --provider and --account-sha256. Foreign scopes are ignored; malformed or secret-bearing fields refuse. No live listing is started.",
|
|
21
|
-
"account-sha256": "Opaque 64-character lowercase SHA-256 account binding, never an account name, token or credential path. Requires --harness and --provider; does not authenticate the account.",
|
|
22
|
-
"canon-source": "Explicit local signed release bundle or HTTPS envelope URL. Remote archives must use the same origin; trust comes only from --trust-file. Exclusive with --canon-version.",
|
|
23
|
-
"canon-version": "Exact canon release version in the selected channel of the operator release registry; exclusive with --canon-source. Omission selects the registry's explicit channel default.",
|
|
24
|
-
"release-registry": "Operator dd-flow/release-registry@1 JSON selector; default is DD_FLOW_RELEASE_REGISTRY or release-registry.json in DD_FLOW_HOME. Registry entries never enroll signing keys.",
|
|
25
|
-
"trust-file": "Explicit operator dd-flow/release-trust@1 file; release bytes cannot enroll their own signing key.",
|
|
26
|
-
"channel": "Selected release channel; preview and development must be requested explicitly.",
|
|
27
|
-
"skip-agent-setup": "Install without selecting or configuring an executor; conflicts with --profile.",
|
|
28
|
-
"non-interactive": "Never request interactive input; a missing executor selection fails unless agent setup is explicitly skipped.",
|
|
29
|
-
"project-root": "Stable repository identity; not the assigned feature workspace.",
|
|
30
|
-
"workspace-root": "Concrete assigned checkout used for this operation.",
|
|
31
|
-
"workspace-path": "Concrete assigned checkout; does not change project identity.",
|
|
32
|
-
"root": "Explicit root for the selected command; prevents implicit root discovery.",
|
|
33
|
-
"run": "Exact retained RUN identity; its frozen execution settings remain authoritative.",
|
|
34
|
-
"reason": "Operator explanation retained with the requested change.",
|
|
35
|
-
"request-id": "Stable request identity for reconciliation and idempotent retry.",
|
|
36
|
-
"expected-revision": "Required current revision; stale changes are rejected instead of overwriting concurrent edits.",
|
|
37
|
-
"profile": "Explicit configured profile identifier; credentials are not stored in profiles.",
|
|
38
|
-
"profile-file": "Complete validated executor profile; exclusive with --profile and --skip-agent-setup. Does not change operator defaults.",
|
|
39
|
-
"agent-profile": "Explicit configured executor profile; no automatic model selection.",
|
|
40
|
-
"force": "Explicit force request; does not bypass ownership, compatibility or authorization gates.",
|
|
41
|
-
"offline": "Explicit drained/offline operation; does not establish physical settlement by itself."
|
|
42
|
-
};
|
|
43
|
-
/** Option names alone are insufficient when different commands own different inputs. */
|
|
44
|
-
const commandOptionDescriptions = {
|
|
45
|
-
"profiles create": { file: "Regular UTF-8 JSON file containing one complete validated agent profile. The ID must be unused. Credentials and unknown fields are refused; creation uses --expected-revision and never starts a model Turn." },
|
|
46
|
-
"profiles edit": { file: "Regular UTF-8 JSON file containing the complete replacement agent profile, not a patch. Its ID must already exist. Revision conflicts refuse the edit; retained RUN snapshots are unchanged." },
|
|
47
|
-
"profiles alias": {
|
|
48
|
-
target: "Existing canonical profile ID for the positional alias. Aliases cannot chain or collide with profile IDs. Supply exactly one of --target or --remove, plus --expected-revision.",
|
|
49
|
-
remove: "Remove the positional alias, not its target profile. Exclusive with --target. The revision-checked change does not rewrite retained RUN settings."
|
|
50
|
-
},
|
|
51
|
-
"profiles set-default": { clear: "Clear only the operator global default. Exclusive with a positional profile ID or alias; existing profiles, project routing and frozen RUN settings remain unchanged." },
|
|
52
|
-
"work add-batch": { file: "Validated Work batch JSON file declaring children of --parent, including their task and dependency inputs. Adding logical Work does not launch physical Sessions." },
|
|
53
|
-
"schema validate": { file: "JSON document to validate against --schema in the selected schema directory. Validation does not execute a flow or accept semantic completion." },
|
|
54
|
-
"migration verify": { file: "Existing dd-flow/mb-upgrade-migration-report@1 JSON report to verify against migration evidence; verification does not apply a storage migration." },
|
|
55
|
-
"migration apply": { file: "Explicit migration report JSON file used for admission to the requested apply operation; backup and ownership gates remain mandatory." },
|
|
56
|
-
"prompt render": { profile: "Prompt profile name required by the assigned Work execution context; not an operator executor profile ID or a Codex home profile." },
|
|
57
|
-
"runtime process register": { harness: "Harness family associated with the registered process/budget; registration is not a discovery or doctor probe.", "state-dir": "Adapter runtime state directory retained with the physical process for later ownership/admission checks." },
|
|
58
|
-
"runtime process admission": { "state-dir": "Exact adapter runtime state directory matching the confirmed process record; mismatched ownership refuses provider admission." },
|
|
59
|
-
"runtime process release-turn": { "observation-file": "Provider turn release observation file for the selected daemon/operation budget. This is not a model inventory snapshot or account listing." },
|
|
60
|
-
"runtime scope control": { mode: "Recoverable scope control intent: pause or stop. Drain/settlement remains pending until owned physical evidence is confirmed." },
|
|
61
|
-
"merge request route": { mode: "Route this MERGE request through same_session or server; selected execution policy and workspace admission still apply." },
|
|
62
|
-
"worktree close": { mode: "keep retains the feature checkout; remove requests its guarded removal. Dirty or foreign worktrees must not be silently discarded." },
|
|
63
|
-
"codex home remove": { mode: "keep-shared preserves shared state; remove-owned removes only the verified project-owned home entries.", profile: "Isolated project Codex home profile name, not an executor agent-profile ID." },
|
|
64
|
-
"codex home plan": { profile: "Isolated project Codex home profile name, not an executor agent-profile ID." },
|
|
65
|
-
"codex home init": { profile: "Isolated project Codex home profile name, not an executor agent-profile ID." },
|
|
66
|
-
"codex home status": { profile: "Isolated project Codex home profile name, not an executor agent-profile ID." },
|
|
67
|
-
"codex home print-env": { profile: "Isolated project Codex home profile name, not an executor agent-profile ID." },
|
|
68
|
-
"codex hooks print": { target: "Hook installation target: isolated (default) or default Codex home. Printing does not install hooks.", profile: "Project Codex home profile used to locate isolated hooks; not an executor profile." },
|
|
69
|
-
"codex hooks status": { target: "Hook installation target: isolated (default) or default Codex home. Status does not install hooks.", profile: "Project Codex home profile used to locate isolated hooks; not an executor profile." },
|
|
70
|
-
"codex hooks install": { target: "Hook installation target: isolated (default) or default Codex home; mutation also requires explicit confirmation.", profile: "Project Codex home profile used to locate isolated hooks; not an executor profile." },
|
|
71
|
-
"codex hooks remove": { target: "Hook installation target: isolated (default) or default Codex home; removal also requires explicit confirmation.", profile: "Project Codex home profile used to locate isolated hooks; not an executor profile." },
|
|
72
|
-
"protocol sync-from-run": { target: "Protocol state target derived from the selected RUN; auto uses the command's supported state mapping." },
|
|
73
|
-
"run fork": { from: "Existing retained snapshot path to fork into a new RUN with the explicitly selected engine; not a control request identity." },
|
|
74
|
-
"run control resume": { from: "Exact retained pause/stop control ID whose captured state authorizes this resume request; not a snapshot path." },
|
|
75
|
-
"stage block": { kind: "Blocker category: engine, harness or environment; code and summary identify the actionable cause." },
|
|
76
|
-
"migration impact": { mode: "Optional full_migration request forces the strict full-migration assessment; otherwise impact evidence determines patch, targeted_minor or full_migration." },
|
|
77
|
-
"memory permissions preflight": { mode: "Permission contour to check: read, write, repair or report_only; write checks may create temporary permission probes.", flow: "Workflow permission contour: mb-init, mb-upgrade, mb-audit, mb-fix, mb-upgrade-review or custom. Not a filesystem path." }
|
|
78
|
-
};
|
|
79
|
-
export const globalOptionDocumentation = [
|
|
80
|
-
{ name: "help", description: "Show help before command preparation or resource access; -h is equivalent.", kind: "switch", required: false, repeatable: false, choices: [], physical_path: false },
|
|
81
|
-
{ name: "option", description: "Help-only selector for one option; accepts name or --name.", kind: "value", required: false, repeatable: false, choices: [], physical_path: false },
|
|
82
|
-
{ name: "json", description: "Emit structured JSON rather than human text.", kind: "switch", required: false, repeatable: false, choices: [], physical_path: false },
|
|
83
|
-
{ name: "progress-jsonl", description: "Emit machine-readable progress events during command execution.", kind: "switch", required: false, repeatable: false, choices: [], physical_path: false },
|
|
84
|
-
{ name: "response-file", description: "Execution-only response destination; help never opens or writes it.", kind: "value", required: false, repeatable: false, choices: [], physical_path: true }
|
|
85
|
-
];
|
|
86
|
-
export function optionsForCommand(input, command) {
|
|
87
|
-
return [...new Set([...input.values, ...input.switches])].map(name => ({
|
|
88
|
-
name,
|
|
89
|
-
description: optionDescription(name, command),
|
|
90
|
-
kind: input.switches.includes(name) ? "switch" : "value",
|
|
91
|
-
required: input.required.includes(name), repeatable: input.repeatable.includes(name),
|
|
92
|
-
choices: input.enums[name] ?? [], physical_path: physicalPathOptions.has(name) && name !== "flow" && name !== "stage"
|
|
93
|
-
}));
|
|
94
|
-
}
|
|
95
|
-
function optionDescription(name, command) {
|
|
96
|
-
const description = (command ? commandOptionDescriptions[command]?.[name] : undefined) ?? optionDescriptions[name] ?? runtimeOptionDescriptions[name];
|
|
97
|
-
if (!description)
|
|
98
|
-
throw new Error(`Missing CLI option documentation: ${command ?? "inventory"} --${name}`);
|
|
99
|
-
return description;
|
|
100
|
-
}
|
|
101
|
-
/** Shared help/completion option set for a route, family or root catalog. */
|
|
102
|
-
export function optionsForCommandTree(command) {
|
|
103
|
-
const options = new Map(globalOptionDocumentation.map(option => [option.name, option]));
|
|
104
|
-
for (const [key, input] of Object.entries(commandInputs)) {
|
|
105
|
-
if (!command || key === command || key.startsWith(`${command} `)) {
|
|
106
|
-
for (const option of optionsForCommand(input, key))
|
|
107
|
-
options.set(option.name, option);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return [...options.values()].sort((left, right) => left.name.localeCompare(right.name, "en"));
|
|
111
|
-
}
|
|
112
|
-
/** One exact native routing classification shared by router and compatibility admission. */
|
|
113
|
-
export function routerNativeRoute(key) {
|
|
114
|
-
return key === "version" || key === "run reconcile" || key.startsWith("engine ") || key === "schema validate"
|
|
115
|
-
|| key.startsWith("profiles ") || key.startsWith("models ") || key.startsWith("harnesses ") || key.startsWith("completion ") || key === "setup" || key.startsWith("setup ")
|
|
116
|
-
|| key === "storage migrate-writer" || key === "codex hook handle"
|
|
117
|
-
|| key === "zcode hook handle" || key === "zcode invocation prepare"
|
|
118
|
-
|| /^(zcode|grok|droid|opencode|agy) (event handle|usage ingest)$/.test(key);
|
|
119
|
-
}
|
|
120
|
-
export function commandKeyForPositions(positions) {
|
|
121
|
-
return Object.keys(commandInputs).filter(key => key.split(" ").every((part, index) => positions[index] === part))
|
|
122
|
-
.sort((a, b) => b.split(" ").length - a.split(" ").length)[0];
|
|
123
|
-
}
|
|
124
|
-
/** Best matching help topic for rejected argv; never validates or executes it.
|
|
125
|
-
* Option values and literal passthrough cannot impersonate a command path.
|
|
126
|
-
*/
|
|
127
|
-
export function commandHelpTopic(args, fallback) {
|
|
128
|
-
const switches = new Set([...globalOptionDocumentation.filter(option => option.kind === "switch").map(option => option.name),
|
|
129
|
-
...Object.values(commandInputs).flatMap(input => input.switches)]);
|
|
130
|
-
const positions = [];
|
|
131
|
-
for (let index = 0; index < args.length; index++) {
|
|
132
|
-
const arg = args[index];
|
|
133
|
-
if (arg === "--")
|
|
134
|
-
break;
|
|
135
|
-
if (arg.startsWith("--")) {
|
|
136
|
-
const name = arg.slice(2).split("=", 1)[0];
|
|
137
|
-
if (!arg.includes("=") && !switches.has(name) && args[index + 1] && !args[index + 1].startsWith("-"))
|
|
138
|
-
index++;
|
|
139
|
-
}
|
|
140
|
-
else if (!arg.startsWith("-"))
|
|
141
|
-
positions.push(arg);
|
|
142
|
-
}
|
|
143
|
-
return commandKeyForPositions(positions) ?? fallback;
|
|
144
|
-
}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/** Reviewed meanings for existing runtime options. Grammar owns requiredness,
|
|
2
|
-
* repetition and enumerations; these descriptions do not grant effect authority.
|
|
3
|
-
*/
|
|
4
|
-
export const runtimeOptionDescriptions = {
|
|
5
|
-
"acquire-lock": "Boolean: acquire the workspace lane lock when claiming the next merge job; waiting alone does not grant ownership.",
|
|
6
|
-
"adapter-executable": "Executable path retained with the registered adapter process for ownership and later reconciliation.",
|
|
7
|
-
after: "Timeline cursor for controller status; return observations after this sequence number.",
|
|
8
|
-
alias: "Additional report alias to retain with the completed stage; repeat for multiple aliases.",
|
|
9
|
-
all: "Refresh dashboards for all selected projects rather than only the current project.",
|
|
10
|
-
"allow-downgrade": "Explicitly permit lowering flow flags during a revision-checked change; other admission gates still apply.",
|
|
11
|
-
"answer-file": "File containing the user's answer for the selected paused stage or drive request; not a replacement task or execution policy.",
|
|
12
|
-
"answer-stdin": "Read the stage answer from standard input instead of --answer-file.",
|
|
13
|
-
apply: "Apply the proposed project-ID migration; without this switch the command remains a preview.",
|
|
14
|
-
"available-slots": "Record available native delegation capacity as an integer from 0 through 15; capacity is not proof of child settlement.",
|
|
15
|
-
backup: "New absolute backup destination for the explicitly drained database; an existing backup is never overwritten.",
|
|
16
|
-
"backup-created-at": "Timestamp of the retained backup used as migration evidence; must agree with the selected migration inputs.",
|
|
17
|
-
"backup-path": "Path to the retained backup bound into migration planning, reporting or application evidence.",
|
|
18
|
-
base: "Git base reference from which the requested feature worktree is created.",
|
|
19
|
-
bootstrap: "Request the supported initial stage bootstrap rather than starting a stage on an existing RUN; still requires declared intake and admission.",
|
|
20
|
-
branch: "Git branch assigned to the selected workspace or worker; a branch name does not itself authorize creation or merge.",
|
|
21
|
-
"budget-json": "Inline JSON declaration of runtime process budget; validated by the process owner before registration.",
|
|
22
|
-
"cancel-queue": "Boolean: cancel protocol queue entries as part of cancellation; does not silently settle running workers.",
|
|
23
|
-
candidate: "Mark the created snapshot as a recovery candidate rather than claiming accepted restoration.",
|
|
24
|
-
"capture-key": "Exact retained capture digest selecting the recovery state for the requested scope generation.",
|
|
25
|
-
"capture-path": "Destination for the selected RUN recovery capture; capture is distinct from accepting recovery.",
|
|
26
|
-
"capture-root": "Root directory for controller recovery captures associated with this drive request.",
|
|
27
|
-
check: "Check identity associated with a registered runtime process, preserving its ownership scope.",
|
|
28
|
-
"check-ref": "Retained check evidence reference motivating repair Work; repeat to bind multiple checks.",
|
|
29
|
-
"check-registry": "Include project registry consistency diagnostics in status; does not repair the registry.",
|
|
30
|
-
"close-sessions": "Boolean: request closing protocol Sessions during cancellation; physical completion requires separate evidence.",
|
|
31
|
-
code: "Stable diagnostic code for the engine, harness or environment blocker being recorded.",
|
|
32
|
-
command: "Command to launch as the owned runtime service, with declared ports and readiness checks.",
|
|
33
|
-
"context-file": "Prepared context file for the selected stage/controller request; its bytes must match --context-sha256.",
|
|
34
|
-
"context-sha256": "SHA-256 of the exact --context-file bytes, preventing substitution of prepared context.",
|
|
35
|
-
"control-id": "Retained RUN control request identity used by its owner or reconciliation command.",
|
|
36
|
-
"controller-id": "Retained drive controller identity; does not create an unrelated controller or bypass ownership.",
|
|
37
|
-
"daemon-id": "Selected provider daemon identity for scoped admission or recovery; not a request to start an arbitrary daemon.",
|
|
38
|
-
dashboard: "Dashboard artifact path associated with the completed stage.",
|
|
39
|
-
data: "Stage data artifact path supplied for validation and completion; its applicable schema is independently selected.",
|
|
40
|
-
"data-schema-id": "Registered schema identity for the stage data artifact; selecting a schema is not semantic acceptance.",
|
|
41
|
-
database: "Existing absolute SQLite database path to migrate; the command does not initialize a missing runtime database.",
|
|
42
|
-
"decision-file": "Retained stage decision artifact required by the selected finish contract.",
|
|
43
|
-
dir: "Stage artifact directory selected for attachment or lifecycle processing; must satisfy the selected stage's layout contract.",
|
|
44
|
-
"dispatch-barrier": "Retained dispatch barrier associated with the registered runtime process; not proof of productive admission.",
|
|
45
|
-
"engine-version": "Exact installed engine version selected for legacy binding recovery or a requested RUN fork.",
|
|
46
|
-
escalate: "Escalation policy for an owned pause/stop operation; does not authorize stopping unrelated processes.",
|
|
47
|
-
event: "Hook event name identifying the Codex event being handled; hook payload is validated separately.",
|
|
48
|
-
evidence: "Evidence reference supporting a completed plan item; repeat to retain multiple references.",
|
|
49
|
-
"execution-routing-file": "Validated execution routing JSON file used for the selected RUN creation or restoration; retained RUN profiles remain frozen.",
|
|
50
|
-
file: "JSON input file consumed by this command's declared validator; see the exact command topic for its contract.",
|
|
51
|
-
flag: "Explicit flow flag assignment for creation or revision; repeat for multiple assignments. Revision and policy gates still apply.",
|
|
52
|
-
flow: "Memory workflow whose permissions are checked; preflight does not execute that workflow.",
|
|
53
|
-
"flow-kind": "Flow kind recorded when creating the RUN; a label alone cannot register handlers or admit execution.",
|
|
54
|
-
format: "Dashboard output format; rendering and opening follow the selected command's supported formats.",
|
|
55
|
-
from: "Retained source identity for a fork or resume; its meaning is specified by the exact command topic.",
|
|
56
|
-
"from-check": "Check identity causing the repair Work, preserving traceability to the failed check.",
|
|
57
|
-
"from-finding": "Review finding identity motivating repair Work; repeat for multiple findings.",
|
|
58
|
-
"from-unresolved": "Unresolved issue identity motivating repair Work; repeat for multiple issues.",
|
|
59
|
-
generation: "Exact runtime scope generation; stale generations cannot admit recovery or new dispatch.",
|
|
60
|
-
global: "Read global dashboard data rather than one project dashboard.",
|
|
61
|
-
"grace-ms": "Grace period in milliseconds for an owned process or control stop before reconciliation/escalation.",
|
|
62
|
-
"group-by": "Usage aggregation dimension; grouping does not change source-backed usage evidence.",
|
|
63
|
-
hide: "Timeline event category to hide from the displayed view; repeat for multiple categories. Retained events are not deleted.",
|
|
64
|
-
"hook-event-id": "Trusted hook event identity binding this lifecycle invocation to its physical event.",
|
|
65
|
-
id: "Exact runtime process registry identity targeted by registration, lease operations or admission.",
|
|
66
|
-
"idempotency-key": "Stable flow-flag revision request key; retry the exact same change rather than applying it twice.",
|
|
67
|
-
"include-results": "Include retained Work result projections in the listing; listing remains an observation, not acceptance.",
|
|
68
|
-
incomplete: "Permit creation of an explicitly incomplete recovery snapshot; does not qualify it as a restorable complete snapshot.",
|
|
69
|
-
"intake-file": "File containing the raw user intake for initial stage bootstrap; do not replace it with an inferred solution.",
|
|
70
|
-
"intake-stdin": "Read raw bootstrap intake from standard input instead of --intake-file.",
|
|
71
|
-
"integrity-checksum": "Expected retained engine integrity checksum, checked independently of its version label.",
|
|
72
|
-
"interruption-json": "Inline JSON interruption evidence opening the selected RUN recovery attempt.",
|
|
73
|
-
"invocation-id": "Exact retained lifecycle invocation identity; syntax alone does not establish generation, ownership or authorization.",
|
|
74
|
-
"json-file": "JSON transition payload file; an alternative to the transition payload-file input.",
|
|
75
|
-
key: "Configuration or RUN variable key selected for reading or writing; supported configuration keys are validated by the owner.",
|
|
76
|
-
kind: "Classification of the recorded blocker or process; the exact command determines supported kinds.",
|
|
77
|
-
lane: "Named project workspace lane whose workspace, waiters or lock are being inspected or changed.",
|
|
78
|
-
"lease-ms": "Runtime process lease duration in milliseconds; renewal requires the current lease token.",
|
|
79
|
-
"lease-token": "Current owned lease token for the exact process or lane; not an executor credential or an ownership override.",
|
|
80
|
-
limit: "Maximum number of Work entries returned by the listing; must be a positive integer.",
|
|
81
|
-
"manifest-json": "Inline runtime-scope manifest declaration binding the selected source manifest and executions; changed declarations refuse.",
|
|
82
|
-
"max-parallel-projects": "Maximum projects processed concurrently by the merge server; does not widen per-project merge authority.",
|
|
83
|
-
"memory-bank": "Memory Bank path whose access is checked by permission preflight; no installation or workflow is started.",
|
|
84
|
-
mode: "Operation mode accepted by this exact command; consult its allowed values and mode-specific effects.",
|
|
85
|
-
"native-session-id": "Existing physical provider Session identity for scoped recovery/admission; logical Work ancestry is separate.",
|
|
86
|
-
"next-action": "Explicit next-action projection stored with RUN creation or an operator override; it is not automatic dispatch.",
|
|
87
|
-
"observations-file": "Bounded observations JSON file for the selected fan-out/native scope; observations must satisfy ownership and settlement contracts.",
|
|
88
|
-
on: "Dependency Work identity to add or remove; repeat for multiple dependencies. Dependencies are not physical Session parentage.",
|
|
89
|
-
once: "Process one merge-server iteration instead of polling continuously.",
|
|
90
|
-
open: "Open the refreshed dashboard after rendering; does not alter RUN control state.",
|
|
91
|
-
operation: "Named operation associated with a registered process or provider admission request.",
|
|
92
|
-
"operation-id": "Exact retained provider operation identity bound to turn admission or release.",
|
|
93
|
-
"operational-decision-file": "Validated operational decision artifact authorizing the applicable snapshot restoration or fork route; not a release or arbitrary mutation permit.",
|
|
94
|
-
"origin-work": "Origin Work identity motivating repair; repeat to preserve multiple origins.",
|
|
95
|
-
outcome: "Outcome declared for the selected stage result; finish still validates its contract and evidence before transition.",
|
|
96
|
-
output: "Destination for a created snapshot, fork artifact or rendered dashboard; see the command's artifact contract.",
|
|
97
|
-
owner: "Runtime resource owner identity used for registration, admission or reconciliation; ownership is independently checked.",
|
|
98
|
-
"owner-pid": "Operating-system PID of the registered process owner, used for scoped liveness and reconciliation.",
|
|
99
|
-
package: "Engine package name used to locate the requested installed snapshot.",
|
|
100
|
-
parent: "Logical parent Work identity for batch creation or listing; does not make children physical subagents automatically.",
|
|
101
|
-
path: "Concrete workspace path used by lane, merge or worktree operations; not the stable project identity.",
|
|
102
|
-
"pause-id": "Exact retained user-interaction pause identity answered by this drive request.",
|
|
103
|
-
"payload-base64": "Base64-encoded Session registration payload; use only one payload transport.",
|
|
104
|
-
"payload-file": "File containing the selected transition or Session registration payload; validated before registration or transition.",
|
|
105
|
-
"payload-json": "Inline JSON Session registration payload; use only one payload transport.",
|
|
106
|
-
pid: "Operating-system PID of the registered physical process; a PID alone does not prove ownership or completion.",
|
|
107
|
-
"plan-file": "Previously generated cleanup plan file; application still checks its scope and explicit reason.",
|
|
108
|
-
"plan-item": "Plan item identity selected for the bounded worker prompt.",
|
|
109
|
-
"poll-interval": "Polling interval in seconds for lane/merge waiting; must be positive.",
|
|
110
|
-
"poll-seconds": "Merge server polling interval in seconds; must be positive.",
|
|
111
|
-
ports: "Comma-separated port declarations for the owned runtime service.",
|
|
112
|
-
preset: "Named flow-flag preset for creation or revision; explicit flag assignments and policy admission remain separate.",
|
|
113
|
-
"process-group-id": "Operating-system process-group identity retained for owned-tree cleanup; not a permit to kill unrelated groups.",
|
|
114
|
-
project: "Project selector for dashboard data, rendering or opening.",
|
|
115
|
-
"project-id": "Registered project identity associated with the physical runtime process.",
|
|
116
|
-
"prompt-sha256": "Digest of exact provider prompt bytes associated with operation admission.",
|
|
117
|
-
protocol: "Protocol selector limiting dashboard output to the requested protocol.",
|
|
118
|
-
"protocol-id": "Existing protocol identity whose feature worktree is planned, created, inspected or closed.",
|
|
119
|
-
"protocol-override-file": "Validated protocol override JSON input supplied at RUN creation; does not overwrite an existing frozen RUN.",
|
|
120
|
-
"question-file": "File containing the user question that pauses this stage/Work under the selected interaction contract.",
|
|
121
|
-
"question-stdin": "Read the stage question from standard input instead of --question-file.",
|
|
122
|
-
ready: "List dependency-ready Work entries rather than all entries; readiness does not launch them.",
|
|
123
|
-
"ready-path": "HTTP path used for the runtime service readiness check.",
|
|
124
|
-
"ready-port": "Declared service port used for the runtime readiness check.",
|
|
125
|
-
"ready-timeout-ms": "Maximum service readiness wait in milliseconds; must be a positive integer.",
|
|
126
|
-
"reason-file": "File containing the reason artifact required by the selected lifecycle finish contract.",
|
|
127
|
-
"recovery-id": "Exact retained RUN recovery attempt identity; recovery acceptance and physical settlement remain separate gates.",
|
|
128
|
-
"release-locks": "Boolean: request protocol lock release during cancellation; ownership checks still apply.",
|
|
129
|
-
report: "Report artifact path associated with the completed stage.",
|
|
130
|
-
request: "Retained request reference supplied to the selected stage finish contract; not a new setup request ID.",
|
|
131
|
-
requeue: "Boolean: put the failed merge job or bundle back in the queue; a failure is not converted into accepted merge evidence.",
|
|
132
|
-
"require-session-binding": "Require trusted physical Session binding before starting the stage; do not synthesize one from a RUN ID.",
|
|
133
|
-
"result-file": "Validated result JSON artifact for this stage or Work; process exit success is not a substitute for accepted result evidence.",
|
|
134
|
-
"result-stdin": "Read result JSON from standard input instead of --result-file.",
|
|
135
|
-
"retry-check": "Check identity requested for the selected bounded retry path; prior results cannot be reused without matching evidence.",
|
|
136
|
-
retryable: "Mark the recorded blocker as retryable; does not launch a retry or bypass the blocker.",
|
|
137
|
-
role: "Role metadata retained with the registered runtime process.",
|
|
138
|
-
schema: "Registered JSON schema name against which the supplied file is validated.",
|
|
139
|
-
"schema-dir": "Explicit schema directory for validation; not a workflow handler registry or permission to execute code.",
|
|
140
|
-
"scope-id": "Exact retained runtime/EVAL scope identity; operations must not affect neighboring scopes.",
|
|
141
|
-
"semantic-file": "Stage semantic result artifact; applicable schema and finish checks are selected independently.",
|
|
142
|
-
session: "Physical Session selector for source-backed usage aggregation.",
|
|
143
|
-
"session-id": "Exact retained physical Session identity for registration, status, stop or usage synchronization.",
|
|
144
|
-
"settlement-json": "Inline JSON physical settlement evidence sealing a recovery attempt; logical inactivity alone is insufficient.",
|
|
145
|
-
slug: "Safe human-readable slug used for the new typed identifier or RUN.",
|
|
146
|
-
snapshot: "Existing snapshot artifact selected for bootstrap or RUN restoration; restored execution requires independent admission.",
|
|
147
|
-
"source-home": "Source Codex home used to plan or initialize the isolated project home; credentials remain operator-owned.",
|
|
148
|
-
"source-version": "Source Memory Bank version whose migration impact and evidence are being assessed.",
|
|
149
|
-
stage: "Stage identity within the selected flow/RUN; a name alone cannot admit a foreign stage.",
|
|
150
|
-
"stage-entry": "Stage entry selected for snapshot capture.",
|
|
151
|
-
"stage-report": "Stage report artifact path supplied for completion and retained observation.",
|
|
152
|
-
state: "Terminal state reported for the owned runtime process; supported values are shown below.",
|
|
153
|
-
status: "Work filter or declared stage/RUN state, depending on the exact command; lifecycle admission remains authoritative.",
|
|
154
|
-
stderr: "Retained standard-error log path associated with the registered process.",
|
|
155
|
-
stdout: "Retained standard-output log path associated with the registered process.",
|
|
156
|
-
"stop-after": "Stage boundary at which the drive controller should stop advancing; not proof of physical child settlement.",
|
|
157
|
-
subject: "Safe subject text for the bootstrap RUN; raw user intake is supplied separately.",
|
|
158
|
-
"subject-id": "Identity of the protocol or other subject associated with the new RUN.",
|
|
159
|
-
"subject-type": "Type of subject associated with RUN creation; it does not select an executor.",
|
|
160
|
-
summary: "Human summary retained with plan-item or merge completion/note evidence.",
|
|
161
|
-
"summary-file": "File containing the diagnostic summary for a stage blocker.",
|
|
162
|
-
"summary-stdin": "Read the blocker summary from standard input instead of --summary-file.",
|
|
163
|
-
target: "Destination selector for protocol synchronization or hook management; see the exact command topic.",
|
|
164
|
-
"target-home": "Destination isolated Codex home used by the project home plan/init operation.",
|
|
165
|
-
"target-version": "Target Memory Bank version selected for migration impact, planning or application.",
|
|
166
|
-
"task-file": "Bounded worker task artifact used for prompt rendering or repair Work creation.",
|
|
167
|
-
"task-profile-file": "Validated task-profile JSON input used when freezing a new RUN's task policy.",
|
|
168
|
-
"task-stdin": "Read repair task content from standard input instead of --task-file.",
|
|
169
|
-
tasks: "Task directory whose access is checked by Memory Bank permission preflight.",
|
|
170
|
-
timeout: "Maximum lane/merge waiting duration in seconds; not a provider model timeout.",
|
|
171
|
-
to: "Requested protocol lifecycle target; transition requirements are validated before changing state.",
|
|
172
|
-
ttl: "Lane lease lifetime in seconds; expiry does not by itself prove physical process settlement.",
|
|
173
|
-
type: "Typed identifier family whose next identifier is being previewed.",
|
|
174
|
-
"user-required": "Boolean indicating that the blocked plan item requires a user decision.",
|
|
175
|
-
value: "Configuration or RUN variable value to store under --key; configuration-specific validation still applies.",
|
|
176
|
-
verdict: "Operator override verdict projection; cannot turn an override into ordinary semantic acceptance.",
|
|
177
|
-
"verification-file": "Verification evidence artifact required by the selected stage finish or repair provenance contract.",
|
|
178
|
-
version: "Exact engine package version to inspect; omitted selection follows the engine-info command's existing resolver.",
|
|
179
|
-
viewer: "Viewer requested for opening the rendered dashboard.",
|
|
180
|
-
"wait-ms": "Maximum observation wait in milliseconds for the requested RUN control operation; timeout is not terminal settlement.",
|
|
181
|
-
work: "Exact Work identity within the selected RUN/stage or associated with a registered process/merge request.",
|
|
182
|
-
"worker-id": "Worker identity bound to the selected Session, lane lease or merge claim; not a model/profile selector.",
|
|
183
|
-
worktree: "Worktree handling policy requested during protocol cancellation; project ownership and cleanup guards still apply.",
|
|
184
|
-
write: "Boolean: publish the project summary instead of only returning its current projection.",
|
|
185
|
-
yes: "Explicit confirmation for hook installation/removal; does not bypass project access or target validation."
|
|
186
|
-
};
|