feat(dashboard): persist MCP Apps as board widgets#111552
feat(dashboard): persist MCP Apps as board widgets#111552fuller-stack-dev wants to merge 2 commits into
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 19, 2026, 9:54 PM ET / July 20, 2026, 01:54 UTC. Summary PR surface: Source +436, Tests +519, Other +67. Total +1022 across 25 files. Reproducibility: not applicable. as a bug report: this PR adds a new durable MCP App dashboard capability. The supplied focused tests cover the backend behavior, but no failing current-main bug is being claimed. Review metrics: 1 noteworthy metric.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Accept the backend only after the dashboard/Gateway owners explicitly approve the durable descriptor and authority model, then require exact-head CI before landing it as the prerequisite for the separately scoped UI renderer. Do we have a high-confidence way to reproduce the issue? Not applicable as a bug report: this PR adds a new durable MCP App dashboard capability. The supplied focused tests cover the backend behavior, but no failing current-main bug is being claimed. Is this the best way to solve the issue? Unclear pending owner intent: server-side descriptor derivation and transcript reminting avoid persisting HTML or tool payloads, but maintainers must decide whether this is the intended permanent Gateway and board-authority contract. AGENTS.md: unclear because the file could not be read completely. Codex review notes: model internal, reasoning high; reviewed against 27f05c8993fb. Label changesLabel justifications:
Evidence reviewedPR surface: Source +436, Tests +519, Other +67. Total +1022 across 25 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (1 earlier review cycle)
|
7026ee4 to
7ed78c7
Compare
|
Closing as superseded in feature scope by #111524, merged as Fresh-main audit at The audit also found authority-hardening work that remains valid but must land as a narrow fresh-main follow-up: a Reopen only if current main is shown to lack the merged feature surface itself; remaining hardening belongs in the fresh follow-up rather than this conflict-heavy branch. |
Related: #111218
What Problem This Solves
Pinned dashboard widgets could persist HTML, but an MCP App view was only an expiring runtime lease. There was no backend-owned way to admit an MCP App pin, retain a safe durable descriptor, or remint a view after restart without persisting the App HTML, tool inputs/results, or transient view ID.
Why This Change Was Made
This adds the backend/protocol/store half of durable MCP App widgets. The public pin payload contains only
{ kind: "mcp-app", viewId }; the Gateway validates the live view in the board session, requires its originating tool call, derives the stable descriptor and App-visible tools server-side, and persists only canonical authority metadata.Board App views are reminted from the authenticated transcript. They are read-only until explicitly granted, use only the snapshotted App-visible tools, and recheck current grant, revision, and instance authority for every interactive capability. Restart-reconstructed or revoked source views remain read-only. Existing HTML
show_widgetand channel behavior are unchanged.AI-assisted: yes. The original feature patch and the two-line CI correction both completed mandatory autoreview with no accepted or actionable findings.
User Impact
The backend can now safely represent MCP Apps as durable board-widget content and remint their views after the original lease expires or the Gateway restarts. This PR intentionally adds no UI or channel behavior.
Scope: 25 files, +1116/-94 lines. No SQLite schema version or table-shape change.
Evidence
upstream/mainat3c0f55b58f3ce789295e42259f071e96a21f33b0.7ed78c78627cd8940ec9c4e72b7225061fe06684.git merge-base --is-ancestor upstream/main HEADexited 0 immediately before push.git range-diff bcbbf28093b4777e1079a6c9503e9db42f8b6507..7026ee47c20d2663bd13b181b70b292e75ff0da6 3c0f55b58f3ce789295e42259f071e96a21f33b0..4513825130a36eff2e21774dae346e97d2a02938reports7026ee47c20 = 4513825130a; the original feature patch is byte-equivalent after rebase.7ed78c78627, which removes the unused exportedBoardWidgetDocumenttype and registersboard.widget.appViewin the release-train expectation.node scripts/run-vitest.mjs packages/gateway-protocol/src/schema/board.test.ts packages/gateway-protocol/src/schema/error-codes.test.ts src/boards/board-store.test.ts src/boards/board-store.parity.test.ts src/gateway/board-http.test.ts src/gateway/mcp-app-reconstruction.test.ts src/gateway/server-methods/board.test.ts src/gateway/server-methods/mcp-app.test.ts src/agents/mcp-ui-resource.test.ts src/gateway/methods/core-descriptors.since.test.ts— 4 shards, 10 files, 111 tests passed on the corrected rebased head.blacksmith-testbox, idtbx_01kxy41avfw09k4thv4tnnzsrb, run 29704184686. The authored-filecheck:changedgate andpnpm buildpassed.blacksmith-testbox, idtbx_01kxydc4nnjt36gm586v63332x, run 29708908882 remained queued while official GitHub Status reported API partial outage and Actions degraded performance. The lease was stopped; normal and force-cancel requests both returned HTTP 503, so the Actions run remained queued at last read. This run is not claimed as green.upstream/mainboth exited clean with no findings.git diff --checkpassed.Merge requirement: do not merge until required CI is green for exact head
7ed78c78627cd8940ec9c4e72b7225061fe06684, including the previously failing dependency and compact-large shards.