Releases: asbis/ShapeItUp
Release list
v1.29.0 — Shell, Mirror, Pattern
Full Changelog: v1.27.0...v1.29.0
v1.27.0 — direct manipulation in the viewport
Full Changelog: v1.24.0...v1.27.0
v1.24.0 — browser viewer
Browser viewer
The 3D preview now runs in any browser, not just a VS Code webview. New open_viewer / close_viewer MCP tools start a local HTTP + WebSocket host and return a URL — point a browser (or the Claude Code browser pane) at it and you get the full viewer: parts panel, parameter sliders, section plane, measure, STEP/STL export, and live reload on save.
set_render_mode, toggle_dimensions and open_shape drive it too. The SubscriberBus gained in-process subscribers, so those existing tools reach browser viewers without any change at their call sites.
Works from a plain npx -y @shapeitup/mcp-server install: the package ships the two browser bundles (~1.3 MB gzipped) and resolves the OCCT/Manifold/MuJoCo wasm from node_modules, where they already are as ordinary dependencies.
Fixes
- Plugin skills never loaded. The marketplace entry pointed at
./skillswhile the repo hadskill/, and the layout was wrong — a skill is a directory containingSKILL.md. Nowskills/shapeitup/SKILL.md. - The skill was not scoped. Frontmatter said
globs:, which is not a Claude Code field and was silently ignored. The field ispaths:. - Plugin version drift. The marketplace entry was pinned at 1.3.0 against packages at 1.23.0.
- MCP config was never read.
mcpServerslived in.claude/settings.json, which is not a location Claude Code loads MCP servers from. Moved to.mcp.json. - Build was broken on pnpm 11. The build-script allowlist moved to
pnpm-workspace.yaml; CI now pins pnpm 11 to match.
release-check gained guards for the plugin version, the skills path layout, and the presence of the browser bundles in the npm package — each of these failed silently before.
v1.23.0 — MuJoCo linkage dynamics
Adds physics-solved linkages to the MuJoCo backend (engine: "mujoco").
Highlights
- Force-driven four-bar (
dynamic: trueon afourBarlinkage): the crank is prescribed to the driver angle while the coupler/rocker solve as real dynamic bars closed by a<connect>constraint — so the run reports the pin force at the coupler↔rocker joint (SimResult.pinForces) and the links respond to gravity/contacts. - Dynamic body riding a scripted kinematic parent: a dynamic body parented to a moving kinematic part now rides it while its own joint articulates (matches Rapier).
The analytic linkage path is unchanged for the kinematic/Rapier engines. See docs/mujoco-integration.md §7a. 805 tests green.
v1.22.0 — MuJoCo dynamics backend
Adds MuJoCo as a second force-based simulation backend beside Rapier.
Highlights
@shapeitup/sim-mujoco: SimSpec→MJCF translator +runMujocoengine.- Select it per run:
export const sim = { engine: "mujoco", ... }. - Scripted bodies collide (weld-driven), stiff servos stabilised, mesh-geom colliders (convex hull), and contact force + penetration reporting.
- Four-bar linkages verified on MuJoCo.
- Viewer playback (runtime-loaded WASM; graceful fallback to Rapier/kinematic).
The MCP path is fully tested (802 tests green). Viewer in-webview MuJoCo playback ships behind a graceful fallback and is pending an interactive smoke-test. See docs/mujoco-integration.md.
v1.21.0 — Mechanism simulation upgrade
Turns the motion sim into a real mechanism tool — addresses a full P0–P2 backlog from an external knitting-machine build. Backward compatible: existing sim blocks run unchanged.
Kinematic authoring
- pose-tracks — drive a body with one time-varying transform (closed-loop escape hatch)
- revolute
unit: "deg"; new profiles firstOrder (dead-time + τ), slew, servo; keyframe interpolation (linear/smoothstep/cubic) - markers — named points whose world path the sim reports
Constraint solver
- analytic four-bar / slider-crank / gear solver — a four-bar coupler is ONE
linkagesentry, loop closure solved automatically - contact intervals (re-collision on the return stroke is captured)
Dynamics (Rapier)
- CCD on by default; realistic density for mm-scale stability
- real joints + PD motors on dynamic bodies — a cam can drive a pinned follower; per-body collider choice; solver-iterations exposed
Discoverability & self-test
- zod validation with actionable errors;
get_api_reference("simulation")with units explicit - assertions channel (pass/fail);
simcan be a function of params; richer report (orientation, markers, contact windows)
UI
- the timeline is now a first-class extension panel (toolbar Sim button + docked play/scrub/speed + collision & assertion log)
🤖 Generated with Claude Code
v1.20.0 — Simulation layer
Simulate before you build
A new run_simulation MCP tool + an in-viewer motion timeline let you watch mechanisms move, model actuators (e.g. a solenoid's ramp-up / response-delay), and catch collisions-during-motion before you print or machine parts.
Two engines
- Kinematic — scripted motion, analytic, fast. For pattern / interference testing (e.g. a carriage sweeping a needle bed).
- Dynamics (Rapier) — gravity + contacts; dynamic bodies fall/rest/tumble while kinematic bodies still follow their actuator profiles.
How
Add export const sim = { bodies, joints, actuators, ... } to a .shape.ts. mode: "dynamic" (or any dynamic body) selects the physics engine. Examples in examples/sim-demo/; design notes in docs/simulation-design.md.
Additive and guarded — shapes without a sim block are unchanged.
🤖 Generated with Claude Code
v1.19.0 — faster iteration, less context bloat
Performance & context economy
- render_preview no longer embeds the PNG inline by default (saved to disk; Read the path) — stops full-size images accumulating in agent context.
- Per-part stats table capped at 25 rows in summary mode (was bypassed for named assemblies); dropped from render_preview by default.
- Live-parts fast path: check_collisions / verify_shape / describe_geometry / preview_finder / sweep_check reuse the previous execute's live geometry when nothing changed — no more double full re-execution.
- WASM warms up at server start; resetCore keeps the mesh cache; collision overlap AABB via OCCT bbox (no extra tessellation).
- get_api_reference returns signatures-only for large categories by default.
UX / API
- modify_shape gains
edits[]for in-place patches (no full-file resend). check_collisionsdocumentsexport const expectedContactscolocation.drawTextdelisted (no font bundled) + static lint; emboss geometry instead.- Mixed-material BOM warning; two false-positive lints trimmed.
patterns.applyPlacementclones its input; newmounts.pegboardGridhelper.
Also lands accumulated pre-release packages work (split STL/STEP export). 735/735 tests green.
v1.17.0 — 3MF export for Bambu Studio / OrcaSlicer
3MF export — print straight to Bambu
Adds 3MF as a first-class export format alongside STEP/STL, so models can go straight to a Bambu Lab printer (or any slicer) with per-part colors preserved — the fidelity STL drops.
What's new
- New format
3mfeverywhere: theexport_shapeMCP tool, the VS Code command "Export as 3MF (Bambu / Orca)", and a new entry in the 3D viewer's export menu. - Bambu Studio / OrcaSlicer now default to 3MF when using "Export and Open in…", handing off a colored, print-ready file.
- Dependency-free 3MF writer (works in both the browser worker and the Node MCP server).
Workflow
CAD → 3MF → Bambu Studio → Print. Each part lands as a separate, colored object ready to slice.
Quality
- 726/726 tests pass (incl. a new end-to-end 3MF export test), clean typecheck/lint.
- Extension + MCP server bumped to 1.17.0 in lockstep.
v1.16.3 — field-test fixes (pinch-valve, wall-organizer, knitting-machine)
Ships extension + @shapeitup/mcp-server 1.16.3 in lockstep. All tests green; lint + build clean.
1.16.3 — knitting-machine field test
- Dedicated hint for
drawText-without-font failure (no more false standards/divide-by-zero trail). - Bare local imports now resolve to a sibling
.shape.ts. - Child
materialno longer leaks onto a multi-file assembly (correct BOM mass).
1.16.2 — wall-organizer (pegboard)
- Fix printability mis-flag from generic part names; "extends below z=0" false positive on wall-mount parts; workspace-mismatch warning now fires for fresh dirs.
- Deduplicate identical geometry-warning lines.
- New
mountsstdlib namespace — positive keyhole/peg studs (inverse ofholes.keyhole).
1.16.1 — pinch-valve
- Declaring a
materialauto-upgrades per-part measurement to"full"so mass/volume render. check_collisionsappends anacceptedPairs/pressFitThresholdtip on real collisions.- SKILL.md surfaces per-part
material/qty+drawRoundedRectanglecorner note.
Also adds the cosmetic stdlib namespace. Includes an OS-agnostic fix to the workspace-mismatch absolute-path check (CI portability).