brepjs-cad 0.31.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.32.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.31.2...brepjs-cad-v0.32.0) (2026-06-24)
4
+
5
+
6
+ ### Features
7
+
8
+ * **brepjs-cad:** add airfoils.md feature recipe (swept fans/props/impellers) ([#1566](https://github.com/andymai/brepjs/issues/1566)) ([8c786db](https://github.com/andymai/brepjs/commit/8c786db69ead59edcdc9d0f8525e43324552e4db))
9
+ * **brepjs-cad:** aimed section cut for the design judge (Phase 3) ([#1543](https://github.com/andymai/brepjs/issues/1543)) ([40e5acd](https://github.com/andymai/brepjs/commit/40e5acd54318d768dc5a620403d17d43e358e698))
10
+ * **brepjs-cad:** CLI subcommands + verify hints + gridfinity examples + eval harness ([#1204](https://github.com/andymai/brepjs/issues/1204)) ([4d57198](https://github.com/andymai/brepjs/commit/4d5719874b5f5e685a4f909fd2d2363c0331770b))
11
+ * **brepjs-cad:** decomposed, cross-checked design-judge rubric (Phase 1.5) ([#1539](https://github.com/andymai/brepjs/issues/1539)) ([8059b6d](https://github.com/andymai/brepjs/commit/8059b6d701ae5980e6bb11f51695aa102fe2bb43))
12
+ * **brepjs-cad:** deterministic body/interference metrics for the design judge (Phase 1) ([#1531](https://github.com/andymai/brepjs/issues/1531)) ([d296b54](https://github.com/andymai/brepjs/commit/d296b545f2d7084b861683d61b626ace4747a371))
13
+ * **brepjs-cad:** kernel-anchored Set-of-Marks for the design judge ([#1545](https://github.com/andymai/brepjs/issues/1545)) ([2b6f5b4](https://github.com/andymai/brepjs/commit/2b6f5b436f2a73c96747cc71f83afc8715765cd0))
14
+ * **brepjs-cad:** reliable internal-bore detection for the design judge (keystone) ([#1542](https://github.com/andymai/brepjs/issues/1542)) ([0d780c3](https://github.com/andymai/brepjs/commit/0d780c3b73c2551dab2f04a6ff31bf9ec8cae2ab))
15
+ * **brepjs-cad:** rename from brepjs-agent + make npm-publishable (publish held) ([#1201](https://github.com/andymai/brepjs/issues/1201)) ([630bbba](https://github.com/andymai/brepjs/commit/630bbbab4885604bd4d5fb2148584a6572c8d99c))
16
+ * **brepjs-cad:** surface fragmentation in verify --check (the [#1](https://github.com/andymai/brepjs/issues/1) design defect) ([#1560](https://github.com/andymai/brepjs/issues/1560)) ([45a4f6e](https://github.com/andymai/brepjs/commit/45a4f6e268331b7816cd9957fbdab4c0893b2000))
17
+ * **brepjs-cad:** xray internal-reveal shot for the design judge (Phase 2a) ([#1540](https://github.com/andymai/brepjs/issues/1540)) ([eca5bc9](https://github.com/andymai/brepjs/commit/eca5bc9ad20fc7947132d647952245cfe466a7f4))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **brepjs-cad:** add a triangular-gusset recipe to the implement skill (bracket/enclosure eval) ([#1571](https://github.com/andymai/brepjs/issues/1571)) ([346d042](https://github.com/andymai/brepjs/commit/346d0423fefa3bd163f4075f69bf96d478543bf5))
23
+ * **brepjs-cad:** add the "realize the designed object" bar to the implement skill ([#1563](https://github.com/andymai/brepjs/issues/1563)) ([e150357](https://github.com/andymai/brepjs/commit/e1503570aaf271ebef1e39d48be9c70a5ffe8f03))
24
+ * **brepjs-cad:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
25
+ * **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
26
+ * **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
27
+ * **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
28
+ * **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
29
+ * **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
30
+ * **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
31
+ * **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
32
+ * **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
33
+ * **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
34
+ * **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
35
+ * **brepjs-cad:** load .ts parts via native type-stripping ([#1207](https://github.com/andymai/brepjs/issues/1207)) ([198078b](https://github.com/andymai/brepjs/commit/198078becf570614c0cbf61537714fc94c2de43a))
36
+ * **brepjs-cad:** make blind-judge reference adaptation render multi-body parts at scale ([#1530](https://github.com/andymai/brepjs/issues/1530)) ([18d4523](https://github.com/andymai/brepjs/commit/18d4523c85e1b22496bb5c0b8fb382a1146429c6))
37
+ * **brepjs-cad:** polish skill — bosses on shells must fuse, or they float (eval finding) ([#1553](https://github.com/andymai/brepjs/issues/1553)) ([07cbf93](https://github.com/andymai/brepjs/commit/07cbf93e47fbf880df53bc2a1cee05bf0d17e2d5))
38
+ * **brepjs-cad:** run CLI via bin symlink + quality pass ([#1206](https://github.com/andymai/brepjs/issues/1206)) ([ac5b1fe](https://github.com/andymai/brepjs/commit/ac5b1feee3c5b424c37716ca06c397f7898838f1))
39
+ * **brepjs-cad:** teach worm-wheel and rack tooth recipes; fix gear-build contradiction ([#1544](https://github.com/andymai/brepjs/issues/1544)) ([b0da85f](https://github.com/andymai/brepjs/commit/b0da85f218d463e0f1ef0ca8760cec54b4814b02))
40
+
41
+ ## [0.31.1](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.31.0...brepjs-cad-v0.31.1) (2026-06-23)
42
+
43
+
44
+ ### Bug Fixes
45
+
46
+ * **brepjs-cad:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
47
+
3
48
  ## [0.31.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.30.1...brepjs-cad-v0.31.0) (2026-06-22)
4
49
 
5
50
 
package/README.md CHANGED
@@ -13,6 +13,10 @@ Five composable, individually-improvable skills — **`brepjs:brainstorm`** (sco
13
13
  /plugin install brepjs@brepjs
14
14
  ```
15
15
 
16
+ Or non-interactively from a terminal: `claude plugin marketplace add andymai/brepjs && claude plugin install brepjs@brepjs`.
17
+
18
+ Then ask for a part in plain English and Claude reaches for the pipeline on its own, or drive it explicitly: `/brepjs:cad "a wall bracket for a 40 mm pipe with two M4 holes"` runs the full gated pipeline; `/brepjs:brainstorm` … `/brepjs:polish` run a single phase.
19
+
16
20
  ## 2. The runtime (npm)
17
21
 
18
22
  The CLI the skill invokes. Install it in **your** project, where `brepjs` + the WASM kernel resolve (Node module resolution is project-local, so the runtime can't live in the plugin dir):
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_diff = require("./diff-DhOTZnG_.cjs");
2
+ const require_diff = require("./diff-B4THXE07.cjs");
3
3
  exports.DEFAULT_TOLERANCE_PCT = require_diff.DEFAULT_TOLERANCE_PCT;
4
4
  exports.TYPECHECK_CODE = require_diff.TYPECHECK_CODE;
5
5
  exports.emptyReport = require_diff.emptyReport;
@@ -1,2 +1,2 @@
1
- import { a as typecheckPart, c as isExpectedDims, d as emptyReport, i as TYPECHECK_CODE, l as pctDelta, m as serializeReport, n as runMeasure, o as DEFAULT_TOLERANCE_PCT, r as runPart, s as evaluateExpected, t as runDiff, u as runChecks } from "./diff-MBAc87Xi.js";
1
+ import { a as typecheckPart, c as isExpectedDims, d as emptyReport, i as TYPECHECK_CODE, l as pctDelta, m as serializeReport, n as runMeasure, o as DEFAULT_TOLERANCE_PCT, r as runPart, s as evaluateExpected, t as runDiff, u as runChecks } from "./diff-CSrgWg-i.js";
2
2
  export { DEFAULT_TOLERANCE_PCT, TYPECHECK_CODE, emptyReport, evaluateExpected, isExpectedDims, pctDelta, runChecks, runDiff, runMeasure, runPart, serializeReport, typecheckPart };
package/dist/cli/main.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_diff = require("../diff-DhOTZnG_.cjs");
3
+ const require_diff = require("../diff-B4THXE07.cjs");
4
4
  let node_url = require("node:url");
5
5
  let node_fs = require("node:fs");
6
6
  let node_path = require("node:path");
package/dist/cli/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { f as pushError, h as loadBrep, m as serializeReport, n as runMeasure, p as reportOk, r as runPart, t as runDiff } from "../diff-MBAc87Xi.js";
2
+ import { f as pushError, h as loadBrep, m as serializeReport, n as runMeasure, p as reportOk, r as runPart, t as runDiff } from "../diff-CSrgWg-i.js";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { existsSync, globSync, mkdirSync, realpathSync, watch, writeFileSync } from "node:fs";
5
5
  import { basename, dirname, join, resolve } from "node:path";
@@ -55,7 +55,6 @@ var RELATION_BUDGET_MS = 15e3;
55
55
  var MAX_BODIES = 24;
56
56
  var VOL_EPS = 1e-9;
57
57
  var SUBSTANTIAL_USPAN = 2.5;
58
- var BORE_DOT = .5;
59
58
  var v3sub = (a, b) => [
60
59
  a[0] - b[0],
61
60
  a[1] - b[1],
@@ -157,7 +156,7 @@ function computeBodyRelations(brep, solids, bodies) {
157
156
  * The bore axis lets a later phase aim a section cut or anchor a feature mark.
158
157
  */
159
158
  function computeCylinderFeatures(brep, shape) {
160
- const { getFaces, faceGeomType, faceCenter, normalAt, faceOrientation, faceAxis, measureCurvatureAtMid, uvBounds, isOk } = brep;
159
+ const { getFaces, faceGeomType, pointOnSurface, normalAt, faceAxis, measureCurvatureAtMid, uvBounds, isOk } = brep;
161
160
  const bores = [];
162
161
  let minRadius;
163
162
  let faces;
@@ -189,13 +188,12 @@ function computeCylinderFeatures(brep, shape) {
189
188
  }
190
189
  minRadius = minRadius === void 0 ? radius : Math.min(minRadius, radius);
191
190
  try {
192
- const p = faceCenter(f);
193
191
  const o = ax.origin;
194
192
  const d = v3unit(ax.direction);
193
+ const p = pointOnSurface(f, .5, .5);
195
194
  const rel = v3sub(p, o);
196
195
  const radial = v3unit(v3sub(rel, v3scale(d, v3dot(rel, d))));
197
- const n = normalAt(f);
198
- if (v3dot(v3unit(faceOrientation(f) === "forward" ? n : v3scale(n, -1)), radial) > BORE_DOT) bores.push({
196
+ if (v3dot(v3unit(normalAt(f, p)), radial) < -.5) bores.push({
199
197
  radius,
200
198
  axisOrigin: [
201
199
  o[0],
@@ -53,7 +53,6 @@ var RELATION_BUDGET_MS = 15e3;
53
53
  var MAX_BODIES = 24;
54
54
  var VOL_EPS = 1e-9;
55
55
  var SUBSTANTIAL_USPAN = 2.5;
56
- var BORE_DOT = .5;
57
56
  var v3sub = (a, b) => [
58
57
  a[0] - b[0],
59
58
  a[1] - b[1],
@@ -155,7 +154,7 @@ function computeBodyRelations(brep, solids, bodies) {
155
154
  * The bore axis lets a later phase aim a section cut or anchor a feature mark.
156
155
  */
157
156
  function computeCylinderFeatures(brep, shape) {
158
- const { getFaces, faceGeomType, faceCenter, normalAt, faceOrientation, faceAxis, measureCurvatureAtMid, uvBounds, isOk } = brep;
157
+ const { getFaces, faceGeomType, pointOnSurface, normalAt, faceAxis, measureCurvatureAtMid, uvBounds, isOk } = brep;
159
158
  const bores = [];
160
159
  let minRadius;
161
160
  let faces;
@@ -187,13 +186,12 @@ function computeCylinderFeatures(brep, shape) {
187
186
  }
188
187
  minRadius = minRadius === void 0 ? radius : Math.min(minRadius, radius);
189
188
  try {
190
- const p = faceCenter(f);
191
189
  const o = ax.origin;
192
190
  const d = v3unit(ax.direction);
191
+ const p = pointOnSurface(f, .5, .5);
193
192
  const rel = v3sub(p, o);
194
193
  const radial = v3unit(v3sub(rel, v3scale(d, v3dot(rel, d))));
195
- const n = normalAt(f);
196
- if (v3dot(v3unit(faceOrientation(f) === "forward" ? n : v3scale(n, -1)), radial) > BORE_DOT) bores.push({
194
+ if (v3dot(v3unit(normalAt(f, p)), radial) < -.5) bores.push({
197
195
  radius,
198
196
  axisOrigin: [
199
197
  o[0],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs-cad",
3
- "version": "0.31.0",
3
+ "version": "0.32.0",
4
4
  "description": "Brainstorm → design → author → verify → polish pipeline for parametric brepjs CAD, with the brep CLI",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",