@xopcai/xopc 0.0.248 → 0.0.249

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 (452) 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-etpmyV7S.js → activity-store-B759R_qf.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BmKxSM1k.js → agent-avatar-dicebear-BUu7EnwM.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C1rXNUAG.js +1 -0
  6. package/dist/gateway/static/root/assets/agents-DK9HjHO0.js +1 -0
  7. package/dist/gateway/static/root/assets/{api-B0-hLuZ1.js → api-Cg0v7Lpn.js} +1 -1
  8. package/dist/gateway/static/root/assets/app-management-settings-panel-C9DkCW_d.js +1 -0
  9. package/dist/gateway/static/root/assets/appearance-settings-CFggS95Y.js +1 -0
  10. package/dist/gateway/static/root/assets/apps-page-jOvT-fzU.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-BnMSgZvR.js → archive-plugin-BQrilVVv.js} +1 -1
  12. package/dist/gateway/static/root/assets/{attachment-load-CejsQMev.js → attachment-load-BG0BliqV.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-page-RC8EyoAf.js → automations-page-Bo4RiTkh.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-workspace-BKjKTlW8.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-DGjppLSG.js → binary-plugins-BCnyNU0C.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-CWdP4bUc.js → block-editor-Db8DlVvg.js} +50 -50
  17. package/dist/gateway/static/root/assets/browser-settings-page-Dzq18pO1.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BQ1Ilw_o.js → browser-workflow-inputs-C71vfl0b.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-CJh4NyxT.js → browser-workflows-page-vvmSYKsO.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-DW4SBQf4.js +7 -0
  21. package/dist/gateway/static/root/assets/channels-settings-57OGuewD.js +1 -0
  22. package/dist/gateway/static/root/assets/{channels-status-swr-Ohhee4vm.js → channels-status-swr-CKyV3jY5.js} +1 -1
  23. package/dist/gateway/static/root/assets/{chat-terminal-dock-BOtoKTK3.js → chat-terminal-dock-B1Xd6OFB.js} +2 -2
  24. package/dist/gateway/static/root/assets/connectors-page-CT_I3kbR.js +2 -0
  25. package/dist/gateway/static/root/assets/{cron-expression-DTj1V3Sw.js → cron-expression-D-F9vjtE.js} +1 -1
  26. package/dist/gateway/static/root/assets/{date-picker-Yr6OCvGL.js → date-picker-B2OoYvic.js} +1 -1
  27. package/dist/gateway/static/root/assets/dependency-picker-BiGx9Sbj.js +1 -0
  28. package/dist/gateway/static/root/assets/{desktop-pet-DbGzggPF.js → desktop-pet-BNMRqipe.js} +1 -1
  29. package/dist/gateway/static/root/assets/desktop-pet-settings-DeYbIV7A.js +1 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-DgTtk4KC.js → extension-debug-page-COyn05ub.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-DtQeiP6f.js → extension-page-oH43chS2.js} +1 -1
  32. package/dist/gateway/static/root/assets/extension-settings-page-BMO59994.js +1 -0
  33. package/dist/gateway/static/root/assets/gateway-config-api-cimpViGk.js +1 -0
  34. package/dist/gateway/static/root/assets/{gateway-config-swr-DXuXtU1w.js → gateway-config-swr-BGdHwT4e.js} +1 -1
  35. package/dist/gateway/static/root/assets/gateway-settings-BHJtnSic.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-CzBzglzQ.js → gateway-startup-retry-CuaM3b4c.js} +1 -1
  37. package/dist/gateway/static/root/assets/heartbeat-settings-DNhrZHqx.js +1 -0
  38. package/dist/gateway/static/root/assets/home-page-BiHwiBnQ.js +1 -0
  39. package/dist/gateway/static/root/assets/{image-generation-api-TIgsn04n.js → image-generation-api-D7duj7Uj.js} +1 -1
  40. package/dist/gateway/static/root/assets/index-DGeGmj4k.css +2 -0
  41. package/dist/gateway/static/root/assets/index-aBs0EfQB.js +72 -0
  42. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-wsWuoa8p.js → keyboard-shortcuts-settings-D8Zw_lYd.js} +1 -1
  43. package/dist/gateway/static/root/assets/{local-app-workbench-page-CpyvYyrb.js → local-app-workbench-page-eBFVWmtH.js} +2 -2
  44. package/dist/gateway/static/root/assets/{local-apps-page-CXrbrGo8.js → local-apps-page-CvPDPRwb.js} +1 -1
  45. package/dist/gateway/static/root/assets/{locale-store-BJFLQY8O.js → locale-store-zEL8bkwx.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-ClvcWlL6.js +2 -0
  47. package/dist/gateway/static/root/assets/{management-settings-BdJZFR7U.js → management-settings-D8moh99U.js} +1 -1
  48. package/dist/gateway/static/root/assets/{markdown-split-NK3ACVG2.js → markdown-split-D7V3j0vE.js} +1 -1
  49. package/dist/gateway/static/root/assets/{markdown-view-DTF9v1gg.js → markdown-view-DGRN-8wP.js} +1 -1
  50. package/dist/gateway/static/root/assets/{media-plugins-F0jcUxyl.js → media-plugins-BLaE5b1Y.js} +1 -1
  51. package/dist/gateway/static/root/assets/messages-W5P19VTF.js +11 -0
  52. package/dist/gateway/static/root/assets/mobile-pairing-wizard-DiVDuCxl.js +1 -0
  53. package/dist/gateway/static/root/assets/note-detail-panel-CEEvR-fV.js +5 -0
  54. package/dist/gateway/static/root/assets/notes-page-BLqgXNCx.js +8 -0
  55. package/dist/gateway/static/root/assets/page-tabs-BFMGjA60.js +1 -0
  56. package/dist/gateway/static/root/assets/preview-open-alternatives-DNEWZN7H.js +1 -0
  57. package/dist/gateway/static/root/assets/{product-open-page-CxGGlWA8.js → product-open-page-Co5u7asH.js} +1 -1
  58. package/dist/gateway/static/root/assets/project-detail-page-CIiFJ5tk.js +1 -0
  59. package/dist/gateway/static/root/assets/projects-page-B3UF-Pfm.js +1 -0
  60. package/dist/gateway/static/root/assets/{registry-api-CIsNlSBi.js → registry-api-Cg92zSod.js} +1 -1
  61. package/dist/gateway/static/root/assets/remote-access-hub-BUtpkJPG.js +1 -0
  62. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-YkjhiQfA.js → runtime-tools-settings-panel-C0ByNmlV.js} +2 -2
  63. package/dist/gateway/static/root/assets/{schema-form-oFGf3G3s.js → schema-form-Dq_VQpuY.js} +1 -1
  64. package/dist/gateway/static/root/assets/sessions-page-UgJmG-V4.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-advanced-gate-DDCzpdkl.js +1 -0
  66. package/dist/gateway/static/root/assets/settings-form-section-CZu6FX4k.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-page-C7VWs0IT.js → settings-page-S8ekeUZd.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-BdVmwXMv.js +1 -0
  69. package/dist/gateway/static/root/assets/{share-preview-page-t5oz18rh.js → share-preview-page-D2fEidbn.js} +1 -1
  70. package/dist/gateway/static/root/assets/shares-settings-BdsqnCYj.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-ghzAQKna.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-AYiPlgZE.js +2 -0
  73. package/dist/gateway/static/root/assets/{skills-page.utils-DEDTYs2W.js → skills-page.utils-DGzl-ib-.js} +1 -1
  74. package/dist/gateway/static/root/assets/system-settings-panel-5Xd5mIiR.js +1 -0
  75. package/dist/gateway/static/root/assets/task-detail-page-BQAUaCDD.js +1 -0
  76. package/dist/gateway/static/root/assets/{theme-store-O597U8q_.js → theme-store-ZVClZKQ0.js} +1 -1
  77. package/dist/gateway/static/root/assets/tunnel-api-CdZN1Jin.js +1 -0
  78. package/dist/gateway/static/root/assets/{use-autosave-B5eUJ6Zq.js → use-autosave-czRI0NBc.js} +1 -1
  79. package/dist/gateway/static/root/assets/user-model-page-W3GTm6nA.js +2 -0
  80. package/dist/gateway/static/root/assets/{voice-api-key-field-CMKSwz4C.js → voice-api-key-field-8YEvA3cU.js} +1 -1
  81. package/dist/gateway/static/root/assets/{voice-config-api-q7B6fOFB.js → voice-config-api-CopF64lY.js} +1 -1
  82. package/dist/gateway/static/root/assets/work-discovery-overlay-keLtqYYJ.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DZmvLZjb.js → workflow-run-setup-panel-Dy5WgYMO.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-BbAV3h7n.js +5 -0
  85. package/dist/gateway/static/root/index.html +10 -26
  86. package/dist/package.js +1 -1
  87. package/dist/src/agent/agent-instance-gateway.d.ts +2 -2
  88. package/dist/src/agent/agent-manager.d.ts +4 -4
  89. package/dist/src/agent/agent-manager.js +31 -15
  90. package/dist/src/agent/background-review/coordinator.d.ts +2 -4
  91. package/dist/src/agent/background-review/coordinator.js +5 -30
  92. package/dist/src/agent/background-review/prompts.d.ts +4 -2
  93. package/dist/src/agent/background-review/prompts.js +24 -19
  94. package/dist/src/agent/background-review/run-background-review.d.ts +6 -7
  95. package/dist/src/agent/background-review/run-background-review.js +47 -41
  96. package/dist/src/agent/background-review/settings.d.ts +0 -1
  97. package/dist/src/agent/background-review/settings.js +6 -7
  98. package/dist/src/agent/context/audit.d.ts +36 -0
  99. package/dist/src/agent/context/audit.js +97 -0
  100. package/dist/src/agent/context/coordinator.d.ts +26 -0
  101. package/dist/src/agent/context/coordinator.js +72 -0
  102. package/dist/src/agent/context/execution-context.d.ts +54 -0
  103. package/dist/src/agent/context/execution-context.js +147 -0
  104. package/dist/src/agent/context/execution-scope.js +1 -1
  105. package/dist/src/agent/context/prepend.d.ts +2 -0
  106. package/dist/src/agent/context/prepend.js +28 -0
  107. package/dist/src/agent/context/project-context.d.ts +3 -3
  108. package/dist/src/agent/context/project-context.js +26 -23
  109. package/dist/src/agent/embedded/index.js +1 -1
  110. package/dist/src/agent/embedded/run-for-session.js +1 -0
  111. package/dist/src/agent/embedded/run-turn.js +22 -2
  112. package/dist/src/agent/embedded/types.d.ts +1 -25
  113. package/dist/src/agent/external-tools/composio-provider.js +87 -92
  114. package/dist/src/agent/external-tools/gateway-tools.d.ts +4 -1
  115. package/dist/src/agent/external-tools/gateway-tools.js +153 -41
  116. package/dist/src/agent/external-tools/index.js +1 -1
  117. package/dist/src/agent/external-tools/search-error.d.ts +12 -0
  118. package/dist/src/agent/external-tools/search-error.js +29 -0
  119. package/dist/src/agent/external-tools/service.d.ts +4 -0
  120. package/dist/src/agent/external-tools/service.js +22 -2
  121. package/dist/src/agent/memory/compaction-policy.js +1 -1
  122. package/dist/src/agent/memory/compaction-promotion.js +45 -77
  123. package/dist/src/agent/memory/create-memory-manager.js +1 -3
  124. package/dist/src/agent/memory/index.d.ts +0 -5
  125. package/dist/src/agent/memory/index.js +2 -5
  126. package/dist/src/agent/memory/manager.d.ts +0 -16
  127. package/dist/src/agent/memory/manager.js +11 -40
  128. package/dist/src/agent/memory/memory-config.js +1 -1
  129. package/dist/src/agent/memory/runtime.d.ts +2 -2
  130. package/dist/src/agent/memory/runtime.js +9 -19
  131. package/dist/src/agent/memory/types.d.ts +1 -1
  132. package/dist/src/agent/orchestration/agent-orchestrator.js +13 -21
  133. package/dist/src/agent/prompt/sections/memory-skills.js +25 -36
  134. package/dist/src/agent/prompt/sections/tooling.js +10 -4
  135. package/dist/src/agent/prompt/service-prompt-builder.js +4 -3
  136. package/dist/src/agent/service/direct-turn-helpers.js +6 -23
  137. package/dist/src/agent/service/process-direct-streaming.js +5 -3
  138. package/dist/src/agent/service.js +4 -3
  139. package/dist/src/agent/tasks/task-judge-service.js +1 -1
  140. package/dist/src/agent/tools/clarify-tool.d.ts +1 -0
  141. package/dist/src/agent/tools/delegate-tool.js +5 -2
  142. package/dist/src/agent/tools/factory.js +36 -19
  143. package/dist/src/agent/tools/index.d.ts +3 -2
  144. package/dist/src/agent/tools/index.js +4 -3
  145. package/dist/src/agent/tools/knowledge-memory-tool.d.ts +9 -0
  146. package/dist/src/agent/tools/knowledge-memory-tool.js +129 -0
  147. package/dist/src/agent/tools/{dreaming-tool.d.ts → memory-maintenance-tool.d.ts} +2 -2
  148. package/dist/src/agent/tools/memory-maintenance-tool.js +31 -0
  149. package/dist/src/agent/tools/user-context-tool.d.ts +8 -0
  150. package/dist/src/agent/tools/user-context-tool.js +81 -0
  151. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  152. package/dist/src/chat-commands/builtins/understanding.js +24 -6
  153. package/dist/src/cli/commands/connectors.js +1 -1
  154. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  155. package/dist/src/config/schema.d.ts +68 -75
  156. package/dist/src/config/schema.js +29 -18
  157. package/dist/src/config/web-patch.d.ts +1 -1
  158. package/dist/src/connectors/auth-provider-registry.js +1 -1
  159. package/dist/src/connectors/composio-managed-client.js +6 -2
  160. package/dist/src/connectors/connected-source-ingestion.js +1 -1
  161. package/dist/src/connectors/connected-source-understanding.d.ts +1 -3
  162. package/dist/src/connectors/connected-source-understanding.js +86 -99
  163. package/dist/src/connectors/connection-candidates.d.ts +11 -0
  164. package/dist/src/connectors/connection-candidates.js +58 -0
  165. package/dist/src/connectors/connection-capabilities.d.ts +4 -0
  166. package/dist/src/connectors/connection-capabilities.js +37 -0
  167. package/dist/src/connectors/connection-recovery-service.d.ts +42 -0
  168. package/dist/src/connectors/connection-recovery-service.js +396 -0
  169. package/dist/src/connectors/health.js +1 -1
  170. package/dist/src/connectors/learning-coordinator.d.ts +0 -2
  171. package/dist/src/connectors/learning-coordinator.js +6 -7
  172. package/dist/src/connectors/principal.d.ts +5 -0
  173. package/dist/src/connectors/principal.js +18 -0
  174. package/dist/src/gateway/agent-builtin-tools.d.ts +28 -10
  175. package/dist/src/gateway/agent-builtin-tools.js +30 -9
  176. package/dist/src/gateway/chat-stream/mapper.js +1 -28
  177. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -24
  178. package/dist/src/gateway/clarify-bridge.d.ts +4 -0
  179. package/dist/src/gateway/clarify-bridge.js +9 -4
  180. package/dist/src/gateway/heartbeat/service.js +1 -1
  181. package/dist/src/gateway/hono/lib/config-payload.d.ts +52 -30
  182. package/dist/src/gateway/hono/lib/config-payload.js +4 -4
  183. package/dist/src/gateway/hono/middleware/auth.js +1 -2
  184. package/dist/src/gateway/hono/routes/capabilities.js +1 -1
  185. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
  186. package/dist/src/gateway/hono/routes/config-patch/misc.js +72 -28
  187. package/dist/src/gateway/hono/routes/connection-waits.d.ts +3 -0
  188. package/dist/src/gateway/hono/routes/connection-waits.js +58 -0
  189. package/dist/src/gateway/hono/routes/connectors.js +7 -15
  190. package/dist/src/gateway/hono/routes/context-sources.d.ts +4 -0
  191. package/dist/src/gateway/hono/routes/context-sources.js +159 -0
  192. package/dist/src/gateway/hono/routes/index.js +4 -2
  193. package/dist/src/gateway/hono/routes/lazy-bundles.js +9 -4
  194. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  195. package/dist/src/gateway/hono/routes/notes.js +22 -7
  196. package/dist/src/gateway/hono/routes/projects.js +36 -44
  197. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +15 -1
  198. package/dist/src/gateway/hono/routes/side-chats.js +13 -2
  199. package/dist/src/gateway/hono/routes/tasks.js +2 -2
  200. package/dist/src/gateway/hono/routes/user-model.d.ts +3 -0
  201. package/dist/src/gateway/hono/routes/user-model.js +480 -0
  202. package/dist/src/gateway/memory-maintenance-automation-reconciler.d.ts +11 -0
  203. package/dist/src/gateway/memory-maintenance-automation-reconciler.js +72 -0
  204. package/dist/src/gateway/service/agent-runner.d.ts +9 -1
  205. package/dist/src/gateway/service/agent-runner.js +25 -1
  206. package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
  207. package/dist/src/gateway/service/config-coordinator.js +4 -4
  208. package/dist/src/gateway/service/run-gateway-agent.d.ts +1 -0
  209. package/dist/src/gateway/service/run-gateway-agent.js +18 -14
  210. package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
  211. package/dist/src/gateway/service/session-input-coordinator.js +12 -2
  212. package/dist/src/gateway/service.d.ts +3 -1
  213. package/dist/src/gateway/service.js +45 -14
  214. package/dist/src/gateway/side-chat/manager.d.ts +16 -3
  215. package/dist/src/gateway/side-chat/manager.js +117 -28
  216. package/dist/src/gateway/side-chat/run-service.d.ts +2 -0
  217. package/dist/src/gateway/side-chat/run-service.js +28 -5
  218. package/dist/src/gateway/side-chat/types.d.ts +9 -1
  219. package/dist/src/heartbeat/index.js +1 -1
  220. package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +0 -2
  221. package/dist/src/knowledge/connected-knowledge-pipeline.js +46 -217
  222. package/dist/src/knowledge-memory/domain.d.ts +35 -0
  223. package/dist/src/knowledge-memory/index.d.ts +2 -0
  224. package/dist/src/knowledge-memory/index.js +2 -0
  225. package/dist/src/knowledge-memory/repository.d.ts +45 -0
  226. package/dist/src/knowledge-memory/repository.js +154 -0
  227. package/dist/src/memory-maintenance/index.d.ts +2 -0
  228. package/dist/src/memory-maintenance/index.js +3 -0
  229. package/dist/src/memory-maintenance/schedule.d.ts +13 -0
  230. package/dist/src/memory-maintenance/schedule.js +51 -0
  231. package/dist/src/memory-maintenance/service.d.ts +28 -0
  232. package/dist/src/memory-maintenance/service.js +216 -0
  233. package/dist/src/notes/service.d.ts +1 -0
  234. package/dist/src/notes/service.js +7 -1
  235. package/dist/src/notes/types.d.ts +16 -0
  236. package/dist/src/proactive/execution/context.d.ts +2 -2
  237. package/dist/src/proactive/execution/context.js +16 -11
  238. package/dist/src/proactive/index.d.ts +1 -1
  239. package/dist/src/proactive/index.js +2 -2
  240. package/dist/src/projects/index.d.ts +1 -1
  241. package/dist/src/projects/index.js +2 -2
  242. package/dist/src/projects/knowledge-bind.d.ts +1 -0
  243. package/dist/src/projects/knowledge-bind.js +15 -0
  244. package/dist/src/projects/project-loop.d.ts +3 -3
  245. package/dist/src/projects/project-loop.js +4 -4
  246. package/dist/src/projects/project-store.js +2 -1
  247. package/dist/src/realtime/runtime.js +1 -0
  248. package/dist/src/runtime-tools/manager.js +1 -1
  249. package/dist/src/storage/sqlite/collaboration-rule-repository.d.ts +17 -0
  250. package/dist/src/storage/sqlite/collaboration-rule-repository.js +54 -0
  251. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +30 -0
  252. package/dist/src/storage/sqlite/connection-wait-repository.js +338 -0
  253. package/dist/src/storage/sqlite/connector-account-repository.js +1 -1
  254. package/dist/src/storage/sqlite/context-evidence-repository.d.ts +24 -0
  255. package/dist/src/storage/sqlite/context-evidence-repository.js +52 -0
  256. package/dist/src/storage/sqlite/index.d.ts +3 -5
  257. package/dist/src/storage/sqlite/index.js +4 -6
  258. package/dist/src/storage/sqlite/knowledge-repository.d.ts +0 -19
  259. package/dist/src/storage/sqlite/knowledge-repository.js +1 -90
  260. package/dist/src/storage/sqlite/migrations/148_user_model_foundation.sql +554 -0
  261. package/dist/src/storage/sqlite/migrations/149_separate_source_index_from_memory.sql +18 -0
  262. package/dist/src/storage/sqlite/migrations/150_session_connection_waits.sql +47 -0
  263. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  264. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  265. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  266. package/dist/src/storage/sqlite/notes-repository.d.ts +2 -1
  267. package/dist/src/storage/sqlite/notes-repository.js +37 -3
  268. package/dist/src/storage/sqlite/schema.js +1 -1
  269. package/dist/src/storage/sqlite/session-input-repository.d.ts +14 -2
  270. package/dist/src/storage/sqlite/session-input-repository.js +16 -13
  271. package/dist/src/storage/sqlite/session-repository.js +4 -1
  272. package/dist/src/storage/sqlite/transcript-repository.js +1 -1
  273. package/dist/src/tasks/index.js +2 -2
  274. package/dist/src/tasks/project-operating-view-service.js +1 -1
  275. package/dist/src/tasks/task-application-service.js +6 -1
  276. package/dist/src/tasks/task-context-assembler.js +1 -1
  277. package/dist/src/tasks/task-context-repository.d.ts +0 -1
  278. package/dist/src/tasks/task-context-repository.js +1 -1
  279. package/dist/src/tasks/task-deletion-service.js +1 -1
  280. package/dist/src/tasks/task-handoff-service.js +1 -1
  281. package/dist/src/tasks/task-read-model-projector.js +1 -1
  282. package/dist/src/tasks/task-run-coordinator.js +1 -1
  283. package/dist/src/tasks/task-run-dispatcher.js +1 -1
  284. package/dist/src/tasks/task-run-repository.js +1 -0
  285. package/dist/src/tasks/task-signal-service.js +1 -1
  286. package/dist/src/tui/tool-summary.js +2 -1
  287. package/dist/src/tui/tui-startup-resources.js +1 -1
  288. package/dist/src/user-context/changes.d.ts +1 -1
  289. package/dist/src/user-context/config.d.ts +135 -153
  290. package/dist/src/user-context/config.js +94 -99
  291. package/dist/src/user-context/relationship-continuity.d.ts +2 -2
  292. package/dist/src/user-context/relationship-continuity.js +34 -24
  293. package/dist/src/user-context/sources/activity-clustering.d.ts +9 -3
  294. package/dist/src/user-context/sources/index.js +2 -2
  295. package/dist/src/user-context/sources/repository.d.ts +1 -21
  296. package/dist/src/user-context/sources/repository.js +1 -183
  297. package/dist/src/user-context/sources/types.d.ts +0 -23
  298. package/dist/src/user-model/capture/executor.d.ts +40 -0
  299. package/dist/src/user-model/capture/executor.js +134 -0
  300. package/dist/src/user-model/capture/index.d.ts +2 -0
  301. package/dist/src/user-model/capture/index.js +3 -0
  302. package/dist/src/user-model/capture/semantic.d.ts +21 -0
  303. package/dist/src/user-model/capture/semantic.js +197 -0
  304. package/dist/src/user-model/domain.d.ts +93 -0
  305. package/dist/src/user-model/domain.js +33 -0
  306. package/dist/src/user-model/goals.d.ts +58 -0
  307. package/dist/src/user-model/goals.js +89 -0
  308. package/dist/src/user-model/importance.d.ts +11 -0
  309. package/dist/src/user-model/importance.js +17 -0
  310. package/dist/src/user-model/index.d.ts +5 -0
  311. package/dist/src/user-model/index.js +6 -0
  312. package/dist/src/user-model/repository.d.ts +23 -0
  313. package/dist/src/user-model/repository.js +268 -0
  314. package/dist/src/user-model/temporal.d.ts +10 -0
  315. package/dist/src/user-model/temporal.js +44 -0
  316. package/dist/src/voice/realtime/memory-context.d.ts +7 -2
  317. package/dist/src/voice/realtime/memory-context.js +39 -51
  318. package/dist/src/work-discovery/service.d.ts +3 -14
  319. package/dist/src/work-discovery/service.js +138 -99
  320. package/dist/src/work-discovery/types.d.ts +3 -3
  321. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  322. package/dist/src/workflows/service/workflow-session-bridge.js +12 -20
  323. package/package.json +1 -1
  324. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CUXApfcE.js +0 -1
  325. package/dist/gateway/static/root/assets/agents-DNq_GKuc.js +0 -1
  326. package/dist/gateway/static/root/assets/app-management-settings-panel-qfwAgyhQ.js +0 -1
  327. package/dist/gateway/static/root/assets/appearance-settings-DqQVUpCC.js +0 -1
  328. package/dist/gateway/static/root/assets/apps-page-dwIqYmXk.js +0 -1
  329. package/dist/gateway/static/root/assets/automations-workspace-SkdcSZ0i.js +0 -6
  330. package/dist/gateway/static/root/assets/browser-settings-page-CKCa6TvG.js +0 -8
  331. package/dist/gateway/static/root/assets/capabilities-settings-panel-DSp--zIZ.js +0 -7
  332. package/dist/gateway/static/root/assets/channels-settings-CMd2dDrI.js +0 -1
  333. package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +0 -1
  334. package/dist/gateway/static/root/assets/connectors-page-udWs5Kdm.js +0 -2
  335. package/dist/gateway/static/root/assets/dependency-picker-DpN3XZg9.js +0 -1
  336. package/dist/gateway/static/root/assets/desktop-pet-settings-DinCToZh.js +0 -1
  337. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +0 -1
  338. package/dist/gateway/static/root/assets/extension-settings-page-DcguCgsH.js +0 -1
  339. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +0 -1
  340. package/dist/gateway/static/root/assets/eye-off-DEAzt3g1.js +0 -1
  341. package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +0 -1
  342. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +0 -1
  343. package/dist/gateway/static/root/assets/gateway-config-api-Br7lSf6H.js +0 -1
  344. package/dist/gateway/static/root/assets/gateway-settings-CdPoDMuj.js +0 -1
  345. package/dist/gateway/static/root/assets/heartbeat-settings-DHk1hawP.js +0 -1
  346. package/dist/gateway/static/root/assets/home-page-YGipe_W6.js +0 -1
  347. package/dist/gateway/static/root/assets/index-D5TQQpeb.js +0 -71
  348. package/dist/gateway/static/root/assets/index-DReBaaTX.css +0 -2
  349. package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +0 -1
  350. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +0 -1
  351. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  352. package/dist/gateway/static/root/assets/local-context-graph-BjUf7fQ9.js +0 -1
  353. package/dist/gateway/static/root/assets/logs-page-CXKy6E_l.js +0 -2
  354. package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +0 -1
  355. package/dist/gateway/static/root/assets/messages-CHNYp8EQ.js +0 -3
  356. package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +0 -1
  357. package/dist/gateway/static/root/assets/mobile-pairing-wizard-3NKCniSp.js +0 -1
  358. package/dist/gateway/static/root/assets/models-hub-cache-nCfkBN8M.js +0 -1
  359. package/dist/gateway/static/root/assets/notes-page-DuqLahi6.js +0 -1
  360. package/dist/gateway/static/root/assets/notes-workbench-C7j9EdQk.js +0 -5
  361. package/dist/gateway/static/root/assets/oauth-api-8lP_qJpq.js +0 -1
  362. package/dist/gateway/static/root/assets/oauth-authorization-window-Cdolr2wE.js +0 -1
  363. package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +0 -1
  364. package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +0 -1
  365. package/dist/gateway/static/root/assets/preview-open-alternatives-CsNVTKC0.js +0 -1
  366. package/dist/gateway/static/root/assets/project-detail-page-CfebYVX0.js +0 -1
  367. package/dist/gateway/static/root/assets/projects-page-48GvzSVa.js +0 -1
  368. package/dist/gateway/static/root/assets/remote-access-hub-64xj_s2m.js +0 -1
  369. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +0 -1
  370. package/dist/gateway/static/root/assets/search-DA7gz22f.js +0 -1
  371. package/dist/gateway/static/root/assets/sessions-page-CcwcdRN8.js +0 -1
  372. package/dist/gateway/static/root/assets/settings-advanced-gate-BaN84CyW.js +0 -1
  373. package/dist/gateway/static/root/assets/settings-form-section-DjWzRk4z.js +0 -1
  374. package/dist/gateway/static/root/assets/setup-status-panel-DVVOCNbr.js +0 -1
  375. package/dist/gateway/static/root/assets/shares-settings-DUYbYLi7.js +0 -1
  376. package/dist/gateway/static/root/assets/skill-reload-api-BGyD0gB9.js +0 -1
  377. package/dist/gateway/static/root/assets/skills-page-CjF8DTsN.js +0 -2
  378. package/dist/gateway/static/root/assets/system-settings-panel-BSYuRgFI.js +0 -1
  379. package/dist/gateway/static/root/assets/task-detail-page-YZYSTJH7.js +0 -1
  380. package/dist/gateway/static/root/assets/tunnel-api-FKUi9wDL.js +0 -1
  381. package/dist/gateway/static/root/assets/user-context-page-BCyiduKd.js +0 -2
  382. package/dist/gateway/static/root/assets/work-discovery-overlay-jhT2EzeH.js +0 -1
  383. package/dist/gateway/static/root/assets/workflows-page-DQC0TpMa.js +0 -5
  384. package/dist/src/agent/memory/builtin-provider.d.ts +0 -37
  385. package/dist/src/agent/memory/builtin-provider.js +0 -225
  386. package/dist/src/agent/memory/context/types.d.ts +0 -40
  387. package/dist/src/agent/memory/understanding/quality.d.ts +0 -8
  388. package/dist/src/agent/memory/understanding/quality.js +0 -18
  389. package/dist/src/agent/memory/understanding/service.d.ts +0 -19
  390. package/dist/src/agent/memory/understanding/service.js +0 -209
  391. package/dist/src/agent/memory/understanding/types.d.ts +0 -34
  392. package/dist/src/agent/memory/understanding/types.js +0 -1
  393. package/dist/src/agent/memory/user-context-coordinator.d.ts +0 -23
  394. package/dist/src/agent/memory/user-context-coordinator.js +0 -113
  395. package/dist/src/agent/tools/dreaming-tool.js +0 -37
  396. package/dist/src/agent/tools/memory-tool.d.ts +0 -9
  397. package/dist/src/agent/tools/memory-tool.js +0 -119
  398. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +0 -11
  399. package/dist/src/gateway/dreaming-automation-reconciler.js +0 -63
  400. package/dist/src/gateway/hono/routes/understanding-sources.d.ts +0 -21
  401. package/dist/src/gateway/hono/routes/understanding-sources.js +0 -387
  402. package/dist/src/gateway/hono/routes/you.d.ts +0 -3
  403. package/dist/src/gateway/hono/routes/you.js +0 -457
  404. package/dist/src/projects/memory-bind.d.ts +0 -1
  405. package/dist/src/projects/memory-bind.js +0 -14
  406. package/dist/src/storage/sqlite/context-consolidation-repository.d.ts +0 -37
  407. package/dist/src/storage/sqlite/context-consolidation-repository.js +0 -64
  408. package/dist/src/storage/sqlite/memory-records-repository.d.ts +0 -217
  409. package/dist/src/storage/sqlite/memory-records-repository.js +0 -715
  410. package/dist/src/storage/sqlite/remote-context-repository.d.ts +0 -3
  411. package/dist/src/storage/sqlite/remote-context-repository.js +0 -40
  412. package/dist/src/storage/sqlite/understanding-focus-exclusions.d.ts +0 -2
  413. package/dist/src/storage/sqlite/understanding-focus-exclusions.js +0 -24
  414. package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +0 -49
  415. package/dist/src/storage/sqlite/user-context-quality-repository.js +0 -118
  416. package/dist/src/storage/sqlite/user-context-repository.d.ts +0 -85
  417. package/dist/src/storage/sqlite/user-context-repository.js +0 -535
  418. package/dist/src/user-context/automatic-context.d.ts +0 -17
  419. package/dist/src/user-context/automatic-context.js +0 -85
  420. package/dist/src/user-context/consolidation.d.ts +0 -27
  421. package/dist/src/user-context/consolidation.js +0 -187
  422. package/dist/src/user-context/context-objects.d.ts +0 -17
  423. package/dist/src/user-context/context-objects.js +0 -99
  424. package/dist/src/user-context/evaluation/harness.d.ts +0 -13
  425. package/dist/src/user-context/evaluation/harness.js +0 -31
  426. package/dist/src/user-context/extraction/executor.d.ts +0 -22
  427. package/dist/src/user-context/extraction/executor.js +0 -142
  428. package/dist/src/user-context/extraction/repair.d.ts +0 -19
  429. package/dist/src/user-context/extraction/repair.js +0 -71
  430. package/dist/src/user-context/extraction/semantic.d.ts +0 -18
  431. package/dist/src/user-context/extraction/semantic.js +0 -148
  432. package/dist/src/user-context/focus-lifecycle.d.ts +0 -2
  433. package/dist/src/user-context/focus-lifecycle.js +0 -26
  434. package/dist/src/user-context/manual-understanding.d.ts +0 -12
  435. package/dist/src/user-context/manual-understanding.js +0 -37
  436. package/dist/src/user-context/planner.d.ts +0 -17
  437. package/dist/src/user-context/planner.js +0 -465
  438. package/dist/src/user-context/relationships/indexer.d.ts +0 -13
  439. package/dist/src/user-context/relationships/indexer.js +0 -185
  440. package/dist/src/user-context/relationships/service.d.ts +0 -22
  441. package/dist/src/user-context/relationships/service.js +0 -50
  442. package/dist/src/user-context/retriever.d.ts +0 -15
  443. package/dist/src/user-context/retriever.js +0 -124
  444. package/dist/src/user-context/scope.d.ts +0 -7
  445. package/dist/src/user-context/scope.js +0 -9
  446. package/dist/src/user-context/selection-policy.d.ts +0 -20
  447. package/dist/src/user-context/selection-policy.js +0 -33
  448. package/dist/src/user-context/understanding.d.ts +0 -15
  449. package/dist/src/user-context/understanding.js +0 -24
  450. package/dist/src/user-context/understandingQuality.d.ts +0 -5
  451. package/dist/src/user-context/understandingQuality.js +0 -48
  452. /package/dist/src/{agent/memory/context/types.js → knowledge-memory/domain.js} +0 -0
@@ -0,0 +1,268 @@
1
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
+ import { USER_MODEL_PRINCIPAL_ID, validateCandidate, validateScope } from "./domain.js";
3
+ import { defaultReviewAt, requiresBoundedValidity } from "./temporal.js";
4
+ import { randomUUID } from "node:crypto";
5
+ //#region src/user-model/repository.ts
6
+ function slotFromRow(row) {
7
+ return {
8
+ id: row.slot_id,
9
+ principalId: row.principal_id,
10
+ subject: {
11
+ type: row.subject_type,
12
+ id: row.subject_id
13
+ },
14
+ predicate: row.predicate,
15
+ cardinality: row.cardinality,
16
+ scope: {
17
+ type: row.scope_type,
18
+ ...row.scope_id ? { id: row.scope_id } : {}
19
+ },
20
+ createdAt: row.created_at
21
+ };
22
+ }
23
+ function assertionFromRow(row) {
24
+ return {
25
+ id: row.assertion_id,
26
+ slotId: row.slot_id,
27
+ kind: row.kind,
28
+ value: JSON.parse(row.value_json),
29
+ normalizedValue: row.normalized_value,
30
+ statement: row.statement,
31
+ authority: row.authority,
32
+ status: row.status,
33
+ confidence: row.confidence,
34
+ ...row.declared_importance === null ? {} : { declaredImportance: row.declared_importance },
35
+ inferredImportance: row.inferred_importance,
36
+ consequence: row.consequence,
37
+ actionability: row.actionability,
38
+ volatility: row.volatility,
39
+ sensitivity: row.sensitivity,
40
+ disclosurePolicy: row.disclosure_policy,
41
+ applicability: JSON.parse(row.applicability_json),
42
+ ...row.valid_from === null ? {} : { validFrom: row.valid_from },
43
+ ...row.valid_to === null ? {} : { validTo: row.valid_to },
44
+ observedAt: row.observed_at,
45
+ recordedAt: row.recorded_at,
46
+ ...row.review_at === null ? {} : { reviewAt: row.review_at },
47
+ ...row.supersedes_assertion_id === null ? {} : { supersedesAssertionId: row.supersedes_assertion_id },
48
+ createdBy: row.created_by,
49
+ createdAt: row.created_at
50
+ };
51
+ }
52
+ function findOrCreateSlot(db, candidate, now) {
53
+ const principalId = candidate.principalId ?? "local-owner";
54
+ const scopeId = candidate.scope.id?.trim() ?? null;
55
+ const existing = db.prepare(`SELECT * FROM user_assertion_slots
56
+ WHERE principal_id = ? AND subject_type = ? AND subject_id = ? AND predicate = ?
57
+ AND scope_type = ? AND COALESCE(scope_id, '') = COALESCE(?, '')`).get(principalId, candidate.subject.type, candidate.subject.id.trim(), candidate.predicate.trim(), candidate.scope.type, scopeId);
58
+ if (existing) {
59
+ if (existing.cardinality !== candidate.cardinality) throw new Error(`Assertion slot cardinality mismatch for ${candidate.predicate}.`);
60
+ return slotFromRow(existing);
61
+ }
62
+ const id = randomUUID();
63
+ db.prepare(`INSERT INTO user_assertion_slots (
64
+ slot_id, principal_id, subject_type, subject_id, predicate, cardinality,
65
+ scope_type, scope_id, created_at
66
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, principalId, candidate.subject.type, candidate.subject.id.trim(), candidate.predicate.trim(), candidate.cardinality, candidate.scope.type, scopeId, now);
67
+ return slotFromRow(db.prepare("SELECT * FROM user_assertion_slots WHERE slot_id = ?").get(id));
68
+ }
69
+ function intervalsOverlap(left, candidate) {
70
+ const leftStart = left.validFrom ?? Number.NEGATIVE_INFINITY;
71
+ const leftEnd = left.validTo ?? Number.POSITIVE_INFINITY;
72
+ const rightStart = candidate.validFrom ?? Number.NEGATIVE_INFINITY;
73
+ return leftStart <= (candidate.validTo ?? Number.POSITIVE_INFINITY) && rightStart <= leftEnd;
74
+ }
75
+ function listReconcilableAssertions(db, slotId) {
76
+ return db.prepare(`SELECT * FROM user_assertions WHERE slot_id = ?
77
+ AND status NOT IN ('rejected', 'archived') ORDER BY recorded_at DESC`).all(slotId).map(assertionFromRow);
78
+ }
79
+ function sortByAuthorityAndRecorded(assertions) {
80
+ return assertions.sort((left, right) => authorityRank(right.authority) - authorityRank(left.authority) || right.recordedAt - left.recordedAt);
81
+ }
82
+ function initialStatus(candidate) {
83
+ if (requiresBoundedValidity(candidate.kind, candidate.volatility) && candidate.validTo === void 0) return "needs_review";
84
+ return candidate.authority === "user_explicit" ? "active" : "candidate";
85
+ }
86
+ function insertAssertion(db, slotId, candidate, status, now, supersedesAssertionId) {
87
+ const id = randomUUID();
88
+ const reviewAt = candidate.reviewAt ?? defaultReviewAt(candidate.volatility, candidate.observedAt) ?? null;
89
+ db.prepare(`INSERT INTO user_assertions (
90
+ assertion_id, slot_id, kind, value_json, normalized_value, statement, authority, status,
91
+ confidence, declared_importance, inferred_importance, consequence, actionability,
92
+ volatility, sensitivity, disclosure_policy, applicability_json, valid_from, valid_to,
93
+ observed_at, recorded_at, review_at, supersedes_assertion_id, created_by, created_at
94
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, slotId, candidate.kind, JSON.stringify(candidate.value), candidate.normalizedValue.trim(), candidate.statement.trim(), candidate.authority, status, candidate.confidence, candidate.declaredImportance ?? null, candidate.inferredImportance, candidate.consequence, candidate.actionability, candidate.volatility, candidate.sensitivity, candidate.disclosurePolicy, JSON.stringify(candidate.applicability ?? {}), candidate.validFrom ?? null, candidate.validTo ?? null, candidate.observedAt, now, reviewAt, supersedesAssertionId ?? null, candidate.createdBy, now);
95
+ db.prepare(`INSERT INTO user_assertions_fts(statement, assertion_id, slot_id) VALUES (?, ?, ?)`).run(candidate.statement.trim(), id, slotId);
96
+ recordStatusEvent(db, id, null, status, candidate.createdBy === "connector" ? "runtime" : candidate.createdBy, "Assertion admitted.", now);
97
+ if (candidate.evidenceId) db.prepare(`INSERT INTO user_assertion_evidence (
98
+ assertion_id, evidence_id, relation, confidence, created_at
99
+ ) VALUES (?, ?, 'supports', ?, ?)
100
+ ON CONFLICT(assertion_id, evidence_id, relation) DO UPDATE SET confidence = excluded.confidence`).run(id, candidate.evidenceId, candidate.evidenceConfidence ?? candidate.confidence, now);
101
+ return assertionFromRow(db.prepare("SELECT * FROM user_assertions WHERE assertion_id = ?").get(id));
102
+ }
103
+ function recordStatusEvent(db, assertionId, fromStatus, toStatus, actor, reason, now) {
104
+ db.prepare(`INSERT INTO user_assertion_status_events (
105
+ event_id, assertion_id, from_status, to_status, actor_type, reason, created_at
106
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)`).run(randomUUID(), assertionId, fromStatus, toStatus, actor, reason, now);
107
+ }
108
+ function attachEvidence(db, assertionId, candidate, now) {
109
+ if (!candidate.evidenceId) return;
110
+ db.prepare(`INSERT INTO user_assertion_evidence (
111
+ assertion_id, evidence_id, relation, confidence, created_at
112
+ ) VALUES (?, ?, 'supports', ?, ?)
113
+ ON CONFLICT(assertion_id, evidence_id, relation) DO UPDATE SET confidence = excluded.confidence`).run(assertionId, candidate.evidenceId, candidate.evidenceConfidence ?? candidate.confidence, now);
114
+ }
115
+ function closeValidity(db, assertion, boundary, now) {
116
+ if (assertion.validFrom !== void 0 && boundary <= assertion.validFrom) {
117
+ updateStatus(db, assertion, "archived", "Superseded before its validity began.", now);
118
+ return;
119
+ }
120
+ const end = boundary - 1;
121
+ db.prepare(`UPDATE user_assertions SET valid_to = ?
122
+ WHERE assertion_id = ? AND (valid_to IS NULL OR valid_to >= ?)`).run(end, assertion.id, boundary);
123
+ }
124
+ function updateStatus(db, assertion, status, reason, now) {
125
+ if (assertion.status === status) return;
126
+ db.prepare("UPDATE user_assertions SET status = ? WHERE assertion_id = ?").run(status, assertion.id);
127
+ recordStatusEvent(db, assertion.id, assertion.status, status, "runtime", reason, now);
128
+ }
129
+ function authorityRank(authority) {
130
+ return {
131
+ external_untrusted: 0,
132
+ system_inferred: 1,
133
+ user_observed: 2,
134
+ user_explicit: 3
135
+ }[authority];
136
+ }
137
+ function reconcileAssertion(candidate, now = Date.now()) {
138
+ validateCandidate(candidate);
139
+ return runSqliteWriteTransaction((db) => {
140
+ const slot = findOrCreateSlot(db, candidate, now);
141
+ const existing = listReconcilableAssertions(db, slot.id);
142
+ if (candidate.correctionOfAssertionId) {
143
+ if (candidate.authority !== "user_explicit") throw new Error("Only an explicit user assertion can correct an existing assertion.");
144
+ const target = existing.find((item) => item.id === candidate.correctionOfAssertionId);
145
+ if (!target) throw new Error("Correction target does not belong to the resolved assertion slot.");
146
+ if (target.normalizedValue === candidate.normalizedValue.trim()) {
147
+ attachEvidence(db, target.id, candidate, now);
148
+ return {
149
+ action: "deduplicated",
150
+ assertion: target
151
+ };
152
+ }
153
+ const assertion = insertAssertion(db, slot.id, candidate, "active", now, target.id);
154
+ closeValidity(db, target, candidate.validFrom ?? candidate.observedAt, now);
155
+ return {
156
+ action: "superseded",
157
+ assertion,
158
+ previousAssertion: getUserAssertion(target.id)
159
+ };
160
+ }
161
+ const overlapping = sortByAuthorityAndRecorded(existing.filter((item) => intervalsOverlap(item, candidate)));
162
+ const duplicate = overlapping.find((item) => item.normalizedValue === candidate.normalizedValue.trim());
163
+ if (duplicate) {
164
+ attachEvidence(db, duplicate.id, candidate, now);
165
+ return {
166
+ action: "deduplicated",
167
+ assertion: duplicate
168
+ };
169
+ }
170
+ const status = initialStatus(candidate);
171
+ if (slot.cardinality === "multiple" || !overlapping.length) return {
172
+ action: "created",
173
+ assertion: insertAssertion(db, slot.id, candidate, status, now)
174
+ };
175
+ const current = overlapping[0];
176
+ if (candidate.authority === "user_explicit" && authorityRank(candidate.authority) > authorityRank(current.authority)) {
177
+ const assertion = insertAssertion(db, slot.id, candidate, status, now, current.id);
178
+ closeValidity(db, current, candidate.validFrom ?? candidate.observedAt, now);
179
+ return {
180
+ action: "superseded",
181
+ assertion,
182
+ previousAssertion: getUserAssertion(current.id)
183
+ };
184
+ }
185
+ const assertion = insertAssertion(db, slot.id, candidate, candidate.authority === "user_explicit" ? "needs_review" : "conflicted", now);
186
+ if (current.authority !== "user_explicit" && candidate.authority !== "user_explicit") updateStatus(db, current, "conflicted", "Overlapping assertion has a different value.", now);
187
+ return {
188
+ action: "conflicted",
189
+ assertion,
190
+ previousAssertion: getUserAssertion(current.id)
191
+ };
192
+ });
193
+ }
194
+ function getUserAssertion(id) {
195
+ const row = getSqliteDatabase().prepare("SELECT * FROM user_assertions WHERE assertion_id = ?").get(id);
196
+ return row ? assertionFromRow(row) : void 0;
197
+ }
198
+ function getAssertionSlot(id) {
199
+ const row = getSqliteDatabase().prepare("SELECT * FROM user_assertion_slots WHERE slot_id = ?").get(id);
200
+ return row ? slotFromRow(row) : void 0;
201
+ }
202
+ function listSlotAssertions(slotId) {
203
+ return getSqliteDatabase().prepare(`SELECT * FROM user_assertions
204
+ WHERE slot_id = ? ORDER BY recorded_at DESC`).all(slotId).map(assertionFromRow);
205
+ }
206
+ function listUserAssertions(input = {}) {
207
+ const principalId = input.principalId ?? "local-owner";
208
+ const statuses = input.statuses ?? [
209
+ "active",
210
+ "candidate",
211
+ "needs_review",
212
+ "conflicted"
213
+ ];
214
+ if (!statuses.length) return [];
215
+ const placeholders = statuses.map(() => "?").join(", ");
216
+ const limit = Math.max(1, Math.min(2e3, input.limit ?? 200));
217
+ return getSqliteDatabase().prepare(`SELECT a.* FROM user_assertions a
218
+ JOIN user_assertion_slots s ON s.slot_id = a.slot_id
219
+ WHERE s.principal_id = ? AND a.status IN (${placeholders})
220
+ ORDER BY a.recorded_at DESC LIMIT ?`).all(principalId, ...statuses, limit).map(assertionFromRow);
221
+ }
222
+ function getActiveAssertionByPredicate(predicate) {
223
+ const row = getSqliteDatabase().prepare(`SELECT a.* FROM user_assertions a
224
+ JOIN user_assertion_slots s ON s.slot_id = a.slot_id
225
+ WHERE s.principal_id = ? AND s.predicate = ? AND a.status = 'active'
226
+ AND (a.valid_from IS NULL OR a.valid_from <= ?)
227
+ AND (a.valid_to IS NULL OR a.valid_to >= ?)
228
+ ORDER BY CASE a.authority WHEN 'user_explicit' THEN 0 WHEN 'user_observed' THEN 1
229
+ WHEN 'system_inferred' THEN 2 ELSE 3 END, a.recorded_at DESC LIMIT 1`).get(USER_MODEL_PRINCIPAL_ID, predicate, Date.now(), Date.now());
230
+ return row ? assertionFromRow(row) : void 0;
231
+ }
232
+ function getActiveAssertionForSlot(input) {
233
+ validateScope(input.scope);
234
+ const row = getSqliteDatabase().prepare(`SELECT a.* FROM user_assertions a
235
+ JOIN user_assertion_slots s ON s.slot_id = a.slot_id
236
+ WHERE s.principal_id = ? AND s.subject_type = ? AND s.subject_id = ?
237
+ AND s.predicate = ? AND s.scope_type = ?
238
+ AND COALESCE(s.scope_id, '') = COALESCE(?, '') AND a.status = 'active'
239
+ AND (a.valid_from IS NULL OR a.valid_from <= ?)
240
+ AND (a.valid_to IS NULL OR a.valid_to >= ?)
241
+ ORDER BY CASE a.authority WHEN 'user_explicit' THEN 0 WHEN 'user_observed' THEN 1
242
+ WHEN 'system_inferred' THEN 2 ELSE 3 END, a.recorded_at DESC LIMIT 1`).get(USER_MODEL_PRINCIPAL_ID, input.subject.type, input.subject.id.trim(), input.predicate.trim(), input.scope.type, input.scope.id?.trim() ?? null, Date.now(), Date.now());
243
+ return row ? assertionFromRow(row) : void 0;
244
+ }
245
+ function getUserTimezone() {
246
+ const value = getActiveAssertionByPredicate("preference.timezone")?.value;
247
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
248
+ }
249
+ function linkAssertionEvidence(assertionId, evidenceId, relation, confidence, now = Date.now()) {
250
+ if (!Number.isFinite(confidence) || confidence < 0 || confidence > 1) throw new Error("Evidence confidence must be between 0 and 1.");
251
+ getSqliteDatabase().prepare(`INSERT INTO user_assertion_evidence (
252
+ assertion_id, evidence_id, relation, confidence, created_at
253
+ ) VALUES (?, ?, ?, ?, ?)
254
+ ON CONFLICT(assertion_id, evidence_id, relation) DO UPDATE SET confidence = excluded.confidence`).run(assertionId, evidenceId, relation, confidence, now);
255
+ }
256
+ function setAssertionStatus(assertionId, status, input) {
257
+ const current = getUserAssertion(assertionId);
258
+ if (!current) throw new Error(`User assertion not found: ${assertionId}`);
259
+ if (current.status === status) return current;
260
+ const now = input.now ?? Date.now();
261
+ runSqliteWriteTransaction((db) => {
262
+ db.prepare("UPDATE user_assertions SET status = ? WHERE assertion_id = ?").run(status, assertionId);
263
+ recordStatusEvent(db, assertionId, current.status, status, input.actor, input.reason, now);
264
+ });
265
+ return getUserAssertion(assertionId);
266
+ }
267
+ //#endregion
268
+ export { getActiveAssertionByPredicate, getActiveAssertionForSlot, getAssertionSlot, getUserAssertion, getUserTimezone, linkAssertionEvidence, listSlotAssertions, listUserAssertions, reconcileAssertion, setAssertionStatus };
@@ -0,0 +1,10 @@
1
+ import type { AssertionKind, AssertionVolatility, UserAssertion } from './domain.js';
2
+ export declare function defaultReviewAt(volatility: AssertionVolatility, observedAt: number): number | undefined;
3
+ export declare function requiresBoundedValidity(kind: AssertionKind, volatility: AssertionVolatility): boolean;
4
+ export declare function isAssertionValidAt(assertion: UserAssertion, asOf: number): boolean;
5
+ export interface CurrentAssertionResolution {
6
+ assertion?: UserAssertion;
7
+ conflict: boolean;
8
+ contenders: UserAssertion[];
9
+ }
10
+ export declare function resolveCurrentAssertion(assertions: UserAssertion[], asOf?: number): CurrentAssertionResolution;
@@ -0,0 +1,44 @@
1
+ //#region src/user-model/temporal.ts
2
+ const REVIEW_INTERVAL_MS = {
3
+ stable: void 0,
4
+ slow: 4320 * 60 * 60 * 1e3,
5
+ dynamic: 720 * 60 * 60 * 1e3,
6
+ event: 10080 * 60 * 1e3
7
+ };
8
+ function defaultReviewAt(volatility, observedAt) {
9
+ const interval = REVIEW_INTERVAL_MS[volatility];
10
+ return interval === void 0 ? void 0 : observedAt + interval;
11
+ }
12
+ function requiresBoundedValidity(kind, volatility) {
13
+ return kind === "current_state" || volatility === "event";
14
+ }
15
+ function isAssertionValidAt(assertion, asOf) {
16
+ return assertion.status === "active" && (assertion.validFrom === void 0 || assertion.validFrom <= asOf) && (assertion.validTo === void 0 || assertion.validTo >= asOf);
17
+ }
18
+ const AUTHORITY_RANK = {
19
+ external_untrusted: 0,
20
+ system_inferred: 1,
21
+ user_observed: 2,
22
+ user_explicit: 3
23
+ };
24
+ function resolveCurrentAssertion(assertions, asOf = Date.now()) {
25
+ const contenders = assertions.filter((item) => isAssertionValidAt(item, asOf));
26
+ if (!contenders.length) return {
27
+ conflict: false,
28
+ contenders: []
29
+ };
30
+ contenders.sort((left, right) => AUTHORITY_RANK[right.authority] - AUTHORITY_RANK[left.authority] || right.recordedAt - left.recordedAt);
31
+ const best = contenders[0];
32
+ if (contenders.filter((item) => AUTHORITY_RANK[item.authority] === AUTHORITY_RANK[best.authority] && item.normalizedValue !== best.normalizedValue).length) return {
33
+ assertion: void 0,
34
+ conflict: true,
35
+ contenders
36
+ };
37
+ return {
38
+ assertion: best,
39
+ conflict: false,
40
+ contenders
41
+ };
42
+ }
43
+ //#endregion
44
+ export { defaultReviewAt, isAssertionValidAt, requiresBoundedValidity, resolveCurrentAssertion };
@@ -1,7 +1,12 @@
1
1
  import type { AgentMessage } from '@earendil-works/pi-agent-core';
2
2
  import type { Config } from '../../config/schema.js';
3
- import { type AutomaticContextSelection } from '../../user-context/automatic-context.js';
4
- export interface VoiceMemorySnapshot extends AutomaticContextSelection {
3
+ export interface VoiceMemorySnapshot {
4
+ block: string;
5
+ references: Array<{
6
+ kind: 'assertion' | 'knowledge';
7
+ id: string;
8
+ updatedAt: number;
9
+ }>;
5
10
  isCurrent: () => boolean;
6
11
  subscribe: (invalidate: () => void) => () => void;
7
12
  }
@@ -1,31 +1,26 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { onUserContextChange } from "../../user-context/changes.js";
4
- import { getUnderstanding, getUserProfile } from "../../storage/sqlite/user-context-repository.js";
5
3
  import { parseAgentSessionKey } from "../../routing/session-key-utils.js";
6
4
  import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
7
5
  import { getSessionConfig } from "../../storage/sqlite/config-repository.js";
8
6
  import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
9
- import { getUserFocus } from "../../user-context/sources/repository.js";
10
- import { allowsAutomaticDisclosure, focusRejectionReason, rejectionReason } from "../../user-context/selection-policy.js";
7
+ import { getKnowledgeItem } from "../../knowledge-memory/repository.js";
8
+ import "../../knowledge-memory/index.js";
9
+ import { getUserAssertion } from "../../user-model/repository.js";
10
+ import "../../user-model/index.js";
11
+ import { buildExecutionContext } from "../../agent/context/execution-context.js";
11
12
  import { stripRuntimeContextFromUserMessage } from "../../session/user-message-display.js";
12
- import { remoteContextEligibleIds } from "../../storage/sqlite/remote-context-repository.js";
13
- import { selectAutomaticContext } from "../../user-context/automatic-context.js";
14
13
  //#region src/voice/realtime/memory-context.ts
15
14
  init_session_key();
16
15
  init_logger();
17
16
  const log = createLogger("Voice:Memory");
18
- const policyVersion = (config) => JSON.stringify({
19
- userContext: config.userContext,
20
- agents: config.agents
21
- });
22
17
  function voiceMemoryEnabled(config, sessionKey) {
23
18
  const parsed = parseSessionKey(sessionKey);
24
19
  const rest = parseAgentSessionKey(sessionKey)?.rest;
25
20
  const parts = rest?.split(":") ?? [];
26
21
  const explicitlyPrivate = rest === "main" || parts.every(Boolean) && !["cron", "subagent"].includes(parts[0] ?? "") && (parts[0] === "direct" && parts.length >= 2 || parts[1] === "direct" && parts.length >= 3 || parts[2] === "direct" && parts.length >= 4);
27
22
  const user = config.userContext;
28
- if (!parsed || !explicitlyPrivate || parsed.peerKind !== "direct" || !user.enabled || !user.understanding.enabled || user.memory.mode === "off" || !user.memory.sources.includes("understanding")) return false;
23
+ if (!parsed || !explicitlyPrivate || parsed.peerKind !== "direct" || !user.enabled || !user.userModel.enabled || !user.contextPlanning.enabled) return false;
29
24
  const mode = getSessionConfig(sessionKey)?.userContextMode;
30
25
  return mode === void 0 || mode === "enabled";
31
26
  }
@@ -37,56 +32,49 @@ function voiceMemoryQuery(history) {
37
32
  function buildVoiceMemoryContext(input) {
38
33
  const started = performance.now();
39
34
  try {
40
- if (!voiceMemoryEnabled(input.getConfig(), input.sessionKey) || input.maxChars < 128) return;
41
- const policy = policyVersion(input.getConfig());
42
- const workspace = getSessionConfig(input.sessionKey)?.workingDirectoryOverride;
43
- const sessionId = getSessionMetadata(input.sessionKey)?.sessionId;
44
- const selection = selectAutomaticContext({
45
- ...input,
35
+ const config = input.getConfig();
36
+ if (!voiceMemoryEnabled(config, input.sessionKey) || input.maxChars < 128) return;
37
+ const session = getSessionMetadata(input.sessionKey);
38
+ const context = buildExecutionContext({
46
39
  query: voiceMemoryQuery(input.history),
47
- deadline: started + 150
40
+ agentId: session?.routing?.agentId ?? "main",
41
+ workspaceId: input.workspaceId,
42
+ projectId: input.projectId,
43
+ sessionId: input.sessionKey,
44
+ maxAssertions: 6,
45
+ maxKnowledge: 3
48
46
  });
49
- if (!selection.block) return;
50
- let invalid = false;
47
+ const block = JSON.stringify({ backgroundMemory: {
48
+ userFacts: context.assertions.map((item) => item.assertion.statement),
49
+ priorities: context.priorities.map((item) => `${item.rank}: ${item.targetType}/${item.targetId}`),
50
+ knowledge: context.knowledge.map((item) => item.content)
51
+ } });
52
+ if (block.length > input.maxChars || block === "{\"backgroundMemory\":{\"userFacts\":[],\"priorities\":[],\"knowledge\":[]}}") return;
53
+ const references = [...context.assertions.map((item) => ({
54
+ kind: "assertion",
55
+ id: item.assertion.id,
56
+ updatedAt: item.assertion.recordedAt
57
+ })), ...context.knowledge.map((item) => ({
58
+ kind: "knowledge",
59
+ id: item.id,
60
+ updatedAt: item.updatedAt
61
+ }))];
62
+ const configVersion = JSON.stringify(config.userContext);
51
63
  const isCurrent = () => {
52
- try {
53
- if (invalid || !voiceMemoryEnabled(input.getConfig(), input.sessionKey) || policy !== policyVersion(input.getConfig()) || workspace !== getSessionConfig(input.sessionKey)?.workingDirectoryOverride) return false;
54
- const session = getSessionMetadata(input.sessionKey);
55
- if (session?.sessionId !== sessionId || session?.projectId !== input.projectId) return false;
56
- const understandingIds = selection.references.filter((r) => r.kind === "understanding").map((r) => r.id);
57
- const focusIds = selection.references.filter((r) => r.kind === "focus").map((r) => r.id);
58
- const allowed = new Set([...remoteContextEligibleIds("understanding", understandingIds), ...remoteContextEligibleIds("focus", focusIds)]);
59
- return selection.references.every((ref) => {
60
- if (ref.kind === "profile") return ref.version === JSON.stringify(getUserProfile());
61
- if (!allowed.has(ref.id)) return false;
62
- if (ref.kind === "focus") {
63
- const item = getUserFocus(ref.id);
64
- return !!item && item.versionId === ref.version && allowsAutomaticDisclosure(item) && !focusRejectionReason(item, input, Date.now());
65
- }
66
- const item = getUnderstanding(ref.id);
67
- return !!item && item.status === "active" && item.versionId === ref.version && allowsAutomaticDisclosure(item) && !rejectionReason(item, input, Date.now(), []);
68
- });
69
- } catch {
70
- return false;
71
- }
64
+ if (!voiceMemoryEnabled(input.getConfig(), input.sessionKey) || JSON.stringify(input.getConfig().userContext) !== configVersion) return false;
65
+ return references.every((reference) => reference.kind === "assertion" ? getUserAssertion(reference.id)?.recordedAt === reference.updatedAt : getKnowledgeItem(reference.id)?.updatedAt === reference.updatedAt);
72
66
  };
73
67
  log.debug({
74
68
  sessionKey: input.sessionKey,
75
- selectedCount: selection.references.length,
76
- contextChars: selection.block.length,
69
+ selectedCount: references.length,
70
+ contextChars: block.length,
77
71
  durationMs: performance.now() - started
78
72
  }, "Native voice memory selected");
79
73
  return {
80
- ...selection,
74
+ block,
75
+ references,
81
76
  isCurrent,
82
- subscribe: (invalidate) => onUserContextChange((change) => {
83
- if (change.kind === "policy" || change.kind === "session" && change.id === input.sessionKey && !isCurrent() || selection.references.some((ref) => ref.kind === change.kind && ref.id === change.id)) {
84
- if (!isCurrent()) {
85
- invalid = true;
86
- invalidate();
87
- }
88
- }
89
- })
77
+ subscribe: () => () => {}
90
78
  };
91
79
  } catch {
92
80
  log.warn({
@@ -57,7 +57,7 @@ export declare class WorkDiscoveryService {
57
57
  importUnderstandingSources(rawItems: unknown[], processingPolicy: ModelProcessingPolicy, signal?: AbortSignal, runId?: string, rawCheckpoints?: Record<string, unknown>): Promise<{
58
58
  profileCandidates: any[];
59
59
  workThreads: any[];
60
- focuses: any[];
60
+ knowledgeCandidates: any[];
61
61
  sourceStatuses: {
62
62
  sourceId: string;
63
63
  status: "completed";
@@ -65,7 +65,7 @@ export declare class WorkDiscoveryService {
65
65
  } | {
66
66
  profileCandidates: {
67
67
  status: "pending" | "rejected";
68
- understandingId: string;
68
+ assertionId: string;
69
69
  id: string;
70
70
  category: "role" | "responsibility" | "preference" | "routine";
71
71
  factKey: string;
@@ -75,20 +75,9 @@ export declare class WorkDiscoveryService {
75
75
  evidenceRefs?: string[];
76
76
  }[];
77
77
  workThreads: import("./types.js").WorkUnderstandingThread[];
78
- focuses: import("../user-context/sources/types.js").UserFocus[];
78
+ knowledgeCandidates: import("../knowledge-memory/domain.js").KnowledgeItem[];
79
79
  sourceStatuses: import("./analyzer.js").UnderstandingSourceAnalysisStatus[];
80
80
  }>;
81
- updateUnderstandingSourceProfile(input: {
82
- decisions: Array<{
83
- understandingId: string;
84
- status: 'accepted' | 'edited' | 'rejected';
85
- statement?: string;
86
- }>;
87
- }): {
88
- understandingId: string;
89
- status: "rejected" | "accepted" | "edited";
90
- statement: string;
91
- }[];
92
81
  rescanDirectorySource(input: {
93
82
  id: string;
94
83
  idempotencyKey: string;