Releases: NimbleBrainInc/synapse
Releases · NimbleBrainInc/synapse
v0.8.0
Fixes the file picker, which was effectively dead in NimbleBrain hosts and inflated bytes through tool-call JSON. pickFile / pickFiles now resolve to a stable workspace file ID; the host persists the bytes server-side over multipart.
Breaking
FileResult.base64Dataremoved;FileResult.id(workspace file ID,fl_+ 24 hex) added. Tools that need the bytes look the file up by ID server-side instead of receiving them inline. The prior shape capped uploads at the JSON body limit; this removes that ceiling.
Fixed
pickFile/pickFilessentsynapse/pick-file, but the NimbleBrain bridge handlessynapse/request-file— calls would hang until the iframe's request timeout. Both methods now sendsynapse/request-file.
v0.7.0
Adds iframe-side support for the MCP 2025-11-25 tasks utility so widgets can fire long-running tools without blocking. See PR #8.
Added
synapse.callToolAsTask(name, args?, opts?)returns aTaskHandle(result()/refresh()/cancel()/onStatus()) for long-running tools.useCallToolAsTask(name)React hook with notification subscription and polling fallback.Task,TaskStatus,CreateTaskResult,TasksCapability,TaskHandle,CallToolAsTaskOptions,UseCallToolAsTaskResultexports.
Changed
createSynapse()advertisesappCapabilities.taskson init;parseToolResultpreserves_meta(includingio.modelcontextprotocol/related-task).
Breaking
- TypeScript mocks of
Synapsemust add stubs forcallToolAsTaskand_hostTasksCapability(now required interface members). Runtime API unchanged.
v0.6.0
Breaking
HostInfono longer carries athemefield. It was redundant after the host-context unification; read theme viasynapse.getTheme()/useTheme()instead.HostInforeports identity only (host name, protocol version,isNimbleBrain).
Added
useHostContext()React hook andsynapse.getHostContext()/synapse.onHostContextChanged()for reading and observing the full ext-apps host context — including host-specific extensions like NimbleBrain'sworkspacefield. Returns the spec-typedMcpUiHostContext.
Changed
getTheme()/useTheme()/onThemeChanged()are now selectors over the unified host-context state. Same API and behavior, butonThemeChangedno longer fires when only non-theme fields (e.g. workspace) change.
v0.5.0
Minor bump: removes a public method from the Synapse interface. Also changes the wire format of synapse/download-file (now sends a Blob, not a string) — must ship paired with a host bridge that accepts a Blob payload.
Fixed
downloadFile()with a Blob now delivers the actual bytes. Previously the Blob path replaced the content with the literal string"[Blob content not serializable]"before sending, producing a 31-byte text file on disk.downloadFile()now sends the Blob directly over thepostMessagestructured-clone channel; the host bridge downloads it as-is. String content is wrapped in aBlobbefore sending so exactly one shape travels the wire.- When a Blob is passed with an intrinsic
typeand no explicitmimeTypearg, the Blob's type is used on the wire (previously the SDK would emitapplication/octet-streamand the host would rewrap the Blob, losing the correct MIME). Precedence is: explicitmimeTypearg > Blob's intrinsic type >application/octet-streamfallback.
Removed
- BREAKING:
saveFile()/synapse/save-file. The method had no host handler (silently no-op) and its signature was indistinguishable fromdownloadFile(). UsedownloadFile(). If you need to persist a generated file to the workspace so the agent can reference it, that will be a distinct, spec'd API when the need arises.
v0.4.4
Fixed
- Spec-compliant theme propagation in Vite preview and
createSynapsehandshake. Preview host now sends tokens underhostContext.styles.variablesand emitsui/notifications/host-context-changed(replacing the legacyhostContext.tokensfield andsynapse/theme-changedmethod).createSynapsenow injects host CSS variables and notifies theme subscribers immediately after the handshake resolves, so widgets see the host-provided theme on first paint instead of only on subsequent changes.
v0.4.3
Added
Synapse.readResource(uri)— reads an MCP resource from the originating server via the ext-appsresources/readbridge. Returns the spec-shapedReadResourceResult.App.readServerResource(params)— spec-aligned equivalent on the low-levelApptype. AcceptsReadResourceRequest["params"]so callers can pass_meta(progress tokens, related-task).ReadResourceRequestandReadResourceResultre-exported from the package root so consumers don't need a direct@modelcontextprotocol/sdkimport.
Fixed
- Vite preview harness no longer emits
synapse/data-changedon UI-initiated tool-call responses. The old behavior created a feedback loop (tool call →data-changed→useDataSyncrefetches → tool call → …).
v0.4.0
Breaking changes
- Spec-compliant field names:
appInfo(notclientInfo),appCapabilities(notcapabilities),hostInfo(notserverInfo),hostContext.styles.variables(nottheme.tokens) - Removed
synapse/theme-changed: Useui/notifications/host-context-changed(ext-apps spec) openLink()sends a request (with id), not a notification — required by Claude Desktop
Added
- All message types and method strings imported from
@modelcontextprotocol/ext-apps— compile-time enforcement spec-compliance.test.ts— 40+ tests that fail if wire format drifts from specCLAUDE.mdwith hard rules for spec compliance
Fixed
- Blank widget in Claude Desktop (wrong init field names)
- LinkedIn links not opening in Claude Desktop (notification vs request)