@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
@@ -834,7 +834,7 @@ activityDetailDefault: z.enum([
834
834
  "always",
835
835
  "inbound",
836
836
  "tagged"
837
- ]).default("inbound"),
837
+ ]).default("off"),
838
838
  fallback: TTSFallbackConfigSchema.optional(),
839
839
  maxTextLength: z.number().int().min(1).default(512),
840
840
  timeoutMs: z.number().int().min(1e3).max(18e4).default(6e4),
@@ -1,3 +1,4 @@
1
+ import type { Config } from '../config/schema.js';
1
2
  import type { ConnectorDefinition } from './types.js';
2
3
  export type ConnectorAuthStartResult = {
3
4
  connectorId: string;
@@ -6,4 +7,4 @@ export type ConnectorAuthStartResult = {
6
7
  authorizationUrl?: string;
7
8
  connectionId?: string;
8
9
  };
9
- export declare function startConnectorAuthorization(definition: ConnectorDefinition): Promise<ConnectorAuthStartResult>;
10
+ export declare function startConnectorAuthorization(definition: ConnectorDefinition, config?: Config): Promise<ConnectorAuthStartResult>;
@@ -1,8 +1,11 @@
1
1
  import { startComposioAuthorize } from "./composio.js";
2
+ import { getConnectorInstance } from "./instances.js";
2
3
  //#region src/connectors/auth-provider-registry.ts
3
- async function startConnectorAuthorization(definition) {
4
+ async function startConnectorAuthorization(definition, config) {
4
5
  if (definition.auth.mode !== "oauth" || definition.auth.provider !== "composio" || definition.runtime.type !== "composio" || definition.runtime.role !== "toolkit") throw new Error(`Connector "${definition.id}" does not support Composio authorization.`);
5
- const authorization = await startComposioAuthorize(definition.id, definition.runtime.toolkit);
6
+ const configuredAuthConfigId = config ? getConnectorInstance(config, definition.id)?.config?.authConfigId : void 0;
7
+ const authConfigId = typeof configuredAuthConfigId === "string" && configuredAuthConfigId.trim() ? configuredAuthConfigId.trim() : void 0;
8
+ const authorization = await startComposioAuthorize(definition.id, definition.runtime.toolkit, void 0, authConfigId);
6
9
  return {
7
10
  connectorId: definition.id,
8
11
  provider: "composio",
@@ -17,6 +17,20 @@ export type ComposioAuthorizeResult = {
17
17
  connectUrl?: string;
18
18
  status: string;
19
19
  };
20
+ export type ComposioAuthConfigOption = {
21
+ id: string;
22
+ name: string;
23
+ status: 'ENABLED' | 'DISABLED';
24
+ authScheme?: string;
25
+ isComposioManaged: boolean;
26
+ isEnabledForToolRouter: boolean;
27
+ };
28
+ export type ComposioToolkitAuthState = {
29
+ toolkit: string;
30
+ managedAuthAvailable: boolean;
31
+ requiresCustomAuthConfig: boolean;
32
+ authConfigs: ComposioAuthConfigOption[];
33
+ };
20
34
  type SessionToolkitResponse = {
21
35
  items: Array<{
22
36
  slug: string;
@@ -69,12 +83,34 @@ export type ComposioSessionsClient = {
69
83
  delete(id: string): Promise<unknown>;
70
84
  refresh(id: string): Promise<unknown>;
71
85
  };
86
+ authConfigs?: {
87
+ list(query?: {
88
+ toolkit?: string;
89
+ showDisabled?: boolean;
90
+ }): Promise<{
91
+ items: Array<{
92
+ id: string;
93
+ name: string;
94
+ status: 'ENABLED' | 'DISABLED';
95
+ authScheme?: string;
96
+ isComposioManaged?: boolean;
97
+ isEnabledForToolRouter?: boolean;
98
+ }>;
99
+ }>;
100
+ };
101
+ toolkits?: {
102
+ get(slug: string): Promise<{
103
+ composioManagedAuthSchemes?: string[];
104
+ authConfigDetails?: unknown[];
105
+ }>;
106
+ };
72
107
  };
73
108
  export type ComposioSessionContext = {
74
109
  principalId: string;
75
110
  installationScope?: string;
76
111
  providerPrincipalId?: string;
77
112
  toolkits?: string[];
113
+ authConfigs?: Record<string, string>;
78
114
  connectedAccounts?: Record<string, string[]>;
79
115
  callbackUrl?: string;
80
116
  };
@@ -86,11 +122,14 @@ export declare class ComposioSessionsAdapter {
86
122
  constructor(options?: {
87
123
  resolver?: CredentialResolver;
88
124
  clientFactory?: ClientFactory;
125
+ fileDownloadDir?: string;
89
126
  });
90
127
  createSession(context: ComposioSessionContext): Promise<ComposioSessionLike>;
128
+ getToolkitAuthState(toolkit: string): Promise<ComposioToolkitAuthState>;
91
129
  listToolkitCatalog(context: Omit<ComposioSessionContext, 'toolkits'>): Promise<ComposioToolkitCatalogItem[]>;
92
130
  authorize(context: ComposioSessionContext & {
93
131
  toolkit: string;
132
+ authConfigId?: string;
94
133
  installationId?: string;
95
134
  alias?: string;
96
135
  }): Promise<ComposioAuthorizeResult>;
@@ -63,6 +63,25 @@ function connectionStatus(value) {
63
63
  default: return "unknown";
64
64
  }
65
65
  }
66
+ function errorChainMessage(error) {
67
+ const messages = [];
68
+ const visited = /* @__PURE__ */ new Set();
69
+ let current = error;
70
+ while (current && !visited.has(current)) {
71
+ visited.add(current);
72
+ if (current instanceof Error) messages.push(current.message);
73
+ else if (typeof current === "string") messages.push(current);
74
+ if (!current || typeof current !== "object" || !("cause" in current)) break;
75
+ current = current.cause;
76
+ }
77
+ return messages.join(" ");
78
+ }
79
+ function missingAuthConfigMessage(error, toolkit, authConfigId) {
80
+ const message = errorChainMessage(error);
81
+ if (!message.includes("require auth configs") && !message.includes("cannot be auto-created")) return null;
82
+ if (authConfigId) return `The Composio auth config "${authConfigId}" is not available for toolkit "${toolkit}". Make sure it is enabled for Tool Router and belongs to the same Composio project as the configured API key.`;
83
+ return `The Composio toolkit "${toolkit}" requires a custom auth config. Create one in the Composio dashboard, enable it for Tool Router, then select it in the connector settings.`;
84
+ }
66
85
  var ComposioSessionsAdapter = class {
67
86
  createClient;
68
87
  constructor(options = {}) {
@@ -84,8 +103,9 @@ var ComposioSessionsAdapter = class {
84
103
  apiKey,
85
104
  baseURL: process.env.XOPC_COMPOSIO_BASE_URL?.trim() || void 0,
86
105
  allowTracking: false,
87
- dangerouslyAllowAutoUploadDownloadFiles: false,
106
+ dangerouslyAllowAutoUploadDownloadFiles: Boolean(options.fileDownloadDir),
88
107
  fileUploadDirs: false,
108
+ ...options.fileDownloadDir ? { fileDownloadDir: options.fileDownloadDir } : {},
89
109
  provider: new PiProvider(),
90
110
  host: "xopc"
91
111
  });
@@ -106,10 +126,36 @@ var ComposioSessionsAdapter = class {
106
126
  requireExplicitSelection: true
107
127
  },
108
128
  ...context.toolkits?.length ? { toolkits: { enable: context.toolkits } } : {},
129
+ ...context.authConfigs && Object.keys(context.authConfigs).length > 0 ? { authConfigs: context.authConfigs } : {},
109
130
  ...context.connectedAccounts && Object.keys(context.connectedAccounts).length > 0 ? { connectedAccounts: context.connectedAccounts } : {}
110
131
  };
111
132
  return client.sessions.create(context.providerPrincipalId ?? createComposioPrincipalId(context.principalId, context.installationScope), config);
112
133
  }
134
+ async getToolkitAuthState(toolkit) {
135
+ const normalizedToolkit = toolkit.trim().toLowerCase();
136
+ if (!normalizedToolkit) throw new Error("Composio toolkit is required.");
137
+ const client = await this.createClient();
138
+ if (!client.authConfigs || !client.toolkits) throw new Error("The installed Composio runtime does not support auth config discovery.");
139
+ const [toolkitDetails, authConfigList] = await Promise.all([client.toolkits.get(normalizedToolkit), client.authConfigs.list({
140
+ toolkit: normalizedToolkit,
141
+ showDisabled: true
142
+ })]);
143
+ const managedAuthAvailable = (toolkitDetails.composioManagedAuthSchemes?.length ?? 0) > 0;
144
+ const authConfigs = authConfigList.items.map((item) => ({
145
+ id: item.id,
146
+ name: item.name,
147
+ status: item.status,
148
+ authScheme: item.authScheme,
149
+ isComposioManaged: item.isComposioManaged === true,
150
+ isEnabledForToolRouter: item.isEnabledForToolRouter !== false
151
+ }));
152
+ return {
153
+ toolkit: normalizedToolkit,
154
+ managedAuthAvailable,
155
+ requiresCustomAuthConfig: !managedAuthAvailable && (toolkitDetails.authConfigDetails?.length ?? 0) > 0,
156
+ authConfigs
157
+ };
158
+ }
113
159
  async listToolkitCatalog(context) {
114
160
  const session = await this.createSession(context);
115
161
  const items = [];
@@ -134,11 +180,20 @@ var ComposioSessionsAdapter = class {
134
180
  }
135
181
  async authorize(context) {
136
182
  const providerPrincipalId = createComposioPrincipalId(context.principalId, context.installationScope);
137
- const request = await (await this.createSession({
138
- ...context,
139
- providerPrincipalId,
140
- toolkits: [context.toolkit]
141
- })).authorize(context.toolkit, {
183
+ let session;
184
+ try {
185
+ session = await this.createSession({
186
+ ...context,
187
+ providerPrincipalId,
188
+ toolkits: [context.toolkit],
189
+ ...context.authConfigId ? { authConfigs: { [context.toolkit]: context.authConfigId } } : {}
190
+ });
191
+ } catch (error) {
192
+ const actionableMessage = missingAuthConfigMessage(error, context.toolkit, context.authConfigId);
193
+ if (actionableMessage) throw new Error(actionableMessage, { cause: error });
194
+ throw error;
195
+ }
196
+ const request = await session.authorize(context.toolkit, {
142
197
  callbackUrl: context.callbackUrl,
143
198
  alias: context.alias
144
199
  });
@@ -159,7 +214,8 @@ var ComposioSessionsAdapter = class {
159
214
  }).length === 0,
160
215
  metadata: {
161
216
  toolkit: context.toolkit,
162
- providerPrincipalId
217
+ providerPrincipalId,
218
+ ...context.authConfigId ? { authConfigId: context.authConfigId } : {}
163
219
  }
164
220
  });
165
221
  return {
@@ -207,6 +263,7 @@ var ComposioSessionsAdapter = class {
207
263
  connectedAt: readString(row, ["createdAt", "created_at"]),
208
264
  lastError: readString(row, ["lastError", "last_error"]),
209
265
  metadata: {
266
+ ...existing?.metadata,
210
267
  toolkit,
211
268
  providerPrincipalId
212
269
  }
@@ -266,10 +323,12 @@ var ComposioSessionsAdapter = class {
266
323
  const toolkit = input.action.toolkit;
267
324
  const connectedAccounts = toolkit && input.connection ? { [toolkit]: [input.connection.providerConnectionId] } : input.context.connectedAccounts;
268
325
  const providerPrincipalId = input.connection?.metadata.providerPrincipalId;
326
+ const connectionAuthConfigId = input.connection?.metadata.authConfigId;
269
327
  if (input.connection && (typeof providerPrincipalId !== "string" || !providerPrincipalId.trim())) throw new Error("Connected account is missing its provider identity. Reconnect the account and try again.");
270
328
  const result = await (await this.createSession({
271
329
  ...input.context,
272
330
  connectedAccounts,
331
+ ...toolkit && typeof connectionAuthConfigId === "string" && connectionAuthConfigId.trim() ? { authConfigs: { [toolkit]: connectionAuthConfigId.trim() } } : {},
273
332
  ...typeof providerPrincipalId === "string" ? { providerPrincipalId } : {}
274
333
  })).execute(input.action.actionId, input.args ?? {}, input.connection ? { account: input.connection.providerConnectionId } : void 0);
275
334
  appendConnectorExecutionAudit({
@@ -1,5 +1,6 @@
1
1
  import { CredentialResolver } from '../auth/credentials.js';
2
2
  import type { Config } from '../config/schema.js';
3
+ import { type ComposioToolkitAuthState } from './composio-sessions.js';
3
4
  import type { ConnectorConfirmationPolicy, ConnectorDefinition, ConnectorInstallationPolicy } from './types.js';
4
5
  export type ComposioConnection = {
5
6
  id: string;
@@ -38,6 +39,7 @@ export type ComposioConnectorHealth = {
38
39
  recovery: 'none' | 'connect' | 'reconnect' | 'retry';
39
40
  errorCode?: 'missing_credential' | 'unauthorized' | 'forbidden' | 'network' | 'timeout' | 'provider_error';
40
41
  };
42
+ export declare function getConfiguredComposioAuthConfigs(config: Config | undefined, toolkits: string[]): Record<string, string>;
41
43
  export declare function toolkitFromComposioSlug(slug: string): string | undefined;
42
44
  export declare function scopeForComposioAction(slug: string): {
43
45
  toolkit?: string;
@@ -64,6 +66,7 @@ export declare function saveComposioApiKey(input: {
64
66
  export declare function configureComposioApiKey(apiKey: string, resolver?: CredentialResolver): Promise<void>;
65
67
  export declare function listComposioConnections(resolver?: CredentialResolver): Promise<ComposioConnection[]>;
66
68
  export declare function inspectComposioConnectorHealth(toolkit: string, resolver?: CredentialResolver): Promise<ComposioConnectorHealth>;
69
+ export declare function getComposioToolkitAuthState(toolkit: string, resolver?: CredentialResolver): Promise<ComposioToolkitAuthState>;
67
70
  export declare function getComposioInstallationPolicy(config: Config | undefined, toolkit: string): ConnectorInstallationPolicy;
68
71
  export declare function updateComposioInstallationPolicy(config: Config | undefined, toolkit: string, patch: {
69
72
  allowedAgentIds?: string[];
@@ -76,7 +79,7 @@ export declare function updateComposioConnection(id: string, patch: {
76
79
  }): ComposioConnection;
77
80
  export declare function refreshComposioConnection(id: string, resolver?: CredentialResolver): Promise<void>;
78
81
  export declare function revokeComposioConnection(id: string, resolver?: CredentialResolver): Promise<void>;
79
- export declare function startComposioAuthorize(connectorId: string, toolkit: string, resolver?: CredentialResolver): Promise<{
82
+ export declare function startComposioAuthorize(connectorId: string, toolkit: string, resolver?: CredentialResolver, authConfigId?: string): Promise<{
80
83
  toolkit: string;
81
84
  connectUrl: string;
82
85
  connectionId?: string;
@@ -92,14 +92,19 @@ const COMPOSIO_CURATED_ACTIONS = {
92
92
  },
93
93
  googlecalendar: {
94
94
  GOOGLECALENDAR_FIND_EVENT: "read",
95
- GOOGLECALENDAR_LIST_EVENTS: "read",
95
+ GOOGLECALENDAR_SYNC_EVENTS: "read",
96
96
  GOOGLECALENDAR_CREATE_EVENT: "write",
97
97
  GOOGLECALENDAR_UPDATE_EVENT: "write",
98
98
  GOOGLECALENDAR_DELETE_EVENT: "admin"
99
99
  },
100
100
  googledrive: {
101
- GOOGLEDRIVE_SEARCH_FILES: "read",
102
- GOOGLEDRIVE_GET_FILE: "read",
101
+ GOOGLEDRIVE_FIND_FILE: "read",
102
+ GOOGLEDRIVE_GET_ABOUT: "read",
103
+ GOOGLEDRIVE_GET_FILE_METADATA: "read",
104
+ GOOGLEDRIVE_DOWNLOAD_FILE: "read",
105
+ GOOGLEDRIVE_EXPORT_GOOGLE_WORKSPACE_FILE: "read",
106
+ GOOGLEDRIVE_GET_CHANGES_START_PAGE_TOKEN: "read",
107
+ GOOGLEDRIVE_LIST_CHANGES: "read",
103
108
  GOOGLEDRIVE_CREATE_FILE: "write",
104
109
  GOOGLEDRIVE_UPDATE_FILE: "write",
105
110
  GOOGLEDRIVE_DELETE_FILE: "admin"
@@ -174,6 +179,22 @@ function toolkitFromConnectionMetadata(connection) {
174
179
  function normalizeToolkit(toolkit) {
175
180
  return toolkit.trim().toLowerCase().replace(/[^a-z0-9_]+/g, "");
176
181
  }
182
+ function getConfiguredComposioAuthConfigs(config, toolkits) {
183
+ const requested = new Set(toolkits.map(normalizeToolkit));
184
+ return Object.values(config?.connectors?.instances ?? {}).reduce((result, record) => {
185
+ if (!record || typeof record !== "object" || Array.isArray(record)) return result;
186
+ const row = record;
187
+ const runtime = row.runtime;
188
+ const marker = row.xopcConnector;
189
+ if (!runtime || typeof runtime !== "object" || Array.isArray(runtime) || runtime.type !== "composio" || runtime.role !== "toolkit" || typeof runtime.toolkit !== "string" || !marker || typeof marker !== "object" || Array.isArray(marker)) return result;
190
+ const toolkit = normalizeToolkit(runtime.toolkit);
191
+ if (!requested.has(toolkit)) return result;
192
+ const configValue = marker.config;
193
+ const authConfigId = configValue && typeof configValue === "object" && !Array.isArray(configValue) ? configValue.authConfigId : void 0;
194
+ if (typeof authConfigId === "string" && authConfigId.trim()) result[toolkit] = authConfigId.trim();
195
+ return result;
196
+ }, {});
197
+ }
177
198
  function toolkitFromComposioSlug(slug) {
178
199
  const upper = slug.trim().toUpperCase();
179
200
  if (!upper) return void 0;
@@ -399,6 +420,9 @@ async function inspectComposioConnectorHealth(toolkit, resolver = new Credential
399
420
  };
400
421
  }
401
422
  }
423
+ async function getComposioToolkitAuthState(toolkit, resolver = new CredentialResolver()) {
424
+ return new ComposioSessionsAdapter({ resolver }).getToolkitAuthState(normalizeToolkit(toolkit));
425
+ }
402
426
  function classifyComposioHealthError(error) {
403
427
  const message = error instanceof Error ? error.message : String(error);
404
428
  if (/api key is not configured|missing.*api key/i.test(message)) return {
@@ -473,11 +497,12 @@ async function revokeComposioConnection(id, resolver = new CredentialResolver())
473
497
  await new ComposioSessionsAdapter({ resolver }).revokeConnection(connection);
474
498
  if (connection.accountId) refreshConnectorAccountCurrent(connection.accountId);
475
499
  }
476
- async function startComposioAuthorize(connectorId, toolkit, resolver = new CredentialResolver()) {
500
+ async function startComposioAuthorize(connectorId, toolkit, resolver = new CredentialResolver(), authConfigId) {
477
501
  const normalizedToolkit = normalizeToolkit(toolkit);
478
502
  const authorization = await new ComposioSessionsAdapter({ resolver }).authorize({
479
503
  principalId: LOCAL_OWNER_PRINCIPAL,
480
504
  toolkit: normalizedToolkit,
505
+ authConfigId,
481
506
  installationId: getConnectorInstallation(`${connectorId}-${LOCAL_OWNER_PRINCIPAL}`)?.id
482
507
  });
483
508
  if (!authorization.connectUrl) throw new Error("Composio authorize did not return a connect URL.");
@@ -491,7 +516,8 @@ async function listComposioTools(toolkit, config, resolver = new CredentialResol
491
516
  const normalizedToolkit = normalizeToolkit(toolkit);
492
517
  const payload = await (await new ComposioSessionsAdapter({ resolver }).createSession({
493
518
  principalId: LOCAL_OWNER_PRINCIPAL,
494
- toolkits: [normalizedToolkit]
519
+ toolkits: [normalizedToolkit],
520
+ authConfigs: getConfiguredComposioAuthConfigs(config, [normalizedToolkit])
495
521
  })).search({
496
522
  query: `List the available ${normalizedToolkit} actions and their exact input contracts.`,
497
523
  toolkits: [normalizedToolkit]
@@ -551,7 +577,8 @@ async function executeComposioTool(params, resolver = new CredentialResolver())
551
577
  const result = await new ComposioSessionsAdapter({ resolver }).executeWithPolicy({
552
578
  context: {
553
579
  principalId: LOCAL_OWNER_PRINCIPAL,
554
- toolkits: [allowed.toolkit]
580
+ toolkits: [allowed.toolkit],
581
+ authConfigs: getConfiguredComposioAuthConfigs(params.config, [allowed.toolkit])
555
582
  },
556
583
  installation,
557
584
  connection,
@@ -570,4 +597,4 @@ async function executeComposioTool(params, resolver = new CredentialResolver())
570
597
  return result.result;
571
598
  }
572
599
  //#endregion
573
- export { COMPOSIO_CONNECTORS, canUseComposioAction, configureComposioApiKey, executeComposioTool, getComposioInstallationPolicy, getComposioToolkitScope, inspectComposioConnectorHealth, isComposioActionAllowedByCatalog, listComposioConnections, listComposioTools, refreshComposioConnection, revokeComposioConnection, saveComposioApiKey, scopeForComposioAction, setComposioToolkitScope, startComposioAuthorize, toolkitFromComposioSlug, updateComposioConnection, updateComposioInstallationPolicy };
600
+ export { COMPOSIO_CONNECTORS, canUseComposioAction, configureComposioApiKey, executeComposioTool, getComposioInstallationPolicy, getComposioToolkitAuthState, getComposioToolkitScope, getConfiguredComposioAuthConfigs, inspectComposioConnectorHealth, isComposioActionAllowedByCatalog, listComposioConnections, listComposioTools, refreshComposioConnection, revokeComposioConnection, saveComposioApiKey, scopeForComposioAction, setComposioToolkitScope, startComposioAuthorize, toolkitFromComposioSlug, updateComposioConnection, updateComposioInstallationPolicy };
@@ -0,0 +1,9 @@
1
+ export type ConnectedSourceCursor = {
2
+ version: 1;
3
+ checkpoint?: string;
4
+ scanStartedAt?: string;
5
+ pageToken?: string;
6
+ syncToken?: string;
7
+ };
8
+ export declare function decodeConnectedSourceCursor(value: string | undefined): ConnectedSourceCursor | undefined;
9
+ export declare function encodeConnectedSourceCursor(cursor: Omit<ConnectedSourceCursor, 'version'>): string;
@@ -0,0 +1,30 @@
1
+ //#region src/connectors/connected-source-cursor.ts
2
+ function optionalText(value) {
3
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
4
+ }
5
+ function decodeConnectedSourceCursor(value) {
6
+ if (!value) return void 0;
7
+ try {
8
+ const parsed = JSON.parse(value);
9
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return void 0;
10
+ const row = parsed;
11
+ if (row.version !== 1) return void 0;
12
+ return {
13
+ version: 1,
14
+ ...optionalText(row.checkpoint) ? { checkpoint: optionalText(row.checkpoint) } : {},
15
+ ...optionalText(row.scanStartedAt) ? { scanStartedAt: optionalText(row.scanStartedAt) } : {},
16
+ ...optionalText(row.pageToken) ? { pageToken: optionalText(row.pageToken) } : {},
17
+ ...optionalText(row.syncToken) ? { syncToken: optionalText(row.syncToken) } : {}
18
+ };
19
+ } catch {
20
+ return;
21
+ }
22
+ }
23
+ function encodeConnectedSourceCursor(cursor) {
24
+ return JSON.stringify({
25
+ version: 1,
26
+ ...cursor
27
+ });
28
+ }
29
+ //#endregion
30
+ export { decodeConnectedSourceCursor, encodeConnectedSourceCursor };
@@ -1,51 +1,29 @@
1
1
  import { getConnectorInstallation, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
2
2
  import "../storage/sqlite/index.js";
3
3
  import { ComposioSessionsAdapter } from "./composio-sessions.js";
4
+ import { decodeConnectedSourceCursor, encodeConnectedSourceCursor } from "./connected-source-cursor.js";
4
5
  import { scopeForComposioAction } from "./composio.js";
5
6
  import { getConnectorDefinition } from "./catalog.js";
6
- import { getConnectorInstance } from "./instances.js";
7
7
  import { getWorkspacePath } from "../config/workspace-path-helpers.js";
8
+ import { getConnectorInstance } from "./instances.js";
8
9
  import { KnowledgeIngestionService } from "../knowledge/ingestion-service.js";
9
10
  import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
10
11
  import { LocalFolderKnowledgeSourceAdapter } from "../knowledge/local-folder-adapter.js";
11
12
  import "../knowledge/index.js";
12
13
  import { normalizeConnectedSourceResult } from "./connected-source-normalizers.js";
14
+ import { sanitizeConnectedSourceValue } from "./connected-source-sanitization.js";
13
15
  import { createHash } from "node:crypto";
14
16
  //#region src/connectors/connected-source-ingestion.ts
15
17
  const COMPOSIO_CONNECTED_SOURCE_TOOLKITS = new Set([
16
18
  "gmail",
17
19
  "googlecalendar",
18
20
  "googledrive",
19
- "googledocs",
20
- "googlesheets",
21
- "notion",
22
- "slack",
23
21
  "github",
24
- "linear",
25
- "jira",
26
- "outlook",
27
- "microsoft_teams",
28
- "one_drive",
29
- "excel"
22
+ "linear"
30
23
  ]);
31
- const SENSITIVE_KEY_RE = /(?:^|_)(?:api_?key|token|secret|password|passwd|authorization|credential|private_?key)(?:$|_)/i;
32
- const INLINE_SECRET_PATTERNS = [
33
- /\bsk-[A-Za-z0-9_-]{8,}\b/g,
34
- /\bghp_[A-Za-z0-9]{20,}\b/g,
35
- /\bxox[baprs]-[A-Za-z0-9-]{20,}\b/g,
36
- /-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?-----END [^-]*PRIVATE KEY-----/g
37
- ];
38
24
  function asRecord(value) {
39
25
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
40
26
  }
41
- function sanitizeSourceValue(value, depth = 0) {
42
- if (depth > 12) return "[MaxDepth]";
43
- if (typeof value === "string") return INLINE_SECRET_PATTERNS.reduce((text, pattern) => text.replace(pattern, "[REDACTED]"), value);
44
- if (Array.isArray(value)) return value.map((item) => sanitizeSourceValue(item, depth + 1));
45
- const record = asRecord(value);
46
- if (!record) return value;
47
- return Object.fromEntries(Object.entries(record).map(([key, nested]) => [key, SENSITIVE_KEY_RE.test(key) ? "[REDACTED]" : sanitizeSourceValue(nested, depth + 1)]));
48
- }
49
27
  function boundedPersonValue(value, maxLength = 320) {
50
28
  return typeof value === "string" ? value.trim().slice(0, maxLength) : "";
51
29
  }
@@ -66,7 +44,7 @@ function personEntities(record) {
66
44
  const nested = asRecord(value);
67
45
  if (!nested) return [];
68
46
  const name = boundedPersonValue(nested.name, 160) || boundedPersonValue(nested.displayName, 160);
69
- const email = boundedPersonValue(nested.email);
47
+ const email = boundedPersonValue(nested.email) || boundedPersonValue(nested.emailAddress);
70
48
  const username = boundedPersonValue(nested.username, 160);
71
49
  return name || email || username ? [{
72
50
  role,
@@ -83,6 +61,7 @@ function personEntities(record) {
83
61
  "user",
84
62
  "username",
85
63
  "owner",
64
+ "owners",
86
65
  "assignee",
87
66
  "attendees",
88
67
  "participants"
@@ -108,14 +87,26 @@ function peopleSignals(entities) {
108
87
  function connectionIdentities(identity) {
109
88
  return [...new Set(Object.values(identity).filter((value) => typeof value === "string").map((value) => value.trim().toLowerCase()).filter(Boolean))];
110
89
  }
90
+ function resultPayload(value) {
91
+ const root = asRecord(value) ?? {};
92
+ return asRecord(root.data) ?? root;
93
+ }
94
+ function paginationValue(result, ...keys) {
95
+ const payload = resultPayload(result);
96
+ const pagination = asRecord(payload.pagination) ?? asRecord(payload.pageInfo) ?? {};
97
+ for (const key of keys) {
98
+ const value = payload[key] ?? pagination[key];
99
+ if (typeof value === "string" && value.trim()) return value.trim();
100
+ }
101
+ }
111
102
  function resultToSourceItems(input) {
112
103
  return normalizeConnectedSourceResult(input).slice(0, 200).map((entity) => {
113
104
  const record = entity.value;
114
105
  const people = personEntities(record);
115
106
  const ownerIdentities = connectionIdentities(input.connectionIdentity);
116
107
  const observedIdentities = peopleSignals(people).map((value) => value.toLowerCase());
117
- const actorAttributed = entity.metadata.actorAttributed === true || input.toolkit === "gmail" || input.toolkit === "googlecalendar" || input.toolkit === "github" && observedIdentities.some((value) => ownerIdentities.includes(value));
118
- const serialized = JSON.stringify(sanitizeSourceValue(entity.value), null, 2);
108
+ const actorAttributed = entity.metadata.actorAttributed === true || input.toolkit === "gmail" || input.toolkit === "googlecalendar" || ["github", "googledrive"].includes(input.toolkit) && observedIdentities.some((value) => ownerIdentities.includes(value));
109
+ const serialized = JSON.stringify(sanitizeConnectedSourceValue(entity.value), null, 2);
119
110
  const normalizedText = serialized.length > 8e3 ? `${serialized.slice(0, 8e3)}\n…` : serialized;
120
111
  const contentHash = createHash("sha256").update(serialized).digest("hex");
121
112
  return {
@@ -144,7 +135,8 @@ function resultToSourceItems(input) {
144
135
  sensitivity: "personal",
145
136
  retentionClass: "bounded",
146
137
  synthesisPipeline: "connected_knowledge",
147
- synthesisStatus: input.streamKind === "inventory" ? "ignored" : entity.synthesisStatus
138
+ synthesisStatus: input.streamKind === "inventory" ? "ignored" : entity.synthesisStatus,
139
+ deletedAt: entity.deletedAt
148
140
  };
149
141
  });
150
142
  }
@@ -154,7 +146,10 @@ var ComposioKnowledgeSourceAdapter = class {
154
146
  this.input = input;
155
147
  }
156
148
  async pull(pull) {
157
- const execution = await this.input.adapter.executeWithPolicy({
149
+ const cursor = decodeConnectedSourceCursor(pull.cursor);
150
+ const scanStartedAt = cursor?.scanStartedAt ?? (/* @__PURE__ */ new Date()).toISOString();
151
+ const warnings = pull.cursor && !cursor ? ["Stored connected-source cursor was invalid and was replaced."] : [];
152
+ const execute = (cursorValue) => this.input.adapter.executeWithPolicy({
158
153
  context: {
159
154
  principalId: "local-owner",
160
155
  toolkits: [this.input.toolkit]
@@ -174,26 +169,52 @@ var ComposioKnowledgeSourceAdapter = class {
174
169
  curated: true,
175
170
  cachedAt: (/* @__PURE__ */ new Date()).toISOString()
176
171
  },
177
- args: this.input.buildArguments?.(pull) ?? this.input.arguments,
172
+ args: this.input.buildArguments?.({
173
+ ...pull,
174
+ cursor: cursorValue
175
+ }) ?? this.input.arguments,
178
176
  confirmed: true
179
177
  });
178
+ let execution;
179
+ try {
180
+ execution = await execute(pull.cursor);
181
+ } catch (error) {
182
+ const message = error instanceof Error ? error.message : String(error);
183
+ if (this.input.toolkit !== "googlecalendar" || !cursor?.syncToken || !/\b410\b|sync.?token/i.test(message)) throw error;
184
+ warnings.push("Expired Google Calendar sync token was replaced with a full sync.");
185
+ execution = await execute(void 0);
186
+ }
180
187
  if (execution.decision !== "allowed") throw new Error(execution.reason);
188
+ const items = resultToSourceItems({
189
+ result: execution.result,
190
+ sourceInstanceId: pull.instanceId,
191
+ collectionScope: pull.collectionScope,
192
+ streamKind: this.input.streamKind,
193
+ connectorId: this.input.connectorId,
194
+ connectionId: this.input.connection.id,
195
+ actionId: this.input.actionId,
196
+ toolkit: this.input.toolkit,
197
+ agentId: this.input.agentId,
198
+ workspaceId: this.input.workspaceId,
199
+ connectionIdentity: this.input.connection.identity
200
+ });
201
+ const nextPageToken = paginationValue(execution.result, "nextPageToken", "next_page_token");
202
+ const nextSyncToken = paginationValue(execution.result, "nextSyncToken", "next_sync_token");
203
+ const completeSnapshot = this.input.streamKind === "inventory" && (this.input.toolkit === "github" || !cursor?.checkpoint);
181
204
  return {
182
- items: resultToSourceItems({
183
- result: execution.result,
184
- sourceInstanceId: pull.instanceId,
185
- collectionScope: pull.collectionScope,
186
- streamKind: this.input.streamKind,
187
- connectorId: this.input.connectorId,
188
- connectionId: this.input.connection.id,
189
- actionId: this.input.actionId,
190
- toolkit: this.input.toolkit,
191
- agentId: this.input.agentId,
192
- workspaceId: this.input.workspaceId,
193
- connectionIdentity: this.input.connection.identity
205
+ items,
206
+ nextCursor: nextPageToken ? encodeConnectedSourceCursor({
207
+ checkpoint: cursor?.checkpoint,
208
+ scanStartedAt,
209
+ pageToken: nextPageToken,
210
+ syncToken: cursor?.syncToken
211
+ }) : encodeConnectedSourceCursor({
212
+ checkpoint: scanStartedAt,
213
+ ...nextSyncToken ? { syncToken: nextSyncToken } : {}
194
214
  }),
195
- nextCursor: (/* @__PURE__ */ new Date()).toISOString(),
196
- warnings: []
215
+ hasMore: Boolean(nextPageToken),
216
+ warnings,
217
+ ...completeSnapshot ? { snapshotExternalIds: items.map((item) => item.externalId) } : {}
197
218
  };
198
219
  }
199
220
  };
@@ -4,6 +4,7 @@ export type ConnectedSourceEntity = {
4
4
  itemType: string;
5
5
  occurredAt?: string;
6
6
  sourceUpdatedAt?: string;
7
+ deletedAt?: string;
7
8
  value: Record<string, unknown>;
8
9
  metadata: Record<string, unknown>;
9
10
  synthesisStatus: KnowledgeSynthesisStatus;