@opentiny/next-sdk 0.4.0 → 0.4.2

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 (149) hide show
  1. package/agent/AgentModelProvider.ts +78 -81
  2. package/agent/type.ts +6 -9
  3. package/agent/utils/getAISDKTools.ts +0 -1
  4. package/agent/utils/getBuiltinMcpTools.ts +7 -7
  5. package/core.ts +0 -3
  6. package/dist/SimulatorMask-BHVXyogh-CARX3Rff.js +361 -0
  7. package/dist/agent/type.d.ts +4 -12
  8. package/dist/agent/utils/getBuiltinMcpTools.d.ts +3 -3
  9. package/dist/core.d.ts +0 -1
  10. package/dist/core.js +16 -17
  11. package/dist/index-R_HIbfUX.js +6604 -0
  12. package/dist/index.d.ts +11 -3
  13. package/dist/index.js +76 -4969
  14. package/dist/{initialize-builtin-WebMCP-HgObT902.js → initialize-builtin-WebMCP-JaoKwVlm.js} +1156 -1037
  15. package/dist/page-tools/a11y/build.d.ts +10 -0
  16. package/dist/page-tools/a11y/config.d.ts +96 -0
  17. package/dist/page-tools/a11y/constants.d.ts +11 -0
  18. package/dist/page-tools/a11y/search.d.ts +17 -0
  19. package/dist/page-tools/a11y/types.d.ts +95 -0
  20. package/dist/page-tools/a11y/utils.d.ts +55 -0
  21. package/dist/page-tools/a11y/vnode.d.ts +40 -0
  22. package/dist/page-tools/a11y-tree.d.ts +9 -99
  23. package/dist/page-tools/configs/console-cloud.d.ts +6 -0
  24. package/dist/page-tools/constants.d.ts +10 -0
  25. package/dist/page-tools/context.d.ts +40 -0
  26. package/dist/page-tools/handlers/browserState.d.ts +8 -0
  27. package/dist/page-tools/handlers/click.d.ts +8 -0
  28. package/dist/page-tools/handlers/executeJavascript.d.ts +8 -0
  29. package/dist/page-tools/handlers/fill.d.ts +8 -0
  30. package/dist/page-tools/handlers/scroll.d.ts +8 -0
  31. package/dist/page-tools/handlers/searchTree.d.ts +9 -0
  32. package/dist/page-tools/handlers/select.d.ts +8 -0
  33. package/dist/page-tools/page-agent-highlight/index.d.ts +21 -0
  34. package/dist/page-tools/page-agent-mask/SimulatorMask.d.ts +16 -0
  35. package/dist/page-tools/page-agent-mask/checkDarkMode.d.ts +5 -0
  36. package/dist/page-tools/page-agent-tool-event.d.ts +26 -0
  37. package/dist/page-tools/page-agent-tool.d.ts +3 -8
  38. package/dist/page-tools/schema.d.ts +44 -0
  39. package/dist/page-tools/tool-config.d.ts +50 -0
  40. package/dist/page-tools/utils/dom.d.ts +6 -0
  41. package/dist/page-tools/utils/scroll.d.ts +15 -0
  42. package/dist/runtime.d.ts +7 -0
  43. package/dist/runtime.js +732 -0
  44. package/dist/utils/builtinProxy.d.ts +1 -1
  45. package/dist/vitest.config.d.ts +2 -0
  46. package/index.ts +35 -5
  47. package/package.json +23 -29
  48. package/page-tools/a11y/build.ts +74 -0
  49. package/page-tools/a11y/config.ts +465 -0
  50. package/page-tools/a11y/constants.ts +131 -0
  51. package/page-tools/a11y/search.ts +127 -0
  52. package/page-tools/a11y/types.ts +105 -0
  53. package/page-tools/a11y/utils.ts +239 -0
  54. package/page-tools/a11y/vnode.ts +439 -0
  55. package/page-tools/a11y-tree.ts +9 -527
  56. package/page-tools/bridge.ts +23 -3
  57. package/page-tools/configs/console-cloud.ts +172 -0
  58. package/page-tools/constants.ts +12 -0
  59. package/page-tools/context.ts +50 -0
  60. package/page-tools/handlers/browserState.ts +12 -0
  61. package/page-tools/handlers/click.ts +30 -0
  62. package/page-tools/handlers/executeJavascript.ts +22 -0
  63. package/page-tools/handlers/fill.ts +65 -0
  64. package/page-tools/handlers/scroll.ts +66 -0
  65. package/page-tools/handlers/searchTree.ts +27 -0
  66. package/page-tools/handlers/select.ts +39 -0
  67. package/page-tools/page-agent-highlight/index.ts +245 -0
  68. package/page-tools/page-agent-mask/SimulatorMask.module.css +14 -0
  69. package/page-tools/page-agent-mask/SimulatorMask.ts +299 -0
  70. package/page-tools/page-agent-mask/checkDarkMode.ts +181 -0
  71. package/page-tools/page-agent-mask/cursor-border.svg +3 -0
  72. package/page-tools/page-agent-mask/cursor-fill.svg +5 -0
  73. package/page-tools/page-agent-mask/cursor.module.css +70 -0
  74. package/page-tools/page-agent-mask/hauwei.svg +25 -0
  75. package/page-tools/page-agent-prompt.md +34 -18
  76. package/page-tools/page-agent-tool-event.ts +113 -0
  77. package/page-tools/page-agent-tool.ts +146 -162
  78. package/page-tools/schema.ts +52 -0
  79. package/page-tools/tool-config.ts +100 -0
  80. package/page-tools/utils/dom.ts +158 -0
  81. package/page-tools/utils/scroll.ts +58 -0
  82. package/runtime.ts +44 -0
  83. package/test/page-tools/a11y/build.test.ts +638 -0
  84. package/test/page-tools/a11y/config.test.ts +370 -0
  85. package/test/page-tools/configs/console-cloud.test.ts +168 -0
  86. package/test/page-tools/page-agent-highlight.test.ts +110 -0
  87. package/test/page-tools/page-agent-tool-dispatch.test.ts +208 -0
  88. package/test/page-tools/page-agent-tool.test.ts +102 -0
  89. package/test/page-tools/tool-config.test.ts +112 -0
  90. package/test/page-tools/utils/dom.test.ts +122 -0
  91. package/utils/builtinProxy.ts +45 -13
  92. package/vite.config.runtime.ts +22 -0
  93. package/vite.config.ts +52 -8
  94. package/vitest.config.ts +10 -0
  95. package/McpSdk.ts +0 -14
  96. package/WebAgent.ts +0 -5
  97. package/WebMcp.ts +0 -26
  98. package/Zod.ts +0 -1
  99. package/dist/McpSdk.d.ts +0 -14
  100. package/dist/SimulatorMask-BHVXyogh-BFEGpD5S.js +0 -1048
  101. package/dist/SimulatorMask-BHVXyogh-CCYbrb84.js +0 -801
  102. package/dist/WebAgent.d.ts +0 -5
  103. package/dist/WebMcp.d.ts +0 -23
  104. package/dist/Zod.d.ts +0 -1
  105. package/dist/index.es.dev.js +0 -59017
  106. package/dist/index.es.js +0 -46795
  107. package/dist/index.umd.dev.js +0 -60355
  108. package/dist/index.umd.js +0 -1248
  109. package/dist/mcpsdk@1.25.3.dev.js +0 -22780
  110. package/dist/mcpsdk@1.25.3.es.dev.js +0 -22778
  111. package/dist/mcpsdk@1.25.3.es.js +0 -16960
  112. package/dist/mcpsdk@1.25.3.js +0 -48
  113. package/dist/transport/ExtensionClientTransport.d.ts +0 -24
  114. package/dist/transport/ExtensionContentServerTransport.d.ts +0 -39
  115. package/dist/transport/ExtensionPageServerTransport.d.ts +0 -36
  116. package/dist/transport/messages.d.ts +0 -9
  117. package/dist/vite.config.mcpSdk.d.ts +0 -2
  118. package/dist/vite.config.webAgent.d.ts +0 -2
  119. package/dist/vite.config.webMcp.d.ts +0 -2
  120. package/dist/vite.config.webMcpFull.d.ts +0 -2
  121. package/dist/vite.config.zod.d.ts +0 -2
  122. package/dist/webagent.dev.js +0 -49360
  123. package/dist/webagent.es.dev.js +0 -49071
  124. package/dist/webagent.es.js +0 -39219
  125. package/dist/webagent.js +0 -642
  126. package/dist/webmcp-full.dev.js +0 -31336
  127. package/dist/webmcp-full.es.dev.js +0 -30283
  128. package/dist/webmcp-full.es.js +0 -22889
  129. package/dist/webmcp-full.js +0 -645
  130. package/dist/webmcp.dev.js +0 -9572
  131. package/dist/webmcp.es.dev.js +0 -8518
  132. package/dist/webmcp.es.js +0 -6727
  133. package/dist/webmcp.js +0 -602
  134. package/dist/zod@3.25.76.dev.js +0 -4037
  135. package/dist/zod@3.25.76.es.dev.js +0 -4033
  136. package/dist/zod@3.25.76.es.js +0 -2945
  137. package/dist/zod@3.25.76.js +0 -1
  138. package/transport/ExtensionClientTransport.ts +0 -100
  139. package/transport/ExtensionContentServerTransport.ts +0 -162
  140. package/transport/ExtensionPageServerTransport.ts +0 -149
  141. package/transport/messages.ts +0 -63
  142. package/vite-build-tsc.ts +0 -63
  143. package/vite-env.d.ts +0 -10
  144. package/vite.config.mcpSdk.ts +0 -28
  145. package/vite.config.webAgent.ts +0 -19
  146. package/vite.config.webMcp.ts +0 -40
  147. package/vite.config.webMcpFull.ts +0 -19
  148. package/vite.config.zod.ts +0 -23
  149. /package/dist/{vite-build-tsc.d.ts → vite.config.runtime.d.ts} +0 -0
@@ -2,6 +2,6 @@ import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
2
2
 
3
3
  /**
4
4
  * 建立原生的 JSON-RPC 拦截层:
5
- * 将发向 remote 的 MCP 请求拦截,代理给所在浏览器的 navigator.modelContextTesting 上执行。
5
+ * 将发向 remote 的 MCP 请求拦截,代理给所在浏览器的 document.modelContext 上执行。
6
6
  */
7
7
  export declare const setupBuiltinProxy: (transport: Transport) => void;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vite').UserConfig;
2
+ export default _default;
package/index.ts CHANGED
@@ -21,11 +21,6 @@ export type * from '@modelcontextprotocol/sdk/server/mcp.js'
21
21
  export * from './WebMcpServer'
22
22
  export * from './WebMcpClient'
23
23
 
24
- // 浏览器扩展自定义传输层
25
- export * from './transport/ExtensionClientTransport'
26
- export * from './transport/ExtensionPageServerTransport'
27
- export * from './transport/ExtensionContentServerTransport'
28
-
29
24
  // 快速创建一个悬浮图标和菜单,是扫码和聊天框的入口
30
25
  export * from './remoter/createRemoter'
31
26
 
@@ -59,3 +54,38 @@ export * from '@mcp-b/webmcp-polyfill'
59
54
 
60
55
  export { initializeBuiltinWebMCP } from './page-tools/initialize-builtin-WebMCP'
61
56
  export { registerPageAgentTool } from './page-tools/page-agent-tool'
57
+ export { PAGE_AGENT_TOOL_CALL_EVENT, PAGE_AGENT_TOOL_RESULT_EVENT } from './page-tools/page-agent-tool-event'
58
+ export type { PageAgentToolCallEventDetail, PageAgentToolResultEventDetail } from './page-tools/page-agent-tool-event'
59
+ export type { PageAgentToolOptions } from './page-tools/tool-config'
60
+
61
+ // registerPageAgentTool 完整运行期配置(顶层选项 enableHighlight + 统一无障碍配置 a11yConfig)
62
+ // 的唯一一套读写 API:注册时初始化一次,之后可随时读取/修改
63
+ export { DEFAULT_PAGE_AGENT_TOOL_CONFIG, getPageAgentToolConfig, setPageAgentToolConfig } from './page-tools/tool-config'
64
+ export type { PageAgentToolConfig, PageAgentToolConfigPatch } from './page-tools/tool-config'
65
+
66
+ // 站点预设:云控制台(consoleCloud)等 PageAgentToolOptions,可直接传给 registerPageAgentTool
67
+ export {
68
+ consoleCloudPageAgentToolOptions,
69
+ isConsoleCloudHost,
70
+ } from './page-tools/configs/console-cloud'
71
+
72
+ // 统一无障碍配置(A11yConfig):角色/状态规则、白/黑名单、自定义属性、弹窗选择器,
73
+ // 以及供用户直接调用的底层解析函数(运行期读写请使用上面的 getPageAgentToolConfig/setPageAgentToolConfig)
74
+ export {
75
+ DEFAULT_A11Y_CONFIG,
76
+ defineA11yConfig,
77
+ resolveA11yInfo,
78
+ resolveA11yRole,
79
+ resolveA11yStates,
80
+ mergeA11yConfig,
81
+ mergeA11yConfigs,
82
+ ensureResolvedA11yConfig,
83
+ isResolvedA11yConfig,
84
+ extractSelectors,
85
+ } from './page-tools/a11y/config'
86
+ export type { A11yConfig, ResolvedA11yConfig, A11yRoleRule, A11yMatcher, A11yStateName, A11yInfo } from './page-tools/a11y/config'
87
+
88
+ // 无障碍树构建与搜索:供高级用户直接生成/搜索自定义根节点下的无障碍树
89
+ export { buildA11yTree } from './page-tools/a11y/build'
90
+ export { searchA11yTree } from './page-tools/a11y/search'
91
+ export type { A11yTreeOptions, A11yTreeResult, SearchA11yTreeOptions, SearchA11yTreeResult, VNode, RefMap } from './page-tools/a11y/types'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentiny/next-sdk",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "type": "module",
5
5
  "homepage": "https://docs.opentiny.design/next-sdk/guide/",
6
6
  "repository": {
@@ -34,49 +34,43 @@
34
34
  },
35
35
  "description": "A frontend intelligent application development toolkit designed to simplify WebAgent integration and usage, supporting multiple programming languages and frontend frameworks to help developers rapidly implement intelligent features",
36
36
  "dependencies": {
37
- "@modelcontextprotocol/sdk": "~1.25.2",
38
- "@opentiny/next": "^0.3.2",
39
- "@ai-sdk/openai": "^3.0.0",
40
37
  "@ai-sdk/deepseek": "1.0.30",
41
- "@ai-sdk/provider": "^3.0.0",
42
38
  "@ai-sdk/mcp": "^1.0.0",
39
+ "@ai-sdk/openai": "^3.0.0",
40
+ "@ai-sdk/provider": "^3.0.0",
43
41
  "@mcp-b/webmcp-polyfill": "^3.0.0",
44
- "@page-agent/page-controller": "^1.9.0",
45
- "qrcode": "^1.5.4",
46
- "zod": "^3.25.76",
47
- "zod-to-json-schema": "^3.25.2",
48
- "ajv": "^8.17.1",
42
+ "@modelcontextprotocol/sdk": "~1.25.2",
43
+ "@opentiny/next": "^0.3.2",
44
+ "@page-agent/page-controller": "^1.10.0",
49
45
  "ai": "^6.0.0",
50
- "dom-accessibility-api": "^0.6.3",
46
+ "ai-motion": "^0.4.8",
47
+ "ajv": "^8.17.1",
51
48
  "aria-query": "^5.3.2",
49
+ "diff": "^7.0.0",
50
+ "dom-accessibility-api": "^0.6.3",
51
+ "qrcode": "^1.5.4",
52
52
  "tabbable": "^6.2.0",
53
- "diff": "^7.0.0"
53
+ "zod": "^3.25.76",
54
+ "zod-to-json-schema": "^3.25.2"
54
55
  },
55
56
  "devDependencies": {
57
+ "@types/diff": "^7.0.0",
58
+ "@types/node": "^24.6.0",
59
+ "@types/qrcode": "^1.5.5",
60
+ "@vitest/ui": "^4.1.10",
61
+ "jsdom": "^29.1.1",
56
62
  "typescript": "~5.9.3",
57
63
  "vite": "^7.1.7",
58
64
  "vite-plugin-dts": "^3.9.1",
59
- "@types/qrcode": "^1.5.5",
60
- "@types/node": "^24.6.0",
61
- "@types/diff": "^7.0.0"
65
+ "vitest": "^4.1.10"
62
66
  },
63
67
  "publishConfig": {
64
68
  "access": "public"
65
69
  },
66
70
  "scripts": {
67
- "build:all": "pnpm build:cdn && pnpm build:cdn:dev && pnpm build",
68
- "build": "vite build --config vite-build-tsc.ts",
69
- "build:cdn": "vite build && pnpm build:webAgent && pnpm build:webMcp && pnpm build:mcpSdk && pnpm build:zod && pnpm build:webMcpFull",
70
- "build:cdn:dev": "vite build --mode dev && pnpm build:webAgent:dev && pnpm build:webMcp:dev && pnpm build:mcpSdk:dev && pnpm build:zod:dev && pnpm build:webMcpFull:dev",
71
- "build:webAgent": "vite build --config vite.config.webAgent.ts",
72
- "build:webAgent:dev": "vite build --config vite.config.webAgent.ts --mode dev",
73
- "build:webMcp": "vite build --config vite.config.webMcp.ts",
74
- "build:webMcp:dev": "vite build --config vite.config.webMcp.ts --mode dev",
75
- "build:mcpSdk": "vite build --config vite.config.mcpSdk.ts",
76
- "build:mcpSdk:dev": "vite build --config vite.config.mcpSdk.ts --mode dev",
77
- "build:zod": "vite build --config vite.config.zod.ts",
78
- "build:zod:dev": "vite build --config vite.config.zod.ts --mode dev",
79
- "build:webMcpFull": "vite build --config vite.config.webMcpFull.ts",
80
- "build:webMcpFull:dev": "vite build --config vite.config.webMcpFull.ts --mode dev"
71
+ "build": "vite build && vite build --config vite.config.runtime.ts",
72
+ "build:runtime": "vite build --config vite.config.runtime.ts",
73
+ "test": "vitest run",
74
+ "test:watch": "vitest"
81
75
  }
82
76
  }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * a11y/build.ts
3
+ *
4
+ * 暴露生成整棵无障碍树的主逻辑方法。
5
+ */
6
+
7
+ import type { A11yTreeOptions, A11yTreeResult, A11yTreeShapeOptions, RefMap } from './types'
8
+ import type { A11yConfig } from './config'
9
+ import { ensureResolvedA11yConfig } from './config'
10
+ import { buildVNode, serializeVNode } from './vnode'
11
+ import { getComposedChildren, collectHoverPointerElements } from './utils'
12
+ import { deepQuerySelectorAll } from '../utils/dom'
13
+ import { HIGHLIGHT_CONTAINER_ID } from '../page-agent-highlight'
14
+
15
+ /** 将 whitelist/blacklist 中的 Element 引用与 CSS 选择器字符串统一解析为元素集合(字符串每次动态解析,适配 SPA 重渲染) */
16
+ function resolveElementList(list: Array<Element | string>, root: Element): Set<Element> {
17
+ const set = new Set<Element>()
18
+ for (const item of list) {
19
+ if (typeof item === 'string') {
20
+ try {
21
+ for (const el of deepQuerySelectorAll(item, root)) set.add(el)
22
+ } catch {
23
+ // 忽略非法选择器
24
+ }
25
+ } else if (item) {
26
+ set.add(item)
27
+ }
28
+ }
29
+ return set
30
+ }
31
+
32
+ /**
33
+ * 生成当前页面的语义化 ARIA YAML 树
34
+ *
35
+ * @param root 遍历起点,默认 document.body
36
+ * @param config 统一无障碍配置(角色/状态规则、白/黑名单、自定义属性等)+ 树形状选项(pruneUnnamed/preserveRoles)
37
+ */
38
+ export function buildA11yTree(root: Element = document.body, config?: A11yConfig & A11yTreeOptions): A11yTreeResult {
39
+ const { pruneUnnamed = true, preserveRoles = [], ...a11yConfig } = config ?? {}
40
+ // 运行期 a11yConfig 通常已是 ResolvedA11yConfig,走快路径避免再次与默认配置拼接
41
+ const resolved = ensureResolvedA11yConfig(a11yConfig)
42
+ const shapeOpts: A11yTreeShapeOptions = { pruneUnnamed, preserveRoles }
43
+
44
+ // 使用对象引用避免全局可变状态,消除并发调用隐患
45
+ const refCounter = { value: 0 }
46
+ const refMap: RefMap = new Map()
47
+ const blacklistSet = resolveElementList(resolved.blacklist, root)
48
+ const whitelistSet = resolveElementList(resolved.whitelist, root)
49
+ const lines: string[] = []
50
+
51
+ // 永远过滤高亮容器
52
+ const highlightContainer = document.getElementById(HIGHLIGHT_CONTAINER_ID)
53
+ if (highlightContainer) blacklistSet.add(highlightContainer)
54
+
55
+ // 一次性扫描样式表,收集只在 :hover/:focus/:active 下声明 cursor:pointer 的元素。
56
+ // 这类元素静止态 getComputedStyle 读到 auto,需靠样式表兜底才能识别为可点击。
57
+ const hoverPointerSet = collectHoverPointerElements(root)
58
+
59
+ for (const child of getComposedChildren(root)) {
60
+ const vnode = buildVNode(child, refCounter, refMap, blacklistSet, whitelistSet, resolved, hoverPointerSet)
61
+ if (vnode) {
62
+ lines.push(...serializeVNode(vnode, 0, shapeOpts))
63
+ }
64
+ }
65
+
66
+ const yaml = '```yaml\n' + lines.join('\n') + '\n```'
67
+
68
+ return {
69
+ yaml,
70
+ refMap,
71
+ interactiveCount: refMap.size,
72
+ lines,
73
+ }
74
+ }