forgecad 0.9.13 → 0.9.15

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 (216) hide show
  1. package/LICENSE +6 -4
  2. package/README.md +8 -4
  3. package/dist/assets/{AdminPage-DramHHDf.js → AdminPage-CDyGUinA.js} +2 -2
  4. package/dist/assets/{BenchmarkPage-Bjgkh5m9.js → BenchmarkPage-DfPMY_-d.js} +4 -15
  5. package/dist/assets/{BlogPage-n_HGP3Qm.js → BlogPage-kF0fkdJT.js} +2 -2
  6. package/dist/assets/{DocsPage-WCIkPmzC.js → DocsPage-B954L3YN.js} +9 -3
  7. package/dist/assets/EditorApp-Beb-IZ0y.js +14014 -0
  8. package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-CuDLxKqL.css} +698 -0
  9. package/dist/assets/{EmbedViewer-DEZKqdfW.js → EmbedViewer-C77B-TrF.js} +3 -3
  10. package/dist/assets/{LandingPageProofDriven-CeRIctuj.js → LandingPageProofDriven-Cr6fXMDj.js} +35 -37
  11. package/dist/assets/LegalPage-BRlScr9A.css +91 -0
  12. package/dist/assets/LegalPage-Dzklqmmg.js +39 -0
  13. package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
  14. package/dist/assets/{PricingPage-rIRa8p4Y.js → PricingPage-zWXkvlwl.js} +19 -19
  15. package/dist/assets/{SettingsPage-BqCUvEXM.js → SettingsPage-Bz0of4KQ.js} +2 -2
  16. package/dist/assets/app-CE3sYcV7.css +3890 -0
  17. package/dist/assets/{app-BUZqJvSO.js → app-D3kDkggg.js} +2305 -960
  18. package/dist/assets/cli/{render-lhGxj50Y.js → render-DSY3mMQa.js} +423 -30
  19. package/dist/assets/{constructionHistoryWorker-ipD1jcIv.js → constructionHistoryWorker-gpDo-uH2.js} +927 -243
  20. package/dist/assets/{evalWorker-CHXSe_-u.js → evalWorker-CU0Ke6DP.js} +7799 -4163
  21. package/dist/assets/{forgecad_geometry-BVnIeXMG.js → forgecad_geometry-Dgceylq9.js} +43 -1
  22. package/dist/assets/{forgecad_geometry_bg-DufhhCBV.wasm → forgecad_geometry_bg-dD4RNQF1.wasm} +0 -0
  23. package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-COyp8XXA.js} +927 -243
  24. package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
  25. package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
  26. package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
  27. package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
  28. package/dist/assets/{manifold-D1LZIHqn.js → manifold-BRI5prcH.js} +1 -1
  29. package/dist/assets/{manifold-C2fwoTgd.js → manifold-C-3h2M7p.js} +2 -2
  30. package/dist/assets/{manifold-BTkzxi9V.js → manifold-DNkrUWpA.js} +1 -1
  31. package/dist/assets/{reportWorker-Cq1qGmg0.js → reportWorker-CdBz5bNg.js} +7537 -10856
  32. package/dist/assets/{scalar-sampling-budget-D9Qv_UlJ.js → scalar-sampling-budget-wJF98aY9.js} +6943 -4345
  33. package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-B-9VbLIs.js} +32 -1
  34. package/dist/assets/{renderSceneState-Dr0xPq1A.js → targets-B9sGB5nB.js} +27 -1
  35. package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
  36. package/dist/cli/render.html +1 -1
  37. package/dist/docs/index.html +2 -2
  38. package/dist/docs-raw/AI/ai-native-cad.md +50 -0
  39. package/dist/docs-raw/AI/usage.md +9 -17
  40. package/dist/docs-raw/CLI.md +71 -21
  41. package/dist/docs-raw/component-model.md +27 -11
  42. package/dist/docs-raw/generated/assembly.md +301 -212
  43. package/dist/docs-raw/generated/concepts.md +238 -240
  44. package/dist/docs-raw/generated/core.md +283 -6
  45. package/dist/docs-raw/generated/curves.md +274 -361
  46. package/dist/docs-raw/generated/lib.md +7 -1
  47. package/dist/docs-raw/generated/output.md +19 -4
  48. package/dist/docs-raw/generated/runtime-names.md +41 -0
  49. package/dist/docs-raw/generated/sdf.md +31 -0
  50. package/dist/docs-raw/generated/sheet-metal.md +9 -0
  51. package/dist/docs-raw/generated/sketch.md +44 -1
  52. package/dist/docs-raw/generated/viewport.md +14 -6
  53. package/dist/docs-raw/guides/coordinate-system.md +20 -16
  54. package/dist/docs-raw/guides/geometry-conventions.md +2 -2
  55. package/dist/docs-raw/guides/inspection-bundles.md +2 -1
  56. package/dist/docs-raw/guides/joint-design.md +24 -0
  57. package/dist/docs-raw/guides/positioning.md +13 -3
  58. package/dist/docs-raw/legal/privacy.md +63 -0
  59. package/dist/docs-raw/legal/software-license.md +55 -0
  60. package/dist/docs-raw/legal/terms.md +87 -0
  61. package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +3 -3
  62. package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
  63. package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
  64. package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
  65. package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
  66. package/dist/docs-raw/skills/forgecad-lld.md +1 -1
  67. package/dist/docs-raw/skills/forgecad-make-a-model.md +4 -4
  68. package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
  69. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
  70. package/dist/docs-raw/skills/forgecad-project.md +1 -1
  71. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +4 -4
  72. package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
  73. package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
  74. package/dist/docs-raw/skills/forgecad.md +4 -3
  75. package/dist/index.html +40 -12
  76. package/dist/llms.txt +8 -0
  77. package/dist/site.webmanifest +1 -1
  78. package/dist/sitemap.xml +49 -13
  79. package/dist-cli/{check-compiler-LOXCPEOI.js → check-compiler-SDX5QIXI.js} +1 -2
  80. package/dist-cli/{check-query-propagation-BAKNVWXR.js → check-query-propagation-EAYEFT77.js} +1 -2
  81. package/dist-cli/{chunk-RY43WF46.js → chunk-N4O47JLF.js} +13772 -9938
  82. package/dist-cli/forgecad.js +2387 -899
  83. package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
  84. package/dist-cli/forgecad_geometry_bg.wasm +0 -0
  85. package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
  86. package/dist-skill/CONTEXT.md +1120 -724
  87. package/dist-skill/SKILL.md +3 -2
  88. package/dist-skill/docs/API/core/concepts.md +64 -1
  89. package/dist-skill/docs/CLI.md +71 -21
  90. package/dist-skill/docs/generated/assembly.md +277 -229
  91. package/dist-skill/docs/generated/core.md +283 -6
  92. package/dist-skill/docs/generated/curves.md +272 -362
  93. package/dist-skill/docs/generated/lib.md +7 -1
  94. package/dist-skill/docs/generated/output.md +19 -4
  95. package/dist-skill/docs/generated/runtime-names.md +41 -0
  96. package/dist-skill/docs/generated/sdf.md +31 -0
  97. package/dist-skill/docs/generated/sheet-metal.md +9 -0
  98. package/dist-skill/docs/generated/sketch.md +44 -2
  99. package/dist-skill/docs/generated/viewport.md +5 -90
  100. package/dist-skill/docs/guides/coordinate-system.md +20 -16
  101. package/dist-skill/docs/guides/geometry-conventions.md +2 -2
  102. package/dist-skill/docs/guides/inspection-bundles.md +2 -1
  103. package/dist-skill/docs/guides/joint-design.md +24 -0
  104. package/dist-skill/docs/guides/positioning.md +13 -3
  105. package/dist-skill/library/forgecad-3d-reconstruction/SKILL.md +2 -2
  106. package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
  107. package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
  108. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
  109. package/dist-skill/library/forgecad-make-a-model/SKILL.md +3 -3
  110. package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
  111. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  112. package/dist-skill/library/forgecad-reconstruction-benchmark/SKILL.md +3 -3
  113. package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
  114. package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
  115. package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
  116. package/examples/api/assembly-kinematics-limb.forge.js +116 -0
  117. package/examples/api/connector-frame-rig-chain.forge.js +102 -0
  118. package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
  119. package/examples/api/exact-surface-studio.forge.js +6 -8
  120. package/examples/api/helix-basics.forge.js +6 -6
  121. package/examples/api/lean-foundations/README.md +12 -0
  122. package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
  123. package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
  124. package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
  125. package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
  126. package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
  127. package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
  128. package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
  129. package/examples/api/route3d-elbow.forge.js +68 -0
  130. package/examples/api/transition-curves.forge.js +44 -15
  131. package/examples/api/y-blend-corner-showcase.forge.js +0 -2
  132. package/examples/generative/coral-vase.forge.js +1 -1
  133. package/examples/nurbs-tube.forge.js +1 -1
  134. package/package.json +14 -18
  135. package/dist/assets/EditorApp-CP9Za6tm.js +0 -13630
  136. package/dist/assets/app-CsHnaBWt.css +0 -1789
  137. package/dist/docs-raw/API/README.md +0 -16
  138. package/dist/docs-raw/API/core/concepts.md +0 -118
  139. package/dist/docs-raw/INDEX.md +0 -138
  140. package/dist/docs-raw/RELEASING.md +0 -87
  141. package/dist/docs-raw/agent-native-api.md +0 -27
  142. package/dist/docs-raw/beta-deployment.md +0 -304
  143. package/dist/docs-raw/beta-operations.md +0 -325
  144. package/dist/docs-raw/blueprint-first.md +0 -145
  145. package/dist/docs-raw/cli-monetization.md +0 -112
  146. package/dist/docs-raw/coding-best-practices.md +0 -120
  147. package/dist/docs-raw/coding.md +0 -340
  148. package/dist/docs-raw/deployment.md +0 -374
  149. package/dist/docs-raw/guides/skill-maintenance.md +0 -161
  150. package/dist/docs-raw/guides/surface-members.md +0 -82
  151. package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
  152. package/dist/docs-raw/internals/compiler.md +0 -307
  153. package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
  154. package/dist/docs-raw/internals/constraint-solver.md +0 -176
  155. package/dist/docs-raw/internals/shape-from-slices.md +0 -152
  156. package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
  157. package/dist/docs-raw/platform/admin.md +0 -45
  158. package/dist/docs-raw/platform/architecture.md +0 -82
  159. package/dist/docs-raw/platform/auth.md +0 -139
  160. package/dist/docs-raw/platform/email.md +0 -67
  161. package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
  162. package/dist/docs-raw/platform/observability.md +0 -197
  163. package/dist/docs-raw/platform/projects.md +0 -111
  164. package/dist/docs-raw/platform/sharing.md +0 -90
  165. package/dist/docs-raw/product/README.md +0 -39
  166. package/dist/docs-raw/product/api-as-product-language.md +0 -13
  167. package/dist/docs-raw/product/business-model.md +0 -15
  168. package/dist/docs-raw/product/competitive-positioning.md +0 -17
  169. package/dist/docs-raw/product/creative-manufacturing.md +0 -15
  170. package/dist/docs-raw/product/founder-story.md +0 -11
  171. package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
  172. package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
  173. package/dist/docs-raw/product/product-loop.md +0 -17
  174. package/dist/docs-raw/product/strategic-decisions.md +0 -22
  175. package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
  176. package/dist/docs-raw/product/user-segments.md +0 -15
  177. package/dist/docs-raw/product/vision.md +0 -26
  178. package/dist/docs-raw/rl-environments.md +0 -508
  179. package/dist/docs-raw/runbook.md +0 -611
  180. package/dist-cli/check-compiler-LOXCPEOI.js.map +0 -1
  181. package/dist-cli/check-query-propagation-BAKNVWXR.js.map +0 -1
  182. package/dist-cli/chunk-RY43WF46.js.map +0 -1
  183. package/dist-cli/forgecad.js.map +0 -1
  184. package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
  185. package/dist-cli/solver-46FFSK2U.js.map +0 -1
  186. package/dist-skill/SKILL-dev.md +0 -145
  187. package/dist-skill/docs-dev/API/core/concepts.md +0 -118
  188. package/dist-skill/docs-dev/CLI.md +0 -647
  189. package/dist-skill/docs-dev/agent-native-api.md +0 -27
  190. package/dist-skill/docs-dev/blueprint-first.md +0 -145
  191. package/dist-skill/docs-dev/coding-best-practices.md +0 -120
  192. package/dist-skill/docs-dev/coding.md +0 -340
  193. package/dist-skill/docs-dev/component-model.md +0 -164
  194. package/dist-skill/docs-dev/generated/assembly.md +0 -794
  195. package/dist-skill/docs-dev/generated/core.md +0 -2117
  196. package/dist-skill/docs-dev/generated/curves.md +0 -2583
  197. package/dist-skill/docs-dev/generated/lib.md +0 -169
  198. package/dist-skill/docs-dev/generated/output.md +0 -247
  199. package/dist-skill/docs-dev/generated/sdf.md +0 -446
  200. package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
  201. package/dist-skill/docs-dev/generated/sketch.md +0 -1811
  202. package/dist-skill/docs-dev/generated/viewport.md +0 -585
  203. package/dist-skill/docs-dev/generated/wood.md +0 -108
  204. package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
  205. package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
  206. package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
  207. package/dist-skill/docs-dev/guides/joint-design.md +0 -78
  208. package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
  209. package/dist-skill/docs-dev/guides/positioning.md +0 -161
  210. package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
  211. package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
  212. package/dist-skill/docs-dev/internals/compiler.md +0 -307
  213. package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
  214. package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
  215. package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
  216. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
@@ -17,7 +17,7 @@ Author or modify ForgeCAD models, sketches, assemblies, and CLI workflows. Prefe
17
17
  5. Default to a concrete first pass — easy iteration beats speculative design review.
18
18
  6. If an existing model is broken, replace the weak structure rather than preserving bad architecture.
19
19
  7. Validate with `forgecad run <file>` (add `--debug-imports` for import chain issues, and pass `--backend manifold|occt|truck` when the backend matters).
20
- 8. For `jointsView()` animations, keep wrapped revolute tracks continuous across branch cuts; do not assume the viewport will auto-fix `-180/180` jumps.
20
+ 8. For moving assemblies, return the `Assembly` directly so runtime controls re-solve the link/edge kinematics model instead of stacking viewport-only transforms.
21
21
  9. Model the physical artifact, not an educational diagram. Do not add explanatory labels, arrows, legends, or text plaques unless the user explicitly asks for a presentation or teaching view. Product markings are allowed only when they would exist on the real object.
22
22
  10. Build the real closed CAD first. Do not bake cutaways, sectioned shells, permanently exploded layouts, or hidden-parts views into the default model just to show internals. Use viewer-only cut planes, `explodeView`, object hiding, transparency, or `inspect sections` after the artifact exists.
23
23
 
@@ -40,6 +40,7 @@ Load groups top-to-bottom, stopping when you have what the task needs.
40
40
  Execution model, colors, coordinate system, primitives, booleans, patterns, imports, parameters, topology, edge queries.
41
41
 
42
42
  - `{{SKILL_DIR}}/docs/API/core/concepts.md`
43
+ - `{{SKILL_DIR}}/docs/generated/runtime-names.md`
43
44
  - `{{SKILL_DIR}}/docs/generated/core.md`
44
45
 
45
46
  ### 2. Static Assembly and Positioning (for any multi-part model)
@@ -89,7 +90,7 @@ Parametric bolts, nuts, washers, standard hardware, gears, pipes, and structural
89
90
 
90
91
  ### 9. Runtime Viewport APIs (for cut planes, exploded views, hiding, and animation playback)
91
92
 
92
- Viewer-only APIs such as cutPlane, explodeView, jointsView, and animation behavior.
93
+ Viewer-only APIs such as cutPlane, explodeView, render labels, comparison references, and runtime display behavior.
93
94
 
94
95
  - `{{SKILL_DIR}}/docs/generated/viewport.md`
95
96
 
@@ -28,7 +28,32 @@ const bomHelpers = require("./bom.js");
28
28
  bomHelpers.addFasteners(...);
29
29
  ```
30
30
 
31
- Top-level declarations such as `const bom = ...`, `let scene = ...`, or `class Shape {}` collide with the injected runtime names. If you need a local helper, choose a project-specific name like `projectBom`, `sceneConfig`, or `makeShape`.
31
+ Top-level lexical declarations such as `const bom = ...`, `let slot = ...`, `const lib = ...`, `const joint = ...`, or `class Shape {}` collide with the injected runtime names. This is checked when the script runs, so agents should treat these names as reserved before executing the model.
32
+
33
+ Use project-specific local names instead:
34
+
35
+ ```javascript
36
+ // BAD — `lib` and `slot` are injected runtime names.
37
+ const lib = require("./wheel-lib.js");
38
+ const slot = rect(20, 5);
39
+
40
+ // GOOD — local names describe the project role.
41
+ const wheelLib = require("./wheel-lib.js");
42
+ const axleSlotSketch = rect(20, 5);
43
+ ```
44
+
45
+ If a helper module exports a name that matches a ForgeCAD runtime name, keep the module under one local object name or rename during destructuring:
46
+
47
+ ```javascript
48
+ // GOOD — no top-level `slot` declaration.
49
+ const wheelHelpers = require("./wheel-helpers.js");
50
+ const axleSlot = wheelHelpers.slot(...);
51
+
52
+ // GOOD — imported helper is renamed.
53
+ const { slot: makeAxleSlot } = require("./wheel-helpers.js");
54
+ ```
55
+
56
+ The complete collision-reserved list is generated from the runtime source in [Runtime Names](../../generated/runtime-names.md). Check that list before using natural local names such as `lib`, `slot`, `joint`, `group`, `path`, `text2d`, `scene`, or `Shape`.
32
57
 
33
58
  ## Execution Model
34
59
 
@@ -67,6 +92,44 @@ return {
67
92
  };
68
93
  ```
69
94
 
95
+ ### Forge-Aware Builder Modules
96
+
97
+ A `.forge.js` file can also return builder functions. Those functions keep access to
98
+ the ForgeCAD runtime names from their defining file, so this is the supported way
99
+ to share sketch, profile, shape, or assembly builders that need APIs such as
100
+ `path()`, `circle2d()`, `box()`, or `assembly()`.
101
+
102
+ This pattern works well when a file should be both directly inspectable and
103
+ importable: render the flat profiles or part preview when the file is opened on
104
+ its own, and export builders under a named object for the assembly file.
105
+
106
+ ```javascript
107
+ // profiles.forge.js - inspectable on its own, reusable through require()
108
+ function wheelProfile() {
109
+ return circle2d(40).subtract(circle2d(18));
110
+ }
111
+
112
+ return {
113
+ preview: [{ name: 'Wheel profile', sketch: wheelProfile() }],
114
+ make: { wheelProfile },
115
+ };
116
+ ```
117
+
118
+ ```javascript
119
+ // main.forge.js - reuses the exact inspected profile
120
+ const profiles = require('./profiles.forge.js');
121
+ const wheel = profiles.make.wheelProfile().extrude(8);
122
+ return wheel;
123
+ ```
124
+
125
+ Keep builder modules pure over top-level constants, top-level `param()` values,
126
+ or explicit function arguments. Do not declare new `param()` values inside an
127
+ exported builder if callers need `require('./profiles.forge.js', { Width: 80 })`
128
+ overrides: import overrides are validated while the module loads, before any
129
+ exported builder is called. For plain constants, tables, math helpers, and
130
+ formatting code that does not construct ForgeCAD geometry, use `.js` helper
131
+ modules instead.
132
+
70
133
  Named return objects and named `group(...)` children can include `tags`. Tags are viewport metadata: they do not affect geometry, exports, face labels, or BOM rows, but the command palette can hide, show only, or focus every object with a selected tag.
71
134
 
72
135
  ```javascript
@@ -32,7 +32,7 @@ forgecad project push
32
32
  forgecad project open
33
33
  ```
34
34
 
35
- Most CLI commands require a ForgeCAD account. Run `forgecad login` and choose email/password or API token when prompted. Use `FORGECAD_TOKEN=fc_pat_... forgecad <command>` only for CI/CD and one-off automation. `forgecad studio` always requires an explicit project path; use `.` for the current project.
35
+ Local modeling, inspection, export, and skill-install commands do not require a ForgeCAD account. Hosted project sync, publishing, token management, and license activation require sign-in. Run `forgecad login` and choose email/password or API token when prompted. Use `FORGECAD_TOKEN=fc_pat_... forgecad <hosted-command>` only for CI/CD and one-off automation. `forgecad studio` always requires an explicit project path; use `.` for the current project.
36
36
 
37
37
  You can also start from the hosted starter project with `forgecad project clone start-here`, then `cd start-here` and `forgecad studio .`.
38
38
 
@@ -66,13 +66,13 @@ Execute scripts and produce images headless — no browser window. Renders use C
66
66
 
67
67
  ### `forgecad run`
68
68
 
69
- Execute a Forge script quickly and print the inner-loop build summary: returned objects, verification results, parameters, and timing.
69
+ Execute a Forge script quickly and print the inner-loop build summary: build count, verification results, parameters, and timing.
70
70
 
71
- The fast validation command. Runs your script with the real geometry kernel (no browser needed) and reports whether it built, which objects came back, any `verify.*` results, parameter values, script logs, and elapsed script time. This is the command agents should run frequently while editing a model.
71
+ The fast validation command. Runs your script with the real geometry kernel (no browser needed) and reports whether it built, how many objects came back, any `verify.*` results, parameter values, script logs, and elapsed script time. This is the command agents should run frequently while editing a model.
72
72
 
73
- **Fast by default** — a bare `forgecad run model.forge.js` does not compute per-object volumes, bounding boxes, construction history, feature tallies, spatial relationships, collision intersections, or solver profiles. Those diagnostics are useful, but they are no longer part of the hot path.
73
+ **Fast by default** — a bare `forgecad run model.forge.js` does not compute per-object volumes, bounding boxes, construction history, feature tallies, or solver profiles. Those run diagnostics are useful, but they are no longer part of the hot path.
74
74
 
75
- **Opt-in diagnostics** — use `--details` for volume/bounding-box/object geometry summaries, `--history` for the construction tree, `--features` for feature tallies, or `--solver-profile` for constraint solver timing. Use `--spatial bounded|exact` only when you want directional relationships and collision intersections from the run command itself.
75
+ **Opt-in diagnostics** — use `--details` for volume/bounding-box/object geometry summaries, `--history` for the construction tree, `--features` for feature tallies, or `--solver-profile` for constraint solver timing. Use `inspect fit interference`, `inspect physical gaps`, or `inspect mechanical-integrity --collisions` for spatial and collision evidence.
76
76
 
77
77
  **Verification results** — runs any `verify.*` checks in the script and reports pass/fail with expected vs actual values. Verification failures remain non-fatal so the model can still render and be inspected.
78
78
 
@@ -90,7 +90,6 @@ forgecad run examples/api/static-assembly-connectors.forge.js --focus
90
90
  forgecad run examples/api/static-assembly-connectors.forge.js --focus "Bench.Slat*"
91
91
  forgecad run examples/api/static-assembly-connectors.forge.js --hide "Bench.Slat0,Bench.Slat1"
92
92
  forgecad run examples/api/static-assembly-connectors.forge.js --details --history
93
- forgecad run examples/api/static-assembly-connectors.forge.js --spatial bounded
94
93
  forgecad run examples/products/cup.forge.js --connectivity
95
94
  forgecad run examples/products/cup.forge.js --journeys
96
95
  forgecad run examples/products/cup.forge.js --backend occt
@@ -100,14 +99,45 @@ forgecad run examples/products/cup.forge.js -p "Wall Thickness=3" -p "Body Heigh
100
99
  forgecad run examples/constraints/06-complex-spectrogram.forge.js --solver-debug-out tmp/spectrogram-debug
101
100
  ```
102
101
 
102
+ ### `forgecad ls`
103
+
104
+ List targetable scene objects for a model.
105
+
106
+ Runs the model headlessly and prints the exact object paths that CLI tools can target. Use this before focused renders or inspections when object names, groups, or assembly paths are not obvious.
107
+
108
+ The default output is a compact line-oriented list. Use `--tree` for an indented hierarchy, `--long` for geometry metrics, or `--json` for automation.
109
+
110
+ ```bash
111
+ forgecad ls examples/api/static-assembly-connectors.forge.js
112
+ forgecad ls examples/api/static-assembly-connectors.forge.js --tree
113
+ forgecad ls examples/api/static-assembly-connectors.forge.js Bench
114
+ forgecad ls examples/api/static-assembly-connectors.forge.js "Bench/Slat0" --long
115
+ forgecad ls examples/api/static-assembly-connectors.forge.js --json
116
+ ```
117
+
118
+ ### `forgecad show`
119
+
120
+ Render a quick target-focused viewport PNG.
121
+
122
+ The main quick visual path for agents. Pass a model and, optionally, a target path from `forgecad ls`; ForgeCAD resolves the target and renders that object or group through the existing viewport renderer. Use `--from` for fast camera directions, or pass the lower-level render camera flags when you need exact reproducibility.
123
+
124
+ Without a target, `show` renders the whole scene and behaves like a shorter, intent-first wrapper around `render 3d`.
125
+
126
+ ```bash
127
+ forgecad show examples/api/static-assembly-connectors.forge.js
128
+ forgecad show examples/api/static-assembly-connectors.forge.js Bench
129
+ forgecad show examples/api/static-assembly-connectors.forge.js "Bench/Slat0" --from front --out slat-front.png
130
+ forgecad show model.forge.js --camera "proj=perspective;pos=200,-160,120;target=0,0,20;up=0,0,1;fov=38"
131
+ ```
132
+
103
133
  ### Object Filtering: `--focus` and `--hide`
104
134
 
105
- Several CLI commands can filter the visible object set without changing model code: `run`, `render 3d`, `render wireframe`, `inspect <family> <mode>`, `capture`, and `check print`.
135
+ Several CLI commands can filter the visible object set without changing model code: `render 3d`, `render wireframe`, `inspect <family> <mode>`, `capture`, and `check print`.
106
136
 
107
- Use `forgecad run model.forge.js --quality live` to list returned object names quickly, then pass those names to `--focus` or `--hide`.
137
+ Use `forgecad ls model.forge.js` to list exact object paths quickly, then pass those names or globs to `--focus` or `--hide` on render and inspection commands.
108
138
 
109
139
  ```bash
110
- forgecad run examples/api/static-assembly-connectors.forge.js --quality live
140
+ forgecad ls examples/api/static-assembly-connectors.forge.js --tree
111
141
  forgecad render 3d examples/api/static-assembly-connectors.forge.js bench.png --focus "Bench.*"
112
142
  forgecad render 3d examples/api/static-assembly-connectors.forge.js slats.png --focus "Bench.Slat*"
113
143
  forgecad inspect fit interference examples/api/static-assembly-connectors.forge.js --focus "Bench.*"
@@ -132,11 +162,12 @@ Inspect a model by asking for one explicit kind of evidence.
132
162
 
133
163
  `forgecad inspect` is the evidence-first inspection surface. Pick the job you want to verify, then choose the view like you would with `render 3d`.
134
164
 
165
+ - `inspect sketch` — returned sketch/profile regions, selector dry-runs, and extrusion compatibility
135
166
  - `inspect history` — final-object feature recipes and feedback anchors
136
167
  - `inspect design-trace` — raw construction DAG, source spans, and cache diagnostics
137
168
  - `inspect section` — agent-native one-off section probe with optional ray rulers and replay JSON
138
169
  - `inspect replay` — rerun a saved section probe on the same or another source
139
- - `inspect visual image|cutaway|depth|normals|objects` — visual context, clipped 3D cutaways, depth, normals, and identity evidence
170
+ - `inspect visual image|cutaway|depth|normals|rig|objects` — visual context, clipped 3D cutaways, depth, normals, rig skeletons, and identity evidence
140
171
  - `inspect surface zebra|roughness` — surface continuity and roughness evidence
141
172
  - `inspect physical components|floating|gaps` — physical component graph evidence
142
173
  - `inspect fit interference` — positive-volume overlap evidence
@@ -159,8 +190,27 @@ forgecad inspect sections stack main.forge.js --plane yz --every 1
159
190
  forgecad inspect compare overlay candidate.forge.js --with reference.3mf
160
191
  ```
161
192
 
193
+ ### `forgecad inspect sketch`
194
+
195
+ Inspect returned sketches and profile regions used by returned shapes.
196
+
197
+ Runs a model and reports inspectable 2D sketch/profile regions without requiring model code to register inspection hooks. The command inspects returned Sketch objects and profile-bearing shape compile plans such as extrude, cut, and revolve. Use `--seed x,y` to dry-run which region a point selector would consume, and `--operation extrude` to check extrusion compatibility.
198
+
199
+ ```bash
200
+ forgecad inspect sketch examples/api/sketch-regions.forge.js
201
+ forgecad inspect sketch model.forge.js --object "Profile" --seed 45,15
202
+ forgecad inspect sketch model.forge.js --json --object "Body" --seed 45,15 --operation extrude
203
+ ```
204
+
205
+ `inspect sketch` is external inspection: it runs the script, then reads returned scene objects and shape compile plans. Model code should not call an inspection API. It reports selectable 2D `regions` from returned `Sketch` / `ConstraintSketch` objects and from profile-bearing returned shapes (`extrude.profile`, `cut.profile`, `revolve.profile`).
206
+
207
+ JSON contract: `targets[]` are inspectable sketches/profile uses; `regions[]` are filled selectable areas sorted largest-first with run-local ids like `R0`; `holes[]` are excluded interiors; `selection` is present only with `--seed`; `profileTree` is compile-plan provenance, not JavaScript variable names. Stable selection v1 is `--seed x,y`, not region id.
208
+
209
+ Seed failures are explicit and exit nonzero when no target matches: outside every region, on a boundary, inside a hole, ambiguous, no regions, or incompatible operation. `--operation extrude` only checks whether the selected filled region can be consumed by extrusion; open path/rail selection is intentionally unsupported in v1.
210
+
162
211
  | Command | Description |
163
212
  |---------|-------------|
213
+ | `inspect sketch` | Inspect returned sketches and profile regions used by returned shapes. |
164
214
  | `inspect visual image` | Capture standard shaded viewport evidence. |
165
215
  | `inspect visual objects` | Capture object identity evidence. |
166
216
  | `inspect section` | Run one exact section probe with optional ray rulers. |
@@ -199,7 +249,7 @@ forgecad render hq examples/products/cup.forge.js --preset dramatic
199
249
 
200
250
  Render a Forge scene to PNG using the real viewport renderer.
201
251
 
202
- Launches a headless Chrome instance, renders the scene with the same WebGL viewport as the editor, and saves a PNG. The output path defaults to `<script-name>.png` next to the input file.
252
+ Launches a headless Chrome instance, renders the scene with the same WebGL viewport as the editor, and saves a PNG. The output path defaults to `<script-name>.png` next to the input file. Each render uses a private renderer server by default, so parallel renders do not compete for the same Vite port.
203
253
 
204
254
  The input can be a `.forge.js` script or a direct `.stl`, `.obj`, `.3mf`, `.step`, or `.stp` asset. Direct STEP/STP rendering auto-selects OCCT unless you pass `--backend`.
205
255
 
@@ -269,9 +319,9 @@ forgecad render hq examples/products/cup.forge.js --transparent --preset glass
269
319
 
270
320
  ### `forgecad capture gif|mp4` **\[Pro\]**
271
321
 
272
- Animated orbit or joint playback.
322
+ Animated orbit, section sweep, or named joint playback.
273
323
 
274
- Renders an animated sequence by either orbiting the camera around the model or playing back a `jointsView` animation. Use `--capture orbit` (default) for a turntable rotation, `--capture animation --animation <name>` to play a named joints clip, or `--capture section-sweep` to move a clipping plane through the model. Supports `--cut-plane` to animate with a static cross-section visible. Use `--view`, `--camera`, `--camera-json`, or `--scene <file>` to choose the orbit base camera or the fixed camera for animations and section sweeps.
324
+ Renders an animated sequence by either orbiting the camera around the model or playing back a named joint animation. Use `--capture orbit` (default) for a turntable rotation, `--capture animation --animation <name>` to play a named joint clip, or `--capture section-sweep` to move a clipping plane through the model. Supports `--cut-plane` to animate with a static cross-section visible. Use `--view`, `--camera`, `--camera-json`, or `--scene <file>` to choose the orbit base camera or the fixed camera for animations and section sweeps.
275
325
 
276
326
  ```bash
277
327
  forgecad capture gif examples/products/cup.forge.js
@@ -281,7 +331,7 @@ forgecad capture gif model.forge.js out/front.gif --camera front
281
331
  forgecad capture gif model.forge.js out/hero.gif --view hero
282
332
  forgecad capture gif examples/3d-printer.forge.js out/sweep.gif --capture section-sweep --sweep-plane YZ
283
333
  forgecad capture mp4 examples/products/cup.forge.js
284
- forgecad capture mp4 examples/api/runtime-joints-view.forge.js out/step.mp4 --capture animation --animation Step
334
+ forgecad capture mp4 examples/api/assembly-kinematics-four-bar.forge.js out/four-bar.mp4 --view iso
285
335
  forgecad capture mp4 model.forge.js out/raw.mp4 --param "Output=raw-sdf"
286
336
  forgecad capture mp4 model.forge.js out/front.mp4 --camera front
287
337
  forgecad capture mp4 model.forge.js out/hero.mp4 --view hero
@@ -326,9 +376,9 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
326
376
  | `--background <color>` | Canvas background override |
327
377
  | `--render-mode <solid\|wireframe>` | Shaded solid (default) or wireframe only |
328
378
  | `--edges <off\|thin\|bold>` | Edge overlay preset in solid mode (default: off) |
329
- | `--render-style <classic\|studio\|fast\|glass\|inspection\|precision\|hybrid\|scan>` | Visual render style (render default: classic; inspect default: inspection) |
330
- | `--scan-granularity <12-72>` | Scan cells across the scene longest axis |
331
- | `--port <n>` | Vite dev server port |
379
+ | `--render-style <classic\|studio\|fast\|glass\|inspection\|contour\|scan>` | Visual render style (render default: classic; inspect default: inspection) |
380
+ | `--scan-granularity <12-144>` | Scan cells across the scene longest axis |
381
+ | `--port <n>` | Renderer server port |
332
382
  | `--fresh-server` | Start a fresh renderer instead of reusing an existing one |
333
383
  | `--chrome-path <path>` | Chrome or Chromium executable path |
334
384
  | `--output <path>` | Output file path |
@@ -349,7 +399,7 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
349
399
  | `--pitch <deg>` | Camera pitch angle in degrees |
350
400
  | `--format <gif\|mp4>` | Output format |
351
401
  | `--capture <orbit\|animation\|section-sweep>` | Capture preset |
352
- | `--animation <name>` | Named jointsView animation clip |
402
+ | `--animation <name>` | Named joint animation clip |
353
403
  | `--animation-loops <n>` | Repeat the selected animation clip |
354
404
  | `--cut-plane <name>` | Enable a named cut plane |
355
405
  | `--sweep-plane <XY\|XZ\|YZ>` | Moving plane for section-sweep |
@@ -419,8 +469,8 @@ forgecad export sdf rover.forge.js --output out/forge_scout
419
469
  | Option | Description |
420
470
  |--------|-------------|
421
471
  | `--output <path>` | Output STEP path |
472
+ | `--backend <occt\|truck>` | Exact BREP exporter: occt (default) or truck (native analytic kernel) |
422
473
  | `--quality <default\|live\|high>` | Forge quality preset |
423
- | `--backend <manifold\|occt\|truck>` | Geometry backend (default: manifold) |
424
474
  | `-o <path>` | Shorthand for --output |
425
475
  | `--dim-angle-tol <deg>` | Dimension routing tolerance in degrees |
426
476
  | `--format <pdf\|dxf>` | Output format |
@@ -454,7 +504,7 @@ cd start-here
454
504
  forgecad studio .
455
505
  ```
456
506
 
457
- `forgecad login` asks how you want to sign in, then prompts for either email/password or an API token. If your account was created through GitHub or Google, create an API token in Settings > API Tokens, run `forgecad login`, and choose API token. Use `FORGECAD_TOKEN=fc_pat_...` only for CI/CD and one-off automation. See [Platform authentication](platform/auth.md#cli-auth-for-oauth-accounts) for details.
507
+ `forgecad login` asks how you want to sign in, then prompts for either email/password or an API token. If your account was created through GitHub or Google, create an API token in Settings > API Tokens, run `forgecad login`, and choose API token. Use `FORGECAD_TOKEN=fc_pat_...` only for CI/CD and one-off automation.
458
508
 
459
509
  `forgecad project init` creates the remote project, writes `forgecad.json`, pushes any existing local source files, and records server file IDs. `forgecad project push` syncs an already initialized project; it does not create a remote project from an arbitrary folder.
460
510
 
@@ -641,7 +691,7 @@ The CLI is free for personal non-commercial use. Pro covers human-operated comme
641
691
  | `run`, `dev`, `studio`, `render 3d`, `export stl`, `export 3mf`, `export svg`, `compare 3d`, `check print`, `inspect fit interference`, `inspect mechanical-integrity` for personal non-commercial use | `cut-list`, `export sketch-pdf`, `export step`, `export brep`, `export gcode`, `export sdf`, `export urdf`, `export report`, `export cutting-layout` are free to run for personal non-commercial use; Pro covers human-operated commercial CAD work | `render hq`, `capture gif`, `capture mp4` plus commercial coverage for client/customer work | Backend, hosted, embedded, or application workflows that call ForgeCAD automatically |
642
692
 
643
693
  ```bash
644
- forgecad license # Check signed-in account status
694
+ forgecad license # Check local license status
645
695
  forgecad license activate # Activate Pro for the signed-in account
646
696
  forgecad license deactivate # Remove license
647
697
  ```