@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,308 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
+ import { builtinModules } from "node:module";
5
+ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
6
+ import { fileURLToPath, pathToFileURL } from "node:url";
7
+ import { build, transform } from "esbuild";
8
+ import { defaultModelingLimits } from "@metamesh/modeling/engine";
9
+ import { sha256, writeAtomicJson } from "./artifacts.js";
10
+ import { checkAuthoringSource } from "./check.js";
11
+ import { discoverAuthoringEnvironment, projectPackageDirectory } from "./environment.js";
12
+ import { AuthoringError, authoringFailure } from "./errors.js";
13
+ const builtin = new Set([...builtinModules, ...builtinModules.map((name) => `node:${name}`)]);
14
+ async function terminateExecution(child) {
15
+ child.stdout?.destroy();
16
+ child.stderr?.destroy();
17
+ if (process.platform !== "win32") {
18
+ try {
19
+ if (child.pid !== undefined)
20
+ process.kill(-child.pid, "SIGKILL");
21
+ }
22
+ catch {
23
+ child.kill("SIGKILL");
24
+ }
25
+ return;
26
+ }
27
+ if (child.pid === undefined)
28
+ return;
29
+ await new Promise((done) => {
30
+ const killer = spawn("taskkill", ["/PID", String(child.pid), "/T", "/F"], {
31
+ stdio: "ignore",
32
+ windowsHide: true,
33
+ });
34
+ const fallback = setTimeout(() => {
35
+ child.kill("SIGKILL");
36
+ killer.kill();
37
+ done();
38
+ }, 1000);
39
+ const finish = () => {
40
+ clearTimeout(fallback);
41
+ child.kill("SIGKILL");
42
+ done();
43
+ };
44
+ killer.once("error", finish);
45
+ killer.once("close", finish);
46
+ });
47
+ }
48
+ async function bundleEntry(entry, project, outfile, kind, tsconfig) {
49
+ const imports = {};
50
+ const sourceHashes = new Map();
51
+ const capture = {
52
+ name: "preserve-installed-package-identities",
53
+ setup(builder) {
54
+ builder.onResolve({ filter: /^[^./\\]|^@/ }, async (args) => {
55
+ if (args.pluginData === "resolved" || isAbsolute(args.path) || builtin.has(args.path))
56
+ return undefined;
57
+ const resolved = await builder.resolve(args.path, {
58
+ resolveDir: args.resolveDir || project,
59
+ kind: args.kind,
60
+ pluginData: "resolved",
61
+ });
62
+ if (resolved.errors.length > 0)
63
+ return { errors: resolved.errors };
64
+ if (projectPackageDirectory(args.resolveDir || project, args.path) === undefined)
65
+ return { path: resolved.path };
66
+ imports[args.path] = resolved.path;
67
+ return {
68
+ path: args.kind === "require-call" ? resolved.path : pathToFileURL(resolved.path).href,
69
+ external: true,
70
+ };
71
+ });
72
+ builder.onLoad({ filter: /\.(?:[cm]?[jt]sx?|json)$/ }, async (args) => {
73
+ const contents = await readFile(args.path, "utf8");
74
+ sourceHashes.set(resolve(args.path), sha256(contents));
75
+ const extension = args.path.split(".").at(-1);
76
+ const loader = extension === "tsx" || extension === "jsx" || extension === "json"
77
+ ? extension
78
+ : extension.endsWith("ts")
79
+ ? "ts"
80
+ : "js";
81
+ if (!contents.includes("import.meta") || loader === "json")
82
+ return { contents, loader, resolveDir: dirname(args.path) };
83
+ const transformed = await transform(contents, {
84
+ loader,
85
+ sourcefile: args.path,
86
+ sourcemap: "inline",
87
+ sourcesContent: true,
88
+ target: "node24",
89
+ format: "esm",
90
+ define: {
91
+ "import.meta.url": JSON.stringify(pathToFileURL(args.path).href),
92
+ "import.meta.dirname": JSON.stringify(dirname(args.path)),
93
+ "import.meta.filename": JSON.stringify(args.path),
94
+ },
95
+ });
96
+ return { contents: transformed.code, loader: "js", resolveDir: dirname(args.path) };
97
+ });
98
+ },
99
+ };
100
+ const result = await build({
101
+ entryPoints: [entry],
102
+ outfile,
103
+ absWorkingDir: project,
104
+ bundle: true,
105
+ platform: "node",
106
+ format: "esm",
107
+ target: "node24",
108
+ sourcemap: "linked",
109
+ metafile: true,
110
+ logLevel: "silent",
111
+ plugins: [capture],
112
+ ...(tsconfig === undefined ? {} : { tsconfig }),
113
+ });
114
+ // Ask the same import-condition resolver for host entry points, independent of author imports.
115
+ await build({
116
+ stdin: {
117
+ contents: [
118
+ "@metamesh/modeling/engine",
119
+ "@metamesh/generator-sdk",
120
+ "@metamesh/generator-sdk/parameters",
121
+ "@metamesh/generator-sdk/packages",
122
+ ]
123
+ .filter((name) => name === "@metamesh/modeling/engine" || kind === "generator")
124
+ .map((name) => `import ${JSON.stringify(name)};`)
125
+ .join("\n"),
126
+ resolveDir: project,
127
+ },
128
+ absWorkingDir: project,
129
+ bundle: true,
130
+ platform: "node",
131
+ format: "esm",
132
+ write: false,
133
+ logLevel: "silent",
134
+ plugins: [capture],
135
+ });
136
+ const inputs = Object.keys(result.metafile.inputs).sort();
137
+ const hashes = inputs.map((input) => {
138
+ const file = resolve(project, input);
139
+ const fingerprint = sourceHashes.get(file);
140
+ if (fingerprint === undefined)
141
+ throw new AuthoringError("bundle", "UNTRACKED_SOURCE", `Cannot fingerprint bundled source ${input}.`, 1);
142
+ return `${relative(project, file).replaceAll("\\", "/")}:${fingerprint}`;
143
+ });
144
+ return { fingerprint: sha256(hashes.join("\n")), imports };
145
+ }
146
+ async function executeChild(request, runtimeDirectory, timeoutMs, onLog) {
147
+ const requestFile = join(runtimeDirectory, "request.json");
148
+ const resultFile = join(runtimeDirectory, "result.json");
149
+ await writeFile(requestFile, JSON.stringify(request));
150
+ const child = spawn(process.execPath, [
151
+ "--enable-source-maps",
152
+ fileURLToPath(new URL("./worker.js", import.meta.url)),
153
+ requestFile,
154
+ resultFile,
155
+ ], {
156
+ cwd: dirname(request.modulePath),
157
+ stdio: ["ignore", "pipe", "pipe"],
158
+ windowsHide: true,
159
+ detached: process.platform !== "win32",
160
+ });
161
+ let logBytes = 0;
162
+ const append = (chunk) => {
163
+ const available = Math.max(0, 64 * 1024 - logBytes);
164
+ if (available > 0)
165
+ onLog?.(chunk.subarray(0, available).toString("utf8"));
166
+ if (logBytes < 64 * 1024 && logBytes + chunk.length > 64 * 1024)
167
+ onLog?.("\n[MetaMesh author logs truncated at 64 KiB]\n");
168
+ logBytes += chunk.length;
169
+ };
170
+ child.stdout.on("data", append);
171
+ child.stderr.on("data", append);
172
+ let timedOut = false;
173
+ let terminated;
174
+ const timer = setTimeout(() => {
175
+ timedOut = true;
176
+ terminated = terminateExecution(child);
177
+ }, timeoutMs);
178
+ try {
179
+ const code = await new Promise((done, reject) => {
180
+ child.once("error", reject);
181
+ child.once("close", done);
182
+ });
183
+ if (timedOut) {
184
+ await terminated;
185
+ return {
186
+ success: false,
187
+ phase: "execute",
188
+ exitCode: 1,
189
+ diagnostics: [
190
+ {
191
+ code: "EXECUTION_TIMEOUT",
192
+ severity: "error",
193
+ message: `Generation exceeded its ${timeoutMs} ms deadline and was terminated.`,
194
+ },
195
+ ],
196
+ };
197
+ }
198
+ if (code !== 0)
199
+ throw new AuthoringError("execute", "WORKER_FAILED", `Generation process exited with ${code ?? "a signal"}.`);
200
+ return JSON.parse(await readFile(resultFile, "utf8"));
201
+ }
202
+ finally {
203
+ clearTimeout(timer);
204
+ }
205
+ }
206
+ /**
207
+ * Checks and executes trusted local source in a disposable child, then captures its finalized geometry.
208
+ * Returns a success or failure envelope for this fresh attempt; failed attempts cannot be rendered.
209
+ */
210
+ export async function runAuthoringSource(options) {
211
+ let directory;
212
+ let runtimeDirectory;
213
+ try {
214
+ const project = resolve(options.project ?? process.cwd());
215
+ const timeoutMs = options.timeoutMs ?? 30000;
216
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 3600000)
217
+ throw new AuthoringError("invocation", "INVALID_TIMEOUT", "Timeout must be an integer from 1 to 3600000 milliseconds.");
218
+ const limits = { ...defaultModelingLimits, ...options.limits };
219
+ for (const [key, value] of Object.entries(limits))
220
+ if (!Object.hasOwn(defaultModelingLimits, key) ||
221
+ !Number.isSafeInteger(value) ||
222
+ value < (key === "maxCircularSegments" ? 3 : 1) ||
223
+ value > defaultModelingLimits[key])
224
+ throw new AuthoringError("invocation", "INVALID_LIMIT", `Resource limit ${key} must be a positive integer no greater than the engine default.`);
225
+ const runId = randomUUID();
226
+ directory = join(resolve(project, options.output ?? ".metamesh/runs"), runId);
227
+ await mkdir(directory, { recursive: true });
228
+ const checked = await checkAuthoringSource(options);
229
+ if (!checked.success) {
230
+ const failure = { ...checked, runDirectory: directory };
231
+ await writeAtomicJson(join(directory, "failure.json"), failure);
232
+ return failure;
233
+ }
234
+ const environment = await discoverAuthoringEnvironment(project);
235
+ runtimeDirectory = join(directory, ".runtime");
236
+ await mkdir(runtimeDirectory);
237
+ const modulePath = join(runtimeDirectory, "model.mjs");
238
+ let bundled;
239
+ try {
240
+ bundled = await bundleEntry(checked.entry, project, modulePath, options.kind, checked.tsconfig);
241
+ }
242
+ catch (error) {
243
+ throw new AuthoringError("bundle", "BUNDLE_FAILED", error instanceof Error ? error.message : String(error), 1);
244
+ }
245
+ const enginePath = bundled.imports["@metamesh/modeling/engine"];
246
+ if (enginePath === undefined)
247
+ throw new AuthoringError("environment", "ENGINE_NOT_INSTALLED", "Cannot resolve installed Modeling engine.");
248
+ const request = {
249
+ modulePath,
250
+ directory,
251
+ kind: options.kind,
252
+ params: options.params ?? {},
253
+ export3mf: options.export3mf ?? false,
254
+ enginePath,
255
+ ...(options.fontFixtures === undefined
256
+ ? {}
257
+ : { fontFixtures: resolve(project, options.fontFixtures) }),
258
+ ...(bundled.imports["@metamesh/generator-sdk"] === undefined
259
+ ? {}
260
+ : { sdkPath: bundled.imports["@metamesh/generator-sdk"] }),
261
+ ...(bundled.imports["@metamesh/generator-sdk/parameters"] === undefined
262
+ ? {}
263
+ : { parametersPath: bundled.imports["@metamesh/generator-sdk/parameters"] }),
264
+ ...(bundled.imports["@metamesh/generator-sdk/packages"] === undefined
265
+ ? {}
266
+ : { packagesPath: bundled.imports["@metamesh/generator-sdk/packages"] }),
267
+ metadata: {
268
+ formatVersion: 1,
269
+ status: "complete",
270
+ runId,
271
+ createdAt: new Date().toISOString(),
272
+ kind: options.kind,
273
+ source: {
274
+ entry: relative(project, checked.entry).replaceAll("\\", "/"),
275
+ fingerprint: bundled.fingerprint,
276
+ },
277
+ packages: Object.fromEntries(environment.packages.map(({ name, version }) => [name, version])),
278
+ policy: { timeoutMs, limits },
279
+ },
280
+ };
281
+ const result = await executeChild(request, runtimeDirectory, timeoutMs, options.onLog);
282
+ if (!result.success) {
283
+ await rm(join(directory, "manifest.json"), { force: true });
284
+ const failure = { ...result, runDirectory: directory };
285
+ await writeAtomicJson(join(directory, "failure.json"), failure);
286
+ return failure;
287
+ }
288
+ return result;
289
+ }
290
+ catch (error) {
291
+ const failure = {
292
+ ...authoringFailure(error),
293
+ ...(directory === undefined ? {} : { runDirectory: directory }),
294
+ };
295
+ if (directory !== undefined) {
296
+ await rm(join(directory, "manifest.json"), { force: true }).catch(() => undefined);
297
+ await writeAtomicJson(join(directory, "failure.json"), failure).catch(() => undefined);
298
+ }
299
+ return failure;
300
+ }
301
+ finally {
302
+ if (runtimeDirectory !== undefined &&
303
+ directory !== undefined &&
304
+ dirname(resolve(runtimeDirectory)) === resolve(directory))
305
+ await rm(runtimeDirectory, { recursive: true, force: true });
306
+ }
307
+ }
308
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/authoring/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import type { Bounds3, FinalizedModel, GenerationDiagnostic, ModelingLimits, Vector3Tuple } from "@metamesh/modeling";
2
+ import type { ModelDependencies, SnapshotPart } from "@metamesh/modeling/engine";
3
+ /** Version of the CLI authoring protocol, independent of package SemVer and engine compatibility. */
4
+ export declare const AUTHORING_PROTOCOL_VERSION = 1;
5
+ /** Selects a standalone ModelProgram entry or an SDK Generator module with a definition. */
6
+ export type AuthoringKind = "model" | "generator";
7
+ /** The workflow stage that rejected an invocation, source, asset, or captured artifact. */
8
+ export type AuthoringPhase = "invocation" | "environment" | "check" | "parameters" | "assets" | "bundle" | "execute" | "artifact" | "render";
9
+ /** A structured issue with optional source location, parameter association, and geometry context. */
10
+ export interface AuthoringDiagnostic {
11
+ readonly code: string;
12
+ readonly message: string;
13
+ readonly severity: "error" | "warning";
14
+ readonly file?: string;
15
+ /** One-based source line, when available. */
16
+ readonly line?: number;
17
+ /** One-based source column, when available. */
18
+ readonly column?: number;
19
+ readonly parameterId?: string;
20
+ readonly path?: readonly (number | string)[];
21
+ readonly context?: Readonly<Record<string, unknown>>;
22
+ }
23
+ /** An unsuccessful command outcome; a failure directory does not establish a complete capture. */
24
+ export interface AuthoringFailure {
25
+ readonly success: false;
26
+ readonly phase: AuthoringPhase;
27
+ /** 1 for source or generation failures; 2 for invocation, environment, artifact, or tooling failures. */
28
+ readonly exitCode: 1 | 2;
29
+ readonly diagnostics: readonly AuthoringDiagnostic[];
30
+ /** This attempt's directory, when created; read its failure metadata instead of inspecting geometry. */
31
+ readonly runDirectory?: string;
32
+ }
33
+ /** Metadata for one installed Markdown guide or public API symbol. */
34
+ export interface DocumentationEntry {
35
+ readonly id: string;
36
+ readonly title: string;
37
+ readonly summary: string;
38
+ /** Forward-slash relative path beside the owning documentation manifest. */
39
+ readonly path: string;
40
+ readonly importPath: string;
41
+ readonly availability: string;
42
+ readonly canonical: string;
43
+ readonly keywords: readonly string[];
44
+ }
45
+ /** Exact-package-version index exposed through the package's docs/manifest.json export. */
46
+ export interface DocumentationManifest {
47
+ readonly formatVersion: 1;
48
+ readonly packageName: string;
49
+ readonly packageVersion: string;
50
+ readonly documents: readonly DocumentationEntry[];
51
+ }
52
+ /** A project-local MetaMesh package and its verified documentation index. */
53
+ export interface InstalledAuthoringPackage {
54
+ readonly name: string;
55
+ readonly version: string;
56
+ readonly manifestPath: string;
57
+ readonly documentCount: number;
58
+ }
59
+ /** The selected project's supported protocol, matching package releases, and available workflows. */
60
+ export interface AuthoringEnvironment {
61
+ readonly authoringProtocolVersion: typeof AUTHORING_PROTOCOL_VERSION;
62
+ readonly project: string;
63
+ readonly packages: readonly InstalledAuthoringPackage[];
64
+ readonly capabilities: readonly string[];
65
+ }
66
+ /** Source entry contract and project-local resolution settings for semantic checking. */
67
+ export interface CheckOptions {
68
+ /** Entry path, resolved from project. */
69
+ readonly entry: string;
70
+ readonly kind: AuthoringKind;
71
+ /** Package and path resolution root; defaults to the current working directory. */
72
+ readonly project?: string;
73
+ /** Explicit configuration path relative to project; otherwise the entry's nearest tsconfig is used. */
74
+ readonly tsconfig?: string;
75
+ }
76
+ /** A successful semantic check; source has not been evaluated and no geometry is captured. */
77
+ export interface CheckSuccess {
78
+ readonly success: true;
79
+ readonly entry: string;
80
+ readonly kind: AuthoringKind;
81
+ readonly tsconfig?: string;
82
+ readonly diagnostics: readonly AuthoringDiagnostic[];
83
+ }
84
+ /** Inputs and bounded execution policy for one checked, trusted local source attempt. */
85
+ export interface RunOptions extends CheckOptions {
86
+ /** Generator overrides merged with definition defaults, or the standalone model's raw parameter map. */
87
+ readonly params?: Readonly<Record<string, unknown>>;
88
+ /** Local font descriptor JSON path relative to project; no assets are downloaded. */
89
+ readonly fontFixtures?: string;
90
+ /** Parent for a unique attempt directory; defaults to .metamesh/runs beneath project. */
91
+ readonly output?: string;
92
+ /** Child execution deadline in milliseconds, from 1 to 3600000; defaults to 30000. */
93
+ readonly timeoutMs?: number;
94
+ /** Engine resource ceilings may be lowered from their defaults, never raised. */
95
+ readonly limits?: Partial<ModelingLimits>;
96
+ /** Export the completed snapshot as 3MF in this run; defaults to false. */
97
+ readonly export3mf?: boolean;
98
+ /** Receives combined child stdout/stderr, truncated after 64 KiB. */
99
+ readonly onLog?: (text: string) => void;
100
+ }
101
+ /** A captured file's relative path, byte length, and SHA-256 integrity digest. */
102
+ export interface CapturedBuffer {
103
+ readonly path: string;
104
+ readonly bytes: number;
105
+ readonly sha256: string;
106
+ }
107
+ /** A shared local-space mesh resource and its measurements, before per-part placement. */
108
+ export interface CapturedResource {
109
+ readonly id: string;
110
+ readonly positions: CapturedBuffer;
111
+ readonly indices: CapturedBuffer;
112
+ readonly measurements: SnapshotPart["measurements"];
113
+ }
114
+ /** Semantic part identity and appearance referencing a shared mesh with separate placement. */
115
+ export interface CapturedPart {
116
+ readonly id: string;
117
+ readonly resourceId: string;
118
+ /** World translation in millimetres, applied after rotation. */
119
+ readonly position: Vector3Tuple;
120
+ /** Global XYZ rotation in degrees, applied once to local geometry. */
121
+ readonly rotation: Vector3Tuple;
122
+ readonly color?: string;
123
+ readonly measurements: SnapshotPart["measurements"];
124
+ }
125
+ /** A completed attempt's provenance, effective inputs, diagnostics, and captured geometry. */
126
+ export interface CapturedRunManifest {
127
+ readonly formatVersion: 1;
128
+ readonly status: "complete";
129
+ readonly runId: string;
130
+ readonly createdAt: string;
131
+ readonly kind: AuthoringKind;
132
+ /** Project-relative entry and fingerprint of bundled local source files. */
133
+ readonly source: {
134
+ readonly entry: string;
135
+ readonly fingerprint: string;
136
+ };
137
+ readonly packages: Readonly<Record<string, string>>;
138
+ readonly parameters: Readonly<Record<string, unknown>>;
139
+ /** Effective Generator font selections, or declared and byte-verified standalone fixture revisions. */
140
+ readonly assets: readonly {
141
+ readonly faceId: string;
142
+ readonly revision: string;
143
+ readonly weight: number;
144
+ }[];
145
+ readonly policy: {
146
+ readonly timeoutMs: number;
147
+ readonly limits: ModelingLimits;
148
+ };
149
+ readonly diagnostics: readonly GenerationDiagnostic[];
150
+ readonly bounds: Bounds3;
151
+ readonly stats: FinalizedModel["stats"];
152
+ readonly dependencies: ModelDependencies;
153
+ readonly resources: readonly CapturedResource[];
154
+ readonly parts: readonly CapturedPart[];
155
+ readonly export3mf?: CapturedBuffer;
156
+ }
157
+ /** Validated local-space mesh buffers loaded from a completed captured resource. */
158
+ export interface CapturedGeometry {
159
+ readonly id: string;
160
+ readonly positions: Float32Array;
161
+ readonly indices: Uint32Array;
162
+ }
163
+ /** A validated successful capture with its manifest and shared local geometry buffers. */
164
+ export interface CapturedRun {
165
+ readonly directory: string;
166
+ readonly manifest: CapturedRunManifest;
167
+ readonly resources: readonly CapturedGeometry[];
168
+ }
169
+ /** A successful checked execution; use this exact directory for subsequent inspection and rendering. */
170
+ export interface RunSuccess {
171
+ readonly success: true;
172
+ readonly runDirectory: string;
173
+ readonly manifest: CapturedRunManifest;
174
+ }
175
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/authoring/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Version of the CLI authoring protocol, independent of package SemVer and engine compatibility. */
2
+ export const AUTHORING_PROTOCOL_VERSION = 1;
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/authoring/types.ts"],"names":[],"mappings":"AASA,qGAAqG;AACrG,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { CapturedRunManifest } from "./types.js";
2
+ export interface WorkerRequest {
3
+ readonly modulePath: string;
4
+ readonly directory: string;
5
+ readonly kind: "model" | "generator";
6
+ readonly params: Readonly<Record<string, unknown>>;
7
+ readonly fontFixtures?: string;
8
+ readonly export3mf: boolean;
9
+ readonly metadata: Omit<CapturedRunManifest, "resources" | "parts" | "bounds" | "stats" | "diagnostics" | "dependencies" | "export3mf" | "assets" | "parameters">;
10
+ readonly enginePath: string;
11
+ readonly sdkPath?: string;
12
+ readonly parametersPath?: string;
13
+ readonly packagesPath?: string;
14
+ }
15
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/authoring/worker.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAGV,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CACrB,mBAAmB,EACjB,WAAW,GACX,OAAO,GACP,QAAQ,GACR,OAAO,GACP,aAAa,GACb,cAAc,GACd,WAAW,GACX,QAAQ,GACR,YAAY,CACf,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC"}