Skip to content

v0.9.5 — Windows Docker ESM, HEIC uploads, sandbox CSP, assertions-in-tests as error

Choose a tag to compare

@isamu isamu released this 07 Jul 20:45

Highlights

Windows Docker sandbox: end-to-end (#1982)

The ESM half of the #1946 / #1982 resolver gap. NODE_PATH is CJS-only per Node's spec, so 0.9.4 restored preset loading but left the MCP child's static ESM imports (import { readXPost } from "@mulmoclaude/x-plugin") failing on Windows. New server/agent/mcp-esm-loader.mjs + mcp-esm-bootstrap.mjs register a resolver hook via tsx --import that falls back to /app/pkg_modules/@mulmoclaude/* when default resolution fails.

The Windows CI probe (test/sandbox-repro/probe.ts) grew an ESM import() step, so this class of regression can't slip through again. No-op on Linux / macOS.

HEIC / HEIF / TIFF / BMP / AVIF attachments

  • Uploader auto-converts these to JPEG server-side (#1996 via #1998).
  • Pre-send preview chip decodes HEIC in the browser (#2000) so the confirmation thumbnail is legible.

User-extensible sandbox CSP (#1989)

Sandboxed collection views can whitelist third-party origins via workspace config/csp.json. A CSP-violation notice + boot-time warnings surface misconfigurations to the user instead of failing silently. Default remains locked down.

Remote host: offline queue for startChat (#1993)

Mobile companion's startChat requests hold while the host is offline; the host + @mulmoclaude/core layer replay them once the presence doc goes live. Presence doc now advertises host capabilities so mobile knows what's supported before submitting (#1992).

Lint: assertions-in-tests promoted warn → error

Three-batch cleanup (#1999 / #2001 / #2005) rewrote every flagged no-throw / side-effect-only test to wrap the target call in assert.doesNotThrow(...) / assert.doesNotReject(...). Includes a new real boundary test for deleteProjectSkill's user-scope refusal (was an empty placeholder before). Rule is now error in eslint.config.mjs — CI blocks a new assertion-less test.

Files: "Open in OS" button (#1988, closes #1985)

Binary / unsupported previews get an OS-native open button so the Files view isn't a dead end when MulmoClaude can't render inline.

Sandbox: allow file downloads from collection views (#1997)

Downloads no longer blocked by iframe sandbox flags.

Full Changelog

See CHANGELOG.md for the complete Added / Changed / Fixed / Security list.

📦 npm launcher: mulmoclaude@0.9.5 (2026-07-08)