@metamesh/generator-sdk 0.11.0 → 0.13.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 (213) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +67 -66
  3. package/dist/contracts.d.ts +5 -5
  4. package/dist/contracts.d.ts.map +1 -1
  5. package/dist/docs/guides/authoring.md +114 -0
  6. package/dist/docs/guides/package.md +120 -0
  7. package/dist/docs/guides/parameters.md +429 -0
  8. package/dist/docs/manifest.json +2361 -0
  9. package/dist/docs/reference/fonts/FontSelection.md +14 -0
  10. package/dist/docs/reference/fonts/isFontSelection.md +10 -0
  11. package/dist/docs/reference/index/ArrayParameterDefinition.md +12 -0
  12. package/dist/docs/reference/index/BaseParameterDefinition.md +16 -0
  13. package/dist/docs/reference/index/BooleanParameterDefinition.md +12 -0
  14. package/dist/docs/reference/index/ChoiceOption.md +13 -0
  15. package/dist/docs/reference/index/ChoiceParameterDefinition.md +14 -0
  16. package/dist/docs/reference/index/ChoiceSetParameterDefinition.md +15 -0
  17. package/dist/docs/reference/index/ColorParameterDefinition.md +12 -0
  18. package/dist/docs/reference/index/ConditionExpression.md +36 -0
  19. package/dist/docs/reference/index/ContourAnchor.md +12 -0
  20. package/dist/docs/reference/index/ContourParameterDefinition.md +13 -0
  21. package/dist/docs/reference/index/ContourParameterUi.md +12 -0
  22. package/dist/docs/reference/index/ContourPoint.md +13 -0
  23. package/dist/docs/reference/index/ContourSegment.md +17 -0
  24. package/dist/docs/reference/index/ContourValue.md +14 -0
  25. package/dist/docs/reference/index/FontParameterDefinition.md +12 -0
  26. package/dist/docs/reference/index/FontSelection.md +14 -0
  27. package/dist/docs/reference/index/GeneratorDefinition.md +14 -0
  28. package/dist/docs/reference/index/GeneratorIssue.md +12 -0
  29. package/dist/docs/reference/index/GeneratorModule.md +15 -0
  30. package/dist/docs/reference/index/GeneratorModuleOptions.md +12 -0
  31. package/dist/docs/reference/index/GeneratorParamId.md +10 -0
  32. package/dist/docs/reference/index/GeneratorParams.md +12 -0
  33. package/dist/docs/reference/index/GeneratorPreset.md +14 -0
  34. package/dist/docs/reference/index/GeneratorProgram.md +13 -0
  35. package/dist/docs/reference/index/GeneratorServices.md +15 -0
  36. package/dist/docs/reference/index/GeneratorTextArcBaseline.md +18 -0
  37. package/dist/docs/reference/index/GeneratorTextLayout.md +13 -0
  38. package/dist/docs/reference/index/GeneratorTextMetrics.md +21 -0
  39. package/dist/docs/reference/index/GeneratorTextOptions.md +19 -0
  40. package/dist/docs/reference/index/MAX_CONTOUR_SEGMENTS.md +9 -0
  41. package/dist/docs/reference/index/MAX_SIDE_PROFILE_SEGMENTS.md +9 -0
  42. package/dist/docs/reference/index/NumberArrayItemDefinition.md +19 -0
  43. package/dist/docs/reference/index/NumberArrayParameterDefinition.md +12 -0
  44. package/dist/docs/reference/index/NumberParameterDefinition.md +19 -0
  45. package/dist/docs/reference/index/NumberParameterUi.md +14 -0
  46. package/dist/docs/reference/index/ParameterDefinition.md +9 -0
  47. package/dist/docs/reference/index/ParameterDefinitionDocument.md +12 -0
  48. package/dist/docs/reference/index/ParameterGroup.md +15 -0
  49. package/dist/docs/reference/index/ParameterIssue.md +17 -0
  50. package/dist/docs/reference/index/ParameterIssueCode.md +10 -0
  51. package/dist/docs/reference/index/ParameterIssueSeverity.md +9 -0
  52. package/dist/docs/reference/index/ParameterScaleReference.md +13 -0
  53. package/dist/docs/reference/index/ParameterUi.md +15 -0
  54. package/dist/docs/reference/index/ParameterValidationResult.md +14 -0
  55. package/dist/docs/reference/index/ParameterValue.md +9 -0
  56. package/dist/docs/reference/index/ParameterValues.md +9 -0
  57. package/dist/docs/reference/index/RowParameterUi.md +12 -0
  58. package/dist/docs/reference/index/ScalarParameterValue.md +9 -0
  59. package/dist/docs/reference/index/SideProfileAnchor.md +12 -0
  60. package/dist/docs/reference/index/SideProfileParameterDefinition.md +13 -0
  61. package/dist/docs/reference/index/SideProfileParameterUi.md +12 -0
  62. package/dist/docs/reference/index/SideProfilePoint.md +13 -0
  63. package/dist/docs/reference/index/SideProfileSegment.md +17 -0
  64. package/dist/docs/reference/index/SideProfileValue.md +14 -0
  65. package/dist/docs/reference/index/SourceVisibility.md +15 -0
  66. package/dist/docs/reference/index/StringArrayItemDefinition.md +11 -0
  67. package/dist/docs/reference/index/StringArrayParameterDefinition.md +12 -0
  68. package/dist/docs/reference/index/SvgParameterDefinition.md +12 -0
  69. package/dist/docs/reference/index/TextParameterDefinition.md +13 -0
  70. package/dist/docs/reference/index/UNPREPARED_GENERATOR_SERVICES.md +9 -0
  71. package/dist/docs/reference/index/cloneContourValue.md +10 -0
  72. package/dist/docs/reference/index/cloneSideProfileValue.md +10 -0
  73. package/dist/docs/reference/index/contourValuesEqual.md +10 -0
  74. package/dist/docs/reference/index/defineGenerator.md +10 -0
  75. package/dist/docs/reference/index/defineGeneratorModule.md +10 -0
  76. package/dist/docs/reference/index/definePresets.md +10 -0
  77. package/dist/docs/reference/index/evaluateCondition.md +13 -0
  78. package/dist/docs/reference/index/isContourValue.md +10 -0
  79. package/dist/docs/reference/index/isFontSelection.md +10 -0
  80. package/dist/docs/reference/index/isSideProfileValue.md +10 -0
  81. package/dist/docs/reference/index/sideProfileValuesEqual.md +10 -0
  82. package/dist/docs/reference/packages/GENERATOR_PACKAGE_FORMAT_VERSION.md +9 -0
  83. package/dist/docs/reference/packages/GeneratorAccess.md +9 -0
  84. package/dist/docs/reference/packages/GeneratorDefinitionIssue.md +14 -0
  85. package/dist/docs/reference/packages/GeneratorDefinitionParseResult.md +15 -0
  86. package/dist/docs/reference/packages/GeneratorDescriptor.md +9 -0
  87. package/dist/docs/reference/packages/GeneratorPackageManifest.md +11 -0
  88. package/dist/docs/reference/packages/GeneratorPackageSource.md +9 -0
  89. package/dist/docs/reference/packages/GeneratorPackageValidationError.md +12 -0
  90. package/dist/docs/reference/packages/GeneratorPreset.md +14 -0
  91. package/dist/docs/reference/packages/GeneratorRuntimeReference.md +15 -0
  92. package/dist/docs/reference/packages/InstalledGenerator.md +15 -0
  93. package/dist/docs/reference/packages/MAX_ARRAY_ITEMS.md +9 -0
  94. package/dist/docs/reference/packages/MAX_CONDITION_BRANCHES.md +9 -0
  95. package/dist/docs/reference/packages/MAX_CONDITION_DEPTH.md +9 -0
  96. package/dist/docs/reference/packages/MAX_DESCRIPTOR_LIST_ITEMS.md +9 -0
  97. package/dist/docs/reference/packages/MAX_GENERATOR_ID_LENGTH.md +9 -0
  98. package/dist/docs/reference/packages/MAX_GENERATOR_PACKAGE_BYTES.md +9 -0
  99. package/dist/docs/reference/packages/MAX_GENERATOR_PRESETS.md +9 -0
  100. package/dist/docs/reference/packages/MAX_METADATA_TEXT_LENGTH.md +9 -0
  101. package/dist/docs/reference/packages/MAX_PARAMETERS.md +9 -0
  102. package/dist/docs/reference/packages/MAX_PARAMETER_GROUPS.md +9 -0
  103. package/dist/docs/reference/packages/MAX_PARAMETER_OPTIONS.md +9 -0
  104. package/dist/docs/reference/packages/MAX_TEXT_PARAMETER_LENGTH.md +9 -0
  105. package/dist/docs/reference/packages/METAMESH_RUNTIME_VERSION.md +9 -0
  106. package/dist/docs/reference/packages/compareSemanticVersions.md +9 -0
  107. package/dist/docs/reference/packages/definitionIssuesFromZod.md +10 -0
  108. package/dist/docs/reference/packages/isRuntimeCompatible.md +9 -0
  109. package/dist/docs/reference/packages/parseGeneratorDefinition.md +9 -0
  110. package/dist/docs/reference/packages/parseGeneratorDescriptor.md +9 -0
  111. package/dist/docs/reference/packages/parseGeneratorPackageManifest.md +9 -0
  112. package/dist/docs/reference/packages/parseParameterDefinitionDocument.md +9 -0
  113. package/dist/docs/reference/packages/safeParseGeneratorDefinition.md +10 -0
  114. package/dist/docs/reference/packages/safeParseParameterDefinitionDocument.md +10 -0
  115. package/dist/docs/reference/packages/validateGeneratorPresets.md +10 -0
  116. package/dist/docs/reference/packages/validationErrorFromIssues.md +9 -0
  117. package/dist/docs/reference/packages/validationErrorFromZod.md +9 -0
  118. package/dist/docs/reference/parameters/EMPTY_SVG_PARAMETER_DEFAULT.md +9 -0
  119. package/dist/docs/reference/parameters/MAX_PARAMETER_ISSUES.md +9 -0
  120. package/dist/docs/reference/parameters/MAX_PARAMETER_ISSUE_MESSAGE_LENGTH.md +9 -0
  121. package/dist/docs/reference/parameters/MAX_PROJECT_SVG_PARAMETER_BYTES.md +9 -0
  122. package/dist/docs/reference/parameters/MAX_SVG_PARAMETER_BYTES.md +9 -0
  123. package/dist/docs/reference/parameters/ParamCodec.md +14 -0
  124. package/dist/docs/reference/parameters/ParamDecodeCode.md +9 -0
  125. package/dist/docs/reference/parameters/ParamDecodeError.md +12 -0
  126. package/dist/docs/reference/parameters/ParamDecodeIssue.md +14 -0
  127. package/dist/docs/reference/parameters/ParamParseResult.md +15 -0
  128. package/dist/docs/reference/parameters/PreparedParameters.md +12 -0
  129. package/dist/docs/reference/parameters/aggregateParameterIssues.md +10 -0
  130. package/dist/docs/reference/parameters/canonicalizeParameters.md +10 -0
  131. package/dist/docs/reference/parameters/createParamCodec.md +13 -0
  132. package/dist/docs/reference/parameters/getDefaultParameters.md +9 -0
  133. package/dist/docs/reference/parameters/normalizeParameters.md +13 -0
  134. package/dist/docs/reference/parameters/parameterValueEquals.md +9 -0
  135. package/dist/docs/reference/parameters/parseParameterIssues.md +15 -0
  136. package/dist/docs/reference/parameters/prepareParameters.md +13 -0
  137. package/dist/docs/reference/parameters/svgParameterBytes.md +9 -0
  138. package/dist/docs/reference/parameters/validateParameters.md +10 -0
  139. package/dist/docs/reference/runtime/ExecuteGeneratorOptions.md +18 -0
  140. package/dist/docs/reference/runtime/Export3mfRequest.md +18 -0
  141. package/dist/docs/reference/runtime/ExportError.md +13 -0
  142. package/dist/docs/reference/runtime/ExportSuccess.md +13 -0
  143. package/dist/docs/reference/runtime/ExportedFile.md +13 -0
  144. package/dist/docs/reference/runtime/GenerateRequest.md +16 -0
  145. package/dist/docs/reference/runtime/GeneratedModel.md +17 -0
  146. package/dist/docs/reference/runtime/GeneratedModelDelivery.md +12 -0
  147. package/dist/docs/reference/runtime/GeneratedPart.md +20 -0
  148. package/dist/docs/reference/runtime/GeneratedPartDelivery.md +13 -0
  149. package/dist/docs/reference/runtime/GeneratedPartsDecoder.md +24 -0
  150. package/dist/docs/reference/runtime/GeneratedPartsLimits.md +15 -0
  151. package/dist/docs/reference/runtime/GenerationError.md +13 -0
  152. package/dist/docs/reference/runtime/GenerationInvalid.md +13 -0
  153. package/dist/docs/reference/runtime/GenerationSuccess.md +15 -0
  154. package/dist/docs/reference/runtime/GeneratorExecutionGenerated.md +14 -0
  155. package/dist/docs/reference/runtime/GeneratorExecutionInvalid.md +13 -0
  156. package/dist/docs/reference/runtime/GeneratorExecutionResult.md +9 -0
  157. package/dist/docs/reference/runtime/MeshTopologyMode.md +10 -0
  158. package/dist/docs/reference/runtime/ModelBounds.md +12 -0
  159. package/dist/docs/reference/runtime/ModelStats.md +15 -0
  160. package/dist/docs/reference/runtime/ModelTimings.md +27 -0
  161. package/dist/docs/reference/runtime/ParsedGeneratorModule.md +9 -0
  162. package/dist/docs/reference/runtime/RuntimeError.md +14 -0
  163. package/dist/docs/reference/runtime/ValidateRequest.md +15 -0
  164. package/dist/docs/reference/runtime/ValidationError.md +13 -0
  165. package/dist/docs/reference/runtime/ValidationSuccess.md +13 -0
  166. package/dist/docs/reference/runtime/WorkerRequest.md +9 -0
  167. package/dist/docs/reference/runtime/WorkerResponse.md +9 -0
  168. package/dist/docs/reference/runtime/executeGenerator.md +10 -0
  169. package/dist/docs/reference/runtime/generationIssues.md +10 -0
  170. package/dist/docs/reference/runtime/isGeneratorModule.md +9 -0
  171. package/dist/docs/reference/runtime/parseGeneratedParts.md +15 -0
  172. package/dist/docs/reference/runtime/parseGenerationSentAt.md +10 -0
  173. package/dist/docs/reference/runtime/parseGeneratorModule.md +10 -0
  174. package/dist/generator-package/constants.d.ts +1 -1
  175. package/dist/generator-package/constants.js +1 -1
  176. package/dist/generator-package/validate-manifest.js +2 -2
  177. package/dist/parameters/issues.d.ts +2 -2
  178. package/dist/parameters/issues.js +2 -2
  179. package/dist/parameters/strict.d.ts +4 -3
  180. package/dist/parameters/strict.d.ts.map +1 -1
  181. package/dist/parameters/strict.js +2 -3
  182. package/dist/parameters/strict.js.map +1 -1
  183. package/dist/{execute-generator.d.ts → runtime/execute-generator.d.ts} +4 -4
  184. package/dist/runtime/execute-generator.d.ts.map +1 -0
  185. package/dist/{execute-generator.js → runtime/execute-generator.js} +1 -1
  186. package/dist/runtime/execute-generator.js.map +1 -0
  187. package/dist/{generated-parts.d.ts → runtime/generated-parts.d.ts} +1 -1
  188. package/dist/runtime/generated-parts.d.ts.map +1 -0
  189. package/dist/runtime/generated-parts.js.map +1 -0
  190. package/dist/{parse-generator-module.d.ts → runtime/parse-generator-module.d.ts} +2 -2
  191. package/dist/runtime/parse-generator-module.d.ts.map +1 -0
  192. package/dist/{parse-generator-module.js → runtime/parse-generator-module.js} +1 -1
  193. package/dist/runtime/parse-generator-module.js.map +1 -0
  194. package/dist/{worker-contracts.d.ts → runtime/worker-contracts.d.ts} +2 -2
  195. package/dist/runtime/worker-contracts.d.ts.map +1 -0
  196. package/dist/runtime/worker-contracts.js.map +1 -0
  197. package/dist/runtime.d.ts +8 -8
  198. package/dist/runtime.d.ts.map +1 -1
  199. package/dist/runtime.js +4 -4
  200. package/dist/runtime.js.map +1 -1
  201. package/dist/source-visibility.d.ts +2 -3
  202. package/dist/source-visibility.d.ts.map +1 -1
  203. package/package.json +4 -3
  204. package/dist/execute-generator.d.ts.map +0 -1
  205. package/dist/execute-generator.js.map +0 -1
  206. package/dist/generated-parts.d.ts.map +0 -1
  207. package/dist/generated-parts.js.map +0 -1
  208. package/dist/parse-generator-module.d.ts.map +0 -1
  209. package/dist/parse-generator-module.js.map +0 -1
  210. package/dist/worker-contracts.d.ts.map +0 -1
  211. package/dist/worker-contracts.js.map +0 -1
  212. /package/dist/{generated-parts.js → runtime/generated-parts.js} +0 -0
  213. /package/dist/{worker-contracts.js → runtime/worker-contracts.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @metamesh/generator-sdk
2
2
 
3
+ ## 0.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 2ebe03f: Ship exact-version offline documentation and a development-only authoring CLI for semantic
8
+ checking, generation, captured geometry inspection, and explicit Chromium previews. Use exact
9
+ package versions in documentation metadata and reject unsupported authoring artifact formats.
10
+ Provide generated command help and strict per-command argument validation, and enforce semantic
11
+ checking even when the consumer's TypeScript configuration disables it.
12
+
13
+ Publish lightweight model and Generator testing helpers as `@metamesh/testkit`. Move the
14
+ `metamesh` executable and Node authoring API into `@metamesh/cli`, which owns compiler, bundler,
15
+ renderer, and browser dependencies. Remove the former package name and authoring entry from
16
+ Testkit without compatibility aliases.
17
+
18
+ - 7e1b75d: Simplify modeling authoring with `polygon` construction, shared bounds and vector text fitting,
19
+ Section patterns, pure pattern transforms, and explicit profile closure and part layout helpers.
20
+ Zero-sized round, chamfer, and smooth treatments preserve untreated geometry.
21
+
22
+ Replace the public geometry vocabulary with `Vector2`, `Vector3`, `Contour`, `Polygon`, and
23
+ `Region`, and use canonical `Bounds2` and `Bounds3` throughout. Remove retired constructor and
24
+ type names. Bundles require runtime major 5 and the generation realm uses protocol 5; older
25
+ runtime packages reject before execution. The package envelope remains format 4.
26
+
27
+ ## 0.12.0
28
+
29
+ No changes in this release.
30
+
3
31
  ## 0.11.0
4
32
 
5
33
  ### Minor Changes
package/README.md CHANGED
@@ -1,32 +1,29 @@
1
1
  # `@metamesh/generator-sdk`
2
2
 
3
- Turn a parametric model into a MetaMesh Generator. Define its controls once, infer parameter
4
- types, and use the same validation contract for forms, saved values, and execution.
3
+ Turn a parametric model into a MetaMesh Generator. Define controls once, infer their TypeScript
4
+ types, and use the same parameter contract for forms, saved values, and execution.
5
5
 
6
6
  > **Preview:** `0.x` minor releases may break compatibility. Patches remain compatible within the
7
- > same minor line. Stable support requires an explicit `1.0.0` review.
7
+ > same minor line.
8
+
9
+ ## Installation
8
10
 
9
11
  ```bash
10
12
  pnpm add @metamesh/generator-sdk
11
13
  ```
12
14
 
13
- | Import | Use it for |
14
- | ------------- | ---------------------------------------------------------- |
15
- | Package root | Definitions, presets, and module authoring |
16
- | `/parameters` | Defaults, recovering saved values, and strict codecs |
17
- | `/runtime` | Module execution, generated mesh data, and Worker messages |
18
- | `/packages` | Package, catalog, and installation parsing |
19
- | `/fonts` | Font selection values |
15
+ The SDK is renderer-neutral. To build geometry in the example below, also install
16
+ [`@metamesh/modeling`](https://github.com/JasonKoolman/metamesh/blob/main/packages/modeling/README.md).
20
17
 
21
18
  ## Define controls
22
19
 
23
- A definition is serializable metadata. Capture its literal IDs and options to derive exact
24
- parameter types:
20
+ A definition describes the Generator and its editable parameters. Literal IDs and options give
21
+ you exact parameter types:
25
22
 
26
23
  ```ts
27
24
  import { defineGenerator, type GeneratorParams } from "@metamesh/generator-sdk";
28
25
 
29
- const definition = defineGenerator({
26
+ export const definition = defineGenerator({
30
27
  id: "sleeve",
31
28
  version: "0.1.0",
32
29
  title: "Sleeve",
@@ -39,81 +36,85 @@ const definition = defineGenerator({
39
36
  type Parameters = GeneratorParams<typeof definition>;
40
37
  ```
41
38
 
42
- For saved values, `/parameters` provides `normalizeParameters`: it drops unknown keys, restores
43
- missing or invalid values from defaults, and clamps numbers. At a trust boundary,
44
- `createParamCodec(definition)` rejects missing, unknown, invalid, or noncanonical values instead.
45
- Both return fresh frozen parameter maps.
46
-
47
- Parameter types describe saved values. Optional local `ui` metadata owns group/row membership,
48
- hints, visibility, editing increments, and physical editor scale bindings. Number inputs and
49
- sliders both use `type: "number"`; sliders declare `ui.control: "slider"`, bounds, and `ui.step`.
50
- Fixed choices use `choice`; geometric values use `side-profile` and `contour`.
51
-
52
- The `/packages` entry point validates the editable `{ groups, parameters }` document with
53
- `safeParseParameterDefinitionDocument`, returning structured issue paths and codes. Complete
54
- Generator and package parsing uses the same rules. The package also ships
55
- `@metamesh/generator-sdk/parameters.schema.json` for offline editor completion and structural
56
- validation; the SDK additionally checks references, defaults, and cross-field invariants.
39
+ Definitions are serializable. Optional `ui` metadata describes grouping, visibility, hints, and
40
+ editing increments. Number inputs and sliders share `type: "number"`; sliders add
41
+ `ui.control: "slider"`, bounds, and `ui.step`. See the
42
+ [parameter guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx)
43
+ for the full set of controls.
57
44
 
58
45
  ## Generate a model
59
46
 
60
- A Generator exports one format-4 default envelope containing its definition-bound program:
47
+ Add a synchronous generation program to the same module. Assertions describe relationships
48
+ between controls; the module helper binds the program to its definition:
61
49
 
62
50
  ```ts
63
- import { defineGeneratorModule, type GeneratorParams } from "@metamesh/generator-sdk";
51
+ import { defineGeneratorModule } from "@metamesh/generator-sdk";
64
52
  import { generate, tube } from "@metamesh/modeling";
65
53
 
66
- const model = generate<GeneratorParams<typeof definition>>(({ params, assert, part }) => {
54
+ const model = generate<Parameters>(({ params, assert, part }) => {
67
55
  assert(
68
56
  params.boreDiameter < params.outerDiameter,
69
57
  "The bore must be smaller than the outside diameter.",
70
58
  { parameterId: "boreDiameter" }
71
59
  );
72
- return [
73
- part(
74
- "body",
75
- tube({
76
- outerRadius: params.outerDiameter / 2,
77
- innerRadius: params.boreDiameter / 2,
78
- height: 20,
79
- })
80
- ),
81
- ];
60
+ return part(
61
+ "body",
62
+ tube({
63
+ outerRadius: params.outerDiameter / 2,
64
+ innerRadius: params.boreDiameter / 2,
65
+ height: 20,
66
+ })
67
+ );
82
68
  });
83
69
  export default defineGeneratorModule({ definition, generate: model });
84
70
  ```
85
71
 
86
- The host normalizes parameters and resolves assets before synchronous generation. Modeling owns
87
- optional computed caches, deferred recipes, sessions and immutable snapshots; the SDK stays
88
- renderer-neutral and imports no engine. The [generation contract](https://github.com/JasonKoolman/metamesh/blob/main/docs/model-generation.md)
89
- owns dependencies, assertions, placement and lifecycle. `/runtime` strictly checks the new default
90
- envelope and maps engine diagnostics to definition-owned issues. Unsupported package formats are
91
- rejected before executable bytes are evaluated.
72
+ Return a single `part(...)` or a readonly array of parts. The host normalizes parameters and prepares
73
+ assets before generation. Modeling manages geometry, sessions, and snapshots; the SDK provides
74
+ portable definitions, module envelopes, and validated runtime messages. Unsupported package formats
75
+ reject before executable bytes are evaluated.
92
76
 
93
- For incremental Worker deliveries, `/runtime` provides `GeneratedPartsDecoder`. It validates new
94
- geometry buffers once and hydrates later resource references, while checking part metadata and
95
- aggregate limits on every delivery. The receiving host keeps admitted buffers immutable and
96
- attached, and calls `clear()` when replacing the delivery source.
77
+ ## Work with saved values
97
78
 
98
- ## Documentation
79
+ Use `normalizeParameters` from `/parameters` to recover saved values: it drops unknown keys,
80
+ restores missing or invalid values from defaults, and clamps numbers. At a trust boundary, use
81
+ `createParamCodec(definition)` to reject incomplete, unknown, invalid, or noncanonical values.
82
+ Both return fresh frozen parameter maps.
83
+
84
+ For definition editors, `/packages` provides `safeParseParameterDefinitionDocument` and structured
85
+ issue paths. The included `@metamesh/generator-sdk/parameters.schema.json` supports offline
86
+ completion; SDK validation also checks references, defaults, and cross-field rules.
87
+
88
+ ## API entry points
99
89
 
100
- Read the [parameters guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx)
101
- for controls and validation, or [local authoring](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/create/author-locally.mdx)
102
- for the current Generator workflow. The public documentation site is planned for `metamesh.studio/docs`.
90
+ | Import | Use it for |
91
+ | ------------------------------------ | ------------------------------------------------ |
92
+ | `@metamesh/generator-sdk` | Definitions, presets, and module authoring |
93
+ | `@metamesh/generator-sdk/parameters` | Defaults, saved values, and strict codecs |
94
+ | `@metamesh/generator-sdk/runtime` | Module execution, mesh data, and Worker messages |
95
+ | `@metamesh/generator-sdk/packages` | Package, catalog, and installation parsing |
96
+ | `@metamesh/generator-sdk/fonts` | Immutable font selection values |
97
+
98
+ Incremental Worker hosts can use `GeneratedPartsDecoder` from `/runtime` to hydrate validated
99
+ geometry resources while checking part metadata and aggregate limits on every delivery. Keep
100
+ admitted buffers immutable and attached; call `clear()` when replacing the delivery source.
101
+
102
+ ## Documentation
103
103
 
104
- Exact SDK contracts live with their code:
104
+ Resolve `@metamesh/generator-sdk/docs/manifest.json` from your project for exact-version Markdown
105
+ guides and annotated declaration references. Document paths are relative to that manifest.
106
+ With [`@metamesh/cli`](https://github.com/JasonKoolman/metamesh/blob/main/packages/cli/README.md)
107
+ installed, `pnpm exec metamesh docs search "parameters"` searches the local index;
108
+ `pnpm exec metamesh docs show sdk/guide/generator-modules` reads this package's authoring guide.
105
109
 
106
- - [Parameter definitions](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/parameter-contracts.ts),
107
- [side profiles](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/side-profiles.ts), and
108
- [contours](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/contours.ts).
109
- - [Authoring helpers](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/authoring.ts),
110
- [module contract](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/generator-module.ts), and
111
- [runtime execution](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/execute-generator.ts).
110
+ - [Parameters and validation](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx) — controls, defaults, and diagnostics.
111
+ - [Local authoring](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/create/author-locally.mdx) — the current Generator workflow.
112
+ - [API source](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/index.ts) — exports, types, and implementation references.
112
113
 
113
- For maintainers, the [package contract](https://github.com/JasonKoolman/metamesh/blob/main/docs/generator-packages.md)
114
- owns compatibility and trust; [workspace instructions](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/AGENTS.md)
115
- own contract review and required checks.
114
+ Until the public documentation site launches, use these repository guides or
115
+ [run the docs locally](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/README.md#local-use).
116
+ For package development, see [Contributing](https://github.com/JasonKoolman/metamesh/blob/main/CONTRIBUTING.md).
116
117
 
117
118
  ## License
118
119
 
119
- Apache-2.0. The complete terms are included in `LICENSE`.
120
+ [Apache-2.0](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/LICENSE).
@@ -66,10 +66,10 @@ export interface GeneratorPreset<D extends GeneratorDefinition = GeneratorDefini
66
66
  readonly description?: string | undefined;
67
67
  readonly parameterValues: GeneratorParams<D>;
68
68
  }
69
- export type Vec3 = readonly [number, number, number];
69
+ export type Vector3 = readonly [number, number, number];
70
70
  export interface ModelBounds {
71
- readonly min: Vec3;
72
- readonly max: Vec3;
71
+ readonly min: Vector3;
72
+ readonly max: Vector3;
73
73
  }
74
74
  export interface ModelStats {
75
75
  readonly triangles?: number | undefined;
@@ -104,8 +104,8 @@ export interface GeneratedPart {
104
104
  readonly geometryId: string;
105
105
  readonly geometryRevision: number;
106
106
  /** Authoritative translation in mm and fixed global X, Y, Z rotations in degrees. */
107
- readonly position: Vec3;
108
- readonly rotation: Vec3;
107
+ readonly position: Vector3;
108
+ readonly rotation: Vector3;
109
109
  readonly id: string;
110
110
  readonly positions: Float32Array;
111
111
  readonly indices: Uint32Array;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ # Design reusable controls
2
+
3
+ Make a code Project useful to someone else with clear inputs, tested defaults, focused validation, and portable files.
4
+
5
+ Turn a working authored Project into a model someone can adjust without reading its source.
6
+ If you need a working model first, follow [Build your first code Project](https://metamesh.studio/docs/develop/code-projects).
7
+
8
+
9
+
10
+ ```ts
11
+ const { width, depth, height, holeDiameter, addHole } = params;
12
+ const body = box({ size: [width, depth, height] });
13
+ if (!addHole) return [part("body", body)];
14
+ // Two extra millimetres clear the centered body's top and bottom faces.
15
+ const bore = cylinder({ height: height + 2, diameter: holeDiameter, sizing: "face" });
16
+ return [part("body", body.subtract([bore]))];
17
+ ```
18
+
19
+ A plate is a useful starting example: its controls describe the finished size and an optional hole, while the source handles construction.
20
+
21
+
22
+
23
+ ## Choose the decisions to expose
24
+
25
+ Describe what someone should be able to change: the overall size, a fit, an optional feature, or
26
+ which parts to produce. Expose those decisions as controls. Keep implementation details in the
27
+ source unless changing them serves a clear purpose.
28
+
29
+ For a plate with an optional hole, Width and Hole diameter express design decisions. The cylinder's
30
+ segment count usually does not need equal prominence.
31
+
32
+ Open **Parameter actions → Edit controls**, or **MetaMesh menu → Current project → Edit controls**.
33
+ Group related controls into sections, put the most common decisions first, and choose
34
+ **Apply & return** to use the updated definition. See
35
+ [Define parameters and validation](parameters.md#choose-the-right-control)
36
+ for supported control types and their configuration.
37
+
38
+ ## Make labels and units unambiguous
39
+
40
+ Use labels that describe the finished model, such as **Outer Diameter**, rather than a variable
41
+ name like `d2`. Add a short description when a measurement could have more than one interpretation:
42
+ for example, whether Length includes an end cap.
43
+
44
+ Show units for dimensional controls. MetaMesh model dimensions use millimetres; explain any
45
+ conversion your source performs so the displayed input and exported size agree. Use a step that
46
+ matches the decision: whole numbers for a count, or an appropriate increment for a dimension.
47
+
48
+ Keep control IDs stable as you refine labels. IDs connect controls to source values and validation
49
+ messages; a clearer label should not require a different identifier.
50
+
51
+ ## Choose defaults that demonstrate the model
52
+
53
+ Choose representative defaults that produce a useful, recognizable result without validation
54
+ errors and show the important features without requiring several edits.
55
+
56
+ Try the model from the parameter panel with the code editor closed. Confirm that:
57
+
58
+ - the first controls lead to the most useful variations;
59
+ - changing a value produces the result its label suggests;
60
+ - optional features reveal their relevant controls; and
61
+ - resetting values restores the intended starting model.
62
+
63
+ Use [conditional visibility](parameters.md#reveal-a-control-only-when-it-applies)
64
+ to keep optional settings out of the way until they matter.
65
+
66
+ ## Explain constraints where they matter
67
+
68
+ Set field limits for a single value's supported range. Add cross-field validation when a valid
69
+ range depends on another control, such as a hole that must fit inside a plate.
70
+
71
+ A helpful message identifies the problem and gives a next action: "Reduce Hole diameter or increase
72
+ Width" is more useful than "Invalid parameters." Associate the message with the relevant control.
73
+ Use an error for unsupported combinations and a warning for a trade-off the person can choose to
74
+ accept. The [validation guide](parameters.md#add-cross-field-validation-in-typescript)
75
+ explains the implementation with examples.
76
+
77
+ Test more than the default combination. Check the smallest and largest supported dimensions,
78
+ optional features, and any choice or list combinations. After an error, confirm that the suggested
79
+ correction produces a current model again.
80
+
81
+ For the plate above, test these decisions separately:
82
+
83
+ | Variation | What to verify |
84
+ | --------------------------------- | ----------------------------------------------------------------------------- |
85
+ | Turn Add hole off | The plate becomes solid and hides Hole diameter. |
86
+ | Change Width and Depth | The body follows the controls; the hole stays in its intended position. |
87
+ | Make the hole wider than the body | The message identifies Hole diameter and explains which dimensions to change. |
88
+ | Restore valid values | A new successful preview replaces the retained older model. |
89
+ | Reset all | The demonstrated starting configuration returns without errors. |
90
+
91
+ ## Keep related parts understandable
92
+
93
+ Use named parts when one set of controls produces related outputs, such as a lid and its container.
94
+ Give them stable, descriptive IDs so inspection and export remain understandable as dimensions
95
+ change. The [part contract](https://metamesh.studio/docs/develop/code-project-contract#parts-and-placement) describes the
96
+ supported output shape.
97
+
98
+ Inspect each output and check the exported model in its intended downstream tool. A valid solid
99
+ alone does not establish a suitable fit or printable wall thickness. Follow the
100
+ [export guide](https://metamesh.studio/docs/use/export-3mf) for format capabilities and verification steps.
101
+
102
+ ## Keep a portable copy
103
+
104
+ Save the authored Project as a `.metamesh.json` file, then
105
+ [import the Project file](https://metamesh.studio/docs/use/projects-and-offline#save-and-import-an-authored-project) to check its source,
106
+ controls, and values. Keep the file in storage you control; browser storage is local to the device
107
+ and profile.
108
+
109
+ A saved Project is not a published catalog Generator. Check
110
+ [publishing availability](https://metamesh.studio/docs/create/publishing-status) if you intend to distribute through
111
+ MetaMesh.
112
+
113
+ - [Define parameters and validation](parameters.md)
114
+ - [Save and protect your work](https://metamesh.studio/docs/use/projects-and-offline)
@@ -0,0 +1,120 @@
1
+ # `@metamesh/generator-sdk`
2
+
3
+ Turn a parametric model into a MetaMesh Generator. Define controls once, infer their TypeScript
4
+ types, and use the same parameter contract for forms, saved values, and execution.
5
+
6
+ > **Preview:** `0.x` minor releases may break compatibility. Patches remain compatible within the
7
+ > same minor line.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ pnpm add @metamesh/generator-sdk
13
+ ```
14
+
15
+ The SDK is renderer-neutral. To build geometry in the example below, also install
16
+ [`@metamesh/modeling`](https://github.com/JasonKoolman/metamesh/blob/main/packages/modeling/README.md).
17
+
18
+ ## Define controls
19
+
20
+ A definition describes the Generator and its editable parameters. Literal IDs and options give
21
+ you exact parameter types:
22
+
23
+ ```ts
24
+ import { defineGenerator, type GeneratorParams } from "@metamesh/generator-sdk";
25
+
26
+ export const definition = defineGenerator({
27
+ id: "sleeve",
28
+ version: "0.1.0",
29
+ title: "Sleeve",
30
+ groups: [],
31
+ parameters: [
32
+ { id: "outerDiameter", label: "Outer diameter", type: "number", default: 20, min: 4 },
33
+ { id: "boreDiameter", label: "Bore diameter", type: "number", default: 10, min: 1 },
34
+ ],
35
+ });
36
+ type Parameters = GeneratorParams<typeof definition>;
37
+ ```
38
+
39
+ Definitions are serializable. Optional `ui` metadata describes grouping, visibility, hints, and
40
+ editing increments. Number inputs and sliders share `type: "number"`; sliders add
41
+ `ui.control: "slider"`, bounds, and `ui.step`. See the
42
+ [parameter guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx)
43
+ for the full set of controls.
44
+
45
+ ## Generate a model
46
+
47
+ Add a synchronous generation program to the same module. Assertions describe relationships
48
+ between controls; the module helper binds the program to its definition:
49
+
50
+ ```ts
51
+ import { defineGeneratorModule } from "@metamesh/generator-sdk";
52
+ import { generate, tube } from "@metamesh/modeling";
53
+
54
+ const model = generate<Parameters>(({ params, assert, part }) => {
55
+ assert(
56
+ params.boreDiameter < params.outerDiameter,
57
+ "The bore must be smaller than the outside diameter.",
58
+ { parameterId: "boreDiameter" }
59
+ );
60
+ return part(
61
+ "body",
62
+ tube({
63
+ outerRadius: params.outerDiameter / 2,
64
+ innerRadius: params.boreDiameter / 2,
65
+ height: 20,
66
+ })
67
+ );
68
+ });
69
+ export default defineGeneratorModule({ definition, generate: model });
70
+ ```
71
+
72
+ Return a single `part(...)` or a readonly array of parts. The host normalizes parameters and prepares
73
+ assets before generation. Modeling manages geometry, sessions, and snapshots; the SDK provides
74
+ portable definitions, module envelopes, and validated runtime messages. Unsupported package formats
75
+ reject before executable bytes are evaluated.
76
+
77
+ ## Work with saved values
78
+
79
+ Use `normalizeParameters` from `/parameters` to recover saved values: it drops unknown keys,
80
+ restores missing or invalid values from defaults, and clamps numbers. At a trust boundary, use
81
+ `createParamCodec(definition)` to reject incomplete, unknown, invalid, or noncanonical values.
82
+ Both return fresh frozen parameter maps.
83
+
84
+ For definition editors, `/packages` provides `safeParseParameterDefinitionDocument` and structured
85
+ issue paths. The included `@metamesh/generator-sdk/parameters.schema.json` supports offline
86
+ completion; SDK validation also checks references, defaults, and cross-field rules.
87
+
88
+ ## API entry points
89
+
90
+ | Import | Use it for |
91
+ | ------------------------------------ | ------------------------------------------------ |
92
+ | `@metamesh/generator-sdk` | Definitions, presets, and module authoring |
93
+ | `@metamesh/generator-sdk/parameters` | Defaults, saved values, and strict codecs |
94
+ | `@metamesh/generator-sdk/runtime` | Module execution, mesh data, and Worker messages |
95
+ | `@metamesh/generator-sdk/packages` | Package, catalog, and installation parsing |
96
+ | `@metamesh/generator-sdk/fonts` | Immutable font selection values |
97
+
98
+ Incremental Worker hosts can use `GeneratedPartsDecoder` from `/runtime` to hydrate validated
99
+ geometry resources while checking part metadata and aggregate limits on every delivery. Keep
100
+ admitted buffers immutable and attached; call `clear()` when replacing the delivery source.
101
+
102
+ ## Documentation
103
+
104
+ Resolve `@metamesh/generator-sdk/docs/manifest.json` from your project for exact-version Markdown
105
+ guides and annotated declaration references. Document paths are relative to that manifest.
106
+ With [`@metamesh/cli`](https://github.com/JasonKoolman/metamesh/blob/main/packages/cli/README.md)
107
+ installed, `pnpm exec metamesh docs search "parameters"` searches the local index;
108
+ `pnpm exec metamesh docs show sdk/guide/generator-modules` reads this package's authoring guide.
109
+
110
+ - [Parameters and validation](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/parameters-and-validation.mdx) — controls, defaults, and diagnostics.
111
+ - [Local authoring](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/create/author-locally.mdx) — the current Generator workflow.
112
+ - [API source](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/src/index.ts) — exports, types, and implementation references.
113
+
114
+ Until the public documentation site launches, use these repository guides or
115
+ [run the docs locally](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/README.md#local-use).
116
+ For package development, see [Contributing](https://github.com/JasonKoolman/metamesh/blob/main/CONTRIBUTING.md).
117
+
118
+ ## License
119
+
120
+ [Apache-2.0](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/LICENSE).