@xopcai/xopc 0.0.248 → 0.0.250

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 (512) 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-DfBjTSo9.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BmKxSM1k.js → agent-avatar-dicebear-BN6FJXkJ.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C7rZH1A2.js +1 -0
  6. package/dist/gateway/static/root/assets/agents-CgGaoo4z.js +1 -0
  7. package/dist/gateway/static/root/assets/{api-B0-hLuZ1.js → api-zxpcJfgj.js} +1 -1
  8. package/dist/gateway/static/root/assets/app-management-settings-panel-D2gMshuS.js +1 -0
  9. package/dist/gateway/static/root/assets/appearance-settings-wMu0jSKx.js +1 -0
  10. package/dist/gateway/static/root/assets/apps-page-KF1Gnv36.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-BnMSgZvR.js → archive-plugin-u6EE3JV8.js} +1 -1
  12. package/dist/gateway/static/root/assets/{attachment-load-CejsQMev.js → attachment-load-DbJurnv-.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-page-RC8EyoAf.js → automations-page-Ew_e5HDn.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-workspace-Ch-ldu35.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-DGjppLSG.js → binary-plugins-DtDFNfPM.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-CWdP4bUc.js → block-editor-CnAwmabq.js} +44 -44
  17. package/dist/gateway/static/root/assets/browser-settings-page-DtVhsHJW.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BQ1Ilw_o.js → browser-workflow-inputs-BX1-uM9L.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-CJh4NyxT.js → browser-workflows-page-CcbUOWDF.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel--sXeylhe.js +7 -0
  21. package/dist/gateway/static/root/assets/channels-settings-AXSBDujZ.js +1 -0
  22. package/dist/gateway/static/root/assets/{channels-status-swr-Ohhee4vm.js → channels-status-swr-CX-yWwLD.js} +1 -1
  23. package/dist/gateway/static/root/assets/{chat-terminal-dock-BOtoKTK3.js → chat-terminal-dock-CryTDNdD.js} +2 -2
  24. package/dist/gateway/static/root/assets/connectors-page-HBHUWohz.js +2 -0
  25. package/dist/gateway/static/root/assets/{cron-expression-DTj1V3Sw.js → cron-expression-ji5aWrjG.js} +1 -1
  26. package/dist/gateway/static/root/assets/{date-picker-Yr6OCvGL.js → date-picker-Dro_w3eX.js} +1 -1
  27. package/dist/gateway/static/root/assets/dependency-picker-Ce19KKnX.js +1 -0
  28. package/dist/gateway/static/root/assets/{desktop-pet-DbGzggPF.js → desktop-pet-DsSi-3uZ.js} +1 -1
  29. package/dist/gateway/static/root/assets/desktop-pet-settings-8WQ4woJy.js +1 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-DgTtk4KC.js → extension-debug-page-CgvEBfLZ.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-DtQeiP6f.js → extension-page-DkznBbMj.js} +1 -1
  32. package/dist/gateway/static/root/assets/extension-settings-page-BOjhchK2.js +1 -0
  33. package/dist/gateway/static/root/assets/files-BArWTfr7.js +1 -0
  34. package/dist/gateway/static/root/assets/gateway-config-api-OEruhhX3.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-config-swr-DXuXtU1w.js → gateway-config-swr-CMNbl0FZ.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-settings-BgH3A0LO.js +1 -0
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-CzBzglzQ.js → gateway-startup-retry-CR7Xg8As.js} +1 -1
  38. package/dist/gateway/static/root/assets/heartbeat-settings-C97naDkO.js +1 -0
  39. package/dist/gateway/static/root/assets/home-page-BBKKme4G.js +1 -0
  40. package/dist/gateway/static/root/assets/{image-generation-api-TIgsn04n.js → image-generation-api-C5mn73ca.js} +1 -1
  41. package/dist/gateway/static/root/assets/index-BcaF-dgQ.js +72 -0
  42. package/dist/gateway/static/root/assets/index-DAryGvZ7.css +2 -0
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-wsWuoa8p.js → keyboard-shortcuts-settings-BYhfzsqe.js} +1 -1
  44. package/dist/gateway/static/root/assets/local-app-workbench-page-DNncc2tn.js +2 -0
  45. package/dist/gateway/static/root/assets/{local-apps-page-CXrbrGo8.js → local-apps-page-vBlknU7C.js} +1 -1
  46. package/dist/gateway/static/root/assets/{locale-store-BJFLQY8O.js → locale-store-CF4erhjB.js} +1 -1
  47. package/dist/gateway/static/root/assets/logs-page-CizZInrT.js +2 -0
  48. package/dist/gateway/static/root/assets/{management-settings-BdJZFR7U.js → management-settings-Dnx6mSNe.js} +1 -1
  49. package/dist/gateway/static/root/assets/{markdown-split-NK3ACVG2.js → markdown-split-DtBtcHWi.js} +1 -1
  50. package/dist/gateway/static/root/assets/{markdown-view-DTF9v1gg.js → markdown-view-CQvzsE24.js} +1 -1
  51. package/dist/gateway/static/root/assets/{media-plugins-F0jcUxyl.js → media-plugins-DrMYeHe7.js} +1 -1
  52. package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +3 -0
  53. package/dist/gateway/static/root/assets/mobile-pairing-wizard-AKgGy3Kx.js +1 -0
  54. package/dist/gateway/static/root/assets/note-detail-panel-Bw3jD9Jf.js +5 -0
  55. package/dist/gateway/static/root/assets/notes-page-Dpqq7Z-J.js +8 -0
  56. package/dist/gateway/static/root/assets/page-tabs-CX9T71by.js +1 -0
  57. package/dist/gateway/static/root/assets/preview-open-alternatives-DvEHoimN.js +1 -0
  58. package/dist/gateway/static/root/assets/{product-open-page-CxGGlWA8.js → product-open-page-COcr_NUJ.js} +1 -1
  59. package/dist/gateway/static/root/assets/project-detail-page-BuT6MCTs.js +1 -0
  60. package/dist/gateway/static/root/assets/projects-page-DXWMxOjf.js +1 -0
  61. package/dist/gateway/static/root/assets/{registry-api-CIsNlSBi.js → registry-api-BsRBlji7.js} +1 -1
  62. package/dist/gateway/static/root/assets/remote-access-hub-7rBCUWzZ.js +1 -0
  63. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-YkjhiQfA.js → runtime-tools-settings-panel-CQ13P-mS.js} +2 -2
  64. package/dist/gateway/static/root/assets/{schema-form-oFGf3G3s.js → schema-form-BUVyTpZj.js} +1 -1
  65. package/dist/gateway/static/root/assets/sessions-page-gmEOYNb4.js +1 -0
  66. package/dist/gateway/static/root/assets/settings-advanced-gate-DYYoJcl7.js +1 -0
  67. package/dist/gateway/static/root/assets/settings-form-section-DVY-8_B9.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-page-C7VWs0IT.js → settings-page-CdiVYyTl.js} +1 -1
  69. package/dist/gateway/static/root/assets/setup-status-panel-BhenBnUj.js +1 -0
  70. package/dist/gateway/static/root/assets/{share-preview-page-t5oz18rh.js → share-preview-page-C88YLKm4.js} +1 -1
  71. package/dist/gateway/static/root/assets/shares-settings-Dq7xIj0_.js +1 -0
  72. package/dist/gateway/static/root/assets/skill-reload-api-MDI9Lz6z.js +1 -0
  73. package/dist/gateway/static/root/assets/skills-page-DLir1nM0.js +2 -0
  74. package/dist/gateway/static/root/assets/{skills-page.utils-DEDTYs2W.js → skills-page.utils-BMZAfS3G.js} +1 -1
  75. package/dist/gateway/static/root/assets/system-settings-panel-BM8ivYan.js +1 -0
  76. package/dist/gateway/static/root/assets/task-detail-page-P0_RldWv.js +1 -0
  77. package/dist/gateway/static/root/assets/{theme-store-O597U8q_.js → theme-store-BOgkc_9D.js} +1 -1
  78. package/dist/gateway/static/root/assets/tunnel-api-DemxChjo.js +1 -0
  79. package/dist/gateway/static/root/assets/{use-autosave-B5eUJ6Zq.js → use-autosave-CV3Ui5hu.js} +1 -1
  80. package/dist/gateway/static/root/assets/user-model-page-CxfnoRVn.js +2 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-CMKSwz4C.js → voice-api-key-field-CUoCi4Sq.js} +1 -1
  82. package/dist/gateway/static/root/assets/{voice-config-api-q7B6fOFB.js → voice-config-api-C-ryeIxj.js} +1 -1
  83. package/dist/gateway/static/root/assets/work-discovery-overlay-BhDlkCMB.js +1 -0
  84. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DZmvLZjb.js → workflow-run-setup-panel-D8CcPc_C.js} +2 -2
  85. package/dist/gateway/static/root/assets/workflows-page-Bxn2Dc16.js +5 -0
  86. package/dist/gateway/static/root/index.html +11 -27
  87. package/dist/package.js +1 -1
  88. package/dist/packages/gateway-contract/src/user-message-display.js +18 -0
  89. package/dist/src/agent/agent-instance-gateway.d.ts +3 -3
  90. package/dist/src/agent/agent-manager.d.ts +13 -13
  91. package/dist/src/agent/agent-manager.js +76 -42
  92. package/dist/src/agent/background-review/coordinator.d.ts +2 -4
  93. package/dist/src/agent/background-review/coordinator.js +5 -30
  94. package/dist/src/agent/background-review/prompts.d.ts +4 -2
  95. package/dist/src/agent/background-review/prompts.js +33 -19
  96. package/dist/src/agent/background-review/run-background-review.d.ts +6 -7
  97. package/dist/src/agent/background-review/run-background-review.js +47 -41
  98. package/dist/src/agent/background-review/settings.d.ts +0 -1
  99. package/dist/src/agent/background-review/settings.js +6 -7
  100. package/dist/src/agent/context/audit.d.ts +38 -0
  101. package/dist/src/agent/context/audit.js +123 -0
  102. package/dist/src/agent/context/coordinator.d.ts +31 -0
  103. package/dist/src/agent/context/coordinator.js +73 -0
  104. package/dist/src/agent/context/execution-context.d.ts +13 -0
  105. package/dist/src/agent/context/execution-context.js +211 -0
  106. package/dist/src/agent/context/execution-context.types.d.ts +50 -0
  107. package/dist/src/agent/context/execution-scope.d.ts +5 -1
  108. package/dist/src/agent/context/execution-scope.js +6 -2
  109. package/dist/src/agent/context/prepend.d.ts +2 -0
  110. package/dist/src/agent/context/prepend.js +28 -0
  111. package/dist/src/agent/context/project-context.d.ts +6 -3
  112. package/dist/src/agent/context/project-context.js +28 -23
  113. package/dist/src/agent/embedded/index.js +1 -1
  114. package/dist/src/agent/embedded/run-for-session.js +1 -0
  115. package/dist/src/agent/embedded/run-turn.js +22 -2
  116. package/dist/src/agent/embedded/types.d.ts +1 -25
  117. package/dist/src/agent/external-tools/composio-provider.js +87 -92
  118. package/dist/src/agent/external-tools/gateway-tools.d.ts +4 -1
  119. package/dist/src/agent/external-tools/gateway-tools.js +153 -41
  120. package/dist/src/agent/external-tools/index.d.ts +1 -0
  121. package/dist/src/agent/external-tools/index.js +2 -1
  122. package/dist/src/agent/external-tools/memory-provider.d.ts +1 -0
  123. package/dist/src/agent/external-tools/memory-provider.js +1 -0
  124. package/dist/src/agent/external-tools/search-error.d.ts +12 -0
  125. package/dist/src/agent/external-tools/search-error.js +29 -0
  126. package/dist/src/agent/external-tools/service.d.ts +4 -0
  127. package/dist/src/agent/external-tools/service.js +22 -2
  128. package/dist/src/agent/inbound/attachment-pipeline.js +5 -1
  129. package/dist/src/agent/memory/compaction-policy.js +1 -1
  130. package/dist/src/agent/memory/compaction-promotion.d.ts +1 -0
  131. package/dist/src/agent/memory/compaction-promotion.js +52 -79
  132. package/dist/src/agent/memory/create-memory-manager.js +1 -3
  133. package/dist/src/agent/memory/index.d.ts +1 -6
  134. package/dist/src/agent/memory/index.js +3 -6
  135. package/dist/src/agent/memory/manager.d.ts +0 -16
  136. package/dist/src/agent/memory/manager.js +11 -40
  137. package/dist/src/agent/memory/memory-config.d.ts +0 -5
  138. package/dist/src/agent/memory/memory-config.js +2 -9
  139. package/dist/src/agent/memory/runtime.d.ts +2 -2
  140. package/dist/src/agent/memory/runtime.js +9 -19
  141. package/dist/src/agent/memory/types.d.ts +1 -1
  142. package/dist/src/agent/orchestration/agent-orchestrator.js +13 -21
  143. package/dist/src/agent/orchestration/context-overflow.js +1 -0
  144. package/dist/src/agent/prompt/sections/memory-skills.js +25 -36
  145. package/dist/src/agent/prompt/sections/tooling.js +10 -4
  146. package/dist/src/agent/prompt/service-prompt-builder.js +4 -3
  147. package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -2
  148. package/dist/src/agent/service/direct-turn-helpers.js +8 -25
  149. package/dist/src/agent/service/process-direct-streaming.js +8 -7
  150. package/dist/src/agent/service.js +4 -3
  151. package/dist/src/agent/tasks/task-judge-service.js +1 -1
  152. package/dist/src/agent/tools/clarify-tool.d.ts +1 -0
  153. package/dist/src/agent/tools/delegate-tool.js +5 -2
  154. package/dist/src/agent/tools/factory.d.ts +1 -0
  155. package/dist/src/agent/tools/factory.js +68 -21
  156. package/dist/src/agent/tools/index.d.ts +3 -2
  157. package/dist/src/agent/tools/index.js +4 -3
  158. package/dist/src/agent/tools/knowledge-memory-tool.d.ts +15 -0
  159. package/dist/src/agent/tools/knowledge-memory-tool.js +184 -0
  160. package/dist/src/agent/tools/{dreaming-tool.d.ts → memory-maintenance-tool.d.ts} +2 -2
  161. package/dist/src/agent/tools/memory-maintenance-tool.js +31 -0
  162. package/dist/src/agent/tools/session-search-tool.d.ts +1 -0
  163. package/dist/src/agent/tools/session-search-tool.js +7 -0
  164. package/dist/src/agent/tools/user-context-tool.d.ts +10 -0
  165. package/dist/src/agent/tools/user-context-tool.js +98 -0
  166. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  167. package/dist/src/automations/service/automation-service.d.ts +2 -1
  168. package/dist/src/automations/service/automation-service.js +6 -2
  169. package/dist/src/chat-commands/builtins/understanding.js +24 -6
  170. package/dist/src/cli/commands/connectors.js +1 -1
  171. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  172. package/dist/src/config/schema.d.ts +68 -75
  173. package/dist/src/config/schema.js +29 -18
  174. package/dist/src/config/web-patch.d.ts +1 -1
  175. package/dist/src/connectors/auth-provider-registry.js +1 -1
  176. package/dist/src/connectors/composio-managed-client.js +6 -2
  177. package/dist/src/connectors/connected-source-ingestion.js +1 -1
  178. package/dist/src/connectors/connected-source-understanding.d.ts +1 -3
  179. package/dist/src/connectors/connected-source-understanding.js +86 -99
  180. package/dist/src/connectors/connection-candidates.d.ts +11 -0
  181. package/dist/src/connectors/connection-candidates.js +58 -0
  182. package/dist/src/connectors/connection-capabilities.d.ts +4 -0
  183. package/dist/src/connectors/connection-capabilities.js +37 -0
  184. package/dist/src/connectors/connection-recovery-service.d.ts +43 -0
  185. package/dist/src/connectors/connection-recovery-service.js +420 -0
  186. package/dist/src/connectors/health.js +1 -1
  187. package/dist/src/connectors/learning-coordinator.d.ts +0 -2
  188. package/dist/src/connectors/learning-coordinator.js +6 -7
  189. package/dist/src/connectors/principal.d.ts +5 -0
  190. package/dist/src/connectors/principal.js +18 -0
  191. package/dist/src/files/file-service.js +4 -1
  192. package/dist/src/gateway/agent-builtin-tools.d.ts +28 -10
  193. package/dist/src/gateway/agent-builtin-tools.js +30 -9
  194. package/dist/src/gateway/chat-stream/mapper.js +1 -28
  195. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -24
  196. package/dist/src/gateway/clarify-bridge.d.ts +4 -0
  197. package/dist/src/gateway/clarify-bridge.js +9 -4
  198. package/dist/src/gateway/heartbeat/service.js +1 -1
  199. package/dist/src/gateway/hono/lib/config-payload.d.ts +52 -30
  200. package/dist/src/gateway/hono/lib/config-payload.js +4 -4
  201. package/dist/src/gateway/hono/middleware/auth.js +1 -2
  202. package/dist/src/gateway/hono/routes/capabilities.js +1 -1
  203. package/dist/src/gateway/hono/routes/config-patch/misc.d.ts +1 -1
  204. package/dist/src/gateway/hono/routes/config-patch/misc.js +72 -28
  205. package/dist/src/gateway/hono/routes/connection-waits.d.ts +3 -0
  206. package/dist/src/gateway/hono/routes/connection-waits.js +58 -0
  207. package/dist/src/gateway/hono/routes/connectors.js +24 -18
  208. package/dist/src/gateway/hono/routes/context-sources.d.ts +4 -0
  209. package/dist/src/gateway/hono/routes/context-sources.js +159 -0
  210. package/dist/src/gateway/hono/routes/files.js +23 -2
  211. package/dist/src/gateway/hono/routes/index.js +4 -2
  212. package/dist/src/gateway/hono/routes/lazy-bundles.js +9 -4
  213. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  214. package/dist/src/gateway/hono/routes/notes.js +22 -7
  215. package/dist/src/gateway/hono/routes/projects.js +36 -44
  216. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +15 -1
  217. package/dist/src/gateway/hono/routes/side-chats.js +13 -2
  218. package/dist/src/gateway/hono/routes/tasks.js +3 -3
  219. package/dist/src/gateway/hono/routes/user-model.d.ts +3 -0
  220. package/dist/src/gateway/hono/routes/user-model.js +480 -0
  221. package/dist/src/gateway/memory-maintenance-automation-reconciler.d.ts +11 -0
  222. package/dist/src/gateway/memory-maintenance-automation-reconciler.js +72 -0
  223. package/dist/src/gateway/security/gateway-scopes.js +2 -0
  224. package/dist/src/gateway/service/agent-runner.d.ts +9 -1
  225. package/dist/src/gateway/service/agent-runner.js +25 -1
  226. package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
  227. package/dist/src/gateway/service/config-coordinator.js +4 -4
  228. package/dist/src/gateway/service/run-gateway-agent.d.ts +1 -0
  229. package/dist/src/gateway/service/run-gateway-agent.js +18 -14
  230. package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
  231. package/dist/src/gateway/service/session-input-coordinator.js +12 -2
  232. package/dist/src/gateway/service.d.ts +3 -1
  233. package/dist/src/gateway/service.js +52 -17
  234. package/dist/src/gateway/side-chat/manager.d.ts +16 -3
  235. package/dist/src/gateway/side-chat/manager.js +117 -28
  236. package/dist/src/gateway/side-chat/run-service.d.ts +2 -0
  237. package/dist/src/gateway/side-chat/run-service.js +28 -5
  238. package/dist/src/gateway/side-chat/types.d.ts +9 -1
  239. package/dist/src/heartbeat/index.js +1 -1
  240. package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +0 -2
  241. package/dist/src/knowledge/connected-knowledge-pipeline.js +46 -217
  242. package/dist/src/knowledge-memory/domain.d.ts +36 -0
  243. package/dist/src/knowledge-memory/index.d.ts +2 -0
  244. package/dist/src/knowledge-memory/index.js +2 -0
  245. package/dist/src/knowledge-memory/repository.d.ts +48 -0
  246. package/dist/src/knowledge-memory/repository.js +168 -0
  247. package/dist/src/memory-maintenance/index.d.ts +2 -0
  248. package/dist/src/memory-maintenance/index.js +3 -0
  249. package/dist/src/memory-maintenance/schedule.d.ts +13 -0
  250. package/dist/src/memory-maintenance/schedule.js +51 -0
  251. package/dist/src/memory-maintenance/service.d.ts +28 -0
  252. package/dist/src/memory-maintenance/service.js +216 -0
  253. package/dist/src/notes/service.d.ts +1 -0
  254. package/dist/src/notes/service.js +7 -1
  255. package/dist/src/notes/types.d.ts +16 -0
  256. package/dist/src/notifications/planner.js +7 -3
  257. package/dist/src/proactive/actions/service.d.ts +0 -1
  258. package/dist/src/proactive/actions/service.js +1 -10
  259. package/dist/src/proactive/execution/context.d.ts +8 -10
  260. package/dist/src/proactive/execution/context.js +93 -42
  261. package/dist/src/proactive/execution/insight.d.ts +4 -1
  262. package/dist/src/proactive/execution/insight.js +5 -2
  263. package/dist/src/proactive/execution/repository.d.ts +1 -0
  264. package/dist/src/proactive/execution/repository.js +9 -1
  265. package/dist/src/proactive/execution/types.d.ts +0 -1
  266. package/dist/src/proactive/execution/worker.js +7 -5
  267. package/dist/src/proactive/inbox/repository.js +8 -2
  268. package/dist/src/proactive/inbox/service.js +2 -2
  269. package/dist/src/proactive/inbox/types.d.ts +1 -0
  270. package/dist/src/proactive/inbox/worker.d.ts +1 -0
  271. package/dist/src/proactive/inbox/worker.js +7 -0
  272. package/dist/src/proactive/index.d.ts +2 -1
  273. package/dist/src/proactive/index.js +3 -2
  274. package/dist/src/proactive/maintenance.d.ts +4 -0
  275. package/dist/src/proactive/maintenance.js +21 -0
  276. package/dist/src/proactive/scenarios/repository.d.ts +1 -1
  277. package/dist/src/proactive/scenarios/repository.js +10 -3
  278. package/dist/src/proactive/scenarios/types.d.ts +7 -0
  279. package/dist/src/proactive/service.d.ts +7 -0
  280. package/dist/src/proactive/service.js +17 -1
  281. package/dist/src/projects/index.d.ts +1 -1
  282. package/dist/src/projects/index.js +2 -2
  283. package/dist/src/projects/knowledge-bind.d.ts +1 -0
  284. package/dist/src/projects/knowledge-bind.js +15 -0
  285. package/dist/src/projects/project-loop.d.ts +3 -3
  286. package/dist/src/projects/project-loop.js +4 -4
  287. package/dist/src/projects/project-service.d.ts +2 -1
  288. package/dist/src/projects/project-service.js +3 -2
  289. package/dist/src/projects/project-store.js +2 -1
  290. package/dist/src/realtime/runtime.js +1 -0
  291. package/dist/src/runtime-tools/manager.js +1 -1
  292. package/dist/src/session/index.js +1 -1
  293. package/dist/src/session/store.js +5 -2
  294. package/dist/src/storage/sqlite/collaboration-rule-repository.d.ts +19 -0
  295. package/dist/src/storage/sqlite/collaboration-rule-repository.js +54 -0
  296. package/dist/src/storage/sqlite/config-repository.js +1 -1
  297. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +30 -0
  298. package/dist/src/storage/sqlite/connection-wait-repository.js +338 -0
  299. package/dist/src/storage/sqlite/connector-account-repository.js +1 -1
  300. package/dist/src/storage/sqlite/context-evidence-repository.d.ts +24 -0
  301. package/dist/src/storage/sqlite/context-evidence-repository.js +52 -0
  302. package/dist/src/storage/sqlite/index.d.ts +3 -5
  303. package/dist/src/storage/sqlite/index.js +6 -8
  304. package/dist/src/storage/sqlite/knowledge-repository.d.ts +0 -19
  305. package/dist/src/storage/sqlite/knowledge-repository.js +1 -90
  306. package/dist/src/storage/sqlite/migrations/148_user_model_foundation.sql +554 -0
  307. package/dist/src/storage/sqlite/migrations/149_separate_source_index_from_memory.sql +18 -0
  308. package/dist/src/storage/sqlite/migrations/150_session_connection_waits.sql +47 -0
  309. package/dist/src/storage/sqlite/migrations/151_proactive_scope_cleanup.sql +6 -0
  310. package/dist/src/storage/sqlite/migrations/152_proactive_scenario_contract.sql +140 -0
  311. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  312. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  313. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  314. package/dist/src/storage/sqlite/notes-repository.d.ts +2 -1
  315. package/dist/src/storage/sqlite/notes-repository.js +37 -3
  316. package/dist/src/storage/sqlite/row-mappers.js +2 -2
  317. package/dist/src/storage/sqlite/schema.js +1 -1
  318. package/dist/src/storage/sqlite/session-input-repository.d.ts +14 -2
  319. package/dist/src/storage/sqlite/session-input-repository.js +17 -14
  320. package/dist/src/storage/sqlite/session-instance-repository.d.ts +2 -0
  321. package/dist/src/storage/sqlite/session-instance-repository.js +6 -0
  322. package/dist/src/storage/sqlite/session-repository.d.ts +1 -1
  323. package/dist/src/storage/sqlite/session-repository.js +7 -6
  324. package/dist/src/storage/sqlite/transcript-repository.js +3 -2
  325. package/dist/src/tasks/home-query-service.js +35 -13
  326. package/dist/src/tasks/index.js +2 -2
  327. package/dist/src/tasks/project-monitoring-service.d.ts +2 -0
  328. package/dist/src/tasks/project-monitoring-service.js +4 -1
  329. package/dist/src/tasks/project-operating-view-service.js +1 -1
  330. package/dist/src/tasks/task-application-service.js +6 -1
  331. package/dist/src/tasks/task-context-assembler.js +1 -1
  332. package/dist/src/tasks/task-context-repository.d.ts +0 -1
  333. package/dist/src/tasks/task-context-repository.js +1 -1
  334. package/dist/src/tasks/task-deletion-service.js +1 -1
  335. package/dist/src/tasks/task-handoff-service.js +1 -1
  336. package/dist/src/tasks/task-read-model-projector.js +1 -1
  337. package/dist/src/tasks/task-run-coordinator.js +1 -1
  338. package/dist/src/tasks/task-run-dispatcher.js +1 -1
  339. package/dist/src/tasks/task-run-repository.js +1 -0
  340. package/dist/src/tasks/task-signal-service.js +1 -1
  341. package/dist/src/tui/backends/embedded-backend.js +1 -1
  342. package/dist/src/tui/tool-summary.js +2 -1
  343. package/dist/src/tui/tui-startup-resources.js +1 -1
  344. package/dist/src/user-context/access-policy.d.ts +11 -0
  345. package/dist/src/user-context/access-policy.js +26 -0
  346. package/dist/src/user-context/changes.d.ts +1 -1
  347. package/dist/src/user-context/config.d.ts +135 -153
  348. package/dist/src/user-context/config.js +94 -99
  349. package/dist/src/user-context/relationship-continuity.d.ts +2 -2
  350. package/dist/src/user-context/relationship-continuity.js +34 -24
  351. package/dist/src/user-context/sources/activity-clustering.d.ts +9 -3
  352. package/dist/src/user-context/sources/index.js +2 -2
  353. package/dist/src/user-context/sources/repository.d.ts +1 -21
  354. package/dist/src/user-context/sources/repository.js +1 -183
  355. package/dist/src/user-context/sources/types.d.ts +0 -23
  356. package/dist/src/user-model/capture/executor.d.ts +50 -0
  357. package/dist/src/user-model/capture/executor.js +230 -0
  358. package/dist/src/user-model/capture/index.d.ts +2 -0
  359. package/dist/src/user-model/capture/index.js +3 -0
  360. package/dist/src/user-model/capture/semantic.d.ts +39 -0
  361. package/dist/src/user-model/capture/semantic.js +263 -0
  362. package/dist/src/user-model/domain.d.ts +93 -0
  363. package/dist/src/user-model/domain.js +33 -0
  364. package/dist/src/user-model/goals.d.ts +62 -0
  365. package/dist/src/user-model/goals.js +91 -0
  366. package/dist/src/user-model/importance.d.ts +11 -0
  367. package/dist/src/user-model/importance.js +17 -0
  368. package/dist/src/user-model/index.d.ts +5 -0
  369. package/dist/src/user-model/index.js +6 -0
  370. package/dist/src/user-model/repository.d.ts +23 -0
  371. package/dist/src/user-model/repository.js +268 -0
  372. package/dist/src/user-model/temporal.d.ts +10 -0
  373. package/dist/src/user-model/temporal.js +44 -0
  374. package/dist/src/voice/realtime/memory-context.d.ts +7 -2
  375. package/dist/src/voice/realtime/memory-context.js +39 -51
  376. package/dist/src/work-discovery/service.d.ts +3 -14
  377. package/dist/src/work-discovery/service.js +138 -99
  378. package/dist/src/work-discovery/types.d.ts +3 -3
  379. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  380. package/dist/src/workflows/service/workflow-session-bridge.js +12 -20
  381. package/package.json +3 -3
  382. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CUXApfcE.js +0 -1
  383. package/dist/gateway/static/root/assets/agents-DNq_GKuc.js +0 -1
  384. package/dist/gateway/static/root/assets/app-management-settings-panel-qfwAgyhQ.js +0 -1
  385. package/dist/gateway/static/root/assets/appearance-settings-DqQVUpCC.js +0 -1
  386. package/dist/gateway/static/root/assets/apps-page-dwIqYmXk.js +0 -1
  387. package/dist/gateway/static/root/assets/automations-workspace-SkdcSZ0i.js +0 -6
  388. package/dist/gateway/static/root/assets/browser-settings-page-CKCa6TvG.js +0 -8
  389. package/dist/gateway/static/root/assets/capabilities-settings-panel-DSp--zIZ.js +0 -7
  390. package/dist/gateway/static/root/assets/channels-settings-CMd2dDrI.js +0 -1
  391. package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +0 -1
  392. package/dist/gateway/static/root/assets/connectors-page-udWs5Kdm.js +0 -2
  393. package/dist/gateway/static/root/assets/dependency-picker-DpN3XZg9.js +0 -1
  394. package/dist/gateway/static/root/assets/desktop-pet-settings-DinCToZh.js +0 -1
  395. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +0 -1
  396. package/dist/gateway/static/root/assets/extension-settings-page-DcguCgsH.js +0 -1
  397. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +0 -1
  398. package/dist/gateway/static/root/assets/eye-off-DEAzt3g1.js +0 -1
  399. package/dist/gateway/static/root/assets/files-D6vf3S30.js +0 -1
  400. package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +0 -1
  401. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +0 -1
  402. package/dist/gateway/static/root/assets/gateway-config-api-Br7lSf6H.js +0 -1
  403. package/dist/gateway/static/root/assets/gateway-settings-CdPoDMuj.js +0 -1
  404. package/dist/gateway/static/root/assets/heartbeat-settings-DHk1hawP.js +0 -1
  405. package/dist/gateway/static/root/assets/home-page-YGipe_W6.js +0 -1
  406. package/dist/gateway/static/root/assets/index-D5TQQpeb.js +0 -71
  407. package/dist/gateway/static/root/assets/index-DReBaaTX.css +0 -2
  408. package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +0 -1
  409. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +0 -1
  410. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  411. package/dist/gateway/static/root/assets/local-app-workbench-page-CpyvYyrb.js +0 -2
  412. package/dist/gateway/static/root/assets/local-context-graph-BjUf7fQ9.js +0 -1
  413. package/dist/gateway/static/root/assets/logs-page-CXKy6E_l.js +0 -2
  414. package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +0 -1
  415. package/dist/gateway/static/root/assets/messages-CHNYp8EQ.js +0 -3
  416. package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +0 -1
  417. package/dist/gateway/static/root/assets/mobile-pairing-wizard-3NKCniSp.js +0 -1
  418. package/dist/gateway/static/root/assets/models-hub-cache-nCfkBN8M.js +0 -1
  419. package/dist/gateway/static/root/assets/notes-page-DuqLahi6.js +0 -1
  420. package/dist/gateway/static/root/assets/notes-workbench-C7j9EdQk.js +0 -5
  421. package/dist/gateway/static/root/assets/oauth-api-8lP_qJpq.js +0 -1
  422. package/dist/gateway/static/root/assets/oauth-authorization-window-Cdolr2wE.js +0 -1
  423. package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +0 -1
  424. package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +0 -1
  425. package/dist/gateway/static/root/assets/preview-open-alternatives-CsNVTKC0.js +0 -1
  426. package/dist/gateway/static/root/assets/project-detail-page-CfebYVX0.js +0 -1
  427. package/dist/gateway/static/root/assets/projects-page-48GvzSVa.js +0 -1
  428. package/dist/gateway/static/root/assets/remote-access-hub-64xj_s2m.js +0 -1
  429. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +0 -1
  430. package/dist/gateway/static/root/assets/search-DA7gz22f.js +0 -1
  431. package/dist/gateway/static/root/assets/sessions-page-CcwcdRN8.js +0 -1
  432. package/dist/gateway/static/root/assets/settings-advanced-gate-BaN84CyW.js +0 -1
  433. package/dist/gateway/static/root/assets/settings-form-section-DjWzRk4z.js +0 -1
  434. package/dist/gateway/static/root/assets/setup-status-panel-DVVOCNbr.js +0 -1
  435. package/dist/gateway/static/root/assets/shares-settings-DUYbYLi7.js +0 -1
  436. package/dist/gateway/static/root/assets/skill-reload-api-BGyD0gB9.js +0 -1
  437. package/dist/gateway/static/root/assets/skills-page-CjF8DTsN.js +0 -2
  438. package/dist/gateway/static/root/assets/system-settings-panel-BSYuRgFI.js +0 -1
  439. package/dist/gateway/static/root/assets/task-detail-page-YZYSTJH7.js +0 -1
  440. package/dist/gateway/static/root/assets/tunnel-api-FKUi9wDL.js +0 -1
  441. package/dist/gateway/static/root/assets/user-context-page-BCyiduKd.js +0 -2
  442. package/dist/gateway/static/root/assets/work-discovery-overlay-jhT2EzeH.js +0 -1
  443. package/dist/gateway/static/root/assets/workflows-page-DQC0TpMa.js +0 -5
  444. package/dist/src/agent/memory/builtin-provider.d.ts +0 -37
  445. package/dist/src/agent/memory/builtin-provider.js +0 -225
  446. package/dist/src/agent/memory/context/types.d.ts +0 -40
  447. package/dist/src/agent/memory/understanding/quality.d.ts +0 -8
  448. package/dist/src/agent/memory/understanding/quality.js +0 -18
  449. package/dist/src/agent/memory/understanding/service.d.ts +0 -19
  450. package/dist/src/agent/memory/understanding/service.js +0 -209
  451. package/dist/src/agent/memory/understanding/types.d.ts +0 -34
  452. package/dist/src/agent/memory/user-context-coordinator.d.ts +0 -23
  453. package/dist/src/agent/memory/user-context-coordinator.js +0 -113
  454. package/dist/src/agent/tools/dreaming-tool.js +0 -37
  455. package/dist/src/agent/tools/memory-tool.d.ts +0 -9
  456. package/dist/src/agent/tools/memory-tool.js +0 -119
  457. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +0 -11
  458. package/dist/src/gateway/dreaming-automation-reconciler.js +0 -63
  459. package/dist/src/gateway/hono/routes/understanding-sources.d.ts +0 -21
  460. package/dist/src/gateway/hono/routes/understanding-sources.js +0 -387
  461. package/dist/src/gateway/hono/routes/you.d.ts +0 -3
  462. package/dist/src/gateway/hono/routes/you.js +0 -457
  463. package/dist/src/projects/memory-bind.d.ts +0 -1
  464. package/dist/src/projects/memory-bind.js +0 -14
  465. package/dist/src/storage/sqlite/context-consolidation-repository.d.ts +0 -37
  466. package/dist/src/storage/sqlite/context-consolidation-repository.js +0 -64
  467. package/dist/src/storage/sqlite/memory-records-repository.d.ts +0 -217
  468. package/dist/src/storage/sqlite/memory-records-repository.js +0 -715
  469. package/dist/src/storage/sqlite/remote-context-repository.d.ts +0 -3
  470. package/dist/src/storage/sqlite/remote-context-repository.js +0 -40
  471. package/dist/src/storage/sqlite/understanding-focus-exclusions.d.ts +0 -2
  472. package/dist/src/storage/sqlite/understanding-focus-exclusions.js +0 -24
  473. package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +0 -49
  474. package/dist/src/storage/sqlite/user-context-quality-repository.js +0 -118
  475. package/dist/src/storage/sqlite/user-context-repository.d.ts +0 -85
  476. package/dist/src/storage/sqlite/user-context-repository.js +0 -535
  477. package/dist/src/user-context/automatic-context.d.ts +0 -17
  478. package/dist/src/user-context/automatic-context.js +0 -85
  479. package/dist/src/user-context/consolidation.d.ts +0 -27
  480. package/dist/src/user-context/consolidation.js +0 -187
  481. package/dist/src/user-context/context-objects.d.ts +0 -17
  482. package/dist/src/user-context/context-objects.js +0 -99
  483. package/dist/src/user-context/evaluation/harness.d.ts +0 -13
  484. package/dist/src/user-context/evaluation/harness.js +0 -31
  485. package/dist/src/user-context/extraction/executor.d.ts +0 -22
  486. package/dist/src/user-context/extraction/executor.js +0 -142
  487. package/dist/src/user-context/extraction/repair.d.ts +0 -19
  488. package/dist/src/user-context/extraction/repair.js +0 -71
  489. package/dist/src/user-context/extraction/semantic.d.ts +0 -18
  490. package/dist/src/user-context/extraction/semantic.js +0 -148
  491. package/dist/src/user-context/focus-lifecycle.d.ts +0 -2
  492. package/dist/src/user-context/focus-lifecycle.js +0 -26
  493. package/dist/src/user-context/manual-understanding.d.ts +0 -12
  494. package/dist/src/user-context/manual-understanding.js +0 -37
  495. package/dist/src/user-context/planner.d.ts +0 -17
  496. package/dist/src/user-context/planner.js +0 -465
  497. package/dist/src/user-context/relationships/indexer.d.ts +0 -13
  498. package/dist/src/user-context/relationships/indexer.js +0 -185
  499. package/dist/src/user-context/relationships/service.d.ts +0 -22
  500. package/dist/src/user-context/relationships/service.js +0 -50
  501. package/dist/src/user-context/retriever.d.ts +0 -15
  502. package/dist/src/user-context/retriever.js +0 -124
  503. package/dist/src/user-context/scope.d.ts +0 -7
  504. package/dist/src/user-context/scope.js +0 -9
  505. package/dist/src/user-context/selection-policy.d.ts +0 -20
  506. package/dist/src/user-context/selection-policy.js +0 -33
  507. package/dist/src/user-context/understanding.d.ts +0 -15
  508. package/dist/src/user-context/understanding.js +0 -24
  509. package/dist/src/user-context/understandingQuality.d.ts +0 -5
  510. package/dist/src/user-context/understandingQuality.js +0 -48
  511. /package/dist/src/agent/{memory/context/types.js → context/execution-context.types.js} +0 -0
  512. /package/dist/src/{agent/memory/understanding/types.js → knowledge-memory/domain.js} +0 -0
@@ -1,7 +1,9 @@
1
1
  import { getSqliteDatabase } from "../../storage/sqlite/transaction.js";
2
- import { listUnderstandings } from "../../storage/sqlite/user-context-repository.js";
3
2
  import { getKnowledgeSourceItem } from "../../storage/sqlite/knowledge-repository.js";
4
3
  import { getConnectorSyncPolicyForConnection } from "../../storage/sqlite/connector-sync-policy-repository.js";
4
+ import { getAssertionSlot, listUserAssertions } from "../../user-model/repository.js";
5
+ import "../../user-model/index.js";
6
+ import { getDiscussionCapture, getLatestDiscussionOrganization } from "../../discussions/repository.js";
5
7
  import { wrapExternalContent } from "../../gateway/security/external-content.js";
6
8
  //#region src/proactive/execution/context.ts
7
9
  const MAX_EVENT_COUNT = 50;
@@ -38,9 +40,6 @@ function authorizedConnectedSourceItem(event, scenarioKey) {
38
40
  }
39
41
  var EventBatchContextProvider = class {
40
42
  id = "event_batch";
41
- supports() {
42
- return true;
43
- }
44
43
  async collect(input) {
45
44
  const rows = eventRows(input.eventIds).filter((row) => !row.type.startsWith("connected_source.") || Boolean(authorizedConnectedSourceItem(row, input.scenarioKey)));
46
45
  return {
@@ -60,9 +59,6 @@ var EventBatchContextProvider = class {
60
59
  };
61
60
  var ConnectedSourceContextProvider = class {
62
61
  id = "connected_source";
63
- supports() {
64
- return true;
65
- }
66
62
  async collect(input) {
67
63
  const items = [];
68
64
  const snapshotItems = [];
@@ -103,9 +99,6 @@ var ConnectedSourceContextProvider = class {
103
99
  };
104
100
  var InternalObjectContextProvider = class {
105
101
  id = "internal_objects";
106
- supports() {
107
- return true;
108
- }
109
102
  async collect(input) {
110
103
  const db = getSqliteDatabase();
111
104
  const objects = [];
@@ -154,36 +147,34 @@ var InternalObjectContextProvider = class {
154
147
  };
155
148
  }
156
149
  };
157
- var UserUnderstandingContextProvider = class {
158
- id = "user_understanding";
159
- supports() {
160
- return true;
161
- }
150
+ var UserModelContextProvider = class {
151
+ id = "user_model";
162
152
  async collect(input) {
163
153
  const scope = eventRows(input.eventIds).at(-1);
164
154
  if (!scope) return emptyContext();
165
- const records = listUnderstandings(["active"]).filter((record) => {
155
+ const records = listUserAssertions({
156
+ statuses: ["active"],
157
+ limit: 500
158
+ }).filter((record) => {
166
159
  const now = Date.now();
167
- const scopeMatches = record.scope.type === "global" || record.scope.type === "workspace" && record.scope.id === scope.workspace_id || record.scope.type === "project" && record.scope.id === scope.project_id;
168
- return record.disclosurePolicy === "referenceable" && record.sensitivity !== "secret" && record.sensitivity !== "regulated" && scopeMatches && (!record.validFrom || record.validFrom <= now) && (!record.validTo || record.validTo >= now) && (!record.expiresAt || record.expiresAt >= now) && !record.conflictGroupId && (record.explicitness === "explicit" || record.confidence >= .7);
160
+ const assertionScope = getAssertionSlot(record.slotId)?.scope;
161
+ const scopeMatches = assertionScope?.type === "global" || assertionScope?.type === "workspace" && assertionScope.id === scope.workspace_id || assertionScope?.type === "project" && assertionScope.id === scope.project_id || assertionScope?.type === "agent" && assertionScope.id === scope.agent_id;
162
+ return record.disclosurePolicy === "referenceable" && record.sensitivity !== "secret" && record.sensitivity !== "regulated" && scopeMatches && (!record.validFrom || record.validFrom <= now) && (!record.validTo || record.validTo >= now) && (record.authority === "user_explicit" || record.confidence >= .7);
169
163
  }).slice(0, 20);
170
164
  return {
171
165
  content: { records: records.map((record) => ({
172
- evidenceId: `understanding:${record.id}`,
166
+ evidenceId: `assertion:${record.id}`,
173
167
  kind: record.kind,
174
168
  content: boundedText(record.statement, 1e3),
175
169
  confidence: record.confidence,
176
- updatedAt: record.updatedAt
170
+ recordedAt: record.recordedAt
177
171
  })) },
178
- evidenceIds: records.map((record) => `understanding:${record.id}`)
172
+ evidenceIds: records.map((record) => `assertion:${record.id}`)
179
173
  };
180
174
  }
181
175
  };
182
176
  var MeetingWorkspaceContextProvider = class {
183
177
  id = "meeting_workspace";
184
- supports(scenarioKey) {
185
- return scenarioKey === "meeting_preparation";
186
- }
187
178
  async collect(input) {
188
179
  const scope = eventRows(input.eventIds).at(-1);
189
180
  if (!scope) return emptyContext();
@@ -232,16 +223,27 @@ var MeetingWorkspaceContextProvider = class {
232
223
  };
233
224
  var ProjectStateContextProvider = class {
234
225
  id = "project_state";
235
- supports(scenarioKey) {
236
- return scenarioKey === "project_delivery_risk" || scenarioKey === "blocked_work";
237
- }
238
226
  async collect(input) {
239
227
  if (!input.eventIds.length) return emptyContext();
240
228
  const project = getSqliteDatabase().prepare(`SELECT p.* FROM proactive_events e JOIN projects p ON p.project_id = e.project_id
241
229
  WHERE e.event_id IN (${input.eventIds.map(() => "?").join(",")}) AND e.project_id IS NOT NULL ORDER BY e.occurred_at DESC LIMIT 1`).get(...input.eventIds);
242
230
  if (!project) return emptyContext();
243
231
  const tasks = getSqliteDatabase().prepare(`SELECT task.task_id, task.title, task.body,
244
- task.phase, task.resolution, task.priority, task.due_at, task.updated_at
232
+ task.phase, task.resolution, task.priority, task.due_at, task.updated_at,
233
+ (SELECT wait.kind FROM task_waits wait
234
+ WHERE wait.task_id = task.task_id AND wait.status = 'active'
235
+ ORDER BY wait.created_at DESC LIMIT 1) AS wait_kind,
236
+ (SELECT wait.reason FROM task_waits wait
237
+ WHERE wait.task_id = task.task_id AND wait.status = 'active'
238
+ ORDER BY wait.created_at DESC LIMIT 1) AS wait_reason,
239
+ (SELECT json_group_array(json_object(
240
+ 'taskId', dependency.depends_on_task_id,
241
+ 'title', upstream.title,
242
+ 'phase', upstream.phase,
243
+ 'resolution', upstream.resolution
244
+ )) FROM task_dependencies dependency
245
+ JOIN tasks upstream ON upstream.task_id = dependency.depends_on_task_id
246
+ WHERE dependency.task_id = task.task_id) AS dependencies_json
245
247
  FROM tasks task
246
248
  WHERE task.project_id = ? AND task.phase <> 'closed'
247
249
  ORDER BY CASE WHEN EXISTS (
@@ -256,10 +258,14 @@ var ProjectStateContextProvider = class {
256
258
  evidenceId: projectEvidenceId,
257
259
  ...project
258
260
  },
259
- activeTasks: tasks.map((task, index) => ({
260
- evidenceId: taskEvidenceIds[index],
261
- ...task
262
- }))
261
+ activeTasks: tasks.map((task, index) => {
262
+ const { dependencies_json: dependenciesJson, ...fields } = task;
263
+ return {
264
+ evidenceId: taskEvidenceIds[index],
265
+ ...fields,
266
+ dependencies: dependenciesJson ? JSON.parse(String(dependenciesJson)) : []
267
+ };
268
+ })
263
269
  },
264
270
  evidenceIds: [projectEvidenceId, ...taskEvidenceIds]
265
271
  };
@@ -267,9 +273,6 @@ var ProjectStateContextProvider = class {
267
273
  };
268
274
  var AutomationStateContextProvider = class {
269
275
  id = "automation_state";
270
- supports(scenarioKey) {
271
- return scenarioKey === "automation_failure_impact";
272
- }
273
276
  async collect(input) {
274
277
  if (!input.eventIds.length) return emptyContext();
275
278
  const run = getSqliteDatabase().prepare(`SELECT r.* FROM proactive_events e JOIN automation_runs r ON r.run_id = e.subject_id
@@ -277,6 +280,9 @@ var AutomationStateContextProvider = class {
277
280
  if (!run) return emptyContext();
278
281
  const automation = getSqliteDatabase().prepare(`SELECT automation_id, name, description, enabled, reliability_json, state_json, project_id
279
282
  FROM automations WHERE automation_id = ?`).get(String(run.automation_id));
283
+ const recentRuns = getSqliteDatabase().prepare(`SELECT run_id, status, summary, error, duration_ms, started_at, ended_at
284
+ FROM automation_runs WHERE automation_id = ? AND run_id <> ?
285
+ ORDER BY started_at DESC LIMIT 5`).all(String(run.automation_id), String(run.run_id));
280
286
  const runEvidenceId = `automation-run:${String(run.run_id)}`;
281
287
  return {
282
288
  content: {
@@ -284,28 +290,73 @@ var AutomationStateContextProvider = class {
284
290
  failedRun: {
285
291
  evidenceId: runEvidenceId,
286
292
  ...run
287
- }
293
+ },
294
+ recentRuns
288
295
  },
289
296
  evidenceIds: [runEvidenceId]
290
297
  };
291
298
  }
292
299
  };
300
+ var DiscussionContextProvider = class {
301
+ id = "discussion";
302
+ async collect(input) {
303
+ const event = eventRows(input.eventIds).findLast((row) => row.subject_kind === "discussion");
304
+ if (!event) return emptyContext();
305
+ const discussion = getDiscussionCapture(event.subject_id);
306
+ if (!discussion || discussion.status !== "completed") return emptyContext();
307
+ const organization = getLatestDiscussionOrganization(discussion.id);
308
+ const discussionEvidenceId = `discussion:${discussion.id}`;
309
+ const noteEvidenceId = `note:${discussion.noteId}`;
310
+ return {
311
+ content: { discussion: {
312
+ evidenceId: discussionEvidenceId,
313
+ id: discussion.id,
314
+ noteId: discussion.noteId,
315
+ noteEvidenceId,
316
+ projectId: discussion.projectId,
317
+ title: discussion.generatedTitle,
318
+ transcript: boundedText(discussion.canonicalTranscript, 6e3),
319
+ organization: organization?.organization,
320
+ completedAt: discussion.completedAt
321
+ } },
322
+ snapshotContent: { discussion: {
323
+ evidenceId: discussionEvidenceId,
324
+ id: discussion.id,
325
+ noteId: discussion.noteId,
326
+ noteEvidenceId,
327
+ projectId: discussion.projectId,
328
+ transcriptSha256: discussion.canonicalTranscriptSha256,
329
+ organizationRevision: organization?.revision,
330
+ organization: organization?.organization,
331
+ completedAt: discussion.completedAt
332
+ } },
333
+ evidenceIds: [discussionEvidenceId, noteEvidenceId]
334
+ };
335
+ }
336
+ };
293
337
  var ContextProviderRegistry = class {
294
338
  constructor(providers = [
295
339
  new EventBatchContextProvider(),
296
340
  new ConnectedSourceContextProvider(),
297
341
  new InternalObjectContextProvider(),
298
- new UserUnderstandingContextProvider(),
342
+ new UserModelContextProvider(),
299
343
  new MeetingWorkspaceContextProvider(),
300
344
  new ProjectStateContextProvider(),
301
- new AutomationStateContextProvider()
345
+ new AutomationStateContextProvider(),
346
+ new DiscussionContextProvider()
302
347
  ]) {
303
348
  this.providers = providers;
304
349
  }
305
- async collect(scenarioKey, input) {
306
- const entries = await Promise.all(this.providers.filter((provider) => provider.supports(scenarioKey)).map(async (provider) => [provider.id, await provider.collect({
350
+ async collect(scenario, input) {
351
+ const providers = new Map(this.providers.map((provider) => [provider.id, provider]));
352
+ const selected = scenario.contextProviderIds.map((id) => {
353
+ const provider = providers.get(id);
354
+ if (!provider) throw new Error(`Unknown context provider: ${id}`);
355
+ return provider;
356
+ });
357
+ const entries = await Promise.all(selected.map(async (provider) => [provider.id, await provider.collect({
307
358
  ...input,
308
- scenarioKey
359
+ scenarioKey: scenario.key
309
360
  })]));
310
361
  return {
311
362
  content: Object.fromEntries(entries.map(([id, result]) => [id, result.content])),
@@ -315,4 +366,4 @@ var ContextProviderRegistry = class {
315
366
  }
316
367
  };
317
368
  //#endregion
318
- export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserUnderstandingContextProvider };
369
+ export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, DiscussionContextProvider, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserModelContextProvider };
@@ -1,4 +1,7 @@
1
1
  import type { InsightCandidate } from './types.js';
2
2
  export declare function parseInsightCandidate(raw: string, allowedEvidenceIds: Set<string>): InsightCandidate;
3
3
  export declare function scoreInsight(candidate: InsightCandidate): number;
4
- export declare function isValuableInsight(candidate: InsightCandidate): boolean;
4
+ export declare function isValuableInsight(candidate: InsightCandidate, policy?: {
5
+ minConfidence: number;
6
+ minScore: number;
7
+ }): boolean;
@@ -87,8 +87,11 @@ function scoreInsight(candidate) {
87
87
  }[candidate.urgency];
88
88
  return Math.round((candidate.confidence * .7 + urgencyWeight * .3) * 1e3) / 1e3;
89
89
  }
90
- function isValuableInsight(candidate) {
91
- return candidate.confidence >= .65 && candidate.urgency !== "low" && scoreInsight(candidate) >= .6;
90
+ function isValuableInsight(candidate, policy = {
91
+ minConfidence: .65,
92
+ minScore: .6
93
+ }) {
94
+ return candidate.confidence >= policy.minConfidence && candidate.urgency !== "low" && scoreInsight(candidate) >= policy.minScore;
92
95
  }
93
96
  //#endregion
94
97
  export { isValuableInsight, parseInsightCandidate, scoreInsight };
@@ -16,6 +16,7 @@ export declare function finishRun(input: {
16
16
  run: ClaimedRun;
17
17
  candidate?: InsightCandidate;
18
18
  valueScore?: number;
19
+ cooldownSeconds?: number;
19
20
  rawOutput: string;
20
21
  modelRef?: string;
21
22
  }, now?: Date): ProactiveInsight | null;
@@ -5,8 +5,16 @@ const str = (row, key) => String(row[key]);
5
5
  function claimNextRun(owner, now = /* @__PURE__ */ new Date(), leaseSeconds = 120) {
6
6
  return runSqliteWriteTransaction((db) => {
7
7
  const nowIso = now.toISOString();
8
+ const dayStart = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())).toISOString();
8
9
  db.prepare(`UPDATE proactive_signal_batches SET status = 'ignored', updated_at = ? WHERE status = 'ready'
9
10
  AND subscription_id IN (SELECT subscription_id FROM proactive_scenario_subscriptions WHERE enabled = 0)`).run(nowIso);
11
+ db.prepare(`UPDATE proactive_signal_batches AS batch SET status = 'ignored', updated_at = ?
12
+ WHERE batch.status = 'ready' AND EXISTS (
13
+ SELECT 1 FROM proactive_scenario_versions scenario
14
+ WHERE scenario.scenario_key = batch.scenario_key AND scenario.version = batch.scenario_version
15
+ AND (SELECT COUNT(*) FROM proactive_runs run
16
+ WHERE run.scenario_key = batch.scenario_key AND run.started_at >= ?) >= scenario.max_runs_per_day
17
+ )`).run(nowIso, dayStart);
10
18
  db.prepare(`UPDATE proactive_signal_batches SET status = 'failed_permanent', updated_at = ?
11
19
  WHERE status = 'processing' AND batch_id IN (
12
20
  SELECT batch_id FROM proactive_runs WHERE status = 'running' AND lease_expires_at <= ? AND attempt >= 3
@@ -80,7 +88,7 @@ function finishRun(input, now = /* @__PURE__ */ new Date()) {
80
88
  input.candidate.recommendation
81
89
  ].map((value) => value.trim().toLowerCase().replace(/\s+/g, " "))].join("\n")).digest("hex") : void 0;
82
90
  const duplicate = fingerprint ? db.prepare(`SELECT 1 FROM proactive_insights
83
- WHERE subscription_id = ? AND scenario_key = ? AND content_fingerprint = ? AND created_at >= ? LIMIT 1`).get(input.run.subscriptionId, input.run.scenarioKey, fingerprint, (/* @__PURE__ */ new Date(now.getTime() - 10080 * 6e4)).toISOString()) : void 0;
91
+ WHERE subscription_id = ? AND scenario_key = ? AND content_fingerprint = ? AND created_at >= ? LIMIT 1`).get(input.run.subscriptionId, input.run.scenarioKey, fingerprint, (/* @__PURE__ */ new Date(now.getTime() - (input.cooldownSeconds ?? 10080 * 60) * 1e3)).toISOString()) : void 0;
84
92
  const valuable = Boolean(input.candidate) && !duplicate;
85
93
  db.prepare(`UPDATE proactive_runs SET status = ?, raw_output = ?, model_ref = ?, lease_owner = NULL,
86
94
  lease_expires_at = NULL, completed_at = ?, updated_at = ? WHERE run_id = ?`).run(valuable ? "completed" : "discarded", input.rawOutput.slice(0, 2e4), input.modelRef ?? null, nowIso, nowIso, input.run.id);
@@ -59,7 +59,6 @@ export interface ProactiveAgentExecutor {
59
59
  }
60
60
  export interface ContextProvider {
61
61
  id: string;
62
- supports(scenarioKey: string): boolean;
63
62
  collect(input: {
64
63
  scenarioKey: string;
65
64
  batchId: string;
@@ -40,11 +40,11 @@ var ProactiveWorker = class {
40
40
  const run = claimNextRun(this.owner);
41
41
  if (!run) return;
42
42
  try {
43
- const scenario = getScenario(run.scenarioKey);
44
- if (!scenario || scenario.version !== run.scenarioVersion) throw new Error("Pinned scenario version is unavailable");
43
+ const scenario = getScenario(run.scenarioKey, run.scenarioVersion);
44
+ if (!scenario) throw new Error("Pinned scenario version is unavailable");
45
45
  const revision = run.promptRevisionId ? getPromptRevision(run.promptRevisionId) ?? void 0 : void 0;
46
46
  const eventIds = eventIdsForBatch(run.batchId);
47
- const context = await this.contexts.collect(run.scenarioKey, {
47
+ const context = await this.contexts.collect(scenario, {
48
48
  batchId: run.batchId,
49
49
  eventIds,
50
50
  subscriptionId: run.subscriptionId
@@ -62,13 +62,15 @@ var ProactiveWorker = class {
62
62
  authorizedContext: context.content
63
63
  });
64
64
  const candidate = parseInsightCandidate(output.text, new Set(context.evidenceIds));
65
- const valuable = isValuableInsight(candidate);
65
+ const valueScore = scoreInsight(candidate);
66
+ const valuable = isValuableInsight(candidate, scenario.valuePolicy);
66
67
  const insight = finishRun({
67
68
  run,
68
69
  ...valuable ? {
69
70
  candidate,
70
- valueScore: scoreInsight(candidate)
71
+ valueScore
71
72
  } : {},
73
+ cooldownSeconds: scenario.valuePolicy.cooldownSeconds,
72
74
  rawOutput: output.text,
73
75
  modelRef: output.modelRef
74
76
  });
@@ -4,6 +4,7 @@ import { randomUUID } from "node:crypto";
4
4
  //#region src/proactive/inbox/repository.ts
5
5
  const s = (row, key) => String(row[key]);
6
6
  function itemFromRow(row) {
7
+ const attentionKind = row.action_status === "completed" ? "receipt" : row.decision_json || row.action_status === "approval_required" ? "decision" : "information";
7
8
  return {
8
9
  id: s(row, "inbox_item_id"),
9
10
  insightId: s(row, "insight_id"),
@@ -30,7 +31,8 @@ function itemFromRow(row) {
30
31
  urgency: s(row, "urgency"),
31
32
  confidence: Number(row.confidence),
32
33
  valueScore: Number(row.value_score),
33
- evidenceIds: JSON.parse(s(row, "evidence_ids_json"))
34
+ evidenceIds: JSON.parse(s(row, "evidence_ids_json")),
35
+ attentionKind
34
36
  }
35
37
  };
36
38
  }
@@ -124,13 +126,17 @@ function transitionInboxItem(id, input, now = /* @__PURE__ */ new Date()) {
124
126
  function recordDecision(id, choice, note = "", now = /* @__PURE__ */ new Date()) {
125
127
  if (!choice.trim()) throw new Error("choice is required");
126
128
  runSqliteWriteTransaction((db) => {
127
- const row = db.prepare(`SELECT x.decision_json FROM proactive_inbox_items i
129
+ const row = db.prepare(`SELECT i.status, x.decision_json, x.action_status FROM proactive_inbox_items i
128
130
  JOIN proactive_insights x ON x.insight_id = i.insight_id WHERE i.inbox_item_id = ?`).get(id);
129
131
  if (!row) throw new Error("Inbox item not found");
132
+ if (row.status === "resolved") throw new Error("Inbox item is already resolved");
130
133
  if (!row.decision_json) throw new Error("Inbox item does not require a decision");
131
134
  if (!JSON.parse(row.decision_json).options.some((option) => option.id === choice.trim())) throw new Error("choice is not a valid decision option");
132
135
  db.prepare("INSERT INTO proactive_decisions (decision_id, inbox_item_id, choice, note, created_at) VALUES (?, ?, ?, ?, ?)").run(randomUUID(), id, choice.trim().slice(0, 200), note.trim().slice(0, 2e3), now.toISOString());
133
136
  db.prepare("UPDATE proactive_inbox_items SET status = 'resolved', resolution = ?, updated_at = ? WHERE inbox_item_id = ?").run(choice.trim().slice(0, 200), now.toISOString(), id);
137
+ if (row.action_status === "approval_required") db.prepare(`UPDATE proactive_insights SET action_status = ?, action_updated_at = ?
138
+ WHERE insight_id = (SELECT insight_id FROM proactive_inbox_items WHERE inbox_item_id = ?)
139
+ AND action_status = 'approval_required'`).run(choice === "approve" ? "pending" : "rejected", now.toISOString(), id);
134
140
  });
135
141
  return getInboxItem(id);
136
142
  }
@@ -1,5 +1,5 @@
1
1
  import { publishInstructionFeedback } from "../scenarios/repository.js";
2
- import { resolveProactiveActionDecision } from "../actions/service.js";
2
+ import { executePendingProactiveActions } from "../actions/service.js";
3
3
  import { getInboxItem, getInboxSubscriptionId, listInbox, projectInsightsToInbox, recordDecision, recordFeedback, transitionInboxItem, wakeSnoozedItems } from "./repository.js";
4
4
  //#region src/proactive/inbox/service.ts
5
5
  var ProactiveInboxService = class {
@@ -9,7 +9,7 @@ var ProactiveInboxService = class {
9
9
  feedback = recordFeedback;
10
10
  decide(id, choice, note = "") {
11
11
  const item = recordDecision(id, choice, note);
12
- resolveProactiveActionDecision(id, choice);
12
+ if (choice === "approve") executePendingProactiveActions();
13
13
  return getInboxItem(id) ?? item;
14
14
  }
15
15
  instruct(id, instruction) {
@@ -41,6 +41,7 @@ export interface InboxItem {
41
41
  confidence: number;
42
42
  valueScore: number;
43
43
  evidenceIds: string[];
44
+ attentionKind: 'information' | 'decision' | 'receipt';
44
45
  };
45
46
  }
46
47
  export interface InboxDelivery {
@@ -5,6 +5,7 @@ export declare class ProactiveInboxWorker {
5
5
  private timer?;
6
6
  private running;
7
7
  private waiters;
8
+ private lastMaintenanceAt;
8
9
  constructor(delivery: InboxDeliveryAdapter, intervalMs?: number);
9
10
  start(): void;
10
11
  stop(): Promise<void>;
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { pruneProactiveHistory } from "../maintenance.js";
3
4
  import { executePendingProactiveActions } from "../actions/service.js";
4
5
  import { claimDelivery, finishDelivery, projectInsightsToInbox, recoverExpiredDeliveries, wakeSnoozedItems } from "./repository.js";
5
6
  //#region src/proactive/inbox/worker.ts
@@ -9,6 +10,7 @@ var ProactiveInboxWorker = class {
9
10
  timer;
10
11
  running = false;
11
12
  waiters = [];
13
+ lastMaintenanceAt = 0;
12
14
  constructor(delivery, intervalMs = 3e3) {
13
15
  this.delivery = delivery;
14
16
  this.intervalMs = intervalMs;
@@ -28,6 +30,11 @@ var ProactiveInboxWorker = class {
28
30
  if (this.running) return;
29
31
  this.running = true;
30
32
  try {
33
+ const now = Date.now();
34
+ if (now - this.lastMaintenanceAt >= 60 * 6e4) {
35
+ pruneProactiveHistory(new Date(now));
36
+ this.lastMaintenanceAt = now;
37
+ }
31
38
  projectInsightsToInbox();
32
39
  executePendingProactiveActions();
33
40
  wakeSnoozedItems();
@@ -6,9 +6,10 @@ export { matchesCondition, matchScenario } from './routing/matcher.js';
6
6
  export type { EventCondition, ScenarioRoute } from './routing/types.js';
7
7
  export type { SignalBatch } from './routing/batch-repository.js';
8
8
  export { ProactiveEventService } from './service.js';
9
+ export { pruneProactiveHistory } from './maintenance.js';
9
10
  export { ProactiveScenarioService } from './scenarios/service.js';
10
11
  export type { PromptRevision, ScenarioDefinition, ScenarioSubscription } from './scenarios/types.js';
11
- export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserUnderstandingContextProvider, } from './execution/context.js';
12
+ export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserModelContextProvider, } from './execution/context.js';
12
13
  export { ReadonlyProactiveAgentExecutor } from './execution/agent-executor.js';
13
14
  export { listInsights } from './execution/repository.js';
14
15
  export { ProactiveWorker } from './execution/worker.js';
@@ -3,11 +3,12 @@ import { normalizeEventEnvelope } from "./events/envelope.js";
3
3
  import { mapProductEventToProactive } from "./events/product-event-bridge.js";
4
4
  import { matchScenario, matchesCondition } from "./routing/matcher.js";
5
5
  import { ProactiveEventService } from "./service.js";
6
- import { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserUnderstandingContextProvider } from "./execution/context.js";
6
+ import { pruneProactiveHistory } from "./maintenance.js";
7
+ import { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProjectStateContextProvider, UserModelContextProvider } from "./execution/context.js";
7
8
  import { ReadonlyProactiveAgentExecutor } from "./execution/agent-executor.js";
8
9
  import { listInsights } from "./execution/repository.js";
9
10
  import { ProactiveWorker } from "./execution/worker.js";
10
11
  import { ProactiveTemporalWorker } from "./temporal/worker.js";
11
12
  import { ProactiveInboxService } from "./inbox/service.js";
12
13
  import { ProactiveInboxWorker } from "./inbox/worker.js";
13
- export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveTemporalWorker, ProactiveWorker, ProjectStateContextProvider, ReadonlyProactiveAgentExecutor, UserUnderstandingContextProvider, listInsights, mapProductEventToProactive, matchScenario, matchesCondition, normalizeEventEnvelope };
14
+ export { AutomationStateContextProvider, ConnectedSourceContextProvider, ContextProviderRegistry, EventBatchContextProvider, InternalObjectContextProvider, MeetingWorkspaceContextProvider, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveTemporalWorker, ProactiveWorker, ProjectStateContextProvider, ReadonlyProactiveAgentExecutor, UserModelContextProvider, listInsights, mapProductEventToProactive, matchScenario, matchesCondition, normalizeEventEnvelope, pruneProactiveHistory };
@@ -0,0 +1,4 @@
1
+ export declare function pruneProactiveHistory(now?: Date): {
2
+ batches: number;
3
+ events: number;
4
+ };
@@ -0,0 +1,21 @@
1
+ import { runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
+ //#region src/proactive/maintenance.ts
3
+ const RETENTION_DAYS = 90;
4
+ function pruneProactiveHistory(now = /* @__PURE__ */ new Date()) {
5
+ const cutoff = (/* @__PURE__ */ new Date(now.getTime() - RETENTION_DAYS * 24 * 60 * 6e4)).toISOString();
6
+ return runSqliteWriteTransaction((db) => {
7
+ const batches = db.prepare(`DELETE FROM proactive_signal_batches
8
+ WHERE updated_at < ? AND status IN ('processed', 'ignored', 'failed_permanent', 'expired')`).run(cutoff).changes;
9
+ const events = db.prepare(`DELETE FROM proactive_events
10
+ WHERE observed_at < ? AND NOT EXISTS (
11
+ SELECT 1 FROM proactive_batch_events batch_event
12
+ WHERE batch_event.event_id = proactive_events.event_id
13
+ )`).run(cutoff).changes;
14
+ return {
15
+ batches: Number(batches),
16
+ events: Number(events)
17
+ };
18
+ });
19
+ }
20
+ //#endregion
21
+ export { pruneProactiveHistory };
@@ -1,7 +1,7 @@
1
1
  import type { ScenarioRoute } from '../routing/types.js';
2
2
  import type { PromptRevision, ScenarioDefinition, ScenarioSubscription } from './types.js';
3
3
  export declare function listScenarios(): ScenarioDefinition[];
4
- export declare function getScenario(key: string): ScenarioDefinition | null;
4
+ export declare function getScenario(key: string, version?: number): ScenarioDefinition | null;
5
5
  export declare function upsertSubscription(input: {
6
6
  scenarioKey: string;
7
7
  workspaceId: string;
@@ -15,7 +15,14 @@ function scenarioFromRow(row) {
15
15
  ...condition ? { condition } : {},
16
16
  aggregation: text(row, "aggregation"),
17
17
  debounceSeconds: Number(row.debounce_seconds),
18
- maxWindowSeconds: Number(row.max_window_seconds)
18
+ maxWindowSeconds: Number(row.max_window_seconds),
19
+ contextProviderIds: JSON.parse(text(row, "context_provider_ids_json")),
20
+ valuePolicy: {
21
+ minConfidence: Number(row.min_confidence),
22
+ minScore: Number(row.min_value_score),
23
+ cooldownSeconds: Number(row.cooldown_seconds),
24
+ maxRunsPerDay: Number(row.max_runs_per_day)
25
+ }
19
26
  };
20
27
  }
21
28
  function subscriptionFromRow(row) {
@@ -47,8 +54,8 @@ function revisionFromRow(row) {
47
54
  function listScenarios() {
48
55
  return getSqliteDatabase().prepare("SELECT * FROM proactive_scenarios ORDER BY scenario_key").all().map(scenarioFromRow);
49
56
  }
50
- function getScenario(key) {
51
- const row = getSqliteDatabase().prepare("SELECT * FROM proactive_scenarios WHERE scenario_key = ?").get(key);
57
+ function getScenario(key, version) {
58
+ const row = version === void 0 ? getSqliteDatabase().prepare("SELECT * FROM proactive_scenarios WHERE scenario_key = ?").get(key) : getSqliteDatabase().prepare("SELECT * FROM proactive_scenario_versions WHERE scenario_key = ? AND version = ?").get(key, version);
52
59
  return row ? scenarioFromRow(row) : null;
53
60
  }
54
61
  function upsertSubscription(input, now = /* @__PURE__ */ new Date()) {
@@ -11,6 +11,13 @@ export interface ScenarioDefinition {
11
11
  aggregation: ScenarioRoute['aggregation'];
12
12
  debounceSeconds: number;
13
13
  maxWindowSeconds: number;
14
+ contextProviderIds: string[];
15
+ valuePolicy: {
16
+ minConfidence: number;
17
+ minScore: number;
18
+ cooldownSeconds: number;
19
+ maxRunsPerDay: number;
20
+ };
14
21
  }
15
22
  export interface ScenarioSubscription {
16
23
  id: string;
@@ -14,5 +14,12 @@ export declare class ProactiveEventService {
14
14
  collecting: number;
15
15
  ready: number;
16
16
  oldestReadyAt: string | null;
17
+ last24Hours: {
18
+ runs: number;
19
+ insights: number;
20
+ discarded: number;
21
+ useful: number;
22
+ notUseful: number;
23
+ };
17
24
  };
18
25
  }
@@ -49,11 +49,27 @@ var ProactiveEventService = class {
49
49
  SUM(CASE WHEN status = 'ready' THEN 1 ELSE 0 END) AS ready,
50
50
  MIN(CASE WHEN status = 'ready' THEN ready_at END) AS oldest_ready_at
51
51
  FROM proactive_signal_batches`).get();
52
+ const since = (/* @__PURE__ */ new Date(Date.now() - 1440 * 6e4)).toISOString();
53
+ const runs = db.prepare(`SELECT COUNT(*) AS runs,
54
+ SUM(CASE WHEN status = 'discarded' THEN 1 ELSE 0 END) AS discarded
55
+ FROM proactive_runs WHERE started_at >= ?`).get(since);
56
+ const insights = db.prepare("SELECT COUNT(*) AS count FROM proactive_insights WHERE created_at >= ?").get(since);
57
+ const feedback = db.prepare(`SELECT
58
+ SUM(CASE WHEN rating = 'useful' THEN 1 ELSE 0 END) AS useful,
59
+ SUM(CASE WHEN rating = 'not_useful' THEN 1 ELSE 0 END) AS not_useful
60
+ FROM proactive_feedback WHERE created_at >= ?`).get(since);
52
61
  return {
53
62
  events: events.count,
54
63
  collecting: batches.collecting ?? 0,
55
64
  ready: batches.ready ?? 0,
56
- oldestReadyAt: batches.oldest_ready_at
65
+ oldestReadyAt: batches.oldest_ready_at,
66
+ last24Hours: {
67
+ runs: runs.runs,
68
+ insights: insights.count,
69
+ discarded: runs.discarded ?? 0,
70
+ useful: feedback.useful ?? 0,
71
+ notUseful: feedback.not_useful ?? 0
72
+ }
57
73
  };
58
74
  }
59
75
  };
@@ -9,6 +9,6 @@ export * from './project-loop.js';
9
9
  export * from './session-bind.js';
10
10
  export * from './workflow-bind.js';
11
11
  export * from './automation-bind.js';
12
- export * from './memory-bind.js';
12
+ export * from './knowledge-bind.js';
13
13
  export * from './workspace.js';
14
14
  export * from './workspace-project.js';
@@ -10,5 +10,5 @@ import { CODING_PROJECT_AGENT_ID, inferSuggestedProjectDefaultAgentId, suggestPr
10
10
  import { buildProjectLoopOverview } from "./project-loop.js";
11
11
  import { bindWorkflowRunToProject } from "./workflow-bind.js";
12
12
  import { bindAutomationToProject } from "./automation-bind.js";
13
- import { bindMemoryRecordToProject } from "./memory-bind.js";
14
- export { CODING_PROJECT_AGENT_ID, ProjectService, ProjectSkillError, ProjectSkillService, ProjectStore, ProjectWorkspaceConflictError, ProjectWorkspaceMissingError, bindAutomationToProject, bindMemoryRecordToProject, bindSessionToProject, bindSessionsToProject, bindWorkflowRunToProject, buildProjectLoopOverview, canonicalWorkspacePath, ensureWorkspaceDirectory, getProjectForSession, getProjectWorkspacePathForSession, inferProjectExecutionMode, inferProjectKind, inferProjectNameFromWorkspaceRoot, inferSuggestedProjectDefaultAgentId, isPathSameOrInsideWorkspace, isSafeAutoCreateWorkspaceRoot, isValidProjectAgentId, listProjectSessionKeys, moveSessionToProject, normalizeProjectAgentId, resolveProjectAgentId, resolveProjectWorkspacePath, resolveWorkspaceProjectRoot, slugifyProjectName, suggestProjectDefaultAgentId, unbindSessionFromProject, workspaceDirectoryExists };
13
+ import { bindKnowledgeItemToProject } from "./knowledge-bind.js";
14
+ export { CODING_PROJECT_AGENT_ID, ProjectService, ProjectSkillError, ProjectSkillService, ProjectStore, ProjectWorkspaceConflictError, ProjectWorkspaceMissingError, bindAutomationToProject, bindKnowledgeItemToProject, bindSessionToProject, bindSessionsToProject, bindWorkflowRunToProject, buildProjectLoopOverview, canonicalWorkspacePath, ensureWorkspaceDirectory, getProjectForSession, getProjectWorkspacePathForSession, inferProjectExecutionMode, inferProjectKind, inferProjectNameFromWorkspaceRoot, inferSuggestedProjectDefaultAgentId, isPathSameOrInsideWorkspace, isSafeAutoCreateWorkspaceRoot, isValidProjectAgentId, listProjectSessionKeys, moveSessionToProject, normalizeProjectAgentId, resolveProjectAgentId, resolveProjectWorkspacePath, resolveWorkspaceProjectRoot, slugifyProjectName, suggestProjectDefaultAgentId, unbindSessionFromProject, workspaceDirectoryExists };
@@ -0,0 +1 @@
1
+ export declare function bindKnowledgeItemToProject(knowledgeId: string, projectId: string): void;