@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
@@ -0,0 +1,76 @@
1
+ import { getSqliteDatabase, init_transaction } from "../../../storage/sqlite/transaction.js";
2
+ import { getSessionMetadata } from "../../../storage/sqlite/session-read-repository.js";
3
+ import { init_session_repository } from "../../../storage/sqlite/session-repository.js";
4
+ import { getSessionConfig, init_config_repository } from "../../../storage/sqlite/config-repository.js";
5
+ import { bindOwnerIdentity } from "../../../user-context/identity-bindings.js";
6
+ import { canUseKnowledge, knowledgeExclusion } from "../../../knowledge-memory/usage-policy.js";
7
+ import { getKnowledgeItem } from "../../../knowledge-memory/repository.js";
8
+ import { init_config, resolveKnowledgeReadPolicy } from "../../../user-context/config.js";
9
+ import { enqueueConversationLearning, learningStatus } from "../../../memory-learning/repository.js";
10
+ import "../../../knowledge-memory/index.js";
11
+ import { resolveEffectiveAgentProfileForSession } from "../../../config/agent-profile.js";
12
+ //#region src/gateway/hono/routes/memory-learning.ts
13
+ init_config_repository();
14
+ init_transaction();
15
+ init_session_repository();
16
+ init_config();
17
+ function registerMemoryLearningRoutes(app, deps) {
18
+ app.get("/api/memory-learning/status", (c) => c.json(learningStatus(deps.service.currentConfig)));
19
+ app.get("/api/memory-learning/jobs/:id", (c) => {
20
+ const job = getSqliteDatabase().prepare(`SELECT job_id AS id, state, attempts, error_code AS errorCode,
21
+ created_at AS createdAt, updated_at AS updatedAt FROM memory_learning_jobs WHERE job_id = ? AND principal_id = 'local-owner'`).get(c.req.param("id"));
22
+ return job ? c.json({ job }) : c.json({ error: "Learning job not found" }, 404);
23
+ });
24
+ app.post("/api/memory-learning/rebuild", deps.strictRateLimitMiddleware, async (c) => {
25
+ const input = await c.req.json().catch(() => null);
26
+ if (!input || typeof input.conversationId !== "string") return c.json({ error: "conversationId is required" }, 400);
27
+ if (!getSessionMetadata(input.conversationId)) return c.json({ error: "Conversation not found" }, 404);
28
+ const jobId = enqueueConversationLearning(deps.service.currentConfig, input.conversationId, getSessionConfig(input.conversationId)?.workingDirectoryOverride ?? resolveEffectiveAgentProfileForSession(input.conversationId).resolvedWorkspacePath, true);
29
+ return jobId ? c.json({ jobId }, 202) : c.json({
30
+ queued: false,
31
+ reason: "not_eligible_or_already_queued"
32
+ });
33
+ });
34
+ app.post("/api/memory-learning/owner-identities", deps.strictRateLimitMiddleware, async (c) => {
35
+ const input = await c.req.json().catch(() => null);
36
+ if (!input || ![
37
+ "channel",
38
+ "accountId",
39
+ "peerId"
40
+ ].every((key) => typeof input[key] === "string" && input[key].trim())) return c.json({ error: "channel, accountId and peerId are required" }, 400);
41
+ bindOwnerIdentity(input);
42
+ return c.json({ ok: true });
43
+ });
44
+ app.get("/api/memory-learning/owner-identities", (c) => c.json({ identities: getSqliteDatabase().prepare(`
45
+ SELECT channel, account_id AS accountId, peer_id AS peerId, verified_at AS verifiedAt
46
+ FROM owner_identity_bindings WHERE principal_id = 'local-owner' AND revoked_at IS NULL ORDER BY verified_at DESC`).all() }));
47
+ app.delete("/api/memory-learning/owner-identities", deps.strictRateLimitMiddleware, async (c) => {
48
+ const input = await c.req.json().catch(() => null);
49
+ if (!input || ![
50
+ "channel",
51
+ "accountId",
52
+ "peerId"
53
+ ].every((key) => typeof input[key] === "string")) return c.json({ error: "Identity fields are required" }, 400);
54
+ getSqliteDatabase().prepare("UPDATE owner_identity_bindings SET revoked_at = ? WHERE channel = ? AND account_id = ? AND peer_id = ?").run(Date.now(), input.channel, input.accountId, input.peerId);
55
+ return c.json({ ok: true });
56
+ });
57
+ app.get("/api/knowledge-memory/:id/evidence", (c) => {
58
+ const item = getKnowledgeItem(c.req.param("id"));
59
+ const context = {
60
+ agentId: c.req.query("agentId") ?? item?.sourceAgentId ?? "main",
61
+ workspaceId: c.req.query("workspaceId") ?? (item?.scope.type === "workspace" ? item.scope.id : ""),
62
+ conversationId: c.req.query("conversationId") ?? item?.sourceConversationId ?? "",
63
+ projectId: c.req.query("projectId") ?? (item?.scope.type === "project" ? item.scope.id : void 0)
64
+ };
65
+ if (!item || !canUseKnowledge(item, context, resolveKnowledgeReadPolicy(deps.service.currentConfig.userContext.knowledgeMemory))) return c.json({
66
+ error: "Knowledge evidence not available",
67
+ reason: item ? knowledgeExclusion(item, context, resolveKnowledgeReadPolicy(deps.service.currentConfig.userContext.knowledgeMemory)) : "not_found"
68
+ }, 404);
69
+ const evidence = getSqliteDatabase().prepare(`SELECT e.source_type AS sourceType, e.source_ref AS sourceRef,
70
+ e.observed_at AS observedAt, e.redacted_excerpt AS excerpt FROM knowledge_evidence_links l
71
+ JOIN context_evidence e ON e.evidence_id = l.evidence_id WHERE l.knowledge_id = ?`).all(item.id);
72
+ return c.json({ evidence });
73
+ });
74
+ }
75
+ //#endregion
76
+ export { registerMemoryLearningRoutes };
@@ -1,11 +1,11 @@
1
- import { resolveModelsJsonPath } from "../../../config/paths.js";
2
- import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
3
1
  import { resolveEffectiveAgentConfigForAgent } from "../../../config/agent-profile.js";
4
2
  import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
3
+ import { resolveModelsJsonPath } from "../../../config/paths.js";
5
4
  import { computerModelProfile, init_model_policy, isDedicatedComputerModel } from "../../../computer/model-policy.js";
6
5
  import { init_models_json, loadModelsJson, saveModelsJson, validateModelsConfig } from "../../../config/models-json.js";
7
6
  import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
8
7
  import { getModelRegistry } from "../../../providers/model-registry.js";
8
+ import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
9
9
  import "../../../providers/constants.js";
10
10
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
11
11
  import { PROVIDER_META, getAllModels, getAllProviders, getAvailableModels, getProviderAuthState, init_providers, isProviderConfigured, isProviderConfiguredSync } from "../../../providers/index.js";
@@ -1,9 +1,9 @@
1
1
  import { NoteDeleteOutputSchema, NoteGetOutputSchema, ProductReadContracts } from "../../../../packages/gateway-contract/src/capabilities.js";
2
2
  import { init_src } from "../../../../packages/gateway-contract/src/index.js";
3
- import { CapabilityError } from "../../../capabilities/runtime/errors.js";
4
- import "../../../capabilities/runtime/dispatcher.js";
5
3
  import { init_session_key, resolveConversationId } from "../../../routing/session-key.js";
6
4
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-route.js";
5
+ import { CapabilityError } from "../../../capabilities/runtime/errors.js";
6
+ import "../../../capabilities/runtime/dispatcher.js";
7
7
  import { resolveGatewayEffectiveHost } from "../../../config/gateway-bind.js";
8
8
  import { getShareStore } from "../../../share/share-store.js";
9
9
  import { resolveShareUrl } from "../../../share/share-url.js";
@@ -1,5 +1,5 @@
1
- import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
2
1
  import { TracingConfigSchema, init_config } from "../../../observability/config.js";
2
+ import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
3
3
  import { configureTracing, localStore, testLangfuse, tracingConfig, tracingStatus } from "../../../observability/runtime.js";
4
4
  import { z } from "zod";
5
5
  import { Hono } from "hono";
@@ -7,12 +7,12 @@ import { loadTranscriptRowsForSession } from "../../../storage/sqlite/transcript
7
7
  import { init_sqlite } from "../../../storage/sqlite/index.js";
8
8
  import { ActivityService } from "../../../activity/service.js";
9
9
  import "../../../activity/index.js";
10
- import { CapabilityError } from "../../../capabilities/runtime/errors.js";
11
- import "../../../capabilities/runtime/dispatcher.js";
12
- import { resolveEffectiveAgentProfile } from "../../../config/agent-profile.js";
13
10
  import { listKnowledgeItems, writeKnowledgeItem } from "../../../knowledge-memory/repository.js";
14
11
  import "../../../knowledge-memory/index.js";
12
+ import { resolveEffectiveAgentProfile } from "../../../config/agent-profile.js";
15
13
  import { TaskReadModelProjector } from "../../../tasks/task-read-model-projector.js";
14
+ import { CapabilityError } from "../../../capabilities/runtime/errors.js";
15
+ import "../../../capabilities/runtime/dispatcher.js";
16
16
  import { ProjectWorkspaceConflictError, ProjectWorkspaceMissingError } from "../../../projects/workspace-project.js";
17
17
  import { inferProjectExecutionMode, inferProjectKind } from "../../../projects/project-kind.js";
18
18
  import { ProjectDeletionBlockedError, ProjectWorkspaceInUseError } from "../../../projects/project-service.js";
@@ -5,9 +5,9 @@ import { endpointContextSchema } from "../../../../packages/gateway-contract/src
5
5
  import { parseUserTurnDocument, userTurnDocumentRefIds } from "../../../../packages/gateway-contract/src/user-turn-document.js";
6
6
  import { init_src } from "../../../../packages/gateway-contract/src/index.js";
7
7
  import { endpointTurnClaimSchema, init_src as init_src$1 } from "../../../../packages/endpoint-tools-protocol/src/index.js";
8
+ import { init_providers, resolveModel } from "../../../providers/index.js";
8
9
  import { CapabilityError } from "../../../capabilities/runtime/errors.js";
9
10
  import "../../../capabilities/runtime/dispatcher.js";
10
- import { init_providers, resolveModel } from "../../../providers/index.js";
11
11
  import { getModelThinking } from "../../../providers/model-thinking.js";
12
12
  import { validateWebchatAttachments, validateWebchatContent } from "../../chat-limits.js";
13
13
  import { isTaskDestructiveCommand } from "../../../session/reset-triggers.js";
@@ -6,9 +6,9 @@ import { hasGatewayScope, init_gateway_scopes } from "../../security/gateway-sco
6
6
  import { enqueueTaskChangedEvent, init_task_change_events } from "../../../tasks/task-change-events.js";
7
7
  import { TaskRepository, init_task_repository } from "../../../tasks/task-repository.js";
8
8
  import { TaskRunRepository, init_task_run_repository } from "../../../tasks/task-run-repository.js";
9
+ import { TaskConversationRepository } from "../../../tasks/task-conversation-repository.js";
9
10
  import { CapabilityError } from "../../../capabilities/runtime/errors.js";
10
11
  import "../../../capabilities/runtime/dispatcher.js";
11
- import { TaskConversationRepository } from "../../../tasks/task-conversation-repository.js";
12
12
  import { TaskCriterionReviewRepository } from "../../../tasks/task-criterion-review-repository.js";
13
13
  import { TaskContextMutationOutputSchema } from "../../../tasks/capabilities/relations.js";
14
14
  import { TaskDeleteOutputSchema } from "../../../tasks/capabilities/management.js";
@@ -1,8 +1,8 @@
1
1
  import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
2
2
  import { getConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
3
3
  import { init_sqlite } from "../../../storage/sqlite/index.js";
4
- import { getWorkDiscoveryRun } from "../../../work-discovery/repository.js";
5
4
  import { getConnectorUnderstandingSourceRun } from "../../../user-context/sources/repository.js";
5
+ import { getWorkDiscoveryRun } from "../../../work-discovery/repository.js";
6
6
  import { isLocalUnderstandingSourceId } from "../../../user-context/sources/local-source-contract.js";
7
7
  import { normalizeUnderstandingSourceItems } from "../../../work-discovery/service.js";
8
8
  import { UnderstandingRefreshService } from "../../../user-context/sources/refresh-service.js";
@@ -1,10 +1,12 @@
1
1
  import { init_transaction, runSqliteWriteTransaction } from "../../../storage/sqlite/transaction.js";
2
2
  import { createCollaborationRule, getCollaborationRule, init_collaboration_rule_repository, listCollaborationRules, setCollaborationRuleStatus } from "../../../storage/sqlite/collaboration-rule-repository.js";
3
+ import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
4
+ import { listUnderstandingSourceGrants } from "../../../user-context/sources/repository.js";
3
5
  import { KnowledgeReviewConflictError, deleteKnowledgeItem, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
4
6
  import "../../../knowledge-memory/index.js";
7
+ import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "../../../user-model/goals.js";
5
8
  import { deleteUserAssertion, getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus, setUserAssertionScope } from "../../../user-model/repository.js";
6
9
  import { listActionRuleSuggestions } from "../../../user-model/action-rule-suggestions.js";
7
- import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "../../../user-model/goals.js";
8
10
  import { listUserAssertionEdges, listUserModelObservations } from "../../../user-model/observation-repository.js";
9
11
  import { applyUserProfilePatch, getUserProfileSnapshot } from "../../../user-model/profile.js";
10
12
  import { bootstrapUserModel } from "../../../user-model/bootstrap.js";
@@ -13,8 +15,7 @@ import "../../../user-model/index.js";
13
15
  import { listMemoryMaintenanceRuns } from "../../../memory-maintenance/service.js";
14
16
  import "../../../memory-maintenance/index.js";
15
17
  import { getExecutionContextAudit, recordExecutionContextFeedback } from "../../../agent/context/audit.js";
16
- import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
17
- import { listUnderstandingSourceGrants } from "../../../user-context/sources/repository.js";
18
+ import { registerMemoryLearningRoutes } from "./memory-learning.js";
18
19
  import { userInfo } from "node:os";
19
20
  //#region src/gateway/hono/routes/user-model.ts
20
21
  init_transaction();
@@ -209,6 +210,7 @@ function decodeMobileCursor(value) {
209
210
  }
210
211
  }
211
212
  function registerUserModelRoutes(authenticated, deps) {
213
+ registerMemoryLearningRoutes(authenticated, deps);
212
214
  const write = deps.strictRateLimitMiddleware;
213
215
  const userContextConfig = () => deps.service.currentConfig.userContext;
214
216
  const memorySettings = () => {
@@ -1,8 +1,8 @@
1
1
  import { voiceSelectionSchema } from "../../../../packages/realtime-protocol/src/voice-catalog.js";
2
2
  import { VOICE_TIMING_METRICS, createVoiceSessionRequestSchema, init_voice } from "../../../../packages/realtime-protocol/src/voice.js";
3
3
  import { getDefaultModelSync, init_providers, resolveModel } from "../../../providers/index.js";
4
- import { isPersonalConversation } from "../../../personal-agent/repository.js";
5
4
  import { completeWithResolvedCredentials } from "../../../providers/model-call.js";
5
+ import { isPersonalConversation } from "../../../personal-agent/repository.js";
6
6
  import { resolveSttProviderConfigSlice } from "../../../voice/stt/config-slice.js";
7
7
  import { STTTranscriptionError, transcribe } from "../../../voice/stt/transcribe-core.js";
8
8
  import { isSTTAvailable } from "../../../voice/stt/availability.js";
@@ -1,11 +1,11 @@
1
1
  import { normalizeAgentId } from "../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
3
3
  import { init_agent_scope } from "../agent/agent-scope.js";
4
- import { AgentCatalogService } from "../agent-catalog/service.js";
5
- import { ConfigSchema, init_schema } from "../config/schema.js";
6
4
  import { resolveEffectiveAgentConfigForAgent } from "../config/agent-profile.js";
5
+ import { ConfigSchema, init_schema } from "../config/schema.js";
7
6
  import { fetchWithTimeoutGuarded } from "../media-shared/http/provider-http.js";
8
7
  import "../media-shared/http/index.js";
8
+ import { AgentCatalogService } from "../agent-catalog/service.js";
9
9
  import { getImageGenerationProvider, listImageGenerationProvidersSummary } from "../agent/image/generation/provider-registry.js";
10
10
  //#region src/gateway/image-generation-setup.ts
11
11
  init_repository();
@@ -1,8 +1,8 @@
1
1
  import path from "node:path";
2
2
  import fs from "node:fs";
3
3
  import { createHash } from "node:crypto";
4
- import fs$1 from "node:fs/promises";
5
4
  import net from "node:net";
5
+ import fs$1 from "node:fs/promises";
6
6
  import { homedir } from "os";
7
7
  //#region src/gateway/lock.ts
8
8
  /**
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { configureTracing } from "../../observability/runtime.js";
4
3
  import { getModelRegistry } from "../../providers/model-registry.js";
5
4
  import { init_providers } from "../../providers/index.js";
5
+ import { configureTracing } from "../../observability/runtime.js";
6
6
  import { evictAllEmbeddedSessionRunners } from "../../agent/embedded/session-runner.js";
7
7
  import { reloadImageGenerationProviders } from "../../agent/image/generation/provider-registry.js";
8
8
  import { loadConfig, saveConfig } from "../../config/loader.js";
@@ -20,21 +20,22 @@ import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js
20
20
  import { init_session_repository, listSessionMetadata, patchSessionMetadata } from "../storage/sqlite/session-repository.js";
21
21
  import { getSessionConfig, init_config_repository } from "../storage/sqlite/config-repository.js";
22
22
  import { init_sqlite } from "../storage/sqlite/index.js";
23
- import { normalizeAgentId } from "../agent-catalog/id.js";
24
- import { init_agent_scope, listAgentEntries, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
25
- import { init_paths, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
26
- import { flushTracing } from "../observability/runtime.js";
23
+ import { listKnowledgeItems } from "../knowledge-memory/repository.js";
27
24
  import { init_config, resolveKnowledgeReadPolicy } from "../user-context/config.js";
28
- import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
29
25
  import { init_agent_session_key, resolveAgentMainConversationId } from "../routing/agent-session-key.js";
30
26
  import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
27
+ import "../knowledge-memory/index.js";
28
+ import { normalizeAgentId } from "../agent-catalog/id.js";
29
+ import { init_agent_scope, listAgentEntries, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
31
30
  import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
32
31
  import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
32
+ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
33
+ import { init_paths, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
33
34
  import { prewarmModelRegistry } from "../providers/model-registry.js";
34
35
  import { init_providers, providers_exports } from "../providers/index.js";
36
+ import { flushTracing } from "../observability/runtime.js";
35
37
  import { AI_USAGE_RETENTION_MS, markStaleAiUsageEventsUnknown, pruneAiUsageEvents } from "../storage/sqlite/ai-usage-repository.js";
36
- import { listKnowledgeItems } from "../knowledge-memory/repository.js";
37
- import "../knowledge-memory/index.js";
38
+ import { getWorkspacePath } from "../config/workspace-path-helpers.js";
38
39
  import { getPersonalAgentByConversation } from "../personal-agent/repository.js";
39
40
  import { TaskConversationRepository } from "../tasks/task-conversation-repository.js";
40
41
  import { getEmbeddedExecutionSession } from "../agent/embedded/execution-context.js";
@@ -75,10 +76,9 @@ import { bootstrapApplicationStateSync } from "../bootstrap/application-state.js
75
76
  import { setPairingBroadcastSink } from "../channels/pairing/pairing-events.js";
76
77
  import { registerClarificationChannelRuntime } from "./clarify-runtime.js";
77
78
  import { ChannelManager } from "../channels/manager.js";
78
- import { getWorkspacePath } from "../config/workspace-path-helpers.js";
79
- import "../config/index.js";
80
79
  import { ChatPreviewService } from "../chat-previews/service.js";
81
80
  import "../chat-previews/index.js";
81
+ import "../config/index.js";
82
82
  import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
83
83
  import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
84
84
  import "../knowledge/index.js";
@@ -94,10 +94,6 @@ import { DiscussionSealer } from "../discussions/sealer.js";
94
94
  import "../discussions/index.js";
95
95
  import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
96
96
  import "../endpoint-tools/index.js";
97
- import { HomeCapabilityPreflightService } from "../home-intelligence/capability-preflight.js";
98
- import { HomeAdviceGenerator } from "../home-intelligence/generator.js";
99
- import { HomeIntelligenceHost } from "../home-intelligence/host.js";
100
- import { HomeSnapshotBuilder } from "../home-intelligence/snapshot.js";
101
97
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
102
98
  import { prepareAutomationAgentSession } from "./automation-agent-session.js";
103
99
  import { stopTailscaleExposure } from "./tailscale-lifecycle.js";
@@ -159,6 +155,10 @@ import { TaskMainUpdateDecisionService } from "../tasks/task-main-update-decisio
159
155
  import { selectTaskMainUpdateAttempt, submitAndConfirmTaskMainUpdate } from "../tasks/task-main-update-input.js";
160
156
  import { checkAppContextAccess, prepareAppContext } from "./service/app-context-access.js";
161
157
  import { applyAutomaticVoiceLanguage, inferProductLanguageFromEnvironment, initializeVoiceDefaults } from "../voice/language-profile.js";
158
+ import { HomeAdviceGenerator } from "../home-intelligence/generator.js";
159
+ import { HomeIntelligenceHost } from "../home-intelligence/host.js";
160
+ import { HomeSnapshotBuilder } from "../home-intelligence/snapshot.js";
161
+ import { HomeCapabilityPreflightService } from "../home-intelligence/capability-preflight.js";
162
162
  import crypto from "node:crypto";
163
163
  //#region src/gateway/service.ts
164
164
  init_session_repository();
@@ -1,8 +1,8 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
2
- import { AgentCatalogService } from "../agent-catalog/service.js";
3
2
  import { getModelCatalogStore, init_model_catalog_store } from "../providers/model-catalog-store.js";
4
3
  import { getAvailableModels, init_providers } from "../providers/index.js";
5
4
  import { compareCatalogModels } from "../providers/model-catalog-ranking.js";
5
+ import { AgentCatalogService } from "../agent-catalog/service.js";
6
6
  import { prepareUpdateGlobalDefaults } from "./global-defaults-admin.js";
7
7
  //#region src/gateway/xopc-cloud-capability-setup.ts
8
8
  init_repository();
@@ -1,8 +1,8 @@
1
1
  import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
2
+ import { resolveModelSelector } from "../config/agent-model-intents.js";
2
3
  import { init_providers, resolveModel } from "../providers/index.js";
3
4
  import { completeWithResolvedCredentials, isLocalModelBaseUrl } from "../providers/model-call.js";
4
5
  import { extractAssistantText, getAssistantMessageErrorReason } from "../providers/model-response.js";
5
- import { resolveModelSelector } from "../config/agent-model-intents.js";
6
6
  import { z } from "zod";
7
7
  //#region src/home-intelligence/generator.ts
8
8
  init_agent_scope();
@@ -1,10 +1,10 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { HomeAdviceBudgetExceededError, isHomeProseLocalized } from "./generator.js";
3
4
  import { homePatternKey } from "./strategy.js";
5
+ import { HomeAdvicePolicy } from "./policy.js";
4
6
  import { HomeIntelligenceRepository } from "./repository.js";
5
7
  import { HomeOpportunityApplicationService } from "./application-service.js";
6
- import { HomeAdvicePolicy } from "./policy.js";
7
- import { HomeAdviceBudgetExceededError, isHomeProseLocalized } from "./generator.js";
8
8
  import { buildHomeOpportunityNotification } from "./notification.js";
9
9
  import { createHash } from "node:crypto";
10
10
  //#region src/home-intelligence/host.ts
@@ -1,6 +1,6 @@
1
- import { init_paths, resolveSkillsDir } from "../config/paths.js";
2
1
  import { listKnowledgeItems } from "../knowledge-memory/repository.js";
3
2
  import "../knowledge-memory/index.js";
3
+ import { init_paths, resolveSkillsDir } from "../config/paths.js";
4
4
  import { ProjectService } from "../projects/project-service.js";
5
5
  import { resolveWorkspaceSkillsDir } from "../agent/skills/workspace-skills-dir.js";
6
6
  import { ImportError } from "./types.js";
@@ -0,0 +1,10 @@
1
+ import type { DatabaseSync } from 'node:sqlite';
2
+ /** Index the retained source text; source deletion removes chunks through the FK. */
3
+ export declare function replaceKnowledgeChunks(db: DatabaseSync, item: {
4
+ id: string;
5
+ contentHash: string;
6
+ normalizedText?: string;
7
+ sensitivity: string;
8
+ deletedAt?: string;
9
+ consentReceiptId?: string;
10
+ }): void;
@@ -0,0 +1,28 @@
1
+ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
+ import { createHash } from "node:crypto";
3
+ //#region src/knowledge/chunks.ts
4
+ /** Index the retained source text; source deletion removes chunks through the FK. */
5
+ function replaceKnowledgeChunks(db, item) {
6
+ db.prepare("DELETE FROM knowledge_source_chunks WHERE source_item_id = ?").run(item.id);
7
+ if (!item.normalizedText || item.deletedAt || item.sensitivity === "secret" || item.sensitivity === "regulated") return;
8
+ const text = item.normalizedText;
9
+ for (let offset = 0, ordinal = 0; offset < text.length; ordinal += 1) {
10
+ let end = Math.min(text.length, offset + 2400);
11
+ if (end < text.length) {
12
+ const boundary = text.lastIndexOf("\n", end);
13
+ if (boundary > offset + 1200) end = boundary + 1;
14
+ }
15
+ const id = createHash("sha256").update(`${item.id}:${item.contentHash}:${ordinal}`).digest("hex");
16
+ db.prepare(`INSERT INTO knowledge_source_chunks(chunk_id, source_item_id, source_version, consent_receipt_id, ordinal, locator, text)
17
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(id, item.id, item.contentHash, item.consentReceiptId ?? null, ordinal, JSON.stringify({
18
+ startChar: offset,
19
+ endChar: end
20
+ }), text.slice(offset, end));
21
+ if (end === text.length) break;
22
+ offset = end - 150;
23
+ }
24
+ }
25
+ var init_chunks = __esmMin((() => {}));
26
+ //#endregion
27
+ init_chunks();
28
+ export { init_chunks, replaceKnowledgeChunks };
@@ -1,11 +1,20 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import { claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, listKnowledgeSourceItems, pruneBoundedKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
3
+ import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
4
+ import { createContextEvidence, init_context_evidence_repository } from "../storage/sqlite/context-evidence-repository.js";
5
+ import { init_chunks, replaceKnowledgeChunks } from "./chunks.js";
6
+ import { claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, pruneBoundedKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
4
7
  import { init_sqlite } from "../storage/sqlite/index.js";
8
+ import { getActiveUnderstandingConsent } from "../user-context/sources/consent-repository.js";
9
+ import { clearMemoryAudit } from "../user-context/memory-suppression.js";
5
10
  import { listKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem } from "../knowledge-memory/repository.js";
6
11
  import "../knowledge-memory/index.js";
12
+ import { consentFilteredText } from "../user-context/sources/consent-fields.js";
7
13
  import { randomUUID } from "node:crypto";
8
14
  //#region src/knowledge/connected-knowledge-pipeline.ts
15
+ init_chunks();
16
+ init_context_evidence_repository();
17
+ init_transaction();
9
18
  init_sqlite();
10
19
  init_logger();
11
20
  const log = createLogger("ConnectedKnowledge");
@@ -49,7 +58,7 @@ var ConnectedKnowledgePipeline = class {
49
58
  recordIds: []
50
59
  };
51
60
  for (const item of claimed) try {
52
- const content = boundedText(item);
61
+ let content = boundedText(item);
53
62
  const existing = listKnowledgeItems({
54
63
  recordClass: "source_index",
55
64
  limit: 2e3
@@ -78,7 +87,43 @@ var ConnectedKnowledgePipeline = class {
78
87
  result.ignored += 1;
79
88
  continue;
80
89
  }
90
+ const grant = getSqliteDatabase().prepare(`SELECT grant_id FROM understanding_source_grants
91
+ WHERE status = 'active' AND json_extract(config_json, '$.sourceInstanceId') = ? LIMIT 1`).get(item.sourceInstanceId);
92
+ const consent = grant ? getActiveUnderstandingConsent(grant.grant_id) : void 0;
93
+ const filtered = consent ? item.itemType === "local_file" ? consent.allowedFields.includes("content") ? item.normalizedText : void 0 : consentFilteredText(item.normalizedText, new Set(consent.allowedFields)) : void 0;
94
+ if (consent) content = (filtered ?? "").slice(0, MAX_ITEM_CHARS);
95
+ replaceKnowledgeChunks(getSqliteDatabase(), {
96
+ ...item,
97
+ normalizedText: filtered,
98
+ consentReceiptId: consent?.id
99
+ });
100
+ if (!content.trim()) {
101
+ completeKnowledgeSourceItemSynthesis({
102
+ itemId: item.id,
103
+ workerId: this.workerId,
104
+ status: "ignored"
105
+ });
106
+ result.ignored += 1;
107
+ continue;
108
+ }
109
+ const evidence = createContextEvidence({
110
+ sourceType: "connector",
111
+ sourceInstanceId: item.sourceInstanceId,
112
+ sourceItemId: item.id,
113
+ sourceRef: `knowledge-source://${item.id}`,
114
+ contentHash: item.contentHash,
115
+ trustLevel: "untrusted",
116
+ observedAt: Date.parse(item.sourceUpdatedAt ?? item.updatedAt)
117
+ });
81
118
  const written = writeKnowledgeItem({
119
+ verification: "supported",
120
+ claimMode: "reported",
121
+ sensitivity: item.sensitivity,
122
+ evidence: [{
123
+ id: evidence.id,
124
+ contentHash: item.contentHash,
125
+ consentReceiptId: consent?.id
126
+ }],
82
127
  kind: "workspace_fact",
83
128
  scope: {
84
129
  type: "workspace",
@@ -97,7 +142,8 @@ var ConnectedKnowledgePipeline = class {
97
142
  provider: providerId(item),
98
143
  sourceInstanceId: item.sourceInstanceId,
99
144
  sourceItemId: item.id,
100
- payloadRef: item.payloadRef
145
+ payloadRef: item.payloadRef,
146
+ consentReceiptId: consent?.id
101
147
  },
102
148
  replaceExisting: true
103
149
  });
@@ -126,36 +172,24 @@ var ConnectedKnowledgePipeline = class {
126
172
  return result;
127
173
  }
128
174
  pruneBoundedRetention(sourceInstanceId, olderThanMs) {
129
- const expired = [];
130
- for (let offset = 0;; offset += 500) {
131
- const page = listKnowledgeSourceItems({
132
- sourceInstanceId,
133
- retentionClass: "bounded",
134
- retentionBeforeMs: olderThanMs,
135
- includeDeleted: true,
136
- limit: 500,
137
- offset
138
- });
139
- expired.push(...page);
140
- if (page.length < 500) break;
141
- }
142
- let derivedDeleted = 0;
143
- const expiredIds = new Set(expired.map((item) => item.id));
144
- for (const item of listKnowledgeItems({
145
- recordClass: "source_index",
146
- limit: 2e3
147
- })) if (typeof item.source.sourceItemId === "string" && expiredIds.has(item.source.sourceItemId)) {
148
- if (transitionKnowledgeStatus({
149
- id: item.id,
150
- status: "archived",
151
- actor: "maintenance",
152
- reason: "Connected source retention window expired."
153
- })) derivedDeleted += 1;
154
- }
155
- return {
156
- rawDeleted: pruneBoundedKnowledgeSourceItems(sourceInstanceId, olderThanMs),
157
- derivedDeleted
158
- };
175
+ return runSqliteWriteTransaction((db) => {
176
+ const expiredSourceQuery = `SELECT item_id FROM knowledge_source_items
177
+ WHERE source_instance_id = ? AND retention_class = 'bounded'
178
+ AND COALESCE(source_updated_at, occurred_at, updated_at) < ?`;
179
+ const indexes = db.prepare(`SELECT knowledge_id FROM knowledge_items
180
+ WHERE record_class = 'source_index'
181
+ AND json_extract(source_json, '$.sourceItemId') IN (${expiredSourceQuery})`).all(sourceInstanceId, olderThanMs);
182
+ for (const item of indexes) {
183
+ clearMemoryAudit(db, "knowledge", item.knowledge_id);
184
+ db.prepare("DELETE FROM knowledge_items WHERE knowledge_id = ?").run(item.knowledge_id);
185
+ }
186
+ db.prepare(`UPDATE context_evidence SET redacted_excerpt = NULL
187
+ WHERE source_item_id IN (${expiredSourceQuery})`).run(sourceInstanceId, olderThanMs);
188
+ return {
189
+ rawDeleted: pruneBoundedKnowledgeSourceItems(sourceInstanceId, olderThanMs),
190
+ derivedDeleted: indexes.length
191
+ };
192
+ });
159
193
  }
160
194
  };
161
195
  //#endregion
@@ -1,5 +1,5 @@
1
- import { KnowledgeIngestionService, SqliteKnowledgeSourceStateStore } from "./ingestion-service.js";
2
1
  import { ConnectedKnowledgePipeline } from "./connected-knowledge-pipeline.js";
2
+ import { KnowledgeIngestionService, SqliteKnowledgeSourceStateStore } from "./ingestion-service.js";
3
3
  import { startConnectedKnowledgeCoordinator } from "./coordinator.js";
4
4
  import { LocalFolderKnowledgeSourceAdapter } from "./local-folder-adapter.js";
5
5
  export { ConnectedKnowledgePipeline, KnowledgeIngestionService, LocalFolderKnowledgeSourceAdapter, SqliteKnowledgeSourceStateStore, startConnectedKnowledgeCoordinator };
@@ -120,7 +120,11 @@ var KnowledgeIngestionService = class {
120
120
  cursorAfter = pulled.nextCursor;
121
121
  if (!pulled.hasMore) break;
122
122
  if (!pulled.nextCursor || pulled.nextCursor === pullCursor) throw new Error("Knowledge source returned an invalid pagination cursor.");
123
- if (page === MAX_PULL_PAGES - 1) throw new Error(`Knowledge source exceeded the ${MAX_PULL_PAGES}-page safety limit.`);
123
+ if (page === MAX_PULL_PAGES - 1) {
124
+ warnings.push(`Knowledge source paused after ${MAX_PULL_PAGES} pages; resume from the saved cursor.`);
125
+ snapshotComplete = false;
126
+ break;
127
+ }
124
128
  pullCursor = pulled.nextCursor;
125
129
  }
126
130
  const tombstones = deletionInputs(params.instanceId, params.collectionScope, snapshotComplete ? snapshotExternalIds : void 0);
@@ -1,7 +1,8 @@
1
1
  import type { KnowledgePullInput, KnowledgePullResult, KnowledgeSourceAdapter } from './types.js';
2
2
  export declare class LocalFolderKnowledgeSourceAdapter implements KnowledgeSourceAdapter {
3
3
  private readonly rootPath;
4
+ private readonly pageSize;
4
5
  readonly kind = "local-folder";
5
- constructor(rootPath: string);
6
+ constructor(rootPath: string, pageSize?: number);
6
7
  pull(input: KnowledgePullInput): Promise<KnowledgePullResult>;
7
8
  }