@mcp-b/global 1.2.1-beta.0 → 1.2.2-beta.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/README.md CHANGED
@@ -1011,6 +1011,43 @@ if ("modelContext" in navigator) {
1011
1011
 
1012
1012
  ## 🐛 Debugging
1013
1013
 
1014
+ ### Enable Debug Logging
1015
+
1016
+ The @mcp-b/global library includes a lightweight logging system that can be enabled in the browser console. By default, the console is kept clean (only errors and warnings are shown). You can enable detailed debug logging when troubleshooting:
1017
+
1018
+ ```javascript
1019
+ // Enable all debug logging
1020
+ localStorage.setItem('WEBMCP_DEBUG', '*');
1021
+
1022
+ // Enable specific namespaces
1023
+ localStorage.setItem('WEBMCP_DEBUG', 'WebModelContext');
1024
+ localStorage.setItem('WEBMCP_DEBUG', 'NativeAdapter,MCPBridge');
1025
+
1026
+ // Refresh the page to apply changes
1027
+ location.reload();
1028
+ ```
1029
+
1030
+ To disable debug logging:
1031
+
1032
+ ```javascript
1033
+ localStorage.removeItem('WEBMCP_DEBUG');
1034
+ location.reload();
1035
+ ```
1036
+
1037
+ **Available Namespaces:**
1038
+ - `WebModelContext` - Main polyfill implementation
1039
+ - `NativeAdapter` - Native Chromium API adapter
1040
+ - `MCPBridge` - MCP server and transport setup
1041
+ - `ModelContextTesting` - Testing API operations
1042
+
1043
+ **Log Levels:**
1044
+ - **Error** (always shown): Critical failures and exceptions
1045
+ - **Warn** (always shown): Compatibility warnings and potential issues
1046
+ - **Info** (debug mode only): Initialization and setup progress
1047
+ - **Debug** (debug mode only): Detailed operation traces
1048
+
1049
+ ### Access Internal Bridge
1050
+
1014
1051
  In development mode, access the internal bridge:
1015
1052
 
1016
1053
  ```javascript
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { IframeChildTransportOptions, TabServerTransportOptions } from "@mcp-b/transports";
2
2
  import { CallToolResult, CreateMessageRequest, CreateMessageResult, ElicitRequest, ElicitResult, Prompt, PromptMessage, Resource, ResourceContents, ResourceTemplate, Server, ToolAnnotations, Transport } from "@mcp-b/webmcp-ts-sdk";
3
- import { z } from "zod";
3
+ import { z } from "zod/v4";
4
4
 
5
5
  //#region src/types.d.ts
6
6
 
@@ -50,7 +50,7 @@ interface InputSchema {
50
50
  *
51
51
  * @example
52
52
  * ```typescript
53
- * import { z } from 'zod';
53
+ * import { z } from 'zod/v4';
54
54
  *
55
55
  * const mySchema: ZodSchemaObject = {
56
56
  * query: z.string().describe('Search query'),
@@ -65,6 +65,146 @@ type ZodSchemaObject = Record<string, z.ZodTypeAny>;
65
65
  * @see {@link CallToolResult}
66
66
  */
67
67
  type ToolResponse = CallToolResult;
68
+ /**
69
+ * Metadata for tools that trigger page navigation.
70
+ *
71
+ * When a tool needs to navigate the page (e.g., to a different URL), it must include
72
+ * this metadata in its response to signal the navigation intent to the client. This
73
+ * allows the client to distinguish between successful navigation and interrupted execution.
74
+ *
75
+ * **CRITICAL PATTERN**: Tools MUST return their response BEFORE triggering navigation.
76
+ * Use `setTimeout()` with a minimum 100ms delay to ensure the response is transmitted
77
+ * via `postMessage` and received by the client before the page unloads.
78
+ *
79
+ * **Why the pattern is necessary**: During page navigation, the JavaScript context
80
+ * is destroyed. If navigation occurs before the response is sent, the client will
81
+ * never receive the tool's result and cannot distinguish success from failure.
82
+ *
83
+ * @example Correct pattern - Response before navigation
84
+ * ```typescript
85
+ * navigator.modelContext.registerTool({
86
+ * name: 'navigate_to_docs',
87
+ * description: 'Navigate to documentation page',
88
+ * inputSchema: { section: z.string() },
89
+ * async execute(args) {
90
+ * const url = `https://docs.example.com/${args.section}`;
91
+ *
92
+ * // 1. Prepare response with navigation metadata
93
+ * const response = {
94
+ * content: [{ type: 'text', text: `Navigating to ${url}` }],
95
+ * metadata: {
96
+ * willNavigate: true,
97
+ * navigationUrl: url,
98
+ * navigationTiming: 'immediate',
99
+ * },
100
+ * };
101
+ *
102
+ * // 2. Schedule navigation AFTER response is returned (100ms minimum)
103
+ * setTimeout(() => {
104
+ * window.location.href = url;
105
+ * }, 100);
106
+ *
107
+ * // 3. Return response BEFORE navigation occurs
108
+ * return response;
109
+ * },
110
+ * });
111
+ * ```
112
+ *
113
+ * @example Anti-pattern - Navigation before response (DO NOT DO THIS)
114
+ * ```typescript
115
+ * // ❌ WRONG - Response will be lost during navigation
116
+ * async execute(args) {
117
+ * window.location.href = computeUrl(args); // Navigation happens first
118
+ * return { content: [...] }; // This response is never received!
119
+ * }
120
+ * ```
121
+ *
122
+ * @see {@link InterruptionMetadata} for metadata added when navigation interrupts execution
123
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage} for postMessage timing
124
+ */
125
+ interface NavigationMetadata {
126
+ /**
127
+ * Indicates this tool will trigger page navigation.
128
+ * This flag signals to the client that the tool succeeded and navigation is expected.
129
+ */
130
+ willNavigate: true;
131
+ /**
132
+ * The URL the page will navigate to (if known).
133
+ * Helps clients track navigation targets.
134
+ */
135
+ navigationUrl?: string;
136
+ /**
137
+ * When navigation will occur relative to the response.
138
+ * - 'immediate': Navigation scheduled immediately after return (within ~100ms)
139
+ * - 'delayed': Navigation will occur after some delay (see navigationDelayMs)
140
+ * @default 'immediate'
141
+ */
142
+ navigationTiming?: 'immediate' | 'delayed';
143
+ /**
144
+ * Expected delay in milliseconds before navigation (if timing='delayed').
145
+ * Only meaningful when navigationTiming is 'delayed'.
146
+ */
147
+ navigationDelayMs?: number;
148
+ }
149
+ /**
150
+ * Metadata indicating a tool call was interrupted by page navigation.
151
+ *
152
+ * This metadata is automatically added by the transport layer (`TabServerTransport`)
153
+ * when a page navigation occurs while a tool is executing. The transport layer's
154
+ * `beforeunload` event handler detects the navigation and sends an interrupted
155
+ * response for any pending tool calls.
156
+ *
157
+ * **When this occurs**:
158
+ * - User clicks browser back/forward buttons during tool execution
159
+ * - User manually navigates to a different URL
160
+ * - Tool triggers immediate navigation without following the response-first pattern
161
+ * - Page is reloaded or closed during tool execution
162
+ *
163
+ * **How to distinguish from successful navigation**:
164
+ * - Tool succeeded and navigated: Response includes `NavigationMetadata` with `willNavigate: true`
165
+ * - Tool was interrupted: Response includes `InterruptionMetadata` with `navigationInterrupted: true`
166
+ *
167
+ * **Client handling**:
168
+ * ```typescript
169
+ * const response = await client.callTool('my_tool', args);
170
+ *
171
+ * if (response.metadata?.willNavigate) {
172
+ * // Tool succeeded and will navigate - expected behavior
173
+ * console.log('Tool navigated successfully');
174
+ * } else if (response.metadata?.navigationInterrupted) {
175
+ * // Tool was interrupted - may not have completed
176
+ * console.warn('Tool execution interrupted by navigation');
177
+ * } else {
178
+ * // Normal tool response - no navigation
179
+ * console.log('Tool completed normally');
180
+ * }
181
+ * ```
182
+ *
183
+ * @see {@link NavigationMetadata} for metadata indicating intentional navigation
184
+ * @see {@link TabServerTransport._handleBeforeUnload} for the implementation
185
+ * @internal This metadata is added automatically by the transport layer
186
+ */
187
+ interface InterruptionMetadata {
188
+ /**
189
+ * Indicates the tool execution was interrupted by page navigation.
190
+ * When `true`, the tool may not have completed its operation successfully.
191
+ */
192
+ navigationInterrupted: true;
193
+ /**
194
+ * The original JSON-RPC method that was interrupted.
195
+ * Typically `'tools/call'` for tool invocations, but could be other MCP methods.
196
+ *
197
+ * @example 'tools/call' | 'resources/read' | 'prompts/get'
198
+ */
199
+ originalMethod: string;
200
+ /**
201
+ * Unix timestamp (milliseconds since epoch) when the interruption was detected.
202
+ * Useful for logging, debugging, and understanding the timeline of events.
203
+ *
204
+ * @example 1704067200000 (January 1, 2024, 00:00:00 UTC)
205
+ */
206
+ timestamp: number;
207
+ }
68
208
  /**
69
209
  * Transport configuration for initializing the Web Model Context polyfill.
70
210
  *
@@ -907,15 +1047,57 @@ declare function initializeWebModelContext(options?: WebModelContextInitOptions)
907
1047
  */
908
1048
  declare function cleanupWebModelContext(): void;
909
1049
  //#endregion
1050
+ //#region src/logger.d.ts
1051
+ /**
1052
+ * @license
1053
+ * Copyright 2025 Google LLC
1054
+ * SPDX-License-Identifier: Apache-2.0
1055
+ */
1056
+ /**
1057
+ * Logger interface with standard log levels
1058
+ *
1059
+ * All methods accept the same argument patterns as their console.* equivalents,
1060
+ * supporting format strings, object inspection, and multiple arguments.
1061
+ */
1062
+ interface Logger {
1063
+ /** Debug-level logging (disabled by default, enable via WEBMCP_DEBUG) */
1064
+ debug(message?: unknown, ...optionalParams: unknown[]): void;
1065
+ /** Info-level logging (disabled by default, enable via WEBMCP_DEBUG) */
1066
+ info(message?: unknown, ...optionalParams: unknown[]): void;
1067
+ /** Warning-level logging (enabled by default, not gated by WEBMCP_DEBUG) */
1068
+ warn(message?: unknown, ...optionalParams: unknown[]): void;
1069
+ /** Error-level logging (enabled by default, not gated by WEBMCP_DEBUG) */
1070
+ error(message?: unknown, ...optionalParams: unknown[]): void;
1071
+ }
1072
+ /**
1073
+ * Create a namespaced logger
1074
+ *
1075
+ * Uses .bind() to prepend namespace prefixes to console methods without manual
1076
+ * string concatenation. Debug enablement is determined at logger creation time
1077
+ * for performance - changes to localStorage after creation won't affect existing
1078
+ * loggers. Refresh the page to apply new WEBMCP_DEBUG settings.
1079
+ *
1080
+ * @param namespace - Namespace for the logger (e.g., 'WebModelContext', 'NativeAdapter')
1081
+ * @returns Logger instance with debug, info, warn, error methods
1082
+ *
1083
+ * @example
1084
+ * ```typescript
1085
+ * const logger = createLogger('WebModelContext');
1086
+ * logger.debug('Tool registered:', toolName); // Only shown if WEBMCP_DEBUG includes 'WebModelContext'
1087
+ * logger.error('Execution failed:', error); // Always enabled
1088
+ * ```
1089
+ */
1090
+ declare function createLogger(namespace: string): Logger;
1091
+ //#endregion
910
1092
  //#region src/validation.d.ts
911
1093
  /**
912
1094
  * Convert Zod schema object to JSON Schema
913
- * Uses zod-to-json-schema package for comprehensive conversion
1095
+ * Uses Zod 4's native z.toJSONSchema() for conversion
914
1096
  *
915
1097
  * @param schema - Record of Zod type definitions (e.g., { name: z.string(), age: z.number() })
916
1098
  * @returns JSON Schema object compatible with MCP InputSchema
917
1099
  */
918
1100
  declare function zodToJsonSchema(schema: Record<string, z.ZodTypeAny>): InputSchema;
919
1101
  //#endregion
920
- export { type CallToolResult, type CreateMessageRequest, type CreateMessageResult, type ElicitRequest, type ElicitResult, ElicitationFormParams, ElicitationParams, ElicitationResult, ElicitationUrlParams, InputSchema, InternalModelContext, MCPBridge, ModelContext, ModelContextInput, ModelContextTesting, type Prompt, PromptDescriptor, type PromptMessage, RegistrationHandle, type Resource, type ResourceContents, ResourceDescriptor, type ResourceTemplate, ResourceTemplateInfo, SamplingRequestParams, SamplingResult, type ToolAnnotations, ToolCallEvent, ToolDescriptor, ToolInfo, ToolListItem, ToolResponse, TransportConfiguration, ValidatedPromptDescriptor, ValidatedResourceDescriptor, ValidatedToolDescriptor, WebModelContextInitOptions, ZodSchemaObject, cleanupWebModelContext, initializeWebModelContext, zodToJsonSchema };
1102
+ export { type CallToolResult, type CreateMessageRequest, type CreateMessageResult, type ElicitRequest, type ElicitResult, ElicitationFormParams, ElicitationParams, ElicitationResult, ElicitationUrlParams, InputSchema, InternalModelContext, InterruptionMetadata, MCPBridge, ModelContext, ModelContextInput, ModelContextTesting, NavigationMetadata, type Prompt, PromptDescriptor, type PromptMessage, RegistrationHandle, type Resource, type ResourceContents, ResourceDescriptor, type ResourceTemplate, ResourceTemplateInfo, SamplingRequestParams, SamplingResult, type ToolAnnotations, ToolCallEvent, ToolDescriptor, ToolInfo, ToolListItem, ToolResponse, TransportConfiguration, ValidatedPromptDescriptor, ValidatedResourceDescriptor, ValidatedToolDescriptor, WebModelContextInitOptions, ZodSchemaObject, cleanupWebModelContext, createLogger, initializeWebModelContext, zodToJsonSchema };
921
1103
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/global.ts","../src/validation.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/global.ts","../src/logger.ts","../src/validation.ts"],"sourcesContent":[],"mappings":"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"}