@opentiny/next-sdk 0.4.2 → 0.4.3

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 (88) hide show
  1. package/dist/{SimulatorMask-BHVXyogh-CARX3Rff.js → SimulatorMask-BHVXyogh-CKmEDsYG.js} +1 -1
  2. package/dist/{index-R_HIbfUX.js → index-CHMa2zG4.js} +1065 -1042
  3. package/dist/index.js +1 -1
  4. package/dist/page-tools/a11y/config.d.ts +6 -3
  5. package/dist/page-tools/a11y/constants.d.ts +20 -0
  6. package/dist/page-tools/a11y/utils.d.ts +14 -0
  7. package/dist/page-tools/constants.d.ts +4 -2
  8. package/dist/page-tools/context.d.ts +2 -0
  9. package/dist/page-tools/handlers/hover.d.ts +9 -0
  10. package/dist/page-tools/schema.d.ts +3 -3
  11. package/dist/page-tools/utils/dom.d.ts +8 -2
  12. package/dist/runtime.js +19 -172
  13. package/package.json +6 -1
  14. package/WebMcpClient.ts +0 -505
  15. package/WebMcpServer.ts +0 -447
  16. package/agent/AgentModelProvider.ts +0 -932
  17. package/agent/type.ts +0 -91
  18. package/agent/utils/generateReActPrompt.ts +0 -71
  19. package/agent/utils/getAISDKTools.ts +0 -34
  20. package/agent/utils/getBuiltinMcpTools.ts +0 -86
  21. package/agent/utils/parseReActAction.ts +0 -34
  22. package/core.ts +0 -26
  23. package/index.ts +0 -91
  24. package/page-tools/a11y/build.ts +0 -74
  25. package/page-tools/a11y/config.ts +0 -465
  26. package/page-tools/a11y/constants.ts +0 -131
  27. package/page-tools/a11y/search.ts +0 -127
  28. package/page-tools/a11y/types.ts +0 -105
  29. package/page-tools/a11y/utils.ts +0 -239
  30. package/page-tools/a11y/vnode.ts +0 -439
  31. package/page-tools/a11y-tree.ts +0 -14
  32. package/page-tools/bridge.ts +0 -722
  33. package/page-tools/configs/console-cloud.ts +0 -172
  34. package/page-tools/constants.ts +0 -12
  35. package/page-tools/context.ts +0 -50
  36. package/page-tools/effects.ts +0 -345
  37. package/page-tools/handlers/browserState.ts +0 -12
  38. package/page-tools/handlers/click.ts +0 -30
  39. package/page-tools/handlers/executeJavascript.ts +0 -22
  40. package/page-tools/handlers/fill.ts +0 -65
  41. package/page-tools/handlers/scroll.ts +0 -66
  42. package/page-tools/handlers/searchTree.ts +0 -27
  43. package/page-tools/handlers/select.ts +0 -39
  44. package/page-tools/initialize-builtin-WebMCP.ts +0 -20
  45. package/page-tools/page-agent-highlight/index.ts +0 -245
  46. package/page-tools/page-agent-mask/SimulatorMask.module.css +0 -14
  47. package/page-tools/page-agent-mask/SimulatorMask.ts +0 -299
  48. package/page-tools/page-agent-mask/checkDarkMode.ts +0 -181
  49. package/page-tools/page-agent-mask/cursor-border.svg +0 -3
  50. package/page-tools/page-agent-mask/cursor-fill.svg +0 -5
  51. package/page-tools/page-agent-mask/cursor.module.css +0 -70
  52. package/page-tools/page-agent-mask/hauwei.svg +0 -25
  53. package/page-tools/page-agent-prompt.md +0 -139
  54. package/page-tools/page-agent-tool-event.ts +0 -113
  55. package/page-tools/page-agent-tool.ts +0 -207
  56. package/page-tools/page-state-cache.ts +0 -78
  57. package/page-tools/schema.ts +0 -52
  58. package/page-tools/tool-config.ts +0 -100
  59. package/page-tools/utils/dom.ts +0 -158
  60. package/page-tools/utils/scroll.ts +0 -58
  61. package/remoter/QrCode.ts +0 -54
  62. package/remoter/createRemoter.ts +0 -957
  63. package/remoter/svgs/chat.svg +0 -43
  64. package/remoter/svgs/icon-copy.svg +0 -25
  65. package/remoter/svgs/link.svg +0 -28
  66. package/remoter/svgs/logo.svg +0 -45
  67. package/remoter/svgs/qrcode.svg +0 -35
  68. package/remoter/svgs/scan.svg +0 -21
  69. package/remoter/tooltips.ts +0 -260
  70. package/runtime.html +0 -39
  71. package/runtime.ts +0 -44
  72. package/script/utils.ts +0 -26
  73. package/skills/index.ts +0 -287
  74. package/test/page-tools/a11y/build.test.ts +0 -638
  75. package/test/page-tools/a11y/config.test.ts +0 -370
  76. package/test/page-tools/configs/console-cloud.test.ts +0 -168
  77. package/test/page-tools/page-agent-highlight.test.ts +0 -110
  78. package/test/page-tools/page-agent-tool-dispatch.test.ts +0 -208
  79. package/test/page-tools/page-agent-tool.test.ts +0 -102
  80. package/test/page-tools/tool-config.test.ts +0 -112
  81. package/test/page-tools/utils/dom.test.ts +0 -122
  82. package/tsconfig.json +0 -16
  83. package/utils/builtinProxy.ts +0 -144
  84. package/utils/env.ts +0 -13
  85. package/utils/uuid.ts +0 -10
  86. package/vite.config.runtime.ts +0 -22
  87. package/vite.config.ts +0 -63
  88. package/vitest.config.ts +0 -10
@@ -1,144 +0,0 @@
1
- import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'
2
-
3
- /** 浏览器内置 WebMCP 原生上下文接口 */
4
- interface NativeModelContext {
5
- getTools(): Promise<NativeTool[]> | NativeTool[]
6
- executeTool(tool: NativeTool, argsStr: string): Promise<unknown>
7
- }
8
-
9
- /** 原生工具描述 */
10
- interface NativeTool {
11
- name: string
12
- description?: string
13
- title?: string
14
- inputSchema?: unknown
15
- }
16
-
17
- /** JSON-RPC 消息基础结构 */
18
- interface JsonRpcMessage {
19
- jsonrpc: string
20
- id?: string | number
21
- method?: string
22
- params?: {
23
- name?: string
24
- arguments?: Record<string, unknown>
25
- [key: string]: unknown
26
- }
27
- }
28
-
29
- /**
30
- * 建立原生的 JSON-RPC 拦截层:
31
- * 将发向 remote 的 MCP 请求拦截,代理给所在浏览器的 document.modelContext 上执行。
32
- */
33
- export const setupBuiltinProxy = (transport: Transport) => {
34
- const getNativeCtx = (): NativeModelContext | null => {
35
- let ctx: NativeModelContext | null = null
36
- if (typeof document !== 'undefined') ctx = ctx || ((document as unknown as Record<string, unknown>).modelContext as NativeModelContext | null)
37
- if (typeof navigator !== 'undefined') ctx = ctx || ((navigator as unknown as Record<string, unknown>).modelContext as NativeModelContext | null)
38
- ctx = ctx || ((globalThis as unknown as Record<string, unknown>).modelContext as NativeModelContext | null)
39
- return ctx || null
40
- }
41
-
42
- transport.onmessage = async (message: JsonRpcMessage) => {
43
- if (!message || typeof message !== 'object') return
44
- const id = message.id
45
- const method = message.method
46
-
47
- try {
48
- if (method === 'initialize') {
49
- await transport.send({
50
- jsonrpc: '2.0',
51
- id,
52
- result: {
53
- protocolVersion: '2024-11-05',
54
- capabilities: {
55
- tools: { listChanged: true },
56
- logging: {}
57
- },
58
- serverInfo: { name: 'browser-builtin-webmcp-proxy', version: '1.0.0' }
59
- }
60
- })
61
- } else if (method === 'notifications/initialized') {
62
- // Ignore
63
- } else if (method === 'ping' || method === 'custom_ping') {
64
- await transport.send({ jsonrpc: '2.0', id, result: {} })
65
- } else if (method === 'tools/list') {
66
- const nativeCtx = getNativeCtx()
67
- if (nativeCtx && nativeCtx.getTools) {
68
- const rawTools = await nativeCtx.getTools()
69
- const tools = rawTools.map((t: any) => {
70
- let schemaObj: any = {}
71
- if (typeof t.inputSchema === 'string') {
72
- try {
73
- schemaObj = JSON.parse(t.inputSchema)
74
- } catch (e) {
75
- console.error('Failed to parse inputSchema:', e)
76
- }
77
- } else if (typeof t.inputSchema === 'object' && t.inputSchema !== null) {
78
- schemaObj = t.inputSchema
79
- }
80
- return {
81
- name: t.name,
82
- description: t.description || '',
83
- inputSchema: {
84
- type: 'object',
85
- properties: schemaObj.properties || {},
86
- required: schemaObj.required || []
87
- }
88
- }
89
- })
90
- await transport.send({ jsonrpc: '2.0', id, result: { tools } })
91
- } else {
92
- await transport.send({ jsonrpc: '2.0', id, result: { tools: [] } })
93
- }
94
- } else if (method === 'tools/call') {
95
- const nativeCtx = getNativeCtx()
96
- if (nativeCtx && nativeCtx.executeTool) {
97
- if (!message.params || typeof message.params !== 'object' || !message.params.name) {
98
- const error: Error & { code?: number } = new Error('Invalid params: "name" is required and params must be an object')
99
- error.code = -32602 // Invalid params
100
- throw error
101
- }
102
- const { name, arguments: args } = message.params
103
- const tools = await (nativeCtx.getTools ? nativeCtx.getTools() : [])
104
- const toolObj = tools.find((t: any) => t.name === name)
105
- if (!toolObj) throw new Error(`Tool ${name} not found`)
106
- const result = await nativeCtx.executeTool(toolObj, JSON.stringify(args || {}))
107
- const finalResult =
108
- result && typeof result === 'object' && 'content' in result
109
- ? result
110
- : { content: [{ type: 'text', text: typeof result === 'string' ? result : JSON.stringify(result) }] }
111
- await transport.send({ jsonrpc: '2.0', id, result: finalResult })
112
- } else {
113
- const error: Error & { code?: number } = new Error('executeTool not implemented in Browser built-in WebMCP')
114
- error.code = -32601 // Method not found
115
- throw error
116
- }
117
- } else if (method === 'logging/setLevel') {
118
- // 浏览器内置 WebMCP 不是标准 MCP Server,不支持日志级别设置。
119
- // 直接 mock 返回成功,避免严格的 MCP 客户端因未实现该方法而报错。
120
- await transport.send({ jsonrpc: '2.0', id, result: {} })
121
- } else if (method === 'prompts/list') {
122
- await transport.send({ jsonrpc: '2.0', id, result: { prompts: [] } })
123
- } else if (method === 'resources/list') {
124
- await transport.send({ jsonrpc: '2.0', id, result: { resources: [] } })
125
- } else if (id !== undefined) {
126
- // 对于其他不支持但带 id 的请求,返回规范要求的 -32601 Method not found
127
- await transport.send({
128
- jsonrpc: '2.0',
129
- id,
130
- error: { code: -32601, message: `Method not found: ${method}` }
131
- })
132
- }
133
- } catch (err: unknown) {
134
- if (id !== undefined) {
135
- const errObj = err as { code?: number; message?: string }
136
- await transport.send({
137
- jsonrpc: '2.0',
138
- id,
139
- error: { code: errObj.code || -32000, message: errObj.message || String(err) }
140
- })
141
- }
142
- }
143
- }
144
- }
package/utils/env.ts DELETED
@@ -1,13 +0,0 @@
1
- /**
2
- * 判断当前是否处于有效的浏览器环境
3
- */
4
- export const isBrowser = (): boolean => {
5
- return typeof window !== 'undefined' && typeof navigator !== 'undefined'
6
- }
7
-
8
- /**
9
- * 判断当前是否处于有效且能访问 document 的浏览器环境
10
- */
11
- export const isDomAvailable = (): boolean => {
12
- return isBrowser() && typeof document !== 'undefined'
13
- }
package/utils/uuid.ts DELETED
@@ -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
- }
@@ -1,22 +0,0 @@
1
- import { defineConfig } from 'vite'
2
-
3
- export default defineConfig(() => {
4
- return {
5
- define: {
6
- 'process.env.NODE_ENV': JSON.stringify('production')
7
- },
8
- build: {
9
- emptyOutDir: false,
10
- lib: {
11
- entry: 'runtime.ts',
12
- name: 'WebMCPSDK',
13
- formats: ['iife'] as any,
14
- fileName: () => 'runtime.js'
15
- },
16
- rollupOptions: {
17
- // 全量打包第三方依赖,便于浏览器中直接注入或运行
18
- external: []
19
- }
20
- }
21
- }
22
- })
package/vite.config.ts DELETED
@@ -1,63 +0,0 @@
1
- import { defineConfig } from 'vite'
2
- import dts from 'vite-plugin-dts'
3
-
4
- // https://vitejs.dev/config/
5
- export default defineConfig(() => {
6
- // 需要排除的第三方依赖列表
7
- const externalDependencies = [
8
- '@modelcontextprotocol/sdk',
9
- '@opentiny/next',
10
- '@ai-sdk/openai',
11
- '@ai-sdk/deepseek',
12
- '@ai-sdk/provider',
13
- 'qrcode',
14
- 'zod',
15
- 'ajv',
16
- 'ai'
17
- ]
18
-
19
- return {
20
- plugins: [
21
- // 配置 dts 插件生成类型声明文件
22
- dts({
23
- // 指定 TypeScript 配置文件路径
24
- tsconfigPath: './tsconfig.json',
25
- outDir: 'dist',
26
- // 包含所有 TypeScript 文件,确保所有被引用的文件都被处理
27
- include: ['**/*.ts'],
28
- exclude: ['node_modules/**', 'dist/**', '**/*.test.ts', '**/*.spec.ts'],
29
- // 不合并类型文件,保持文件结构以便相对路径引用正常工作
30
- rollupTypes: false,
31
- // 插入类型入口文件引用
32
- insertTypesEntry: true
33
- })
34
- ],
35
- build: {
36
- emptyOutDir: false,
37
- lib: {
38
- entry: {
39
- index: 'index.ts',
40
- core: 'core.ts'
41
- },
42
- name: 'NEXT-SDK',
43
- formats: ['es'],
44
- fileName: (format, entryName) => `${entryName}.js`
45
- },
46
- rollupOptions: {
47
- // 排除第三方依赖,保留本地文件
48
- external: (id) => {
49
- // 如果是相对路径导入(本地文件),不排除
50
- if (id.startsWith('.') || id.startsWith('/')) {
51
- return false
52
- }
53
- // 排除 node_modules 中的第三方依赖
54
- if (id.includes('node_modules')) {
55
- return true
56
- }
57
- // 排除指定的第三方依赖包
58
- return externalDependencies.some((dep) => id === dep || id.startsWith(`${dep}/`))
59
- }
60
- }
61
- }
62
- }
63
- })
package/vitest.config.ts DELETED
@@ -1,10 +0,0 @@
1
- import { defineConfig } from 'vitest/config'
2
-
3
- export default defineConfig({
4
- test: {
5
- environment: 'jsdom',
6
- globals: false,
7
- include: ['test/**/*.test.ts'],
8
- exclude: ['node_modules/**', 'dist/**'],
9
- },
10
- })