@opentiny/next-sdk 0.2.9 → 0.3.0-alpha.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.
@@ -4,16 +4,17 @@ import { ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
4
4
  import { WebMcpServer } from '../WebMcpServer';
5
5
  import { ToolInvokeEffectConfig } from './effects';
6
6
 
7
- /** 页面卸载广播,供 pageToolsOnDemand 模式监听 */
7
+ /** 页面卸载广播消息 */
8
8
  export declare const MSG_PAGE_LEAVE = "next-sdk:page-leave";
9
9
  /** iframe 内 Remoter 就绪后向父窗口发送,父窗口回传 route-state-initial */
10
10
  export declare const MSG_REMOTER_READY = "next-sdk:remoter-ready";
11
- /** 父窗口向 iframe Remoter 回传的初始路由状态(toolRouteMap + activeRoutes) */
11
+ /** 历史兼容消息类型(当前简化方案不再使用) */
12
12
  export declare const MSG_ROUTE_STATE_INITIAL = "next-sdk:route-state-initial";
13
+ /** 工具目录发生变更(新增/删除/路由重绑定) */
14
+ export declare const MSG_TOOL_CATALOG_CHANGED = "next-sdk:tool-catalog-changed";
13
15
  /**
14
16
  * 获取通过 withPageTools + RouteConfig 注册的全部工具路由映射。
15
- * 返回的是内部 Map 的只读快照,可安全遍历。
16
- * @returns toolName → route 的只读 Map
17
+ * 为保持向后兼容,仍保留该 API;简化模式下不再维护此映射,始终返回空 Map
17
18
  */
18
19
  export declare function getToolRouteMap(): ReadonlyMap<string, string>;
19
20
  /**
@@ -22,6 +23,23 @@ export declare function getToolRouteMap(): ReadonlyMap<string, string>;
22
23
  * @returns 当前激活路由的 Set 快照
23
24
  */
24
25
  export declare function getActiveRoutes(): Set<string>;
26
+ /**
27
+ * 获取当前已激活页面上的工具清单快照。
28
+ * key 为 route,value 为该页面当前可执行的工具名数组。
29
+ */
30
+ export declare function getActivePageTools(): ReadonlyMap<string, string[]>;
31
+ export declare function isBuiltinWebMcpSupported(): boolean;
32
+ export declare function registerBuiltinWebMcpTool(options: {
33
+ name: string;
34
+ description?: string;
35
+ inputSchema?: ZodRawShape;
36
+ execute: (params: Record<string, unknown>) => unknown | Promise<unknown>;
37
+ }): Promise<boolean>;
38
+ export declare function unregisterBuiltinWebMcpTool(name: string): Promise<boolean>;
39
+ export declare function hasBuiltinWebMcpTool(name: string): boolean;
40
+ export declare function forceResetBuiltinWebMcpTools(): Promise<void>;
41
+ export declare function listBuiltinWebMcpTools(): Promise<unknown[]>;
42
+ export declare function executeBuiltinWebMcpTool(name: string, input: Record<string, unknown>): Promise<unknown>;
25
43
  /**
26
44
  * 注册应用的导航函数,通常在应用入口(如 main.ts)调用一次。
27
45
  * @param fn 导航函数,接收路由路径并执行跳转(如 router.push)
@@ -45,6 +63,16 @@ export type RouteConfig = {
45
63
  */
46
64
  invokeEffect?: boolean | ToolInvokeEffectConfig;
47
65
  };
66
+ export type WithPageToolsOptions = {
67
+ /**
68
+ * Chrome 内置 WebMCP 兼容模式。
69
+ * - auto(默认):检测到 navigator.modelContext 时,同步注册内置工具(同时保留 next-sdk 现有链路)
70
+ * - disabled:关闭内置兼容,仅使用 next-sdk 现有链路
71
+ */
72
+ nativeWebMcp?: {
73
+ mode?: 'auto' | 'disabled';
74
+ };
75
+ };
48
76
  export type { ToolInvokeEffectConfig };
49
77
  /**
50
78
  * PageAwareServer 的 registerTool 配置对象类型,与 WebMcpServer.registerTool 保持一致。
@@ -63,7 +91,49 @@ type RegisterToolConfig<InputArgs extends ZodRawShape, OutputArgs extends ZodRaw
63
91
  */
64
92
  export type PageAwareServer = Omit<WebMcpServer, 'registerTool'> & {
65
93
  registerTool<InputArgs extends ZodRawShape, OutputArgs extends ZodRawShape>(name: string, config: RegisterToolConfig<InputArgs, OutputArgs>, handlerOrRoute: ((...args: any[]) => any) | RouteConfig): RegisteredTool;
94
+ unregisterTool(name: string): boolean;
95
+ };
96
+ export type PageToolDefinition<InputArgs extends ZodRawShape = ZodRawShape, OutputArgs extends ZodRawShape = ZodRawShape> = {
97
+ /** 工具名称 */
98
+ name: string;
99
+ /** 工具声明配置(title/description/schema/annotations) */
100
+ config: RegisterToolConfig<InputArgs, OutputArgs>;
101
+ /** 工具绑定路由 */
102
+ route: string;
103
+ /** 页面响应超时(ms) */
104
+ timeout?: number;
105
+ /** 页面调用特效 */
106
+ invokeEffect?: boolean | ToolInvokeEffectConfig;
107
+ /** 工具执行回调(可选 context,便于页面注入运行时依赖) */
108
+ handler: (input: any, context?: unknown) => any | Promise<any>;
109
+ };
110
+ export declare function definePageTool<InputArgs extends ZodRawShape, OutputArgs extends ZodRawShape>(definition: PageToolDefinition<InputArgs, OutputArgs>): PageToolDefinition<InputArgs, OutputArgs>;
111
+ /**
112
+ * 批量注册页面工具声明(schema/route)到 MCP Server。
113
+ * 可与 mountPageTools 配套使用,实现“声明与执行回调在同一工具定义对象内”。
114
+ */
115
+ export declare function registerPageTools(server: PageAwareServer, definitions: PageToolDefinition[]): RegisteredTool[];
116
+ /**
117
+ * 使用 PageToolDefinition 快速在页面侧挂载 handlers(声明与执行同源)。
118
+ * 等价于 registerPageTool({ tools, route?, context? })
119
+ */
120
+ export declare function mountPageTools(options: MountPageToolsOptions): () => void;
121
+ export type RegisterRuntimePageToolsOptions = MountPageToolsOptions & {
122
+ /**
123
+ * 是否在页面卸载时自动移除工具声明。
124
+ * - true(默认):页面即工具,离开页面后从 MCP 工具目录移除
125
+ * - false:只卸载 handler,工具声明保留(适合希望工具常驻目录的场景)
126
+ */
127
+ removeOnUnmount?: boolean;
66
128
  };
129
+ /**
130
+ * 在业务页面内“一处定义 + 一处生效”:
131
+ * 1) 注册工具声明(name/description/schema/route)
132
+ * 2) 同时挂载工具 handler(页面生命周期内生效)
133
+ *
134
+ * 该能力与“分离式 mcp-servers + registerPageTool”并存,不会破坏原有写法。
135
+ */
136
+ export declare function registerRuntimePageTools(server: PageAwareServer, options: RegisterRuntimePageToolsOptions): () => void;
67
137
  /**
68
138
  * 注册一个通用的页面跳转工具(navigate_to_page),供大模型在需要时主动跳转到指定路由。
69
139
  *
@@ -95,6 +165,7 @@ export declare function registerNavigateTool(server: WebMcpServer, options?: Nav
95
165
  * 先导航到目标路由,再通过 postMessage 与页面通信
96
166
  */
97
167
  export declare function withPageTools(server: WebMcpServer): PageAwareServer;
168
+ export declare function withPageTools(server: WebMcpServer, options: WithPageToolsOptions): PageAwareServer;
98
169
  /**
99
170
  * 在目标页面激活工具处理器(框架无关的纯 JS 函数)。
100
171
  *
@@ -105,7 +176,10 @@ export declare function withPageTools(server: WebMcpServer): PageAwareServer;
105
176
  *
106
177
  * 返回 cleanup 函数,页面销毁时调用。
107
178
  */
108
- export declare function registerPageTool(options: {
179
+ type PageToolHandlers = {
180
+ [toolName: string]: (input: any) => Promise<any> | any;
181
+ };
182
+ export type RegisterPageToolByHandlersOptions = {
109
183
  /**
110
184
  * 目标路由路径,与 RouteConfig.route 保持一致。
111
185
  * 省略时自动读取 window.location.pathname。
@@ -120,5 +194,18 @@ export declare function registerPageTool(options: {
120
194
  *(如 `async ({ productId }: { productId: string }) => ...`)无法通过类型检查,
121
195
  * 破坏现有调用方代码的开发体验。运行时输入由 MCP inputSchema 保证类型安全。
122
196
  */
123
- handlers: Record<string, (input: any) => Promise<any>>;
124
- }): () => void;
197
+ handlers: PageToolHandlers;
198
+ };
199
+ export type MountPageToolsOptions = {
200
+ /**
201
+ * 待激活的工具定义(定义中同时包含 schema + handler)。
202
+ * 若 route 省略且 tools 包含多个路由,将抛出错误提示显式指定 route。
203
+ */
204
+ tools: PageToolDefinition[];
205
+ /** 可选:覆盖 route(只激活该路由下的工具定义) */
206
+ route?: string;
207
+ /** 运行时上下文,会作为第二参数透传给 definition.handler */
208
+ context?: unknown;
209
+ };
210
+ export declare function registerPageTool(options: RegisterPageToolByHandlersOptions): () => void;
211
+ export declare function registerPageTool(options: MountPageToolsOptions): () => void;
@@ -49,8 +49,9 @@ declare class FloatingBlock {
49
49
  private renderItem;
50
50
  /**
51
51
  * 合并菜单项配置。
52
- * - sessionId:使用默认菜单 + 用户配置(可定制每一项的 show/text/icon 等)
53
- * - sessionId:不渲染任何下拉菜单,仅保留点击浮标打开对话框的能力
52
+ * - 用户明确传入 menuItems:直接使用用户配置,不受 sessionId 限制;未传 icon 时自动补充默认图标
53
+ * - sessionId 且未传 menuItems:使用默认菜单
54
+ * - 无 sessionId 且未传 menuItems:不渲染任何下拉菜单,仅保留点击浮标打开对话框的能力
54
55
  */
55
56
  private mergeMenuItems;
56
57
  private init;
@@ -19,7 +19,6 @@ export declare class ExtensionPageServerTransport implements Transport {
19
19
  onerror?: (error: Error) => void;
20
20
  onclose?: () => void;
21
21
  readonly sessionId: string;
22
- private _messageListener1;
23
22
  private _messageListener2;
24
23
  private _isStarted;
25
24
  private _isClosed;