Skip to content

v1.37.0-rc2: agent-to-viewport selection bridge (#189/#190), docs site fix

Pre-release
Pre-release

Choose a tag to compare

@gsdali gsdali released this 27 Sep 00:52
d8eab54

Everything merged since v1.37.0-rc1: the agent-to-viewport selection bridge, two dependency floor bumps, and a fix that gets the docs site building again.

This is a prerelease because two of its dependencies still are. OCCTSwiftInteraction is pinned at 2.0.0-rc2 and OCCTSwiftScripts at 1.7.0-rc1, both release candidates upstream. Prerelease versions are named exactly, since SwiftPM does not select one unless asked. The stable v1.37.0 follows OCCTSwiftInteraction 2.0.0, when both floors move to final versions. OCCTSwiftInteraction 2.0.0-rc3 is already out upstream; this release does not adopt or test it, and Package.resolved stays on rc2.

New: get_selection and highlight_selection (#189, #190, PR #191)

The read and write halves of the agent-to-viewport-host selection bridge. 79 tools, up from 77. Neither tool calls into a live viewport: OCCTMCP is a stdio process with no persistent link to an app's InteractiveContext, so both speak the sidecar-file wire format from OCCTSwiftInteraction#17 in the resolved output directory.

  • get_selection reads selection.json and host.lock. The result is one of three states: noHost, hostRunning with an empty selections array, or hostRunning with N selections. It never collapses those into a boolean. Each selection resolves against this server's scene the way select_topology does, so the minted selectionId composes with remap_selection, measure_distance and the rest. A per-entry failure (bad bodyId, out-of-range index) is reported inline without failing the response. A running host whose selection.json is missing or malformed is an explicit tool error.
  • highlight_selection writes highlight_requests/<id>.json atomically and polls handled/<id>.json for the host's real outcome (applied, rejected, superseded), an explicit timeout, or an immediate noHost with no request written. kind and scheme are validated against the wire-format enums before writing. bodyId and index are written through unvalidated, so a bad reference comes back as the host's own rejected.

The tests in this repo play the host against fixture files (15 new tests in SelectionBridgeToolsTests). They do not exercise a live host. The host side, OCCTSwiftInteraction#16 and ACADStudio#16, is closed upstream, but nothing here has been run against it end to end.

Docs: docs/reference/selection.md and the README tool table.

Dependencies

  • OCCTSwiftIO floor 1.8.0.
  • OCCTSwiftViewport floor 1.2.0. This one carries a fix: a Swift 6 concurrency crash where unannotated MTLCommandBufferHandler closures inherited @MainActor on Xcode 16.4, producing a SIGTRAP after every test had already reported green. It is masked on Xcode 26.x, so the floor is what protects an affected machine.
  • Package.resolved gains 16 pins (async-http-client, swift-nio-ssl, swift-crypto, swift-certificates, swift-service-lifecycle and others). The macos-15 runner image updated after the last green run, and its SwiftPM now records dependencies of disabled package traits. The change is purely additive: no existing pin moved and originHash is unchanged. These are the HTTP-transport side of the MCP swift-sdk, which this repo does not enable or build.

Fixed

  • serverVersion now reports the release tag. rc1 left it at 1.36.0, so a client connecting to that build was told it was talking to 1.36.0.
  • The docs site builds again. docs/_config.yml had an unquoted : in its description, a YAML syntax error at line 9. Every "pages build and deployment" run on main failed from v1.32.0 until this release, so no docs change reached the site in that time. The build and deploy succeeded on the merge commit.
  • Em-dashes cleared from the docs this release adds, and CLAUDE.md's dependency section brought current (it had no entry for OCCTSwiftInteraction).

Verification

  • swift build and swift test on the macos-15 runner, resolving the real published dependency graph: 234 tests passed.
  • code-style (swift-format and swiftlint, strict): clean.
  • "Check Package.resolved is current": clean.
  • Docs site: build and deploy succeeded; get_selection and highlight_selection are on the live reference page.

Known, not changed here

  • The docs homepage links to reference/, but the Tool Reference index is served at reference/README.html, so that link returns 404.
  • ExecuteScriptTool.scriptsPin is 1.4.2, though CLAUDE.md says it must track the OCCTSwiftScripts pin in Package.swift. Changing it alters which version execute_script compiles user scripts against, so it needs its own decision.

PRs: #191, #192. #189 and #190 were closed by #191.