@metamesh/cli 0.17.0 → 0.19.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 (116) hide show
  1. package/CHANGELOG.md +201 -0
  2. package/README.md +93 -51
  3. package/dist/authoring/artifacts.d.ts +2 -2
  4. package/dist/authoring/artifacts.d.ts.map +1 -1
  5. package/dist/authoring/artifacts.js +52 -40
  6. package/dist/authoring/artifacts.js.map +1 -1
  7. package/dist/authoring/check.d.ts.map +1 -1
  8. package/dist/authoring/check.js +9 -3
  9. package/dist/authoring/check.js.map +1 -1
  10. package/dist/authoring/documentation-manifest.d.ts +3 -0
  11. package/dist/authoring/documentation-manifest.d.ts.map +1 -0
  12. package/dist/authoring/documentation-manifest.js +23 -0
  13. package/dist/authoring/documentation-manifest.js.map +1 -0
  14. package/dist/authoring/documentation.d.ts +20 -0
  15. package/dist/authoring/documentation.d.ts.map +1 -0
  16. package/dist/authoring/documentation.js +94 -0
  17. package/dist/authoring/documentation.js.map +1 -0
  18. package/dist/authoring/environment.d.ts +1 -19
  19. package/dist/authoring/environment.d.ts.map +1 -1
  20. package/dist/authoring/environment.js +4 -110
  21. package/dist/authoring/environment.js.map +1 -1
  22. package/dist/authoring/{worker.d.ts → execution-process.d.ts} +3 -4
  23. package/dist/authoring/execution-process.d.ts.map +1 -0
  24. package/dist/authoring/{worker.js → execution-process.js} +18 -19
  25. package/dist/authoring/execution-process.js.map +1 -0
  26. package/dist/authoring/export-capture.d.ts +22 -0
  27. package/dist/authoring/export-capture.d.ts.map +1 -0
  28. package/dist/authoring/export-capture.js +76 -0
  29. package/dist/authoring/export-capture.js.map +1 -0
  30. package/dist/authoring/{capture/render-client.js → render/client-bundle.js} +196 -196
  31. package/dist/authoring/{capture/render-client.js.map → render/client-bundle.js.map} +4 -4
  32. package/dist/authoring/{render-client.d.ts → render/client.d.ts} +2 -2
  33. package/dist/authoring/render/client.d.ts.map +1 -0
  34. package/dist/authoring/{render-client.js → render/client.js} +2 -2
  35. package/dist/authoring/render/client.js.map +1 -0
  36. package/dist/authoring/{render.d.ts → render/render-capture.d.ts} +2 -2
  37. package/dist/authoring/render/render-capture.d.ts.map +1 -0
  38. package/dist/authoring/{render.js → render/render-capture.js} +4 -4
  39. package/dist/authoring/render/render-capture.js.map +1 -0
  40. package/dist/authoring/{render-scene.d.ts → render/scene.d.ts} +2 -2
  41. package/dist/authoring/render/scene.d.ts.map +1 -0
  42. package/dist/authoring/{render-scene.js → render/scene.js} +6 -10
  43. package/dist/authoring/render/scene.js.map +1 -0
  44. package/dist/authoring/{render-types.d.ts → render/types.d.ts} +3 -3
  45. package/dist/authoring/render/types.d.ts.map +1 -0
  46. package/dist/authoring/render/types.js +2 -0
  47. package/dist/authoring/render/types.js.map +1 -0
  48. package/dist/authoring/run.d.ts.map +1 -1
  49. package/dist/authoring/run.js +7 -4
  50. package/dist/authoring/run.js.map +1 -1
  51. package/dist/authoring/types.d.ts +21 -18
  52. package/dist/authoring/types.d.ts.map +1 -1
  53. package/dist/authoring/types.js.map +1 -1
  54. package/dist/authoring.d.ts +7 -4
  55. package/dist/authoring.d.ts.map +1 -1
  56. package/dist/authoring.js +4 -2
  57. package/dist/authoring.js.map +1 -1
  58. package/dist/docs/guides/agent-authoring.md +76 -54
  59. package/dist/docs/guides/package.md +93 -51
  60. package/dist/docs/manifest.json +57 -1
  61. package/dist/docs/reference/authoring/AUTHORING_PROTOCOL_VERSION.md +1 -1
  62. package/dist/docs/reference/authoring/AuthoringDiagnostic.md +1 -1
  63. package/dist/docs/reference/authoring/AuthoringEnvironment.md +1 -1
  64. package/dist/docs/reference/authoring/AuthoringError.md +1 -1
  65. package/dist/docs/reference/authoring/AuthoringFailure-type.md +1 -1
  66. package/dist/docs/reference/authoring/AuthoringKind.md +1 -1
  67. package/dist/docs/reference/authoring/AuthoringPhase.md +2 -2
  68. package/dist/docs/reference/authoring/CaptureExportFormat.md +10 -0
  69. package/dist/docs/reference/authoring/CaptureExportOptions.md +17 -0
  70. package/dist/docs/reference/authoring/CaptureExportResult.md +15 -0
  71. package/dist/docs/reference/authoring/CapturedBuffer.md +1 -1
  72. package/dist/docs/reference/authoring/CapturedGeometry.md +1 -1
  73. package/dist/docs/reference/authoring/CapturedPart.md +4 -6
  74. package/dist/docs/reference/authoring/CapturedResource.md +2 -2
  75. package/dist/docs/reference/authoring/CapturedRun.md +1 -1
  76. package/dist/docs/reference/authoring/CapturedRunManifest.md +3 -4
  77. package/dist/docs/reference/authoring/CheckOptions.md +1 -1
  78. package/dist/docs/reference/authoring/CheckSuccess.md +1 -1
  79. package/dist/docs/reference/authoring/DocumentationEntry.md +1 -1
  80. package/dist/docs/reference/authoring/DocumentationManifest.md +1 -1
  81. package/dist/docs/reference/authoring/DocumentationSearchResult.md +1 -1
  82. package/dist/docs/reference/authoring/InstalledAuthoringPackage.md +1 -1
  83. package/dist/docs/reference/authoring/RenderCamera.md +1 -1
  84. package/dist/docs/reference/authoring/RenderFormat.md +1 -1
  85. package/dist/docs/reference/authoring/RenderOptions.md +1 -1
  86. package/dist/docs/reference/authoring/RenderResult.md +1 -1
  87. package/dist/docs/reference/authoring/RenderView.md +1 -1
  88. package/dist/docs/reference/authoring/RenderedImage.md +1 -1
  89. package/dist/docs/reference/authoring/RunOptions.md +13 -7
  90. package/dist/docs/reference/authoring/RunSuccess.md +1 -1
  91. package/dist/docs/reference/authoring/authoringFailure-value.md +1 -1
  92. package/dist/docs/reference/authoring/checkAuthoringSource.md +1 -1
  93. package/dist/docs/reference/authoring/discoverAuthoringEnvironment.md +1 -1
  94. package/dist/docs/reference/authoring/exportCapturedRun.md +10 -0
  95. package/dist/docs/reference/authoring/inspectCapturedRun.md +1 -1
  96. package/dist/docs/reference/authoring/installAuthoringBrowser.md +1 -1
  97. package/dist/docs/reference/authoring/readCapturedRun.md +1 -1
  98. package/dist/docs/reference/authoring/renderCapturedRun.md +1 -1
  99. package/dist/docs/reference/authoring/runAuthoringSource.md +1 -1
  100. package/dist/docs/reference/authoring/searchAuthoringDocumentation.md +1 -1
  101. package/dist/docs/reference/authoring/showAuthoringDocumentation.md +1 -1
  102. package/dist/metamesh.js +35 -14
  103. package/dist/metamesh.js.map +1 -1
  104. package/package.json +9 -6
  105. package/dist/authoring/render-client.d.ts.map +0 -1
  106. package/dist/authoring/render-client.js.map +0 -1
  107. package/dist/authoring/render-scene.d.ts.map +0 -1
  108. package/dist/authoring/render-scene.js.map +0 -1
  109. package/dist/authoring/render-types.d.ts.map +0 -1
  110. package/dist/authoring/render-types.js +0 -2
  111. package/dist/authoring/render-types.js.map +0 -1
  112. package/dist/authoring/render.d.ts.map +0 -1
  113. package/dist/authoring/render.js.map +0 -1
  114. package/dist/authoring/worker.d.ts.map +0 -1
  115. package/dist/authoring/worker.js.map +0 -1
  116. /package/dist/authoring/{capture/render-client.js.LEGAL.txt → render/client-bundle.js.LEGAL.txt} +0 -0
@@ -6,8 +6,6 @@ function program(value) {
6
6
  return isRecord(value) && value.kind === "metamesh-model" && typeof value.generate === "function";
7
7
  }
8
8
  async function execute(request) {
9
- let snapshot;
10
- let dispose;
11
9
  let phase = "execute";
12
10
  try {
13
11
  const entry = await import(pathToFileURL(request.modulePath).href);
@@ -15,7 +13,7 @@ async function execute(request) {
15
13
  throw new AuthoringError("execute", "INVALID_ENTRY", "Author entry is not a module.", 1);
16
14
  let model;
17
15
  let definition;
18
- let parameters = request.params;
16
+ let parameters = request.input;
19
17
  if (request.kind === "generator") {
20
18
  phase = "parameters";
21
19
  if (request.packagesPath === undefined || request.parametersPath === undefined)
@@ -25,13 +23,17 @@ async function execute(request) {
25
23
  definition = packages.parseGeneratorDefinition(entry.definition);
26
24
  const parsed = params
27
25
  .createParamCodec(definition)
28
- .safeParse({ ...params.getDefaultParameters(definition), ...request.params });
26
+ .safeParse({ ...params.getDefaultParameters(definition), ...request.input });
29
27
  if (!parsed.success)
30
28
  return {
31
29
  success: false,
32
30
  phase: "parameters",
33
31
  exitCode: 1,
34
- diagnostics: parsed.issues.map((issue) => ({ ...issue, severity: "error" })),
32
+ diagnostics: parsed.issues.map(({ path, ...issue }) => ({
33
+ ...issue,
34
+ severity: "error",
35
+ ...(path === undefined ? {} : { path }),
36
+ })),
35
37
  };
36
38
  parameters = parsed.data;
37
39
  const runtime = entry.default;
@@ -39,9 +41,9 @@ async function execute(request) {
39
41
  runtime.formatVersion !== packages.GENERATOR_PACKAGE_FORMAT_VERSION ||
40
42
  runtime.generatorId !== definition.id ||
41
43
  runtime.version !== definition.version ||
42
- !program(runtime.generate))
44
+ !program(runtime))
43
45
  throw new AuthoringError("execute", "INVALID_GENERATOR_MODULE", "Default export must be the Generator module envelope matching definition.", 1);
44
- model = runtime.generate;
46
+ model = runtime;
45
47
  }
46
48
  else {
47
49
  if (!program(entry.default))
@@ -68,17 +70,14 @@ async function execute(request) {
68
70
  phase = "execute";
69
71
  const { createModelEngine } = (await import(pathToFileURL(request.enginePath).href));
70
72
  const engine = await createModelEngine();
71
- const session = services === undefined
72
- ? engine.createSession(model, {
73
+ const snapshot = services === undefined
74
+ ? engine.run(model, parameters, {
73
75
  limits: request.metadata.policy.limits,
74
76
  })
75
- : engine.createSession(model, {
77
+ : engine.run(model, parameters, {
76
78
  services,
77
79
  limits: request.metadata.policy.limits,
78
80
  });
79
- dispose = () => session.dispose();
80
- snapshot = session.run(parameters);
81
- const exported = request.export3mf ? await engine.export3mf(snapshot.parts) : undefined;
82
81
  phase = "artifact";
83
82
  const selectedAssets = definition === undefined
84
83
  ? (loaded?.selections ?? [])
@@ -89,7 +88,11 @@ async function execute(request) {
89
88
  typeof value.faceId === "string" &&
90
89
  typeof value.revision === "string" &&
91
90
  typeof value.weight === "number");
92
- const manifest = await captureSnapshot(request.directory, snapshot, { ...request.metadata, assets: selectedAssets, parameters }, exported);
91
+ const manifest = await captureSnapshot(request.directory, snapshot, {
92
+ ...request.metadata,
93
+ assets: selectedAssets,
94
+ parameters,
95
+ });
93
96
  return { success: true, runDirectory: request.directory, manifest };
94
97
  }
95
98
  catch (error) {
@@ -149,10 +152,6 @@ async function execute(request) {
149
152
  ],
150
153
  };
151
154
  }
152
- finally {
153
- snapshot?.dispose();
154
- dispose?.();
155
- }
156
155
  }
157
156
  const requestFile = process.argv[2];
158
157
  const resultFile = process.argv[3];
@@ -160,4 +159,4 @@ if (requestFile !== undefined && resultFile !== undefined) {
160
159
  const result = await execute(JSON.parse(await readFile(requestFile, "utf8")));
161
160
  await writeFile(resultFile, JSON.stringify(result));
162
161
  }
163
- //# sourceMappingURL=worker.js.map
162
+ //# sourceMappingURL=execution-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-process.js","sourceRoot":"","sources":["../../src/authoring/execution-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type ExportFormat, type ExportReport } from "@metamesh/modeling/export";
2
+ /** Supported completed-model file formats. */
3
+ export type CaptureExportFormat = ExportFormat;
4
+ /** File delivery for one validated captured run; original author source is never executed. */
5
+ export interface CaptureExportOptions {
6
+ readonly format: CaptureExportFormat;
7
+ /** Destination with the selected format's extension; its parent directory must already exist. */
8
+ readonly output: string;
9
+ /** Optional document title; defaults to the output filename without its extension. */
10
+ readonly name?: string;
11
+ readonly signal?: AbortSignal;
12
+ }
13
+ /** Completed file plus source identity and structured serializer diagnostics. */
14
+ export interface CaptureExportResult extends ExportReport {
15
+ readonly path: string;
16
+ readonly format: CaptureExportFormat;
17
+ readonly runId: string;
18
+ readonly sourceFingerprint: string;
19
+ }
20
+ /** Streams a captured model to an atomically published file using the public mesh writers. */
21
+ export declare function exportCapturedRun(directory: string, options: CaptureExportOptions): Promise<CaptureExportResult>;
22
+ //# sourceMappingURL=export-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-capture.d.ts","sourceRoot":"","sources":["../../src/authoring/export-capture.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,YAAY,EAEjB,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAKnC,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAE/C,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,iGAAiG;IACjG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,8FAA8F;AAC9F,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAkF9B"}
@@ -0,0 +1,76 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { open, realpath, rename, rm } from "node:fs/promises";
3
+ import { basename, dirname, extname, join, resolve } from "node:path";
4
+ import { write3mf, writeGlb, writeStl, } from "@metamesh/modeling/export";
5
+ import { readCapturedRun } from "./artifacts.js";
6
+ import { AuthoringError } from "./errors.js";
7
+ /** Streams a captured model to an atomically published file using the public mesh writers. */
8
+ export async function exportCapturedRun(directory, options) {
9
+ if (!(options.format === "3mf" || options.format === "stl" || options.format === "glb"))
10
+ throw new AuthoringError("invocation", "INVALID_EXPORT_FORMAT", "Choose 3mf, stl, or glb.");
11
+ if (typeof options.output !== "string" || options.output.trim() === "")
12
+ throw new AuthoringError("invocation", "EXPORT_OUTPUT_REQUIRED", "Choose an output file.");
13
+ const path = resolve(options.output);
14
+ if (extname(path).toLowerCase() !== `.${options.format}`)
15
+ throw new AuthoringError("invocation", "INVALID_EXPORT_OUTPUT", `The output file must have a .${options.format} extension.`);
16
+ const captured = await readCapturedRun(directory);
17
+ const resources = new Map(captured.resources.map((resource) => [resource.id, resource]));
18
+ const parts = captured.manifest.parts.map((part) => ({
19
+ id: part.id,
20
+ geometry: resources.get(part.resourceId),
21
+ transform: part.transform,
22
+ ...(part.color === undefined ? {} : { color: part.color }),
23
+ }));
24
+ const temporary = `${path}.${randomUUID()}.pending`;
25
+ const writer = { "3mf": write3mf, stl: writeStl, glb: writeGlb }[options.format];
26
+ const settings = {
27
+ name: options.name ?? basename(path).replace(/\.[^.]+$/, ""),
28
+ limits: captured.manifest.policy.limits,
29
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
30
+ };
31
+ let file;
32
+ try {
33
+ const destination = join(await realpath(dirname(path)), basename(path));
34
+ const protectedFiles = await Promise.all([
35
+ "manifest.json",
36
+ ...captured.manifest.resources.flatMap((resource) => [
37
+ resource.positions.path,
38
+ resource.indices.path,
39
+ ]),
40
+ ].map((file) => realpath(resolve(captured.directory, file))));
41
+ const identity = (file) => process.platform === "win32" ? file.toLowerCase() : file;
42
+ if (protectedFiles.some((file) => identity(file) === identity(destination)))
43
+ throw new AuthoringError("invocation", "CAPTURE_OUTPUT_CONFLICT", "Export output cannot replace captured model files.");
44
+ options.signal?.throwIfAborted();
45
+ file = await open(temporary, "wx");
46
+ const report = await writer(parts, async (chunk) => {
47
+ let offset = 0;
48
+ while (offset < chunk.byteLength) {
49
+ const { bytesWritten } = await file.write(chunk, offset, chunk.byteLength - offset);
50
+ if (bytesWritten === 0)
51
+ throw new Error("The export output stopped accepting bytes.");
52
+ offset += bytesWritten;
53
+ }
54
+ }, settings);
55
+ await file.close();
56
+ file = undefined;
57
+ options.signal?.throwIfAborted();
58
+ await rename(temporary, path);
59
+ return {
60
+ ...report,
61
+ path,
62
+ format: options.format,
63
+ runId: captured.manifest.runId,
64
+ sourceFingerprint: captured.manifest.source.fingerprint,
65
+ };
66
+ }
67
+ catch (error) {
68
+ if (file !== undefined)
69
+ await file.close().catch(() => undefined);
70
+ await rm(temporary, { force: true });
71
+ if (error instanceof AuthoringError)
72
+ throw error;
73
+ throw new AuthoringError("export", "EXPORT_FAILED", error instanceof Error ? error.message : String(error));
74
+ }
75
+ }
76
+ //# sourceMappingURL=export-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-capture.js","sourceRoot":"","sources":["../../src/authoring/export-capture.ts"],"names":[],"mappings":"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"}