@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
@@ -146,7 +146,7 @@ function reconcileEvidence(db, runId, principalId, now, limit, evidenceThreshold
146
146
  function activateKnowledge(db, runId, principalId, now, limit, metrics) {
147
147
  const rows = db.prepare(`SELECT knowledge_id FROM knowledge_items
148
148
  WHERE principal_id = ? AND record_class = 'memory' AND status = 'candidate'
149
- AND origin_class IN ('owner', 'agent', 'system') AND confidence >= 0.7
149
+ AND origin_class IN ('owner', 'agent', 'system') AND confidence >= 0.7 AND verification = 'supported'
150
150
  AND derived_from_recalled_context = 0
151
151
  AND (valid_from IS NULL OR valid_from <= ?) AND (valid_to IS NULL OR valid_to >= ?)
152
152
  AND (expires_at IS NULL OR expires_at >= ?) AND (review_at IS NULL OR review_at > ?)
@@ -166,14 +166,14 @@ function repairIndexes(db, runId, now, metrics) {
166
166
  LEFT JOIN user_assertions_fts f ON f.assertion_id = a.assertion_id
167
167
  WHERE f.assertion_id IS NULL`).get();
168
168
  const knowledgeMissing = db.prepare(`SELECT COUNT(*) AS count FROM knowledge_items k
169
- LEFT JOIN knowledge_items_fts f ON f.knowledge_id = k.knowledge_id
169
+ LEFT JOIN knowledge_search_fts f ON f.knowledge_id = k.knowledge_id
170
170
  WHERE f.knowledge_id IS NULL`).get();
171
171
  if (assertionMissing.count) db.prepare(`INSERT INTO user_assertions_fts(statement, assertion_id, slot_id)
172
172
  SELECT a.statement, a.assertion_id, a.slot_id FROM user_assertions a
173
173
  LEFT JOIN user_assertions_fts f ON f.assertion_id = a.assertion_id WHERE f.assertion_id IS NULL`).run();
174
- if (knowledgeMissing.count) db.prepare(`INSERT INTO knowledge_items_fts(content, knowledge_id)
175
- SELECT k.content, k.knowledge_id FROM knowledge_items k
176
- LEFT JOIN knowledge_items_fts f ON f.knowledge_id = k.knowledge_id WHERE f.knowledge_id IS NULL`).run();
174
+ if (knowledgeMissing.count) db.prepare(`INSERT INTO knowledge_search_fts(search_text, knowledge_id)
175
+ SELECT xopc_memory_search_text(k.content), k.knowledge_id FROM knowledge_items k
176
+ LEFT JOIN knowledge_search_fts f ON f.knowledge_id = k.knowledge_id WHERE f.knowledge_id IS NULL`).run();
177
177
  metrics.repairedIndexes = assertionMissing.count + knowledgeMissing.count;
178
178
  if (metrics.repairedIndexes) addDecision(db, runId, "index", "fts", "repair", "missing_index_rows", { missing: metrics.repairedIndexes }, { missing: 0 }, now);
179
179
  }
@@ -7,8 +7,8 @@ import { init_note_markdown, parseNoteMarkdown } from "./note-markdown.js";
7
7
  import { init_notes_repository, listNoteProjectSummaries } from "../storage/sqlite/notes-repository.js";
8
8
  import { changedFieldsFromPatch, emitActivity, previewText, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
9
9
  import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
10
- import { DomainOutboxDispatcher } from "../infra/domain-outbox-dispatcher.js";
11
10
  import { completeWithResolvedCredentials } from "../providers/model-call.js";
11
+ import { DomainOutboxDispatcher } from "../infra/domain-outbox-dispatcher.js";
12
12
  import { partitionAttachmentsByReference } from "./note-attachment-sync.js";
13
13
  import { buildNoteAgentContextArtifact, getCachedNoteAgentContextArtifact } from "./agent-context.js";
14
14
  import { revokeNoteShareRecords } from "../share/note-share-revocation.js";
@@ -1,8 +1,8 @@
1
1
  import { init_context, runWithLogContext } from "../utils/logger/context.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { CredentialResolver, init_credentials } from "../auth/credentials.js";
5
4
  import { TracingConfigSchema, defaultTracingConfig, init_config } from "./config.js";
5
+ import { CredentialResolver, init_credentials } from "../auth/credentials.js";
6
6
  import { LangfuseTarget } from "./langfuse.js";
7
7
  import { boundedJson, redactString } from "./sanitize.js";
8
8
  import { LocalTraceStore } from "./store.js";
@@ -5,14 +5,14 @@ import { PersonalProactiveMessageSchema } from "../../../packages/gateway-contra
5
5
  import { init_src } from "../../../packages/gateway-contract/src/index.js";
6
6
  import { init_session_instance_repository, readCurrentTranscriptId } from "../../storage/sqlite/session-instance-repository.js";
7
7
  import { appendTranscriptEntry, init_transcript_repository } from "../../storage/sqlite/transcript-repository.js";
8
+ import { resolveUserContextSessionAccess } from "../../user-context/access-policy.js";
8
9
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
9
10
  import { init_providers, resolveModel } from "../../providers/index.js";
10
- import { resolveUserContextSessionAccess } from "../../user-context/access-policy.js";
11
+ import { completeWithResolvedCredentials } from "../../providers/model-call.js";
12
+ import { extractAssistantText, getAssistantMessageErrorReason, stripCodeFences } from "../../providers/model-response.js";
11
13
  import { getPersonalAgent } from "../repository.js";
12
14
  import { DurableState } from "../../storage/sqlite/durable-state.js";
13
15
  import { enqueueDue, enqueueWakeup, getAttention, getAttentionSources, getProactivitySettings, isQuiet, listAttention, localDay, preparationStrategy, recordFeedback, reserveModelCall, saveAttention, sourceFingerprint, userText } from "./repository.js";
14
- import { completeWithResolvedCredentials } from "../../providers/model-call.js";
15
- import { extractAssistantText, getAssistantMessageErrorReason, stripCodeFences } from "../../providers/model-response.js";
16
16
  import { emitSessionTranscriptUpdate } from "../../session/transcript-events.js";
17
17
  import { PERSONAL_PERSONA_GUIDANCE } from "../persona.js";
18
18
  import { personalConversationState } from "../conversation-state.js";
@@ -2,14 +2,14 @@ import { isXopcDatabaseOpen } from "../storage/sqlite/connection.js";
2
2
  import { getSqliteDatabase } from "../storage/sqlite/transaction.js";
3
3
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
4
4
  import { init_sqlite } from "../storage/sqlite/index.js";
5
+ import { isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems } from "../knowledge-memory/repository.js";
6
+ import { resolveUserContextSessionAccess } from "../user-context/access-policy.js";
7
+ import "../knowledge-memory/index.js";
5
8
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
6
9
  import { init_agent_config } from "../agent-config/index.js";
7
10
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
8
- import { isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems } from "../knowledge-memory/repository.js";
9
- import "../knowledge-memory/index.js";
10
- import { getProjectForSession } from "../projects/workspace.js";
11
- import { resolveUserContextSessionAccess } from "../user-context/access-policy.js";
12
11
  import { getActiveAssertionForSlot } from "../user-model/repository.js";
12
+ import { getProjectForSession } from "../projects/workspace.js";
13
13
  import { canUseAssertion } from "../user-model/usage-policy.js";
14
14
  import "../user-model/index.js";
15
15
  import { isPersonalConversation } from "./repository.js";
@@ -10,11 +10,11 @@ import { getSessionConfig, init_config_repository } from "../storage/sqlite/conf
10
10
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
11
11
  import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
12
12
  import { init_providers, resolveModel } from "../providers/index.js";
13
+ import { completeWithResolvedCredentials } from "../providers/model-call.js";
14
+ import { extractAssistantText, getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
13
15
  import { getPersonalAgentByConversation } from "./repository.js";
14
16
  import { TaskConversationRepository } from "../tasks/task-conversation-repository.js";
15
17
  import { loadProfileBootstrapFiles } from "../agent/bootstrap/load-bootstrap-files.js";
16
- import { completeWithResolvedCredentials } from "../providers/model-call.js";
17
- import { extractAssistantText, getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
18
18
  import { emitSessionTranscriptUpdate } from "../session/transcript-events.js";
19
19
  import { PERSONAL_PERSONA_GUIDANCE } from "./persona.js";
20
20
  import { PERSONAL_REPLY_EXAMPLES, PERSONAL_REPLY_STYLE_RULES } from "./reply-style.js";
@@ -1,15 +1,15 @@
1
1
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
2
2
  import { init_session_repository, patchSessionMetadata } from "../storage/sqlite/session-repository.js";
3
3
  import { init_config_repository, setSessionConfig } from "../storage/sqlite/config-repository.js";
4
+ import { createConversation, init_conversation_repository } from "../storage/sqlite/conversation-repository.js";
4
5
  import { ResponsePreferencesSchema } from "../agent-config/schema.js";
5
6
  import { init_agent_config } from "../agent-config/index.js";
6
7
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
7
- import { AgentCatalogService } from "../agent-catalog/service.js";
8
- import { createConversation, init_conversation_repository } from "../storage/sqlite/conversation-repository.js";
9
8
  import { getAvailableModels, init_providers } from "../providers/index.js";
10
9
  import { DEFAULT_PERSONAL_PREFERENCES, getPersonalAgent, personalAgentId } from "./repository.js";
11
10
  import { PERSONAL_MAIN_TOOL_IDS, PERSONAL_READ_TOOL_ALIASES } from "./policy.js";
12
11
  import { getModelThinking } from "../providers/model-thinking.js";
12
+ import { AgentCatalogService } from "../agent-catalog/service.js";
13
13
  import { personalInstructions, upgradePersonalInstructions } from "./prompts.js";
14
14
  import { completePersonalOnboarding } from "./onboarding.js";
15
15
  import { z } from "zod";
@@ -1,5 +1,5 @@
1
- import { init_resolution, resolveConnectedPlatformDiscovery, resolveConnectedPlatformEndpoint, setActivePlatformDiscovery } from "./resolution.js";
2
1
  import { AgentManifestSchema, PlatformCapabilitySchema, PlatformConfigSchema, PlatformDiscoverySchema, PlatformEventSchema, init_contracts } from "./contracts.js";
2
+ import { init_resolution, resolveConnectedPlatformDiscovery, resolveConnectedPlatformEndpoint, setActivePlatformDiscovery } from "./resolution.js";
3
3
  import { PLATFORM_RUNTIME_PROFILE, PLATFORM_RUNTIME_PROVIDER, PlatformRuntimeClient, RuntimeCommandSchema, discoverPlatform } from "./client.js";
4
4
  import { processRuntimeCommand } from "./worker.js";
5
5
  //#region src/platform/index.ts
@@ -1,12 +1,12 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
+ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
+ import { assertCurrentModelProvider, init_provider_policy, isRetiredModelProvider } from "./provider-policy.js";
2
4
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
5
+ import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
6
+ import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
3
7
  import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
- import { assertCurrentModelProvider, init_provider_policy, isRetiredModelProvider } from "./provider-policy.js";
5
8
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
6
- import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
7
9
  import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
8
- import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
9
- import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
10
10
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
11
11
  import { applyOfficialModelMetadataCorrections, getSupplementalModels, init_model_supplements } from "./model-supplements.js";
12
12
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
@@ -0,0 +1,2 @@
1
+ /** Local-only processing requires a loopback endpoint, regardless of provider name. */
2
+ export declare function isLoopbackModel(baseUrl: string): boolean;
@@ -0,0 +1,16 @@
1
+ //#region src/providers/local-model.ts
2
+ /** Local-only processing requires a loopback endpoint, regardless of provider name. */
3
+ function isLoopbackModel(baseUrl) {
4
+ try {
5
+ return [
6
+ "localhost",
7
+ "127.0.0.1",
8
+ "[::1]",
9
+ "::1"
10
+ ].includes(new URL(baseUrl).hostname);
11
+ } catch {
12
+ return false;
13
+ }
14
+ }
15
+ //#endregion
16
+ export { isLoopbackModel };
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths_state, resolveXopcCloudCatalogCachePath } from "../config/paths-state.js";
3
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
3
  import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
5
5
  import { ImageGenerationCapabilitiesSchema, init_models_json } from "../config/models-json.js";
6
6
  import { voiceManifestSchema } from "../../packages/realtime-protocol/src/voice-catalog.js";
7
7
  import { init_voice } from "../../packages/realtime-protocol/src/voice.js";
@@ -1,11 +1,11 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
4
+ import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
5
5
  import { resolveModelsJsonPath } from "../config/paths.js";
6
6
  import { init_provider_policy, isRetiredModelProvider } from "./provider-policy.js";
7
- import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
8
7
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
8
+ import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
9
9
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
10
10
  import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
11
11
  import { existsSync, readFileSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths, resolveModelsJsonPath } from "../config/paths.js";
3
- import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "./register-bundled-oauth-flows.js";
4
3
  import { assertCurrentModelProvider, init_provider_policy } from "./provider-policy.js";
4
+ import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "./register-bundled-oauth-flows.js";
5
5
  import { CredentialResolver, init_credentials } from "../auth/credentials.js";
6
6
  import { XopcModelCredentialStore, init_model_credential_store } from "../auth/model-credential-store.js";
7
7
  import { init_register_runtime_providers, registerRuntimeProviders } from "./register-runtime-providers.js";
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { getModelRegistry, init_model_registry } from "./model-registry.js";
3
4
  import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
4
5
  import { CredentialResolver, init_credentials } from "../auth/credentials.js";
5
- import { getModelRegistry, init_model_registry } from "./model-registry.js";
6
6
  import { getProviderAuthService, init_provider_auth_service } from "./provider-auth-service.js";
7
7
  import { evictAllEmbeddedSessionRunners } from "../agent/embedded/session-runner.js";
8
8
  //#region src/providers/provider-disconnect-core.ts
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
2
  import { init_provider_policy, isRetiredModelProvider } from "./provider-policy.js";
4
3
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
4
+ import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
5
5
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
6
6
  //#region src/providers/register-runtime-providers.ts
7
7
  function registerRuntimeProvider(modelRuntime, source) {
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
4
3
  import { ModelCatalogPersistence, init_model_catalog_persistence } from "./model-catalog-persistence.js";
5
4
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
6
5
  import { getModelRegistry, init_model_registry } from "./model-registry.js";
6
+ import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
7
7
  import { reloadImageGenerationProviders } from "../agent/image/generation/provider-registry.js";
8
8
  import { disconnectProviderCore } from "./provider-disconnect-core.js";
9
9
  import { XopcCloudModelSource } from "./xopc-cloud-model-source.js";
@@ -1,9 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_account_id, normalizeAccountId } from "./account-id.js";
3
- import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
4
3
  import { getConversationRouting } from "../storage/sqlite/conversation-repository.js";
5
4
  import { init_agent_session_key, resolveAgentPeerConversationId } from "./agent-session-key.js";
6
5
  import { init_session_key, resolveConversationId } from "./session-key.js";
6
+ import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
7
7
  import { init_bindings, parseBindingRules, resolveRoute as resolveRoute$1 } from "./bindings.js";
8
8
  //#region src/routing/resolve-route.ts
9
9
  /**
@@ -1,8 +1,8 @@
1
1
  import { validateConversationId } from "../../packages/gateway-contract/src/conversation-identity.js";
2
2
  import { init_src } from "../../packages/gateway-contract/src/index.js";
3
+ import { init_agent_session_key, normalizeAgentId } from "./agent-session-key.js";
3
4
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
4
5
  import { init_agent_scope, listAgentEntries, resolveAgentIdByWorkspacePath, resolveDefaultAgentId } from "../agent/agent-scope.js";
5
- import { init_agent_session_key, normalizeAgentId } from "./agent-session-key.js";
6
6
  import { randomUUID } from "node:crypto";
7
7
  //#region src/routing/resolve-tui-session-key.ts
8
8
  init_src();
@@ -4,6 +4,7 @@ import { TaskRepository, init_task_repository } from "../../tasks/task-repositor
4
4
  import { TaskRunRepository, init_task_run_repository } from "../../tasks/task-run-repository.js";
5
5
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
6
6
  import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
7
+ import { resolveModelSelector } from "../../config/agent-model-intents.js";
7
8
  import { init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
8
9
  import { ExecutionEnvironmentStore } from "../../execution-environments/store.js";
9
10
  import { ProjectStore } from "../../projects/project-store.js";
@@ -12,7 +13,6 @@ import { removeCommandContainer } from "../../agent/commands/command-isolation.j
12
13
  import { inspectGitRepository } from "../../execution-environments/git.js";
13
14
  import { TaskContextRepository } from "../../tasks/task-context-repository.js";
14
15
  import { TaskApplicationService } from "../../tasks/task-application-service.js";
15
- import { resolveModelSelector } from "../../config/agent-model-intents.js";
16
16
  import { sceneContentHash } from "../contracts.js";
17
17
  import { SceneConflictError, SceneNotFoundError, SceneRepository } from "../repository.js";
18
18
  import { SceneSetupError } from "../service.js";
@@ -5,8 +5,8 @@ import { isCronConversationId } from "../routing/agent-session-key.js";
5
5
  import { init_session_key } from "../routing/session-key.js";
6
6
  import { init_providers, resolveModel } from "../providers/index.js";
7
7
  import { completeWithResolvedCredentials } from "../providers/model-call.js";
8
- import { readAgentMessageContent } from "../agent/memory/agent-message-access.js";
9
8
  import { stripRuntimeContextFromUserMessage } from "./user-message-display.js";
9
+ import { readAgentMessageContent } from "../agent/memory/agent-message-access.js";
10
10
  //#region src/session/session-title.ts
11
11
  init_session_key();
12
12
  init_providers();
@@ -13,8 +13,8 @@ import { appendCompactionBoundaryIfUnchanged, appendTranscriptEntry, listCompact
13
13
  import { getSessionConfig, setSessionConfig } from "../storage/sqlite/config-repository.js";
14
14
  import { init_sqlite } from "../storage/sqlite/index.js";
15
15
  import { init_agent_session_key, resolveAgentIdFromConversationId } from "../routing/agent-session-key.js";
16
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
17
16
  import { resolveUserContextSessionAccess } from "../user-context/access-policy.js";
17
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
18
18
  import { DurableState } from "../storage/sqlite/durable-state.js";
19
19
  import { transcriptRowsToClientHistory } from "./client-history.js";
20
20
  import { SessionCompactor } from "../agent/memory/compaction.js";
@@ -551,6 +551,7 @@ var SessionStore = class {
551
551
  handover: result.handover,
552
552
  audit: result.audit,
553
553
  sourceEntries: expectedSnapshot.entries,
554
+ readPolicy: access.knowledgePolicy,
554
555
  writePolicy: access.knowledge && access.knowledgePolicy.scopes.includes("session") && access.knowledgePolicy.contentSources.includes("memory") ? this.options.config.userContext.knowledgeMemory.writePolicy : "deny"
555
556
  });
556
557
  log.info({
@@ -1,5 +1,6 @@
1
1
  import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
2
  import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "./transaction.js";
3
+ import { init_chunks, replaceKnowledgeChunks } from "../../knowledge/chunks.js";
3
4
  import { randomUUID } from "node:crypto";
4
5
  //#region src/storage/sqlite/knowledge-repository.ts
5
6
  function parseTimestamp(value) {
@@ -185,6 +186,10 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
185
186
  updated_at = excluded.updated_at`).run(id, input.sourceInstanceId, input.collectionScope, input.externalId, input.itemType, input.authorRole ?? null, parseTimestamp(input.occurredAt), parseTimestamp(input.sourceUpdatedAt), input.contentHash, input.normalizedText ?? null, input.payloadRef ?? null, JSON.stringify(input.metadata ?? {}), input.sensitivity ?? "normal", input.retentionClass ?? "bounded", input.synthesisPipeline ?? "user_understanding", input.synthesisStatus ?? "pending", parseTimestamp(input.deletedAt), existing?.created_at ?? nowMs, nowMs);
186
187
  const row = db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ?`).get(id);
187
188
  items.push(sourceItemFromRow(row));
189
+ replaceKnowledgeChunks(db, {
190
+ ...sourceItemFromRow(row),
191
+ normalizedText: void 0
192
+ });
188
193
  changedItemIds.push(id);
189
194
  const changeKind = input.deletedAt ? "deleted" : existing ? "modified" : "added";
190
195
  db.prepare(`INSERT INTO knowledge_source_changes (
@@ -351,6 +356,7 @@ function completeKnowledgeSourceItemSynthesis(input) {
351
356
  });
352
357
  }
353
358
  var init_knowledge_repository = __esmMin((() => {
359
+ init_chunks();
354
360
  init_transaction();
355
361
  }));
356
362
  //#endregion
@@ -0,0 +1,125 @@
1
+ ALTER TABLE knowledge_items ADD COLUMN claim_mode TEXT NOT NULL DEFAULT 'observed'
2
+ CHECK (claim_mode IN ('explicit', 'observed', 'inferred', 'reported'));
3
+ ALTER TABLE knowledge_items ADD COLUMN verification TEXT NOT NULL DEFAULT 'supported'
4
+ CHECK (verification IN ('supported', 'tentative', 'conflicted'));
5
+ ALTER TABLE knowledge_items ADD COLUMN sensitivity TEXT NOT NULL DEFAULT 'normal'
6
+ CHECK (sensitivity IN ('normal', 'personal', 'secret', 'regulated'));
7
+ ALTER TABLE user_assertion_evidence ADD COLUMN content_hash TEXT;
8
+ CREATE TRIGGER assertion_evidence_snapshot_insert AFTER INSERT ON user_assertion_evidence BEGIN
9
+ UPDATE user_assertion_evidence SET content_hash = (SELECT content_hash FROM context_evidence WHERE evidence_id = NEW.evidence_id)
10
+ WHERE assertion_id = NEW.assertion_id AND evidence_id = NEW.evidence_id AND relation = NEW.relation;
11
+ END;
12
+ CREATE TRIGGER assertion_evidence_snapshot_update AFTER UPDATE OF confidence ON user_assertion_evidence BEGIN
13
+ UPDATE user_assertion_evidence SET content_hash = (SELECT content_hash FROM context_evidence WHERE evidence_id = NEW.evidence_id)
14
+ WHERE assertion_id = NEW.assertion_id AND evidence_id = NEW.evidence_id AND relation = NEW.relation;
15
+ END;
16
+ UPDATE knowledge_items SET claim_mode = CASE origin_class
17
+ WHEN 'owner' THEN 'explicit' WHEN 'untrusted' THEN 'reported' ELSE 'observed' END,
18
+ verification = CASE WHEN origin_class = 'untrusted' AND record_class = 'memory' THEN 'tentative' ELSE 'supported' END;
19
+
20
+ CREATE TABLE knowledge_revisions (
21
+ revision_id TEXT PRIMARY KEY,
22
+ knowledge_id TEXT NOT NULL REFERENCES knowledge_items(knowledge_id) ON DELETE CASCADE,
23
+ content TEXT NOT NULL,
24
+ source_json TEXT NOT NULL,
25
+ created_at INTEGER NOT NULL
26
+ );
27
+ CREATE INDEX knowledge_revisions_item ON knowledge_revisions(knowledge_id, created_at);
28
+ CREATE TABLE knowledge_evidence_links (
29
+ knowledge_id TEXT NOT NULL REFERENCES knowledge_items(knowledge_id) ON DELETE CASCADE,
30
+ evidence_id TEXT NOT NULL REFERENCES context_evidence(evidence_id) ON DELETE CASCADE,
31
+ content_hash TEXT,
32
+ consent_receipt_id TEXT REFERENCES understanding_consent_receipts(receipt_id),
33
+ PRIMARY KEY (knowledge_id, evidence_id)
34
+ );
35
+ CREATE TABLE owner_identity_bindings (
36
+ principal_id TEXT NOT NULL,
37
+ channel TEXT NOT NULL,
38
+ account_id TEXT NOT NULL,
39
+ peer_id TEXT NOT NULL,
40
+ verified_at INTEGER NOT NULL,
41
+ revoked_at INTEGER,
42
+ PRIMARY KEY (channel, account_id, peer_id)
43
+ );
44
+ CREATE TABLE memory_learning_jobs (
45
+ job_id TEXT PRIMARY KEY,
46
+ principal_id TEXT NOT NULL DEFAULT 'local-owner',
47
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
48
+ transcript_id TEXT NOT NULL,
49
+ through_seq INTEGER NOT NULL,
50
+ start_seq INTEGER,
51
+ extractor_version TEXT NOT NULL,
52
+ policy_hash TEXT NOT NULL,
53
+ workspace_id TEXT NOT NULL,
54
+ state TEXT NOT NULL CHECK (state IN ('queued','running','succeeded','retry_wait','failed','canceled')),
55
+ lease_token TEXT,
56
+ lease_until INTEGER,
57
+ attempts INTEGER NOT NULL DEFAULT 0,
58
+ next_attempt_at INTEGER NOT NULL,
59
+ error_code TEXT,
60
+ created_at INTEGER NOT NULL,
61
+ updated_at INTEGER NOT NULL,
62
+ UNIQUE(conversation_id, transcript_id, through_seq, extractor_version, policy_hash)
63
+ );
64
+ CREATE INDEX memory_learning_jobs_due ON memory_learning_jobs(state, next_attempt_at, lease_until);
65
+ CREATE TABLE memory_source_learning_jobs (
66
+ job_id TEXT PRIMARY KEY,
67
+ chunk_id TEXT NOT NULL REFERENCES knowledge_source_chunks(chunk_id) ON DELETE CASCADE,
68
+ agent_id TEXT NOT NULL,
69
+ workspace_id TEXT NOT NULL,
70
+ consent_receipt_id TEXT NOT NULL REFERENCES understanding_consent_receipts(receipt_id),
71
+ policy_hash TEXT NOT NULL,
72
+ state TEXT NOT NULL CHECK(state IN ('queued','running','succeeded','retry_wait','failed','canceled')),
73
+ lease_token TEXT,
74
+ lease_until INTEGER,
75
+ attempts INTEGER NOT NULL DEFAULT 0,
76
+ next_attempt_at INTEGER NOT NULL,
77
+ error_code TEXT,
78
+ created_at INTEGER NOT NULL,
79
+ updated_at INTEGER NOT NULL,
80
+ UNIQUE(chunk_id, agent_id, consent_receipt_id, policy_hash)
81
+ );
82
+ CREATE INDEX memory_source_learning_due ON memory_source_learning_jobs(state, next_attempt_at, lease_until);
83
+ CREATE TABLE memory_learning_receipts (
84
+ run_id TEXT PRIMARY KEY REFERENCES task_run_receipts(run_id) ON DELETE CASCADE,
85
+ learned_at INTEGER NOT NULL,
86
+ knowledge_id TEXT
87
+ );
88
+ CREATE TABLE memory_learning_cursors (
89
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
90
+ transcript_id TEXT NOT NULL,
91
+ processed_seq INTEGER NOT NULL DEFAULT 0,
92
+ observed_seq INTEGER NOT NULL DEFAULT 0,
93
+ updated_at INTEGER NOT NULL,
94
+ PRIMARY KEY (conversation_id, transcript_id)
95
+ );
96
+ CREATE TABLE knowledge_source_chunks (
97
+ chunk_id TEXT PRIMARY KEY,
98
+ source_item_id TEXT NOT NULL REFERENCES knowledge_source_items(item_id) ON DELETE CASCADE,
99
+ source_version TEXT NOT NULL,
100
+ consent_receipt_id TEXT REFERENCES understanding_consent_receipts(receipt_id),
101
+ ordinal INTEGER NOT NULL,
102
+ locator TEXT NOT NULL,
103
+ text TEXT NOT NULL,
104
+ UNIQUE(source_item_id, ordinal)
105
+ );
106
+ CREATE VIRTUAL TABLE knowledge_chunks_fts USING fts5(search_text, chunk_id UNINDEXED, tokenize='unicode61');
107
+ CREATE TRIGGER knowledge_chunk_insert AFTER INSERT ON knowledge_source_chunks BEGIN
108
+ INSERT INTO knowledge_chunks_fts(search_text, chunk_id) VALUES (xopc_memory_search_text(NEW.text), NEW.chunk_id);
109
+ END;
110
+ CREATE TRIGGER knowledge_chunk_delete AFTER DELETE ON knowledge_source_chunks BEGIN
111
+ DELETE FROM knowledge_chunks_fts WHERE chunk_id = OLD.chunk_id;
112
+ END;
113
+ CREATE VIRTUAL TABLE knowledge_search_fts USING fts5(search_text, knowledge_id UNINDEXED, tokenize='unicode61');
114
+ INSERT INTO knowledge_search_fts SELECT xopc_memory_search_text(content), knowledge_id FROM knowledge_items;
115
+ DROP TABLE knowledge_items_fts;
116
+ CREATE TRIGGER knowledge_search_insert AFTER INSERT ON knowledge_items BEGIN
117
+ INSERT INTO knowledge_search_fts VALUES (xopc_memory_search_text(NEW.content), NEW.knowledge_id);
118
+ END;
119
+ CREATE TRIGGER knowledge_search_update AFTER UPDATE OF content ON knowledge_items BEGIN
120
+ DELETE FROM knowledge_search_fts WHERE knowledge_id = OLD.knowledge_id;
121
+ INSERT INTO knowledge_search_fts VALUES (xopc_memory_search_text(NEW.content), NEW.knowledge_id);
122
+ END;
123
+ CREATE TRIGGER knowledge_search_delete AFTER DELETE ON knowledge_items BEGIN
124
+ DELETE FROM knowledge_search_fts WHERE knowledge_id = OLD.knowledge_id;
125
+ END;
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 244;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 245;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -1,5 +1,6 @@
1
1
  import { __esmMin } from "../../../../_virtual/_rolldown/runtime.js";
2
2
  import { init_sql_assets, resolveSqliteAssetPath } from "../sql-assets.js";
3
+ import { init_search_text, memorySearchText } from "../../../knowledge-memory/search-text.js";
3
4
  import { createLogger } from "../../../utils/logger/index.js";
4
5
  import { init_logger } from "../../../utils/logger.js";
5
6
  import { currentOperationId, init_operation_context } from "../../../infra/operation-context.js";
@@ -56,8 +57,9 @@ function applySingleMigration(db, migration, discardOldScenes = false) {
56
57
  * Each step runs in its own transaction and updates schema_meta on success.
57
58
  */
58
59
  function applyPendingMigrations(db, options = {}) {
60
+ db.function("xopc_memory_search_text", { deterministic: true }, (value) => memorySearchText(String(value ?? "")));
59
61
  db.function("xopc_operation_id", () => currentOperationId() ?? null);
60
- const targetVersion = options.targetVersion ?? 244;
62
+ const targetVersion = options.targetVersion ?? 245;
61
63
  let currentVersion = readSchemaVersion(db);
62
64
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
63
65
  if (!options.migrationsDir && currentVersion < 165) throw new DatabaseSchemaTooOldError(currentVersion, 165);
@@ -95,7 +97,7 @@ function applyPendingMigrations(db, options = {}) {
95
97
  }
96
98
  /** Inspect schema version without mutating the database. */
97
99
  function inspectSchemaMigrationStatus(db, options = {}) {
98
- const appVersion = options.targetVersion ?? 244;
100
+ const appVersion = options.targetVersion ?? 245;
99
101
  const dbVersion = readSchemaVersion(db);
100
102
  if (dbVersion > appVersion) return {
101
103
  dbVersion,
@@ -126,6 +128,7 @@ function inspectSchemaMigrationStatus(db, options = {}) {
126
128
  }
127
129
  var log, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION;
128
130
  var init_runner = __esmMin((() => {
131
+ init_search_text();
129
132
  init_logger();
130
133
  init_operation_context();
131
134
  init_schema_version();
@@ -137,7 +140,7 @@ var init_runner = __esmMin((() => {
137
140
  init_errors();
138
141
  log = createLogger("Sqlite:Migrations");
139
142
  XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
140
- XOPC_DB_SCHEMA_VERSION = 244;
143
+ XOPC_DB_SCHEMA_VERSION = 245;
141
144
  }));
142
145
  //#endregion
143
146
  init_runner();
@@ -28,7 +28,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
28
28
  currentVersion = 165;
29
29
  }
30
30
  applyPendingMigrations(db, {
31
- targetVersion: 244,
31
+ targetVersion: 245,
32
32
  databasePath: fresh ? void 0 : options.databasePath
33
33
  });
34
34
  }
@@ -2,10 +2,10 @@ import { ProductReadContracts } from "../../../packages/gateway-contract/src/cap
2
2
  import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
3
  import { TaskRepository, init_task_repository } from "../task-repository.js";
4
4
  import { TaskRunRepository, init_task_run_repository } from "../task-run-repository.js";
5
- import { CapabilityError } from "../../capabilities/runtime/errors.js";
6
- import { defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
7
5
  import { TaskConversationRepository } from "../task-conversation-repository.js";
8
6
  import { TaskReadModelProjector } from "../task-read-model-projector.js";
7
+ import { CapabilityError } from "../../capabilities/runtime/errors.js";
8
+ import { defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
9
9
  import { TaskContextRepository } from "../task-context-repository.js";
10
10
  import { TaskDependencyService } from "../task-dependency-service.js";
11
11
  import { TaskCriterionReviewRepository } from "../task-criterion-review-repository.js";
@@ -2,9 +2,9 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { TaskRepository, init_task_repository } from "./task-repository.js";
4
4
  import { TaskRunRepository, init_task_run_repository } from "./task-run-repository.js";
5
+ import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
5
6
  import { normalizeAgentId } from "../agent-catalog/id.js";
6
7
  import { init_agent_scope, listAgentEntries } from "../agent/agent-scope.js";
7
- import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
8
8
  import { TaskConversationRepository } from "./task-conversation-repository.js";
9
9
  import { TaskContextRepository } from "./task-context-repository.js";
10
10
  //#region src/tasks/task-handoff-service.ts
@@ -1,9 +1,9 @@
1
1
  import { TaskRepository, init_task_repository } from "./task-repository.js";
2
2
  import { TaskRunRepository, init_task_run_repository } from "./task-run-repository.js";
3
3
  import { init_providers, resolveModel } from "../providers/index.js";
4
- import { getPersonalAgentByConversation } from "../personal-agent/repository.js";
5
4
  import { completeWithResolvedCredentials } from "../providers/model-call.js";
6
5
  import { extractAssistantText, getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
6
+ import { getPersonalAgentByConversation } from "../personal-agent/repository.js";
7
7
  import { TaskCollaborationRepository } from "./task-collaboration-repository.js";
8
8
  //#region src/tasks/task-main-update-decision-service.ts
9
9
  init_providers();
@@ -8,13 +8,13 @@ import { cancelQueuedSessionInput, claimNextSessionInput, finishSessionInputRun,
8
8
  import { appendComposerInputHistory, listComposerInputHistory } from "../../storage/sqlite/composer-input-history-repository.js";
9
9
  import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
10
10
  import { init_sqlite } from "../../storage/sqlite/index.js";
11
+ import { init_agent_session_key, resolveAgentIdFromConversationId } from "../../routing/agent-session-key.js";
11
12
  import { normalizeAgentId } from "../../agent-catalog/id.js";
12
13
  import { init_agent_scope, listAgentEntries } from "../../agent/agent-scope.js";
13
- import { AgentCatalogService } from "../../agent-catalog/service.js";
14
- import { init_paths } from "../../config/paths.js";
15
- import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
16
- import { init_agent_session_key, resolveAgentIdFromConversationId } from "../../routing/agent-session-key.js";
17
14
  import { resolveEffectiveAgentProfile } from "../../config/agent-profile.js";
15
+ import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
16
+ import { init_paths } from "../../config/paths.js";
17
+ import { getWorkspacePath } from "../../config/workspace-path-helpers.js";
18
18
  import { effectiveWorkspacePathForSession } from "../../session/session-workspace.js";
19
19
  import { ProjectService } from "../../projects/project-service.js";
20
20
  import { inferSuggestedProjectDefaultAgentId } from "../../projects/project-agent-suggestion.js";
@@ -23,6 +23,7 @@ import { buildSessionTimeline } from "../../session/transcript-outline.js";
23
23
  import { transcriptRowsToClientHistory } from "../../session/client-history.js";
24
24
  import { createCreateShareTool, isShareToolAvailable } from "../../agent/tools/create-share-tool.js";
25
25
  import { evictEmbeddedSessionRunner } from "../../agent/embedded/session-runner.js";
26
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
26
27
  import { SessionIndex } from "../../session/manager.js";
27
28
  import "../../session/index.js";
28
29
  import { parseModelRef } from "../../agent/models/selection.js";
@@ -31,7 +32,6 @@ import { buildReviewContext, resolveGitRoot } from "../../review/review-git.js";
31
32
  import { MessageBus, MessageBusShutdownError } from "../../infra/bus/queue.js";
32
33
  import "../../infra/bus/index.js";
33
34
  import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
34
- import { getWorkspacePath } from "../../config/workspace-path-helpers.js";
35
35
  import "../../config/index.js";
36
36
  import { buildWorkflowChildTools } from "../../agent/workflow/workflow-child-tools.js";
37
37
  import { WorkflowRunService } from "../../workflows/service/workflow-run-service.js";