@ccdd/project 3.3.1 → 4.1.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 (156) hide show
  1. package/README.md +9 -12
  2. package/dist/monitor-ui/assets/GraphView-6yzqBOLv.js +27 -0
  3. package/dist/monitor-ui/assets/ValidationView-BMqI2XQ5.css +1 -0
  4. package/dist/monitor-ui/assets/ValidationView-BwHWjMUI.js +1 -0
  5. package/dist/monitor-ui/assets/{elk-api-D5d3gWoP.js → elk-api-BwZQovT5.js} +1 -1
  6. package/dist/monitor-ui/assets/{elk.bundled-0eaKiuBP.js → elk.bundled-CQowIhI8.js} +1 -1
  7. package/dist/monitor-ui/assets/index-CoJ9_gC3.js +7 -0
  8. package/dist/monitor-ui/assets/{index-DDwx11D7.css → index-D0yfhUlt.css} +1 -1
  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 +8 -9
  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 +16 -20
  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 +84 -234
  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 +13 -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 +36 -4
  60. package/dist/src/executors/pi.js.map +1 -1
  61. package/dist/src/executors/process.js +19 -11
  62. package/dist/src/executors/process.js.map +1 -1
  63. package/dist/src/executors/telemetry.d.ts +4 -0
  64. package/dist/src/executors/telemetry.js +24 -0
  65. package/dist/src/executors/telemetry.js.map +1 -0
  66. package/dist/src/monitor/actions.js +3 -3
  67. package/dist/src/monitor/actions.js.map +1 -1
  68. package/dist/src/monitor/server.js +12 -95
  69. package/dist/src/monitor/server.js.map +1 -1
  70. package/dist/src/monitor/store.js +6 -42
  71. package/dist/src/monitor/store.js.map +1 -1
  72. package/dist/src/monitor/types.d.ts +3 -13
  73. package/dist/src/monitor/ui/critic-presentation.js +1 -1
  74. package/dist/src/monitor/ui/critic-presentation.js.map +1 -1
  75. package/dist/src/monitor/ui/graph-layout.d.ts +0 -1
  76. package/dist/src/monitor/ui/graph-layout.js +1 -23
  77. package/dist/src/monitor/ui/graph-layout.js.map +1 -1
  78. package/dist/src/monitor/ui/tool-input.d.ts +1 -1
  79. package/dist/src/monitor/ui/tool-input.js +2 -3
  80. package/dist/src/monitor/ui/tool-input.js.map +1 -1
  81. package/dist/src/project/cli.js +18 -30
  82. package/dist/src/project/cli.js.map +1 -1
  83. package/dist/src/project/graph.js +2 -2
  84. package/dist/src/project/graph.js.map +1 -1
  85. package/dist/src/project/identity.js +83 -56
  86. package/dist/src/project/identity.js.map +1 -1
  87. package/dist/src/project/index.d.ts +0 -3
  88. package/dist/src/project/index.js +2 -6
  89. package/dist/src/project/index.js.map +1 -1
  90. package/dist/src/project/query.d.ts +2 -1
  91. package/dist/src/project/query.js +49 -74
  92. package/dist/src/project/query.js.map +1 -1
  93. package/dist/src/project/store.js +3 -3
  94. package/dist/src/project/store.js.map +1 -1
  95. package/dist/src/project/types.d.ts +4 -4
  96. package/dist/src/requester/index.d.ts +2 -9
  97. package/dist/src/requester/index.js +17 -96
  98. package/dist/src/requester/index.js.map +1 -1
  99. package/dist/src/sdk.d.ts +3 -8
  100. package/dist/src/sdk.js +2 -3
  101. package/dist/src/sdk.js.map +1 -1
  102. package/dist/src/tools/contracts.d.ts +44 -80
  103. package/dist/src/tools/diagnostics.js +2 -2
  104. package/dist/src/tools/diagnostics.js.map +1 -1
  105. package/dist/src/tools/environment.d.ts +1 -0
  106. package/dist/src/tools/environment.js +7 -11
  107. package/dist/src/tools/environment.js.map +1 -1
  108. package/dist/src/tools/manifest.d.ts +0 -1
  109. package/dist/src/tools/manifest.js +1 -25
  110. package/dist/src/tools/manifest.js.map +1 -1
  111. package/dist/src/tools/runner.d.ts +19 -14
  112. package/dist/src/tools/runner.js +163 -118
  113. package/dist/src/tools/runner.js.map +1 -1
  114. package/dist/src/tools/schema.js +1 -1
  115. package/dist/src/tools/schema.js.map +1 -1
  116. package/dist/src/workspaces/index.d.ts +5 -12
  117. package/dist/src/workspaces/index.js +33 -217
  118. package/dist/src/workspaces/index.js.map +1 -1
  119. package/package.json +38 -10
  120. package/dist/monitor-ui/assets/GraphView-BSZlEAs3.js +0 -27
  121. package/dist/monitor-ui/assets/ValidationView-DaEF78J-.js +0 -1
  122. package/dist/monitor-ui/assets/ValidationView-p5r8lX18.css +0 -1
  123. package/dist/monitor-ui/assets/index-BQlWbkpH.js +0 -8
  124. package/dist/src/artifacts/data.d.ts +0 -5
  125. package/dist/src/artifacts/data.js +0 -100
  126. package/dist/src/artifacts/data.js.map +0 -1
  127. package/dist/src/artifacts/groups.d.ts +0 -13
  128. package/dist/src/artifacts/groups.js +0 -93
  129. package/dist/src/artifacts/groups.js.map +0 -1
  130. package/dist/src/artifacts/human.d.ts +0 -38
  131. package/dist/src/artifacts/human.js +0 -156
  132. package/dist/src/artifacts/human.js.map +0 -1
  133. package/dist/src/artifacts/sources.d.ts +0 -11
  134. package/dist/src/artifacts/sources.js +0 -106
  135. package/dist/src/artifacts/sources.js.map +0 -1
  136. package/dist/src/review/cli.d.ts +0 -8
  137. package/dist/src/review/cli.js +0 -136
  138. package/dist/src/review/cli.js.map +0 -1
  139. package/dist/src/review/client.d.ts +0 -30
  140. package/dist/src/review/client.js +0 -193
  141. package/dist/src/review/client.js.map +0 -1
  142. package/dist/src/review/server.d.ts +0 -11
  143. package/dist/src/review/server.js +0 -249
  144. package/dist/src/review/server.js.map +0 -1
  145. package/dist/src/review/types.d.ts +0 -10
  146. package/dist/src/review/types.js +0 -17
  147. package/dist/src/review/types.js.map +0 -1
  148. package/dist/src/tools/host.d.ts +0 -7
  149. package/dist/src/tools/host.js +0 -98
  150. package/dist/src/tools/host.js.map +0 -1
  151. package/dist/src/tools/runtime-host.d.ts +0 -1
  152. package/dist/src/tools/runtime-host.js +0 -212
  153. package/dist/src/tools/runtime-host.js.map +0 -1
  154. package/dist/src/workspaces/transfer.d.ts +0 -52
  155. package/dist/src/workspaces/transfer.js +0 -372
  156. package/dist/src/workspaces/transfer.js.map +0 -1
@@ -1,356 +1,2 @@
1
- import { constants } from 'node:fs';
2
- import { lstat, open, readdir, realpath, stat } from 'node:fs/promises';
3
- import { isAbsolute, relative, resolve, sep } from 'node:path';
4
- import { artifactAudienceTools, toolDescription, validateArtifactType } from './types.js';
5
1
  export { assertArtifactAudience } from './types.js';
6
- function artifactIdentifier(value) {
7
- if (typeof value !== 'string')
8
- throw new Error('Artifact is not in this review request');
9
- return value;
10
- }
11
- const MAX_READ_BYTES = 64 * 1024;
12
- const DEFAULT_READ_LINES = 80;
13
- const MAX_READ_LINES = 500;
14
- const MAX_ENTRIES = 200;
15
- function relativePath(value, { empty = false } = {}) {
16
- if (typeof value !== 'string' || (!empty && !value) || value.includes('\0') || value.includes('\\') || isAbsolute(value) || value.split('/').some(x => x === '..' || x === '.')) {
17
- throw new Error('Artifact path must be a safe repository-relative path');
18
- }
19
- return value;
20
- }
21
- function contained(root, candidate) {
22
- const sub = relative(root, candidate);
23
- return sub === '' || (!sub.startsWith(`..${sep}`) && sub !== '..' && !isAbsolute(sub));
24
- }
25
- function integer(value, fallback, min, max, name) {
26
- if (value === undefined)
27
- return fallback;
28
- if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < min || value > max)
29
- throw new Error(`Invalid ${name}`);
30
- return value;
31
- }
32
- function argumentsObject(args, allowed) {
33
- if (!args || typeof args !== 'object' || Array.isArray(args) || Object.keys(args).some(key => !allowed.includes(key)))
34
- throw new Error('Invalid artifact tool arguments');
35
- }
36
- async function withoutSymlinks(root, path, signal) {
37
- signal?.throwIfAborted();
38
- let current = root;
39
- for (const component of path.split('/').filter(Boolean)) {
40
- signal?.throwIfAborted();
41
- current = resolve(current, component);
42
- const info = await lstat(current);
43
- signal?.throwIfAborted();
44
- if (info.isSymbolicLink())
45
- throw new Error('Artifact paths must not contain symlinks or symlink escapes');
46
- }
47
- signal?.throwIfAborted();
48
- const pathResult = await realpath(current);
49
- signal?.throwIfAborted();
50
- return pathResult;
51
- }
52
- /** Stream complete LF/CRLF lines, preserving their original bytes and bounding retained content. */
53
- async function readLines(file, size, startLine, requestedCount, signal) {
54
- const output = [];
55
- let position = 0, currentLine = 1, currentBytes = 0, returnedBytes = 0, returnedLines = 0;
56
- let fragments = [];
57
- const result = (nextStartLine, totalLines) => {
58
- signal?.throwIfAborted();
59
- let content;
60
- try {
61
- content = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(Buffer.concat(output, returnedBytes));
62
- }
63
- catch {
64
- throw new Error(`Artifact contains invalid UTF-8 text in the requested lines starting at ${startLine}`);
65
- }
66
- return {
67
- content, startLine, endLine: returnedLines ? startLine + returnedLines - 1 : null, lineCount: returnedLines,
68
- ...(totalLines === undefined ? {} : { totalLines }),
69
- truncated: nextStartLine !== null, nextStartLine,
70
- };
71
- };
72
- for (;;) {
73
- signal?.throwIfAborted();
74
- const bytes = Buffer.alloc(MAX_READ_BYTES);
75
- const { bytesRead } = await file.read(bytes, 0, bytes.length, position);
76
- signal?.throwIfAborted();
77
- if (!bytesRead)
78
- break;
79
- let cursor = 0;
80
- while (cursor < bytesRead) {
81
- signal?.throwIfAborted();
82
- const newline = bytes.subarray(0, bytesRead).indexOf(10, cursor);
83
- const end = newline === -1 ? bytesRead : newline + 1;
84
- const fragment = bytes.subarray(cursor, end);
85
- if (currentLine >= startLine) {
86
- if (currentBytes + fragment.length > MAX_READ_BYTES - returnedBytes) {
87
- if (returnedLines)
88
- return result(currentLine);
89
- throw new Error(`Artifact line ${currentLine} exceeds the ${MAX_READ_BYTES}-byte read limit; use a viewer that supports oversized lines`);
90
- }
91
- if (fragment.includes(0))
92
- throw new Error('Binary artifacts require a different viewer');
93
- fragments.push(fragment);
94
- }
95
- currentBytes += fragment.length;
96
- if (newline !== -1) {
97
- if (currentLine >= startLine) {
98
- output.push(...fragments);
99
- returnedBytes += currentBytes;
100
- returnedLines++;
101
- fragments = [];
102
- if (returnedLines === requestedCount || returnedBytes === MAX_READ_BYTES) {
103
- const more = position + end < size;
104
- return result(more ? currentLine + 1 : null, more ? undefined : currentLine);
105
- }
106
- }
107
- currentLine++;
108
- currentBytes = 0;
109
- }
110
- cursor = end;
111
- }
112
- position += bytesRead;
113
- }
114
- if (currentBytes && currentLine >= startLine) {
115
- output.push(...fragments);
116
- returnedBytes += currentBytes;
117
- returnedLines++;
118
- }
119
- return result(null, currentLine - 1 + (currentBytes ? 1 : 0));
120
- }
121
- /** Resolve only declared artifacts inside the prepared input. No writes or shell entry points. */
122
- export async function createArtifactViewer({ worktreePath, artifacts, artifactTypes = {}, signal }) {
123
- signal?.throwIfAborted();
124
- const worktree = await realpath(worktreePath);
125
- signal?.throwIfAborted();
126
- if (!Array.isArray(artifacts) || !artifacts.length)
127
- throw new Error('At least one artifact is required');
128
- const definitions = new Map();
129
- for (const artifact of artifacts) {
130
- signal?.throwIfAborted();
131
- if (artifact.kind === 'generated')
132
- throw new Error('Generated Artifacts require registered data tools.');
133
- if (!/^[A-Za-z0-9_-]{1,64}$/.test(artifact.id ?? '') || definitions.has(artifact.id))
134
- throw new Error('Invalid or duplicate artifact id');
135
- const declared = relativePath(artifact.path);
136
- const configuredType = artifactTypes[artifact.type];
137
- if (!configuredType)
138
- throw new Error(`Unsupported artifact type: ${artifact.type}`);
139
- const type = structuredClone(validateArtifactType(artifact.type, configuredType));
140
- if (type.custom)
141
- throw new Error('This Artifact uses registered TS tools; select one of its declared tools.');
142
- const base = await withoutSymlinks(worktree, declared, signal);
143
- if (!contained(worktree, base))
144
- throw new Error('Artifact symlink escapes the snapshot');
145
- signal?.throwIfAborted();
146
- const info = await stat(base);
147
- signal?.throwIfAborted();
148
- if (!info.isDirectory() && !info.isFile())
149
- throw new Error('Artifact must be a regular file or directory');
150
- if (type.viewer === 'text' && !info.isFile())
151
- throw new Error('A text viewer requires a regular file artifact');
152
- definitions.set(artifact.id, { ...artifact, base, directory: info.isDirectory(), viewer: type.viewer, typeDefinition: type });
153
- }
154
- async function target(artifactId, path = '') {
155
- signal?.throwIfAborted();
156
- const artifact = definitions.get(artifactId);
157
- if (!artifact)
158
- throw new Error('Artifact is not in this review request');
159
- relativePath(path, { empty: true });
160
- if (!artifact.directory && path)
161
- throw new Error('A file artifact has no child paths');
162
- const currentBase = await withoutSymlinks(worktree, artifact.path, signal);
163
- if (currentBase !== artifact.base)
164
- throw new Error('Artifact root changed since viewer creation');
165
- const candidate = artifact.directory ? await withoutSymlinks(artifact.base, path, signal) : artifact.base;
166
- if (!contained(worktree, candidate) || !contained(artifact.base, candidate))
167
- throw new Error('Requested path escapes the artifact');
168
- return { artifact, candidate, path: artifact.directory && path ? `${artifact.path}/${path}` : artifact.path };
169
- }
170
- const viewer = {
171
- signal,
172
- listArtifacts() {
173
- signal?.throwIfAborted();
174
- return [...definitions.values()].map(({ id, type, path, viewer, directory, typeDefinition }) => ({ id, type, path, viewer, directory, toolDescriptions: Object.fromEntries((directory ? ['list', 'read'] : ['read']).map(operation => [operation, toolDescription(typeDefinition, operation, id, 'agent')])) }));
175
- },
176
- getTypeDefinition(artifactId) {
177
- signal?.throwIfAborted();
178
- const artifact = definitions.get(artifactId);
179
- if (!artifact)
180
- throw new Error('Artifact is not in this review request');
181
- return structuredClone(artifact.typeDefinition);
182
- },
183
- async resolveTarget(artifactId, path = '') {
184
- const found = await target(artifactId, path);
185
- const info = await stat(found.candidate);
186
- signal?.throwIfAborted();
187
- if (!info.isDirectory() && !info.isFile())
188
- throw new Error('Artifact target must be a regular file or directory');
189
- return { absolutePath: found.candidate, directory: info.isDirectory() };
190
- },
191
- async list(args) {
192
- signal?.throwIfAborted();
193
- argumentsObject(args, ['artifactId', 'path', 'offset', 'limit']);
194
- const artifactId = artifactIdentifier(args.artifactId);
195
- const path = relativePath(args.path === undefined ? '' : args.path, { empty: true });
196
- const offset = integer(args.offset, 0, 0, Number.MAX_SAFE_INTEGER, 'offset');
197
- const limit = integer(args.limit, MAX_ENTRIES, 1, MAX_ENTRIES, 'limit');
198
- const found = await target(artifactId, relativePath(path, { empty: true }));
199
- signal?.throwIfAborted();
200
- const info = await stat(found.candidate);
201
- signal?.throwIfAborted();
202
- if (!info.isDirectory())
203
- throw new Error('Listing requires a directory');
204
- const all = await readdir(found.candidate, { withFileTypes: true });
205
- signal?.throwIfAborted();
206
- all.sort((a, b) => a.name.localeCompare(b.name));
207
- const entries = all.slice(offset, offset + limit).map(x => ({
208
- name: x.name, path: path ? `${path}/${x.name}` : x.name,
209
- kind: x.isDirectory() ? 'directory' : x.isFile() ? 'file' : x.isSymbolicLink() ? 'symlink' : 'other',
210
- }));
211
- signal?.throwIfAborted();
212
- return { artifactId, path: found.path, type: found.artifact.type, entries, totalEntries: all.length, nextOffset: offset + entries.length < all.length ? offset + entries.length : null };
213
- },
214
- async read(args) {
215
- signal?.throwIfAborted();
216
- argumentsObject(args, ['artifactId', 'path', 'startLine', 'lineCount']);
217
- const artifactId = artifactIdentifier(args.artifactId);
218
- const path = args.path === undefined ? '' : args.path;
219
- const startLine = integer(args.startLine, 1, 1, Number.MAX_SAFE_INTEGER, 'startLine');
220
- const lineCount = integer(args.lineCount, DEFAULT_READ_LINES, 1, MAX_READ_LINES, 'lineCount');
221
- const artifact = definitions.get(artifactId);
222
- if (!artifact)
223
- throw new Error('Artifact is not in this review request');
224
- if (artifact.directory && (!Object.hasOwn(args, 'path') || typeof path !== 'string' || !path))
225
- throw new Error('Reading a directory artifact requires an internal file path');
226
- if (!artifact.directory && Object.hasOwn(args, 'path'))
227
- throw new Error('A file artifact read does not accept path');
228
- const found = await target(artifactId, relativePath(path, { empty: true }));
229
- signal?.throwIfAborted();
230
- const entry = await stat(found.candidate);
231
- signal?.throwIfAborted();
232
- if (!entry.isFile())
233
- throw new Error('Reading requires a regular file; list the directory first');
234
- const file = await open(found.candidate, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
235
- try {
236
- signal?.throwIfAborted();
237
- const info = await file.stat();
238
- signal?.throwIfAborted();
239
- if (!info.isFile())
240
- throw new Error('Reading requires a regular file; list the directory first');
241
- return { artifactId, path: found.path, type: found.artifact.type, ...await readLines(file, info.size, startLine, lineCount, signal) };
242
- }
243
- finally {
244
- await file.close();
245
- }
246
- },
247
- };
248
- return viewer;
249
- }
250
- /** Viewer adapter: file is relative to a directory artifact, never the repo root. */
251
- export async function readArtifact({ worktreePath, artifacts, artifactTypes, signal, artifactId, file = '', offset, limit, startLine, lineCount }) {
252
- if (typeof file !== 'string')
253
- throw new Error('Artifact file must be an internal relative path string');
254
- const viewer = await createArtifactViewer({ worktreePath, artifacts, artifactTypes, signal });
255
- const artifact = viewer.listArtifacts().find(x => x.id === artifactId);
256
- if (!artifact)
257
- throw new Error('Artifact is not in this review request');
258
- if (artifact.directory && !file) {
259
- if (startLine !== undefined || lineCount !== undefined)
260
- throw new Error('Directory listing does not accept startLine or lineCount');
261
- const result = await viewer.list({ artifactId, offset, limit });
262
- return { ...result, content: result.entries.map(x => `${x.kind === 'directory' ? '▸' : '·'} ${x.path}`).join('\n'), directory: true };
263
- }
264
- if (offset !== undefined || limit !== undefined)
265
- throw new Error('Reading uses startLine and lineCount, not offset or limit');
266
- if (!artifact.directory && file)
267
- throw new Error('A file artifact read does not accept an internal file path');
268
- return viewer.read({ artifactId, ...(artifact.directory ? { path: file } : {}), startLine, lineCount });
269
- }
270
- /** Each request receives concrete viewer entry points for its own declared artifacts. */
271
- export function createArtifactTools(viewer, { audience = 'agent', allowLegacy = true } = {}) {
272
- const handlers = new Map();
273
- const tools = [];
274
- for (const artifact of viewer.listArtifacts()) {
275
- const typeDefinition = viewer.getTypeDefinition(artifact.id);
276
- const configured = audience === 'viewer' ? { read: {}, list: {} } : artifactAudienceTools(typeDefinition, audience, { allowLegacy });
277
- for (const operation of artifact.directory ? ['list', 'read'] : ['read']) {
278
- if (!Object.hasOwn(configured, operation))
279
- continue;
280
- const name = `${operation}_${artifact.id}`;
281
- const properties = {
282
- ...(artifact.directory ? { path: { type: 'string', ...(operation === 'read' ? { minLength: 1 } : {}), description: operation === 'read' ? 'Required file path inside this artifact, relative to its root.' : 'Directory path inside this artifact. Omit or use an empty string to list its root.' } } : {}),
283
- ...(operation === 'read' ? {
284
- startLine: { type: 'integer', minimum: 1, maximum: Number.MAX_SAFE_INTEGER, default: 1, description: 'First line to read, numbered from 1.' },
285
- lineCount: { type: 'integer', minimum: 1, maximum: MAX_READ_LINES, default: DEFAULT_READ_LINES, description: `Maximum complete lines to read, preserving original line endings and bounded to ${MAX_READ_BYTES} UTF-8 bytes per response. An oversized single line is an error. Follow nextStartLine to continue when truncated.` },
286
- } : {
287
- offset: { type: 'integer', minimum: 0, maximum: Number.MAX_SAFE_INTEGER, default: 0, description: 'Entry offset for pagination.' },
288
- limit: { type: 'integer', minimum: 1, maximum: MAX_ENTRIES, default: MAX_ENTRIES },
289
- }),
290
- };
291
- tools.push({ artifactId: artifact.id, operation, name, description: toolDescription(typeDefinition, operation, artifact.id, audience === 'viewer' ? undefined : audience), inputSchema: { type: 'object', properties, ...(artifact.directory && operation === 'read' ? { required: ['path'] } : {}), additionalProperties: false }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false } });
292
- handlers.set(name, async (args) => {
293
- argumentsObject(args, Object.keys(properties));
294
- return viewer[operation]({ ...args, artifactId: artifact.id });
295
- });
296
- }
297
- }
298
- function validateArguments(name, args) {
299
- const tool = tools.find(candidate => candidate.name === name);
300
- if (!tool)
301
- throw new Error('Unknown artifact tool');
302
- return validateToolArguments(tool.inputSchema, args);
303
- }
304
- async function call(name, args = {}) {
305
- const handler = handlers.get(name);
306
- if (!handler)
307
- throw new Error('Unknown artifact tool');
308
- viewer.signal?.throwIfAborted();
309
- const result = await handler(validateArguments(name, args));
310
- viewer.signal?.throwIfAborted();
311
- return result;
312
- }
313
- return { tools, call, validateArguments };
314
- }
315
- export function validateToolArguments(schema, args) {
316
- argumentsObject(args, Object.keys(schema.properties));
317
- for (const name of schema.required ?? []) {
318
- if (!Object.hasOwn(args, name) || args[name] === undefined)
319
- throw new Error(`Missing required artifact tool argument: ${name}`);
320
- }
321
- for (const [name, property] of Object.entries(schema.properties)) {
322
- const value = args[name];
323
- if (value === undefined)
324
- continue;
325
- if (property.type === 'string') {
326
- if (typeof value !== 'string' || (property.minLength !== undefined && value.length < property.minLength))
327
- throw new Error(`Invalid ${name}`);
328
- }
329
- else {
330
- integer(value, property.default ?? 0, property.minimum ?? Number.MIN_SAFE_INTEGER, property.maximum ?? Number.MAX_SAFE_INTEGER, name);
331
- }
332
- }
333
- return { ...args };
334
- }
335
- /** Record the same successful observations for MCP and direct provider adapters. */
336
- export function createAuditedArtifactTools(viewer, { onCall } = {}) {
337
- const registry = createArtifactTools(viewer);
338
- const calls = [];
339
- async function call(name, args = {}) {
340
- // Clone before awaiting so caller mutations cannot alter the audited arguments.
341
- const actualArgs = structuredClone(registry.validateArguments(name, args));
342
- const data = await registry.call(name, actualArgs);
343
- viewer.signal?.throwIfAborted();
344
- const observation = 'entries' in data
345
- ? { artifactId: data.artifactId, operation: 'list' }
346
- : { artifactId: data.artifactId, operation: 'read', startLine: data.startLine, endLine: data.endLine, lineCount: data.lineCount, ...(data.totalLines === undefined ? {} : { totalLines: data.totalLines }) };
347
- const entry = { name, arguments: actualArgs, observation, at: new Date().toISOString() };
348
- // A persistence callback must succeed before the adapter returns a successful call.
349
- await onCall?.(structuredClone(entry));
350
- viewer.signal?.throwIfAborted();
351
- calls.push(entry);
352
- return data;
353
- }
354
- return { tools: registry.tools, call, validateArguments: registry.validateArguments, get toolCalls() { return structuredClone(calls); } };
355
- }
356
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/artifacts/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/artifacts/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -1,4 +1,3 @@
1
- import type { ArtifactGroupReference } from '../contracts.js';
2
1
  export type InstructionPart = {
3
2
  type: 'text';
4
3
  text: string;
@@ -6,18 +5,16 @@ export type InstructionPart = {
6
5
  type: 'artifact';
7
6
  artifactId: string;
8
7
  };
9
- /** Resolve only bare IDs already supplied to this request; never grant scope or evaluate code. */
8
+ /** Extract only bare reference tokens; all existing literal and escape rules apply. */
9
+ export declare function instructionReferences(instruction: string): string[];
10
+ /** Render references only within the already admitted scope, preserving the stored source. */
10
11
  export declare function parseArtifactInstruction(instruction: string, artifacts: readonly {
11
12
  id: string;
12
- }[], groups?: readonly ArtifactGroupReference[]): InstructionPart[];
13
- /** Presentation only: actual tool definitions remain in the existing tool channel. */
13
+ }[], references?: Readonly<Record<string, string>>): InstructionPart[];
14
+ /** Presentation only: actual definitions remain in the tool channel. */
14
15
  export declare function digestArtifactInstruction(instruction: string, artifacts: readonly {
15
16
  id: string;
16
17
  }[], tools: readonly {
17
18
  artifactId: string;
18
19
  name: string;
19
- }[], groups?: readonly ArtifactGroupReference[]): string;
20
- /** Expand presentation references only within the request's already granted leaf scope. */
21
- export declare function artifactInstructionMembers(id: string, artifacts: readonly {
22
- id: string;
23
- }[], groups?: readonly ArtifactGroupReference[]): string[];
20
+ }[], references?: Readonly<Record<string, string>>): string;
@@ -33,9 +33,28 @@ function closingBrace(source, start) {
33
33
  }
34
34
  return -1;
35
35
  }
36
- /** Resolve only bare IDs already supplied to this request; never grant scope or evaluate code. */
37
- export function parseArtifactInstruction(instruction, artifacts, groups = []) {
38
- const allowed = new Set([...artifacts, ...groups].map(artifact => artifact.id));
36
+ /** Extract only bare reference tokens; all existing literal and escape rules apply. */
37
+ export function instructionReferences(instruction) {
38
+ const result = new Set();
39
+ let cursor = 0;
40
+ while (cursor < instruction.length) {
41
+ if (instruction[cursor] !== '{') {
42
+ cursor++;
43
+ continue;
44
+ }
45
+ const end = closingBrace(instruction, cursor);
46
+ if (end === -1)
47
+ break;
48
+ const id = instruction.slice(cursor + 1, end);
49
+ if (instruction[cursor - 1] !== '$' && !escaped(instruction, cursor) && identifier.test(id))
50
+ result.add(id);
51
+ cursor = end + 1;
52
+ }
53
+ return [...result];
54
+ }
55
+ /** Render references only within the already admitted scope, preserving the stored source. */
56
+ export function parseArtifactInstruction(instruction, artifacts, references = {}) {
57
+ const allowed = new Set(artifacts.map(artifact => artifact.id));
39
58
  const parts = [];
40
59
  let textStart = 0, cursor = 0;
41
60
  while (cursor < instruction.length) {
@@ -46,8 +65,8 @@ export function parseArtifactInstruction(instruction, artifacts, groups = []) {
46
65
  const end = closingBrace(instruction, cursor);
47
66
  if (end === -1)
48
67
  break;
49
- const artifactId = instruction.slice(cursor + 1, end);
50
- if (instruction[cursor - 1] !== '$' && !escaped(instruction, cursor) && identifier.test(artifactId) && allowed.has(artifactId)) {
68
+ const name = instruction.slice(cursor + 1, end), artifactId = Object.hasOwn(references, name) ? references[name] : name;
69
+ if (instruction[cursor - 1] !== '$' && !escaped(instruction, cursor) && identifier.test(name) && allowed.has(artifactId)) {
51
70
  if (textStart < cursor)
52
71
  parts.push({ type: 'text', text: instruction.slice(textStart, cursor) });
53
72
  parts.push({ type: 'artifact', artifactId });
@@ -59,36 +78,9 @@ export function parseArtifactInstruction(instruction, artifacts, groups = []) {
59
78
  parts.push({ type: 'text', text: instruction.slice(textStart) });
60
79
  return parts;
61
80
  }
62
- /** Presentation only: actual tool definitions remain in the existing tool channel. */
63
- export function digestArtifactInstruction(instruction, artifacts, tools, groups = []) {
64
- const names = new Map();
65
- for (const tool of tools) {
66
- if (!names.has(tool.artifactId))
67
- names.set(tool.artifactId, new Set());
68
- names.get(tool.artifactId).add(tool.name);
69
- }
70
- const describe = (id) => ({ artifact: id, tools: [...(names.get(id) ?? [])] });
71
- return parseArtifactInstruction(instruction, artifacts, groups).map(part => part.type === 'text' ? part.text
72
- : JSON.stringify(groups.some(group => group.id === part.artifactId)
73
- ? { artifactGroup: part.artifactId, members: artifactInstructionMembers(part.artifactId, artifacts, groups).map(describe) }
74
- : describe(part.artifactId))).join('');
75
- }
76
- /** Expand presentation references only within the request's already granted leaf scope. */
77
- export function artifactInstructionMembers(id, artifacts, groups = []) {
78
- const leaves = new Set(artifacts.map(artifact => artifact.id));
79
- const byId = new Map(groups.map(group => [group.id, group]));
80
- const visited = new Set(), result = new Set();
81
- const visit = (current) => {
82
- if (visited.has(current))
83
- return;
84
- visited.add(current);
85
- if (leaves.has(current))
86
- result.add(current);
87
- else
88
- for (const member of byId.get(current)?.members ?? [])
89
- visit(member);
90
- };
91
- visit(id);
92
- return [...result];
81
+ /** Presentation only: actual definitions remain in the tool channel. */
82
+ export function digestArtifactInstruction(instruction, artifacts, tools, references = {}) {
83
+ return parseArtifactInstruction(instruction, artifacts, references).map(part => part.type === 'text' ? part.text
84
+ : JSON.stringify({ artifact: part.artifactId, tools: tools.filter(tool => tool.artifactId === part.artifactId).map(tool => tool.name) })).join('');
93
85
  }
94
86
  //# sourceMappingURL=instruction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../../src/artifacts/instruction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../../src/artifacts/instruction.ts"],"names":[],"mappings":"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"}
@@ -3,20 +3,19 @@ import { readFile, appendFile } from 'node:fs/promises';
3
3
  import { createInterface } from 'node:readline';
4
4
  import { pathToFileURL } from 'node:url';
5
5
  import { createReviewTools, toToolContent } from '../tools/runner.js';
6
+ import { safeToolFailure } from '../tools/diagnostics.js';
6
7
  import { packageVersion } from '../runtime-paths.js';
7
8
  const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
8
- const errorMessage = (error) => error instanceof Error ? error.message : 'Artifact viewer unavailable';
9
9
  function artifactReference(value) {
10
- return object(value) && typeof value.id === 'string' && typeof value.type === 'string' && (value.kind === 'generated' ? typeof value.source === 'string' && object(value.input) : typeof value.path === 'string');
10
+ return object(value) && typeof value.id === 'string' && typeof value.path === 'string' && object(value.views) && object(value.mounts) && object(value.children);
11
11
  }
12
12
  function parseManifest(value) {
13
13
  if (!object(value) || typeof value.worktreePath !== 'string' || !Array.isArray(value.artifacts) || !value.artifacts.every(artifactReference) ||
14
- (value.artifactTypes !== undefined && !object(value.artifactTypes)) || (value.auditPath !== undefined && typeof value.auditPath !== 'string') ||
15
- (value.runDir !== undefined && typeof value.runDir !== 'string') || (value.criticId !== undefined && typeof value.criticId !== 'string') || (value.configManifest !== undefined && !object(value.configManifest)) ||
16
- (value.artifactGroups !== undefined && (!Array.isArray(value.artifactGroups) || !value.artifactGroups.every(group => object(group) && typeof group.id === 'string' && Array.isArray(group.members) && group.members.every(member => typeof member === 'string'))))) {
14
+ !object(value.configManifest) || value.configManifest.version !== 2 || (value.auditPath !== undefined && typeof value.auditPath !== 'string') ||
15
+ (value.runDir !== undefined && typeof value.runDir !== 'string') || (value.criticId !== undefined && typeof value.criticId !== 'string'))
17
16
  throw new Error('Invalid Artifact MCP manifest');
18
- }
19
- return { worktreePath: value.worktreePath, artifacts: value.artifacts, artifactTypes: value.artifactTypes, auditPath: value.auditPath, configManifest: value.configManifest, runDir: value.runDir, criticId: value.criticId, artifactGroups: value.artifactGroups };
17
+ return { worktreePath: value.worktreePath, artifacts: value.artifacts, auditPath: value.auditPath,
18
+ configManifest: value.configManifest, runDir: value.runDir, criticId: value.criticId };
20
19
  }
21
20
  function parseRequest(line) {
22
21
  if (Buffer.byteLength(line) > 64 * 1024)
@@ -62,10 +61,10 @@ export async function serveArtifactMcp({ manifestPath, input = process.stdin, ou
62
61
  throw new Error('Unknown artifact tool');
63
62
  const args = params.arguments === undefined ? {} : params.arguments;
64
63
  const data = await registry.call(params.name, args);
65
- result = { content: await toToolContent(data), isError: false };
64
+ result = { content: await toToolContent(data), isError: data.isError === true };
66
65
  }
67
66
  catch (error) {
68
- result = { content: [{ type: 'text', text: errorMessage(error) }], isError: true };
67
+ result = { content: [{ type: 'text', text: safeToolFailure(error).message }], isError: true };
69
68
  }
70
69
  }
71
70
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/artifacts/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/artifacts/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ArtifactDefinition, ArtifactRelation } from '../definitions.js';
2
+ import type { ArtifactReference } from './index.js';
3
+ /** Composition grants input access, while instruction dependencies govern verification. */
4
+ export declare function resolveArtifactScope(artifacts: Record<string, ArtifactDefinition>, roots: readonly string[]): {
5
+ artifacts: ArtifactReference[];
6
+ };
7
+ /** A finite set of material and verification dependencies, including cycles. */
8
+ export declare function dependencyClosure(relations: readonly ArtifactRelation[], roots: readonly string[]): string[];
9
+ export declare function artifactReferenceMetadata(artifacts: readonly ArtifactReference[]): {
10
+ id: string;
11
+ path: string;
12
+ }[];