forgecad 0.9.14 → 0.9.16

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 (239) hide show
  1. package/LICENSE +6 -4
  2. package/README.md +8 -4
  3. package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CXvls4-J.js} +2 -2
  4. package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-B27zk8xL.js} +4 -15
  5. package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-CMAVvgQL.js} +2 -2
  6. package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-knf4I4h7.js} +9 -3
  7. package/dist/assets/EditorApp-BHMQlJ-D.js +14686 -0
  8. package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-BpjZgzk0.css} +846 -0
  9. package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-D7ZGlFjx.js} +3 -3
  10. package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-CnevhTE8.js} +36 -38
  11. package/dist/assets/LegalPage-BPTUmqeg.js +39 -0
  12. package/dist/assets/LegalPage-BRlScr9A.css +91 -0
  13. package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-B0D4goG_.js} +19 -19
  14. package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
  15. package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-CFF-UgjI.js} +2 -2
  16. package/dist/assets/app-CE3sYcV7.css +3890 -0
  17. package/dist/assets/{app-bEww1ic4.js → app-T0pDcSX4.js} +3382 -1069
  18. package/dist/assets/cli/{render-Cho2uKG_.js → render-C5pcIISc.js} +477 -29
  19. package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-Ba2Hm58b.js} +928 -243
  20. package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-vkx310U2.js} +8883 -6040
  21. package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
  22. package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
  23. package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-BuTJDVX6.js} +1179 -273
  24. package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
  25. package/dist/assets/{targets-D6PWsv6X.js → jointPose-B_Cgedn9.js} +71 -3
  26. package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
  27. package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
  28. package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
  29. package/dist/assets/{manifold-rmfAcdwF.js → manifold-BWgsjmAM.js} +1 -1
  30. package/dist/assets/{manifold-uRzgk5O8.js → manifold-D6IFSkhH.js} +2 -2
  31. package/dist/assets/{manifold-CG9Fokx-.js → manifold-rZexZI0G.js} +1 -1
  32. package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-0AGij1Ru.js} +8659 -12771
  33. package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-J5cuzxT1.js} +8050 -6203
  34. package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-Vl4Wxa1y.js} +50 -6
  35. package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
  36. package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
  37. package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
  38. package/dist/cli/render.html +1 -1
  39. package/dist/docs/index.html +2 -2
  40. package/dist/docs-raw/AI/ai-native-cad.md +50 -0
  41. package/dist/docs-raw/AI/usage.md +5 -12
  42. package/dist/docs-raw/CLI.md +34 -10
  43. package/dist/docs-raw/component-model.md +27 -11
  44. package/dist/docs-raw/generated/assembly.md +374 -187
  45. package/dist/docs-raw/generated/concepts.md +245 -237
  46. package/dist/docs-raw/generated/core.md +283 -6
  47. package/dist/docs-raw/generated/curves.md +274 -361
  48. package/dist/docs-raw/generated/lib.md +9 -19
  49. package/dist/docs-raw/generated/output.md +29 -4
  50. package/dist/docs-raw/generated/runtime-names.md +49 -0
  51. package/dist/docs-raw/generated/sdf.md +31 -0
  52. package/dist/docs-raw/generated/sheet-metal.md +9 -0
  53. package/dist/docs-raw/generated/sketch.md +44 -1
  54. package/dist/docs-raw/generated/viewport.md +11 -3
  55. package/dist/docs-raw/guides/coordinate-system.md +20 -16
  56. package/dist/docs-raw/guides/geometry-conventions.md +2 -2
  57. package/dist/docs-raw/guides/inspection-bundles.md +2 -1
  58. package/dist/docs-raw/guides/joint-design.md +24 -0
  59. package/dist/docs-raw/guides/positioning.md +13 -3
  60. package/dist/docs-raw/legal/privacy.md +63 -0
  61. package/dist/docs-raw/legal/software-license.md +55 -0
  62. package/dist/docs-raw/legal/terms.md +87 -0
  63. package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
  64. package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
  65. package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
  66. package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
  67. package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
  68. package/dist/docs-raw/skills/forgecad-lld.md +1 -1
  69. package/dist/docs-raw/skills/forgecad-make-a-model.md +40 -39
  70. package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
  71. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
  72. package/dist/docs-raw/skills/forgecad-project.md +3 -1
  73. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
  74. package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
  75. package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
  76. package/dist/docs-raw/skills/forgecad.md +4 -3
  77. package/dist/docs-raw/welcome.md +2 -0
  78. package/dist/index.html +40 -12
  79. package/dist/llms.txt +8 -0
  80. package/dist/site.webmanifest +1 -1
  81. package/dist/sitemap.xml +49 -13
  82. package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SYQ2PWOB.js} +1 -2
  83. package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-HIAGV62W.js} +1 -2
  84. package/dist-cli/{chunk-EXWGNL6K.js → chunk-SPZE3DUY.js} +20659 -17930
  85. package/dist-cli/forgecad.js +3568 -1250
  86. package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
  87. package/dist-cli/forgecad_geometry_bg.wasm +0 -0
  88. package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
  89. package/dist-cli/solver_bg.wasm +0 -0
  90. package/dist-skill/CONTEXT.md +1192 -725
  91. package/dist-skill/SKILL.md +3 -2
  92. package/dist-skill/docs/API/core/concepts.md +64 -1
  93. package/dist-skill/docs/CLI.md +34 -10
  94. package/dist-skill/docs/generated/assembly.md +339 -213
  95. package/dist-skill/docs/generated/core.md +283 -6
  96. package/dist-skill/docs/generated/curves.md +272 -362
  97. package/dist-skill/docs/generated/lib.md +9 -19
  98. package/dist-skill/docs/generated/output.md +29 -4
  99. package/dist-skill/docs/generated/runtime-names.md +40 -0
  100. package/dist-skill/docs/generated/sdf.md +31 -0
  101. package/dist-skill/docs/generated/sheet-metal.md +9 -0
  102. package/dist-skill/docs/generated/sketch.md +44 -2
  103. package/dist-skill/docs/generated/viewport.md +2 -87
  104. package/dist-skill/docs/guides/coordinate-system.md +20 -16
  105. package/dist-skill/docs/guides/geometry-conventions.md +2 -2
  106. package/dist-skill/docs/guides/inspection-bundles.md +2 -1
  107. package/dist-skill/docs/guides/joint-design.md +24 -0
  108. package/dist-skill/docs/guides/positioning.md +13 -3
  109. package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
  110. package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
  111. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
  112. package/dist-skill/library/forgecad-make-a-model/SKILL.md +39 -38
  113. package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
  114. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  115. package/dist-skill/library/forgecad-project/SKILL.md +2 -0
  116. package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
  117. package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
  118. package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
  119. package/examples/api/assembly-kinematics-limb.forge.js +116 -0
  120. package/examples/api/connector-frame-rig-chain.forge.js +102 -0
  121. package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
  122. package/examples/api/exact-surface-studio.forge.js +6 -8
  123. package/examples/api/helix-basics.forge.js +8 -8
  124. package/examples/api/lean-foundations/README.md +12 -0
  125. package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
  126. package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
  127. package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
  128. package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
  129. package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
  130. package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
  131. package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
  132. package/examples/api/route3d-elbow.forge.js +71 -0
  133. package/examples/api/transition-curves.forge.js +44 -15
  134. package/examples/api/variable-sweep-test.forge.js +3 -1
  135. package/examples/api/y-blend-corner-showcase.forge.js +0 -2
  136. package/examples/generative/coral-vase.forge.js +1 -1
  137. package/examples/nurbs-tube.forge.js +1 -1
  138. package/package.json +17 -13
  139. package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
  140. package/dist/assets/app-CsHnaBWt.css +0 -1789
  141. package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
  142. package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
  143. package/dist/docs-raw/API/README.md +0 -16
  144. package/dist/docs-raw/API/core/concepts.md +0 -118
  145. package/dist/docs-raw/INDEX.md +0 -138
  146. package/dist/docs-raw/RELEASING.md +0 -87
  147. package/dist/docs-raw/agent-native-api.md +0 -27
  148. package/dist/docs-raw/beta-deployment.md +0 -304
  149. package/dist/docs-raw/beta-operations.md +0 -325
  150. package/dist/docs-raw/blueprint-first.md +0 -145
  151. package/dist/docs-raw/cli-monetization.md +0 -112
  152. package/dist/docs-raw/coding-best-practices.md +0 -120
  153. package/dist/docs-raw/coding.md +0 -340
  154. package/dist/docs-raw/deployment.md +0 -374
  155. package/dist/docs-raw/guides/skill-maintenance.md +0 -161
  156. package/dist/docs-raw/guides/surface-members.md +0 -82
  157. package/dist/docs-raw/harbor-cli.md +0 -854
  158. package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
  159. package/dist/docs-raw/internals/compiler.md +0 -307
  160. package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
  161. package/dist/docs-raw/internals/constraint-solver.md +0 -176
  162. package/dist/docs-raw/internals/shape-from-slices.md +0 -152
  163. package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
  164. package/dist/docs-raw/platform/admin.md +0 -45
  165. package/dist/docs-raw/platform/architecture.md +0 -82
  166. package/dist/docs-raw/platform/auth.md +0 -139
  167. package/dist/docs-raw/platform/email.md +0 -67
  168. package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
  169. package/dist/docs-raw/platform/observability.md +0 -197
  170. package/dist/docs-raw/platform/projects.md +0 -111
  171. package/dist/docs-raw/platform/sharing.md +0 -90
  172. package/dist/docs-raw/product/README.md +0 -39
  173. package/dist/docs-raw/product/api-as-product-language.md +0 -13
  174. package/dist/docs-raw/product/business-model.md +0 -15
  175. package/dist/docs-raw/product/competitive-positioning.md +0 -17
  176. package/dist/docs-raw/product/creative-manufacturing.md +0 -15
  177. package/dist/docs-raw/product/founder-story.md +0 -11
  178. package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
  179. package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
  180. package/dist/docs-raw/product/product-loop.md +0 -17
  181. package/dist/docs-raw/product/strategic-decisions.md +0 -22
  182. package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
  183. package/dist/docs-raw/product/user-segments.md +0 -15
  184. package/dist/docs-raw/product/vision.md +0 -26
  185. package/dist/docs-raw/rl-environments.md +0 -350
  186. package/dist/docs-raw/runbook.md +0 -611
  187. package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
  188. package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
  189. package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
  190. package/dist-cli/forgecad.js.map +0 -1
  191. package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
  192. package/dist-cli/solver-46FFSK2U.js.map +0 -1
  193. package/dist-skill/SKILL-dev.md +0 -145
  194. package/dist-skill/docs-dev/API/core/concepts.md +0 -118
  195. package/dist-skill/docs-dev/CLI.md +0 -677
  196. package/dist-skill/docs-dev/agent-native-api.md +0 -27
  197. package/dist-skill/docs-dev/blueprint-first.md +0 -145
  198. package/dist-skill/docs-dev/coding-best-practices.md +0 -120
  199. package/dist-skill/docs-dev/coding.md +0 -340
  200. package/dist-skill/docs-dev/component-model.md +0 -164
  201. package/dist-skill/docs-dev/generated/assembly.md +0 -794
  202. package/dist-skill/docs-dev/generated/core.md +0 -2117
  203. package/dist-skill/docs-dev/generated/curves.md +0 -2583
  204. package/dist-skill/docs-dev/generated/lib.md +0 -169
  205. package/dist-skill/docs-dev/generated/output.md +0 -247
  206. package/dist-skill/docs-dev/generated/sdf.md +0 -446
  207. package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
  208. package/dist-skill/docs-dev/generated/sketch.md +0 -1811
  209. package/dist-skill/docs-dev/generated/viewport.md +0 -585
  210. package/dist-skill/docs-dev/generated/wood.md +0 -108
  211. package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
  212. package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
  213. package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
  214. package/dist-skill/docs-dev/guides/joint-design.md +0 -78
  215. package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
  216. package/dist-skill/docs-dev/guides/positioning.md +0 -161
  217. package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
  218. package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
  219. package/dist-skill/docs-dev/internals/compiler.md +0 -307
  220. package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
  221. package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
  222. package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
  223. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
  224. package/examples/api/bolted-service-cover.forge.js +0 -17
  225. package/examples/api/cable-gland-anchor.forge.js +0 -14
  226. package/examples/api/captured-cartridge-guide.forge.js +0 -14
  227. package/examples/api/captured-linear-slide.forge.js +0 -13
  228. package/examples/api/clevis-pin-joint.forge.js +0 -13
  229. package/examples/api/datum-enclosure.forge.js +0 -16
  230. package/examples/api/hose-barb-port.forge.js +0 -14
  231. package/examples/api/knuckled-hinge-assembly.forge.js +0 -15
  232. package/examples/api/living-hinge-cover.forge.js +0 -14
  233. package/examples/api/pcb-terminal-block.forge.js +0 -22
  234. package/examples/api/pinned-lever-pivot-stack.forge.js +0 -14
  235. package/examples/api/retained-shaft-knob-stack.forge.js +0 -15
  236. package/examples/api/routed-tube-clip.forge.js +0 -15
  237. package/examples/api/seated-bearing-stack.forge.js +0 -30
  238. package/examples/api/snap-latch-cover.forge.js +0 -14
  239. package/examples/api/thumb-screw-clamp.forge.js +0 -15
@@ -1,6 +1,5 @@
1
- // Transition Curves — smooth connections between edges
2
- // Demonstrates transitionCurve(), transitionSurface(), connectEdges(),
3
- // and weighted blending (G1 + G2 continuity).
1
+ // Curve blends — smooth connections between edges
2
+ // Demonstrates Curve.Blend(), sweep(), local edge recipes, and weighted blending.
4
3
 
5
4
  const weight = Param.number("Weight A", 1.0, { min: 0.1, max: 5.0, step: 0.1 });
6
5
  const weightB = Param.number("Weight B", 1.0, { min: 0.1, max: 5.0, step: 0.1 });
@@ -12,9 +11,43 @@ function anchor(pos) {
12
11
  return box(s, s, s).translate(pos[0], pos[1], pos[2]);
13
12
  }
14
13
 
14
+ function blendTube(edgeA, edgeB, options = {}) {
15
+ const curve = Curve.Blend(
16
+ { point: edgeA.point, tangent: edgeA.tangent, weight: options.weightA },
17
+ { point: edgeB.point, tangent: edgeB.tangent, weight: options.weightB },
18
+ );
19
+ const profile = options.profile ?? circle2d(options.radius ?? radius);
20
+ return sweep(profile, curve, { samples: options.samples, up: options.up });
21
+ }
22
+
23
+ function normalized(vec, fallback = [1, 0, 0]) {
24
+ const length = Math.hypot(vec[0], vec[1], vec[2]);
25
+ return length > 1e-9 ? [vec[0] / length, vec[1] / length, vec[2] / length] : fallback;
26
+ }
27
+
28
+ function edgePoint(edge, which = 'mid') {
29
+ if (which === 'start') return edge.start;
30
+ if (which === 'end') return edge.end;
31
+ return edge.midpoint;
32
+ }
33
+
34
+ function edgeOutward(edge) {
35
+ const a = edge.normalA ?? [0, 0, 0];
36
+ const b = edge.normalB ?? [0, 0, 0];
37
+ return normalized([a[0] + b[0], a[1] + b[1], a[2] + b[2]], edge.direction ?? [1, 0, 0]);
38
+ }
39
+
40
+ function edgeBlendTube(edgeA, edgeB, options = {}) {
41
+ return blendTube(
42
+ { point: edgePoint(edgeA, options.endA), tangent: edgeOutward(edgeA) },
43
+ { point: edgePoint(edgeB, options.endB), tangent: edgeOutward(edgeB) },
44
+ options,
45
+ );
46
+ }
47
+
15
48
  // ── 1. L-bend: 90-degree pipe turn ──────────────────────────────
16
49
  const pA1 = [0, 0, 0], pB1 = [30, 20, 0];
17
- const lBend = transitionSurface(
50
+ const lBend = blendTube(
18
51
  { point: pA1, tangent: [1, 0, 0] },
19
52
  { point: pB1, tangent: [0, 1, 0] },
20
53
  { radius, weightA: weight, weightB: weightB },
@@ -22,7 +55,7 @@ const lBend = transitionSurface(
22
55
 
23
56
  // ── 2. S-curve: opposing tangents ────────────────────────────────
24
57
  const pA2 = [0, 40, 0], pB2 = [30, 60, 0];
25
- const sCurve = transitionSurface(
58
+ const sCurve = blendTube(
26
59
  { point: pA2, tangent: [1, 0, 0] },
27
60
  { point: pB2, tangent: [-1, 0, 0] },
28
61
  { radius, weightA: weight, weightB: weightB },
@@ -30,7 +63,7 @@ const sCurve = transitionSurface(
30
63
 
31
64
  // ── 3. 3D transition: going up and around ────────────────────────
32
65
  const pA3 = [0, 0, 30], pB3 = [25, 15, 45];
33
- const transition3D = transitionSurface(
66
+ const transition3D = blendTube(
34
67
  { point: pA3, tangent: [1, 0, 0] },
35
68
  { point: pB3, tangent: [0, 0, 1] },
36
69
  { radius, weightA: weight, weightB: weightB, up: [0, 1, 0] },
@@ -38,7 +71,7 @@ const transition3D = transitionSurface(
38
71
 
39
72
  // ── 4. Asymmetric weight (3:0.5) ────────────────────────────────
40
73
  const pA4 = [55, 0, 0], pB4 = [85, 20, 0];
41
- const weighted = transitionSurface(
74
+ const weighted = blendTube(
42
75
  { point: pA4, tangent: [1, 0, 0] },
43
76
  { point: pB4, tangent: [0, 1, 0] },
44
77
  { radius, weightA: 3.0, weightB: 0.5 },
@@ -51,25 +84,21 @@ const boxB = box(10, 10, 10).translate(35, 15, -20);
51
84
  const topEdgeA = selectEdge(boxA, { atZ: -25, parallel: [1, 0, 0] });
52
85
  const bottomEdgeB = selectEdge(boxB, { atZ: -20, parallel: [1, 0, 0] });
53
86
 
54
- const edgeConnector = connectEdges(topEdgeA, bottomEdgeB, {
87
+ const edgeConnector = edgeBlendTube(topEdgeA, bottomEdgeB, {
55
88
  endA: 'mid',
56
89
  endB: 'mid',
57
- tangentModeA: 'outward',
58
- tangentModeB: 'outward',
59
90
  radius: 2,
60
91
  weightA: weight,
61
92
  weightB: weightB,
62
93
  });
63
94
 
64
- // ── 6. connectEdges shortcut ─────────────────────────────────────
95
+ // ── 6. Same local edge recipe on vertical side edges ─────────────
65
96
  const sideEdgeA = selectEdge(boxA, { near: [5, 0, -30], parallel: [0, 0, 1] });
66
97
  const sideEdgeB = selectEdge(boxB, { near: [30, 15, -15], parallel: [0, 0, 1] });
67
98
 
68
- const shortcutConnector = connectEdges(sideEdgeA, sideEdgeB, {
99
+ const shortcutConnector = edgeBlendTube(sideEdgeA, sideEdgeB, {
69
100
  endA: 'mid',
70
101
  endB: 'mid',
71
- tangentModeA: 'outward',
72
- tangentModeB: 'outward',
73
102
  radius: 1.5,
74
103
  weightA: weight,
75
104
  weightB: weightB,
@@ -85,7 +114,7 @@ const box2 = box(12, 12, 12).translate(25, -55, 25);
85
114
  // Cylinder rim at Y=-55: full radius available, so X=8 is on the rim.
86
115
  // Box left face at X=25, Y=-55 is on the face edge, Z=31 is mid-height.
87
116
  // End tangent [1,0,0] means the curve arrives going +X (into the face).
88
- const cylToBox = transitionSurface(
117
+ const cylToBox = blendTube(
89
118
  { point: [8, -55, 20], tangent: [1, 0, 0.65] },
90
119
  { point: [25, -55, 31], tangent: [1, 0, 0] },
91
120
  { radius: 1.5, weightA: weight, weightB: weightB },
@@ -1,7 +1,7 @@
1
1
  // Variable Sweep test — tapered tube along a curved spine
2
2
  // Demonstrates variableSweep() with different cross-sections at different t values
3
3
 
4
- const spine = spline3d([
4
+ const spine = Curve.Spline([
5
5
  [0, 0, 0],
6
6
  [20, 0, 10],
7
7
  [40, 10, 20],
@@ -20,4 +20,6 @@ const tapered = variableSweep(spine, [
20
20
  samples: 64,
21
21
  });
22
22
 
23
+ verify.boundingBoxSize('variableSweep along Curve.Spline keeps the tapered tube envelope', tapered, [66, 22, 36], 8);
24
+
23
25
  return tapered.color('#8899aa');
@@ -1,5 +1,3 @@
1
- if (getActiveBackend() === 'manifold') setActiveBackend('truck');
2
-
3
1
  const width = param('Width', 104);
4
2
  const depth = param('Depth', 76);
5
3
  const height = param('Height', 42);
@@ -9,5 +9,5 @@ const coral = sdf.noise({ scale: 0.15, amplitude: 3, octaves: 4, seed: 7 });
9
9
  return vase
10
10
  .shell(3)
11
11
  .intersect(coral)
12
- .toShape({ edgeLength: 0.5 })
12
+ // .toShape({ edgeLength: 0.5 })
13
13
  .color('#e07856');
@@ -1,5 +1,5 @@
1
1
  // NURBS curve swept into a smooth tube
2
- const curve = nurbs3d(
2
+ const curve = Curve.Nurbs(
3
3
  [[0,0,0], [15,8,0], [25,-3,10], [40,5,15], [50,0,5]],
4
4
  { degree: 3 }
5
5
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forgecad",
3
- "version": "0.9.14",
3
+ "version": "0.9.16",
4
4
  "description": "Code-first parametric CAD for JavaScript/TypeScript, in the browser and CLI.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://forgecad.io",
@@ -32,6 +32,9 @@
32
32
  "check": {
33
33
  "description": "Run model-focused readiness checks."
34
34
  },
35
+ "context": {
36
+ "description": "Read and render submitted marker context for agent workflows."
37
+ },
35
38
  "compare": {
36
39
  "description": "Compare ForgeCAD scripts and imported 3D assets."
37
40
  },
@@ -66,7 +69,9 @@
66
69
  },
67
70
  "files": [
68
71
  "dist-cli",
72
+ "!dist-cli/**/*.map",
69
73
  "dist",
74
+ "!dist/**/*.map",
70
75
  "dist-skill",
71
76
  "examples",
72
77
  "!examples/todo.md",
@@ -99,16 +104,15 @@
99
104
  "build:geometry:native:parallel": "node scripts/geometry-build.mjs --native --release --parallel",
100
105
  "bench:geometry:native": "cargo run --manifest-path geometry/Cargo.toml --release --features parallel --example server_parallel_bench -- --require-parallel",
101
106
  "bench:edge-finishes": "node scripts/truck-edge-finish-parity-benchmark.mjs",
102
- "build:benchmark-data": "node scripts/gen-benchmark-data.mjs",
103
107
  "test:solver": "node scripts/solver-test.mjs",
104
108
  "test:geometry": "node scripts/geometry-test.mjs",
105
109
  "build:sitemap": "node scripts/gen-sitemap.mjs",
106
- "build": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run build:sitemap && vite build && npm run build:cli",
107
- "build:hosted": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run build:sitemap && FORGE_HOSTED=true vite build",
110
+ "build": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run gen:public-docs && npm run build:docs && npm run build:sitemap && vite build && npm run build:cli",
111
+ "build:hosted": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run gen:public-docs && npm run build:docs && npm run build:sitemap && FORGE_HOSTED=true vite build",
108
112
  "dev:cli": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsup cli/forgecad.ts --format esm --platform node --target node20 --out-dir dist-cli --sourcemap --external typescript && node scripts/copy-cli-assets.mjs dist-cli",
109
- "build:cli": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsup cli/forgecad.ts --format esm --platform node --target node20 --out-dir dist-cli --clean --sourcemap --external typescript && node scripts/copy-cli-assets.mjs dist-cli",
110
- "internal": "node scripts/forgecad-internal.mjs",
111
- "build:backend": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsup apps/backend/src/server.ts --format esm --platform node --target node20 --out-dir dist-backend --clean --sourcemap && node scripts/copy-wasm-assets.mjs dist-backend",
113
+ "build:cli": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsup cli/forgecad.ts --format esm --platform node --target node20 --out-dir dist-cli --clean --external typescript && node scripts/copy-cli-assets.mjs dist-cli",
114
+ "build:native-occt": "node scripts/build-native-occt.mjs",
115
+ "build:backend": "npm run build:native-occt && tsup apps/backend/src/server.ts apps/backend/src/nativeOcctWorker.ts --format esm --platform node --target node20 --out-dir dist-backend --clean --sourcemap",
112
116
  "build:binary": "node scripts/build-binary.mjs",
113
117
  "build:binary:all": "node scripts/build-binary.mjs --all",
114
118
  "bundle:offline": "node scripts/build-install-bundle.mjs",
@@ -130,21 +134,18 @@
130
134
  "test:examples:smoke": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check examples --profile smoke",
131
135
  "test:examples:full": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check examples --profile full",
132
136
  "test:brep": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check brep",
137
+ "test:native-occt-ir": "npm run build:native-occt && vitest run test/nativeOcctIrCompute.test.ts test/computeRoutesAccess.test.ts",
133
138
  "test:api": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check api",
134
139
  "test:text": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check text",
135
140
  "verify:surface-member-render-evidence": "node scripts/verify-surface-member-render-evidence.mjs",
136
141
  "verify:global-install": "node scripts/verify-global-install-sandbox.mjs",
142
+ "verify:npm-artifacts": "node scripts/verify-npm-artifacts.mjs",
137
143
  "build:skill:forgecad": "node scripts/build-forgecad-skill.mjs",
138
144
  "sync:public-skills": "node scripts/sync-public-skills.mjs",
139
145
  "build:docs": "node scripts/build-docs-site.mjs",
140
- "benchmark:reconstruction": "node scripts/forgecad-internal.mjs benchmark reconstruction",
141
- "benchmark:reconstruction:list": "node scripts/forgecad-internal.mjs benchmark reconstruction list-tasks",
142
- "benchmark:reconstruction:import-harbor": "node scripts/forgecad-internal.mjs benchmark reconstruction import-harbor",
143
- "benchmark:reconstruction:leaderboard": "node scripts/forgecad-internal.mjs benchmark reconstruction leaderboard",
144
- "benchmark:reconstruction:report": "node scripts/forgecad-internal.mjs benchmark reconstruction report",
145
146
  "prepare": "npm run build:cli && npm run install-hooks",
146
147
  "install-hooks": "git config core.hooksPath scripts/git-hooks",
147
- "prepublishOnly": "npm run build",
148
+ "prepublishOnly": "npm run build && npm run verify:npm-artifacts",
148
149
  "release:pack": "node scripts/release-docker-check.mjs pack",
149
150
  "release:docker:create": "node scripts/release-docker-check.mjs container",
150
151
  "release:docker:copy": "node scripts/release-docker-check.mjs copy",
@@ -187,6 +188,8 @@
187
188
  "prod:promote-beta": "fish scripts/promote-beta-to-prod.fish",
188
189
  "prod:help": "bash scripts/prod.sh help",
189
190
  "paid-user-note": "node scripts/create-paid-user-note.mjs",
191
+ "gen:legal-docs": "tsx scripts/gen-legal-docs.ts",
192
+ "gen:public-docs": "tsx scripts/gen-public-docs.ts",
190
193
  "gen:types": "node scripts/gen-forge-types.mjs",
191
194
  "gen:docs": "node scripts/gen-api-docs.mjs",
192
195
  "gen:cli-docs": "node scripts/gen-cli-docs.mjs",
@@ -214,6 +217,7 @@
214
217
  "meshoptimizer": "^1.0.1",
215
218
  "mp4-muxer": "^5.2.1",
216
219
  "nanoid": "^5.1.7",
220
+ "node-addon-api": "^8.8.0",
217
221
  "opencascade.js": "2.0.0-beta.b5ff984",
218
222
  "opentype.js": "^1.3.4",
219
223
  "pino": "^10.3.1",