This release adds parametric CAD modeling through VCAD, a headless test stack that no longer needs SketchUp for most suites, a log aggregator for observability, and a large documentation refresh.
VCAD: Parametric BRep Geometry in SketchUp
Supex now ships a Rust sidecar that evaluates Loon code (.cmp.oo files) into BRep solids and imports the resulting mesh into SketchUp as a native component. Agents get a typed tool surface (vcad_place, vcad_update, vcad_inspect, vcad_eval, vcad_list_nodes) with primitives, booleans, fillets, shells, sweeps, lofts and patterns coming from the vendored vcad kernel. A standalone Tauri viewer previews geometry live, a file watcher re-evaluates nodes when sources or library modules change, and an import system lets Loon code reference existing SketchUp entities (dimensions, bounds, native solids) with cascade updates through a dependency DAG.
Headless Testing and CI
A Ruby mock of the SketchUp API runs the runtime without SketchUp, so driver, runtime, stdlib, mock, sidecar, viewer and radar suites now run in Docker on GitHub Actions with a second lint stage (RuboCop, ruff, mypy, rustfmt, clippy, tsc, eslint). ./test selects suites by slug and ./test --e2e drives the real SketchUp.
Radar: One Stream for All Logs
./radar tails MCP protocol, CLI, runtime console, sidecar and VCAD event logs into one normalized stream with a Textual TUI, filters by level and source, and deterministic event IDs to cross-reference plain output with the interactive view. All logs now live under $SUPEX_WORKSPACE/.tmp/logs/.
Workspace-Aware File Handling
Relative paths in eval_ruby_file, open_model, save_model and screenshot tools resolve against the project workspace instead of the SketchUp process directory, so eval_ruby_file('src/create_table.rb') works as the guide always suggested. The .rbz package now bundles the stdlib and works without a supex checkout.
What's New
- Added VCAD sidecar evaluating Loon code into BRep geometry, with DAE export into SketchUp components (ab52202, b4984da, 35737d7, 9df2710, 57a78ed)
- Added VCAD MCP tools:
vcad_place,vcad_updatewith cascade,vcad_inspect,vcad_eval,vcad_list_nodes,vcad_watch_pause/vcad_watch_resume(9df2710, bc2a661, 28b5466) - Added standalone VCAD viewer (Tauri) with live mesh updates and viewer relay tools
vcad_viewer_state,vcad_viewer_screenshot,vcad_viewer_focus(620a789, d587a38, dba9e27, feb3804) - Added VCAD import system: data extracts from SketchUp entities, VCAD-backed and native SketchUp solids for CSG, with a dependency DAG and cascade updates (43bcb3e, ea2e75f, a4de8c8, c431f83, e9fa3ba, baa02b0)
- Added filesystem watcher and library module tracking that re-evaluate VCAD nodes when
.cmp.ooor.oofiles change, with trigger coalescing and batch mode (b01db0d, 8f1a205, e3fb17d, 655f840, 3e56794) - Added VCAD diagnostics:
vcad_metrics,vcad_reconcile_status, artifact manifests, structured error envelopes and versioned payload schemas (d2fbab7, 7ef6880, 2e40296, c744868, 5c2ab85) - Added unified
check_statustool covering SketchUp, sidecar, viewer and console capture (8b011cc) - Added
get_entityMCP tool and./supex entity <id>CLI command returning bounds, dimensions, layer, material, flags and transformation of one entity (793240f) - Added
SupexStdlib.with_operationhelper that runs a block as one undoable SketchUp operation with rollback on error (98d2306) - Added headless SketchUp API mock server for running runtime tests without SketchUp (b17b7cc, 3645b69)
- Added radar log aggregator TUI with level and source filters, hot-reloadable renderers and an E2E workspace mode (1b09dfa, 1a8d509, 1990f31, 62d7a2b, 8ad4e4f)
- Added Docker-based CI running all headless suites and a lint stage (628fab7, f254327, e46e9b6)
- Added
./testrunner with suite selection and./scripts/rebuild.shwith target selection (80037b9, 5e6ebbe, 977a484, ca09744) - Added agent guide directory (
supex-guide/) with Ruby, VCAD, workflow, MCP and troubleshooting guides plus stdlib and CAD library references (c76d492, 9d0775b, 050bc98, 9682f82) - Added
SUPEX_WORKSPACEper-connection project root propagated through the hello handshake (67b95b6, 69641fd) - Added
/review-vendorand/commit-vendorskills for rolling the vendored vcad, loon and tang submodules (a7a10c8, c5c7b6a, a269156)
Improvements
- Relative file paths now resolve against the workspace in
eval_ruby_file,open_model,save_modeland screenshot tools (9178a05) - Vendored vcad, loon and tang track upstream
maindirectly; no patch branches, sidecar evaluates through upstream loon and exports DAE throughtessellate_brep_by_face(77ca3da, 78d48ba, 10c0a77, 86ac598, adc811c, 4ab94f1) - Unified the sidecar eval pipeline into a single request with flags and consolidated inspect and REPL endpoints (5dd6549, c587325, c90ee59, 1d51069, eaef2f2)
- Consolidated all logs under
$SUPEX_WORKSPACE/.tmp/logs/with a pipe-separated format andSUPEX_LOG_DIRoverride honored by every wrapper and the launcher (d4a8757, 9e0fe26, 17c093a) - Deferred console capture to the hello handshake so runtime logs land in the connecting client's workspace (2ed466c)
- Hardened path policy symlink resolution, sidecar path containment, REPL session path sanitization and the workspace boundary for VCAD source reads (ac8c32c, cbf371b, 47ec112, fc88ab7)
- Added socket RPC concurrency safety and connection singleton rotation in the driver (0004d5e)
- Migrated the driver to MCP Python SDK 2.x; updated Python, Ruby, Rust and npm dependencies with tracked lockfiles (88d621d, 5871ef1, 01a170b, a499e2b, 17b5d30, a733486, 1cf7e2a, 2280ceb)
- Component file extension is now
.cmp.oo; library modules prefer.oowith.loonstill accepted (80b8997, 4728fd5) - Renamed VCAD environment variables to the
SUPEX_VCAD_prefix (0858f71) - Moved slash commands to the Claude Code skills layout (a269156)
- Documentation refresh: README with VCAD section, Rust and Node requirements and project-scoped MCP setup; driver, runtime and vendor READMEs, architecture, configuration and protocol docs synced with the code (366a38a, 65d4d3a, 6d616df, 25fa62e, e19c620, e6f454b, 514f99a, 36bc421)
- Agent guide corrected: Loon arithmetic operators are supported, batch screenshot
isolateis a per-shot key, module resolution order documented (154f805) - A driver test now keeps the documented MCP tool inventory in sync with registered tools, and
check-docs.shrejects repository-relative paths in the guide (5fed21e, 5cd95ac) release.shbumps every component version and lockfile and accepts--yesfor non-interactive runs (c77473d, 186e234)
Bug Fixes
- Fixed
.rbzbuild failing with rubyzip 3 and made the package self-contained by bundling the stdlib (fd02822) - Removed the
vcad_exporttool, which called a sidecar method that was never implemented (89dd7c6) - Fixed relative
import-meshandimport-steppaths to resolve against the source file directory (42ef2b6) - Fixed
path_policy.rbnot being reloaded by./supex reload(21108d9) - Fixed CLI
inforesponse format and preserved rich formatting through the logging wrappers (15adc95, 6da3fa7, 1d04e86) - Fixed
protocol_versionparsing in the VCAD hello handshake and aligned the handshake and viewer relay contracts (26e8ced, 2be98fc, c2c2c8f) - Fixed E2E tests to use an isolated workspace and to load snippets fresh into a running SketchUp (f5b1a58, 7209240)
- Fixed RuboCop targeting Ruby 3.4 while SketchUp bundles 3.2.2, and enabled the performance cops that were never loaded (5394a8c)
- Fixed viewer build for Tailwind v4 and TypeScript strict mode, and test warnings in viewer and TUI (f408709, b569741, 110236d, ff94e5b)