List view
Runtime decoupling: RoomKernel as Automerge peer, process-isolated runtime agents, SSH remotes, sandboxing
No due date•6/10 issues closedMigrate the isolated renderer's postMessage protocol to JSON-RPC 2.0 and unify the notebook output renderer with the MCP App widget. ## Phases 1. **JSON-RPC transport foundation + host→iframe** — `JsonRpcTransport`, `rpc-methods.ts`, host sends JSON-RPC (#1285) 2. **Iframe→host migration** — Outgoing messages (resize, render_complete, renderer_ready), widget bridge client, bootstrap HTML outgoing 3. **Legacy removal** — Drop `frame-bridge.ts` types, remove dual-format code, clean up `IsolatedFrameHandle` 4. **MCP App unification** — Same iframe codebase serves both nteract desktop (live CRDT) and MCP App widget (static `structuredContent`) ## Context Issue #1281. The notebook app and MCP App widget both render outputs in sandboxed iframes but use different protocols: a custom `{ type, payload }` postMessage format (desktop) vs JSON-RPC 2.0 via `@modelcontextprotocol/ext-apps` (MCP App). Unifying on JSON-RPC 2.0 with our own lightweight transport eliminates the protocol gap and enables one renderer for both contexts. ## Related - Widget CRDT support (#761) — enables richer live widget state in the desktop app; MCP App context gets static snapshots
No due date•3/3 issues closedAdd support for rich output MIME types beyond the basics. Each renderer affects iframe bundle size, so additions should be deliberate.
No due date•1/1 issues closedMove widget/comm state from broadcast streams into the RuntimeStateDoc. Daemon-mediated writes: all comm state changes go through the daemon (via UpdateComm requests), keeping the same ownership model as kernel status and execution state. Eliminates CommSync, reduces broadcast surface, gives new clients widget state for free via existing Automerge sync. Schema: comms/ map in RuntimeStateDoc (alongside kernel/, queue/, executions/, outputs/). ## Decision log - **Same doc vs separate doc:** RuntimeStateDoc (not a separate WidgetDoc). Keeps all runtime state in one doc — no cross-doc atomicity issues for Output widget capture. Daemon strips client writes uniformly. - **Same doc vs notebook doc:** RuntimeStateDoc (not the notebook doc). Widget state is ephemeral (dies with kernel) — doesn't belong in the persistent notebook doc. - **Write model:** Daemon-mediated. Frontend sends UpdateComm requests; daemon writes to RuntimeStateDoc. Frontend uses optimistic local state for immediate feedback. Same pattern as ExecuteCell. ## Phases A. #808 — Schema + dual-write (comms/ in RuntimeStateDoc, CommState kept as fallback) B. #809 — Frontend + Python read from doc C. #810 — Eliminate CommSync, output broadcasts, comm custom message routing D. #811 — Binary unification (blob store for widget buffers) + UpdateComm request Parent: #761
No due dateDecouple execution from cells, outputs from the notebook doc, and widget state from CommSync. Foundation for per-runtime Automerge peers and execution-ID-first architecture.
No due dateAspirational features, research spikes, and infrastructure work without a target release.
No due date•1/6 issues closedThings we want to do after the v2.0 release.
No due date•29/29 issues closed