@ccdd/project 3.3.0 → 4.0.0

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 (153) hide show
  1. package/README.md +9 -12
  2. package/dist/monitor-ui/assets/GraphView-CaxsIXtN.js +27 -0
  3. package/dist/monitor-ui/assets/ValidationView-BMqI2XQ5.css +1 -0
  4. package/dist/monitor-ui/assets/ValidationView-CGW6-Ljw.js +1 -0
  5. package/dist/monitor-ui/assets/{elk-api-D5d3gWoP.js → elk-api-DIQ2_nge.js} +1 -1
  6. package/dist/monitor-ui/assets/{elk.bundled-0eaKiuBP.js → elk.bundled-BRtnLd_M.js} +1 -1
  7. package/dist/monitor-ui/assets/{index-DDwx11D7.css → index-D0yfhUlt.css} +1 -1
  8. package/dist/monitor-ui/assets/index-LyUbXn5P.js +7 -0
  9. package/dist/monitor-ui/index.html +2 -2
  10. package/dist/scripts/prepare-demo.js +25 -44
  11. package/dist/scripts/prepare-demo.js.map +1 -1
  12. package/dist/src/artifact-scope.d.ts +6 -0
  13. package/dist/src/artifact-scope.js +27 -0
  14. package/dist/src/artifact-scope.js.map +1 -0
  15. package/dist/src/artifacts/index.d.ts +7 -155
  16. package/dist/src/artifacts/index.js +0 -354
  17. package/dist/src/artifacts/index.js.map +1 -1
  18. package/dist/src/artifacts/instruction.d.ts +6 -9
  19. package/dist/src/artifacts/instruction.js +28 -36
  20. package/dist/src/artifacts/instruction.js.map +1 -1
  21. package/dist/src/artifacts/mcp-server.js +5 -6
  22. package/dist/src/artifacts/mcp-server.js.map +1 -1
  23. package/dist/src/artifacts/scope.d.ts +12 -0
  24. package/dist/src/artifacts/scope.js +34 -0
  25. package/dist/src/artifacts/scope.js.map +1 -0
  26. package/dist/src/artifacts/tool-check.d.ts +2 -6
  27. package/dist/src/artifacts/tool-check.js +14 -18
  28. package/dist/src/artifacts/tool-check.js.map +1 -1
  29. package/dist/src/artifacts/types.d.ts +3 -37
  30. package/dist/src/artifacts/types.js +5 -89
  31. package/dist/src/artifacts/types.js.map +1 -1
  32. package/dist/src/broker/config.d.ts +5 -6
  33. package/dist/src/broker/config.js +183 -130
  34. package/dist/src/broker/config.js.map +1 -1
  35. package/dist/src/broker/graph.d.ts +14 -21
  36. package/dist/src/broker/graph.js +68 -70
  37. package/dist/src/broker/graph.js.map +1 -1
  38. package/dist/src/broker/index.d.ts +6 -28
  39. package/dist/src/broker/index.js +35 -221
  40. package/dist/src/broker/index.js.map +1 -1
  41. package/dist/src/cli.d.ts +1 -21
  42. package/dist/src/cli.js +2 -329
  43. package/dist/src/cli.js.map +1 -1
  44. package/dist/src/contracts.d.ts +12 -15
  45. package/dist/src/definitions.d.ts +33 -23
  46. package/dist/src/diagnostics-cli.d.ts +9 -0
  47. package/dist/src/diagnostics-cli.js +94 -0
  48. package/dist/src/diagnostics-cli.js.map +1 -0
  49. package/dist/src/doctor/index.d.ts +2 -4
  50. package/dist/src/doctor/index.js +17 -63
  51. package/dist/src/doctor/index.js.map +1 -1
  52. package/dist/src/executors/auth.d.ts +1 -1
  53. package/dist/src/executors/auth.js +2 -2
  54. package/dist/src/executors/auth.js.map +1 -1
  55. package/dist/src/executors/human-preparation.js +2 -10
  56. package/dist/src/executors/human-preparation.js.map +1 -1
  57. package/dist/src/executors/index.js +30 -29
  58. package/dist/src/executors/index.js.map +1 -1
  59. package/dist/src/executors/pi.js +2 -3
  60. package/dist/src/executors/pi.js.map +1 -1
  61. package/dist/src/executors/process.js +9 -0
  62. package/dist/src/executors/process.js.map +1 -1
  63. package/dist/src/monitor/actions.js +3 -3
  64. package/dist/src/monitor/actions.js.map +1 -1
  65. package/dist/src/monitor/server.js +12 -95
  66. package/dist/src/monitor/server.js.map +1 -1
  67. package/dist/src/monitor/store.js +6 -42
  68. package/dist/src/monitor/store.js.map +1 -1
  69. package/dist/src/monitor/types.d.ts +3 -13
  70. package/dist/src/monitor/ui/critic-presentation.js +1 -1
  71. package/dist/src/monitor/ui/critic-presentation.js.map +1 -1
  72. package/dist/src/monitor/ui/graph-layout.d.ts +0 -1
  73. package/dist/src/monitor/ui/graph-layout.js +1 -23
  74. package/dist/src/monitor/ui/graph-layout.js.map +1 -1
  75. package/dist/src/monitor/ui/tool-input.d.ts +1 -1
  76. package/dist/src/monitor/ui/tool-input.js +2 -3
  77. package/dist/src/monitor/ui/tool-input.js.map +1 -1
  78. package/dist/src/project/cli.js +18 -30
  79. package/dist/src/project/cli.js.map +1 -1
  80. package/dist/src/project/graph.js +2 -2
  81. package/dist/src/project/graph.js.map +1 -1
  82. package/dist/src/project/identity.js +83 -56
  83. package/dist/src/project/identity.js.map +1 -1
  84. package/dist/src/project/index.d.ts +0 -3
  85. package/dist/src/project/index.js +2 -6
  86. package/dist/src/project/index.js.map +1 -1
  87. package/dist/src/project/query.d.ts +2 -1
  88. package/dist/src/project/query.js +49 -74
  89. package/dist/src/project/query.js.map +1 -1
  90. package/dist/src/project/store.js +2 -2
  91. package/dist/src/project/store.js.map +1 -1
  92. package/dist/src/project/types.d.ts +4 -4
  93. package/dist/src/requester/index.d.ts +2 -9
  94. package/dist/src/requester/index.js +17 -96
  95. package/dist/src/requester/index.js.map +1 -1
  96. package/dist/src/sdk.d.ts +3 -8
  97. package/dist/src/sdk.js +2 -3
  98. package/dist/src/sdk.js.map +1 -1
  99. package/dist/src/tools/contracts.d.ts +34 -78
  100. package/dist/src/tools/diagnostics.js +1 -2
  101. package/dist/src/tools/diagnostics.js.map +1 -1
  102. package/dist/src/tools/environment.d.ts +1 -0
  103. package/dist/src/tools/environment.js +7 -11
  104. package/dist/src/tools/environment.js.map +1 -1
  105. package/dist/src/tools/manifest.d.ts +0 -1
  106. package/dist/src/tools/manifest.js +1 -25
  107. package/dist/src/tools/manifest.js.map +1 -1
  108. package/dist/src/tools/runner.d.ts +10 -14
  109. package/dist/src/tools/runner.js +144 -117
  110. package/dist/src/tools/runner.js.map +1 -1
  111. package/dist/src/tools/schema.js +1 -1
  112. package/dist/src/tools/schema.js.map +1 -1
  113. package/dist/src/workspaces/index.d.ts +5 -12
  114. package/dist/src/workspaces/index.js +33 -217
  115. package/dist/src/workspaces/index.js.map +1 -1
  116. package/package.json +38 -10
  117. package/dist/monitor-ui/assets/GraphView-BSZlEAs3.js +0 -27
  118. package/dist/monitor-ui/assets/ValidationView-DaEF78J-.js +0 -1
  119. package/dist/monitor-ui/assets/ValidationView-p5r8lX18.css +0 -1
  120. package/dist/monitor-ui/assets/index-BQlWbkpH.js +0 -8
  121. package/dist/src/artifacts/data.d.ts +0 -5
  122. package/dist/src/artifacts/data.js +0 -100
  123. package/dist/src/artifacts/data.js.map +0 -1
  124. package/dist/src/artifacts/groups.d.ts +0 -13
  125. package/dist/src/artifacts/groups.js +0 -93
  126. package/dist/src/artifacts/groups.js.map +0 -1
  127. package/dist/src/artifacts/human.d.ts +0 -38
  128. package/dist/src/artifacts/human.js +0 -156
  129. package/dist/src/artifacts/human.js.map +0 -1
  130. package/dist/src/artifacts/sources.d.ts +0 -11
  131. package/dist/src/artifacts/sources.js +0 -106
  132. package/dist/src/artifacts/sources.js.map +0 -1
  133. package/dist/src/review/cli.d.ts +0 -8
  134. package/dist/src/review/cli.js +0 -136
  135. package/dist/src/review/cli.js.map +0 -1
  136. package/dist/src/review/client.d.ts +0 -30
  137. package/dist/src/review/client.js +0 -193
  138. package/dist/src/review/client.js.map +0 -1
  139. package/dist/src/review/server.d.ts +0 -11
  140. package/dist/src/review/server.js +0 -249
  141. package/dist/src/review/server.js.map +0 -1
  142. package/dist/src/review/types.d.ts +0 -10
  143. package/dist/src/review/types.js +0 -17
  144. package/dist/src/review/types.js.map +0 -1
  145. package/dist/src/tools/host.d.ts +0 -7
  146. package/dist/src/tools/host.js +0 -98
  147. package/dist/src/tools/host.js.map +0 -1
  148. package/dist/src/tools/runtime-host.d.ts +0 -1
  149. package/dist/src/tools/runtime-host.js +0 -196
  150. package/dist/src/tools/runtime-host.js.map +0 -1
  151. package/dist/src/workspaces/transfer.d.ts +0 -52
  152. package/dist/src/workspaces/transfer.js +0 -372
  153. package/dist/src/workspaces/transfer.js.map +0 -1
@@ -1,148 +1,201 @@
1
1
  import path from 'node:path';
2
+ import { createHash } from 'node:crypto';
2
3
  import { lstat, readFile, readdir, realpath } from 'node:fs/promises';
3
- import { validateArtifactType } from '../artifacts/types.js';
4
- import { isArtifactGroup, isGeneratedArtifact, resolveArtifactScope, validateArtifactDefinitions } from '../artifacts/groups.js';
5
- import { createGraphDefinition } from './graph.js';
6
- import { openToolHost } from '../tools/host.js';
7
- const errorCode = (error) => error !== null && typeof error === 'object' && 'code' in error ? error.code : undefined;
8
- const identifier = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
9
- const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
10
- export function validateRelativePath(value) {
11
- if (typeof value !== 'string' || !value || value.length > 1024 ||
12
- path.posix.isAbsolute(value) || path.win32.isAbsolute(value) ||
13
- /[\\\x00-\x1f\x7f]/.test(value) || value.split('/').some(part => !part || part === '.' || part === '..')) {
14
- throw new Error(`Artifact path must be a safe repository-relative path: ${String(value)}`);
15
- }
16
- return value;
4
+ import { metadata, environmentRequirements, object, projectInputPath } from '../tools/schema.js';
5
+ import { hashExecutionInputs } from '../tools/inputs.js';
6
+ import { instructionReferences } from '../artifacts/instruction.js';
7
+ export const identifier = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
8
+ export const criticIdentifier = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}\/[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
9
+ const hash = (value) => createHash('sha256').update(value).digest('hex');
10
+ const ownMap = () => Object.create(null);
11
+ export function validateRelativePath(value) { projectInputPath(value); return value; }
12
+ function fields(value, allowed, label) {
13
+ for (const key of Object.keys(value))
14
+ if (!allowed.includes(key))
15
+ throw new Error(`Unknown ${label} field: ${key}`);
17
16
  }
18
- export async function readWorkspaceConfig(repoPath, signal) {
19
- signal?.throwIfAborted();
20
- const root = await realpath(repoPath);
21
- const configPath = path.join(root, 'ccdd.config.json');
22
- const info = await lstat(configPath).catch(() => null);
23
- const tsInfo = await lstat(path.join(root, 'ccdd.config.ts')).catch(() => null);
24
- if (info && tsInfo)
25
- throw new Error('Both ccdd.config.ts and ccdd.config.json exist; keep one configuration.');
26
- if (!info?.isFile() && !tsInfo?.isFile())
27
- throw new Error('Workspace must contain a regular ccdd.config.ts or ccdd.config.json file.');
28
- let config;
29
- try {
30
- if (tsInfo) {
31
- const host = await openToolHost(root, signal);
32
- try {
33
- config = host.config;
34
- }
35
- finally {
36
- await host.close();
37
- }
38
- }
39
- else {
40
- config = JSON.parse(await readFile(configPath, 'utf8'));
41
- if (object(config) && (config.configManifest !== undefined || object(config.artifactTypes) && Object.values(config.artifactTypes).some(value => object(value) && value.custom)))
42
- throw new Error('Custom tools must be registered in ccdd.config.ts.');
17
+ export function validateScript(value) {
18
+ if (!object(value))
19
+ throw new Error('A script requires command and args.');
20
+ fields(value, ['command', 'args'], 'script');
21
+ if (typeof value.command !== 'string' || !value.command.trim() || /[\x00-\x1f\x7f]/.test(value.command) || !Array.isArray(value.args) || value.args.some((arg) => typeof arg !== 'string' || arg.includes('\0')))
22
+ throw new Error('A script requires a fixed command and string args.');
23
+ }
24
+ function views(value) {
25
+ if (value === undefined)
26
+ return {};
27
+ if (!object(value))
28
+ throw new Error('views must be an object.');
29
+ fields(value, ['agentTools', 'humanTools'], 'views');
30
+ const result = {};
31
+ for (const audience of ['agentTools', 'humanTools']) {
32
+ if (value[audience] === undefined)
33
+ continue;
34
+ if (!object(value[audience]))
35
+ throw new Error(`${audience} must be a tool map.`);
36
+ const tools = ownMap();
37
+ for (const [name, tool] of Object.entries(value[audience])) {
38
+ if (!identifier.test(name) || !object(tool))
39
+ throw new Error('View names must be safe identifiers.');
40
+ fields(tool, ['metadata', 'script'], 'view');
41
+ validateScript(tool.script);
42
+ const meta = metadata(tool.metadata);
43
+ if (meta.artifactKind === 'file')
44
+ throw new Error('Artifacts are folders; file views select a file inside their folder.');
45
+ tools[name] = { metadata: meta, script: structuredClone(tool.script) };
43
46
  }
47
+ result[audience] = tools;
44
48
  }
45
- catch (error) {
46
- throw new Error(`Cannot read workspace configuration: ${error instanceof Error ? error.message : String(error)}`);
49
+ return result;
50
+ }
51
+ function critic(value) {
52
+ if (!object(value))
53
+ throw new Error('Invalid Critic declaration.');
54
+ fields(value, ['id', 'title', 'profile', 'payload'], 'Critic');
55
+ if (typeof value.id !== 'string' || !identifier.test(value.id) || typeof value.title !== 'string' || !value.title.trim())
56
+ throw new Error('A Critic needs a local id and title.');
57
+ if (!object(value.payload) || typeof value.payload.instruction !== 'string' || !value.payload.instruction.trim())
58
+ throw new Error('A Critic needs payload.instruction.');
59
+ const profile = value.profile;
60
+ if (!object(profile) || !['agent', 'human', 'runtime'].includes(profile.kind))
61
+ throw new Error('Invalid Critic profile.');
62
+ if (profile.kind === 'agent') {
63
+ fields(profile, ['kind', 'provider', 'model', 'reasoning', 'timeoutMs'], 'Agent profile');
64
+ if (['provider', 'model', 'reasoning'].some(key => typeof profile[key] !== 'string' || !profile[key].trim()))
65
+ throw new Error('Agent profiles require provider, model and reasoning.');
47
66
  }
48
- // Inspect only declared Artifact roots here. The workspace engine validates the entire input tree.
49
- const tree = [];
50
- const visited = new Set();
51
- const walk = async (relative) => {
52
- signal?.throwIfAborted();
53
- if (visited.has(relative))
54
- return;
55
- visited.add(relative);
56
- const absolute = path.join(root, relative);
57
- const entry = await lstat(absolute).catch(error => { if (errorCode(error) === 'ENOENT')
58
- return null; throw error; });
59
- if (!entry)
60
- return;
61
- const resolved = await realpath(absolute);
62
- const sub = path.relative(root, resolved);
63
- if (path.isAbsolute(sub) || sub === '..' || sub.startsWith(`..${path.sep}`))
64
- throw new Error(`Artifact escapes the workspace: ${relative}`);
65
- if (entry.isDirectory()) {
66
- tree.push({ path: relative, type: 'tree', mode: '040000' });
67
- for (const name of await readdir(absolute))
68
- await walk(`${relative}/${name}`);
69
- }
70
- else {
71
- tree.push({ path: relative, type: entry.isFile() ? 'blob' : 'unsupported', mode: entry.isSymbolicLink() ? '120000' : '100644' });
72
- }
73
- };
74
- if (object(config) && object(config.artifacts)) {
75
- validateArtifactDefinitions(config.artifacts);
76
- for (const artifact of Object.values(config.artifacts)) {
77
- if (!isArtifactGroup(artifact) && !isGeneratedArtifact(artifact))
78
- await walk(validateRelativePath(artifact.path));
79
- }
67
+ else if (profile.kind === 'human')
68
+ fields(profile, ['kind'], 'Human profile');
69
+ else {
70
+ fields(profile, ['kind', 'command', 'args', 'timeoutMs'], 'Runtime profile');
71
+ validateScript({ command: profile.command, args: profile.args });
80
72
  }
81
- validateConfig(config, tree);
82
- return { config };
73
+ if (profile.timeoutMs !== undefined && (!Number.isSafeInteger(profile.timeoutMs) || profile.timeoutMs < 1 || profile.timeoutMs > 86400000))
74
+ throw new Error('Invalid Critic timeoutMs.');
75
+ return structuredClone(value);
83
76
  }
84
- export function validateConfig(config, tree) {
85
- if (!object(config) || !object(config.artifacts) || !object(config.artifactTypes) ||
86
- !Array.isArray(config.critics) || config.critics.length === 0 || config.critics.length > 32) {
87
- throw new Error('Config requires artifacts, artifactTypes, and 1–32 critics.');
88
- }
89
- for (const [type, definition] of Object.entries(config.artifactTypes)) {
90
- validateArtifactType(type, definition);
91
- if (object(definition) && definition.custom && (!object(config.configManifest) || !object(config.configManifest.types) || !Object.hasOwn(config.configManifest.types, type)))
92
- throw new Error('Custom Artifact type requires a recorded tool manifest.');
77
+ function manifest(value) {
78
+ if (!object(value))
79
+ throw new Error('ccdd.json must contain an Artifact object.');
80
+ fields(value, ['name', 'critics', 'views', 'mounts', 'basis', 'stale', 'envRequirements'], 'Artifact');
81
+ if (typeof value.name !== 'string' || !identifier.test(value.name))
82
+ throw new Error('Artifact name must be a safe identifier.');
83
+ if (value.basis !== undefined && typeof value.basis !== 'boolean')
84
+ throw new Error('basis must be a boolean.');
85
+ if (value.critics !== undefined && !Array.isArray(value.critics))
86
+ throw new Error('critics must be an array.');
87
+ const critics = (value.critics ?? []).map(critic);
88
+ if (new Set(critics.map(c => c.id)).size !== critics.length)
89
+ throw new Error(`Duplicate local Critic in ${value.name}.`);
90
+ if (value.basis && critics.length)
91
+ throw new Error(`Basis Artifact ${value.name} cannot own Critics.`);
92
+ if (value.mounts !== undefined && !object(value.mounts))
93
+ throw new Error('mounts must map aliases to Artifact names.');
94
+ const mounts = ownMap();
95
+ for (const [alias, target] of Object.entries(value.mounts ?? {})) {
96
+ if (!identifier.test(alias) || typeof target !== 'string' || !identifier.test(target))
97
+ throw new Error('Mount aliases and targets must be safe Artifact identifiers.');
98
+ mounts[alias] = target;
93
99
  }
94
- validateArtifactDefinitions(config.artifacts);
95
- for (const [id, artifact] of Object.entries(config.artifacts)) {
96
- if (isArtifactGroup(artifact))
97
- continue;
98
- if (!Object.hasOwn(config.artifactTypes, artifact.type)) {
99
- throw new Error(`Invalid artifact definition or unknown type: ${id}`);
100
- }
101
- if (isGeneratedArtifact(artifact)) {
102
- if (!object(config.configManifest) || !object(config.configManifest.sources) || !Object.hasOwn(config.configManifest.sources, artifact.source) || !config.artifactTypes[artifact.type].custom)
103
- throw new Error(`Generated Artifact ${id} requires a registered TS source and tools.`);
104
- continue;
105
- }
106
- const artifactPath = validateRelativePath(artifact.path);
107
- const entries = tree.filter(entry => entry.path === artifactPath || entry.path.startsWith(`${artifactPath}/`));
108
- if (entries.length === 0 || entries.some(entry => !['blob', 'tree'].includes(entry.type) || entry.mode === '120000')) {
109
- throw new Error(`Artifact must contain workspace files or directories without symlinks: ${id}`);
110
- }
111
- if (config.artifactTypes[artifact.type].viewer === 'text' && !entries.some(entry => entry.path === artifactPath && entry.type === 'blob')) {
112
- throw new Error(`Text viewer requires a file artifact: ${id}`);
100
+ if (value.stale !== undefined) {
101
+ if (!object(value.stale) || !['always', 'file-hash'].includes(value.stale.kind))
102
+ throw new Error('Invalid stale strategy.');
103
+ fields(value.stale, value.stale.kind === 'always' ? ['kind'] : ['kind', 'paths'], 'stale');
104
+ if (value.stale.paths !== undefined) {
105
+ if (!Array.isArray(value.stale.paths) || !value.stale.paths.length)
106
+ throw new Error('stale.paths must be a nonempty array.');
107
+ value.stale.paths.forEach(projectInputPath);
113
108
  }
114
109
  }
115
- const artifacts = config.artifacts;
116
- const seen = new Set();
117
- for (const critic of config.critics) {
118
- if (!object(critic) || typeof critic.id !== 'string' || !identifier.test(critic.id) || seen.has(critic.id))
119
- throw new Error('Critic IDs must be unique safe identifiers.');
120
- seen.add(critic.id);
121
- if (Object.hasOwn(critic, 'dependsOn') || Object.hasOwn(critic, 'artifacts')) {
122
- throw new Error(`Critic ${critic.id}: dependsOn/artifacts have been replaced by target (one Artifact ID) and deps (Artifact ID array). Migrate the configuration explicitly; see docs/artifact-graph.md.`);
123
- }
124
- if (typeof critic.title !== 'string' || !critic.title.trim() ||
125
- typeof critic.target !== 'string' || !Object.hasOwn(artifacts, critic.target) ||
126
- !Array.isArray(critic.deps) || new Set(critic.deps).size !== critic.deps.length ||
127
- critic.deps.some(id => typeof id !== 'string' || !Object.hasOwn(artifacts, id))) {
128
- throw new Error(`Critic ${critic.id} requires a title, a known target Artifact and unique known deps.`);
110
+ return { name: value.name, critics, views: views(value.views), mounts,
111
+ ...(value.basis === undefined ? {} : { basis: value.basis }), ...(value.stale === undefined ? {} : { stale: structuredClone(value.stale) }),
112
+ ...(value.envRequirements === undefined ? {} : { envRequirements: environmentRequirements(value.envRequirements) }) };
113
+ }
114
+ /** Discover static per-folder declarations. No imports, generators, tools, or Providers run here. */
115
+ export async function readWorkspaceConfig(repoPath, signal) {
116
+ const root = await realpath(repoPath), artifacts = ownMap(), declarations = [];
117
+ const localCritics = ownMap();
118
+ const walk = async (relative, parent) => {
119
+ signal?.throwIfAborted();
120
+ const absolute = path.join(root, relative), entries = await readdir(absolute, { withFileTypes: true });
121
+ entries.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
122
+ const marker = entries.find(entry => entry.name === 'ccdd.json');
123
+ let owner = parent;
124
+ if (marker) {
125
+ if (!marker.isFile())
126
+ throw new Error(`ccdd.json must be a regular file: ${relative || '.'}`);
127
+ const file = path.posix.join(relative, 'ccdd.json'), text = await readFile(path.join(root, file), 'utf8');
128
+ let declared;
129
+ try {
130
+ declared = manifest(JSON.parse(text));
131
+ }
132
+ catch (error) {
133
+ throw new Error(`${file}: ${error instanceof Error ? error.message : String(error)}`);
134
+ }
135
+ if (Object.hasOwn(artifacts, declared.name))
136
+ throw new Error(`Duplicate Artifact name: ${declared.name}`);
137
+ const { critics = [], ...definition } = declared;
138
+ artifacts[declared.name] = { ...definition, path: relative, views: definition.views ?? {}, mounts: definition.mounts ?? {}, children: ownMap() };
139
+ localCritics[declared.name] = critics;
140
+ declarations.push({ path: file, hash: hash(text) });
141
+ if (parent !== undefined) {
142
+ const childPath = path.posix.relative(artifacts[parent].path || '.', relative);
143
+ artifacts[parent].children[childPath] = declared.name;
144
+ }
145
+ owner = declared.name;
129
146
  }
130
- if (!object(critic.payload) || typeof critic.payload.instruction !== 'string' || !critic.payload.instruction.trim()) {
131
- throw new Error(`Critic ${critic.id} requires a review request payload instruction.`);
147
+ for (const entry of entries)
148
+ if (entry.isDirectory() && !['.git', 'node_modules'].includes(entry.name))
149
+ await walk(path.posix.join(relative, entry.name), owner);
150
+ };
151
+ await walk('');
152
+ if (!Object.keys(artifacts).length)
153
+ throw new Error('Workspace must contain at least one ccdd.json Artifact.');
154
+ const relations = [], critics = [];
155
+ const envRequirements = ownMap();
156
+ const runtimePaths = new Set(), environmentPaths = new Set();
157
+ for (const [id, artifact] of Object.entries(artifacts)) {
158
+ for (const [name, source] of Object.entries(artifact.children))
159
+ relations.push({ source, target: id, kind: 'child', name });
160
+ for (const [alias, source] of Object.entries(artifact.mounts)) {
161
+ if (!Object.hasOwn(artifacts, source))
162
+ throw new Error(`Unknown mount target ${source} in ${id}.`);
163
+ if (alias === id && source !== id || Object.hasOwn(artifacts, alias) && alias !== source)
164
+ throw new Error(`Ambiguous mount alias ${alias} in ${id}.`);
165
+ if (await lstat(path.join(root, artifact.path, alias)).catch(error => { if (error.code === 'ENOENT')
166
+ return null; throw error; }))
167
+ throw new Error(`Mount ${id}/${alias} conflicts with a physical entry.`);
168
+ relations.push({ source, target: id, kind: 'mount', name: alias });
132
169
  }
133
- const profile = critic.profile;
134
- if (!object(profile) || typeof profile.kind !== 'string' || !['agent', 'runtime', 'human'].includes(profile.kind))
135
- throw new Error(`Invalid executor profile: ${critic.id}`);
136
- if (profile.kind === 'agent' && ['provider', 'model', 'reasoning'].some(key => typeof profile[key] !== 'string' || !profile[key].trim())) {
137
- throw new Error(`Agent profile requires provider, model and reasoning: ${critic.id}`);
170
+ for (const declared of localCritics[id]) {
171
+ const qualifiedId = `${id}/${declared.id}`, references = ownMap();
172
+ for (const name of instructionReferences(declared.payload.instruction)) {
173
+ const resolved = Object.hasOwn(artifact.mounts, name) ? artifact.mounts[name] : name;
174
+ if (!Object.hasOwn(artifacts, resolved))
175
+ throw new Error(`Unknown Artifact reference {${name}} in ${qualifiedId}. Escape literal braces with a backslash.`);
176
+ references[name] = resolved;
177
+ }
178
+ const deps = [...new Set(Object.values(references))].filter(dep => dep !== id).sort();
179
+ critics.push({ ...declared, localId: declared.id, id: qualifiedId, target: id, deps, references });
180
+ for (const source of deps)
181
+ relations.push({ source, target: id, kind: 'instruction', criticId: qualifiedId });
138
182
  }
139
- if (profile.kind === 'runtime' && (typeof profile.command !== 'string' || !profile.command.trim() ||
140
- !Array.isArray(profile.args) || profile.args.some(arg => typeof arg !== 'string'))) {
141
- throw new Error(`Runtime profile requires command and string args: ${critic.id}`);
183
+ for (const tool of [...Object.values(artifact.views.agentTools ?? {}), ...Object.values(artifact.views.humanTools ?? {})])
184
+ for (const input of tool.metadata.executionPaths ?? [])
185
+ runtimePaths.add(input);
186
+ for (const [name, requirement] of Object.entries(artifact.envRequirements ?? {})) {
187
+ const script = path.posix.join(artifact.path, requirement.script), inputs = requirement.inputs?.map(input => path.posix.join(artifact.path, input));
188
+ envRequirements[`${id}/${name}`] = { ...requirement, script, ...(inputs ? { inputs } : {}) };
189
+ environmentPaths.add(script);
190
+ for (const input of inputs ?? [])
191
+ environmentPaths.add(input);
142
192
  }
143
- if (profile.kind === 'runtime' && resolveArtifactScope(artifacts, [critic.target, ...critic.deps]).artifacts.some(artifact => artifact.kind === 'generated'))
144
- throw new Error('Runtime Critics require file Artifacts; use an Agent or Human Critic for generated data.');
145
193
  }
146
- createGraphDefinition(config);
194
+ const executionInputs = runtimePaths.size ? await hashExecutionInputs(root, [...runtimePaths], signal) : undefined;
195
+ const environmentInputs = environmentPaths.size ? await hashExecutionInputs(root, [...environmentPaths], signal) : undefined;
196
+ const configManifest = { version: 2, configHash: hash(JSON.stringify({ artifacts, critics, relations, declarations, executionInputs, environmentInputs })), artifacts: structuredClone(artifacts), declarations,
197
+ ...(executionInputs ? { executionInputs } : {}), ...(environmentInputs ? { environmentInputs, envRequirements } : {}) };
198
+ const config = { artifacts, critics, relations, configManifest };
199
+ return { config: JSON.parse(JSON.stringify(config)) };
147
200
  }
148
201
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/broker/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/broker/config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ArtifactEntryDefinition, CriticProfile, RepoConfig, ReviewEnvelope, ReviewStatus } from '../contracts.js';
1
+ import type { ArtifactDefinition, ArtifactRelation, CriticProfile, RepoConfig, ReviewStatus } from '../contracts.js';
2
2
  import type { ValidationStatus } from '../project/types.js';
3
3
  export interface GraphCriticDefinition {
4
4
  id: string;
@@ -8,9 +8,10 @@ export interface GraphCriticDefinition {
8
8
  kind: CriticProfile['kind'];
9
9
  }
10
10
  export interface GraphDefinition {
11
- version: 1;
12
- artifacts: Record<string, ArtifactEntryDefinition>;
11
+ version: 2;
12
+ artifacts: Record<string, ArtifactDefinition>;
13
13
  critics: GraphCriticDefinition[];
14
+ relations: ArtifactRelation[];
14
15
  }
15
16
  export type ArtifactStatus = 'BASIS' | 'UNREVIEWED' | ReviewStatus;
16
17
  export interface GraphRequest {
@@ -20,29 +21,19 @@ export interface GraphRequest {
20
21
  claimedBy?: string | null;
21
22
  blockedReason?: string | null;
22
23
  }
23
- interface GraphArtifactStateBase {
24
+ export interface GraphArtifactState {
24
25
  id: string;
26
+ path: string;
25
27
  basis: boolean;
26
28
  status: ArtifactStatus;
29
+ mounts: Record<string, string>;
30
+ children: Record<string, string>;
27
31
  criticIds: string[];
28
32
  passed: number;
29
33
  total: number;
30
34
  included: number;
31
35
  validationStatus?: ValidationStatus;
32
36
  }
33
- export type GraphArtifactState = GraphArtifactStateBase & ({
34
- kind?: 'artifact';
35
- type: string;
36
- path: string;
37
- } | {
38
- kind: 'generated';
39
- type: string;
40
- source: string;
41
- path?: never;
42
- } | {
43
- kind: 'group';
44
- members: string[];
45
- });
46
37
  export interface GraphCriticState extends GraphCriticDefinition {
47
38
  requestId: string | null;
48
39
  status: ReviewStatus | null;
@@ -63,12 +54,14 @@ export interface GraphProjection {
63
54
  source: string;
64
55
  target: string;
65
56
  criticIds: string[];
57
+ relations: ArtifactRelation[];
58
+ cyclic: boolean;
66
59
  }[];
67
60
  }
68
- /** Validate only the immutable graph metadata; no payloads, providers or workspace reads. */
61
+ /** Static graph metadata only. Cycles express shared validation obligations, never scheduling gates. */
69
62
  export declare function validateGraphDefinition(value: unknown): asserts value is GraphDefinition;
70
63
  export declare function createGraphDefinition(config: RepoConfig): GraphDefinition;
71
- export declare function prerequisiteCriticIds(request: Pick<ReviewEnvelope, 'deps'>, graph: GraphDefinition): string[];
72
- /** Call with requests from exactly one Run. Missing evaluations never count as passing. */
64
+ /** Tarjan components turn a cyclic Artifact graph into a finite condensation graph. */
65
+ export declare function stronglyConnectedComponents(ids: readonly string[], relations: readonly ArtifactRelation[]): string[][];
66
+ /** Stored results remain inspectable without consulting or executing a workspace. */
73
67
  export declare function projectGraph(graph: GraphDefinition, requests: readonly GraphRequest[]): GraphProjection;
74
- export {};