Skip to content

VCAD, headless tests, radar and workspace paths

Latest

Choose a tag to compare

@darwin darwin released this 07 Sep 00:29
v0.3.0

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_update with 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.oo or .oo files 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_status tool covering SketchUp, sidecar, viewer and console capture (8b011cc)
  • Added get_entity MCP tool and ./supex entity <id> CLI command returning bounds, dimensions, layer, material, flags and transformation of one entity (793240f)
  • Added SupexStdlib.with_operation helper 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 ./test runner with suite selection and ./scripts/rebuild.sh with 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_WORKSPACE per-connection project root propagated through the hello handshake (67b95b6, 69641fd)
  • Added /review-vendor and /commit-vendor skills 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_model and screenshot tools (9178a05)
  • Vendored vcad, loon and tang track upstream main directly; no patch branches, sidecar evaluates through upstream loon and exports DAE through tessellate_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 and SUPEX_LOG_DIR override 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 .oo with .loon still 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 isolate is 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.sh rejects repository-relative paths in the guide (5fed21e, 5cd95ac)
  • release.sh bumps every component version and lockfile and accepts --yes for non-interactive runs (c77473d, 186e234)

Bug Fixes

  • Fixed .rbz build failing with rubyzip 3 and made the package self-contained by bundling the stdlib (fd02822)
  • Removed the vcad_export tool, which called a sidecar method that was never implemented (89dd7c6)
  • Fixed relative import-mesh and import-step paths to resolve against the source file directory (42ef2b6)
  • Fixed path_policy.rb not being reloaded by ./supex reload (21108d9)
  • Fixed CLI info response format and preserved rich formatting through the logging wrappers (15adc95, 6da3fa7, 1d04e86)
  • Fixed protocol_version parsing 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)