@xopcai/xopc 0.0.306 → 0.0.308

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 (273) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-DLtim-_I.js → activity-store-wgSB2HYK.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-iQXtiilH.js → agent-avatar-dicebear-dUotwUO6.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C6LflMXr.js +1 -0
  6. package/dist/gateway/static/root/assets/agents-VPDIGRSS.js +1 -0
  7. package/dist/gateway/static/root/assets/{api-DfSU0-lD.js → api-BKHmTb0w.js} +1 -1
  8. package/dist/gateway/static/root/assets/api-DFOlahZv.js +1 -0
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-BpYFKz7B.js → app-management-settings-panel-zPz0rOND.js} +1 -1
  10. package/dist/gateway/static/root/assets/appearance-settings-DhvhR43G.js +1 -0
  11. package/dist/gateway/static/root/assets/apps-page-Pmslbzzr.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-BxOvZ-ZX.js → archive-plugin-BQVZMreT.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-B0FzTMAJ.js → attachment-load-CPE-TMPf.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-BpXuPaPg.js → automations-page-C4IAy_zF.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-Fx5VUJRu.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-BP7wfpqy.js → binary-plugins-DgTl7diZ.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-oMLvdnOQ.js → block-editor-CcOVA-Gw.js} +3 -3
  18. package/dist/gateway/static/root/assets/{browser-automation-inputs-DTxSZ00u.js → browser-automation-inputs-BzkJog8e.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-automations-page-IbJnwEY4.js → browser-automations-page--zKAgj1k.js} +2 -2
  20. package/dist/gateway/static/root/assets/browser-settings-page-DBms6d35.js +3 -0
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-epdDWIZy.js +8 -0
  22. package/dist/gateway/static/root/assets/channels-settings-B0bsDtmP.js +1 -0
  23. package/dist/gateway/static/root/assets/{channels-status-swr-D2AmAoty.js → channels-status-swr-B2JwuTjG.js} +1 -1
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-B-yI3Mi1.js → chat-terminal-dock-BfLd2rIJ.js} +1 -1
  25. package/dist/gateway/static/root/assets/{computer-settings-page-CWx_jnng.js → computer-settings-page-Ckgc0Py-.js} +1 -1
  26. package/dist/gateway/static/root/assets/connector-service-page-BlC1OXX4.js +1 -0
  27. package/dist/gateway/static/root/assets/connectors-page-By33-bF1.js +2 -0
  28. package/dist/gateway/static/root/assets/{cron-expression-DMRRL4Zg.js → cron-expression-CqNE-nf6.js} +1 -1
  29. package/dist/gateway/static/root/assets/{date-picker-BSwL0e6E.js → date-picker-BS9ZjzYJ.js} +1 -1
  30. package/dist/gateway/static/root/assets/{dependency-picker-BQTspLzC.js → dependency-picker-CF_zYzxX.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-C3lFxDF6.js → desktop-pet-CDwtLR7Z.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-settings-Y8pjpXFE.js → desktop-pet-settings-C0djIc1J.js} +1 -1
  33. package/dist/gateway/static/root/assets/device-pairing-wizard-CDKj9LQj.js +1 -0
  34. package/dist/gateway/static/root/assets/{extension-debug-page-CVGiGVcR.js → extension-debug-page-CX5OXxEU.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-g3JtCP_y.js → extension-page-BytR1PaY.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-settings-page-CjpoKV1f.js → extension-settings-page-CkaMJA5F.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-config-swr-BSvXXpKM.js → gateway-config-swr-B6wHa6ZI.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-realtime-BDCpS7U1.js → gateway-realtime-B53R0CA4.js} +1 -1
  39. package/dist/gateway/static/root/assets/gateway-realtime-store-BLDgrJ30.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-settings-CYG9WCZn.js → gateway-settings-_YU-1p0z.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-startup-retry-Caf8g3sC.js → gateway-startup-retry-DRzGnEV-.js} +1 -1
  42. package/dist/gateway/static/root/assets/{heartbeat-settings-Cl834-SS.js → heartbeat-settings-CVIvvm4x.js} +1 -1
  43. package/dist/gateway/static/root/assets/home-page-COCHelcL.js +1 -0
  44. package/dist/gateway/static/root/assets/{image-generation-api-BwEWBUVC.js → image-generation-api-Ck_pyDom.js} +1 -1
  45. package/dist/gateway/static/root/assets/{imports-page-CoMlgSIA.js → imports-page-DrtbjL8O.js} +1 -1
  46. package/dist/gateway/static/root/assets/index-CDfcPiPb.js +79 -0
  47. package/dist/gateway/static/root/assets/index-CRu1p38D.css +1 -0
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CNq5D4pe.js → keyboard-shortcuts-settings-BlZh41Xq.js} +1 -1
  49. package/dist/gateway/static/root/assets/local-app-workbench-page-D7_Raxjw.js +2 -0
  50. package/dist/gateway/static/root/assets/{local-apps-page-DQnRA598.js → local-apps-page-DbP7wWuh.js} +1 -1
  51. package/dist/gateway/static/root/assets/{locale-store-D16nmbaN.js → locale-store-msTfRK8P.js} +1 -1
  52. package/dist/gateway/static/root/assets/logs-page-C0n66FiO.js +2 -0
  53. package/dist/gateway/static/root/assets/{management-settings-DKcO5fQ-.js → management-settings-i6GhxpGV.js} +1 -1
  54. package/dist/gateway/static/root/assets/{markdown-view-DCp4BlZP.js → markdown-view-BInabSKf.js} +1 -1
  55. package/dist/gateway/static/root/assets/{media-plugins-Cy64sn_C.js → media-plugins-CnWChQ3Y.js} +1 -1
  56. package/dist/gateway/static/root/assets/{messages-C-9oo69N.js → messages-F74LVAiU.js} +3 -3
  57. package/dist/gateway/static/root/assets/note-detail-panel-C59d8vDW.js +5 -0
  58. package/dist/gateway/static/root/assets/notes-page-C1GBPrVI.js +8 -0
  59. package/dist/gateway/static/root/assets/{page-tabs-CgEoHSVT.js → page-tabs-BWitjb3e.js} +1 -1
  60. package/dist/gateway/static/root/assets/{preview-open-alternatives-Ck2uKTbf.js → preview-open-alternatives-UaCWCxZv.js} +1 -1
  61. package/dist/gateway/static/root/assets/{proactive-page-Dr1mCJhZ.js → proactive-page-CtSFJxoM.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-open-page-DbZvJ5GE.js → product-open-page-gmi5LLwM.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-ILTmQ1YN.js +1 -0
  64. package/dist/gateway/static/root/assets/projects-page-snl4rOQZ.js +1 -0
  65. package/dist/gateway/static/root/assets/{registry-api-DcQdwpPu.js → registry-api-BSWtko7U.js} +1 -1
  66. package/dist/gateway/static/root/assets/remote-access-hub-BbaAcEN3.js +1 -0
  67. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CPwdgWKo.js → runtime-tools-settings-panel-CtOjKGWg.js} +2 -2
  68. package/dist/gateway/static/root/assets/{schema-form-8psK4cFO.js → schema-form-DkyyDcl2.js} +1 -1
  69. package/dist/gateway/static/root/assets/sessions-page-DrWL71O8.js +1 -0
  70. package/dist/gateway/static/root/assets/settings-advanced-gate-BG0kl4HT.js +1 -0
  71. package/dist/gateway/static/root/assets/{settings-form-section-D_Gsz5rl.js → settings-form-section-C0JDGN_V.js} +1 -1
  72. package/dist/gateway/static/root/assets/{settings-page-C_Tj_mkZ.js → settings-page-DiIyMQ52.js} +1 -1
  73. package/dist/gateway/static/root/assets/setup-status-panel-EPazhoZO.js +1 -0
  74. package/dist/gateway/static/root/assets/{share-preview-page-B_M_oPsT.js → share-preview-page-Bt1K657Y.js} +1 -1
  75. package/dist/gateway/static/root/assets/shares-settings-g2MdRXSZ.js +1 -0
  76. package/dist/gateway/static/root/assets/skill-reload-api-B1DPzu98.js +1 -0
  77. package/dist/gateway/static/root/assets/skills-page-Wd0uYSPG.js +2 -0
  78. package/dist/gateway/static/root/assets/{skills-page.utils-Cuh6s2HM.js → skills-page.utils-vq5Ujm03.js} +1 -1
  79. package/dist/gateway/static/root/assets/{system-settings-panel-aassGyNb.js → system-settings-panel-Cz1P-HDH.js} +1 -1
  80. package/dist/gateway/static/root/assets/task-detail-page-BG3A5gPZ.js +1 -0
  81. package/dist/gateway/static/root/assets/theme-store-1SZ-HFHX.js +1 -0
  82. package/dist/gateway/static/root/assets/{tunnel-api-DJYcPWIV.js → tunnel-api-DQGoFuZO.js} +1 -1
  83. package/dist/gateway/static/root/assets/{use-autosave-QGYG7oMZ.js → use-autosave-DVDlBb95.js} +1 -1
  84. package/dist/gateway/static/root/assets/user-model-page-qM5UiTGx.js +2 -0
  85. package/dist/gateway/static/root/assets/{voice-api-key-field-D1s0gIRW.js → voice-api-key-field-B2pZCcxY.js} +1 -1
  86. package/dist/gateway/static/root/assets/{voice-config-api-D2goEn5e.js → voice-config-api-DgJML_uM.js} +1 -1
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-DkFW9aJ6.js → work-discovery-overlay-Bptv7bEY.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BYToUPUY.js → workflow-run-setup-panel-BijCrNc4.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-DRy1RAYH.js +6 -0
  90. package/dist/gateway/static/root/channel-icons/feishu.svg +6 -12
  91. package/dist/gateway/static/root/connector-icons/SOURCES.md +12 -0
  92. package/dist/gateway/static/root/connector-icons/dingtalk-mark.svg +1 -0
  93. package/dist/gateway/static/root/connector-icons/tencent-meeting-mark.svg +37 -0
  94. package/dist/gateway/static/root/connector-icons/wps-calendar.svg +14 -0
  95. package/dist/gateway/static/root/connector-icons/wps-docs.svg +14 -0
  96. package/dist/gateway/static/root/connector-icons/wps-mail.svg +7 -0
  97. package/dist/gateway/static/root/index.html +12 -12
  98. package/dist/package.js +1 -1
  99. package/dist/packages/gateway-contract/src/notifications.js +1 -1
  100. package/dist/src/agent/background-review/prompts.js +3 -1
  101. package/dist/src/agent/context/execution-context.js +4 -4
  102. package/dist/src/agent/external-tools/composio-provider.js +83 -20
  103. package/dist/src/agent/external-tools/gateway-tools.js +2 -1
  104. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  105. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
  106. package/dist/src/agent/memory/compaction-promotion.d.ts +1 -1
  107. package/dist/src/agent/memory/compaction-promotion.js +4 -3
  108. package/dist/src/agent/tools/knowledge-memory-tool.d.ts +1 -1
  109. package/dist/src/agent/tools/knowledge-memory-tool.js +3 -3
  110. package/dist/src/agent/tools/user-context-tool.js +17 -7
  111. package/dist/src/chat-commands/builtins/understanding.js +1 -1
  112. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  113. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  114. package/dist/src/cli/commands/update.js +1 -1
  115. package/dist/src/config/schema.d.ts +14 -4
  116. package/dist/src/config/schema.js +6 -4
  117. package/dist/src/connectors/account-access.d.ts +4 -0
  118. package/dist/src/connectors/account-access.js +23 -0
  119. package/dist/src/connectors/approval-resume.d.ts +4 -0
  120. package/dist/src/connectors/approval-resume.js +23 -0
  121. package/dist/src/connectors/auth-provider-registry.d.ts +1 -0
  122. package/dist/src/connectors/auth-provider-registry.js +2 -1
  123. package/dist/src/connectors/authorization-attempts.d.ts +21 -0
  124. package/dist/src/connectors/authorization-attempts.js +33 -0
  125. package/dist/src/connectors/builtin-catalog.js +1 -3
  126. package/dist/src/connectors/catalog.js +2 -1
  127. package/dist/src/connectors/china-catalog.d.ts +2 -0
  128. package/dist/src/connectors/china-catalog.js +430 -0
  129. package/dist/src/connectors/composio-backends.d.ts +26 -0
  130. package/dist/src/connectors/composio-backends.js +65 -0
  131. package/dist/src/connectors/composio-catalog.js +2 -1
  132. package/dist/src/connectors/composio-managed-client.js +3 -1
  133. package/dist/src/connectors/composio-managed-events.js +5 -2
  134. package/dist/src/connectors/composio-session-types.d.ts +2 -0
  135. package/dist/src/connectors/composio-sessions.d.ts +11 -2
  136. package/dist/src/connectors/composio-sessions.js +137 -35
  137. package/dist/src/connectors/composio-triggers.js +4 -2
  138. package/dist/src/connectors/composio.d.ts +11 -8
  139. package/dist/src/connectors/composio.js +68 -84
  140. package/dist/src/connectors/connected-source-ingestion.js +4 -3
  141. package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
  142. package/dist/src/connectors/connected-source-understanding.js +1 -0
  143. package/dist/src/connectors/connection-recovery-service.js +25 -13
  144. package/dist/src/connectors/connector-identity.d.ts +2 -0
  145. package/dist/src/connectors/connector-identity.js +18 -5
  146. package/dist/src/connectors/content-enrichment.js +1 -1
  147. package/dist/src/connectors/instances.js +1 -7
  148. package/dist/src/connectors/learning-coordinator.js +35 -12
  149. package/dist/src/connectors/materialize.js +14 -1
  150. package/dist/src/connectors/policy.d.ts +1 -1
  151. package/dist/src/connectors/policy.js +1 -1
  152. package/dist/src/connectors/principal.js +24 -3
  153. package/dist/src/connectors/providers.d.ts +1 -0
  154. package/dist/src/connectors/providers.js +14 -2
  155. package/dist/src/connectors/runtime-adapter-registry.js +4 -9
  156. package/dist/src/connectors/secret-store.d.ts +4 -1
  157. package/dist/src/connectors/secret-store.js +7 -3
  158. package/dist/src/connectors/source-change-publisher.js +4 -2
  159. package/dist/src/connectors/types.d.ts +16 -11
  160. package/dist/src/connectors/workflow-preflight.d.ts +2 -1
  161. package/dist/src/connectors/workflow-preflight.js +20 -3
  162. package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -2
  163. package/dist/src/gateway/hono/routes/connectors.js +207 -16
  164. package/dist/src/gateway/hono/routes/context-sources.js +1 -24
  165. package/dist/src/gateway/hono/routes/home.js +4 -1
  166. package/dist/src/gateway/hono/routes/imports.js +1 -1
  167. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  168. package/dist/src/gateway/hono/routes/local-apps.js +1 -1
  169. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  170. package/dist/src/gateway/hono/routes/projects.js +8 -0
  171. package/dist/src/gateway/hono/routes/update.js +2 -2
  172. package/dist/src/gateway/hono/routes/user-model-refresh.d.ts +5 -0
  173. package/dist/src/gateway/hono/routes/user-model-refresh.js +128 -0
  174. package/dist/src/gateway/hono/routes/user-model.js +12 -5
  175. package/dist/src/gateway/hono/routes/work-discovery.js +0 -30
  176. package/dist/src/gateway/index.js +1 -1
  177. package/dist/src/gateway/run-loop.js +1 -1
  178. package/dist/src/gateway/service.js +6 -6
  179. package/dist/src/infra/gateway-processes.js +1 -1
  180. package/dist/src/infra/update-restart.js +1 -1
  181. package/dist/src/infra/update-runner.js +2 -2
  182. package/dist/src/infra/update-startup.js +1 -1
  183. package/dist/src/knowledge/connected-knowledge-pipeline.js +1 -1
  184. package/dist/src/knowledge-memory/index.js +2 -2
  185. package/dist/src/knowledge-memory/repository.d.ts +7 -0
  186. package/dist/src/knowledge-memory/repository.js +58 -8
  187. package/dist/src/memory-maintenance/service.js +61 -31
  188. package/dist/src/migrations/memory-config.d.ts +2 -0
  189. package/dist/src/migrations/memory-config.js +77 -0
  190. package/dist/src/migrations/runner.js +2 -2
  191. package/dist/src/notifications/planner.js +5 -5
  192. package/dist/src/notifications/service.d.ts +2 -2
  193. package/dist/src/notifications/service.js +1 -1
  194. package/dist/src/proactive/follow-ups.js +2 -1
  195. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +3 -0
  196. package/dist/src/storage/sqlite/connection-wait-repository.js +63 -2
  197. package/dist/src/storage/sqlite/connector-account-repository.d.ts +6 -0
  198. package/dist/src/storage/sqlite/connector-account-repository.js +35 -7
  199. package/dist/src/storage/sqlite/connector-repository.js +15 -10
  200. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +1 -1
  201. package/dist/src/storage/sqlite/index.js +4 -2
  202. package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +92 -0
  203. package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +20 -0
  204. package/dist/src/storage/sqlite/migrations/184_memory_suppressions.sql +12 -0
  205. package/dist/src/storage/sqlite/migrations/185_understanding_refresh_batches.sql +6 -0
  206. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  207. package/dist/src/storage/sqlite/migrations/runner.js +7 -7
  208. package/dist/src/storage/sqlite/schema.js +1 -1
  209. package/dist/src/tasks/home-query-service.js +3 -3
  210. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  211. package/dist/src/tui/tui-startup-resources.js +1 -1
  212. package/dist/src/user-context/config.d.ts +4 -9
  213. package/dist/src/user-context/config.js +7 -27
  214. package/dist/src/user-context/memory-suppression.d.ts +7 -0
  215. package/dist/src/user-context/memory-suppression.js +23 -0
  216. package/dist/src/user-context/relationship-continuity.js +1 -1
  217. package/dist/src/user-context/sources/refresh-service.d.ts +48 -0
  218. package/dist/src/user-context/sources/refresh-service.js +221 -0
  219. package/dist/src/user-context/sources/repository.js +1 -1
  220. package/dist/src/user-model/bootstrap.js +27 -24
  221. package/dist/src/user-model/capture/executor.d.ts +1 -1
  222. package/dist/src/user-model/capture/executor.js +17 -11
  223. package/dist/src/user-model/capture/semantic.js +1 -1
  224. package/dist/src/user-model/domain.d.ts +6 -2
  225. package/dist/src/user-model/index.js +3 -3
  226. package/dist/src/user-model/profile.js +1 -1
  227. package/dist/src/user-model/repository.d.ts +4 -1
  228. package/dist/src/user-model/repository.js +96 -6
  229. package/dist/src/user-model/usage-policy.d.ts +2 -0
  230. package/dist/src/user-model/usage-policy.js +6 -2
  231. package/dist/src/work-discovery/project-understanding.js +2 -1
  232. package/dist/src/work-discovery/service.d.ts +8 -24
  233. package/dist/src/work-discovery/service.js +138 -180
  234. package/dist/src/workflows/domain/definition.d.ts +1 -0
  235. package/dist/src/workflows/domain/validation.js +1 -1
  236. package/dist/src/workflows/service/workflow-run-service.js +14 -0
  237. package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -0
  238. package/dist/src/workflows/service/workflow-session-bridge.js +1 -0
  239. package/package.json +5 -5
  240. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CxOv4ivK.js +0 -1
  241. package/dist/gateway/static/root/assets/agents-DzKx7z3k.js +0 -1
  242. package/dist/gateway/static/root/assets/api-gpHh07OL.js +0 -1
  243. package/dist/gateway/static/root/assets/appearance-settings-BQfR5vrq.js +0 -1
  244. package/dist/gateway/static/root/assets/apps-page-BceB7JHZ.js +0 -1
  245. package/dist/gateway/static/root/assets/automations-workspace-Cn_p8zY_.js +0 -6
  246. package/dist/gateway/static/root/assets/browser-settings-page-CCUO3G23.js +0 -3
  247. package/dist/gateway/static/root/assets/capabilities-settings-panel-BjMb5H2_.js +0 -8
  248. package/dist/gateway/static/root/assets/channels-settings-P22-_i13.js +0 -1
  249. package/dist/gateway/static/root/assets/connectors-page-BLgPORmH.js +0 -2
  250. package/dist/gateway/static/root/assets/device-pairing-wizard-DM4_GMzo.js +0 -1
  251. package/dist/gateway/static/root/assets/gateway-realtime-store-BGmP1obI.js +0 -1
  252. package/dist/gateway/static/root/assets/home-page-CB_XVtIM.js +0 -1
  253. package/dist/gateway/static/root/assets/index-CI37dTAn.css +0 -1
  254. package/dist/gateway/static/root/assets/index-Do9MltC4.js +0 -79
  255. package/dist/gateway/static/root/assets/local-app-workbench-page-BxQlEje6.js +0 -2
  256. package/dist/gateway/static/root/assets/logs-page-CT5GrcMs.js +0 -2
  257. package/dist/gateway/static/root/assets/note-detail-panel-5dc3LKTL.js +0 -5
  258. package/dist/gateway/static/root/assets/notes-page-AbwxgXuG.js +0 -8
  259. package/dist/gateway/static/root/assets/project-detail-page-DnE1zI1c.js +0 -1
  260. package/dist/gateway/static/root/assets/projects-page-BD0nLYxk.js +0 -1
  261. package/dist/gateway/static/root/assets/remote-access-hub-TYuE6A3S.js +0 -1
  262. package/dist/gateway/static/root/assets/sessions-page-BcWDQQFX.js +0 -1
  263. package/dist/gateway/static/root/assets/settings-advanced-gate-DzGQX6Hq.js +0 -1
  264. package/dist/gateway/static/root/assets/setup-status-panel-CE2X89qN.js +0 -1
  265. package/dist/gateway/static/root/assets/shares-settings-BL4H9Iym.js +0 -1
  266. package/dist/gateway/static/root/assets/skill-reload-api-WMKIgUOp.js +0 -1
  267. package/dist/gateway/static/root/assets/skills-page-DYgwzl5B.js +0 -2
  268. package/dist/gateway/static/root/assets/task-detail-page-BjeRslap.js +0 -1
  269. package/dist/gateway/static/root/assets/theme-store-RUBQBsFP.js +0 -1
  270. package/dist/gateway/static/root/assets/user-model-page-PrRsd4go.js +0 -2
  271. package/dist/gateway/static/root/assets/workflows-page-Z8iZe9YP.js +0 -6
  272. package/dist/src/migrations/knowledge-memory-read-policy-config.d.ts +0 -2
  273. package/dist/src/migrations/knowledge-memory-read-policy-config.js +0 -48
@@ -1,11 +1,11 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../../../package-version.js";
2
2
  import { loadConfig } from "../../../config/loader.js";
3
3
  import "../../../config/index.js";
4
- import { normalizeUpdateChannel } from "../../../infra/update-channels.js";
5
4
  import { acquireUpdateLock } from "../../../infra/update-lock.js";
6
- import { formatUpdateApiResult, runGatewayUpdateWithPostSteps } from "../../../infra/update-runner.js";
5
+ import { normalizeUpdateChannel } from "../../../infra/update-channels.js";
7
6
  import { getUpdateAvailable, runGatewayUpdateCheck } from "../../../infra/update-startup.js";
8
7
  import { createGatewayRouteLogger } from "../lib/route-logger.js";
8
+ import { formatUpdateApiResult, runGatewayUpdateWithPostSteps } from "../../../infra/update-runner.js";
9
9
  import { streamSSE } from "hono/streaming";
10
10
  //#region src/gateway/hono/routes/update.ts
11
11
  init_package_version();
@@ -0,0 +1,5 @@
1
+ import type { Hono } from 'hono';
2
+ import { UnderstandingRefreshService } from '../../../user-context/sources/refresh-service.js';
3
+ import type { AuthenticatedRouteDeps } from './deps.js';
4
+ export declare function createUnderstandingRefreshService(deps: AuthenticatedRouteDeps): UnderstandingRefreshService;
5
+ export declare function registerUserModelRefreshRoutes(app: Hono, deps: AuthenticatedRouteDeps, refresh?: UnderstandingRefreshService): void;
@@ -0,0 +1,128 @@
1
+ import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
2
+ import { getConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
3
+ import "../../../storage/sqlite/index.js";
4
+ import { listUnderstandingSourceRuns } from "../../../user-context/sources/repository.js";
5
+ import { isLocalUnderstandingSourceId } from "../../../user-context/sources/local-source-contract.js";
6
+ import { getWorkDiscoveryRun } from "../../../work-discovery/repository.js";
7
+ import { normalizeUnderstandingSourceItems } from "../../../work-discovery/service.js";
8
+ import { UnderstandingRefreshService } from "../../../user-context/sources/refresh-service.js";
9
+ import { randomUUID } from "node:crypto";
10
+ //#region src/gateway/hono/routes/user-model-refresh.ts
11
+ function createUnderstandingRefreshService(deps) {
12
+ const service = deps.service;
13
+ return new UnderstandingRefreshService({
14
+ enabled: () => service.currentConfig.userContext.enabled && service.currentConfig.userContext.userModel.enabled,
15
+ emit: (type, payload) => service.emit(type, payload),
16
+ async start(grant, runId) {
17
+ if (grant.adapterId === "local-work-folders") return {
18
+ discoveryRunId: (await service.workDiscovery.rescanDirectorySource({
19
+ id: grant.id,
20
+ idempotencyKey: runId
21
+ })).id,
22
+ phase: "reading"
23
+ };
24
+ if (isLocalUnderstandingSourceId(grant.adapterId)) return { phase: "waiting_desktop" };
25
+ if (grant.adapterId.startsWith("connector:")) {
26
+ const account = typeof grant.config.accountId === "string" ? getConnectorAccount(grant.config.accountId) : void 0;
27
+ if (!account?.enabled || !account.currentConnectionId) throw new Error("Reconnect this source before updating.");
28
+ const job = service.requestConnectorLearning(account.currentConnectionId, {
29
+ mode: "incremental",
30
+ reason: "manual",
31
+ idempotencyKey: `understanding-refresh:${randomUUID()}`
32
+ });
33
+ if (!job) throw new Error("This source cannot currently be updated.");
34
+ return {
35
+ connectorLearningJobId: job.id,
36
+ accountId: account.id,
37
+ phase: "reading"
38
+ };
39
+ }
40
+ throw new Error("This source does not support understanding updates.");
41
+ },
42
+ progress(run) {
43
+ if (typeof run.metadata.discoveryRunId === "string") {
44
+ const discovery = getWorkDiscoveryRun(run.metadata.discoveryRunId);
45
+ if (!discovery) return {
46
+ status: "failed",
47
+ phase: "completed",
48
+ error: "Work folder update is no longer available."
49
+ };
50
+ return {
51
+ status: discovery.status === "completed" ? "completed" : discovery.status === "failed" || discovery.status === "canceled" ? "failed" : "running",
52
+ phase: discovery.status === "analyzing" ? "analyzing" : discovery.status === "queued" || discovery.status === "probing" ? "reading" : "completed",
53
+ error: discovery.errorMessage
54
+ };
55
+ }
56
+ if (typeof run.metadata.connectorLearningJobId === "string") {
57
+ const job = listConnectorLearningJobs({
58
+ accountId: String(run.metadata.accountId),
59
+ limit: 100
60
+ }).find((item) => item.id === run.metadata.connectorLearningJobId);
61
+ if (!job) return {
62
+ status: "failed",
63
+ phase: "completed",
64
+ error: "Connector update is no longer available."
65
+ };
66
+ const sourceRun = listUnderstandingSourceRuns(run.grantId, 100).find((item) => item.id !== run.id && item.metadata.connectorLearningJobId === job.id);
67
+ if (job.status === "completed") return {
68
+ status: sourceRun?.status === "partial" ? "partial" : "completed",
69
+ phase: "completed",
70
+ added: job.candidatesCreated,
71
+ itemsSeen: job.itemsDiscovered,
72
+ error: sourceRun?.status === "partial" ? "Some source information could not be analyzed. Retry this source." : void 0
73
+ };
74
+ if (job.status === "paused" || job.status === "failed") return {
75
+ status: "failed",
76
+ phase: "completed",
77
+ error: job.error ?? "Connector update failed."
78
+ };
79
+ return {
80
+ status: "running",
81
+ phase: job.phase === "deriving" ? "analyzing" : "reading",
82
+ itemsSeen: job.itemsDiscovered
83
+ };
84
+ }
85
+ },
86
+ async analyzeDesktop(grant, items, signal) {
87
+ const status = (await service.workDiscovery.importUnderstandingSources(items, grant.processingPolicy, signal, void 0, void 0, { grantId: grant.id })).sourceStatuses.find((item) => item.sourceId === grant.adapterId);
88
+ if (status?.status !== "completed") throw new Error(status?.error ?? "Source analysis did not complete.");
89
+ return {};
90
+ }
91
+ });
92
+ }
93
+ function registerUserModelRefreshRoutes(app, deps, refresh = createUnderstandingRefreshService(deps)) {
94
+ app.post("/api/user-model/refresh", deps.strictRateLimitMiddleware, async (c) => {
95
+ const input = await c.req.json().catch(() => null);
96
+ if (!input || typeof input !== "object" || Array.isArray(input) || input.sourceIds !== void 0 && (!Array.isArray(input.sourceIds) || !input.sourceIds.length || input.sourceIds.length > 100 || input.sourceIds.some((id) => typeof id !== "string" || !id))) return c.json({ error: "Provide sourceIds or an empty object to update all authorized sources." }, 400);
97
+ try {
98
+ return c.json({ batch: refresh.start(input.sourceIds) }, 202);
99
+ } catch (err) {
100
+ return c.json({ error: err instanceof Error ? err.message : String(err) }, 400);
101
+ }
102
+ });
103
+ app.get("/api/user-model/refresh", (c) => c.json({
104
+ batch: refresh.latest(),
105
+ sources: refresh.sources()
106
+ }));
107
+ app.get("/api/user-model/refresh/:id", (c) => {
108
+ const batch = refresh.get(c.req.param("id"));
109
+ return batch ? c.json({ batch }) : c.json({ error: "Update not found." }, 404);
110
+ });
111
+ app.post("/api/user-model/refresh/sources/:runId/collection", deps.strictRateLimitMiddleware, async (c) => {
112
+ const raw = await c.req.json().catch(() => null);
113
+ if (!raw || !Array.isArray(raw.items) || raw.items.length > 1200 || raw.error !== void 0 && typeof raw.error !== "string") return c.json({ error: "Invalid collection." }, 400);
114
+ const items = normalizeUnderstandingSourceItems(raw.items);
115
+ if (raw.items.length && !items.length) return c.json({ error: "No valid source items." }, 400);
116
+ try {
117
+ refresh.submitDesktop(c.req.param("runId"), {
118
+ items,
119
+ error: raw.error
120
+ });
121
+ return c.json({ ok: true }, 202);
122
+ } catch (err) {
123
+ return c.json({ error: err instanceof Error ? err.message : String(err) }, 409);
124
+ }
125
+ });
126
+ }
127
+ //#endregion
128
+ export { createUnderstandingRefreshService, registerUserModelRefreshRoutes };
@@ -1,10 +1,11 @@
1
1
  import { createCollaborationRule, getCollaborationRule, listCollaborationRules, setCollaborationRuleStatus } from "../../../storage/sqlite/collaboration-rule-repository.js";
2
- import { KnowledgeReviewConflictError, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
2
+ import { KnowledgeReviewConflictError, deleteKnowledgeItem, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
3
3
  import "../../../knowledge-memory/index.js";
4
4
  import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus } from "../../../user-model/goals.js";
5
- import { getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "../../../user-model/repository.js";
5
+ import { deleteUserAssertion, getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "../../../user-model/repository.js";
6
6
  import { applyUserProfilePatch, getUserProfileSnapshot } from "../../../user-model/profile.js";
7
7
  import { bootstrapUserModel } from "../../../user-model/bootstrap.js";
8
+ import { canUseAssertion } from "../../../user-model/usage-policy.js";
8
9
  import "../../../user-model/index.js";
9
10
  import { listMemoryMaintenanceRuns } from "../../../memory-maintenance/service.js";
10
11
  import "../../../memory-maintenance/index.js";
@@ -117,7 +118,8 @@ function assertionView(assertion, sources = listUserAssertionSources([assertion.
117
118
  predicate: slot.predicate,
118
119
  subject: slot.subject,
119
120
  scope: slot.scope,
120
- sources
121
+ sources,
122
+ usable: canUseAssertion(assertion)
121
123
  };
122
124
  }
123
125
  function registerUserModelRoutes(authenticated, deps) {
@@ -259,11 +261,14 @@ function registerUserModelRoutes(authenticated, deps) {
259
261
  createdBy: "user",
260
262
  ...typeof input.correctionOfAssertionId === "string" ? { correctionOfAssertionId: input.correctionOfAssertionId } : {}
261
263
  };
262
- return c.json(reconcileAssertion(candidate), 201);
264
+ return c.json(reconcileAssertion(candidate, Date.now(), { restoreDeleted: true }), 201);
263
265
  } catch (error) {
264
266
  return c.json({ error: errorMessage(error) }, 400);
265
267
  }
266
268
  });
269
+ authenticated.delete("/api/user-model/assertions/:id", write, (c) => {
270
+ return deleteUserAssertion(c.req.param("id")) ? c.json({ ok: true }) : c.json({ error: "Assertion not found" }, 404);
271
+ });
267
272
  authenticated.patch("/api/user-model/assertions/:id/status", write, async (c) => {
268
273
  const input = await body(c);
269
274
  const status = input?.status;
@@ -307,7 +312,6 @@ function registerUserModelRoutes(authenticated, deps) {
307
312
  ...current.validFrom === void 0 ? {} : { validFrom: current.validFrom },
308
313
  ...current.validTo === void 0 ? {} : { validTo: current.validTo },
309
314
  observedAt: Date.now(),
310
- ...current.reviewAt === void 0 ? {} : { reviewAt: current.reviewAt },
311
315
  createdBy: "user",
312
316
  correctionOfAssertionId: current.id
313
317
  }));
@@ -405,6 +409,9 @@ function registerUserModelRoutes(authenticated, deps) {
405
409
  const item = getKnowledgeItem(c.req.param("id"));
406
410
  return item ? c.json({ item }) : c.json({ error: "Knowledge item not found" }, 404);
407
411
  });
412
+ authenticated.delete("/api/knowledge-memory/:id", write, (c) => {
413
+ return deleteKnowledgeItem(c.req.param("id")) ? c.json({ ok: true }) : c.json({ error: "Knowledge item not found" }, 404);
414
+ });
408
415
  authenticated.post("/api/knowledge-memory/:id/review", write, async (c) => {
409
416
  const input = await body(c);
410
417
  const action = String(input?.action ?? "");
@@ -216,36 +216,6 @@ function registerWorkDiscoveryRoutes(authenticated, deps) {
216
216
  }, 400);
217
217
  }
218
218
  });
219
- authenticated.post("/api/work-discovery/runs/:runId/profile", limited, async (c) => {
220
- const body = await c.req.json().catch(() => null);
221
- const decisions = (body && typeof body === "object" && Array.isArray(body.decisions) ? body.decisions : []).flatMap((value) => {
222
- if (!value || typeof value !== "object") return [];
223
- const item = value;
224
- const id = typeof item.id === "string" ? item.id.trim() : "";
225
- const status = item.status === "accepted" || item.status === "edited" || item.status === "rejected" ? item.status : void 0;
226
- if (!id || !status) return [];
227
- return [{
228
- id,
229
- status,
230
- ...typeof item.statement === "string" ? { statement: item.statement } : {}
231
- }];
232
- }).slice(0, 10);
233
- if (!decisions.length) return c.json({
234
- ok: false,
235
- error: "At least one valid decision is required"
236
- }, 400);
237
- const run = service.updateProfileCandidates({
238
- runId: c.req.param("runId"),
239
- decisions
240
- });
241
- return run ? c.json({
242
- ok: true,
243
- run
244
- }) : c.json({
245
- ok: false,
246
- error: "Profile candidates not found"
247
- }, 404);
248
- });
249
219
  authenticated.post("/api/work-discovery/runs/:runId/suggestions/:suggestionId/select", (c) => {
250
220
  return service.selectSuggestion(c.req.param("runId"), c.req.param("suggestionId")) ? c.json({ ok: true }) : c.json({
251
221
  ok: false,
@@ -1,7 +1,6 @@
1
1
  import { GatewayLockError, acquireGatewayLock, init_lock } from "./lock.js";
2
2
  import { buildDefaultCorsOrigins, isAllInterfacesHost, isLoopbackHost, resolveEffectiveGatewayPort, resolveGatewayServiceListenPort } from "./host.js";
3
3
  import { defaultGatewayBindMode, isContainerEnvironment, resolveGatewayBindHost, resolveGatewayBindHostSync, resolveGatewayBindMode, resolveGatewayEffectiveHost } from "../config/gateway-bind.js";
4
- import { checkPortAvailable, forceFreePortAndWait, listPortListeners, parseLsofOutput } from "./ports.js";
5
4
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
6
5
  import { resolveGatewayListenHost, resolveGatewayListenPlan } from "./listen.js";
7
6
  import { buckets } from "./rate-limit/buckets.js";
@@ -13,6 +12,7 @@ import { GatewayService } from "./service.js";
13
12
  import { createHonoApp } from "./hono/app.js";
14
13
  import { GatewayServer } from "./server.js";
15
14
  import { runGatewayLoop } from "./run-loop.js";
15
+ import { checkPortAvailable, forceFreePortAndWait, listPortListeners, parseLsofOutput } from "./ports.js";
16
16
  import { apiError, apiOk } from "./protocol.js";
17
17
  import "./hono/index.js";
18
18
  import { assertSecureGatewayHttpUrl, assertSecureWebSocketUrl, isInsecurePrivateWsAllowed, isSecureWebSocketUrl } from "./ws-security.js";
@@ -2,9 +2,9 @@ import { acquireGatewayLock, init_lock } from "./lock.js";
2
2
  import { loadConfig } from "../config/loader.js";
3
3
  import "../config/index.js";
4
4
  import { isRestartEnabled } from "../config/commands.flags.js";
5
- import { consumeGatewayRestartIntentSync, consumeGatewaySigusr1RestartAuthorization, isGatewaySigusr1RestartExternallyAllowed, resetGatewayRestartStateForInProcessRestart, scheduleGatewaySigusr1Restart, setGatewaySigusr1RestartPolicy } from "../infra/restart.js";
6
5
  import { runBootstrapMigrationsSync } from "../migrations/runner.js";
7
6
  import { restartGatewayProcessWithFreshPid } from "./respawn.js";
7
+ import { consumeGatewayRestartIntentSync, consumeGatewaySigusr1RestartAuthorization, isGatewaySigusr1RestartExternallyAllowed, resetGatewayRestartStateForInProcessRestart, scheduleGatewaySigusr1Restart, setGatewaySigusr1RestartPolicy } from "../infra/restart.js";
8
8
  //#region src/gateway/run-loop.ts
9
9
  /**
10
10
  * Gateway Run Loop - Core run loop for gateway process management
@@ -66,21 +66,18 @@ import { ConnectionRecoveryService } from "../connectors/connection-recovery-ser
66
66
  import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
67
67
  import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
68
68
  import { startConnectorSupervisor } from "../connectors/supervisor.js";
69
- import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
70
- import "../endpoint-tools/index.js";
71
69
  import { DiscussionService } from "../discussions/service.js";
72
70
  import { DiscussionOrganizer } from "../discussions/organizer.js";
73
71
  import { DiscussionLiveWorker } from "../discussions/live-worker.js";
74
72
  import { DiscussionOrganizerWorker } from "../discussions/organizer-worker.js";
75
73
  import { DiscussionSealer } from "../discussions/sealer.js";
76
74
  import "../discussions/index.js";
77
- import { createBackgroundTask } from "../infra/background-task.js";
78
- import { scheduleGatewayUpdateCheck } from "../infra/update-startup.js";
79
- import { LocalAppService } from "../local-apps/service.js";
80
- import "../local-apps/index.js";
75
+ import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
76
+ import "../endpoint-tools/index.js";
81
77
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
82
78
  import { prepareAutomationAgentSession } from "./automation-agent-session.js";
83
79
  import { stopTailscaleExposure } from "./tailscale-lifecycle.js";
80
+ import { createBackgroundTask } from "../infra/background-task.js";
84
81
  import { buildTaskAgentContext } from "../agent/source-context/task-context.js";
85
82
  import { deliverProactiveCard } from "../proactive/inbox/delivery.js";
86
83
  import { WorkDiscoveryService } from "../work-discovery/service.js";
@@ -112,6 +109,8 @@ import { getXopcCloudCatalogCoordinator } from "../providers/xopc-cloud-catalog-
112
109
  import { ModelCatalogSyncService } from "../providers/model-catalog-sync-service.js";
113
110
  import { runBootstrapMigrationsSync } from "../migrations/runner.js";
114
111
  import { NotificationService } from "../notifications/service.js";
112
+ import { LocalAppService } from "../local-apps/service.js";
113
+ import "../local-apps/index.js";
115
114
  import { createRuntimeBrowserAutomationService } from "../browser/automations/runtime-service.js";
116
115
  import "../browser/automations/index.js";
117
116
  import { mapProductEventToProactive } from "../proactive/events/product-event-bridge.js";
@@ -121,6 +120,7 @@ import { ProactiveWorker } from "../proactive/execution/worker.js";
121
120
  import { ProactiveTemporalWorker } from "../proactive/temporal/worker.js";
122
121
  import { ProactiveInboxWorker } from "../proactive/inbox/worker.js";
123
122
  import "../proactive/index.js";
123
+ import { scheduleGatewayUpdateCheck } from "../infra/update-startup.js";
124
124
  import { resolveChannelConnectDeferSet } from "./resolve-channel-connect-defer.js";
125
125
  import { restartGatewayProcessWithFreshPid } from "./respawn.js";
126
126
  import { GatewaySessionsApi } from "./service/sessions-api.js";
@@ -1,5 +1,5 @@
1
- import { isGatewayArgv, parseProcCmdline } from "./gateway-process-argv.js";
2
1
  import { listPortListeners } from "../gateway/ports.js";
2
+ import { isGatewayArgv, parseProcCmdline } from "./gateway-process-argv.js";
3
3
  import fs from "node:fs";
4
4
  import { spawnSync } from "node:child_process";
5
5
  //#region src/infra/gateway-processes.ts
@@ -4,8 +4,8 @@ import { init_paths, resolveConfigPath } from "../config/paths.js";
4
4
  import { init_loader, loadConfig } from "../config/loader.js";
5
5
  import { isRestartEnabled } from "../config/commands.flags.js";
6
6
  import { resolveGatewayService } from "../daemon/service.js";
7
- import { findVerifiedGatewayListenerPidsOnPortSync, signalVerifiedGatewayPidSync } from "./gateway-processes.js";
8
7
  import { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from "./restart.js";
8
+ import { findVerifiedGatewayListenerPidsOnPortSync, signalVerifiedGatewayPidSync } from "./gateway-processes.js";
9
9
  import { refreshGatewayServiceAfterUpdate } from "./update-service-refresh.js";
10
10
  //#region src/infra/update-restart.ts
11
11
  init_loader();
@@ -1,11 +1,11 @@
1
1
  import { runPostUpdateExtensionSync } from "../extensions/update.js";
2
+ import "./update-channels.js";
3
+ import { compareSemver, resolveNpmChannelTag } from "./update-check.js";
2
4
  import { readPackageName, readPackageVersion } from "./package-json.js";
3
5
  import { createDefaultCommandRunner, runCommandWithTimeout } from "./run-command.js";
4
6
  import { XOPC_PACKAGE_NAME, cleanupGlobalRenameDirs, createGlobalInstallEnv, detectGlobalInstallManagerForRoot, resolveGlobalInstallSpec, resolveGlobalInstallTarget } from "./update-global.js";
5
7
  import { runGlobalPackageUpdateSteps } from "./package-update-steps.js";
6
8
  import { resolveStableNodePath } from "./stable-node-path.js";
7
- import "./update-channels.js";
8
- import { compareSemver, resolveNpmChannelTag } from "./update-check.js";
9
9
  import { trimLogTail } from "./update-log.js";
10
10
  import { maybeRestartGatewayAfterUpdate } from "./update-restart.js";
11
11
  import path from "node:path";
@@ -3,9 +3,9 @@ import { init_paths_state, resolveUpdateCheckStatePath } from "../config/paths-s
3
3
  import { createLogger } from "../utils/logger/index.js";
4
4
  import { init_logger } from "../utils/logger.js";
5
5
  import { init_write_file_atomic, writeTextAtomic } from "./write-file-atomic.js";
6
+ import { acquireUpdateLock } from "./update-lock.js";
6
7
  import { normalizeUpdateChannel } from "./update-channels.js";
7
8
  import { compareSemver, detectInstallKind, resolveNpmChannelTag, resolvePackageRoot } from "./update-check.js";
8
- import { acquireUpdateLock } from "./update-lock.js";
9
9
  import { createHash, randomUUID } from "node:crypto";
10
10
  import { readFile } from "node:fs/promises";
11
11
  //#region src/infra/update-startup.ts
@@ -106,7 +106,7 @@ var ConnectedKnowledgePipeline = class {
106
106
  status: "completed"
107
107
  });
108
108
  result.completed += 1;
109
- result.recordIds.push(written.item.id);
109
+ if (written.item) result.recordIds.push(written.item.id);
110
110
  } catch (error) {
111
111
  const message = error instanceof Error ? error.message : String(error);
112
112
  completeKnowledgeSourceItemSynthesis({
@@ -1,2 +1,2 @@
1
- import { KnowledgeReviewConflictError, classifyKnowledgeContentSource, getKnowledgeItem, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem } from "./repository.js";
2
- export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, getKnowledgeItem, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };
1
+ import { KnowledgeReviewConflictError, classifyKnowledgeContentSource, deleteKnowledgeItem, getKnowledgeItem, isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem } from "./repository.js";
2
+ export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, deleteKnowledgeItem, getKnowledgeItem, isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };
@@ -21,6 +21,7 @@ export interface WriteKnowledgeInput {
21
21
  derivedFromRecalledContext?: boolean;
22
22
  source?: Record<string, unknown>;
23
23
  replaceExisting?: boolean;
24
+ restoreDeleted?: boolean;
24
25
  now?: number;
25
26
  }
26
27
  export declare class KnowledgeReviewConflictError extends Error {
@@ -29,6 +30,10 @@ export declare class KnowledgeReviewConflictError extends Error {
29
30
  export declare function writeKnowledgeItem(input: WriteKnowledgeInput): {
30
31
  item: KnowledgeItem;
31
32
  created: boolean;
33
+ } | {
34
+ item?: undefined;
35
+ created: false;
36
+ suppressed: true;
32
37
  };
33
38
  export declare function getKnowledgeItem(id: string): KnowledgeItem | undefined;
34
39
  export declare function listKnowledgeItems(input?: {
@@ -70,3 +75,5 @@ export declare function searchKnowledgeItems(input: {
70
75
  }): KnowledgeItem[];
71
76
  export declare function classifyKnowledgeContentSource(item: KnowledgeItem): KnowledgeContentSource;
72
77
  export declare function knowledgeItemAllowed(item: KnowledgeItem, policy: KnowledgeReadPolicy): boolean;
78
+ export declare function deleteKnowledgeItem(id: string, now?: number): boolean;
79
+ export declare function isKnowledgeCurrent(item: KnowledgeItem, asOf?: number): boolean;
@@ -1,6 +1,7 @@
1
1
  import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
2
  import { validateScope } from "../user-model/domain.js";
3
3
  import { buildFts5SearchQuery, init_fts } from "../storage/sqlite/fts.js";
4
+ import { clearMemoryAudit, isMemorySuppressed, memoryFingerprint, restoreMemory, suppressMemory } from "../user-context/memory-suppression.js";
4
5
  import { randomUUID } from "node:crypto";
5
6
  //#region src/knowledge-memory/repository.ts
6
7
  init_fts();
@@ -60,7 +61,14 @@ function writeKnowledgeItem(input) {
60
61
  if (input.validFrom !== void 0 && input.validTo !== void 0 && input.validTo < input.validFrom) throw new Error("Knowledge validTo must be greater than or equal to validFrom.");
61
62
  const principalId = input.principalId ?? "local-owner";
62
63
  const now = input.now ?? Date.now();
64
+ const admittedStatus = input.status ?? (input.originClass === "owner" || input.originClass !== "untrusted" && input.confidence >= .7 && !input.derivedFromRecalledContext ? "active" : "candidate");
63
65
  return runSqliteWriteTransaction((db) => {
66
+ const keys = knowledgeFingerprints(input);
67
+ if (input.restoreDeleted && input.originClass === "owner") restoreMemory(db, keys);
68
+ if (isMemorySuppressed(db, keys)) return {
69
+ created: false,
70
+ suppressed: true
71
+ };
64
72
  const existingStatuses = input.replaceExisting ? [
65
73
  "candidate",
66
74
  "active",
@@ -76,12 +84,12 @@ function writeKnowledgeItem(input) {
76
84
  const existing = db.prepare(`SELECT * FROM knowledge_items WHERE principal_id = ?
77
85
  AND canonical_key = ? AND scope_type = ? AND COALESCE(scope_id, '') = COALESCE(?, '')
78
86
  AND status IN (${existingStatuses.map(() => "?").join(", ")})`).get(principalId, input.canonicalKey.trim(), input.scope.type, input.scope.id ?? null, ...existingStatuses);
79
- if (existing && !input.replaceExisting) return {
87
+ if (existing && (!input.replaceExisting || existing.origin_class === "owner" && input.originClass !== "owner")) return {
80
88
  item: fromRow(existing),
81
89
  created: false
82
90
  };
83
91
  if (existing) {
84
- const nextStatus = input.status ?? (input.originClass === "owner" ? "active" : "candidate");
92
+ const nextStatus = admittedStatus;
85
93
  db.prepare(`UPDATE knowledge_items SET kind = ?, content = ?, record_class = ?, status = ?, confidence = ?,
86
94
  importance = ?, valid_from = ?, valid_to = ?, expires_at = ?, review_at = ?,
87
95
  origin_class = ?, source_agent_id = ?, source_conversation_id = ?, source_turn_id = ?,
@@ -102,7 +110,7 @@ function writeKnowledgeItem(input) {
102
110
  };
103
111
  }
104
112
  const id = randomUUID();
105
- const status = input.status ?? (input.originClass === "owner" ? "active" : "candidate");
113
+ const status = admittedStatus;
106
114
  db.prepare(`INSERT INTO knowledge_items (
107
115
  knowledge_id, principal_id, kind, scope_type, scope_id, content, canonical_key, record_class,
108
116
  status, confidence, importance, valid_from, valid_to, expires_at, review_at,
@@ -154,12 +162,14 @@ function transitionKnowledgeStatus(input) {
154
162
  const current = db.prepare("SELECT * FROM knowledge_items WHERE knowledge_id = ?").get(input.id);
155
163
  if (!current) return void 0;
156
164
  if (input.expectedStatus && current.status !== input.expectedStatus) throw new KnowledgeReviewConflictError(`Knowledge status changed from ${input.expectedStatus} to ${current.status}.`);
157
- db.prepare(`UPDATE knowledge_items SET status = ?, content = COALESCE(?, content), updated_at = ?
158
- WHERE knowledge_id = ?`).run(input.status, content ?? null, now, input.id);
165
+ db.prepare(`UPDATE knowledge_items SET status = ?, content = COALESCE(?, content),
166
+ origin_class = CASE WHEN ? THEN 'owner' ELSE origin_class END, updated_at = ?
167
+ WHERE knowledge_id = ?`).run(input.status, content ?? null, input.actor === "user" && input.status === "active" ? 1 : 0, now, input.id);
159
168
  if (content !== void 0) {
160
169
  db.prepare("DELETE FROM knowledge_items_fts WHERE knowledge_id = ?").run(input.id);
161
170
  db.prepare("INSERT INTO knowledge_items_fts(content, knowledge_id) VALUES (?, ?)").run(content, input.id);
162
171
  }
172
+ if (input.actor === "user" && (input.status === "rejected" || input.status === "archived")) suppressMemory(db, knowledgeFingerprints(fromRow(current)), now);
163
173
  insertStatusEvent(db, {
164
174
  knowledgeId: input.id,
165
175
  fromStatus: current.status,
@@ -184,7 +194,8 @@ const REVIEW_TRANSITIONS = {
184
194
  from: [
185
195
  "candidate",
186
196
  "needs_review",
187
- "stale"
197
+ "stale",
198
+ "active"
188
199
  ],
189
200
  to: "active",
190
201
  requiresContent: true
@@ -292,11 +303,12 @@ function searchKnowledgeItems(input) {
292
303
  AND (k.valid_from IS NULL OR k.valid_from <= ?)
293
304
  AND (k.valid_to IS NULL OR k.valid_to >= ?)
294
305
  AND (k.expires_at IS NULL OR k.expires_at >= ?)
306
+ AND (k.review_at IS NULL OR k.review_at > ?)
295
307
  ${input.recordClass ? "AND k.record_class = ?" : ""}
296
308
  ${input.trustedOnly ? "AND k.origin_class != 'untrusted'" : ""}
297
309
  AND ${contentSource}
298
310
  AND ${visible.sql}
299
- ORDER BY rank ASC, k.importance DESC, k.updated_at DESC LIMIT ?`).all(fts, principalId, asOf, asOf, asOf, ...input.recordClass ? [input.recordClass] : [], ...visible.values, limit).map(fromRow);
311
+ ORDER BY rank ASC, k.importance DESC, k.updated_at DESC LIMIT ?`).all(fts, principalId, asOf, asOf, asOf, asOf, ...input.recordClass ? [input.recordClass] : [], ...visible.values, limit).map(fromRow);
300
312
  }
301
313
  function classifyKnowledgeContentSource(item) {
302
314
  if (item.recordClass === "memory") return "memory";
@@ -305,5 +317,43 @@ function classifyKnowledgeContentSource(item) {
305
317
  function knowledgeItemAllowed(item, policy) {
306
318
  return policy.scopes.includes(item.scope.type) && policy.contentSources.includes(classifyKnowledgeContentSource(item));
307
319
  }
320
+ function knowledgeFingerprints(input) {
321
+ const principal = input.principalId ?? "local-owner";
322
+ return [memoryFingerprint([
323
+ "knowledge-key",
324
+ principal,
325
+ input.scope.type,
326
+ input.scope.id ?? "",
327
+ input.canonicalKey
328
+ ]), memoryFingerprint([
329
+ "knowledge-content",
330
+ principal,
331
+ input.scope.type,
332
+ input.scope.id ?? "",
333
+ input.content
334
+ ])];
335
+ }
336
+ function deleteKnowledgeItem(id, now = Date.now()) {
337
+ return runSqliteWriteTransaction((db) => {
338
+ const rows = db.prepare(`WITH RECURSIVE deleted(id) AS (
339
+ SELECT knowledge_id FROM knowledge_items WHERE knowledge_id = ?
340
+ UNION SELECT k.knowledge_id FROM knowledge_items k JOIN deleted d
341
+ ON json_extract(k.source_json, '$.episodeKnowledgeId') = d.id
342
+ OR k.knowledge_id = (SELECT json_extract(source_json, '$.episodeKnowledgeId')
343
+ FROM knowledge_items WHERE knowledge_id = d.id)
344
+ ) SELECT * FROM knowledge_items WHERE knowledge_id IN (SELECT id FROM deleted)`).all(id);
345
+ for (const row of rows) {
346
+ const item = fromRow(row);
347
+ suppressMemory(db, knowledgeFingerprints(item), now);
348
+ clearMemoryAudit(db, "knowledge", item.id);
349
+ db.prepare("DELETE FROM knowledge_items_fts WHERE knowledge_id = ?").run(item.id);
350
+ db.prepare("DELETE FROM knowledge_items WHERE knowledge_id = ?").run(item.id);
351
+ }
352
+ return rows.length > 0;
353
+ });
354
+ }
355
+ function isKnowledgeCurrent(item, asOf = Date.now()) {
356
+ return item.status === "active" && (item.validFrom === void 0 || item.validFrom <= asOf) && (item.validTo === void 0 || item.validTo >= asOf) && (item.expiresAt === void 0 || item.expiresAt >= asOf) && (item.reviewAt === void 0 || item.reviewAt > asOf);
357
+ }
308
358
  //#endregion
309
- export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, getKnowledgeItem, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };
359
+ export { KnowledgeReviewConflictError, classifyKnowledgeContentSource, deleteKnowledgeItem, getKnowledgeItem, isKnowledgeCurrent, knowledgeItemAllowed, listKnowledgeItems, listKnowledgeStatusEvents, reviewKnowledgeItem, searchKnowledgeItems, transitionKnowledgeStatus, writeKnowledgeItem };