@xopcai/xopc 0.0.411 → 0.0.413

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 (307) 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-sGJnq-SA.js → agent-avatar-dicebear-BT6oqCMD.js} +1 -1
  4. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BFmRRD_4.js +1 -0
  5. package/dist/gateway/static/root/assets/agents-Clwskw2J.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-BdCgtTfT.js +1 -0
  8. package/dist/gateway/static/root/assets/appearance-settings-C3-hCFlF.js +1 -0
  9. package/dist/gateway/static/root/assets/apps-page-DJbKg3va.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-CGdU_E5B.js → archive-plugin-BviFGCy4.js} +1 -1
  11. package/dist/gateway/static/root/assets/{automations-page-BAPZY56r.js → automations-page-CfzazXE5.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-workspace-D_X0_1X3.js +8 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-B0ispXo2.js → binary-plugins-Dp-gtJEk.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-B9Ci-prO.js → block-editor-D-DEPdpi.js} +4 -4
  15. package/dist/gateway/static/root/assets/{browser-automation-inputs-D4-vQc4g.js → browser-automation-inputs-D1pDgMJu.js} +1 -1
  16. package/dist/gateway/static/root/assets/browser-automations-page-BI-ep6uM.js +3 -0
  17. package/dist/gateway/static/root/assets/browser-settings-page-BTyQ4-vN.js +3 -0
  18. package/dist/gateway/static/root/assets/capabilities-Bpeh6E22.js +1 -0
  19. package/dist/gateway/static/root/assets/capabilities-page-GNS95mG9.js +2 -0
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-DBiv1HN-.js +8 -0
  21. package/dist/gateway/static/root/assets/{capability-header-actions-Cic05oWh.js → capability-header-actions-CP2fI9Fe.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-DWlrUKBr.js +1 -0
  23. package/dist/gateway/static/root/assets/{chat-terminal-dock-Bm-IGeDe.js → chat-terminal-dock-BL3tFntQ.js} +2 -2
  24. package/dist/gateway/static/root/assets/computer-settings-page-DEQ5GYfC.js +1 -0
  25. package/dist/gateway/static/root/assets/{connector-service-page-DcdASUU9.js → connector-service-page-CecwMnC5.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-BcpUvrtl.js +1 -0
  27. package/dist/gateway/static/root/assets/{date-picker-gVLWu9R0.js → date-picker-N5jnlvPs.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dependency-picker-C0LARyok.js → dependency-picker-C4jddxFl.js} +1 -1
  29. package/dist/gateway/static/root/assets/{desktop-pet-v_le3sCs.js → desktop-pet-BCbiUNQG.js} +1 -1
  30. package/dist/gateway/static/root/assets/desktop-pet-settings-CkKU0JMY.js +1 -0
  31. package/dist/gateway/static/root/assets/device-pairing-wizard--E2GQoY1.js +1 -0
  32. package/dist/gateway/static/root/assets/{directory-picker-path-field-CBefVUPR.js → directory-picker-path-field-CbMbPimD.js} +1 -1
  33. package/dist/gateway/static/root/assets/extension-debug-page-OE1nJMQ8.js +1 -0
  34. package/dist/gateway/static/root/assets/{extension-page-C0-oP7S_.js → extension-page-BEomiKhy.js} +1 -1
  35. package/dist/gateway/static/root/assets/extension-settings-page-BFOjQeSX.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-config-swr-BVqYVaGy.js → gateway-config-swr-DF_HV6NP.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-realtime-CY1LBGBS.js → gateway-realtime-DMAzNlm-.js} +1 -1
  38. package/dist/gateway/static/root/assets/gateway-realtime-store-CoIgC1Al.js +1 -0
  39. package/dist/gateway/static/root/assets/gateway-settings-CR4CsfNN.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-startup-retry-CPKGkr6D.js → gateway-startup-retry-B91CBTzO.js} +1 -1
  41. package/dist/gateway/static/root/assets/highlight-code-6ONPRH5r.js +1 -0
  42. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-CN5PNRN3.js → highlighted-body-KQOG7T2V-EJ9Kg4iQ.js} +1 -1
  43. package/dist/gateway/static/root/assets/home-page-B9w3a6r2.js +2 -0
  44. package/dist/gateway/static/root/assets/{image-generation-api-DRLXG9Ws.js → image-generation-api-D0HNic89.js} +1 -1
  45. package/dist/gateway/static/root/assets/imports-page-bxTINe-2.js +1 -0
  46. package/dist/gateway/static/root/assets/index-D1oivYvN.js +710 -0
  47. package/dist/gateway/static/root/assets/index-D_7q1UkI.css +1 -0
  48. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-Cmi-2SIh.js +1 -0
  49. package/dist/gateway/static/root/assets/local-app-workbench-page-NGCmXpa_.js +1 -0
  50. package/dist/gateway/static/root/assets/{local-apps-page-BChE6nUD.js → local-apps-page-jgaogH9Z.js} +1 -1
  51. package/dist/gateway/static/root/assets/{local-session-drafts-BCaC-1rH.js → local-session-drafts-DvmwiLUx.js} +1 -1
  52. package/dist/gateway/static/root/assets/{locale-store-DAgpZxAS.js → locale-store-JogcXC4J.js} +1 -1
  53. package/dist/gateway/static/root/assets/logs-page-drrr-c2W.js +2 -0
  54. package/dist/gateway/static/root/assets/management-settings-Dc1opXVr.js +1 -0
  55. package/dist/gateway/static/root/assets/{media-plugins-BmLuWkkZ.js → media-plugins-BRS9puQV.js} +1 -1
  56. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-B--edI1I.js +1 -0
  57. package/dist/gateway/static/root/assets/{messages-DMXSIJUO.js → messages-RzwPiQNL.js} +2 -2
  58. package/dist/gateway/static/root/assets/note-detail-panel-C3s4-ytB.js +5 -0
  59. package/dist/gateway/static/root/assets/note-image-lightbox-D7q5-KuS.js +1 -0
  60. package/dist/gateway/static/root/assets/notes-page-qVxoErUS.js +8 -0
  61. package/dist/gateway/static/root/assets/{page-context-capture-button-B7rDRlS7.js → page-context-capture-button-D_VOB2_C.js} +1 -1
  62. package/dist/gateway/static/root/assets/personal-page-B-T8NzQo.js +1 -0
  63. package/dist/gateway/static/root/assets/personal-settings-panel-BKA4fbYH.js +1 -0
  64. package/dist/gateway/static/root/assets/phone-dependencies-card-DhEsfEUN.js +1 -0
  65. package/dist/gateway/static/root/assets/phone-model-picker-J4mFDk21.js +1 -0
  66. package/dist/gateway/static/root/assets/phone-settings-page-BLflz8CQ.js +1 -0
  67. package/dist/gateway/static/root/assets/plugin-details-dialog-1BwvmKZi.js +1 -0
  68. package/dist/gateway/static/root/assets/{preview-open-alternatives-Z4NM7_Dn.js → preview-open-alternatives-DaTaSKox.js} +1 -1
  69. package/dist/gateway/static/root/assets/{product-open-page-C5TcIaJj.js → product-open-page-wYlC0IVZ.js} +1 -1
  70. package/dist/gateway/static/root/assets/{product-preview-content-5xID6jIj.js → product-preview-content-Bxur-p6S.js} +1 -1
  71. package/dist/gateway/static/root/assets/project-detail-page-DwowzxzD.js +7 -0
  72. package/dist/gateway/static/root/assets/projects-page-Bwvn4i_e.js +1 -0
  73. package/dist/gateway/static/root/assets/{registry-api-B6kqbuw8.js → registry-api-BGqSwITi.js} +1 -1
  74. package/dist/gateway/static/root/assets/remote-access-hub-DrHisOUe.js +1 -0
  75. package/dist/gateway/static/root/assets/runtime-tools-api-CSm5SpnR.js +5 -0
  76. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-DXNidliV.js +1 -0
  77. package/dist/gateway/static/root/assets/{schema-form-DtPkiYwm.js → schema-form-DeSZ7SiO.js} +1 -1
  78. package/dist/gateway/static/root/assets/{session-api-D6-Vz8xK.js → session-api-DTxZyMta.js} +1 -1
  79. package/dist/gateway/static/root/assets/{session-manager-DWbcMHcj.js → session-manager-B2HDomj4.js} +1 -1
  80. package/dist/gateway/static/root/assets/sessions-page-seP7t0kv.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-advanced-gate-VqBu7gHu.js +1 -0
  82. package/dist/gateway/static/root/assets/{settings-form-section-DD3iD5t5.js → settings-form-section-BNYQjZU4.js} +1 -1
  83. package/dist/gateway/static/root/assets/{settings-page-iLY3LRDq.js → settings-page-29Ix0jSQ.js} +1 -1
  84. package/dist/gateway/static/root/assets/{settings-page-layout-Dx5S-Msc.js → settings-page-header-CYpuTXUW.js} +1 -1
  85. package/dist/gateway/static/root/assets/settings-page-layout-B20AfmFG.js +1 -0
  86. package/dist/gateway/static/root/assets/setup-status-panel-COQZgKX9.js +1 -0
  87. package/dist/gateway/static/root/assets/{share-preview-page-B8h9lqDL.js → share-preview-page-CwMRULXc.js} +1 -1
  88. package/dist/gateway/static/root/assets/shares-settings-BWaykw9E.js +1 -0
  89. package/dist/gateway/static/root/assets/{skill-api-C9RsrvOp.js → skill-api-xfB5fUAh.js} +1 -1
  90. package/dist/gateway/static/root/assets/skill-reload-api-Bq-3_MCt.js +1 -0
  91. package/dist/gateway/static/root/assets/skills-page-C3LfWsAZ.js +2 -0
  92. package/dist/gateway/static/root/assets/system-settings-panel-DRJu1ehM.js +1 -0
  93. package/dist/gateway/static/root/assets/task-detail-page-XCJFP-Aa.js +2 -0
  94. package/dist/gateway/static/root/assets/{task-result-evidence-DjNWPpn_.js → task-result-evidence-C4o_Yue_.js} +1 -1
  95. package/dist/gateway/static/root/assets/tracing-settings-page-CYslh-Pu.js +1 -0
  96. package/dist/gateway/static/root/assets/{tunnel-api-C6XfsSWy.js → tunnel-api-Bi_kw6bv.js} +1 -1
  97. package/dist/gateway/static/root/assets/usage-page-CTTmklCs.js +1 -0
  98. package/dist/gateway/static/root/assets/{use-autosave-DO-Twmbm.js → use-autosave-BkB9uD93.js} +1 -1
  99. package/dist/gateway/static/root/assets/user-model-page-BDqguzRE.js +2 -0
  100. package/dist/gateway/static/root/assets/{voice-api-key-field-MGe3HkS_.js → voice-api-key-field-bt8_Agih.js} +1 -1
  101. package/dist/gateway/static/root/assets/{voice-config-api-CPKzUb4R.js → voice-config-api-D7xsWrdh.js} +1 -1
  102. package/dist/gateway/static/root/assets/{work-discovery-overlay-DptHqYh5.js → work-discovery-overlay-D3NG14dX.js} +1 -1
  103. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-Y_UIryBH.js → xopc-cloud-account-card-B2OUKOQi.js} +1 -1
  104. package/dist/gateway/static/root/index.html +14 -14
  105. package/dist/package.js +1 -1
  106. package/dist/packages/gateway-contract/src/capabilities.js +1 -0
  107. package/dist/src/agent/agent-manager.js +1 -1
  108. package/dist/src/agent/background-review/prompts.js +4 -3
  109. package/dist/src/agent/background-review/run-background-review.js +1 -1
  110. package/dist/src/agent/embedded/run-turn.js +1 -1
  111. package/dist/src/agent/embedded/xopc-stream-bridge.js +7 -3
  112. package/dist/src/agent/external-tools/cliProvider.js +2 -2
  113. package/dist/src/agent/external-tools/composio-provider.js +2 -2
  114. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  115. package/dist/src/agent/prompt/system-prompt.js +1 -1
  116. package/dist/src/agent/service.js +1 -1
  117. package/dist/src/agent/skills/index.js +1 -1
  118. package/dist/src/agent/skills/managed-store.js +1 -1
  119. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  120. package/dist/src/agent/tool-manuals/index.js +7 -0
  121. package/dist/src/agent/tool-manuals/phone.d.ts +1 -0
  122. package/dist/src/agent/tool-manuals/phone.js +16 -0
  123. package/dist/src/agent/tools/factory.js +15 -0
  124. package/dist/src/agent/tools/knowledge-memory-tool.js +1 -1
  125. package/dist/src/agent/tools/personal-read-tool.js +1 -1
  126. package/dist/src/agent/tools/personal-task-tool.d.ts +2 -1
  127. package/dist/src/agent/tools/personal-task-tool.js +43 -20
  128. package/dist/src/agent/tools/phone-use-tool.d.ts +8 -0
  129. package/dist/src/agent/tools/phone-use-tool.js +49 -0
  130. package/dist/src/agent/tools/session-recall-tool.js +2 -1
  131. package/dist/src/agent/tools/session-search-tool.js +11 -5
  132. package/dist/src/agent/tools/user-context-tool.js +1 -1
  133. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  134. package/dist/src/agent-catalog/capabilities.js +2 -2
  135. package/dist/src/agent-catalog/repository.js +5 -1
  136. package/dist/src/agent-config/index.js +2 -2
  137. package/dist/src/agent-config/resolver.js +5 -0
  138. package/dist/src/agent-config/schema.d.ts +24 -0
  139. package/dist/src/agent-config/schema.js +5 -2
  140. package/dist/src/automations/capabilities/drafts.js +1 -1
  141. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  142. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  143. package/dist/src/capabilities/runtime/product.js +1 -1
  144. package/dist/src/cli/command-manifest.js +1 -1
  145. package/dist/src/cli/commands/agents.js +1 -1
  146. package/dist/src/cli/commands/models.js +1 -1
  147. package/dist/src/cli/commands/onboard/model.js +1 -1
  148. package/dist/src/cli/commands/onboard.js +1 -1
  149. package/dist/src/cli/commands/runtime.js +32 -4
  150. package/dist/src/cli/utils/init-workspace-core.js +6 -4
  151. package/dist/src/computer/diagnostics.d.ts +1 -1
  152. package/dist/src/config/agent-profile.js +1 -1
  153. package/dist/src/config/config-file.d.ts +6 -0
  154. package/dist/src/config/config-file.js +35 -0
  155. package/dist/src/config/loader.js +5 -4
  156. package/dist/src/config/models-json.d.ts +36 -0
  157. package/dist/src/config/models-json.js +9 -0
  158. package/dist/src/config/schema.d.ts +12 -0
  159. package/dist/src/config/schema.js +6 -2
  160. package/dist/src/execution-environments/local-worktree-manager.js +1 -1
  161. package/dist/src/extensions/agent-plugins/skill-catalog.js +1 -1
  162. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  163. package/dist/src/gateway/agent-builtin-tools.d.ts +7 -1
  164. package/dist/src/gateway/agent-builtin-tools.js +7 -0
  165. package/dist/src/gateway/agents-admin.js +2 -2
  166. package/dist/src/gateway/global-defaults-admin.js +2 -0
  167. package/dist/src/gateway/hono/lib/config-payload.d.ts +8 -0
  168. package/dist/src/gateway/hono/routes/agents.js +1 -1
  169. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  170. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  171. package/dist/src/gateway/hono/routes/models.js +3 -0
  172. package/dist/src/gateway/hono/routes/notes.js +2 -2
  173. package/dist/src/gateway/hono/routes/phone-dependencies.d.ts +3 -0
  174. package/dist/src/gateway/hono/routes/phone-dependencies.js +137 -0
  175. package/dist/src/gateway/hono/routes/phone.d.ts +4 -0
  176. package/dist/src/gateway/hono/routes/phone.js +445 -0
  177. package/dist/src/gateway/hono/routes/projects.js +2 -2
  178. package/dist/src/gateway/hono/routes/runtime-tools.js +2 -0
  179. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  180. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  181. package/dist/src/gateway/image-generation-setup.js +1 -1
  182. package/dist/src/gateway/server.js +1 -0
  183. package/dist/src/gateway/service/config-coordinator.d.ts +8 -0
  184. package/dist/src/gateway/service.d.ts +2 -0
  185. package/dist/src/gateway/service.js +17 -12
  186. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  187. package/dist/src/home-intelligence/host.js +2 -2
  188. package/dist/src/imports/importService.js +1 -1
  189. package/dist/src/knowledge-memory/repository.js +5 -0
  190. package/dist/src/local-apps/service.js +1 -1
  191. package/dist/src/memory-learning/forget-capture.js +12 -3
  192. package/dist/src/memory-learning/forgotten-history.d.ts +4 -0
  193. package/dist/src/memory-learning/forgotten-history.js +71 -4
  194. package/dist/src/memory-learning/work-capture.d.ts +1 -0
  195. package/dist/src/memory-learning/work-capture.js +28 -17
  196. package/dist/src/personal-agent/prompts.js +3 -2
  197. package/dist/src/personal-agent/service.js +1 -1
  198. package/dist/src/phone/adb-driver.d.ts +35 -0
  199. package/dist/src/phone/adb-driver.js +368 -0
  200. package/dist/src/phone/cloud-adb.d.ts +34 -0
  201. package/dist/src/phone/cloud-adb.js +223 -0
  202. package/dist/src/phone/cloud-phones.d.ts +29 -0
  203. package/dist/src/phone/cloud-phones.js +141 -0
  204. package/dist/src/phone/cloud-scrcpy.d.ts +20 -0
  205. package/dist/src/phone/cloud-scrcpy.js +122 -0
  206. package/dist/src/phone/contracts.d.ts +204 -0
  207. package/dist/src/phone/contracts.js +115 -0
  208. package/dist/src/phone/interactive-session.d.ts +34 -0
  209. package/dist/src/phone/interactive-session.js +164 -0
  210. package/dist/src/phone/live-provider.d.ts +57 -0
  211. package/dist/src/phone/live-provider.js +18 -0
  212. package/dist/src/phone/live-state.d.ts +28 -0
  213. package/dist/src/phone/live-state.js +71 -0
  214. package/dist/src/phone/model-adapter.d.ts +25 -0
  215. package/dist/src/phone/model-adapter.js +340 -0
  216. package/dist/src/phone/repository.d.ts +19 -0
  217. package/dist/src/phone/repository.js +100 -0
  218. package/dist/src/phone/runtime.d.ts +83 -0
  219. package/dist/src/phone/runtime.js +896 -0
  220. package/dist/src/phone/scrcpy.d.ts +62 -0
  221. package/dist/src/phone/scrcpy.js +345 -0
  222. package/dist/src/phone/stream-gateway.d.ts +26 -0
  223. package/dist/src/phone/stream-gateway.js +210 -0
  224. package/dist/src/process/phone-process.d.ts +4 -0
  225. package/dist/src/process/phone-process.js +38 -0
  226. package/dist/src/providers/extension-stream-bridge.js +8 -1
  227. package/dist/src/providers/model-call.js +6 -2
  228. package/dist/src/providers/model-catalog-persistence.js +3 -0
  229. package/dist/src/providers/model-catalog-types.d.ts +3 -0
  230. package/dist/src/providers/model-reference-auditor.js +5 -1
  231. package/dist/src/providers/model-registry.js +3 -0
  232. package/dist/src/runtime-tools/archive.d.ts +2 -2
  233. package/dist/src/runtime-tools/archive.js +1 -1
  234. package/dist/src/runtime-tools/downloader.d.ts +2 -2
  235. package/dist/src/runtime-tools/errors.d.ts +3 -3
  236. package/dist/src/runtime-tools/phone-dependencies.d.ts +40 -0
  237. package/dist/src/runtime-tools/phone-dependencies.js +188 -0
  238. package/dist/src/runtime-tools/phone-dependency-catalog.d.ts +16 -0
  239. package/dist/src/runtime-tools/phone-dependency-catalog.js +51 -0
  240. package/dist/src/runtime-tools/types.d.ts +1 -0
  241. package/dist/src/storage/sqlite/context-extraction-repository.d.ts +1 -0
  242. package/dist/src/storage/sqlite/context-extraction-repository.js +12 -2
  243. package/dist/src/tasks/capabilities/read.js +2 -2
  244. package/dist/src/tasks/capabilities/write.js +1 -1
  245. package/dist/src/tasks/task-research-result.js +19 -2
  246. package/dist/src/tui/backends/embedded-backend.js +1 -1
  247. package/dist/src/usage/cloud-receipts.d.ts +5 -1
  248. package/dist/src/usage/cloud-receipts.js +10 -4
  249. package/dist/src/usage/cloud-wire.d.ts +37 -0
  250. package/dist/src/usage/cloud-wire.js +181 -0
  251. package/dist/src/usage/recorder.js +5 -4
  252. package/dist/src/user-model/capture/semantic.js +2 -2
  253. package/dist/src/voice/platform-catalog.d.ts +3 -0
  254. package/dist/src/voice/realtime/persona-context.js +1 -1
  255. package/package.json +9 -4
  256. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BI7OTo-T.js +0 -1
  257. package/dist/gateway/static/root/assets/agents-RIXL0p7_.js +0 -77
  258. package/dist/gateway/static/root/assets/app-management-settings-panel-BGzhSS6H.js +0 -1
  259. package/dist/gateway/static/root/assets/appearance-settings-DtEZq4b2.js +0 -1
  260. package/dist/gateway/static/root/assets/apps-page-DZqBof2D.js +0 -1
  261. package/dist/gateway/static/root/assets/automations-workspace-CI-yQnSj.js +0 -8
  262. package/dist/gateway/static/root/assets/browser-automations-page-Xzdif447.js +0 -3
  263. package/dist/gateway/static/root/assets/browser-settings-page-Bhu-83eC.js +0 -3
  264. package/dist/gateway/static/root/assets/capabilities-B9b5KCBb.js +0 -1
  265. package/dist/gateway/static/root/assets/capabilities-page-BIc0Zlsw.js +0 -2
  266. package/dist/gateway/static/root/assets/capabilities-settings-panel-CQEfpLdj.js +0 -8
  267. package/dist/gateway/static/root/assets/channels-DQbEoo_o.js +0 -1
  268. package/dist/gateway/static/root/assets/computer-settings-page-C9xMfwXK.js +0 -1
  269. package/dist/gateway/static/root/assets/connectors-page-eh-xpMPK.js +0 -1
  270. package/dist/gateway/static/root/assets/desktop-pet-settings-B_-j-D4W.js +0 -1
  271. package/dist/gateway/static/root/assets/device-pairing-wizard-CxG_FcQ6.js +0 -1
  272. package/dist/gateway/static/root/assets/extension-debug-page-CTe7Molh.js +0 -1
  273. package/dist/gateway/static/root/assets/extension-settings-page-DYJmgMUg.js +0 -1
  274. package/dist/gateway/static/root/assets/gateway-realtime-store-Dafw95ol.js +0 -1
  275. package/dist/gateway/static/root/assets/gateway-settings-C13P4lQd.js +0 -1
  276. package/dist/gateway/static/root/assets/highlight-code-CslBKXdS.js +0 -1
  277. package/dist/gateway/static/root/assets/home-page-B_XrkGmA.js +0 -2
  278. package/dist/gateway/static/root/assets/imports-page--cuF5vwU.js +0 -1
  279. package/dist/gateway/static/root/assets/index-6YjAt50A.js +0 -710
  280. package/dist/gateway/static/root/assets/index-caRW34rg.css +0 -1
  281. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-5g2PxgBs.js +0 -1
  282. package/dist/gateway/static/root/assets/local-app-workbench-page-B6U1HQpp.js +0 -1
  283. package/dist/gateway/static/root/assets/logs-page-B9mq03SK.js +0 -2
  284. package/dist/gateway/static/root/assets/management-settings-2W_qJsha.js +0 -1
  285. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-61Il2HQR.js +0 -1
  286. package/dist/gateway/static/root/assets/note-detail-panel-C4gZsNBL.js +0 -5
  287. package/dist/gateway/static/root/assets/note-image-lightbox-XqJIaaRV.js +0 -1
  288. package/dist/gateway/static/root/assets/notes-page-Chdwrjni.js +0 -8
  289. package/dist/gateway/static/root/assets/personal-page-mQl9BftY.js +0 -1
  290. package/dist/gateway/static/root/assets/personal-settings-panel-BgcJLmZN.js +0 -1
  291. package/dist/gateway/static/root/assets/plugin-details-dialog-FvwSxZPB.js +0 -1
  292. package/dist/gateway/static/root/assets/project-detail-page-CGOyx7zX.js +0 -7
  293. package/dist/gateway/static/root/assets/projects-page-Dd11tbRX.js +0 -1
  294. package/dist/gateway/static/root/assets/remote-access-hub-Bintk9nL.js +0 -1
  295. package/dist/gateway/static/root/assets/runtime-tools-api-CY3R7unQ.js +0 -5
  296. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-CbmiiLsq.js +0 -1
  297. package/dist/gateway/static/root/assets/sessions-page-BBlEP7y3.js +0 -1
  298. package/dist/gateway/static/root/assets/settings-advanced-gate-BCQUth4g.js +0 -1
  299. package/dist/gateway/static/root/assets/setup-status-panel-v4P0IAkG.js +0 -1
  300. package/dist/gateway/static/root/assets/shares-settings-DMzej6z2.js +0 -1
  301. package/dist/gateway/static/root/assets/skill-reload-api-B20x7EE9.js +0 -1
  302. package/dist/gateway/static/root/assets/skills-page-C_ulsnv7.js +0 -2
  303. package/dist/gateway/static/root/assets/system-settings-panel-PTRGMKkq.js +0 -1
  304. package/dist/gateway/static/root/assets/task-detail-page-DEPwo4vf.js +0 -2
  305. package/dist/gateway/static/root/assets/tracing-settings-page-CVJt7IXC.js +0 -1
  306. package/dist/gateway/static/root/assets/usage-page-DgqLD8Y5.js +0 -1
  307. package/dist/gateway/static/root/assets/user-model-page-BwK37aob.js +0 -2
@@ -3,7 +3,7 @@ import { SpecialistProfileSchema } from "../../packages/gateway-contract/src/spe
3
3
  import { init_src } from "../../packages/gateway-contract/src/index.js";
4
4
  import { z } from "zod";
5
5
  //#region src/agent-config/schema.ts
6
- var DEFAULT_AGENT_MODEL_REF, DEFAULT_CORE_SKILLS, DEFAULT_SKILL_POLICY, AgentIdSchema, ModelRefSchema, ModelRouteSchema, ImageGenerationRouteSchema, ComputerModelRouteSchema, ModelIntentSchema, ModelIntentRoutesSchema, ModelIntentOverridesSchema, AgentModelsDefaultsSchema, AgentModelsOverrideSchema, ToolModeSchema, ToolPolicySchema, ToolPoliciesSchema, SkillDefaultsSchema, SkillOverrideSchema, RuntimePolicySchema, AgentDefaultsSchema, AgentProfileSchema, AgentEntrySchema, EffectiveAgentConfigSchema;
6
+ var DEFAULT_AGENT_MODEL_REF, DEFAULT_CORE_SKILLS, DEFAULT_SKILL_POLICY, AgentIdSchema, ModelRefSchema, ModelRouteSchema, ImageGenerationRouteSchema, ComputerModelRouteSchema, PhoneModelRouteSchema, ModelIntentSchema, ModelIntentRoutesSchema, ModelIntentOverridesSchema, AgentModelsDefaultsSchema, AgentModelsOverrideSchema, ToolModeSchema, ToolPolicySchema, ToolPoliciesSchema, SkillDefaultsSchema, SkillOverrideSchema, RuntimePolicySchema, AgentDefaultsSchema, AgentProfileSchema, AgentEntrySchema, EffectiveAgentConfigSchema;
7
7
  var init_schema = __esmMin((() => {
8
8
  init_src();
9
9
  DEFAULT_AGENT_MODEL_REF = "xopc-cloud/auto";
@@ -31,6 +31,7 @@ var init_schema = __esmMin((() => {
31
31
  autoProviderFallback: z.boolean().default(false)
32
32
  }).strict();
33
33
  ComputerModelRouteSchema = ModelRouteSchema.extend({ fallbacks: z.array(ModelRefSchema).max(0, "Computer Use does not support fallback models").default([]) }).strict();
34
+ PhoneModelRouteSchema = ModelRouteSchema.extend({ fallbacks: z.array(ModelRefSchema).max(0, "Phone Use does not support fallback models").default([]) }).strict();
34
35
  ModelIntentSchema = z.enum([
35
36
  "fast",
36
37
  "reasoning",
@@ -47,6 +48,7 @@ var init_schema = __esmMin((() => {
47
48
  intents: ModelIntentRoutesSchema.default({}),
48
49
  imageUnderstanding: ModelRouteSchema.optional(),
49
50
  computerUse: ComputerModelRouteSchema.optional(),
51
+ phoneUse: PhoneModelRouteSchema.optional(),
50
52
  imageGeneration: ImageGenerationRouteSchema.optional()
51
53
  }).strict();
52
54
  AgentModelsOverrideSchema = z.object({
@@ -55,6 +57,7 @@ var init_schema = __esmMin((() => {
55
57
  intents: ModelIntentOverridesSchema.optional(),
56
58
  imageUnderstanding: ModelRouteSchema.nullable().optional(),
57
59
  computerUse: ComputerModelRouteSchema.nullable().optional(),
60
+ phoneUse: PhoneModelRouteSchema.nullable().optional(),
58
61
  imageGeneration: ImageGenerationRouteSchema.nullable().optional()
59
62
  }).strict();
60
63
  ToolModeSchema = z.enum([
@@ -175,4 +178,4 @@ var init_schema = __esmMin((() => {
175
178
  }));
176
179
  //#endregion
177
180
  init_schema();
178
- export { AgentDefaultsSchema, AgentEntrySchema, AgentIdSchema, AgentModelsDefaultsSchema, AgentModelsOverrideSchema, AgentProfileSchema, ComputerModelRouteSchema, DEFAULT_AGENT_MODEL_REF, DEFAULT_CORE_SKILLS, DEFAULT_SKILL_POLICY, EffectiveAgentConfigSchema, ImageGenerationRouteSchema, ModelIntentSchema, ModelRefSchema, ModelRouteSchema, RuntimePolicySchema, SkillDefaultsSchema, SkillOverrideSchema, ToolModeSchema, ToolPoliciesSchema, ToolPolicySchema, init_schema };
181
+ export { AgentDefaultsSchema, AgentEntrySchema, AgentIdSchema, AgentModelsDefaultsSchema, AgentModelsOverrideSchema, AgentProfileSchema, ComputerModelRouteSchema, DEFAULT_AGENT_MODEL_REF, DEFAULT_CORE_SKILLS, DEFAULT_SKILL_POLICY, EffectiveAgentConfigSchema, ImageGenerationRouteSchema, ModelIntentSchema, ModelRefSchema, ModelRouteSchema, PhoneModelRouteSchema, RuntimePolicySchema, SkillDefaultsSchema, SkillOverrideSchema, ToolModeSchema, ToolPoliciesSchema, ToolPolicySchema, init_schema };
@@ -3,10 +3,10 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
3
  import { init_trust_policy, resolveAutomationSafetyForTrust } from "../../user-context/trust-policy.js";
4
4
  import { getUserTrustPolicy } from "../../storage/sqlite/user-trust-repository.js";
5
5
  import { init_sqlite } from "../../storage/sqlite/index.js";
6
+ import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
6
7
  import { CapabilityError } from "../../capabilities/runtime/errors.js";
7
8
  import { ExternalEffectNotAppliedError } from "../../capabilities/runtime/external-operations.js";
8
9
  import { defineExternalCapability, defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
9
- import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
10
10
  import { AutomationCreateCapabilityInputSchema } from "./write.js";
11
11
  import { simulateAutomation } from "../draft/automation-draft-validator.js";
12
12
  import { AutomationDraftService } from "../draft/automation-draft-service.js";
@@ -13,8 +13,8 @@ import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSy
13
13
  import { fileURLToPath } from "node:url";
14
14
  import { execFileSync, spawn } from "node:child_process";
15
15
  import { createHash } from "node:crypto";
16
- import { readFile, readdir, rm } from "node:fs/promises";
17
16
  import AdmZip from "adm-zip";
17
+ import { readFile, readdir, rm } from "node:fs/promises";
18
18
  //#region src/browser/providers/browser-ext-install.ts
19
19
  /**
20
20
  * Install bundled Chrome extension artifacts into {resolveBinDir()}/browser-ext/.
@@ -1,7 +1,7 @@
1
1
  import { SqliteCommitEffectError, init_transaction } from "../../storage/sqlite/transaction.js";
2
- import { OperationConflictError, executeAtomicOperation } from "./atomic-operations.js";
3
2
  import { CapabilityError } from "./errors.js";
4
3
  import { executeExternalOperation } from "./external-operations.js";
4
+ import { OperationConflictError, executeAtomicOperation } from "./atomic-operations.js";
5
5
  import { createHash } from "node:crypto";
6
6
  import { z } from "zod";
7
7
  //#region src/capabilities/runtime/dispatcher.ts
@@ -1,6 +1,5 @@
1
1
  import { CapabilityError } from "./errors.js";
2
2
  import { CapabilityDispatcher } from "./dispatcher.js";
3
- import { registerAgentCapabilities } from "../../agent-catalog/capabilities.js";
4
3
  import { registerLocalAppReadCapabilities } from "../../local-apps/capabilities/read.js";
5
4
  import { registerNoteReadCapabilities } from "../../notes/capabilities/read.js";
6
5
  import { registerNoteWriteCapabilities } from "../../notes/capabilities/write.js";
@@ -17,6 +16,7 @@ import { registerAutomationDraftCapabilities } from "../../automations/capabilit
17
16
  import { registerTaskWriteCapabilities } from "../../tasks/capabilities/write.js";
18
17
  import { registerSettingsCapability } from "./settings.js";
19
18
  import { registerAppContextCapability } from "./app-context.js";
19
+ import { registerAgentCapabilities } from "../../agent-catalog/capabilities.js";
20
20
  //#region src/capabilities/runtime/product.ts
21
21
  function createProductDispatcher(getNotes, taskWrites) {
22
22
  const dispatcher = new CapabilityDispatcher();
@@ -93,7 +93,7 @@ const ROOT_HELP_COMMANDS = [
93
93
  },
94
94
  {
95
95
  name: "runtime",
96
- description: "Manage Node.js and Python tool runtimes used by agents"
96
+ description: "Manage agent runtimes and phone dependencies"
97
97
  },
98
98
  {
99
99
  name: "mcp",
@@ -1,8 +1,8 @@
1
1
  import { normalizeAgentId, validateAgentIdForNewAgent } from "../../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
3
3
  import { init_agent_scope, resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agent/agent-scope.js";
4
- import { AgentCatalogService } from "../../agent-catalog/service.js";
5
4
  import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
5
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
6
6
  import { colors } from "../utils/colors.js";
7
7
  //#region src/cli/commands/agents.ts
8
8
  init_repository();
@@ -1,11 +1,11 @@
1
1
  import { creditDecimal } from "../../../packages/gateway-contract/src/cloud-credits.js";
2
2
  import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
3
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
4
- import { AgentCatalogService } from "../../agent-catalog/service.js";
5
4
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
6
5
  import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
7
6
  import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
8
7
  import { XopcCloudAccountService } from "../../providers/xopc-cloud-account-service.js";
8
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
9
9
  import { listImageProviderSpecs } from "../../../packages/image-providers/src/catalog.js";
10
10
  import "../../../packages/image-providers/src/index.js";
11
11
  import { loadConfig } from "../../config/loader.js";
@@ -1,5 +1,4 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
2
- import { AgentCatalogService } from "../../../agent-catalog/service.js";
3
2
  import { resolveModelsJsonPath } from "../../../config/paths.js";
4
3
  import { ConfigSchema, getAgentDefaultModelRef, init_schema } from "../../../config/schema.js";
5
4
  import { init_models_json, loadModelsJson, saveModelsJson } from "../../../config/models-json.js";
@@ -7,6 +6,7 @@ import { getApiKeyFromEnv } from "../../../providers/env-keys.js";
7
6
  import { getModelRegistry } from "../../../providers/model-registry.js";
8
7
  import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
9
8
  import { getAllProviders, getModelsByProvider, getProviderDisplayName, init_providers, providerSupportsApiKey, providerSupportsOAuth } from "../../../providers/index.js";
9
+ import { AgentCatalogService } from "../../../agent-catalog/service.js";
10
10
  import { prepareUpdateGlobalDefaults } from "../../../gateway/global-defaults-admin.js";
11
11
  import { discoverProviderModels, isProviderApiDiscoverable } from "../../../providers/model-discovery.js";
12
12
  import { getXopcCloudCatalogCoordinator } from "../../../providers/xopc-cloud-catalog-coordinator.js";
@@ -5,8 +5,8 @@ import { resolveGatewayLocalClientHost } from "../../config/gateway-bind.js";
5
5
  import { saveConfig } from "../../config/loader.js";
6
6
  import { formatExamples, register } from "../registry.js";
7
7
  import "../../config/index.js";
8
- import { provisionEagerRuntimes } from "../../runtime-tools/bootstrap.js";
9
8
  import { colors } from "../utils/colors.js";
9
+ import { provisionEagerRuntimes } from "../../runtime-tools/bootstrap.js";
10
10
  import { initWorkspace } from "../utils/init-workspace.js";
11
11
  import { setupModel } from "./onboard/model.js";
12
12
  import { getChannelConfigurators } from "./onboard/channels/registry.js";
@@ -6,6 +6,15 @@ import { pruneRuntimeTools } from "../../runtime-tools/prune.js";
6
6
  import { Command } from "commander";
7
7
  //#region src/cli/commands/runtime.ts
8
8
  init_paths_state();
9
+ async function phoneDependencies(ctx) {
10
+ const { PhoneDependencyManager } = await import("../../runtime-tools/phone-dependencies.js");
11
+ const config = loadConfig(ctx.configPath);
12
+ return new PhoneDependencyManager({
13
+ stateDir: resolveStateDir(),
14
+ config: config.runtimeTools,
15
+ adbPath: config.phone.adbPath
16
+ });
17
+ }
9
18
  const RUNTIMES = [
10
19
  "node",
11
20
  "uv",
@@ -29,25 +38,44 @@ function printStatuses(statuses) {
29
38
  }
30
39
  }
31
40
  function createRuntimeCommand(ctx) {
32
- const command = new Command("runtime").description("Manage Node.js and Python tool runtimes used by agents").addHelpText("after", formatExamples([
41
+ const command = new Command("runtime").description("Manage agent runtimes and phone dependencies").addHelpText("after", formatExamples([
33
42
  "xopc runtime status",
34
43
  "xopc runtime install node",
35
44
  "xopc runtime install python --version 3.12",
45
+ "xopc runtime install adb",
46
+ "xopc runtime install scrcpy",
36
47
  "xopc runtime repair python",
37
48
  "xopc runtime prune"
38
49
  ]));
39
- command.command("status").description("Show managed tool runtime status").option("--json", "Output JSON").action(async (options) => {
50
+ command.command("status").description("Show managed tool runtime status").option("--json", "Output JSON").option("--phone", "Show ADB and scrcpy server dependencies").action(async (options) => {
51
+ if (options.phone) {
52
+ const statuses = await (await phoneDependencies(ctx)).status();
53
+ console.log(options.json ? JSON.stringify(statuses, null, 2) : statuses.map((status) => `${status.kind.padEnd(6)} ${status.state.padEnd(10)} ${status.version ?? status.requestedVersion}${status.path ? ` — ${status.path}` : ""}`).join("\n"));
54
+ if (statuses.some((status) => status.state === "corrupted")) process.exitCode = 1;
55
+ return;
56
+ }
40
57
  const statuses = await manager(ctx).statusAll();
41
58
  if (options.json) console.log(JSON.stringify(statuses, null, 2));
42
59
  else printStatuses(statuses);
43
60
  if (statuses.some((status) => status.state === "corrupted" || status.state === "failed")) process.exitCode = 1;
44
61
  });
45
- command.command("install").description("Install one managed runtime").argument("<runtime>", "node, uv, or python").option("--version <version>", "Requested runtime version").action(async (runtimeValue, options) => {
62
+ command.command("install").description("Install one managed runtime").argument("<runtime>", "node, uv, python, adb, or scrcpy").option("--version <version>", "Requested runtime version").action(async (runtimeValue, options) => {
63
+ if (runtimeValue === "adb" || runtimeValue === "scrcpy") {
64
+ if (options.version) throw new Error("Phone dependencies use the pinned catalog version; omit --version");
65
+ await (await phoneDependencies(ctx)).install(runtimeValue);
66
+ console.log(`${runtimeValue} installed in the Gateway state directory`);
67
+ return;
68
+ }
46
69
  const runtime = parseRuntime(runtimeValue);
47
70
  const resolved = await manager(ctx).install(runtime, options.version);
48
71
  console.log(`${runtime} ${resolved.version} installed at ${resolved.executable}`);
49
72
  });
50
- command.command("repair").description("Reinstall one invalid managed runtime").argument("<runtime>", "node, uv, or python").action(async (runtimeValue) => {
73
+ command.command("repair").description("Reinstall one invalid managed runtime").argument("<runtime>", "node, uv, python, adb, or scrcpy").action(async (runtimeValue) => {
74
+ if (runtimeValue === "adb" || runtimeValue === "scrcpy") {
75
+ await (await phoneDependencies(ctx)).install(runtimeValue, { repair: true });
76
+ console.log(`${runtimeValue} managed installation repaired`);
77
+ return;
78
+ }
51
79
  const runtime = parseRuntime(runtimeValue);
52
80
  const resolved = await manager(ctx).repair(runtime);
53
81
  console.log(`${runtime} ${resolved.version} repaired at ${resolved.executable}`);
@@ -1,11 +1,12 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
2
- import { AgentCatalogService } from "../../agent-catalog/service.js";
3
2
  import { ConfigSchema, init_schema } from "../../config/schema.js";
3
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
4
+ import { readConfigFileSnapshot } from "../../config/config-file.js";
4
5
  import { saveConfig } from "../../config/loader.js";
5
6
  import { ensureStarterAgentsInitialized } from "../../agent/starter-agents.js";
6
7
  import { bootstrapApplicationStateSync } from "../../bootstrap/application-state.js";
7
8
  import { dirname } from "node:path";
8
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
9
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
9
10
  import { randomBytes } from "node:crypto";
10
11
  //#region src/cli/utils/init-workspace-core.ts
11
12
  init_schema();
@@ -19,9 +20,10 @@ async function serializeConfig(cfg, assertChannelPlugins) {
19
20
  return JSON.stringify(validated, null, 2);
20
21
  }
21
22
  async function readDiskConfig(configPath, assertChannelPlugins) {
22
- const raw = readFileSync(configPath, "utf-8");
23
- const cfg = ConfigSchema.parse(JSON.parse(raw));
23
+ const snapshot = readConfigFileSnapshot(configPath);
24
+ const cfg = snapshot.config;
24
25
  await assertChannelPluginsIfNeeded(cfg, assertChannelPlugins);
26
+ snapshot.discardRetiredFields();
25
27
  return cfg;
26
28
  }
27
29
  /**
@@ -178,12 +178,12 @@ export declare const ComputerSessionReportSchema: z.ZodObject<{
178
178
  recentActions: z.ZodArray<z.ZodObject<{
179
179
  kind: z.ZodEnum<{
180
180
  wait: "wait";
181
+ typeText: "typeText";
181
182
  activate: "activate";
182
183
  showMenu: "showMenu";
183
184
  click: "click";
184
185
  drag: "drag";
185
186
  setValue: "setValue";
186
- typeText: "typeText";
187
187
  pressKeys: "pressKeys";
188
188
  scroll: "scroll";
189
189
  }>;
@@ -1,6 +1,6 @@
1
+ import { normalizeAgentId } from "../agent-catalog/id.js";
1
2
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
2
3
  import { init_agent_config } from "../agent-config/index.js";
3
- import { normalizeAgentId } from "../agent-catalog/id.js";
4
4
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
5
5
  import { init_agent_scope, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
6
6
  import { getConversationRouting } from "../storage/sqlite/conversation-repository.js";
@@ -0,0 +1,6 @@
1
+ import { type Config } from './schema.js';
2
+ /** Validate existing settings before committing removal of retired fields. */
3
+ export declare function readConfigFileSnapshot(path: string): {
4
+ config: Config;
5
+ discardRetiredFields: () => void;
6
+ };
@@ -0,0 +1,35 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
4
+ import { ConfigSchema, init_schema } from "./schema.js";
5
+ import { readFileSync } from "node:fs";
6
+ //#region src/config/config-file.ts
7
+ init_write_file_atomic();
8
+ init_logger();
9
+ init_schema();
10
+ const log = createLogger("ConfigFile");
11
+ /** Validate existing settings before committing removal of retired fields. */
12
+ function readConfigFileSnapshot(path) {
13
+ const original = readFileSync(path, "utf8");
14
+ const raw = JSON.parse(original);
15
+ const hasRetiredFields = raw !== null && typeof raw === "object" && !Array.isArray(raw) && Object.hasOwn(raw, "workflows");
16
+ const current = hasRetiredFields ? { ...raw } : raw;
17
+ if (hasRetiredFields) delete current.workflows;
18
+ return {
19
+ config: ConfigSchema.parse(current),
20
+ discardRetiredFields: () => {
21
+ if (!hasRetiredFields) return;
22
+ try {
23
+ if (readFileSync(path, "utf8") !== original) return;
24
+ writeTextAtomicSync(path, `${JSON.stringify(current, null, 2)}\n`);
25
+ } catch (err) {
26
+ log.warn({
27
+ err,
28
+ path
29
+ }, "Could not remove retired configuration fields from disk");
30
+ }
31
+ }
32
+ };
33
+ }
34
+ //#endregion
35
+ export { readConfigFileSnapshot };
@@ -5,8 +5,9 @@ import { init_paths, resolveConfigPath } from "./paths.js";
5
5
  import { ConfigSchema, init_schema } from "./schema.js";
6
6
  import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
7
7
  import { assertChannelPluginConfigs } from "./validate-channel-configs.js";
8
+ import { readConfigFileSnapshot } from "./config-file.js";
8
9
  import { dirname } from "path";
9
- import { existsSync, mkdirSync, promises, readFileSync } from "fs";
10
+ import { existsSync, mkdirSync, promises } from "fs";
10
11
  import { config } from "dotenv";
11
12
  //#region src/config/loader.ts
12
13
  init_write_file_atomic();
@@ -47,10 +48,10 @@ function loadConfig(configPath) {
47
48
  config({ quiet: true });
48
49
  const path = configPath || process.env.XOPC_CONFIG_PATH || resolveConfigPath();
49
50
  if (existsSync(path)) try {
50
- const content = readFileSync(path, "utf-8");
51
- const json = JSON.parse(content);
52
- const cfg = ConfigSchema.parse(json);
51
+ const snapshot = readConfigFileSnapshot(path);
52
+ const cfg = snapshot.config;
53
53
  assertChannelPluginConfigs(cfg);
54
+ snapshot.discardRetiredFields();
54
55
  return activateConfig(cfg);
55
56
  } catch (error) {
56
57
  log.error({
@@ -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" },
@@ -8,8 +8,8 @@ import { assertManagedWorktreePath, assertNoNestedRegisteredWorktrees, readDirec
8
8
  import { dirname, resolve } from "node:path";
9
9
  import { existsSync } from "node:fs";
10
10
  import { randomUUID } from "node:crypto";
11
- import { mkdir, rm, stat } from "node:fs/promises";
12
11
  import lockfile from "proper-lockfile";
12
+ import { mkdir, rm, stat } from "node:fs/promises";
13
13
  //#region src/execution-environments/local-worktree-manager.ts
14
14
  init_logger();
15
15
  const log = createLogger("ExecutionEnvironment:LocalWorktree");
@@ -1,6 +1,6 @@
1
- import { parseFrontmatter } from "../../markdown/frontmatter.js";
2
1
  import { containedPath } from "./validation.js";
3
2
  import { AgentPluginStore } from "./store.js";
3
+ import { parseFrontmatter } from "../../markdown/frontmatter.js";
4
4
  import { createSkillConfigManager } from "../../agent/skills/config.js";
5
5
  import { parseSkillLocalizations } from "../../agent/skills/parse-skill-metadata.js";
6
6
  import { buildSkillMarkdownPreviewFromRaw } from "../../agent/skills/skill-markdown-preview-from-raw.js";
@@ -8,8 +8,8 @@ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
8
8
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
9
9
  import { createHash } from "node:crypto";
10
10
  import { z } from "zod";
11
- import yaml from "js-yaml";
12
11
  import { validateHeaderName, validateHeaderValue } from "node:http";
12
+ import yaml from "js-yaml";
13
13
  //#region src/extensions/agent-plugins/validation.ts
14
14
  init_schema();
15
15
  const PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
@@ -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: {
@@ -1,10 +1,10 @@
1
1
  import { normalizeAgentId, validateAgentIdForNewAgent } from "../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
3
3
  import { init_agent_scope, listAgentEntries, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath } from "../agent/agent-scope.js";
4
- import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
5
- import { AgentCatalogService } from "../agent-catalog/service.js";
6
4
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
5
+ import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
7
6
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
+ import { AgentCatalogService } from "../agent-catalog/service.js";
8
8
  import { GATEWAY_BUILTIN_TOOL_IDS } from "./agent-builtin-tools.js";
9
9
  import { resolve } from "node:path";
10
10
  import { mkdir, readFile, realpath, stat, unlink, writeFile } from "node:fs/promises";