@metamesh/cli 0.0.0-stage → 0.14.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 (99) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/LICENSE +200 -0
  3. package/README.md +86 -2
  4. package/dist/authoring/artifacts.d.ts +15 -0
  5. package/dist/authoring/artifacts.d.ts.map +1 -0
  6. package/dist/authoring/artifacts.js +347 -0
  7. package/dist/authoring/artifacts.js.map +1 -0
  8. package/dist/authoring/capture/render-client.js +4222 -0
  9. package/dist/authoring/capture/render-client.js.LEGAL.txt +9 -0
  10. package/dist/authoring/capture/render-client.js.map +7 -0
  11. package/dist/authoring/check.d.ts +4 -0
  12. package/dist/authoring/check.d.ts.map +1 -0
  13. package/dist/authoring/check.js +118 -0
  14. package/dist/authoring/check.js.map +1 -0
  15. package/dist/authoring/environment.d.ts +29 -0
  16. package/dist/authoring/environment.d.ts.map +1 -0
  17. package/dist/authoring/environment.js +182 -0
  18. package/dist/authoring/environment.js.map +1 -0
  19. package/dist/authoring/errors.d.ts +13 -0
  20. package/dist/authoring/errors.d.ts.map +1 -0
  21. package/dist/authoring/errors.js +43 -0
  22. package/dist/authoring/errors.js.map +1 -0
  23. package/dist/authoring/render-client.d.ts +6 -0
  24. package/dist/authoring/render-client.d.ts.map +1 -0
  25. package/dist/authoring/render-client.js +55 -0
  26. package/dist/authoring/render-client.js.map +1 -0
  27. package/dist/authoring/render-scene.d.ts +22 -0
  28. package/dist/authoring/render-scene.d.ts.map +1 -0
  29. package/dist/authoring/render-scene.js +139 -0
  30. package/dist/authoring/render-scene.js.map +1 -0
  31. package/dist/authoring/render-types.d.ts +81 -0
  32. package/dist/authoring/render-types.d.ts.map +1 -0
  33. package/dist/authoring/render-types.js +2 -0
  34. package/dist/authoring/render-types.js.map +1 -0
  35. package/dist/authoring/render.d.ts +23 -0
  36. package/dist/authoring/render.d.ts.map +1 -0
  37. package/dist/authoring/render.js +243 -0
  38. package/dist/authoring/render.js.map +1 -0
  39. package/dist/authoring/run.d.ts +7 -0
  40. package/dist/authoring/run.d.ts.map +1 -0
  41. package/dist/authoring/run.js +308 -0
  42. package/dist/authoring/run.js.map +1 -0
  43. package/dist/authoring/types.d.ts +175 -0
  44. package/dist/authoring/types.d.ts.map +1 -0
  45. package/dist/authoring/types.js +3 -0
  46. package/dist/authoring/types.js.map +1 -0
  47. package/dist/authoring/worker.d.ts +15 -0
  48. package/dist/authoring/worker.d.ts.map +1 -0
  49. package/dist/authoring/worker.js +163 -0
  50. package/dist/authoring/worker.js.map +1 -0
  51. package/dist/authoring.d.ts +12 -0
  52. package/dist/authoring.d.ts.map +1 -0
  53. package/dist/authoring.js +9 -0
  54. package/dist/authoring.js.map +1 -0
  55. package/dist/docs/guides/agent-authoring.md +240 -0
  56. package/dist/docs/guides/package.md +87 -0
  57. package/dist/docs/manifest.json +554 -0
  58. package/dist/docs/reference/authoring/AUTHORING_PROTOCOL_VERSION.md +9 -0
  59. package/dist/docs/reference/authoring/AuthoringDiagnostic.md +22 -0
  60. package/dist/docs/reference/authoring/AuthoringEnvironment.md +15 -0
  61. package/dist/docs/reference/authoring/AuthoringError.md +16 -0
  62. package/dist/docs/reference/authoring/AuthoringFailure-type.md +18 -0
  63. package/dist/docs/reference/authoring/AuthoringKind.md +10 -0
  64. package/dist/docs/reference/authoring/AuthoringPhase.md +10 -0
  65. package/dist/docs/reference/authoring/CapturedBuffer.md +14 -0
  66. package/dist/docs/reference/authoring/CapturedGeometry.md +14 -0
  67. package/dist/docs/reference/authoring/CapturedPart.md +19 -0
  68. package/dist/docs/reference/authoring/CapturedResource.md +15 -0
  69. package/dist/docs/reference/authoring/CapturedRun.md +14 -0
  70. package/dist/docs/reference/authoring/CapturedRunManifest.md +40 -0
  71. package/dist/docs/reference/authoring/CheckOptions.md +18 -0
  72. package/dist/docs/reference/authoring/CheckSuccess.md +16 -0
  73. package/dist/docs/reference/authoring/DocumentationEntry.md +20 -0
  74. package/dist/docs/reference/authoring/DocumentationManifest.md +15 -0
  75. package/dist/docs/reference/authoring/DocumentationSearchResult.md +13 -0
  76. package/dist/docs/reference/authoring/InstalledAuthoringPackage.md +15 -0
  77. package/dist/docs/reference/authoring/RenderCamera.md +22 -0
  78. package/dist/docs/reference/authoring/RenderFormat.md +10 -0
  79. package/dist/docs/reference/authoring/RenderOptions.md +20 -0
  80. package/dist/docs/reference/authoring/RenderResult.md +15 -0
  81. package/dist/docs/reference/authoring/RenderView.md +10 -0
  82. package/dist/docs/reference/authoring/RenderedImage.md +23 -0
  83. package/dist/docs/reference/authoring/RunOptions.md +25 -0
  84. package/dist/docs/reference/authoring/RunSuccess.md +14 -0
  85. package/dist/docs/reference/authoring/authoringFailure-value.md +10 -0
  86. package/dist/docs/reference/authoring/checkAuthoringSource.md +10 -0
  87. package/dist/docs/reference/authoring/discoverAuthoringEnvironment.md +13 -0
  88. package/dist/docs/reference/authoring/inspectCapturedRun.md +15 -0
  89. package/dist/docs/reference/authoring/installAuthoringBrowser.md +13 -0
  90. package/dist/docs/reference/authoring/readCapturedRun.md +10 -0
  91. package/dist/docs/reference/authoring/renderCapturedRun.md +13 -0
  92. package/dist/docs/reference/authoring/runAuthoringSource.md +13 -0
  93. package/dist/docs/reference/authoring/searchAuthoringDocumentation.md +16 -0
  94. package/dist/docs/reference/authoring/showAuthoringDocumentation.md +12 -0
  95. package/dist/metamesh.d.ts +3 -0
  96. package/dist/metamesh.d.ts.map +1 -0
  97. package/dist/metamesh.js +183 -0
  98. package/dist/metamesh.js.map +1 -0
  99. package/package.json +63 -3
@@ -0,0 +1,347 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readFile, rename, stat, writeFile } from "node:fs/promises";
3
+ import { join, resolve } from "node:path";
4
+ import { defaultModelingLimits } from "@metamesh/modeling/engine";
5
+ import { analyzeTriangleMesh, composeTransform3, eulerTransform3, transformTriangleMesh, translationTransform3, } from "@metamesh/modeling/geometry";
6
+ import { authoringPackageNames, confinedFile } from "./environment.js";
7
+ import { AuthoringError, isRecord } from "./errors.js";
8
+ export function sha256(value) {
9
+ return createHash("sha256").update(value).digest("hex");
10
+ }
11
+ export async function writeAtomicJson(file, value) {
12
+ const temporary = `${file}.pending`;
13
+ await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, { flag: "wx" });
14
+ await rename(temporary, file);
15
+ }
16
+ export async function captureSnapshot(directory, snapshot, metadata, export3mf) {
17
+ await mkdir(join(directory, "geometry"), { recursive: true });
18
+ const resources = [];
19
+ const parts = [];
20
+ const seen = new Map();
21
+ const store = async (path, bytes) => {
22
+ await writeFile(join(directory, path), bytes, { flag: "wx" });
23
+ return { path, bytes: bytes.byteLength, sha256: sha256(bytes) };
24
+ };
25
+ for (const part of snapshot.parts) {
26
+ const positions = part.geometry.positions;
27
+ const indices = part.geometry.indices;
28
+ const positionBytes = new Uint8Array(positions.buffer, positions.byteOffset, positions.byteLength);
29
+ const indexBytes = new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength);
30
+ const key = `${sha256(positionBytes)}:${sha256(indexBytes)}`;
31
+ let resourceId = seen.get(key);
32
+ if (resourceId === undefined) {
33
+ resourceId = `geometry-${resources.length}`;
34
+ seen.set(key, resourceId);
35
+ resources.push({
36
+ id: resourceId,
37
+ positions: await store(`geometry/${resourceId}.positions.f32`, positionBytes),
38
+ indices: await store(`geometry/${resourceId}.indices.u32`, indexBytes),
39
+ measurements: part.geometry.measurements,
40
+ });
41
+ }
42
+ parts.push({
43
+ id: part.id,
44
+ resourceId,
45
+ position: part.position,
46
+ rotation: part.rotation,
47
+ measurements: part.measurements,
48
+ ...(part.color === undefined ? {} : { color: part.color }),
49
+ });
50
+ }
51
+ const manifest = {
52
+ ...metadata,
53
+ bounds: snapshot.bounds,
54
+ stats: snapshot.stats,
55
+ diagnostics: snapshot.diagnostics,
56
+ dependencies: snapshot.dependencies,
57
+ resources,
58
+ parts,
59
+ ...(export3mf === undefined
60
+ ? {}
61
+ : { export3mf: await store("model.3mf", new Uint8Array(export3mf)) }),
62
+ };
63
+ await writeAtomicJson(join(directory, "manifest.json"), manifest);
64
+ return manifest;
65
+ }
66
+ function invalid(message) {
67
+ throw new AuthoringError("artifact", "INVALID_ARTIFACT", message);
68
+ }
69
+ const vector = (value) => Array.isArray(value) &&
70
+ value.length === 3 &&
71
+ value.every((number) => typeof number === "number" && Number.isFinite(number));
72
+ const bounds = (value) => isRecord(value) &&
73
+ vector(value.min) &&
74
+ vector(value.max) &&
75
+ value.min.every((number, axis) => number <= value.max[axis]);
76
+ const positiveInteger = (value) => typeof value === "number" && Number.isSafeInteger(value) && value > 0;
77
+ const identifier = (value) => typeof value === "string" && value.length <= 64 && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value);
78
+ const strings = (value) => Array.isArray(value) &&
79
+ value.every((item) => typeof item === "string") &&
80
+ new Set(value).size === value.length;
81
+ function jsonData(value, depth = 0) {
82
+ if (depth > 100)
83
+ return false;
84
+ if (value === null || typeof value === "string" || typeof value === "boolean")
85
+ return true;
86
+ if (typeof value === "number")
87
+ return Number.isFinite(value);
88
+ if (Array.isArray(value))
89
+ return value.every((item) => jsonData(item, depth + 1));
90
+ return isRecord(value) && Object.values(value).every((item) => jsonData(item, depth + 1));
91
+ }
92
+ function bufferDescriptor(value) {
93
+ return (isRecord(value) &&
94
+ typeof value.path === "string" &&
95
+ value.path.length > 0 &&
96
+ !isAbsolutePath(value.path) &&
97
+ positiveInteger(value.bytes) &&
98
+ value.bytes <= 1024 * 1024 * 1024 &&
99
+ typeof value.sha256 === "string" &&
100
+ /^[a-f0-9]{64}$/.test(value.sha256));
101
+ }
102
+ function isAbsolutePath(path) {
103
+ return (path.startsWith("/") ||
104
+ path.includes("\\") ||
105
+ path.includes(":") ||
106
+ path.split("/").some((item) => item === ".." || item === "." || item.length === 0));
107
+ }
108
+ function measurements(value) {
109
+ return (isRecord(value) &&
110
+ bounds(value.bounds) &&
111
+ ["signedVolume", "surfaceArea"].every((key) => typeof value[key] === "number" && Number.isFinite(value[key])) &&
112
+ positiveInteger(value.triangleCount) &&
113
+ positiveInteger(value.vertexCount) &&
114
+ (value.connectedComponentCount === undefined ||
115
+ positiveInteger(value.connectedComponentCount)) &&
116
+ (value.edgeCount === undefined || positiveInteger(value.edgeCount)));
117
+ }
118
+ function sameMeasurements(actual, recorded) {
119
+ return (actual.vertexCount === recorded.vertexCount &&
120
+ actual.triangleCount === recorded.triangleCount &&
121
+ actual.signedVolume === recorded.signedVolume &&
122
+ actual.surfaceArea === recorded.surfaceArea &&
123
+ actual.connectedComponentCount === recorded.connectedComponentCount &&
124
+ actual.edgeCount === recorded.edgeCount &&
125
+ JSON.stringify(actual.bounds) === JSON.stringify(recorded.bounds));
126
+ }
127
+ function manifestFrom(value) {
128
+ const stats = isRecord(value) && isRecord(value.stats) ? value.stats : undefined;
129
+ const policy = isRecord(value) && isRecord(value.policy) ? value.policy : undefined;
130
+ const limits = policy !== undefined && isRecord(policy.limits) ? policy.limits : undefined;
131
+ const dependencies = isRecord(value) && isRecord(value.dependencies) ? value.dependencies : undefined;
132
+ if (!isRecord(value) ||
133
+ value.formatVersion !== 1 ||
134
+ value.status !== "complete" ||
135
+ !identifier(value.runId) ||
136
+ typeof value.createdAt !== "string" ||
137
+ !Number.isFinite(Date.parse(value.createdAt)) ||
138
+ (value.kind !== "model" && value.kind !== "generator") ||
139
+ !isRecord(value.source) ||
140
+ typeof value.source.entry !== "string" ||
141
+ value.source.entry.length === 0 ||
142
+ value.source.entry.includes("\\") ||
143
+ value.source.entry.includes("\0") ||
144
+ typeof value.source.fingerprint !== "string" ||
145
+ !/^[a-f0-9]{64}$/.test(value.source.fingerprint) ||
146
+ !isRecord(value.packages) ||
147
+ !Object.entries(value.packages).every(([name, version]) => authoringPackageNames.includes(name) &&
148
+ typeof version === "string" &&
149
+ /^(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)$/.test(version)) ||
150
+ typeof value.packages["@metamesh/modeling"] !== "string" ||
151
+ (value.kind === "generator" && typeof value.packages["@metamesh/generator-sdk"] !== "string") ||
152
+ new Set(Object.values(value.packages)).size !== 1 ||
153
+ !isRecord(value.parameters) ||
154
+ !jsonData(value.parameters) ||
155
+ !Array.isArray(value.assets) ||
156
+ !value.assets.every((asset) => isRecord(asset) &&
157
+ Object.keys(asset).length === 3 &&
158
+ typeof asset.faceId === "string" &&
159
+ /^[a-z0-9][a-z0-9/-]{0,159}$/.test(asset.faceId) &&
160
+ typeof asset.revision === "string" &&
161
+ /^[a-f0-9]{64}$/.test(asset.revision) &&
162
+ typeof asset.weight === "number" &&
163
+ Number.isInteger(asset.weight) &&
164
+ asset.weight >= 1 &&
165
+ asset.weight <= 1000) ||
166
+ !Array.isArray(value.diagnostics) ||
167
+ !value.diagnostics.every((issue) => isRecord(issue) &&
168
+ issue.severity === "warning" &&
169
+ typeof issue.message === "string" &&
170
+ issue.message.trim().length > 0 &&
171
+ (issue.parameterId === undefined ||
172
+ (typeof issue.parameterId === "string" &&
173
+ Object.hasOwn(value.parameters, issue.parameterId)))) ||
174
+ limits === undefined ||
175
+ !positiveInteger(limits.maxParts) ||
176
+ Object.keys(limits).length !== Object.keys(defaultModelingLimits).length ||
177
+ !Object.entries(defaultModelingLimits).every(([key, ceiling]) => positiveInteger(limits[key]) &&
178
+ limits[key] >= (key === "maxCircularSegments" ? 3 : 1) &&
179
+ limits[key] <= ceiling) ||
180
+ !positiveInteger(policy?.timeoutMs) ||
181
+ policy.timeoutMs > 3600000 ||
182
+ !bounds(value.bounds) ||
183
+ !isRecord(value.stats) ||
184
+ ![
185
+ "vertices",
186
+ "triangles",
187
+ "volumeMm3",
188
+ "bytes",
189
+ "buildMs",
190
+ "finalizationMs",
191
+ "generationMs",
192
+ ].every((key) => typeof stats?.[key] === "number" && Number.isFinite(stats[key])) ||
193
+ !["vertices", "triangles", "bytes"].every((key) => positiveInteger(stats?.[key])) ||
194
+ !["buildMs", "finalizationMs", "generationMs"].every((key) => typeof stats?.[key] === "number" && stats[key] >= 0) ||
195
+ dependencies === undefined ||
196
+ !strings(dependencies.modelParameters) ||
197
+ !Array.isArray(dependencies.computations) ||
198
+ !dependencies.computations.every((item) => isRecord(item) &&
199
+ identifier(item.id) &&
200
+ strings(item.parameters) &&
201
+ strings(item.computations)) ||
202
+ !Array.isArray(dependencies.parts) ||
203
+ !dependencies.parts.every((item) => isRecord(item) &&
204
+ identifier(item.id) &&
205
+ strings(item.parameters) &&
206
+ strings(item.computations)) ||
207
+ !Array.isArray(value.resources) ||
208
+ !Array.isArray(value.parts) ||
209
+ value.resources.length === 0 ||
210
+ value.parts.length === 0 ||
211
+ value.parts.length > limits.maxParts ||
212
+ value.resources.length > limits.maxParts ||
213
+ (value.export3mf !== undefined && !bufferDescriptor(value.export3mf)))
214
+ invalid("Unsupported, incomplete, or malformed captured-run manifest.");
215
+ const ids = new Set();
216
+ for (const resource of value.resources) {
217
+ if (!isRecord(resource) ||
218
+ !identifier(resource.id) ||
219
+ ids.has(resource.id) ||
220
+ !measurements(resource.measurements) ||
221
+ !bufferDescriptor(resource.positions) ||
222
+ !bufferDescriptor(resource.indices))
223
+ invalid("Invalid or duplicate captured geometry resource.");
224
+ ids.add(resource.id);
225
+ }
226
+ const partIds = new Set();
227
+ for (const part of value.parts) {
228
+ if (!isRecord(part) ||
229
+ !identifier(part.id) ||
230
+ partIds.has(part.id) ||
231
+ typeof part.resourceId !== "string" ||
232
+ !ids.has(part.resourceId) ||
233
+ !vector(part.position) ||
234
+ !vector(part.rotation) ||
235
+ !measurements(part.measurements) ||
236
+ (part.color !== undefined &&
237
+ (typeof part.color !== "string" || !/^#[a-f0-9]{6}$/i.test(part.color))))
238
+ invalid("Invalid or duplicate captured part placement.");
239
+ partIds.add(part.id);
240
+ }
241
+ const manifest = value;
242
+ const computations = new Set(manifest.dependencies.computations.map(({ id }) => id));
243
+ if (computations.size !== manifest.dependencies.computations.length ||
244
+ manifest.dependencies.parts.length !== manifest.parts.length ||
245
+ new Set(manifest.dependencies.parts.map(({ id }) => id)).size !== manifest.parts.length ||
246
+ manifest.dependencies.parts.some((part) => !partIds.has(part.id)) ||
247
+ [...manifest.dependencies.computations, ...manifest.dependencies.parts].some((item) => item.computations.some((id) => !computations.has(id))))
248
+ invalid("Invalid captured dependency identities or references.");
249
+ return manifest;
250
+ }
251
+ async function readBuffer(directory, descriptor) {
252
+ if (!bufferDescriptor(descriptor))
253
+ invalid("Invalid captured buffer descriptor.");
254
+ const file = await confinedFile(directory, descriptor.path);
255
+ if ((await stat(file)).size !== descriptor.bytes)
256
+ invalid(`Captured buffer length mismatch: ${descriptor.path}`);
257
+ const bytes = new Uint8Array(await readFile(file));
258
+ if (sha256(bytes) !== descriptor.sha256)
259
+ invalid(`Captured buffer digest mismatch: ${descriptor.path}`);
260
+ return bytes;
261
+ }
262
+ /** Reads only immutable captured files. It never imports or executes original author source. */
263
+ export async function readCapturedRun(directory) {
264
+ try {
265
+ const root = resolve(directory);
266
+ const manifestFile = await confinedFile(root, "manifest.json");
267
+ if ((await stat(manifestFile)).size > 16 * 1024 * 1024)
268
+ invalid("Captured manifest exceeds its size limit.");
269
+ const manifest = manifestFrom(JSON.parse(await readFile(manifestFile, "utf8")));
270
+ const resources = [];
271
+ let totalBytes = 0;
272
+ for (const resource of manifest.resources) {
273
+ totalBytes += resource.positions.bytes + resource.indices.bytes;
274
+ if (totalBytes > Math.min(512 * 1024 * 1024, manifest.policy.limits.maxBytes))
275
+ invalid("Captured geometry exceeds its resource byte limit.");
276
+ const positions = await readBuffer(root, resource.positions);
277
+ const indices = await readBuffer(root, resource.indices);
278
+ if (positions.length % 12 !== 0 || indices.length % 12 !== 0)
279
+ invalid("Captured mesh buffers require complete vertices and triangles.");
280
+ const geometry = {
281
+ id: resource.id,
282
+ positions: new Float32Array(positions.buffer),
283
+ indices: new Uint32Array(indices.buffer),
284
+ };
285
+ const facts = analyzeTriangleMesh(geometry, { requireClosed: true, includeTopology: true });
286
+ if (!sameMeasurements(facts, resource.measurements))
287
+ invalid(`Captured measurements do not match geometry ${resource.id}.`);
288
+ resources.push(geometry);
289
+ }
290
+ let vertices = 0;
291
+ let triangles = 0;
292
+ let volume = 0;
293
+ const aggregateBounds = {
294
+ min: [Infinity, Infinity, Infinity],
295
+ max: [-Infinity, -Infinity, -Infinity],
296
+ };
297
+ for (const part of manifest.parts) {
298
+ const resource = resources.find(({ id }) => id === part.resourceId);
299
+ const geometry = [...part.position, ...part.rotation].every((number) => number === 0)
300
+ ? resource
301
+ : transformTriangleMesh(resource, composeTransform3(translationTransform3(part.position), eulerTransform3(part.rotation)));
302
+ const facts = analyzeTriangleMesh(geometry, { requireClosed: true, includeTopology: true });
303
+ if (!sameMeasurements(facts, part.measurements))
304
+ invalid(`Captured placement measurements do not match part ${part.id}.`);
305
+ vertices += facts.vertexCount;
306
+ triangles += facts.triangleCount;
307
+ volume += facts.signedVolume;
308
+ for (let axis = 0; axis < 3; axis++) {
309
+ aggregateBounds.min[axis] = Math.min(aggregateBounds.min[axis], facts.bounds.min[axis]);
310
+ aggregateBounds.max[axis] = Math.max(aggregateBounds.max[axis], facts.bounds.max[axis]);
311
+ }
312
+ }
313
+ if (vertices !== manifest.stats.vertices ||
314
+ triangles !== manifest.stats.triangles ||
315
+ volume !== manifest.stats.volumeMm3 ||
316
+ manifest.stats.bytes < totalBytes ||
317
+ manifest.stats.bytes > manifest.policy.limits.maxBytes ||
318
+ vertices > manifest.policy.limits.maxVertices ||
319
+ triangles > manifest.policy.limits.maxTriangles ||
320
+ JSON.stringify(aggregateBounds) !== JSON.stringify(manifest.bounds))
321
+ invalid("Captured aggregate facts do not match finalized part geometry.");
322
+ if (manifest.export3mf !== undefined)
323
+ await readBuffer(root, manifest.export3mf);
324
+ return { directory: root, manifest, resources };
325
+ }
326
+ catch (error) {
327
+ if (error instanceof AuthoringError)
328
+ throw error;
329
+ throw new AuthoringError("artifact", "INVALID_ARTIFACT", error instanceof Error ? error.message : String(error));
330
+ }
331
+ }
332
+ /**
333
+ * Validates a completed capture and returns its manifest with an optional semantic part selection.
334
+ * Original source is never evaluated; incomplete captures and unknown part IDs reject.
335
+ */
336
+ export async function inspectCapturedRun(directory, partId) {
337
+ const captured = await readCapturedRun(directory);
338
+ const selectedPart = partId === undefined ? undefined : captured.manifest.parts.find(({ id }) => id === partId);
339
+ if (partId !== undefined && selectedPart === undefined)
340
+ throw new AuthoringError("invocation", "PART_NOT_FOUND", `Captured run has no part ${partId}.`);
341
+ return {
342
+ directory: captured.directory,
343
+ manifest: captured.manifest,
344
+ ...(selectedPart === undefined ? {} : { selectedPart }),
345
+ };
346
+ }
347
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/authoring/artifacts.ts"],"names":[],"mappings":"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"}