@ggui-ai/mcp-server 0.2.0-alpha.4 → 0.4.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin-blueprints-transport.d.ts.map +1 -1
- package/dist/admin-blueprints-transport.js +2 -1
- package/dist/admin-oauth-providers-transport.d.ts.map +1 -1
- package/dist/admin-oauth-providers-transport.js +7 -5
- package/dist/api-renders-routes.d.ts +85 -0
- package/dist/api-renders-routes.d.ts.map +1 -0
- package/dist/api-renders-routes.js +372 -0
- package/dist/build-mcp.d.ts +2 -2
- package/dist/build-mcp.d.ts.map +1 -1
- package/dist/build-mcp.js +64 -5
- package/dist/code-routes.d.ts +47 -0
- package/dist/code-routes.d.ts.map +1 -0
- package/dist/code-routes.js +81 -0
- package/dist/code-store-fs.js +2 -2
- package/dist/console-auth.d.ts +10 -10
- package/dist/console-auth.d.ts.map +1 -1
- package/dist/console-auth.js +5 -5
- package/dist/console-blueprint-routes.d.ts +71 -0
- package/dist/console-blueprint-routes.d.ts.map +1 -0
- package/dist/console-blueprint-routes.js +348 -0
- package/dist/console-chat-routes.d.ts +80 -0
- package/dist/console-chat-routes.d.ts.map +1 -0
- package/dist/console-chat-routes.js +204 -0
- package/dist/console-config-routes.d.ts +37 -0
- package/dist/console-config-routes.d.ts.map +1 -0
- package/dist/console-config-routes.js +91 -0
- package/dist/console-headers.d.ts +1 -1
- package/dist/console-info-routes.d.ts +84 -0
- package/dist/console-info-routes.d.ts.map +1 -0
- package/dist/console-info-routes.js +135 -0
- package/dist/console-keys-routes.d.ts +50 -0
- package/dist/console-keys-routes.d.ts.map +1 -0
- package/dist/console-keys-routes.js +222 -0
- package/dist/console-llm-keys-routes.d.ts +47 -0
- package/dist/console-llm-keys-routes.d.ts.map +1 -0
- package/dist/console-llm-keys-routes.js +443 -0
- package/dist/console-mcp-tools-routes.d.ts +41 -0
- package/dist/console-mcp-tools-routes.d.ts.map +1 -0
- package/dist/console-mcp-tools-routes.js +60 -0
- package/dist/console-registry-routes.d.ts +66 -0
- package/dist/console-registry-routes.d.ts.map +1 -0
- package/dist/console-registry-routes.js +276 -0
- package/dist/console-session-routes.d.ts +89 -0
- package/dist/console-session-routes.d.ts.map +1 -0
- package/dist/console-session-routes.js +385 -0
- package/dist/console-sessions-routes.d.ts +52 -0
- package/dist/console-sessions-routes.d.ts.map +1 -0
- package/dist/console-sessions-routes.js +106 -0
- package/dist/console-static-routes.d.ts +54 -0
- package/dist/console-static-routes.d.ts.map +1 -0
- package/dist/console-static-routes.js +190 -0
- package/dist/console-theme-routes.d.ts +3 -3
- package/dist/console-theme-routes.js +1 -1
- package/dist/console-timeline.d.ts +5 -5
- package/dist/console-timeline.d.ts.map +1 -1
- package/dist/console-timeline.js +27 -26
- package/dist/console-welcome.js +2 -2
- package/dist/email-login.d.ts.map +1 -1
- package/dist/email-login.js +2 -3
- package/dist/ggui-session-channel/action-ingress.d.ts +54 -0
- package/dist/ggui-session-channel/action-ingress.d.ts.map +1 -0
- package/dist/ggui-session-channel/action-ingress.js +228 -0
- package/dist/ggui-session-channel/channel-subscriptions.d.ts +97 -0
- package/dist/ggui-session-channel/channel-subscriptions.d.ts.map +1 -0
- package/dist/ggui-session-channel/channel-subscriptions.js +224 -0
- package/dist/ggui-session-channel/internal-types.d.ts +102 -0
- package/dist/ggui-session-channel/internal-types.d.ts.map +1 -0
- package/dist/ggui-session-channel/internal-types.js +6 -0
- package/dist/ggui-session-channel/outbound.d.ts +81 -0
- package/dist/ggui-session-channel/outbound.d.ts.map +1 -0
- package/dist/ggui-session-channel/outbound.js +174 -0
- package/dist/ggui-session-channel/socket-router.d.ts +38 -0
- package/dist/ggui-session-channel/socket-router.d.ts.map +1 -0
- package/dist/ggui-session-channel/socket-router.js +213 -0
- package/dist/ggui-session-channel/subscribe.d.ts +165 -0
- package/dist/ggui-session-channel/subscribe.d.ts.map +1 -0
- package/dist/ggui-session-channel/subscribe.js +370 -0
- package/dist/ggui-session-channel/subscriber-lifecycle.d.ts +40 -0
- package/dist/ggui-session-channel/subscriber-lifecycle.d.ts.map +1 -0
- package/dist/ggui-session-channel/subscriber-lifecycle.js +123 -0
- package/dist/ggui-session-channel.d.ts +425 -0
- package/dist/ggui-session-channel.d.ts.map +1 -0
- package/dist/ggui-session-channel.js +262 -0
- package/dist/health-routes.d.ts +76 -0
- package/dist/health-routes.d.ts.map +1 -0
- package/dist/health-routes.js +145 -0
- package/dist/index.d.ts +10 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -9
- package/dist/instructions-presets.d.ts +3 -3
- package/dist/instructions-presets.js +24 -24
- package/dist/llm-backed-negotiator.d.ts +68 -67
- package/dist/llm-backed-negotiator.d.ts.map +1 -1
- package/dist/llm-backed-negotiator.js +82 -221
- package/dist/mcp-apps-outbound.d.ts +47 -48
- package/dist/mcp-apps-outbound.d.ts.map +1 -1
- package/dist/mcp-apps-outbound.js +154 -177
- package/dist/mcp-endpoint-routes.d.ts +88 -0
- package/dist/mcp-endpoint-routes.d.ts.map +1 -0
- package/dist/mcp-endpoint-routes.js +359 -0
- package/dist/mcp-mounts.d.ts +2 -76
- package/dist/mcp-mounts.d.ts.map +1 -1
- package/dist/mcp-mounts.js +0 -76
- package/dist/oauth-as-routes.d.ts +60 -0
- package/dist/oauth-as-routes.d.ts.map +1 -0
- package/dist/oauth-as-routes.js +82 -0
- package/dist/oauth-clients-routes.d.ts +39 -0
- package/dist/oauth-clients-routes.d.ts.map +1 -0
- package/dist/oauth-clients-routes.js +87 -0
- package/dist/oauth-login-types.d.ts +1 -20
- package/dist/oauth-login-types.d.ts.map +1 -1
- package/dist/oauth-login-types.js +30 -7
- package/dist/oauth-login.d.ts.map +1 -1
- package/dist/oauth-login.js +3 -2
- package/dist/oauth-providers-store.d.ts.map +1 -1
- package/dist/oauth-providers-store.js +5 -5
- package/dist/oauth.d.ts +9 -8
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +41 -19
- package/dist/pairing-transport.d.ts.map +1 -1
- package/dist/pairing-transport.js +2 -1
- package/dist/request-context.d.ts +2 -2
- package/dist/request-context.js +2 -2
- package/dist/reserved-validators.d.ts.map +1 -1
- package/dist/reserved-validators.js +9 -1
- package/dist/route-param.d.ts +9 -0
- package/dist/route-param.d.ts.map +1 -0
- package/dist/route-param.js +10 -0
- package/dist/runtime-bundle-route.d.ts +43 -0
- package/dist/runtime-bundle-route.d.ts.map +1 -0
- package/dist/runtime-bundle-route.js +80 -0
- package/dist/schema-compat.d.ts +64 -62
- package/dist/schema-compat.d.ts.map +1 -1
- package/dist/schema-compat.js +23 -51
- package/dist/server.d.ts +179 -193
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +644 -3759
- package/dist/storage.d.ts +5 -5
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +5 -5
- package/dist/thread-transport.d.ts.map +1 -1
- package/dist/thread-transport.js +4 -3
- package/dist/user-session-auth.d.ts +7 -21
- package/dist/user-session-auth.d.ts.map +1 -1
- package/dist/user-session-auth.js +7 -28
- package/package.json +16 -15
- package/dist/mcp-apps-inbound.d.ts +0 -86
- package/dist/mcp-apps-inbound.d.ts.map +0 -1
- package/dist/mcp-apps-inbound.js +0 -283
- package/dist/render-channel.d.ts +0 -694
- package/dist/render-channel.d.ts.map +0 -1
- package/dist/render-channel.js +0 -1775
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
* build target — per the design lock, the shell is served by the
|
|
32
32
|
* same `@ggui-ai/mcp-server` instance that mints the bootstrap.
|
|
33
33
|
*/
|
|
34
|
-
import type {
|
|
34
|
+
import type { BlueprintIndex, GguiSessionStore, VectorStore } from "@ggui-ai/mcp-server-core";
|
|
35
35
|
import { type McpAppAiGguiRenderMeta } from "@ggui-ai/protocol/integrations/mcp-apps";
|
|
36
36
|
import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
37
|
-
export declare const GGUI_RENDER_SHELL_HTML = "<!doctype html>\n<html lang=\"en\" style=\"height:100%;background-color:var(--ggui-color-surface, #1e293b)\"><head><meta charset=\"utf-8\"><title>ggui render</title></head>\n<body style=\"margin:0;height:100%;min-height:480px;background-color:var(--ggui-color-surface, #1e293b)\"><div id=\"ggui-root\" data-ggui-shell=\"thin\" style=\"height:100%;min-height:480px\"></div>\n<script>\n(function(){'use strict';\n// MCP Apps shell. Speaks the canonical postMessage protocol from\n// @modelcontextprotocol/ext-apps:\n// 1. iframe -> host: ui/initialize\n// 2. iframe -> host: ui/notifications/initialized\n// 3. host -> iframe: ui/notifications/tool-result (per CallToolResult)\n// On tool-result, read the slice envelope from _meta (spec-canonical\n// CallToolResult _meta at the top level, or the first-party\n// params.toolOutput._meta shape), set window.__GGUI_META__ to the\n// envelope, fetch runtime as blob, inject as script.\n// Runtime auto-mounts inline. No nested iframe (claudemcpcontent.com\n// CSP frame-src forbids cross-origin frames). State machine matches\n// buildSelfContainedShell so the same runtime mounts both paths.\n//\n// R5 (2026-05-26): the historic /r/<shortCode> HTTP fallback was\n// removed along with the bearer-by-obscurity model -- hosts that strip\n// _meta no longer have a recovery path here. Spec-canonical hosts\n// deliver _meta inline and are unaffected.\n//\n// Phase B (2026-05-27): the historic two-slice envelope\n// (`ai.ggui/session` + `ai.ggui/stack-item`) collapsed to ONE flat\n// `ai.ggui/render` slice. runtimeUrl now lives directly on the\n// render slice; renderId is the canonical identity.\nvar rpcId=1,pending={};\nvar rootEl=document.getElementById('ggui-root');\nrootEl.style.cssText='display:flex;flex-direction:column;height:100%;min-height:300px;margin:0';\nvar mounted=false;\nfunction setOverlay(text){\n if(mounted)return;\n rootEl.innerHTML='<div style=\"font:14px system-ui,sans-serif;padding:24px;color:#666\">'+text+'</div>';\n}\nfunction postNotification(method,params){\n try{window.parent.postMessage({jsonrpc:'2.0',method:method,params:params||{}},'*');}catch(e){}\n}\nfunction postRpc(method,params){\n return new Promise(function(res,rej){\n var id=rpcId++;pending[id]={res:res,rej:rej};\n try{window.parent.postMessage({jsonrpc:'2.0',id:id,method:method,params:params||{}},'*');}\n catch(e){delete pending[id];rej(e);}\n });\n}\nfunction postBootstrapFailed(reason,message){\n // Surface every shell-layer bootstrap-failure path as a typed\n // RendererBootFailedMessage envelope so hosts pinning the C9\n // error pane (McpAppIframe onError, IframeErrorPane) see the\n // failure instead of staring at the inert overlay until the test\n // times out. Reason codes match BootstrapFailureReason.\n try{window.parent.postMessage({type:'ggui:bootstrap-failed',reason:reason,message:message},'*');}catch(e){}\n}\nasync function mountFromMeta(envelope){\n if(mounted)return;\n // Slice envelope shape (Phase B): { \"ai.ggui/render\": { renderId,\n // appId, runtimeUrl, ... } }. runtimeUrl on the render slice is\n // the only load-bearing field at the shell layer \u2014 it tells us\n // which iframe-runtime bundle to fetch. Everything else is\n // optional; the runtime decides at boot time based on the meta\n // it reads from window.__GGUI_META__.\n var renderSlice=envelope&&envelope['ai.ggui/render'];\n var runtimeUrl=renderSlice&&renderSlice.runtimeUrl;\n if(!envelope||typeof runtimeUrl!=='string'){\n setOverlay('Bootstrap payload malformed.');\n postBootstrapFailed('BOOTSTRAP_MALFORMED','Bootstrap payload malformed.');\n return;\n }\n setOverlay('Loading UI\u2026');\n window.__GGUI_META__=envelope;\n // Load the runtime bundle via a direct cross-origin script tag\n // (governed by CSP script-src) instead of fetch + Blob (governed by\n // CSP connect-src). claude.ai's claudemcpcontent.com iframe CSP\n // forbids cross-origin connect-src so fetch throws TypeError\n // 'Failed to fetch', but allows cross-origin script-src when the\n // bundle responds with the right CORS headers (the iframe-runtime\n // mount sets them). The self-contained shell already uses this\n // pattern; legacy postMessage shell now matches it.\n try{\n var s=document.createElement('script');\n s.type='module';\n // crossorigin=anonymous opts into CORS-mode error reporting.\n // Without it, cross-origin script tags get a sanitized\n // \"script error\" with no details, masking the real cause\n // (CSP block, CORS reject, module-evaluation throw). With it,\n // the error event surfaces the actual message in the iframe\n // console -- the bundle ships ACAO=* so credentialed mode is\n // unnecessary.\n s.crossOrigin='anonymous';\n s.src=runtimeUrl;\n s.onload=function(){mounted=true;};\n s.onerror=function(e){\n var msg='Runtime bundle failed to load: '+(e&&e.message||'script error');\n setOverlay(msg);\n postBootstrapFailed('BUNDLE_FETCH_FAILED',msg);\n };\n rootEl.innerHTML='';\n document.body.appendChild(s);\n }catch(e){\n var msg='Runtime bundle failed to load: '+(e&&e.message||e);\n setOverlay(msg);\n postBootstrapFailed('BUNDLE_FETCH_FAILED',msg);\n }\n}\nfunction readMetaFromInitResult(result){\n if(!result||typeof result!=='object')return null;\n var toolOutput=result.toolOutput;\n if(!toolOutput||typeof toolOutput!=='object')return null;\n var meta=toolOutput._meta;\n if(!meta||typeof meta!=='object')return null;\n // Single slice-envelope key (Phase B: ai.ggui/render). Only the\n // render slice's runtimeUrl is load-bearing at the shell layer;\n // the runtime reads everything else off window.__GGUI_META__\n // after we set it.\n var renderSlice=meta['ai.ggui/render'];\n if(!renderSlice||typeof renderSlice!=='object')return null;\n if(typeof renderSlice.runtimeUrl!=='string')return null;\n return meta;\n}\nfunction hasAiGguiMetaPlaceholder(result){\n // Detect the protocol-violation case where the host signaled\n // \"I tried to deliver meta\" (toolOutput._meta carries an\n // ai.ggui/render key) but it's malformed. Fail-fast with\n // BOOTSTRAP_META_MISSING rather than waiting forever.\n if(!result||typeof result!=='object')return false;\n var toolOutput=result.toolOutput;\n if(!toolOutput||typeof toolOutput!=='object')return false;\n var meta=toolOutput._meta;\n if(!meta||typeof meta!=='object')return false;\n return 'ai.ggui/render' in meta;\n}\nfunction readMetaFromCallToolResult(params){\n // MCP Apps spec (specification/2026-01-26/apps.mdx:1145-1155):\n // ui/notifications/tool-result\n // params: CallToolResult // Standard MCP type\n // So params IS the CallToolResult and _meta lives at the top\n // level (NOT under params.toolOutput, which is where the\n // first-party McpAppIframe convention wraps it). Spec-compliant\n // hosts (Claude Desktop, claude.ai Connector, Claude Code) deliver\n // slice-envelope material here.\n if(!params||typeof params!=='object')return null;\n var meta=params._meta;\n if(!meta||typeof meta!=='object')return null;\n var renderSlice=meta['ai.ggui/render'];\n if(!renderSlice||typeof renderSlice!=='object')return null;\n if(typeof renderSlice.runtimeUrl!=='string')return null;\n return meta;\n}\nwindow.addEventListener('message',function(ev){\n var m=ev&&ev.data;\n if(!m||m.jsonrpc!=='2.0')return;\n if(m.id!=null&&pending[m.id]){\n var p=pending[m.id];delete pending[m.id];\n if(m.error)p.rej(m.error);else p.res(m.result);\n return;\n }\n if(m.method==='ui/notifications/tool-result'){\n // Spec-compliant hosts: m.params IS the CallToolResult; _meta is\n // at the top level. Try this FIRST so Claude Desktop / claude.ai\n // Connector / Claude Code land here.\n var specB=readMetaFromCallToolResult(m.params);\n if(specB){mountFromMeta(specB);return;}\n // First-party McpAppIframe convention: slice envelope nested under\n // params.toolOutput._meta. First-party hosts (Studio, Portal,\n // console) use this shape for both init-response and post-init\n // notification.\n var bb=readMetaFromInitResult(m.params);\n if(bb){mountFromMeta(bb);return;}\n // R5 (2026-05-26) -- the /r/<shortCode> HTTP fallback was removed\n // along with the bearer-by-obscurity model. Hosts that strip\n // _meta on the tool-result wire have no fallback path here;\n // spec-canonical hosts deliver meta inline and land in the two\n // branches above.\n }\n});\nsetOverlay('Initializing\u2026');\nvar initTimer=setTimeout(function(){\n setOverlay('Host did not respond to ui/initialize within 3s.');\n},3000);\npostRpc('ui/initialize',{\n appCapabilities:{},\n appInfo:{name:'ggui-session',version:'1.0.0'},\n protocolVersion:'2026-01-26'\n}).then(function(result){\n clearTimeout(initTimer);\n postNotification('ui/notifications/initialized',{});\n // Path B: slice envelope inline in ui/initialize result. Hosts\n // using <McpAppIframe>'s first-party dispatch deliver meta here\n // and never send a separate ui/notifications/tool-result.\n var b=readMetaFromInitResult(result);\n if(b){mountFromMeta(b);return;}\n // Protocol-violation surface: host signalled an attempt\n // (toolOutput._meta carries ai.ggui/render) but it's malformed.\n // Fail fast so hosts pinning a typed error envelope don't sit on\n // the Path-A waiting overlay forever.\n if(hasAiGguiMetaPlaceholder(result)){\n var msg='ui/initialize result missing valid ai.ggui/render.runtimeUrl';\n setOverlay(msg);\n postBootstrapFailed('BOOTSTRAP_META_MISSING',msg);\n return;\n }\n // Path A: wait for the host to send ui/notifications/tool-result\n // with structuredContent.{url, shortCode}. MCP Apps hosts that don't\n // implement the reading-B inline-meta convention land here.\n setOverlay('Waiting for tool result\u2026');\n}).catch(function(e){\n clearTimeout(initTimer);\n setOverlay('ui/initialize failed: '+(e&&e.message||JSON.stringify(e)));\n});\n})();\n</script></body></html>";
|
|
37
|
+
export declare const GGUI_RENDER_SHELL_HTML = "<!doctype html>\n<html lang=\"en\" style=\"height:100%;background-color:var(--ggui-color-surface, #1e293b)\"><head><meta charset=\"utf-8\"><title>ggui render</title></head>\n<body style=\"margin:0;height:100%;min-height:480px;background-color:var(--ggui-color-surface, #1e293b)\"><div id=\"ggui-root\" data-ggui-shell=\"thin\" style=\"height:100%;min-height:480px\"></div>\n<script>\n(function(){'use strict';\n// MCP Apps shell. Speaks the canonical postMessage protocol from\n// @modelcontextprotocol/ext-apps:\n// 1. iframe -> host: ui/initialize\n// 2. iframe -> host: ui/notifications/initialized\n// 3. host -> iframe: ui/notifications/tool-result (per CallToolResult)\n// On tool-result, read the slice envelope from _meta (spec-canonical\n// CallToolResult _meta at the top level), set window.__GGUI_META__ to\n// the envelope, fetch runtime as blob, inject as script.\n// Runtime auto-mounts inline. No nested iframe (claudemcpcontent.com\n// CSP frame-src forbids cross-origin frames). State machine matches\n// buildSelfContainedShell so the same runtime mounts both paths.\n//\n// R5 (2026-05-26): the historic /r/<shortCode> HTTP fallback was\n// removed along with the bearer-by-obscurity model -- hosts that strip\n// _meta no longer have a recovery path here. Spec-canonical hosts\n// deliver _meta inline and are unaffected.\n//\n// Phase B (2026-05-27): the historic two-slice envelope\n// (`ai.ggui/session` + `ai.ggui/stack-item`) collapsed to ONE flat\n// `ai.ggui/render` slice. runtimeUrl now lives directly on the\n// render slice; sessionId is the canonical identity.\nvar rpcId=1,pending={};\nvar rootEl=document.getElementById('ggui-root');\nrootEl.style.cssText='display:flex;flex-direction:column;height:100%;min-height:300px;margin:0';\nvar mounted=false;\nfunction setOverlay(text){\n if(mounted)return;\n rootEl.innerHTML='<div style=\"font:14px system-ui,sans-serif;padding:24px;color:#666\">'+text+'</div>';\n}\nfunction postNotification(method,params){\n try{window.parent.postMessage({jsonrpc:'2.0',method:method,params:params||{}},'*');}catch(e){}\n}\nfunction postRpc(method,params){\n return new Promise(function(res,rej){\n var id=rpcId++;pending[id]={res:res,rej:rej};\n try{window.parent.postMessage({jsonrpc:'2.0',id:id,method:method,params:params||{}},'*');}\n catch(e){delete pending[id];rej(e);}\n });\n}\nfunction postBootstrapFailed(reason,message){\n // Surface every shell-layer bootstrap-failure path as a typed\n // RendererBootFailedMessage envelope so hosts pinning the C9\n // error pane (McpAppIframe onError, IframeErrorPane) see the\n // failure instead of staring at the inert overlay until the test\n // times out. Reason codes match BootstrapFailureReason.\n try{window.parent.postMessage({type:'ggui:bootstrap-failed',reason:reason,message:message},'*');}catch(e){}\n}\nasync function mountFromMeta(envelope){\n if(mounted)return;\n // Slice envelope shape (Phase B): { \"ai.ggui/render\": { sessionId,\n // appId, runtimeUrl, ... } }. runtimeUrl on the render slice is\n // the only load-bearing field at the shell layer \u2014 it tells us\n // which iframe-runtime bundle to fetch. Everything else is\n // optional; the runtime decides at boot time based on the meta\n // it reads from window.__GGUI_META__.\n var renderSlice=envelope&&envelope['ai.ggui/render'];\n var runtimeUrl=renderSlice&&renderSlice.runtimeUrl;\n if(!envelope||typeof runtimeUrl!=='string'){\n setOverlay('Bootstrap payload malformed.');\n postBootstrapFailed('MALFORMED_BOOTSTRAP','Bootstrap payload malformed.');\n return;\n }\n setOverlay('Loading UI\u2026');\n window.__GGUI_META__=envelope;\n // Load the runtime bundle via a direct cross-origin script tag\n // (governed by CSP script-src) instead of fetch + Blob (governed by\n // CSP connect-src). claude.ai's claudemcpcontent.com iframe CSP\n // forbids cross-origin connect-src so fetch throws TypeError\n // 'Failed to fetch', but allows cross-origin script-src when the\n // bundle responds with the right CORS headers (the iframe-runtime\n // mount sets them). The self-contained shell already uses this\n // pattern; legacy postMessage shell now matches it.\n try{\n var s=document.createElement('script');\n s.type='module';\n // crossorigin=anonymous opts into CORS-mode error reporting.\n // Without it, cross-origin script tags get a sanitized\n // \"script error\" with no details, masking the real cause\n // (CSP block, CORS reject, module-evaluation throw). With it,\n // the error event surfaces the actual message in the iframe\n // console -- the bundle ships ACAO=* so credentialed mode is\n // unnecessary.\n s.crossOrigin='anonymous';\n s.src=runtimeUrl;\n s.onload=function(){mounted=true;};\n s.onerror=function(e){\n var msg='Runtime bundle failed to load: '+(e&&e.message||'script error');\n setOverlay(msg);\n postBootstrapFailed('BUNDLE_FETCH_FAILED',msg);\n };\n rootEl.innerHTML='';\n document.body.appendChild(s);\n }catch(e){\n var msg='Runtime bundle failed to load: '+(e&&e.message||e);\n setOverlay(msg);\n postBootstrapFailed('BUNDLE_FETCH_FAILED',msg);\n }\n}\nfunction readMetaFromCallToolResult(params){\n // MCP Apps spec (specification/2026-01-26/apps.mdx:1145-1155):\n // ui/notifications/tool-result\n // params: CallToolResult // Standard MCP type\n // So params IS the CallToolResult and _meta lives at the top\n // level. Spec-compliant hosts (Claude Desktop, claude.ai\n // Connector, Claude Code) deliver slice-envelope material here.\n // Single slice-envelope key (Phase B: ai.ggui/render). Only the\n // render slice's runtimeUrl is load-bearing at the shell layer;\n // the runtime reads everything else off window.__GGUI_META__\n // after we set it.\n if(!params||typeof params!=='object')return null;\n var meta=params._meta;\n if(!meta||typeof meta!=='object')return null;\n var renderSlice=meta['ai.ggui/render'];\n if(!renderSlice||typeof renderSlice!=='object')return null;\n if(typeof renderSlice.runtimeUrl!=='string')return null;\n return meta;\n}\nwindow.addEventListener('message',function(ev){\n var m=ev&&ev.data;\n if(!m||m.jsonrpc!=='2.0')return;\n if(m.id!=null&&pending[m.id]){\n var p=pending[m.id];delete pending[m.id];\n if(m.error)p.rej(m.error);else p.res(m.result);\n return;\n }\n if(m.method==='ui/notifications/tool-result'){\n // Spec-compliant hosts: m.params IS the CallToolResult; _meta is\n // at the top level.\n var specMeta=readMetaFromCallToolResult(m.params);\n if(specMeta){mountFromMeta(specMeta);return;}\n // R5 (2026-05-26) -- the /r/<shortCode> HTTP fallback was removed\n // along with the bearer-by-obscurity model. Hosts that strip\n // _meta on the tool-result wire have no fallback path here;\n // spec-canonical hosts deliver meta inline and land in the branch\n // above.\n }\n});\nsetOverlay('Initializing\u2026');\nvar initTimer=setTimeout(function(){\n setOverlay('Host did not respond to ui/initialize within 3s.');\n},3000);\npostRpc('ui/initialize',{\n appCapabilities:{},\n appInfo:{name:'ggui-render',version:'1.0.0'},\n protocolVersion:'2026-01-26'\n}).then(function(){\n clearTimeout(initTimer);\n postNotification('ui/notifications/initialized',{});\n // Wait for the host to send ui/notifications/tool-result carrying\n // the slice envelope in _meta \u2014 the spec-canonical delivery channel.\n // The ui/initialize result itself carries no slice meta (the\n // McpUiInitializeResult schema defines no such field).\n setOverlay('Waiting for tool result\u2026');\n}).catch(function(e){\n clearTimeout(initTimer);\n setOverlay('ui/initialize failed: '+(e&&e.message||JSON.stringify(e)));\n});\n})();\n</script></body></html>";
|
|
38
38
|
/**
|
|
39
39
|
* CSP `script-src` source expression that authorises the inline
|
|
40
40
|
* `<script>` block of {@link GGUI_RENDER_SHELL_HTML} when it executes
|
|
@@ -63,7 +63,7 @@ export declare const GGUI_RENDER_SHELL_HTML = "<!doctype html>\n<html lang=\"en\
|
|
|
63
63
|
* # Where it gets used
|
|
64
64
|
*
|
|
65
65
|
* `console-headers.ts::DEVTOOL_CSP` appends this expression to its
|
|
66
|
-
* `script-src` directive. Hosted closed-runtime
|
|
66
|
+
* `script-src` directive. Hosted closed-runtime render-resource
|
|
67
67
|
* endpoints have their own CSP and serve the same shell — that path
|
|
68
68
|
* needs the same expression added; tracked separately.
|
|
69
69
|
*
|
|
@@ -94,8 +94,8 @@ export declare function advertiseMcpAppsUiCapability(server: McpServer): void;
|
|
|
94
94
|
* @public
|
|
95
95
|
*/
|
|
96
96
|
export interface SelfContainedShellInputs {
|
|
97
|
-
/**
|
|
98
|
-
readonly
|
|
97
|
+
/** GguiSession id whose visible-bits surface is being inlined. */
|
|
98
|
+
readonly sessionId: string;
|
|
99
99
|
/** App / tenant id the render is scoped to. */
|
|
100
100
|
readonly appId: string;
|
|
101
101
|
/**
|
|
@@ -110,7 +110,7 @@ export interface SelfContainedShellInputs {
|
|
|
110
110
|
* Hex-encoded sha256 of the bytes served at {@link codeUrl}. Paired
|
|
111
111
|
* with codeUrl (present together, absent together) — surfaces the
|
|
112
112
|
* integrity signal alongside the URL so consumers can dedup across
|
|
113
|
-
*
|
|
113
|
+
* renders without re-parsing.
|
|
114
114
|
*/
|
|
115
115
|
readonly codeHash?: string;
|
|
116
116
|
/**
|
|
@@ -140,30 +140,20 @@ export interface SelfContainedShellInputs {
|
|
|
140
140
|
* omit this field entirely.
|
|
141
141
|
*/
|
|
142
142
|
readonly themeMode?: "light" | "dark";
|
|
143
|
+
/**
|
|
144
|
+
* Resolved per-app theme overlay (mode + `--ggui-*` CSS-variable map),
|
|
145
|
+
* mirrored from {@link McpAppAiGguiRenderMeta.theme}. Symmetric forward
|
|
146
|
+
* for the self-contained shell so `/r/<shortCode>` + `resources/read`
|
|
147
|
+
* iframes apply the same operator overlay the MCP-Apps postMessage
|
|
148
|
+
* path carries. Absent ⇒ the renderer's default theme.
|
|
149
|
+
*/
|
|
150
|
+
readonly theme?: McpAppAiGguiRenderMeta["theme"];
|
|
143
151
|
/**
|
|
144
152
|
* Optional pre-serialized props (must be a JSON string) forwarded
|
|
145
153
|
* to the renderer. Server inlines the string verbatim — the
|
|
146
154
|
* renderer parses + narrows to `Record<string, unknown>` at boot.
|
|
147
155
|
*/
|
|
148
156
|
readonly propsJson?: string;
|
|
149
|
-
/**
|
|
150
|
-
* Names of same-server tools whose `_meta.ui.visibility` includes
|
|
151
|
-
* `"app"`, mirrored from {@link McpAppAiGguiRenderMeta.appCallableTools}.
|
|
152
|
-
* Forwarded to the iframe-runtime so its dispatch closure can choose
|
|
153
|
-
* Pattern α (direct `tools/call`) over Pattern β (3-message bridge)
|
|
154
|
-
* per wired action — even on the self-contained `/r/<shortCode>`
|
|
155
|
-
* path where there's no `ui/initialize` round-trip to deliver the
|
|
156
|
-
* field.
|
|
157
|
-
*
|
|
158
|
-
* Empty / absent → no fallout: the runtime's dispatch routes every
|
|
159
|
-
* action through Pattern β.
|
|
160
|
-
*/
|
|
161
|
-
readonly appCallableTools?: McpAppAiGguiRenderMeta["appCallableTools"];
|
|
162
|
-
/**
|
|
163
|
-
* Per-action wired-tool mapping for the active render, mirrored
|
|
164
|
-
* from {@link McpAppAiGguiRenderMeta.actionNextSteps}.
|
|
165
|
-
*/
|
|
166
|
-
readonly actionNextSteps?: McpAppAiGguiRenderMeta["actionNextSteps"];
|
|
167
157
|
/**
|
|
168
158
|
* Per-slot data for the active render's `contextSpec`, mirrored
|
|
169
159
|
* from {@link McpAppAiGguiRenderMeta.contextSlots}. The runtime
|
|
@@ -222,10 +212,10 @@ export interface SelfContainedShellInputs {
|
|
|
222
212
|
readonly publicEnv?: McpAppAiGguiRenderMeta["publicEnv"];
|
|
223
213
|
/**
|
|
224
214
|
* Live-mode WebSocket URL the iframe-runtime opens to receive
|
|
225
|
-
* `props_update` / `
|
|
215
|
+
* `props_update` / `render` frames. When set alongside `token` +
|
|
226
216
|
* `expiresAt`, the parser admits the bootstrap as live-mode; when
|
|
227
|
-
* absent, the shell renders the static
|
|
228
|
-
*
|
|
217
|
+
* absent, the shell renders the static render but receives no
|
|
218
|
+
* live updates after mount (the bug `/r/<shortCode>` exhibited before
|
|
229
219
|
* we threaded the bootstrap minter through this route).
|
|
230
220
|
*/
|
|
231
221
|
readonly wsUrl?: string;
|
|
@@ -246,7 +236,7 @@ export interface SelfContainedShellInputs {
|
|
|
246
236
|
*/
|
|
247
237
|
readonly expiresAt?: string;
|
|
248
238
|
/**
|
|
249
|
-
* Monotonic
|
|
239
|
+
* Monotonic GguiSessionEvent ledger cursor at emit time, mirrored from
|
|
250
240
|
* {@link McpAppAiGguiRenderMeta.lastSequence}. Polling clients
|
|
251
241
|
* initialize the R7 `/events?sinceSequence=N` cursor from this.
|
|
252
242
|
* Absent in pre-R7 envelopes (back-compat); post-R7 it MUST be
|
|
@@ -254,23 +244,23 @@ export interface SelfContainedShellInputs {
|
|
|
254
244
|
*/
|
|
255
245
|
readonly lastSequence?: McpAppAiGguiRenderMeta["lastSequence"];
|
|
256
246
|
/**
|
|
257
|
-
* Wire-stamped polling fallback URL — `${base}/api/
|
|
247
|
+
* Wire-stamped polling fallback URL — `${base}/api/sessions/<id>/events?wsToken=<...>`.
|
|
258
248
|
* When the iframe-runtime's WS transport reaches `'failed'` (CSP
|
|
259
249
|
* blocks `ws://`, corporate firewall, etc.), `@ggui-ai/live-channel`
|
|
260
250
|
* fails over to cursor-based event polling against this URL using
|
|
261
251
|
* `{@link lastSequence}` as the initial cursor.
|
|
262
252
|
*
|
|
263
253
|
* Absent ⇒ runtime stays in WS-only mode. Operators that want the
|
|
264
|
-
* fallback path lit up MUST thread this through (the
|
|
254
|
+
* fallback path lit up MUST thread this through (the first-party
|
|
265
255
|
* shell builders do; callers composing their own shells SHOULD).
|
|
266
256
|
*/
|
|
267
257
|
readonly pollingUrl?: McpAppAiGguiRenderMeta["pollingUrl"];
|
|
268
258
|
}
|
|
269
259
|
/**
|
|
270
|
-
* Build the self-contained shell HTML for a given
|
|
260
|
+
* Build the self-contained shell HTML for a given render.
|
|
271
261
|
*
|
|
272
262
|
* The returned HTML is a complete, standalone document: it inlines the
|
|
273
|
-
* compiled component (base64) +
|
|
263
|
+
* compiled component (base64) + the render id in a `window.__GGUI_META__`
|
|
274
264
|
* global, then loads the iframe-runtime bundle via `<script type="module"
|
|
275
265
|
* src={runtimeUrl}>`. The runtime takes over synchronously on import,
|
|
276
266
|
* mounts the component, and the iframe paints WITHOUT any further server
|
|
@@ -304,16 +294,16 @@ export declare function buildSelfContainedShell(opts: SelfContainedShellInputs):
|
|
|
304
294
|
*
|
|
305
295
|
* @public
|
|
306
296
|
*/
|
|
307
|
-
export declare function buildSelfContainedLoadingShell(
|
|
297
|
+
export declare function buildSelfContainedLoadingShell(sessionId: string): string;
|
|
308
298
|
/**
|
|
309
299
|
* Options for {@link registerGguiRenderResourceTemplate}.
|
|
310
300
|
*
|
|
311
301
|
* @public
|
|
312
302
|
*/
|
|
313
303
|
export interface GguiRenderResourceTemplateOptions {
|
|
314
|
-
/**
|
|
304
|
+
/** GguiSessionStore the template handler reads to find the render's
|
|
315
305
|
* componentCode. */
|
|
316
|
-
readonly renderStore:
|
|
306
|
+
readonly renderStore: GguiSessionStore;
|
|
317
307
|
/** Absolute URL of the iframe-runtime bundle inlined in the shell. */
|
|
318
308
|
readonly runtimeUrl: string;
|
|
319
309
|
/**
|
|
@@ -344,7 +334,7 @@ export interface GguiRenderResourceTemplateOptions {
|
|
|
344
334
|
* Per-app metadata store the resource handler reads to resolve
|
|
345
335
|
* `App.publicEnv` for the bootstrap projection.
|
|
346
336
|
* Symmetric with `/r/<shortCode>`'s lookup; wraps the same store
|
|
347
|
-
* the
|
|
337
|
+
* the render gate reads. Absent ⇒ publicEnv stays empty on the
|
|
348
338
|
* resource-served bootstrap (wrappers calling `getPublicEnv` throw
|
|
349
339
|
* at hook-mount with a clear "not provided" message).
|
|
350
340
|
*/
|
|
@@ -353,7 +343,7 @@ export interface GguiRenderResourceTemplateOptions {
|
|
|
353
343
|
* Vector store backing the blueprint registry. When wired alongside
|
|
354
344
|
* `defaultAppIdFallback`, the resource handler runs a registry-only
|
|
355
345
|
* rehydrate fallback for the two-segment URI shape
|
|
356
|
-
* (`ui://ggui/render/{
|
|
346
|
+
* (`ui://ggui/render/{sessionId}/{blueprintKey}`): if the render is
|
|
357
347
|
* gone but the blueprint registry still holds the entry, return the
|
|
358
348
|
* static initial render (default props + default context) instead of
|
|
359
349
|
* the dead "Generating UI…" loading shell. Single-tenant OSS sees
|
|
@@ -362,12 +352,21 @@ export interface GguiRenderResourceTemplateOptions {
|
|
|
362
352
|
*/
|
|
363
353
|
readonly vectorStore?: VectorStore;
|
|
364
354
|
/**
|
|
365
|
-
*
|
|
366
|
-
*
|
|
355
|
+
* Blueprint identity index backing the registry. Required alongside
|
|
356
|
+
* `vectorStore` for the registry-only rehydrate fallback: the resume
|
|
357
|
+
* URI carries only a contract hash, so the handler resolves the
|
|
358
|
+
* default-variant exact key `(template, contractKey, defaultVariantKey)`
|
|
359
|
+
* to the row's UUID via this index. Threaded from the same shared
|
|
360
|
+
* index instance the matcher reads.
|
|
361
|
+
*/
|
|
362
|
+
readonly index?: BlueprintIndex;
|
|
363
|
+
/**
|
|
364
|
+
* App-id used for blueprint-registry scoping when the render has
|
|
365
|
+
* been evicted. The registry is per-`appId`, but a missing render
|
|
367
366
|
* has no way to derive its tenant — multi-tenant deployments leave
|
|
368
367
|
* this undefined to fail-safe back to the loading shell. Single-
|
|
369
368
|
* tenant OSS sets `'builder'` (the universal-MCP default identity)
|
|
370
|
-
* and rehydrate works across
|
|
369
|
+
* and rehydrate works across render expiry / process restart.
|
|
371
370
|
*/
|
|
372
371
|
readonly defaultAppIdFallback?: string;
|
|
373
372
|
/**
|
|
@@ -399,29 +398,29 @@ export interface GguiRenderResourceTemplateOptions {
|
|
|
399
398
|
* machinery in `server.ts`; the resource template owns its own
|
|
400
399
|
* call here because it runs OUTSIDE the per-tool-call context.
|
|
401
400
|
*/
|
|
402
|
-
readonly mintWsToken?: (
|
|
401
|
+
readonly mintWsToken?: (sessionId: string, appId: string) => {
|
|
403
402
|
readonly wsUrl: string;
|
|
404
403
|
readonly token: string;
|
|
405
404
|
readonly expiresAt: string;
|
|
406
405
|
};
|
|
407
406
|
}
|
|
408
407
|
/**
|
|
409
|
-
* Register a `ui://ggui/render/{
|
|
408
|
+
* Register a `ui://ggui/render/{sessionId}` resource template. Each
|
|
410
409
|
* `resources/read` request is resolved by looking up the render in the
|
|
411
410
|
* store and returning the self-contained shell with that
|
|
412
411
|
* componentCode inlined.
|
|
413
412
|
*
|
|
414
413
|
* Per-call `_meta.ui.resourceUri` (stamped by `ggui_render.resultMeta`)
|
|
415
|
-
* pins the URI to a specific
|
|
414
|
+
* pins the URI to a specific sessionId; hosts fetch THAT URI rather
|
|
416
415
|
* than the static `ui://ggui/render` one. Both registrations co-exist:
|
|
417
416
|
* legacy postMessage shell at the static URI, self-contained shell at
|
|
418
417
|
* the templated URI.
|
|
419
418
|
*
|
|
420
419
|
* Failure modes:
|
|
421
|
-
* -
|
|
420
|
+
* - GguiSession not found → loading shell (host re-fetches; absent
|
|
422
421
|
* render is a transient state immediately after `ggui_render`).
|
|
423
|
-
* -
|
|
424
|
-
* -
|
|
422
|
+
* - GguiSession found, no componentCode yet → loading shell.
|
|
423
|
+
* - GguiSession found, componentCode present → self-contained shell.
|
|
425
424
|
*
|
|
426
425
|
* Returns nothing; mutates the server in place.
|
|
427
426
|
*
|
|
@@ -435,7 +434,7 @@ export declare function registerGguiRenderResourceTemplate(server: McpServer, op
|
|
|
435
434
|
* one line.
|
|
436
435
|
*
|
|
437
436
|
* When `selfContained` is supplied, ALSO registers the per-render
|
|
438
|
-
* `ui://ggui/render/{
|
|
437
|
+
* `ui://ggui/render/{sessionId}` resource template that serves the
|
|
439
438
|
* self-contained shell (the path third-party MCP Apps hosts use). The
|
|
440
439
|
* legacy static URI registration is unconditional — first-party hosts
|
|
441
440
|
* (Studio, Portal, console) still rely on the postMessage path.
|
|
@@ -444,7 +443,7 @@ export declare function installMcpAppsOutbound(server: McpServer, opts?: {
|
|
|
444
443
|
readonly shellHtml?: string;
|
|
445
444
|
/**
|
|
446
445
|
* Per-render self-contained shell registration. When supplied,
|
|
447
|
-
* `ui://ggui/render/{
|
|
446
|
+
* `ui://ggui/render/{sessionId}` becomes a readable resource
|
|
448
447
|
* template whose body inlines the compiled componentCode from the
|
|
449
448
|
* render. Absent → only the legacy postMessage shell is registered.
|
|
450
449
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-apps-outbound.d.ts","sourceRoot":"","sources":["../src/mcp-apps-outbound.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mcp-apps-outbound.d.ts","sourceRoot":"","sources":["../src/mcp-apps-outbound.ts"],"names":[],"mappings":"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"}
|