@ccdd/project 2.0.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 (163) hide show
  1. package/README.md +25 -0
  2. package/dist/monitor-ui/assets/GraphView-CYMJ1Nb7.css +1 -0
  3. package/dist/monitor-ui/assets/GraphView-UjtW4QRC.js +27 -0
  4. package/dist/monitor-ui/assets/ValidationView-CC1FvqUl.js +1 -0
  5. package/dist/monitor-ui/assets/ValidationView-DWl4b8Ug.css +1 -0
  6. package/dist/monitor-ui/assets/_plugin-vue_export-helper-BDNMzG2s.js +1 -0
  7. package/dist/monitor-ui/assets/elk-api-yRi2AOS6.js +1 -0
  8. package/dist/monitor-ui/assets/elk.bundled-CtLobQTy.js +24 -0
  9. package/dist/monitor-ui/assets/graph-layout-worker-CgfWoa9t.js +22 -0
  10. package/dist/monitor-ui/assets/index-CUzg-dht.css +1 -0
  11. package/dist/monitor-ui/assets/index-Cpm0fC0p.js +8 -0
  12. package/dist/monitor-ui/index.html +15 -0
  13. package/dist/scripts/prepare-demo.d.ts +26 -0
  14. package/dist/scripts/prepare-demo.js +121 -0
  15. package/dist/scripts/prepare-demo.js.map +1 -0
  16. package/dist/src/artifacts/groups.d.ts +9 -0
  17. package/dist/src/artifacts/groups.js +77 -0
  18. package/dist/src/artifacts/groups.js.map +1 -0
  19. package/dist/src/artifacts/human.d.ts +38 -0
  20. package/dist/src/artifacts/human.js +156 -0
  21. package/dist/src/artifacts/human.js.map +1 -0
  22. package/dist/src/artifacts/index.d.ts +149 -0
  23. package/dist/src/artifacts/index.js +354 -0
  24. package/dist/src/artifacts/index.js.map +1 -0
  25. package/dist/src/artifacts/instruction.d.ts +23 -0
  26. package/dist/src/artifacts/instruction.js +94 -0
  27. package/dist/src/artifacts/instruction.js.map +1 -0
  28. package/dist/src/artifacts/mcp-server.d.ts +6 -0
  29. package/dist/src/artifacts/mcp-server.js +96 -0
  30. package/dist/src/artifacts/mcp-server.js.map +1 -0
  31. package/dist/src/artifacts/tool-check.d.ts +40 -0
  32. package/dist/src/artifacts/tool-check.js +113 -0
  33. package/dist/src/artifacts/tool-check.js.map +1 -0
  34. package/dist/src/artifacts/types.d.ts +43 -0
  35. package/dist/src/artifacts/types.js +97 -0
  36. package/dist/src/artifacts/types.js.map +1 -0
  37. package/dist/src/broker/config.d.ts +11 -0
  38. package/dist/src/broker/config.js +141 -0
  39. package/dist/src/broker/config.js.map +1 -0
  40. package/dist/src/broker/graph.d.ts +69 -0
  41. package/dist/src/broker/graph.js +94 -0
  42. package/dist/src/broker/graph.js.map +1 -0
  43. package/dist/src/broker/index.d.ts +170 -0
  44. package/dist/src/broker/index.js +931 -0
  45. package/dist/src/broker/index.js.map +1 -0
  46. package/dist/src/cli.d.ts +24 -0
  47. package/dist/src/cli.js +340 -0
  48. package/dist/src/cli.js.map +1 -0
  49. package/dist/src/contracts.d.ts +116 -0
  50. package/dist/src/contracts.js +2 -0
  51. package/dist/src/contracts.js.map +1 -0
  52. package/dist/src/definitions.d.ts +53 -0
  53. package/dist/src/definitions.js +2 -0
  54. package/dist/src/definitions.js.map +1 -0
  55. package/dist/src/doctor/index.d.ts +41 -0
  56. package/dist/src/doctor/index.js +189 -0
  57. package/dist/src/doctor/index.js.map +1 -0
  58. package/dist/src/executors/auth.d.ts +16 -0
  59. package/dist/src/executors/auth.js +150 -0
  60. package/dist/src/executors/auth.js.map +1 -0
  61. package/dist/src/executors/errors.d.ts +6 -0
  62. package/dist/src/executors/errors.js +10 -0
  63. package/dist/src/executors/errors.js.map +1 -0
  64. package/dist/src/executors/index.d.ts +20 -0
  65. package/dist/src/executors/index.js +262 -0
  66. package/dist/src/executors/index.js.map +1 -0
  67. package/dist/src/executors/pi.d.ts +32 -0
  68. package/dist/src/executors/pi.js +190 -0
  69. package/dist/src/executors/pi.js.map +1 -0
  70. package/dist/src/executors/process.d.ts +22 -0
  71. package/dist/src/executors/process.js +70 -0
  72. package/dist/src/executors/process.js.map +1 -0
  73. package/dist/src/local.d.ts +13 -0
  74. package/dist/src/local.js +20 -0
  75. package/dist/src/local.js.map +1 -0
  76. package/dist/src/monitor/actions.d.ts +12 -0
  77. package/dist/src/monitor/actions.js +74 -0
  78. package/dist/src/monitor/actions.js.map +1 -0
  79. package/dist/src/monitor/server.d.ts +8 -0
  80. package/dist/src/monitor/server.js +493 -0
  81. package/dist/src/monitor/server.js.map +1 -0
  82. package/dist/src/monitor/store.d.ts +22 -0
  83. package/dist/src/monitor/store.js +517 -0
  84. package/dist/src/monitor/store.js.map +1 -0
  85. package/dist/src/monitor/types.d.ts +143 -0
  86. package/dist/src/monitor/types.js +2 -0
  87. package/dist/src/monitor/types.js.map +1 -0
  88. package/dist/src/monitor/ui/api.d.ts +11 -0
  89. package/dist/src/monitor/ui/api.js +29 -0
  90. package/dist/src/monitor/ui/api.js.map +1 -0
  91. package/dist/src/monitor/ui/critic-presentation.d.ts +11 -0
  92. package/dist/src/monitor/ui/critic-presentation.js +60 -0
  93. package/dist/src/monitor/ui/critic-presentation.js.map +1 -0
  94. package/dist/src/monitor/ui/format.d.ts +9 -0
  95. package/dist/src/monitor/ui/format.js +22 -0
  96. package/dist/src/monitor/ui/format.js.map +1 -0
  97. package/dist/src/monitor/ui/graph-layout.d.ts +43 -0
  98. package/dist/src/monitor/ui/graph-layout.js +191 -0
  99. package/dist/src/monitor/ui/graph-layout.js.map +1 -0
  100. package/dist/src/monitor/ui/tool-content.d.ts +13 -0
  101. package/dist/src/monitor/ui/tool-content.js +22 -0
  102. package/dist/src/monitor/ui/tool-content.js.map +1 -0
  103. package/dist/src/monitor/ui/tool-input.d.ts +23 -0
  104. package/dist/src/monitor/ui/tool-input.js +112 -0
  105. package/dist/src/monitor/ui/tool-input.js.map +1 -0
  106. package/dist/src/project/cli.d.ts +9 -0
  107. package/dist/src/project/cli.js +306 -0
  108. package/dist/src/project/cli.js.map +1 -0
  109. package/dist/src/project/graph.d.ts +4 -0
  110. package/dist/src/project/graph.js +26 -0
  111. package/dist/src/project/graph.js.map +1 -0
  112. package/dist/src/project/identity.d.ts +5 -0
  113. package/dist/src/project/identity.js +87 -0
  114. package/dist/src/project/identity.js.map +1 -0
  115. package/dist/src/project/index.d.ts +19 -0
  116. package/dist/src/project/index.js +26 -0
  117. package/dist/src/project/index.js.map +1 -0
  118. package/dist/src/project/query.d.ts +9 -0
  119. package/dist/src/project/query.js +136 -0
  120. package/dist/src/project/query.js.map +1 -0
  121. package/dist/src/project/store.d.ts +15 -0
  122. package/dist/src/project/store.js +47 -0
  123. package/dist/src/project/store.js.map +1 -0
  124. package/dist/src/project/types.d.ts +106 -0
  125. package/dist/src/project/types.js +2 -0
  126. package/dist/src/project/types.js.map +1 -0
  127. package/dist/src/requester/index.d.ts +16 -0
  128. package/dist/src/requester/index.js +96 -0
  129. package/dist/src/requester/index.js.map +1 -0
  130. package/dist/src/runtime-paths.d.ts +1 -0
  131. package/dist/src/runtime-paths.js +4 -0
  132. package/dist/src/runtime-paths.js.map +1 -0
  133. package/dist/src/sdk.d.ts +9 -0
  134. package/dist/src/sdk.js +3 -0
  135. package/dist/src/sdk.js.map +1 -0
  136. package/dist/src/tools/contracts.d.ts +108 -0
  137. package/dist/src/tools/contracts.js +2 -0
  138. package/dist/src/tools/contracts.js.map +1 -0
  139. package/dist/src/tools/host.d.ts +7 -0
  140. package/dist/src/tools/host.js +98 -0
  141. package/dist/src/tools/host.js.map +1 -0
  142. package/dist/src/tools/paths.d.ts +2 -0
  143. package/dist/src/tools/paths.js +18 -0
  144. package/dist/src/tools/paths.js.map +1 -0
  145. package/dist/src/tools/runner.d.ts +54 -0
  146. package/dist/src/tools/runner.js +194 -0
  147. package/dist/src/tools/runner.js.map +1 -0
  148. package/dist/src/tools/runtime-host.d.ts +1 -0
  149. package/dist/src/tools/runtime-host.js +116 -0
  150. package/dist/src/tools/runtime-host.js.map +1 -0
  151. package/dist/src/tools/schema.d.ts +6 -0
  152. package/dist/src/tools/schema.js +106 -0
  153. package/dist/src/tools/schema.js.map +1 -0
  154. package/dist/src/worker-client.d.ts +27 -0
  155. package/dist/src/worker-client.js +96 -0
  156. package/dist/src/worker-client.js.map +1 -0
  157. package/dist/src/worker.d.ts +1 -0
  158. package/dist/src/worker.js +50 -0
  159. package/dist/src/worker.js.map +1 -0
  160. package/dist/src/workspaces/index.d.ts +33 -0
  161. package/dist/src/workspaces/index.js +394 -0
  162. package/dist/src/workspaces/index.js.map +1 -0
  163. package/package.json +26 -0
@@ -0,0 +1,23 @@
1
+ export interface ToolField {
2
+ name: string;
3
+ label: string;
4
+ description?: string;
5
+ kind: 'string' | 'integer' | 'number' | 'boolean' | 'enum';
6
+ required: boolean;
7
+ options?: unknown[];
8
+ minimum?: number;
9
+ maximum?: number;
10
+ minLength?: number;
11
+ maxLength?: number;
12
+ default?: unknown;
13
+ }
14
+ /** Only simple object schemas become fields. Everything else keeps its full JSON shape. */
15
+ export declare function toolInputForm(schema: Record<string, unknown>): {
16
+ fields: ToolField[];
17
+ json: boolean;
18
+ };
19
+ export declare function initialToolFields(fields: ToolField[], legacy?: boolean): Record<string, string>;
20
+ export declare function initialToolJson(schema: Record<string, unknown>): string;
21
+ export declare function validateToolInput(schema: Record<string, unknown>, value: unknown): Record<string, unknown>;
22
+ export declare function parseToolFields(schema: Record<string, unknown>, definitions: ToolField[], fields: Record<string, string>): Record<string, unknown>;
23
+ export declare function parseToolJson(schema: Record<string, unknown>, source: string): Record<string, unknown>;
@@ -0,0 +1,112 @@
1
+ import { Check, Errors } from 'typebox/value';
2
+ const record = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
3
+ const labels = { path: '내부 경로', startLine: '시작 줄', lineCount: '읽을 줄 수', offset: '시작 항목', limit: '항목 수' };
4
+ const complexKeywords = ['$ref', 'allOf', 'anyOf', 'oneOf', 'not', 'if', 'then', 'else', 'dependentRequired', 'dependentSchemas', 'patternProperties', 'unevaluatedProperties'];
5
+ const simple = (schema) => !complexKeywords.some(key => key in schema);
6
+ const primitive = (value) => value === null || ['string', 'number', 'boolean'].includes(typeof value);
7
+ /** Only simple object schemas become fields. Everything else keeps its full JSON shape. */
8
+ export function toolInputForm(schema) {
9
+ if (schema.type !== 'object' || !simple(schema))
10
+ return { fields: [], json: true };
11
+ const properties = schema.properties ?? {};
12
+ if (!record(properties))
13
+ return { fields: [], json: true };
14
+ if (!Object.keys(properties).length && schema.additionalProperties !== false)
15
+ return { fields: [], json: true };
16
+ const required = Array.isArray(schema.required) ? schema.required : [];
17
+ const fields = [];
18
+ for (const [name, property] of Object.entries(properties)) {
19
+ if (!record(property) || !simple(property))
20
+ return { fields: [], json: true };
21
+ const enumeration = Array.isArray(property.enum) && property.enum.length > 0 && property.enum.every(primitive) ? property.enum : undefined;
22
+ const kind = enumeration ? 'enum' : property.type;
23
+ if (kind !== 'string' && kind !== 'integer' && kind !== 'number' && kind !== 'boolean' && kind !== 'enum')
24
+ return { fields: [], json: true };
25
+ fields.push({ name, label: typeof property.title === 'string' ? property.title : labels[name] ?? name,
26
+ description: typeof property.description === 'string' ? property.description : undefined,
27
+ kind, required: required.includes(name), options: enumeration, default: property.default,
28
+ minimum: typeof property.minimum === 'number' ? property.minimum : undefined,
29
+ maximum: typeof property.maximum === 'number' ? property.maximum : undefined,
30
+ minLength: typeof property.minLength === 'number' ? property.minLength : undefined,
31
+ maxLength: typeof property.maxLength === 'number' ? property.maxLength : undefined,
32
+ });
33
+ }
34
+ // A required key not described in properties cannot be represented by these fields.
35
+ if (required.some(name => typeof name !== 'string' || !Object.hasOwn(properties, name)))
36
+ return { fields: [], json: true };
37
+ return { fields, json: false };
38
+ }
39
+ export function initialToolFields(fields, legacy = false) {
40
+ const legacyDefaults = { startLine: 1, lineCount: 80, offset: 0, limit: 100 };
41
+ return Object.fromEntries(fields.map(field => {
42
+ const value = field.default !== undefined ? field.default : legacy ? legacyDefaults[field.name] : undefined;
43
+ return [field.name, value === undefined ? '' : field.kind === 'enum'
44
+ ? String(field.options?.findIndex(option => JSON.stringify(option) === JSON.stringify(value)) ?? -1)
45
+ : String(value)];
46
+ }));
47
+ }
48
+ export function initialToolJson(schema) {
49
+ if (record(schema.default))
50
+ return JSON.stringify(schema.default, null, 2);
51
+ const value = {};
52
+ if (record(schema.properties))
53
+ for (const [name, property] of Object.entries(schema.properties)) {
54
+ if (record(property) && property.default !== undefined)
55
+ Object.defineProperty(value, name, { value: property.default, enumerable: true });
56
+ }
57
+ return JSON.stringify(value, null, 2);
58
+ }
59
+ export function validateToolInput(schema, value) {
60
+ if (!record(value))
61
+ throw new Error('도구 입력은 JSON 객체여야 합니다.');
62
+ if (new TextEncoder().encode(JSON.stringify({ arguments: value })).byteLength > 32_768)
63
+ throw new Error('도구 입력은 32KiB 이하여야 합니다.');
64
+ // The interpreter works with the monitor CSP (no generated code/eval).
65
+ if (!Check(schema, value)) {
66
+ const first = Errors(schema, value)[0];
67
+ throw new Error(`도구 입력 형식을 확인하세요.${first ? ` ${first.message}` : ''}`);
68
+ }
69
+ return value;
70
+ }
71
+ export function parseToolFields(schema, definitions, fields) {
72
+ const args = {};
73
+ for (const field of definitions) {
74
+ const value = fields[field.name] ?? '';
75
+ if (!value && !field.required)
76
+ continue;
77
+ let parsed;
78
+ if (field.kind === 'enum') {
79
+ if (!/^\d+$/.test(value) || !field.options || Number(value) >= field.options.length)
80
+ throw new Error(`${field.label}을 선택해 주세요.`);
81
+ parsed = field.options[Number(value)];
82
+ }
83
+ else if (field.kind === 'boolean') {
84
+ if (value !== 'true' && value !== 'false')
85
+ throw new Error(`${field.label}을 선택해 주세요.`);
86
+ parsed = value === 'true';
87
+ }
88
+ else if (field.kind === 'number' || field.kind === 'integer') {
89
+ const input = value.trim();
90
+ if (!/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:e[+-]?\d+)?$/i.test(input))
91
+ throw new Error(`${field.label}에 숫자를 입력해 주세요.`);
92
+ parsed = Number(input);
93
+ if (!Number.isFinite(parsed) || (field.kind === 'integer' && !Number.isSafeInteger(parsed)))
94
+ throw new Error(`${field.label}의 숫자 형식을 확인해 주세요.`);
95
+ }
96
+ else
97
+ parsed = value;
98
+ Object.defineProperty(args, field.name, { value: parsed, enumerable: true });
99
+ }
100
+ return validateToolInput(schema, args);
101
+ }
102
+ export function parseToolJson(schema, source) {
103
+ let input;
104
+ try {
105
+ input = JSON.parse(source);
106
+ }
107
+ catch {
108
+ throw new Error('올바른 JSON을 입력해 주세요.');
109
+ }
110
+ return validateToolInput(schema, input);
111
+ }
112
+ //# sourceMappingURL=tool-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-input.js","sourceRoot":"","sources":["../../../../src/monitor/ui/tool-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ type Output = {
3
+ write(value: string): unknown;
4
+ };
5
+ export declare function main(argv?: string[], { stdout, stderr }?: {
6
+ stdout?: Output;
7
+ stderr?: Output;
8
+ }): Promise<number>;
9
+ export {};
@@ -0,0 +1,306 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, realpathSync } from 'node:fs';
3
+ import { readFile } from 'node:fs/promises';
4
+ import { resolve, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { setTimeout as delay } from 'node:timers/promises';
7
+ import { main as legacyMain } from '../cli.js';
8
+ import { createBroker, readStateContext } from '../broker/index.js';
9
+ import { createGraphDefinition } from '../broker/graph.js';
10
+ import { includedCritics } from './query.js';
11
+ import { isArtifactGroup } from '../artifacts/groups.js';
12
+ import { localContext, createLocalAlarmMethods } from '../local.js';
13
+ import { createExecutorRegistry } from '../executors/index.js';
14
+ import { ensureRunWorker } from '../worker-client.js';
15
+ import { inspectProject } from './index.js';
16
+ import { projectHistory, projectRun, projectRuns, projectRequests } from './store.js';
17
+ const terminal = new Set(['GREEN', 'RED', 'ERROR', 'INCOMPLETE']);
18
+ const flags = new Set(['--all', '--recursive', '--force', '--wait', '--json', '--help', '--copy', '--lock', '--human-inbox']);
19
+ const values = new Set(['--repo', '--state-dir', '--critic', '--timeout-ms', '--requester', '--reviewer', '--result-file', '--tool', '--args', '--run', '--pi-auth-file', '--codex-auth-file']);
20
+ const help = `CCDD Project — pull validation and explicit review execution
21
+
22
+ ccdd-project status [ARTIFACT | --critic ID] [--json]
23
+ ccdd-project plan (ARTIFACT | --critic ID | --all) [--recursive] [--force]
24
+ ccdd-project verify (ARTIFACT | --critic ID | --all) [--recursive] [--force] [--wait]
25
+ ccdd-project history [ARTIFACT | --critic ID]
26
+ ccdd-project graph [ARTIFACT]
27
+ ccdd-project config check
28
+ ccdd-project run list
29
+ ccdd-project run show RUN_ID [--wait]
30
+ ccdd-project run resume RUN_ID [--wait]
31
+ ccdd-project run cancel RUN_ID
32
+ ccdd-project request list [--run RUN_ID]
33
+ ccdd-project request show REQUEST_ID
34
+ ccdd-project request claim REQUEST_ID --reviewer ID
35
+ ccdd-project request tool REQUEST_ID --reviewer ID --tool NAME --args JSON
36
+ ccdd-project request submit REQUEST_ID --reviewer ID --result-file PATH
37
+ ccdd-project doctor | tools check | monitor (existing diagnostics and UI)
38
+
39
+ Individual verification runs ready selected Critics and reports blocked Critics as incomplete.
40
+ --recursive includes required ancestors; direct Critic selection never bypasses dependencies.
41
+ --force reviews selected Critics again, keeping dependency gates and ancestor reuse.
42
+ Queries never create review tickets, send alarms or execute review tools or Providers.
43
+ verify defaults to --copy; --lock is explicit. State must be outside the repository.
44
+ Common options: --repo PATH, --state-dir PATH, --json.
45
+ Execution: --human-inbox, --pi-auth-file PATH, --codex-auth-file PATH.
46
+ --wait: 0=fulfilled, 1=RED, 2=ERROR, 3=timeout, 4=incomplete. Timeout does not cancel.
47
+ Without --wait, 0 means accepted or already fulfilled; inspect the reported outcome.
48
+ `;
49
+ function parse(argv) {
50
+ const options = {}, positional = [];
51
+ for (let i = 0; i < argv.length; i++) {
52
+ const arg = argv[i];
53
+ if (flags.has(arg) || values.has(arg)) {
54
+ if (options[arg] !== undefined)
55
+ throw new Error(`Duplicate option: ${arg}`);
56
+ if (flags.has(arg))
57
+ options[arg] = true;
58
+ else {
59
+ const value = argv[++i];
60
+ if (!value || value.startsWith('--'))
61
+ throw new Error(`${arg} requires a value.`);
62
+ options[arg] = value;
63
+ }
64
+ }
65
+ else if (arg.startsWith('-'))
66
+ throw new Error(`Unknown option: ${arg}`);
67
+ else
68
+ positional.push(arg);
69
+ }
70
+ return { options, positional };
71
+ }
72
+ const exitFor = (run) => run.status === 'GREEN' ? 0 : run.status === 'RED' ? 1 : run.status === 'INCOMPLETE' ? 4 : 2;
73
+ const publicRun = ({ project, ...run }) => run;
74
+ function planText(plan) {
75
+ const target = plan.selection.kind === 'artifact' ? plan.selection.artifactId : plan.selection.kind === 'critic' ? plan.selection.criticId : 'Project';
76
+ const artifacts = plan.artifacts.filter(a => plan.selection.kind === 'all' || plan.selection.kind === 'artifact' && a.id === plan.selection.artifactId);
77
+ return `${target}: ${plan.satisfied ? 'SATISFIED' : 'NOT SATISFIED'}\nSnapshot: ${plan.snapshotHash}\n` + artifacts.map(a => ` Artifact ${a.id}: ${a.status} (${a.passed}/${a.total} Critics)\n`).join('') + plan.items.map(c => ` ${c.id}: ${c.action} · ${c.status}\n ${c.reason}`).join('\n') +
78
+ `\nReuse ${plan.counts.reuse} · Ready ${plan.counts.execute} · Waiting ${plan.counts.wait} · Active ${plan.counts.active} · Failed ${plan.counts.failed}`;
79
+ }
80
+ export async function main(argv = process.argv.slice(2), { stdout = process.stdout, stderr = process.stderr } = {}) {
81
+ let json = argv.includes('--json');
82
+ let broker;
83
+ const print = (value, plain) => stdout.write((!json && plain !== undefined ? plain : JSON.stringify(value, null, 2)) + '\n');
84
+ try {
85
+ const command = argv[0] ?? 'help';
86
+ if (['doctor', 'tools', 'monitor'].includes(command))
87
+ return await legacyMain(argv, { stdout, stderr });
88
+ const { options, positional } = parse(argv.slice(1));
89
+ json = Boolean(options['--json']);
90
+ const get = (key) => typeof options[key] === 'string' ? options[key] : undefined;
91
+ if (['help', '--help'].includes(command) || options['--help']) {
92
+ stdout.write(help);
93
+ return 0;
94
+ }
95
+ if (!['status', 'plan', 'verify', 'history', 'graph', 'config', 'run', 'request'].includes(command))
96
+ throw new Error(`Unknown command: ${command}`);
97
+ const common = ['--repo', '--state-dir', '--json'];
98
+ const permitted = new Set([...common, ...(['status', 'plan', 'verify', 'history'].includes(command) ? ['--critic', '--all'] : []),
99
+ ...(['plan', 'verify'].includes(command) ? ['--recursive', '--force'] : []),
100
+ ...(command === 'verify' ? ['--wait', '--timeout-ms', '--requester', '--human-inbox', '--pi-auth-file', '--codex-auth-file', '--copy', '--lock'] : []),
101
+ ...(command === 'run' ? ['--wait', '--timeout-ms'] : []),
102
+ ...(command === 'request' ? ['--run', '--reviewer', '--result-file', '--tool', '--args'] : [])]);
103
+ for (const key of Object.keys(options))
104
+ if (!permitted.has(key))
105
+ throw new Error(`${key} is not supported by ${command}.`);
106
+ if (options['--copy'] && options['--lock'])
107
+ throw new Error('--copy and --lock are mutually exclusive.');
108
+ const timeoutMs = Number(get('--timeout-ms') ?? 600000);
109
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 86400000)
110
+ throw new Error('--timeout-ms must be between 1 and 86400000.');
111
+ let context;
112
+ const requestedState = get('--state-dir');
113
+ if (requestedState && existsSync(join(resolve(requestedState), 'broker.sqlite'))) {
114
+ context = readStateContext(resolve(requestedState));
115
+ if (get('--repo') && realpathSync(resolve(get('--repo'))) !== context.repoPath)
116
+ throw new Error('State directory belongs to a different repository.');
117
+ }
118
+ else {
119
+ context = await localContext({ repoPath: resolve(get('--repo') ?? process.cwd()), stateDir: requestedState });
120
+ if (existsSync(join(context.stateDir, 'broker.sqlite'))) {
121
+ const stored = readStateContext(context.stateDir);
122
+ if (stored.repoPath !== context.repoPath)
123
+ throw new Error('State directory belongs to a different repository.');
124
+ context = stored;
125
+ }
126
+ }
127
+ const select = (required = false) => {
128
+ if (positional.length > 1 || Number(Boolean(positional[0])) + Number(Boolean(get('--critic'))) + Number(Boolean(options['--all'])) > 1)
129
+ throw new Error('Choose one Artifact, --critic ID, or --all.');
130
+ if (positional[0])
131
+ return { kind: 'artifact', artifactId: positional[0] };
132
+ if (get('--critic'))
133
+ return { kind: 'critic', criticId: get('--critic') };
134
+ if (required && !options['--all'])
135
+ throw new Error('An Artifact, --critic ID, or --all is required.');
136
+ return { kind: 'all' };
137
+ };
138
+ const verifySelection = command === 'verify' ? select(true) : undefined;
139
+ const printRun = (run) => print(publicRun(run), `Run: ${run.id}\nExecution: ${run.status}${run.validation ? `\n${planText(run.validation)}` : ''}`);
140
+ const wait = async (id) => {
141
+ const deadline = Date.now() + timeoutMs;
142
+ for (;;) {
143
+ const run = projectRun(context.stateDir, id);
144
+ if (!run)
145
+ throw new Error('Review handle not found.');
146
+ if (terminal.has(run.status)) {
147
+ printRun(run);
148
+ return exitFor(run);
149
+ }
150
+ if (Date.now() >= deadline) {
151
+ print({ ...publicRun(run), wait: { completed: false, reason: 'timeout' } }, `Run ${id}: waiting timed out; execution continues.`);
152
+ return 3;
153
+ }
154
+ await delay(Math.min(100, Math.max(1, deadline - Date.now())));
155
+ }
156
+ };
157
+ if (['status', 'plan', 'graph', 'config'].includes(command)) {
158
+ if (command === 'config' && (positional.length !== 1 || positional[0] !== 'check'))
159
+ throw new Error('Use config check.');
160
+ const selection = command === 'config' ? { kind: 'all' } : select(command === 'plan');
161
+ const { snapshot, plan } = await inspectProject({ ...context, selection, recursive: Boolean(options['--recursive']), force: Boolean(options['--force']) });
162
+ if (command === 'config') {
163
+ print({ ok: true, artifacts: Object.keys(snapshot.config.artifacts).length, critics: snapshot.config.critics.length, snapshotHash: snapshot.snapshotHash }, 'Configuration and Artifact DAG are valid.');
164
+ return 0;
165
+ }
166
+ if (command === 'graph') {
167
+ const graph = createGraphDefinition(snapshot.config);
168
+ if (selection.kind !== 'all') {
169
+ const ids = new Set(includedCritics(snapshot, selection, true));
170
+ graph.critics = graph.critics.filter(c => ids.has(c.id));
171
+ const artifacts = new Set(selection.kind === 'artifact' ? [selection.artifactId] : []);
172
+ const include = (id) => { artifacts.add(id); const entry = graph.artifacts[id]; if (isArtifactGroup(entry))
173
+ for (const member of entry.members)
174
+ if (!artifacts.has(member))
175
+ include(member); };
176
+ for (const c of graph.critics)
177
+ for (const id of [c.target, ...c.deps])
178
+ include(id);
179
+ for (const id of [...artifacts])
180
+ include(id);
181
+ graph.artifacts = Object.fromEntries(Object.entries(graph.artifacts).filter(([id]) => artifacts.has(id)));
182
+ }
183
+ print(graph, graph.critics.map(c => `${c.id}: ${c.deps.join(', ') || '(no deps)'} -> ${c.target}`).join('\n') || Object.keys(graph.artifacts).join('\n'));
184
+ return 0;
185
+ }
186
+ print(plan, planText(plan));
187
+ return command === 'plan' || plan.satisfied ? 0 : 1;
188
+ }
189
+ if (command === 'history') {
190
+ const selection = select();
191
+ const entries = projectHistory(context.stateDir).filter(e => selection.kind === 'all' || selection.kind === 'critic' && e.criticId === selection.criticId || selection.kind === 'artifact' && e.input.target.id === selection.artifactId);
192
+ print(entries, entries.map(e => `${e.completedAt} ${e.criticId} ${e.verdict} · ${e.requestId}\n ${e.summary}`).join('\n') || 'No recorded validation evidence.');
193
+ return 0;
194
+ }
195
+ if (command === 'run' || command === 'request') {
196
+ const [action, id] = positional;
197
+ const actions = command === 'run' ? ['list', 'show', 'resume', 'cancel'] : ['list', 'show', 'claim', 'tool', 'submit'];
198
+ if (!actions.includes(action) || positional.length !== (action === 'list' ? 1 : 2))
199
+ throw new Error(`Use ${command} ${actions.join('|')} with the appropriate ID.`);
200
+ if (command === 'run' && options['--wait'] && !['show', 'resume'].includes(action))
201
+ throw new Error('--wait requires run show or run resume.');
202
+ if (action === 'list') {
203
+ print(command === 'run' ? projectRuns(context.stateDir).map(publicRun) : projectRequests(context.stateDir, get('--run')));
204
+ return 0;
205
+ }
206
+ if (action === 'show') {
207
+ if (command === 'run') {
208
+ if (options['--wait'])
209
+ return await wait(id);
210
+ const run = projectRun(context.stateDir, id);
211
+ if (!run)
212
+ throw new Error('Review handle not found.');
213
+ printRun(run);
214
+ }
215
+ else {
216
+ const request = projectRequests(context.stateDir).find(r => r.id === id);
217
+ if (!request)
218
+ throw new Error('Review request not found.');
219
+ print(request);
220
+ }
221
+ return 0;
222
+ }
223
+ }
224
+ const piOptions = {};
225
+ const piFile = get('--pi-auth-file') ?? process.env.CCDD_PI_AUTH_FILE;
226
+ const codexFile = get('--codex-auth-file') ?? process.env.CCDD_CODEX_AUTH_FILE;
227
+ if (piFile)
228
+ piOptions.authFile = resolve(piFile);
229
+ if (codexFile)
230
+ piOptions.codexAuthFile = resolve(codexFile);
231
+ const humanInbox = Boolean(options['--human-inbox']);
232
+ const executors = createExecutorRegistry({ piOptions, alarmMethods: createLocalAlarmMethods({ ...context, humanInbox }) });
233
+ broker = createBroker({ ...context, executors });
234
+ if (command === 'verify') {
235
+ const run = await broker.submitProject({ selection: verifySelection, recursive: Boolean(options['--recursive']), force: Boolean(options['--force']), requesterId: get('--requester') ?? 'cli', mode: options['--lock'] ? 'lock' : 'copy' });
236
+ if (!terminal.has(run.status))
237
+ await ensureRunWorker({ broker, context, run, initialConfig: { piOptions, humanInbox } });
238
+ if (options['--wait'])
239
+ return await wait(run.id);
240
+ const view = projectRun(context.stateDir, run.id);
241
+ printRun(view);
242
+ return view.status === 'INCOMPLETE' ? 4 : view.status === 'ERROR' ? 2 : 0;
243
+ }
244
+ const [action, id] = positional;
245
+ if (command === 'run') {
246
+ let run = broker.getRun(id);
247
+ if (!run)
248
+ throw new Error('Review handle not found.');
249
+ if (action === 'cancel')
250
+ run = broker.cancel(id);
251
+ else if (action === 'resume' && !terminal.has(run.status))
252
+ run = await ensureRunWorker({ broker, context, run });
253
+ if (options['--wait'])
254
+ return await wait(id);
255
+ printRun(projectRun(context.stateDir, id));
256
+ return 0;
257
+ }
258
+ const reviewerId = get('--reviewer');
259
+ if (!reviewerId)
260
+ throw new Error('--reviewer is required for Human actions.');
261
+ const request = broker.getRequest(id);
262
+ if (!request)
263
+ throw new Error('Review request not found.');
264
+ if (action === 'claim')
265
+ print(broker.claimHuman(id, reviewerId));
266
+ else if (action === 'tool') {
267
+ const toolName = get('--tool');
268
+ if (!toolName)
269
+ throw new Error('--tool is required.');
270
+ print(await broker.executeHumanTool(id, { reviewerId, toolName, arguments: JSON.parse(get('--args') ?? '{}') }));
271
+ }
272
+ else {
273
+ const filename = get('--result-file');
274
+ if (!filename)
275
+ throw new Error('--result-file is required.');
276
+ const content = await readFile(resolve(filename), 'utf8');
277
+ if (Buffer.byteLength(content) > 256000)
278
+ throw new Error('Human result file is too large.');
279
+ await broker.completeHuman(id, { reviewerId, result: JSON.parse(content) });
280
+ const run = broker.getRun(request.runId);
281
+ if (run.status === 'QUEUED')
282
+ await ensureRunWorker({ broker, context, run });
283
+ printRun(projectRun(context.stateDir, request.runId));
284
+ }
285
+ return 0;
286
+ }
287
+ catch (error) {
288
+ const message = error instanceof Error ? error.message : String(error);
289
+ if (json)
290
+ print({ error: message });
291
+ else
292
+ stderr.write(message + '\n');
293
+ return 2;
294
+ }
295
+ finally {
296
+ await broker?.close();
297
+ }
298
+ }
299
+ let entrypoint = false;
300
+ try {
301
+ entrypoint = Boolean(process.argv[1]) && realpathSync(process.argv[1]) === fileURLToPath(import.meta.url);
302
+ }
303
+ catch { }
304
+ if (entrypoint)
305
+ process.exitCode = await main();
306
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/project/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type GraphDefinition, type GraphProjection, type GraphRequest } from '../broker/graph.js';
2
+ import type { ProjectPlan } from './types.js';
3
+ /** Explicit projections may refer to actual earlier evidence, never fabricated tickets. */
4
+ export declare function projectValidationGraph(graph: GraphDefinition, plan: ProjectPlan, requests: GraphRequest[], runId: string): GraphProjection;
@@ -0,0 +1,26 @@
1
+ import { projectGraph } from '../broker/graph.js';
2
+ const reviewStatus = (status) => status === 'PASS' ? 'GREEN' : status === 'STALE' || status === 'UNREVIEWED' || status === 'BASIS' ? null : status;
3
+ /** Explicit projections may refer to actual earlier evidence, never fabricated tickets. */
4
+ export function projectValidationGraph(graph, plan, requests, runId) {
5
+ const projection = projectGraph(graph, requests);
6
+ for (const critic of projection.critics) {
7
+ const value = plan.critics.find(c => c.id === critic.id);
8
+ const reused = value.status === 'PASS' && value.result && value.result.runId !== runId;
9
+ critic.validationStatus = value.status;
10
+ critic.validationReason = value.reason;
11
+ critic.status = reviewStatus(value.status);
12
+ critic.requestId = value.requestId ?? value.result?.requestId ?? null;
13
+ critic.blockedReason = value.blockedBy.length ? value.reason : null;
14
+ if (reused)
15
+ critic.reusedFrom = { requestId: value.result.requestId, runId: value.result.runId, completedAt: value.result.completedAt };
16
+ }
17
+ for (const artifact of projection.artifacts) {
18
+ const value = plan.artifacts.find(a => a.id === artifact.id);
19
+ artifact.validationStatus = value.status;
20
+ artifact.status = (value.status === 'BASIS' ? 'BASIS' : reviewStatus(value.status) ?? 'UNREVIEWED');
21
+ artifact.passed = value.passed;
22
+ artifact.included = value.criticIds.filter(id => plan.includedCriticIds.includes(id)).length;
23
+ }
24
+ return projection;
25
+ }
26
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/project/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsF,MAAM,oBAAoB,CAAC;AAItI,MAAM,YAAY,GAAG,CAAC,MAAwB,EAAuB,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1L,2FAA2F;AAC3F,MAAM,UAAU,sBAAsB,CAAC,KAAsB,EAAE,IAAiB,EAAE,QAAwB,EAAE,KAAa;IACvH,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjD,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;QACvF,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC;QAAC,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/E,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC;QACtE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,IAAI,MAAM;YAAE,MAAM,CAAC,UAAU,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,MAAO,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,MAAO,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,MAAO,CAAC,WAAW,EAAE,CAAC;IAC7I,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAE,CAAC;QAC9D,QAAQ,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC;QACzC,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,CAAmB,CAAC;QACtH,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/F,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { RepoConfig } from '../contracts.js';
2
+ import type { ProjectSnapshot } from './types.js';
3
+ export declare function canonical(value: unknown): string;
4
+ export declare const inputHash: (value: unknown) => string;
5
+ export declare function createProjectSnapshot(config: RepoConfig, root: string, snapshotHash: string, signal?: AbortSignal): Promise<ProjectSnapshot>;