@xopcai/xopc 0.0.391 → 0.0.393

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 (633) hide show
  1. package/dist/browser-ext/dist/sidepanel.js +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CzS0TUv9.js → agent-avatar-dicebear-1AF2KGju.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CPJr7NRR.js +1 -0
  6. package/dist/gateway/static/root/assets/agent-plugin-dialog-cjJXJj_3.js +1 -0
  7. package/dist/gateway/static/root/assets/agents-DW3TlnIg.js +77 -0
  8. package/dist/gateway/static/root/assets/{agents-admin-api-Bb3Kvz3X.js → agents-admin-api-B5aykqg_.js} +1 -1
  9. package/dist/gateway/static/root/assets/app-link-BV_eGr7l.js +1 -0
  10. package/dist/gateway/static/root/assets/app-management-settings-panel-B_MFhXXU.js +1 -0
  11. package/dist/gateway/static/root/assets/appearance-settings-TYGidVnd.js +1 -0
  12. package/dist/gateway/static/root/assets/apps-page-DOkyvOF0.js +1 -0
  13. package/dist/gateway/static/root/assets/{archive-plugin-DFnHPNie.js → archive-plugin-BrFfEp0u.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-CnBLPVNh.js → automations-page-B7OofUPF.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-DIod-bfm.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-BQC0Tzoi.js → binary-plugins-BfAWnYG8.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-DSh5019z.js → block-editor-_Y-QwZ-3.js} +5 -5
  18. package/dist/gateway/static/root/assets/browser-automation-inputs-DH9QHI9m.js +1 -0
  19. package/dist/gateway/static/root/assets/browser-automations-page-B_SnD9B0.js +3 -0
  20. package/dist/gateway/static/root/assets/browser-settings-page-BPlqYpMM.js +3 -0
  21. package/dist/gateway/static/root/assets/capabilities-page-BtzZvMIK.js +2 -0
  22. package/dist/gateway/static/root/assets/capabilities-pt2M56-E.js +1 -0
  23. package/dist/gateway/static/root/assets/capabilities-settings-panel-WzoG3oBb.js +8 -0
  24. package/dist/gateway/static/root/assets/capability-header-actions-CFVx3iaZ.js +1 -0
  25. package/dist/gateway/static/root/assets/channels-BXA55GY2.js +1 -0
  26. package/dist/gateway/static/root/assets/chat-terminal-dock-D3GuiG3N.js +36 -0
  27. package/dist/gateway/static/root/assets/{chunk-KS7C4IRE--EKdQGRF.js → chunk-KS7C4IRE-B2HK1psj.js} +2 -2
  28. package/dist/gateway/static/root/assets/computer-settings-page-CIbHDlp8.js +1 -0
  29. package/dist/gateway/static/root/assets/connector-service-page-CDyCHkpK.js +1 -0
  30. package/dist/gateway/static/root/assets/connectors-page-DA2b6cJu.js +1 -0
  31. package/dist/gateway/static/root/assets/date-picker-C424c_g9.js +1 -0
  32. package/dist/gateway/static/root/assets/dependency-picker-BVJh9sYc.js +1 -0
  33. package/dist/gateway/static/root/assets/desktop-pet-Q52A8vjp.js +1 -0
  34. package/dist/gateway/static/root/assets/desktop-pet-settings-CZr1CXxu.js +1 -0
  35. package/dist/gateway/static/root/assets/desktop-pet-sprite-Bd-aOI7N.js +30 -0
  36. package/dist/gateway/static/root/assets/desktop-pet-sprite-BuB0g8zv.css +1 -0
  37. package/dist/gateway/static/root/assets/device-pairing-wizard-D_WWTsze.js +1 -0
  38. package/dist/gateway/static/root/assets/directory-picker-path-field-C6cUgrvg.js +1 -0
  39. package/dist/gateway/static/root/assets/echarts-runtime-tcHc9TOS.js +18 -0
  40. package/dist/gateway/static/root/assets/extension-debug-page-DyyfC4gA.js +1 -0
  41. package/dist/gateway/static/root/assets/extension-page-Dho9o3ZZ.js +1 -0
  42. package/dist/gateway/static/root/assets/extension-settings-page-CdnIGyCH.js +1 -0
  43. package/dist/gateway/static/root/assets/{gateway-config-swr-Dv_A5FMu.js → gateway-config-swr-BEePO3Wl.js} +1 -1
  44. package/dist/gateway/static/root/assets/{gateway-realtime-DghCGfY_.js → gateway-realtime-Dng_VOvI.js} +1 -1
  45. package/dist/gateway/static/root/assets/gateway-realtime-store-DtlBf7oH.js +1 -0
  46. package/dist/gateway/static/root/assets/gateway-settings-D0KSQRNZ.js +1 -0
  47. package/dist/gateway/static/root/assets/{gateway-startup-retry-CkTVSESs.js → gateway-startup-retry-CDCiy7Cd.js} +1 -1
  48. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-DV2wNqBn.js → highlighted-body-KQOG7T2V-BNpj_mIM.js} +1 -1
  49. package/dist/gateway/static/root/assets/home-page-CH_A0W29.js +2 -0
  50. package/dist/gateway/static/root/assets/image-generation-api-DwkO2y46.js +1 -0
  51. package/dist/gateway/static/root/assets/imports-page-BrYvomnU.js +1 -0
  52. package/dist/gateway/static/root/assets/index-CKdOZoVu.js +260 -0
  53. package/dist/gateway/static/root/assets/index-Rxjt-jc3.css +1 -0
  54. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BveDYfYk.js +1 -0
  55. package/dist/gateway/static/root/assets/local-app-workbench-page-CcIi1BhT.js +1 -0
  56. package/dist/gateway/static/root/assets/local-apps-page-B1a69mlV.js +1 -0
  57. package/dist/gateway/static/root/assets/local-session-drafts-CYEDUPH7.js +1 -0
  58. package/dist/gateway/static/root/assets/{locale-store-BpK9AiDq.js → locale-store-CE7L6MlS.js} +1 -1
  59. package/dist/gateway/static/root/assets/logs-page-Us1jv3C4.js +2 -0
  60. package/dist/gateway/static/root/assets/management-settings-C9RAM7-s.js +1 -0
  61. package/dist/gateway/static/root/assets/markdown-view-PrKvVpRh.js +324 -0
  62. package/dist/gateway/static/root/assets/{media-plugins-oSChWbcP.js → media-plugins-CR1fp6IL.js} +1 -1
  63. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DQdcaMiu.js +1 -0
  64. package/dist/gateway/static/root/assets/messages-CaeL_miw.js +3 -0
  65. package/dist/gateway/static/root/assets/note-detail-panel-Q4yRx9iZ.js +5 -0
  66. package/dist/gateway/static/root/assets/notes-page-C9qu16IN.js +8 -0
  67. package/dist/gateway/static/root/assets/page-context-capture-button-Cn_WK68Y.js +1 -0
  68. package/dist/gateway/static/root/assets/personal-page-DrP6hEcg.js +1 -0
  69. package/dist/gateway/static/root/assets/preview-open-alternatives-3NbiWGRG.js +1 -0
  70. package/dist/gateway/static/root/assets/product-delivery-DwmnNJvk.js +1 -0
  71. package/dist/gateway/static/root/assets/product-open-page-KKE5-V8k.js +1 -0
  72. package/dist/gateway/static/root/assets/product-preview-content-BM0oqNxi.js +1 -0
  73. package/dist/gateway/static/root/assets/project-detail-page-CPZrwf8n.js +1 -0
  74. package/dist/gateway/static/root/assets/projects-page-Besfx_07.js +1 -0
  75. package/dist/gateway/static/root/assets/{registry-api-Dsa2LvRt.js → registry-api-BO2Ck3aA.js} +1 -1
  76. package/dist/gateway/static/root/assets/remote-access-hub-CTDghL5L.js +1 -0
  77. package/dist/gateway/static/root/assets/{runtime-tools-api-C2Uw89eY.js → runtime-tools-api-B1sb8nlw.js} +1 -1
  78. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-W0X_Fy7b.js +1 -0
  79. package/dist/gateway/static/root/assets/schema-form-DNM2Zdyr.js +1 -0
  80. package/dist/gateway/static/root/assets/{session-api-ga-SUOq_.js → session-api-CaAUJvu1.js} +1 -1
  81. package/dist/gateway/static/root/assets/session-manager-DoFTlgNz.js +16 -0
  82. package/dist/gateway/static/root/assets/sessions-page-Dxtablvd.js +1 -0
  83. package/dist/gateway/static/root/assets/settings-advanced-gate-C7zklouD.js +1 -0
  84. package/dist/gateway/static/root/assets/settings-form-section-DCSHPFAN.js +1 -0
  85. package/dist/gateway/static/root/assets/{settings-page-DPCgrICd.js → settings-page-B18UbbaJ.js} +1 -1
  86. package/dist/gateway/static/root/assets/setup-status-panel-JoSfluza.js +1 -0
  87. package/dist/gateway/static/root/assets/share-preview-page-BLnS3hoH.js +2 -0
  88. package/dist/gateway/static/root/assets/shares-settings-DcIuPJK3.js +1 -0
  89. package/dist/gateway/static/root/assets/skill-api-CcYGkRPL.js +1 -0
  90. package/dist/gateway/static/root/assets/skill-reload-api-PnUZjoPK.js +1 -0
  91. package/dist/gateway/static/root/assets/skills-page-D3JAw62U.js +2 -0
  92. package/dist/gateway/static/root/assets/style-BQqU-1pP.js +7 -0
  93. package/dist/gateway/static/root/assets/system-settings-panel-C974myUM.js +1 -0
  94. package/dist/gateway/static/root/assets/tab-completion-input-CxtEp0aP.js +1 -0
  95. package/dist/gateway/static/root/assets/task-detail-page-CiljFekC.js +2 -0
  96. package/dist/gateway/static/root/assets/{task-expandable-content-DAZGz5YC.js → task-expandable-content-DTEVoNrM.js} +1 -1
  97. package/dist/gateway/static/root/assets/tracing-settings-page-DEE75MUn.js +1 -0
  98. package/dist/gateway/static/root/assets/tunnel-api-DWyI3uA3.js +1 -0
  99. package/dist/gateway/static/root/assets/usage-page-DJYvbxk7.js +1 -0
  100. package/dist/gateway/static/root/assets/use-autosave-CY0YuljR.js +1 -0
  101. package/dist/gateway/static/root/assets/user-model-page-eHZJD6Fw.js +2 -0
  102. package/dist/gateway/static/root/assets/voice-api-key-field-BNG4ixJE.js +1 -0
  103. package/dist/gateway/static/root/assets/{voice-config-api-Dl39b27p.js → voice-config-api-D0Wscn9W.js} +1 -1
  104. package/dist/gateway/static/root/assets/work-discovery-overlay-CohIoAre.js +1 -0
  105. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BXI8eyYh.js +3 -0
  106. package/dist/gateway/static/root/assets/workflows-page-CVti0u-l.js +6 -0
  107. package/dist/gateway/static/root/assets/xopc-cloud-account-card-C_COnY_B.js +1 -0
  108. package/dist/gateway/static/root/index.html +22 -72
  109. package/dist/gateway/static/root/notification-sw.js +0 -15
  110. package/dist/package.js +1 -1
  111. package/dist/packages/computer-control-contract/src/index.js +8 -0
  112. package/dist/packages/gateway-contract/src/app-context.js +0 -1
  113. package/dist/packages/gateway-contract/src/capabilities.js +2 -249
  114. package/dist/packages/gateway-contract/src/home.js +0 -5
  115. package/dist/packages/gateway-contract/src/index.js +0 -4
  116. package/dist/packages/gateway-contract/src/notifications.js +0 -11
  117. package/dist/packages/gateway-contract/src/product-delivery.js +0 -2
  118. package/dist/src/agent/agent-instance-gateway.d.ts +2 -0
  119. package/dist/src/agent/agent-manager.d.ts +1 -3
  120. package/dist/src/agent/agent-manager.js +8 -18
  121. package/dist/src/agent/child-agent-factory.d.ts +2 -1
  122. package/dist/src/agent/child-agent-factory.js +2 -1
  123. package/dist/src/agent/coding/projectEvidence.d.ts +9 -0
  124. package/dist/src/agent/coding/projectEvidence.js +177 -0
  125. package/dist/src/agent/coding/repository-instructions.d.ts +8 -1
  126. package/dist/src/agent/coding/repository-instructions.js +9 -4
  127. package/dist/src/agent/coding/run-verification.d.ts +17 -2
  128. package/dist/src/agent/coding/run-verification.js +82 -12
  129. package/dist/src/agent/coding/workspace-revision.js +1 -1
  130. package/dist/src/agent/embedded/codemode-extension.js +1 -1
  131. package/dist/src/agent/embedded/execution-context.d.ts +1 -0
  132. package/dist/src/agent/embedded/execution-context.js +4 -1
  133. package/dist/src/agent/embedded/external-tool-discovery.js +1 -1
  134. package/dist/src/agent/embedded/run-for-session.js +1 -0
  135. package/dist/src/agent/embedded/run-turn.js +41 -5
  136. package/dist/src/agent/embedded/session-runner.js +1 -1
  137. package/dist/src/agent/embedded/session-tool-result-guard.js +5 -0
  138. package/dist/src/agent/embedded/types.d.ts +2 -0
  139. package/dist/src/agent/embedded/xopc-tools-bridge.js +2 -1
  140. package/dist/src/agent/external-tools/extension-provider.js +1 -1
  141. package/dist/src/agent/external-tools/gateway-tools.js +1 -1
  142. package/dist/src/agent/external-tools/memory-provider.js +1 -1
  143. package/dist/src/agent/independent-execution.d.ts +2 -0
  144. package/dist/src/agent/independent-execution.js +12 -0
  145. package/dist/src/agent/mcp/connection-drafts.js +15 -10
  146. package/dist/src/agent/memory/compaction.js +1 -1
  147. package/dist/src/agent/orchestration/delegation-scope.d.ts +1 -0
  148. package/dist/src/agent/orchestration/delegation-scope.js +4 -1
  149. package/dist/src/agent/orchestration/loop-guard.js +6 -2
  150. package/dist/src/agent/prompt/sections/agent-identity.js +3 -2
  151. package/dist/src/agent/prompt/sections/behavior.d.ts +3 -2
  152. package/dist/src/agent/prompt/sections/behavior.js +35 -25
  153. package/dist/src/agent/prompt/sections/memory-skills.d.ts +1 -1
  154. package/dist/src/agent/prompt/sections/memory-skills.js +10 -11
  155. package/dist/src/agent/prompt/sections/messaging-runtime.d.ts +3 -2
  156. package/dist/src/agent/prompt/sections/messaging-runtime.js +21 -24
  157. package/dist/src/agent/prompt/sections/response-language.js +7 -5
  158. package/dist/src/agent/prompt/sections/tooling.js +11 -10
  159. package/dist/src/agent/prompt/service-prompt-builder.js +3 -1
  160. package/dist/src/agent/prompt/system-prompt-params.d.ts +2 -1
  161. package/dist/src/agent/prompt/system-prompt-params.js +2 -0
  162. package/dist/src/agent/prompt/system-prompt.d.ts +2 -1
  163. package/dist/src/agent/prompt/system-prompt.js +21 -18
  164. package/dist/src/agent/prompt/types.d.ts +2 -0
  165. package/dist/src/agent/service.js +1 -1
  166. package/dist/src/agent/service.types.d.ts +0 -2
  167. package/dist/src/agent/skills/format-skills-prompt.js +5 -2
  168. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  169. package/dist/src/agent/tool-manuals/computer.js +9 -1
  170. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  171. package/dist/src/agent/tool-manuals/xopc-use.js +6 -48
  172. package/dist/src/agent/tools/computer-use-tool.js +17 -3
  173. package/dist/src/agent/tools/dataBatch.d.ts +1 -0
  174. package/dist/src/agent/tools/dataBatch.js +4 -1
  175. package/dist/src/agent/tools/delegate-tool.d.ts +1 -0
  176. package/dist/src/agent/tools/delegate-tool.js +1 -0
  177. package/dist/src/agent/tools/error-tracker.js +4 -2
  178. package/dist/src/agent/tools/exec-command.js +4 -3
  179. package/dist/src/agent/tools/factory.d.ts +1 -2
  180. package/dist/src/agent/tools/factory.js +20 -22
  181. package/dist/src/agent/tools/{delegation-parent-policy.d.ts → noninteractive-tool-policy.d.ts} +1 -1
  182. package/dist/src/agent/tools/{delegation-parent-policy.js → noninteractive-tool-policy.js} +4 -4
  183. package/dist/src/agent/tools/personal-task-tool.js +1 -1
  184. package/dist/src/agent/tools/publish-artifacts.js +1 -1
  185. package/dist/src/agent/tools/search/cache.d.ts +3 -1
  186. package/dist/src/agent/tools/search/cache.js +4 -1
  187. package/dist/src/agent/tools/search/providers/deepseek-protocol.d.ts +9 -0
  188. package/dist/src/agent/tools/search/providers/deepseek-protocol.js +84 -0
  189. package/dist/src/agent/tools/search/providers/deepseek.d.ts +9 -0
  190. package/dist/src/agent/tools/search/providers/deepseek.js +55 -0
  191. package/dist/src/agent/tools/search/providers/xopc-cloud.d.ts +2 -1
  192. package/dist/src/agent/tools/search/providers/xopc-cloud.js +36 -1
  193. package/dist/src/agent/tools/search/registry.d.ts +1 -0
  194. package/dist/src/agent/tools/search/registry.js +32 -6
  195. package/dist/src/agent/tools/search/request-gate.d.ts +13 -0
  196. package/dist/src/agent/tools/search/request-gate.js +41 -0
  197. package/dist/src/agent/tools/search/resolve-config.js +1 -1
  198. package/dist/src/agent/tools/search/search-info.d.ts +8 -0
  199. package/dist/src/agent/tools/search/search-info.js +34 -0
  200. package/dist/src/agent/tools/search/types.d.ts +19 -1
  201. package/dist/src/agent/tools/toolExposure.d.ts +3 -0
  202. package/dist/src/agent/tools/toolExposure.js +25 -0
  203. package/dist/src/agent/tools/web.js +8 -1
  204. package/dist/src/agent/tools/xopc-use-tool.d.ts +2 -4
  205. package/dist/src/agent/tools/xopc-use-tool.js +11 -135
  206. package/dist/src/agent/workflow/builtins/index.js +98 -0
  207. package/dist/src/agent/workflow/subagent-runner.d.ts +1 -0
  208. package/dist/src/agent/workflow/subagent-runner.js +3 -3
  209. package/dist/src/agent/workflow/types.d.ts +3 -2
  210. package/dist/src/agent/workflow/workflow-child-tools.js +13 -8
  211. package/dist/src/agent-catalog/migrations/legacy-config-cutover.js +1 -2
  212. package/dist/src/automations/domain/validation.d.ts +8 -8
  213. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
  214. package/dist/src/automations/events/event-catalog.js +0 -18
  215. package/dist/src/backup/archive.js +1 -2
  216. package/dist/src/capabilities/runtime/app-context.js +2 -6
  217. package/dist/src/capabilities/runtime/product.d.ts +1 -3
  218. package/dist/src/capabilities/runtime/product.js +0 -6
  219. package/dist/src/cli/command-manifest.js +1 -1
  220. package/dist/src/cli/commands/search.d.ts +2 -2
  221. package/dist/src/cli/commands/search.js +8 -6
  222. package/dist/src/computer/config.d.ts +1 -0
  223. package/dist/src/computer/config.js +1 -0
  224. package/dist/src/computer/diagnostics.d.ts +223 -0
  225. package/dist/src/computer/diagnostics.js +360 -0
  226. package/dist/src/computer/errors.d.ts +1 -1
  227. package/dist/src/computer/errors.js +8 -1
  228. package/dist/src/computer/evaluation-comparison.d.ts +125 -0
  229. package/dist/src/computer/evaluation-comparison.js +65 -0
  230. package/dist/src/computer/evaluation-harness.d.ts +2 -1
  231. package/dist/src/computer/evaluation-harness.js +59 -8
  232. package/dist/src/computer/evaluation.d.ts +102 -7
  233. package/dist/src/computer/evaluation.js +64 -15
  234. package/dist/src/computer/flows.d.ts +62 -0
  235. package/dist/src/computer/flows.js +158 -0
  236. package/dist/src/computer/model-adapter.d.ts +11 -0
  237. package/dist/src/computer/model-adapter.js +156 -11
  238. package/dist/src/computer/model-policy.d.ts +1 -1
  239. package/dist/src/computer/model-policy.js +13 -6
  240. package/dist/src/computer/release-gate.d.ts +11 -0
  241. package/dist/src/computer/runtime.d.ts +27 -2
  242. package/dist/src/computer/runtime.js +261 -44
  243. package/dist/src/computer/semantic-actions.d.ts +3 -0
  244. package/dist/src/computer/semantic-actions.js +29 -0
  245. package/dist/src/config/index.js +2 -2
  246. package/dist/src/config/models-json.d.ts +14 -8
  247. package/dist/src/config/models-json.js +2 -0
  248. package/dist/src/config/outbound-proxy.d.ts +11 -0
  249. package/dist/src/config/outbound-proxy.js +30 -0
  250. package/dist/src/config/rules.js +5 -0
  251. package/dist/src/config/schema.d.ts +25 -10
  252. package/dist/src/config/schema.js +21 -10
  253. package/dist/src/connectors/cli/authorization.d.ts +1 -1
  254. package/dist/src/connectors/cli/store.d.ts +1 -1
  255. package/dist/src/endpoint-tools/invocation-service.js +5 -0
  256. package/dist/src/gateway/config-tools-web.js +15 -4
  257. package/dist/src/gateway/gateway-workflow-host.types.d.ts +3 -0
  258. package/dist/src/gateway/hono/app.d.ts +0 -2
  259. package/dist/src/gateway/hono/app.js +1 -2
  260. package/dist/src/gateway/hono/lib/config-payload.d.ts +6 -3
  261. package/dist/src/gateway/hono/lib/config-payload.js +5 -1
  262. package/dist/src/gateway/hono/routes/capability-operations.js +0 -7
  263. package/dist/src/gateway/hono/routes/config-patch/gateway.js +7 -0
  264. package/dist/src/gateway/hono/routes/deps.d.ts +0 -2
  265. package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -8
  266. package/dist/src/gateway/hono/routes/models.js +5 -2
  267. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +2 -2
  268. package/dist/src/gateway/service/config-coordinator.d.ts +8 -5
  269. package/dist/src/gateway/service/session-input-coordinator.js +1 -1
  270. package/dist/src/gateway/service.d.ts +0 -3
  271. package/dist/src/gateway/service.js +10 -44
  272. package/dist/src/home-intelligence/generator.js +1 -1
  273. package/dist/src/home-intelligence/policy.js +0 -5
  274. package/dist/src/home-intelligence/repository.d.ts +1 -1
  275. package/dist/src/infra/domain-outbox-dispatcher.js +1 -1
  276. package/dist/src/infra/http-proxy-env.d.ts +3 -0
  277. package/dist/src/infra/http-proxy-env.js +22 -2
  278. package/dist/src/notifications/service.d.ts +2 -18
  279. package/dist/src/notifications/service.js +8 -39
  280. package/dist/src/notifications/store.d.ts +0 -1
  281. package/dist/src/notifications/store.js +1 -4
  282. package/dist/src/personal-agent/communication.d.ts +2 -1
  283. package/dist/src/personal-agent/communication.js +11 -2
  284. package/dist/src/personal-agent/persona.d.ts +2 -1
  285. package/dist/src/personal-agent/persona.js +3 -2
  286. package/dist/src/personal-agent/prompts.d.ts +2 -0
  287. package/dist/src/personal-agent/prompts.js +69 -7
  288. package/dist/src/personal-agent/reply-composer.js +2 -2
  289. package/dist/src/personal-agent/reply-style.d.ts +4 -2
  290. package/dist/src/personal-agent/reply-style.js +19 -3
  291. package/dist/src/personal-agent/request-service.js +14 -9
  292. package/dist/src/pets/loopi-artwork.d.ts +2 -0
  293. package/dist/src/pets/loopi-artwork.js +36 -0
  294. package/dist/src/pets/pointer.d.ts +6 -0
  295. package/dist/src/pets/pointer.js +16 -0
  296. package/dist/src/platform/contracts.d.ts +3 -3
  297. package/dist/src/project-trust/trust-store.d.ts +5 -0
  298. package/dist/src/project-trust/trust-store.js +7 -1
  299. package/dist/src/providers/index.js +3 -3
  300. package/dist/src/providers/model-registry.js +2 -0
  301. package/dist/src/providers/model-supplements.d.ts +0 -2
  302. package/dist/src/providers/model-supplements.js +2 -18
  303. package/dist/src/providers/xopc-cloud-credit-budget.d.ts +1 -0
  304. package/dist/src/providers/xopc-cloud-credit-budget.js +4 -1
  305. package/dist/src/realtime/compact-run-event.js +17 -2
  306. package/dist/src/realtime/runtime.js +1 -1
  307. package/dist/src/routing/agent-session-key.js +1 -1
  308. package/dist/src/routing/resolve-route.js +1 -1
  309. package/dist/src/routing/session-key.js +1 -1
  310. package/dist/src/session/compact-history.js +16 -6
  311. package/dist/src/storage/sqlite/connection.js +2 -2
  312. package/dist/src/storage/sqlite/conversation-repository.js +1 -1
  313. package/dist/src/storage/sqlite/migrations/conversation-backup.d.ts +0 -2
  314. package/dist/src/storage/sqlite/migrations/conversation-backup.js +8 -18
  315. package/dist/src/storage/sqlite/migrations/conversation-windows-owners.js +28 -33
  316. package/dist/src/storage/sqlite/migrations/errors.js +1 -1
  317. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  318. package/dist/src/storage/sqlite/migrations/runner.js +5 -40
  319. package/dist/src/storage/sqlite/migrations/types.d.ts +0 -2
  320. package/dist/src/storage/sqlite/schema.d.ts +1 -3
  321. package/dist/src/storage/sqlite/schema.js +4 -8
  322. package/dist/src/storage/sqlite/schema.sql +1356 -1282
  323. package/dist/src/tasks/capabilities/management.d.ts +2 -2
  324. package/dist/src/tasks/capabilities/relations.d.ts +4 -4
  325. package/dist/src/tasks/capabilities/write.d.ts +4 -4
  326. package/dist/src/tasks/task-allocation-service.js +51 -40
  327. package/dist/src/tasks/task-application-service.js +5 -1
  328. package/dist/src/tasks/task-contract-planner.js +21 -6
  329. package/dist/src/tasks/task-language.d.ts +2 -0
  330. package/dist/src/tasks/task-language.js +13 -2
  331. package/dist/src/tasks/task-research-result.d.ts +2 -2
  332. package/dist/src/tasks/task-run-coordinator.js +5 -1
  333. package/dist/src/tasks/task-run-dispatcher.js +2 -1
  334. package/dist/src/tui/tui.js +1 -1
  335. package/dist/src/usage/scenario-registry.js +0 -5
  336. package/dist/src/usage/types.d.ts +1 -1
  337. package/dist/src/work-discovery/probe.js +1 -1
  338. package/dist/src/workflows/domain/definition.d.ts +1 -0
  339. package/dist/src/workflows/service/workflow-run-service.js +2 -1
  340. package/package.json +10 -6
  341. package/skills/THIRD_PARTY_NOTICES.md +0 -6
  342. package/skills/creative/chat-charts/SKILL.md +26 -0
  343. package/skills/creative/chat-charts/references/bar-example.json +10 -0
  344. package/skills/creative/chat-charts/references/chart-spec.md +25 -0
  345. package/skills/creative/chat-charts/references/line-example.json +13 -0
  346. package/dist/gateway/static/root/assets/activity-YogQEteU.js +0 -1
  347. package/dist/gateway/static/root/assets/activity-store-DWQCDi8M.js +0 -1
  348. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DE910MyU.js +0 -1
  349. package/dist/gateway/static/root/assets/agent-plugin-dialog-0SlvsYl7.js +0 -1
  350. package/dist/gateway/static/root/assets/agents-BZh28Qn1.js +0 -77
  351. package/dist/gateway/static/root/assets/app-chrome-BeB4KgOf.js +0 -1
  352. package/dist/gateway/static/root/assets/app-link-4gpFbdsr.js +0 -1
  353. package/dist/gateway/static/root/assets/app-management-settings-panel-9A7JN5V5.js +0 -1
  354. package/dist/gateway/static/root/assets/appearance-settings-BPdLEo6L.js +0 -1
  355. package/dist/gateway/static/root/assets/apps-page-Cz7LypV9.js +0 -1
  356. package/dist/gateway/static/root/assets/automations-workspace-BBjS-sk-.js +0 -6
  357. package/dist/gateway/static/root/assets/browser-automation-inputs-C5tIrIRL.js +0 -1
  358. package/dist/gateway/static/root/assets/browser-automations-page-CFCMNfJN.js +0 -3
  359. package/dist/gateway/static/root/assets/browser-settings-page-C__tyPwu.js +0 -3
  360. package/dist/gateway/static/root/assets/button-aIC072nz.js +0 -1
  361. package/dist/gateway/static/root/assets/capabilities-D6RJG4QY.js +0 -1
  362. package/dist/gateway/static/root/assets/capabilities-DGEmBQnF.js +0 -1
  363. package/dist/gateway/static/root/assets/capabilities-page-B5AZa7ir.js +0 -2
  364. package/dist/gateway/static/root/assets/capabilities-settings-panel-Dskz2_bh.js +0 -8
  365. package/dist/gateway/static/root/assets/capability-header-actions-xzjWZVbg.js +0 -1
  366. package/dist/gateway/static/root/assets/channels-DRse_dD3.js +0 -1
  367. package/dist/gateway/static/root/assets/chat-terminal-dock-CQF0M4kE.js +0 -36
  368. package/dist/gateway/static/root/assets/chevron-left-DqFhpbvK.js +0 -1
  369. package/dist/gateway/static/root/assets/chevron-right-BweFrslA.js +0 -1
  370. package/dist/gateway/static/root/assets/circle-alert-BEjgurr2.js +0 -1
  371. package/dist/gateway/static/root/assets/circle-dashed-8qMD7gHf.js +0 -1
  372. package/dist/gateway/static/root/assets/circle-dot-BAseJTrF.js +0 -1
  373. package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +0 -1
  374. package/dist/gateway/static/root/assets/computer-settings-page-ZfzCTS0N.js +0 -1
  375. package/dist/gateway/static/root/assets/connector-service-page-CwAeWVLK.js +0 -1
  376. package/dist/gateway/static/root/assets/connectors-page-CanakKaj.js +0 -1
  377. package/dist/gateway/static/root/assets/copy-text-row-C7egVuKr.js +0 -1
  378. package/dist/gateway/static/root/assets/date-formatters-CUZAyDEg.js +0 -1
  379. package/dist/gateway/static/root/assets/date-picker-hmJlEAQZ.js +0 -1
  380. package/dist/gateway/static/root/assets/dependency-picker-Us_Juz6I.js +0 -1
  381. package/dist/gateway/static/root/assets/desktop-pet-CvOTI4uw.js +0 -1
  382. package/dist/gateway/static/root/assets/desktop-pet-settings-DYg-Gb8t.js +0 -1
  383. package/dist/gateway/static/root/assets/desktop-pet-sprite-BP6iMVw1.js +0 -1
  384. package/dist/gateway/static/root/assets/device-pairing-wizard-B1FbZ8C1.js +0 -1
  385. package/dist/gateway/static/root/assets/directory-picker-path-field-DZN9EDvM.js +0 -1
  386. package/dist/gateway/static/root/assets/dist-C3DSFZCi.js +0 -1
  387. package/dist/gateway/static/root/assets/electron-env-Dit0bHgy.js +0 -1
  388. package/dist/gateway/static/root/assets/extension-debug-page-YIibp6Kk.js +0 -1
  389. package/dist/gateway/static/root/assets/extension-page-DkcGyb28.js +0 -1
  390. package/dist/gateway/static/root/assets/extension-provider-B1PQGTtY.js +0 -1
  391. package/dist/gateway/static/root/assets/extension-settings-page-C_rJiSKo.js +0 -1
  392. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +0 -1
  393. package/dist/gateway/static/root/assets/gateway-realtime-store-CMJVSnvi.js +0 -1
  394. package/dist/gateway/static/root/assets/gateway-settings-CjCWPHNJ.js +0 -1
  395. package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +0 -1
  396. package/dist/gateway/static/root/assets/home-page-fAYsd7kG.js +0 -2
  397. package/dist/gateway/static/root/assets/image-generation-api-B98iXt6A.js +0 -1
  398. package/dist/gateway/static/root/assets/imports-page-DoBCBN8G.js +0 -1
  399. package/dist/gateway/static/root/assets/index-DFgXwLsv.js +0 -260
  400. package/dist/gateway/static/root/assets/index-a6ZvhclR.css +0 -1
  401. package/dist/gateway/static/root/assets/index.module-Cd9ENXfk.js +0 -1
  402. package/dist/gateway/static/root/assets/interaction-BdhHBbYa.js +0 -1
  403. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +0 -1
  404. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-DXVu4lqV.js +0 -1
  405. package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +0 -1
  406. package/dist/gateway/static/root/assets/local-app-workbench-page-B3fz6uRi.js +0 -1
  407. package/dist/gateway/static/root/assets/local-apps-page-BC6xhmUh.js +0 -1
  408. package/dist/gateway/static/root/assets/local-session-drafts-DFnZQu9A.js +0 -1
  409. package/dist/gateway/static/root/assets/logs-page-CSqSFDRU.js +0 -2
  410. package/dist/gateway/static/root/assets/loopi-C09I2mNj.css +0 -1
  411. package/dist/gateway/static/root/assets/loopi-Djb8XU3l.js +0 -1
  412. package/dist/gateway/static/root/assets/management-settings-gq5L0THs.js +0 -1
  413. package/dist/gateway/static/root/assets/markdown-view-IsYTotu6.js +0 -324
  414. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-C_QKwqDN.js +0 -1
  415. package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +0 -1
  416. package/dist/gateway/static/root/assets/messages-CKTo_sIF.js +0 -3
  417. package/dist/gateway/static/root/assets/mic-CuUb7zc-.js +0 -1
  418. package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +0 -1
  419. package/dist/gateway/static/root/assets/models-hub-cache-TjpL7hZ5.js +0 -1
  420. package/dist/gateway/static/root/assets/note-detail-panel-CdpNXre-.js +0 -5
  421. package/dist/gateway/static/root/assets/notes-api-CBb944yw.js +0 -1
  422. package/dist/gateway/static/root/assets/notes-page-EGvGw8MN.js +0 -8
  423. package/dist/gateway/static/root/assets/page-context-capture-button-CoWb7BYP.js +0 -1
  424. package/dist/gateway/static/root/assets/page-tabs-HLrKIjXH.js +0 -1
  425. package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +0 -1
  426. package/dist/gateway/static/root/assets/personal-page-DYzbNTyN.js +0 -1
  427. package/dist/gateway/static/root/assets/popover-select-DHC7J4lG.js +0 -1
  428. package/dist/gateway/static/root/assets/preview-open-alternatives-BJU2fmPn.js +0 -1
  429. package/dist/gateway/static/root/assets/product-delivery-BAks11S4.js +0 -1
  430. package/dist/gateway/static/root/assets/product-open-page-CTyy7H7-.js +0 -1
  431. package/dist/gateway/static/root/assets/product-preview-content-D4xqTaEy.js +0 -1
  432. package/dist/gateway/static/root/assets/project-detail-page-DIVCw0QQ.js +0 -1
  433. package/dist/gateway/static/root/assets/projects-page-B4L9VnBN.js +0 -1
  434. package/dist/gateway/static/root/assets/remote-access-hub-B8PvgLVz.js +0 -1
  435. package/dist/gateway/static/root/assets/rotate-ccw-JM1TBLpp.js +0 -1
  436. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +0 -1
  437. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bqnp3tyt.js +0 -1
  438. package/dist/gateway/static/root/assets/scenes-page-D50g4GM2.js +0 -2
  439. package/dist/gateway/static/root/assets/schema-form-h_RCNfiO.js +0 -1
  440. package/dist/gateway/static/root/assets/search-DA7gz22f.js +0 -1
  441. package/dist/gateway/static/root/assets/secret-input-BxWHx6J6.js +0 -1
  442. package/dist/gateway/static/root/assets/send-session-input-DypbVTT7.js +0 -1
  443. package/dist/gateway/static/root/assets/session-manager-C_OiKblh.js +0 -16
  444. package/dist/gateway/static/root/assets/sessions-page-BsqDIbIr.js +0 -1
  445. package/dist/gateway/static/root/assets/settings-2-D-csvaET.js +0 -1
  446. package/dist/gateway/static/root/assets/settings-advanced-gate-D3zJAW4p.js +0 -1
  447. package/dist/gateway/static/root/assets/settings-form-draft-Dy10ldo8.js +0 -1
  448. package/dist/gateway/static/root/assets/settings-form-section-num14vSv.js +0 -1
  449. package/dist/gateway/static/root/assets/settings-shell-dialog-layer-BU3UuiJr.js +0 -1
  450. package/dist/gateway/static/root/assets/setup-status-panel-jjSYJpDd.js +0 -1
  451. package/dist/gateway/static/root/assets/share-link-dialog-BGicglAS.js +0 -1
  452. package/dist/gateway/static/root/assets/share-preview-page-BORe9rLB.js +0 -2
  453. package/dist/gateway/static/root/assets/shares-api-Dbx3z6-1.js +0 -1
  454. package/dist/gateway/static/root/assets/shares-settings-C13FgfWk.js +0 -1
  455. package/dist/gateway/static/root/assets/skeleton-BI5TyibZ.js +0 -1
  456. package/dist/gateway/static/root/assets/skill-api-Cq6O1DZK.js +0 -1
  457. package/dist/gateway/static/root/assets/skill-api-utils-C7V4JVXM.js +0 -1
  458. package/dist/gateway/static/root/assets/skill-reload-api-Cq7QDjMA.js +0 -1
  459. package/dist/gateway/static/root/assets/skill-wire-pattern-BPpeIcCi.js +0 -1
  460. package/dist/gateway/static/root/assets/skills-page-BM1ShEjx.js +0 -2
  461. package/dist/gateway/static/root/assets/style-TIDOdKy0.js +0 -7
  462. package/dist/gateway/static/root/assets/system-settings-panel-BNCGFO1e.js +0 -1
  463. package/dist/gateway/static/root/assets/tab-completion-input-D64VNmiA.js +0 -1
  464. package/dist/gateway/static/root/assets/task-detail-page-4VG82wcF.js +0 -2
  465. package/dist/gateway/static/root/assets/theme-store-Db7hDESt.js +0 -1
  466. package/dist/gateway/static/root/assets/tracing-settings-page-C6p2Mu92.js +0 -1
  467. package/dist/gateway/static/root/assets/tunnel-api-Dw15EJp0.js +0 -1
  468. package/dist/gateway/static/root/assets/usage-page-DDrIqgGe.js +0 -1
  469. package/dist/gateway/static/root/assets/use-async-resource-GrnWNwMZ.js +0 -1
  470. package/dist/gateway/static/root/assets/use-autosave-DDjIdW4U.js +0 -1
  471. package/dist/gateway/static/root/assets/use-composer-attachments-DNl7O3Vb.js +0 -2
  472. package/dist/gateway/static/root/assets/use-file-preview-expanded-DMHehhwG.js +0 -2
  473. package/dist/gateway/static/root/assets/user-model-page-CaS9dOIr.js +0 -2
  474. package/dist/gateway/static/root/assets/voice-api-key-field-ByAxHE4P.js +0 -1
  475. package/dist/gateway/static/root/assets/voice-transcribe-api-CVaU83Jc.js +0 -1
  476. package/dist/gateway/static/root/assets/work-discovery-overlay-BvVvPA1T.js +0 -1
  477. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BcFm9QcC.js +0 -3
  478. package/dist/gateway/static/root/assets/workflows-page-DMec_XZB.js +0 -6
  479. package/dist/gateway/static/root/assets/workspace-api-BpfKsrtP.js +0 -2
  480. package/dist/gateway/static/root/assets/xopc-cloud-account-card-CU5lzzE9.js +0 -1
  481. package/dist/packages/gateway-contract/src/project-monitoring.js +0 -36
  482. package/dist/packages/gateway-contract/src/scenes.js +0 -200
  483. package/dist/src/agent/bootstrap/project-agents-context.d.ts +0 -2
  484. package/dist/src/agent/bootstrap/project-agents-context.js +0 -30
  485. package/dist/src/gateway/hono/routes/scenes.d.ts +0 -3
  486. package/dist/src/gateway/hono/routes/scenes.js +0 -271
  487. package/dist/src/gateway/scenes/browserNotifications.d.ts +0 -4
  488. package/dist/src/gateway/scenes/browserNotifications.js +0 -54
  489. package/dist/src/gateway/scenes/host.d.ts +0 -34
  490. package/dist/src/gateway/scenes/host.js +0 -154
  491. package/dist/src/gateway/scenes/mailContext.d.ts +0 -32
  492. package/dist/src/gateway/scenes/mailContext.js +0 -235
  493. package/dist/src/gateway/scenes/slackThreadSource.d.ts +0 -41
  494. package/dist/src/gateway/scenes/slackThreadSource.js +0 -168
  495. package/dist/src/notifications/browser-endpoint.d.ts +0 -2
  496. package/dist/src/notifications/browser-endpoint.js +0 -13
  497. package/dist/src/notifications/browserSubscriptions.d.ts +0 -20
  498. package/dist/src/notifications/browserSubscriptions.js +0 -59
  499. package/dist/src/notifications/browserTransport.d.ts +0 -9
  500. package/dist/src/notifications/browserTransport.js +0 -64
  501. package/dist/src/notifications/dispatch.d.ts +0 -46
  502. package/dist/src/notifications/dispatch.js +0 -109
  503. package/dist/src/notifications/domain-delivery.d.ts +0 -21
  504. package/dist/src/notifications/domain-delivery.js +0 -1
  505. package/dist/src/notifications/quietHours.d.ts +0 -6
  506. package/dist/src/notifications/quietHours.js +0 -23
  507. package/dist/src/notifications/resultOutbox.d.ts +0 -23
  508. package/dist/src/notifications/resultOutbox.js +0 -49
  509. package/dist/src/scenes/activationAdapter.d.ts +0 -19
  510. package/dist/src/scenes/activationAdapter.js +0 -1
  511. package/dist/src/scenes/agentExecutor.d.ts +0 -9
  512. package/dist/src/scenes/agentExecutor.js +0 -61
  513. package/dist/src/scenes/capabilities/read.d.ts +0 -3
  514. package/dist/src/scenes/capabilities/read.js +0 -187
  515. package/dist/src/scenes/capabilities/write.d.ts +0 -3
  516. package/dist/src/scenes/capabilities/write.js +0 -151
  517. package/dist/src/scenes/contracts.d.ts +0 -9
  518. package/dist/src/scenes/contracts.js +0 -61
  519. package/dist/src/scenes/execution.d.ts +0 -62
  520. package/dist/src/scenes/execution.js +0 -169
  521. package/dist/src/scenes/httpServices.d.ts +0 -39
  522. package/dist/src/scenes/httpServices.js +0 -1
  523. package/dist/src/scenes/inbox.d.ts +0 -17
  524. package/dist/src/scenes/inbox.js +0 -68
  525. package/dist/src/scenes/mailContext.d.ts +0 -24
  526. package/dist/src/scenes/mailContext.js +0 -115
  527. package/dist/src/scenes/mailObservations.d.ts +0 -20
  528. package/dist/src/scenes/mailObservations.js +0 -107
  529. package/dist/src/scenes/maintenance.d.ts +0 -3
  530. package/dist/src/scenes/maintenance.js +0 -20
  531. package/dist/src/scenes/metrics.d.ts +0 -31
  532. package/dist/src/scenes/metrics.js +0 -89
  533. package/dist/src/scenes/model.d.ts +0 -3
  534. package/dist/src/scenes/model.js +0 -10
  535. package/dist/src/scenes/notificationEligibility.d.ts +0 -17
  536. package/dist/src/scenes/notificationEligibility.js +0 -72
  537. package/dist/src/scenes/notificationPublication.d.ts +0 -7
  538. package/dist/src/scenes/notificationPublication.js +0 -43
  539. package/dist/src/scenes/preferences.d.ts +0 -19
  540. package/dist/src/scenes/preferences.js +0 -86
  541. package/dist/src/scenes/readiness.d.ts +0 -7
  542. package/dist/src/scenes/readiness.js +0 -20
  543. package/dist/src/scenes/registry.d.ts +0 -11
  544. package/dist/src/scenes/registry.js +0 -28
  545. package/dist/src/scenes/repository.d.ts +0 -178
  546. package/dist/src/scenes/repository.js +0 -782
  547. package/dist/src/scenes/resultNotifications.d.ts +0 -17
  548. package/dist/src/scenes/resultNotifications.js +0 -204
  549. package/dist/src/scenes/runtime.d.ts +0 -25
  550. package/dist/src/scenes/runtime.js +0 -101
  551. package/dist/src/scenes/schedule.d.ts +0 -2
  552. package/dist/src/scenes/schedule.js +0 -33
  553. package/dist/src/scenes/service.d.ts +0 -36
  554. package/dist/src/scenes/service.js +0 -122
  555. package/dist/src/scenes/taskFollowUp/agentExecutor.d.ts +0 -36
  556. package/dist/src/scenes/taskFollowUp/agentExecutor.js +0 -149
  557. package/dist/src/scenes/taskFollowUp/branchInventory.d.ts +0 -38
  558. package/dist/src/scenes/taskFollowUp/branchInventory.js +0 -70
  559. package/dist/src/scenes/taskFollowUp/contracts.d.ts +0 -121
  560. package/dist/src/scenes/taskFollowUp/contracts.js +0 -119
  561. package/dist/src/scenes/taskFollowUp/resources.d.ts +0 -19
  562. package/dist/src/scenes/taskFollowUp/resources.js +0 -97
  563. package/dist/src/scenes/taskFollowUp/service.d.ts +0 -848
  564. package/dist/src/scenes/taskFollowUp/service.js +0 -770
  565. package/dist/src/scenes/taskFollowUp/workspaceFingerprint.d.ts +0 -2
  566. package/dist/src/scenes/taskFollowUp/workspaceFingerprint.js +0 -46
  567. package/dist/src/scenes/templates.d.ts +0 -64
  568. package/dist/src/scenes/templates.js +0 -76
  569. package/dist/src/scenes/userNotes.d.ts +0 -13
  570. package/dist/src/scenes/userNotes.js +0 -40
  571. package/dist/src/storage/sqlite/migrations/166_remove_proactive_previews.sql +0 -1
  572. package/dist/src/storage/sqlite/migrations/167_discussion_recording_chunks.sql +0 -7
  573. package/dist/src/storage/sqlite/migrations/168_discussion_evidence.sql +0 -16
  574. package/dist/src/storage/sqlite/migrations/169_discussion_action_tasks.sql +0 -8
  575. package/dist/src/storage/sqlite/migrations/170_discussion_edits.sql +0 -8
  576. package/dist/src/storage/sqlite/migrations/171_discussion_recording_jobs.sql +0 -14
  577. package/dist/src/storage/sqlite/migrations/172_project_understanding.sql +0 -3
  578. package/dist/src/storage/sqlite/migrations/173_mobile_discussion_source.sql +0 -5
  579. package/dist/src/storage/sqlite/migrations/174_capability_imports.sql +0 -11
  580. package/dist/src/storage/sqlite/migrations/175_import_selections.sql +0 -8
  581. package/dist/src/storage/sqlite/migrations/176_proactive_quality.sql +0 -5
  582. package/dist/src/storage/sqlite/migrations/177_proactive_check_controls.sql +0 -25
  583. package/dist/src/storage/sqlite/migrations/178_conversation_uuid.sql +0 -2
  584. package/dist/src/storage/sqlite/migrations/179_harmonyos_devices.sql +0 -41
  585. package/dist/src/storage/sqlite/migrations/180_execution_environment_ownership.sql +0 -7
  586. package/dist/src/storage/sqlite/migrations/181_knowledge_item_status_events.sql +0 -12
  587. package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +0 -92
  588. package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +0 -20
  589. package/dist/src/storage/sqlite/migrations/184_memory_suppressions.sql +0 -12
  590. package/dist/src/storage/sqlite/migrations/185_understanding_refresh_batches.sql +0 -6
  591. package/dist/src/storage/sqlite/migrations/186_sidebar_layout.sql +0 -16
  592. package/dist/src/storage/sqlite/migrations/187_cli_connectors.sql +0 -34
  593. package/dist/src/storage/sqlite/migrations/188_scene_storage.sql +0 -2
  594. package/dist/src/storage/sqlite/migrations/189_scene_source_health.sql +0 -8
  595. package/dist/src/storage/sqlite/migrations/190_scene_development.sql +0 -37
  596. package/dist/src/storage/sqlite/migrations/191_scene_task_follow_up.sql +0 -27
  597. package/dist/src/storage/sqlite/migrations/192_capability_operations.sql +0 -20
  598. package/dist/src/storage/sqlite/migrations/193_note_file_cleanup.sql +0 -8
  599. package/dist/src/storage/sqlite/migrations/194_capability_external_outcomes.sql +0 -11
  600. package/dist/src/storage/sqlite/migrations/195_automation_deleted_revisions.sql +0 -4
  601. package/dist/src/storage/sqlite/migrations/196_automation_run_requests.sql +0 -23
  602. package/dist/src/storage/sqlite/migrations/197_note_deletion_cleanup.sql +0 -8
  603. package/dist/src/storage/sqlite/migrations/198_project_workspace_creation.sql +0 -7
  604. package/dist/src/storage/sqlite/migrations/199_scene_resource_events.sql +0 -488
  605. package/dist/src/storage/sqlite/migrations/200_connected_work_threads.sql +0 -92
  606. package/dist/src/storage/sqlite/migrations/201_connector_extraction_audit.sql +0 -127
  607. package/dist/src/storage/sqlite/migrations/202_chat_previews.sql +0 -26
  608. package/dist/src/storage/sqlite/migrations/203_remove_retired_proactive_contracts.sql +0 -70
  609. package/dist/src/storage/sqlite/migrations/204_home_intelligence.sql +0 -78
  610. package/dist/src/storage/sqlite/migrations/205_agent_catalog.sql +0 -66
  611. package/dist/src/storage/sqlite/migrations/206_home_advice_strategy_version.sql +0 -3
  612. package/dist/src/storage/sqlite/migrations/207_user_model_policy_contract.sql +0 -121
  613. package/dist/src/storage/sqlite/migrations/208_automation_management.sql +0 -2
  614. package/dist/src/storage/sqlite/migrations/209_automation_event_hub.sql +0 -48
  615. package/dist/src/storage/sqlite/migrations/210_remove_legacy_automation_timeout.sql +0 -14
  616. package/dist/src/storage/sqlite/migrations/211_automation_result_deliveries.sql +0 -16
  617. package/dist/src/storage/sqlite/migrations/212_automation_delivery_policy.sql +0 -30
  618. package/dist/src/storage/sqlite/migrations/213_automation_reliability_contract.sql +0 -188
  619. package/dist/src/storage/sqlite/migrations/214_ai_usage_ledger.sql +0 -41
  620. package/dist/src/storage/sqlite/migrations/215_scene_execution_adapters.sql +0 -6
  621. package/dist/src/storage/sqlite/migrations/216_remove_scene_model_usage.sql +0 -1
  622. package/dist/src/storage/sqlite/migrations/217_remove_legacy_memory_tables.sql +0 -4
  623. package/dist/src/storage/sqlite/migrations/conversation-key-decoder.d.ts +0 -8
  624. package/dist/src/storage/sqlite/migrations/conversation-key-decoder.js +0 -87
  625. package/dist/src/storage/sqlite/migrations/conversation-uuid.d.ts +0 -8
  626. package/dist/src/storage/sqlite/migrations/conversation-uuid.js +0 -366
  627. package/dist/src/storage/sqlite/migrations/scene-reset.d.ts +0 -5
  628. package/dist/src/storage/sqlite/migrations/scene-reset.js +0 -40
  629. package/dist/src/storage/sqlite/scenes-schema.d.ts +0 -8
  630. package/dist/src/storage/sqlite/scenes-schema.js +0 -60
  631. package/dist/src/storage/sqlite/schemas/notifications.sql +0 -65
  632. package/dist/src/storage/sqlite/schemas/scenes.sql +0 -205
  633. package/skills/engineering/design-recurring-work/SKILL.md +0 -75
@@ -1,39 +0,0 @@
1
- import type { BrowserSubscriptionService } from '../notifications/browserSubscriptions.js';
2
- import type { ScenePrincipal } from './contracts.js';
3
- import type { SceneInboxService } from './inbox.js';
4
- import type { SceneRepository } from './repository.js';
5
- import type { SceneApplicationService } from './service.js';
6
- import type { SceneMailContextProvider } from './mailContext.js';
7
- import type { ScenePreferenceService } from './preferences.js';
8
- import type { SceneMetrics } from './metrics.js';
9
- import type { SceneActivationAdapter } from './activationAdapter.js';
10
- import type { SceneCapabilityRegistry } from './registry.js';
11
- import type { SceneSourceRegistry } from './taskFollowUp/contracts.js';
12
- /** An explicitly installed scene domain; never resolves to the old runtime. */
13
- export interface SceneHttpServices {
14
- activationAdapters: SceneCapabilityRegistry<SceneActivationAdapter>;
15
- sourceProviders: SceneSourceRegistry;
16
- repository: SceneRepository;
17
- application: SceneApplicationService;
18
- inbox: SceneInboxService;
19
- mail: SceneMailContextProvider;
20
- mailDiscovery?: {
21
- listAccounts(principal: ScenePrincipal): Array<{
22
- id: string;
23
- label: string;
24
- }>;
25
- searchSources(principal: ScenePrincipal, value: unknown, signal: AbortSignal): Promise<Array<{
26
- id: string;
27
- accountId: string;
28
- subject: string;
29
- sender: string;
30
- }>>;
31
- };
32
- metrics: SceneMetrics;
33
- preferences: ScenePreferenceService;
34
- browser: BrowserSubscriptionService;
35
- }
36
- export interface SceneAccess {
37
- principal: ScenePrincipal;
38
- services: SceneHttpServices;
39
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,17 +0,0 @@
1
- import type { DatabaseSync } from 'node:sqlite';
2
- import type { ScenePrincipal } from './contracts.js';
3
- /** Feedback records a user's judgment, never an inferred successful action. */
4
- export declare class SceneInboxService {
5
- private readonly db;
6
- private readonly clock;
7
- constructor(db: DatabaseSync, clock?: () => number);
8
- get database(): DatabaseSync;
9
- setRead(principal: ScenePrincipal, id: string, read: boolean): void;
10
- feedback(principal: ScenePrincipal, id: string, value: unknown): number;
11
- getFeedback(principal: ScenePrincipal, id: string): {
12
- rating: string;
13
- note: string;
14
- revision: number;
15
- } | null;
16
- private assertVisible;
17
- }
@@ -1,68 +0,0 @@
1
- import { SceneFeedbackSchema } from "../../packages/gateway-contract/src/scenes.js";
2
- import { init_src } from "../../packages/gateway-contract/src/index.js";
3
- import { SceneConflictError, SceneNotFoundError } from "./repository.js";
4
- import { randomUUID } from "node:crypto";
5
- //#region src/scenes/inbox.ts
6
- init_src();
7
- const actionable = `withdrawn_at IS NULL AND (expires_at IS NULL OR expires_at > ?)
8
- AND (status IN ('unread', 'read') OR (status = 'snoozed' AND snoozed_until <= ?))`;
9
- /** Feedback records a user's judgment, never an inferred successful action. */
10
- var SceneInboxService = class {
11
- constructor(db, clock = Date.now) {
12
- this.db = db;
13
- this.clock = clock;
14
- }
15
- get database() {
16
- return this.db;
17
- }
18
- setRead(principal, id, read) {
19
- if (typeof read !== "boolean") throw new Error("Read state must be a boolean");
20
- this.assertVisible(principal, id);
21
- const now = this.clock();
22
- if (this.db.prepare(`UPDATE scene_presentations SET status = ?, revision = revision + 1, updated_at = ? WHERE id = ? AND ${actionable}`).run(read ? "read" : "unread", now, id, now, now).changes !== 1) throw new SceneConflictError("Scene presentation was withdrawn");
23
- }
24
- feedback(principal, id, value) {
25
- const input = SceneFeedbackSchema.parse(value);
26
- this.assertVisible(principal, id);
27
- this.db.exec("SAVEPOINT scene_feedback_write");
28
- try {
29
- const now = this.clock();
30
- const note = input.note ?? String(this.db.prepare("SELECT note FROM scene_feedback WHERE presentation_id = ?").get(id)?.note ?? "");
31
- if ((input.expectedRevision === 0 ? this.db.prepare(`INSERT INTO scene_feedback (presentation_id, rating, note, revision, updated_at)
32
- SELECT ?, ?, ?, 1, ? WHERE EXISTS (SELECT 1 FROM scene_presentations WHERE id = ? AND ${actionable})
33
- ON CONFLICT(presentation_id) DO NOTHING`).run(id, input.rating, note, now, id, now, now) : this.db.prepare(`UPDATE scene_feedback SET rating = ?, note = ?, revision = revision + 1, updated_at = ?
34
- WHERE presentation_id = ? AND revision = ?
35
- AND EXISTS (SELECT 1 FROM scene_presentations WHERE id = ? AND ${actionable})`).run(input.rating, note, now, id, input.expectedRevision, id, now, now)).changes !== 1) throw new SceneConflictError("Scene feedback changed");
36
- this.db.prepare(`INSERT INTO scene_feedback_history(id, presentation_id, rating, note, revision, recorded_at)
37
- VALUES (?, ?, ?, ?, ?, ?)`).run(randomUUID(), id, input.rating, note, input.expectedRevision + 1, now);
38
- this.db.exec("RELEASE scene_feedback_write");
39
- return input.expectedRevision + 1;
40
- } catch (error) {
41
- this.db.exec("ROLLBACK TO scene_feedback_write");
42
- this.db.exec("RELEASE scene_feedback_write");
43
- throw error;
44
- }
45
- }
46
- getFeedback(principal, id) {
47
- this.assertVisible(principal, id);
48
- const row = this.db.prepare("SELECT rating, note, revision FROM scene_feedback WHERE presentation_id = ?").get(id);
49
- return row ? {
50
- rating: String(row.rating),
51
- note: String(row.note),
52
- revision: Number(row.revision)
53
- } : null;
54
- }
55
- assertVisible(principal, id) {
56
- if (!principal.ownerId?.trim() || !principal.workspaceId?.trim()) throw new Error("Scene principal is required");
57
- const row = this.db.prepare(`SELECT p.status, p.withdrawn_at, p.expires_at, p.snoozed_until FROM scene_presentations p
58
- JOIN scene_outcomes o ON o.id = p.outcome_id JOIN scene_runs r ON r.id = o.run_id
59
- JOIN scene_activations a ON a.id = r.activation_id
60
- WHERE p.id = ? AND a.owner_id = ? AND a.workspace_id = ?`).get(id, principal.ownerId, principal.workspaceId);
61
- if (!row) throw new SceneNotFoundError("Scene presentation not found");
62
- const now = this.clock();
63
- if (row.status === "withdrawn" || row.withdrawn_at !== null) throw new SceneConflictError("Scene presentation was withdrawn");
64
- if (row.status === "resolved" || row.expires_at !== null && Number(row.expires_at) <= now || row.status === "snoozed" && (row.snoozed_until === null || Number(row.snoozed_until) > now)) throw new SceneConflictError("Scene presentation is not currently actionable");
65
- }
66
- };
67
- //#endregion
68
- export { SceneInboxService };
@@ -1,24 +0,0 @@
1
- import type { DatabaseSync } from 'node:sqlite';
2
- import type { SceneContextProvider, SceneEvidence } from './execution.js';
3
- import type { SceneActivation, ScenePrincipal } from './contracts.js';
4
- /** Reads a bounded, account-scoped thread from synchronized connector knowledge. */
5
- export declare class SceneMailContextProvider implements SceneContextProvider {
6
- private readonly db;
7
- private readonly clock;
8
- readonly id = "mail";
9
- readonly tracksHealth = true;
10
- readonly requiresAccountIdentity = true;
11
- constructor(db: DatabaseSync, clock?: () => number);
12
- setupIssues(activation: SceneActivation): string[];
13
- authorization(activation: SceneActivation): string[] | null;
14
- /** Resolve current account grants for the exact delegated source, including reconnects and revocation. */
15
- authorizedAccounts(activation: SceneActivation): string[];
16
- /** Picker metadata only; choosing an item still requires explicit activation consent. */
17
- listSources(principal: ScenePrincipal, limit?: number, afterId?: string): {
18
- id: string;
19
- accountId: string;
20
- subject: string;
21
- sender: string;
22
- }[];
23
- read(input: Parameters<SceneContextProvider['read']>[0]): Promise<SceneEvidence[]>;
24
- }
@@ -1,115 +0,0 @@
1
- import { SceneSourceNotReady } from "./readiness.js";
2
- //#region src/scenes/mailContext.ts
3
- const accountJoin = `JOIN connector_accounts a ON a.id = c.account_id AND a.current_connection_id = c.id
4
- AND a.principal_id = c.principal_id AND a.connector_id = c.connector_id
5
- JOIN connector_installations installation ON installation.id = c.installation_id
6
- AND installation.principal_id = c.principal_id AND installation.connector_id = c.connector_id`;
7
- const accountPolicy = `a.enabled = 1 AND installation.enabled = 1 AND c.status = 'active'
8
- AND json_array_length(installation.allowed_agent_ids_json) = 0 AND a.allowed_agent_ids_json IS NULL
9
- AND (installation.selected_account_ids_json = 'null' OR EXISTS
10
- (SELECT 1 FROM json_each(installation.selected_account_ids_json) WHERE value = a.id))`;
11
- /** Reads a bounded, account-scoped thread from synchronized connector knowledge. */
12
- var SceneMailContextProvider = class {
13
- id = "mail";
14
- tracksHealth = true;
15
- requiresAccountIdentity = true;
16
- constructor(db, clock = Date.now) {
17
- this.db = db;
18
- this.clock = clock;
19
- }
20
- setupIssues(activation) {
21
- return activation.scope.kind === "objects" && activation.scope.ids.length === 1 && activation.permissions.accountIds.length === 1 ? [] : ["one_mail_thread_and_account"];
22
- }
23
- authorization(activation) {
24
- const accounts = this.authorizedAccounts(activation);
25
- return accounts.length ? accounts : null;
26
- }
27
- /** Resolve current account grants for the exact delegated source, including reconnects and revocation. */
28
- authorizedAccounts(activation) {
29
- if (activation.scope.kind !== "objects" || activation.scope.ids.length !== 1) return [];
30
- const row = this.db.prepare(`SELECT a.id FROM knowledge_source_items k
31
- JOIN connector_connections c ON c.id = json_extract(CASE WHEN json_valid(k.metadata_json) THEN k.metadata_json ELSE '{}' END, '$.connectionId')
32
- ${accountJoin}
33
- WHERE k.item_id = ? AND k.item_type = 'email' AND k.deleted_at IS NULL
34
- AND k.sensitivity NOT IN ('secret', 'regulated')
35
- AND json_valid(k.metadata_json) AND json_valid(k.normalized_text)
36
- AND json_type(k.normalized_text, '$.threadId') = 'text'
37
- AND length(trim(json_extract(k.normalized_text, '$.threadId'))) > 0
38
- AND NOT EXISTS (SELECT 1 FROM json_each(k.normalized_text, '$.labels') WHERE value IN ('DRAFT', 'TRASH', 'SPAM'))
39
- AND json_extract(k.metadata_json, '$.workspaceId') = ? AND c.principal_id = ?
40
- AND ${accountPolicy}
41
- AND (c.expires_at IS NULL OR julianday(c.expires_at) > julianday(?, 'unixepoch'))`).get(activation.scope.ids[0], activation.workspaceId, activation.ownerId, this.clock() / 1e3);
42
- return row && activation.permissions.accountIds.includes(String(row.id)) ? [String(row.id)] : [];
43
- }
44
- /** Picker metadata only; choosing an item still requires explicit activation consent. */
45
- listSources(principal, limit = 50, afterId = "") {
46
- if (!principal.ownerId.trim() || !principal.workspaceId.trim()) throw new Error("Scene principal is required");
47
- if (!Number.isInteger(limit) || limit < 1 || limit > 100) throw new Error("Invalid source list limit");
48
- return this.db.prepare(`SELECT k.item_id AS id, a.id AS accountId,
49
- substr(json_extract(k.normalized_text, '$.subject'), 1, 300) AS subject,
50
- substr(json_extract(k.normalized_text, '$.sender'), 1, 300) AS sender
51
- FROM knowledge_source_items k
52
- JOIN connector_connections c ON c.id = json_extract(CASE WHEN json_valid(k.metadata_json) THEN k.metadata_json ELSE '{}' END, '$.connectionId')
53
- ${accountJoin}
54
- WHERE k.item_type = 'email' AND k.deleted_at IS NULL AND k.sensitivity NOT IN ('secret', 'regulated')
55
- AND json_valid(k.normalized_text) AND json_valid(k.metadata_json)
56
- AND json_extract(k.metadata_json, '$.workspaceId') = ? AND c.principal_id = ?
57
- AND ${accountPolicy}
58
- AND (c.expires_at IS NULL OR julianday(c.expires_at) > julianday(?, 'unixepoch'))
59
- AND json_type(k.normalized_text, '$.threadId') = 'text' AND length(trim(json_extract(k.normalized_text, '$.threadId'))) > 0
60
- AND NOT EXISTS (SELECT 1 FROM json_each(k.normalized_text, '$.labels') WHERE value IN ('DRAFT', 'TRASH', 'SPAM'))
61
- AND k.item_id > ? ORDER BY k.item_id LIMIT ?`).all(principal.workspaceId, principal.ownerId, this.clock() / 1e3, afterId, limit).map((row) => ({
62
- id: String(row.id),
63
- accountId: String(row.accountId),
64
- subject: typeof row.subject === "string" ? row.subject : "",
65
- sender: typeof row.sender === "string" ? row.sender : ""
66
- }));
67
- }
68
- async read(input) {
69
- input.signal.throwIfAborted();
70
- if (!input.permissions.contextProviders.includes(this.id)) throw new Error("Mail context permission is required");
71
- const origin = this.db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ? AND item_type = 'email' AND deleted_at IS NULL`).get(input.subjectId);
72
- if (!origin) throw new Error("Mail source unavailable");
73
- const metadata = JSON.parse(origin.metadata_json);
74
- if (metadata.workspaceId !== input.activation.workspaceId || typeof metadata.connectionId !== "string") throw new Error("Mail source workspace mismatch");
75
- const connection = this.db.prepare(`SELECT c.account_id, c.expires_at FROM connector_connections c
76
- ${accountJoin} WHERE c.id = ? AND c.principal_id = ? AND ${accountPolicy}`).get(metadata.connectionId, input.activation.ownerId);
77
- if (!connection || !input.permissions.accountIds.includes(connection.account_id)) throw new Error("Mail account permission is required");
78
- if (connection.expires_at !== null && !(Date.parse(connection.expires_at) > this.clock())) throw new Error("Mail connection is expired");
79
- const fields = JSON.parse(origin.normalized_text);
80
- if (typeof fields.threadId !== "string" || !fields.threadId.trim()) throw new Error("Mail thread identity unavailable");
81
- if (Array.isArray(fields.labels) && fields.labels.some((label) => [
82
- "DRAFT",
83
- "TRASH",
84
- "SPAM"
85
- ].includes(label))) throw new Error("Mail origin is not an active message");
86
- const sync = this.db.prepare(`SELECT status, started_at, finished_at FROM knowledge_sync_runs
87
- WHERE source_instance_id = ? AND collection_scope = ? ORDER BY started_at DESC, rowid DESC LIMIT 1`).get(origin.source_instance_id, origin.collection_scope);
88
- const now = this.clock();
89
- if (!sync || sync.status !== "succeeded" || sync.finished_at === null || sync.finished_at < sync.started_at || sync.started_at > now || sync.finished_at > now || sync.started_at + 30 * 6e4 <= now || input.notBefore !== void 0 && sync.started_at < input.notBefore) throw new SceneSourceNotReady();
90
- const messages = this.db.prepare(`SELECT * FROM knowledge_source_items
91
- WHERE source_instance_id = ? AND collection_scope = ? AND item_type = 'email' AND deleted_at IS NULL
92
- AND json_valid(normalized_text) AND json_valid(metadata_json)
93
- AND json_extract(normalized_text, '$.threadId') = ?
94
- AND json_extract(metadata_json, '$.connectionId') = ?
95
- AND json_extract(metadata_json, '$.workspaceId') = ?
96
- AND NOT EXISTS (SELECT 1 FROM json_each(normalized_text, '$.labels') WHERE value IN ('DRAFT', 'TRASH', 'SPAM'))
97
- ORDER BY occurred_at, item_id LIMIT 31`).all(origin.source_instance_id, origin.collection_scope, fields.threadId, metadata.connectionId, input.activation.workspaceId);
98
- if (!messages.length || messages.length > 30) throw new Error("Mail thread cannot be read completely within its budget");
99
- if (messages.some((item) => ["secret", "regulated"].includes(item.sensitivity))) throw new Error("Mail thread contains restricted evidence");
100
- input.signal.throwIfAborted();
101
- return messages.map((item) => ({
102
- id: item.item_id,
103
- subjectId: input.subjectId,
104
- ownerId: input.activation.ownerId,
105
- workspaceId: input.activation.workspaceId,
106
- accountId: connection.account_id,
107
- revision: item.content_hash,
108
- freshUntil: sync.started_at + 30 * 6e4,
109
- ...item.occurred_at !== null ? { occurredAt: item.occurred_at } : {},
110
- content: item.normalized_text
111
- }));
112
- }
113
- };
114
- //#endregion
115
- export { SceneMailContextProvider };
@@ -1,20 +0,0 @@
1
- import { type SceneActivation, type ScenePermission } from './contracts.js';
2
- import type { SceneContextProvider } from './execution.js';
3
- import { SceneRepository } from './repository.js';
4
- /** Observes only explicitly delegated threads; the host owns scan scheduling. */
5
- export declare class SceneMailObservationService {
6
- private readonly repository;
7
- private readonly provider;
8
- private readonly authorize;
9
- private readonly clock;
10
- private readonly intervalMs;
11
- private readonly itemTimeoutMs;
12
- private nextScanAt;
13
- private readonly failures;
14
- constructor(repository: SceneRepository, provider: SceneContextProvider, authorize: (activation: SceneActivation) => Promise<ScenePermission>, clock?: () => number, intervalMs?: number, itemTimeoutMs?: number);
15
- scan(signal: AbortSignal, afterId?: string, progress?: (id: string) => void): Promise<{
16
- changed: number;
17
- unavailable: number;
18
- nextCursor: string | null;
19
- }>;
20
- }
@@ -1,107 +0,0 @@
1
- import { intersectPermissions, sceneContentHash } from "./contracts.js";
2
- import { sceneSourceFailureReason } from "./readiness.js";
3
- //#region src/scenes/mailObservations.ts
4
- /** Observes only explicitly delegated threads; the host owns scan scheduling. */
5
- var SceneMailObservationService = class {
6
- nextScanAt = 0;
7
- failures = /* @__PURE__ */ new Map();
8
- constructor(repository, provider, authorize, clock = Date.now, intervalMs = 0, itemTimeoutMs = 5e3) {
9
- this.repository = repository;
10
- this.provider = provider;
11
- this.authorize = authorize;
12
- this.clock = clock;
13
- this.intervalMs = intervalMs;
14
- this.itemTimeoutMs = itemTimeoutMs;
15
- if (provider.id !== "mail") throw new Error("Mail observation requires the mail context provider");
16
- }
17
- async scan(signal, afterId = "", progress) {
18
- signal.throwIfAborted();
19
- if (!afterId && this.clock() < this.nextScanAt) return {
20
- changed: 0,
21
- unavailable: 0,
22
- nextCursor: null
23
- };
24
- const items = this.repository.listMailObservationItems(afterId, this.clock());
25
- const started = Date.now();
26
- let lastId = afterId;
27
- let processed = 0;
28
- let changed = 0;
29
- let unavailable = 0;
30
- for (const { principal, item } of items) {
31
- signal.throwIfAborted();
32
- if (Date.now() - started >= 2e4) break;
33
- lastId = item.id;
34
- processed += 1;
35
- const backoff = this.failures.get(item.accountId);
36
- if (this.intervalMs > 0 && backoff && backoff.until > this.clock()) {
37
- progress?.(lastId);
38
- continue;
39
- }
40
- const controller = new AbortController();
41
- const abort = () => controller.abort(signal.reason);
42
- signal.addEventListener("abort", abort, { once: true });
43
- const timeout = setTimeout(() => controller.abort(/* @__PURE__ */ new Error("Mail item timed out")), this.itemTimeoutMs);
44
- let rejectAbort = () => {};
45
- const aborted = new Promise((_, reject) => {
46
- rejectAbort = () => reject(controller.signal.reason);
47
- controller.signal.addEventListener("abort", rejectAbort, { once: true });
48
- });
49
- let activation;
50
- try {
51
- activation = this.repository.getActivation(principal, item.activationId);
52
- const template = this.repository.getTemplate(activation.templateKey, activation.templateVersion);
53
- if (!template.contextProviders.includes("mail") || !template.triggers.some((trigger) => trigger.type === "event" && trigger.eventType === "mail.thread.changed") || activation.scope.kind !== "objects" || !activation.scope.ids.includes(item.subjectId)) throw new Error("Mail observation is outside the template or delegated scope");
54
- const permissions = intersectPermissions(activation.permissions, await Promise.race([this.authorize(activation), aborted]), {
55
- accountIds: [item.accountId],
56
- contextProviders: ["mail"],
57
- effectHandlers: []
58
- });
59
- signal.throwIfAborted();
60
- if (!this.repository.isMailObservationCurrent(activation, item, this.clock())) throw new Error("Mail delegation changed during authorization");
61
- if (!permissions.accountIds.includes(item.accountId) || !permissions.contextProviders.includes("mail")) throw new Error("Mail observation permission is required");
62
- const evidence = await Promise.race([this.provider.read({
63
- activation,
64
- permissions,
65
- subjectId: item.subjectId,
66
- signal: controller.signal
67
- }), aborted]);
68
- signal.throwIfAborted();
69
- if (!evidence.length || evidence.length > 100 || new Set(evidence.map((entry) => entry.id)).size !== evidence.length || evidence.reduce((size, entry) => size + entry.content.length, 0) > 12e4 || evidence.some((entry) => !entry.id || !entry.revision || entry.ownerId !== principal.ownerId || entry.workspaceId !== principal.workspaceId || entry.accountId !== item.accountId || entry.subjectId !== item.subjectId || !Number.isFinite(entry.freshUntil) || entry.freshUntil <= this.clock())) throw new Error("Mail observation is incomplete or unauthorized");
70
- const currentPermissions = intersectPermissions(permissions, await Promise.race([this.authorize(activation), aborted]));
71
- signal.throwIfAborted();
72
- if (!this.repository.isMailObservationCurrent(activation, item, this.clock())) throw new Error("Mail delegation changed during observation");
73
- if (sceneContentHash(currentPermissions) !== sceneContentHash(permissions)) throw new Error("Mail observation permission changed");
74
- this.repository.recordSourceHealth(activation, null, this.clock());
75
- this.failures.delete(item.accountId);
76
- const fingerprint = sceneContentHash(evidence.map(({ freshUntil: _freshUntil, ...entry }) => entry).sort((a, b) => a.id.localeCompare(b.id)));
77
- if (this.repository.observeMailWorkItem(principal, item, fingerprint, this.clock())) changed += 1;
78
- } catch (error) {
79
- signal.throwIfAborted();
80
- unavailable += 1;
81
- const retryDelay = Math.max(this.intervalMs, Math.min(3e5, 1e4 * 2 ** Math.min((backoff?.count ?? 0) + 1, 5)));
82
- if (activation && this.repository.isMailObservationCurrent(activation, item, this.clock())) this.repository.recordSourceHealth(activation, sceneSourceFailureReason(error), this.clock(), this.clock() + Math.max(retryDelay, 6e4));
83
- if (this.intervalMs > 0) {
84
- const count = Math.min((backoff?.count ?? 0) + 1, 5);
85
- this.failures.set(item.accountId, {
86
- count,
87
- until: this.clock() + Math.min(3e5, 1e4 * 2 ** count)
88
- });
89
- }
90
- } finally {
91
- clearTimeout(timeout);
92
- signal.removeEventListener("abort", abort);
93
- controller.signal.removeEventListener("abort", rejectAbort);
94
- if (!signal.aborted) progress?.(lastId);
95
- }
96
- }
97
- const nextCursor = processed < items.length || items.length === 100 ? lastId : null;
98
- if (nextCursor === null) this.nextScanAt = this.clock() + this.intervalMs;
99
- return {
100
- changed,
101
- unavailable,
102
- nextCursor
103
- };
104
- }
105
- };
106
- //#endregion
107
- export { SceneMailObservationService };
@@ -1,3 +0,0 @@
1
- import type { DatabaseSync } from 'node:sqlite';
2
- /** Keeps identity/deduplication rows; removes bounded old payloads only after their work is terminal. */
3
- export declare function maintainSceneStorage(db: DatabaseSync, now?: number): void;
@@ -1,20 +0,0 @@
1
- import { init_transaction, runSqliteSavepoint } from "../storage/sqlite/transaction.js";
2
- //#region src/scenes/maintenance.ts
3
- init_transaction();
4
- /** Keeps identity/deduplication rows; removes bounded old payloads only after their work is terminal. */
5
- function maintainSceneStorage(db, now = Date.now()) {
6
- const cutoff = now - 90 * 864e5;
7
- runSqliteSavepoint(db, () => {
8
- db.prepare("DELETE FROM scene_connector_usage WHERE utc_day < ?").run(Math.floor(cutoff / 864e5));
9
- db.prepare("DELETE FROM notification_presence WHERE expires_at <= ?").run(now);
10
- db.prepare("DELETE FROM notification_browser_subscriptions WHERE expires_at <= ?").run(now);
11
- db.prepare(`DELETE FROM scene_mail_sources WHERE id IN (SELECT s.id FROM scene_mail_sources s
12
- WHERE s.selected_at < ? AND NOT EXISTS (SELECT 1 FROM scene_activations a, json_each(a.scope_json, '$.ids') ids WHERE ids.value = s.id)
13
- ORDER BY selected_at LIMIT 100)`).run(now - 30 * 864e5);
14
- for (const table of ["scene_context_snapshots", "scene_model_reservations"]) db.prepare(`DELETE FROM ${table} WHERE run_id IN (SELECT DISTINCT r.id FROM scene_runs r JOIN ${table} t ON t.run_id = r.id
15
- WHERE r.status NOT IN ('running', 'retry_wait') AND r.created_at < ? ORDER BY r.created_at LIMIT 100)`).run(cutoff);
16
- db.prepare("DELETE FROM notification_attention_budget WHERE dedupe_key IN (SELECT dedupe_key FROM notification_attention_budget WHERE created_at < ? LIMIT 100)").run(cutoff);
17
- });
18
- }
19
- //#endregion
20
- export { maintainSceneStorage };
@@ -1,31 +0,0 @@
1
- import type { DatabaseSync } from 'node:sqlite';
2
- import type { ScenePrincipal } from './contracts.js';
3
- /** Explicit feedback is a usefulness signal, not proof of adoption or saved time. */
4
- export declare class SceneMetrics {
5
- private readonly db;
6
- private readonly clock;
7
- private readonly modelRef;
8
- constructor(db: DatabaseSync, clock?: () => number, modelRef?: () => string | null);
9
- diagnostics(principal: ScenePrincipal): {
10
- checksPaused: boolean;
11
- currentModel: string;
12
- pendingChecks: number;
13
- oldestDueWaitMs: number;
14
- notifications: Record<string, import("node:sqlite").SQLOutputValue>[];
15
- activations: Record<string, import("node:sqlite").SQLOutputValue>[];
16
- };
17
- forUser(principal: ScenePrincipal, days?: number): {
18
- window: {
19
- since: number;
20
- until: number;
21
- days: number;
22
- };
23
- ratedOutcomes: number;
24
- usefulOutcomes: number;
25
- unhelpfulOutcomes: number;
26
- scenesWithUsefulOutcomes: number;
27
- checks: number;
28
- failedChecks: number;
29
- skippedChecks: number;
30
- };
31
- }
@@ -1,89 +0,0 @@
1
- //#region src/scenes/metrics.ts
2
- /** Explicit feedback is a usefulness signal, not proof of adoption or saved time. */
3
- var SceneMetrics = class {
4
- constructor(db, clock = Date.now, modelRef = () => null) {
5
- this.db = db;
6
- this.clock = clock;
7
- this.modelRef = modelRef;
8
- }
9
- diagnostics(principal) {
10
- if (!principal.ownerId.trim() || !principal.workspaceId.trim()) throw new Error("Scene principal is required");
11
- const now = this.clock();
12
- const queue = this.db.prepare(`SELECT COUNT(*) AS depth, MIN(i.due_at) AS oldest
13
- FROM scene_trigger_intents i JOIN scene_activations a ON a.id = i.activation_id
14
- WHERE a.owner_id = ? AND a.workspace_id = ? AND i.status = 'pending'`).get(principal.ownerId, principal.workspaceId);
15
- const notifications = this.db.prepare(`SELECT status, COUNT(*) AS count FROM notification_dispatches
16
- WHERE owner_id = ? AND workspace_id = ? GROUP BY status`).all(principal.ownerId, principal.workspaceId);
17
- const activations = this.db.prepare(`SELECT a.id, a.status,
18
- (SELECT MAX(created_at) FROM scene_runs WHERE activation_id = a.id) AS last_check_at,
19
- (SELECT reason FROM scene_runs WHERE activation_id = a.id ORDER BY created_at DESC, id DESC LIMIT 1) AS last_reason,
20
- CASE WHEN a.status = 'active' THEN (SELECT MIN(next_due_at) FROM scene_schedule_cursors WHERE activation_id = a.id) END AS next_schedule_at,
21
- (SELECT MIN(due_at) FROM scene_work_items WHERE activation_id = a.id AND status = 'watching') AS deadline_at,
22
- CASE WHEN a.status = 'active' THEN (SELECT MIN(due_at) FROM scene_work_items WHERE activation_id = a.id AND status = 'watching' AND (last_triggered_revision IS NULL OR last_triggered_revision <> revision)) END AS next_deadline_check_at,
23
- (SELECT MIN(retry_at) FROM scene_runs WHERE activation_id = a.id AND status = 'retry_wait') AS retry_at,
24
- (SELECT reason FROM scene_source_health WHERE activation_id = a.id) AS source_reason,
25
- (SELECT last_attempt_at FROM scene_source_health WHERE activation_id = a.id) AS source_attempt_at,
26
- (SELECT consecutive_failures FROM scene_source_health WHERE activation_id = a.id) AS source_failures,
27
- (SELECT last_success_at FROM scene_source_health WHERE activation_id = a.id) AS source_success_at,
28
- (SELECT retry_at FROM scene_source_health WHERE activation_id = a.id) AS source_retry_at
29
- FROM scene_activations a WHERE a.owner_id = ? AND a.workspace_id = ? ORDER BY a.id LIMIT 100`).all(principal.ownerId, principal.workspaceId);
30
- const policyRow = this.db.prepare("SELECT preferences_json FROM scene_preferences WHERE owner_id = ? AND workspace_id = ?").get(principal.ownerId, principal.workspaceId);
31
- const policy = policyRow ? JSON.parse(String(policyRow.preferences_json)) : {};
32
- const checksPaused = policy.checksPaused === true || Date.parse(policy.checksPausedUntil ?? "") > now;
33
- if (checksPaused) for (const activation of activations) {
34
- activation.next_schedule_at = null;
35
- activation.next_deadline_check_at = null;
36
- activation.retry_at = null;
37
- }
38
- let currentModel = null;
39
- try {
40
- currentModel = this.modelRef();
41
- } catch {}
42
- return {
43
- checksPaused,
44
- currentModel,
45
- pendingChecks: Number(queue.depth),
46
- oldestDueWaitMs: queue.oldest == null ? 0 : Math.max(0, now - Number(queue.oldest)),
47
- notifications,
48
- activations
49
- };
50
- }
51
- forUser(principal, days = 7) {
52
- if (!principal.ownerId?.trim() || !principal.workspaceId?.trim()) throw new Error("Scene principal is required");
53
- if (!Number.isInteger(days) || days < 1 || days > 90) throw new Error("Scene metric window must be 1–90 days");
54
- const until = this.clock();
55
- const since = until - days * 864e5;
56
- const feedback = this.db.prepare(`SELECT
57
- COUNT(*) AS ratedOutcomes,
58
- COALESCE(SUM(CASE WHEN f.rating = 'useful' THEN 1 ELSE 0 END), 0) AS usefulOutcomes,
59
- COALESCE(SUM(CASE WHEN f.rating = 'not_useful' THEN 1 ELSE 0 END), 0) AS unhelpfulOutcomes,
60
- COUNT(DISTINCT CASE WHEN f.rating = 'useful' THEN a.id END) AS scenesWithUsefulOutcomes
61
- FROM scene_feedback_history f JOIN scene_feedback latest
62
- ON latest.presentation_id = f.presentation_id AND latest.revision = f.revision
63
- JOIN scene_presentations p ON p.id = f.presentation_id JOIN scene_outcomes o ON o.id = p.outcome_id
64
- JOIN scene_runs r ON r.id = o.run_id JOIN scene_activations a ON a.id = r.activation_id
65
- WHERE a.owner_id = ? AND a.workspace_id = ?
66
- AND f.recorded_at >= ? AND f.recorded_at < ?`).get(principal.ownerId, principal.workspaceId, since, until);
67
- const work = this.db.prepare(`SELECT COUNT(*) AS checks,
68
- COALESCE(SUM(CASE WHEN r.status = 'failed' THEN 1 ELSE 0 END), 0) AS failedChecks,
69
- COALESCE(SUM(CASE WHEN r.status = 'skipped' THEN 1 ELSE 0 END), 0) AS skippedChecks
70
- FROM scene_runs r JOIN scene_activations a ON a.id = r.activation_id
71
- WHERE a.owner_id = ? AND a.workspace_id = ? AND r.created_at >= ? AND r.created_at < ?`).get(principal.ownerId, principal.workspaceId, since, until);
72
- return {
73
- window: {
74
- since,
75
- until,
76
- days
77
- },
78
- ratedOutcomes: Number(feedback.ratedOutcomes),
79
- usefulOutcomes: Number(feedback.usefulOutcomes),
80
- unhelpfulOutcomes: Number(feedback.unhelpfulOutcomes),
81
- scenesWithUsefulOutcomes: Number(feedback.scenesWithUsefulOutcomes),
82
- checks: Number(work.checks),
83
- failedChecks: Number(work.failedChecks),
84
- skippedChecks: Number(work.skippedChecks)
85
- };
86
- }
87
- };
88
- //#endregion
89
- export { SceneMetrics };
@@ -1,3 +0,0 @@
1
- import type { Config } from '../config/schema.js';
2
- /** Scene reasoning follows the existing agent model policy and falls back to chat. */
3
- export declare function resolveSceneModelRef(config: Config): string;
@@ -1,10 +0,0 @@
1
- import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
2
- import { resolveModelSelector } from "../config/agent-model-intents.js";
3
- //#region src/scenes/model.ts
4
- init_agent_scope();
5
- /** Scene reasoning follows the existing agent model policy and falls back to chat. */
6
- function resolveSceneModelRef(config) {
7
- return resolveModelSelector(config, resolveDefaultAgentId(), "@reasoning");
8
- }
9
- //#endregion
10
- export { resolveSceneModelRef };
@@ -1,17 +0,0 @@
1
- import type { DatabaseSync } from 'node:sqlite';
2
- import type { NotificationResult } from '../notifications/resultOutbox.js';
3
- export type SceneNotificationEligibility = {
4
- action: 'cancel';
5
- reason: string;
6
- } | {
7
- action: 'defer';
8
- until: number;
9
- } | {
10
- action: 'eligible';
11
- activationId: string;
12
- presentationId: string;
13
- revision: number;
14
- kind: string;
15
- };
16
- /** Local result eligibility only. The host must still recheck connector authorization and attention policy. */
17
- export declare function sceneNotificationEligibility(db: DatabaseSync, result: NotificationResult, now: number, expectedRevision?: number): SceneNotificationEligibility;