@xopcai/xopc 0.0.249 → 0.0.251

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-B759R_qf.js → activity-store-DfBjTSo9.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BUu7EnwM.js → agent-avatar-dicebear-Bo_dmLv8.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-kILWelNb.js +1 -0
  6. package/dist/gateway/static/root/assets/{agents-DK9HjHO0.js → agents-yuUn8n-f.js} +1 -1
  7. package/dist/gateway/static/root/assets/{api-Cg0v7Lpn.js → api-zxpcJfgj.js} +1 -1
  8. package/dist/gateway/static/root/assets/{app-management-settings-panel-C9DkCW_d.js → app-management-settings-panel-Cz56nrVF.js} +1 -1
  9. package/dist/gateway/static/root/assets/{appearance-settings-CFggS95Y.js → appearance-settings-DxSws5U4.js} +1 -1
  10. package/dist/gateway/static/root/assets/apps-page-BnizTdgs.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-BQrilVVv.js → archive-plugin-7k15-hqo.js} +1 -1
  12. package/dist/gateway/static/root/assets/{attachment-load-BG0BliqV.js → attachment-load-B-SFpjd9.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-page-Bo4RiTkh.js → automations-page-Qy36j19q.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-workspace-CZRKqSqY.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-BCnyNU0C.js → binary-plugins-CPOZQt8F.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-Db8DlVvg.js → block-editor-DhvVlIp9.js} +4 -4
  17. package/dist/gateway/static/root/assets/browser-settings-page-pN5LbChY.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-C71vfl0b.js → browser-workflow-inputs-BX1-uM9L.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-vvmSYKsO.js → browser-workflows-page-C65MI57t.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-CJw2e16J.js +7 -0
  21. package/dist/gateway/static/root/assets/channels-settings-CRgjb4Ck.js +1 -0
  22. package/dist/gateway/static/root/assets/{channels-status-swr-CKyV3jY5.js → channels-status-swr-CX-yWwLD.js} +1 -1
  23. package/dist/gateway/static/root/assets/{chat-terminal-dock-B1Xd6OFB.js → chat-terminal-dock-1PJoxRuV.js} +2 -2
  24. package/dist/gateway/static/root/assets/connectors-page-Dcpdy06y.js +2 -0
  25. package/dist/gateway/static/root/assets/{cron-expression-D-F9vjtE.js → cron-expression-CBCc6zFA.js} +1 -1
  26. package/dist/gateway/static/root/assets/{date-picker-B2OoYvic.js → date-picker-u8K5Kt_N.js} +1 -1
  27. package/dist/gateway/static/root/assets/{dependency-picker-BiGx9Sbj.js → dependency-picker-y_i_cnpz.js} +1 -1
  28. package/dist/gateway/static/root/assets/{desktop-pet-BNMRqipe.js → desktop-pet-DyL0JxLm.js} +1 -1
  29. package/dist/gateway/static/root/assets/{desktop-pet-settings-DeYbIV7A.js → desktop-pet-settings-d2d_IsyP.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-debug-page-COyn05ub.js → extension-debug-page-DqIBKJwl.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-oH43chS2.js → extension-page-DUW1xxj2.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-BMO59994.js → extension-settings-page-BHY9qaNw.js} +1 -1
  33. package/dist/gateway/static/root/assets/files-BArWTfr7.js +1 -0
  34. package/dist/gateway/static/root/assets/{gateway-config-api-cimpViGk.js → gateway-config-api-e3BRcgDx.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-config-swr-BGdHwT4e.js → gateway-config-swr-CMNbl0FZ.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-settings-BHJtnSic.js → gateway-settings-Cheo0Rkc.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-CuaM3b4c.js → gateway-startup-retry-CR7Xg8As.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-settings-DNhrZHqx.js → heartbeat-settings-7CD9iPR7.js} +1 -1
  39. package/dist/gateway/static/root/assets/home-page-DVrTRqNc.js +1 -0
  40. package/dist/gateway/static/root/assets/{image-generation-api-D7duj7Uj.js → image-generation-api-C5mn73ca.js} +1 -1
  41. package/dist/gateway/static/root/assets/{index-DGeGmj4k.css → index-B7CX4Qob.css} +1 -1
  42. package/dist/gateway/static/root/assets/index-BHrpyJ4t.js +72 -0
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-D8Zw_lYd.js → keyboard-shortcuts-settings-BtlqMleF.js} +1 -1
  44. package/dist/gateway/static/root/assets/languages-5WaOu0Lf.js +2 -0
  45. package/dist/gateway/static/root/assets/local-app-workbench-page-BjxfkjxE.js +2 -0
  46. package/dist/gateway/static/root/assets/{local-apps-page-CvPDPRwb.js → local-apps-page-B7xqQe2s.js} +1 -1
  47. package/dist/gateway/static/root/assets/{locale-store-zEL8bkwx.js → locale-store-CF4erhjB.js} +1 -1
  48. package/dist/gateway/static/root/assets/logs-page-kACaPZKL.js +2 -0
  49. package/dist/gateway/static/root/assets/{management-settings-D8moh99U.js → management-settings-A432siER.js} +1 -1
  50. package/dist/gateway/static/root/assets/markdown-editor-BjMTIM-m.js +1 -0
  51. package/dist/gateway/static/root/assets/{markdown-view-DGRN-8wP.js → markdown-view-CQvzsE24.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-BLaE5b1Y.js → media-plugins-CpvYiauZ.js} +1 -1
  53. package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +3 -0
  54. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-DiVDuCxl.js → mobile-pairing-wizard-DyjVGngO.js} +1 -1
  55. package/dist/gateway/static/root/assets/note-detail-panel-CUd8O4K7.js +5 -0
  56. package/dist/gateway/static/root/assets/notes-page-BLQwd39W.js +8 -0
  57. package/dist/gateway/static/root/assets/{page-tabs-BFMGjA60.js → page-tabs-B3FKzjR6.js} +1 -1
  58. package/dist/gateway/static/root/assets/{preview-open-alternatives-DNEWZN7H.js → preview-open-alternatives-DnjrwAHD.js} +1 -1
  59. package/dist/gateway/static/root/assets/{product-open-page-Co5u7asH.js → product-open-page-COcr_NUJ.js} +1 -1
  60. package/dist/gateway/static/root/assets/project-detail-page-NttW338u.js +1 -0
  61. package/dist/gateway/static/root/assets/projects-page-BzH8pjEz.js +1 -0
  62. package/dist/gateway/static/root/assets/{registry-api-Cg92zSod.js → registry-api-BsRBlji7.js} +1 -1
  63. package/dist/gateway/static/root/assets/remote-access-hub-BxpjSDnL.js +1 -0
  64. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-C0ByNmlV.js → runtime-tools-settings-panel-LO4wZ_dO.js} +1 -1
  65. package/dist/gateway/static/root/assets/{schema-form-Dq_VQpuY.js → schema-form-crcj4-Pm.js} +1 -1
  66. package/dist/gateway/static/root/assets/sessions-page-BLMaibOb.js +1 -0
  67. package/dist/gateway/static/root/assets/settings-advanced-gate-BRvvKhoH.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-form-section-CZu6FX4k.js → settings-form-section-Bl4MvTmq.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-page-S8ekeUZd.js → settings-page-DplrjZ6x.js} +1 -1
  70. package/dist/gateway/static/root/assets/{setup-status-panel-BdVmwXMv.js → setup-status-panel-DTOsxQC1.js} +1 -1
  71. package/dist/gateway/static/root/assets/{share-preview-page-D2fEidbn.js → share-preview-page-CJP1kURj.js} +1 -1
  72. package/dist/gateway/static/root/assets/shares-settings-CemgzEi4.js +1 -0
  73. package/dist/gateway/static/root/assets/skill-reload-api-BWYanBlQ.js +1 -0
  74. package/dist/gateway/static/root/assets/{skills-page-AYiPlgZE.js → skills-page-DsjcKg9Q.js} +1 -1
  75. package/dist/gateway/static/root/assets/{skills-page.utils-DGzl-ib-.js → skills-page.utils-D6gWBbvy.js} +1 -1
  76. package/dist/gateway/static/root/assets/source-workspace-editor-CVWzt0oT.js +1 -0
  77. package/dist/gateway/static/root/assets/{system-settings-panel-5Xd5mIiR.js → system-settings-panel-_eCXfqCo.js} +1 -1
  78. package/dist/gateway/static/root/assets/{task-detail-page-BQAUaCDD.js → task-detail-page-D0Z_K5JT.js} +1 -1
  79. package/dist/gateway/static/root/assets/{theme-store-ZVClZKQ0.js → theme-store-BOgkc_9D.js} +1 -1
  80. package/dist/gateway/static/root/assets/{tunnel-api-CdZN1Jin.js → tunnel-api-W5mktxl1.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-czRI0NBc.js → use-autosave-Na2DYzT3.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-model-page-B_-SNat-.js +2 -0
  83. package/dist/gateway/static/root/assets/{vendor-codemirror--gTq3YAI.js → vendor-codemirror-Qdcjid65.js} +1 -1
  84. package/dist/gateway/static/root/assets/{voice-api-key-field-8YEvA3cU.js → voice-api-key-field-OXweUxS_.js} +1 -1
  85. package/dist/gateway/static/root/assets/{voice-config-api-CopF64lY.js → voice-config-api-C-ryeIxj.js} +1 -1
  86. package/dist/gateway/static/root/assets/{work-discovery-overlay-keLtqYYJ.js → work-discovery-overlay-BqOsO47I.js} +1 -1
  87. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-Dy5WgYMO.js → workflow-run-setup-panel-B9S_lfT1.js} +2 -2
  88. package/dist/gateway/static/root/assets/workflows-page-CNOT2Coo.js +5 -0
  89. package/dist/gateway/static/root/index.html +11 -11
  90. package/dist/package.js +1 -1
  91. package/dist/packages/gateway-contract/src/user-message-display.js +18 -0
  92. package/dist/src/agent/agent-instance-gateway.d.ts +1 -1
  93. package/dist/src/agent/agent-manager.d.ts +9 -9
  94. package/dist/src/agent/agent-manager.js +50 -32
  95. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  96. package/dist/src/agent/background-review/prompts.js +11 -2
  97. package/dist/src/agent/background-review/run-background-review.js +1 -1
  98. package/dist/src/agent/context/audit.d.ts +3 -1
  99. package/dist/src/agent/context/audit.js +32 -6
  100. package/dist/src/agent/context/coordinator.d.ts +6 -1
  101. package/dist/src/agent/context/coordinator.js +14 -13
  102. package/dist/src/agent/context/execution-context.d.ts +6 -47
  103. package/dist/src/agent/context/execution-context.js +79 -15
  104. package/dist/src/agent/context/execution-context.types.d.ts +50 -0
  105. package/dist/src/agent/context/execution-context.types.js +1 -0
  106. package/dist/src/agent/context/execution-scope.d.ts +5 -1
  107. package/dist/src/agent/context/execution-scope.js +6 -2
  108. package/dist/src/agent/context/project-context.d.ts +3 -0
  109. package/dist/src/agent/context/project-context.js +5 -3
  110. package/dist/src/agent/embedded/model-runtime.js +1 -1
  111. package/dist/src/agent/embedded/run-for-session.js +1 -1
  112. package/dist/src/agent/external-tools/index.d.ts +1 -0
  113. package/dist/src/agent/external-tools/index.js +1 -0
  114. package/dist/src/agent/external-tools/memory-provider.d.ts +1 -0
  115. package/dist/src/agent/external-tools/memory-provider.js +1 -0
  116. package/dist/src/agent/image/tool-model-config.js +1 -1
  117. package/dist/src/agent/inbound/attachment-pipeline.js +5 -1
  118. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  119. package/dist/src/agent/memory/compaction-promotion.d.ts +1 -0
  120. package/dist/src/agent/memory/compaction-promotion.js +7 -2
  121. package/dist/src/agent/memory/index.d.ts +1 -1
  122. package/dist/src/agent/memory/index.js +3 -3
  123. package/dist/src/agent/memory/memory-config.d.ts +0 -5
  124. package/dist/src/agent/memory/memory-config.js +1 -8
  125. package/dist/src/agent/orchestration/context-overflow.js +1 -0
  126. package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -2
  127. package/dist/src/agent/service/direct-turn-helpers.js +2 -2
  128. package/dist/src/agent/service/process-direct-streaming.js +3 -4
  129. package/dist/src/agent/service.js +2 -2
  130. package/dist/src/agent/session/session-inspector.js +1 -1
  131. package/dist/src/agent/skills/hub-lock.js +1 -1
  132. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  133. package/dist/src/agent/tools/factory.d.ts +1 -0
  134. package/dist/src/agent/tools/factory.js +37 -7
  135. package/dist/src/agent/tools/knowledge-memory-tool.d.ts +6 -0
  136. package/dist/src/agent/tools/knowledge-memory-tool.js +81 -26
  137. package/dist/src/agent/tools/session-search-tool.d.ts +1 -0
  138. package/dist/src/agent/tools/session-search-tool.js +7 -0
  139. package/dist/src/agent/tools/user-context-tool.d.ts +2 -0
  140. package/dist/src/agent/tools/user-context-tool.js +21 -4
  141. package/dist/src/ai-assist/text-assist.js +1 -1
  142. package/dist/src/auth/credentials.js +2 -2
  143. package/dist/src/auth/profiles/store.js +1 -1
  144. package/dist/src/auth/sync-provider-auth.js +2 -2
  145. package/dist/src/automations/service/automation-service.d.ts +2 -1
  146. package/dist/src/automations/service/automation-service.js +6 -2
  147. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  148. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  149. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  150. package/dist/src/cli/commands/models.js +1 -1
  151. package/dist/src/config/index.js +4 -4
  152. package/dist/src/config/loader.js +1 -1
  153. package/dist/src/config/models-json.js +1 -1
  154. package/dist/src/connectors/connection-recovery-service.d.ts +1 -0
  155. package/dist/src/connectors/connection-recovery-service.js +46 -22
  156. package/dist/src/extensions/lockfile.js +1 -1
  157. package/dist/src/files/file-service.js +142 -14
  158. package/dist/src/gateway/agents-admin.js +1 -1
  159. package/dist/src/gateway/file-path-classifier.js +1 -1
  160. package/dist/src/gateway/heartbeat/service.js +1 -1
  161. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  162. package/dist/src/gateway/hono/routes/connectors.js +17 -3
  163. package/dist/src/gateway/hono/routes/files.js +23 -2
  164. package/dist/src/gateway/hono/routes/models.js +1 -1
  165. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  166. package/dist/src/gateway/security/gateway-scopes.js +2 -0
  167. package/dist/src/gateway/service/agent-runner.js +1 -1
  168. package/dist/src/gateway/service/config-coordinator.js +1 -1
  169. package/dist/src/gateway/service/run-gateway-agent.js +1 -1
  170. package/dist/src/gateway/service/session-input-coordinator.js +1 -1
  171. package/dist/src/gateway/service.js +12 -8
  172. package/dist/src/heartbeat/index.js +1 -1
  173. package/dist/src/knowledge-memory/domain.d.ts +1 -0
  174. package/dist/src/knowledge-memory/index.js +2 -2
  175. package/dist/src/knowledge-memory/repository.d.ts +4 -1
  176. package/dist/src/knowledge-memory/repository.js +16 -2
  177. package/dist/src/notifications/planner.js +7 -3
  178. package/dist/src/proactive/actions/service.d.ts +0 -1
  179. package/dist/src/proactive/actions/service.js +1 -10
  180. package/dist/src/proactive/execution/context.d.ts +6 -8
  181. package/dist/src/proactive/execution/context.js +78 -32
  182. package/dist/src/proactive/execution/insight.d.ts +4 -1
  183. package/dist/src/proactive/execution/insight.js +5 -2
  184. package/dist/src/proactive/execution/repository.d.ts +1 -0
  185. package/dist/src/proactive/execution/repository.js +9 -1
  186. package/dist/src/proactive/execution/types.d.ts +0 -1
  187. package/dist/src/proactive/execution/worker.js +7 -5
  188. package/dist/src/proactive/inbox/repository.js +8 -2
  189. package/dist/src/proactive/inbox/service.js +2 -2
  190. package/dist/src/proactive/inbox/types.d.ts +1 -0
  191. package/dist/src/proactive/inbox/worker.d.ts +1 -0
  192. package/dist/src/proactive/inbox/worker.js +7 -0
  193. package/dist/src/proactive/index.d.ts +1 -0
  194. package/dist/src/proactive/index.js +2 -1
  195. package/dist/src/proactive/maintenance.d.ts +4 -0
  196. package/dist/src/proactive/maintenance.js +21 -0
  197. package/dist/src/proactive/scenarios/repository.d.ts +1 -1
  198. package/dist/src/proactive/scenarios/repository.js +10 -3
  199. package/dist/src/proactive/scenarios/types.d.ts +7 -0
  200. package/dist/src/proactive/service.d.ts +7 -0
  201. package/dist/src/proactive/service.js +17 -1
  202. package/dist/src/projects/project-service.d.ts +2 -1
  203. package/dist/src/projects/project-service.js +3 -2
  204. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  205. package/dist/src/providers/index.js +2 -2
  206. package/dist/src/providers/model-registry.js +1 -1
  207. package/dist/src/providers/register-runtime-providers.js +1 -1
  208. package/dist/src/session/index.js +1 -1
  209. package/dist/src/session/store.js +5 -2
  210. package/dist/src/storage/sqlite/collaboration-rule-repository.d.ts +3 -1
  211. package/dist/src/storage/sqlite/collaboration-rule-repository.js +1 -1
  212. package/dist/src/storage/sqlite/config-repository.js +1 -1
  213. package/dist/src/storage/sqlite/connection-wait-repository.js +2 -2
  214. package/dist/src/storage/sqlite/index.js +2 -2
  215. package/dist/src/storage/sqlite/migrations/151_proactive_scope_cleanup.sql +6 -0
  216. package/dist/src/storage/sqlite/migrations/152_proactive_scenario_contract.sql +140 -0
  217. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  218. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  219. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  220. package/dist/src/storage/sqlite/row-mappers.js +2 -2
  221. package/dist/src/storage/sqlite/schema.js +1 -1
  222. package/dist/src/storage/sqlite/session-input-repository.js +1 -1
  223. package/dist/src/storage/sqlite/session-instance-repository.d.ts +2 -0
  224. package/dist/src/storage/sqlite/session-instance-repository.js +6 -0
  225. package/dist/src/storage/sqlite/session-repository.d.ts +1 -1
  226. package/dist/src/storage/sqlite/session-repository.js +3 -5
  227. package/dist/src/storage/sqlite/transcript-repository.js +2 -1
  228. package/dist/src/tasks/home-query-service.js +35 -13
  229. package/dist/src/tasks/project-monitoring-service.d.ts +2 -0
  230. package/dist/src/tasks/project-monitoring-service.js +4 -1
  231. package/dist/src/tui/backends/embedded-backend.js +1 -1
  232. package/dist/src/tui/tui-startup-resources.js +1 -1
  233. package/dist/src/tui/tui.js +1 -1
  234. package/dist/src/user-context/access-policy.d.ts +11 -0
  235. package/dist/src/user-context/access-policy.js +26 -0
  236. package/dist/src/user-model/capture/executor.d.ts +10 -0
  237. package/dist/src/user-model/capture/executor.js +99 -3
  238. package/dist/src/user-model/capture/semantic.d.ts +18 -0
  239. package/dist/src/user-model/capture/semantic.js +72 -6
  240. package/dist/src/user-model/goals.d.ts +4 -0
  241. package/dist/src/user-model/goals.js +4 -2
  242. package/dist/src/voice/realtime/agentEngine.js +0 -1
  243. package/dist/src/work-discovery/service.js +1 -1
  244. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  245. package/package.json +1 -1
  246. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-C1rXNUAG.js +0 -1
  247. package/dist/gateway/static/root/assets/apps-page-jOvT-fzU.js +0 -1
  248. package/dist/gateway/static/root/assets/automations-workspace-BKjKTlW8.js +0 -6
  249. package/dist/gateway/static/root/assets/browser-settings-page-Dzq18pO1.js +0 -8
  250. package/dist/gateway/static/root/assets/capabilities-settings-panel-DW4SBQf4.js +0 -7
  251. package/dist/gateway/static/root/assets/channels-settings-57OGuewD.js +0 -1
  252. package/dist/gateway/static/root/assets/code-editor-D4_k-6QN.js +0 -1
  253. package/dist/gateway/static/root/assets/connectors-page-CT_I3kbR.js +0 -2
  254. package/dist/gateway/static/root/assets/files-D6vf3S30.js +0 -1
  255. package/dist/gateway/static/root/assets/home-page-BiHwiBnQ.js +0 -1
  256. package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +0 -1
  257. package/dist/gateway/static/root/assets/index-aBs0EfQB.js +0 -72
  258. package/dist/gateway/static/root/assets/local-app-workbench-page-eBFVWmtH.js +0 -2
  259. package/dist/gateway/static/root/assets/logs-page-ClvcWlL6.js +0 -2
  260. package/dist/gateway/static/root/assets/markdown-editor-nDLmA_LF.js +0 -2
  261. package/dist/gateway/static/root/assets/markdown-split-D7V3j0vE.js +0 -1
  262. package/dist/gateway/static/root/assets/messages-W5P19VTF.js +0 -11
  263. package/dist/gateway/static/root/assets/note-detail-panel-CEEvR-fV.js +0 -5
  264. package/dist/gateway/static/root/assets/notes-page-BLqgXNCx.js +0 -8
  265. package/dist/gateway/static/root/assets/project-detail-page-CIiFJ5tk.js +0 -1
  266. package/dist/gateway/static/root/assets/projects-page-B3UF-Pfm.js +0 -1
  267. package/dist/gateway/static/root/assets/remote-access-hub-BUtpkJPG.js +0 -1
  268. package/dist/gateway/static/root/assets/sessions-page-UgJmG-V4.js +0 -1
  269. package/dist/gateway/static/root/assets/settings-advanced-gate-DDCzpdkl.js +0 -1
  270. package/dist/gateway/static/root/assets/shares-settings-BdsqnCYj.js +0 -1
  271. package/dist/gateway/static/root/assets/skill-reload-api-ghzAQKna.js +0 -1
  272. package/dist/gateway/static/root/assets/user-model-page-W3GTm6nA.js +0 -2
  273. package/dist/gateway/static/root/assets/workflows-page-BbAV3h7n.js +0 -5
@@ -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
  };
@@ -11,7 +11,8 @@ export type ProjectSuggestion = {
11
11
  export declare class ProjectService {
12
12
  private readonly store;
13
13
  private readonly signals?;
14
- constructor(store?: ProjectStore, signals?: ProactiveSignalPublisher);
14
+ private readonly workspaceId;
15
+ constructor(store?: ProjectStore, signals?: ProactiveSignalPublisher, workspaceId?: string);
15
16
  private listAllProjects;
16
17
  create(input: CreateProjectInput): Project;
17
18
  get(id: string): Project | null;
@@ -9,9 +9,10 @@ import { bindSessionToProject, listProjectSessionKeys, unbindSessionFromProject
9
9
  import { createHash } from "node:crypto";
10
10
  //#region src/projects/project-service.ts
11
11
  var ProjectService = class {
12
- constructor(store = new ProjectStore(), signals) {
12
+ constructor(store = new ProjectStore(), signals, workspaceId = "default") {
13
13
  this.store = store;
14
14
  this.signals = signals;
15
+ this.workspaceId = workspaceId;
15
16
  }
16
17
  listAllProjects() {
17
18
  const items = [];
@@ -199,7 +200,7 @@ var ProjectService = class {
199
200
  },
200
201
  actor: { kind: "system" },
201
202
  scope: {
202
- workspaceId: "default",
203
+ workspaceId: this.workspaceId,
203
204
  projectId: project.id
204
205
  },
205
206
  occurredAt: new Date(project.updatedAt).toISOString(),
@@ -1,5 +1,5 @@
1
- import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
2
1
  import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
2
+ import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
3
3
  import { getDefaultAuthProfileStore } from "./auth-profile-store.js";
4
4
  //#region src/providers/auth-runtime/resolve-auth.ts
5
5
  init_env_keys();
@@ -1,11 +1,11 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
- import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
- import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
5
3
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
6
4
  import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
7
5
  import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
6
+ import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
8
7
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
8
+ import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
9
9
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
10
10
  import { applyOfficialModelMetadataCorrections, getSupplementalModels, init_model_supplements } from "./model-supplements.js";
11
11
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { resolveModelsJsonPath } from "../config/paths.js";
5
4
  import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
5
+ import { resolveModelsJsonPath } from "../config/paths.js";
6
6
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
7
7
  import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
8
8
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
2
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
3
+ import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
4
4
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
5
5
  //#region src/providers/register-runtime-providers.ts
6
6
  function registerRuntimeProvider(modelRuntime, source) {
@@ -1,5 +1,5 @@
1
- import { SessionStatus } from "./types.js";
2
1
  import { buildSessionContextForLlm, isTranscriptContextEntry, mergeLlmMessagesPreservingContextRows, transcriptRowsFromJsonArray } from "./session-context-for-llm.js";
2
+ import { SessionStatus } from "./types.js";
3
3
  import { effectiveWorkspacePathForSession, normalizeWorkingDirectoryInput, projectWorkspacePath } from "./session-workspace.js";
4
4
  import { emitSessionTranscriptUpdate, onSessionTranscriptUpdate } from "./transcript-events.js";
5
5
  import { fallbackTitleFromMessages, generateSessionTitleFromMessages, getSessionTitleSource, isWebchatSessionKey, maybeRefineSessionTitleWithLlm, maybeSetProvisionalSessionTitle, provisionalTitleFromUserText, sanitizeGeneratedSessionTitle, sanitizeSessionTitle, shouldAutoTitleSessionKey, shouldRefineSessionTitleWithLlm } from "./session-title.js";
@@ -3,8 +3,8 @@ import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { requireXopcDatabase } from "../storage/sqlite/connection.js";
5
5
  import { runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
6
- import "./types.js";
7
6
  import { buildSessionContextForLlm, buildSessionDisplayMessages, isRuntimeOnlyTranscriptMessage, isTranscriptCompactionEntry, mergeLlmMessagesPreservingContextRows, transcriptRowsFromJsonArray } from "./session-context-for-llm.js";
7
+ import "./types.js";
8
8
  import { init_agent_session_key, resolveAgentIdFromSessionKey } from "../routing/agent-session-key.js";
9
9
  import { estimateTokensFromMessages } from "../storage/sqlite/row-mappers.js";
10
10
  import { deleteSessionRecord, ensureSessionRecord, findSessionKeyBySessionId, getGlobalSessionStats, getSessionMetadata, listSessionMetadata, listSessionsByAgent, patchSessionMetadata, resetSessionRecord } from "../storage/sqlite/session-repository.js";
@@ -13,6 +13,7 @@ import { getSessionConfig, setSessionConfig } from "../storage/sqlite/config-rep
13
13
  import "../storage/sqlite/index.js";
14
14
  import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
15
15
  import { SessionCompactor } from "../agent/memory/compaction.js";
16
+ import { resolveUserContextSessionAccess } from "../user-context/access-policy.js";
16
17
  import { readPostCompactionContext } from "../agent/reply/post-compaction-context.js";
17
18
  import { resolveCompactionPolicy } from "../agent/memory/compaction-policy.js";
18
19
  import { promoteCompactionLedger } from "../agent/memory/compaction-promotion.js";
@@ -464,6 +465,7 @@ var SessionStore = class {
464
465
  })) throw new Error(`Session changed while compaction was running: ${key}`);
465
466
  try {
466
467
  const metadata = getSessionMetadata(key);
468
+ const access = resolveUserContextSessionAccess(this.options.config, key);
467
469
  const promoted = promoteCompactionLedger({
468
470
  sessionKey: key,
469
471
  sessionId: expectedSnapshot.sessionId,
@@ -472,7 +474,8 @@ var SessionStore = class {
472
474
  projectId: metadata?.projectId,
473
475
  handover: result.handover,
474
476
  audit: result.audit,
475
- sourceEntries: expectedSnapshot.entries
477
+ sourceEntries: expectedSnapshot.entries,
478
+ writePolicy: access.knowledge && this.options.config.userContext.knowledgeMemory.sources.includes("session") ? this.options.config.userContext.knowledgeMemory.writePolicy : "deny"
476
479
  });
477
480
  log.info({
478
481
  sessionKey: key,
@@ -13,5 +13,7 @@ export interface CollaborationRule {
13
13
  }
14
14
  export declare function getCollaborationRule(id: string): CollaborationRule | undefined;
15
15
  export declare function listCollaborationRules(principalId?: string): CollaborationRule[];
16
- export declare function createCollaborationRule(input: Pick<CollaborationRule, 'category' | 'priority' | 'scope' | 'conditions' | 'statement'>): CollaborationRule;
16
+ export declare function createCollaborationRule(input: Pick<CollaborationRule, 'category' | 'priority' | 'scope' | 'conditions' | 'statement'> & {
17
+ status?: CollaborationRule['status'];
18
+ }): CollaborationRule;
17
19
  export declare function setCollaborationRuleStatus(id: string, status: CollaborationRule['status']): CollaborationRule | undefined;
@@ -40,7 +40,7 @@ function createCollaborationRule(input) {
40
40
  db.prepare(`INSERT INTO collaboration_rules (
41
41
  rule_id, principal_id, category, status, priority, scope_type, scope_id,
42
42
  conditions_json, current_revision_id, created_at, updated_at
43
- ) VALUES (?, ?, ?, 'active', ?, ?, ?, ?, ?, ?, ?)`).run(id, USER_MODEL_PRINCIPAL_ID, input.category, input.priority, input.scope.type, input.scope.id ?? null, JSON.stringify(input.conditions), revisionId, now, now);
43
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, USER_MODEL_PRINCIPAL_ID, input.category, input.status ?? "active", input.priority, input.scope.type, input.scope.id ?? null, JSON.stringify(input.conditions), revisionId, now, now);
44
44
  db.prepare(`INSERT INTO collaboration_rule_revisions (
45
45
  revision_id, rule_id, statement, created_by, created_at
46
46
  ) VALUES (?, ?, ?, 'user', ?)`).run(revisionId, id, input.statement.trim(), now);
@@ -1,6 +1,6 @@
1
1
  import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
- import { notifyUserContextChange } from "../../user-context/changes.js";
3
2
  import { sessionConfigRowToConfig } from "./row-mappers.js";
3
+ import { notifyUserContextChange } from "../../user-context/changes.js";
4
4
  import { ensureSessionInTransaction } from "./session-repository.js";
5
5
  //#region src/storage/sqlite/config-repository.ts
6
6
  function readConfigRow(db, sessionKey) {
@@ -2,9 +2,9 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { isXopcDatabaseOpen } from "./connection.js";
4
4
  import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
5
- import { TaskRunRepository } from "../../tasks/task-run-repository.js";
6
- import { readCurrentSessionId } from "./session-repository.js";
5
+ import { readCurrentSessionId } from "./session-instance-repository.js";
7
6
  import { bumpSessionInputRevision, getSessionInputById, getSessionInputState, insertSessionInput, setSessionInputStatus } from "./session-input-repository.js";
7
+ import { TaskRunRepository } from "../../tasks/task-run-repository.js";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { EventEmitter } from "node:events";
10
10
  //#region src/storage/sqlite/connection-wait-repository.ts
@@ -15,10 +15,9 @@ import { closeTemporalAssertions, createTemporalAssertion, linkContextObjects, l
15
15
  import { createCollaborationRule, getCollaborationRule, listCollaborationRules, setCollaborationRuleStatus } from "./collaboration-rule-repository.js";
16
16
  import { createContextEvidence } from "./context-evidence-repository.js";
17
17
  import { getUserPeopleIndexState, getUserPerson, listUserPeople, mergeUserPeople, replaceUserPeopleIndex, summarizeUserPeople, updateUserPerson } from "./user-people-repository.js";
18
+ import { cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputById, getSessionInputState, insertSessionInput, listActiveSessionInputRuns, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus } from "./session-input-repository.js";
18
19
  import { buildDefaultSessionMetadata } from "./session-metadata.js";
19
20
  import { buildGlobalSessionStats, classifyStoredRow, estimateTokensFromMessages, extractFtsContent, metadataToSessionInsert, sessionConfigRowToConfig, sessionRowToMetadata, transcriptEntryRowToStoredRow } from "./row-mappers.js";
20
- import { deleteSessionRecord, ensureSessionRecord, findSessionKeyBySessionId, getCurrentSessionId, getGlobalSessionStats, getSessionMetadata, getSessionPersistedLevels, incrementSessionStatsOnAppend, listSessionMetadata, listSessionsByAgent, patchSessionMetadata, resetSessionRecord, resolveSessionAgentId, updateSessionStats } from "./session-repository.js";
21
- import { cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputById, getSessionInputState, insertSessionInput, listActiveSessionInputRuns, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus } from "./session-input-repository.js";
22
21
  import { replaceLatestSessionTurnAndQueueInput, validateLatestSessionTurnTarget } from "./session-turn-replace-repository.js";
23
22
  import { acknowledgeHomeAttention, isHomeAttentionAcknowledged } from "./home-attention-repository.js";
24
23
  import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "./connector-learning-repository.js";
@@ -26,6 +25,7 @@ import { COMPOSER_INPUT_HISTORY_LIMIT, appendComposerInputHistory, clearComposer
26
25
  import { bindEndpointPrincipal, createEndpointPrincipal, getEndpointPrincipal, listEndpointPrincipals, revokeEndpointPrincipal, touchEndpointPrincipal } from "./endpoint-principal-repository.js";
27
26
  import { finishEndpointToolInvocationAudit, listEndpointToolInvocationAudits, startEndpointToolInvocationAudit } from "./endpoint-tool-invocation-repository.js";
28
27
  import { getInteractionState, setInteractionState, updateInteractionStateFromMessage } from "./interaction-state-repository.js";
28
+ import { deleteSessionRecord, ensureSessionRecord, findSessionKeyBySessionId, getCurrentSessionId, getGlobalSessionStats, getSessionMetadata, getSessionPersistedLevels, incrementSessionStatsOnAppend, listSessionMetadata, listSessionsByAgent, patchSessionMetadata, resetSessionRecord, resolveSessionAgentId, updateSessionStats } from "./session-repository.js";
29
29
  import { getSessionTaskPlan, setSessionTaskPlan } from "./session-task-plan-repository.js";
30
30
  import { buildRelationshipPrompt, getRelationshipSettings, isProactiveSupportAllowed, updateRelationshipSettings } from "./relationship-settings-repository.js";
31
31
  import { appendCompactionBoundaryIfUnchanged, appendTranscriptEntry, listCompactionBoundaries, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, paginateTranscriptMessages, replaceTranscriptRows, restoreBeforeCompactionBoundary, searchSessionTranscript } from "./transcript-repository.js";
@@ -0,0 +1,6 @@
1
+ DELETE FROM proactive_scenario_subscriptions
2
+ WHERE subscription_id IN (
3
+ 'default-project-delivery-risk',
4
+ 'default-blocked-work',
5
+ 'default-automation-failure-impact'
6
+ );
@@ -0,0 +1,140 @@
1
+ ALTER TABLE proactive_scenarios
2
+ ADD COLUMN context_provider_ids_json TEXT NOT NULL DEFAULT '["event_batch"]';
3
+ ALTER TABLE proactive_scenarios
4
+ ADD COLUMN min_confidence REAL NOT NULL DEFAULT 0.65
5
+ CHECK (min_confidence >= 0 AND min_confidence <= 1);
6
+ ALTER TABLE proactive_scenarios
7
+ ADD COLUMN min_value_score REAL NOT NULL DEFAULT 0.6
8
+ CHECK (min_value_score >= 0 AND min_value_score <= 1);
9
+ ALTER TABLE proactive_scenarios
10
+ ADD COLUMN cooldown_seconds INTEGER NOT NULL DEFAULT 604800
11
+ CHECK (cooldown_seconds >= 0);
12
+ ALTER TABLE proactive_scenarios
13
+ ADD COLUMN max_runs_per_day INTEGER NOT NULL DEFAULT 30
14
+ CHECK (max_runs_per_day > 0);
15
+
16
+ UPDATE proactive_scenarios
17
+ SET context_provider_ids_json = '["event_batch","connected_source","internal_objects","user_model","project_state"]'
18
+ WHERE scenario_key IN ('project_delivery_risk', 'blocked_work');
19
+
20
+ UPDATE proactive_scenarios
21
+ SET context_provider_ids_json = '["event_batch","user_model","automation_state","project_state"]',
22
+ cooldown_seconds = 86400,
23
+ max_runs_per_day = 20
24
+ WHERE scenario_key = 'automation_failure_impact';
25
+
26
+ UPDATE proactive_scenarios
27
+ SET context_provider_ids_json = '["event_batch","connected_source","user_model","meeting_workspace"]',
28
+ cooldown_seconds = 86400,
29
+ max_runs_per_day = 20
30
+ WHERE scenario_key = 'meeting_preparation';
31
+
32
+ UPDATE proactive_scenarios
33
+ SET context_provider_ids_json = '["event_batch","user_model","discussion"]',
34
+ cooldown_seconds = 86400,
35
+ max_runs_per_day = 20
36
+ WHERE scenario_key = 'discussion_follow_up';
37
+
38
+ CREATE TABLE proactive_scenario_versions (
39
+ scenario_key TEXT NOT NULL,
40
+ version INTEGER NOT NULL CHECK (version > 0),
41
+ title TEXT NOT NULL,
42
+ description TEXT NOT NULL,
43
+ base_prompt TEXT NOT NULL,
44
+ base_template_version INTEGER NOT NULL CHECK (base_template_version > 0),
45
+ event_types_json TEXT NOT NULL,
46
+ condition_json TEXT,
47
+ aggregation TEXT NOT NULL CHECK (aggregation IN ('subject', 'project', 'workspace')),
48
+ debounce_seconds INTEGER NOT NULL CHECK (debounce_seconds >= 0),
49
+ max_window_seconds INTEGER NOT NULL CHECK (max_window_seconds > 0),
50
+ context_provider_ids_json TEXT NOT NULL,
51
+ min_confidence REAL NOT NULL CHECK (min_confidence >= 0 AND min_confidence <= 1),
52
+ min_value_score REAL NOT NULL CHECK (min_value_score >= 0 AND min_value_score <= 1),
53
+ cooldown_seconds INTEGER NOT NULL CHECK (cooldown_seconds >= 0),
54
+ max_runs_per_day INTEGER NOT NULL CHECK (max_runs_per_day > 0),
55
+ created_at TEXT NOT NULL,
56
+ PRIMARY KEY (scenario_key, version),
57
+ FOREIGN KEY (scenario_key) REFERENCES proactive_scenarios(scenario_key) ON DELETE CASCADE
58
+ );
59
+
60
+ INSERT INTO proactive_scenario_versions (
61
+ scenario_key, version, title, description, base_prompt, base_template_version,
62
+ event_types_json, condition_json, aggregation, debounce_seconds,
63
+ max_window_seconds, context_provider_ids_json, min_confidence,
64
+ min_value_score, cooldown_seconds, max_runs_per_day, created_at
65
+ )
66
+ SELECT
67
+ scenario_key, version, title, description, base_prompt, base_template_version,
68
+ event_types_json, condition_json, aggregation, debounce_seconds,
69
+ max_window_seconds, context_provider_ids_json, min_confidence,
70
+ min_value_score, cooldown_seconds, max_runs_per_day, updated_at
71
+ FROM proactive_scenarios;
72
+
73
+ CREATE TRIGGER proactive_scenario_version_after_insert
74
+ AFTER INSERT ON proactive_scenarios
75
+ BEGIN
76
+ INSERT INTO proactive_scenario_versions (
77
+ scenario_key, version, title, description, base_prompt, base_template_version,
78
+ event_types_json, condition_json, aggregation, debounce_seconds,
79
+ max_window_seconds, context_provider_ids_json, min_confidence,
80
+ min_value_score, cooldown_seconds, max_runs_per_day, created_at
81
+ ) VALUES (
82
+ NEW.scenario_key, NEW.version, NEW.title, NEW.description, NEW.base_prompt,
83
+ NEW.base_template_version, NEW.event_types_json, NEW.condition_json,
84
+ NEW.aggregation, NEW.debounce_seconds, NEW.max_window_seconds,
85
+ NEW.context_provider_ids_json, NEW.min_confidence, NEW.min_value_score,
86
+ NEW.cooldown_seconds, NEW.max_runs_per_day, NEW.updated_at
87
+ );
88
+ END;
89
+
90
+ CREATE TRIGGER proactive_scenario_contract_update_guard
91
+ BEFORE UPDATE ON proactive_scenarios
92
+ WHEN NEW.version = OLD.version AND (
93
+ NEW.title IS NOT OLD.title
94
+ OR NEW.description IS NOT OLD.description
95
+ OR NEW.base_prompt IS NOT OLD.base_prompt
96
+ OR NEW.base_template_version IS NOT OLD.base_template_version
97
+ OR NEW.event_types_json IS NOT OLD.event_types_json
98
+ OR NEW.condition_json IS NOT OLD.condition_json
99
+ OR NEW.aggregation IS NOT OLD.aggregation
100
+ OR NEW.debounce_seconds IS NOT OLD.debounce_seconds
101
+ OR NEW.max_window_seconds IS NOT OLD.max_window_seconds
102
+ OR NEW.context_provider_ids_json IS NOT OLD.context_provider_ids_json
103
+ OR NEW.min_confidence IS NOT OLD.min_confidence
104
+ OR NEW.min_value_score IS NOT OLD.min_value_score
105
+ OR NEW.cooldown_seconds IS NOT OLD.cooldown_seconds
106
+ OR NEW.max_runs_per_day IS NOT OLD.max_runs_per_day
107
+ )
108
+ BEGIN
109
+ SELECT RAISE(ABORT, 'proactive scenario contract changes require a new version');
110
+ END;
111
+
112
+ CREATE TRIGGER proactive_scenario_version_after_update
113
+ AFTER UPDATE OF version ON proactive_scenarios
114
+ WHEN NEW.version <> OLD.version
115
+ BEGIN
116
+ INSERT INTO proactive_scenario_versions (
117
+ scenario_key, version, title, description, base_prompt, base_template_version,
118
+ event_types_json, condition_json, aggregation, debounce_seconds,
119
+ max_window_seconds, context_provider_ids_json, min_confidence,
120
+ min_value_score, cooldown_seconds, max_runs_per_day, created_at
121
+ ) VALUES (
122
+ NEW.scenario_key, NEW.version, NEW.title, NEW.description, NEW.base_prompt,
123
+ NEW.base_template_version, NEW.event_types_json, NEW.condition_json,
124
+ NEW.aggregation, NEW.debounce_seconds, NEW.max_window_seconds,
125
+ NEW.context_provider_ids_json, NEW.min_confidence, NEW.min_value_score,
126
+ NEW.cooldown_seconds, NEW.max_runs_per_day, NEW.updated_at
127
+ );
128
+ END;
129
+
130
+ CREATE TRIGGER proactive_scenario_versions_immutable_update
131
+ BEFORE UPDATE ON proactive_scenario_versions
132
+ BEGIN
133
+ SELECT RAISE(ABORT, 'proactive scenario versions are immutable');
134
+ END;
135
+
136
+ CREATE TRIGGER proactive_scenario_versions_immutable_delete
137
+ BEFORE DELETE ON proactive_scenario_versions
138
+ BEGIN
139
+ SELECT RAISE(ABORT, 'proactive scenario versions are immutable');
140
+ END;
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 150;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 152;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -12,7 +12,7 @@ const log = createLogger("Sqlite:Migrations");
12
12
  /** Baseline schema version applied from schema.sql on first open. */
13
13
  const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
14
14
  /** Latest schema version this release supports (increment when adding migrations). */
15
- const XOPC_DB_SCHEMA_VERSION = 150;
15
+ const XOPC_DB_SCHEMA_VERSION = 152;
16
16
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
17
17
  function backupBeforeTaskCutover(db, databasePath) {
18
18
  db.exec("PRAGMA wal_checkpoint(FULL)");
@@ -57,7 +57,7 @@ function applySingleMigration(db, migration) {
57
57
  * Each step runs in its own transaction and updates schema_meta on success.
58
58
  */
59
59
  function applyPendingMigrations(db, options = {}) {
60
- const targetVersion = options.targetVersion ?? 150;
60
+ const targetVersion = options.targetVersion ?? 152;
61
61
  let currentVersion = readSchemaVersion(db);
62
62
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
63
63
  if (currentVersion >= targetVersion) return currentVersion;
@@ -94,7 +94,7 @@ function applyPendingMigrations(db, options = {}) {
94
94
  }
95
95
  /** Inspect schema version without mutating the database. */
96
96
  function inspectSchemaMigrationStatus(db, options = {}) {
97
- const appVersion = options.targetVersion ?? 150;
97
+ const appVersion = options.targetVersion ?? 152;
98
98
  const dbVersion = readSchemaVersion(db);
99
99
  if (dbVersion > appVersion) return {
100
100
  dbVersion,
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
19
19
  export const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
20
20
 
21
21
  /** Latest schema version this release supports (increment when adding migrations). */
22
- export const XOPC_DB_SCHEMA_VERSION = 150;
22
+ export const XOPC_DB_SCHEMA_VERSION = 152;
23
23
 
24
24
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
25
25
 
@@ -1,7 +1,7 @@
1
- import "../../session/types.js";
2
- import { buildDefaultSessionMetadata } from "./session-metadata.js";
3
1
  import { isTranscriptContextEntry } from "../../session/session-context-for-llm.js";
2
+ import "../../session/types.js";
4
3
  import { init_agent_session_key, resolveAgentIdFromSessionKey } from "../../routing/agent-session-key.js";
4
+ import { buildDefaultSessionMetadata } from "./session-metadata.js";
5
5
  //#region src/storage/sqlite/row-mappers.ts
6
6
  init_agent_session_key();
7
7
  function parseJson(raw) {
@@ -32,7 +32,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
32
32
  currentVersion = 11;
33
33
  }
34
34
  applyPendingMigrations(db, {
35
- targetVersion: 150,
35
+ targetVersion: 152,
36
36
  databasePath: options.databasePath
37
37
  });
38
38
  }
@@ -1,5 +1,5 @@
1
1
  import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
- import { readCurrentSessionId } from "./session-repository.js";
2
+ import { readCurrentSessionId } from "./session-instance-repository.js";
3
3
  import { turnOriginSchema } from "../../../packages/endpoint-tools-protocol/src/index.js";
4
4
  //#region src/storage/sqlite/session-input-repository.ts
5
5
  function mapInput(row) {
@@ -0,0 +1,2 @@
1
+ import type { DatabaseSync } from 'node:sqlite';
2
+ export declare function readCurrentSessionId(db: DatabaseSync, sessionKey: string): string | null;
@@ -0,0 +1,6 @@
1
+ //#region src/storage/sqlite/session-instance-repository.ts
2
+ function readCurrentSessionId(db, sessionKey) {
3
+ return db.prepare(`SELECT session_id FROM sessions WHERE session_key = ?`).get(sessionKey)?.session_id ?? null;
4
+ }
5
+ //#endregion
6
+ export { readCurrentSessionId };
@@ -4,7 +4,7 @@ import { type SessionMetadataSeed } from './session-metadata.js';
4
4
  import { buildGlobalSessionStats } from './row-mappers.js';
5
5
  export declare function ensureSessionInTransaction(db: DatabaseSync, sessionKey: string, cwd: string, seed?: SessionMetadataSeed): SessionMetadata;
6
6
  export declare function ensureSessionRecord(sessionKey: string, cwd: string, seed?: SessionMetadataSeed): SessionMetadata;
7
- export declare function readCurrentSessionId(db: DatabaseSync, sessionKey: string): string | null;
7
+ export { readCurrentSessionId } from './session-instance-repository.js';
8
8
  export declare function getSessionMetadata(sessionKey: string): SessionMetadata | null;
9
9
  export declare function getCurrentSessionId(sessionKey: string): string | null;
10
10
  export declare function listSessionMetadata(query?: SessionListQuery): PaginatedResult<SessionMetadata>;
@@ -1,9 +1,10 @@
1
1
  import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
+ import { readCurrentSessionId } from "./session-instance-repository.js";
3
+ import { buildDefaultSessionMetadata } from "./session-metadata.js";
4
+ import { buildGlobalSessionStats, metadataToSessionInsert, sessionRowToMetadata } from "./row-mappers.js";
2
5
  import { cancelConnectionObjective } from "./connection-wait-repository.js";
3
6
  import { notifyUserContextChange } from "../../user-context/changes.js";
4
7
  import { validateSessionId } from "../../session/session-id.js";
5
- import { buildDefaultSessionMetadata } from "./session-metadata.js";
6
- import { buildGlobalSessionStats, metadataToSessionInsert, sessionRowToMetadata } from "./row-mappers.js";
7
8
  import { buildFts5SearchQuery } from "./fts.js";
8
9
  import { randomUUID } from "node:crypto";
9
10
  //#region src/storage/sqlite/session-repository.ts
@@ -64,9 +65,6 @@ function ensureSessionInTransaction(db, sessionKey, cwd, seed) {
64
65
  function ensureSessionRecord(sessionKey, cwd, seed) {
65
66
  return runSqliteWriteTransaction((db) => ensureSessionInTransaction(db, sessionKey, cwd, seed));
66
67
  }
67
- function readCurrentSessionId(db, sessionKey) {
68
- return db.prepare(`SELECT session_id FROM sessions WHERE session_key = ?`).get(sessionKey)?.session_id ?? null;
69
- }
70
68
  function getSessionMetadata(sessionKey) {
71
69
  const row = readSessionRow(getSqliteDatabase(), sessionKey);
72
70
  if (!row) return null;
@@ -1,8 +1,9 @@
1
1
  import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
+ import { readCurrentSessionId } from "./session-instance-repository.js";
2
3
  import { buildSessionContextForLlm, isRuntimeOnlyTranscriptMessage } from "../../session/session-context-for-llm.js";
3
4
  import { classifyStoredRow, estimateTokensFromMessages, extractFtsContent, transcriptEntryRowToStoredRow } from "./row-mappers.js";
4
5
  import { escapeFts5Query } from "./fts.js";
5
- import { getCurrentSessionId, readCurrentSessionId } from "./session-repository.js";
6
+ import { getCurrentSessionId } from "./session-repository.js";
6
7
  import { randomUUID } from "node:crypto";
7
8
  //#region src/storage/sqlite/transcript-repository.ts
8
9
  function nextSeq(db, sessionId) {
@@ -334,7 +334,7 @@ var HomeQueryService = class {
334
334
  kind: "agent_judgment",
335
335
  title: item.insight.title,
336
336
  detail: item.insight.summary,
337
- reason: item.insight.disposition === "request_approval" ? "approval_required" : "decision_needed",
337
+ reason: item.insight.disposition === "request_approval" ? "approval_required" : item.insight.attentionKind === "decision" ? "decision_needed" : "insight_available",
338
338
  urgency: item.insight.urgency === "critical" || item.insight.urgency === "high" ? "now" : "soon",
339
339
  href: `/?judgment=${encodeURIComponent(item.id)}`,
340
340
  updatedAt: Date.parse(item.updatedAt),
@@ -346,6 +346,8 @@ var HomeQueryService = class {
346
346
  recommendation: item.insight.recommendation,
347
347
  confidence: item.insight.confidence,
348
348
  valueScore: item.insight.valueScore,
349
+ evidenceIds: item.insight.evidenceIds,
350
+ attentionKind: item.insight.attentionKind,
349
351
  disposition: item.insight.disposition,
350
352
  dispositionReason: item.insight.dispositionReason,
351
353
  ...item.insight.actionStatus ? { actionStatus: item.insight.actionStatus } : {},
@@ -398,19 +400,39 @@ var HomeQueryService = class {
398
400
  });
399
401
  const decisions = governed.decisions;
400
402
  const attention = governed.attention;
401
- return {
402
- ...buildHomeWorkbench({
403
- locale,
404
- decisions,
405
- attention,
406
- activeWorkflowRuns,
407
- runningTasks: tasks.filter((task) => {
408
- const state = this.#projector.project(task).operationalState;
409
- return state === "queued" || state === "running" || state === "verifying";
410
- }),
411
- scheduled: upcomingAutomations,
412
- nowMs
403
+ const interactiveDecisions = decisions.filter((item) => item.kind !== "agent_judgment" || item.judgment?.attentionKind === "decision");
404
+ const proactiveInformation = decisions.filter((item) => item.kind === "agent_judgment" && item.judgment?.attentionKind !== "decision");
405
+ const workbench = buildHomeWorkbench({
406
+ locale,
407
+ decisions: interactiveDecisions,
408
+ attention,
409
+ activeWorkflowRuns,
410
+ runningTasks: tasks.filter((task) => {
411
+ const state = this.#projector.project(task).operationalState;
412
+ return state === "queued" || state === "running" || state === "verifying";
413
413
  }),
414
+ scheduled: upcomingAutomations,
415
+ nowMs
416
+ });
417
+ const informationItems = proactiveInformation.map((item) => ({
418
+ id: item.id,
419
+ kind: "insight",
420
+ title: item.title,
421
+ summary: item.detail ?? item.judgment.recommendation,
422
+ recommendation: item.judgment.recommendation,
423
+ updatedAt: item.updatedAt,
424
+ openAction: {
425
+ type: "review_judgment",
426
+ label: locale?.startsWith("zh") ? "查看" : "Review",
427
+ itemId: item.judgment.inboxItemId
428
+ },
429
+ secondaryActions: []
430
+ }));
431
+ const background = [...informationItems, ...workbench.background].sort((left, right) => right.updatedAt - left.updatedAt).slice(0, 3);
432
+ return {
433
+ ...workbench,
434
+ background,
435
+ backgroundCount: workbench.backgroundCount + informationItems.length,
414
436
  runningConversations,
415
437
  decisions,
416
438
  attentionPolicy: governed.policy