Files
Mohamed Boudraandmillerben95 8332f4d1ff feat(muse): add Muse Code as a built-in provider plugin (#5719)
* test(muse): record real host protocol fixtures

* feat(muse): add built-in MSP provider

Co-authored-by: millerben95 <millerben95@users.noreply.github.com>

* fix(muse): expose provider settings in the app

The daemon registered host settings without a client contribution, leaving sandbox, network, and workspace trust unreachable. Share the definition with a settings screen and expose it through Command Center even when installed plugins are disabled.

* docs(muse): publish setup and provider support

* test: correct runtime fixtures and restart readiness

* fix(muse): hide reminder housekeeping from the timeline

* fix(muse): use the official Muse Code mark

Source: https://muse.ai/images/favicon/app-squiggle.svg

Preserve the official silhouette path verbatim. Remove its gradient definition and use currentColor, scaling the original 100-unit coordinates into the 24-unit viewBox. Black silhouette renders match pixel-for-pixel.

* fix(muse): adapt to current plugin APIs

Use the screen API introduced with sidebar plugin items. Usage reports now come from source account discovery; remove the retired agent usage-reference request and headline marker, and exercise discovery through the existing provider fixtures.

---------

Co-authored-by: millerben95 <millerben95@users.noreply.github.com>
2026-09-30 14:56:41 +01:00
..

Muse MSP fixtures

Captured on Linux on 2026-09-29 from Muse Code 1.4.1 (1.4.1-R4503.1), build 35815c253477406321e3f5595195becc25e3907a.

  • Stable handshake fingerprint: sha256:e0e163db6ccf00dbe68402ce55d6319b3edc33c421f31e9583b587b2de8a118f.
  • Experimental export fingerprint: sha256:b359d70b581b0ea471d35a7770d3039fdd35f19a46a2d42b43fd4b1674d52c8a.
  • Schema version: 1. Both sessionMcp and sessionListStream were granted.

Each line is { "dir": "out" | "in", "msg": <JSON-RPC message> }. out means client to host; in means host to client. IDs, timestamps, cursors, revisions, deltas, and event order are retained. Replay consumers should treat IDs and cursors as opaque and compare behavior rather than wall-clock values. The skill catalogs retain only the test selectors phase0 and muse-parity-*; unrelated personal, bundled, and installed-plugin skill rows were removed. No credentials are included.

A throwaway driver launched muse serve with isolated XDG_CONFIG_HOME and XDG_DATA_HOME. Model turns used a custom Responses endpoint, an environment key, providerId: "meta", and modelId: "meta/muse-spark-1.3". The settings pinned the endpoint's auth: "bearer", the default provider/model, and permission profile :ask-me with its own schema_version: 1. The sandbox and default proxy-only network policy remained enabled. Workspace trust was enabled for project skills. The approval judge was disabled for staged approval probes so decisions reached the client. The driver and local server remain outside the repository.

File Recorded behavior
text-reasoning.ndjson Session start, rational-sum prompt, public reasoning summary, streamed assistant text, token usage, terminal.
tools-edit.ndjson Read f, run wc -l f, replace beta with gamma; fetch the JSON patch through patchRef and item/readOutput.
staged-approval.ndjson wc -l f && rm -rf f: safe first stage, held second stage, receipt and decision, terminal resolution. Also records a duplicate decision rejected as already resolved.
multi-stage-approval.ndjson wc -l f && rm -rf f && rm -rf g: successive decisions return terminal: false, then true; both files are removed.
interrupt.ndjson Interrupt a running shell sleep; tool reconciliation and turn/completed with terminal: "cancelled".
steer.ndjson Submit ifBusy: "steer" during a shell sleep; accepted as steered, and the original turn replies with the replacement marker.
resume-source.ndjson Complete a marker turn, then kill the host process before starting either resume probe.
resume-without-cursor.ndjson New host returns inline history and runs a fresh turn recalling the marker.
resume-with-cursor.ndjson New host returns history.mode: "none", replays the cursor suffix, then completes a fresh marker turn.
resume-reasoning.ndjson New host resumes the steering session, including its reasoning history, and completes another text turn.
subagent.ndjson Native spawn/wait/read-result tool calls return a child result marker and an evidence log path. This build emits toolCall, without a dedicated subagent item.
skill.ndjson Discover the project skill and invoke its selector through a structured skill input part.
image-followup.ndjson Send a valid 16×16 PNG, then complete a text-only marker turn in the same session. Image-description accuracy is not asserted.
catalog-controls.ndjson Model catalog, environment-key account state, empty subscription usage, paginated sessions, approval mode change, valid model selection, and rejection of a model outside the catalog.
mcp-stdio.ndjson Admit a session-scoped stdio server. Model attempts fail with an unknown-tool routing error and no marker is returned; this is a failure fixture.
auto-review-unavailable.ndjson Selecting :auto-review as the default profile rejects session start because the automated reviewer is unavailable.
unsafe-path.ndjson Group-writable data directory rejects session start with UnsafePath.
initialize-history.ndjson Handshake against 322 retained session logs (7,713,541 bytes); three measured launches took 155–160 ms.

The project skill body was “Reply with exactly SKILL_PHASE0_OK. Do not use tools.” The injected stdio server implemented initialize, tools/list, and tools/call, advertised verification_echo with an empty-object input schema, and returned MCP_PHASE0_OK as text. The host registered mcp__verification__verification_echo, but the model route attempted the unqualified verification_echo; the marker was never delivered. Keep this distinction when testing MCP support.

Phase 3 captures use the same build and isolated custom route. Sandbox and network remain at their defaults. phase3-user-skill omits workspace trust; phase3-project-skill enables it. Native subagent captures enable MUSE_EXPERIMENTAL_SDK_ENABLED=on; the default workflow capture reads the session from a daemon run that omitted the flag. Its workflow child IDs are internal activity IDs, not MSP childSessionId values.

File Recorded behavior
phase3-controls.ndjson Two todo entries, a single-choice question, an answer and matching settlement, retained view paging, empty subscription usage.
phase3-cancel.ndjson Question cancellation and matching cancelled settlement.
phase3-child-read.ndjson Read and page an actual native child session, returning its assistant marker.
phase3-default-workflow.ndjson Read and page the default daemon run: workflow revisions 1–7, child activity, and MUSE_PARITY_CHILD_OK; no childSessionId.
phase3-user-skill.ndjson User-scoped skill catalog and structured invocation, returning MUSE_PARITY_USER_OK with trust off.
phase3-project-skill.ndjson Project-scoped skill catalog and invocation, returning MUSE_PARITY_PROJECT_OK with trust on.
phase3-compact.ndjson Resume a completed session; manual compaction rejects with compaction_unavailable.
phase3-compact-history.ndjson Resume three completed turns; catalog context limit is null and compaction still rejects.
phase3-compact-limit.ndjson Same session and route with only a configured context limit; compaction is admitted and completes, reducing 22,192 tokens to 21,322.

The subprocess fixture host also generates schema-based variants for dedicated subagent items, explicit child-session linkage, nonempty subscription windows, skill/changed, deny choices, lost events, watchdog silence, and late admission. These variants test protocol behavior; they are not claimed as real-host captures. The workflow replay triggers a generated gap to page the recorded default run. Disk edits in a live host did not emit skill/changed during a 15-second probe.