@xopcai/xopc 0.0.286 → 0.0.291

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 (445) hide show
  1. package/README.md +16 -0
  2. package/README.zh-CN.md +16 -0
  3. package/dist/browser-ext/dist/assets/{auth-BXCWrPlg.js → auth-B2CDTr_F.js} +2 -1
  4. package/dist/browser-ext/dist/background.js +1 -1
  5. package/dist/browser-ext/dist/sidepanel.html +1 -1
  6. package/dist/browser-ext/dist/sidepanel.js +36 -10
  7. package/dist/browser-ext/manifest.json +1 -1
  8. package/dist/extensions/telegram/xopc.extension.json +1 -1
  9. package/dist/gateway/static/root/assets/{activity-store-xOhV8FHx.js → activity-store-6lmzUBEr.js} +1 -1
  10. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BzQbYWEj.js → agent-avatar-dicebear-BCtrkF15.js} +1 -1
  11. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D2eYNelh.js +1 -0
  12. package/dist/gateway/static/root/assets/agents-BedA5XwI.js +1 -0
  13. package/dist/gateway/static/root/assets/{api-CVJQLBv9.js → api-D6yepxBp.js} +1 -1
  14. package/dist/gateway/static/root/assets/api-Dnfnl1Gd.js +1 -0
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-CTyuXkNC.js → app-management-settings-panel-Md562Fo-.js} +1 -1
  16. package/dist/gateway/static/root/assets/{appearance-settings-Tk-GJtvF.js → appearance-settings-BiBFI4BM.js} +1 -1
  17. package/dist/gateway/static/root/assets/{apps-page-BA-7OrhJ.js → apps-page-Corla83b.js} +1 -1
  18. package/dist/gateway/static/root/assets/{archive-plugin-O49jeeXo.js → archive-plugin-A_Unp751.js} +1 -1
  19. package/dist/gateway/static/root/assets/{attachment-load-r9lBF2tW.js → attachment-load-D6idSUyP.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automations-page-CFFLXYgS.js → automations-page-C6j71Lgs.js} +1 -1
  21. package/dist/gateway/static/root/assets/automations-workspace-DjZdhLQ5.js +6 -0
  22. package/dist/gateway/static/root/assets/{binary-plugins-BpM43vsn.js → binary-plugins-BkKYh-8v.js} +1 -1
  23. package/dist/gateway/static/root/assets/{block-editor-DFrfEcGw.js → block-editor-CDcMvaku.js} +3 -3
  24. package/dist/gateway/static/root/assets/{browser-automation-inputs-CyHGQwxQ.js → browser-automation-inputs-Cq4sIJt2.js} +1 -1
  25. package/dist/gateway/static/root/assets/{browser-automations-page-CPkOWfM9.js → browser-automations-page-C64k4TBH.js} +2 -2
  26. package/dist/gateway/static/root/assets/{browser-settings-page-BOcseZxg.js → browser-settings-page-1k5rj_qR.js} +3 -3
  27. package/dist/gateway/static/root/assets/capabilities-settings-panel-B2NvoTYb.js +8 -0
  28. package/dist/gateway/static/root/assets/channels-settings-DExixzp4.js +1 -0
  29. package/dist/gateway/static/root/assets/{channels-status-swr-BArPeImO.js → channels-status-swr-CVzEYBpX.js} +1 -1
  30. package/dist/gateway/static/root/assets/{chat-terminal-dock-D5Aka4S8.js → chat-terminal-dock-B9eKFkbg.js} +2 -2
  31. package/dist/gateway/static/root/assets/computer-model-settings-DW6j2lsn.js +1 -0
  32. package/dist/gateway/static/root/assets/computer-settings-page-C2Qyw63Q.js +1 -0
  33. package/dist/gateway/static/root/assets/connectors-page-C3ubZz7K.js +2 -0
  34. package/dist/gateway/static/root/assets/{date-picker-DNtRu6EB.js → date-picker-BdxjXVKL.js} +1 -1
  35. package/dist/gateway/static/root/assets/{dependency-picker-Dng3dIQa.js → dependency-picker-CXOa4uh4.js} +1 -1
  36. package/dist/gateway/static/root/assets/{desktop-pet-BicYycxy.js → desktop-pet-CBWiAaSv.js} +1 -1
  37. package/dist/gateway/static/root/assets/{desktop-pet-settings-BEse55eX.js → desktop-pet-settings-BX1aILDK.js} +1 -1
  38. package/dist/gateway/static/root/assets/{device-pairing-wizard-be30HuFI.js → device-pairing-wizard-bqm_Yf4i.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-debug-page-YzhYyuay.js → extension-debug-page-B4MMerja.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-page-CEXVIkDl.js → extension-page-B3ZtINak.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-settings-page-CrlbgK8g.js → extension-settings-page-8BkQVh0z.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-config-swr-BNuoHXiZ.js → gateway-config-swr-BBovMBQ1.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-settings-ZyhacQX5.js +1 -0
  44. package/dist/gateway/static/root/assets/{gateway-startup-retry-zMPfje0n.js → gateway-startup-retry-NXDtzZED.js} +1 -1
  45. package/dist/gateway/static/root/assets/{heartbeat-settings-BtxitqZ3.js → heartbeat-settings-Bllcxm2A.js} +1 -1
  46. package/dist/gateway/static/root/assets/home-page-Cv2e8XBR.js +1 -0
  47. package/dist/gateway/static/root/assets/{image-generation-api-B_Tyx74A.js → image-generation-api-D01ieqGC.js} +1 -1
  48. package/dist/gateway/static/root/assets/{imports-page-eZciuLw_.js → imports-page-DJG1BJzd.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-B7EieIE4.js +75 -0
  50. package/dist/gateway/static/root/assets/index-BD5uNzie.css +2 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B796W039.js → keyboard-shortcuts-settings-6A6JOHTI.js} +1 -1
  52. package/dist/gateway/static/root/assets/local-app-workbench-page-Cipj52Zq.js +2 -0
  53. package/dist/gateway/static/root/assets/{local-apps-page-DXmY5jwM.js → local-apps-page-bD-m7YHJ.js} +1 -1
  54. package/dist/gateway/static/root/assets/{locale-store-D0001I7p.js → locale-store-eliqUnBr.js} +1 -1
  55. package/dist/gateway/static/root/assets/logs-page-D5feO2yw.js +2 -0
  56. package/dist/gateway/static/root/assets/{management-settings-b1MG7s-3.js → management-settings-B7mz0_44.js} +1 -1
  57. package/dist/gateway/static/root/assets/{markdown-view-2txE_Blz.js → markdown-view-BIg7cei7.js} +1 -1
  58. package/dist/gateway/static/root/assets/{media-plugins-CDEf3ksI.js → media-plugins-DQ2HfMeG.js} +1 -1
  59. package/dist/gateway/static/root/assets/messages-NYDOR8-j.js +3 -0
  60. package/dist/gateway/static/root/assets/note-detail-panel-DhYJigb3.js +5 -0
  61. package/dist/gateway/static/root/assets/notes-page-Bg5NPUdf.js +8 -0
  62. package/dist/gateway/static/root/assets/{page-tabs-Bi_-DA5J.js → page-tabs-DmG_Qjl8.js} +1 -1
  63. package/dist/gateway/static/root/assets/{preview-open-alternatives-Dhfdf14p.js → preview-open-alternatives-Y9J1kjKC.js} +1 -1
  64. package/dist/gateway/static/root/assets/{proactive-page-BNouL7Tv.js → proactive-page-Duc_NQ8l.js} +1 -1
  65. package/dist/gateway/static/root/assets/{product-open-page-BkbZBqBr.js → product-open-page-DtgWUAwT.js} +1 -1
  66. package/dist/gateway/static/root/assets/project-detail-page-DVOiucVA.js +1 -0
  67. package/dist/gateway/static/root/assets/projects-page-Dr_kDoCJ.js +1 -0
  68. package/dist/gateway/static/root/assets/{registry-api-icwoEKYB.js → registry-api-Dpm3N2h0.js} +1 -1
  69. package/dist/gateway/static/root/assets/remote-access-hub-hyJ2KKKK.js +1 -0
  70. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-bmgxwWpW.js → runtime-tools-settings-panel-DB7J9opJ.js} +2 -2
  71. package/dist/gateway/static/root/assets/{schema-form-DoZeepCg.js → schema-form-CMYuPOlE.js} +1 -1
  72. package/dist/gateway/static/root/assets/sessions-page-DGsnYcoh.js +1 -0
  73. package/dist/gateway/static/root/assets/settings-advanced-gate-DuzZqQMn.js +1 -0
  74. package/dist/gateway/static/root/assets/{settings-form-section-sw2bbS2b.js → settings-form-section-BayJP08a.js} +1 -1
  75. package/dist/gateway/static/root/assets/{settings-page-BWF8uac0.js → settings-page-CWBqZtt6.js} +1 -1
  76. package/dist/gateway/static/root/assets/setup-status-panel-C97S5g5c.js +1 -0
  77. package/dist/gateway/static/root/assets/{share-preview-page-BIHYD6-O.js → share-preview-page-Wn5bQA-5.js} +1 -1
  78. package/dist/gateway/static/root/assets/shares-settings-pfVzP8F7.js +1 -0
  79. package/dist/gateway/static/root/assets/skill-reload-api-DDJ0ZKx3.js +1 -0
  80. package/dist/gateway/static/root/assets/skills-page-DbDpLjDW.js +2 -0
  81. package/dist/gateway/static/root/assets/{skills-page.utils-dvue6Ish.js → skills-page.utils-DCHY_kou.js} +1 -1
  82. package/dist/gateway/static/root/assets/{system-settings-panel-DCyxPWCl.js → system-settings-panel-DhgITgId.js} +1 -1
  83. package/dist/gateway/static/root/assets/task-detail-page-UqwtiHYu.js +1 -0
  84. package/dist/gateway/static/root/assets/{theme-store-CZwYGpbY.js → theme-store-DUHPzKzv.js} +1 -1
  85. package/dist/gateway/static/root/assets/{tunnel-api-__auf8Ww.js → tunnel-api-DJ3gz2tM.js} +1 -1
  86. package/dist/gateway/static/root/assets/{use-autosave-Iq83UDt3.js → use-autosave-htvgT192.js} +1 -1
  87. package/dist/gateway/static/root/assets/user-model-page-xOsXY_2W.js +2 -0
  88. package/dist/gateway/static/root/assets/{voice-api-key-field-D-QssKik.js → voice-api-key-field-BviJF3Oa.js} +1 -1
  89. package/dist/gateway/static/root/assets/{voice-config-api-B0wNN_tE.js → voice-config-api-Bjy8EFqi.js} +1 -1
  90. package/dist/gateway/static/root/assets/{work-discovery-overlay-5NRYg1iI.js → work-discovery-overlay-BOBVNEYZ.js} +1 -1
  91. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-Ds2SZjLG.js → workflow-run-setup-panel-D1N9uUyM.js} +2 -2
  92. package/dist/gateway/static/root/assets/workflows-page-2ylzlgkG.js +6 -0
  93. package/dist/gateway/static/root/index.html +10 -10
  94. package/dist/package.js +1 -1
  95. package/dist/packages/computer-control-contract/src/index.js +178 -0
  96. package/dist/packages/realtime-protocol/src/voice-audio.js +15 -10
  97. package/dist/packages/realtime-protocol/src/voice-catalog.js +61 -0
  98. package/dist/packages/realtime-protocol/src/voice.js +257 -248
  99. package/dist/src/agent/agent-manager.d.ts +1 -0
  100. package/dist/src/agent/agent-manager.js +5 -4
  101. package/dist/src/agent/background-review/run-background-review.js +1 -1
  102. package/dist/src/agent/embedded/model-runtime.js +1 -1
  103. package/dist/src/agent/embedded/run-for-session.js +1 -1
  104. package/dist/src/agent/embedded/run-turn.js +9 -1
  105. package/dist/src/agent/external-tools/endpoint-provider.js +4 -2
  106. package/dist/src/agent/image/tool-model-config.js +1 -1
  107. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  108. package/dist/src/agent/service.js +2 -2
  109. package/dist/src/agent/session/session-inspector.js +1 -1
  110. package/dist/src/agent/skills/hub-lock.js +1 -1
  111. package/dist/src/agent/skills/index.js +25 -15
  112. package/dist/src/agent/skills/parse-skill-metadata.d.ts +5 -1
  113. package/dist/src/agent/skills/parse-skill-metadata.js +21 -1
  114. package/dist/src/agent/skills/types.d.ts +7 -0
  115. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  116. package/dist/src/agent/tool-manuals/computer.d.ts +1 -0
  117. package/dist/src/agent/tool-manuals/computer.js +19 -0
  118. package/dist/src/agent/tool-manuals/index.js +7 -0
  119. package/dist/src/agent/tools/computer-use-tool.d.ts +11 -0
  120. package/dist/src/agent/tools/computer-use-tool.js +86 -0
  121. package/dist/src/agent/tools/factory.d.ts +2 -0
  122. package/dist/src/agent/tools/factory.js +30 -0
  123. package/dist/src/agent-config/index.js +2 -2
  124. package/dist/src/agent-config/resolver.js +5 -0
  125. package/dist/src/agent-config/schema.d.ts +32 -0
  126. package/dist/src/agent-config/schema.js +5 -2
  127. package/dist/src/ai-assist/text-assist.js +1 -1
  128. package/dist/src/auth/credentials.js +2 -2
  129. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  130. package/dist/src/auth/profiles/store.js +1 -1
  131. package/dist/src/auth/sync-provider-auth.js +2 -2
  132. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  133. package/dist/src/capabilities/readiness/from-config.js +14 -2
  134. package/dist/src/capabilities/readiness/planner.js +3 -2
  135. package/dist/src/capabilities/readiness/types.d.ts +1 -1
  136. package/dist/src/chat-commands/agent-edit.js +1 -1
  137. package/dist/src/cli/commands/agent.js +1 -1
  138. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
  139. package/dist/src/cli/commands/models.js +1 -1
  140. package/dist/src/computer/broker.d.ts +97 -0
  141. package/dist/src/computer/broker.js +337 -0
  142. package/dist/src/computer/config.d.ts +9 -0
  143. package/dist/src/computer/config.js +16 -0
  144. package/dist/src/computer/control-guard.d.ts +4 -0
  145. package/dist/src/computer/control-guard.js +17 -0
  146. package/dist/src/computer/errors.d.ts +7 -0
  147. package/dist/src/computer/errors.js +30 -0
  148. package/dist/src/computer/model-adapter.d.ts +44 -0
  149. package/dist/src/computer/model-adapter.js +273 -0
  150. package/dist/src/computer/model-config.d.ts +3 -0
  151. package/dist/src/computer/model-config.js +27 -0
  152. package/dist/src/computer/model-policy.d.ts +3 -0
  153. package/dist/src/computer/model-policy.js +20 -0
  154. package/dist/src/computer/runtime.d.ts +128 -0
  155. package/dist/src/computer/runtime.js +388 -0
  156. package/dist/src/config/index.js +4 -4
  157. package/dist/src/config/loader.js +2 -2
  158. package/dist/src/config/models-json.d.ts +36 -0
  159. package/dist/src/config/models-json.js +15 -1
  160. package/dist/src/config/schema.d.ts +37 -0
  161. package/dist/src/config/schema.js +11 -2
  162. package/dist/src/config/voice.js +2 -2
  163. package/dist/src/endpoint-tools/invocation-service.d.ts +1 -0
  164. package/dist/src/endpoint-tools/invocation-service.js +5 -2
  165. package/dist/src/endpoint-tools/policy.js +7 -0
  166. package/dist/src/endpoint-tools/runtime.js +1 -0
  167. package/dist/src/endpoint-tools/upload-service.d.ts +13 -1
  168. package/dist/src/endpoint-tools/upload-service.js +73 -8
  169. package/dist/src/extensions/lockfile.js +1 -1
  170. package/dist/src/gateway/agent-builtin-tools.d.ts +7 -1
  171. package/dist/src/gateway/agent-builtin-tools.js +7 -0
  172. package/dist/src/gateway/agents-admin.js +1 -1
  173. package/dist/src/gateway/file-path-classifier.js +1 -1
  174. package/dist/src/gateway/global-defaults-admin.js +16 -0
  175. package/dist/src/gateway/hono/lib/config-payload.d.ts +15 -0
  176. package/dist/src/gateway/hono/lib/config-payload.js +2 -1
  177. package/dist/src/gateway/hono/routes/config-patch/misc.js +13 -2
  178. package/dist/src/gateway/hono/routes/endpoint-tools.js +3 -2
  179. package/dist/src/gateway/hono/routes/models.js +6 -3
  180. package/dist/src/gateway/hono/routes/voice.js +55 -1
  181. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  182. package/dist/src/gateway/security/gateway-scopes.d.ts +1 -1
  183. package/dist/src/gateway/security/gateway-scopes.js +3 -0
  184. package/dist/src/gateway/service/config-coordinator.js +4 -1
  185. package/dist/src/gateway/service.js +12 -12
  186. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  187. package/dist/src/providers/index.js +2 -2
  188. package/dist/src/providers/model-catalog-persistence.js +11 -2
  189. package/dist/src/providers/model-catalog-store.js +1 -0
  190. package/dist/src/providers/model-catalog-types.d.ts +7 -2
  191. package/dist/src/providers/model-reference-auditor.js +6 -3
  192. package/dist/src/providers/model-registry.js +4 -1
  193. package/dist/src/providers/model-supplements.js +18 -2
  194. package/dist/src/providers/presentation.js +4 -2
  195. package/dist/src/providers/register-runtime-providers.js +1 -1
  196. package/dist/src/providers/xopc-cloud-model-source.js +10 -4
  197. package/dist/src/storage/sqlite/index.d.ts +1 -1
  198. package/dist/src/storage/sqlite/index.js +2 -2
  199. package/dist/src/storage/sqlite/migrations/conversation-backup.d.ts +8 -0
  200. package/dist/src/storage/sqlite/migrations/conversation-backup.js +17 -7
  201. package/dist/src/storage/sqlite/migrations/conversation-windows-owners.js +5 -2
  202. package/dist/src/storage/sqlite/migrations/discover.js +2 -2
  203. package/dist/src/storage/sqlite/migrations/errors.d.ts +5 -0
  204. package/dist/src/storage/sqlite/migrations/errors.js +12 -2
  205. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  206. package/dist/src/storage/sqlite/migrations/runner.js +3 -2
  207. package/dist/src/storage/sqlite/schema.js +2 -2
  208. package/dist/src/storage/sqlite/schema.sql +2641 -526
  209. package/dist/src/tui/backends/embedded-backend.js +1 -1
  210. package/dist/src/tui/tui-commands.js +1 -1
  211. package/dist/src/tui/tui-startup-resources.js +1 -1
  212. package/dist/src/tui/tui.js +2 -2
  213. package/dist/src/voice/platform-catalog.d.ts +81 -0
  214. package/dist/src/voice/platform-catalog.js +16 -0
  215. package/dist/src/voice/platform-settings.d.ts +4 -0
  216. package/dist/src/voice/platform-settings.js +120 -0
  217. package/dist/src/voice/platform-streams.d.ts +12 -0
  218. package/dist/src/voice/platform-streams.js +250 -0
  219. package/dist/src/voice/realtime/omniEngine.js +8 -5
  220. package/dist/src/voice/realtime/omniRoute.d.ts +1 -0
  221. package/dist/src/voice/realtime/omniRoute.js +11 -1
  222. package/dist/src/voice/realtime/runtime.js +14 -6
  223. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +15 -8
  224. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +12 -19
  225. package/dist/src/work-discovery/service.js +2 -2
  226. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  227. package/package.json +7 -4
  228. package/skills/creative/algorithmic-art/SKILL.md +7 -0
  229. package/skills/creative/frontend-design/SKILL.md +8 -0
  230. package/skills/creative/hatch-pet/SKILL.md +7 -0
  231. package/skills/creative/theme-factory/SKILL.md +8 -0
  232. package/skills/documents/doc-coauthoring/SKILL.md +7 -0
  233. package/skills/documents/docx/SKILL.md +7 -0
  234. package/skills/documents/pdf/SKILL.md +7 -0
  235. package/skills/documents/pptx/SKILL.md +7 -0
  236. package/skills/documents/xlsx/SKILL.md +9 -1
  237. package/skills/engineering/build-xopc-local-app/SKILL.md +7 -0
  238. package/skills/engineering/define-task/SKILL.md +7 -0
  239. package/skills/engineering/diagnose/SKILL.md +8 -0
  240. package/skills/engineering/tdd/SKILL.md +8 -0
  241. package/skills/tools/find-skills/SKILL.md +8 -0
  242. package/skills/tools/github/SKILL.md +7 -0
  243. package/skills/tools/summarize/SKILL.md +8 -0
  244. package/skills/tools/webapp-testing/SKILL.md +8 -1
  245. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BxR5eog4.js +0 -1
  246. package/dist/gateway/static/root/assets/agents-Dx1om1eN.js +0 -1
  247. package/dist/gateway/static/root/assets/api-q1kIMCLW.js +0 -1
  248. package/dist/gateway/static/root/assets/automations-workspace-DUZE1NOH.js +0 -6
  249. package/dist/gateway/static/root/assets/capabilities-settings-panel-ohEV64hG.js +0 -8
  250. package/dist/gateway/static/root/assets/channels-settings-UOf9mgqt.js +0 -1
  251. package/dist/gateway/static/root/assets/connectors-page-BEQR0NRq.js +0 -2
  252. package/dist/gateway/static/root/assets/gateway-settings-CDJY1AOW.js +0 -1
  253. package/dist/gateway/static/root/assets/home-page-_oqo0pNR.js +0 -1
  254. package/dist/gateway/static/root/assets/index--YC42LAz.css +0 -2
  255. package/dist/gateway/static/root/assets/index-fVtuw2o9.js +0 -75
  256. package/dist/gateway/static/root/assets/local-app-workbench-page-Z8mpau9d.js +0 -2
  257. package/dist/gateway/static/root/assets/logs-page-BGOO8ouT.js +0 -2
  258. package/dist/gateway/static/root/assets/messages-BWANv-N-.js +0 -3
  259. package/dist/gateway/static/root/assets/note-detail-panel-Bm33_3xJ.js +0 -5
  260. package/dist/gateway/static/root/assets/notes-page-C32-xssK.js +0 -8
  261. package/dist/gateway/static/root/assets/project-detail-page-CZ7glGYw.js +0 -1
  262. package/dist/gateway/static/root/assets/projects-page-DP3ZINZz.js +0 -1
  263. package/dist/gateway/static/root/assets/remote-access-hub-xqJcPdOO.js +0 -1
  264. package/dist/gateway/static/root/assets/sessions-page-BaxIfjpm.js +0 -1
  265. package/dist/gateway/static/root/assets/settings-advanced-gate-Cy3Ab3Vg.js +0 -1
  266. package/dist/gateway/static/root/assets/setup-status-panel-BuYto2mT.js +0 -1
  267. package/dist/gateway/static/root/assets/shares-settings-DKtWUneq.js +0 -1
  268. package/dist/gateway/static/root/assets/skill-reload-api-Dn7ElMUk.js +0 -1
  269. package/dist/gateway/static/root/assets/skills-page-D-7UtJIc.js +0 -2
  270. package/dist/gateway/static/root/assets/task-detail-page-efmH43Pq.js +0 -1
  271. package/dist/gateway/static/root/assets/user-model-page-DByIJcQq.js +0 -2
  272. package/dist/gateway/static/root/assets/workflows-page-BJv3eoKR.js +0 -6
  273. package/dist/src/storage/sqlite/migrations/002_add_flush_columns.sql +0 -3
  274. package/dist/src/storage/sqlite/migrations/003_add_note_markdown_meta.sql +0 -4
  275. package/dist/src/storage/sqlite/migrations/004_add_session_type_metadata.sql +0 -15
  276. package/dist/src/storage/sqlite/migrations/005_add_note_agent_contexts.sql +0 -10
  277. package/dist/src/storage/sqlite/migrations/006_add_goals.sql +0 -108
  278. package/dist/src/storage/sqlite/migrations/007_goal_run_judge_schema.sql +0 -4
  279. package/dist/src/storage/sqlite/migrations/008_goal_queue_workflow_runs.sql +0 -53
  280. package/dist/src/storage/sqlite/migrations/009_cron_jobs.sql +0 -24
  281. package/dist/src/storage/sqlite/migrations/010_session_id_identity.sql +0 -30
  282. package/dist/src/storage/sqlite/migrations/011_goal_context_messages.sql +0 -8
  283. package/dist/src/storage/sqlite/migrations/012_memory_records.sql +0 -63
  284. package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +0 -21
  285. package/dist/src/storage/sqlite/migrations/014_memory_record_governance.sql +0 -10
  286. package/dist/src/storage/sqlite/migrations/015_memory_trace_feedback.sql +0 -4
  287. package/dist/src/storage/sqlite/migrations/016_automations.sql +0 -47
  288. package/dist/src/storage/sqlite/migrations/017_automation_run_events.sql +0 -14
  289. package/dist/src/storage/sqlite/migrations/018_automation_safety.sql +0 -1
  290. package/dist/src/storage/sqlite/migrations/019_projects.sql +0 -40
  291. package/dist/src/storage/sqlite/migrations/020_project_default_agent.sql +0 -1
  292. package/dist/src/storage/sqlite/migrations/021_projects_fts.sql +0 -21
  293. package/dist/src/storage/sqlite/migrations/022_work_items.sql +0 -61
  294. package/dist/src/storage/sqlite/migrations/023_work_item_attachments.sql +0 -15
  295. package/dist/src/storage/sqlite/migrations/024_activity_events.sql +0 -62
  296. package/dist/src/storage/sqlite/migrations/025_project_pinned_at.sql +0 -5
  297. package/dist/src/storage/sqlite/migrations/026_goal_contracts.sql +0 -10
  298. package/dist/src/storage/sqlite/migrations/027_mobile_notifications.sql +0 -43
  299. package/dist/src/storage/sqlite/migrations/028_goal_evidence_requirements.sql +0 -47
  300. package/dist/src/storage/sqlite/migrations/029_user_understanding.sql +0 -133
  301. package/dist/src/storage/sqlite/migrations/030_connectors.sql +0 -94
  302. package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +0 -24
  303. package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +0 -15
  304. package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +0 -6
  305. package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +0 -14
  306. package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +0 -7
  307. package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +0 -12
  308. package/dist/src/storage/sqlite/migrations/037_connected_knowledge_pipeline.sql +0 -47
  309. package/dist/src/storage/sqlite/migrations/038_user_owned_memory.sql +0 -68
  310. package/dist/src/storage/sqlite/migrations/039_memory_reference_consents.sql +0 -19
  311. package/dist/src/storage/sqlite/migrations/040_local_apps.sql +0 -32
  312. package/dist/src/storage/sqlite/migrations/041_local_app_release_lifecycle.sql +0 -17
  313. package/dist/src/storage/sqlite/migrations/042_work_discovery.sql +0 -41
  314. package/dist/src/storage/sqlite/migrations/043_local_app_acceptance_runs.sql +0 -16
  315. package/dist/src/storage/sqlite/migrations/044_repair_work_discovery_foreign_keys.sql +0 -75
  316. package/dist/src/storage/sqlite/migrations/045_extension_ui_grants.sql +0 -13
  317. package/dist/src/storage/sqlite/migrations/046_work_discovery_feedback.sql +0 -13
  318. package/dist/src/storage/sqlite/migrations/047_work_discovery_sources.sql +0 -16
  319. package/dist/src/storage/sqlite/migrations/048_work_understanding_investigations.sql +0 -40
  320. package/dist/src/storage/sqlite/migrations/049_work_understanding_threads.sql +0 -52
  321. package/dist/src/storage/sqlite/migrations/050_work_discovery_source_refreshes.sql +0 -15
  322. package/dist/src/storage/sqlite/migrations/051_focus_watches.sql +0 -26
  323. package/dist/src/storage/sqlite/migrations/052_proactive_insights.sql +0 -25
  324. package/dist/src/storage/sqlite/migrations/053_browser_recipes.sql +0 -45
  325. package/dist/src/storage/sqlite/migrations/054_task_outcomes.sql +0 -24
  326. package/dist/src/storage/sqlite/migrations/055_relationship_settings.sql +0 -14
  327. package/dist/src/storage/sqlite/migrations/056_task_verification.sql +0 -6
  328. package/dist/src/storage/sqlite/migrations/057_interaction_states.sql +0 -11
  329. package/dist/src/storage/sqlite/migrations/058_proactive_value.sql +0 -3
  330. package/dist/src/storage/sqlite/migrations/059_composer_input_history.sql +0 -8
  331. package/dist/src/storage/sqlite/migrations/060_remove_runtime_transcript_messages.sql +0 -45
  332. package/dist/src/storage/sqlite/migrations/061_drop_compaction_checkpoints.sql +0 -2
  333. package/dist/src/storage/sqlite/migrations/062_connector_learning_jobs.sql +0 -27
  334. package/dist/src/storage/sqlite/migrations/063_knowledge_collection_scopes.sql +0 -14
  335. package/dist/src/storage/sqlite/migrations/064_user_claims.sql +0 -60
  336. package/dist/src/storage/sqlite/migrations/065_knowledge_item_scope_identity.sql +0 -116
  337. package/dist/src/storage/sqlite/migrations/066_first_class_focuses.sql +0 -126
  338. package/dist/src/storage/sqlite/migrations/067_home_attention_acknowledgements.sql +0 -9
  339. package/dist/src/storage/sqlite/migrations/068_proactive_event_spine.sql +0 -71
  340. package/dist/src/storage/sqlite/migrations/069_proactive_scenario_control.sql +0 -69
  341. package/dist/src/storage/sqlite/migrations/070_proactive_execution.sql +0 -55
  342. package/dist/src/storage/sqlite/migrations/071_proactive_inbox.sql +0 -45
  343. package/dist/src/storage/sqlite/migrations/072_proactive_judgments.sql +0 -14
  344. package/dist/src/storage/sqlite/migrations/073_enable_default_proactive_scenarios.sql +0 -13
  345. package/dist/src/storage/sqlite/migrations/074_deduplicate_blocked_work_routing.sql +0 -5
  346. package/dist/src/storage/sqlite/migrations/075_connector_sync_policies.sql +0 -13
  347. package/dist/src/storage/sqlite/migrations/076_meeting_preparation_scenario.sql +0 -29
  348. package/dist/src/storage/sqlite/migrations/077_proactive_insight_fingerprints.sql +0 -4
  349. package/dist/src/storage/sqlite/migrations/078_discussion_captures.sql +0 -64
  350. package/dist/src/storage/sqlite/migrations/079_discussion_follow_up_scenario.sql +0 -29
  351. package/dist/src/storage/sqlite/migrations/080_task_outcome_context.sql +0 -15
  352. package/dist/src/storage/sqlite/migrations/081_project_monitoring_policies.sql +0 -10
  353. package/dist/src/storage/sqlite/migrations/082_one_click_live_discussions.sql +0 -100
  354. package/dist/src/storage/sqlite/migrations/083_session_task_plans.sql +0 -9
  355. package/dist/src/storage/sqlite/migrations/084_work_intake_lifecycle.sql +0 -26
  356. package/dist/src/storage/sqlite/migrations/085_task_outcome_projection.sql +0 -19
  357. package/dist/src/storage/sqlite/migrations/086_outcome_aggregates.sql +0 -168
  358. package/dist/src/storage/sqlite/migrations/087_context_snapshots.sql +0 -21
  359. package/dist/src/storage/sqlite/migrations/088_automation_execution_deadlines.sql +0 -5
  360. package/dist/src/storage/sqlite/migrations/089_automation_run_leases.sql +0 -8
  361. package/dist/src/storage/sqlite/migrations/090_outcome_contract_judgment.sql +0 -2
  362. package/dist/src/storage/sqlite/migrations/091_context_allocation.sql +0 -1
  363. package/dist/src/storage/sqlite/migrations/092_outcome_execution_runtime.sql +0 -88
  364. package/dist/src/storage/sqlite/migrations/093_remove_legacy_goals.sql +0 -174
  365. package/dist/src/storage/sqlite/migrations/094_outcome_judgment_and_authority.sql +0 -3
  366. package/dist/src/storage/sqlite/migrations/095_session_input_queue.sql +0 -35
  367. package/dist/src/storage/sqlite/migrations/096_drop_work_intakes.sql +0 -6
  368. package/dist/src/storage/sqlite/migrations/097_work_item_lifecycle.sql +0 -194
  369. package/dist/src/storage/sqlite/migrations/098_discussion_note_documents.sql +0 -99
  370. package/dist/src/storage/sqlite/migrations/099_task_model.sql +0 -500
  371. package/dist/src/storage/sqlite/migrations/100_project_task_taskrun.sql +0 -763
  372. package/dist/src/storage/sqlite/migrations/101_session_response_language.sql +0 -1
  373. package/dist/src/storage/sqlite/migrations/102_session_user_context_mode.sql +0 -2
  374. package/dist/src/storage/sqlite/migrations/103_finalize_structured_memory.sql +0 -3
  375. package/dist/src/storage/sqlite/migrations/104_turn_memory_feedback.sql +0 -77
  376. package/dist/src/storage/sqlite/migrations/105_dreaming_ledger.sql +0 -34
  377. package/dist/src/storage/sqlite/migrations/106_dreaming_run_reproducibility.sql +0 -2
  378. package/dist/src/storage/sqlite/migrations/107_connector_accounts.sql +0 -146
  379. package/dist/src/storage/sqlite/migrations/108_repair_user_memory_provider.sql +0 -18
  380. package/dist/src/storage/sqlite/migrations/109_endpoint_principals.sql +0 -14
  381. package/dist/src/storage/sqlite/migrations/110_session_input_origin.sql +0 -43
  382. package/dist/src/storage/sqlite/migrations/111_endpoint_tool_invocations.sql +0 -18
  383. package/dist/src/storage/sqlite/migrations/112_endpoint_instance_bindings.sql +0 -8
  384. package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +0 -76
  385. package/dist/src/storage/sqlite/migrations/114_user_context_domain.sql +0 -193
  386. package/dist/src/storage/sqlite/migrations/115_remove_legacy_user_context.sql +0 -6
  387. package/dist/src/storage/sqlite/migrations/116_structured_context_consolidation.sql +0 -38
  388. package/dist/src/storage/sqlite/migrations/117_unified_understanding_sources.sql +0 -110
  389. package/dist/src/storage/sqlite/migrations/118_task_board_rank.sql +0 -6
  390. package/dist/src/storage/sqlite/migrations/119_proactive_disposition.sql +0 -13
  391. package/dist/src/storage/sqlite/migrations/120_task_conversation.sql +0 -112
  392. package/dist/src/storage/sqlite/migrations/121_automation_inbox.sql +0 -24
  393. package/dist/src/storage/sqlite/migrations/122_automation_session_projects.sql +0 -18
  394. package/dist/src/storage/sqlite/migrations/123_remove_v2_compaction_boundaries.sql +0 -25
  395. package/dist/src/storage/sqlite/migrations/124_workflow_context_snapshots.sql +0 -15
  396. package/dist/src/storage/sqlite/migrations/125_project_workflow_presets.sql +0 -12
  397. package/dist/src/storage/sqlite/migrations/126_focus_context_governance.sql +0 -72
  398. package/dist/src/storage/sqlite/migrations/127_context_object_origin.sql +0 -36
  399. package/dist/src/storage/sqlite/migrations/128_context_extraction.sql +0 -73
  400. package/dist/src/storage/sqlite/migrations/129_focus_versions.sql +0 -51
  401. package/dist/src/storage/sqlite/migrations/130_context_evidence_provenance.sql +0 -18
  402. package/dist/src/storage/sqlite/migrations/131_session_input_contexts.sql +0 -2
  403. package/dist/src/storage/sqlite/migrations/132_transcript_source_context_metadata.sql +0 -34
  404. package/dist/src/storage/sqlite/migrations/133_archive_legacy_work_discovery_profile_facts.sql +0 -11
  405. package/dist/src/storage/sqlite/migrations/134_memory_provenance.sql +0 -18
  406. package/dist/src/storage/sqlite/migrations/135_user_people.sql +0 -59
  407. package/dist/src/storage/sqlite/migrations/136_product_notifications.sql +0 -79
  408. package/dist/src/storage/sqlite/migrations/137_understanding_status_audit.sql +0 -71
  409. package/dist/src/storage/sqlite/migrations/138_device_access.sql +0 -96
  410. package/dist/src/storage/sqlite/migrations/139_turn_outcome_artifact_backfill.sql +0 -231
  411. package/dist/src/storage/sqlite/migrations/140_endpoint_session_bindings.sql +0 -8
  412. package/dist/src/storage/sqlite/migrations/141_device_pairing_approval.sql +0 -17
  413. package/dist/src/storage/sqlite/migrations/142_session_input_instance.sql +0 -1
  414. package/dist/src/storage/sqlite/migrations/143_fixed_session_model.sql +0 -1
  415. package/dist/src/storage/sqlite/migrations/144_execution_environments.sql +0 -59
  416. package/dist/src/storage/sqlite/migrations/145_project_execution_mode.sql +0 -5
  417. package/dist/src/storage/sqlite/migrations/146_understanding_focus_exclusions.sql +0 -9
  418. package/dist/src/storage/sqlite/migrations/147_durable_application_state.sql +0 -39
  419. package/dist/src/storage/sqlite/migrations/148_user_model_foundation.sql +0 -554
  420. package/dist/src/storage/sqlite/migrations/149_separate_source_index_from_memory.sql +0 -18
  421. package/dist/src/storage/sqlite/migrations/150_session_connection_waits.sql +0 -47
  422. package/dist/src/storage/sqlite/migrations/151_proactive_scope_cleanup.sql +0 -6
  423. package/dist/src/storage/sqlite/migrations/152_proactive_scenario_contract.sql +0 -140
  424. package/dist/src/storage/sqlite/migrations/153_browser_control_v2.sql +0 -45
  425. package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +0 -60
  426. package/dist/src/storage/sqlite/migrations/155_browser_extension.sql +0 -120
  427. package/dist/src/storage/sqlite/migrations/156_browser_tab_bindings.sql +0 -14
  428. package/dist/src/storage/sqlite/migrations/157_browser_endpoint_principals.sql +0 -50
  429. package/dist/src/storage/sqlite/migrations/158_browser_native_enrollment.sql +0 -4
  430. package/dist/src/storage/sqlite/migrations/159_proactive_controls.sql +0 -68
  431. package/dist/src/storage/sqlite/migrations/160_proactive_web_push.sql +0 -27
  432. package/dist/src/storage/sqlite/migrations/161_proactive_delivery_and_lifecycle.sql +0 -51
  433. package/dist/src/storage/sqlite/migrations/162_proactive_product.sql +0 -7
  434. package/dist/src/storage/sqlite/migrations/163_proactive_follow_ups.sql +0 -29
  435. package/dist/src/storage/sqlite/migrations/164_browser_sessions.sql +0 -8
  436. package/dist/src/storage/sqlite/migrations/165_device_pairing_target.sql +0 -40
  437. package/dist/src/storage/sqlite/migrations/__tests__/mobile-discussion-source.test.ts +0 -20
  438. package/dist/src/storage/sqlite/migrations/conversation-backup.ts +0 -66
  439. package/dist/src/storage/sqlite/migrations/conversation-key-decoder.ts +0 -50
  440. package/dist/src/storage/sqlite/migrations/conversation-uuid.ts +0 -324
  441. package/dist/src/storage/sqlite/migrations/conversation-windows-owners.ts +0 -71
  442. package/dist/src/storage/sqlite/migrations/discover.ts +0 -52
  443. package/dist/src/storage/sqlite/migrations/errors.ts +0 -32
  444. package/dist/src/storage/sqlite/migrations/runner.ts +0 -204
  445. package/dist/src/storage/sqlite/migrations/types.ts +0 -15
@@ -1,6 +1,8 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { init_changes, onUserContextChange } from "../../user-context/changes.js";
4
+ import { decodeVoiceUplinkAudioFrame, encodeVoiceAudioFrame } from "../../../packages/realtime-protocol/src/voice-audio.js";
5
+ import { VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_WS_PATH, init_voice, parseVoiceClientJsonFrame, parseVoiceClientMessage } from "../../../packages/realtime-protocol/src/voice.js";
4
6
  import { getModelCatalogStore, init_model_catalog_store } from "../../providers/model-catalog-store.js";
5
7
  import { ALIBABA_REALTIME_TTS_MODEL } from "../tts/providers/alibaba-speech.js";
6
8
  import { resolveSpeechProviderChain } from "../tts/factory.js";
@@ -10,8 +12,6 @@ import { resolveSTTProviderChain } from "../stt/factory.js";
10
12
  import { mergeSttConfigFromAppConfig } from "../stt/config.js";
11
13
  import { voiceConversationInstructions } from "./conversation-context.js";
12
14
  import { createPreauthConnectionBudget } from "../../gateway/security/preauth-connection-budget.js";
13
- import { decodeVoiceUplinkAudioFrame, encodeVoiceAudioFrame } from "../../../packages/realtime-protocol/src/voice-audio.js";
14
- import { VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_WS_PATH, parseVoiceClientJsonFrame, parseVoiceClientMessage } from "../../../packages/realtime-protocol/src/voice.js";
15
15
  import { createAgentVoiceEngine } from "./agentEngine.js";
16
16
  import { resolveOmniRoute } from "./omniRoute.js";
17
17
  import { createOmniVoiceEngine } from "./omniEngine.js";
@@ -19,6 +19,7 @@ import { applyVoiceOutputGain } from "./pcm-output-gain.js";
19
19
  import { createRequire } from "node:module";
20
20
  import crypto from "node:crypto";
21
21
  //#region src/voice/realtime/runtime.ts
22
+ init_voice();
22
23
  init_logger();
23
24
  init_changes();
24
25
  init_model_catalog_store();
@@ -45,10 +46,16 @@ function isStreamingProvider(provider) {
45
46
  }
46
47
  function resolveStreamingStt(config, language) {
47
48
  const sttConfig = mergeSttConfigFromAppConfig(config.tools?.media?.audio, config.tools?.media);
48
- for (const entry of resolveSTTProviderChain(sttConfig)) {
49
+ const configured = config.voice?.realtime?.stt;
50
+ const chain = configured ? [{
51
+ id: configured.provider,
52
+ model: configured.model
53
+ }] : resolveSTTProviderChain(sttConfig);
54
+ for (const entry of chain) {
49
55
  const plugin = getMediaUnderstandingProvider(entry.id);
50
56
  if (!isStreamingProvider(plugin)) continue;
51
- const model = plugin.streamingAudio.defaultModel;
57
+ const model = plugin.id === "xopc-cloud" ? config.voice?.realtime?.stt?.model ?? entry.model ?? plugin.streamingAudio.defaultModel : plugin.streamingAudio.defaultModel;
58
+ if (!plugin.streamingAudio.models.includes(model)) continue;
52
59
  return {
53
60
  plugin,
54
61
  model,
@@ -83,6 +90,7 @@ function resolveStreamingTts(config) {
83
90
  providers: { [selection.provider]: {
84
91
  ...apiKey ? { apiKey } : {},
85
92
  ...slice.baseUrl ? { baseUrl: slice.baseUrl } : {},
93
+ ...selection.model ? { model: selection.model } : {},
86
94
  ...selection.voice ? { voice: selection.voice } : selection.provider === "alibaba" ? { voice: "Cherry" } : {}
87
95
  } }
88
96
  };
@@ -101,7 +109,7 @@ function resolveStreamingTts(config) {
101
109
  else if (provider.plugin.id === "xopc-cloud") {
102
110
  const candidate = typeof provider.providerConfig.model === "string" ? provider.providerConfig.model : void 0;
103
111
  const catalogModel = getModelCatalogStore().getSource("xopc-cloud")?.models.find((entry) => entry.id === candidate);
104
- if (!catalogModel?.tts?.streaming || !catalogModel.tts.outputFormats.includes("pcm")) continue;
112
+ if (catalogModel?.availability !== "available" || !catalogModel.voice?.modes.includes("speech.stream")) continue;
105
113
  model = candidate;
106
114
  } else continue;
107
115
  if (!model) continue;
@@ -205,7 +213,7 @@ var VoiceRealtimeRuntime = class {
205
213
  const sessionId = crypto.randomUUID();
206
214
  const ticket = crypto.randomBytes(32).toString("base64url");
207
215
  const connectionEpoch = crypto.randomInt(1, 4294967296);
208
- const maxSessionMs = request.purpose === "conversation" ? Math.min(config.voice.realtime.maxConversationMs, omni?.route.managed ? 30 * 6e4 : Number.MAX_SAFE_INTEGER) : config.voice.realtime.maxDictationMs;
216
+ const maxSessionMs = request.purpose === "conversation" ? Math.min(config.voice.realtime.maxConversationMs, omni?.maxSessionSeconds ? omni.maxSessionSeconds * 1e3 : Number.MAX_SAFE_INTEGER) : config.voice.realtime.maxDictationMs;
209
217
  const claim = {
210
218
  conversationSessionId,
211
219
  sessionId,
@@ -2,16 +2,16 @@ import { getModelCatalogStore, init_model_catalog_store } from "../../../provide
2
2
  import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../../../providers/xopc-cloud-config.js";
3
3
  import { getProviderAuthService, init_provider_auth_service } from "../../../providers/provider-auth-service.js";
4
4
  import { compareCatalogModels } from "../../../providers/model-catalog-ranking.js";
5
+ import { openPlatformStt } from "../../platform-streams.js";
6
+ import { platformVoiceModels, requirePlatformVoiceModel } from "../../platform-catalog.js";
5
7
  import { registerMediaUnderstandingProvider } from "../../../media-understanding/registry.js";
6
- import { openDashScopeStreamingStt } from "../../dashscope/streaming-stt-session.js";
7
8
  //#region src/voice/stt/providers/xopc-cloud-transcription.ts
8
9
  init_model_catalog_store();
9
10
  init_provider_auth_service();
10
11
  init_xopc_cloud_config();
11
- const DEFAULT_STREAMING_MODEL = "qwen-audio-3.0-asr-flash-streaming";
12
12
  function defaultModel() {
13
13
  const source = getModelCatalogStore().getSource("xopc-cloud");
14
- return source?.models.filter((model) => model.availability === "available" && model.kind === "stt").sort((left, right) => compareCatalogModels(left, right, source.recommended?.stt))[0]?.id;
14
+ return source?.models.filter((model) => model.availability === "available" && model.kind === "stt" && model.voice?.modes.includes("transcription")).sort((left, right) => compareCatalogModels(left, right, source.recommended?.stt))[0]?.id;
15
15
  }
16
16
  const xopcCloudTranscriptionProvider = {
17
17
  id: "xopc-cloud",
@@ -22,6 +22,7 @@ const xopcCloudTranscriptionProvider = {
22
22
  transcribeAudio: async (request) => {
23
23
  const model = request.model ?? defaultModel();
24
24
  if (!model) throw new Error("No XOPC Cloud speech-to-text model is available");
25
+ requirePlatformVoiceModel(model, "transcription");
25
26
  const accessToken = await getProviderAuthService().resolveApiKey("xopc-cloud", request.signal);
26
27
  if (!accessToken) throw new Error("XOPC Cloud authorization is unavailable");
27
28
  const source = getModelCatalogStore().getSource("xopc-cloud");
@@ -50,22 +51,28 @@ const xopcCloudTranscriptionProvider = {
50
51
  streamingAudio: {
51
52
  inputSampleRates: [16e3],
52
53
  turnDetection: ["server_vad"],
53
- defaultModel: DEFAULT_STREAMING_MODEL,
54
- models: [DEFAULT_STREAMING_MODEL]
54
+ get defaultModel() {
55
+ return platformVoiceModels("transcription.stream")[0]?.id ?? "";
56
+ },
57
+ get models() {
58
+ return platformVoiceModels("transcription.stream").map((model) => model.id);
59
+ }
55
60
  },
56
61
  openAudioStream: async (request) => {
62
+ const catalogModel = requirePlatformVoiceModel(request.model, "transcription.stream");
57
63
  const accessToken = await getProviderAuthService().resolveApiKey("xopc-cloud", request.signal);
58
64
  if (!accessToken) throw new Error("XOPC Cloud authorization is unavailable");
59
65
  const source = getModelCatalogStore().getSource("xopc-cloud");
60
66
  const baseUrl = (request.baseUrl ?? source?.baseUrl ?? resolveXopcModelRouterUrl()).replace(/\/+$/, "");
61
67
  const relayUrl = new URL(`${baseUrl}/audio/transcriptions/realtime`);
62
68
  relayUrl.protocol = relayUrl.protocol === "https:" ? "wss:" : "ws:";
63
- relayUrl.searchParams.set("model", request.model || DEFAULT_STREAMING_MODEL);
64
- return openDashScopeStreamingStt({
69
+ relayUrl.searchParams.set("model", request.model);
70
+ relayUrl.searchParams.set("service_version", String(catalogModel.voice.serviceVersion));
71
+ return openPlatformStt({
65
72
  ...request,
66
73
  apiKey: accessToken,
67
74
  baseUrl: relayUrl.toString(),
68
- model: request.model || DEFAULT_STREAMING_MODEL
75
+ model: request.model
69
76
  });
70
77
  }
71
78
  };
@@ -3,7 +3,8 @@ import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../../../prov
3
3
  import { getProviderAuthService, init_provider_auth_service } from "../../../providers/provider-auth-service.js";
4
4
  import { compareCatalogModels } from "../../../providers/model-catalog-ranking.js";
5
5
  import { registerSpeechProvider } from "../speech-registry.js";
6
- import { openDashScopeStreamingTts } from "../../dashscope/streaming-tts-stream.js";
6
+ import { openPlatformTts } from "../../platform-streams.js";
7
+ import { requirePlatformVoiceModel } from "../../platform-catalog.js";
7
8
  //#region src/voice/tts/providers/xopc-cloud-speech.ts
8
9
  init_model_catalog_store();
9
10
  init_provider_auth_service();
@@ -37,11 +38,11 @@ const xopcCloudSpeechProvider = {
37
38
  resolveConfig: ({ rawConfig }) => {
38
39
  const raw = rawConfig["xopc-cloud"];
39
40
  const slice = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : {};
40
- const model = typeof slice.model === "string" ? slice.model : availableModels()[0]?.id;
41
+ const model = typeof slice.model === "string" ? slice.model : availableModels().find((model) => model.voice?.modes.includes("speech"))?.id;
41
42
  const catalogModel = availableModels().find((entry) => entry.id === model);
42
43
  return {
43
44
  model,
44
- voice: typeof slice.voice === "string" ? slice.voice : catalogModel?.tts?.defaultVoice,
45
+ voice: typeof slice.voice === "string" ? slice.voice : catalogModel?.voice?.defaultVoice,
45
46
  speed: readSpeed(slice.speed),
46
47
  instructions: typeof slice.instructions === "string" && slice.instructions.trim() ? slice.instructions.trim() : void 0,
47
48
  baseUrl: typeof slice.baseUrl === "string" ? slice.baseUrl : getModelCatalogStore().getSource("xopc-cloud")?.baseUrl ?? resolveXopcModelRouterUrl()
@@ -54,18 +55,10 @@ const xopcCloudSpeechProvider = {
54
55
  listVoices: async ({ providerConfig }) => {
55
56
  const config = readConfig(providerConfig ?? {});
56
57
  if (!config.model) return [];
57
- const token = await getProviderAuthService().resolveApiKey("xopc-cloud");
58
- if (!token) return [];
59
- const response = await fetch(`${config.baseUrl.replace(/\/+$/, "")}/audio/voices?model=${encodeURIComponent(config.model)}`, {
60
- headers: { authorization: `Bearer ${token}` },
61
- signal: AbortSignal.timeout(3e4),
62
- redirect: "error"
63
- });
64
- if (!response.ok) return [];
65
- return ((await response.json().catch(() => null))?.data ?? []).filter((voice) => typeof voice.id === "string").map((voice) => ({
66
- id: voice.id,
67
- ...typeof voice.name === "string" ? { name: voice.name } : {}
68
- }));
58
+ return availableModels().find((model) => model.id === config.model)?.voice?.voices.map(({ id, name }) => ({
59
+ id,
60
+ name
61
+ })) ?? [];
69
62
  },
70
63
  synthesize: async (request) => {
71
64
  const config = readConfig(request.providerConfig);
@@ -73,6 +66,7 @@ const xopcCloudSpeechProvider = {
73
66
  const voice = typeof request.providerOverrides?.voice === "string" ? request.providerOverrides.voice : config.voice;
74
67
  if (!model || !voice) throw new Error("XOPC Cloud TTS model or voice is unavailable");
75
68
  const catalogModel = availableModels().find((entry) => entry.id === model);
69
+ requirePlatformVoiceModel(model, "speech");
76
70
  if (!catalogModel) throw new Error(`XOPC Cloud TTS model is unavailable: ${model}`);
77
71
  const speed = readSpeed(request.providerOverrides?.speed ?? config.speed);
78
72
  const instructions = typeof request.providerOverrides?.instructions === "string" ? request.providerOverrides.instructions.trim() : config.instructions;
@@ -115,18 +109,17 @@ const xopcCloudSpeechProvider = {
115
109
  const model = typeof request.providerOverrides?.model === "string" ? request.providerOverrides.model : config.model;
116
110
  const voice = typeof request.providerOverrides?.voice === "string" ? request.providerOverrides.voice : config.voice;
117
111
  if (!model || !voice) throw new Error("XOPC Cloud realtime TTS model or voice is unavailable");
118
- const catalogModel = availableModels().find((entry) => entry.id === model);
119
- if (!catalogModel?.tts?.streaming || !catalogModel.tts.outputFormats.includes("pcm")) throw new Error(`XOPC Cloud TTS model does not support PCM streaming: ${model}`);
112
+ const catalogModel = requirePlatformVoiceModel(model, "speech.stream");
120
113
  const token = await getProviderAuthService().resolveApiKey("xopc-cloud", request.signal);
121
114
  if (!token) throw new Error("XOPC Cloud authorization is unavailable");
122
115
  const relayUrl = new URL(`${config.baseUrl.replace(/\/+$/, "")}/audio/speech/realtime`);
123
116
  relayUrl.protocol = relayUrl.protocol === "https:" ? "wss:" : "ws:";
124
117
  relayUrl.searchParams.set("model", model);
118
+ relayUrl.searchParams.set("service_version", String(catalogModel.voice.serviceVersion));
125
119
  const instructions = typeof request.providerOverrides?.instructions === "string" ? request.providerOverrides.instructions.trim() : config.instructions;
126
- return openDashScopeStreamingTts({
120
+ return openPlatformTts({
127
121
  apiKey: token,
128
122
  baseUrl: relayUrl.toString(),
129
- model,
130
123
  voice,
131
124
  text: request.text,
132
125
  ...instructions ? { instructions } : {},
@@ -7,14 +7,14 @@ import { ActivityService } from "../activity/service.js";
7
7
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
8
8
  import { init_session_key, resolveConversationId } from "../routing/session-key.js";
9
9
  import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
10
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
11
10
  import { init_providers, resolveModel } from "../providers/index.js";
11
+ import { isLocalModelBaseUrl } from "../providers/model-call.js";
12
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
12
13
  import { writeKnowledgeItem } from "../knowledge-memory/repository.js";
13
14
  import "../knowledge-memory/index.js";
14
15
  import { createPriorityWindow, createUserGoal } from "../user-model/goals.js";
15
16
  import { getAssertionSlot, getUserAssertion, linkAssertionEvidence, reconcileAssertion, setAssertionStatus } from "../user-model/repository.js";
16
17
  import "../user-model/index.js";
17
- import { isLocalModelBaseUrl } from "../providers/model-call.js";
18
18
  import { allowsRemoteSourceProcessing } from "../user-context/sources/processing-policy.js";
19
19
  import { analyzeUnderstandingSources, analyzeWorkContext, workDiscoveryResultMarkdown } from "./analyzer.js";
20
20
  import { createUnderstandingSourceRun, getUnderstandingSourceRun, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
@@ -1,8 +1,8 @@
1
1
  import { TaskRunRepository, init_task_run_repository } from "../../tasks/task-run-repository.js";
2
2
  import { init_conversation_repository, resolveRoutedConversation } from "../../storage/sqlite/conversation-repository.js";
3
3
  import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
4
- import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
5
4
  import { init_providers, resolveModel } from "../../providers/index.js";
5
+ import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
6
6
  import { TaskRepository } from "../../tasks/task-repository.js";
7
7
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
8
8
  import { getProjectWorkspacePathForSession } from "../../projects/workspace.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.286",
3
+ "version": "0.0.291",
4
4
  "description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -167,10 +167,12 @@
167
167
  "vitest": "4.1.5",
168
168
  "vue": "^3.5.35",
169
169
  "@xopcai/browser-control-contract": "0.1.0",
170
+ "@xopcai/computer-control-contract": "0.1.0",
171
+ "@xopcai/endpoint-tools-client": "0.0.0",
170
172
  "@xopcai/endpoint-tools-protocol": "0.0.0",
171
173
  "@xopcai/gateway-contract": "0.0.0",
172
- "@xopcai/realtime-protocol": "0.0.0",
173
- "@xopcai/realtime-client": "0.0.0"
174
+ "@xopcai/realtime-client": "0.0.0",
175
+ "@xopcai/realtime-protocol": "0.0.0"
174
176
  },
175
177
  "scripts": {
176
178
  "assets:brand": "node scripts/generate-brand-assets.mjs",
@@ -236,7 +238,8 @@
236
238
  "build:extensions-ui": "node scripts/build-extensions-ui.mjs",
237
239
  "pack:browser-ext": "pnpm -C packages/browser-ext run pack",
238
240
  "sync:browser-ext-version": "node scripts/sync-browser-ext-version.mjs",
239
- "electron:native:build": "node scripts/build-voice-hotkey-helper.mjs",
241
+ "computer:driver:setup": "node scripts/setup-computer-driver.mjs",
242
+ "electron:native:build": "node scripts/build-voice-hotkey-helper.mjs && node scripts/setup-computer-driver.mjs",
240
243
  "electron:dev": "pnpm run electron:native:build && cross-env ELECTRON_ENTRY=out/main/index.js electron-vite dev",
241
244
  "electron:vite:build": "cross-env ELECTRON_ENTRY=out/main/index.js electron-vite build",
242
245
  "electron:vite:build:package": "cross-env ELECTRON_ENTRY=out/main/index.js ELECTRON_VITE_SKIP_RENDERER=1 electron-vite build",
@@ -2,6 +2,13 @@
2
2
  name: algorithmic-art
3
3
  description: Design reproducible, interactive generative-art studies as self-contained browser artifacts or workspace assets.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "Algorithmic Art"
8
+ description: "Design reproducible, interactive generative-art studies as self-contained browser artifacts or workspace assets."
9
+ zh-CN:
10
+ name: "算法艺术"
11
+ description: "设计可复现、可交互的生成艺术作品,并输出为独立浏览器作品或工作区资产。"
5
12
  xopc:
6
13
  emoji: "✨"
7
14
  requires_tools:
@@ -1,6 +1,14 @@
1
1
  ---
2
2
  name: frontend-design
3
3
  description: Create distinctive, production-grade frontend interfaces, pages, components, dashboards, and HTML/CSS layouts.
4
+ metadata:
5
+ i18n:
6
+ en:
7
+ name: "Frontend Design"
8
+ description: "Create distinctive, production-grade frontend interfaces, pages, components, dashboards, and HTML/CSS layouts."
9
+ zh-CN:
10
+ name: "前端设计"
11
+ description: "创建风格鲜明、可用于生产的前端界面、页面、组件、仪表盘及 HTML/CSS 布局。"
4
12
  license: Complete terms in LICENSE.txt
5
13
  ---
6
14
 
@@ -2,6 +2,13 @@
2
2
  name: hatch-pet
3
3
  description: Create and install a custom animated xopc desktop pet from a user description.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "Hatch Pet"
8
+ description: "Create and install a custom animated XOPC desktop pet from a user description."
9
+ zh-CN:
10
+ name: "孵化桌面宠物"
11
+ description: "根据用户描述创建并安装自定义的 XOPC 动画桌面宠物。"
5
12
  xopc:
6
13
  activates_capabilities:
7
14
  - desktop-pet-authoring
@@ -1,6 +1,14 @@
1
1
  ---
2
2
  name: theme-factory
3
3
  description: Apply or generate cohesive color and font themes for artifacts, slides, documents, reports, and landing pages.
4
+ metadata:
5
+ i18n:
6
+ en:
7
+ name: "Theme Factory"
8
+ description: "Apply or generate cohesive color and font themes for artifacts, slides, documents, reports, and landing pages."
9
+ zh-CN:
10
+ name: "主题工厂"
11
+ description: "为作品、幻灯片、文档、报告和落地页应用或生成协调统一的配色与字体主题。"
4
12
  license: Complete terms in LICENSE.txt
5
13
  ---
6
14
 
@@ -2,6 +2,13 @@
2
2
  name: doc-coauthoring
3
3
  description: Co-author substantial proposals, specifications, RFCs, and decision documents through context, structure, and reader-focused review.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "Document Co-authoring"
8
+ description: "Co-author substantial proposals, specifications, RFCs, and decision documents through context, structure, and reader-focused review."
9
+ zh-CN:
10
+ name: "文档协作撰写"
11
+ description: "通过梳理背景、搭建结构和面向读者的审阅,共同撰写提案、规范、RFC 与决策文档。"
5
12
  xopc:
6
13
  emoji: "🤝"
7
14
  requires_tools:
@@ -2,6 +2,13 @@
2
2
  name: docx
3
3
  description: Create, inspect, edit, render, and validate Word DOCX artifacts while preserving templates and tracked content.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "Word Documents"
8
+ description: "Create, inspect, edit, render, and validate Word DOCX artifacts while preserving templates and tracked content."
9
+ zh-CN:
10
+ name: "Word 文档"
11
+ description: "在保留模板和修订内容的同时,创建、检查、编辑、渲染并验证 Word DOCX 文档。"
5
12
  xopc:
6
13
  emoji: "📝"
7
14
  requires_tools:
@@ -2,6 +2,13 @@
2
2
  name: pdf
3
3
  description: Read, create, inspect, combine, split, rotate, and validate PDF artifacts in the current workspace.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "PDF Documents"
8
+ description: "Read, create, inspect, combine, split, rotate, and validate PDF artifacts in the current workspace."
9
+ zh-CN:
10
+ name: "PDF 文档"
11
+ description: "在当前工作区中读取、创建、检查、合并、拆分、旋转并验证 PDF 文档。"
5
12
  xopc:
6
13
  emoji: "📄"
7
14
  requires_tools:
@@ -2,6 +2,13 @@
2
2
  name: pptx
3
3
  description: Create, inspect, edit, render, and validate PowerPoint PPTX presentations with deliberate visual hierarchy.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "PowerPoint Presentations"
8
+ description: "Create, inspect, edit, render, and validate PowerPoint PPTX presentations with deliberate visual hierarchy."
9
+ zh-CN:
10
+ name: "PowerPoint 演示文稿"
11
+ description: "创建、检查、编辑、渲染并验证具有清晰视觉层级的 PowerPoint PPTX 演示文稿。"
5
12
  xopc:
6
13
  emoji: "📊"
7
14
  requires_tools:
@@ -1,6 +1,14 @@
1
1
  ---
2
2
  name: xlsx
3
3
  description: "Create, read, edit, clean, format, chart, or convert spreadsheet files such as .xlsx, .xlsm, .csv, and .tsv."
4
+ metadata:
5
+ i18n:
6
+ en:
7
+ name: "Spreadsheets"
8
+ description: "Create, read, edit, clean, format, chart, or convert spreadsheet files such as .xlsx, .xlsm, .csv, and .tsv."
9
+ zh-CN:
10
+ name: "电子表格"
11
+ description: "创建、读取、编辑、清理、格式化、绘图或转换 .xlsx、.xlsm、.csv 和 .tsv 等电子表格文件。"
4
12
  license: Proprietary. LICENSE.txt has complete terms
5
13
  ---
6
14
 
@@ -289,4 +297,4 @@ The script returns JSON with error details:
289
297
  **For Excel files themselves**:
290
298
  - Add comments to cells with complex formulas or important assumptions
291
299
  - Document data sources for hardcoded values
292
- - Include notes for key calculations and model sections
300
+ - Include notes for key calculations and model sections
@@ -2,6 +2,13 @@
2
2
  name: build-xopc-local-app
3
3
  description: Build and iteratively improve a user-owned local XOPC app while preserving its stable extension identity, UI sandbox, and Phase 1 capability boundary.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "Build XOPC Local App"
8
+ description: "Build and iteratively improve a user-owned local XOPC app while preserving its stable extension identity, UI sandbox, and Phase 1 capability boundary."
9
+ zh-CN:
10
+ name: "构建 XOPC 本地应用"
11
+ description: "构建并迭代改进用户拥有的 XOPC 本地应用,同时保持稳定的扩展身份、UI 沙箱和第一阶段能力边界。"
5
12
  xopc:
6
13
  emoji: "🧩"
7
14
  requires_tools:
@@ -2,6 +2,13 @@
2
2
  name: define-task
3
3
  description: Define, create, or refine an explicitly requested persistent xopc Task with a verifiable Task Contract; do not use for ordinary one-off work.
4
4
  metadata:
5
+ i18n:
6
+ en:
7
+ name: "Define Task"
8
+ description: "Define, create, or refine an explicitly requested persistent XOPC Task with a verifiable Task Contract; do not use for ordinary one-off work."
9
+ zh-CN:
10
+ name: "定义任务"
11
+ description: "为用户明确要求的持久 XOPC 任务定义、创建或完善可验证的任务契约;不用于普通的一次性工作。"
5
12
  xopc:
6
13
  emoji: "🎯"
7
14
  requires_tools:
@@ -1,6 +1,14 @@
1
1
  ---
2
2
  name: diagnose
3
3
  description: Disciplined reproduce → minimise → hypothesise → instrument → fix loop for hard bugs and performance regressions.
4
+ metadata:
5
+ i18n:
6
+ en:
7
+ name: "Diagnose"
8
+ description: "A disciplined reproduce, minimize, hypothesize, instrument, and fix loop for difficult bugs and performance regressions."
9
+ zh-CN:
10
+ name: "问题诊断"
11
+ description: "以复现、最小化、提出假设、插桩验证和修复为闭环,诊断疑难缺陷与性能回退。"
4
12
  ---
5
13
 
6
14
  # Diagnose
@@ -1,6 +1,14 @@
1
1
  ---
2
2
  name: tdd
3
3
  description: Test-driven development using a red-green-refactor loop for features, bug fixes, and integration tests.
4
+ metadata:
5
+ i18n:
6
+ en:
7
+ name: "Test-Driven Development"
8
+ description: "Test-driven development using a red-green-refactor loop for features, bug fixes, and integration tests."
9
+ zh-CN:
10
+ name: "测试驱动开发"
11
+ description: "使用红灯、绿灯、重构循环完成新功能、缺陷修复和集成测试。"
4
12
  ---
5
13
 
6
14
  # Test-Driven Development
@@ -1,6 +1,14 @@
1
1
  ---
2
2
  name: find-skills
3
3
  description: Find and evaluate installable agent skills across the XOPC Store, ClawHub, and skills.sh. Use when a user asks whether a skill exists, wants capability recommendations, or wants help choosing a high-value skill.
4
+ metadata:
5
+ i18n:
6
+ en:
7
+ name: "Find Skills"
8
+ description: "Find and evaluate installable agent skills across the XOPC Store, ClawHub, and skills.sh."
9
+ zh-CN:
10
+ name: "查找技能"
11
+ description: "在 XOPC Store、ClawHub 和 skills.sh 中查找并评估可安装的智能体技能。"
4
12
  ---
5
13
 
6
14
  # Find Skills
@@ -3,6 +3,13 @@ name: github
3
3
  description: "Interact with GitHub using the `gh` CLI for issues, PRs, CI runs, and advanced API queries."
4
4
  license: MIT
5
5
  metadata:
6
+ i18n:
7
+ en:
8
+ name: "GitHub"
9
+ description: "Interact with GitHub using the gh CLI for issues, pull requests, CI runs, and advanced API queries."
10
+ zh-CN:
11
+ name: "GitHub"
12
+ description: "使用 gh CLI 操作 GitHub 的 Issue、拉取请求、CI 任务和高级 API 查询。"
6
13
  xopc:
7
14
  requires_toolsets: [terminal]
8
15
  requires:
@@ -1,6 +1,14 @@
1
1
  ---
2
2
  name: summarize
3
3
  description: Summarize URLs, files, and YouTube videos.
4
+ metadata:
5
+ i18n:
6
+ en:
7
+ name: "Summarize"
8
+ description: "Summarize URLs, files, and YouTube videos."
9
+ zh-CN:
10
+ name: "内容摘要"
11
+ description: "总结网页链接、文件和 YouTube 视频内容。"
4
12
  license: MIT
5
13
  ---
6
14
 
@@ -3,6 +3,13 @@ name: webapp-testing
3
3
  description: Test local web applications with Playwright scripts, screenshots, browser logs, and UI behavior checks.
4
4
  license: Complete terms in LICENSE.txt
5
5
  metadata:
6
+ i18n:
7
+ en:
8
+ name: "Web App Testing"
9
+ description: "Test local web applications with Playwright scripts, screenshots, browser logs, and UI behavior checks."
10
+ zh-CN:
11
+ name: "Web 应用测试"
12
+ description: "使用 Playwright 脚本、截图、浏览器日志和界面行为检查来测试本地 Web 应用。"
6
13
  xopc:
7
14
  requires_toolsets: [terminal]
8
15
  ---
@@ -96,4 +103,4 @@ with sync_playwright() as p:
96
103
  - **examples/** - Examples showing common patterns:
97
104
  - `element_discovery.py` - Discovering buttons, links, and inputs on a page
98
105
  - `static_html_automation.py` - Using file:// URLs for local HTML
99
- - `console_logging.py` - Capturing console logs during automation
106
+ - `console_logging.py` - Capturing console logs during automation