codex-workflow-v2 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +71 -0
  2. package/dist/src/artifacts.d.ts +4 -0
  3. package/dist/src/artifacts.js +106 -0
  4. package/dist/src/artifacts.js.map +1 -0
  5. package/dist/src/cli.d.ts +2 -0
  6. package/dist/src/cli.js +356 -0
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/contracts.d.ts +313 -0
  9. package/dist/src/contracts.js +3 -0
  10. package/dist/src/contracts.js.map +1 -0
  11. package/dist/src/diagnostics.d.ts +19 -0
  12. package/dist/src/diagnostics.js +25 -0
  13. package/dist/src/diagnostics.js.map +1 -0
  14. package/dist/src/domain/discovery.d.ts +8 -0
  15. package/dist/src/domain/discovery.js +25 -0
  16. package/dist/src/domain/discovery.js.map +1 -0
  17. package/dist/src/domain/validation.d.ts +3 -0
  18. package/dist/src/domain/validation.js +96 -0
  19. package/dist/src/domain/validation.js.map +1 -0
  20. package/dist/src/errors.d.ts +6 -0
  21. package/dist/src/errors.js +11 -0
  22. package/dist/src/errors.js.map +1 -0
  23. package/dist/src/fs-utils.d.ts +4 -0
  24. package/dist/src/fs-utils.js +52 -0
  25. package/dist/src/fs-utils.js.map +1 -0
  26. package/dist/src/git.d.ts +19 -0
  27. package/dist/src/git.js +115 -0
  28. package/dist/src/git.js.map +1 -0
  29. package/dist/src/graph.d.ts +28 -0
  30. package/dist/src/graph.js +263 -0
  31. package/dist/src/graph.js.map +1 -0
  32. package/dist/src/index.d.ts +12 -0
  33. package/dist/src/index.js +13 -0
  34. package/dist/src/index.js.map +1 -0
  35. package/dist/src/memory.d.ts +9 -0
  36. package/dist/src/memory.js +242 -0
  37. package/dist/src/memory.js.map +1 -0
  38. package/dist/src/migration.d.ts +46 -0
  39. package/dist/src/migration.js +112 -0
  40. package/dist/src/migration.js.map +1 -0
  41. package/dist/src/repository.d.ts +12 -0
  42. package/dist/src/repository.js +69 -0
  43. package/dist/src/repository.js.map +1 -0
  44. package/dist/src/reviewer.d.ts +82 -0
  45. package/dist/src/reviewer.js +184 -0
  46. package/dist/src/reviewer.js.map +1 -0
  47. package/dist/src/state/lock.d.ts +13 -0
  48. package/dist/src/state/lock.js +100 -0
  49. package/dist/src/state/lock.js.map +1 -0
  50. package/dist/src/state/store.d.ts +45 -0
  51. package/dist/src/state/store.js +185 -0
  52. package/dist/src/state/store.js.map +1 -0
  53. package/dist/src/ulid.d.ts +2 -0
  54. package/dist/src/ulid.js +22 -0
  55. package/dist/src/ulid.js.map +1 -0
  56. package/dist/src/version.d.ts +2 -0
  57. package/dist/src/version.js +3 -0
  58. package/dist/src/version.js.map +1 -0
  59. package/dist/src/workflow.d.ts +93 -0
  60. package/dist/src/workflow.js +1276 -0
  61. package/dist/src/workflow.js.map +1 -0
  62. package/docs/decisions.md +38 -0
  63. package/docs/development-flow.md +69 -0
  64. package/docs/project-memory.md +38 -0
  65. package/docs/release.md +26 -0
  66. package/docs/validation-report.md +19 -0
  67. package/package.json +56 -0
  68. package/plugins/codex-workflow-gateway/.codex-plugin/plugin.json +25 -0
  69. package/plugins/codex-workflow-gateway/references/protocol.md +66 -0
  70. package/plugins/codex-workflow-gateway/scripts/install-or-update.sh +26 -0
  71. package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +72 -0
  72. package/references/discovery.md +12 -0
  73. package/references/git-policy.md +7 -0
  74. package/references/state-machine.md +11 -0
  75. package/references/validation-and-review.md +13 -0
  76. package/roles/delivery-coordinator.md +10 -0
  77. package/roles/independent-reviewer.md +10 -0
  78. package/roles/scope-lead.md +11 -0
  79. package/roles/technical-planner.md +10 -0
  80. package/roles/worker.md +10 -0
  81. package/schemas/context-envelope.schema.json +58 -0
  82. package/schemas/discovery.schema.json +19 -0
  83. package/schemas/graph-binding.schema.json +30 -0
  84. package/schemas/milestone.schema.json +58 -0
  85. package/schemas/project-knowledge-map.schema.json +37 -0
  86. package/schemas/review-result.schema.json +30 -0
  87. package/schemas/task.schema.json +39 -0
  88. package/templates/brief.md +21 -0
  89. package/templates/plan.md +17 -0
  90. package/templates/result.md +13 -0
package/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # Codex Workflow V2
2
+
3
+ Self-contained, requirements-first workflow for Codex. This directory can be moved into a
4
+ separate repository: runtime code, tests, templates, schemas, plugin source, and release
5
+ automation do not import anything from the parent V1 project.
6
+
7
+ ## What V2 guarantees
8
+
9
+ - exact npm dependency with no `postinstall` mutation;
10
+ - no downstream `.codex`, `.tasks`, `.increments`, manifest, or overlay;
11
+ - repository files are the only durable project knowledge;
12
+ - derived workflow state lives under `$CODEX_HOME/workflow-state/v2`;
13
+ - Discovery precedes Task or Milestone identifiers and branches;
14
+ - Project Knowledge Map approval binds Plans to current canonical files;
15
+ - optional `codebase-memory-mcp` product and workflow graph bindings with explicit fallback;
16
+ - one writer lease and one atomic Git commit per completed Step;
17
+ - explicit execution authorization, independent review, and final acceptance;
18
+ - Milestones aggregate already merged Tasks on the base branch, without an integration branch;
19
+ - V1 transition is snapshot-only and never performs semantic import.
20
+
21
+ V2 is intentionally designed for one user on one machine. Remote coordination and
22
+ cross-machine synchronization are not part of its contract.
23
+
24
+ ## Install and verify
25
+
26
+ Node.js 22 or newer is required. Consumers pin the exact package version:
27
+
28
+ ```bash
29
+ npm install --save-dev --save-exact codex-workflow-v2@2.0.0-alpha.1
30
+ npx codex-workflow gateway handshake
31
+ npx codex-workflow doctor --repo .
32
+ ```
33
+
34
+ Maintainers run:
35
+
36
+ ```bash
37
+ npm install
38
+ npm run validate
39
+ npm run pack:check
40
+ npm run smoke:downstream
41
+ npm run plugin:check
42
+ npm run release:check
43
+ ```
44
+
45
+ ## Typical Task flow
46
+
47
+ The CLI emits JSON. Every update after creation requires the current state revision.
48
+
49
+ ```bash
50
+ codex-workflow project-memory scan --repo .
51
+ codex-workflow project-memory approve --repo . --expected-revision 1 --file selections.json
52
+ codex-workflow discovery start --repo . --goal "..." --outcome "..." \
53
+ --scope "..." --acceptance "..."
54
+ codex-workflow discovery materialize --repo . --id DISC-... \
55
+ --expected-revision 1 --kind task --title "..."
56
+ codex-workflow task plan-set --repo . --id TASK-... \
57
+ --expected-revision 1 --file plan.json
58
+ codex-workflow task authorize --repo . --id TASK-... \
59
+ --expected-revision 2 --actor user
60
+ codex-workflow task start --repo . --id TASK-... \
61
+ --expected-revision 3 --workspace-owner local
62
+ codex-workflow task run --repo . --id TASK-... --step STEP-001 \
63
+ --expected-revision 4 --owner worker
64
+ ```
65
+
66
+ `task run` returns the writer token and Worker context. `task review-launch` starts the
67
+ strict read-only reviewer after submission. Use `next` after transitions.
68
+
69
+ See [development flow](docs/development-flow.md), [project memory](docs/project-memory.md),
70
+ [accepted decisions](docs/decisions.md), [validation report](docs/validation-report.md), and
71
+ [release policy](docs/release.md).
@@ -0,0 +1,4 @@
1
+ import type { DiscoveryState, TaskPlanInput, TaskState } from './contracts.js';
2
+ export declare function renderBrief(discovery: DiscoveryState, title: string): string;
3
+ export declare function renderPlan(task: TaskState, plan: TaskPlanInput): string;
4
+ export declare function renderResult(task: TaskState, summary: string, limitations: string[]): string;
@@ -0,0 +1,106 @@
1
+ function list(values, fallback = 'None.') {
2
+ return values.length > 0 ? values.map((value) => `- ${value}`).join('\n') : fallback;
3
+ }
4
+ export function renderBrief(discovery, title) {
5
+ return [
6
+ `# ${title} Brief`,
7
+ '',
8
+ '## Goal',
9
+ '',
10
+ discovery.goal,
11
+ '',
12
+ '## Observable Outcome',
13
+ '',
14
+ discovery.outcome ?? '',
15
+ '',
16
+ '## Requirements',
17
+ '',
18
+ ...discovery.acceptance.map((value, index) => `- REQ-${String(index + 1).padStart(3, '0')}: ${value}`),
19
+ '',
20
+ '## Scope',
21
+ '',
22
+ list(discovery.scope),
23
+ '',
24
+ '## Out of Scope',
25
+ '',
26
+ list(discovery.outOfScope),
27
+ '',
28
+ '## Constraints',
29
+ '',
30
+ list(discovery.constraints),
31
+ '',
32
+ '## Acceptance Scenarios',
33
+ '',
34
+ ...discovery.acceptance.map((value, index) => `- AC-${String(index + 1).padStart(3, '0')}: ${value}`),
35
+ '',
36
+ '## Assumptions',
37
+ '',
38
+ list(discovery.assumptions),
39
+ '',
40
+ '## Non-Blocking Unknowns',
41
+ '',
42
+ list(discovery.unknowns.filter((value) => !discovery.blockingUnknowns.includes(value))),
43
+ '',
44
+ ].join('\n');
45
+ }
46
+ export function renderPlan(task, plan) {
47
+ const lines = [
48
+ `# ${task.id} Plan`,
49
+ '',
50
+ '## Objective',
51
+ '',
52
+ plan.objective,
53
+ '',
54
+ '## Requirements',
55
+ '',
56
+ ...plan.requirements.map((value) => `- ${value}`),
57
+ '',
58
+ '## Acceptance',
59
+ '',
60
+ ...plan.acceptance.map((value) => `- ${value}`),
61
+ '',
62
+ '## Risks',
63
+ '',
64
+ list(plan.risks),
65
+ '',
66
+ '## Project Knowledge Impact',
67
+ '',
68
+ `- Impact: ${plan.knowledgeImpact}`,
69
+ `- Reason: ${plan.knowledgeImpactReason}`,
70
+ `- Knowledge map: revision ${plan.knowledgeMapRevision}, hash ${plan.knowledgeMapHash}`,
71
+ `- Graph use: ${plan.graphUse}`,
72
+ ...plan.knowledgeTargets.map((target) => `- ${target.category}: ${target.path} — ${target.reason} (${target.requirementIds.join(', ')})`),
73
+ '',
74
+ '## Steps',
75
+ '',
76
+ ];
77
+ for (const step of plan.steps) {
78
+ lines.push(`### ${step.id}: ${step.title}`, '', step.objective, '', `- Requirements: ${step.requirements.join(', ')}`, `- Dependencies: ${step.dependencies.join(', ') || 'none'}`, `- Expected outputs: ${step.expectedOutputs.join(', ')}`, `- Allowed writes: ${step.allowedWrites.join(', ')}`, `- Forbidden scope: ${step.forbiddenScope.join(', ') || 'none'}`, `- Checks: ${step.checks.join(' ; ') || 'UNVERIFIED'}`, '');
79
+ }
80
+ return lines.join('\n');
81
+ }
82
+ export function renderResult(task, summary, limitations) {
83
+ return [
84
+ `# ${task.id} Result`,
85
+ '',
86
+ '## Summary',
87
+ '',
88
+ summary,
89
+ '',
90
+ '## Completed Steps',
91
+ '',
92
+ ...task.steps.filter((step) => step.status === 'completed').map((step) => `- ${step.id}: ${step.title}`),
93
+ '',
94
+ '## Commits',
95
+ '',
96
+ ...task.steps
97
+ .filter((step) => step.evidence)
98
+ .map((step) => `- ${step.id}: ${step.evidence?.commitSha ?? 'missing'}`),
99
+ '',
100
+ '## Limitations',
101
+ '',
102
+ list(limitations),
103
+ '',
104
+ ].join('\n');
105
+ }
106
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,356 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import process from 'node:process';
5
+ import { integrationDiagnostics } from './diagnostics.js';
6
+ import { WorkflowError } from './errors.js';
7
+ import { prepareGraphView } from './graph.js';
8
+ import { migrateState } from './migration.js';
9
+ import { changedFiles, currentBranch, isClean } from './repository.js';
10
+ import { launchStrictReviewer } from './reviewer.js';
11
+ import { WorkflowService } from './workflow.js';
12
+ import { PACKAGE_NAME, PACKAGE_VERSION } from './version.js';
13
+ import { PROTOCOL_VERSION, STATE_SCHEMA_VERSION } from './contracts.js';
14
+ function parseArguments(argv) {
15
+ const positionals = [];
16
+ const options = new Map();
17
+ for (let index = 0; index < argv.length; index += 1) {
18
+ const argument = argv[index];
19
+ if (!argument)
20
+ continue;
21
+ if (!argument.startsWith('--')) {
22
+ positionals.push(argument);
23
+ continue;
24
+ }
25
+ const equals = argument.indexOf('=');
26
+ const name = argument.slice(2, equals === -1 ? undefined : equals);
27
+ const inlineValue = equals === -1 ? null : argument.slice(equals + 1);
28
+ const next = argv[index + 1];
29
+ const value = inlineValue ?? (next && !next.startsWith('--') ? next : 'true');
30
+ if (inlineValue === null && next && !next.startsWith('--'))
31
+ index += 1;
32
+ options.set(name, [...(options.get(name) ?? []), value]);
33
+ }
34
+ return { positionals, options };
35
+ }
36
+ function option(args, name) {
37
+ return args.options.get(name)?.at(-1);
38
+ }
39
+ function required(args, name) {
40
+ const value = option(args, name)?.trim();
41
+ if (!value)
42
+ throw new WorkflowError('INVALID_ARGUMENT', `Missing required option --${name}.`);
43
+ return value;
44
+ }
45
+ function repeated(args, name) {
46
+ return (args.options.get(name) ?? []).map((value) => value.trim()).filter(Boolean);
47
+ }
48
+ function revision(args) {
49
+ const value = Number(required(args, 'expected-revision'));
50
+ if (!Number.isInteger(value) || value < 1) {
51
+ throw new WorkflowError('INVALID_ARGUMENT', '--expected-revision must be a positive integer.');
52
+ }
53
+ return value;
54
+ }
55
+ function optionalRevision(args) {
56
+ const raw = option(args, 'expected-revision');
57
+ if (raw === undefined)
58
+ return null;
59
+ const value = Number(raw);
60
+ if (!Number.isInteger(value) || value < 1) {
61
+ throw new WorkflowError('INVALID_ARGUMENT', '--expected-revision must be a positive integer.');
62
+ }
63
+ return value;
64
+ }
65
+ function graphKind(args) {
66
+ const value = required(args, 'kind');
67
+ if (value !== 'product' && value !== 'workflow') {
68
+ throw new WorkflowError('INVALID_ARGUMENT', '--kind must be product or workflow.');
69
+ }
70
+ return value;
71
+ }
72
+ function graphMode(args) {
73
+ const value = option(args, 'mode') ?? 'moderate';
74
+ if (value !== 'moderate' && value !== 'full') {
75
+ throw new WorkflowError('INVALID_ARGUMENT', '--mode must be moderate or full.');
76
+ }
77
+ return value;
78
+ }
79
+ function jsonFile(args, optionName = 'file') {
80
+ const file = path.resolve(required(args, optionName));
81
+ try {
82
+ return JSON.parse(readFileSync(file, 'utf8'));
83
+ }
84
+ catch (error) {
85
+ throw new WorkflowError('INVALID_ARGUMENT', `Cannot read JSON from ${file}.`, {
86
+ cause: error instanceof Error ? error.message : String(error),
87
+ });
88
+ }
89
+ }
90
+ function stdinJson() {
91
+ try {
92
+ return JSON.parse(readFileSync(0, 'utf8'));
93
+ }
94
+ catch (error) {
95
+ throw new WorkflowError('INVALID_ARGUMENT', 'Cannot read JSON from stdin.', {
96
+ cause: error instanceof Error ? error.message : String(error),
97
+ });
98
+ }
99
+ }
100
+ function repository(args) {
101
+ return path.resolve(option(args, 'repo') ?? '.');
102
+ }
103
+ async function dispatch(args) {
104
+ const [noun, action] = args.positionals;
105
+ const repo = repository(args);
106
+ if (noun === 'gateway' && action === 'handshake') {
107
+ return {
108
+ packageName: PACKAGE_NAME,
109
+ packageVersion: PACKAGE_VERSION,
110
+ protocolVersion: PROTOCOL_VERSION,
111
+ stateSchemaVersion: STATE_SCHEMA_VERSION,
112
+ capabilities: [
113
+ 'project-memory-v1',
114
+ 'graph-binding-v1',
115
+ 'local-state-v1',
116
+ 'milestone-lifecycle-v1',
117
+ 'strict-reviewer-v1',
118
+ 'legacy-snapshot-v1',
119
+ ],
120
+ };
121
+ }
122
+ const workflow = new WorkflowService();
123
+ if (noun === 'doctor') {
124
+ const context = workflow.context(repo);
125
+ const integration = integrationDiagnostics(context.identity.repositoryRoot);
126
+ const nodeSupported = Number(process.versions.node.split('.')[0]) >= 22;
127
+ return {
128
+ ok: nodeSupported && integration.localDependency.current,
129
+ node: process.versions.node,
130
+ requiredNode: '>=22',
131
+ repositoryRoot: context.identity.repositoryRoot,
132
+ projectId: context.identity.projectId,
133
+ stateRoot: context.store.root,
134
+ branch: currentBranch(context.identity.repositoryRoot),
135
+ clean: isClean(context.identity.repositoryRoot),
136
+ changedFiles: changedFiles(context.identity.repositoryRoot),
137
+ integration,
138
+ limitations: [
139
+ 'CLI diagnostics cannot prove that Codex enforced a role, model, sandbox, or read-only reviewer.',
140
+ 'MCP refresh execution is performed by the personal gateway; the core verifies returned binding evidence.',
141
+ ],
142
+ };
143
+ }
144
+ if (noun === 'status')
145
+ return workflow.status(repo);
146
+ if (noun === 'next')
147
+ return workflow.next(repo);
148
+ if (noun === 'project-memory' && action === 'scan')
149
+ return workflow.scanKnowledgeMap(repo);
150
+ if (noun === 'project-memory' && action === 'show')
151
+ return workflow.showKnowledgeMap(repo);
152
+ if (noun === 'project-memory' && action === 'status')
153
+ return workflow.knowledgeMapStatus(repo);
154
+ if (noun === 'project-memory' && action === 'approve') {
155
+ const input = jsonFile(args);
156
+ if (!Array.isArray(input.selections)) {
157
+ throw new WorkflowError('INVALID_ARGUMENT', 'Knowledge approval file requires a selections array.');
158
+ }
159
+ return workflow.approveKnowledgeMap(repo, revision(args), input.selections, option(args, 'actor') ?? 'user');
160
+ }
161
+ if (noun === 'project-memory' && action === 'reconcile') {
162
+ return workflow.reconcileKnowledgeMap(repo, revision(args));
163
+ }
164
+ if (noun === 'state' && action === 'migrate') {
165
+ const dryRun = option(args, 'dry-run') === 'true';
166
+ const snapshot = option(args, 'snapshot') === 'true';
167
+ if (dryRun === snapshot) {
168
+ throw new WorkflowError('INVALID_ARGUMENT', 'state migrate requires exactly one of --dry-run or --snapshot.');
169
+ }
170
+ return migrateState(repo, workflow.store, dryRun, snapshot);
171
+ }
172
+ if (noun === 'graph' && action === 'prepare') {
173
+ return prepareGraphView(option(args, 'target') ? path.resolve(required(args, 'target')) : undefined);
174
+ }
175
+ if (noun === 'graph' && action === 'status') {
176
+ return workflow.graphStatus(repo, graphKind(args), graphMode(args));
177
+ }
178
+ if (noun === 'graph' && action === 'refresh-request') {
179
+ return workflow.graphRefreshRequest(repo, graphKind(args), graphMode(args));
180
+ }
181
+ if (noun === 'graph' && action === 'bind') {
182
+ const input = stdinJson();
183
+ return workflow.bindGraph(repo, optionalRevision(args), input.request, input.evidence);
184
+ }
185
+ if (noun === 'graph' && action === 'fallback') {
186
+ return workflow.recordGraphFallback(repo, graphKind(args), graphMode(args), optionalRevision(args), required(args, 'reason'));
187
+ }
188
+ if (noun === 'context') {
189
+ const role = required(args, 'role');
190
+ if (role === 'worker' || role === 'scope-lead') {
191
+ throw new WorkflowError('INVALID_ARGUMENT', role === 'worker'
192
+ ? 'Worker context is issued by task run together with a writer lease.'
193
+ : 'Scope Lead works on Discovery before Task materialization.');
194
+ }
195
+ if (!['technical-planner', 'delivery-coordinator', 'independent-reviewer'].includes(role)) {
196
+ throw new WorkflowError('INVALID_ARGUMENT', 'Unknown context role.');
197
+ }
198
+ return workflow.taskContext(repo, required(args, 'task'), role);
199
+ }
200
+ if (noun === 'discovery' && action === 'start') {
201
+ const outcome = option(args, 'outcome')?.trim();
202
+ const input = {
203
+ goal: required(args, 'goal'),
204
+ ...(outcome ? { outcome } : {}),
205
+ facts: repeated(args, 'fact'),
206
+ decisions: repeated(args, 'decision'),
207
+ assumptions: repeated(args, 'assumption'),
208
+ unknowns: repeated(args, 'unknown'),
209
+ blockingUnknowns: repeated(args, 'blocking-unknown'),
210
+ scope: repeated(args, 'scope'),
211
+ outOfScope: repeated(args, 'out-of-scope'),
212
+ constraints: repeated(args, 'constraint'),
213
+ acceptance: repeated(args, 'acceptance'),
214
+ };
215
+ return workflow.startDiscovery(repo, input);
216
+ }
217
+ if (noun === 'discovery' && action === 'update') {
218
+ const goal = option(args, 'goal')?.trim();
219
+ const outcome = option(args, 'outcome')?.trim();
220
+ const patch = {
221
+ ...(goal ? { goal } : {}),
222
+ ...(outcome ? { outcome } : {}),
223
+ facts: repeated(args, 'fact'),
224
+ decisions: repeated(args, 'decision'),
225
+ assumptions: repeated(args, 'assumption'),
226
+ unknowns: repeated(args, 'unknown'),
227
+ blockingUnknowns: repeated(args, 'blocking-unknown'),
228
+ resolveUnknowns: repeated(args, 'resolve-unknown'),
229
+ scope: repeated(args, 'scope'),
230
+ outOfScope: repeated(args, 'out-of-scope'),
231
+ constraints: repeated(args, 'constraint'),
232
+ acceptance: repeated(args, 'acceptance'),
233
+ };
234
+ return workflow.updateDiscovery(repo, required(args, 'id'), revision(args), patch);
235
+ }
236
+ if (noun === 'discovery' && action === 'show') {
237
+ const context = workflow.context(repo);
238
+ return context.store.readDiscovery(context.identity.projectId, required(args, 'id'));
239
+ }
240
+ if (noun === 'discovery' && action === 'materialize') {
241
+ const kind = option(args, 'kind') ?? 'task';
242
+ if (kind === 'task') {
243
+ return workflow.materializeTask(repo, required(args, 'id'), revision(args), required(args, 'title'), option(args, 'base') ?? 'main', option(args, 'milestone') ?? null);
244
+ }
245
+ if (kind === 'milestone') {
246
+ return workflow.materializeMilestone(repo, required(args, 'id'), revision(args), required(args, 'title'), option(args, 'base') ?? 'main');
247
+ }
248
+ throw new WorkflowError('INVALID_ARGUMENT', '--kind must be task or milestone.');
249
+ }
250
+ if (noun === 'task' && action === 'show') {
251
+ const context = workflow.context(repo);
252
+ return context.store.readTask(context.identity.projectId, required(args, 'id'));
253
+ }
254
+ if (noun === 'task' && action === 'plan-set') {
255
+ return workflow.setTaskPlan(repo, required(args, 'id'), revision(args), jsonFile(args));
256
+ }
257
+ if (noun === 'task' && action === 'authorize') {
258
+ return workflow.authorizeTask(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user', option(args, 'reason') ?? '');
259
+ }
260
+ if (noun === 'task' && action === 'start') {
261
+ const owner = required(args, 'workspace-owner');
262
+ if (owner !== 'local' && owner !== 'external') {
263
+ throw new WorkflowError('INVALID_ARGUMENT', '--workspace-owner must be local or external.');
264
+ }
265
+ return workflow.startTask(repo, required(args, 'id'), revision(args), owner);
266
+ }
267
+ if (noun === 'task' && action === 'run') {
268
+ return workflow.runStep(repo, required(args, 'id'), required(args, 'step'), revision(args), option(args, 'owner') ?? 'worker', option(args, 'writer-token') ?? null);
269
+ }
270
+ if (noun === 'task' && action === 'step-complete') {
271
+ return workflow.completeStep(repo, required(args, 'id'), required(args, 'step'), revision(args), required(args, 'writer-token'), repeated(args, 'note'));
272
+ }
273
+ if (noun === 'task' && action === 'submit') {
274
+ return workflow.submitTask(repo, required(args, 'id'), revision(args), required(args, 'writer-token'));
275
+ }
276
+ if (noun === 'task' && action === 'review-record') {
277
+ const review = jsonFile(args);
278
+ return workflow.recordReview(repo, required(args, 'id'), revision(args), review);
279
+ }
280
+ if (noun === 'task' && action === 'review-launch') {
281
+ const context = workflow.context(repo);
282
+ const id = required(args, 'id');
283
+ const expectedRevision = revision(args);
284
+ const task = context.store.readTask(context.identity.projectId, id);
285
+ if (task.revision !== expectedRevision) {
286
+ throw new WorkflowError('STATE_CONFLICT', `State revision conflict for ${id}`, {
287
+ expectedRevision,
288
+ actualRevision: task.revision,
289
+ });
290
+ }
291
+ const envelope = workflow.taskContext(repo, id, 'independent-reviewer');
292
+ const launch = launchStrictReviewer(context.identity.repositoryRoot, task, context.store.taskRoot(task.projectId, task.id), envelope);
293
+ const saved = workflow.recordReview(repo, id, expectedRevision, launch.review);
294
+ return { launch, task: saved };
295
+ }
296
+ if (noun === 'task' && action === 'result-set') {
297
+ return workflow.setTaskResult(repo, required(args, 'id'), revision(args), required(args, 'summary'), repeated(args, 'limitation'));
298
+ }
299
+ if (noun === 'task' && action === 'accept') {
300
+ return workflow.acceptTask(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user');
301
+ }
302
+ if (noun === 'task' && action === 'sync-base') {
303
+ return workflow.syncTaskBase(repo, required(args, 'id'), revision(args));
304
+ }
305
+ if (noun === 'task' && action === 'merge') {
306
+ return workflow.mergeTask(repo, required(args, 'id'), revision(args), required(args, 'writer-token'));
307
+ }
308
+ if (noun === 'task' && action === 'merge-confirm') {
309
+ return workflow.confirmExternalMerge(repo, required(args, 'id'), revision(args), required(args, 'writer-token'));
310
+ }
311
+ if (noun === 'milestone' && action === 'show') {
312
+ const context = workflow.context(repo);
313
+ return context.store.readMilestone(context.identity.projectId, required(args, 'id'));
314
+ }
315
+ if (noun === 'milestone' && action === 'plan-set') {
316
+ return workflow.setMilestonePlan(repo, required(args, 'id'), revision(args), jsonFile(args));
317
+ }
318
+ if (noun === 'milestone' && action === 'authorize') {
319
+ return workflow.authorizeMilestone(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user', option(args, 'reason') ?? '');
320
+ }
321
+ if (noun === 'milestone' && action === 'validate') {
322
+ return workflow.validateMilestone(repo, required(args, 'id'), revision(args));
323
+ }
324
+ if (noun === 'milestone' && action === 'accept') {
325
+ return workflow.acceptMilestone(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user');
326
+ }
327
+ if (noun === 'milestone' && action === 'cancel') {
328
+ return workflow.cancelMilestone(repo, required(args, 'id'), revision(args), required(args, 'reason'));
329
+ }
330
+ if (noun === 'locks' && (action === 'inspect' || action === 'repair')) {
331
+ const context = workflow.context(repo);
332
+ const id = required(args, 'id');
333
+ return action === 'inspect' ? context.locks.inspect(id) : context.locks.repairStale(id);
334
+ }
335
+ throw new WorkflowError('INVALID_ARGUMENT', 'Unknown command.', {
336
+ command: args.positionals.join(' '),
337
+ hint: 'Use doctor, status, next, project-memory <action>, discovery <action>, task <action>, milestone <action>, or locks <action>.',
338
+ });
339
+ }
340
+ async function main() {
341
+ try {
342
+ const value = await dispatch(parseArguments(process.argv.slice(2)));
343
+ process.stdout.write(`${JSON.stringify({ ok: true, value }, null, 2)}\n`);
344
+ }
345
+ catch (error) {
346
+ if (error instanceof WorkflowError) {
347
+ process.stderr.write(`${JSON.stringify({ ok: false, error: { code: error.code, message: error.message, details: error.details } }, null, 2)}\n`);
348
+ process.exitCode = 2;
349
+ return;
350
+ }
351
+ process.stderr.write(`${JSON.stringify({ ok: false, error: { code: 'UNEXPECTED', message: error instanceof Error ? error.message : String(error) } }, null, 2)}\n`);
352
+ process.exitCode = 1;
353
+ }
354
+ }
355
+ await main();
356
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}