@xopcai/xopc 0.0.171 → 0.0.173

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 (228) 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-BLz30jWq.js → activity-store-ByVA0N5n.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BKZO0EFn.js → agent-avatar-dicebear-CJ5HvqE7.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents--TQ9jM_1.js +2 -0
  6. package/dist/gateway/static/root/assets/{api-N2qKY-WI.js → api-BZtCKzg4.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-CNZkpXCD.js → app-management-settings-panel-B0oNNcFn.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-Drf5a563.js → appearance-settings-DbIj4NQ1.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-BDsoZDEn.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-ChVwOXE5.js → archive-plugin-BICLQFWJ.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-BVK3Y2d9.js → attachment-load-DV3PteSU.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automation-suggestion-card-DH4N0SYR.js → automation-suggestion-card-CZUImis0.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-page-CHrNcppN.js +6 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-CeHY6VVP.js → binary-plugins-D6zkab6N.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-zCzoQI-g.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-BQoRuQzH.js +8 -0
  17. package/dist/gateway/static/root/assets/{browser-workflow-inputs-femCtfpo.js → browser-workflow-inputs-CY3X83xQ.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-workflows-page-o0GVE_aF.js → browser-workflows-page-DDRtZLuM.js} +2 -2
  19. package/dist/gateway/static/root/assets/capabilities-settings-panel-BOcU0qeM.js +7 -0
  20. package/dist/gateway/static/root/assets/{capability-presets-api-Bx-JJC0R.js → capability-presets-api-pYLW6P7g.js} +1 -1
  21. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CJ1F_hlX.js +1 -0
  22. package/dist/gateway/static/root/assets/{channel-recipient-api-CTw3ibx4.js → channel-recipient-api-DxyOH3BO.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-settings-C4vDwRil.js +1 -0
  24. package/dist/gateway/static/root/assets/channels-status-swr-B0Pgq5x2.js +1 -0
  25. package/dist/gateway/static/root/assets/connector-logo-BgANwjt-.js +1 -0
  26. package/dist/gateway/static/root/assets/connectors-page-D6JEqDEj.js +2 -0
  27. package/dist/gateway/static/root/assets/desktop-pet-BPjQbPeA.js +1 -0
  28. package/dist/gateway/static/root/assets/{desktop-pet-settings-CIeH4VyP.js → desktop-pet-settings-8CaU1Mhm.js} +1 -1
  29. package/dist/gateway/static/root/assets/{directory-picker-path-field-Ddgt6c3K.js → directory-picker-path-field-BtNRUvzM.js} +1 -1
  30. package/dist/gateway/static/root/assets/dreaming-settings-Byv-h8XZ.js +3 -0
  31. package/dist/gateway/static/root/assets/{extension-debug-page-CJGwUaQX.js → extension-debug-page-DFjTfx6f.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-B3zHKJAB.js → extension-page-NyEYtWWg.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-Cj9rrSr1.js → extension-settings-page-BynTCfgf.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-BdmtlJRP.js → gateway-config-api-BzOWImvU.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-settings-C2RwKIsl.js → gateway-settings-DXepE_Jw.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-mcMq_uu_.js → gateway-startup-retry-C2JXXtwg.js} +1 -1
  37. package/dist/gateway/static/root/assets/{goal-create-dialog-5Ryd_rx4.js → goal-create-dialog-ClOZyG52.js} +1 -1
  38. package/dist/gateway/static/root/assets/goal-detail-page-UbZB77De.js +4 -0
  39. package/dist/gateway/static/root/assets/{goals-config-api-CAO1J4jn.js → goals-config-api-CU3JR9MI.js} +1 -1
  40. package/dist/gateway/static/root/assets/goals-page-GMqV8Fwv.js +2 -0
  41. package/dist/gateway/static/root/assets/{goals-settings-Boj2izKZ.js → goals-settings-DSZguLEx.js} +1 -1
  42. package/dist/gateway/static/root/assets/{heartbeat-settings-DbPC9a_y.js → heartbeat-settings-KRkYziEF.js} +1 -1
  43. package/dist/gateway/static/root/assets/{image-generation-api-DrLCLTXn.js → image-generation-api-Y-n6TaZ_.js} +1 -1
  44. package/dist/gateway/static/root/assets/index-BCkNJ5cR.css +1 -0
  45. package/dist/gateway/static/root/assets/{index-vHb2z7VS.js → index-CAZ9343h.js} +67 -67
  46. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BrxfptgY.js → keyboard-shortcuts-settings-CwrQv952.js} +1 -1
  47. package/dist/gateway/static/root/assets/{local-app-workbench-page-BP0_Ih0e.js → local-app-workbench-page-m5HEyrHT.js} +2 -2
  48. package/dist/gateway/static/root/assets/{local-apps-page-DNCRlfFs.js → local-apps-page-DtITcS4K.js} +1 -1
  49. package/dist/gateway/static/root/assets/{locale-store-CzIfXqm8.js → locale-store-Ccv7tH8B.js} +1 -1
  50. package/dist/gateway/static/root/assets/logs-page-Bf_nk75f.js +7 -0
  51. package/dist/gateway/static/root/assets/{markdown-split-CIUH9Lor.js → markdown-split-D1oZlq1m.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-DX4AgkCs.js → media-plugins-BKz5V32t.js} +1 -1
  53. package/dist/gateway/static/root/assets/{messages-CKZuaOeG.js → messages-DWrg3c4K.js} +2 -2
  54. package/dist/gateway/static/root/assets/{notes-page-D1KprtxL.js → notes-page-DLekBQPa.js} +1 -1
  55. package/dist/gateway/static/root/assets/notes-workbench-BTDmprHM.js +4 -0
  56. package/dist/gateway/static/root/assets/{page-tabs-DjZPJGf6.js → page-tabs-pT4nLfqS.js} +1 -1
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-DNiJTpwZ.js → preview-open-alternatives-OtAiaJm2.js} +1 -1
  58. package/dist/gateway/static/root/assets/{product-open-page-CNfR17-g.js → product-open-page-CfryBKD9.js} +1 -1
  59. package/dist/gateway/static/root/assets/project-detail-page-C7kntu4H.js +1 -0
  60. package/dist/gateway/static/root/assets/projects-page-3ubcbqHr.js +1 -0
  61. package/dist/gateway/static/root/assets/remote-access-hub-DoUkN3ik.js +1 -0
  62. package/dist/gateway/static/root/assets/{save-bar-controls-BGZFVO9S.js → save-bar-controls-nP1SB3Lf.js} +1 -1
  63. package/dist/gateway/static/root/assets/{schedule-field-BAZiHtds.js → schedule-field-OEQTsUNz.js} +1 -1
  64. package/dist/gateway/static/root/assets/{schema-form-CesBcwJH.js → schema-form-DIcAa7CJ.js} +1 -1
  65. package/dist/gateway/static/root/assets/sessions-page-ElAAlZ-R.js +1 -0
  66. package/dist/gateway/static/root/assets/settings-advanced-gate-CQn_KBqr.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-form-section-Bxc54BLj.js → settings-form-section-BxNcTbYO.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CYrho7Db.js → settings-loading-skeleton-Dpdxu4sf.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-page-C03X5fkh.js → settings-page-DwPeOm1c.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-layout-CZAJbv4E.js → settings-page-layout-CqirFmMn.js} +1 -1
  71. package/dist/gateway/static/root/assets/{setup-status-panel-Jv8_bcOD.js → setup-status-panel-DX_LdcTN.js} +1 -1
  72. package/dist/gateway/static/root/assets/{share-preview-page-DSC7tKKG.js → share-preview-page-D72gYeux.js} +1 -1
  73. package/dist/gateway/static/root/assets/shares-settings-nSfe-5xK.js +1 -0
  74. package/dist/gateway/static/root/assets/skill-reload-api-1tYpZrJf.js +1 -0
  75. package/dist/gateway/static/root/assets/skills-page-BUJl8LJG.js +2 -0
  76. package/dist/gateway/static/root/assets/{system-settings-panel-BO89zw5H.js → system-settings-panel-U0tBgW46.js} +1 -1
  77. package/dist/gateway/static/root/assets/{theme-store-1OkdVC8l.js → theme-store-DCKDVPFF.js} +1 -1
  78. package/dist/gateway/static/root/assets/time-picker-BpiBF5-d.js +1 -0
  79. package/dist/gateway/static/root/assets/{typed-models-lib-D-_vct_y.js → typed-models-lib-D0XCOCAM.js} +1 -1
  80. package/dist/gateway/static/root/assets/{use-channel-catalog-VlFtjlET.js → use-channel-catalog-mq_Inao2.js} +1 -1
  81. package/dist/gateway/static/root/assets/user-context-page-BOC6Hn19.js +1 -0
  82. package/dist/gateway/static/root/assets/{voice-api-key-field-BhDk-UV_.js → voice-api-key-field-CKaDitO6.js} +1 -1
  83. package/dist/gateway/static/root/assets/work-discovery-page-DWGYp5yV.js +1 -0
  84. package/dist/gateway/static/root/assets/work-item-detail-page-CpeWcpSp.js +1 -0
  85. package/dist/gateway/static/root/assets/work-page-MsEKzmSt.js +1 -0
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-uVw4Yoej.js → workflow-run-setup-panel-s_kS_FYA.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-ByhHaUHB.js +11 -0
  88. package/dist/gateway/static/root/index.html +7 -7
  89. package/dist/package.js +1 -1
  90. package/dist/src/agent/agent-manager.d.ts +3 -1
  91. package/dist/src/agent/agent-manager.js +4 -3
  92. package/dist/src/agent/capabilities/definitions.d.ts +2 -1
  93. package/dist/src/agent/capabilities/definitions.js +3 -1
  94. package/dist/src/agent/memory/builtin-provider.js +4 -4
  95. package/dist/src/agent/memory/manager.d.ts +4 -1
  96. package/dist/src/agent/memory/manager.js +8 -3
  97. package/dist/src/agent/memory/understanding/service.d.ts +2 -0
  98. package/dist/src/agent/memory/understanding/service.js +11 -9
  99. package/dist/src/agent/prompt/sections/tooling.js +4 -0
  100. package/dist/src/agent/service.d.ts +3 -1
  101. package/dist/src/agent/service.js +29 -0
  102. package/dist/src/agent/skills/hub-pull.js +1 -1
  103. package/dist/src/agent/skills/index.js +1 -1
  104. package/dist/src/agent/skills/install-target.js +1 -1
  105. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.d.ts +64 -0
  106. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +27 -18
  107. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +1 -1
  108. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +1 -1
  109. package/dist/src/agent/skills/marketplace/search.d.ts +46 -0
  110. package/dist/src/agent/skills/marketplace/search.js +193 -0
  111. package/dist/src/agent/skills/skill-tool-gating.js +2 -1
  112. package/dist/src/agent/tools/delegate-tool.js +2 -0
  113. package/dist/src/agent/tools/factory.d.ts +4 -2
  114. package/dist/src/agent/tools/factory.js +11 -5
  115. package/dist/src/agent/tools/index.d.ts +2 -1
  116. package/dist/src/agent/tools/index.js +2 -1
  117. package/dist/src/agent/tools/skill-install-tool.d.ts +17 -0
  118. package/dist/src/agent/tools/skill-install-tool.js +76 -8
  119. package/dist/src/agent/tools/skills-marketplace-search-tool.d.ts +17 -0
  120. package/dist/src/agent/tools/skills-marketplace-search-tool.js +77 -0
  121. package/dist/src/automations/domain/validation.d.ts +8 -8
  122. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
  123. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  124. package/dist/src/capabilities/store-connector.js +1 -1
  125. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  126. package/dist/src/config/agent-profile.js +1 -1
  127. package/dist/src/connectors/composio-sessions.d.ts +1 -0
  128. package/dist/src/connectors/composio-sessions.js +14 -5
  129. package/dist/src/connectors/composio-triggers.d.ts +1 -1
  130. package/dist/src/connectors/composio-triggers.js +4 -3
  131. package/dist/src/connectors/composio.js +1 -0
  132. package/dist/src/connectors/{connector-memory-sync.d.ts → connected-source-ingestion.d.ts} +11 -4
  133. package/dist/src/connectors/{connector-memory-sync.js → connected-source-ingestion.js} +49 -101
  134. package/dist/src/connectors/connected-source-normalizers.d.ts +15 -0
  135. package/dist/src/connectors/connected-source-normalizers.js +186 -0
  136. package/dist/src/connectors/connector-identity.d.ts +2 -0
  137. package/dist/src/connectors/connector-identity.js +29 -0
  138. package/dist/src/connectors/learning-coordinator.d.ts +25 -0
  139. package/dist/src/connectors/learning-coordinator.js +214 -0
  140. package/dist/src/connectors/learning-recipes.d.ts +22 -0
  141. package/dist/src/connectors/learning-recipes.js +121 -0
  142. package/dist/src/connectors/runtime-status.d.ts +1 -8
  143. package/dist/src/connectors/runtime-status.js +4 -29
  144. package/dist/src/extensions/api.js +1 -1
  145. package/dist/src/extensions/install.js +1 -1
  146. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  147. package/dist/src/gateway/agent-builtin-tools.js +2 -0
  148. package/dist/src/gateway/agents-admin.js +1 -1
  149. package/dist/src/gateway/heartbeat/service.js +1 -1
  150. package/dist/src/gateway/hono/routes/commands-skills.js +2 -2
  151. package/dist/src/gateway/hono/routes/connectors.js +76 -118
  152. package/dist/src/gateway/hono/routes/local-apps.js +1 -1
  153. package/dist/src/gateway/hono/routes/models.js +24 -0
  154. package/dist/src/gateway/hono/routes/public-gateway.js +3 -2
  155. package/dist/src/gateway/hono/routes/you.js +86 -5
  156. package/dist/src/gateway/service/marketplace-service.js +1 -1
  157. package/dist/src/gateway/service.d.ts +5 -2
  158. package/dist/src/gateway/service.js +18 -13
  159. package/dist/src/heartbeat/index.js +1 -1
  160. package/dist/src/knowledge/connected-understanding-pipeline.d.ts +19 -0
  161. package/dist/src/knowledge/connected-understanding-pipeline.js +268 -0
  162. package/dist/src/knowledge/index.d.ts +1 -0
  163. package/dist/src/knowledge/index.js +2 -1
  164. package/dist/src/knowledge/ingestion-service.d.ts +6 -4
  165. package/dist/src/knowledge/ingestion-service.js +13 -10
  166. package/dist/src/knowledge/local-folder-adapter.js +1 -0
  167. package/dist/src/knowledge/people-graph.js +43 -110
  168. package/dist/src/knowledge/types.d.ts +3 -0
  169. package/dist/src/mcp/channel-bridge.js +1 -1
  170. package/dist/src/providers/xopc-cloud-account-service.d.ts +40 -0
  171. package/dist/src/providers/xopc-cloud-account-service.js +65 -0
  172. package/dist/src/storage/sqlite/connector-learning-repository.d.ts +47 -0
  173. package/dist/src/storage/sqlite/connector-learning-repository.js +110 -0
  174. package/dist/src/storage/sqlite/index.d.ts +3 -1
  175. package/dist/src/storage/sqlite/index.js +4 -2
  176. package/dist/src/storage/sqlite/knowledge-repository.d.ts +4 -2
  177. package/dist/src/storage/sqlite/knowledge-repository.js +24 -13
  178. package/dist/src/storage/sqlite/migrations/062_connector_learning_jobs.sql +27 -0
  179. package/dist/src/storage/sqlite/migrations/063_knowledge_collection_scopes.sql +14 -0
  180. package/dist/src/storage/sqlite/migrations/064_user_claims.sql +60 -0
  181. package/dist/src/storage/sqlite/migrations/065_knowledge_item_scope_identity.sql +116 -0
  182. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  183. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  184. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  185. package/dist/src/storage/sqlite/schema.js +1 -1
  186. package/dist/src/storage/sqlite/user-claims-repository.d.ts +101 -0
  187. package/dist/src/storage/sqlite/user-claims-repository.js +241 -0
  188. package/dist/src/user-context/projection.d.ts +36 -1
  189. package/dist/src/user-context/projection.js +84 -6
  190. package/dist/src/work-discovery/service.js +1 -0
  191. package/package.json +1 -1
  192. package/skills/tools/find-skills/SKILL.md +18 -428
  193. package/dist/gateway/static/root/assets/agents-ZCIC8mhO.js +0 -2
  194. package/dist/gateway/static/root/assets/apps-page-DJmgBaAm.js +0 -1
  195. package/dist/gateway/static/root/assets/automations-page-Ddot8-Md.js +0 -6
  196. package/dist/gateway/static/root/assets/block-editor-D3GIllO3.js +0 -184
  197. package/dist/gateway/static/root/assets/browser-settings-page-DvETvRcg.js +0 -8
  198. package/dist/gateway/static/root/assets/capabilities-settings-panel-ChXIYbys.js +0 -7
  199. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CUekXsJy.js +0 -1
  200. package/dist/gateway/static/root/assets/channels-settings-CkhveNsQ.js +0 -1
  201. package/dist/gateway/static/root/assets/channels-status-swr-DRTb8DBk.js +0 -1
  202. package/dist/gateway/static/root/assets/connector-logo-CQznQcd4.js +0 -1
  203. package/dist/gateway/static/root/assets/connectors-page-DkSGIxWP.js +0 -2
  204. package/dist/gateway/static/root/assets/desktop-pet-BtP-xUQ9.js +0 -1
  205. package/dist/gateway/static/root/assets/dreaming-settings-gd9W6SLj.js +0 -3
  206. package/dist/gateway/static/root/assets/goal-detail-page-DizZ6Cpl.js +0 -4
  207. package/dist/gateway/static/root/assets/goals-page-Dqry_hi2.js +0 -2
  208. package/dist/gateway/static/root/assets/index-DEdyUjxM.css +0 -1
  209. package/dist/gateway/static/root/assets/logs-page-mT48mcF4.js +0 -7
  210. package/dist/gateway/static/root/assets/notes-workbench-wgt2Osyk.js +0 -4
  211. package/dist/gateway/static/root/assets/project-detail-page-CDjHvxJm.js +0 -1
  212. package/dist/gateway/static/root/assets/projects-page-kJZwQXfC.js +0 -1
  213. package/dist/gateway/static/root/assets/remote-access-hub-MJdI9ek_.js +0 -1
  214. package/dist/gateway/static/root/assets/sessions-page-BqC7GDC_.js +0 -1
  215. package/dist/gateway/static/root/assets/settings-advanced-gate-CYwz8MfF.js +0 -1
  216. package/dist/gateway/static/root/assets/shares-settings-h8tGDkA3.js +0 -1
  217. package/dist/gateway/static/root/assets/skill-reload-api-D2DGvRUn.js +0 -1
  218. package/dist/gateway/static/root/assets/skills-page-vqhjSMhZ.js +0 -2
  219. package/dist/gateway/static/root/assets/time-picker-mtD64kFB.js +0 -1
  220. package/dist/gateway/static/root/assets/user-context-page-BgF0WxjM.js +0 -1
  221. package/dist/gateway/static/root/assets/work-discovery-page-CP0Daig-.js +0 -1
  222. package/dist/gateway/static/root/assets/work-item-detail-page-NEWZPKB_.js +0 -1
  223. package/dist/gateway/static/root/assets/work-page-BkWntcQh.js +0 -1
  224. package/dist/gateway/static/root/assets/workflows-page-DRvhNQGe.js +0 -11
  225. package/dist/src/connectors/memory-sync-coordinator.d.ts +0 -28
  226. package/dist/src/connectors/memory-sync-coordinator.js +0 -162
  227. package/dist/src/connectors/memory-sync-profile.d.ts +0 -13
  228. package/dist/src/connectors/memory-sync-profile.js +0 -73
@@ -1,3 +1,4 @@
1
+ import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
1
2
  import { decideConnectorApproval, getConnectorApproval, listConnectorApprovals, listConnectorConnections } from "../../../storage/sqlite/connector-repository.js";
2
3
  import "../../../storage/sqlite/index.js";
3
4
  import { init_agent_scope, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
@@ -15,11 +16,10 @@ import { composioLogoResponse } from "../../../connectors/composio-logo.js";
15
16
  import { appendComposioTriggerEvent, listComposioTriggerEvents } from "../../../connectors/composio-triggers.js";
16
17
  import { buildConnectedPeopleGraph } from "../../../knowledge/people-graph.js";
17
18
  import "../../../knowledge/index.js";
18
- import { syncComposioResultToMemory, syncLocalFolderToMemory } from "../../../connectors/connector-memory-sync.js";
19
+ import { ingestLocalFolderSource } from "../../../connectors/connected-source-ingestion.js";
19
20
  import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
20
21
  import { setConnectorEnabled } from "../../../connectors/lifecycle.js";
21
- import { getComposioMemorySyncProfile, updateComposioMemorySyncProfile } from "../../../connectors/memory-sync-profile.js";
22
- import { projectComposioRuntimeStatus } from "../../../connectors/runtime-status.js";
22
+ import { projectComposioConnectionStatus } from "../../../connectors/runtime-status.js";
23
23
  //#region src/gateway/hono/routes/connectors.ts
24
24
  init_agent_scope();
25
25
  function errorMessage(error) {
@@ -39,45 +39,13 @@ function registerConnectorRoutes(authenticated, deps) {
39
39
  }
40
40
  });
41
41
  });
42
- authenticated.get("/api/connectors/installed", async (c) => {
42
+ authenticated.get("/api/connectors/installed", (c) => {
43
43
  const config = service.currentConfig;
44
44
  const instances = listConnectorInstances(config);
45
- const composioInstances = instances.filter((instance) => instance.materialized.type === "composio" && instance.materialized.role === "toolkit");
46
- if (composioInstances.length === 0) return c.json({
47
- ok: true,
48
- payload: { instances }
49
- });
50
- const checkedAt = (/* @__PURE__ */ new Date()).toISOString();
51
- let connectionError;
52
- try {
53
- await listComposioConnections();
54
- } catch (error) {
55
- connectionError = errorMessage(error);
56
- }
57
- const probes = await Promise.all([...new Map(composioInstances.map((instance) => [instance.connectorId, instance])).values()].map(async (instance) => {
58
- try {
59
- const tools = await listComposioTools(instance.materialized.type === "composio" ? instance.materialized.toolkit : "", config);
60
- return {
61
- connectorId: instance.connectorId,
62
- checkedAt,
63
- toolCount: tools.length,
64
- ...connectionError ? {
65
- error: connectionError,
66
- connectionError: true
67
- } : {}
68
- };
69
- } catch (error) {
70
- return {
71
- connectorId: instance.connectorId,
72
- checkedAt,
73
- error: errorMessage(error)
74
- };
75
- }
76
- }));
77
45
  const connections = listConnectorConnections({ principalId: "local-owner" });
78
46
  return c.json({
79
47
  ok: true,
80
- payload: { instances: projectComposioRuntimeStatus(instances, connections, probes) }
48
+ payload: { instances: projectComposioConnectionStatus(instances, connections) }
81
49
  });
82
50
  });
83
51
  authenticated.post("/api/connectors/setup/request-secret", strictRateLimitMiddleware, async (c) => {
@@ -118,6 +86,54 @@ function registerConnectorRoutes(authenticated, deps) {
118
86
  }, 400);
119
87
  }
120
88
  });
89
+ authenticated.get("/api/connectors/learning", (c) => {
90
+ return c.json({
91
+ ok: true,
92
+ payload: { jobs: listConnectorLearningJobs({ limit: 100 }) }
93
+ });
94
+ });
95
+ authenticated.post("/api/connectors/composio/connections/:id/learning", strictRateLimitMiddleware, async (c) => {
96
+ try {
97
+ await listComposioConnections();
98
+ const config = service.currentConfig;
99
+ if (!config.userContext.memory.sources.includes("connectedSources")) {
100
+ config.userContext.memory.sources = [...config.userContext.memory.sources, "connectedSources"];
101
+ const saved = await service.saveConfig(config);
102
+ if (!saved.saved) return c.json({
103
+ ok: false,
104
+ error: saved.error
105
+ }, 500);
106
+ }
107
+ const job = service.requestConnectorLearning(c.req.param("id"), { reason: "manual" });
108
+ if (!job) return c.json({
109
+ ok: false,
110
+ error: "The connection is not active or does not support learning."
111
+ }, 409);
112
+ return c.json({
113
+ ok: true,
114
+ payload: { job }
115
+ }, 202);
116
+ } catch (error) {
117
+ return c.json({
118
+ ok: false,
119
+ error: errorMessage(error)
120
+ }, 400);
121
+ }
122
+ });
123
+ authenticated.post("/api/connectors/composio/connections/:id/learning/pause", strictRateLimitMiddleware, (c) => {
124
+ const changed = service.setConnectorLearningPaused(c.req.param("id"), true);
125
+ return c.json({
126
+ ok: true,
127
+ payload: { changed }
128
+ });
129
+ });
130
+ authenticated.post("/api/connectors/composio/connections/:id/learning/resume", strictRateLimitMiddleware, (c) => {
131
+ const changed = service.setConnectorLearningPaused(c.req.param("id"), false);
132
+ return c.json({
133
+ ok: true,
134
+ payload: { changed }
135
+ });
136
+ });
121
137
  authenticated.patch("/api/connectors/composio/connections/:id", strictRateLimitMiddleware, async (c) => {
122
138
  const body = await c.req.json().catch(() => ({}));
123
139
  const row = body && typeof body === "object" && !Array.isArray(body) ? body : {};
@@ -153,7 +169,9 @@ function registerConnectorRoutes(authenticated, deps) {
153
169
  });
154
170
  authenticated.delete("/api/connectors/composio/connections/:id", strictRateLimitMiddleware, async (c) => {
155
171
  try {
156
- await revokeComposioConnection(c.req.param("id"));
172
+ const connectionId = c.req.param("id");
173
+ await revokeComposioConnection(connectionId);
174
+ service.setConnectorLearningPaused(connectionId, true);
157
175
  return c.json({
158
176
  ok: true,
159
177
  payload: { revoked: true }
@@ -275,7 +293,7 @@ function registerConnectorRoutes(authenticated, deps) {
275
293
  const body = await c.req.json().catch(() => ({}));
276
294
  try {
277
295
  const event = await appendComposioTriggerEvent(service.currentConfig, body);
278
- service.requestConnectorMemorySync(event.toolkit);
296
+ if (event.toolkit) service.requestConnectorLearningForToolkit(event.toolkit);
279
297
  return c.json({
280
298
  ok: true,
281
299
  payload: { event }
@@ -313,43 +331,6 @@ function registerConnectorRoutes(authenticated, deps) {
313
331
  })
314
332
  });
315
333
  });
316
- authenticated.get("/api/connectors/:id/memory-sync-profile", (c) => {
317
- const profile = getComposioMemorySyncProfile(service.currentConfig, c.req.param("id"));
318
- return c.json({
319
- ok: true,
320
- payload: { profile: profile ?? null }
321
- });
322
- });
323
- authenticated.patch("/api/connectors/:id/memory-sync-profile", strictRateLimitMiddleware, async (c) => {
324
- const body = await c.req.json().catch(() => ({}));
325
- const row = body && typeof body === "object" && !Array.isArray(body) ? body : {};
326
- try {
327
- const config = service.currentConfig;
328
- const profile = updateComposioMemorySyncProfile(config, c.req.param("id"), {
329
- enabled: row.enabled === true,
330
- actionId: typeof row.actionId === "string" ? row.actionId : "",
331
- arguments: row.arguments && typeof row.arguments === "object" && !Array.isArray(row.arguments) ? row.arguments : {},
332
- agentId: typeof row.agentId === "string" ? row.agentId : "",
333
- connectionId: typeof row.connectionId === "string" ? row.connectionId : void 0,
334
- intervalMinutes: Number(row.intervalMinutes),
335
- triggerSync: row.triggerSync !== false
336
- });
337
- const saved = await service.saveConfig(config);
338
- if (!saved.saved) return c.json({
339
- ok: false,
340
- error: saved.error
341
- }, 500);
342
- return c.json({
343
- ok: true,
344
- payload: { profile }
345
- });
346
- } catch (error) {
347
- return c.json({
348
- ok: false,
349
- error: errorMessage(error)
350
- }, 400);
351
- }
352
- });
353
334
  authenticated.get("/api/connectors/:id", (c) => {
354
335
  const connectorId = c.req.param("id");
355
336
  const connector = getConnectorDefinition(connectorId);
@@ -395,48 +376,6 @@ function registerConnectorRoutes(authenticated, deps) {
395
376
  payload: { health }
396
377
  });
397
378
  });
398
- authenticated.post("/api/connectors/:id/memory-sync", strictRateLimitMiddleware, async (c) => {
399
- const body = await c.req.json().catch(() => ({}));
400
- const row = body && typeof body === "object" && !Array.isArray(body) ? body : {};
401
- const actionId = typeof row.actionId === "string" ? row.actionId.trim() : "";
402
- const config = service.currentConfig;
403
- const agentId = typeof row.agentId === "string" && row.agentId.trim() ? row.agentId.trim() : resolveDefaultAgentId(config);
404
- try {
405
- const connectorId = c.req.param("id");
406
- if (getConnectorDefinition(connectorId)?.runtime.type === "memorySource") {
407
- const result = await syncLocalFolderToMemory({
408
- config,
409
- connectorId,
410
- agentId
411
- });
412
- return c.json({
413
- ok: true,
414
- payload: result
415
- });
416
- }
417
- if (!actionId) return c.json({
418
- ok: false,
419
- error: "actionId is required for Composio memory sync."
420
- }, 400);
421
- const result = await syncComposioResultToMemory({
422
- config,
423
- connectorId,
424
- actionId,
425
- agentId,
426
- connectionId: typeof row.connectionId === "string" ? row.connectionId : void 0,
427
- arguments: row.arguments && typeof row.arguments === "object" && !Array.isArray(row.arguments) ? row.arguments : {}
428
- });
429
- return c.json({
430
- ok: true,
431
- payload: result
432
- });
433
- } catch (error) {
434
- return c.json({
435
- ok: false,
436
- error: errorMessage(error)
437
- }, 400);
438
- }
439
- });
440
379
  authenticated.get("/api/connectors/composio/:toolkit/policy", (c) => {
441
380
  const config = service.currentConfig;
442
381
  try {
@@ -632,6 +571,25 @@ function registerConnectorRoutes(authenticated, deps) {
632
571
  }, 500);
633
572
  }
634
573
  });
574
+ authenticated.post("/api/connectors/:id/source-sync", strictRateLimitMiddleware, async (c) => {
575
+ const config = service.currentConfig;
576
+ try {
577
+ const result = await ingestLocalFolderSource({
578
+ config,
579
+ connectorId: c.req.param("id"),
580
+ agentId: resolveDefaultAgentId(config)
581
+ });
582
+ return c.json({
583
+ ok: true,
584
+ payload: result
585
+ });
586
+ } catch (error) {
587
+ return c.json({
588
+ ok: false,
589
+ error: errorMessage(error)
590
+ }, 400);
591
+ }
592
+ });
635
593
  authenticated.post("/api/connectors/:id/config", strictRateLimitMiddleware, async (c) => {
636
594
  const instanceId = c.req.param("id");
637
595
  const body = await c.req.json().catch(() => ({}));
@@ -1,6 +1,6 @@
1
1
  import { readLocalAppAcceptanceConfig } from "../../../local-apps/acceptance.js";
2
- import { extensionAssetMimeType } from "../lib/extension-assets.js";
3
2
  import { LOCAL_APP_RUNTIME_BRIDGE_HASH, injectLocalAppRuntimeBridge } from "../../../local-apps/preview-runtime-bridge.js";
3
+ import { extensionAssetMimeType } from "../lib/extension-assets.js";
4
4
  import { relative, resolve } from "node:path";
5
5
  import { existsSync, readFileSync, statSync } from "node:fs";
6
6
  //#region src/gateway/hono/routes/local-apps.ts
@@ -16,6 +16,7 @@ import { getAgentImageGenerationConfig, getImageGenerationCatalog, prepareImageG
16
16
  import { discoverProviderModels, isProviderApiDiscoverable } from "../../../providers/model-discovery.js";
17
17
  import { respondStartupUnavailable } from "../lib/startup-unavailable.js";
18
18
  import { auditModelReferences } from "../../../providers/model-reference-auditor.js";
19
+ import { XopcCloudAccountError, XopcCloudAccountService } from "../../../providers/xopc-cloud-account-service.js";
19
20
  //#region src/gateway/hono/routes/models.ts
20
21
  init_models_json();
21
22
  init_resolve_config_value();
@@ -66,6 +67,7 @@ function mapPluginModel(providerId, model, available) {
66
67
  function registerModelsRoutes(authenticated, deps) {
67
68
  const { service, strictRateLimitMiddleware } = deps;
68
69
  const catalogSync = service.getModelCatalogSync();
70
+ const xopcCloudAccount = new XopcCloudAccountService();
69
71
  authenticated.get("/api/models/catalog/status", (c) => c.json({
70
72
  ok: true,
71
73
  payload: catalogSync.getStatus()
@@ -90,6 +92,28 @@ function registerModelsRoutes(authenticated, deps) {
90
92
  payload: result
91
93
  });
92
94
  });
95
+ authenticated.get("/api/models/xopc-cloud/account-summary", async (c) => {
96
+ try {
97
+ const summary = await xopcCloudAccount.getSummary();
98
+ if (!summary) return c.json({
99
+ ok: false,
100
+ error: { message: "XOPC Cloud is not configured" }
101
+ }, 404);
102
+ return c.json({
103
+ ok: true,
104
+ payload: summary
105
+ });
106
+ } catch (error) {
107
+ const message = error instanceof Error ? error.message : String(error);
108
+ return c.json({
109
+ ok: false,
110
+ error: {
111
+ message,
112
+ ...error instanceof XopcCloudAccountError && error.code ? { code: error.code } : {}
113
+ }
114
+ }, 502);
115
+ }
116
+ });
93
117
  authenticated.get("/api/models-json", async (c) => {
94
118
  const path = resolveModelsJsonPath();
95
119
  const { config, error } = loadModelsJson(path);
@@ -68,9 +68,10 @@ function registerPublicGatewayRoutes(app, service) {
68
68
  data: payload
69
69
  };
70
70
  const normalized = normalizeComposioTriggerPayload(archivedPayload, webhookId);
71
- applyComposioConnectionLifecycleEvent(archivedPayload);
71
+ const inactiveConnectionId = applyComposioConnectionLifecycleEvent(archivedPayload);
72
+ if (inactiveConnectionId) service.setConnectorLearningPaused(inactiveConnectionId, true);
72
73
  const event = await appendComposioTriggerEvent(service.currentConfig, archivedPayload);
73
- service.requestConnectorMemorySync(normalized.toolkit);
74
+ if (normalized.toolkit) service.requestConnectorLearningForToolkit(normalized.toolkit);
74
75
  const runs = await service.automationServiceInstance.triggerEvent({
75
76
  type: `connector.${normalized.trigger ?? normalized.type}`,
76
77
  source: normalized.toolkit ? `composio:${normalized.toolkit}` : "composio",
@@ -1,4 +1,6 @@
1
1
  import { runSqliteWriteTransaction } from "../../../storage/sqlite/transaction.js";
2
+ import { getUserClaim, linkUserClaimMemoryRecord, listUserClaimEvidence, listUserClaimStatsBySource, listUserClaims, removeUserClaimEvidenceForSource, setUserClaimDecision } from "../../../storage/sqlite/user-claims-repository.js";
3
+ import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
2
4
  import { getRelationshipSettings, updateRelationshipSettings } from "../../../storage/sqlite/relationship-settings-repository.js";
3
5
  import { deleteMemoryRecord, getMemoryRecord, listMemoryRecords, upsertMemoryRecord } from "../../../storage/sqlite/memory-records-repository.js";
4
6
  import { listKnowledgeSourceItems, listKnowledgeSyncRuns } from "../../../storage/sqlite/knowledge-repository.js";
@@ -19,6 +21,7 @@ import { nextMemoryReviewAt, resolveMemoryStability } from "../../../agent/memor
19
21
  import { PERSONAL_PLAYBOOK_DISABLED_TAG, PERSONAL_PLAYBOOK_ORDER_PREFIX, PERSONAL_PLAYBOOK_RULE_TAG, patchPersonalPlaybookContextTags, personalPlaybookContext } from "../../../user-context/personal-playbook.js";
20
22
  import { listConnectorInstances } from "../../../connectors/instances.js";
21
23
  import { uninstallConnector } from "../../../connectors/install.js";
24
+ import { renderUserClaim } from "../../../knowledge/connected-understanding-pipeline.js";
22
25
  import { readUserProfileFile, writeUserProfileFile } from "../../agents-admin.js";
23
26
  import { isUserContextMemoryKind, isUserContextRecord, projectPersonalContextSources, projectUserContextRecord, recordsDerivedFromPersonalContextSource } from "../../../user-context/projection.js";
24
27
  import { prepareUserContextImport } from "../../../user-context/import.js";
@@ -321,10 +324,12 @@ function registerYouRoutes(authenticated, deps) {
321
324
  const trustPolicy = getUserTrustPolicy();
322
325
  const sourceDefinitions = listConnectorCatalog();
323
326
  const sourceInstances = listConnectorInstances(config);
324
- const sources = projectPersonalContextSources(sourceDefinitions, sourceInstances, allUserContextRecords, {
327
+ const sources = projectPersonalContextSources(sourceDefinitions, sourceInstances, {
325
328
  sourceItems: listKnowledgeSourceItems({ limit: 500 }),
326
329
  syncRuns: listKnowledgeSyncRuns({ limit: 500 }),
327
- connections: listConnectorConnections({ principalId: "local-owner" })
330
+ connections: listConnectorConnections({ principalId: "local-owner" }),
331
+ learningJobs: listConnectorLearningJobs({ limit: 500 }),
332
+ claimStatsBySource: listUserClaimStatsBySource()
328
333
  });
329
334
  const activeGoals = new GoalService().list({
330
335
  agentId,
@@ -344,6 +349,13 @@ function registerYouRoutes(authenticated, deps) {
344
349
  },
345
350
  ...profileBundle,
346
351
  understanding: records.map(projectUserContextRecord),
352
+ connectedClaims: listUserClaims({
353
+ agentId,
354
+ limit: 100
355
+ }).map((claim) => ({
356
+ ...claim,
357
+ evidence: listUserClaimEvidence(claim.id)
358
+ })),
347
359
  consentRequests: consents.filter((consent) => consent.status === "pending").flatMap((consent) => {
348
360
  const record = recordById.get(consent.recordId);
349
361
  return record ? [projectReferenceConsent(consent, record)] : [];
@@ -404,6 +416,64 @@ function registerYouRoutes(authenticated, deps) {
404
416
  relationship: updateRelationshipSettings(patch)
405
417
  });
406
418
  });
419
+ authenticated.patch("/api/you/claims/:id", deps.strictRateLimitMiddleware, async (c) => {
420
+ const body = await c.req.json().catch(() => ({}));
421
+ const action = body.action === "confirm" || body.action === "reject" ? body.action : void 0;
422
+ if (!action) return c.json({ error: "Action must be confirm or reject" }, 400);
423
+ const claim = runSqliteWriteTransaction(() => {
424
+ const updated = setUserClaimDecision(c.req.param("id"), action === "confirm" ? "confirmed" : "rejected");
425
+ if (!updated) return updated;
426
+ const existing = updated.memoryRecordId ? getMemoryRecord(updated.memoryRecordId) : void 0;
427
+ if (existing) preserveRecord(existing, {
428
+ status: action === "confirm" ? "active" : "rejected",
429
+ ...action === "confirm" ? { reviewAfter: nextMemoryReviewAt(existing) } : {}
430
+ });
431
+ else if (action === "confirm") {
432
+ const candidate = renderUserClaim(updated);
433
+ const evidence = listUserClaimEvidence(updated.id);
434
+ const record = upsertMemoryRecord({
435
+ providerId: "connected-understanding",
436
+ kind: candidate.kind,
437
+ sourceAgentId: updated.agentId,
438
+ content: candidate.content,
439
+ canonicalKey: candidate.canonicalKey,
440
+ source: { provider: "connected-sources" },
441
+ confidence: 1,
442
+ status: "active",
443
+ sensitivity: candidate.sensitivity,
444
+ explicitness: "explicit",
445
+ durability: candidate.durability,
446
+ importance: candidate.importance,
447
+ disclosurePolicy: candidate.disclosurePolicy,
448
+ tags: [...new Set([
449
+ "user-understanding",
450
+ ...candidate.tags ?? [],
451
+ "user-confirmed"
452
+ ])],
453
+ evidence: evidence.map((item) => ({
454
+ sourceItemId: item.sourceItemId,
455
+ relation: item.relation === "contradicts" ? "contradicts" : "supports",
456
+ observedAt: item.observedAt,
457
+ confidence: updated.confidence
458
+ })),
459
+ reviewAfter: nextMemoryReviewAt({
460
+ durability: candidate.durability,
461
+ explicitness: "explicit"
462
+ })
463
+ });
464
+ linkUserClaimMemoryRecord(updated.id, record.id);
465
+ }
466
+ return getUserClaim(updated.id);
467
+ });
468
+ if (!claim) return c.json({ error: "Connected claim not found" }, 404);
469
+ return c.json({
470
+ ok: true,
471
+ claim: {
472
+ ...claim,
473
+ evidence: listUserClaimEvidence(claim.id)
474
+ }
475
+ });
476
+ });
407
477
  authenticated.get("/api/you/profile", async (c) => {
408
478
  return c.json(await readProfileBundle(deps.service.currentConfig));
409
479
  });
@@ -889,17 +959,28 @@ function registerYouRoutes(authenticated, deps) {
889
959
  return c.json({ error: error instanceof Error ? error.message : String(error) }, 400);
890
960
  }
891
961
  let deletedUnderstandingCount = 0;
962
+ let deletedClaimCount = 0;
892
963
  if (body.deleteDerivedUnderstanding) {
893
964
  const sourceInstanceId = connection ? `composio:${connection.connectorId}:${connection.id}` : instanceId;
894
965
  const targets = recordsDerivedFromPersonalContextSource(listAllUserContextRecords(ALL_MEMORY_STATUSES), sourceInstanceId);
895
966
  runSqliteWriteTransaction(() => {
896
- for (const record of targets) deleteMemoryRecord(record.id);
967
+ const claimRemoval = removeUserClaimEvidenceForSource(sourceInstanceId);
968
+ deletedClaimCount = claimRemoval.deletedClaimCount;
969
+ const retainedMemoryIds = new Set(claimRemoval.retainedClaims.map((claim) => claim.memoryRecordId));
970
+ const deleteIds = new Set([...claimRemoval.deletedMemoryRecordIds, ...targets.filter((record) => !retainedMemoryIds.has(record.id)).map((record) => record.id)]);
971
+ for (const recordId of deleteIds) deleteMemoryRecord(recordId);
972
+ for (const retained of claimRemoval.retainedClaims) {
973
+ if (retained.state === "active") continue;
974
+ const record = getMemoryRecord(retained.memoryRecordId);
975
+ if (record) preserveRecord(record, { status: retained.state === "rejected" ? "rejected" : "stale" });
976
+ }
977
+ deletedUnderstandingCount = deleteIds.size;
897
978
  });
898
- deletedUnderstandingCount = targets.length;
899
979
  }
900
980
  return c.json({
901
981
  ok: true,
902
- deletedUnderstandingCount
982
+ deletedUnderstandingCount,
983
+ deletedClaimCount
903
984
  });
904
985
  });
905
986
  authenticated.patch("/api/you/understanding/:id", deps.strictRateLimitMiddleware, async (c) => {
@@ -4,9 +4,9 @@ import { init_logger } from "../../utils/logger.js";
4
4
  import { init_paths, resolveExtensionsDir } from "../../config/paths.js";
5
5
  import { createSkillConfigManager } from "../../agent/skills/config.js";
6
6
  import { resolveWorkspaceSkillsDir, resolveWorkspaceSkillsLockPath } from "../../agent/skills/workspace-skills-dir.js";
7
- import { normalizeSkillInstallTarget } from "../../agent/skills/install-target.js";
8
7
  import { removeSkillsLockEntry } from "../../agent/skills/hub-lock.js";
9
8
  import { deleteManagedSkill, installSkillFromZip, listManagedSkillDirs } from "../../agent/skills/managed-store.js";
9
+ import { normalizeSkillInstallTarget } from "../../agent/skills/install-target.js";
10
10
  import { getExtensionLockfileManager } from "../../extensions/lockfile.js";
11
11
  import { existsSync, rmSync } from "node:fs";
12
12
  //#region src/gateway/service/marketplace-service.ts
@@ -18,6 +18,7 @@ import { GatewayMarketplaceService } from './service/marketplace-service.js';
18
18
  import { GatewayAgentRunner } from './service/agent-runner.js';
19
19
  import type { GatewayServiceConfig, ServiceEvent } from './service/types.js';
20
20
  import { type GatewayReadinessSnapshot } from './startup-readiness.js';
21
+ import { type ConnectorLearningCoordinator } from '../connectors/learning-coordinator.js';
21
22
  import { type ProductLanguage } from '../voice/language-profile.js';
22
23
  export type { GatewayChannelStartupPhase1Metrics, GatewayChannelStartupPhase2Metrics, GatewayServiceConfig, ServiceEvent, } from './service/types.js';
23
24
  export declare class GatewayService {
@@ -63,7 +64,7 @@ export declare class GatewayService {
63
64
  private goalNotifications;
64
65
  private mobileNotifications;
65
66
  private connectorSupervisor;
66
- private connectorMemorySyncCoordinator;
67
+ private connectorLearningCoordinator;
67
68
  private connectedKnowledgeCoordinator;
68
69
  private stopAutomationProductEventBridge;
69
70
  private stopSessionTranscriptAutomationEvents;
@@ -207,7 +208,9 @@ export declare class GatewayService {
207
208
  requestHeartbeatNow(opts?: {
208
209
  reason?: string;
209
210
  }): void;
210
- requestConnectorMemorySync(toolkit?: string): void;
211
+ requestConnectorLearning(connectionId: string, request?: Parameters<ConnectorLearningCoordinator['enqueueConnection']>[1]): ReturnType<ConnectorLearningCoordinator['enqueueConnection']>;
212
+ requestConnectorLearningForToolkit(toolkit: string): ReturnType<ConnectorLearningCoordinator['enqueueToolkit']>;
213
+ setConnectorLearningPaused(connectionId: string, paused: boolean): number;
211
214
  /**
212
215
  * Register graceful shutdown used after spawning a replacement gateway process (foreground CLI server).
213
216
  */
@@ -44,8 +44,10 @@ import { getWorkspacePath } from "../config/workspace-path-helpers.js";
44
44
  import "../config/index.js";
45
45
  import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
46
46
  import "../knowledge/index.js";
47
- import { startConnectorMemorySyncCoordinator } from "../connectors/memory-sync-coordinator.js";
47
+ import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
48
48
  import { startConnectorSupervisor } from "../connectors/supervisor.js";
49
+ import { LocalAppService } from "../local-apps/service.js";
50
+ import "../local-apps/index.js";
49
51
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
50
52
  import { reconcileDreamingAutomations } from "./dreaming-automation-reconciler.js";
51
53
  import { FocusService } from "../proactive/focus-service.js";
@@ -77,8 +79,6 @@ import { auditGatewayConfig } from "./security/audit.js";
77
79
  import { ModelCatalogSyncService } from "../providers/model-catalog-sync-service.js";
78
80
  import { runBootstrapMigrationsSync } from "../migrations/runner.js";
79
81
  import { MobileNotificationService } from "../mobile/notification-service.js";
80
- import { LocalAppService } from "../local-apps/service.js";
81
- import "../local-apps/index.js";
82
82
  import { createRuntimeBrowserRecipeService } from "../browser/recipes/runtime-service.js";
83
83
  import "../browser/recipes/index.js";
84
84
  import { scheduleGatewayUpdateCheck } from "../infra/update-startup.js";
@@ -159,7 +159,7 @@ var GatewayService = class {
159
159
  goalNotifications = null;
160
160
  mobileNotifications = null;
161
161
  connectorSupervisor = null;
162
- connectorMemorySyncCoordinator = null;
162
+ connectorLearningCoordinator = null;
163
163
  connectedKnowledgeCoordinator = null;
164
164
  stopAutomationProductEventBridge = null;
165
165
  stopSessionTranscriptAutomationEvents = null;
@@ -713,9 +713,11 @@ var GatewayService = class {
713
713
  getConfig: () => this.config,
714
714
  saveConfig: (cfg) => this.saveConfig(cfg)
715
715
  });
716
- this.connectorMemorySyncCoordinator = startConnectorMemorySyncCoordinator({
716
+ this.connectorLearningCoordinator = startConnectorLearningCoordinator({
717
717
  getConfig: () => this.config,
718
- resolveAgentId: () => resolveDefaultAgentId(this.config)
718
+ resolveAgentId: () => resolveDefaultAgentId(this.config),
719
+ getMemoryManager: () => this.agentService.getMemoryManager(),
720
+ emit: (type, payload) => this.emit(type, payload)
719
721
  });
720
722
  this.connectedKnowledgeCoordinator = startConnectedKnowledgeCoordinator({ resolvePipelineOptions: () => ({
721
723
  agentId: resolveDefaultAgentId(this.config),
@@ -841,8 +843,8 @@ var GatewayService = class {
841
843
  this.heartbeatService?.stop();
842
844
  this.connectorSupervisor?.stop();
843
845
  this.connectorSupervisor = null;
844
- this.connectorMemorySyncCoordinator?.stop();
845
- this.connectorMemorySyncCoordinator = null;
846
+ this.connectorLearningCoordinator?.stop();
847
+ this.connectorLearningCoordinator = null;
846
848
  this.connectedKnowledgeCoordinator?.stop();
847
849
  this.connectedKnowledgeCoordinator = null;
848
850
  await this.browserRecipeService?.shutdown();
@@ -1085,11 +1087,14 @@ var GatewayService = class {
1085
1087
  requestHeartbeatNow(opts) {
1086
1088
  this.heartbeatService?.requestNow({ reason: opts?.reason ?? "manual" });
1087
1089
  }
1088
- requestConnectorMemorySync(toolkit) {
1089
- this.connectorMemorySyncCoordinator?.runNow({
1090
- toolkit,
1091
- force: true
1092
- });
1090
+ requestConnectorLearning(connectionId, request) {
1091
+ return this.connectorLearningCoordinator?.enqueueConnection(connectionId, request) ?? null;
1092
+ }
1093
+ requestConnectorLearningForToolkit(toolkit) {
1094
+ return this.connectorLearningCoordinator?.enqueueToolkit(toolkit) ?? [];
1095
+ }
1096
+ setConnectorLearningPaused(connectionId, paused) {
1097
+ return this.connectorLearningCoordinator?.setPaused(connectionId, paused) ?? 0;
1093
1098
  }
1094
1099
  /**
1095
1100
  * Register graceful shutdown used after spawning a replacement gateway process (foreground CLI server).
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, shouldSilence, stripHeartbeatToken } from "./tokens.js";
2
- import { appendCronEventLines } from "./event-prompt.js";
3
2
  import { isWithinActiveHours } from "./active-hours.js";
4
3
  import { isHeartbeatContentEmpty } from "./content-check.js";
4
+ import { appendCronEventLines } from "./event-prompt.js";
5
5
  import { createHeartbeatWake } from "./wake.js";
6
6
  export { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, appendCronEventLines, createHeartbeatWake, isHeartbeatContentEmpty, isWithinActiveHours, shouldSilence, stripHeartbeatToken };
@@ -0,0 +1,19 @@
1
+ import type { UnderstandingCandidate, UnderstandingReviewResult } from '../agent/memory/understanding/types.js';
2
+ import type { MemoryManager } from '../agent/memory/manager.js';
3
+ import { resolveUserEntity, type UserClaim, type UserClaimClass } from '../storage/sqlite/index.js';
4
+ import type { KnowledgeSourceItem } from './types.js';
5
+ export type ClaimObservation = {
6
+ class: UserClaimClass;
7
+ key: string;
8
+ value: Record<string, unknown>;
9
+ subject?: Parameters<typeof resolveUserEntity>[0];
10
+ items: KnowledgeSourceItem[];
11
+ windowDays: number;
12
+ };
13
+ export declare function deriveConnectedClaimObservations(items: KnowledgeSourceItem[]): ClaimObservation[];
14
+ export declare function renderUserClaim(claim: UserClaim): UnderstandingCandidate;
15
+ export declare class ConnectedUnderstandingPipeline {
16
+ private readonly memoryManager;
17
+ constructor(memoryManager: MemoryManager);
18
+ process(sourceInstanceId: string, connectorId: string, agentId: string): Promise<UnderstandingReviewResult>;
19
+ }