api: optional Client in AppBridge (allow custom forwarding), better protocol types (AppRequest, AppNotification, AppResult) (#146)
* Add setter-based handlers for MCP request/notification forwarding - Add oncalltool, onlistresources, onlistresourcetemplates, onreadresource, onlistprompts setters for Guest UI → Host requests - Add sendToolListChanged, sendResourceListChanged, sendPromptListChanged methods for Host → Guest UI notifications - Refactor connect() to use new setters with inlined callbacks - Update documentation to clarify optional client parameter behavior - Remove unused forwardRequest/forwardNotification helper methods - Add comprehensive tests for AppBridge without MCP client (manual handlers) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Potential fix for pull request finding 'Unused variable, import, function or class' Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> * fix: move prettier to dependencies for git-based installs * fix: add explicit prettierrc to prevent inheriting parent configs during git-based installs * Apply suggestions from code review Co-authored-by: Jonathan Hefner <jonathan@hefner.pro> * refactor(tests): factor out test values and add missing assertions Address PR review feedback: - Factor out test value objects (toolCall, resultContent, etc.) for clearer tests - Add missing assertions on receivedRequests[0] for list handlers - Improve test readability by defining expected values at the top of each test 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: improve TypeDoc formatting and use `as const` for notification methods - Use proper TypeDoc syntax with `@param callback.params` and `@param callback.extra` - Add {@link ResultType} references for return types - Replace `as Notification` with `as const` on method literals where possible (sendResourceListChanged, sendPromptListChanged) - Simplify sendHostContextChange cast syntax 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor(types): use explicit type unions for AppBridge protocol types - Add AppBridgeRequest, AppBridgeNotification, AppBridgeResult type unions that explicitly list all valid types for the protocol - Replace generic SDK Request/Notification/Result with our specific types - Remove all type casts by using `as const` on method literals - Add index signature to McpUiHostContext for forward compatibility This improves type safety and documents exactly what the AppBridge supports. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: move AppRequest/AppNotification/AppResult to types.ts Move protocol type unions from app-bridge.ts to types.ts where they belong with other type definitions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * chore: regenerate schemas with clean npm install 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> Co-authored-by: Jonathan Hefner <jonathan@hefner.pro>
This commit is contained in:
parent
c9e37204de
commit
54344552b7
1 changed files with 749 additions and 103 deletions
110
src/types.ts
110
src/types.ts
|
|
@ -38,6 +38,27 @@ export {
|
|||
type McpUiResourceMeta,
|
||||
} from "./spec.types.js";
|
||||
|
||||
// Import types needed for protocol type unions (not re-exported, just used internally)
|
||||
import type {
|
||||
McpUiInitializeRequest,
|
||||
McpUiOpenLinkRequest,
|
||||
McpUiMessageRequest,
|
||||
McpUiResourceTeardownRequest,
|
||||
McpUiHostContextChangedNotification,
|
||||
McpUiToolInputNotification,
|
||||
McpUiToolInputPartialNotification,
|
||||
McpUiToolResultNotification,
|
||||
McpUiToolCancelledNotification,
|
||||
McpUiSandboxResourceReadyNotification,
|
||||
McpUiInitializedNotification,
|
||||
McpUiSizeChangedNotification,
|
||||
McpUiSandboxProxyReadyNotification,
|
||||
McpUiInitializeResult,
|
||||
McpUiOpenLinkResult,
|
||||
McpUiMessageResult,
|
||||
McpUiResourceTeardownResult,
|
||||
} from "./spec.types.js";
|
||||
|
||||
// Re-export all schemas from generated/schema.ts (already PascalCase)
|
||||
export {
|
||||
McpUiThemeSchema,
|
||||
|
|
@ -65,3 +86,92 @@ export {
|
|||
McpUiResourceCspSchema,
|
||||
McpUiResourceMetaSchema,
|
||||
} from "./generated/schema.js";
|
||||
|
||||
// Re-export SDK types used in protocol type unions
|
||||
import {
|
||||
CallToolRequest,
|
||||
CallToolResult,
|
||||
EmptyResult,
|
||||
ListPromptsRequest,
|
||||
ListPromptsResult,
|
||||
ListResourcesRequest,
|
||||
ListResourcesResult,
|
||||
ListResourceTemplatesRequest,
|
||||
ListResourceTemplatesResult,
|
||||
ListToolsRequest,
|
||||
ListToolsResult,
|
||||
LoggingMessageNotification,
|
||||
PingRequest,
|
||||
PromptListChangedNotification,
|
||||
ReadResourceRequest,
|
||||
ReadResourceResult,
|
||||
ResourceListChangedNotification,
|
||||
ToolListChangedNotification,
|
||||
} from "@modelcontextprotocol/sdk/types.js";
|
||||
|
||||
/**
|
||||
* All request types in the MCP Apps protocol.
|
||||
*
|
||||
* Includes:
|
||||
* - MCP UI requests (initialize, open-link, message, resource-teardown)
|
||||
* - MCP server requests forwarded from the app (tools/call, resources/*, prompts/list)
|
||||
* - Protocol requests (ping)
|
||||
*/
|
||||
export type AppRequest =
|
||||
| McpUiInitializeRequest
|
||||
| McpUiOpenLinkRequest
|
||||
| McpUiMessageRequest
|
||||
| McpUiResourceTeardownRequest
|
||||
| CallToolRequest
|
||||
| ListToolsRequest
|
||||
| ListResourcesRequest
|
||||
| ListResourceTemplatesRequest
|
||||
| ReadResourceRequest
|
||||
| ListPromptsRequest
|
||||
| PingRequest;
|
||||
|
||||
/**
|
||||
* All notification types in the MCP Apps protocol.
|
||||
*
|
||||
* Host to app:
|
||||
* - Tool lifecycle (input, input-partial, result, cancelled)
|
||||
* - Host context changes
|
||||
* - MCP list changes (tools, resources, prompts)
|
||||
* - Sandbox resource ready
|
||||
*
|
||||
* App to host:
|
||||
* - Initialized, size-changed, sandbox-proxy-ready
|
||||
* - Logging messages
|
||||
*/
|
||||
export type AppNotification =
|
||||
// Sent to app
|
||||
| McpUiHostContextChangedNotification
|
||||
| McpUiToolInputNotification
|
||||
| McpUiToolInputPartialNotification
|
||||
| McpUiToolResultNotification
|
||||
| McpUiToolCancelledNotification
|
||||
| McpUiSandboxResourceReadyNotification
|
||||
| ToolListChangedNotification
|
||||
| ResourceListChangedNotification
|
||||
| PromptListChangedNotification
|
||||
// Received from app
|
||||
| McpUiInitializedNotification
|
||||
| McpUiSizeChangedNotification
|
||||
| McpUiSandboxProxyReadyNotification
|
||||
| LoggingMessageNotification;
|
||||
|
||||
/**
|
||||
* All result types in the MCP Apps protocol.
|
||||
*/
|
||||
export type AppResult =
|
||||
| McpUiInitializeResult
|
||||
| McpUiOpenLinkResult
|
||||
| McpUiMessageResult
|
||||
| McpUiResourceTeardownResult
|
||||
| CallToolResult
|
||||
| ListToolsResult
|
||||
| ListResourcesResult
|
||||
| ListResourceTemplatesResult
|
||||
| ReadResourceResult
|
||||
| ListPromptsResult
|
||||
| EmptyResult;
|
||||
|
|
|
|||
Loading…
Reference in a new issue