@xopcai/xopc 0.0.374 → 0.0.375

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BrA20N2m.js → agent-avatar-dicebear-B2Popl59.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-BZrOdxou.js → agent-defaults-settings-panel-BnF3HrHY.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-plugin-dialog-B3ux1AhY.js → agent-plugin-dialog-CwP6OrUs.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agents-CXlXFU6M.js → agents-n3IremKl.js} +3 -3
  8. package/dist/gateway/static/root/assets/{app-management-settings-panel-BXahEVPm.js → app-management-settings-panel-DNkXIPxK.js} +1 -1
  9. package/dist/gateway/static/root/assets/{appearance-settings-CE2qJMkD.js → appearance-settings-p1_NpH8a.js} +1 -1
  10. package/dist/gateway/static/root/assets/{apps-page-DGVOnCxZ.js → apps-page-CP2u5iEh.js} +1 -1
  11. package/dist/gateway/static/root/assets/{automations-page-BWL7eT4_.js → automations-page-CjYiGOov.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-workspace-BxIShhkZ.js → automations-workspace-BAHiUQbe.js} +1 -1
  13. package/dist/gateway/static/root/assets/{block-editor-3n446-mX.js → block-editor-DiOou1HO.js} +1 -1
  14. package/dist/gateway/static/root/assets/{browser-automations-page-BmTK7Gtn.js → browser-automations-page-nArl2uwX.js} +1 -1
  15. package/dist/gateway/static/root/assets/{browser-settings-page-DBQ-WETQ.js → browser-settings-page-Bd8tF-gg.js} +1 -1
  16. package/dist/gateway/static/root/assets/{capabilities-page-D-nQ6Zzi.js → capabilities-page-Cx4cdgse.js} +2 -2
  17. package/dist/gateway/static/root/assets/{capabilities-settings-panel-Dx1fpBmH.js → capabilities-settings-panel-DpWceNd0.js} +1 -1
  18. package/dist/gateway/static/root/assets/{capability-header-actions-BRMqvQVb.js → capability-header-actions-AeBubNQK.js} +1 -1
  19. package/dist/gateway/static/root/assets/{channels-DXfEP1FR.js → channels-Cd1Rf0Vk.js} +1 -1
  20. package/dist/gateway/static/root/assets/{chat-terminal-dock-BRdzCjWO.js → chat-terminal-dock-DrVlbq_P.js} +1 -1
  21. package/dist/gateway/static/root/assets/{computer-settings-page-BhCHMRpD.js → computer-settings-page-TUzZnurj.js} +1 -1
  22. package/dist/gateway/static/root/assets/{connector-service-page-BXE8Z-Ll.js → connector-service-page-BlpwjGW7.js} +1 -1
  23. package/dist/gateway/static/root/assets/{connectors-page-D9RZjhw8.js → connectors-page-j8VFMD4o.js} +1 -1
  24. package/dist/gateway/static/root/assets/{date-picker-BJ7N92wm.js → date-picker-CjKRpA8X.js} +1 -1
  25. package/dist/gateway/static/root/assets/{dependency-picker-gyxCM-hb.js → dependency-picker-J9_0obij.js} +1 -1
  26. package/dist/gateway/static/root/assets/{desktop-pet-B-WM4l-L.js → desktop-pet-DySwgreF.js} +1 -1
  27. package/dist/gateway/static/root/assets/{desktop-pet-settings-usJqcew5.js → desktop-pet-settings-B1-oyKBG.js} +1 -1
  28. package/dist/gateway/static/root/assets/{device-pairing-wizard-DoSR4DGk.js → device-pairing-wizard-C5rjPAyc.js} +1 -1
  29. package/dist/gateway/static/root/assets/{directory-picker-path-field-DqVlV2YH.js → directory-picker-path-field-BY7MwiZd.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-page-CUule9SU.js → extension-page-JoSFhfb6.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-settings-page-_OFukkEJ.js → extension-settings-page-B7LtTNx7.js} +1 -1
  32. package/dist/gateway/static/root/assets/{fallback-models-CiSc3h8i.js → fallback-models-DKSWcBt_.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-settings-qSUrpS1h.js → gateway-settings-CGm-lbsX.js} +1 -1
  34. package/dist/gateway/static/root/assets/{home-page-COjDsuzg.js → home-page-CX3uWkyH.js} +1 -1
  35. package/dist/gateway/static/root/assets/{imports-page-DdvIj-ZL.js → imports-page-DS_RFtWf.js} +1 -1
  36. package/dist/gateway/static/root/assets/{index-DEaVabvo.js → index-CgvOIDy_.js} +5 -5
  37. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DbqFlNsF.js → keyboard-shortcuts-settings-BxwXR2qA.js} +1 -1
  38. package/dist/gateway/static/root/assets/{local-app-workbench-page-REowUzkp.js → local-app-workbench-page-BWd4RMBE.js} +1 -1
  39. package/dist/gateway/static/root/assets/{local-apps-page-DdCMNn_z.js → local-apps-page-BsgcA6-N.js} +1 -1
  40. package/dist/gateway/static/root/assets/{logs-page-B_6fHDoi.js → logs-page-CLP5pu2j.js} +1 -1
  41. package/dist/gateway/static/root/assets/{management-settings-D4vcSRE3.js → management-settings-CZAZwCpE.js} +1 -1
  42. package/dist/gateway/static/root/assets/{note-detail-panel-B7U6EbAi.js → note-detail-panel-BeAHgdtw.js} +3 -3
  43. package/dist/gateway/static/root/assets/{notes-page-BzHVaH8j.js → notes-page-MP21Zf_R.js} +1 -1
  44. package/dist/gateway/static/root/assets/{page-context-capture-button-D7Y4vFRN.js → page-context-capture-button-BZADmKcV.js} +1 -1
  45. package/dist/gateway/static/root/assets/{personal-page-E6huhFk4.js → personal-page-BbaTGmE-.js} +1 -1
  46. package/dist/gateway/static/root/assets/{product-open-page-CK_czbBx.js → product-open-page-CBnKsW4p.js} +1 -1
  47. package/dist/gateway/static/root/assets/{product-preview-content-CU6KlaVP.js → product-preview-content-B0gGexdG.js} +1 -1
  48. package/dist/gateway/static/root/assets/{project-detail-page-c3ye2bdq.js → project-detail-page-ZjQSv_NG.js} +1 -1
  49. package/dist/gateway/static/root/assets/{projects-page-BA1UuuRF.js → projects-page-Bf7Sd_Ck.js} +1 -1
  50. package/dist/gateway/static/root/assets/{remote-access-hub-D_FLVZAm.js → remote-access-hub-Bl8aPuXU.js} +1 -1
  51. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Cxjmwdyf.js → runtime-tools-settings-panel-CQZ1c-re.js} +1 -1
  52. package/dist/gateway/static/root/assets/{scenes-page-Av47PHdM.js → scenes-page-1xGRBOJO.js} +1 -1
  53. package/dist/gateway/static/root/assets/{schema-form-IM7QeSm3.js → schema-form-BYqugMox.js} +1 -1
  54. package/dist/gateway/static/root/assets/{sessions-page-Bol3ScEc.js → sessions-page-DjMSVXU3.js} +1 -1
  55. package/dist/gateway/static/root/assets/settings-advanced-gate-BJuMTtyI.js +1 -0
  56. package/dist/gateway/static/root/assets/{settings-page-BeVtwwVd.js → settings-page-CSqi5fmN.js} +1 -1
  57. package/dist/gateway/static/root/assets/{setup-status-panel-zTmrMwMm.js → setup-status-panel-D5bM0TvA.js} +1 -1
  58. package/dist/gateway/static/root/assets/{shares-settings-Bkhkt_6M.js → shares-settings-C-V9WllF.js} +1 -1
  59. package/dist/gateway/static/root/assets/{skill-api-Dgwc707w.js → skill-api-CFtEHy5e.js} +1 -1
  60. package/dist/gateway/static/root/assets/{skills-page-CFIte-vM.js → skills-page-B-olXUVH.js} +1 -1
  61. package/dist/gateway/static/root/assets/{system-settings-panel-Ck6zGDHb.js → system-settings-panel-DBMR9ks_.js} +1 -1
  62. package/dist/gateway/static/root/assets/{task-detail-page-C3ZPEZqw.js → task-detail-page-CGe34vxR.js} +1 -1
  63. package/dist/gateway/static/root/assets/{tunnel-api-CjxMpAm2.js → tunnel-api-CzNIlgdJ.js} +1 -1
  64. package/dist/gateway/static/root/assets/{usage-page-Dnhp9xQ4.js → usage-page-O3abwewp.js} +1 -1
  65. package/dist/gateway/static/root/assets/user-model-page-Bx2JlCpj.js +2 -0
  66. package/dist/gateway/static/root/assets/{work-discovery-overlay-CVd_y3K2.js → work-discovery-overlay-D967-fVj.js} +1 -1
  67. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-Dwg40uGK.js → workflow-run-setup-panel-BJ945m7G.js} +1 -1
  68. package/dist/gateway/static/root/assets/{workflows-page-BQR4JdXB.js → workflows-page-DUpVeIuw.js} +1 -1
  69. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CaKc_J7j.js → xopc-cloud-account-card-Bq9ubffP.js} +1 -1
  70. package/dist/gateway/static/root/index.html +1 -1
  71. package/dist/package.js +1 -1
  72. package/dist/src/agent/agent-manager.d.ts +2 -7
  73. package/dist/src/agent/agent-manager.js +24 -53
  74. package/dist/src/agent/background-review/coordinator.js +1 -1
  75. package/dist/src/agent/background-review/prompts.d.ts +6 -0
  76. package/dist/src/agent/background-review/prompts.js +7 -1
  77. package/dist/src/agent/background-review/run-background-review.d.ts +3 -0
  78. package/dist/src/agent/background-review/run-background-review.js +184 -16
  79. package/dist/src/agent/context/coordinator.d.ts +1 -0
  80. package/dist/src/agent/context/coordinator.js +11 -2
  81. package/dist/src/agent/context/execution-context.js +40 -4
  82. package/dist/src/agent/context/project-context.js +11 -3
  83. package/dist/src/agent/embedded/model-runtime.js +1 -1
  84. package/dist/src/agent/embedded/run-for-session.js +2 -2
  85. package/dist/src/agent/embedded/run-turn.js +5 -5
  86. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  87. package/dist/src/agent/image/tool-model-config.js +1 -1
  88. package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
  89. package/dist/src/agent/memory/compaction-promotion.d.ts +2 -0
  90. package/dist/src/agent/memory/compaction-promotion.js +33 -2
  91. package/dist/src/agent/service/process-direct-streaming.js +1 -1
  92. package/dist/src/agent/service.js +7 -7
  93. package/dist/src/agent/skills/index.js +1 -1
  94. package/dist/src/agent/skills/managed-store.js +1 -1
  95. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  96. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  97. package/dist/src/agent/tools/factory.js +1 -1
  98. package/dist/src/agent/tools/knowledge-memory-tool.js +14 -6
  99. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  100. package/dist/src/agent/workspace-runtime/registry.js +1 -1
  101. package/dist/src/agent-catalog/capabilities.js +2 -2
  102. package/dist/src/auth/credentials.js +2 -2
  103. package/dist/src/auth/model-credential-store.js +1 -1
  104. package/dist/src/auth/sync-provider-auth.js +2 -2
  105. package/dist/src/automations/capabilities/drafts.js +1 -1
  106. package/dist/src/automations/draft/automation-draft-service.js +1 -1
  107. package/dist/src/automations/service/action-executor.js +1 -1
  108. package/dist/src/bootstrap/application-state.js +2 -2
  109. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  110. package/dist/src/capabilities/runtime/product.js +1 -1
  111. package/dist/src/chat-commands/agent-edit.js +1 -1
  112. package/dist/src/chat-commands/builtins/config.js +1 -1
  113. package/dist/src/chat-commands/context.js +1 -1
  114. package/dist/src/cli/commands/agent.js +2 -2
  115. package/dist/src/cli/commands/agents.js +1 -1
  116. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  117. package/dist/src/cli/commands/doctor/checks/image-providers.js +1 -1
  118. package/dist/src/cli/commands/doctor/checks/provider-auth.js +2 -2
  119. package/dist/src/cli/commands/models.js +2 -2
  120. package/dist/src/cli/commands/onboard/model.js +4 -4
  121. package/dist/src/cli/extension-cli-register.js +1 -1
  122. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  123. package/dist/src/config/agent-model-intents.js +1 -1
  124. package/dist/src/config/agent-profile.js +2 -2
  125. package/dist/src/config/index.js +4 -4
  126. package/dist/src/config/loader.js +1 -1
  127. package/dist/src/config/models-json.js +2 -2
  128. package/dist/src/config/schema.d.ts +5 -0
  129. package/dist/src/config/schema.js +5 -5
  130. package/dist/src/connectors/connected-source-ingestion.js +45 -7
  131. package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
  132. package/dist/src/connectors/connected-source-understanding.js +59 -67
  133. package/dist/src/connectors/content-enrichment.js +1 -1
  134. package/dist/src/connectors/learning-coordinator.js +2 -2
  135. package/dist/src/extensions/activation-context.js +1 -1
  136. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  137. package/dist/src/gateway/agents-admin.js +2 -2
  138. package/dist/src/gateway/file-path-classifier.js +1 -1
  139. package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -0
  140. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  141. package/dist/src/gateway/hono/routes/config-patch/misc.js +6 -6
  142. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  143. package/dist/src/gateway/hono/routes/context-sources.js +2 -2
  144. package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -0
  145. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  146. package/dist/src/gateway/hono/routes/memory-learning.d.ts +3 -0
  147. package/dist/src/gateway/hono/routes/memory-learning.js +76 -0
  148. package/dist/src/gateway/hono/routes/models.js +2 -2
  149. package/dist/src/gateway/hono/routes/notes.js +2 -2
  150. package/dist/src/gateway/hono/routes/observability.js +1 -1
  151. package/dist/src/gateway/hono/routes/projects.js +3 -3
  152. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  153. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  154. package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -1
  155. package/dist/src/gateway/hono/routes/user-model.js +5 -3
  156. package/dist/src/gateway/hono/routes/voice.js +1 -1
  157. package/dist/src/gateway/image-generation-setup.js +2 -2
  158. package/dist/src/gateway/lock.js +1 -1
  159. package/dist/src/gateway/service/config-coordinator.js +1 -1
  160. package/dist/src/gateway/service.js +13 -13
  161. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  162. package/dist/src/home-intelligence/generator.js +1 -1
  163. package/dist/src/home-intelligence/host.js +2 -2
  164. package/dist/src/imports/inventory.js +1 -1
  165. package/dist/src/knowledge/chunks.d.ts +10 -0
  166. package/dist/src/knowledge/chunks.js +28 -0
  167. package/dist/src/knowledge/connected-knowledge-pipeline.js +67 -33
  168. package/dist/src/knowledge/index.js +1 -1
  169. package/dist/src/knowledge/ingestion-service.js +5 -1
  170. package/dist/src/knowledge/local-folder-adapter.d.ts +2 -1
  171. package/dist/src/knowledge/local-folder-adapter.js +22 -13
  172. package/dist/src/knowledge-memory/domain.d.ts +4 -0
  173. package/dist/src/knowledge-memory/index.d.ts +1 -0
  174. package/dist/src/knowledge-memory/index.js +2 -1
  175. package/dist/src/knowledge-memory/repair-evidence.d.ts +2 -0
  176. package/dist/src/knowledge-memory/repair-evidence.js +57 -0
  177. package/dist/src/knowledge-memory/repository.d.ts +8 -0
  178. package/dist/src/knowledge-memory/repository.js +48 -27
  179. package/dist/src/knowledge-memory/search-text.d.ts +3 -0
  180. package/dist/src/knowledge-memory/search-text.js +32 -0
  181. package/dist/src/knowledge-memory/usage-policy.d.ts +6 -0
  182. package/dist/src/knowledge-memory/usage-policy.js +61 -0
  183. package/dist/src/local-apps/service.js +1 -1
  184. package/dist/src/memory-learning/repository.d.ts +24 -0
  185. package/dist/src/memory-learning/repository.js +96 -0
  186. package/dist/src/memory-learning/service.d.ts +17 -0
  187. package/dist/src/memory-learning/service.js +105 -0
  188. package/dist/src/memory-learning/source-learning.d.ts +7 -0
  189. package/dist/src/memory-learning/source-learning.js +235 -0
  190. package/dist/src/memory-learning/task-receipts.d.ts +3 -0
  191. package/dist/src/memory-learning/task-receipts.js +95 -0
  192. package/dist/src/memory-learning/work-capture.d.ts +51 -0
  193. package/dist/src/memory-learning/work-capture.js +140 -0
  194. package/dist/src/memory-maintenance/service.js +5 -5
  195. package/dist/src/notes/service.js +1 -1
  196. package/dist/src/observability/runtime.js +1 -1
  197. package/dist/src/personal-agent/proactivity/service.js +3 -3
  198. package/dist/src/personal-agent/prompt-context.js +4 -4
  199. package/dist/src/personal-agent/reply-composer.js +2 -2
  200. package/dist/src/personal-agent/service.js +2 -2
  201. package/dist/src/platform/index.js +1 -1
  202. package/dist/src/providers/index.js +4 -4
  203. package/dist/src/providers/local-model.d.ts +2 -0
  204. package/dist/src/providers/local-model.js +16 -0
  205. package/dist/src/providers/model-catalog-persistence.js +1 -1
  206. package/dist/src/providers/model-registry.js +2 -2
  207. package/dist/src/providers/provider-auth-service.js +1 -1
  208. package/dist/src/providers/provider-disconnect-core.js +1 -1
  209. package/dist/src/providers/register-runtime-providers.js +1 -1
  210. package/dist/src/providers/xopc-cloud-catalog-coordinator.js +1 -1
  211. package/dist/src/routing/resolve-route.js +1 -1
  212. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  213. package/dist/src/scenes/taskFollowUp/service.js +1 -1
  214. package/dist/src/session/session-title.js +1 -1
  215. package/dist/src/session/store.js +2 -1
  216. package/dist/src/storage/sqlite/knowledge-repository.js +6 -0
  217. package/dist/src/storage/sqlite/migrations/245_memory_learning.sql +125 -0
  218. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  219. package/dist/src/storage/sqlite/migrations/runner.js +6 -3
  220. package/dist/src/storage/sqlite/schema.js +1 -1
  221. package/dist/src/tasks/capabilities/read.js +2 -2
  222. package/dist/src/tasks/task-handoff-service.js +1 -1
  223. package/dist/src/tasks/task-main-update-decision-service.js +1 -1
  224. package/dist/src/tui/backends/embedded-backend.js +5 -5
  225. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  226. package/dist/src/tui/tui-commands.js +1 -1
  227. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  228. package/dist/src/tui/tui-startup-resources.js +2 -2
  229. package/dist/src/tui/tui.js +1 -1
  230. package/dist/src/user-context/access-policy.js +2 -1
  231. package/dist/src/user-context/config.d.ts +10 -0
  232. package/dist/src/user-context/config.js +5 -0
  233. package/dist/src/user-context/extraction/registry.d.ts +1 -1
  234. package/dist/src/user-context/extraction/registry.js +10 -0
  235. package/dist/src/user-context/identity-bindings.d.ts +10 -0
  236. package/dist/src/user-context/identity-bindings.js +24 -0
  237. package/dist/src/user-context/sources/consent-fields.d.ts +2 -0
  238. package/dist/src/user-context/sources/consent-fields.js +66 -0
  239. package/dist/src/user-model/bootstrap.js +1 -1
  240. package/dist/src/user-model/capture/executor.js +1 -1
  241. package/dist/src/user-model/capture/semantic.d.ts +3 -1
  242. package/dist/src/user-model/capture/semantic.js +14 -6
  243. package/dist/src/user-model/index.js +1 -1
  244. package/dist/src/user-model/usage-policy.js +34 -0
  245. package/dist/src/voice/platform-streams.js +1 -0
  246. package/dist/src/voice/realtime/memory-context.js +19 -5
  247. package/dist/src/voice/realtime/persona-context.js +1 -1
  248. package/dist/src/work-discovery/incremental-repository.js +1 -1
  249. package/dist/src/work-discovery/service.js +6 -6
  250. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  251. package/dist/src/workflows/service/workflow-session-bridge.js +38 -10
  252. package/package.json +3 -3
  253. package/dist/gateway/static/root/assets/settings-advanced-gate-DpCanqrD.js +0 -1
  254. package/dist/gateway/static/root/assets/user-model-page-sx1lNWKf.js +0 -2
@@ -1,6 +1,6 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
2
- import { AgentCatalogService } from "../../agent-catalog/service.js";
3
2
  import { ConfigSchema, init_schema } from "../../config/schema.js";
3
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
4
4
  import { assertConfigRewriteSafeForRunningGateway, saveConfig } from "../../config/loader.js";
5
5
  import { ensureStarterAgentsInitialized } from "../../agent/starter-agents.js";
6
6
  import { bootstrapApplicationStateSync } from "../../bootstrap/application-state.js";
@@ -1,7 +1,7 @@
1
1
  import { ModelIntentSchema } from "../agent-config/schema.js";
2
2
  import { init_agent_config } from "../agent-config/index.js";
3
- import { init_schema, parseModelRef } from "./schema.js";
4
3
  import { resolveEffectiveAgentConfigForAgent } from "./agent-profile.js";
4
+ import { init_schema, parseModelRef } from "./schema.js";
5
5
  //#region src/config/agent-model-intents.ts
6
6
  init_agent_config();
7
7
  init_schema();
@@ -1,10 +1,10 @@
1
+ import { getConversationRouting } from "../storage/sqlite/conversation-repository.js";
2
+ import { init_session_key } from "../routing/session-key.js";
1
3
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
2
4
  import { init_agent_config } from "../agent-config/index.js";
3
5
  import { normalizeAgentId } from "../agent-catalog/id.js";
4
6
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
5
7
  import { init_agent_scope, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
6
- import { getConversationRouting } from "../storage/sqlite/conversation-repository.js";
7
- import { init_session_key } from "../routing/session-key.js";
8
8
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
9
9
  //#region src/config/agent-profile.ts
10
10
  init_agent_config();
@@ -2,18 +2,18 @@ import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXop
2
2
  import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
3
3
  import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
4
4
  import { resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
5
- import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
5
+ import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
6
6
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
7
7
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
8
8
  import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewayScenesConfigSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, McpConfigSchema, McpOAuthConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelBrokerUrlSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
9
- import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
10
- import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
11
9
  import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
10
+ import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
12
11
  import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
12
+ import { getWorkspacePath } from "./workspace-path-helpers.js";
13
+ import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
13
14
  import { canonicalizeConfiguredMcpServer, normalizeConfiguredMcpServers } from "./mcp-config-normalize.js";
14
15
  import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
15
16
  import { assertConfigRewriteSafeForRunningGateway, loadConfig, saveConfig } from "./loader.js";
16
- import { getWorkspacePath } from "./workspace-path-helpers.js";
17
17
  import { listAgentProfileMarkdownDirs, listAgentWorkspaceDirs } from "./workspace-dirs.js";
18
18
  import { ProfileManager, createProfile, deleteProfile, getCurrentProfile, getProfileManager, getProfileNameFromDir, getSwitchCommand, listProfiles, resolveProfileStateDir } from "./profile.js";
19
19
  import { diffConfigPaths } from "./diff.js";
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { ConfigSchema, init_schema } from "./schema.js";
3
4
  import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
5
  import { init_paths, resolveConfigPath } from "./paths.js";
5
6
  import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
6
- import { ConfigSchema, init_schema } from "./schema.js";
7
7
  import { assertChannelPluginConfigs } from "./validate-channel-configs.js";
8
8
  import { isGatewayConfigLockedByAnotherProcessSync } from "../gateway/lock.js";
9
9
  import { dirname } from "path";
@@ -1,9 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
+ import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
2
3
  import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
3
4
  import { init_paths, resolveModelsJsonPath } from "./paths.js";
4
- import { assertCurrentModelProvider, init_provider_policy } from "../providers/provider-policy.js";
5
- import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
6
5
  import { init_model_policy, isComputerModel } from "../computer/model-policy.js";
6
+ import { assertCurrentModelProvider, init_provider_policy } from "../providers/provider-policy.js";
7
7
  import { existsSync, readFileSync } from "fs";
8
8
  import { z } from "zod";
9
9
  //#region src/config/models-json.ts
@@ -1362,6 +1362,11 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1362
1362
  allow: "allow";
1363
1363
  deny: "deny";
1364
1364
  }>>;
1365
+ learning: z.ZodOptional<z.ZodObject<{
1366
+ idleFlushMs: z.ZodDefault<z.ZodNumber>;
1367
+ maxBatchChars: z.ZodDefault<z.ZodNumber>;
1368
+ maxDailyBatches: z.ZodDefault<z.ZodNumber>;
1369
+ }, z.core.$strict>>;
1365
1370
  readScopes: z.ZodDefault<z.ZodArray<z.ZodEnum<{
1366
1371
  project: "project";
1367
1372
  session: "session";
@@ -1,11 +1,11 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
+ import { DEFAULT_CONTEXT_COMPACTION_POLICY, UserContextConfigSchema, init_config } from "../user-context/config.js";
2
3
  import { AgentModelsOverrideSchema, ImageGenerationRouteSchema, ModelRouteSchema } from "../agent-config/schema.js";
3
4
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
4
5
  import { init_agent_config } from "../agent-config/index.js";
5
6
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
6
- import { TracingConfigSchema, init_config } from "../observability/config.js";
7
- import { ComputerConfigSchema, init_config as init_config$1 } from "../computer/config.js";
8
- import { DEFAULT_CONTEXT_COMPACTION_POLICY, UserContextConfigSchema, init_config as init_config$2 } from "../user-context/config.js";
7
+ import { TracingConfigSchema, init_config as init_config$1 } from "../observability/config.js";
8
+ import { ComputerConfigSchema, init_config as init_config$2 } from "../computer/config.js";
9
9
  import { init_public_url, validatePublicUrl } from "./public-url.js";
10
10
  import { PlatformConfigSchema, init_contracts } from "../platform/contracts.js";
11
11
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, init_config_schema } from "../../extensions/telegram/src/config-schema.js";
@@ -44,11 +44,11 @@ function parseModelRef(ref) {
44
44
  }
45
45
  var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentModelsSchema, BrowserDriverSchema, BrowserHostnameSchema, BrowserConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, RuntimePreferenceSchema, RuntimeProvisionSchema, RuntimeVersionRequestSchema, LanguageRuntimeSchema, DEFAULT_RUNTIME_TOOLS_CONFIG, RuntimeToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelBrokerUrlSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayWebchatConfigSchema, GatewayScenesConfigSchema, GatewayConfigSchema, ModelsDevConfigSchema, ModelCatalogConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, UpdateConfigSchema, CommandsConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpExposureSchema, McpOAuthConfigSchema, McpServerSchema, McpConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
46
46
  var init_schema = __esmMin((() => {
47
- init_config();
48
47
  init_config$1();
48
+ init_config$2();
49
49
  init_agent_config();
50
50
  init_repository();
51
- init_config$2();
51
+ init_config();
52
52
  init_public_url();
53
53
  init_contracts();
54
54
  init_config_schema();
@@ -2,20 +2,24 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { getConnectorInstallation, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
4
4
  import { init_sqlite } from "../storage/sqlite/index.js";
5
+ import { getActiveUnderstandingConsent, grantUnderstandingConsent } from "../user-context/sources/consent-repository.js";
6
+ import { listUnderstandingSourceGrants, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
7
+ import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
8
+ import { getWorkspacePath } from "../config/workspace-path-helpers.js";
5
9
  import { canAccessConnectorAccount, currentAccountConnections } from "./account-access.js";
6
10
  import { ComposioSessionsAdapter } from "./composio-sessions.js";
7
11
  import { decodeConnectedSourceCursor, encodeConnectedSourceCursor } from "./connected-source-cursor.js";
8
12
  import { scopeForComposioAction } from "./composio.js";
9
13
  import { getConnectorDefinition } from "./catalog.js";
10
14
  import { getConnectorInstance } from "./instances.js";
11
- import { getWorkspacePath } from "../config/workspace-path-helpers.js";
12
15
  import { KnowledgeIngestionService } from "../knowledge/ingestion-service.js";
13
- import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
14
16
  import { LocalFolderKnowledgeSourceAdapter } from "../knowledge/local-folder-adapter.js";
15
17
  import "../knowledge/index.js";
16
18
  import { normalizeConnectedSourceResult } from "./connected-source-normalizers.js";
17
19
  import { sanitizeConnectedSourceValue } from "./connected-source-sanitization.js";
20
+ import { resolve } from "node:path";
18
21
  import { createHash } from "node:crypto";
22
+ import { realpath } from "node:fs/promises";
19
23
  //#region src/connectors/connected-source-ingestion.ts
20
24
  init_logger();
21
25
  init_sqlite();
@@ -145,9 +149,8 @@ function resultToSourceItems(input) {
145
149
  const ownerIdentities = connectionIdentities(input.connectionIdentity);
146
150
  const actorAttributed = entity.metadata.actorAttributed === true || hasOwnerAttribution(input.toolkit, people, ownerIdentities);
147
151
  const serialized = JSON.stringify(sanitizeConnectedSourceValue(entity.value), null, 2);
148
- const contentChars = typeof entity.value.content === "string" ? 24e3 : 8e3;
149
- const normalizedText = serialized.length > contentChars ? `${serialized.slice(0, contentChars)}\n…` : serialized;
150
- const contentHash = createHash("sha256").update(serialized).digest("hex");
152
+ const normalizedText = serialized;
153
+ const contentHash = createHash("sha256").update(`connected-source-v2:${serialized}`).digest("hex");
151
154
  return {
152
155
  sourceInstanceId: input.sourceInstanceId,
153
156
  collectionScope: input.collectionScope,
@@ -350,9 +353,44 @@ async function ingestLocalFolderSource(input) {
350
353
  if (definition?.runtime.type !== "memorySource" || definition.runtime.sourceKind !== "local-folder") throw new Error("Local folder sync requires a local-folder memory source connector.");
351
354
  const instance = getConnectorInstance(input.config, definition.id);
352
355
  if (!instance?.enabled) throw new Error("Local folder connector is not installed and enabled.");
353
- const rootPath = typeof instance.config?.rootPath === "string" ? instance.config.rootPath.trim() : "";
354
- if (!rootPath) throw new Error("Local folder connector requires a rootPath.");
356
+ const configuredRoot = typeof instance.config?.rootPath === "string" ? instance.config.rootPath.trim() : "";
357
+ if (!configuredRoot) throw new Error("Local folder connector requires a rootPath.");
358
+ const rootPath = await realpath(resolve(configuredRoot));
355
359
  const sourceInstanceId = `local-folder:${definition.id}`;
360
+ const priorGrant = listUnderstandingSourceGrants({ includeRevoked: true }).find((grant) => grant.sourceKey === sourceInstanceId);
361
+ if (priorGrant && (priorGrant.status === "revoked" || !getActiveUnderstandingConsent(priorGrant.id))) throw new Error("Local folder source authorization was revoked. Restore it before syncing.");
362
+ if (priorGrant && (priorGrant.config.rootPath !== rootPath || getActiveUnderstandingConsent(priorGrant.id)?.allowedAgentIds && !getActiveUnderstandingConsent(priorGrant.id).allowedAgentIds.includes(input.agentId))) throw new Error("Local folder root or Agent differs from the existing authorization. Update source authorization before syncing.");
363
+ const grant = upsertUnderstandingSourceGrant({
364
+ sourceKey: sourceInstanceId,
365
+ adapterId: `connector:${definition.id}`,
366
+ category: "files",
367
+ platform: "all",
368
+ displayName: definition.displayName,
369
+ accessMode: "continuous",
370
+ retentionPolicy: "bounded_raw",
371
+ processingPolicy: "local_only",
372
+ config: {
373
+ sourceInstanceId,
374
+ rootPath
375
+ }
376
+ });
377
+ if (!getActiveUnderstandingConsent(grant.id)) grantUnderstandingConsent({
378
+ grantId: grant.id,
379
+ purposes: ["work_assistance"],
380
+ allowedDomains: ["goals"],
381
+ deniedDomains: [],
382
+ allowedFields: [
383
+ "title",
384
+ "content",
385
+ "timestamps"
386
+ ],
387
+ accessMode: "continuous",
388
+ lookbackDays: 0,
389
+ rawRetentionDays: 365,
390
+ processingPolicy: "local_only",
391
+ allowedAgentIds: [input.agentId],
392
+ disclosureVersion: "local-folder-1"
393
+ });
356
394
  const adapter = new LocalFolderKnowledgeSourceAdapter(rootPath);
357
395
  const syncRun = await new KnowledgeIngestionService(new Map([[adapter.kind, adapter]])).sync({
358
396
  adapterKind: adapter.kind,
@@ -11,6 +11,7 @@ export declare function deriveConnectedSourceUnderstanding(input: {
11
11
  sourceRunId: string;
12
12
  processingPolicy: 'local_only' | 'remote_allowed';
13
13
  analyze?: typeof analyzeUnderstandingSources;
14
+ batchOrdinal?: number;
14
15
  assertAuthorized?: () => void;
15
16
  }): Promise<{
16
17
  created: number;
@@ -4,14 +4,15 @@ import { finishContextExtractionRun } from "../storage/sqlite/context-extraction
4
4
  import { createContextEvidence, init_context_evidence_repository } from "../storage/sqlite/context-evidence-repository.js";
5
5
  import { getKnowledgeSourceItem } from "../storage/sqlite/knowledge-repository.js";
6
6
  import { init_sqlite } from "../storage/sqlite/index.js";
7
+ import { getActiveUnderstandingConsent } from "../user-context/sources/consent-repository.js";
8
+ import { getUnderstandingSourceRun } from "../user-context/sources/repository.js";
7
9
  import { writeKnowledgeItem } from "../knowledge-memory/repository.js";
8
10
  import "../knowledge-memory/index.js";
11
+ import { consentFilteredText } from "../user-context/sources/consent-fields.js";
12
+ import { claimRegisteredExtraction } from "../user-context/extraction/registry.js";
9
13
  import { reconcileAssertion } from "../user-model/repository.js";
10
14
  import "../user-model/index.js";
11
- import { claimRegisteredExtraction } from "../user-context/extraction/registry.js";
12
15
  import { recordConnectedSourceObservations } from "./connected-source-observations.js";
13
- import { getActiveUnderstandingConsent } from "../user-context/sources/consent-repository.js";
14
- import { getUnderstandingSourceRun } from "../user-context/sources/repository.js";
15
16
  import { allowsRemoteSourceProcessing } from "../user-context/sources/processing-policy.js";
16
17
  import { analyzeUnderstandingSources } from "../work-discovery/analyzer.js";
17
18
  import { createHash } from "node:crypto";
@@ -48,68 +49,6 @@ function timestamp(value) {
48
49
  const parsed = Date.parse(value);
49
50
  return Number.isFinite(parsed) ? parsed : void 0;
50
51
  }
51
- const CONSENT_FIELD_KEYS = {
52
- title: new Set([
53
- "title",
54
- "subject",
55
- "name",
56
- "fullName",
57
- "repository"
58
- ]),
59
- content: new Set([
60
- "content",
61
- "body",
62
- "text",
63
- "snippet",
64
- "description",
65
- "summary"
66
- ]),
67
- participants: new Set([
68
- "from",
69
- "to",
70
- "cc",
71
- "bcc",
72
- "sender",
73
- "author",
74
- "organizer",
75
- "attendees",
76
- "participants",
77
- "assignee",
78
- "owners"
79
- ]),
80
- status: new Set([
81
- "status",
82
- "state",
83
- "labels"
84
- ]),
85
- timestamps: new Set([
86
- "createdAt",
87
- "updatedAt",
88
- "modifiedAt",
89
- "start",
90
- "end",
91
- "created_at",
92
- "updated_at",
93
- "modified_at"
94
- ]),
95
- owner_activity: new Set([
96
- "user",
97
- "username",
98
- "owner"
99
- ])
100
- };
101
- function consentFilteredText(textValue, allowedFields) {
102
- if (!textValue) return void 0;
103
- try {
104
- const parsed = JSON.parse(textValue);
105
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return void 0;
106
- const allowedKeys = new Set([...allowedFields].flatMap((field) => [...CONSENT_FIELD_KEYS[field] ?? []]));
107
- const filtered = Object.fromEntries(Object.entries(parsed).filter(([key]) => allowedKeys.has(key)));
108
- return Object.keys(filtered).length ? JSON.stringify(filtered) : void 0;
109
- } catch {
110
- return allowedFields.has("content") ? textValue.slice(0, 24e3) : void 0;
111
- }
112
- }
113
52
  function itemsAllowedByConsent(items, consent) {
114
53
  if (!consent) return [];
115
54
  const allowed = new Set(consent.allowedFields);
@@ -180,7 +119,27 @@ function candidatePolicy(candidate) {
180
119
  };
181
120
  }
182
121
  async function deriveConnectedSourceUnderstanding(input) {
183
- const sourceItems = [...new Set(input.sourceItemIds)].slice(0, MAX_CONNECTED_ITEMS).flatMap((itemId) => getKnowledgeSourceItem(itemId) ?? []).filter((item) => item.sourceInstanceId === input.sourceInstanceId && item.metadata.agentId === input.agentId && !item.deletedAt);
122
+ const uniqueIds = [...new Set(input.sourceItemIds)];
123
+ if (uniqueIds.length > MAX_CONNECTED_ITEMS) {
124
+ let created = 0, knowledgeCount = 0;
125
+ let status = "completed";
126
+ for (let offset = 0; offset < uniqueIds.length; offset += MAX_CONNECTED_ITEMS) {
127
+ const batch = await deriveConnectedSourceUnderstanding({
128
+ ...input,
129
+ sourceItemIds: uniqueIds.slice(offset, offset + MAX_CONNECTED_ITEMS),
130
+ batchOrdinal: offset / MAX_CONNECTED_ITEMS
131
+ });
132
+ created += batch.created;
133
+ knowledgeCount += batch.knowledgeCount;
134
+ if (batch.status !== "completed") status = "partial";
135
+ }
136
+ return {
137
+ created,
138
+ knowledgeCount,
139
+ status
140
+ };
141
+ }
142
+ const sourceItems = uniqueIds.flatMap((itemId) => getKnowledgeSourceItem(itemId) ?? []).filter((item) => item.sourceInstanceId === input.sourceInstanceId && item.metadata.agentId === input.agentId && !item.deletedAt);
184
143
  const items = connectedItemsForUnderstanding(sourceItems);
185
144
  if (!items.length) {
186
145
  log.info({
@@ -206,7 +165,7 @@ async function deriveConnectedSourceUnderstanding(input) {
206
165
  const effectiveProcessingPolicy = input.processingPolicy === "remote_allowed" && consentReceipt?.processingPolicy === "remote_allowed" ? "remote_allowed" : "local_only";
207
166
  const extraction = claimRegisteredExtraction({
208
167
  extractorId: "connector-semantic",
209
- sourceRef: `understanding-source-run:${input.sourceRunId}`,
168
+ sourceRef: `understanding-source-run:${input.sourceRunId}${input.batchOrdinal === void 0 ? "" : `:batch:${input.batchOrdinal}`}`,
210
169
  contentForHash: sourceItems.map((item) => `${item.id}:${item.contentHash}`).join("\n"),
211
170
  processingPolicy: effectiveProcessingPolicy,
212
171
  destination: "remote_model"
@@ -239,9 +198,12 @@ async function deriveConnectedSourceUnderstanding(input) {
239
198
  let assertionId;
240
199
  let candidateCreated = false;
241
200
  for (const [index, evidenceItem] of evidenceItems.entries()) {
201
+ const sourceItem = sourceItems.find((item) => `knowledge-source://${item.id}` === evidenceItem.evidenceRef);
242
202
  const evidence = createContextEvidence({
243
203
  sourceType: "connector",
244
204
  sourceInstanceId: input.sourceInstanceId,
205
+ sourceItemId: sourceItem?.id,
206
+ contentHash: sourceItem?.contentHash,
245
207
  sourceRef: evidenceItem.evidenceRef,
246
208
  redactedExcerpt: evidenceItem.title.slice(0, 600),
247
209
  trustLevel: "owner",
@@ -316,9 +278,12 @@ async function deriveConnectedSourceUnderstanding(input) {
316
278
  const validityDays = thread.horizon === "current" ? 30 : thread.horizon === "ongoing" ? 90 : 365;
317
279
  let goalCreated = false;
318
280
  for (const evidenceItem of goalEvidence) {
281
+ const sourceItem = sourceItems.find((item) => `knowledge-source://${item.id}` === evidenceItem.evidenceRef);
319
282
  const evidence = createContextEvidence({
320
283
  sourceType: "connector",
321
284
  sourceInstanceId: input.sourceInstanceId,
285
+ sourceItemId: sourceItem?.id,
286
+ contentHash: sourceItem?.contentHash,
322
287
  sourceRef: evidenceItem.evidenceRef,
323
288
  redactedExcerpt: evidenceItem.title.slice(0, 600),
324
289
  trustLevel: "owner",
@@ -372,8 +337,33 @@ async function deriveConnectedSourceUnderstanding(input) {
372
337
  }
373
338
  if (goalCreated) created += 1;
374
339
  }
340
+ const evidence = evidenceRefs.flatMap((ref) => {
341
+ const evidenceItem = byRef.get(ref);
342
+ const sourceItem = sourceItems.find((item) => `knowledge-source://${item.id}` === ref);
343
+ if (!evidenceItem || !sourceItem || !consentReceipt) return [];
344
+ return [{
345
+ id: createContextEvidence({
346
+ sourceType: "connector",
347
+ sourceInstanceId: input.sourceInstanceId,
348
+ sourceRef: ref,
349
+ sourceItemId: sourceItem.id,
350
+ sourceRunId: input.sourceRunId,
351
+ contentHash: sourceItem.contentHash,
352
+ processingPolicy: effectiveProcessingPolicy,
353
+ redactedExcerpt: evidenceItem.title.slice(0, 600),
354
+ trustLevel: "untrusted",
355
+ observedAt: evidenceItem.occurredAt ?? evidenceItem.modifiedAt ?? Date.now()
356
+ }).id,
357
+ contentHash: sourceItem.contentHash,
358
+ consentReceiptId: consentReceipt.id
359
+ }];
360
+ });
375
361
  const result = writeKnowledgeItem({
376
362
  kind: "work_thread",
363
+ claimMode: "reported",
364
+ verification: evidence.length === evidenceRefs.length ? "supported" : "tentative",
365
+ evidence,
366
+ reviewAt: Date.now() + (thread.horizon === "current" ? 14 : 90) * 864e5,
377
367
  scope: { type: "global" },
378
368
  content: `${thread.title}: ${thread.summary}`,
379
369
  canonicalKey: candidateKey,
@@ -383,6 +373,8 @@ async function deriveConnectedSourceUnderstanding(input) {
383
373
  sourceAgentId: input.agentId,
384
374
  source: {
385
375
  sourceRunId: input.sourceRunId,
376
+ sourceInstanceId: input.sourceInstanceId,
377
+ consentReceiptId: consentReceipt?.id,
386
378
  evidenceRefs
387
379
  },
388
380
  replaceExisting: true
@@ -1,8 +1,8 @@
1
1
  import { getConnectorConnection, getConnectorInstallation } from "../storage/sqlite/connector-repository.js";
2
2
  import { getKnowledgeSourceItem, listKnowledgeSourceItems, upsertKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
3
3
  import { init_sqlite } from "../storage/sqlite/index.js";
4
- import { ComposioSessionsAdapter } from "./composio-sessions.js";
5
4
  import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
5
+ import { ComposioSessionsAdapter } from "./composio-sessions.js";
6
6
  import { sanitizeConnectedSourceValue } from "./connected-source-sanitization.js";
7
7
  import { tmpdir } from "node:os";
8
8
  import { isAbsolute, join, relative, sep } from "node:path";
@@ -6,13 +6,13 @@ import { getConnectorInstallation, listConnectorConnections, upsertConnectorConn
6
6
  import { pruneBoundedKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
7
7
  import { getConnectorSyncPolicyForConnection } from "../storage/sqlite/connector-sync-policy-repository.js";
8
8
  import { init_sqlite } from "../storage/sqlite/index.js";
9
+ import { getActiveUnderstandingConsent, grantUnderstandingConsent } from "../user-context/sources/consent-repository.js";
10
+ import { getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceGrants, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
9
11
  import { connectorIdentityKey, normalizeConnectorIdentity } from "./connector-identity.js";
10
12
  import { ComposioSessionsAdapter } from "./composio-sessions.js";
11
13
  import { buildConnectorLearningArguments, getConnectorLearningPlan } from "./learning-recipes.js";
12
14
  import { getConnectorDefinition } from "./catalog.js";
13
15
  import { ingestComposioConnectedSource } from "./connected-source-ingestion.js";
14
- import { getActiveUnderstandingConsent, grantUnderstandingConsent } from "../user-context/sources/consent-repository.js";
15
- import { getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceGrants, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
16
16
  import { deriveConnectedSourceUnderstanding } from "./connected-source-understanding.js";
17
17
  import { listConnectedContentCandidates, readConnectedContent } from "./content-enrichment.js";
18
18
  //#region src/connectors/learning-coordinator.ts
@@ -1,5 +1,5 @@
1
- import { PROVIDER_ENV_MAP, init_env_keys } from "../providers/env-keys.js";
2
1
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
2
+ import { PROVIDER_ENV_MAP, init_env_keys } from "../providers/env-keys.js";
3
3
  import { init_providers, isProviderConfiguredSync } from "../providers/index.js";
4
4
  import { collectSttProviderConfigEntries } from "../voice/stt/config-slice.js";
5
5
  import { mergeSttConfigFromAppConfig } from "../voice/stt/config.js";
@@ -2,8 +2,8 @@ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
2
2
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
3
3
  import { createHash } from "node:crypto";
4
4
  import { z } from "zod";
5
- import yaml from "js-yaml";
6
5
  import { validateHeaderName, validateHeaderValue } from "node:http";
6
+ import yaml from "js-yaml";
7
7
  //#region src/extensions/agent-plugins/validation.ts
8
8
  const PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
9
9
  const MCP_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
@@ -1,10 +1,10 @@
1
1
  import { normalizeAgentId, validateAgentIdForNewAgent } from "../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
3
3
  import { init_agent_scope, listAgentEntries, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath } from "../agent/agent-scope.js";
4
- import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
5
- import { AgentCatalogService } from "../agent-catalog/service.js";
6
4
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
5
+ import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
7
6
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
+ import { AgentCatalogService } from "../agent-catalog/service.js";
8
8
  import { GATEWAY_BUILTIN_TOOL_IDS } from "./agent-builtin-tools.js";
9
9
  import { resolve } from "node:path";
10
10
  import { mkdir, readFile, realpath, stat, unlink, writeFile } from "node:fs/promises";
@@ -1,7 +1,7 @@
1
1
  import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
2
2
  import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
3
- import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
4
3
  import { extractProfileAgentId } from "../config/agent-profile.js";
4
+ import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
5
5
  import { isBareProfileMarkdownFileName, resolveProfileMarkdownPathIfBareName } from "../agent/tools/tool-paths.js";
6
6
  import { isPathUnderWorkspace } from "./workspace-editor-path.js";
7
7
  import { homedir } from "node:os";
@@ -250,6 +250,11 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
250
250
  searchTimeoutMs: number;
251
251
  writeStrategy: "local-first" | "external-first" | "local-only" | "external-only" | "write-through";
252
252
  allowExternalWrites: boolean;
253
+ learning?: {
254
+ idleFlushMs: number;
255
+ maxBatchChars: number;
256
+ maxDailyBatches: number;
257
+ };
253
258
  allowedProviderIds?: string[];
254
259
  autoWriteKinds?: string[];
255
260
  };
@@ -1,10 +1,10 @@
1
+ import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConfigSchema, init_config } from "../../../user-context/config.js";
1
2
  import { normalizeAgentId } from "../../../agent-catalog/id.js";
2
3
  import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
3
4
  import { init_agent_scope, listAgentEntries, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
4
5
  import { resolveModelsJsonPath } from "../../../config/paths.js";
5
- import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
6
- import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConfigSchema, init_config } from "../../../user-context/config.js";
7
6
  import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
7
+ import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
8
8
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
9
9
  import { getAllProviders, init_providers, isProviderConfigured } from "../../../providers/index.js";
10
10
  import { resolveShareConfig } from "../../../share/share-config.js";
@@ -1,10 +1,10 @@
1
+ import { ContextPlanningConfigSchema, HomeIntelligenceConfigSchema, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config } from "../../../../user-context/config.js";
1
2
  import { BindingsSchema, init_binding_schema } from "../../../../routing/binding-schema.js";
2
- import { AgentCatalogService } from "../../../../agent-catalog/service.js";
3
- import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
4
- import { ComputerConfigSchema, init_config } from "../../../../computer/config.js";
5
- import { ContextPlanningConfigSchema, HomeIntelligenceConfigSchema, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config as init_config$1 } from "../../../../user-context/config.js";
3
+ import { ComputerConfigSchema, init_config as init_config$1 } from "../../../../computer/config.js";
6
4
  import { BrowserConfigSchema, McpConfigSchema, VoiceConfigSchema, init_schema } from "../../../../config/schema.js";
5
+ import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
7
6
  import { canonicalizeConfiguredMcpServer } from "../../../../config/mcp-config-normalize.js";
7
+ import { AgentCatalogService } from "../../../../agent-catalog/service.js";
8
8
  import { mergeGatewaySkillsMarketplacePatch, mergeSessionConfigPatch, mergeUpdateConfigPatch } from "../../../../config/web-patch.js";
9
9
  import { assertGatewayAuthConfigured, resolveGatewayAuth } from "../../../auth.js";
10
10
  import { isMaskedSecretPatchValue } from "../../lib/mask-secret-length.js";
@@ -14,11 +14,11 @@ import { assertGatewayRuntimeConfig } from "../../../runtime-config.js";
14
14
  import { mergeRealtimeVoiceConfigPatch, mergeSttConfigPatch, mergeTtsConfigPatch } from "../../lib/safe-voice-config.js";
15
15
  import { PATCH_OK, patchError } from "./result.js";
16
16
  //#region src/gateway/hono/routes/config-patch/misc.ts
17
- init_config();
17
+ init_config$1();
18
18
  init_schema();
19
19
  init_binding_schema();
20
20
  init_credentials();
21
- init_config$1();
21
+ init_config();
22
22
  async function applyMiscPatch(config, body) {
23
23
  if (body.update !== void 0 && typeof body.update === "object" && body.update !== null) {
24
24
  const updateResult = mergeUpdateConfigPatch(config, body.update);
@@ -6,6 +6,7 @@ import { getConnectorAccount, init_connector_account_repository, listConnectorAc
6
6
  import { decideConnectorApproval, getConnectorApproval, listConnectorApprovals, listConnectorConnections } from "../../../storage/sqlite/connector-repository.js";
7
7
  import { getConnectorSyncPolicy, upsertConnectorSyncPolicy } from "../../../storage/sqlite/connector-sync-policy-repository.js";
8
8
  import { init_sqlite } from "../../../storage/sqlite/index.js";
9
+ import { listUnderstandingSourceGrants, revokeUnderstandingSourceGrant } from "../../../user-context/sources/repository.js";
9
10
  import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
10
11
  import { init_agent_scope, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
11
12
  import { activateComposioBackend, addComposioBackend, ensureComposioBackend, getComposioBackend, listComposioBackends, removeComposioBackend } from "../../../connectors/composio-backends.js";
@@ -27,7 +28,6 @@ import { composioLogoResponse } from "../../../connectors/composio-logo.js";
27
28
  import { inspectManagedComposioStatus } from "../../../connectors/composio-managed-client.js";
28
29
  import { appendComposioTriggerEvent, listComposioTriggerEvents } from "../../../connectors/composio-triggers.js";
29
30
  import { ingestLocalFolderSource } from "../../../connectors/connected-source-ingestion.js";
30
- import { listUnderstandingSourceGrants, revokeUnderstandingSourceGrant } from "../../../user-context/sources/repository.js";
31
31
  import { testConnectorInstance } from "../../../connectors/health.js";
32
32
  import { setConnectorEnabled } from "../../../connectors/lifecycle.js";
33
33
  import { projectComposioConnectionStatus } from "../../../connectors/runtime-status.js";
@@ -2,11 +2,11 @@ import { getSqliteDatabase, init_transaction } from "../../../storage/sqlite/tra
2
2
  import { getConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
3
3
  import { countKnowledgeSourceItems, deleteKnowledgeSourceItems } from "../../../storage/sqlite/knowledge-repository.js";
4
4
  import { init_sqlite } from "../../../storage/sqlite/index.js";
5
+ import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
6
+ import { getUnderstandingSourceGrant, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantPolicies } from "../../../user-context/sources/repository.js";
5
7
  import { init_agent_scope, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
6
8
  import { listUserModelObservations } from "../../../user-model/observation-repository.js";
7
9
  import "../../../user-model/index.js";
8
- import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
9
- import { getUnderstandingSourceGrant, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantPolicies } from "../../../user-context/sources/repository.js";
10
10
  import { listConnectedContentCandidates, readConnectedContent } from "../../../connectors/content-enrichment.js";
11
11
  import { listUnderstandingSourceDefinitions } from "../../../user-context/sources/catalog.js";
12
12
  //#region src/gateway/hono/routes/context-sources.ts
@@ -407,6 +407,7 @@ const AUTHENTICATED_LAZY_ROUTE_BUNDLES = [
407
407
  "/api/user-model",
408
408
  "/api/knowledge-memory",
409
409
  "/api/memory-maintenance",
410
+ "/api/memory-learning",
410
411
  "/api/turns"
411
412
  ]),
412
413
  load: async () => {
@@ -1,6 +1,6 @@
1
+ import { getWorkspacePath } from "../../../config/workspace-path-helpers.js";
1
2
  import { isManagedConnectorServer } from "../../../connectors/materialize.js";
2
3
  import { loadMergedMcpConfig } from "../../../agent/mcp/config.js";
3
- import { getWorkspacePath } from "../../../config/workspace-path-helpers.js";
4
4
  //#region src/gateway/hono/routes/mcp.ts
5
5
  function registerMcpRoutes(app, deps) {
6
6
  app.get("/api/mcp/servers", (c) => {
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerMemoryLearningRoutes(app: Hono, deps: AuthenticatedRouteDeps): void;