@xopcai/xopc 0.0.211 → 0.0.214

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 (254) hide show
  1. package/README.md +39 -60
  2. package/README.zh-CN.md +39 -61
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store-BzjFoSr0.js → activity-store-k-mNF_Dq.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DTfjhfVE.js → agent-avatar-dicebear-B5VyiQ_K.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-DM2l0hCI.js +68 -0
  8. package/dist/gateway/static/root/assets/{api-D269PnU9.js → api-BjN2udFQ.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-BFpfQDWc.js → app-management-settings-panel-Bbul18ij.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-DLxFdqhY.js → appearance-settings-Bvvzgp00.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-BWd2KUkp.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-DPlH4dnc.js → archive-plugin-DjGVsAgd.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-xqfLLd0I.js → attachment-load-BCuUeuuO.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-page-Doof8nA6.js +1 -0
  15. package/dist/gateway/static/root/assets/automations-workspace-B2eTpWQN.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-C0tuoPXk.js → binary-plugins-B7WFf-lc.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-Deyphj1o.js → block-editor-CVwIwyUT.js} +47 -47
  18. package/dist/gateway/static/root/assets/browser-settings-page-D6ua52QD.js +8 -0
  19. package/dist/gateway/static/root/assets/{browser-workflow-inputs-CYEbXyRF.js → browser-workflow-inputs-Coz8pWzP.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-workflows-page-Bf0tPbGi.js → browser-workflows-page-8a3hnSXE.js} +2 -2
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-DfTpgo4L.js +7 -0
  22. package/dist/gateway/static/root/assets/{capability-presets-api-DPkFA_-R.js → capability-presets-api-BF3G84qe.js} +1 -1
  23. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DkjsA_Yn.js +3 -0
  24. package/dist/gateway/static/root/assets/{channel-recipient-api-DqKaAcnZ.js → channel-recipient-api-8Uz95P40.js} +1 -1
  25. package/dist/gateway/static/root/assets/channels-settings-Cv3pT5iN.js +1 -0
  26. package/dist/gateway/static/root/assets/channels-status-swr-NfU9X-P5.js +1 -0
  27. package/dist/gateway/static/root/assets/{chat-terminal-dock-CTDRZa7e.js → chat-terminal-dock-BYds3un1.js} +2 -2
  28. package/dist/gateway/static/root/assets/{chunk-KS7C4IRE-BMhrPKJC.js → chunk-KS7C4IRE-BaASWQor.js} +1 -1
  29. package/dist/gateway/static/root/assets/{connectors-api-Buu8fif8.js → connectors-api-Cj4deNtI.js} +1 -1
  30. package/dist/gateway/static/root/assets/connectors-page-CL6PMerr.js +2 -0
  31. package/dist/gateway/static/root/assets/{cron-expression-DTLR82NB.js → cron-expression-DjBh0ZL4.js} +1 -1
  32. package/dist/gateway/static/root/assets/{date-picker-DyNogHQH.js → date-picker-3cIzKCZU.js} +1 -1
  33. package/dist/gateway/static/root/assets/{dependency-picker-BpnCuo7B.js → dependency-picker-VZFStrz_.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-CDKI4gVB.js → desktop-pet-CRNQ4CKZ.js} +1 -1
  35. package/dist/gateway/static/root/assets/{desktop-pet-settings-DjT5C2a3.js → desktop-pet-settings-CJBeLcbV.js} +1 -1
  36. package/dist/gateway/static/root/assets/directory-picker-path-field-Dbq9_c33.js +1 -0
  37. package/dist/gateway/static/root/assets/{extension-debug-page-DWf2z7q5.js → extension-debug-page-CSFZfcz5.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-page-Dorx0kf9.js → extension-page-W8vZ3Nl0.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-settings-page-B1wU9ZOB.js → extension-settings-page-D5zYR65b.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-config-api-B1lG4dNr.js → gateway-config-api-BnA56bxn.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-config-swr-BIxuwPQi.js → gateway-config-swr-l2w9ecXl.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-settings-DqIOqJjM.js → gateway-settings-CCOOGd8A.js} +1 -1
  43. package/dist/gateway/static/root/assets/{gateway-startup-retry-BpZgd4U-.js → gateway-startup-retry-XUzMGmLZ.js} +1 -1
  44. package/dist/gateway/static/root/assets/{heartbeat-settings-DG4Kmgkc.js → heartbeat-settings-AutxO-ec.js} +1 -1
  45. package/dist/gateway/static/root/assets/home-page-BMpQAeHr.js +1 -0
  46. package/dist/gateway/static/root/assets/{image-generation-api-PkhYohDa.js → image-generation-api-CDoOrDMq.js} +1 -1
  47. package/dist/gateway/static/root/assets/index-BIBAmAjw.js +108 -0
  48. package/dist/gateway/static/root/assets/index-DQzjgIkQ.css +2 -0
  49. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-6OQT3gQF.js → keyboard-shortcuts-settings-Bcc08kso.js} +1 -1
  50. package/dist/gateway/static/root/assets/local-app-workbench-page-ctXGGgj1.js +2 -0
  51. package/dist/gateway/static/root/assets/{local-apps-page-DfruRAmE.js → local-apps-page-CuwtmiCt.js} +1 -1
  52. package/dist/gateway/static/root/assets/{locale-store-C5MK9WcP.js → locale-store-BIOMAhmR.js} +1 -1
  53. package/dist/gateway/static/root/assets/logs-page-Vq-wDYVv.js +2 -0
  54. package/dist/gateway/static/root/assets/{management-settings-L1VYkywO.js → management-settings-gQwyJgL4.js} +1 -1
  55. package/dist/gateway/static/root/assets/{markdown-split-oqgHbqt-.js → markdown-split-DLSvtLDY.js} +1 -1
  56. package/dist/gateway/static/root/assets/{markdown-view-V4rcPPH0.js → markdown-view-BMDQYc6E.js} +1 -1
  57. package/dist/gateway/static/root/assets/{media-plugins-Bb6gSX2o.js → media-plugins-DFdpMglM.js} +1 -1
  58. package/dist/gateway/static/root/assets/messages-CbbZKEfO.js +3 -0
  59. package/dist/gateway/static/root/assets/notes-api-lKPk0Voa.js +1 -0
  60. package/dist/gateway/static/root/assets/{notes-page-B1rOXjpT.js → notes-page-BBhONbU4.js} +1 -1
  61. package/dist/gateway/static/root/assets/notes-workbench-CCFrzDRT.js +4 -0
  62. package/dist/gateway/static/root/assets/{page-tabs-CBuCKeyy.js → page-tabs-DoQq4tt6.js} +1 -1
  63. package/dist/gateway/static/root/assets/{preview-open-alternatives-BQ0tLfPO.js → preview-open-alternatives-BtJkAYOs.js} +1 -1
  64. package/dist/gateway/static/root/assets/{product-open-page-DPeFn7Hu.js → product-open-page-ClyG8t4A.js} +1 -1
  65. package/dist/gateway/static/root/assets/project-detail-page-CVeA23NS.js +1 -0
  66. package/dist/gateway/static/root/assets/projects-page-DFj-bwa5.js +1 -0
  67. package/dist/gateway/static/root/assets/registry-api-BFwvRxBn.js +2 -0
  68. package/dist/gateway/static/root/assets/remote-access-hub-BgIrBYNz.js +1 -0
  69. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BCfQNzjG.js → runtime-tools-settings-panel-DdTZPRU5.js} +2 -2
  70. package/dist/gateway/static/root/assets/{schema-form-Bo7YbHYN.js → schema-form-C3Q03Hyv.js} +1 -1
  71. package/dist/gateway/static/root/assets/sessions-page-wfBSuhmo.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-4zV9nthi.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-form-section-B9dnKr3M.js → settings-form-section-DdrNtxul.js} +1 -1
  74. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CYDV2JtY.js → settings-loading-skeleton-BFvEfK7v.js} +1 -1
  75. package/dist/gateway/static/root/assets/{settings-page-DbrIYfS9.js → settings-page-B8iNNrLN.js} +1 -1
  76. package/dist/gateway/static/root/assets/setup-status-panel-DEBPLh04.js +1 -0
  77. package/dist/gateway/static/root/assets/{share-preview-page-olgr7LLN.js → share-preview-page-CrsscJs3.js} +1 -1
  78. package/dist/gateway/static/root/assets/shares-settings-Cpd3s8-P.js +1 -0
  79. package/dist/gateway/static/root/assets/skill-reload-api-BrDL4HAN.js +1 -0
  80. package/dist/gateway/static/root/assets/{skills-page-PE16CNw5.js → skills-page-B1sTkjZH.js} +1 -1
  81. package/dist/gateway/static/root/assets/{skills-page.utils-nXmBcBxt.js → skills-page.utils-CIcb0h3E.js} +1 -1
  82. package/dist/gateway/static/root/assets/{system-settings-panel-C3qPwAdY.js → system-settings-panel-MAl91hH_.js} +1 -1
  83. package/dist/gateway/static/root/assets/task-detail-page-C5wgYuvF.js +1 -0
  84. package/dist/gateway/static/root/assets/{theme-store-KR5Otp5w.js → theme-store-BrbF9cgL.js} +1 -1
  85. package/dist/gateway/static/root/assets/{typed-models-lib-lMZodtDF.js → typed-models-lib-Peglr65V.js} +1 -1
  86. package/dist/gateway/static/root/assets/{use-autosave-CKpatP3S.js → use-autosave-C10PZ1OV.js} +1 -1
  87. package/dist/gateway/static/root/assets/user-context-page-DsAfqOJy.js +1 -0
  88. package/dist/gateway/static/root/assets/{voice-api-key-field-CDcv0Wbh.js → voice-api-key-field-bdYmX3ph.js} +1 -1
  89. package/dist/gateway/static/root/assets/work-discovery-overlay-BI4wbLTm.js +1 -0
  90. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BAHYNlQt.js → workflow-run-setup-panel-CfmwGYkr.js} +2 -2
  91. package/dist/gateway/static/root/assets/workflows-page-D7tjtD97.js +5 -0
  92. package/dist/gateway/static/root/index.html +12 -10
  93. package/dist/package.js +1 -1
  94. package/dist/src/agent/agent-manager.js +4 -4
  95. package/dist/src/agent/embedded/model-runtime.js +1 -1
  96. package/dist/src/agent/embedded/run-for-session.js +1 -1
  97. package/dist/src/agent/image/tool-model-config.js +1 -1
  98. package/dist/src/agent/ipc/inbox.js +1 -1
  99. package/dist/src/agent/memory/create-memory-manager.js +1 -1
  100. package/dist/src/agent/service.js +2 -2
  101. package/dist/src/agent/session/session-inspector.js +1 -1
  102. package/dist/src/agent/skills/hub-lock.js +1 -1
  103. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  104. package/dist/src/agent-runtime/index.js +1 -1
  105. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  106. package/dist/src/ai-assist/text-assist.js +1 -1
  107. package/dist/src/auth/credentials.js +2 -2
  108. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  109. package/dist/src/auth/profiles/store.js +1 -1
  110. package/dist/src/auth/sync-provider-auth.js +2 -2
  111. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  112. package/dist/src/cli/commands/agent.js +2 -2
  113. package/dist/src/cli/commands/connectors.js +1 -1
  114. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  115. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  116. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  117. package/dist/src/cli/commands/models.js +2 -2
  118. package/dist/src/cli/commands/onboard.js +1 -1
  119. package/dist/src/cli/commands/profile.js +1 -1
  120. package/dist/src/cli/commands/tunnel.js +3 -3
  121. package/dist/src/cli/commands/update.js +1 -1
  122. package/dist/src/cli/extension-cli-register.js +1 -1
  123. package/dist/src/config/agent-profile.js +1 -1
  124. package/dist/src/config/index.js +5 -5
  125. package/dist/src/config/loader.js +1 -1
  126. package/dist/src/config/models-json.js +1 -1
  127. package/dist/src/connectors/composio-managed-client.d.ts +60 -0
  128. package/dist/src/connectors/composio-managed-client.js +135 -0
  129. package/dist/src/connectors/composio-managed-events.d.ts +41 -0
  130. package/dist/src/connectors/composio-managed-events.js +105 -0
  131. package/dist/src/connectors/composio-session-types.d.ts +91 -0
  132. package/dist/src/connectors/composio-session-types.js +1 -0
  133. package/dist/src/connectors/composio-sessions.d.ts +3 -91
  134. package/dist/src/connectors/composio-sessions.js +13 -7
  135. package/dist/src/connectors/composio.js +2 -1
  136. package/dist/src/connectors/connected-source-ingestion.js +67 -25
  137. package/dist/src/connectors/health.js +1 -1
  138. package/dist/src/connectors/learning-recipes.js +2 -0
  139. package/dist/src/connectors/runtime-adapter-registry.js +2 -2
  140. package/dist/src/discussions/sealer.js +2 -2
  141. package/dist/src/discussions/service.js +6 -2
  142. package/dist/src/discussions/transcript.d.ts +2 -0
  143. package/dist/src/discussions/transcript.js +16 -3
  144. package/dist/src/extensions/install.d.ts +10 -0
  145. package/dist/src/extensions/install.js +111 -14
  146. package/dist/src/extensions/loader.js +22 -18
  147. package/dist/src/extensions/lockfile.js +1 -1
  148. package/dist/src/gateway/agents-admin.js +2 -2
  149. package/dist/src/gateway/file-path-classifier.js +1 -1
  150. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  151. package/dist/src/gateway/hono/middleware/auth.js +2 -2
  152. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  153. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -1
  154. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  155. package/dist/src/gateway/hono/routes/connectors.js +11 -4
  156. package/dist/src/gateway/hono/routes/exposure.js +1 -1
  157. package/dist/src/gateway/hono/routes/home.d.ts +1 -1
  158. package/dist/src/gateway/hono/routes/home.js +2 -2
  159. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  160. package/dist/src/gateway/hono/routes/models.js +1 -1
  161. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +2 -2
  162. package/dist/src/gateway/hono/routes/shares.js +1 -1
  163. package/dist/src/gateway/hono/routes/tunnel.js +3 -3
  164. package/dist/src/gateway/hono/routes/workflows.js +69 -0
  165. package/dist/src/gateway/index.js +2 -2
  166. package/dist/src/gateway/run-loop.js +1 -1
  167. package/dist/src/gateway/runtime-config.js +2 -2
  168. package/dist/src/gateway/security/audit.js +2 -2
  169. package/dist/src/gateway/service/config-coordinator.js +2 -2
  170. package/dist/src/gateway/service.d.ts +1 -0
  171. package/dist/src/gateway/service.js +23 -8
  172. package/dist/src/notes/note-attachment-sync.js +1 -1
  173. package/dist/src/notes/service.d.ts +1 -0
  174. package/dist/src/notes/service.js +2 -1
  175. package/dist/src/notes/types.d.ts +2 -0
  176. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  177. package/dist/src/providers/index.js +2 -2
  178. package/dist/src/providers/model-catalog-persistence.d.ts +1 -1
  179. package/dist/src/providers/model-catalog-store.d.ts +2 -60
  180. package/dist/src/providers/model-catalog-types.d.ts +60 -0
  181. package/dist/src/providers/model-catalog-types.js +1 -0
  182. package/dist/src/providers/model-registry.js +1 -1
  183. package/dist/src/providers/provider-disconnect-core.d.ts +11 -0
  184. package/dist/src/providers/provider-disconnect-core.js +35 -0
  185. package/dist/src/providers/provider-disconnect.d.ts +2 -10
  186. package/dist/src/providers/provider-disconnect.js +4 -26
  187. package/dist/src/providers/register-runtime-providers.js +1 -1
  188. package/dist/src/providers/xopc-cloud-catalog-coordinator.js +2 -2
  189. package/dist/src/runtime-tools/manager.js +41 -22
  190. package/dist/src/storage/sqlite/migrations/124_workflow_context_snapshots.sql +15 -0
  191. package/dist/src/storage/sqlite/migrations/125_project_workflow_presets.sql +12 -0
  192. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  193. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  194. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  195. package/dist/src/storage/sqlite/schema.js +1 -1
  196. package/dist/src/tasks/home-query-service.d.ts +12 -127
  197. package/dist/src/tasks/home-query-service.js +73 -271
  198. package/dist/src/tasks/index.js +2 -2
  199. package/dist/src/tui/tui-startup-resources.js +2 -2
  200. package/dist/src/tui/tui.js +1 -1
  201. package/dist/src/tui/xopc-tui-keybindings.d.ts +2 -2
  202. package/dist/src/tunnel/index.js +2 -2
  203. package/dist/src/voice/audio/normalize.d.ts +1 -0
  204. package/dist/src/voice/audio/normalize.js +24 -4
  205. package/dist/src/voice/local/wav.d.ts +3 -0
  206. package/dist/src/voice/local/wav.js +10 -4
  207. package/dist/src/work-discovery/analyzer.js +16 -4
  208. package/dist/src/work-discovery/service.js +6 -8
  209. package/dist/src/work-discovery/types.d.ts +3 -0
  210. package/dist/src/workflows/context/workflow-context-snapshot-repository.d.ts +21 -0
  211. package/dist/src/workflows/context/workflow-context-snapshot-repository.js +40 -0
  212. package/dist/src/workflows/context/workflow-context.d.ts +18 -0
  213. package/dist/src/workflows/context/workflow-context.js +159 -0
  214. package/dist/src/workflows/domain/run.d.ts +10 -1
  215. package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
  216. package/dist/src/workflows/engine/workflow-engine.js +2 -0
  217. package/dist/src/workflows/project-presets/project-workflow-preset-repository.d.ts +20 -0
  218. package/dist/src/workflows/project-presets/project-workflow-preset-repository.js +38 -0
  219. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  220. package/dist/src/workflows/service/workflow-run-service.js +108 -23
  221. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
  222. package/dist/src/workflows/service/workflow-writeback-service.d.ts +9 -0
  223. package/dist/src/workflows/service/workflow-writeback-service.js +106 -0
  224. package/package.json +20 -20
  225. package/dist/gateway/static/root/assets/agents-CjhgfuVJ.js +0 -68
  226. package/dist/gateway/static/root/assets/apps-page-CjmlGB5V.js +0 -1
  227. package/dist/gateway/static/root/assets/automations-page-4m6Ey6wG.js +0 -6
  228. package/dist/gateway/static/root/assets/browser-settings-page-CAGCYx8U.js +0 -8
  229. package/dist/gateway/static/root/assets/capabilities-settings-panel-CKfLsxTI.js +0 -7
  230. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CpipKNqX.js +0 -3
  231. package/dist/gateway/static/root/assets/channels-settings-Bvq-O4pt.js +0 -1
  232. package/dist/gateway/static/root/assets/channels-status-swr-CrMld2l7.js +0 -1
  233. package/dist/gateway/static/root/assets/connectors-page-CSQRzaVn.js +0 -2
  234. package/dist/gateway/static/root/assets/directory-picker-path-field-DlJY90TM.js +0 -1
  235. package/dist/gateway/static/root/assets/home-page-BhqItS_s.js +0 -1
  236. package/dist/gateway/static/root/assets/index-DLhvsU9B.css +0 -2
  237. package/dist/gateway/static/root/assets/index-_cuTcWjB.js +0 -107
  238. package/dist/gateway/static/root/assets/local-app-workbench-page-DWjTmzxw.js +0 -2
  239. package/dist/gateway/static/root/assets/logs-page-BA5efZ8B.js +0 -2
  240. package/dist/gateway/static/root/assets/messages-ctG2e-ix.js +0 -3
  241. package/dist/gateway/static/root/assets/notes-workbench-CkHXVmKP.js +0 -4
  242. package/dist/gateway/static/root/assets/project-detail-page-DCqet9-L.js +0 -1
  243. package/dist/gateway/static/root/assets/projects-page-D0t_AjzG.js +0 -1
  244. package/dist/gateway/static/root/assets/remote-access-hub-BUWPoBvw.js +0 -1
  245. package/dist/gateway/static/root/assets/sessions-page-vLhrrM3m.js +0 -1
  246. package/dist/gateway/static/root/assets/settings-advanced-gate-OP1y0Y8M.js +0 -1
  247. package/dist/gateway/static/root/assets/setup-status-panel-Cxc-Ejl5.js +0 -1
  248. package/dist/gateway/static/root/assets/shares-settings-ZOqC6-aA.js +0 -1
  249. package/dist/gateway/static/root/assets/skill-reload-api-DwvC3Iuf.js +0 -1
  250. package/dist/gateway/static/root/assets/task-detail-page-DCRB-5q-.js +0 -1
  251. package/dist/gateway/static/root/assets/user-context-page-CoiedRuA.js +0 -1
  252. package/dist/gateway/static/root/assets/work-discovery-overlay-CGdT22un.js +0 -1
  253. package/dist/gateway/static/root/assets/work-discovery-page-BwaU1RqI.js +0 -1
  254. package/dist/gateway/static/root/assets/workflows-page-DHYmh9G7.js +0 -5
@@ -1,8 +1,8 @@
1
1
  import { isAllInterfacesHost, isLoopbackHost, resolveGatewayCorsOrigins } from "./host.js";
2
- import { isAuthRateLimitGloballyDisabled, isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
3
- import "./rate-limit/index.js";
4
2
  import { resolveGatewayListenPlan } from "./listen.js";
5
3
  import { assertTailscaleExposureCompatible } from "./tailscale-lifecycle.js";
4
+ import { isAuthRateLimitGloballyDisabled, isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
5
+ import "./rate-limit/index.js";
6
6
  //#region src/gateway/runtime-config.ts
7
7
  function hasSharedSecret(auth) {
8
8
  if (auth.mode === "trusted-proxy") return true;
@@ -1,10 +1,10 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { isAuthRateLimitGloballyDisabled, isGatewayStrictSecurityEnabled } from "../rate-limit/env-flags.js";
4
- import "../rate-limit/index.js";
5
3
  import { assertGatewayAuthConfigured, resolveGatewayAuth } from "../auth.js";
6
4
  import { resolveGatewayListenPlan } from "../listen.js";
7
5
  import { collectExposureConflicts, isRemoteGatewayInsecure, isTailnetBindUnavailable } from "../../remote-access/exposure-guards.js";
6
+ import { isAuthRateLimitGloballyDisabled, isGatewayStrictSecurityEnabled } from "../rate-limit/env-flags.js";
7
+ import "../rate-limit/index.js";
8
8
  import { assertGatewayRuntimeConfig } from "../runtime-config.js";
9
9
  //#region src/gateway/security/audit.ts
10
10
  init_logger();
@@ -1,15 +1,15 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { loadConfig, saveConfig } from "../../config/loader.js";
4
3
  import { getModelRegistry } from "../../providers/model-registry.js";
4
+ import { loadConfig, saveConfig } from "../../config/loader.js";
5
5
  import { init_providers } from "../../providers/index.js";
6
6
  import { disposeAllSessionMcpRuntimes } from "../../agent/mcp/bundle-mcp-runtime.js";
7
- import { sanitizeTunnelConfig } from "../../tunnel/tunnel-config.js";
8
7
  import { reloadImageGenerationProviders } from "../../agent/image/generation/provider-registry.js";
9
8
  import "../../agent/mcp/bundle-mcp-tools.js";
10
9
  import { ConfigHotReloader } from "../../config/reload.js";
11
10
  import "../../config/index.js";
12
11
  import { computeBundledExtensionExtensionsPatch } from "../../extensions/bundled-extension-activation.js";
12
+ import { sanitizeTunnelConfig } from "../../tunnel/tunnel-config.js";
13
13
  //#region src/gateway/service/config-coordinator.ts
14
14
  init_providers();
15
15
  init_logger();
@@ -67,6 +67,7 @@ export declare class GatewayService {
67
67
  private workflowRunServiceInstance;
68
68
  private taskRunDispatcher;
69
69
  private taskRunDispatchTimer;
70
+ private managedComposioEventPoller?;
70
71
  private mobileNotifications;
71
72
  private connectorSupervisor;
72
73
  private connectorLearningCoordinator;
@@ -9,14 +9,14 @@ import { closeXopcDatabase, openXopcDatabase } from "../storage/sqlite/connectio
9
9
  import "../storage/sqlite/index.js";
10
10
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
11
11
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../agent/agent-scope.js";
12
- import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
13
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
14
12
  import { init_paths, resolveAgentDir, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
13
+ import { prewarmModelRegistry } from "../providers/model-registry.js";
15
14
  import { areExtensionsGloballyDisabled } from "../extensions/discover-extensions.js";
16
15
  import { buildExtensionMetadataSnapshot } from "../extensions/extension-metadata-snapshot.js";
17
16
  import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, init_channel_catalog_service } from "../channels/catalog/channel-catalog-service.js";
18
17
  import { loadConfig, saveConfig } from "../config/loader.js";
19
- import { prewarmModelRegistry } from "../providers/model-registry.js";
18
+ import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
19
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
20
20
  import { init_providers, providers_exports } from "../providers/index.js";
21
21
  import { TaskRepository } from "../tasks/task-repository.js";
22
22
  import { TaskConversationRepository } from "../tasks/task-conversation-repository.js";
@@ -28,11 +28,6 @@ import "../automations/index.js";
28
28
  import { ProjectService } from "../projects/project-service.js";
29
29
  import { resolveProjectAgentId } from "../projects/project-agent.js";
30
30
  import "../projects/index.js";
31
- import { sanitizeTunnelConfig } from "../tunnel/tunnel-config.js";
32
- import { wireTunnelEventsToGateway } from "../tunnel/gateway-lifecycle.js";
33
- import { buckets } from "./rate-limit/buckets.js";
34
- import { isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
35
- import "./rate-limit/index.js";
36
31
  import { TaskApplicationService } from "../tasks/task-application-service.js";
37
32
  import { ProactiveScenarioService } from "../proactive/scenarios/service.js";
38
33
  import { TaskOutboxDispatcher } from "../tasks/task-outbox-dispatcher.js";
@@ -55,6 +50,7 @@ import { registerClarifyBridge } from "./clarify-runtime.js";
55
50
  import { ChannelManager } from "../channels/manager.js";
56
51
  import { getWorkspacePath } from "../config/workspace-path-helpers.js";
57
52
  import "../config/index.js";
53
+ import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
58
54
  import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
59
55
  import "../knowledge/index.js";
60
56
  import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
@@ -83,9 +79,14 @@ import "./heartbeat/index.js";
83
79
  import { EphemeralSideChatManager } from "./side-chat/manager.js";
84
80
  import { SideChatRunService } from "./side-chat/run-service.js";
85
81
  import "./side-chat/index.js";
82
+ import { wireTunnelEventsToGateway } from "../tunnel/gateway-lifecycle.js";
86
83
  import { stopTailscaleExposure } from "./tailscale-lifecycle.js";
87
84
  import { getExposureManager } from "../remote-access/exposure-manager.js";
85
+ import { sanitizeTunnelConfig } from "../tunnel/tunnel-config.js";
88
86
  import { assertGatewayAuthNotKnownWeak } from "./security/known-weak-secrets.js";
87
+ import { buckets } from "./rate-limit/buckets.js";
88
+ import { isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
89
+ import "./rate-limit/index.js";
89
90
  import { assertGatewayRuntimeConfig } from "./runtime-config.js";
90
91
  import { auditGatewayConfig } from "./security/audit.js";
91
92
  import { getXopcCloudCatalogCoordinator } from "../providers/xopc-cloud-catalog-coordinator.js";
@@ -183,6 +184,7 @@ var GatewayService = class {
183
184
  workflowRunServiceInstance = null;
184
185
  taskRunDispatcher = null;
185
186
  taskRunDispatchTimer = null;
187
+ managedComposioEventPoller;
186
188
  mobileNotifications = null;
187
189
  connectorSupervisor = null;
188
190
  connectorLearningCoordinator = null;
@@ -941,6 +943,17 @@ var GatewayService = class {
941
943
  getMemoryManager: () => this.agentService.getMemoryManager(),
942
944
  emit: (type, payload) => this.emit(type, payload)
943
945
  });
946
+ this.managedComposioEventPoller = new ManagedComposioEventPoller({
947
+ getConfig: () => this.config,
948
+ triggerAutomation: (event) => this.automationService.triggerEvent(event),
949
+ requestLearning: (toolkit) => {
950
+ this.requestConnectorLearningForToolkit(toolkit);
951
+ },
952
+ setLearningPaused: (connectionId, paused) => {
953
+ this.setConnectorLearningPaused(connectionId, paused);
954
+ }
955
+ });
956
+ this.managedComposioEventPoller.start();
944
957
  this.connectedSourceChangePublisher = new ConnectedSourceChangePublisher(this.proactive);
945
958
  this.connectedSourceChangePublisher.start();
946
959
  this.connectedKnowledgeCoordinator = startConnectedKnowledgeCoordinator({ resolvePipelineOptions: () => ({
@@ -1096,6 +1109,8 @@ var GatewayService = class {
1096
1109
  this.connectorSupervisor = null;
1097
1110
  this.connectorLearningCoordinator?.stop();
1098
1111
  this.connectorLearningCoordinator = null;
1112
+ this.managedComposioEventPoller?.stop();
1113
+ this.managedComposioEventPoller = void 0;
1099
1114
  this.connectedSourceChangePublisher?.stop();
1100
1115
  this.connectedSourceChangePublisher = null;
1101
1116
  this.connectedKnowledgeCoordinator?.stop();
@@ -8,7 +8,7 @@ function partitionAttachmentsByReference(note) {
8
8
  const attachments = note.attachments ?? [];
9
9
  const kept = [];
10
10
  const removed = [];
11
- for (const attachment of attachments) if (referenced.has(attachment.id)) kept.push(attachment);
11
+ for (const attachment of attachments) if (attachment.retainWithoutReference || referenced.has(attachment.id)) kept.push(attachment);
12
12
  else removed.push(attachment);
13
13
  return {
14
14
  kept,
@@ -48,6 +48,7 @@ export declare class NotesService {
48
48
  buffer: Buffer;
49
49
  mimeType: string;
50
50
  duration?: number;
51
+ retainWithoutReference?: boolean;
51
52
  }): Promise<NoteAttachment | null>;
52
53
  removeAttachment(noteId: string, attachmentId: string): Promise<boolean>;
53
54
  getAttachmentPath(noteId: string, attachmentId: string): Promise<{
@@ -474,7 +474,8 @@ var NotesService = class {
474
474
  fileName: file.name,
475
475
  size,
476
476
  relativePath,
477
- duration: file.duration
477
+ duration: file.duration,
478
+ retainWithoutReference: file.retainWithoutReference
478
479
  };
479
480
  const attachments = [...note.attachments || [], attachment];
480
481
  const kind = note.kind === "thought" && attachment.type === "audio" ? "voice" : note.kind === "thought" ? "media" : note.kind;
@@ -45,6 +45,8 @@ export interface NoteAttachment {
45
45
  relativePath: string;
46
46
  transcript?: string;
47
47
  duration?: number;
48
+ /** Retained by a structured note feature even when absent from user-owned Markdown. */
49
+ retainWithoutReference?: boolean;
48
50
  }
49
51
  export interface NoteAiMeta {
50
52
  summary?: string;
@@ -1,5 +1,5 @@
1
- import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
2
1
  import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
2
+ import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
3
3
  import { getDefaultAuthProfileStore } from "./auth-profile-store.js";
4
4
  //#region src/providers/auth-runtime/resolve-auth.ts
5
5
  init_env_keys();
@@ -1,11 +1,11 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
- import { getOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
- import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
5
3
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
6
4
  import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
7
5
  import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
6
+ import { getOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
8
7
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
8
+ import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
9
9
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
10
10
  import { applyOfficialModelMetadataCorrections, getSupplementalModels, init_model_supplements } from "./model-supplements.js";
11
11
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
@@ -1,4 +1,4 @@
1
- import type { CatalogSource } from './model-catalog-store.js';
1
+ import type { CatalogSource } from './model-catalog-types.js';
2
2
  export declare class ModelCatalogPersistence {
3
3
  private readonly path;
4
4
  constructor(path?: string);
@@ -1,63 +1,5 @@
1
- export interface CatalogModel {
2
- id: string;
3
- name: string;
4
- availability: 'available' | 'unavailable';
5
- kind: 'language' | 'image' | 'stt' | 'tts';
6
- input: Array<'text' | 'image' | 'audio'>;
7
- output: Array<'text' | 'image' | 'audio'>;
8
- operations: Array<'chat.completions' | 'responses' | 'images.generate' | 'images.edit' | 'audio.transcription' | 'audio.speech'>;
9
- reasoning: boolean;
10
- contextWindow: number;
11
- maxOutputTokens: number | null;
12
- stability?: 'stable' | 'preview' | 'deprecated';
13
- priority?: number;
14
- tier?: string;
15
- bestEffort?: boolean;
16
- imageGeneration?: {
17
- maxCount: number;
18
- sizes: string[];
19
- aspectRatios?: string[];
20
- qualities: Array<'low' | 'medium' | 'high' | 'auto'>;
21
- formats: Array<'png' | 'jpeg' | 'webp'>;
22
- backgrounds: Array<'transparent' | 'opaque' | 'auto'>;
23
- maxInputImages: number;
24
- };
25
- stt?: {
26
- inputFormats: string[];
27
- maxBytes: number;
28
- maxDurationSeconds: number;
29
- languages: string[];
30
- languageHint: boolean;
31
- prompt: boolean;
32
- timestamps: Array<'segment' | 'word'>;
33
- diarization: boolean;
34
- };
35
- tts?: {
36
- maxCharacters: number;
37
- languages: string[];
38
- outputFormats: Array<'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm'>;
39
- streaming: boolean;
40
- speed: boolean;
41
- pitch: boolean;
42
- instructions: boolean;
43
- defaultVoice?: string;
44
- };
45
- }
46
- export interface CatalogSource {
47
- providerId: string;
48
- baseUrl: string;
49
- api: 'openai-completions' | 'openai-responses';
50
- etag: string | null;
51
- recommendedModel: string | null;
52
- recommended?: Partial<Record<'vision' | 'image-generation' | 'stt' | 'tts', string>>;
53
- lastSuccessAt: number;
54
- models: CatalogModel[];
55
- }
56
- export interface ModelCatalogSnapshot {
57
- sources: Record<string, CatalogSource>;
58
- }
59
- export type CatalogSourceOrigin = 'memory' | 'disk' | 'network';
60
- export type AvailableCatalogModel = Omit<CatalogModel, 'availability'>;
1
+ import type { AvailableCatalogModel, CatalogSource, CatalogSourceOrigin, ModelCatalogSnapshot } from './model-catalog-types.js';
2
+ export type { AvailableCatalogModel, CatalogModel, CatalogSource, CatalogSourceOrigin, ModelCatalogSnapshot, } from './model-catalog-types.js';
61
3
  export declare class ModelCatalogStore {
62
4
  private sources;
63
5
  private origins;
@@ -0,0 +1,60 @@
1
+ export interface CatalogModel {
2
+ id: string;
3
+ name: string;
4
+ availability: 'available' | 'unavailable';
5
+ kind: 'language' | 'image' | 'stt' | 'tts';
6
+ input: Array<'text' | 'image' | 'audio'>;
7
+ output: Array<'text' | 'image' | 'audio'>;
8
+ operations: Array<'chat.completions' | 'responses' | 'images.generate' | 'images.edit' | 'audio.transcription' | 'audio.speech'>;
9
+ reasoning: boolean;
10
+ contextWindow: number;
11
+ maxOutputTokens: number | null;
12
+ stability?: 'stable' | 'preview' | 'deprecated';
13
+ priority?: number;
14
+ tier?: string;
15
+ bestEffort?: boolean;
16
+ imageGeneration?: {
17
+ maxCount: number;
18
+ sizes: string[];
19
+ aspectRatios?: string[];
20
+ qualities: Array<'low' | 'medium' | 'high' | 'auto'>;
21
+ formats: Array<'png' | 'jpeg' | 'webp'>;
22
+ backgrounds: Array<'transparent' | 'opaque' | 'auto'>;
23
+ maxInputImages: number;
24
+ };
25
+ stt?: {
26
+ inputFormats: string[];
27
+ maxBytes: number;
28
+ maxDurationSeconds: number;
29
+ languages: string[];
30
+ languageHint: boolean;
31
+ prompt: boolean;
32
+ timestamps: Array<'segment' | 'word'>;
33
+ diarization: boolean;
34
+ };
35
+ tts?: {
36
+ maxCharacters: number;
37
+ languages: string[];
38
+ outputFormats: Array<'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm'>;
39
+ streaming: boolean;
40
+ speed: boolean;
41
+ pitch: boolean;
42
+ instructions: boolean;
43
+ defaultVoice?: string;
44
+ };
45
+ }
46
+ export interface CatalogSource {
47
+ providerId: string;
48
+ baseUrl: string;
49
+ api: 'openai-completions' | 'openai-responses';
50
+ etag: string | null;
51
+ recommendedModel: string | null;
52
+ recommended?: Partial<Record<'vision' | 'image-generation' | 'stt' | 'tts', string>>;
53
+ lastSuccessAt: number;
54
+ models: CatalogModel[];
55
+ }
56
+ export interface ModelCatalogSnapshot {
57
+ sources: Record<string, CatalogSource>;
58
+ }
59
+ export type CatalogSourceOrigin = 'memory' | 'disk' | 'network';
60
+ export type AvailableCatalogModel = Omit<CatalogModel, 'availability'>;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,8 +1,8 @@
1
1
  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
- import { resolveModelsJsonPath } from "../config/paths.js";
5
4
  import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
5
+ import { resolveModelsJsonPath } from "../config/paths.js";
6
6
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
7
7
  import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
8
8
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
@@ -0,0 +1,11 @@
1
+ import { CredentialResolver } from '../auth/credentials.js';
2
+ export interface ProviderDisconnectOptions {
3
+ resolver?: Pick<CredentialResolver, 'deleteProviderCredential'>;
4
+ invalidateAuth?: () => void;
5
+ clearCloudCatalog?: () => Promise<void>;
6
+ refreshModels?: () => void;
7
+ evictRunners?: () => void;
8
+ withLock?: <T>(providerId: string, operation: () => Promise<T>) => Promise<T>;
9
+ }
10
+ /** Low-level disconnect operation. Cloud callers must inject catalog cleanup. */
11
+ export declare function disconnectProviderCore(providerId: string, options?: ProviderDisconnectOptions): Promise<void>;
@@ -0,0 +1,35 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { getModelRegistry, init_model_registry } from "./model-registry.js";
4
+ import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
5
+ import { CredentialResolver, init_credentials } from "../auth/credentials.js";
6
+ import { getProviderAuthService, init_provider_auth_service } from "./provider-auth-service.js";
7
+ import { evictAllEmbeddedSessionRunners } from "../agent/embedded/session-runner.js";
8
+ //#region src/providers/provider-disconnect-core.ts
9
+ init_credentials();
10
+ init_oauth_provider_lock();
11
+ init_logger();
12
+ init_model_registry();
13
+ init_provider_auth_service();
14
+ const log = createLogger("ProviderDisconnect");
15
+ /** Low-level disconnect operation. Cloud callers must inject catalog cleanup. */
16
+ async function disconnectProviderCore(providerId, options = {}) {
17
+ const provider = providerId.trim().toLowerCase();
18
+ if (!provider) throw new Error("Provider id is required");
19
+ const resolver = options.resolver ?? new CredentialResolver();
20
+ await (options.withLock ?? ((id, operation) => withOAuthProviderLock(id, operation)))(provider, async () => {
21
+ await resolver.deleteProviderCredential(provider);
22
+ (options.invalidateAuth ?? (() => getProviderAuthService().invalidate()))();
23
+ if (provider === "xopc-cloud") {
24
+ if (!options.clearCloudCatalog) throw new Error("XOPC Cloud disconnect requires a catalog cleanup hook");
25
+ await options.clearCloudCatalog();
26
+ } else (options.refreshModels ?? (() => getModelRegistry().refresh()))();
27
+ (options.evictRunners ?? (() => evictAllEmbeddedSessionRunners("provider_disconnected")))();
28
+ });
29
+ log.info({
30
+ provider,
31
+ phase: "provider_revoked"
32
+ }, `Disconnected provider: ${provider}`);
33
+ }
34
+ //#endregion
35
+ export { disconnectProviderCore };
@@ -1,11 +1,3 @@
1
- import { CredentialResolver } from '../auth/credentials.js';
2
- interface ProviderDisconnectOptions {
3
- resolver?: Pick<CredentialResolver, 'deleteProviderCredential'>;
4
- invalidateAuth?: () => void;
5
- clearCloudCatalog?: () => Promise<void>;
6
- refreshModels?: () => void;
7
- evictRunners?: () => void;
8
- withLock?: <T>(providerId: string, operation: () => Promise<T>) => Promise<T>;
9
- }
1
+ import { type ProviderDisconnectOptions } from './provider-disconnect-core.js';
2
+ export type { ProviderDisconnectOptions } from './provider-disconnect-core.js';
10
3
  export declare function disconnectProvider(providerId: string, options?: ProviderDisconnectOptions): Promise<void>;
11
- export {};
@@ -1,33 +1,11 @@
1
- import { createLogger } from "../utils/logger/index.js";
2
- import { init_logger } from "../utils/logger.js";
3
- import { getModelRegistry, init_model_registry } from "./model-registry.js";
4
- import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
5
- import { CredentialResolver, init_credentials } from "../auth/credentials.js";
6
- import { getProviderAuthService, init_provider_auth_service } from "./provider-auth-service.js";
7
- import { evictAllEmbeddedSessionRunners } from "../agent/embedded/session-runner.js";
1
+ import { disconnectProviderCore } from "./provider-disconnect-core.js";
8
2
  import { getXopcCloudCatalogCoordinator } from "./xopc-cloud-catalog-coordinator.js";
9
3
  //#region src/providers/provider-disconnect.ts
10
- init_credentials();
11
- init_oauth_provider_lock();
12
- init_logger();
13
- init_model_registry();
14
- init_provider_auth_service();
15
- const log = createLogger("ProviderDisconnect");
16
4
  async function disconnectProvider(providerId, options = {}) {
17
- const provider = providerId.trim().toLowerCase();
18
- if (!provider) throw new Error("Provider id is required");
19
- const resolver = options.resolver ?? new CredentialResolver();
20
- await (options.withLock ?? ((id, operation) => withOAuthProviderLock(id, operation)))(provider, async () => {
21
- await resolver.deleteProviderCredential(provider);
22
- (options.invalidateAuth ?? (() => getProviderAuthService().invalidate()))();
23
- if (provider === "xopc-cloud") await (options.clearCloudCatalog ?? (() => getXopcCloudCatalogCoordinator().clear("revoke")))();
24
- else (options.refreshModels ?? (() => getModelRegistry().refresh()))();
25
- (options.evictRunners ?? (() => evictAllEmbeddedSessionRunners("provider_disconnected")))();
5
+ return disconnectProviderCore(providerId, {
6
+ ...options,
7
+ clearCloudCatalog: options.clearCloudCatalog ?? (() => getXopcCloudCatalogCoordinator().clear("revoke"))
26
8
  });
27
- log.info({
28
- provider,
29
- phase: "provider_revoked"
30
- }, `Disconnected provider: ${provider}`);
31
9
  }
32
10
  //#endregion
33
11
  export { disconnectProvider };
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
2
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
3
+ import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
4
4
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
5
5
  //#region src/providers/register-runtime-providers.ts
6
6
  function registerRuntimeProvider(modelRuntime, source) {
@@ -5,6 +5,7 @@ import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-
5
5
  import { getModelRegistry, init_model_registry } from "./model-registry.js";
6
6
  import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
7
7
  import { reloadImageGenerationProviders } from "../agent/image/generation/provider-registry.js";
8
+ import { disconnectProviderCore } from "./provider-disconnect-core.js";
8
9
  import { XopcCloudModelSource } from "./xopc-cloud-model-source.js";
9
10
  //#region src/providers/xopc-cloud-catalog-coordinator.ts
10
11
  init_oauth_provider_lock();
@@ -36,8 +37,7 @@ var XopcCloudCatalogCoordinator = class {
36
37
  this.reloadImageProviders = options.reloadImageProviders ?? reloadImageGenerationProviders;
37
38
  this.withLock = options.withLock ?? ((operation) => withOAuthProviderLock("xopc-cloud", operation));
38
39
  this.onPermanentAuthFailure = options.onPermanentAuthFailure ?? (async () => {
39
- const { disconnectProvider } = await import("./provider-disconnect.js");
40
- await disconnectProvider("xopc-cloud");
40
+ await disconnectProviderCore("xopc-cloud", { clearCloudCatalog: () => this.clear("invalid-grant") });
41
41
  });
42
42
  }
43
43
  async hydrate() {
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { applyPathPrepend } from "../infra/path-prepend.js";
3
4
  import { RuntimeError } from "./errors.js";
4
5
  import { atomicInstallRuntime, extractRuntimeArchive } from "./archive.js";
5
6
  import { runRuntimeCommand } from "./command.js";
@@ -46,6 +47,40 @@ function uvExecutables(installDir) {
46
47
  uvx: join(installDir, executableName("uvx"))
47
48
  };
48
49
  }
50
+ function managedNodeProbeEnvironment(executables) {
51
+ const env = { ...process.env };
52
+ applyPathPrepend(env, [dirname(executables.node ?? executables.primary)]);
53
+ return env;
54
+ }
55
+ async function probeNodePackageManagers(executables) {
56
+ if (!executables.npm || !executables.npx) return null;
57
+ const env = managedNodeProbeEnvironment(executables);
58
+ const [npm, npx] = await Promise.all([runRuntimeCommand({
59
+ command: executables.npm,
60
+ args: ["--version"],
61
+ env
62
+ }), runRuntimeCommand({
63
+ command: executables.npx,
64
+ args: ["--version"],
65
+ env
66
+ })]);
67
+ return {
68
+ npm,
69
+ npx
70
+ };
71
+ }
72
+ function packageManagerProbeFailure(name, result) {
73
+ if (result.ok) return null;
74
+ const output = result.stderr || result.stdout;
75
+ if (output) return `${name}: ${output}`;
76
+ if (result.timedOut) return `${name}: timed out`;
77
+ if (result.aborted) return `${name}: aborted`;
78
+ return `${name}: exited with code ${result.exitCode ?? "unknown"}`;
79
+ }
80
+ function packageManagerProbeFailureMessage(results) {
81
+ if (!results) return "npm or npx executable is missing";
82
+ return [packageManagerProbeFailure("npm", results.npm), packageManagerProbeFailure("npx", results.npx)].filter((message) => message !== null).join("; ");
83
+ }
49
84
  function runtimeConfig(options, runtime) {
50
85
  if (runtime === "node") return options.config.node;
51
86
  if (runtime === "python") return options.config.python;
@@ -125,17 +160,8 @@ var ManagedRuntimeManager = class extends EventEmitter {
125
160
  const version = parseRuntimeVersion(`${result.stdout}\n${result.stderr}`);
126
161
  if (!result.ok || !version || !versionSatisfies(version, requestedVersion)) return null;
127
162
  if (runtime === "node") {
128
- const npm = manifest.executables.npm;
129
- const npx = manifest.executables.npx;
130
- if (!npm || !npx) return null;
131
- const [npmProbe, npxProbe] = await Promise.all([runRuntimeCommand({
132
- command: npm,
133
- args: ["--version"]
134
- }), runRuntimeCommand({
135
- command: npx,
136
- args: ["--version"]
137
- })]);
138
- if (!npmProbe.ok || !npxProbe.ok) return null;
163
+ const packageManagers = await probeNodePackageManagers(manifest.executables);
164
+ if (!packageManagers?.npm.ok || !packageManagers.npx.ok) return null;
139
165
  }
140
166
  return {
141
167
  runtime,
@@ -271,22 +297,15 @@ var ManagedRuntimeManager = class extends EventEmitter {
271
297
  }
272
298
  let packageManagerVersion;
273
299
  if (runtime === "node") {
274
- const npmProbe = await runRuntimeCommand({
275
- command: executables.npm,
276
- args: ["--version"]
277
- });
278
- const npxProbe = await runRuntimeCommand({
279
- command: executables.npx,
280
- args: ["--version"]
281
- });
282
- if (!npmProbe.ok || !npxProbe.ok) {
300
+ const packageManagers = await probeNodePackageManagers(executables);
301
+ if (!packageManagers?.npm.ok || !packageManagers.npx.ok) {
283
302
  await rm(installDir, {
284
303
  recursive: true,
285
304
  force: true
286
305
  });
287
- throw new RuntimeError(`Node ${version} is missing npm or npx`, "RUNTIME_PROBE_FAILED", runtime, "probe_package_manager", true);
306
+ throw new RuntimeError(`Node ${version} failed its npm or npx installation probe: ${packageManagerProbeFailureMessage(packageManagers)}`, "RUNTIME_PROBE_FAILED", runtime, "probe_package_manager", true);
288
307
  }
289
- packageManagerVersion = npmProbe.stdout;
308
+ packageManagerVersion = packageManagers.npm.stdout;
290
309
  }
291
310
  const now = (/* @__PURE__ */ new Date()).toISOString();
292
311
  const manifest = {
@@ -0,0 +1,15 @@
1
+ CREATE TABLE workflow_context_snapshots (
2
+ snapshot_id TEXT PRIMARY KEY,
3
+ trace_id TEXT NOT NULL UNIQUE,
4
+ run_id TEXT NOT NULL,
5
+ project_id TEXT,
6
+ selected_items_json TEXT NOT NULL,
7
+ estimated_tokens INTEGER NOT NULL DEFAULT 0,
8
+ content_hash TEXT NOT NULL,
9
+ created_at INTEGER NOT NULL
10
+ );
11
+
12
+ CREATE INDEX idx_workflow_context_snapshots_run
13
+ ON workflow_context_snapshots(run_id, created_at DESC);
14
+ CREATE INDEX idx_workflow_context_snapshots_project
15
+ ON workflow_context_snapshots(project_id, created_at DESC);
@@ -0,0 +1,12 @@
1
+ CREATE TABLE project_workflow_presets (
2
+ project_id TEXT NOT NULL,
3
+ definition_id TEXT NOT NULL,
4
+ context_refs_json TEXT NOT NULL DEFAULT '[]',
5
+ created_at INTEGER NOT NULL,
6
+ updated_at INTEGER NOT NULL,
7
+ PRIMARY KEY (project_id, definition_id),
8
+ FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
9
+ );
10
+
11
+ CREATE INDEX idx_project_workflow_presets_updated
12
+ ON project_workflow_presets(project_id, updated_at DESC);
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 123;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 125;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.