@opentiny/next-sdk 0.1.14 → 0.1.15-beta.1

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.
Files changed (77) hide show
  1. package/agent/AgentModelProvider.ts +539 -21
  2. package/agent/type.ts +12 -6
  3. package/agent/utils/generateReActPrompt.ts +55 -0
  4. package/agent/utils/parseReActAction.ts +34 -0
  5. package/dist/McpSdk.d.ts +14 -0
  6. package/dist/WebAgent.d.ts +5 -0
  7. package/dist/WebMcp.d.ts +20 -0
  8. package/dist/WebMcpClient.d.ts +389 -1152
  9. package/dist/WebMcpServer.d.ts +79 -78
  10. package/dist/Zod.d.ts +1 -0
  11. package/dist/agent/AgentModelProvider.d.ts +40 -4
  12. package/dist/agent/type.d.ts +13 -3
  13. package/dist/agent/utils/generateReActPrompt.d.ts +9 -0
  14. package/dist/agent/utils/getAISDKTools.d.ts +1 -0
  15. package/dist/agent/utils/parseReActAction.d.ts +14 -0
  16. package/dist/index.d.ts +2 -1
  17. package/dist/index.es.dev.js +36351 -34349
  18. package/dist/index.es.js +28821 -25466
  19. package/dist/index.js +3880 -25
  20. package/dist/index.umd.dev.js +34228 -32226
  21. package/dist/index.umd.js +220 -128
  22. package/dist/mcpsdk@1.24.3.dev.js +22539 -0
  23. package/dist/mcpsdk@1.24.3.es.dev.js +22537 -0
  24. package/dist/mcpsdk@1.24.3.es.js +16781 -0
  25. package/dist/mcpsdk@1.24.3.js +43 -0
  26. package/dist/remoter/createRemoter.d.ts +9 -0
  27. package/dist/remoter/tooltips.d.ts +36 -0
  28. package/dist/script/utils.d.ts +1 -0
  29. package/dist/transport/ExtensionClientTransport.d.ts +3 -2
  30. package/dist/transport/ExtensionContentServerTransport.d.ts +3 -2
  31. package/dist/transport/ExtensionPageServerTransport.d.ts +4 -4
  32. package/dist/vite-build-tsc.d.ts +2 -0
  33. package/dist/vite.config.d.ts +2 -0
  34. package/dist/vite.config.mcpSdk.d.ts +2 -0
  35. package/dist/vite.config.webAgent.d.ts +2 -0
  36. package/dist/vite.config.webMcp.d.ts +2 -0
  37. package/dist/vite.config.webMcpFull.d.ts +2 -0
  38. package/dist/vite.config.zod.d.ts +2 -0
  39. package/dist/webagent.dev.js +24690 -20960
  40. package/dist/webagent.es.dev.js +24032 -20302
  41. package/dist/webagent.es.js +25326 -20723
  42. package/dist/webagent.js +209 -110
  43. package/dist/webmcp-full.dev.js +21225 -20021
  44. package/dist/webmcp-full.es.dev.js +21223 -20019
  45. package/dist/webmcp-full.es.js +16710 -14437
  46. package/dist/webmcp-full.js +42 -15
  47. package/dist/webmcp.dev.js +14 -22
  48. package/dist/webmcp.es.dev.js +12 -20
  49. package/dist/webmcp.es.js +172 -179
  50. package/dist/webmcp.js +1 -1
  51. package/dist/zod@3.25.76.dev.js +30 -32
  52. package/dist/zod@3.25.76.es.dev.js +28 -30
  53. package/dist/zod@3.25.76.es.js +143 -145
  54. package/dist/zod@3.25.76.js +1 -1
  55. package/package.json +11 -9
  56. package/remoter/createRemoter.ts +126 -71
  57. package/remoter/tooltips.ts +260 -0
  58. package/transport/ExtensionPageServerTransport.ts +2 -4
  59. package/tsconfig.json +5 -3
  60. package/vite-build-tsc.ts +60 -0
  61. package/vite-env.d.ts +5 -0
  62. package/dist/WebMcpClient.js +0 -363
  63. package/dist/WebMcpServer.js +0 -283
  64. package/dist/agent/AgentModelProvider.js +0 -293
  65. package/dist/agent/type.js +0 -1
  66. package/dist/agent/utils/getAISDKTools.js +0 -36
  67. package/dist/mcpsdk@1.17.0.dev.js +0 -21391
  68. package/dist/mcpsdk@1.17.0.es.dev.js +0 -21389
  69. package/dist/mcpsdk@1.17.0.es.js +0 -14505
  70. package/dist/mcpsdk@1.17.0.js +0 -16
  71. package/dist/remoter/QrCode.js +0 -55
  72. package/dist/remoter/createRemoter.js +0 -743
  73. package/dist/transport/ExtensionClientTransport.js +0 -81
  74. package/dist/transport/ExtensionContentServerTransport.js +0 -128
  75. package/dist/transport/ExtensionPageServerTransport.js +0 -118
  76. package/dist/transport/messages.js +0 -51
  77. package/dist/utils/uuid.js +0 -10
@@ -1,81 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';
11
- import { onRuntimeMessage, sendRuntimeMessage } from './messages';
12
- /**
13
- * Chrome 扩展客户端 Transport, 用于 Sidepanel 中的标准的 MCP Transport 接口
14
- * 使用 targetSessionId 连接到特定的 Server
15
- */
16
- export class ExtensionClientTransport {
17
- _throwError(whenFn, message) {
18
- if (whenFn()) {
19
- const error = new Error(message);
20
- console.log(message, error);
21
- if (this.onerror) {
22
- this.onerror(error);
23
- }
24
- throw error;
25
- }
26
- }
27
- constructor(targetSessionId) {
28
- // 内部状态
29
- this._isStarted = false; // 是否已启动
30
- this._isClosed = false; // 是否已关闭
31
- this.targetSessionId = targetSessionId;
32
- /** 监听 server 消息 */
33
- this._messageListener = onRuntimeMessage('mcp-server-to-client', (data) => {
34
- var _a;
35
- try {
36
- if (data.sessionId !== this.targetSessionId)
37
- return;
38
- const mcpMessage = JSONRPCMessageSchema.parse(data.mcpMessage);
39
- (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, mcpMessage);
40
- }
41
- catch (error) {
42
- console.log('【Client Transport】处理server消息错误:', error);
43
- }
44
- }, 'content->side');
45
- }
46
- /** 启动 transport,开始监听消息 */
47
- start() {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- this._throwError(() => this._isClosed, '【Client Transport】 未启动,无法重新启动');
50
- this._isStarted = true;
51
- });
52
- }
53
- /** 发送消息到 MCP Server */
54
- send(message, _options) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- this._throwError(() => !this._isStarted, '【Client Transport】 未启动,无法发送消息');
57
- this._throwError(() => this._isClosed, '【Client Transport】 已关闭,无法发送消息');
58
- // 查询 当前sessionId的最后一个tabid
59
- const sessionInfo = chrome.sessionRegistry.get(this.targetSessionId);
60
- this._throwError(() => !sessionInfo, `【Client Transport】sessionRegistry中未找到${this.targetSessionId}`);
61
- const tabId = sessionInfo.tabIds[sessionInfo.tabIds.length - 1];
62
- sendRuntimeMessage('mcp-client-to-server', { sessionId: this.targetSessionId, tabId, mcpMessage: message }, 'side->content');
63
- });
64
- }
65
- /** 关闭 transport */
66
- close() {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- if (this._isClosed)
69
- return;
70
- try {
71
- this._isClosed = true;
72
- this._isStarted = false;
73
- this._messageListener && this._messageListener();
74
- this.onclose && this.onclose();
75
- }
76
- catch (error) {
77
- this._throwError(() => true, '【Client Transport】 关闭时发生错误');
78
- }
79
- });
80
- }
81
- }
@@ -1,128 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';
11
- import { randomUUID } from '../utils/uuid';
12
- import { onRuntimeMessage, sendRuntimeMessage, sendWindowMessage } from './messages';
13
- /**
14
- * Chrome 扩展的页面Content Script中,实现标准的 MCP Transport
15
- * 使用 sessionId 进行消息路由的唯一标识
16
- */
17
- export class ContentScriptServerTransport {
18
- _throwError(whenFn, message) {
19
- if (whenFn()) {
20
- const error = new Error(message);
21
- console.log(message, error);
22
- if (this.onerror) {
23
- this.onerror(error);
24
- }
25
- throw error;
26
- }
27
- }
28
- constructor(sessionId = null, tabId) {
29
- // 内部状态
30
- this._isStarted = false;
31
- this._isClosed = false;
32
- this._lastRegistration = null; // 最后一次注册信息(用于 Sidepanel 刷新后重新注册)
33
- // 如果提供了 sessionId,使用提供的;否则随机生成
34
- this.sessionId = sessionId || randomUUID();
35
- this.tabId = tabId;
36
- onRuntimeMessage('sidepanel-ready', () => {
37
- if (this._lastRegistration && this._isStarted) {
38
- this.notifyRegistration(this._lastRegistration).catch((error) => {
39
- console.log('【Content Svr Transport】 notifyRegistration 失败', error);
40
- });
41
- }
42
- }, 'side->content', this.tabId);
43
- }
44
- /** 启动 transport,开始监听MCP client 消息 */
45
- start() {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- console.log('【Content Svr Transport】 启动 start', this.sessionId);
48
- // 防止重复启动
49
- if (this._isStarted)
50
- return;
51
- if (this._isClosed)
52
- throw new Error('【Content Svr Transport】 已关闭,无法重新启动');
53
- onRuntimeMessage('mcp-client-to-server', (data) => {
54
- var _a, _b, _c;
55
- if (data.sessionId !== this.sessionId || data.tabId !== this.tabId)
56
- return;
57
- try {
58
- console.log('【Content Svr Transport】 即将处理 mcpMessage', data.mcpMessage);
59
- const mcpMessage = JSONRPCMessageSchema.parse(data.mcpMessage);
60
- (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, mcpMessage);
61
- // 判断是否为工具调用
62
- const toolName = (_b = data.mcpMessage.params) === null || _b === void 0 ? void 0 : _b.name;
63
- if (toolName) {
64
- sendWindowMessage('update-page-app-message', { status: 'run', message: (_c = data.mcpMessage.params) === null || _c === void 0 ? void 0 : _c.name }, 'page->content' // 此处应该是 content->content, 但为了和pageServerTransport统一。
65
- );
66
- }
67
- }
68
- catch (error) {
69
- console.log('【Content Svr Transport】 处理消息时发生错误:', error);
70
- }
71
- }, 'side->content', this.tabId);
72
- this._isStarted = true;
73
- });
74
- }
75
- /** 发送消息到 MCP Client */
76
- send(message, _options) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- var _a;
79
- // 检查状态
80
- this._throwError(() => !this._isStarted, '【Content Svr Transport】 未启动,无法发送消息');
81
- this._throwError(() => this._isClosed, '【Content Svr Transport】 已关闭,无法发送消息');
82
- try {
83
- console.log('【Content Svr Transport】 发送消息到 MCP Client', message);
84
- sendRuntimeMessage('mcp-server-to-client', {
85
- sessionId: this.sessionId,
86
- mcpMessage: message
87
- }, 'content->side');
88
- // 判断是否为工具调用成功了!
89
- if ('result' in message && ((_a = message.result) === null || _a === void 0 ? void 0 : _a.content)) {
90
- sendWindowMessage('update-page-app-message', { status: 'ready', message: '' }, 'page->content' // 此处应该是 content->content, 但为了和pageServerTransport统一。
91
- );
92
- }
93
- }
94
- catch (error) {
95
- this._throwError(() => true, '【Content Svr Transport】发送消息失败' + String(error));
96
- }
97
- });
98
- }
99
- /** 通知 Sidepanel 此 Server 已启动并准备接受连接 */
100
- notifyRegistration(serverInfo) {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- if (!this._isStarted)
103
- return;
104
- // 保存注册信息,用于 Sidepanel 刷新后重新注册
105
- this._lastRegistration = serverInfo;
106
- sendRuntimeMessage('mcp-server-register', {
107
- sessionId: this.sessionId,
108
- serverInfo: Object.assign(Object.assign({}, serverInfo), { url: window.location.origin, title: document.title })
109
- }, 'content->side');
110
- });
111
- }
112
- close() {
113
- return __awaiter(this, void 0, void 0, function* () {
114
- if (this._isClosed)
115
- return;
116
- try {
117
- this._isClosed = true;
118
- this._isStarted = false;
119
- if (this.onclose) {
120
- this.onclose();
121
- }
122
- }
123
- catch (error) {
124
- this._throwError(() => true, '【Content Svr Transport】 关闭时发生错误' + String(error));
125
- }
126
- });
127
- }
128
- }
@@ -1,118 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';
11
- import { randomUUID } from '../utils/uuid';
12
- import { onWindowMessage, sendWindowMessage } from './messages';
13
- /**
14
- * Chrome 扩展服务端 Transport 用于【页面脚本】中的标准的 MCP Transport 接口
15
- * 使用 sessionId 进行消息路由
16
- * 支持固定 sessionId,避免页面刷新时 sessionId 改变
17
- */
18
- export class ExtensionPageServerTransport {
19
- _throwError(whenFn, message) {
20
- if (whenFn()) {
21
- const error = new Error(message);
22
- console.log(message, error);
23
- if (this.onerror) {
24
- this.onerror(error);
25
- }
26
- throw error;
27
- }
28
- }
29
- constructor(sessionId = null, tabId) {
30
- this._isStarted = false;
31
- this._isClosed = false;
32
- this._lastRegistration = null; // 最后一次注册信息(用于 Sidepanel 刷新后重新注册)
33
- // 如果提供了 sessionId,使用提供的;否则随机生成
34
- this.sessionId = sessionId || randomUUID();
35
- this.tabId = tabId;
36
- this._messageListener1 = onWindowMessage('sidepanel-ready-to-page', () => {
37
- if (this._lastRegistration && this._isStarted) {
38
- this.notifyRegistration(this._lastRegistration).catch((error) => {
39
- console.error('【Page Svr Transport】 notifyRegistration失败:', error);
40
- });
41
- }
42
- }, 'content->page');
43
- this._messageListener2 = onWindowMessage('mcp-client-to-server-to-page', (data) => {
44
- var _a, _b, _c;
45
- if (data.sessionId !== this.sessionId || data.tabId !== this.tabId)
46
- return;
47
- console.log('【Page Svr Transport】 即将处理 mcpMessage', data.mcpMessage);
48
- const mcpMessage = JSONRPCMessageSchema.parse(data.mcpMessage);
49
- (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, mcpMessage);
50
- // 判断是否为工具调用
51
- const toolName = (_b = data.mcpMessage.params) === null || _b === void 0 ? void 0 : _b.name;
52
- if (toolName) {
53
- sendWindowMessage('update-page-app-message', { status: 'run', message: (_c = data.mcpMessage.params) === null || _c === void 0 ? void 0 : _c.name }, 'page->content');
54
- }
55
- }, 'content->page');
56
- }
57
- /** 启动 transport,开始监听消息 */
58
- start() {
59
- return __awaiter(this, void 0, void 0, function* () {
60
- if (this._isStarted)
61
- return;
62
- if (this._isClosed)
63
- throw new Error('【Page Svr Transport】 已关闭,无法重新启动');
64
- this._isStarted = true;
65
- });
66
- }
67
- /** 发送消息到 MCP Client */
68
- send(message, _options) {
69
- return __awaiter(this, void 0, void 0, function* () {
70
- var _a;
71
- // 检查状态
72
- this._throwError(() => !this._isStarted, '【Page Svr Transport】 未启动,无法发送消息');
73
- this._throwError(() => this._isClosed, '【Page Svr Transport】 已关闭,无法发送消息');
74
- sendWindowMessage('mcp-server-to-client-from-page', {
75
- sessionId: this.sessionId,
76
- mcpMessage: message
77
- }, 'page->content');
78
- // 判断是否为工具调用成功了!
79
- if ('result' in message && ((_a = message.result) === null || _a === void 0 ? void 0 : _a.content)) {
80
- sendWindowMessage('update-page-app-message', { status: 'ready', message: '' }, 'page->content' // 此处应该是 content->content, 但为了和pageServerTransport统一。
81
- );
82
- }
83
- });
84
- }
85
- /** 通知 Sidepanel 此 Server 已启动并准备接受连接 */
86
- notifyRegistration(serverInfo) {
87
- return __awaiter(this, void 0, void 0, function* () {
88
- this._throwError(() => !this._isStarted, '【Page Svr Transport】 未启动,无法注册消息');
89
- this._lastRegistration = serverInfo;
90
- try {
91
- sendWindowMessage('mcp-server-register-from-page', {
92
- sessionId: this.sessionId,
93
- serverInfo: Object.assign(Object.assign({}, serverInfo), { url: window.location.origin, title: document.title })
94
- }, 'page->content');
95
- }
96
- catch (error) {
97
- this._throwError(() => true, '【Page Svr Transport】 注册 server 失败' + String(error));
98
- }
99
- });
100
- }
101
- /** 关闭 transport */
102
- close() {
103
- return __awaiter(this, void 0, void 0, function* () {
104
- if (this._isClosed)
105
- return;
106
- try {
107
- this._messageListener1 && this._messageListener1();
108
- this._messageListener2 && this._messageListener2();
109
- this._isClosed = true;
110
- this._isStarted = false;
111
- this.onclose && this.onclose();
112
- }
113
- catch (error) {
114
- this._throwError(() => true, '【Page Svr Transport】 关闭时发生错误' + String(error));
115
- }
116
- });
117
- }
118
- }
@@ -1,51 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export const sendWindowMessage = (type, data, direction) => {
11
- window.postMessage({ type, direction, data }, '*');
12
- };
13
- export const onWindowMessage = (type, cb, direction) => {
14
- const handler = function (event) {
15
- return __awaiter(this, void 0, void 0, function* () {
16
- if (event.source === window && event.data.type === type && event.data.direction === direction) {
17
- yield cb(event.data.data);
18
- }
19
- });
20
- };
21
- window.addEventListener('message', handler);
22
- return () => window.removeEventListener('message', handler);
23
- };
24
- // 1、runtime 之间直接互发, 但是向content发送时,是广播所有的tabs。
25
- // 2、返回值固定为sender
26
- export const sendRuntimeMessage = (type, data, direction) => {
27
- if (direction.endsWith('content')) {
28
- chrome.tabs.query({}, (tabs) => {
29
- tabs.forEach((tab) => {
30
- chrome.tabs.sendMessage(tab.id, { type, data, direction, tabId: tab.id });
31
- });
32
- });
33
- }
34
- else {
35
- return chrome.runtime.sendMessage({ direction, type, data });
36
- }
37
- };
38
- // 回调只能拿到 data,sender, 不提供 sendResponse。 如果需要返回值, 必须重新发送一个新消息才行。
39
- export const onRuntimeMessage = (type, cb, direction, selfTabid) => {
40
- const handler = (message, sender, sendResponse) => {
41
- if (message.type === type && message.direction === direction) {
42
- if (!selfTabid || (selfTabid && message.tabId === selfTabid)) {
43
- const { data } = message;
44
- cb(data, sender, sendResponse);
45
- sendResponse(sender); // 默认永远返回sender
46
- }
47
- }
48
- };
49
- chrome.runtime.onMessage.addListener(handler);
50
- return () => chrome.runtime.onMessage.removeListener(handler);
51
- };
@@ -1,10 +0,0 @@
1
- export const randomUUID = () => {
2
- if (typeof crypto !== 'undefined' && crypto.randomUUID) {
3
- return crypto.randomUUID();
4
- }
5
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
6
- const r = (Math.random() * 16) | 0;
7
- const v = c === 'x' ? r : (r & 0x3) | 0x8;
8
- return v.toString(16);
9
- });
10
- };