@xopcai/xopc 0.0.374 → 0.0.376

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 (304) 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/{activity-store-BeYLqqr8.js → activity-store-CvR3rjdp.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BrA20N2m.js → agent-avatar-dicebear-B6OsxiBw.js} +1 -1
  6. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-MB_QmjX-.js +1 -0
  7. package/dist/gateway/static/root/assets/agent-plugin-dialog-Bpcf0zhP.js +1 -0
  8. package/dist/gateway/static/root/assets/agents-BQ7ag_R3.js +66 -0
  9. package/dist/gateway/static/root/assets/{agents-admin-api-B4tgTbWG.js → agents-admin-api-DsXvJeqd.js} +1 -1
  10. package/dist/gateway/static/root/assets/{app-management-settings-panel-BXahEVPm.js → app-management-settings-panel-9JzhRHSD.js} +1 -1
  11. package/dist/gateway/static/root/assets/{appearance-settings-CE2qJMkD.js → appearance-settings-CoyZuGAt.js} +1 -1
  12. package/dist/gateway/static/root/assets/{apps-page-DGVOnCxZ.js → apps-page-CcbCxZaw.js} +1 -1
  13. package/dist/gateway/static/root/assets/{archive-plugin-bI9OLnXj.js → archive-plugin-kfDRSd7K.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-BWL7eT4_.js → automations-page-DZJKbmlm.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-ChKT1JN6.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-dOwLzjeH.js → binary-plugins-d4QP_iyy.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-3n446-mX.js → block-editor-DraiSml9.js} +2 -2
  18. package/dist/gateway/static/root/assets/{browser-automation-inputs-i7h1Svpf.js → browser-automation-inputs-BAiaU9gl.js} +1 -1
  19. package/dist/gateway/static/root/assets/browser-automations-page-Bo40qRor.js +3 -0
  20. package/dist/gateway/static/root/assets/browser-settings-page-Dg4S7ph5.js +3 -0
  21. package/dist/gateway/static/root/assets/{capabilities-D4KFLtqM.js → capabilities-B-vsqiw2.js} +1 -1
  22. package/dist/gateway/static/root/assets/{capabilities-CquUV0DP.js → capabilities-DQEeiNq_.js} +1 -1
  23. package/dist/gateway/static/root/assets/capabilities-page-CuHSjBDG.js +2 -0
  24. package/dist/gateway/static/root/assets/capabilities-settings-panel-bxxADxzW.js +8 -0
  25. package/dist/gateway/static/root/assets/{capability-header-actions-BRMqvQVb.js → capability-header-actions-CaH0L2sV.js} +1 -1
  26. package/dist/gateway/static/root/assets/channels-Drx78hEY.js +1 -0
  27. package/dist/gateway/static/root/assets/{chat-terminal-dock-BRdzCjWO.js → chat-terminal-dock-hZnKhClF.js} +2 -2
  28. package/dist/gateway/static/root/assets/{computer-settings-page-BhCHMRpD.js → computer-settings-page-CYEA9B-G.js} +1 -1
  29. package/dist/gateway/static/root/assets/{connector-service-page-BXE8Z-Ll.js → connector-service-page-DXi2Bx2u.js} +1 -1
  30. package/dist/gateway/static/root/assets/connectors-page-BCWPY5hs.js +1 -0
  31. package/dist/gateway/static/root/assets/{date-picker-BJ7N92wm.js → date-picker-BW_xBw2L.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-gyxCM-hb.js → dependency-picker-ByRPupfC.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-B-WM4l-L.js → desktop-pet-DTcVMPlC.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-settings-usJqcew5.js → desktop-pet-settings-BkMP5pdR.js} +1 -1
  35. package/dist/gateway/static/root/assets/{device-pairing-wizard-DoSR4DGk.js → device-pairing-wizard-5kYuK9oW.js} +1 -1
  36. package/dist/gateway/static/root/assets/{directory-picker-path-field-DqVlV2YH.js → directory-picker-path-field-DIYIejyX.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-debug-page-CbgEonkK.js → extension-debug-page-QCUvXcP2.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-page-CUule9SU.js → extension-page-BMeQveJ_.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-provider-DxlAZ2iy.js → extension-provider-CDOEBj7F.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-settings-page-_OFukkEJ.js → extension-settings-page-D-M7P4HQ.js} +1 -1
  41. package/dist/gateway/static/root/assets/{fallback-models-CiSc3h8i.js → fallback-models-5DaUVrLS.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-config-swr-BoRkBnsw.js → gateway-config-swr-CWIVt5XM.js} +1 -1
  43. package/dist/gateway/static/root/assets/{gateway-realtime-C3WQQY10.js → gateway-realtime-DC8N3fNU.js} +1 -1
  44. package/dist/gateway/static/root/assets/gateway-realtime-store-BkE2mHog.js +1 -0
  45. package/dist/gateway/static/root/assets/gateway-settings-DK2NzPkL.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-startup-retry-TYSQEQcG.js → gateway-startup-retry-pVqdX0dO.js} +1 -1
  47. package/dist/gateway/static/root/assets/home-page-A3oTV3Vq.js +2 -0
  48. package/dist/gateway/static/root/assets/{image-generation-api-_pKiNfSq.js → image-generation-api-CX6__We2.js} +1 -1
  49. package/dist/gateway/static/root/assets/{imports-page-DdvIj-ZL.js → imports-page-b0ILSTz1.js} +1 -1
  50. package/dist/gateway/static/root/assets/index-Cz75qf5b.js +106 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DbqFlNsF.js → keyboard-shortcuts-settings-DGl7wSHG.js} +1 -1
  52. package/dist/gateway/static/root/assets/{local-app-workbench-page-REowUzkp.js → local-app-workbench-page--W2QjBqz.js} +1 -1
  53. package/dist/gateway/static/root/assets/{local-apps-page-DdCMNn_z.js → local-apps-page-8SQ85WLr.js} +1 -1
  54. package/dist/gateway/static/root/assets/{local-session-drafts-Cg9RdsNN.js → local-session-drafts-LCEmswHW.js} +1 -1
  55. package/dist/gateway/static/root/assets/{locale-store-rWFLl-p4.js → locale-store-UEl-U1DO.js} +1 -1
  56. package/dist/gateway/static/root/assets/logs-page-BAQeHGd4.js +2 -0
  57. package/dist/gateway/static/root/assets/{management-settings-D4vcSRE3.js → management-settings-DoXDsSSN.js} +1 -1
  58. package/dist/gateway/static/root/assets/{markdown-view-BHFFusQs.js → markdown-view-DUo9Tl3H.js} +1 -1
  59. package/dist/gateway/static/root/assets/{media-plugins-BVPTMWJI.js → media-plugins-8zr2wlMR.js} +1 -1
  60. package/dist/gateway/static/root/assets/{messages-C1SUo4gG.js → messages-Uqz0xpsK.js} +2 -2
  61. package/dist/gateway/static/root/assets/models-hub-cache-3HOFy11k.js +1 -0
  62. package/dist/gateway/static/root/assets/note-detail-panel-Cg65uYJ3.js +5 -0
  63. package/dist/gateway/static/root/assets/{notes-api-CSLVCZBn.js → notes-api-bDQOslzF.js} +1 -1
  64. package/dist/gateway/static/root/assets/notes-page-DDUlWJOk.js +8 -0
  65. package/dist/gateway/static/root/assets/number-input-DDeqHK-G.js +1 -0
  66. package/dist/gateway/static/root/assets/{page-context-capture-button-D7Y4vFRN.js → page-context-capture-button-o-i2_7Jz.js} +1 -1
  67. package/dist/gateway/static/root/assets/personal-page-E9-LBR1_.js +1 -0
  68. package/dist/gateway/static/root/assets/{product-open-page-CK_czbBx.js → product-open-page-DWgjStlK.js} +1 -1
  69. package/dist/gateway/static/root/assets/{product-preview-content-CU6KlaVP.js → product-preview-content-BWQRI242.js} +1 -1
  70. package/dist/gateway/static/root/assets/{project-detail-page-c3ye2bdq.js → project-detail-page-FjGobz6n.js} +1 -1
  71. package/dist/gateway/static/root/assets/{projects-page-BA1UuuRF.js → projects-page-CVhXJp7f.js} +1 -1
  72. package/dist/gateway/static/root/assets/{registry-api-CoMBYjHD.js → registry-api-CftkuRz7.js} +1 -1
  73. package/dist/gateway/static/root/assets/remote-access-hub-B2AcKWlb.js +1 -0
  74. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Cxjmwdyf.js → runtime-tools-settings-panel-DmOfq9ay.js} +1 -1
  75. package/dist/gateway/static/root/assets/{scenes-page-Av47PHdM.js → scenes-page-QQ2CiTee.js} +2 -2
  76. package/dist/gateway/static/root/assets/schema-form-TbUx_9NF.js +1 -0
  77. package/dist/gateway/static/root/assets/{send-session-input-CLhR1uEp.js → send-session-input-D4c72mD6.js} +1 -1
  78. package/dist/gateway/static/root/assets/{session-api-u_4_kFQt.js → session-api-DtpzfFNw.js} +1 -1
  79. package/dist/gateway/static/root/assets/session-manager-De46GeR0.js +16 -0
  80. package/dist/gateway/static/root/assets/sessions-page-CquSXQHo.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-advanced-gate-BOHKIN4t.js +1 -0
  82. package/dist/gateway/static/root/assets/{settings-page-BeVtwwVd.js → settings-page-NncRVc1e.js} +1 -1
  83. package/dist/gateway/static/root/assets/setup-status-panel-t1vcGUsK.js +1 -0
  84. package/dist/gateway/static/root/assets/{share-link-dialog-XhiuPKF4.js → share-link-dialog-DGUiTTZ3.js} +1 -1
  85. package/dist/gateway/static/root/assets/{share-preview-page-Vc0TQuZ8.js → share-preview-page-BDl6XGKm.js} +1 -1
  86. package/dist/gateway/static/root/assets/{shares-api-BVSb1vh4.js → shares-api-BIx5ji2U.js} +1 -1
  87. package/dist/gateway/static/root/assets/shares-settings-DVM6xJuW.js +1 -0
  88. package/dist/gateway/static/root/assets/{skill-api-Dgwc707w.js → skill-api-Crld1PEV.js} +1 -1
  89. package/dist/gateway/static/root/assets/{skill-reload-api-BsLx_FXd.js → skill-reload-api-D2HAboLP.js} +1 -1
  90. package/dist/gateway/static/root/assets/skills-page-DdD6C_Z8.js +2 -0
  91. package/dist/gateway/static/root/assets/{system-settings-panel-Ck6zGDHb.js → system-settings-panel-DUro5X0b.js} +1 -1
  92. package/dist/gateway/static/root/assets/{task-detail-page-C3ZPEZqw.js → task-detail-page-BYNcWubZ.js} +2 -2
  93. package/dist/gateway/static/root/assets/{task-expandable-content-DxeBTJvh.js → task-expandable-content-BKa2YEJy.js} +1 -1
  94. package/dist/gateway/static/root/assets/{theme-store-KcQhCg1-.js → theme-store-ByAapAD7.js} +1 -1
  95. package/dist/gateway/static/root/assets/tracing-settings-page-Dv-XBvpD.js +1 -0
  96. package/dist/gateway/static/root/assets/{tunnel-api-CjxMpAm2.js → tunnel-api-C2_SEpMa.js} +1 -1
  97. package/dist/gateway/static/root/assets/{usage-page-Dnhp9xQ4.js → usage-page-CqMzyGiK.js} +1 -1
  98. package/dist/gateway/static/root/assets/{use-autosave-C-IWxbzm.js → use-autosave-BhsYFV0o.js} +1 -1
  99. package/dist/gateway/static/root/assets/{use-composer-attachments-Dxphaxk-.js → use-composer-attachments-Bv4umde0.js} +1 -1
  100. package/dist/gateway/static/root/assets/{use-file-preview-expanded-Du37Gofn.js → use-file-preview-expanded-CBVymo3h.js} +2 -2
  101. package/dist/gateway/static/root/assets/user-model-page-EMn_nA9w.js +2 -0
  102. package/dist/gateway/static/root/assets/{voice-api-key-field-7BImy8Jc.js → voice-api-key-field-DRoGFFs6.js} +1 -1
  103. package/dist/gateway/static/root/assets/{voice-config-api-6MINytQl.js → voice-config-api-BwLiaw5J.js} +1 -1
  104. package/dist/gateway/static/root/assets/{work-discovery-overlay-CVd_y3K2.js → work-discovery-overlay-DbH62mtI.js} +1 -1
  105. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-Dwg40uGK.js → workflow-run-setup-panel-BYfytB9q.js} +2 -2
  106. package/dist/gateway/static/root/assets/workflows-page-rJqJ9dQo.js +6 -0
  107. package/dist/gateway/static/root/assets/{workspace-api-CXiyhTwv.js → workspace-api-BHy2a_hm.js} +2 -2
  108. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CaKc_J7j.js → xopc-cloud-account-card-DrAX_9m_.js} +1 -1
  109. package/dist/gateway/static/root/index.html +26 -26
  110. package/dist/package.js +1 -1
  111. package/dist/src/agent/agent-manager.d.ts +2 -7
  112. package/dist/src/agent/agent-manager.js +23 -52
  113. package/dist/src/agent/background-review/coordinator.js +1 -1
  114. package/dist/src/agent/background-review/prompts.d.ts +6 -0
  115. package/dist/src/agent/background-review/prompts.js +7 -1
  116. package/dist/src/agent/background-review/run-background-review.d.ts +3 -0
  117. package/dist/src/agent/background-review/run-background-review.js +183 -15
  118. package/dist/src/agent/context/coordinator.d.ts +1 -0
  119. package/dist/src/agent/context/coordinator.js +11 -2
  120. package/dist/src/agent/context/execution-context.js +40 -4
  121. package/dist/src/agent/context/project-context.js +11 -3
  122. package/dist/src/agent/embedded/model-runtime.js +1 -1
  123. package/dist/src/agent/embedded/run-for-session.js +2 -2
  124. package/dist/src/agent/embedded/run-turn.js +5 -5
  125. package/dist/src/agent/image/tool-model-config.js +1 -1
  126. package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
  127. package/dist/src/agent/mcp/connection-setup.d.ts +21 -0
  128. package/dist/src/agent/mcp/connection-setup.js +214 -0
  129. package/dist/src/agent/mcp/tool-catalog.d.ts +18 -0
  130. package/dist/src/agent/mcp/tool-catalog.js +120 -0
  131. package/dist/src/agent/memory/compaction-promotion.d.ts +2 -0
  132. package/dist/src/agent/memory/compaction-promotion.js +33 -2
  133. package/dist/src/agent/service.js +5 -5
  134. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  135. package/dist/src/agent/tools/factory.js +1 -1
  136. package/dist/src/agent/tools/knowledge-memory-tool.js +14 -6
  137. package/dist/src/auth/credentials.js +2 -2
  138. package/dist/src/auth/model-credential-store.js +1 -1
  139. package/dist/src/auth/sync-provider-auth.js +2 -2
  140. package/dist/src/automations/draft/automation-draft-service.js +1 -1
  141. package/dist/src/chat-commands/agent-edit.js +1 -1
  142. package/dist/src/chat-commands/builtins/config.js +1 -1
  143. package/dist/src/chat-commands/context.js +1 -1
  144. package/dist/src/cli/commands/agent.js +2 -2
  145. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  146. package/dist/src/cli/commands/doctor/checks/image-providers.js +1 -1
  147. package/dist/src/cli/commands/doctor/checks/provider-auth.js +2 -2
  148. package/dist/src/cli/commands/models.js +1 -1
  149. package/dist/src/cli/commands/onboard/model.js +3 -3
  150. package/dist/src/cli/commands/onboard.js +1 -1
  151. package/dist/src/cli/extension-cli-register.js +1 -1
  152. package/dist/src/config/agent-model-intents.js +1 -1
  153. package/dist/src/config/index.js +4 -4
  154. package/dist/src/config/loader.js +1 -1
  155. package/dist/src/config/models-json.js +2 -2
  156. package/dist/src/config/schema.d.ts +5 -0
  157. package/dist/src/config/schema.js +5 -5
  158. package/dist/src/connectors/connected-source-ingestion.js +45 -7
  159. package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
  160. package/dist/src/connectors/connected-source-understanding.js +59 -67
  161. package/dist/src/connectors/content-enrichment.js +1 -1
  162. package/dist/src/connectors/health.js +35 -2
  163. package/dist/src/connectors/learning-coordinator.js +2 -2
  164. package/dist/src/extensions/activation-context.js +1 -1
  165. package/dist/src/gateway/file-path-classifier.js +1 -1
  166. package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -0
  167. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  168. package/dist/src/gateway/hono/routes/config-patch/misc.js +5 -5
  169. package/dist/src/gateway/hono/routes/connectors.js +4 -4
  170. package/dist/src/gateway/hono/routes/context-sources.js +2 -2
  171. package/dist/src/gateway/hono/routes/lazy-bundles.js +2 -1
  172. package/dist/src/gateway/hono/routes/mcp.js +90 -1
  173. package/dist/src/gateway/hono/routes/memory-learning.d.ts +3 -0
  174. package/dist/src/gateway/hono/routes/memory-learning.js +76 -0
  175. package/dist/src/gateway/hono/routes/models.js +2 -2
  176. package/dist/src/gateway/hono/routes/observability.js +1 -1
  177. package/dist/src/gateway/hono/routes/projects.js +1 -1
  178. package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -1
  179. package/dist/src/gateway/hono/routes/user-model.js +5 -3
  180. package/dist/src/gateway/hono/routes/voice.js +1 -1
  181. package/dist/src/gateway/image-generation-setup.js +1 -1
  182. package/dist/src/gateway/service/config-coordinator.js +1 -1
  183. package/dist/src/gateway/service.js +18 -8
  184. package/dist/src/home-intelligence/generator.js +1 -1
  185. package/dist/src/imports/inventory.js +1 -1
  186. package/dist/src/infra/update-restart.d.ts +5 -0
  187. package/dist/src/infra/update-restart.js +38 -31
  188. package/dist/src/infra/update-runner.d.ts +1 -0
  189. package/dist/src/infra/update-runner.js +47 -18
  190. package/dist/src/knowledge/chunks.d.ts +10 -0
  191. package/dist/src/knowledge/chunks.js +28 -0
  192. package/dist/src/knowledge/connected-knowledge-pipeline.js +67 -33
  193. package/dist/src/knowledge/index.js +1 -1
  194. package/dist/src/knowledge/ingestion-service.js +5 -1
  195. package/dist/src/knowledge/local-folder-adapter.d.ts +2 -1
  196. package/dist/src/knowledge/local-folder-adapter.js +22 -13
  197. package/dist/src/knowledge-memory/domain.d.ts +4 -0
  198. package/dist/src/knowledge-memory/index.d.ts +1 -0
  199. package/dist/src/knowledge-memory/index.js +2 -1
  200. package/dist/src/knowledge-memory/repair-evidence.d.ts +2 -0
  201. package/dist/src/knowledge-memory/repair-evidence.js +57 -0
  202. package/dist/src/knowledge-memory/repository.d.ts +8 -0
  203. package/dist/src/knowledge-memory/repository.js +48 -27
  204. package/dist/src/knowledge-memory/search-text.d.ts +3 -0
  205. package/dist/src/knowledge-memory/search-text.js +32 -0
  206. package/dist/src/knowledge-memory/usage-policy.d.ts +6 -0
  207. package/dist/src/knowledge-memory/usage-policy.js +61 -0
  208. package/dist/src/memory-learning/repository.d.ts +24 -0
  209. package/dist/src/memory-learning/repository.js +96 -0
  210. package/dist/src/memory-learning/service.d.ts +17 -0
  211. package/dist/src/memory-learning/service.js +105 -0
  212. package/dist/src/memory-learning/source-learning.d.ts +7 -0
  213. package/dist/src/memory-learning/source-learning.js +235 -0
  214. package/dist/src/memory-learning/task-receipts.d.ts +3 -0
  215. package/dist/src/memory-learning/task-receipts.js +95 -0
  216. package/dist/src/memory-learning/work-capture.d.ts +51 -0
  217. package/dist/src/memory-learning/work-capture.js +140 -0
  218. package/dist/src/memory-maintenance/service.js +5 -5
  219. package/dist/src/notes/service.js +1 -1
  220. package/dist/src/observability/runtime.js +1 -1
  221. package/dist/src/personal-agent/proactivity/service.js +3 -3
  222. package/dist/src/personal-agent/prompt-context.js +2 -2
  223. package/dist/src/personal-agent/reply-composer.d.ts +1 -1
  224. package/dist/src/personal-agent/reply-composer.js +10 -3
  225. package/dist/src/platform/index.js +1 -1
  226. package/dist/src/providers/index.js +4 -4
  227. package/dist/src/providers/local-model.d.ts +2 -0
  228. package/dist/src/providers/local-model.js +16 -0
  229. package/dist/src/providers/model-registry.js +2 -2
  230. package/dist/src/providers/provider-auth-service.js +1 -1
  231. package/dist/src/providers/provider-disconnect-core.js +1 -1
  232. package/dist/src/providers/register-runtime-providers.js +1 -1
  233. package/dist/src/providers/xopc-cloud-catalog-coordinator.js +1 -1
  234. package/dist/src/scenes/taskFollowUp/service.js +1 -1
  235. package/dist/src/session/session-title.js +1 -1
  236. package/dist/src/session/store.js +2 -1
  237. package/dist/src/storage/sqlite/knowledge-repository.js +6 -0
  238. package/dist/src/storage/sqlite/migrations/245_memory_learning.sql +125 -0
  239. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  240. package/dist/src/storage/sqlite/migrations/runner.js +6 -3
  241. package/dist/src/storage/sqlite/schema.js +1 -1
  242. package/dist/src/tasks/task-main-update-decision-service.js +1 -1
  243. package/dist/src/tui/backends/embedded-backend.js +3 -3
  244. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  245. package/dist/src/tui/tui-commands.js +1 -1
  246. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  247. package/dist/src/tui/tui-startup-resources.js +2 -2
  248. package/dist/src/tui/tui.js +1 -1
  249. package/dist/src/user-context/access-policy.js +2 -1
  250. package/dist/src/user-context/config.d.ts +10 -0
  251. package/dist/src/user-context/config.js +5 -0
  252. package/dist/src/user-context/extraction/registry.d.ts +1 -1
  253. package/dist/src/user-context/extraction/registry.js +10 -0
  254. package/dist/src/user-context/identity-bindings.d.ts +10 -0
  255. package/dist/src/user-context/identity-bindings.js +24 -0
  256. package/dist/src/user-context/sources/consent-fields.d.ts +2 -0
  257. package/dist/src/user-context/sources/consent-fields.js +66 -0
  258. package/dist/src/user-model/bootstrap.js +1 -1
  259. package/dist/src/user-model/capture/executor.js +1 -1
  260. package/dist/src/user-model/capture/semantic.d.ts +3 -1
  261. package/dist/src/user-model/capture/semantic.js +14 -6
  262. package/dist/src/user-model/index.js +1 -1
  263. package/dist/src/user-model/usage-policy.js +34 -0
  264. package/dist/src/voice/platform-streams.js +2 -1
  265. package/dist/src/voice/realtime/agentEngine.js +21 -5
  266. package/dist/src/voice/realtime/engine.d.ts +4 -0
  267. package/dist/src/voice/realtime/memory-context.js +19 -5
  268. package/dist/src/voice/realtime/runtime.d.ts +5 -0
  269. package/dist/src/voice/realtime/runtime.js +4 -0
  270. package/dist/src/work-discovery/incremental-repository.js +1 -1
  271. package/dist/src/work-discovery/service.js +6 -6
  272. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  273. package/dist/src/workflows/service/workflow-session-bridge.js +38 -10
  274. package/package.json +3 -3
  275. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BZrOdxou.js +0 -1
  276. package/dist/gateway/static/root/assets/agent-plugin-dialog-B3ux1AhY.js +0 -1
  277. package/dist/gateway/static/root/assets/agents-CXlXFU6M.js +0 -66
  278. package/dist/gateway/static/root/assets/automations-workspace-BxIShhkZ.js +0 -6
  279. package/dist/gateway/static/root/assets/browser-automations-page-BmTK7Gtn.js +0 -3
  280. package/dist/gateway/static/root/assets/browser-settings-page-DBQ-WETQ.js +0 -3
  281. package/dist/gateway/static/root/assets/capabilities-page-D-nQ6Zzi.js +0 -2
  282. package/dist/gateway/static/root/assets/capabilities-settings-panel-Dx1fpBmH.js +0 -8
  283. package/dist/gateway/static/root/assets/channels-DXfEP1FR.js +0 -1
  284. package/dist/gateway/static/root/assets/connectors-page-D9RZjhw8.js +0 -1
  285. package/dist/gateway/static/root/assets/gateway-realtime-store-cLCDEe4D.js +0 -1
  286. package/dist/gateway/static/root/assets/gateway-settings-qSUrpS1h.js +0 -1
  287. package/dist/gateway/static/root/assets/home-page-COjDsuzg.js +0 -2
  288. package/dist/gateway/static/root/assets/index-DEaVabvo.js +0 -106
  289. package/dist/gateway/static/root/assets/logs-page-B_6fHDoi.js +0 -2
  290. package/dist/gateway/static/root/assets/models-hub-cache-Jj8dvYcv.js +0 -1
  291. package/dist/gateway/static/root/assets/note-detail-panel-B7U6EbAi.js +0 -5
  292. package/dist/gateway/static/root/assets/notes-page-BzHVaH8j.js +0 -8
  293. package/dist/gateway/static/root/assets/personal-page-E6huhFk4.js +0 -1
  294. package/dist/gateway/static/root/assets/remote-access-hub-D_FLVZAm.js +0 -1
  295. package/dist/gateway/static/root/assets/schema-form-IM7QeSm3.js +0 -1
  296. package/dist/gateway/static/root/assets/session-manager-B06ZCie_.js +0 -16
  297. package/dist/gateway/static/root/assets/sessions-page-Bol3ScEc.js +0 -1
  298. package/dist/gateway/static/root/assets/settings-advanced-gate-DpCanqrD.js +0 -1
  299. package/dist/gateway/static/root/assets/setup-status-panel-zTmrMwMm.js +0 -1
  300. package/dist/gateway/static/root/assets/shares-settings-Bkhkt_6M.js +0 -1
  301. package/dist/gateway/static/root/assets/skills-page-CFIte-vM.js +0 -2
  302. package/dist/gateway/static/root/assets/tracing-settings-page-DJRAP3nb.js +0 -1
  303. package/dist/gateway/static/root/assets/user-model-page-sx1lNWKf.js +0 -2
  304. package/dist/gateway/static/root/assets/workflows-page-BQR4JdXB.js +0 -6
@@ -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";
@@ -2,8 +2,8 @@ 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
4
  import { AgentCatalogService } from "../agent-catalog/service.js";
5
- import { ConfigSchema, init_schema } from "../config/schema.js";
6
5
  import { resolveEffectiveAgentConfigForAgent } from "../config/agent-profile.js";
6
+ import { ConfigSchema, init_schema } from "../config/schema.js";
7
7
  import { fetchWithTimeoutGuarded } from "../media-shared/http/provider-http.js";
8
8
  import "../media-shared/http/index.js";
9
9
  import { getImageGenerationProvider, listImageGenerationProvidersSummary } from "../agent/image/generation/provider-registry.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 { 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";
@@ -22,19 +22,20 @@ import { getSessionConfig, init_config_repository } from "../storage/sqlite/conf
22
22
  import { init_sqlite } from "../storage/sqlite/index.js";
23
23
  import { normalizeAgentId } from "../agent-catalog/id.js";
24
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";
25
+ import { listKnowledgeItems } from "../knowledge-memory/repository.js";
27
26
  import { init_config, resolveKnowledgeReadPolicy } from "../user-context/config.js";
28
- import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
29
27
  import { init_agent_session_key, resolveAgentMainConversationId } from "../routing/agent-session-key.js";
30
28
  import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
29
+ import "../knowledge-memory/index.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";
@@ -910,7 +910,17 @@ var GatewayService = class {
910
910
  if (reply) this.emit("personal.reply.delivered", reply);
911
911
  };
912
912
  await new TaskResultDeliveryService().drain(notify);
913
- new PersonalReplyComposer().drain(notify, (conversationId) => !this.agentRunner.hasActiveRun(conversationId) && !this.agentRunner.inputs.isAcceptingInput(conversationId) && (!this.voiceRealtime.hasConversation(conversationId) || this.voiceRealtime.canPublishReply(conversationId))).catch((err) => {
913
+ new PersonalReplyComposer().drain(async (conversationId, deliveryId) => {
914
+ const reply = personalReplyNotification(conversationId, deliveryId);
915
+ notify(conversationId, deliveryId);
916
+ if (reply && typeof reply.text === "string" && reply.text.trim() && this.voiceRealtime.hasConversation(conversationId)) {
917
+ if (!await this.voiceRealtime.offerReply({
918
+ conversationId,
919
+ deliveryId,
920
+ text: reply.text
921
+ })) throw new Error("Personal voice reply deferred");
922
+ }
923
+ }, (conversationId) => !this.agentRunner.hasActiveRun(conversationId) && !this.agentRunner.inputs.isAcceptingInput(conversationId) && (!this.voiceRealtime.hasConversation(conversationId) || this.voiceRealtime.canPublishReply(conversationId))).catch((err) => {
914
924
  log.error({
915
925
  err,
916
926
  phase: "task_result_reply"
@@ -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,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";
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * Gateway restart after xopc update — daemon, unmanaged, or in-process respawn.
3
3
  */
4
+ import type { GatewayService } from '../daemon/types.js';
4
5
  export type UpdateRestartResult = {
5
6
  ok: boolean;
6
7
  mode: 'in-process' | 'daemon' | 'unmanaged' | 'skipped' | 'disabled' | 'failed';
7
8
  message?: string;
9
+ warning?: string;
8
10
  };
9
11
  export type InProcessRestartTrigger = () => {
10
12
  ok: boolean;
@@ -12,10 +14,13 @@ export type InProcessRestartTrigger = () => {
12
14
  message?: string;
13
15
  };
14
16
  export declare function isRunningInsideGatewayService(env?: Record<string, string | undefined>): boolean;
17
+ /** Load platform modules before the installer replaces files used by this process. */
18
+ export declare function prepareGatewayRestart(shouldRestart?: boolean): Promise<GatewayService | undefined>;
15
19
  export declare function maybeRestartGatewayAfterUpdate(params: {
16
20
  shouldRestart?: boolean;
17
21
  expectedVersion?: string;
18
22
  updatedPackageRoot?: string;
19
23
  configPath?: string;
20
24
  triggerInProcessRestart?: InProcessRestartTrigger;
25
+ preparedService?: GatewayService;
21
26
  }): Promise<UpdateRestartResult>;
@@ -19,6 +19,11 @@ const DEFAULT_HEALTH_DELAY_MS = 500;
19
19
  function isRunningInsideGatewayService(env = process.env) {
20
20
  return env.XOPC_SERVICE_MARKER?.trim() === "1";
21
21
  }
22
+ /** Load platform modules before the installer replaces files used by this process. */
23
+ async function prepareGatewayRestart(shouldRestart) {
24
+ if (shouldRestart === false || !isRestartEnabled(loadConfig(resolveConfigPath()))) return;
25
+ return resolveGatewayService();
26
+ }
22
27
  function resolveGatewayPort(configPath) {
23
28
  const config = loadConfig(configPath ?? resolveConfigPath());
24
29
  return typeof config.gateway?.port === "number" ? config.gateway.port : 18790;
@@ -42,27 +47,31 @@ async function resolveRestartPort(service) {
42
47
  return parsePortFromArgs((await service.readCommand(process.env).catch(() => null))?.programArguments) ?? resolveGatewayPort();
43
48
  }
44
49
  async function waitForGatewayHealth(port, expectedVersion) {
45
- for (let attempt = 0; attempt < DEFAULT_HEALTH_ATTEMPTS; attempt += 1) try {
50
+ const config = loadConfig(resolveConfigPath());
51
+ const credential = process.env.XOPC_GATEWAY_TOKEN || process.env.XOPC_GATEWAY_PASSWORD || config.gateway?.auth?.token || config.gateway?.auth?.password;
52
+ for (let attempt = 0; attempt < DEFAULT_HEALTH_ATTEMPTS; attempt += 1) {
46
53
  const controller = new AbortController();
47
54
  const timeout = setTimeout(() => controller.abort(), 1500);
48
- const response = await fetch(`http://127.0.0.1:${port}/api/health`, {
49
- method: "GET",
50
- signal: controller.signal
51
- });
52
- clearTimeout(timeout);
53
- if (!response.ok) {
54
- await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));
55
- continue;
56
- }
57
- if (expectedVersion) {
58
- const body = await response.json();
59
- if (body.version && body.version !== expectedVersion) {
60
- await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));
61
- continue;
55
+ try {
56
+ const response = await fetch(`http://127.0.0.1:${port}/api/health`, {
57
+ method: "GET",
58
+ signal: controller.signal
59
+ });
60
+ if (!response.ok) throw new Error("Gateway health unavailable");
61
+ const health = await response.json();
62
+ if (health.ready !== true || health.status !== "ok") throw new Error("Gateway is still starting");
63
+ if (expectedVersion) {
64
+ const status = await fetch(`http://127.0.0.1:${port}/api/status`, {
65
+ headers: credential ? { Authorization: `Bearer ${credential}` } : void 0,
66
+ signal: controller.signal
67
+ });
68
+ if (!status.ok) throw new Error("Gateway version unavailable");
69
+ if ((await status.json()).version !== expectedVersion) throw new Error("Gateway version mismatch");
62
70
  }
71
+ return true;
72
+ } catch {} finally {
73
+ clearTimeout(timeout);
63
74
  }
64
- return true;
65
- } catch {
66
75
  await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));
67
76
  }
68
77
  return false;
@@ -111,9 +120,9 @@ async function restartDaemonGateway(service, port, expectedVersion) {
111
120
  expectedVersion
112
121
  }, "Gateway restart completed but health check timed out");
113
122
  return {
114
- ok: true,
115
- mode: "daemon",
116
- message: "Gateway service restarted; health check timed out (gateway may still be starting)."
123
+ ok: false,
124
+ mode: "failed",
125
+ message: "Gateway service restarted, but readiness and installed version could not be verified."
117
126
  };
118
127
  }
119
128
  return {
@@ -145,9 +154,10 @@ async function maybeRestartGatewayAfterUpdate(params) {
145
154
  mode: "disabled",
146
155
  message: "Gateway restart is disabled (commands.restart=false). Restart manually: xopc gateway restart"
147
156
  };
148
- if (isRunningInsideGatewayService() && params.triggerInProcessRestart) {
149
- if (params.updatedPackageRoot && params.expectedVersion) try {
150
- const service = await resolveGatewayService();
157
+ if (params.triggerInProcessRestart) {
158
+ let warning;
159
+ if (isRunningInsideGatewayService() && params.updatedPackageRoot && params.expectedVersion) try {
160
+ const service = params.preparedService ?? await resolveGatewayService();
151
161
  if (await service.isLoaded({ env: process.env })) await refreshGatewayServiceAfterUpdate({
152
162
  service,
153
163
  packageRoot: params.updatedPackageRoot,
@@ -159,11 +169,7 @@ async function maybeRestartGatewayAfterUpdate(params) {
159
169
  err,
160
170
  expectedVersion: params.expectedVersion
161
171
  }, `Gateway service refresh failed after update: ${message}`);
162
- return {
163
- ok: false,
164
- mode: "failed",
165
- message: `Installed ${params.expectedVersion}, but failed to refresh the gateway service: ${message}`
166
- };
172
+ warning = `Installed ${params.expectedVersion}, but failed to refresh the gateway service: ${message}`;
167
173
  }
168
174
  const result = params.triggerInProcessRestart();
169
175
  if (!result.ok) return {
@@ -175,11 +181,12 @@ async function maybeRestartGatewayAfterUpdate(params) {
175
181
  return {
176
182
  ok: true,
177
183
  mode: "in-process",
178
- message: result.message ?? "Gateway restart scheduled."
184
+ message: result.message ?? "Gateway restart scheduled.",
185
+ warning
179
186
  };
180
187
  }
181
- const service = await resolveGatewayService();
188
+ const service = params.preparedService ?? await resolveGatewayService();
182
189
  return restartDaemonGateway(service, await resolveRestartPort(service), params.expectedVersion);
183
190
  }
184
191
  //#endregion
185
- export { isRunningInsideGatewayService, maybeRestartGatewayAfterUpdate };
192
+ export { isRunningInsideGatewayService, maybeRestartGatewayAfterUpdate, prepareGatewayRestart };
@@ -14,6 +14,7 @@ export type UpdateStepResult = {
14
14
  };
15
15
  export type UpdatePostUpdateResult = {
16
16
  extensions?: ExtensionPostUpdateResult;
17
+ extensionsError?: string;
17
18
  restart?: UpdateRestartResult;
18
19
  };
19
20
  export type UpdateRunResult = {
@@ -1,3 +1,4 @@
1
+ import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
1
2
  import { runPostUpdateExtensionSync } from "../extensions/update.js";
2
3
  import "./update-channels.js";
3
4
  import { compareSemver, resolveNpmChannelTag } from "./update-check.js";
@@ -7,10 +8,11 @@ import { XOPC_PACKAGE_NAME, cleanupGlobalRenameDirs, createGlobalInstallEnv, det
7
8
  import { runGlobalPackageUpdateSteps } from "./package-update-steps.js";
8
9
  import { resolveStableNodePath } from "./stable-node-path.js";
9
10
  import { trimLogTail } from "./update-log.js";
10
- import { maybeRestartGatewayAfterUpdate } from "./update-restart.js";
11
+ import { maybeRestartGatewayAfterUpdate, prepareGatewayRestart } from "./update-restart.js";
11
12
  import path from "node:path";
12
13
  import fs from "node:fs/promises";
13
14
  //#region src/infra/update-runner.ts
15
+ init_package_version();
14
16
  const DEFAULT_TIMEOUT_MS = 2700 * 1e3;
15
17
  const MAX_LOG_CHARS = 8e3;
16
18
  const CORE_PACKAGE_NAMES = new Set([XOPC_PACKAGE_NAME]);
@@ -522,30 +524,55 @@ async function runGatewayUpdate(opts = {}) {
522
524
  }
523
525
  async function runGatewayUpdateWithPostSteps(opts = {}) {
524
526
  const channel = opts.channel ?? "stable";
527
+ let preparedService;
528
+ try {
529
+ preparedService = await prepareGatewayRestart(opts.shouldRestart);
530
+ } catch (err) {
531
+ return {
532
+ status: "error",
533
+ mode: "unknown",
534
+ reason: "restart-preparation-failed",
535
+ steps: [],
536
+ durationMs: 0,
537
+ postUpdate: { restart: {
538
+ ok: false,
539
+ mode: "failed",
540
+ message: err instanceof Error ? err.message : String(err)
541
+ } }
542
+ };
543
+ }
525
544
  const result = await runGatewayUpdate(opts);
526
- if (result.status !== "ok") return result;
545
+ const needsRuntimeRestart = result.status === "skipped" && result.reason === "up-to-date" && Boolean(opts.triggerInProcessRestart) && Boolean(result.after?.version) && result.after.version !== PACKAGE_VERSION;
546
+ if (result.status !== "ok" && !needsRuntimeRestart) return result;
527
547
  const postUpdate = {};
528
- if (!opts.skipExtensionSync) {
529
- const extensions = await runPostUpdateExtensionSync({
548
+ if (!opts.skipExtensionSync && !needsRuntimeRestart) try {
549
+ postUpdate.extensions = await runPostUpdateExtensionSync({
530
550
  channel,
531
551
  timeoutMs: opts.timeoutMs
532
552
  });
533
- postUpdate.extensions = extensions;
534
- if (extensions.status === "error") return {
535
- ...result,
536
- status: "error",
537
- reason: "post-update-extensions",
538
- postUpdate
553
+ } catch (err) {
554
+ postUpdate.extensionsError = err instanceof Error ? err.message : String(err);
555
+ }
556
+ try {
557
+ postUpdate.restart = await maybeRestartGatewayAfterUpdate({
558
+ shouldRestart: opts.shouldRestart,
559
+ expectedVersion: result.after?.version ?? void 0,
560
+ updatedPackageRoot: result.mode === "npm" || result.mode === "pnpm" ? result.root : void 0,
561
+ triggerInProcessRestart: opts.triggerInProcessRestart,
562
+ preparedService
563
+ });
564
+ } catch (err) {
565
+ postUpdate.restart = {
566
+ ok: false,
567
+ mode: "failed",
568
+ message: err instanceof Error ? err.message : String(err)
539
569
  };
540
570
  }
541
- postUpdate.restart = await maybeRestartGatewayAfterUpdate({
542
- shouldRestart: opts.shouldRestart,
543
- expectedVersion: result.after?.version ?? void 0,
544
- updatedPackageRoot: result.mode === "npm" || result.mode === "pnpm" ? result.root : void 0,
545
- triggerInProcessRestart: opts.triggerInProcessRestart
546
- });
571
+ const reason = !postUpdate.restart.ok ? "post-update-restart" : postUpdate.extensions?.status === "error" || postUpdate.extensionsError ? "post-update-extensions" : void 0;
547
572
  return {
548
573
  ...result,
574
+ status: reason ? "error" : "ok",
575
+ reason,
549
576
  postUpdate
550
577
  };
551
578
  }
@@ -571,8 +598,10 @@ function formatUpdateApiResult(result, channel) {
571
598
  status: "error",
572
599
  reason: result.reason ?? "update-failed",
573
600
  mode: result.mode,
574
- message: failed?.stderrTail ?? failed?.stdoutTail ?? result.reason,
575
- stderrTail: failed?.stderrTail ?? void 0
601
+ message: result.postUpdate?.restart?.ok === false ? result.postUpdate.restart.message : result.postUpdate?.extensionsError ?? failed?.stderrTail ?? failed?.stdoutTail ?? result.reason,
602
+ stderrTail: failed?.stderrTail ?? void 0,
603
+ installedVersion: result.after?.version ?? void 0,
604
+ postUpdate: result.postUpdate ?? void 0
576
605
  };
577
606
  }
578
607
  async function runAutoUpdateCommand(params) {
@@ -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
  }