forgecad 0.9.5 → 0.9.7
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.
- package/dist/assets/{AdminPage-uTtcSXtn.js → AdminPage-DX0mpSZT.js} +1 -1
- package/dist/assets/{BlogPage-DYJMjWx3.js → BlogPage-CI_P0_Pf.js} +1 -1
- package/dist/assets/{DocsPage-C58f0K5v.js → DocsPage-DLhIIZyJ.js} +3 -3
- package/dist/assets/EditorApp-BujZvuwX.js +12874 -0
- package/dist/assets/{EditorApp-DS0AIUrZ.css → EditorApp-DfFT2Dn8.css} +1 -0
- package/dist/assets/{EmbedViewer-CMXWA2LX.js → EmbedViewer-0S0qXKog.js} +2 -2
- package/dist/assets/{LandingPageProofDriven-CAu2OZFn.js → LandingPageProofDriven-O_yMtAri.js} +1 -1
- package/dist/assets/{PricingPage-BIgW7m3X.js → PricingPage-DGkX3Ahr.js} +1 -1
- package/dist/assets/{SettingsPage-N1l1tMXO.js → SettingsPage-DBsqTB_y.js} +82 -22
- package/dist/assets/{app-CFy7g5WP.js → app-BE2nD6Yz.js} +1246 -191
- package/dist/assets/cli/{render-BrVVdj_T.js → render-iP9qh475.js} +841 -586
- package/dist/assets/{evalWorker-c_SB9gg3.js → evalWorker-Ds5U4xtN.js} +2732 -112
- package/dist/assets/inspectWorker-Dll4eVyD.js +12620 -0
- package/dist/assets/{manifold-Dp6pvFr6.js → manifold-Bk26ViCr.js} +1 -1
- package/dist/assets/{manifold-CRoBhJKH.js → manifold-DjYsd7A_.js} +2 -2
- package/dist/assets/{manifold-Cjk7WhRs.js → manifold-sJ-axdXM.js} +1 -1
- package/dist/assets/{renderSceneState-3DfsSASX.js → renderSceneState-Bngp5MrQ.js} +1 -1
- package/dist/assets/{reportWorker-BLkuIoS8.js → reportWorker-CU8RZ4O0.js} +2715 -112
- package/dist/assets/{sectionPlaneMath-CykEnkvQ.js → sectionPlaneMath-BdTjyVfs.js} +3213 -252
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +1 -1
- package/dist/docs-raw/AI/usage.md +7 -2
- package/dist/docs-raw/CLI.md +82 -53
- package/dist/docs-raw/beta-operations.md +9 -0
- package/dist/docs-raw/coding.md +1 -1
- package/dist/docs-raw/deployment.md +38 -23
- package/dist/docs-raw/generated/concepts.md +141 -7
- package/dist/docs-raw/generated/core.md +206 -1
- package/dist/docs-raw/generated/curves.md +97 -5
- package/dist/docs-raw/generated/lib.md +17 -1
- package/dist/docs-raw/generated/sketch.md +9 -1
- package/dist/docs-raw/generated/viewport.md +1 -1
- package/dist/docs-raw/guides/inspection-bundles.md +45 -16
- package/dist/docs-raw/platform/auth.md +2 -0
- package/dist/docs-raw/platform/google-oauth-setup.md +4 -0
- package/dist/docs-raw/runbook.md +3 -3
- package/dist/docs-raw/skills/forgecad-make-a-model.md +87 -8
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +14 -6
- package/dist/docs-raw/skills/forgecad-render-inspect.md +1 -1
- package/dist/docs-raw/skills/index.md +2 -2
- package/dist/index.html +1 -1
- package/dist/sitemap.xml +6 -6
- package/dist-cli/forgecad.js +8725 -4747
- package/dist-cli/forgecad.js.map +1 -1
- package/dist-skill/CONTEXT.md +375 -25
- package/dist-skill/docs/CLI.md +82 -53
- package/dist-skill/docs/generated/core.md +206 -1
- package/dist-skill/docs/generated/curves.md +97 -5
- package/dist-skill/docs/generated/lib.md +17 -1
- package/dist-skill/docs/generated/sketch.md +9 -1
- package/dist-skill/docs/generated/viewport.md +1 -1
- package/dist-skill/docs/guides/inspection-bundles.md +45 -16
- package/dist-skill/docs-dev/CLI.md +82 -53
- package/dist-skill/docs-dev/coding.md +1 -1
- package/dist-skill/docs-dev/generated/core.md +206 -1
- package/dist-skill/docs-dev/generated/curves.md +97 -5
- package/dist-skill/docs-dev/generated/lib.md +17 -1
- package/dist-skill/docs-dev/generated/sketch.md +9 -1
- package/dist-skill/docs-dev/generated/viewport.md +1 -1
- package/dist-skill/docs-dev/guides/inspection-bundles.md +45 -16
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +87 -8
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +14 -6
- package/dist-skill/library/forgecad-prepare-prompt/references/default-profiles.md +5 -3
- package/dist-skill/library/forgecad-prepare-prompt/references/master-prompt.md +7 -5
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +1 -1
- package/examples/api/bolted-service-cover.forge.js +17 -0
- package/examples/api/cable-gland-anchor.forge.js +14 -0
- package/examples/api/captured-cartridge-guide.forge.js +14 -0
- package/examples/api/captured-linear-slide.forge.js +13 -0
- package/examples/api/clevis-pin-joint.forge.js +13 -0
- package/examples/api/datum-enclosure.forge.js +16 -0
- package/examples/api/guided-loft-olive-oil-bottle.forge.js +135 -0
- package/examples/api/hose-barb-port.forge.js +14 -0
- package/examples/api/intentional-overlap-overmold.forge.js +16 -0
- package/examples/api/knuckled-hinge-assembly.forge.js +15 -0
- package/examples/api/living-hinge-cover.forge.js +14 -0
- package/examples/api/pcb-terminal-block.forge.js +22 -0
- package/examples/api/pinned-lever-pivot-stack.forge.js +14 -0
- package/examples/api/retained-shaft-knob-stack.forge.js +15 -0
- package/examples/api/routed-tube-clip.forge.js +15 -0
- package/examples/api/seated-bearing-stack.forge.js +30 -0
- package/examples/api/snap-latch-cover.forge.js +14 -0
- package/examples/api/static-assembly-connectors.forge.js +14 -16
- package/examples/api/thumb-screw-clamp.forge.js +15 -0
- package/package.json +20 -2
- package/dist/assets/EditorApp-DNH1TEz1.js +0 -12729
|
@@ -172,9 +172,10 @@ Only add details after the proportions and assembly relationships are correct.
|
|
|
172
172
|
|
|
173
173
|
Do not accept a model just because it renders. CAD quality comes from command evidence:
|
|
174
174
|
|
|
175
|
-
- `forgecad run` confirms the script executes and reports
|
|
175
|
+
- `forgecad run` confirms the script executes and reports the fast inner-loop build summary.
|
|
176
176
|
- `forgecad render 3d` gives visual views from deterministic cameras.
|
|
177
177
|
- `forgecad render inspect` checks object masks, collisions, thickness, sections, depth, normals, and connectivity.
|
|
178
|
+
- `forgecad inspect mechanical-integrity` checks assembly-level verification intent and optional collision evidence.
|
|
178
179
|
- `forgecad check params` catches broken parameter ranges.
|
|
179
180
|
- `forgecad export ...` verifies the actual manufacturing or interchange output.
|
|
180
181
|
|
|
@@ -184,12 +185,15 @@ The CLI is not just a launcher. It gives the agent a measurable feedback loop.
|
|
|
184
185
|
|
|
185
186
|
| Need | Command | What it gives the agent |
|
|
186
187
|
|---|---|---|
|
|
187
|
-
| Execute and validate a model | `forgecad run model.forge.js` |
|
|
188
|
+
| Execute and validate a model | `forgecad run model.forge.js` | Fast red/green execution feedback: returned object names, parameters, verification results, script logs, and timing. |
|
|
189
|
+
| Inspect run details | `forgecad run model.forge.js --details --history --features` | Per-object volumes and bounds, construction history, and feature tallies when those details are worth the extra work. |
|
|
188
190
|
| Debug imports | `forgecad run model.forge.js --debug-imports` | Import resolution and module-loading diagnostics for multi-file projects. |
|
|
189
191
|
| Compare geometry backends | `forgecad run model.forge.js --backend occt` | Runs against a specific backend when exact geometry or backend parity matters. |
|
|
190
192
|
| Test physical connectivity | `forgecad run model.forge.js --connectivity` | Connected-component reporting for assemblies and printable parts. |
|
|
193
|
+
| Check spatial relationships | `forgecad run model.forge.js --spatial bounded` | Opt-in directional relationships and bounded collision intersections during a run. |
|
|
191
194
|
| Override parameters | `forgecad run model.forge.js -p "Width=120"` | Checks a model at a specific parameter value without editing source. |
|
|
192
195
|
| Sweep parameter ranges | `forgecad check params model.forge.js --samples 12` | Finds parameter values that crash, collapse geometry, or introduce new collisions. |
|
|
196
|
+
| Inspect mechanical integrity | `forgecad inspect mechanical-integrity model.forge.js --collisions` | Assembly-level verification, expected component counts, and collision evidence for acceptance gates. |
|
|
193
197
|
| Produce visual evidence | `forgecad render 3d model.forge.js --camera iso` | PNG viewport renders from deterministic camera angles. |
|
|
194
198
|
| Inspect geometry channels | `forgecad render inspect model.forge.js --channels rgb,mask,collisions,thickness --force` | A bundle with manifest plus RGB, mask, collision, wall-thickness, depth, normal, connectivity, distance, and section channels. |
|
|
195
199
|
| Export manufacturing files | `forgecad export stl model.forge.js` and `forgecad export 3mf model.forge.js` | Mesh exports for 3D printing. |
|
|
@@ -262,6 +266,7 @@ For mechanisms, dense assemblies, printable parts, or anything safety-adjacent:
|
|
|
262
266
|
|
|
263
267
|
```bash
|
|
264
268
|
forgecad run model.forge.js --connectivity
|
|
269
|
+
forgecad inspect mechanical-integrity model.forge.js --collisions
|
|
265
270
|
forgecad render inspect model.forge.js --channels rgb,mask,collisions,thickness,section --force
|
|
266
271
|
forgecad check params model.forge.js --samples 12
|
|
267
272
|
```
|
package/dist/docs-raw/CLI.md
CHANGED
|
@@ -67,50 +67,63 @@ Execute scripts and produce images headless — no browser window. Renders use C
|
|
|
67
67
|
|
|
68
68
|
### `forgecad run`
|
|
69
69
|
|
|
70
|
-
Execute a Forge script and print
|
|
70
|
+
Execute a Forge script quickly and print the inner-loop build summary: returned objects, verification results, parameters, and timing.
|
|
71
71
|
|
|
72
|
-
The
|
|
72
|
+
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.
|
|
73
73
|
|
|
74
|
-
**
|
|
74
|
+
**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.
|
|
75
75
|
|
|
76
|
-
**
|
|
76
|
+
**Opt-in diagnostics** — use `--details` for volume/bounding-box/object geometry summaries, `--history` for the construction tree, `--features` for feature tallies, `--solver-profile` for constraint solver timing, or `--full` for the legacy rich report. Use `--spatial bounded|exact` only when you want directional relationships and collision intersections from the run command itself.
|
|
77
77
|
|
|
78
|
-
**
|
|
78
|
+
**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.
|
|
79
79
|
|
|
80
|
-
**
|
|
80
|
+
**Physical connectivity** — pass `--connectivity` to list physically connected components across visible objects. Overlapping bbox candidates are checked with exact geometry by default, while bbox-only contact is treated as evidence rather than proof of one connected component. This helps answer whether the model is one continuous assembly or several separate islands.
|
|
81
81
|
|
|
82
|
-
**
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
⚠ COLLISION: bolt ∩ base (shared vol: 42.3mm³)
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Intra-group pairs (same assembly group) and mock-to-mock pairs are skipped. If a part passes through a boolean-subtracted hole, no collision is reported — the material is gone.
|
|
82
|
+
**Quality preset** — pass `--quality live|default|high` to select the same geometry quality profile used by the editor and export tools. `live` is the fastest preset for large audit models.
|
|
89
83
|
|
|
90
|
-
|
|
84
|
+
For deeper confidence gates, prefer `forgecad inspect mechanical-integrity`, `forgecad check print`, `forgecad check params`, or `forgecad render inspect` instead of turning `run` back into a catch-all audit command.
|
|
91
85
|
|
|
92
|
-
|
|
86
|
+
```bash
|
|
87
|
+
forgecad run examples/api/static-assembly-connectors.forge.js
|
|
88
|
+
forgecad run examples/api/static-assembly-connectors.forge.js --focus
|
|
89
|
+
forgecad run examples/api/static-assembly-connectors.forge.js --focus "Bench.Slat*"
|
|
90
|
+
forgecad run examples/api/static-assembly-connectors.forge.js --hide "Bench.Slat0,Bench.Slat1"
|
|
91
|
+
forgecad run examples/api/static-assembly-connectors.forge.js --details --history
|
|
92
|
+
forgecad run examples/api/static-assembly-connectors.forge.js --spatial bounded
|
|
93
|
+
forgecad run examples/api/static-assembly-connectors.forge.js --full
|
|
94
|
+
forgecad run examples/products/cup.forge.js --connectivity
|
|
95
|
+
forgecad run examples/products/cup.forge.js --journeys
|
|
96
|
+
forgecad run examples/products/cup.forge.js --backend occt
|
|
97
|
+
forgecad run examples/products/cup.forge.js --backend truck --quality live
|
|
98
|
+
forgecad run examples/products/cup.forge.js --debug-imports
|
|
99
|
+
forgecad run examples/products/cup.forge.js -p "Wall Thickness=3" -p "Body Height=200"
|
|
100
|
+
forgecad run examples/constraints/06-complex-spectrogram.forge.js --solver-debug-out tmp/spectrogram-debug
|
|
101
|
+
```
|
|
93
102
|
|
|
94
|
-
|
|
103
|
+
### Object Filtering: `--focus` and `--hide`
|
|
95
104
|
|
|
96
|
-
|
|
105
|
+
Several CLI commands can filter the visible object set without changing model code: `run`, `render 3d`, `render wireframe`, `render inspect`, `capture`, and `check print`.
|
|
97
106
|
|
|
98
|
-
|
|
107
|
+
Use `forgecad run model.forge.js --quality live` to list returned object names quickly, then pass those names to `--focus` or `--hide`.
|
|
99
108
|
|
|
100
109
|
```bash
|
|
101
|
-
forgecad run examples/
|
|
102
|
-
forgecad
|
|
103
|
-
forgecad
|
|
104
|
-
forgecad
|
|
105
|
-
forgecad run examples/cup.forge.js --connectivity
|
|
106
|
-
forgecad run examples/cup.forge.js --journeys
|
|
107
|
-
forgecad run examples/cup.forge.js --backend occt
|
|
108
|
-
forgecad run examples/cup.forge.js --backend truck --quality live
|
|
109
|
-
forgecad run examples/cup.forge.js --debug-imports
|
|
110
|
-
forgecad run examples/cup.forge.js -p "Wall Thickness=3" -p "Body Height=200"
|
|
111
|
-
forgecad run examples/constraints/06-complex-spectrogram.forge.js --solver-debug-out tmp/spectrogram-debug
|
|
110
|
+
forgecad run examples/api/static-assembly-connectors.forge.js --quality live
|
|
111
|
+
forgecad render 3d examples/api/static-assembly-connectors.forge.js bench.png --focus "Bench.*"
|
|
112
|
+
forgecad render 3d examples/api/static-assembly-connectors.forge.js slats.png --focus "Bench.Slat*"
|
|
113
|
+
forgecad render inspect examples/api/static-assembly-connectors.forge.js out/bench-inspect --channels rgb,mask --hide "Bench.Slat0,Bench.Slat1" --force
|
|
112
114
|
```
|
|
113
115
|
|
|
116
|
+
Rules:
|
|
117
|
+
|
|
118
|
+
- A bare `--focus` hides mock objects and keeps real objects.
|
|
119
|
+
- `--focus name1,name2` renders only matching objects.
|
|
120
|
+
- `--hide name1,name2` removes matching objects from the visible scene.
|
|
121
|
+
- Matching is case-insensitive and supports `*` / `?` globs.
|
|
122
|
+
- `--focus` and `--hide` are mutually exclusive.
|
|
123
|
+
- Filtering happens after the script runs; it does not avoid evaluating the full model.
|
|
124
|
+
- Filtering works on returned object names. For grouped children, use concrete child names or globs like `Bench.*`.
|
|
125
|
+
- If a model unions many parts into one returned shape, the original parts cannot be isolated by CLI filtering.
|
|
126
|
+
|
|
114
127
|
### `forgecad render`
|
|
115
128
|
|
|
116
129
|
Render a Forge scene. Use a subcommand — `3d`, `inspect`, `views`, `section`, `wireframe`, `sketch`, or `hq`.
|
|
@@ -127,13 +140,13 @@ Render a Forge scene. Use a subcommand — `3d`, `inspect`, `views`, `section`,
|
|
|
127
140
|
- `render hq` — path-traced via Blender Cycles, for documentation and marketing shots
|
|
128
141
|
|
|
129
142
|
```bash
|
|
130
|
-
forgecad render 3d examples/cup.forge.js
|
|
143
|
+
forgecad render 3d examples/products/cup.forge.js
|
|
131
144
|
forgecad render inspect examples/api/static-assembly-connectors.forge.js --channels rgb,mask
|
|
132
145
|
forgecad render inspect channels
|
|
133
|
-
forgecad render views examples/cup.forge.js
|
|
134
|
-
forgecad render wireframe examples/cup.forge.js
|
|
146
|
+
forgecad render views examples/products/cup.forge.js
|
|
147
|
+
forgecad render wireframe examples/products/cup.forge.js
|
|
135
148
|
forgecad render section examples/furniture/01-table.forge.js --plane XZ
|
|
136
|
-
forgecad render hq examples/cup.forge.js --preset dramatic
|
|
149
|
+
forgecad render hq examples/products/cup.forge.js --preset dramatic
|
|
137
150
|
```
|
|
138
151
|
|
|
139
152
|
### `forgecad render 3d`
|
|
@@ -149,10 +162,10 @@ Use `--edges=<off|thin|bold>` to control the edge overlay. For a pure wireframe
|
|
|
149
162
|
This is the standard way to visually verify geometry from the CLI or in agent workflows. For higher quality (path-traced, materials, HDRI lighting), use `render hq` instead.
|
|
150
163
|
|
|
151
164
|
```bash
|
|
152
|
-
forgecad render 3d examples/cup.forge.js
|
|
153
|
-
forgecad render 3d examples/
|
|
154
|
-
forgecad render 3d examples/
|
|
155
|
-
forgecad render 3d examples/
|
|
165
|
+
forgecad render 3d examples/products/cup.forge.js
|
|
166
|
+
forgecad render 3d examples/api/static-assembly-connectors.forge.js --focus
|
|
167
|
+
forgecad render 3d examples/api/static-assembly-connectors.forge.js --focus "Bench.Slat*"
|
|
168
|
+
forgecad render 3d examples/api/static-assembly-connectors.forge.js --hide "Bench.Slat0,Bench.Slat1"
|
|
156
169
|
forgecad render 3d model.forge.js --view hero
|
|
157
170
|
forgecad render 3d model.forge.js --camera 45:30
|
|
158
171
|
forgecad render 3d model.forge.js --camera "proj=perspective;pos=200,-160,120;target=0,0,20;up=0,0,1;fov=38"
|
|
@@ -186,7 +199,7 @@ For bundle layout, channel encodings, and manifest semantics, see [Inspection Bu
|
|
|
186
199
|
|
|
187
200
|
```bash
|
|
188
201
|
forgecad render inspect examples/api/static-assembly-connectors.forge.js --channels rgb,mask
|
|
189
|
-
forgecad render inspect examples/api/static-assembly-connectors.forge.js out/bench-inspect --channels collisions --focus Bench
|
|
202
|
+
forgecad render inspect examples/api/static-assembly-connectors.forge.js out/bench-inspect --channels collisions --focus "Bench.*"
|
|
190
203
|
forgecad render inspect examples/api/static-assembly-connectors.forge.js --channels rgb,mask,collisions --hide "Bench.Slat0" --force
|
|
191
204
|
```
|
|
192
205
|
|
|
@@ -206,8 +219,8 @@ Render a Forge scene as a wireframe (edges only, no shading).
|
|
|
206
219
|
Same as `render 3d` but renders only the edge geometry — no shaded surfaces. Useful for construction-style documentation or highlighting structural features without material detail.
|
|
207
220
|
|
|
208
221
|
```bash
|
|
209
|
-
forgecad render wireframe examples/cup.forge.js
|
|
210
|
-
forgecad render wireframe examples/cup.forge.js --camera iso
|
|
222
|
+
forgecad render wireframe examples/products/cup.forge.js
|
|
223
|
+
forgecad render wireframe examples/products/cup.forge.js --camera iso
|
|
211
224
|
```
|
|
212
225
|
|
|
213
226
|
### `forgecad render hq` **\[Pro\]**
|
|
@@ -221,12 +234,12 @@ Choose a `--preset` for the look: `studio` (neutral product shot), `dramatic` (h
|
|
|
221
234
|
Output defaults to `<script-name>-hq.png`. Great for documentation, marketing renders, and social media.
|
|
222
235
|
|
|
223
236
|
```bash
|
|
224
|
-
forgecad render hq examples/cup.forge.js
|
|
225
|
-
forgecad render hq examples/cup.forge.js hero.png --preset dramatic --samples 1024
|
|
226
|
-
forgecad render hq examples/cup.forge.js hero.png --view hero
|
|
227
|
-
forgecad render hq examples/cup.forge.js hero.png --camera-json camera.json
|
|
228
|
-
forgecad render hq examples/cup.forge.js --preset clay --size 2048
|
|
229
|
-
forgecad render hq examples/cup.forge.js --transparent --preset glass
|
|
237
|
+
forgecad render hq examples/products/cup.forge.js
|
|
238
|
+
forgecad render hq examples/products/cup.forge.js hero.png --preset dramatic --samples 1024
|
|
239
|
+
forgecad render hq examples/products/cup.forge.js hero.png --view hero
|
|
240
|
+
forgecad render hq examples/products/cup.forge.js hero.png --camera-json camera.json
|
|
241
|
+
forgecad render hq examples/products/cup.forge.js --preset clay --size 2048
|
|
242
|
+
forgecad render hq examples/products/cup.forge.js --transparent --preset glass
|
|
230
243
|
```
|
|
231
244
|
|
|
232
245
|
### `forgecad capture gif|mp4` **\[Pro\]**
|
|
@@ -236,13 +249,13 @@ Animated orbit or joint playback.
|
|
|
236
249
|
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.
|
|
237
250
|
|
|
238
251
|
```bash
|
|
239
|
-
forgecad capture gif examples/cup.forge.js
|
|
252
|
+
forgecad capture gif examples/products/cup.forge.js
|
|
240
253
|
forgecad capture gif examples/3d-printer.forge.js out/section.gif --cut-plane "Front Section"
|
|
241
254
|
forgecad capture gif model.forge.js out/raw.gif --param "Output=raw-sdf"
|
|
242
255
|
forgecad capture gif model.forge.js out/front.gif --camera front
|
|
243
256
|
forgecad capture gif model.forge.js out/hero.gif --view hero
|
|
244
257
|
forgecad capture gif examples/3d-printer.forge.js out/sweep.gif --capture section-sweep --sweep-plane YZ
|
|
245
|
-
forgecad capture mp4 examples/cup.forge.js
|
|
258
|
+
forgecad capture mp4 examples/products/cup.forge.js
|
|
246
259
|
forgecad capture mp4 examples/api/runtime-joints-view.forge.js out/step.mp4 --capture animation --animation Step
|
|
247
260
|
forgecad capture mp4 model.forge.js out/raw.mp4 --param "Output=raw-sdf"
|
|
248
261
|
forgecad capture mp4 model.forge.js out/front.mp4 --camera front
|
|
@@ -276,8 +289,8 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
|
|
|
276
289
|
|
|
277
290
|
| Option | Description |
|
|
278
291
|
|--------|-------------|
|
|
279
|
-
| `--focus <names>` | Focus: no arg hides mocks; comma-separated names
|
|
280
|
-
| `--hide <names>` | Hide comma-separated object names |
|
|
292
|
+
| `--focus <names>` | Focus: no arg hides mocks; comma-separated names/globs show only those |
|
|
293
|
+
| `--hide <names>` | Hide comma-separated object names/globs |
|
|
281
294
|
| `--camera <front\|back\|side\|right\|top\|iso\|az:el\|az:el:dist\|spec>` | Camera preset, spherical (az:el), or full spec such as `proj=perspective;pos=x,y,z;target=x,y,z;up=x,y,z;fov=45`. Repeatable. |
|
|
282
295
|
| `--camera-json <file>` | Exact viewport camera JSON file |
|
|
283
296
|
| `--view <name>` | Named camera view declared by the model with scene({ views }) |
|
|
@@ -299,7 +312,8 @@ forgecad render section examples/furniture/01-table.forge.js out/bold.svg --edge
|
|
|
299
312
|
| `--min-thickness <mm>` | Critical thickness threshold in model units |
|
|
300
313
|
| `--warn-thickness <mm>` | Warning thickness threshold in model units |
|
|
301
314
|
| `--max-thickness <mm>` | Thick/blue heatmap threshold in model units |
|
|
302
|
-
| `--thickness-samples <n>` | Maximum
|
|
315
|
+
| `--thickness-samples <n>` | Maximum thickness point samples per object |
|
|
316
|
+
| `--roughness-samples <n>` | Maximum roughness point samples per object |
|
|
303
317
|
| `--preset <name>` | Material/lighting preset |
|
|
304
318
|
| `--width <px>` | Output width in pixels |
|
|
305
319
|
| `--height <px>` | Output height in pixels |
|
|
@@ -530,7 +544,7 @@ forgecad skill one-file ~/Desktop/forgecad-context.md
|
|
|
530
544
|
forgecad skill flattened-files ~/Desktop/forgecad-skills
|
|
531
545
|
```
|
|
532
546
|
|
|
533
|
-
> **Workflow:** Agent writes the model -> `forgecad run` validates it -> `forgecad check print` catches printability risks -> `forgecad render inspect` produces visual evidence -> `forgecad check params` sweeps parameter robustness -> export ships the result. All in the terminal.
|
|
547
|
+
> **Workflow:** Agent writes the model -> `forgecad run` validates it -> `forgecad inspect mechanical-integrity` catches disconnected AI-slop patterns -> `forgecad check print` catches printability risks -> `forgecad render inspect` produces visual evidence -> `forgecad check params` sweeps parameter robustness -> export ships the result. All in the terminal.
|
|
534
548
|
|
|
535
549
|
## Validation
|
|
536
550
|
|
|
@@ -551,6 +565,20 @@ forgecad check print model.forge.js --min-wall 1.2 --warn-wall 2
|
|
|
551
565
|
forgecad check print model.forge.js --expect-components 1 -p "Wall Thickness=3"
|
|
552
566
|
```
|
|
553
567
|
|
|
568
|
+
### `forgecad inspect mechanical-integrity`
|
|
569
|
+
|
|
570
|
+
Inspect generated ForgeCAD models for mechanical integrity failures.
|
|
571
|
+
|
|
572
|
+
Scans a Forge script or a folder of generated projects and runs a mechanical integrity inspection. The inspection flags timeouts, runtime errors, missing `verify.*` checks, missing executed mechanical-interface checks, fragmented named groups, uncontracted manual assemblies, optional positive-volume object collisions, and excessive physical component counts when requested. Markdown details include suggested repair patterns such as connector-authored mates, bolted service covers, pinned levers, captured slides, hinges, clevis joints, retained shafts, and seated bearings. When `--collisions` is enabled, the Markdown details list the largest overlapping object pairs by volume so agents can repair the highest-risk interfaces first. Exact collision checks use a default 40-pair bbox-overlap budget and 30s exact-check time budget; exhausting either budget fails the file instead of silently passing a partial check.
|
|
573
|
+
|
|
574
|
+
```bash
|
|
575
|
+
forgecad inspect mechanical-integrity path/to/generated-models
|
|
576
|
+
forgecad inspect mechanical-integrity path/to/model/main.forge.js --min-verifications 2
|
|
577
|
+
forgecad inspect mechanical-integrity path/to/model/main.forge.js --collisions
|
|
578
|
+
forgecad inspect mechanical-integrity path/to/generated-models --collisions --collision-pair-limit 250
|
|
579
|
+
forgecad inspect mechanical-integrity path/to/generated-models --json --timeout-ms 40000 --jobs 4
|
|
580
|
+
```
|
|
581
|
+
|
|
554
582
|
### `forgecad check params`
|
|
555
583
|
|
|
556
584
|
Sweep parameter ranges and report runtime failures, degeneracy, and new collisions.
|
|
@@ -574,6 +602,7 @@ forgecad check params path/to/model.forge.js --samples 12
|
|
|
574
602
|
| Command | Description |
|
|
575
603
|
|---------|-------------|
|
|
576
604
|
| `check suite` | Run the repo invariant suite, with smoke and full profiles for the fast merge lane vs the broader regression sweep. |
|
|
605
|
+
| `inspect mechanical-integrity` | Inspect generated ForgeCAD models for mechanical integrity failures. |
|
|
577
606
|
| `check runtime-globals` | Ensure the script sandbox does not add new lowercase injected globals. |
|
|
578
607
|
| `check transforms` | Run transform and assembly invariants. |
|
|
579
608
|
| `check dimensions` | Run dimension propagation invariants. |
|
|
@@ -617,7 +646,7 @@ The CLI is free for core workflows and exports. Production outputs are free to r
|
|
|
617
646
|
|
|
618
647
|
| Free | Production outputs | Pro |
|
|
619
648
|
|------|--------------------|-----|
|
|
620
|
-
| `run`, `dev`, `studio`, `render 3d`, `export stl`, `export 3mf`, `export svg`, `check print`, `check params`, `check suite` | `cut-list`, `export sketch-pdf`, `export step`, `export brep`, `export gcode`, `export sdf`, `export urdf`, `export report`, `export cutting-layout` are free to run; Pro covers commercial use. | `render hq`, `capture gif`, `capture mp4` |
|
|
649
|
+
| `run`, `dev`, `studio`, `render 3d`, `export stl`, `export 3mf`, `export svg`, `check print`, `check params`, `inspect mechanical-integrity`, `check suite` | `cut-list`, `export sketch-pdf`, `export step`, `export brep`, `export gcode`, `export sdf`, `export urdf`, `export report`, `export cutting-layout` are free to run; Pro covers commercial use. | `render hq`, `capture gif`, `capture mp4` |
|
|
621
650
|
|
|
622
651
|
```bash
|
|
623
652
|
forgecad license # Check signed-in account status
|
|
@@ -36,6 +36,10 @@ All of these are thin wrappers around `scripts/beta.sh` /
|
|
|
36
36
|
`scripts/beta-local.sh`. They exist for operator ergonomics only; regular
|
|
37
37
|
ForgeCAD users never see them in the public product CLI.
|
|
38
38
|
|
|
39
|
+
Production has the matching `npm run prod:*` shortcuts in `scripts/prod.sh`
|
|
40
|
+
for the same reason: muscle memory should be environment-prefixed, even though
|
|
41
|
+
production is normally deployed by GitHub Actions on `mainline`.
|
|
42
|
+
|
|
39
43
|
**Useful overrides**:
|
|
40
44
|
- `FORGE_BETA_DEPLOY_CONFIG` — alternate Kamal config path
|
|
41
45
|
- `FORGE_BETA_DESTINATION` — alternate Kamal destination name (default `beta`)
|
|
@@ -242,6 +246,11 @@ for the isolation win.
|
|
|
242
246
|
callback to the prod app.
|
|
243
247
|
2. Create a **new** Google OAuth client (OAuth 2.0 client ID, web app).
|
|
244
248
|
Authorised redirect URI `https://beta.forgecad.io/auth/callback/google`.
|
|
249
|
+
|
|
250
|
+
Use Google Auth Platform → Clients in the Google Cloud Console for this.
|
|
251
|
+
Do not use `gcloud iam oauth-clients`; that command creates IAM/IAP OAuth
|
|
252
|
+
application resources, not the normal Google Sign-In web client that
|
|
253
|
+
ForgeCAD's `/auth/callback/google` flow expects.
|
|
245
254
|
3. Add the four secrets to `.kamal/secrets.beta`:
|
|
246
255
|
|
|
247
256
|
```bash
|
package/dist/docs-raw/coding.md
CHANGED
|
@@ -19,7 +19,7 @@ npm run preview # Preview production build
|
|
|
19
19
|
### CLI Tools
|
|
20
20
|
```bash
|
|
21
21
|
forgecad export svg examples/constraints/01-fully-constrained-rect.forge.js # Export sketch to SVG
|
|
22
|
-
forgecad render 3d examples/cup.forge.js
|
|
22
|
+
forgecad render 3d examples/products/cup.forge.js # Render to PNG (Puppeteer + Chrome)
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
See [CLI.md](../CLI.md) for full CLI documentation.
|
|
@@ -55,26 +55,25 @@ All containers share the `kamal` Docker network. The web container reaches the b
|
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
57
|
# Deploy prod web app (zero-downtime rolling update)
|
|
58
|
-
|
|
58
|
+
npm run prod:deploy
|
|
59
59
|
|
|
60
60
|
# Deploy prod backend compute server
|
|
61
|
-
|
|
61
|
+
npm run prod:deploy:backend
|
|
62
62
|
|
|
63
63
|
# Deploy both prod services
|
|
64
|
-
|
|
64
|
+
npm run prod:deploy:all
|
|
65
65
|
|
|
66
66
|
# Deploy the same commit to beta (run BEFORE prod)
|
|
67
|
-
kamal deploy -d beta
|
|
68
|
-
|
|
69
|
-
# Same flow via the beta operator wrapper
|
|
70
67
|
npm run beta:deploy
|
|
68
|
+
|
|
69
|
+
# Open the environment after a deploy
|
|
71
70
|
npm run beta:smoke
|
|
71
|
+
npm run prod:smoke
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
Recommended flow for a change: merge to `mainline` → `
|
|
75
|
-
→ verify on `beta.forgecad.io` → `
|
|
76
|
-
|
|
77
|
-
runbook.
|
|
74
|
+
Recommended flow for a change: merge to `mainline` → `npm run beta:deploy`
|
|
75
|
+
→ verify on `beta.forgecad.io` → `npm run prod:deploy`.
|
|
76
|
+
See [beta-operations.md](beta-operations.md) for the full beta runbook.
|
|
78
77
|
|
|
79
78
|
Kamal builds the Docker image on the server via SSH (`builder: remote:`), pushes to GHCR, pulls on the server, starts the new container, waits for healthcheck, switches traffic, stops old container. Zero downtime.
|
|
80
79
|
|
|
@@ -90,16 +89,16 @@ Push to `mainline` triggers `.github/workflows/deploy.yml` which runs `kamal dep
|
|
|
90
89
|
ssh hetzner 'docker ps -a --format "{{.Names}}\t{{.Status}}" | grep "^forgecad-web-" | sed -E "s/^forgecad-web-([a-f0-9]+)(_replaced_[^[:space:]]+)?\t/\1\t/"'
|
|
91
90
|
|
|
92
91
|
# Roll the web app back to the last known-good version:
|
|
93
|
-
|
|
92
|
+
npm run prod:rollback -- <VERSION>
|
|
94
93
|
|
|
95
94
|
# Backend rollback:
|
|
96
|
-
|
|
95
|
+
npm run prod:rollback:backend -- <VERSION>
|
|
97
96
|
```
|
|
98
97
|
|
|
99
98
|
Example:
|
|
100
99
|
|
|
101
100
|
```bash
|
|
102
|
-
|
|
101
|
+
npm run prod:rollback -- db9c49b058aaa379d9d622456cb249f9b0ddc335
|
|
103
102
|
```
|
|
104
103
|
|
|
105
104
|
Use the most recent healthy version from the `docker ps -a` output above. The
|
|
@@ -126,10 +125,22 @@ version is the hex suffix in the Kamal container name, e.g.
|
|
|
126
125
|
|
|
127
126
|
## Operator Shortcuts
|
|
128
127
|
|
|
129
|
-
Routine beta admin work is wrapped by repo-local scripts so the
|
|
130
|
-
safe and memorable without changing the public ForgeCAD user CLI:
|
|
128
|
+
Routine production and beta admin work is wrapped by repo-local scripts so the
|
|
129
|
+
flow stays safe and memorable without changing the public ForgeCAD user CLI:
|
|
131
130
|
|
|
132
131
|
```bash
|
|
132
|
+
npm run prod:deploy
|
|
133
|
+
npm run prod:smoke
|
|
134
|
+
npm run prod:deploy:backend
|
|
135
|
+
npm run prod:deploy:all
|
|
136
|
+
npm run prod:rollback -- <VERSION>
|
|
137
|
+
npm run prod:logs
|
|
138
|
+
npm run prod:logs:backend
|
|
139
|
+
npm run prod:shell
|
|
140
|
+
npm run prod:db
|
|
141
|
+
npm run prod:health
|
|
142
|
+
npm run prod:errors -- web 1000
|
|
143
|
+
|
|
133
144
|
npm run beta:setup
|
|
134
145
|
npm run beta:deploy
|
|
135
146
|
npm run beta:smoke
|
|
@@ -142,6 +153,10 @@ npm run beta:local
|
|
|
142
153
|
`FORGE_ENVIRONMENT=beta` backend on localhost, so you can open the browser and
|
|
143
154
|
judge the UX without touching Cloudflare.
|
|
144
155
|
|
|
156
|
+
These package scripts are thin wrappers around `scripts/prod.sh`,
|
|
157
|
+
`scripts/beta.sh`, and Kamal. Use raw Kamal commands when debugging Kamal
|
|
158
|
+
itself; otherwise prefer the environment-prefixed shortcuts.
|
|
159
|
+
|
|
145
160
|
---
|
|
146
161
|
|
|
147
162
|
## Environment Variables
|
|
@@ -267,10 +282,10 @@ Use the observability stack first for incidents:
|
|
|
267
282
|
SSH access: `ssh hetzner` (see `~/.ssh/config`).
|
|
268
283
|
|
|
269
284
|
```bash
|
|
270
|
-
# Kamal commands (run from project root locally)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
285
|
+
# Kamal-backed commands (run from project root locally)
|
|
286
|
+
npm run prod:logs # web app logs
|
|
287
|
+
npm run prod:logs:backend # backend logs
|
|
288
|
+
npm run prod:shell # shell into web container
|
|
274
289
|
kamal proxy details # proxy routing info
|
|
275
290
|
|
|
276
291
|
# Direct SSH
|
|
@@ -281,10 +296,10 @@ ssh hetzner "df -h / && free -h"
|
|
|
281
296
|
### Production scripts
|
|
282
297
|
|
|
283
298
|
```bash
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
bash scripts/prod/db.sh "SELECT ..." #
|
|
299
|
+
npm run prod:health # containers, disk, memory
|
|
300
|
+
npm run prod:errors -- web 1000 # error logs only
|
|
301
|
+
npm run prod:db # interactive psql via Kamal
|
|
302
|
+
bash scripts/prod/db.sh "SELECT ..." # one-shot SQL query
|
|
288
303
|
```
|
|
289
304
|
|
|
290
305
|
### Email not delivered
|