@opentiny/next-sdk 0.1.14 → 0.1.15

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 (62) hide show
  1. package/agent/AgentModelProvider.ts +49 -20
  2. package/agent/type.ts +4 -4
  3. package/dist/McpSdk.d.ts +14 -0
  4. package/dist/WebAgent.d.ts +5 -0
  5. package/dist/WebMcp.d.ts +20 -0
  6. package/dist/WebMcpClient.d.ts +250 -1152
  7. package/dist/WebMcpServer.d.ts +190 -78
  8. package/dist/Zod.d.ts +1 -0
  9. package/dist/agent/AgentModelProvider.d.ts +6 -4
  10. package/dist/agent/type.d.ts +6 -2
  11. package/dist/agent/utils/getAISDKTools.d.ts +1 -0
  12. package/dist/index.d.ts +2 -1
  13. package/dist/index.es.dev.js +21741 -23457
  14. package/dist/index.es.js +24309 -23733
  15. package/dist/index.js +1789 -25
  16. package/dist/index.umd.dev.js +21720 -23436
  17. package/dist/index.umd.js +184 -132
  18. package/dist/{mcpsdk@1.17.0.dev.js → mcpsdk@1.23.0.dev.js} +14784 -15255
  19. package/dist/{mcpsdk@1.17.0.es.dev.js → mcpsdk@1.23.0.es.dev.js} +14787 -15258
  20. package/dist/mcpsdk@1.23.0.es.js +15584 -0
  21. package/dist/mcpsdk@1.23.0.js +43 -0
  22. package/dist/remoter/createRemoter.d.ts +9 -0
  23. package/dist/remoter/tooltips.d.ts +36 -0
  24. package/dist/script/utils.d.ts +1 -0
  25. package/dist/transport/ExtensionClientTransport.d.ts +3 -2
  26. package/dist/transport/ExtensionContentServerTransport.d.ts +3 -2
  27. package/dist/transport/ExtensionPageServerTransport.d.ts +3 -2
  28. package/dist/vite-build-tsc.d.ts +2 -0
  29. package/dist/vite.config.d.ts +2 -0
  30. package/dist/vite.config.mcpSdk.d.ts +2 -0
  31. package/dist/vite.config.webAgent.d.ts +2 -0
  32. package/dist/vite.config.webMcp.d.ts +2 -0
  33. package/dist/vite.config.webMcpFull.d.ts +2 -0
  34. package/dist/vite.config.zod.d.ts +2 -0
  35. package/dist/webagent.dev.js +18780 -18491
  36. package/dist/webagent.es.dev.js +18455 -18166
  37. package/dist/webagent.es.js +22389 -20343
  38. package/dist/webagent.js +172 -113
  39. package/dist/webmcp-full.dev.js +14943 -15356
  40. package/dist/webmcp-full.es.dev.js +14959 -15372
  41. package/dist/webmcp-full.es.js +13785 -12666
  42. package/dist/webmcp-full.js +43 -16
  43. package/package.json +3 -2
  44. package/remoter/createRemoter.ts +126 -71
  45. package/remoter/tooltips.ts +260 -0
  46. package/tsconfig.json +5 -3
  47. package/vite-build-tsc.ts +60 -0
  48. package/vite-env.d.ts +5 -0
  49. package/dist/WebMcpClient.js +0 -363
  50. package/dist/WebMcpServer.js +0 -283
  51. package/dist/agent/AgentModelProvider.js +0 -293
  52. package/dist/agent/type.js +0 -1
  53. package/dist/agent/utils/getAISDKTools.js +0 -36
  54. package/dist/mcpsdk@1.17.0.es.js +0 -14505
  55. package/dist/mcpsdk@1.17.0.js +0 -16
  56. package/dist/remoter/QrCode.js +0 -55
  57. package/dist/remoter/createRemoter.js +0 -743
  58. package/dist/transport/ExtensionClientTransport.js +0 -81
  59. package/dist/transport/ExtensionContentServerTransport.js +0 -128
  60. package/dist/transport/ExtensionPageServerTransport.js +0 -118
  61. package/dist/transport/messages.js +0 -51
  62. 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
- };