@xopcai/xopc 0.0.208 → 0.0.211

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 (316) 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/{activity-store-D0mYZqhc.js → activity-store-BzjFoSr0.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-MWLQWL_i.js → agent-avatar-dicebear-DTfjhfVE.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-CjhgfuVJ.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-DZA1yVzM.js → api-D269PnU9.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-B2X6quAF.js → app-management-settings-panel-BFpfQDWc.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-BZW-c38q.js → appearance-settings-DLxFdqhY.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-CjmlGB5V.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-CK-gsjsJ.js → archive-plugin-DPlH4dnc.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-EJGP4rCw.js → attachment-load-xqfLLd0I.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-4m6Ey6wG.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-Tbss_4P-.js → binary-plugins-C0tuoPXk.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-C-dOWigw.js → block-editor-Deyphj1o.js} +6 -6
  15. package/dist/gateway/static/root/assets/browser-settings-page-CAGCYx8U.js +8 -0
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-DW06Zo1N.js → browser-workflow-inputs-CYEbXyRF.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-B6RnRGwm.js → browser-workflows-page-Bf0tPbGi.js} +2 -2
  18. package/dist/gateway/static/root/assets/capabilities-settings-panel-CKfLsxTI.js +7 -0
  19. package/dist/gateway/static/root/assets/{capability-presets-api-Cc3BtQar.js → capability-presets-api-DPkFA_-R.js} +1 -1
  20. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CpipKNqX.js +3 -0
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-BvZO5FaO.js → channel-recipient-api-DqKaAcnZ.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-settings-Bvq-O4pt.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-status-swr-CrMld2l7.js +1 -0
  24. package/dist/gateway/static/root/assets/chat-terminal-dock-CTDRZa7e.js +36 -0
  25. package/dist/gateway/static/root/assets/{connectors-api-CUl6_EQJ.js → connectors-api-Buu8fif8.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-CSQRzaVn.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-BD9MgoE_.js → cron-expression-DTLR82NB.js} +1 -1
  28. package/dist/gateway/static/root/assets/{date-picker-ChqNmoxw.js → date-picker-DyNogHQH.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dependency-picker-CDUmFs6H.js → dependency-picker-BpnCuo7B.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-D61gqxaD.js → desktop-pet-CDKI4gVB.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-settings-QvuJvIX_.js → desktop-pet-settings-DjT5C2a3.js} +1 -1
  32. package/dist/gateway/static/root/assets/{directory-picker-path-field-DvXMvDNY.js → directory-picker-path-field-DlJY90TM.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-debug-page-DMdVTAQ3.js → extension-debug-page-DWf2z7q5.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-page-BNzxZtaK.js → extension-page-Dorx0kf9.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-settings-page-DoEfyizU.js → extension-settings-page-B1wU9ZOB.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-config-api-o7AKvthC.js → gateway-config-api-B1lG4dNr.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-config-swr-BQbkUP5X.js → gateway-config-swr-BIxuwPQi.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-settings-TO5YYZ9a.js → gateway-settings-DqIOqJjM.js} +1 -1
  39. package/dist/gateway/static/root/assets/{gateway-startup-retry-DIgdpHgk.js → gateway-startup-retry-BpZgd4U-.js} +1 -1
  40. package/dist/gateway/static/root/assets/heartbeat-settings-DG4Kmgkc.js +1 -0
  41. package/dist/gateway/static/root/assets/home-page-BhqItS_s.js +1 -0
  42. package/dist/gateway/static/root/assets/image-generation-api-PkhYohDa.js +1 -0
  43. package/dist/gateway/static/root/assets/index-DLhvsU9B.css +2 -0
  44. package/dist/gateway/static/root/assets/index-_cuTcWjB.js +107 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-4xaM3jjU.js → keyboard-shortcuts-settings-6OQT3gQF.js} +1 -1
  46. package/dist/gateway/static/root/assets/local-app-workbench-page-DWjTmzxw.js +2 -0
  47. package/dist/gateway/static/root/assets/{local-apps-page-C1xDicdr.js → local-apps-page-DfruRAmE.js} +1 -1
  48. package/dist/gateway/static/root/assets/{locale-store-pByvK12G.js → locale-store-C5MK9WcP.js} +1 -1
  49. package/dist/gateway/static/root/assets/logs-page-BA5efZ8B.js +2 -0
  50. package/dist/gateway/static/root/assets/{management-settings-D1XdHm7v.js → management-settings-L1VYkywO.js} +1 -1
  51. package/dist/gateway/static/root/assets/{markdown-split-B_Ijq1Fr.js → markdown-split-oqgHbqt-.js} +1 -1
  52. package/dist/gateway/static/root/assets/markdown-view-DD_PgVue.css +1 -0
  53. package/dist/gateway/static/root/assets/{markdown-view-CyJlGUxB.js → markdown-view-V4rcPPH0.js} +1 -1
  54. package/dist/gateway/static/root/assets/{media-plugins-CXXNRROJ.js → media-plugins-Bb6gSX2o.js} +1 -1
  55. package/dist/gateway/static/root/assets/messages-ctG2e-ix.js +3 -0
  56. package/dist/gateway/static/root/assets/{notes-page-rkePB4CB.js → notes-page-B1rOXjpT.js} +1 -1
  57. package/dist/gateway/static/root/assets/notes-workbench-CkHXVmKP.js +4 -0
  58. package/dist/gateway/static/root/assets/{page-tabs-gw-RMQCV.js → page-tabs-CBuCKeyy.js} +1 -1
  59. package/dist/gateway/static/root/assets/{preview-open-alternatives-B8aMScJ2.js → preview-open-alternatives-BQ0tLfPO.js} +1 -1
  60. package/dist/gateway/static/root/assets/{product-open-page-CjcpkWAz.js → product-open-page-DPeFn7Hu.js} +1 -1
  61. package/dist/gateway/static/root/assets/project-detail-page-DCqet9-L.js +1 -0
  62. package/dist/gateway/static/root/assets/projects-page-D0t_AjzG.js +1 -0
  63. package/dist/gateway/static/root/assets/remote-access-hub-BUWPoBvw.js +1 -0
  64. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Ch5qq86o.js → runtime-tools-settings-panel-BCfQNzjG.js} +2 -2
  65. package/dist/gateway/static/root/assets/{schema-form-DHYWYUFt.js → schema-form-Bo7YbHYN.js} +1 -1
  66. package/dist/gateway/static/root/assets/sessions-page-vLhrrM3m.js +1 -0
  67. package/dist/gateway/static/root/assets/settings-advanced-gate-OP1y0Y8M.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-form-section-DlzZx0-i.js → settings-form-section-B9dnKr3M.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BVLhreQi.js → settings-loading-skeleton-CYDV2JtY.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-BJU-kUnN.js → settings-page-DbrIYfS9.js} +1 -1
  71. package/dist/gateway/static/root/assets/setup-status-panel-Cxc-Ejl5.js +1 -0
  72. package/dist/gateway/static/root/assets/{share-preview-page-hvIuZXMe.js → share-preview-page-olgr7LLN.js} +1 -1
  73. package/dist/gateway/static/root/assets/shares-settings-ZOqC6-aA.js +1 -0
  74. package/dist/gateway/static/root/assets/skill-reload-api-DwvC3Iuf.js +1 -0
  75. package/dist/gateway/static/root/assets/{skills-page-Dlvuh7D-.js → skills-page-PE16CNw5.js} +1 -1
  76. package/dist/gateway/static/root/assets/{skills-page.utils-B6ddOpnf.js → skills-page.utils-nXmBcBxt.js} +1 -1
  77. package/dist/gateway/static/root/assets/{system-settings-panel-BdbCAyoA.js → system-settings-panel-C3qPwAdY.js} +1 -1
  78. package/dist/gateway/static/root/assets/task-detail-page-DCRB-5q-.js +1 -0
  79. package/dist/gateway/static/root/assets/{theme-store-BtdGacMI.js → theme-store-KR5Otp5w.js} +1 -1
  80. package/dist/gateway/static/root/assets/{typed-models-lib-CL6qHYJA.js → typed-models-lib-lMZodtDF.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-DysNnqCS.js → use-autosave-CKpatP3S.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-context-page-CoiedRuA.js +1 -0
  83. package/dist/gateway/static/root/assets/{voice-api-key-field-UEsO9Jr-.js → voice-api-key-field-CDcv0Wbh.js} +1 -1
  84. package/dist/gateway/static/root/assets/{work-discovery-overlay-B9disASf.js → work-discovery-overlay-CGdT22un.js} +1 -1
  85. package/dist/gateway/static/root/assets/work-discovery-page-BwaU1RqI.js +1 -0
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-A0zTQHFQ.js → workflow-run-setup-panel-BAHYNlQt.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-DHYmh9G7.js +5 -0
  88. package/dist/gateway/static/root/index.html +10 -10
  89. package/dist/package.js +1 -1
  90. package/dist/src/agent/agent-manager.js +1 -1
  91. package/dist/src/agent/background-review/coordinator.d.ts +1 -1
  92. package/dist/src/agent/background-review/coordinator.js +4 -5
  93. package/dist/src/agent/background-review/run-background-review.js +0 -1
  94. package/dist/src/agent/background-review/settings.d.ts +1 -2
  95. package/dist/src/agent/background-review/settings.js +3 -4
  96. package/dist/src/agent/external-tools/composio-provider.js +8 -4
  97. package/dist/src/agent/image/generation/providers/xopc-cloud.js +2 -1
  98. package/dist/src/agent/image/tool-model-config.js +15 -9
  99. package/dist/src/agent/memory/builtin-provider.js +1 -2
  100. package/dist/src/agent/memory/manager.js +2 -0
  101. package/dist/src/agent/memory/sensitivity.js +1 -1
  102. package/dist/src/agent/memory/understanding/service.js +43 -19
  103. package/dist/src/agent/memory/user-context-coordinator.js +1 -1
  104. package/dist/src/agent/tools/image-generate-tool.js +23 -7
  105. package/dist/src/automations/domain/validation.d.ts +7 -7
  106. package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -2
  107. package/dist/src/capabilities/readiness/from-config.d.ts +10 -0
  108. package/dist/src/capabilities/readiness/from-config.js +128 -0
  109. package/dist/src/capabilities/readiness/index.d.ts +3 -0
  110. package/dist/src/capabilities/readiness/index.js +3 -0
  111. package/dist/src/capabilities/readiness/planner.d.ts +3 -0
  112. package/dist/src/capabilities/readiness/planner.js +56 -0
  113. package/dist/src/capabilities/readiness/types.d.ts +35 -0
  114. package/dist/src/capabilities/readiness/types.js +1 -0
  115. package/dist/src/cli/commands/agent.js +9 -0
  116. package/dist/src/cli/commands/auth.js +4 -3
  117. package/dist/src/cli/commands/connectors.js +1 -1
  118. package/dist/src/cli/commands/models.js +2 -1
  119. package/dist/src/cli/commands/onboard/model.d.ts +3 -21
  120. package/dist/src/cli/commands/onboard/model.js +10 -86
  121. package/dist/src/cli/utils/oauth-login.d.ts +2 -0
  122. package/dist/src/cli/utils/oauth-login.js +9 -1
  123. package/dist/src/config/agent-profile.js +1 -1
  124. package/dist/src/config/index.js +2 -2
  125. package/dist/src/config/paths-state.d.ts +2 -0
  126. package/dist/src/config/paths-state.js +5 -1
  127. package/dist/src/config/paths.d.ts +1 -1
  128. package/dist/src/config/paths.js +2 -2
  129. package/dist/src/config/schema.js +1 -1
  130. package/dist/src/connectors/auth-provider-registry.d.ts +2 -1
  131. package/dist/src/connectors/auth-provider-registry.js +5 -2
  132. package/dist/src/connectors/composio-sessions.d.ts +39 -0
  133. package/dist/src/connectors/composio-sessions.js +66 -7
  134. package/dist/src/connectors/composio.d.ts +4 -1
  135. package/dist/src/connectors/composio.js +34 -7
  136. package/dist/src/connectors/connected-source-cursor.d.ts +9 -0
  137. package/dist/src/connectors/connected-source-cursor.js +30 -0
  138. package/dist/src/connectors/connected-source-ingestion.js +67 -46
  139. package/dist/src/connectors/connected-source-normalizers.d.ts +1 -0
  140. package/dist/src/connectors/connected-source-normalizers.js +33 -2
  141. package/dist/src/connectors/connected-source-sanitization.d.ts +1 -0
  142. package/dist/src/connectors/connected-source-sanitization.js +21 -0
  143. package/dist/src/connectors/connector-identity.js +10 -2
  144. package/dist/src/connectors/content-enrichment.d.ts +29 -0
  145. package/dist/src/connectors/content-enrichment.js +273 -0
  146. package/dist/src/connectors/health.js +1 -1
  147. package/dist/src/connectors/learning-coordinator.js +1 -2
  148. package/dist/src/connectors/learning-recipes.js +28 -33
  149. package/dist/src/connectors/runtime-adapter-registry.js +14 -1
  150. package/dist/src/discussions/live-worker.d.ts +1 -0
  151. package/dist/src/discussions/live-worker.js +7 -1
  152. package/dist/src/discussions/repository.js +11 -1
  153. package/dist/src/discussions/sealer.d.ts +1 -1
  154. package/dist/src/discussions/sealer.js +16 -7
  155. package/dist/src/discussions/transcript.js +27 -1
  156. package/dist/src/discussions/types.d.ts +4 -0
  157. package/dist/src/gateway/agents-admin.js +1 -1
  158. package/dist/src/gateway/hono/app.js +8 -3
  159. package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +4 -0
  160. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +8 -1
  161. package/dist/src/gateway/hono/oauth-async.d.ts +11 -5
  162. package/dist/src/gateway/hono/oauth-async.js +29 -16
  163. package/dist/src/gateway/hono/oauth.d.ts +1 -3
  164. package/dist/src/gateway/hono/oauth.js +22 -22
  165. package/dist/src/gateway/hono/routes/agent-stream.js +4 -1
  166. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  167. package/dist/src/gateway/hono/routes/connectors.js +16 -3
  168. package/dist/src/gateway/hono/routes/deps.d.ts +1 -0
  169. package/dist/src/gateway/hono/routes/discussions.js +2 -1
  170. package/dist/src/gateway/hono/routes/lazy-bundles.js +2 -1
  171. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  172. package/dist/src/gateway/hono/routes/models.js +59 -5
  173. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +60 -0
  174. package/dist/src/gateway/hono/routes/session-input-handler.js +75 -1
  175. package/dist/src/gateway/hono/routes/understanding-sources.js +29 -0
  176. package/dist/src/gateway/hono/routes/voice.d.ts +1 -2
  177. package/dist/src/gateway/hono/routes/voice.js +16 -35
  178. package/dist/src/gateway/rate-limit/buckets.d.ts +3 -0
  179. package/dist/src/gateway/rate-limit/buckets.js +12 -0
  180. package/dist/src/gateway/service/agent-runner.d.ts +9 -1
  181. package/dist/src/gateway/service/agent-runner.js +9 -0
  182. package/dist/src/gateway/service/session-input-coordinator.d.ts +12 -0
  183. package/dist/src/gateway/service/session-input-coordinator.js +63 -6
  184. package/dist/src/gateway/service.d.ts +8 -0
  185. package/dist/src/gateway/service.js +18 -0
  186. package/dist/src/knowledge/connected-understanding-pipeline.d.ts +1 -1
  187. package/dist/src/knowledge/connected-understanding-pipeline.js +74 -25
  188. package/dist/src/knowledge/ingestion-service.js +33 -15
  189. package/dist/src/knowledge/types.d.ts +2 -0
  190. package/dist/src/media-understanding/audio-transcription-runner.d.ts +2 -0
  191. package/dist/src/media-understanding/audio-transcription-runner.js +3 -1
  192. package/dist/src/media-understanding/runner.js +3 -1
  193. package/dist/src/media-understanding/types.d.ts +2 -0
  194. package/dist/src/providers/model-catalog-persistence.d.ts +9 -0
  195. package/dist/src/providers/model-catalog-persistence.js +172 -0
  196. package/dist/src/providers/model-catalog-ranking.d.ts +2 -0
  197. package/dist/src/providers/model-catalog-ranking.js +17 -0
  198. package/dist/src/providers/model-catalog-store.d.ts +13 -3
  199. package/dist/src/providers/model-catalog-store.js +24 -5
  200. package/dist/src/providers/model-catalog-sync-service.d.ts +3 -3
  201. package/dist/src/providers/model-catalog-sync-service.js +12 -7
  202. package/dist/src/providers/provider-auth-service.d.ts +1 -0
  203. package/dist/src/providers/provider-auth-service.js +3 -0
  204. package/dist/src/providers/provider-disconnect.d.ts +11 -0
  205. package/dist/src/providers/provider-disconnect.js +33 -0
  206. package/dist/src/providers/xopc-cloud-catalog-coordinator.d.ts +56 -0
  207. package/dist/src/providers/xopc-cloud-catalog-coordinator.js +182 -0
  208. package/dist/src/providers/xopc-cloud-model-source.d.ts +6 -10
  209. package/dist/src/providers/xopc-cloud-model-source.js +49 -27
  210. package/dist/src/retrieval/audit.d.ts +1 -0
  211. package/dist/src/retrieval/audit.js +8 -0
  212. package/dist/src/retrieval/candidateFusion.d.ts +5 -0
  213. package/dist/src/retrieval/candidateFusion.js +20 -0
  214. package/dist/src/retrieval/queryProfile.d.ts +16 -0
  215. package/dist/src/retrieval/queryProfile.js +66 -0
  216. package/dist/src/retrieval/textFeatures.d.ts +5 -0
  217. package/dist/src/retrieval/textFeatures.js +71 -0
  218. package/dist/src/session/client-history.d.ts +1 -0
  219. package/dist/src/session/client-history.js +4 -0
  220. package/dist/src/session/index.js +1 -1
  221. package/dist/src/session/store.js +1 -1
  222. package/dist/src/storage/sqlite/fts.d.ts +0 -4
  223. package/dist/src/storage/sqlite/fts.js +2 -49
  224. package/dist/src/storage/sqlite/index.d.ts +3 -2
  225. package/dist/src/storage/sqlite/index.js +6 -5
  226. package/dist/src/storage/sqlite/knowledge-repository.d.ts +1 -0
  227. package/dist/src/storage/sqlite/knowledge-repository.js +4 -0
  228. package/dist/src/storage/sqlite/memory-records-repository.js +60 -38
  229. package/dist/src/storage/sqlite/row-mappers.js +2 -2
  230. package/dist/src/storage/sqlite/session-repository.js +2 -2
  231. package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +34 -0
  232. package/dist/src/storage/sqlite/session-turn-replace-repository.js +110 -0
  233. package/dist/src/storage/sqlite/transcript-repository.js +1 -1
  234. package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +15 -0
  235. package/dist/src/storage/sqlite/user-context-quality-repository.js +46 -2
  236. package/dist/src/storage/sqlite/user-context-repository.d.ts +4 -0
  237. package/dist/src/storage/sqlite/user-context-repository.js +29 -3
  238. package/dist/src/tasks/home-query-service.d.ts +3 -1
  239. package/dist/src/tasks/home-query-service.js +73 -70
  240. package/dist/src/tui/backends/embedded-backend.js +12 -4
  241. package/dist/src/tui/tui-oauth-login.js +5 -0
  242. package/dist/src/tui/tui-startup-resources.js +1 -1
  243. package/dist/src/user-context/planner.d.ts +1 -0
  244. package/dist/src/user-context/planner.js +16 -29
  245. package/dist/src/user-context/retriever.d.ts +15 -0
  246. package/dist/src/user-context/retriever.js +65 -0
  247. package/dist/src/user-context/scope.d.ts +7 -0
  248. package/dist/src/user-context/scope.js +9 -0
  249. package/dist/src/user-context/sources/activity-clustering.js +30 -117
  250. package/dist/src/user-context/sources/index.d.ts +1 -0
  251. package/dist/src/user-context/sources/index.js +2 -1
  252. package/dist/src/user-context/sources/signal-clustering.d.ts +18 -0
  253. package/dist/src/user-context/sources/signal-clustering.js +131 -0
  254. package/dist/src/voice/audio/normalize.d.ts +17 -0
  255. package/dist/src/voice/audio/normalize.js +155 -0
  256. package/dist/src/voice/language-profile.d.ts +1 -4
  257. package/dist/src/voice/language-profile.js +2 -25
  258. package/dist/src/voice/local/runtime-client.d.ts +2 -0
  259. package/dist/src/voice/local/runtime-client.js +20 -1
  260. package/dist/src/voice/local/runtime-worker.js +7 -13
  261. package/dist/src/voice/local/wav.js +1 -1
  262. package/dist/src/voice/stt/availability.d.ts +1 -4
  263. package/dist/src/voice/stt/availability.js +3 -15
  264. package/dist/src/voice/stt/config.js +1 -0
  265. package/dist/src/voice/stt/factory.js +23 -0
  266. package/dist/src/voice/stt/index.d.ts +1 -0
  267. package/dist/src/voice/stt/index.js +2 -2
  268. package/dist/src/voice/stt/list-providers.js +1 -1
  269. package/dist/src/voice/stt/providers/local-transcription.js +7 -3
  270. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +3 -1
  271. package/dist/src/voice/stt/transcribe-core.d.ts +5 -1
  272. package/dist/src/voice/stt/transcribe-core.js +13 -5
  273. package/dist/src/voice/stt/types.d.ts +2 -0
  274. package/dist/src/voice/tts/factory.d.ts +1 -1
  275. package/dist/src/voice/tts/factory.js +23 -1
  276. package/dist/src/voice/tts/merge-config.js +5 -3
  277. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +3 -1
  278. package/dist/src/voice/tts/types.d.ts +2 -0
  279. package/dist/src/voice/tts/types.js +4 -2
  280. package/dist/src/work-discovery/evaluation.d.ts +23 -0
  281. package/dist/src/work-discovery/evaluation.js +18 -1
  282. package/dist/src/work-discovery/index.js +2 -2
  283. package/package.json +4 -3
  284. package/dist/gateway/static/root/assets/agents-Bl8FQZxW.js +0 -68
  285. package/dist/gateway/static/root/assets/apps-page-CRUgTO10.js +0 -1
  286. package/dist/gateway/static/root/assets/automations-page-DrSwolhG.js +0 -6
  287. package/dist/gateway/static/root/assets/browser-settings-page-NlvDyMwD.js +0 -8
  288. package/dist/gateway/static/root/assets/capabilities-settings-panel-BWXUznw5.js +0 -7
  289. package/dist/gateway/static/root/assets/capability-presets-settings-panel-D0loEbzq.js +0 -3
  290. package/dist/gateway/static/root/assets/channels-settings-CcivCw8U.js +0 -1
  291. package/dist/gateway/static/root/assets/channels-status-swr-DkHAD2Zn.js +0 -1
  292. package/dist/gateway/static/root/assets/chat-terminal-dock-DVedGAeX.js +0 -36
  293. package/dist/gateway/static/root/assets/connectors-page-DlBSlfkv.js +0 -2
  294. package/dist/gateway/static/root/assets/heartbeat-settings-UZAn1aAQ.js +0 -1
  295. package/dist/gateway/static/root/assets/home-page-CRJDpy5E.js +0 -3
  296. package/dist/gateway/static/root/assets/index-BSjP0Wsx.css +0 -2
  297. package/dist/gateway/static/root/assets/index-C2ZYFBGL.js +0 -85
  298. package/dist/gateway/static/root/assets/local-app-workbench-page-D9bguWRo.js +0 -2
  299. package/dist/gateway/static/root/assets/logs-page-Gr-nE4nW.js +0 -2
  300. package/dist/gateway/static/root/assets/markdown-view-B12xeflb.css +0 -1
  301. package/dist/gateway/static/root/assets/messages-yG5P43Q9.js +0 -3
  302. package/dist/gateway/static/root/assets/notes-workbench-CpbD4XG2.js +0 -4
  303. package/dist/gateway/static/root/assets/project-detail-page-GvSYDbjR.js +0 -1
  304. package/dist/gateway/static/root/assets/projects-page-DPRxKGbs.js +0 -1
  305. package/dist/gateway/static/root/assets/remote-access-hub-WIzeu-gB.js +0 -1
  306. package/dist/gateway/static/root/assets/sessions-page-2XEJM0YE.js +0 -1
  307. package/dist/gateway/static/root/assets/settings-advanced-gate-g1GThZ0O.js +0 -1
  308. package/dist/gateway/static/root/assets/setup-status-panel-C6qj2L-q.js +0 -1
  309. package/dist/gateway/static/root/assets/shares-settings-BBpE1bep.js +0 -1
  310. package/dist/gateway/static/root/assets/skill-reload-api-DXORBJNk.js +0 -1
  311. package/dist/gateway/static/root/assets/task-detail-page-DC0hc8hp.js +0 -1
  312. package/dist/gateway/static/root/assets/user-context-page-Bwg4KV8B.js +0 -1
  313. package/dist/gateway/static/root/assets/work-discovery-page-CmPfOfHl.js +0 -1
  314. package/dist/gateway/static/root/assets/workflows-page-DhQNh7W6.js +0 -5
  315. package/dist/src/voice/local/runtime-dispatcher.d.ts +0 -9
  316. package/dist/src/voice/local/runtime-dispatcher.js +0 -20
@@ -0,0 +1,128 @@
1
+ import { getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, init_schema, parseModelRef } from "../../config/schema.js";
2
+ import { getModelCatalogStore, init_model_catalog_store } from "../../providers/model-catalog-store.js";
3
+ import { init_providers, isProviderConfiguredSync } from "../../providers/index.js";
4
+ import { compareCatalogModels } from "../../providers/model-catalog-ranking.js";
5
+ import { DEFAULT_LOCAL_VOICE_MODEL_ID, hasInstalledLocalVoiceModel } from "../../voice/local/models.js";
6
+ import { planCapabilities } from "./planner.js";
7
+ //#region src/capabilities/readiness/from-config.ts
8
+ init_schema();
9
+ init_model_catalog_store();
10
+ init_providers();
11
+ function buildCapabilityPlansForConfig(config, options = {}) {
12
+ const catalog = options.catalog ?? getModelCatalogStore().load();
13
+ const cloud = catalog.sources["xopc-cloud"];
14
+ const providerReady = options.providerReady ?? defaultProviderReady;
15
+ const cloudReady = providerReady("xopc-cloud");
16
+ const agentId = config.agents.default ?? config.agents.list[0]?.id ?? "main";
17
+ const stt = config.tools?.media?.audio;
18
+ const tts = config.messages?.tts;
19
+ const policies = {
20
+ vision: { explicit: refs(getAgentDefaultImageModelConfig(config)) },
21
+ "image-generation": { explicit: refs(getAgentDefaultImageGenerationModelConfig(config, agentId)) },
22
+ stt: {
23
+ disabled: stt?.enabled === false,
24
+ explicit: stt ? sttRefs(stt) : void 0
25
+ },
26
+ tts: {
27
+ disabled: tts?.enabled === false,
28
+ explicit: tts ? ttsRefs(tts) : void 0
29
+ }
30
+ };
31
+ markExplicitReadiness(policies, catalog, providerReady);
32
+ return planCapabilities({
33
+ policies,
34
+ automatic: {
35
+ vision: cloudCandidates("vision", cloud?.models ?? [], cloudReady, 0, cloud?.recommended?.vision),
36
+ "image-generation": cloudCandidates("image-generation", cloud?.models ?? [], cloudReady, 0, cloud?.recommended?.["image-generation"]),
37
+ stt: [candidate("stt", "xopc-local", DEFAULT_LOCAL_VOICE_MODEL_ID, "installed-local", options.localSttReady ?? hasInstalledLocalVoiceModel(), 0), ...cloudCandidates("stt", cloud?.models ?? [], cloudReady, 100, cloud?.recommended?.stt)],
38
+ tts: [...cloudCandidates("tts", cloud?.models ?? [], cloudReady, 0, cloud?.recommended?.tts), candidate("tts", "edge", "edge", "credentialless-fallback", true, 1e3)]
39
+ },
40
+ catalogVersion: cloud?.etag
41
+ });
42
+ }
43
+ function defaultProviderReady(providerId) {
44
+ if (providerId === "edge") return true;
45
+ if (providerId === "xopc-local") return hasInstalledLocalVoiceModel();
46
+ return isProviderConfiguredSync(providerId);
47
+ }
48
+ function refs(config) {
49
+ if (!config) return void 0;
50
+ return [config.primary, ...config.fallbacks ?? []].map((ref) => parseModelRef(ref)).filter((ref) => ref !== null);
51
+ }
52
+ function sttRefs(config) {
53
+ if (!config) return void 0;
54
+ const modelRefs = [...config.models ?? [], ...config.sharedModels ?? []].filter((entry) => entry.capabilities?.includes("audio") !== false).flatMap((entry) => entry.provider && entry.model ? [{
55
+ provider: entry.provider,
56
+ model: entry.model
57
+ }] : []);
58
+ if (modelRefs.length > 0) return modelRefs;
59
+ const provider = config.provider;
60
+ const slice = config.providers?.[provider];
61
+ return [{
62
+ provider,
63
+ model: typeof slice?.model === "string" ? slice.model : provider
64
+ }];
65
+ }
66
+ function ttsRefs(config) {
67
+ if (!config) return void 0;
68
+ const slice = config.providers?.[config.provider];
69
+ const model = typeof slice?.model === "string" ? slice.model : config.provider;
70
+ const refs = [{
71
+ provider: config.provider,
72
+ model
73
+ }];
74
+ if (config.fallback?.enabled) for (const provider of config.fallback.order) {
75
+ const fallbackSlice = config.providers?.[provider];
76
+ refs.push({
77
+ provider,
78
+ model: typeof fallbackSlice?.model === "string" ? fallbackSlice.model : provider
79
+ });
80
+ }
81
+ return refs;
82
+ }
83
+ function markExplicitReadiness(policies, catalog, providerReady) {
84
+ for (const [capability, policy] of Object.entries(policies)) policy.explicit = policy.explicit?.map((entry) => {
85
+ const ready = explicitReady(capability, entry.provider, entry.model, catalog, providerReady);
86
+ return {
87
+ ...entry,
88
+ ready,
89
+ reasons: ready ? [] : ["explicit_model_unavailable"]
90
+ };
91
+ });
92
+ }
93
+ function explicitReady(capability, provider, model, catalog, providerReady) {
94
+ if (!providerReady(provider)) return false;
95
+ if (provider !== "xopc-cloud") return true;
96
+ return (catalog.sources["xopc-cloud"]?.models ?? []).some((entry) => entry.id === model && matchesCapability(entry, capability));
97
+ }
98
+ function cloudCandidates(capability, models, authorized, basePriority = 0, recommendedModel) {
99
+ return models.filter((model) => model.availability === "available" && matchesCapability(model, capability)).sort((left, right) => compareCatalogModels(left, right, recommendedModel)).map((model, index) => candidate(capability, "xopc-cloud", model.id, "xopc-cloud-managed", authorized, basePriority + index, {
100
+ ...model.tts?.defaultVoice ? { defaultVoice: model.tts.defaultVoice } : {},
101
+ ...model.stability ? { stability: model.stability } : {},
102
+ ...model.tier ? { tier: model.tier } : {},
103
+ ...model.bestEffort !== void 0 ? { bestEffort: model.bestEffort } : {}
104
+ }));
105
+ }
106
+ function matchesCapability(model, capability) {
107
+ if (model.availability !== "available") return false;
108
+ switch (capability) {
109
+ case "vision": return model.kind === "language" && model.input.includes("image");
110
+ case "image-generation": return model.kind === "image" && model.operations.includes("images.generate");
111
+ case "stt": return model.kind === "stt" && model.operations.includes("audio.transcription");
112
+ case "tts": return model.kind === "tts" && model.operations.includes("audio.speech") && Boolean(model.tts?.defaultVoice);
113
+ }
114
+ }
115
+ function candidate(capability, provider, model, source, ready, priority, metadata) {
116
+ return {
117
+ capability,
118
+ provider,
119
+ model,
120
+ source,
121
+ ready,
122
+ priority,
123
+ reasons: ready ? [] : [provider === "xopc-cloud" ? "oauth_not_connected" : "provider_not_ready"],
124
+ ...metadata ? { metadata } : {}
125
+ };
126
+ }
127
+ //#endregion
128
+ export { buildCapabilityPlansForConfig };
@@ -0,0 +1,3 @@
1
+ export { buildCapabilityPlansForConfig } from './from-config.js';
2
+ export { planCapabilities, planCapability } from './planner.js';
3
+ export type { CandidateSource, CapabilityCandidate, CapabilityId, CapabilityPlan, CapabilityPlannerInput, CapabilityPolicy, } from './types.js';
@@ -0,0 +1,3 @@
1
+ import { planCapabilities, planCapability } from "./planner.js";
2
+ import { buildCapabilityPlansForConfig } from "./from-config.js";
3
+ export { buildCapabilityPlansForConfig, planCapabilities, planCapability };
@@ -0,0 +1,3 @@
1
+ import type { CapabilityId, CapabilityPlan, CapabilityPlannerInput } from './types.js';
2
+ export declare function planCapabilities(input: CapabilityPlannerInput): Record<CapabilityId, CapabilityPlan>;
3
+ export declare function planCapability(capability: CapabilityId, input: CapabilityPlannerInput): CapabilityPlan;
@@ -0,0 +1,56 @@
1
+ //#region src/capabilities/readiness/planner.ts
2
+ const CAPABILITIES = [
3
+ "vision",
4
+ "image-generation",
5
+ "stt",
6
+ "tts"
7
+ ];
8
+ function planCapabilities(input) {
9
+ return Object.fromEntries(CAPABILITIES.map((capability) => [capability, planCapability(capability, input)]));
10
+ }
11
+ function planCapability(capability, input) {
12
+ const policy = input.policies[capability];
13
+ if (policy.disabled) return {
14
+ capability,
15
+ status: "disabled",
16
+ fallbacks: [],
17
+ rejected: [],
18
+ selectionSource: "none",
19
+ catalogVersion: input.catalogVersion
20
+ };
21
+ const explicit = (policy.explicit ?? []).map((entry, index) => ({
22
+ capability,
23
+ provider: entry.provider,
24
+ model: entry.model,
25
+ source: "explicit-config",
26
+ ready: entry.ready ?? true,
27
+ priority: index,
28
+ reasons: entry.reasons ?? (entry.ready === false ? ["explicit_model_unavailable"] : [])
29
+ }));
30
+ const automatic = [...input.automatic[capability] ?? []].sort((left, right) => left.priority - right.priority || left.provider.localeCompare(right.provider) || left.model.localeCompare(right.model));
31
+ const candidates = dedupeCandidates([...explicit, ...automatic]);
32
+ const ready = candidates.filter((candidate) => candidate.ready);
33
+ const rejected = candidates.filter((candidate) => !candidate.ready);
34
+ const primary = ready[0];
35
+ const explicitRejected = rejected.some((candidate) => candidate.source === "explicit-config");
36
+ return {
37
+ capability,
38
+ status: primary ? explicitRejected ? "degraded" : "ready" : "unavailable",
39
+ ...primary ? { primary } : {},
40
+ fallbacks: ready.slice(1),
41
+ rejected,
42
+ selectionSource: primary?.source ?? "none",
43
+ catalogVersion: input.catalogVersion
44
+ };
45
+ }
46
+ function dedupeCandidates(candidates) {
47
+ const seen = /* @__PURE__ */ new Set();
48
+ return candidates.filter((candidate) => {
49
+ const key = `${candidate.provider}/${candidate.model}`;
50
+ if (seen.has(key)) return false;
51
+ seen.add(key);
52
+ return true;
53
+ });
54
+ }
55
+ //#endregion
56
+ export { planCapabilities, planCapability };
@@ -0,0 +1,35 @@
1
+ export type CapabilityId = 'vision' | 'image-generation' | 'stt' | 'tts';
2
+ export type CandidateSource = 'native-model' | 'explicit-config' | 'installed-local' | 'xopc-cloud-managed' | 'configured-provider' | 'credentialless-fallback';
3
+ export interface CapabilityCandidate {
4
+ capability: CapabilityId;
5
+ provider: string;
6
+ model: string;
7
+ source: CandidateSource;
8
+ ready: boolean;
9
+ priority: number;
10
+ reasons: string[];
11
+ metadata?: Record<string, unknown>;
12
+ }
13
+ export interface CapabilityPlan {
14
+ capability: CapabilityId;
15
+ status: 'ready' | 'degraded' | 'unavailable' | 'disabled';
16
+ primary?: CapabilityCandidate;
17
+ fallbacks: CapabilityCandidate[];
18
+ rejected: CapabilityCandidate[];
19
+ selectionSource: CandidateSource | 'none';
20
+ catalogVersion?: string | null;
21
+ }
22
+ export interface CapabilityPolicy {
23
+ disabled?: boolean;
24
+ explicit?: Array<{
25
+ provider: string;
26
+ model: string;
27
+ ready?: boolean;
28
+ reasons?: string[];
29
+ }>;
30
+ }
31
+ export interface CapabilityPlannerInput {
32
+ policies: Record<CapabilityId, CapabilityPolicy>;
33
+ automatic: Partial<Record<CapabilityId, CapabilityCandidate[]>>;
34
+ catalogVersion?: string | null;
35
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -12,6 +12,7 @@ import { formatExamples, register } from "../registry.js";
12
12
  import { getContextWithOpts } from "../context.js";
13
13
  import { getWorkspacePath } from "../../config/workspace-path-helpers.js";
14
14
  import "../../config/index.js";
15
+ import { getXopcCloudCatalogCoordinator } from "../../providers/xopc-cloud-catalog-coordinator.js";
15
16
  import { listSessions } from "./agent/sessions.js";
16
17
  import { renderStreamToTerminal } from "./agent/stream-renderer.js";
17
18
  import { startInteractiveChat } from "./agent/interactive.js";
@@ -38,6 +39,14 @@ function createAgentCommand(_ctx) {
38
39
  }
39
40
  const modelFromConfig = getAgentDefaultModelRef(config);
40
41
  const modelId = options.model?.trim() || modelFromConfig;
42
+ if (modelId?.startsWith("xopc-cloud/")) {
43
+ const readiness = await getXopcCloudCatalogCoordinator().ensure({
44
+ reason: "agent-run",
45
+ network: "if-empty",
46
+ timeoutMs: 1e4
47
+ });
48
+ if (readiness.state === "unavailable" || readiness.state === "not-authorized") throw new Error(readiness.error?.message ?? "XOPC Cloud model catalog is unavailable");
49
+ }
41
50
  const bus = new MessageBus();
42
51
  if (ctx.isVerbose) log.info({
43
52
  model: modelId,
@@ -3,6 +3,7 @@ import { init_logger } from "../../utils/logger.js";
3
3
  import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
4
4
  import { getAllProviders, init_providers } from "../../providers/index.js";
5
5
  import { formatExamples, register } from "../registry.js";
6
+ import { disconnectProvider } from "../../providers/provider-disconnect.js";
6
7
  import { listAllProfiles, listProfilesForProvider, removeAuthProfile, upsertAuthProfile } from "../../auth/profiles/profiles.js";
7
8
  import { getOAuthProvider, getSupportedOAuthProviders } from "../utils/oauth-providers.js";
8
9
  import { colorizeStatus, colors } from "../utils/colors.js";
@@ -69,7 +70,7 @@ function createAuthCommand(_ctx) {
69
70
  else log.warn(`Profile not found: ${options.profile}`);
70
71
  return;
71
72
  }
72
- await new CredentialResolver().deleteProviderCredential(provider);
73
+ await disconnectProvider(provider);
73
74
  log.info(`All credentials removed for provider: ${provider}`);
74
75
  });
75
76
  cmd.command("login <provider>").description("Login to a provider using OAuth").option("-p, --profile <profileId>", "Profile ID (default: provider:default)").action(async (provider, _options) => {
@@ -98,7 +99,7 @@ function createAuthCommand(_ctx) {
98
99
  else log.warn(`Profile not found: ${options.profile}`);
99
100
  return;
100
101
  }
101
- await new CredentialResolver().deleteProviderCredential(provider);
102
+ await disconnectProvider(provider);
102
103
  log.info(`Logged out from provider: ${provider}`);
103
104
  });
104
105
  const profilesCmd = cmd.command("profiles").description("Manage auth profiles");
@@ -147,7 +148,7 @@ function createAuthCommand(_ctx) {
147
148
  const providers = /* @__PURE__ */ new Set();
148
149
  for (const profile of profiles) providers.add(profile.provider);
149
150
  for (const token of oauthTokens) providers.add(token.provider);
150
- for (const provider of providers) await resolver.deleteProviderCredential(provider);
151
+ for (const provider of providers) await disconnectProvider(provider);
151
152
  log.info("All authentication credentials cleared.");
152
153
  });
153
154
  cmd.command("providers").description("List supported providers and their auth methods").action(() => {
@@ -1,6 +1,6 @@
1
1
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
2
- import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
3
2
  import { register } from "../registry.js";
3
+ import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
4
4
  import { confirm } from "@inquirer/prompts";
5
5
  import { Command } from "commander";
6
6
  //#region src/cli/commands/connectors.ts
@@ -6,6 +6,7 @@ import { formatExamples, register } from "../registry.js";
6
6
  import { getContextWithOpts } from "../context.js";
7
7
  import "../../config/index.js";
8
8
  import { prepareUpdateGlobalDefaults } from "../../gateway/global-defaults-admin.js";
9
+ import { disconnectProvider } from "../../providers/provider-disconnect.js";
9
10
  import { colors } from "../utils/colors.js";
10
11
  import { runCliOAuthLogin } from "../utils/oauth-login.js";
11
12
  import { input } from "@inquirer/prompts";
@@ -191,7 +192,7 @@ async function runAuthLogin(provider, options) {
191
192
  }
192
193
  }
193
194
  async function runAuthLogout(provider) {
194
- await new CredentialResolver().deleteProviderCredential(provider);
195
+ await disconnectProvider(provider);
195
196
  console.log(`✅ Credentials removed for ${provider}`);
196
197
  }
197
198
  function attachModelsListOptions(command) {
@@ -2,26 +2,8 @@
2
2
  * Catalog-driven model configuration for onboarding.
3
3
  */
4
4
  import type { Config } from '../../../config/schema.js';
5
- import { type ModelCatalogStore } from '../../../providers/model-catalog-store.js';
6
- import { XopcCloudModelSource } from '../../../providers/xopc-cloud-model-source.js';
5
+ import { type XopcCloudCatalogCoordinator } from '../../../providers/xopc-cloud-catalog-coordinator.js';
7
6
  import type { CLIContext } from '../../registry.js';
8
- export declare function defaultXopcCloudImageModel(catalogStore?: ModelCatalogStore): string | undefined;
9
- export declare function defaultXopcCloudVisionModel(catalogStore?: ModelCatalogStore): string | undefined;
10
- export declare function defaultXopcCloudAudioModels(catalogStore?: ModelCatalogStore): {
11
- stt?: string;
12
- tts?: {
13
- model: string;
14
- voice: string;
15
- maxCharacters: number;
16
- };
17
- };
18
- export declare function setPrimaryModel(config: Config, workspacePath: string, modelRef: string, defaultImageGenerationModel?: string, defaultAudioModels?: {
19
- stt?: string;
20
- tts?: {
21
- model: string;
22
- voice: string;
23
- maxCharacters: number;
24
- };
25
- }, defaultVisionModel?: string): Config;
26
- export declare function refreshOnboardModelCatalogIfNeeded(provider: string, hasCatalogModels: boolean, source?: Pick<XopcCloudModelSource, 'refresh'>): Promise<void>;
7
+ export declare function setPrimaryModel(config: Config, workspacePath: string, modelRef: string): Config;
8
+ export declare function refreshOnboardModelCatalogIfNeeded(provider: string, hasCatalogModels: boolean, coordinator?: Pick<XopcCloudCatalogCoordinator, 'refresh'>): Promise<void>;
27
9
  export declare function setupModel(existingConfig: Config | null, ctx: CLIContext): Promise<Config>;
@@ -2,7 +2,6 @@ import { getAgentDefaultModelRef, init_schema } from "../../../config/schema.js"
2
2
  import { resolveModelsJsonPath } from "../../../config/paths.js";
3
3
  import { init_models_json, loadModelsJson, saveModelsJson } from "../../../config/models-json.js";
4
4
  import { getApiKeyFromEnv } from "../../../providers/env-keys.js";
5
- import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
6
5
  import { getModelRegistry } from "../../../providers/model-registry.js";
7
6
  import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
8
7
  import { getAllProviders, getModelsByProvider, getProviderDisplayName, init_providers, providerSupportsApiKey, providerSupportsOAuth } from "../../../providers/index.js";
@@ -10,7 +9,7 @@ import { getDomesticProviderBaseUrl, getDomesticProviderPreset, getDomesticProvi
10
9
  import { getProviderHint, getRecommendedModelsForProvider, sortModelsForPicker, sortProvidersForPicker } from "../../../providers/presentation.js";
11
10
  import { prepareUpdateGlobalDefaults } from "../../../gateway/global-defaults-admin.js";
12
11
  import { discoverProviderModels, isProviderApiDiscoverable } from "../../../providers/model-discovery.js";
13
- import { XopcCloudModelSource } from "../../../providers/xopc-cloud-model-source.js";
12
+ import { getXopcCloudCatalogCoordinator } from "../../../providers/xopc-cloud-catalog-coordinator.js";
14
13
  import { listProfilesForProvider } from "../../../auth/profiles/profiles.js";
15
14
  import { getOAuthProvider } from "../../utils/oauth-providers.js";
16
15
  import { colors } from "../../utils/colors.js";
@@ -24,29 +23,7 @@ init_credentials();
24
23
  init_models_json();
25
24
  init_schema();
26
25
  init_providers();
27
- init_model_catalog_store();
28
- function defaultXopcCloudImageModel(catalogStore = getModelCatalogStore()) {
29
- const model = catalogStore.getSource("xopc-cloud")?.models.find((entry) => entry.availability === "available" && entry.kind === "image" && entry.operations.includes("images.generate"));
30
- return model ? `xopc-cloud/${model.id}` : void 0;
31
- }
32
- function defaultXopcCloudVisionModel(catalogStore = getModelCatalogStore()) {
33
- const model = catalogStore.getSource("xopc-cloud")?.models.find((entry) => entry.availability === "available" && entry.kind === "language" && entry.input.includes("image") && (entry.operations.includes("chat.completions") || entry.operations.includes("responses")));
34
- return model ? `xopc-cloud/${model.id}` : void 0;
35
- }
36
- function defaultXopcCloudAudioModels(catalogStore = getModelCatalogStore()) {
37
- const models = catalogStore.getSource("xopc-cloud")?.models.filter((entry) => entry.availability === "available") ?? [];
38
- const stt = models.find((entry) => entry.kind === "stt");
39
- const tts = models.find((entry) => entry.kind === "tts" && entry.tts?.defaultVoice);
40
- return {
41
- ...stt ? { stt: stt.id } : {},
42
- ...tts?.tts?.defaultVoice ? { tts: {
43
- model: tts.id,
44
- voice: tts.tts.defaultVoice,
45
- maxCharacters: tts.tts.maxCharacters
46
- } } : {}
47
- };
48
- }
49
- function setPrimaryModel(config, workspacePath, modelRef, defaultImageGenerationModel, defaultAudioModels, defaultVisionModel) {
26
+ function setPrimaryModel(config, workspacePath, modelRef) {
50
27
  const id = config.agents.default ?? config.agents.list[0]?.id ?? "main";
51
28
  const index = config.agents.list.findIndex((entry) => entry.id === id);
52
29
  let nextConfig = config;
@@ -73,57 +50,10 @@ function setPrimaryModel(config, workspacePath, modelRef, defaultImageGeneration
73
50
  roles: {
74
51
  ...currentModels?.roles,
75
52
  deep: { model: modelRef }
76
- },
77
- ...!currentModels?.imageModel && defaultVisionModel ? { imageModel: { primary: defaultVisionModel } } : {},
78
- ...!currentModels?.imageGenerationModel && defaultImageGenerationModel ? { imageGenerationModel: { primary: defaultImageGenerationModel } } : {}
53
+ }
79
54
  } });
80
55
  if (prep.ok === false) throw new Error(prep.error);
81
- let configured = prep.data.nextConfig;
82
- if (defaultAudioModels?.stt && !configured.tools.media?.audio) configured = {
83
- ...configured,
84
- tools: {
85
- ...configured.tools,
86
- media: {
87
- ...configured.tools.media,
88
- audio: {
89
- enabled: true,
90
- provider: "xopc-cloud",
91
- models: [{
92
- provider: "xopc-cloud",
93
- model: defaultAudioModels.stt,
94
- capabilities: ["audio"]
95
- }],
96
- providers: { "xopc-cloud": { model: defaultAudioModels.stt } },
97
- fallback: {
98
- enabled: false,
99
- order: []
100
- }
101
- }
102
- }
103
- }
104
- };
105
- if (defaultAudioModels?.tts && !configured.messages?.tts) configured = {
106
- ...configured,
107
- messages: {
108
- ...configured.messages,
109
- tts: {
110
- enabled: true,
111
- provider: "xopc-cloud",
112
- trigger: "off",
113
- fallback: {
114
- enabled: false,
115
- order: []
116
- },
117
- maxTextLength: defaultAudioModels.tts.maxCharacters,
118
- timeoutMs: 6e4,
119
- providers: { "xopc-cloud": {
120
- model: defaultAudioModels.tts.model,
121
- voice: defaultAudioModels.tts.voice
122
- } }
123
- }
124
- }
125
- };
126
- return configured;
56
+ return prep.data.nextConfig;
127
57
  }
128
58
  function formatRecommended(provider) {
129
59
  const labels = getRecommendedModelsForProvider(provider, 3).map((m) => m.name || m.id);
@@ -166,11 +96,12 @@ function getModelsForProvider(provider) {
166
96
  };
167
97
  });
168
98
  }
169
- async function refreshOnboardModelCatalogIfNeeded(provider, hasCatalogModels, source) {
99
+ async function refreshOnboardModelCatalogIfNeeded(provider, hasCatalogModels, coordinator = getXopcCloudCatalogCoordinator()) {
170
100
  if (provider !== "xopc-cloud" || hasCatalogModels) return;
171
101
  console.log("\n→ Loading models from XOPC Model Service...");
172
- const result = await (source ?? new XopcCloudModelSource()).refresh();
173
- if (result.status === "skipped") throw new Error("XOPC Model Service credentials are unavailable after OAuth login. Please sign in again.");
102
+ const result = await coordinator.refresh("oauth");
103
+ if (result.state === "not-authorized") throw new Error("XOPC Model Service credentials are unavailable after OAuth login. Please sign in again.");
104
+ if (result.error || result.modelCount === 0) throw new Error(result.error?.message ?? "XOPC Model Service did not publish any models for this account.");
174
105
  console.log(colors.green(`✓ Loaded ${result.modelCount} models`));
175
106
  }
176
107
  function discoveredModelsToChoices(provider, models) {
@@ -545,14 +476,7 @@ async function setupModel(existingConfig, ctx) {
545
476
  }))
546
477
  });
547
478
  console.log("\n✅ Model configured:", model);
548
- const imageModel = provider === "xopc-cloud" ? defaultXopcCloudImageModel() : void 0;
549
- const visionModel = provider === "xopc-cloud" ? defaultXopcCloudVisionModel() : void 0;
550
- const audioModels = provider === "xopc-cloud" ? defaultXopcCloudAudioModels() : void 0;
551
- if (visionModel) console.log("✅ Image understanding configured:", visionModel);
552
- if (imageModel) console.log("✅ Image generation configured:", imageModel);
553
- if (audioModels?.stt) console.log("✅ Speech recognition configured:", audioModels.stt);
554
- if (audioModels?.tts) console.log("✅ Speech synthesis configured:", audioModels.tts.model);
555
- return setPrimaryModel(config, ctx.workspacePath, model, imageModel, audioModels, visionModel);
479
+ return setPrimaryModel(config, ctx.workspacePath, model);
556
480
  }
557
481
  //#endregion
558
- export { defaultXopcCloudAudioModels, defaultXopcCloudImageModel, defaultXopcCloudVisionModel, refreshOnboardModelCatalogIfNeeded, setPrimaryModel, setupModel };
482
+ export { refreshOnboardModelCatalogIfNeeded, setPrimaryModel, setupModel };
@@ -1,4 +1,5 @@
1
1
  import type { OAuthCredentials, OAuthLoginCallbacks, OAuthProviderInterface } from '../../auth/index.js';
2
+ import { type CatalogReadiness } from '../../providers/xopc-cloud-catalog-coordinator.js';
2
3
  import { type OAuthProviderConfig } from './oauth-providers.js';
3
4
  export interface RunCliOAuthLoginOptions {
4
5
  provider: string;
@@ -8,6 +9,7 @@ export interface RunCliOAuthLoginResult {
8
9
  provider: string;
9
10
  credentials: OAuthCredentials;
10
11
  expires?: number;
12
+ catalog?: CatalogReadiness;
11
13
  }
12
14
  export declare function buildCliOAuthCallbacks(params: {
13
15
  config: OAuthProviderConfig;
@@ -1,6 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
4
+ import { getXopcCloudCatalogCoordinator } from "../../providers/xopc-cloud-catalog-coordinator.js";
4
5
  import { getOAuthProvider } from "./oauth-providers.js";
5
6
  import { input, select } from "@inquirer/prompts";
6
7
  //#region src/cli/utils/oauth-login.ts
@@ -75,10 +76,17 @@ async function runCliOAuthLogin(options) {
75
76
  onProgress: options.onProgress
76
77
  }));
77
78
  await new CredentialResolver().saveOAuthCredentials(options.provider, credentials);
79
+ let catalog;
80
+ if (options.provider === "xopc-cloud") {
81
+ options.onProgress?.("Syncing XOPC Cloud model catalog...");
82
+ catalog = await getXopcCloudCatalogCoordinator().refresh("oauth");
83
+ if (catalog.error) options.onProgress?.(`Authorization succeeded, but model catalog sync failed: ${catalog.error.message}`);
84
+ }
78
85
  return {
79
86
  provider: options.provider,
80
87
  credentials,
81
- expires: credentials.expires
88
+ expires: credentials.expires,
89
+ catalog
82
90
  };
83
91
  }
84
92
  //#endregion
@@ -1,6 +1,6 @@
1
+ import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
1
2
  import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
2
3
  import "../agent-manifest/index.js";
3
- import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
4
4
  import { init_session_key, parseSessionKey } from "../routing/session-key.js";
5
5
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
6
6
  //#region src/config/agent-profile.ts
@@ -1,4 +1,4 @@
1
- import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath } from "./paths-state.js";
1
+ import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath } from "./paths-state.js";
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, AgentTypedModelRoleSchema, 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, 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";
@@ -27,4 +27,4 @@ init_workspace_path();
27
27
  init_models_json();
28
28
  init_resolve_config_value();
29
29
  //#endregion
30
- export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, CustomModelSchema, ENV_VARS, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, HeartbeatConfigSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, hasBundledExtensionManifest, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
30
+ export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, CustomModelSchema, ENV_VARS, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, HeartbeatConfigSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, hasBundledExtensionManifest, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
@@ -20,3 +20,5 @@ export declare function resolveUpdateLockPath(env?: NodeJS.ProcessEnv): string;
20
20
  /** Primary SQLite state database (`~/.xopc/xopc.db`). */
21
21
  export declare const XOPC_DB_FILENAME = "xopc.db";
22
22
  export declare function resolveXopcDatabasePath(env?: NodeJS.ProcessEnv): string;
23
+ /** Durable last-known-good XOPC Cloud model catalog. */
24
+ export declare function resolveXopcCloudCatalogCachePath(env?: NodeJS.ProcessEnv): string;
@@ -20,6 +20,10 @@ function resolveUpdateLockPath(env = process.env) {
20
20
  function resolveXopcDatabasePath(env = process.env) {
21
21
  return join(resolveStateDir(env), XOPC_DB_FILENAME);
22
22
  }
23
+ /** Durable last-known-good XOPC Cloud model catalog. */
24
+ function resolveXopcCloudCatalogCachePath(env = process.env) {
25
+ return join(resolveStateDir(env), "cache", "model-catalog", "xopc-cloud-v1.json");
26
+ }
23
27
  var ENV_VARS, XOPC_DB_FILENAME;
24
28
  var init_paths_state = __esmMin((() => {
25
29
  ENV_VARS = {
@@ -39,4 +43,4 @@ var init_paths_state = __esmMin((() => {
39
43
  }));
40
44
  //#endregion
41
45
  init_paths_state();
42
- export { ENV_VARS, XOPC_DB_FILENAME, init_paths_state, resolveHomeDir, resolveStateDir, resolveUpdateCheckStatePath, resolveUpdateLockPath, resolveXopcDatabasePath };
46
+ export { ENV_VARS, XOPC_DB_FILENAME, init_paths_state, resolveHomeDir, resolveStateDir, resolveUpdateCheckStatePath, resolveUpdateLockPath, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath };
@@ -1,6 +1,6 @@
1
1
  import { existsSync } from 'fs';
2
2
  import type { Config } from './schema.js';
3
- export { ENV_VARS, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath, XOPC_DB_FILENAME } from './paths-state.js';
3
+ export { ENV_VARS, resolveHomeDir, resolveStateDir, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath, XOPC_DB_FILENAME, } from './paths-state.js';
4
4
  export { resolveDefaultAgentWorkspaceDir } from './workspace-defaults.js';
5
5
  export { resolveAgentWorkspaceDir, resolveAgentDir as resolveAgentDirFromConfig, resolveAgentHomeDir as resolveAgentHomeDirFromConfig, } from '../agent/agent-scope.js';
6
6
  export declare const FILENAMES: {
@@ -1,5 +1,5 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { ENV_VARS, XOPC_DB_FILENAME, init_paths_state, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath } from "./paths-state.js";
2
+ import { ENV_VARS, XOPC_DB_FILENAME, init_paths_state, resolveHomeDir, resolveStateDir, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath } from "./paths-state.js";
3
3
  import { init_workspace_defaults, resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
4
4
  import { init_agent_scope, resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentProfileDir as resolveAgentProfileDir$1, resolveAgentProfileMarkdownPath as resolveAgentProfileMarkdownPath$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
5
5
  import { dirname, join, sep } from "path";
@@ -320,4 +320,4 @@ var init_paths = __esmMin((() => {
320
320
  }));
321
321
  //#endregion
322
322
  init_paths();
323
- export { ENV_VARS, FILENAMES, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath };
323
+ export { ENV_VARS, FILENAMES, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath };