@xopcai/xopc 0.0.412 → 0.0.414

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 (280) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BrGZdh5N.js → agent-avatar-dicebear-ClobpdW3.js} +1 -1
  4. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-mf0jgEPE.js +1 -0
  5. package/dist/gateway/static/root/assets/agents-CKhZ4UYQ.js +77 -0
  6. package/dist/gateway/static/root/assets/{agents-admin-api-uGDeJR1f.js → agents-admin-api-CeBkHnl8.js} +1 -1
  7. package/dist/gateway/static/root/assets/app-management-settings-panel-CLunLNGp.js +1 -0
  8. package/dist/gateway/static/root/assets/app-window-DXFNqt_0.js +1 -0
  9. package/dist/gateway/static/root/assets/appearance-settings-DBEgoE9g.js +1 -0
  10. package/dist/gateway/static/root/assets/apps-page-BZ_MaQJf.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-DAmsio91.js → archive-plugin-JElK4Goq.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-BVutrwON.js → automations-page-CZ0UqwyU.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-workspace-CHUDHNVL.js +8 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-41QCRAxz.js → binary-plugins-CXFawow6.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-BQ8AA-Ot.js → block-editor-BoduwSYI.js} +30 -30
  16. package/dist/gateway/static/root/assets/{browser-automation-inputs-D4-vQc4g.js → browser-automation-inputs-D1pDgMJu.js} +1 -1
  17. package/dist/gateway/static/root/assets/browser-automations-page-DStDm9y1.js +3 -0
  18. package/dist/gateway/static/root/assets/browser-settings-page-6I4oetKt.js +3 -0
  19. package/dist/gateway/static/root/assets/capabilities-Bpeh6E22.js +1 -0
  20. package/dist/gateway/static/root/assets/capabilities-page-C-EecWbS.js +2 -0
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-BQoCPk3x.js +8 -0
  22. package/dist/gateway/static/root/assets/{capability-header-actions-CDgI-YZF.js → capability-header-actions-BasrAWA0.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-BKf_-Mdt.js +1 -0
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-CUkCx_9x.js → chat-terminal-dock-CwQbzcZ_.js} +2 -2
  25. package/dist/gateway/static/root/assets/chevron-down-ccbiQQz_.js +1 -0
  26. package/dist/gateway/static/root/assets/computer-settings-page-DNWeJKfF.js +1 -0
  27. package/dist/gateway/static/root/assets/{connector-service-page-49mgdRET.js → connector-service-page-CxHgC5RM.js} +1 -1
  28. package/dist/gateway/static/root/assets/connectors-page-CUBg8spT.js +1 -0
  29. package/dist/gateway/static/root/assets/{date-picker-BpBjADAk.js → date-picker-CXxLbLJb.js} +1 -1
  30. package/dist/gateway/static/root/assets/dependency-picker-DVuWMrSj.js +1 -0
  31. package/dist/gateway/static/root/assets/desktop-pet-KbVLtAlO.js +1 -0
  32. package/dist/gateway/static/root/assets/desktop-pet-settings-BDlg9g4s.js +1 -0
  33. package/dist/gateway/static/root/assets/device-pairing-wizard-PmP_vGem.js +1 -0
  34. package/dist/gateway/static/root/assets/{directory-picker-path-field-DwXqp_iu.js → directory-picker-path-field-a7xEodzo.js} +1 -1
  35. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +1 -0
  36. package/dist/gateway/static/root/assets/extension-debug-page-CHelH5u_.js +1 -0
  37. package/dist/gateway/static/root/assets/{extension-page-Bri62YsN.js → extension-page-CrVHmS9-.js} +1 -1
  38. package/dist/gateway/static/root/assets/extension-settings-page-CiMybi0r.js +1 -0
  39. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +1 -0
  40. package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +1 -0
  41. package/dist/gateway/static/root/assets/{gateway-config-swr-BVqYVaGy.js → gateway-config-swr-DF_HV6NP.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-realtime-CY1LBGBS.js → gateway-realtime-DMAzNlm-.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-realtime-store-CoIgC1Al.js +1 -0
  44. package/dist/gateway/static/root/assets/gateway-settings-DnrQ28E2.js +1 -0
  45. package/dist/gateway/static/root/assets/{gateway-startup-retry-CPKGkr6D.js → gateway-startup-retry-B91CBTzO.js} +1 -1
  46. package/dist/gateway/static/root/assets/highlight-code-AMjU04kR.js +1 -0
  47. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-Ci1QpkBn.js → highlighted-body-KQOG7T2V-8ACAVktj.js} +1 -1
  48. package/dist/gateway/static/root/assets/home-page-pTwVME-g.js +2 -0
  49. package/dist/gateway/static/root/assets/{image-generation-api-N5MYXlxr.js → image-generation-api-CVBaWmrV.js} +1 -1
  50. package/dist/gateway/static/root/assets/imports-page-C5IP3e6d.js +1 -0
  51. package/dist/gateway/static/root/assets/index-BLL0wKRZ.css +1 -0
  52. package/dist/gateway/static/root/assets/index-ygkHNYyo.js +710 -0
  53. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BhU6VYvd.js +1 -0
  54. package/dist/gateway/static/root/assets/local-app-workbench-page-Cwl6EvuX.js +1 -0
  55. package/dist/gateway/static/root/assets/{local-apps-page-BjzaB1ls.js → local-apps-page-DcP1Bdlk.js} +1 -1
  56. package/dist/gateway/static/root/assets/{local-session-drafts-BCaC-1rH.js → local-session-drafts-DvmwiLUx.js} +1 -1
  57. package/dist/gateway/static/root/assets/{locale-store-DAgpZxAS.js → locale-store-JogcXC4J.js} +1 -1
  58. package/dist/gateway/static/root/assets/logs-page-CS3hcTOq.js +2 -0
  59. package/dist/gateway/static/root/assets/management-settings-DC-Y_-GP.js +1 -0
  60. package/dist/gateway/static/root/assets/{media-plugins-8mlDAjD6.js → media-plugins-BnPpcJ2J.js} +1 -1
  61. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-vckgHpON.js +1 -0
  62. package/dist/gateway/static/root/assets/{messages-DMXSIJUO.js → messages-RzwPiQNL.js} +2 -2
  63. package/dist/gateway/static/root/assets/note-detail-panel-C7u4dxEk.js +5 -0
  64. package/dist/gateway/static/root/assets/note-image-lightbox-jvqYtySx.js +1 -0
  65. package/dist/gateway/static/root/assets/notes-page-Bs7F5Hpf.js +8 -0
  66. package/dist/gateway/static/root/assets/page-context-capture-button-DO_yhXS1.js +1 -0
  67. package/dist/gateway/static/root/assets/personal-page-BexL2-PQ.js +1 -0
  68. package/dist/gateway/static/root/assets/personal-settings-panel-BKA4fbYH.js +1 -0
  69. package/dist/gateway/static/root/assets/phone-dependencies-card-ChFtdFhA.js +1 -0
  70. package/dist/gateway/static/root/assets/phone-model-picker-CZoIAQ1j.js +1 -0
  71. package/dist/gateway/static/root/assets/phone-settings-page-DRyK0nHH.js +1 -0
  72. package/dist/gateway/static/root/assets/plugin-details-dialog-B-N61jJH.js +1 -0
  73. package/dist/gateway/static/root/assets/{preview-open-alternatives-n6Shdp3u.js → preview-open-alternatives-FGqN-mQx.js} +1 -1
  74. package/dist/gateway/static/root/assets/{product-open-page-BPF5rRTI.js → product-open-page-CwnHLfdL.js} +1 -1
  75. package/dist/gateway/static/root/assets/{product-preview-content-BOsGPNbw.js → product-preview-content-BD6k5hF9.js} +1 -1
  76. package/dist/gateway/static/root/assets/project-detail-page-DtKmFBml.js +7 -0
  77. package/dist/gateway/static/root/assets/projects-page-CFZIz9mc.js +1 -0
  78. package/dist/gateway/static/root/assets/{registry-api-B6kqbuw8.js → registry-api-BGqSwITi.js} +1 -1
  79. package/dist/gateway/static/root/assets/remote-access-hub-CWEc7W0m.js +1 -0
  80. package/dist/gateway/static/root/assets/runtime-tools-api-CSm5SpnR.js +5 -0
  81. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-q_oswAdV.js +1 -0
  82. package/dist/gateway/static/root/assets/{schema-form-cXD1BC02.js → schema-form-DoVn5jJK.js} +1 -1
  83. package/dist/gateway/static/root/assets/{session-api-D6-Vz8xK.js → session-api-DTxZyMta.js} +1 -1
  84. package/dist/gateway/static/root/assets/{session-manager-DWbcMHcj.js → session-manager-B2HDomj4.js} +1 -1
  85. package/dist/gateway/static/root/assets/sessions-page-BuPqNxpd.js +1 -0
  86. package/dist/gateway/static/root/assets/settings-advanced-gate-QTVDCGJG.js +1 -0
  87. package/dist/gateway/static/root/assets/{settings-form-section-BXeszXR7.js → settings-form-section-Ce8vVv-9.js} +1 -1
  88. package/dist/gateway/static/root/assets/{settings-page-CNmh4YmR.js → settings-page-DP2w3ejC.js} +1 -1
  89. package/dist/gateway/static/root/assets/{settings-page-layout-Dx5S-Msc.js → settings-page-header-CYpuTXUW.js} +1 -1
  90. package/dist/gateway/static/root/assets/settings-page-layout-B20AfmFG.js +1 -0
  91. package/dist/gateway/static/root/assets/setup-status-panel-ZmlE8jIE.js +1 -0
  92. package/dist/gateway/static/root/assets/{share-preview-page-CS9cOCgX.js → share-preview-page-DV4dKrmG.js} +1 -1
  93. package/dist/gateway/static/root/assets/shares-settings-CtNxWqW-.js +1 -0
  94. package/dist/gateway/static/root/assets/{skill-api-B5lDCuOH.js → skill-api-DTdejInH.js} +1 -1
  95. package/dist/gateway/static/root/assets/skill-reload-api-Egaf8PqZ.js +1 -0
  96. package/dist/gateway/static/root/assets/skills-page-C6FKxf4J.js +2 -0
  97. package/dist/gateway/static/root/assets/system-settings-panel-Baxkhov7.js +1 -0
  98. package/dist/gateway/static/root/assets/task-detail-page-C77-rpkt.js +2 -0
  99. package/dist/gateway/static/root/assets/{task-result-evidence-HJO1BlJm.js → task-result-evidence-DIGSC4qF.js} +1 -1
  100. package/dist/gateway/static/root/assets/tracing-settings-page-BaU8frtc.js +1 -0
  101. package/dist/gateway/static/root/assets/{tunnel-api-DXU94F2Y.js → tunnel-api-BCcOUsqu.js} +1 -1
  102. package/dist/gateway/static/root/assets/usage-page-BFeIbpbi.js +1 -0
  103. package/dist/gateway/static/root/assets/{use-autosave-B1z_TIBu.js → use-autosave-C1X47WVb.js} +1 -1
  104. package/dist/gateway/static/root/assets/user-model-page-u8zY5jea.js +2 -0
  105. package/dist/gateway/static/root/assets/{voice-api-key-field-HOLjEhh3.js → voice-api-key-field-Bk4DQMTw.js} +1 -1
  106. package/dist/gateway/static/root/assets/{voice-config-api-CPKzUb4R.js → voice-config-api-D7xsWrdh.js} +1 -1
  107. package/dist/gateway/static/root/assets/{work-discovery-overlay-C9RklDaR.js → work-discovery-overlay-B7_NmTB5.js} +1 -1
  108. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CWwGTBib.js → xopc-cloud-account-card-CJ_akAvc.js} +1 -1
  109. package/dist/gateway/static/root/index.html +19 -14
  110. package/dist/package.js +1 -1
  111. package/dist/packages/gateway-contract/src/capabilities.js +1 -0
  112. package/dist/src/agent/background-review/prompts.js +4 -3
  113. package/dist/src/agent/embedded/run-turn.js +1 -1
  114. package/dist/src/agent/embedded/xopc-stream-bridge.js +7 -3
  115. package/dist/src/agent/prompt/system-prompt.js +1 -1
  116. package/dist/src/agent/tool-manuals/index.js +7 -0
  117. package/dist/src/agent/tool-manuals/phone.d.ts +1 -0
  118. package/dist/src/agent/tool-manuals/phone.js +16 -0
  119. package/dist/src/agent/tools/factory.js +15 -0
  120. package/dist/src/agent/tools/knowledge-memory-tool.js +1 -1
  121. package/dist/src/agent/tools/personal-task-tool.d.ts +2 -1
  122. package/dist/src/agent/tools/personal-task-tool.js +43 -20
  123. package/dist/src/agent/tools/phone-use-tool.d.ts +8 -0
  124. package/dist/src/agent/tools/phone-use-tool.js +49 -0
  125. package/dist/src/agent/tools/session-recall-tool.js +2 -1
  126. package/dist/src/agent/tools/session-search-tool.js +11 -5
  127. package/dist/src/agent/tools/user-context-tool.js +1 -1
  128. package/dist/src/agent-config/index.js +2 -2
  129. package/dist/src/agent-config/resolver.js +5 -0
  130. package/dist/src/agent-config/schema.d.ts +24 -0
  131. package/dist/src/agent-config/schema.js +5 -2
  132. package/dist/src/cli/command-manifest.js +1 -1
  133. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  134. package/dist/src/cli/commands/extension.js +2 -2
  135. package/dist/src/cli/commands/runtime.js +32 -4
  136. package/dist/src/computer/diagnostics.d.ts +1 -1
  137. package/dist/src/config/models-json.d.ts +36 -0
  138. package/dist/src/config/models-json.js +9 -0
  139. package/dist/src/config/schema.d.ts +12 -0
  140. package/dist/src/config/schema.js +6 -2
  141. package/dist/src/extensions/update.js +1 -1
  142. package/dist/src/gateway/agent-builtin-tools.d.ts +7 -1
  143. package/dist/src/gateway/agent-builtin-tools.js +7 -0
  144. package/dist/src/gateway/global-defaults-admin.js +2 -0
  145. package/dist/src/gateway/hono/lib/config-payload.d.ts +8 -0
  146. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  147. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  148. package/dist/src/gateway/hono/routes/models.js +3 -0
  149. package/dist/src/gateway/hono/routes/phone-dependencies.d.ts +3 -0
  150. package/dist/src/gateway/hono/routes/phone-dependencies.js +137 -0
  151. package/dist/src/gateway/hono/routes/phone.d.ts +4 -0
  152. package/dist/src/gateway/hono/routes/phone.js +466 -0
  153. package/dist/src/gateway/hono/routes/runtime-tools.js +2 -0
  154. package/dist/src/gateway/server.js +1 -0
  155. package/dist/src/gateway/service/config-coordinator.d.ts +8 -0
  156. package/dist/src/gateway/service/config-coordinator.js +1 -1
  157. package/dist/src/gateway/service.d.ts +2 -0
  158. package/dist/src/gateway/service.js +12 -7
  159. package/dist/src/infra/update-runner.js +1 -1
  160. package/dist/src/knowledge-memory/repository.js +5 -0
  161. package/dist/src/memory-learning/forget-capture.js +12 -3
  162. package/dist/src/memory-learning/forgotten-history.d.ts +4 -0
  163. package/dist/src/memory-learning/forgotten-history.js +71 -4
  164. package/dist/src/memory-learning/work-capture.d.ts +1 -0
  165. package/dist/src/memory-learning/work-capture.js +28 -17
  166. package/dist/src/personal-agent/prompts.js +3 -2
  167. package/dist/src/phone/adb-driver.d.ts +38 -0
  168. package/dist/src/phone/adb-driver.js +392 -0
  169. package/dist/src/phone/app-access.d.ts +10 -0
  170. package/dist/src/phone/app-access.js +21 -0
  171. package/dist/src/phone/applications.d.ts +4 -0
  172. package/dist/src/phone/applications.js +49 -0
  173. package/dist/src/phone/cloud-adb.d.ts +35 -0
  174. package/dist/src/phone/cloud-adb.js +273 -0
  175. package/dist/src/phone/cloud-phones.d.ts +29 -0
  176. package/dist/src/phone/cloud-phones.js +142 -0
  177. package/dist/src/phone/cloud-scrcpy.d.ts +20 -0
  178. package/dist/src/phone/cloud-scrcpy.js +123 -0
  179. package/dist/src/phone/contracts.d.ts +212 -0
  180. package/dist/src/phone/contracts.js +116 -0
  181. package/dist/src/phone/interactive-session.d.ts +34 -0
  182. package/dist/src/phone/interactive-session.js +164 -0
  183. package/dist/src/phone/live-provider.d.ts +57 -0
  184. package/dist/src/phone/live-provider.js +18 -0
  185. package/dist/src/phone/live-state.d.ts +28 -0
  186. package/dist/src/phone/live-state.js +71 -0
  187. package/dist/src/phone/model-adapter.d.ts +31 -0
  188. package/dist/src/phone/model-adapter.js +350 -0
  189. package/dist/src/phone/repository.d.ts +19 -0
  190. package/dist/src/phone/repository.js +101 -0
  191. package/dist/src/phone/runtime.d.ts +88 -0
  192. package/dist/src/phone/runtime.js +924 -0
  193. package/dist/src/phone/scrcpy-assets.d.ts +4 -0
  194. package/dist/src/phone/scrcpy-assets.js +16 -0
  195. package/dist/src/phone/scrcpy.d.ts +59 -0
  196. package/dist/src/phone/scrcpy.js +337 -0
  197. package/dist/src/phone/stream-gateway.d.ts +26 -0
  198. package/dist/src/phone/stream-gateway.js +210 -0
  199. package/dist/src/process/phone-process.d.ts +4 -0
  200. package/dist/src/process/phone-process.js +38 -0
  201. package/dist/src/providers/extension-stream-bridge.js +8 -1
  202. package/dist/src/providers/model-call.js +6 -2
  203. package/dist/src/providers/model-catalog-persistence.js +3 -0
  204. package/dist/src/providers/model-catalog-types.d.ts +3 -0
  205. package/dist/src/providers/model-reference-auditor.js +5 -1
  206. package/dist/src/providers/model-registry.js +3 -0
  207. package/dist/src/runtime-tools/archive.d.ts +2 -2
  208. package/dist/src/runtime-tools/downloader.d.ts +2 -2
  209. package/dist/src/runtime-tools/errors.d.ts +3 -3
  210. package/dist/src/runtime-tools/phone-dependencies.d.ts +40 -0
  211. package/dist/src/runtime-tools/phone-dependencies.js +188 -0
  212. package/dist/src/runtime-tools/phone-dependency-catalog.d.ts +16 -0
  213. package/dist/src/runtime-tools/phone-dependency-catalog.js +51 -0
  214. package/dist/src/runtime-tools/types.d.ts +1 -0
  215. package/dist/src/storage/sqlite/context-extraction-repository.d.ts +1 -0
  216. package/dist/src/storage/sqlite/context-extraction-repository.js +12 -2
  217. package/dist/src/tasks/task-research-result.js +19 -2
  218. package/dist/src/usage/cloud-receipts.d.ts +5 -1
  219. package/dist/src/usage/cloud-receipts.js +10 -4
  220. package/dist/src/usage/cloud-wire.d.ts +37 -0
  221. package/dist/src/usage/cloud-wire.js +181 -0
  222. package/dist/src/usage/recorder.js +5 -4
  223. package/dist/src/user-model/capture/semantic.js +2 -2
  224. package/dist/src/voice/platform-catalog.d.ts +3 -0
  225. package/package.json +10 -5
  226. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BjZpom5V.js +0 -1
  227. package/dist/gateway/static/root/assets/agents-s3ws5Qi-.js +0 -77
  228. package/dist/gateway/static/root/assets/app-management-settings-panel-C6DHuX0L.js +0 -1
  229. package/dist/gateway/static/root/assets/appearance-settings-DYGY92Yr.js +0 -1
  230. package/dist/gateway/static/root/assets/apps-page-PpT_YMmD.js +0 -1
  231. package/dist/gateway/static/root/assets/automations-workspace-G6-9IYbR.js +0 -8
  232. package/dist/gateway/static/root/assets/browser-automations-page-o3jNFlCb.js +0 -3
  233. package/dist/gateway/static/root/assets/browser-settings-page-G0dVwiX4.js +0 -3
  234. package/dist/gateway/static/root/assets/capabilities-B9b5KCBb.js +0 -1
  235. package/dist/gateway/static/root/assets/capabilities-page-BZQanmZY.js +0 -2
  236. package/dist/gateway/static/root/assets/capabilities-settings-panel-D-YadSx_.js +0 -8
  237. package/dist/gateway/static/root/assets/channels-3WX3f0bR.js +0 -1
  238. package/dist/gateway/static/root/assets/computer-settings-page-CuZrL9gL.js +0 -1
  239. package/dist/gateway/static/root/assets/connectors-page-Bjj2wAeG.js +0 -1
  240. package/dist/gateway/static/root/assets/dependency-picker-R8kdHLr3.js +0 -1
  241. package/dist/gateway/static/root/assets/desktop-pet-BpiosRqb.js +0 -1
  242. package/dist/gateway/static/root/assets/desktop-pet-settings-9h6evrKB.js +0 -1
  243. package/dist/gateway/static/root/assets/device-pairing-wizard-CZ5lwiLE.js +0 -1
  244. package/dist/gateway/static/root/assets/extension-debug-page-Bj93A2Gn.js +0 -1
  245. package/dist/gateway/static/root/assets/extension-settings-page-BSo6vRhS.js +0 -1
  246. package/dist/gateway/static/root/assets/gateway-realtime-store-Dafw95ol.js +0 -1
  247. package/dist/gateway/static/root/assets/gateway-settings-DgEwWJwz.js +0 -1
  248. package/dist/gateway/static/root/assets/highlight-code-CSFBakwF.js +0 -1
  249. package/dist/gateway/static/root/assets/home-page-BKj-aPsL.js +0 -2
  250. package/dist/gateway/static/root/assets/imports-page-YfaRnpk1.js +0 -1
  251. package/dist/gateway/static/root/assets/index-CiDVRMmX.js +0 -710
  252. package/dist/gateway/static/root/assets/index-caRW34rg.css +0 -1
  253. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BTQcPOix.js +0 -1
  254. package/dist/gateway/static/root/assets/local-app-workbench-page-kCZ_fbSZ.js +0 -1
  255. package/dist/gateway/static/root/assets/logs-page-5Jt3uqYt.js +0 -2
  256. package/dist/gateway/static/root/assets/management-settings-DOQMLPrI.js +0 -1
  257. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-B4nztFE4.js +0 -1
  258. package/dist/gateway/static/root/assets/note-detail-panel-1wsKlkk3.js +0 -5
  259. package/dist/gateway/static/root/assets/note-image-lightbox-B82cToeV.js +0 -1
  260. package/dist/gateway/static/root/assets/notes-page-DKREWOku.js +0 -8
  261. package/dist/gateway/static/root/assets/page-context-capture-button-oSJIFF3E.js +0 -1
  262. package/dist/gateway/static/root/assets/personal-page-CoqQTkkS.js +0 -1
  263. package/dist/gateway/static/root/assets/personal-settings-panel-BgcJLmZN.js +0 -1
  264. package/dist/gateway/static/root/assets/plugin-details-dialog-CdOJ3Tir.js +0 -1
  265. package/dist/gateway/static/root/assets/project-detail-page-ZADyvA7-.js +0 -7
  266. package/dist/gateway/static/root/assets/projects-page-BkRe6Z8S.js +0 -1
  267. package/dist/gateway/static/root/assets/remote-access-hub-CCGf5kF4.js +0 -1
  268. package/dist/gateway/static/root/assets/runtime-tools-api-CY3R7unQ.js +0 -5
  269. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-BxaxVlwM.js +0 -1
  270. package/dist/gateway/static/root/assets/sessions-page-B81rRu2-.js +0 -1
  271. package/dist/gateway/static/root/assets/settings-advanced-gate-DLHGV-I-.js +0 -1
  272. package/dist/gateway/static/root/assets/setup-status-panel-gEqkJWyw.js +0 -1
  273. package/dist/gateway/static/root/assets/shares-settings-D9Ul96XW.js +0 -1
  274. package/dist/gateway/static/root/assets/skill-reload-api-NLAaNaDn.js +0 -1
  275. package/dist/gateway/static/root/assets/skills-page-dWeFt-6J.js +0 -2
  276. package/dist/gateway/static/root/assets/system-settings-panel-DdDsFdCh.js +0 -1
  277. package/dist/gateway/static/root/assets/task-detail-page-DO3FM--W.js +0 -2
  278. package/dist/gateway/static/root/assets/tracing-settings-page-Dm3yToJ1.js +0 -1
  279. package/dist/gateway/static/root/assets/usage-page-DJJhACRJ.js +0 -1
  280. package/dist/gateway/static/root/assets/user-model-page-DnZ4qFaO.js +0 -2
@@ -372,6 +372,12 @@ export declare const CustomModelSchema: z.ZodObject<{
372
372
  "openai-responses-computer-v1": "openai-responses-computer-v1";
373
373
  }>;
374
374
  }, z.core.$strict>>;
375
+ phoneUse: z.ZodOptional<z.ZodObject<{
376
+ profile: z.ZodEnum<{
377
+ "autoglm-phone-v1": "autoglm-phone-v1";
378
+ "structured-phone-v1": "structured-phone-v1";
379
+ }>;
380
+ }, z.core.$strict>>;
375
381
  id: z.ZodString;
376
382
  name: z.ZodOptional<z.ZodString>;
377
383
  api: z.ZodOptional<z.ZodEnum<{
@@ -454,6 +460,12 @@ export declare const ModelOverrideSchema: z.ZodObject<{
454
460
  "openai-responses-computer-v1": "openai-responses-computer-v1";
455
461
  }>;
456
462
  }, z.core.$strict>>;
463
+ phoneUse: z.ZodOptional<z.ZodObject<{
464
+ profile: z.ZodEnum<{
465
+ "autoglm-phone-v1": "autoglm-phone-v1";
466
+ "structured-phone-v1": "structured-phone-v1";
467
+ }>;
468
+ }, z.core.$strict>>;
457
469
  name: z.ZodOptional<z.ZodString>;
458
470
  reasoning: z.ZodOptional<z.ZodBoolean>;
459
471
  thinkingLevelMap: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
@@ -540,6 +552,12 @@ export declare const ProviderConfigSchema: z.ZodObject<{
540
552
  "openai-responses-computer-v1": "openai-responses-computer-v1";
541
553
  }>;
542
554
  }, z.core.$strict>>;
555
+ phoneUse: z.ZodOptional<z.ZodObject<{
556
+ profile: z.ZodEnum<{
557
+ "autoglm-phone-v1": "autoglm-phone-v1";
558
+ "structured-phone-v1": "structured-phone-v1";
559
+ }>;
560
+ }, z.core.$strict>>;
543
561
  id: z.ZodString;
544
562
  name: z.ZodOptional<z.ZodString>;
545
563
  api: z.ZodOptional<z.ZodEnum<{
@@ -622,6 +640,12 @@ export declare const ProviderConfigSchema: z.ZodObject<{
622
640
  "openai-responses-computer-v1": "openai-responses-computer-v1";
623
641
  }>;
624
642
  }, z.core.$strict>>;
643
+ phoneUse: z.ZodOptional<z.ZodObject<{
644
+ profile: z.ZodEnum<{
645
+ "autoglm-phone-v1": "autoglm-phone-v1";
646
+ "structured-phone-v1": "structured-phone-v1";
647
+ }>;
648
+ }, z.core.$strict>>;
625
649
  name: z.ZodOptional<z.ZodString>;
626
650
  reasoning: z.ZodOptional<z.ZodBoolean>;
627
651
  thinkingLevelMap: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
@@ -823,6 +847,12 @@ export declare const ModelsJsonSchema: z.ZodObject<{
823
847
  "openai-responses-computer-v1": "openai-responses-computer-v1";
824
848
  }>;
825
849
  }, z.core.$strict>>;
850
+ phoneUse: z.ZodOptional<z.ZodObject<{
851
+ profile: z.ZodEnum<{
852
+ "autoglm-phone-v1": "autoglm-phone-v1";
853
+ "structured-phone-v1": "structured-phone-v1";
854
+ }>;
855
+ }, z.core.$strict>>;
826
856
  id: z.ZodString;
827
857
  name: z.ZodOptional<z.ZodString>;
828
858
  api: z.ZodOptional<z.ZodEnum<{
@@ -905,6 +935,12 @@ export declare const ModelsJsonSchema: z.ZodObject<{
905
935
  "openai-responses-computer-v1": "openai-responses-computer-v1";
906
936
  }>;
907
937
  }, z.core.$strict>>;
938
+ phoneUse: z.ZodOptional<z.ZodObject<{
939
+ profile: z.ZodEnum<{
940
+ "autoglm-phone-v1": "autoglm-phone-v1";
941
+ "structured-phone-v1": "structured-phone-v1";
942
+ }>;
943
+ }, z.core.$strict>>;
908
944
  name: z.ZodOptional<z.ZodString>;
909
945
  reasoning: z.ZodOptional<z.ZodBoolean>;
910
946
  thinkingLevelMap: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
@@ -1,6 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
3
3
  import { init_paths, resolveModelsJsonPath } from "./paths.js";
4
+ import { PhoneModelMetadataSchema, init_contracts } from "../phone/contracts.js";
4
5
  import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
5
6
  import { init_model_policy, isComputerModel } from "../computer/model-policy.js";
6
7
  import { assertCurrentModelProvider, init_provider_policy } from "../providers/provider-policy.js";
@@ -124,6 +125,11 @@ function validateModelsConfig(config) {
124
125
  });
125
126
  if (providerConfig.models) for (let i = 0; i < providerConfig.models.length; i++) {
126
127
  const model = providerConfig.models[i];
128
+ if (model.phoneUse && (!model.input?.includes("image") || (model.api ?? providerConfig.api) !== "openai-completions")) errors.push({
129
+ path: `providers.${providerName}.models[${i}].phoneUse`,
130
+ message: "Phone Use requires image input and OpenAI Chat Completions",
131
+ severity: "error"
132
+ });
127
133
  if (model.computerUse && !isComputerModel({
128
134
  ...model,
129
135
  api: model.api ?? providerConfig.api
@@ -237,6 +243,7 @@ function modelsJsonExists(path = resolveModelsJsonPath()) {
237
243
  }
238
244
  var OpenRouterRoutingSchema, VercelGatewayRoutingSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenAICompatSchema, ImageGenerationResolutionSchema, ImageGenerationQualitySchema, ImageGenerationOutputFormatSchema, ImageGenerationBackgroundSchema, ImageGeometrySchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, CustomModelSchema, ModelOverrideSchema, ProviderConfigSchema, ModelsJsonSchema, PROVIDER_ID_REGEX, RESERVED_PROVIDER_IDS;
239
245
  var init_models_json = __esmMin((() => {
246
+ init_contracts();
240
247
  init_src();
241
248
  init_write_file_atomic();
242
249
  init_paths();
@@ -374,6 +381,7 @@ var init_models_json = __esmMin((() => {
374
381
  CustomModelSchema = z.object({
375
382
  supportsTools: z.boolean().optional(),
376
383
  computerUse: z.object({ profile: ComputerProfileSchema }).strict().optional(),
384
+ phoneUse: PhoneModelMetadataSchema.optional(),
377
385
  id: z.string().min(1),
378
386
  name: z.string().min(1).optional(),
379
387
  api: z.enum([
@@ -411,6 +419,7 @@ var init_models_json = __esmMin((() => {
411
419
  ModelOverrideSchema = z.object({
412
420
  supportsTools: z.boolean().optional(),
413
421
  computerUse: z.object({ profile: ComputerProfileSchema }).strict().optional(),
422
+ phoneUse: PhoneModelMetadataSchema.optional(),
414
423
  name: z.string().min(1).optional(),
415
424
  reasoning: z.boolean().optional(),
416
425
  thinkingLevelMap: z.partialRecord(z.enum([
@@ -49,6 +49,10 @@ export declare const AgentModelsSchema: z.ZodObject<{
49
49
  primary: z.ZodString;
50
50
  fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
51
51
  }, z.core.$strict>>>;
52
+ phoneUse: z.ZodOptional<z.ZodNullable<z.ZodObject<{
53
+ primary: z.ZodString;
54
+ fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
55
+ }, z.core.$strict>>>;
52
56
  imageGeneration: z.ZodOptional<z.ZodNullable<z.ZodObject<{
53
57
  primary: z.ZodString;
54
58
  fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -1774,6 +1778,14 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1774
1778
  maxSessionDurationMs: z.ZodDefault<z.ZodNumber>;
1775
1779
  idleGrantTtlMs: z.ZodDefault<z.ZodNumber>;
1776
1780
  }, z.core.$strict>>;
1781
+ phone: z.ZodPrefault<z.ZodObject<{
1782
+ enabled: z.ZodDefault<z.ZodBoolean>;
1783
+ adbPath: z.ZodOptional<z.ZodString>;
1784
+ maxActionsPerSession: z.ZodDefault<z.ZodNumber>;
1785
+ maxModelRequests: z.ZodDefault<z.ZodNumber>;
1786
+ maxOperationDurationMs: z.ZodDefault<z.ZodNumber>;
1787
+ maxSessionDurationMs: z.ZodDefault<z.ZodNumber>;
1788
+ }, z.core.$strict>>;
1777
1789
  tunnel: z.ZodOptional<z.ZodDefault<z.ZodObject<{
1778
1790
  enabled: z.ZodDefault<z.ZodBoolean>;
1779
1791
  brokerUrl: z.ZodDefault<z.ZodString>;
@@ -3,13 +3,14 @@ import { AgentModelsOverrideSchema, ImageGenerationRouteSchema, ModelRouteSchema
3
3
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
4
4
  import { init_agent_config } from "../agent-config/index.js";
5
5
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
6
+ import { PhoneConfigSchema, init_contracts } from "../phone/contracts.js";
6
7
  import { getModelUsageOrigin, init_model_usage } from "../providers/model-usage.js";
7
8
  import { TracingConfigSchema, init_config } from "../observability/config.js";
8
9
  import { OutboundProxySchema, init_outbound_proxy } from "./outbound-proxy.js";
9
10
  import { ComputerConfigSchema, init_config as init_config$1 } from "../computer/config.js";
10
11
  import { DEFAULT_CONTEXT_COMPACTION_POLICY, UserContextConfigSchema, init_config as init_config$2 } from "../user-context/config.js";
11
12
  import { init_public_url, validatePublicUrl } from "./public-url.js";
12
- import { PlatformConfigSchema, init_contracts } from "../platform/contracts.js";
13
+ import { PlatformConfigSchema, init_contracts as init_contracts$1 } from "../platform/contracts.js";
13
14
  import { deepseekSearchEndpoint, init_deepseek_protocol } from "../agent/tools/search/providers/deepseek-protocol.js";
14
15
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, init_config_schema } from "../../extensions/telegram/src/config-schema.js";
15
16
  import { WeixinAccountConfigSchema, WeixinConfigSchema, init_config_schema as init_config_schema$1 } from "../../extensions/weixin/src/config-schema.js";
@@ -52,6 +53,7 @@ function parseModelRef(ref) {
52
53
  }
53
54
  var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentModelsSchema, BrowserDriverSchema, BrowserHostnameSchema, BrowserConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, RuntimePreferenceSchema, RuntimeProvisionSchema, RuntimeVersionRequestSchema, LanguageRuntimeSchema, DEFAULT_RUNTIME_TOOLS_CONFIG, RuntimeToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelBrokerUrlSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayWebchatConfigSchema, GatewayConfigSchema, ModelsDevConfigSchema, ModelCatalogConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, UpdateConfigSchema, CommandsConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpExposureSchema, McpOAuthConfigSchema, McpServerSchema, McpConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
54
55
  var init_schema = __esmMin((() => {
56
+ init_contracts();
55
57
  init_model_usage();
56
58
  init_config();
57
59
  init_outbound_proxy();
@@ -60,7 +62,7 @@ var init_schema = __esmMin((() => {
60
62
  init_repository();
61
63
  init_config$2();
62
64
  init_public_url();
63
- init_contracts();
65
+ init_contracts$1();
64
66
  init_deepseek_protocol();
65
67
  init_config_schema();
66
68
  init_config_schema$1();
@@ -1019,6 +1021,7 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1019
1021
  gateway: GatewayConfigSchema,
1020
1022
  browser: BrowserConfigSchema,
1021
1023
  computer: ComputerConfigSchema,
1024
+ phone: PhoneConfigSchema,
1022
1025
  tunnel: TunnelConfigSchema.optional(),
1023
1026
  workspace: WorkspaceConfigSchema,
1024
1027
  tools: ToolsConfigSchema,
@@ -1126,6 +1129,7 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1126
1129
  skillsStoreBaseUrl: "https://store.xopc.ai"
1127
1130
  },
1128
1131
  computer: ComputerConfigSchema.parse({}),
1132
+ phone: PhoneConfigSchema.parse({}),
1129
1133
  browser: {
1130
1134
  enabled: true,
1131
1135
  driver: { kind: "extension" },
@@ -4,8 +4,8 @@ import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir } from ".
4
4
  import { computeExtensionDirectoryIntegrity, getExtensionLockfileManager } from "./lockfile.js";
5
5
  import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl, verifyStoreArtifactSha256 } from "../agent/skills/marketplace/adapters/store/store-api-client.js";
6
6
  import { loadConfig } from "../config/loader.js";
7
- import { commitStagedExtensionInstall, finalizeStagedExtensionInstall, rollbackStagedExtensionInstall, stageExtensionNpm, stageExtensionStoreZip } from "./install-transaction.js";
8
7
  import { findExtension } from "./marketplace.js";
8
+ import { commitStagedExtensionInstall, finalizeStagedExtensionInstall, rollbackStagedExtensionInstall, stageExtensionNpm, stageExtensionStoreZip } from "./install-transaction.js";
9
9
  import { join } from "node:path";
10
10
  import { existsSync, readFileSync, readdirSync } from "node:fs";
11
11
  import { createHash } from "node:crypto";
@@ -7,6 +7,12 @@ export type GatewayBuiltinToolSummary = {
7
7
  };
8
8
  /** Built-in agent tools exposed by the gateway configuration UI. */
9
9
  export declare const GATEWAY_BUILTIN_TOOLS: readonly [{
10
+ readonly id: "phone_use";
11
+ readonly description: {
12
+ readonly en: "Observe and control an authorized Android phone through the local ADB runner.";
13
+ readonly zh: "通过本地 ADB 执行端观察和操作已授权的 Android 手机。";
14
+ };
15
+ }, {
10
16
  readonly id: "computer_use";
11
17
  readonly description: {
12
18
  readonly en: "Observe and control a locally authorized desktop application.";
@@ -271,4 +277,4 @@ export declare const GATEWAY_BUILTIN_TOOLS: readonly [{
271
277
  readonly zh: "使用已验证的参数执行选定的外部工具。";
272
278
  };
273
279
  }];
274
- export declare const GATEWAY_BUILTIN_TOOL_IDS: ("automation" | "find" | "image" | "knowledge_search" | "knowledge_get" | "knowledge_write" | "user_context_search" | "user_context_get" | "user_context_update" | "web_search" | "web_fetch" | "browser_use" | "grep" | "session_search" | "read_file" | "list_dir" | "write_file" | "apply_patch" | "exec_command" | "update_plan" | "todo" | "web_extract" | "clarify" | "xopc_tool_execute" | "tool_manual" | "session_status" | "read_media" | "xopc_tool_search" | "xopc_tool_describe" | "image_generate" | "skills_list" | "skill_view" | "skill_manage" | "skills_marketplace_search" | "computer_use" | "send_message" | "text_to_speech" | "execute_code" | "send_media" | "create_share" | "memory_maintenance" | "delegate_task" | "skill_install" | "create_desktop_pet")[];
280
+ export declare const GATEWAY_BUILTIN_TOOL_IDS: ("automation" | "find" | "image" | "knowledge_search" | "knowledge_get" | "knowledge_write" | "user_context_search" | "user_context_get" | "user_context_update" | "web_search" | "web_fetch" | "browser_use" | "grep" | "session_search" | "read_file" | "list_dir" | "write_file" | "apply_patch" | "exec_command" | "update_plan" | "todo" | "web_extract" | "clarify" | "xopc_tool_execute" | "tool_manual" | "session_status" | "read_media" | "xopc_tool_search" | "xopc_tool_describe" | "phone_use" | "image_generate" | "skills_list" | "skill_view" | "skill_manage" | "skills_marketplace_search" | "computer_use" | "send_message" | "text_to_speech" | "execute_code" | "send_media" | "create_share" | "memory_maintenance" | "delegate_task" | "skill_install" | "create_desktop_pet")[];
@@ -3,6 +3,13 @@ import "../agent/external-tools/index.js";
3
3
  //#region src/gateway/agent-builtin-tools.ts
4
4
  /** Built-in agent tools exposed by the gateway configuration UI. */
5
5
  const GATEWAY_BUILTIN_TOOLS = [
6
+ {
7
+ id: "phone_use",
8
+ description: {
9
+ en: "Observe and control an authorized Android phone through the local ADB runner.",
10
+ zh: "通过本地 ADB 执行端观察和操作已授权的 Android 手机。"
11
+ }
12
+ },
6
13
  {
7
14
  id: "computer_use",
8
15
  description: {
@@ -2,6 +2,7 @@ import { AgentDefaultsSchema } from "../agent-config/schema.js";
2
2
  import { init_agent_config } from "../agent-config/index.js";
3
3
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
4
4
  import { AgentCatalogService } from "../agent-catalog/service.js";
5
+ import { validatePhoneModelChange } from "../phone/model-adapter.js";
5
6
  import { validateComputerModelChange } from "../computer/model-config.js";
6
7
  import { GATEWAY_BUILTIN_TOOLS } from "./agent-builtin-tools.js";
7
8
  import { isDeepStrictEqual } from "node:util";
@@ -38,6 +39,7 @@ function prepareUpdateGlobalDefaults(body) {
38
39
  status: 400
39
40
  };
40
41
  try {
42
+ validatePhoneModelChange(parsed.data.models.phoneUse, current.models.phoneUse);
41
43
  validateComputerModelChange(parsed.data.models.computerUse, current.models.computerUse);
42
44
  } catch (error) {
43
45
  return {
@@ -43,6 +43,10 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
43
43
  primary: string;
44
44
  fallbacks: string[];
45
45
  };
46
+ phoneUse?: {
47
+ primary: string;
48
+ fallbacks: string[];
49
+ };
46
50
  imageGeneration?: {
47
51
  primary: string;
48
52
  fallbacks: string[];
@@ -87,6 +91,10 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
87
91
  primary: string;
88
92
  fallbacks: string[];
89
93
  };
94
+ phoneUse?: {
95
+ primary: string;
96
+ fallbacks: string[];
97
+ };
90
98
  imageGeneration?: {
91
99
  primary: string;
92
100
  fallbacks: string[];
@@ -2,8 +2,8 @@ import { getAllModels, getAvailableModels, init_providers } from "../../../provi
2
2
  import { ActivationPlanner } from "../../../extensions/activation-planner.js";
3
3
  import { mergeActivationContext } from "../../../extensions/activation-context.js";
4
4
  import { validateExtensionConfig } from "../../../extensions/config-validation.js";
5
- import { fetchRegistry, listExtensions, searchExtensions } from "../../../extensions/marketplace.js";
6
5
  import { listAgentPluginInventory } from "../../../extensions/agent-plugins/inventory.js";
6
+ import { fetchRegistry, listExtensions, searchExtensions } from "../../../extensions/marketplace.js";
7
7
  import { createOAuthAsyncHandler } from "../oauth-async.js";
8
8
  import { createOAuthHandler } from "../oauth.js";
9
9
  import { extensionAssetMimeType } from "../lib/extension-assets.js";
@@ -3,6 +3,14 @@ function startsWithAny(path, prefixes) {
3
3
  return prefixes.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));
4
4
  }
5
5
  const AUTHENTICATED_LAZY_ROUTE_BUNDLES = [
6
+ {
7
+ id: "phone",
8
+ match: (path) => startsWithAny(path, ["/api/phone"]),
9
+ load: async () => {
10
+ const { registerPhoneRoutes } = await import("./phone.js");
11
+ return { register: registerPhoneRoutes };
12
+ }
13
+ },
6
14
  {
7
15
  id: "next-turn-suggestions",
8
16
  match: (path) => /^\/api\/sessions\/[^/]+\/(?:next-turn-suggestion|next-turn-suggestion-feedback)$/.test(path),
@@ -12,6 +12,7 @@ import { CredentialResolver, init_credentials } from "../../../auth/credentials.
12
12
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
13
13
  import { PROVIDER_META, getAllModels, getAllProviders, getAvailableModels, getProviderAuthState, init_providers, isProviderConfigured, isProviderConfiguredSync } from "../../../providers/index.js";
14
14
  import { XopcCloudAccountError, XopcCloudAccountService } from "../../../providers/xopc-cloud-account-service.js";
15
+ import { phoneModelProfile } from "../../../phone/model-adapter.js";
15
16
  import { buildCapabilityPlansForConfig } from "../../../capabilities/readiness/from-config.js";
16
17
  import "../../../capabilities/readiness/index.js";
17
18
  import { getModelThinking } from "../../../providers/model-thinking.js";
@@ -324,6 +325,7 @@ function registerModelsRoutes(authenticated, deps) {
324
325
  name: m.name,
325
326
  ...catalogDisplayNames(m.provider, m.id),
326
327
  provider: m.provider,
328
+ ...phoneModelProfile(m) ? { phoneUse: { profile: phoneModelProfile(m) } } : {},
327
329
  ...computerModelProfile(m) ? { computerUse: {
328
330
  profile: computerModelProfile(m),
329
331
  dedicated: isDedicatedComputerModel(m)
@@ -710,6 +712,7 @@ function registerModelsRoutes(authenticated, deps) {
710
712
  name: m.name,
711
713
  ...catalogDisplayNames(m.provider, m.id),
712
714
  provider: m.provider,
715
+ ...phoneModelProfile(m) ? { phoneUse: { profile: phoneModelProfile(m) } } : {},
713
716
  contextWindow: m.contextWindow ?? 128e3,
714
717
  maxTokens: m.maxTokens ?? 4096,
715
718
  reasoning: m.reasoning ?? false,
@@ -0,0 +1,3 @@
1
+ import { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerPhoneDependencyRoutes(parent: Hono, deps: AuthenticatedRouteDeps): void;
@@ -0,0 +1,137 @@
1
+ import { init_paths_state, resolveStateDir } from "../../../config/paths-state.js";
2
+ import { resolveAdbPath } from "../../../phone/adb-driver.js";
3
+ import { getPhoneRuntime } from "../../../phone/runtime.js";
4
+ import { RuntimeError } from "../../../runtime-tools/errors.js";
5
+ import { getGatewayPrincipal } from "../../security/gateway-principal.js";
6
+ import { PhoneDependencyManager, probePhoneAdb } from "../../../runtime-tools/phone-dependencies.js";
7
+ import { z } from "zod";
8
+ import { Hono } from "hono";
9
+ import { bodyLimit } from "hono/body-limit";
10
+ import { streamSSE } from "hono/streaming";
11
+ //#region src/gateway/hono/routes/phone-dependencies.ts
12
+ init_paths_state();
13
+ function registerPhoneDependencyRoutes(parent, deps) {
14
+ const app = new Hono();
15
+ const base = "/api/runtime-tools/phone-dependencies";
16
+ const manager = () => new PhoneDependencyManager({
17
+ stateDir: resolveStateDir(),
18
+ config: deps.service.currentConfig.runtimeTools,
19
+ adbPath: deps.service.currentConfig.phone.adbPath
20
+ });
21
+ const adbBusy = () => getPhoneRuntime().reports().some((report) => ![
22
+ "closed",
23
+ "cancelled",
24
+ "failed",
25
+ "outcome_unknown"
26
+ ].includes(report.status));
27
+ app.use(`${base}/*`, bodyLimit({ maxSize: 8192 }));
28
+ const admin = async (c, next) => {
29
+ const principal = getGatewayPrincipal(c);
30
+ if (!["owner", "trusted-proxy"].includes(principal.kind) || !principal.scopes.includes("gateway.admin")) return c.json({
31
+ ok: false,
32
+ message: "Gateway administrator access is required"
33
+ }, 403);
34
+ return next();
35
+ };
36
+ app.use(base, admin);
37
+ app.use(`${base}/*`, admin);
38
+ app.onError((error, c) => c.json({
39
+ ok: false,
40
+ message: error instanceof z.ZodError ? "Invalid dependency request" : error.message,
41
+ error: error instanceof RuntimeError ? error.code : "PHONE_DEPENDENCY_FAILED"
42
+ }, 400));
43
+ app.get(base, async (c) => {
44
+ c.header("Cache-Control", "no-store");
45
+ return c.json({
46
+ ok: true,
47
+ payload: {
48
+ location: "gateway",
49
+ installationEnabled: deps.service.currentConfig.runtimeTools.enabled,
50
+ statuses: await manager().status()
51
+ }
52
+ });
53
+ });
54
+ app.post(`${base}/adb/path`, deps.strictRateLimitMiddleware, async (c) => {
55
+ const { path } = z.object({ path: z.string().trim().max(4096) }).strict().parse(await c.req.json());
56
+ if (adbBusy()) return c.json({
57
+ ok: false,
58
+ message: "Close the current phone session before changing ADB",
59
+ error: "PHONE_DEPENDENCY_BUSY"
60
+ }, 409);
61
+ if (path && !/^(?:\/|[A-Za-z]:[\\/]|\\\\)/.test(path)) return c.json({
62
+ ok: false,
63
+ message: "Enter an absolute ADB executable path on the Gateway host"
64
+ }, 400);
65
+ await probePhoneAdb(resolveAdbPath(path || void 0));
66
+ const next = structuredClone(deps.service.currentConfig);
67
+ next.phone.adbPath = path || void 0;
68
+ if (!(await deps.service.saveConfig(next)).saved) return c.json({
69
+ ok: false,
70
+ message: "Could not save the ADB path"
71
+ }, 500);
72
+ deps.service.emit("runtime-tools.updated", { dependency: "adb" });
73
+ return c.json({ ok: true });
74
+ });
75
+ app.post(`${base}/:kind/:action/stream`, deps.strictRateLimitMiddleware, async (c) => {
76
+ const kind = z.enum(["adb", "scrcpy"]).parse(c.req.param("kind"));
77
+ const action = z.enum([
78
+ "install",
79
+ "repair",
80
+ "import"
81
+ ]).parse(c.req.param("action"));
82
+ const input = z.object({ path: z.string().trim().min(1).max(4096).optional() }).strict().parse(await c.req.json());
83
+ if (action === "import" && (kind !== "scrcpy" || !input.path) || action !== "import" && input.path) return c.json({
84
+ ok: false,
85
+ message: "Only scrcpy server imports accept a file path"
86
+ }, 400);
87
+ if (kind === "adb" && adbBusy()) return c.json({
88
+ ok: false,
89
+ message: "Close the current phone session before installing or repairing ADB",
90
+ error: "PHONE_DEPENDENCY_BUSY"
91
+ }, 409);
92
+ const runtime = manager();
93
+ return streamSSE(c, async (stream) => {
94
+ let writes = Promise.resolve();
95
+ const progress = (event) => {
96
+ writes = writes.then(async () => {
97
+ try {
98
+ await stream.writeSSE({
99
+ event: "progress",
100
+ data: JSON.stringify(event)
101
+ });
102
+ } catch {}
103
+ });
104
+ };
105
+ runtime.on("progress", progress);
106
+ try {
107
+ await runtime.install(kind, {
108
+ repair: action === "repair",
109
+ sourcePath: input.path
110
+ });
111
+ await writes;
112
+ deps.service.emit("runtime-tools.updated", { dependency: kind });
113
+ await stream.writeSSE({
114
+ event: "result",
115
+ data: JSON.stringify({ ok: true })
116
+ });
117
+ } catch (error) {
118
+ await writes;
119
+ try {
120
+ await stream.writeSSE({
121
+ event: "result",
122
+ data: JSON.stringify({
123
+ ok: false,
124
+ message: error instanceof Error ? error.message : String(error),
125
+ error: error instanceof RuntimeError ? error.code : "PHONE_DEPENDENCY_FAILED"
126
+ })
127
+ });
128
+ } catch {}
129
+ } finally {
130
+ runtime.off("progress", progress);
131
+ }
132
+ });
133
+ });
134
+ parent.route("/", app);
135
+ }
136
+ //#endregion
137
+ export { registerPhoneDependencyRoutes };
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import { type PhoneRuntime } from '../../../phone/runtime.js';
3
+ import type { AuthenticatedRouteDeps } from './deps.js';
4
+ export declare function registerPhoneRoutes(parent: Hono, deps: AuthenticatedRouteDeps, runtime?: PhoneRuntime): void;