@xopcai/xopc 0.0.251 → 0.0.253

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 (376) hide show
  1. package/README.md +8 -5
  2. package/README.zh-CN.md +8 -5
  3. package/dist/browser-ext/dist/background.js +358 -768
  4. package/dist/browser-ext/manifest.json +1 -2
  5. package/dist/extensions/telegram/src/inbound-processor.js +2 -2
  6. package/dist/extensions/telegram/src/plugin.js +3 -2
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/gateway/static/root/assets/{activity-store-DfBjTSo9.js → activity-store-CeS1bgXP.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bo_dmLv8.js → agent-avatar-dicebear-BdF3HhCW.js} +1 -1
  10. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +1 -0
  11. package/dist/gateway/static/root/assets/{agents-yuUn8n-f.js → agents-DARlgjTm.js} +1 -1
  12. package/dist/gateway/static/root/assets/{api-zxpcJfgj.js → api-zMPeC0yU.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-Cz56nrVF.js → app-management-settings-panel-BaAFln8W.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-DxSws5U4.js → appearance-settings-CXvsoBlw.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-BhgvfBJT.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-7k15-hqo.js → archive-plugin-C0o_mVQI.js} +1 -1
  17. package/dist/gateway/static/root/assets/{attachment-load-B-SFpjd9.js → attachment-load-B5Ry3tGL.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-Qy36j19q.js → automations-page-DY5QAEQd.js} +1 -1
  19. package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +6 -0
  20. package/dist/gateway/static/root/assets/{binary-plugins-CPOZQt8F.js → binary-plugins-BydpEgBA.js} +1 -1
  21. package/dist/gateway/static/root/assets/{block-editor-DhvVlIp9.js → block-editor-D0CpUOMo.js} +3 -3
  22. package/dist/gateway/static/root/assets/browser-automation-inputs-DzbTsGI6.js +1 -0
  23. package/dist/gateway/static/root/assets/browser-automations-page-D7fZYjni.js +3 -0
  24. package/dist/gateway/static/root/assets/browser-settings-page-BBdMqxl0.js +3 -0
  25. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +7 -0
  26. package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +1 -0
  27. package/dist/gateway/static/root/assets/{channels-status-swr-CX-yWwLD.js → channels-status-swr-BGGRTkn6.js} +1 -1
  28. package/dist/gateway/static/root/assets/{chat-terminal-dock-1PJoxRuV.js → chat-terminal-dock-_CP4nvlg.js} +2 -2
  29. package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +2 -0
  30. package/dist/gateway/static/root/assets/{cron-expression-CBCc6zFA.js → cron-expression-g2U8Rllf.js} +1 -1
  31. package/dist/gateway/static/root/assets/{date-picker-u8K5Kt_N.js → date-picker-SmVlhtj_.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-y_i_cnpz.js → dependency-picker-D-0gcbbM.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-DyL0JxLm.js → desktop-pet-Cl3JRIu6.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-settings-d2d_IsyP.js → desktop-pet-settings-D7kvWQ9H.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-debug-page-DqIBKJwl.js → extension-debug-page-DtP2tJHY.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-DUW1xxj2.js → extension-page-CphZDdoT.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-BHY9qaNw.js → extension-settings-page-CsxVLV4-.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-config-swr-CMNbl0FZ.js → gateway-config-swr-BW3Bx-aV.js} +1 -1
  39. package/dist/gateway/static/root/assets/gateway-settings-DxBZ05dX.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-startup-retry-CR7Xg8As.js → gateway-startup-retry-DAq74TZe.js} +1 -1
  41. package/dist/gateway/static/root/assets/{heartbeat-settings-7CD9iPR7.js → heartbeat-settings-DWcKsIoZ.js} +1 -1
  42. package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +1 -0
  43. package/dist/gateway/static/root/assets/{image-generation-api-C5mn73ca.js → image-generation-api-MPuaXDRs.js} +1 -1
  44. package/dist/gateway/static/root/assets/index-C7RDs6S-.js +74 -0
  45. package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +2 -0
  46. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BtlqMleF.js → keyboard-shortcuts-settings-CfhaTqgE.js} +1 -1
  47. package/dist/gateway/static/root/assets/{local-app-workbench-page-BjxfkjxE.js → local-app-workbench-page-CR6asX7L.js} +2 -2
  48. package/dist/gateway/static/root/assets/{local-apps-page-B7xqQe2s.js → local-apps-page-g01W3kEK.js} +1 -1
  49. package/dist/gateway/static/root/assets/{locale-store-CF4erhjB.js → locale-store-BkeaPZpn.js} +1 -1
  50. package/dist/gateway/static/root/assets/{logs-page-kACaPZKL.js → logs-page-ZP4QTWoC.js} +2 -2
  51. package/dist/gateway/static/root/assets/{management-settings-A432siER.js → management-settings-DeGxJF_Z.js} +1 -1
  52. package/dist/gateway/static/root/assets/markdown-view-Ca7BRBLL.js +201 -0
  53. package/dist/gateway/static/root/assets/{media-plugins-CpvYiauZ.js → media-plugins-FmOhmzlD.js} +1 -1
  54. package/dist/gateway/static/root/assets/messages-C72stReU.js +3 -0
  55. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-DyjVGngO.js → mobile-pairing-wizard-BXNbn05L.js} +1 -1
  56. package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +5 -0
  57. package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +8 -0
  58. package/dist/gateway/static/root/assets/{page-tabs-B3FKzjR6.js → page-tabs-pyukZ1PJ.js} +1 -1
  59. package/dist/gateway/static/root/assets/{preview-open-alternatives-DnjrwAHD.js → preview-open-alternatives-slFHoMUe.js} +1 -1
  60. package/dist/gateway/static/root/assets/{product-open-page-COcr_NUJ.js → product-open-page-CXa3FNNk.js} +1 -1
  61. package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +1 -0
  62. package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +1 -0
  63. package/dist/gateway/static/root/assets/{registry-api-BsRBlji7.js → registry-api-CviQoUBf.js} +1 -1
  64. package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +1 -0
  65. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-LO4wZ_dO.js → runtime-tools-settings-panel-O9D9o7-O.js} +2 -2
  66. package/dist/gateway/static/root/assets/{schema-form-crcj4-Pm.js → schema-form-8FesicnL.js} +1 -1
  67. package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +1 -0
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-form-section-Bl4MvTmq.js → settings-form-section-CBic9TFH.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-DplrjZ6x.js → settings-page-Xz66_Mjg.js} +1 -1
  71. package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +1 -0
  72. package/dist/gateway/static/root/assets/{share-preview-page-CJP1kURj.js → share-preview-page--JpjwB58.js} +1 -1
  73. package/dist/gateway/static/root/assets/{shares-settings-CemgzEi4.js → shares-settings-CovcdHSC.js} +1 -1
  74. package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +1 -0
  75. package/dist/gateway/static/root/assets/{skills-page-DsjcKg9Q.js → skills-page-fVKExKv5.js} +1 -1
  76. package/dist/gateway/static/root/assets/{skills-page.utils-D6gWBbvy.js → skills-page.utils-Yv9u3uJp.js} +1 -1
  77. package/dist/gateway/static/root/assets/{system-settings-panel-_eCXfqCo.js → system-settings-panel-CCWjVdc2.js} +1 -1
  78. package/dist/gateway/static/root/assets/{task-detail-page-D0Z_K5JT.js → task-detail-page-I8hueJnG.js} +1 -1
  79. package/dist/gateway/static/root/assets/{theme-store-BOgkc_9D.js → theme-store-BtkaVpMm.js} +1 -1
  80. package/dist/gateway/static/root/assets/{tunnel-api-W5mktxl1.js → tunnel-api-C__W9BaN.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-Na2DYzT3.js → use-autosave-Dow9RRcq.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +2 -0
  83. package/dist/gateway/static/root/assets/{voice-api-key-field-OXweUxS_.js → voice-api-key-field-CvF3lEyx.js} +1 -1
  84. package/dist/gateway/static/root/assets/{voice-config-api-C-ryeIxj.js → voice-config-api-BEUVAyM6.js} +1 -1
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-BqOsO47I.js → work-discovery-overlay-B9PDfReq.js} +1 -1
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-B9S_lfT1.js → workflow-run-setup-panel-kWGFkhjz.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +5 -0
  88. package/dist/gateway/static/root/index.html +10 -10
  89. package/dist/package.js +1 -1
  90. package/dist/packages/gateway-contract/src/new-session.js +9 -0
  91. package/dist/packages/realtime-protocol/src/voice.js +6 -1
  92. package/dist/src/agent/agent-manager.d.ts +2 -1
  93. package/dist/src/agent/agent-manager.js +26 -8
  94. package/dist/src/agent/background-review/run-background-review.js +1 -1
  95. package/dist/src/agent/coding/repository-instructions.js +2 -2
  96. package/dist/src/agent/coding/workspace-revision.js +2 -2
  97. package/dist/src/agent/commands/command-isolation.js +2 -2
  98. package/dist/src/agent/embedded/execution-context.d.ts +2 -1
  99. package/dist/src/agent/embedded/execution-context.js +10 -4
  100. package/dist/src/agent/embedded/index.d.ts +1 -1
  101. package/dist/src/agent/embedded/index.js +2 -2
  102. package/dist/src/agent/embedded/model-runtime.js +1 -1
  103. package/dist/src/agent/embedded/run-for-session.js +5 -4
  104. package/dist/src/agent/embedded/run-turn.js +22 -3
  105. package/dist/src/agent/embedded/types.d.ts +1 -1
  106. package/dist/src/agent/external-tools/composio-provider.d.ts +1 -0
  107. package/dist/src/agent/external-tools/composio-provider.js +64 -34
  108. package/dist/src/agent/external-tools/search-error.js +5 -3
  109. package/dist/src/agent/image/tool-model-config.js +1 -1
  110. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  111. package/dist/src/agent/service/direct-turn-helpers.js +6 -3
  112. package/dist/src/agent/service/process-direct-streaming.js +6 -3
  113. package/dist/src/agent/service.d.ts +2 -0
  114. package/dist/src/agent/service.js +25 -10
  115. package/dist/src/agent/service.types.d.ts +2 -1
  116. package/dist/src/agent/session/session-inspector.js +1 -1
  117. package/dist/src/agent/skills/hub-lock.js +1 -1
  118. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +4 -0
  119. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  120. package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
  121. package/dist/src/agent/tool-manuals/browser.js +15 -226
  122. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +4 -21
  123. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +48 -165
  124. package/dist/src/agent/tools/browser/tool/schemas.d.ts +203 -16
  125. package/dist/src/agent/tools/browser/tool/schemas.js +146 -16
  126. package/dist/src/agent/tools/browser-automation-tool.d.ts +121 -0
  127. package/dist/src/agent/tools/browser-automation-tool.js +197 -0
  128. package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
  129. package/dist/src/agent/tools/clarify-tool.js +27 -32
  130. package/dist/src/agent/tools/cli-clarify.js +23 -8
  131. package/dist/src/agent/tools/factory.d.ts +6 -9
  132. package/dist/src/agent/tools/factory.js +42 -59
  133. package/dist/src/agent/tools/index.d.ts +2 -2
  134. package/dist/src/agent/tools/index.js +3 -3
  135. package/dist/src/agent/tools/review-workspace.js +2 -2
  136. package/dist/src/ai-assist/text-assist.js +1 -1
  137. package/dist/src/auth/credentials.js +2 -2
  138. package/dist/src/auth/oauth/xopc-cloud.js +3 -1
  139. package/dist/src/auth/profiles/store.js +1 -1
  140. package/dist/src/auth/sync-provider-auth.js +2 -2
  141. package/dist/src/automations/domain/defaults.js +1 -1
  142. package/dist/src/automations/domain/types.d.ts +5 -5
  143. package/dist/src/automations/domain/validation.d.ts +16 -16
  144. package/dist/src/automations/domain/validation.js +3 -3
  145. package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -4
  146. package/dist/src/automations/draft/automation-draft-validator.js +1 -1
  147. package/dist/src/automations/service/action-executor.d.ts +1 -1
  148. package/dist/src/automations/service/action-executor.js +7 -7
  149. package/dist/src/browser/{recipes → automations}/index.d.ts +1 -0
  150. package/dist/src/browser/automations/index.js +4 -0
  151. package/dist/src/browser/automations/repository.d.ts +13 -0
  152. package/dist/src/browser/automations/repository.js +60 -0
  153. package/dist/src/browser/automations/runner.d.ts +17 -0
  154. package/dist/src/browser/automations/runner.js +173 -0
  155. package/dist/src/browser/automations/runtime-service.d.ts +6 -0
  156. package/dist/src/browser/automations/runtime-service.js +37 -0
  157. package/dist/src/browser/automations/schema.d.ts +144 -0
  158. package/dist/src/browser/automations/schema.js +135 -0
  159. package/dist/src/browser/automations/service.d.ts +146 -0
  160. package/dist/src/browser/automations/service.js +168 -0
  161. package/dist/src/browser/automations/types.d.ts +90 -0
  162. package/dist/src/browser/cache-dir-policy.d.ts +1 -1
  163. package/dist/src/browser/cache-dir-policy.js +1 -4
  164. package/dist/src/browser/drivers/browser-driver.d.ts +17 -0
  165. package/dist/src/browser/drivers/create-driver.d.ts +3 -0
  166. package/dist/src/browser/drivers/create-driver.js +84 -0
  167. package/dist/src/browser/drivers/extension-driver.d.ts +20 -0
  168. package/dist/src/browser/drivers/extension-driver.js +47 -0
  169. package/dist/src/browser/drivers/playwright-driver.d.ts +38 -0
  170. package/dist/src/browser/drivers/playwright-driver.js +406 -0
  171. package/dist/src/browser/index.d.ts +10 -15
  172. package/dist/src/browser/index.js +10 -15
  173. package/dist/src/browser/install-lock.d.ts +1 -2
  174. package/dist/src/browser/install-lock.js +3 -9
  175. package/dist/src/browser/install-progress.d.ts +1 -1
  176. package/dist/src/browser/observation/format.d.ts +2 -0
  177. package/dist/src/browser/observation/format.js +26 -0
  178. package/dist/src/browser/policy/approval-store.d.ts +17 -0
  179. package/dist/src/browser/policy/approval-store.js +62 -0
  180. package/dist/src/browser/policy/browser-policy.d.ts +3 -0
  181. package/dist/src/browser/policy/browser-policy.js +27 -0
  182. package/dist/src/browser/providers/browser-ext-install.d.ts +1 -1
  183. package/dist/src/browser/providers/browser-ext-install.js +4 -6
  184. package/dist/src/browser/providers/browser-use.js +1 -1
  185. package/dist/src/browser/providers/browserbase.js +1 -1
  186. package/dist/src/browser/providers/extension-ws-acquire.d.ts +1 -4
  187. package/dist/src/browser/providers/extension-ws-acquire.js +1 -13
  188. package/dist/src/browser/providers/extension.d.ts +3 -22
  189. package/dist/src/browser/providers/extension.js +7 -15
  190. package/dist/src/browser/providers/index.d.ts +2 -2
  191. package/dist/src/browser/providers/index.js +3 -3
  192. package/dist/src/browser/providers/types.d.ts +0 -94
  193. package/dist/src/browser/readiness.d.ts +4 -22
  194. package/dist/src/browser/readiness.js +55 -118
  195. package/dist/src/browser/runtime/browser-runtime.d.ts +30 -0
  196. package/dist/src/browser/runtime/browser-runtime.js +362 -0
  197. package/dist/src/browser/url-policy.d.ts +3 -3
  198. package/dist/src/browser/url-policy.js +7 -6
  199. package/dist/src/browser/verification/expectation.d.ts +2 -0
  200. package/dist/src/browser/verification/expectation.js +17 -0
  201. package/dist/src/cli/command-loaders.js +1 -0
  202. package/dist/src/cli/command-manifest.js +5 -1
  203. package/dist/src/cli/commands/browser-cli-helpers.d.ts +0 -6
  204. package/dist/src/cli/commands/browser-cli-helpers.js +11 -144
  205. package/dist/src/cli/commands/browser.d.ts +0 -5
  206. package/dist/src/cli/commands/browser.js +11 -152
  207. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  208. package/dist/src/cli/commands/doctor/checks/node-version.js +25 -9
  209. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  210. package/dist/src/cli/commands/models.js +1 -1
  211. package/dist/src/cli/commands/platform.d.ts +1 -0
  212. package/dist/src/cli/commands/platform.js +111 -0
  213. package/dist/src/config/index.js +4 -4
  214. package/dist/src/config/loader.js +10 -4
  215. package/dist/src/config/models-json.js +1 -1
  216. package/dist/src/config/schema.d.ts +131 -84
  217. package/dist/src/config/schema.js +112 -59
  218. package/dist/src/connectors/composio-sessions.js +1 -3
  219. package/dist/src/extensions/lockfile.js +1 -1
  220. package/dist/src/extensions/marketplace.js +4 -0
  221. package/dist/src/gateway/agents-admin.js +1 -1
  222. package/dist/src/gateway/chat-stream/mapper.js +5 -1
  223. package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
  224. package/dist/src/gateway/clarify-runtime.d.ts +7 -5
  225. package/dist/src/gateway/clarify-runtime.js +8 -11
  226. package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
  227. package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
  228. package/dist/src/gateway/file-path-classifier.js +1 -1
  229. package/dist/src/gateway/heartbeat/service.js +1 -1
  230. package/dist/src/gateway/hono/lib/config-payload.d.ts +12 -26
  231. package/dist/src/gateway/hono/lib/config-payload.js +11 -40
  232. package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
  233. package/dist/src/gateway/hono/routes/browser-automations.d.ts +3 -0
  234. package/dist/src/gateway/hono/routes/browser-automations.js +77 -0
  235. package/dist/src/gateway/hono/routes/browser-install.js +0 -32
  236. package/dist/src/gateway/hono/routes/browser.d.ts +0 -17
  237. package/dist/src/gateway/hono/routes/browser.js +46 -568
  238. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
  239. package/dist/src/gateway/hono/routes/config.js +0 -11
  240. package/dist/src/gateway/hono/routes/lazy-bundles.js +5 -5
  241. package/dist/src/gateway/hono/routes/models.js +1 -1
  242. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
  243. package/dist/src/gateway/hono/routes/side-chats.js +24 -4
  244. package/dist/src/gateway/security/gateway-scopes.js +1 -1
  245. package/dist/src/gateway/service/agent-runner.d.ts +25 -36
  246. package/dist/src/gateway/service/agent-runner.js +103 -32
  247. package/dist/src/gateway/service/config-coordinator.js +1 -1
  248. package/dist/src/gateway/service/run-gateway-agent.js +5 -2
  249. package/dist/src/gateway/service/session-input-coordinator.js +4 -1
  250. package/dist/src/gateway/service/sessions-api.js +1 -1
  251. package/dist/src/gateway/service.d.ts +8 -8
  252. package/dist/src/gateway/service.js +50 -37
  253. package/dist/src/gateway/side-chat/manager.d.ts +2 -1
  254. package/dist/src/gateway/side-chat/manager.js +5 -4
  255. package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
  256. package/dist/src/gateway/side-chat/run-service.js +24 -23
  257. package/dist/src/gateway/side-chat/types.d.ts +3 -1
  258. package/dist/src/heartbeat/index.js +1 -1
  259. package/dist/src/platform/client.d.ts +121 -0
  260. package/dist/src/platform/client.js +108 -0
  261. package/dist/src/platform/contracts.d.ts +194 -0
  262. package/dist/src/platform/contracts.js +150 -0
  263. package/dist/src/platform/index.d.ts +4 -0
  264. package/dist/src/platform/index.js +9 -0
  265. package/dist/src/platform/resolution.d.ts +4 -0
  266. package/dist/src/platform/resolution.js +16 -0
  267. package/dist/src/platform/worker.d.ts +6 -0
  268. package/dist/src/platform/worker.js +75 -0
  269. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  270. package/dist/src/providers/index.js +2 -2
  271. package/dist/src/providers/model-registry.js +1 -1
  272. package/dist/src/providers/register-runtime-providers.js +1 -1
  273. package/dist/src/providers/xopc-cloud-config.js +3 -1
  274. package/dist/src/session/session-context-for-llm.js +41 -1
  275. package/dist/src/share/hosted-session-share.js +3 -1
  276. package/dist/src/share/share-thumbnail.js +1 -1
  277. package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
  278. package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
  279. package/dist/src/storage/sqlite/index.d.ts +2 -1
  280. package/dist/src/storage/sqlite/index.js +2 -1
  281. package/dist/src/storage/sqlite/migrations/153_browser_control_v2.sql +45 -0
  282. package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -0
  283. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  284. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  285. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  286. package/dist/src/storage/sqlite/schema.js +1 -1
  287. package/dist/src/storage/sqlite/schema.sql +16 -20
  288. package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
  289. package/dist/src/tasks/home-query-service.js +1 -1
  290. package/dist/src/tui/tui-startup-resources.js +1 -1
  291. package/dist/src/tui/tui.js +1 -1
  292. package/dist/src/tunnel/env.js +3 -1
  293. package/dist/src/voice/realtime/agentEngine.js +7 -2
  294. package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
  295. package/dist/src/work-discovery/service.js +1 -1
  296. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  297. package/package.json +7 -7
  298. package/skills/creative/hatch-pet/SKILL.md +1 -1
  299. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-kILWelNb.js +0 -1
  300. package/dist/gateway/static/root/assets/apps-page-BnizTdgs.js +0 -1
  301. package/dist/gateway/static/root/assets/automations-workspace-CZRKqSqY.js +0 -6
  302. package/dist/gateway/static/root/assets/browser-settings-page-pN5LbChY.js +0 -8
  303. package/dist/gateway/static/root/assets/browser-workflow-inputs-BX1-uM9L.js +0 -1
  304. package/dist/gateway/static/root/assets/browser-workflows-page-C65MI57t.js +0 -3
  305. package/dist/gateway/static/root/assets/capabilities-settings-panel-CJw2e16J.js +0 -7
  306. package/dist/gateway/static/root/assets/channels-settings-CRgjb4Ck.js +0 -1
  307. package/dist/gateway/static/root/assets/connectors-page-Dcpdy06y.js +0 -2
  308. package/dist/gateway/static/root/assets/gateway-config-api-e3BRcgDx.js +0 -1
  309. package/dist/gateway/static/root/assets/gateway-settings-Cheo0Rkc.js +0 -1
  310. package/dist/gateway/static/root/assets/home-page-DVrTRqNc.js +0 -1
  311. package/dist/gateway/static/root/assets/index-B7CX4Qob.css +0 -2
  312. package/dist/gateway/static/root/assets/index-BHrpyJ4t.js +0 -72
  313. package/dist/gateway/static/root/assets/markdown-view-CQvzsE24.js +0 -201
  314. package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +0 -3
  315. package/dist/gateway/static/root/assets/note-detail-panel-CUd8O4K7.js +0 -5
  316. package/dist/gateway/static/root/assets/notes-page-BLQwd39W.js +0 -8
  317. package/dist/gateway/static/root/assets/project-detail-page-NttW338u.js +0 -1
  318. package/dist/gateway/static/root/assets/projects-page-BzH8pjEz.js +0 -1
  319. package/dist/gateway/static/root/assets/remote-access-hub-BxpjSDnL.js +0 -1
  320. package/dist/gateway/static/root/assets/sessions-page-BLMaibOb.js +0 -1
  321. package/dist/gateway/static/root/assets/settings-advanced-gate-BRvvKhoH.js +0 -1
  322. package/dist/gateway/static/root/assets/setup-status-panel-DTOsxQC1.js +0 -1
  323. package/dist/gateway/static/root/assets/skill-reload-api-BWYanBlQ.js +0 -1
  324. package/dist/gateway/static/root/assets/user-model-page-B_-SNat-.js +0 -2
  325. package/dist/gateway/static/root/assets/workflows-page-CNOT2Coo.js +0 -5
  326. package/dist/src/agent/tools/browser-recipe-tool.d.ts +0 -12
  327. package/dist/src/agent/tools/browser-recipe-tool.js +0 -113
  328. package/dist/src/browser/actions/extension-registry-bridge.d.ts +0 -5
  329. package/dist/src/browser/actions/extension-registry-bridge.js +0 -312
  330. package/dist/src/browser/actions/registry.d.ts +0 -5
  331. package/dist/src/browser/actions/registry.js +0 -741
  332. package/dist/src/browser/actions/types.d.ts +0 -65
  333. package/dist/src/browser/backend-from-config.d.ts +0 -22
  334. package/dist/src/browser/backend-from-config.js +0 -99
  335. package/dist/src/browser/browser-command-timeout.d.ts +0 -2
  336. package/dist/src/browser/browser-command-timeout.js +0 -11
  337. package/dist/src/browser/cdp-local-launcher.d.ts +0 -35
  338. package/dist/src/browser/cdp-local-launcher.js +0 -154
  339. package/dist/src/browser/cdp-supervisor.d.ts +0 -58
  340. package/dist/src/browser/cdp-supervisor.js +0 -133
  341. package/dist/src/browser/humanize.d.ts +0 -80
  342. package/dist/src/browser/humanize.js +0 -363
  343. package/dist/src/browser/manager.d.ts +0 -50
  344. package/dist/src/browser/manager.js +0 -251
  345. package/dist/src/browser/pipeline/output.d.ts +0 -35
  346. package/dist/src/browser/pipeline/output.js +0 -74
  347. package/dist/src/browser/pipeline/runner.d.ts +0 -27
  348. package/dist/src/browser/pipeline/runner.js +0 -453
  349. package/dist/src/browser/pipeline/schema.d.ts +0 -42
  350. package/dist/src/browser/pipeline/schema.js +0 -116
  351. package/dist/src/browser/pipeline/template.d.ts +0 -30
  352. package/dist/src/browser/pipeline/template.js +0 -112
  353. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -83
  354. package/dist/src/browser/providers/cloakbrowser.js +0 -612
  355. package/dist/src/browser/recipes/index.js +0 -3
  356. package/dist/src/browser/recipes/repository.d.ts +0 -13
  357. package/dist/src/browser/recipes/repository.js +0 -81
  358. package/dist/src/browser/recipes/runtime-service.d.ts +0 -6
  359. package/dist/src/browser/recipes/runtime-service.js +0 -30
  360. package/dist/src/browser/recipes/service.d.ts +0 -36
  361. package/dist/src/browser/recipes/service.js +0 -186
  362. package/dist/src/browser/recipes/types.d.ts +0 -36
  363. package/dist/src/browser/schemas.d.ts +0 -53
  364. package/dist/src/browser/schemas.js +0 -68
  365. package/dist/src/browser/session-lifecycle.d.ts +0 -40
  366. package/dist/src/browser/session-lifecycle.js +0 -136
  367. package/dist/src/browser/snapshot-helpers.d.ts +0 -24
  368. package/dist/src/browser/snapshot-helpers.js +0 -70
  369. package/dist/src/browser/stealth.d.ts +0 -46
  370. package/dist/src/browser/stealth.js +0 -163
  371. package/dist/src/gateway/clarify-bridge.d.ts +0 -46
  372. package/dist/src/gateway/clarify-bridge.js +0 -111
  373. package/dist/src/gateway/hono/routes/browser-workflows.d.ts +0 -3
  374. package/dist/src/gateway/hono/routes/browser-workflows.js +0 -78
  375. /package/dist/src/browser/{actions → automations}/types.js +0 -0
  376. /package/dist/src/browser/{recipes/types.js → drivers/browser-driver.js} +0 -0
@@ -1,170 +1,29 @@
1
1
  import { register } from "../registry.js";
2
2
  import { Command } from "commander";
3
3
  //#region src/cli/commands/browser.ts
4
- /**
5
- * CLI: `xopc browser` — browser automation commands.
6
- *
7
- * Shares the same action registry and pipeline runner as the `browser_use` AgentTool.
8
- */
9
4
  function createBrowserCommand(_ctx) {
10
- const cmd = new Command("browser").description("Browser automation commands (uses Playwright)");
11
- cmd.command("open <url>").description("Open a URL in the browser").option("--headless", "Run without a visible window (default: use config; default config is headed)").action(async (url, opts) => {
12
- const { executeBrowserCliAction } = await import("./browser-cli-helpers.js");
13
- await executeBrowserCliAction("open", {
14
- url,
15
- ...opts
16
- });
17
- });
18
- cmd.command("state").description("Get current page state (URL, title, ARIA snapshot)").option("--selector <selector>", "CSS selector to scope snapshot").action(async (opts) => {
19
- const { executeBrowserCliAction } = await import("./browser-cli-helpers.js");
20
- await executeBrowserCliAction("state", opts);
21
- });
22
- cmd.command("click").description("Click an element").option("--selector <selector>", "CSS selector").option("--text <text>", "Visible text").option("--role <role>", "ARIA role:name (e.g. button:Submit)").action(async (opts) => {
23
- const { executeBrowserCliAction } = await import("./browser-cli-helpers.js");
24
- await executeBrowserCliAction("click", opts);
25
- });
26
- cmd.command("type").description("Type text into an input").option("--selector <selector>", "CSS selector").option("--label <label>", "Label text").requiredOption("--text <text>", "Text to type").option("--enter", "Press Enter after typing").action(async (opts) => {
27
- const { executeBrowserCliAction } = await import("./browser-cli-helpers.js");
28
- await executeBrowserCliAction("type", {
29
- ...opts,
30
- pressEnter: opts.enter
31
- });
32
- });
33
- cmd.command("screenshot [path]").description("Take a screenshot").option("--selector <selector>", "CSS selector").option("--full-page", "Full page screenshot").action(async (path, opts) => {
34
- const { executeBrowserCliAction } = await import("./browser-cli-helpers.js");
35
- await executeBrowserCliAction("screenshot", {
36
- path: path ?? "./screenshot.png",
37
- ...opts,
38
- full_page: opts.fullPage
39
- });
40
- });
41
- cmd.command("validate <file>").description("Validate a Browser Recipe v1 YAML file without executing").action(async (file) => {
42
- const { validatePipelineCli } = await import("./browser-cli-helpers.js");
43
- await validatePipelineCli(file);
44
- });
45
- cmd.command("run <file>").description("Run a Browser Recipe v1 YAML file").option("--arg <args...>", "Recipe args (key=<JSON value>)").action(async (file, opts) => {
46
- const { runPipelineCli } = await import("./browser-cli-helpers.js");
47
- const args = {};
48
- if (opts.arg) for (const a of opts.arg) {
49
- const eq = a.indexOf("=");
50
- if (eq <= 0) throw new Error(`Invalid --arg: ${a}`);
51
- args[a.slice(0, eq)] = JSON.parse(a.slice(eq + 1));
52
- }
53
- await runPipelineCli(file, args);
54
- });
55
- cmd.command("doctor").description("Check browser environment (Playwright, Chromium)").action(async () => {
5
+ const command = new Command("browser").description("Browser Control v2 diagnostics and extension setup");
6
+ command.command("doctor").description("Check the configured browser driver").action(async () => {
56
7
  const { doctorCli } = await import("./browser-cli-helpers.js");
57
8
  await doctorCli();
58
9
  });
59
- cmd.command("close").description("Close the browser session").action(async () => {
60
- const { executeBrowserCliAction } = await import("./browser-cli-helpers.js");
61
- await executeBrowserCliAction("close", {});
62
- });
63
- const cloakCmd = cmd.command("cloakbrowser").description("CloakBrowser anti-fingerprint browser management");
64
- cloakCmd.command("doctor").description("Check CloakBrowser installation status and version").action(async () => {
65
- const { cloakBrowserDoctor } = await import("../../browser/providers/cloakbrowser.js");
66
- const result = await cloakBrowserDoctor();
67
- console.log("\n CloakBrowser Status\n");
68
- console.log(` Installed: ${result.installed ? "✓ yes" : "✗ no"}`);
69
- console.log(` Platform: ${result.platform}`);
70
- console.log(` Version: ${result.version ?? "(not installed)"}`);
71
- console.log(` Binary: ${result.binaryPath ?? "(not found)"}`);
72
- console.log(` Cache dir: ${result.cacheDir}`);
73
- console.log("");
74
- if (!result.installed) console.log(" Run \"xopc browser cloakbrowser install\" to download CloakBrowser.\n");
75
- });
76
- cloakCmd.command("install").description("Download and install CloakBrowser binary").option("--cache-dir <dir>", "Custom cache directory for the binary").action(async (opts) => {
77
- console.log("\n Downloading CloakBrowser...\n");
78
- try {
79
- const { launchCloakBrowser, cleanupCloakBrowser } = await import("../../browser/providers/cloakbrowser.js");
80
- const result = await launchCloakBrowser({
81
- headless: true,
82
- temporaryProfile: true,
83
- keepOpen: false,
84
- cacheDir: opts.cacheDir
85
- });
86
- await result.browser.close().catch(() => {});
87
- await cleanupCloakBrowser(result.childProcess, result.temporaryProfileDir);
88
- console.log(" ✓ CloakBrowser installed successfully.\n");
89
- } catch (e) {
90
- const msg = e instanceof Error ? e.message : String(e);
91
- console.error(` ✗ Installation failed: ${msg}\n`);
92
- process.exitCode = 1;
93
- }
94
- });
95
- const extensionCmd = cmd.command("extension").description("xopc Chrome extension (browser bridge) management");
96
- extensionCmd.command("doctor").description("Check bundled extension install status").option("--cache-dir <dir>", "Custom bin cache directory").action(async (opts) => {
10
+ const extension = command.command("extension").description("Chrome extension setup");
11
+ extension.command("doctor").description("Check extension artifacts").action(async () => {
97
12
  const { browserExtDoctor } = await import("../../browser/providers/browser-ext-install.js");
98
- const result = await browserExtDoctor({ cacheDir: opts.cacheDir });
99
- console.log("\n Chrome Extension Artifacts\n");
100
- console.log(` Bundled: ${result.bundledAvailable ? "✓ yes" : "✗ no"}`);
101
- console.log(` Installed: ${result.installed ? "✓ yes" : "✗ no"}`);
102
- console.log(` xopc ver: ${result.xopcVersion}`);
103
- console.log(` Installed: ${result.installedVersion ?? "(none)"}`);
104
- console.log(` Manifest: ${result.manifestVersion ?? "(none)"}`);
105
- console.log(` Directory: ${result.extensionDir ?? "(not installed)"}`);
106
- console.log(` Cache dir: ${result.cacheDir}`);
107
- console.log(` Refresh: ${result.needsRefresh ? "needed" : "up to date"}`);
108
- if (result.needsChromeReload) console.log(" ⚠ Chrome reload required (extension runtime version mismatch)");
109
- console.log("");
110
- if (!result.installed) console.log(" Run \"xopc browser extension install\" to copy bundled artifacts.\n");
111
- });
112
- extensionCmd.command("install").description("Copy bundled Chrome extension to the local bin directory").option("--cache-dir <dir>", "Custom bin cache directory").option("--force", "Force reinstall even when up to date").action(async (opts) => {
113
- console.log("\n Installing Chrome extension artifacts...\n");
114
- try {
115
- const { ensureBrowserExtensionArtifacts } = await import("../../browser/providers/browser-ext-install.js");
116
- const result = await ensureBrowserExtensionArtifacts({
117
- cacheDir: opts.cacheDir,
118
- force: opts.force
119
- });
120
- console.log(` ✓ ${result.copied ? "Installed" : "Already up to date"}`);
121
- console.log(` Directory: ${result.extensionDir}\n`);
122
- console.log(" Next steps:");
123
- console.log(" 1. Open chrome://extensions");
124
- console.log(" 2. Enable Developer mode");
125
- console.log(" 3. Load unpacked → select the directory above");
126
- console.log(" 4. Run \"xopc browser extension open\" to open Chrome and reveal the folder\n");
127
- } catch (e) {
128
- const msg = e instanceof Error ? e.message : String(e);
129
- console.error(` ✗ Installation failed: ${msg}\n`);
130
- process.exitCode = 1;
131
- }
13
+ console.log(JSON.stringify(await browserExtDoctor(), null, 2));
132
14
  });
133
- extensionCmd.command("open").description("Open chrome://extensions and reveal the extension folder").option("--cache-dir <dir>", "Custom bin cache directory").action(async (opts) => {
134
- try {
135
- const { openBrowserExtensionInstallUi } = await import("../../browser/providers/browser-ext-install.js");
136
- const { extensionDir } = await openBrowserExtensionInstallUi({
137
- action: "both",
138
- cacheDir: opts.cacheDir
139
- });
140
- console.log(`Opened Chrome extensions page and folder:\n ${extensionDir}`);
141
- } catch (e) {
142
- const msg = e instanceof Error ? e.message : String(e);
143
- console.error(` ✗ ${msg}\n`);
144
- process.exitCode = 1;
145
- }
15
+ extension.command("install").description("Install extension artifacts").action(async () => {
16
+ const { ensureBrowserExtensionArtifacts } = await import("../../browser/providers/browser-ext-install.js");
17
+ console.log(JSON.stringify(await ensureBrowserExtensionArtifacts(), null, 2));
146
18
  });
147
- return cmd;
19
+ return command;
148
20
  }
149
21
  register({
150
22
  id: "browser",
151
23
  name: "browser",
152
- description: "Browser automation commands",
24
+ description: "Browser Control v2 diagnostics and extension setup",
153
25
  factory: createBrowserCommand,
154
- metadata: {
155
- category: "utility",
156
- examples: [
157
- "xopc browser open https://example.com",
158
- "xopc browser validate ./flow.yaml",
159
- "xopc browser run ./flow.yaml",
160
- "xopc browser doctor",
161
- "xopc browser cloakbrowser doctor",
162
- "xopc browser cloakbrowser install",
163
- "xopc browser extension doctor",
164
- "xopc browser extension install",
165
- "xopc browser extension open"
166
- ]
167
- }
26
+ metadata: { category: "utility" }
168
27
  });
169
28
  //#endregion
170
29
  export {};
@@ -52,7 +52,7 @@ async function checkDatabaseSchema(ctx) {
52
52
  id: "database-schema",
53
53
  label: "Database schema",
54
54
  status: "pass",
55
- message: `SQLite schema v${status.dbVersion} (current release v152).`,
55
+ message: `SQLite schema v${status.dbVersion} (current release v154).`,
56
56
  hints: []
57
57
  };
58
58
  }
@@ -1,29 +1,45 @@
1
1
  //#region src/cli/commands/doctor/checks/node-version.ts
2
- function parseNodeMajorVersion() {
3
- const match = process.version.match(/^v(\d+)/);
4
- return match ? parseInt(match[1], 10) : 0;
2
+ const MINIMUM_NODE_VERSION = [
3
+ 22,
4
+ 22,
5
+ 3
6
+ ];
7
+ function parseNodeVersion() {
8
+ const match = process.version.match(/^v(\d+)\.(\d+)\.(\d+)/);
9
+ return match ? [
10
+ Number.parseInt(match[1], 10),
11
+ Number.parseInt(match[2], 10),
12
+ Number.parseInt(match[3], 10)
13
+ ] : void 0;
14
+ }
15
+ function meetsMinimumVersion(version) {
16
+ for (const [index, minimum] of MINIMUM_NODE_VERSION.entries()) {
17
+ if (version[index] > minimum) return true;
18
+ if (version[index] < minimum) return false;
19
+ }
20
+ return true;
5
21
  }
6
22
  async function checkNodeVersion(_ctx) {
7
- const major = parseNodeMajorVersion();
8
- if (major === 0) return {
23
+ const version = parseNodeVersion();
24
+ if (!version) return {
9
25
  id: "node-version",
10
26
  label: "Host Node.js",
11
27
  status: "warn",
12
28
  message: "Could not parse Node.js version.",
13
29
  hints: [`process.version=${process.version}`]
14
30
  };
15
- if (major < 22) return {
31
+ if (!meetsMinimumVersion(version)) return {
16
32
  id: "node-version",
17
33
  label: "Host Node.js",
18
34
  status: "fail",
19
- message: `Node ${major} is below the required minimum (22).`,
20
- hints: ["Install Node.js 22+ from https://nodejs.org/"]
35
+ message: `Node.js ${process.version} is below the required minimum (22.22.3).`,
36
+ hints: ["Install Node.js 22.22.3+ from https://nodejs.org/"]
21
37
  };
22
38
  return {
23
39
  id: "node-version",
24
40
  label: "Host Node.js",
25
41
  status: "pass",
26
- message: `Node.js ${process.version} meets the project requirement (>= 22).`,
42
+ message: `Node.js ${process.version} meets the project requirement (>= 22.22.3).`,
27
43
  hints: []
28
44
  };
29
45
  }
@@ -1,6 +1,6 @@
1
1
  import { getAgentDefaultModelRef, init_schema, parseModelRef } from "../../../../config/schema.js";
2
- import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "../../../../providers/env-keys.js";
3
2
  import { init_loader, loadConfig } from "../../../../config/loader.js";
3
+ import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "../../../../providers/env-keys.js";
4
4
  import { existsSync } from "node:fs";
5
5
  //#region src/cli/commands/doctor/checks/provider-auth.ts
6
6
  init_loader();
@@ -1,6 +1,6 @@
1
1
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
2
- import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
3
2
  import { loadConfig, saveConfig } from "../../config/loader.js";
3
+ import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
4
4
  import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
5
5
  import { formatExamples, register } from "../registry.js";
6
6
  import { getContextWithOpts } from "../context.js";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,111 @@
1
+ import { loadConfig, saveConfig } from "../../config/loader.js";
2
+ import { formatExamples, register } from "../registry.js";
3
+ import "../../config/index.js";
4
+ import { PLATFORM_RUNTIME_PROFILE, PLATFORM_RUNTIME_PROVIDER, PlatformRuntimeClient, discoverPlatform } from "../../platform/client.js";
5
+ import "../../platform/index.js";
6
+ import { getProfile, upsertAuthProfile } from "../../auth/profiles/profiles.js";
7
+ import { Command } from "commander";
8
+ //#region src/cli/commands/platform.ts
9
+ async function readStdin() {
10
+ const chunks = [];
11
+ for await (const chunk of process.stdin) chunks.push(chunk);
12
+ return Buffer.concat(chunks).toString("utf8").trim();
13
+ }
14
+ async function readRuntimeToken(value, fromStdin) {
15
+ if (value?.trim()) return value.trim();
16
+ if (fromStdin) return readStdin();
17
+ if (process.stdin.isTTY) {
18
+ const { password } = await import("@inquirer/prompts");
19
+ return (await password({
20
+ message: "Platform runtime token",
21
+ mask: "*"
22
+ })).trim();
23
+ }
24
+ throw new Error("Provide a runtime token, pass --stdin, or run interactively.");
25
+ }
26
+ function runtimeToken() {
27
+ const fromEnv = process.env.XOPC_PLATFORM_RUNTIME_TOKEN?.trim();
28
+ if (fromEnv) return fromEnv;
29
+ const credential = getProfile(PLATFORM_RUNTIME_PROFILE);
30
+ if (credential?.type === "token" && credential.provider === "xopc-platform-runtime") return credential.token;
31
+ throw new Error("Runtime token is not configured. Run `xopc platform runtime token set`.");
32
+ }
33
+ function connectedConfig(ctx) {
34
+ const config = loadConfig(ctx.configPath);
35
+ if (config.platform.mode !== "connected") throw new Error("XOPC is in standalone mode. Run `xopc platform connect <url>`.");
36
+ return {
37
+ config,
38
+ platform: config.platform
39
+ };
40
+ }
41
+ function createPlatformCommand(ctx) {
42
+ const command = new Command("platform").description("Connect to XOPC Cloud or an enterprise platform").addHelpText("after", formatExamples([
43
+ "xopc platform connect https://console.xopc.ai",
44
+ "xopc platform status --refresh",
45
+ "xopc platform runtime token set --stdin",
46
+ "xopc platform runtime heartbeat"
47
+ ]));
48
+ command.command("connect").argument("<url>", "Platform base URL").option("--workspace <id>", "Default workspace ID").action(async (url, options) => {
49
+ const discovery = await discoverPlatform(url);
50
+ const config = loadConfig(ctx.configPath);
51
+ config.platform = {
52
+ mode: "connected",
53
+ url: new URL(url).toString().replace(/\/+$/, ""),
54
+ workspaceId: options.workspace,
55
+ discovery
56
+ };
57
+ await saveConfig(config, ctx.configPath);
58
+ console.log(`Connected to ${discovery.displayName} (${discovery.deploymentMode}, ${discovery.region})`);
59
+ });
60
+ command.command("disconnect").description("Return to standalone mode").action(async () => {
61
+ const config = loadConfig(ctx.configPath);
62
+ config.platform = { mode: "standalone" };
63
+ await saveConfig(config, ctx.configPath);
64
+ console.log("XOPC is now in standalone mode.");
65
+ });
66
+ command.command("status").option("--refresh", "Refresh discovery before printing status").option("--json", "Output JSON").action(async (options) => {
67
+ const config = loadConfig(ctx.configPath);
68
+ if (config.platform.mode === "standalone") {
69
+ console.log(options.json ? JSON.stringify(config.platform) : "Mode: standalone");
70
+ return;
71
+ }
72
+ if (options.refresh) {
73
+ config.platform.discovery = await discoverPlatform(config.platform.url);
74
+ await saveConfig(config, ctx.configPath);
75
+ }
76
+ if (options.json) console.log(JSON.stringify(config.platform, null, 2));
77
+ else console.log(`Mode: connected\nPlatform: ${config.platform.discovery.displayName}\nURL: ${config.platform.url}`);
78
+ });
79
+ const runtime = command.command("runtime").description("Manage this XOPC runtime connection");
80
+ runtime.command("token").description("Store the one-time runtime registration token").command("set").argument("[token]").option("--stdin", "Read token from standard input").action(async (value, options) => {
81
+ const runtimeTokenValue = await readRuntimeToken(value, options.stdin ?? false);
82
+ if (!/^xopc_rt_[A-Za-z0-9_-]{43}$/.test(runtimeTokenValue)) throw new Error("Invalid platform runtime token.");
83
+ upsertAuthProfile({
84
+ profileId: PLATFORM_RUNTIME_PROFILE,
85
+ credential: {
86
+ type: "token",
87
+ provider: PLATFORM_RUNTIME_PROVIDER,
88
+ token: runtimeTokenValue
89
+ }
90
+ });
91
+ console.log("Platform runtime token stored in the credential store.");
92
+ });
93
+ runtime.command("heartbeat").description("Verify the outbound runtime connection and fetch current policy snapshots").option("--json", "Output JSON").action(async (options) => {
94
+ const { platform } = connectedConfig(ctx);
95
+ const result = await new PlatformRuntimeClient(platform.discovery, runtimeToken()).heartbeat({ capabilities: { engine: "xopc" } });
96
+ console.log(options.json ? JSON.stringify(result, null, 2) : "Runtime heartbeat accepted.");
97
+ });
98
+ return command;
99
+ }
100
+ register({
101
+ id: "platform",
102
+ name: "platform",
103
+ description: "Connect to XOPC Cloud or an enterprise platform",
104
+ factory: createPlatformCommand,
105
+ metadata: {
106
+ category: "runtime",
107
+ examples: ["xopc platform status"]
108
+ }
109
+ });
110
+ //#endregion
111
+ export {};
@@ -2,15 +2,15 @@ import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXop
2
2
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
3
3
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
4
4
  import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpOAuthConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
5
- import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
5
+ import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
6
6
  import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
7
7
  import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
8
8
  import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
9
+ import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
9
10
  import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMcpOAuthPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
10
- import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
11
11
  import { init_loader, loadConfig, saveConfig } from "./loader.js";
12
- import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
13
- import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
12
+ import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
13
+ import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
14
14
  import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
15
15
  import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
16
16
  import { getWorkspacePath } from "./workspace-path-helpers.js";
@@ -2,13 +2,18 @@ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { ConfigSchema, init_schema } from "./schema.js";
5
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
6
5
  import { init_paths, resolveConfigPath } from "./paths.js";
6
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
7
7
  import { assertChannelPluginConfigs, init_validate_channel_configs } from "./validate-channel-configs.js";
8
+ import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
8
9
  import { dirname } from "path";
9
10
  import { existsSync, mkdirSync, promises, readFileSync } from "fs";
10
11
  import { config } from "dotenv";
11
12
  //#region src/config/loader.ts
13
+ function activateConfig(configValue) {
14
+ setActivePlatformDiscovery(configValue.platform.mode === "connected" ? configValue.platform.discovery : void 0);
15
+ return configValue;
16
+ }
12
17
  /**
13
18
  * Rotate config backups before writing new config.
14
19
  * Creates a backup chain: xopc.json.bak, xopc.json.bak.1, xopc.json.bak.2, etc.
@@ -39,7 +44,7 @@ function loadConfig(configPath) {
39
44
  const json = JSON.parse(content);
40
45
  const cfg = ConfigSchema.parse(json);
41
46
  assertChannelPluginConfigs(cfg);
42
- return cfg;
47
+ return activateConfig(cfg);
43
48
  } catch (error) {
44
49
  log.error({
45
50
  err: error,
@@ -47,11 +52,11 @@ function loadConfig(configPath) {
47
52
  }, `Failed to load config`);
48
53
  const cfg = ConfigSchema.parse(void 0);
49
54
  assertChannelPluginConfigs(cfg);
50
- return cfg;
55
+ return activateConfig(cfg);
51
56
  }
52
57
  const cfg = ConfigSchema.parse(void 0);
53
58
  assertChannelPluginConfigs(cfg);
54
- return cfg;
59
+ return activateConfig(cfg);
55
60
  }
56
61
  /**
57
62
  * Save configuration to file
@@ -80,6 +85,7 @@ var init_loader = __esmMin((() => {
80
85
  init_paths();
81
86
  init_logger();
82
87
  init_validate_channel_configs();
88
+ init_resolution();
83
89
  log = createLogger("ConfigLoader");
84
90
  CONFIG_BACKUP_COUNT = 10;
85
91
  }));
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
3
2
  import { init_paths, resolveModelsJsonPath } from "./paths.js";
3
+ import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
4
4
  import { existsSync, readFileSync } from "fs";
5
5
  import { z } from "zod";
6
6
  //#region src/config/models-json.ts