@xopcai/xopc 0.0.414 → 0.0.415

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 (264) 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/{agent-avatar-dicebear-ClobpdW3.js → agent-avatar-dicebear-CJFwitU2.js} +1 -1
  4. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DclyJr1N.js +1 -0
  5. package/dist/gateway/static/root/assets/{agents-admin-api-CeBkHnl8.js → agents-admin-api-B1p-ghg9.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-jhErNtzi.js +77 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-CLunLNGp.js → app-management-settings-panel-DgwqNi5i.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DBEgoE9g.js → appearance-settings-C0wJfFyz.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-C0LcnI4h.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-JElK4Goq.js → archive-plugin-Ch7wolHE.js} +1 -1
  11. package/dist/gateway/static/root/assets/{automations-page-CZ0UqwyU.js → automations-page-DK7AU79v.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-workspace-CBxiV34x.js +8 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-CXFawow6.js → binary-plugins-B4HcHYsC.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-BoduwSYI.js → block-editor-BQAWEZF-.js} +30 -30
  15. package/dist/gateway/static/root/assets/{browser-automation-inputs-D1pDgMJu.js → browser-automation-inputs-D6AccXaA.js} +1 -1
  16. package/dist/gateway/static/root/assets/browser-automations-page-vJIrTxdi.js +3 -0
  17. package/dist/gateway/static/root/assets/browser-settings-page-in5Roh_E.js +3 -0
  18. package/dist/gateway/static/root/assets/{capabilities-Bpeh6E22.js → capabilities-BlxF36t-.js} +1 -1
  19. package/dist/gateway/static/root/assets/{capabilities-page-C-EecWbS.js → capabilities-page-CiGx8wpQ.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-a8kqjzQu.js +8 -0
  21. package/dist/gateway/static/root/assets/{capability-header-actions-BasrAWA0.js → capability-header-actions-D4Yq35fD.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-C_CxcjKT.js +1 -0
  23. package/dist/gateway/static/root/assets/{chat-terminal-dock-CwQbzcZ_.js → chat-terminal-dock-zdMySdMm.js} +2 -2
  24. package/dist/gateway/static/root/assets/{computer-settings-page-DNWeJKfF.js → computer-settings-page-C5Z6Jr0p.js} +1 -1
  25. package/dist/gateway/static/root/assets/{connector-service-page-CxHgC5RM.js → connector-service-page-Cxus0qrZ.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-DCBO2CxK.js +1 -0
  27. package/dist/gateway/static/root/assets/{date-picker-CXxLbLJb.js → date-picker-DuyyD6jz.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dependency-picker-DVuWMrSj.js → dependency-picker-BZN72rrk.js} +1 -1
  29. package/dist/gateway/static/root/assets/{desktop-pet-KbVLtAlO.js → desktop-pet-BtvTIDCi.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-BDlg9g4s.js → desktop-pet-settings-BcyP7Z6v.js} +1 -1
  31. package/dist/gateway/static/root/assets/device-pairing-wizard-Ctbgr50F.js +1 -0
  32. package/dist/gateway/static/root/assets/{directory-picker-path-field-a7xEodzo.js → directory-picker-path-field-DOusKz-O.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-debug-page-CHelH5u_.js → extension-debug-page-Bt4FwsFu.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-page-CrVHmS9-.js → extension-page-0vsxX3FB.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-settings-page-CiMybi0r.js → extension-settings-page-5Pt5_ELc.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-config-swr-DF_HV6NP.js → gateway-config-swr-fQKBHBi1.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-realtime-DMAzNlm-.js → gateway-realtime-DkWCHVzI.js} +1 -1
  38. package/dist/gateway/static/root/assets/gateway-realtime-store-Bx9KCID-.js +1 -0
  39. package/dist/gateway/static/root/assets/gateway-settings-BsVOcmV5.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-startup-retry-B91CBTzO.js → gateway-startup-retry-Cfwxof4k.js} +1 -1
  41. package/dist/gateway/static/root/assets/{highlight-code-AMjU04kR.js → highlight-code-C8eS9949.js} +1 -1
  42. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-8ACAVktj.js → highlighted-body-KQOG7T2V-Cbk7eMlg.js} +1 -1
  43. package/dist/gateway/static/root/assets/home-page-BZDZnmyc.js +2 -0
  44. package/dist/gateway/static/root/assets/{image-generation-api-CVBaWmrV.js → image-generation-api-CAS8QVla.js} +1 -1
  45. package/dist/gateway/static/root/assets/{imports-page-C5IP3e6d.js → imports-page-BCLBYzV1.js} +1 -1
  46. package/dist/gateway/static/root/assets/index-Bys6njTY.js +710 -0
  47. package/dist/gateway/static/root/assets/index-Vsf0bj5e.css +1 -0
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BhU6VYvd.js → keyboard-shortcuts-settings-CM_kt5XN.js} +1 -1
  49. package/dist/gateway/static/root/assets/local-app-workbench-page-Dk87jtcc.js +1 -0
  50. package/dist/gateway/static/root/assets/{local-apps-page-DcP1Bdlk.js → local-apps-page-BTSOChhk.js} +1 -1
  51. package/dist/gateway/static/root/assets/{local-session-drafts-DvmwiLUx.js → local-session-drafts-iGX_6O0O.js} +1 -1
  52. package/dist/gateway/static/root/assets/{locale-store-JogcXC4J.js → locale-store-B7s2Hb35.js} +1 -1
  53. package/dist/gateway/static/root/assets/{logs-page-CS3hcTOq.js → logs-page-D3gVdm8S.js} +2 -2
  54. package/dist/gateway/static/root/assets/management-settings-BQNYFE4J.js +1 -0
  55. package/dist/gateway/static/root/assets/{media-plugins-BnPpcJ2J.js → media-plugins-DYQDjCVQ.js} +1 -1
  56. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-ChweJKTv.js +1 -0
  57. package/dist/gateway/static/root/assets/{messages-RzwPiQNL.js → messages-BYq0cPbn.js} +2 -2
  58. package/dist/gateway/static/root/assets/note-detail-panel-CYKwUCte.js +5 -0
  59. package/dist/gateway/static/root/assets/note-image-lightbox-BTSZb9ZT.js +1 -0
  60. package/dist/gateway/static/root/assets/notes-page-CJ5nhWfL.js +8 -0
  61. package/dist/gateway/static/root/assets/page-context-capture-button-DVn_dU83.js +1 -0
  62. package/dist/gateway/static/root/assets/personal-page-DcW14lqn.js +1 -0
  63. package/dist/gateway/static/root/assets/personal-settings-panel-C16Iqe7X.js +1 -0
  64. package/dist/gateway/static/root/assets/phone-dependencies-card-D3l9uPFM.js +1 -0
  65. package/dist/gateway/static/root/assets/{phone-model-picker-CZoIAQ1j.js → phone-model-picker-DOv38vBn.js} +1 -1
  66. package/dist/gateway/static/root/assets/phone-settings-page-DUHp1q_9.js +1 -0
  67. package/dist/gateway/static/root/assets/plugin-details-dialog-BpfgDlVa.js +1 -0
  68. package/dist/gateway/static/root/assets/{preview-open-alternatives-FGqN-mQx.js → preview-open-alternatives-RlHk76TI.js} +1 -1
  69. package/dist/gateway/static/root/assets/{product-open-page-CwnHLfdL.js → product-open-page-Dh-HqLrE.js} +1 -1
  70. package/dist/gateway/static/root/assets/{product-preview-content-BD6k5hF9.js → product-preview-content-c3K-4DWc.js} +1 -1
  71. package/dist/gateway/static/root/assets/project-detail-page-GD8TxKad.js +7 -0
  72. package/dist/gateway/static/root/assets/projects-page-B8HAt9sD.js +1 -0
  73. package/dist/gateway/static/root/assets/{registry-api-BGqSwITi.js → registry-api-BcfoLEna.js} +1 -1
  74. package/dist/gateway/static/root/assets/remote-access-hub-D3el7lHK.js +1 -0
  75. package/dist/gateway/static/root/assets/{runtime-tools-api-CSm5SpnR.js → runtime-tools-api-DesqGCnE.js} +1 -1
  76. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-q_oswAdV.js → runtime-tools-settings-panel-Dbskk6RG.js} +1 -1
  77. package/dist/gateway/static/root/assets/{schema-form-DoVn5jJK.js → schema-form-CXO1B1k4.js} +1 -1
  78. package/dist/gateway/static/root/assets/{session-api-DTxZyMta.js → session-api-DdQnMwkl.js} +1 -1
  79. package/dist/gateway/static/root/assets/{session-manager-B2HDomj4.js → session-manager-CA1NkTR_.js} +1 -1
  80. package/dist/gateway/static/root/assets/sessions-page-07liaSHH.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-advanced-gate-BGjU8rfN.js +1 -0
  82. package/dist/gateway/static/root/assets/{settings-form-section-Ce8vVv-9.js → settings-form-section-BQxKmbbJ.js} +1 -1
  83. package/dist/gateway/static/root/assets/{settings-page-DP2w3ejC.js → settings-page-DvVMpKiA.js} +1 -1
  84. package/dist/gateway/static/root/assets/{setup-status-panel-ZmlE8jIE.js → setup-status-panel-DKo_VTx-.js} +1 -1
  85. package/dist/gateway/static/root/assets/{share-preview-page-DV4dKrmG.js → share-preview-page-XgZk8Oa1.js} +1 -1
  86. package/dist/gateway/static/root/assets/shares-settings-BODFqK8k.js +1 -0
  87. package/dist/gateway/static/root/assets/{skill-api-DTdejInH.js → skill-api-CV-WT2hj.js} +1 -1
  88. package/dist/gateway/static/root/assets/skill-reload-api-Ce6OUk2C.js +1 -0
  89. package/dist/gateway/static/root/assets/skills-page-B7ehOIML.js +2 -0
  90. package/dist/gateway/static/root/assets/{system-settings-panel-Baxkhov7.js → system-settings-panel-CxJkZRT4.js} +1 -1
  91. package/dist/gateway/static/root/assets/task-detail-page-CxRR0QuW.js +2 -0
  92. package/dist/gateway/static/root/assets/{task-result-evidence-DIGSC4qF.js → task-result-evidence-D-gGKNX9.js} +1 -1
  93. package/dist/gateway/static/root/assets/{tracing-settings-page-BaU8frtc.js → tracing-settings-page-CQw3G-FB.js} +1 -1
  94. package/dist/gateway/static/root/assets/{tunnel-api-BCcOUsqu.js → tunnel-api-B2HnCi0U.js} +1 -1
  95. package/dist/gateway/static/root/assets/{usage-page-BFeIbpbi.js → usage-page-uUEkO38r.js} +1 -1
  96. package/dist/gateway/static/root/assets/{use-autosave-C1X47WVb.js → use-autosave-Dc0nwUpX.js} +1 -1
  97. package/dist/gateway/static/root/assets/user-model-page-ICUutbKL.js +2 -0
  98. package/dist/gateway/static/root/assets/{voice-api-key-field-Bk4DQMTw.js → voice-api-key-field-BSWXZkGa.js} +1 -1
  99. package/dist/gateway/static/root/assets/{voice-config-api-D7xsWrdh.js → voice-config-api-BkUlN7GH.js} +1 -1
  100. package/dist/gateway/static/root/assets/{work-discovery-overlay-B7_NmTB5.js → work-discovery-overlay-H3cdwq3l.js} +1 -1
  101. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CJ_akAvc.js → xopc-cloud-account-card-CvT_W6YS.js} +1 -1
  102. package/dist/gateway/static/root/index.html +14 -14
  103. package/dist/package.js +1 -1
  104. package/dist/src/agent/coding/workspace-revision.js +1 -1
  105. package/dist/src/agent/commands/command-registry.js +1 -1
  106. package/dist/src/agent/memory/context-recovery.d.ts +1 -1
  107. package/dist/src/agent/skills/installer.js +3 -3
  108. package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
  109. package/dist/src/agent/tool-manuals/phone.js +4 -2
  110. package/dist/src/agent/tools/personal-task-tool.d.ts +1 -1
  111. package/dist/src/agent/tools/personal-task-tool.js +23 -21
  112. package/dist/src/agent/tools/phone-use-tool.js +20 -0
  113. package/dist/src/backup/archive.js +2 -1
  114. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  115. package/dist/src/cli/commands/extension-marketplace.js +3 -3
  116. package/dist/src/cli/commands/extension-pack.js +1 -1
  117. package/dist/src/cli/commands/extension.js +2 -2
  118. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  119. package/dist/src/connectors/connected-source-understanding.js +1 -1
  120. package/dist/src/connectors/learning-coordinator.js +1 -1
  121. package/dist/src/extensions/install.js +1 -1
  122. package/dist/src/extensions/update.js +1 -1
  123. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  124. package/dist/src/gateway/hono/routes/connectors.js +7 -7
  125. package/dist/src/gateway/hono/routes/home.js +1 -1
  126. package/dist/src/gateway/hono/routes/phone.js +8 -0
  127. package/dist/src/gateway/hono/routes/public-gateway.js +1 -1
  128. package/dist/src/gateway/service/config-coordinator.js +1 -1
  129. package/dist/src/gateway/service/session-input-coordinator.js +1 -1
  130. package/dist/src/gateway/service.js +7 -7
  131. package/dist/src/infra/unhandled-rejections.js +2 -2
  132. package/dist/src/infra/update-restart.js +1 -1
  133. package/dist/src/infra/update-runner.js +1 -1
  134. package/dist/src/personal-agent/prompts.js +1 -1
  135. package/dist/src/phone/adb-driver.d.ts +6 -2
  136. package/dist/src/phone/adb-driver.js +89 -37
  137. package/dist/src/phone/cloud-adb.js +8 -0
  138. package/dist/src/phone/cloud-scrcpy.d.ts +3 -1
  139. package/dist/src/phone/cloud-scrcpy.js +17 -3
  140. package/dist/src/phone/contracts.d.ts +45 -0
  141. package/dist/src/phone/contracts.js +16 -3
  142. package/dist/src/phone/model-adapter.d.ts +83 -1
  143. package/dist/src/phone/model-adapter.js +75 -17
  144. package/dist/src/phone/reliability.d.ts +7 -0
  145. package/dist/src/phone/reliability.js +66 -0
  146. package/dist/src/phone/runtime.d.ts +8 -0
  147. package/dist/src/phone/runtime.js +179 -11
  148. package/dist/src/phone/scrcpy-text.d.ts +11 -0
  149. package/dist/src/phone/scrcpy-text.js +72 -0
  150. package/dist/src/phone/scrcpy.d.ts +5 -1
  151. package/dist/src/phone/scrcpy.js +48 -3
  152. package/dist/src/storage/sqlite/connection.js +2 -2
  153. package/dist/src/storage/sqlite/offline-access.js +13 -7
  154. package/dist/src/storage/sqlite/schema-errors.d.ts +12 -0
  155. package/dist/src/storage/sqlite/schema-errors.js +21 -3
  156. package/dist/src/storage/sqlite/schema-upgrade.d.ts +4 -0
  157. package/dist/src/storage/sqlite/schema-upgrade.js +78 -0
  158. package/dist/src/storage/sqlite/schema.d.ts +2 -1
  159. package/dist/src/storage/sqlite/schema.js +9 -3
  160. package/dist/src/storage/sqlite/upgrades/203_remove_retired_proactive_contracts.sql +70 -0
  161. package/dist/src/storage/sqlite/upgrades/204_home_intelligence.sql +78 -0
  162. package/dist/src/storage/sqlite/upgrades/205_agent_catalog.sql +66 -0
  163. package/dist/src/storage/sqlite/upgrades/206_home_advice_strategy_version.sql +2 -0
  164. package/dist/src/storage/sqlite/upgrades/207_user_model_policy_contract.sql +121 -0
  165. package/dist/src/storage/sqlite/upgrades/208_automation_management.sql +2 -0
  166. package/dist/src/storage/sqlite/upgrades/209_automation_event_hub.sql +48 -0
  167. package/dist/src/storage/sqlite/upgrades/210_remove_legacy_automation_timeout.sql +14 -0
  168. package/dist/src/storage/sqlite/upgrades/211_automation_result_deliveries.sql +16 -0
  169. package/dist/src/storage/sqlite/upgrades/212_automation_delivery_policy.sql +30 -0
  170. package/dist/src/storage/sqlite/upgrades/213_automation_reliability_contract.sql +188 -0
  171. package/dist/src/storage/sqlite/upgrades/214_ai_usage_ledger.sql +41 -0
  172. package/dist/src/storage/sqlite/upgrades/215_scene_execution_adapters.sql +6 -0
  173. package/dist/src/storage/sqlite/upgrades/216_remove_scene_model_usage.sql +1 -0
  174. package/dist/src/storage/sqlite/upgrades/217_remove_legacy_memory_tables.sql +4 -0
  175. package/dist/src/storage/sqlite/upgrades/218_core_relation_indexes.sql +26 -0
  176. package/dist/src/storage/sqlite/upgrades/219_json_contracts.sql +123 -0
  177. package/dist/src/storage/sqlite/upgrades/220_normalize_timestamps.sql +339 -0
  178. package/dist/src/storage/sqlite/upgrades/221_ai_usage_retention_index.sql +2 -0
  179. package/dist/src/storage/sqlite/upgrades/222_session_config_authority.sql +13 -0
  180. package/dist/src/storage/sqlite/upgrades/223_session_creation_receipts.sql +59 -0
  181. package/dist/src/storage/sqlite/upgrades/224_task_origin_links.sql +8 -0
  182. package/dist/src/storage/sqlite/upgrades/225_task_collaboration.sql +32 -0
  183. package/dist/src/storage/sqlite/upgrades/226_task_main_updates.sql +9 -0
  184. package/dist/src/storage/sqlite/upgrades/227_task_main_update_decisions.sql +8 -0
  185. package/dist/src/storage/sqlite/upgrades/228_task_main_agent_links.sql +14 -0
  186. package/dist/src/storage/sqlite/upgrades/229_task_criterion_reviews.sql +12 -0
  187. package/dist/src/storage/sqlite/upgrades/230_personal_agent_onboarding.sql +8 -0
  188. package/dist/src/storage/sqlite/upgrades/231_task_result_deliveries.sql +32 -0
  189. package/dist/src/storage/sqlite/upgrades/232_personal_requests.sql +28 -0
  190. package/dist/src/storage/sqlite/upgrades/233_observability_usage_links.sql +3 -0
  191. package/dist/src/storage/sqlite/upgrades/234_task_result_reply.sql +14 -0
  192. package/dist/src/storage/sqlite/upgrades/235_personal_conversation_priority.sql +3 -0
  193. package/dist/src/storage/sqlite/upgrades/236_personal_proactivity.sql +53 -0
  194. package/dist/src/storage/sqlite/upgrades/237_personal_strategy_versions.sql +18 -0
  195. package/dist/src/storage/sqlite/upgrades/238_browser_record_replay.sql +45 -0
  196. package/dist/src/storage/sqlite/upgrades/239_clarification_notifications.sql +26 -0
  197. package/dist/src/storage/sqlite/upgrades/240_device_settings.sql +5 -0
  198. package/dist/src/storage/sqlite/upgrades/241_device_grant_audit.sql +13 -0
  199. package/dist/src/storage/sqlite/upgrades/242_cloud_usage_receipts.sql +5 -0
  200. package/dist/src/storage/sqlite/upgrades/243_voice_opening_greetings.sql +12 -0
  201. package/dist/src/storage/sqlite/upgrades/244_device_request_proofs.sql +8 -0
  202. package/dist/src/storage/sqlite/upgrades/245_memory_learning.sql +125 -0
  203. package/dist/src/storage/sqlite/upgrades/246_personal_session_thinking.sql +22 -0
  204. package/dist/src/storage/sqlite/upgrades/247_agent_selection_records.sql +32 -0
  205. package/dist/src/storage/sqlite/upgrades/248_next_turn_suggestions.sql +20 -0
  206. package/dist/src/storage/sqlite/upgrades/249_task_allocations.sql +17 -0
  207. package/dist/src/storage/sqlite/upgrades/250_research_checkpoints.sql +15 -0
  208. package/dist/src/storage/sqlite/upgrades/251_personal_result_reads.sql +40 -0
  209. package/dist/src/storage/sqlite/upgrades/252_task_work_revisions.sql +15 -0
  210. package/dist/src/storage/sqlite/upgrades/253_discussion_processing_recovery.sql +20 -0
  211. package/dist/src/storage/sqlite/upgrades/254_discussion_annotations.sql +17 -0
  212. package/dist/src/storage/sqlite/upgrades/255_discussion_chapter_progress.sql +10 -0
  213. package/dist/src/storage/sqlite/upgrades/256_task_main_update_retries.sql +21 -0
  214. package/dist/src/storage/sqlite/upgrades/257_session_composer_history.sql +11 -0
  215. package/dist/src/storage/sqlite/upgrades/258_task_phase_changes.sql +20 -0
  216. package/dist/src/storage/sqlite/upgrades/259_personal_default_style.sql +10 -0
  217. package/dist/src/storage/sqlite/windows-database-owners.js +33 -28
  218. package/dist/src/tasks/capabilities/relations.d.ts +2 -2
  219. package/dist/src/tui/clipboard-image.js +1 -1
  220. package/dist/src/tui/tui.js +1 -1
  221. package/dist/src/user-context/sources/index.js +1 -1
  222. package/dist/src/utils/index.js +1 -1
  223. package/dist/src/utils/logger/index.js +1 -1
  224. package/dist/src/utils/logger.js +1 -1
  225. package/dist/src/work-discovery/probe.js +1 -1
  226. package/dist/src/work-discovery/service.js +2 -2
  227. package/package.json +5 -5
  228. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-mf0jgEPE.js +0 -1
  229. package/dist/gateway/static/root/assets/agents-CKhZ4UYQ.js +0 -77
  230. package/dist/gateway/static/root/assets/apps-page-BZ_MaQJf.js +0 -1
  231. package/dist/gateway/static/root/assets/automations-workspace-CHUDHNVL.js +0 -8
  232. package/dist/gateway/static/root/assets/browser-automations-page-DStDm9y1.js +0 -3
  233. package/dist/gateway/static/root/assets/browser-settings-page-6I4oetKt.js +0 -3
  234. package/dist/gateway/static/root/assets/capabilities-settings-panel-BQoCPk3x.js +0 -8
  235. package/dist/gateway/static/root/assets/channels-BKf_-Mdt.js +0 -1
  236. package/dist/gateway/static/root/assets/connectors-page-CUBg8spT.js +0 -1
  237. package/dist/gateway/static/root/assets/device-pairing-wizard-PmP_vGem.js +0 -1
  238. package/dist/gateway/static/root/assets/gateway-realtime-store-CoIgC1Al.js +0 -1
  239. package/dist/gateway/static/root/assets/gateway-settings-DnrQ28E2.js +0 -1
  240. package/dist/gateway/static/root/assets/home-page-pTwVME-g.js +0 -2
  241. package/dist/gateway/static/root/assets/index-BLL0wKRZ.css +0 -1
  242. package/dist/gateway/static/root/assets/index-ygkHNYyo.js +0 -710
  243. package/dist/gateway/static/root/assets/local-app-workbench-page-Cwl6EvuX.js +0 -1
  244. package/dist/gateway/static/root/assets/management-settings-DC-Y_-GP.js +0 -1
  245. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-vckgHpON.js +0 -1
  246. package/dist/gateway/static/root/assets/note-detail-panel-C7u4dxEk.js +0 -5
  247. package/dist/gateway/static/root/assets/note-image-lightbox-jvqYtySx.js +0 -1
  248. package/dist/gateway/static/root/assets/notes-page-Bs7F5Hpf.js +0 -8
  249. package/dist/gateway/static/root/assets/page-context-capture-button-DO_yhXS1.js +0 -1
  250. package/dist/gateway/static/root/assets/personal-page-BexL2-PQ.js +0 -1
  251. package/dist/gateway/static/root/assets/personal-settings-panel-BKA4fbYH.js +0 -1
  252. package/dist/gateway/static/root/assets/phone-dependencies-card-ChFtdFhA.js +0 -1
  253. package/dist/gateway/static/root/assets/phone-settings-page-DRyK0nHH.js +0 -1
  254. package/dist/gateway/static/root/assets/plugin-details-dialog-B-N61jJH.js +0 -1
  255. package/dist/gateway/static/root/assets/project-detail-page-DtKmFBml.js +0 -7
  256. package/dist/gateway/static/root/assets/projects-page-CFZIz9mc.js +0 -1
  257. package/dist/gateway/static/root/assets/remote-access-hub-CWEc7W0m.js +0 -1
  258. package/dist/gateway/static/root/assets/sessions-page-BuPqNxpd.js +0 -1
  259. package/dist/gateway/static/root/assets/settings-advanced-gate-QTVDCGJG.js +0 -1
  260. package/dist/gateway/static/root/assets/shares-settings-CtNxWqW-.js +0 -1
  261. package/dist/gateway/static/root/assets/skill-reload-api-Egaf8PqZ.js +0 -1
  262. package/dist/gateway/static/root/assets/skills-page-C6FKxf4J.js +0 -2
  263. package/dist/gateway/static/root/assets/task-detail-page-C77-rpkt.js +0 -2
  264. package/dist/gateway/static/root/assets/user-model-page-u8zY5jea.js +0 -2
@@ -1,13 +1,9 @@
1
- import { windowsDatabaseOwners } from "./windows-database-owners.js";
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { init_windows_database_owners, windowsDatabaseOwners } from "./windows-database-owners.js";
2
3
  import { resolve } from "node:path";
3
4
  import { closeSync, fsyncSync, openSync, readdirSync, readlinkSync, statSync } from "node:fs";
4
5
  import { execFileSync } from "node:child_process";
5
6
  //#region src/storage/sqlite/offline-access.ts
6
- const backupFileSyncOperations = {
7
- open: openSync,
8
- fsync: fsyncSync,
9
- close: closeSync
10
- };
11
7
  /** Windows requires write access on a file handle before FlushFileBuffers/fsync. */
12
8
  function flushBackupFile(backupPath, operations = backupFileSyncOperations) {
13
9
  const fd = operations.open(backupPath, "r+");
@@ -73,5 +69,15 @@ function assertDatabaseOffline(databasePath) {
73
69
  const otherOwners = databaseOwners(databasePath);
74
70
  if (otherOwners.length) throw new Error(`Stop other xopc database processes before backing up: ${otherOwners.join(", ")}`);
75
71
  }
72
+ var backupFileSyncOperations;
73
+ var init_offline_access = __esmMin((() => {
74
+ init_windows_database_owners();
75
+ backupFileSyncOperations = {
76
+ open: openSync,
77
+ fsync: fsyncSync,
78
+ close: closeSync
79
+ };
80
+ }));
76
81
  //#endregion
77
- export { assertDatabaseOffline, flushBackupFile };
82
+ init_offline_access();
83
+ export { assertDatabaseOffline, flushBackupFile, init_offline_access };
@@ -8,3 +8,15 @@ export declare class DatabaseSchemaTooOldError extends Error {
8
8
  readonly minimumVersion: number;
9
9
  constructor(dbVersion: number, minimumVersion: number);
10
10
  }
11
+ export declare class DatabaseSchemaMigrationGapError extends Error {
12
+ readonly dbVersion: number;
13
+ readonly appVersion: number;
14
+ readonly missingVersion: number;
15
+ constructor(dbVersion: number, appVersion: number, missingVersion: number);
16
+ }
17
+ export declare class DatabaseSchemaMigrationFailedError extends Error {
18
+ readonly dbVersion: number;
19
+ readonly appVersion: number;
20
+ readonly backupPath: string | undefined;
21
+ constructor(dbVersion: number, appVersion: number, backupPath: string | undefined, cause: unknown);
22
+ }
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
2
  //#region src/storage/sqlite/schema-errors.ts
3
- var DatabaseSchemaTooNewError, DatabaseSchemaTooOldError;
3
+ var DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, DatabaseSchemaMigrationGapError, DatabaseSchemaMigrationFailedError;
4
4
  var init_schema_errors = __esmMin((() => {
5
5
  DatabaseSchemaTooNewError = class extends Error {
6
6
  dbVersion;
@@ -16,13 +16,31 @@ var init_schema_errors = __esmMin((() => {
16
16
  dbVersion;
17
17
  minimumVersion;
18
18
  constructor(dbVersion, minimumVersion) {
19
- super(`xopc database schema version ${dbVersion} is older than the minimum supported version (${minimumVersion}). Start with a new xopc.db.`);
19
+ super(`xopc database schema version ${dbVersion} is older than the minimum supported version (${minimumVersion}). Keep xopc.db and its WAL/SHM files; use a release with an upgrade path for this database or contact support.`);
20
20
  this.name = "DatabaseSchemaTooOldError";
21
21
  this.dbVersion = dbVersion;
22
22
  this.minimumVersion = minimumVersion;
23
23
  }
24
24
  };
25
+ DatabaseSchemaMigrationGapError = class extends Error {
26
+ constructor(dbVersion, appVersion, missingVersion) {
27
+ super(`xopc database schema version ${dbVersion} requires migration to v${missingVersion}, but that migration is not bundled.`);
28
+ this.dbVersion = dbVersion;
29
+ this.appVersion = appVersion;
30
+ this.missingVersion = missingVersion;
31
+ this.name = "DatabaseSchemaMigrationGapError";
32
+ }
33
+ };
34
+ DatabaseSchemaMigrationFailedError = class extends Error {
35
+ constructor(dbVersion, appVersion, backupPath, cause) {
36
+ super(`SQLite database upgrade from v${dbVersion} to v${appVersion} failed; the upgrade was rolled back. ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
37
+ this.dbVersion = dbVersion;
38
+ this.appVersion = appVersion;
39
+ this.backupPath = backupPath;
40
+ this.name = "DatabaseSchemaMigrationFailedError";
41
+ }
42
+ };
25
43
  }));
26
44
  //#endregion
27
45
  init_schema_errors();
28
- export { DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, init_schema_errors };
46
+ export { DatabaseSchemaMigrationFailedError, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, init_schema_errors };
@@ -0,0 +1,4 @@
1
+ import type { DatabaseSync } from 'node:sqlite';
2
+ export declare const XOPC_DB_MINIMUM_SCHEMA_VERSION = 202;
3
+ /** Keep the complete historical schema and data; retired features are never reactivated. */
4
+ export declare function upgradeXopcDatabase(db: DatabaseSync, fromVersion: number, targetVersion: number): void;
@@ -0,0 +1,78 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { init_sql_assets, readSqliteAsset, resolveSqliteAssetPath } from "./sql-assets.js";
3
+ import { init_schema_version, readSchemaVersion, setSchemaVersion } from "./schema-version.js";
4
+ import { DatabaseSchemaMigrationFailedError, DatabaseSchemaMigrationGapError, init_schema_errors } from "./schema-errors.js";
5
+ import { createLogger } from "../../utils/logger/index.js";
6
+ import { init_logger } from "../../utils/logger.js";
7
+ import { assertDatabaseOffline, flushBackupFile, init_offline_access } from "./offline-access.js";
8
+ import { chmodSync, readdirSync } from "node:fs";
9
+ import { randomUUID } from "node:crypto";
10
+ //#region src/storage/sqlite/schema-upgrade.ts
11
+ /** Keep the complete historical schema and data; retired features are never reactivated. */
12
+ function upgradeXopcDatabase(db, fromVersion, targetVersion) {
13
+ let files;
14
+ try {
15
+ files = readdirSync(resolveSqliteAssetPath("upgrades"));
16
+ } catch (error) {
17
+ if (error.code !== "ENOENT") throw error;
18
+ throw new DatabaseSchemaMigrationGapError(fromVersion, targetVersion, fromVersion + 1);
19
+ }
20
+ const migrations = [];
21
+ for (let version = fromVersion + 1; version <= targetVersion; version++) {
22
+ const matches = files.filter((file) => file.startsWith(`${version}_`) && file.endsWith(".sql"));
23
+ if (matches.length !== 1) throw new DatabaseSchemaMigrationGapError(fromVersion, targetVersion, version);
24
+ migrations.push(readSqliteAsset(`upgrades/${matches[0]}`));
25
+ }
26
+ const databasePath = db.prepare("PRAGMA database_list").all().find((row) => row.name === "main")?.file;
27
+ let backupPath;
28
+ if (databasePath) {
29
+ assertDatabaseOffline(databasePath);
30
+ backupPath = `${databasePath}.pre-upgrade-v${fromVersion}-${randomUUID()}.bak`;
31
+ db.prepare("VACUUM main INTO ?").run(backupPath);
32
+ chmodSync(backupPath, 384);
33
+ flushBackupFile(backupPath);
34
+ log.info({
35
+ path: databasePath,
36
+ backupPath,
37
+ fromVersion,
38
+ targetVersion
39
+ }, "Created pre-upgrade SQLite backup");
40
+ }
41
+ const foreignKeysEnabled = Number(db.prepare("PRAGMA foreign_keys").get()?.foreign_keys) === 1;
42
+ db.exec("PRAGMA foreign_keys = OFF");
43
+ let transactionStarted = false;
44
+ try {
45
+ db.exec("BEGIN IMMEDIATE");
46
+ transactionStarted = true;
47
+ if (readSchemaVersion(db) !== fromVersion) throw new Error("Database version changed during upgrade; retry startup");
48
+ for (const sql of migrations) db.exec(sql);
49
+ if (db.prepare("PRAGMA foreign_key_check").all().length) throw new Error("Database upgrade would violate foreign key integrity");
50
+ if (db.prepare("PRAGMA integrity_check").get()?.integrity_check !== "ok") throw new Error("Database upgrade failed integrity validation");
51
+ setSchemaVersion(db, targetVersion);
52
+ db.exec("COMMIT");
53
+ transactionStarted = false;
54
+ log.info({
55
+ fromVersion,
56
+ targetVersion,
57
+ backupPath
58
+ }, "Upgraded xopc SQLite database");
59
+ } catch (error) {
60
+ if (transactionStarted) db.exec("ROLLBACK");
61
+ throw new DatabaseSchemaMigrationFailedError(fromVersion, targetVersion, backupPath, error);
62
+ } finally {
63
+ if (foreignKeysEnabled) db.exec("PRAGMA foreign_keys = ON");
64
+ }
65
+ }
66
+ var XOPC_DB_MINIMUM_SCHEMA_VERSION, log;
67
+ var init_schema_upgrade = __esmMin((() => {
68
+ init_logger();
69
+ init_offline_access();
70
+ init_schema_errors();
71
+ init_schema_version();
72
+ init_sql_assets();
73
+ XOPC_DB_MINIMUM_SCHEMA_VERSION = 202;
74
+ log = createLogger("Sqlite:Upgrade");
75
+ }));
76
+ //#endregion
77
+ init_schema_upgrade();
78
+ export { XOPC_DB_MINIMUM_SCHEMA_VERSION, init_schema_upgrade, upgradeXopcDatabase };
@@ -2,5 +2,6 @@ import type { DatabaseSync } from 'node:sqlite';
2
2
  export { SCHEMA_META_SCHEMA_VERSION_KEY, readSchemaVersionForTest, readSchemaVersion, setSchemaVersion, ensureSchemaMetaTable } from './schema-version.js';
3
3
  export declare const XOPC_DB_SCHEMA_VERSION = 259;
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 259;
5
- /** Open only the current schema; older databases are never upgraded or interpreted. */
5
+ export { XOPC_DB_MINIMUM_SCHEMA_VERSION } from './schema-upgrade.js';
6
+ /** Initialize fresh databases directly; upgrade supported installed databases transactionally. */
6
7
  export declare function ensureXopcDatabaseSchema(db: DatabaseSync): void;
@@ -4,8 +4,9 @@ import { currentOperationId, init_operation_context } from "../../infra/operatio
4
4
  import { init_sql_assets, readSqliteAsset } from "./sql-assets.js";
5
5
  import { SCHEMA_META_SCHEMA_VERSION_KEY, ensureSchemaMetaTable, init_schema_version, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion } from "./schema-version.js";
6
6
  import { DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, init_schema_errors } from "./schema-errors.js";
7
+ import { XOPC_DB_MINIMUM_SCHEMA_VERSION, init_schema_upgrade, upgradeXopcDatabase } from "./schema-upgrade.js";
7
8
  //#region src/storage/sqlite/schema.ts
8
- /** Open only the current schema; older databases are never upgraded or interpreted. */
9
+ /** Initialize fresh databases directly; upgrade supported installed databases transactionally. */
9
10
  function ensureXopcDatabaseSchema(db) {
10
11
  db.function("xopc_memory_search_text", { deterministic: true }, (value) => memorySearchText(String(value ?? "")));
11
12
  db.function("xopc_operation_id", () => currentOperationId() ?? null);
@@ -14,7 +15,11 @@ function ensureXopcDatabaseSchema(db) {
14
15
  if (!hasMetadata && tables.length) throw new Error("An unversioned database cannot be initialized");
15
16
  const version = hasMetadata ? readSchemaVersion(db) : 0;
16
17
  if (version > 259) throw new DatabaseSchemaTooNewError(version, 259);
17
- if (version > 0 && version < 259) throw new DatabaseSchemaTooOldError(version, 259);
18
+ if (version > 0 && version < 202) throw new DatabaseSchemaTooOldError(version, 202);
19
+ if (version >= 202 && version < 259) {
20
+ upgradeXopcDatabase(db, version, 259);
21
+ return;
22
+ }
18
23
  if (version === 259) return;
19
24
  if (db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name != 'schema_meta' AND name NOT LIKE 'sqlite_%' LIMIT 1").get()) throw new Error("An unversioned database cannot be initialized");
20
25
  db.exec("BEGIN IMMEDIATE");
@@ -34,9 +39,10 @@ var init_schema = __esmMin((() => {
34
39
  init_sql_assets();
35
40
  init_schema_version();
36
41
  init_schema_errors();
42
+ init_schema_upgrade();
37
43
  XOPC_DB_SCHEMA_VERSION = 259;
38
44
  XOPC_DB_BASELINE_SCHEMA_VERSION = 259;
39
45
  }));
40
46
  //#endregion
41
47
  init_schema();
42
- export { SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, ensureSchemaMetaTable, ensureXopcDatabaseSchema, init_schema, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion };
48
+ export { SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_MINIMUM_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, ensureSchemaMetaTable, ensureXopcDatabaseSchema, init_schema, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion };
@@ -0,0 +1,70 @@
1
+ DROP TABLE IF EXISTS relationship_settings;
2
+
3
+ CREATE TABLE context_snapshots_v203 (
4
+ snapshot_id TEXT PRIMARY KEY,
5
+ trace_id TEXT NOT NULL UNIQUE,
6
+ owner_kind TEXT NOT NULL CHECK (owner_kind IN ('task_run', 'task', 'session')),
7
+ owner_id TEXT NOT NULL,
8
+ conversation_id TEXT,
9
+ query TEXT NOT NULL,
10
+ selected_items_json TEXT NOT NULL DEFAULT '[]',
11
+ rejected_items_json TEXT NOT NULL DEFAULT '[]',
12
+ consent_requests_json TEXT NOT NULL DEFAULT '[]',
13
+ relationship_policy_json TEXT NOT NULL DEFAULT '{}',
14
+ estimated_tokens INTEGER NOT NULL DEFAULT 0,
15
+ allocation_json TEXT,
16
+ authorization_snapshot_json TEXT NOT NULL DEFAULT '{}',
17
+ content_hash TEXT,
18
+ created_at INTEGER NOT NULL,
19
+ FOREIGN KEY (conversation_id) REFERENCES sessions(conversation_id) ON DELETE SET NULL
20
+ );
21
+
22
+ INSERT INTO context_snapshots_v203
23
+ SELECT * FROM context_snapshots WHERE owner_kind <> 'proactive_run';
24
+
25
+ DROP TABLE context_snapshots;
26
+ ALTER TABLE context_snapshots_v203 RENAME TO context_snapshots;
27
+
28
+ CREATE INDEX idx_context_snapshots_owner
29
+ ON context_snapshots(owner_kind, owner_id, created_at DESC);
30
+ CREATE INDEX idx_context_snapshots_session
31
+ ON context_snapshots(conversation_id, created_at DESC);
32
+
33
+ CREATE TABLE collaboration_rules_v203 (
34
+ rule_id TEXT PRIMARY KEY,
35
+ principal_id TEXT NOT NULL,
36
+ category TEXT NOT NULL CHECK (category IN ('communication', 'execution', 'boundary', 'routine', 'initiative')),
37
+ status TEXT NOT NULL CHECK (status IN ('active', 'disabled', 'archived')),
38
+ priority INTEGER NOT NULL DEFAULT 100,
39
+ scope_type TEXT NOT NULL CHECK (scope_type IN ('global', 'workspace', 'project', 'session')),
40
+ scope_id TEXT,
41
+ conditions_json TEXT NOT NULL DEFAULT '{}',
42
+ current_revision_id TEXT NOT NULL REFERENCES collaboration_rule_revisions(revision_id)
43
+ DEFERRABLE INITIALLY DEFERRED,
44
+ created_at INTEGER NOT NULL,
45
+ updated_at INTEGER NOT NULL
46
+ );
47
+
48
+ INSERT INTO collaboration_rules_v203 (
49
+ rule_id, principal_id, category, status, priority, scope_type, scope_id,
50
+ conditions_json, current_revision_id, created_at, updated_at
51
+ )
52
+ SELECT
53
+ rule_id,
54
+ principal_id,
55
+ CASE category WHEN 'proactive' THEN 'initiative' ELSE category END,
56
+ status,
57
+ priority,
58
+ scope_type,
59
+ scope_id,
60
+ conditions_json,
61
+ current_revision_id,
62
+ created_at,
63
+ updated_at
64
+ FROM collaboration_rules;
65
+
66
+ DROP TABLE collaboration_rules;
67
+ ALTER TABLE collaboration_rules_v203 RENAME TO collaboration_rules;
68
+
69
+ CREATE INDEX idx_collaboration_rules_principal_status
70
+ ON collaboration_rules(principal_id, status, priority, updated_at DESC);
@@ -0,0 +1,78 @@
1
+ CREATE TABLE home_advice_generations (
2
+ generation_id TEXT PRIMARY KEY,
3
+ owner_id TEXT NOT NULL,
4
+ workspace_id TEXT NOT NULL,
5
+ idempotency_key TEXT NOT NULL,
6
+ status TEXT NOT NULL CHECK(status IN ('queued', 'running', 'succeeded', 'skipped', 'retry_wait', 'failed', 'cancelled')),
7
+ reasons_json TEXT NOT NULL DEFAULT '[]' CHECK(json_valid(reasons_json)),
8
+ requested_at INTEGER NOT NULL,
9
+ started_at INTEGER,
10
+ completed_at INTEGER,
11
+ retry_at INTEGER,
12
+ lease_owner TEXT,
13
+ lease_until INTEGER,
14
+ lease_epoch INTEGER NOT NULL DEFAULT 0,
15
+ attempt INTEGER NOT NULL DEFAULT 0,
16
+ dirty_after_start INTEGER NOT NULL DEFAULT 0 CHECK(dirty_after_start IN (0, 1)),
17
+ snapshot_hash TEXT,
18
+ evidence_ids_json TEXT NOT NULL DEFAULT '[]' CHECK(json_valid(evidence_ids_json)),
19
+ result_json TEXT CHECK(result_json IS NULL OR json_valid(result_json)),
20
+ model_ref TEXT,
21
+ input_tokens INTEGER,
22
+ output_tokens INTEGER,
23
+ estimated_cost_usd REAL,
24
+ outcome_reason TEXT,
25
+ error_code TEXT
26
+ );
27
+
28
+ CREATE UNIQUE INDEX idx_home_advice_generation_idempotency
29
+ ON home_advice_generations(owner_id, workspace_id, idempotency_key);
30
+ CREATE UNIQUE INDEX idx_home_advice_generation_active
31
+ ON home_advice_generations(owner_id, workspace_id)
32
+ WHERE status IN ('queued', 'running', 'retry_wait');
33
+ CREATE INDEX idx_home_advice_generation_claim
34
+ ON home_advice_generations(status, retry_at, requested_at);
35
+ CREATE INDEX idx_home_advice_generation_latest
36
+ ON home_advice_generations(owner_id, workspace_id, completed_at DESC);
37
+
38
+ CREATE TABLE home_opportunity_projections (
39
+ opportunity_id TEXT PRIMARY KEY,
40
+ generation_id TEXT NOT NULL REFERENCES home_advice_generations(generation_id) ON DELETE CASCADE,
41
+ owner_id TEXT NOT NULL,
42
+ workspace_id TEXT NOT NULL,
43
+ rank INTEGER NOT NULL CHECK(rank BETWEEN 0 AND 2),
44
+ kind TEXT NOT NULL CHECK(kind IN ('project_next_step', 'delivery_risk', 'meeting_prep', 'commitment_follow_up', 'automation_candidate')),
45
+ project_id TEXT,
46
+ dedupe_key TEXT NOT NULL,
47
+ content_json TEXT NOT NULL CHECK(json_valid(content_json)),
48
+ evidence_refs_json TEXT NOT NULL DEFAULT '[]' CHECK(json_valid(evidence_refs_json)),
49
+ snapshot_hash TEXT NOT NULL,
50
+ state TEXT NOT NULL CHECK(state IN ('active', 'snoozed', 'accepted', 'discussing', 'dismissed', 'expired', 'superseded')),
51
+ revision INTEGER NOT NULL DEFAULT 1 CHECK(revision > 0),
52
+ created_at INTEGER NOT NULL,
53
+ updated_at INTEGER NOT NULL,
54
+ expires_at INTEGER NOT NULL,
55
+ snoozed_until INTEGER,
56
+ resolution_kind TEXT CHECK(resolution_kind IS NULL OR resolution_kind IN ('session', 'task', 'scene')),
57
+ resolution_ref TEXT
58
+ );
59
+
60
+ CREATE UNIQUE INDEX idx_home_opportunity_active_dedupe
61
+ ON home_opportunity_projections(owner_id, workspace_id, dedupe_key)
62
+ WHERE state IN ('active', 'snoozed');
63
+ CREATE INDEX idx_home_opportunity_visible
64
+ ON home_opportunity_projections(owner_id, workspace_id, state, rank, expires_at);
65
+
66
+ CREATE TABLE home_opportunity_feedback (
67
+ feedback_id TEXT PRIMARY KEY,
68
+ opportunity_id TEXT NOT NULL REFERENCES home_opportunity_projections(opportunity_id) ON DELETE CASCADE,
69
+ idempotency_key TEXT NOT NULL UNIQUE,
70
+ kind TEXT NOT NULL CHECK(kind IN ('started', 'discussed', 'already_done', 'irrelevant', 'too_early', 'source_incorrect', 'less_like_this', 'snoozed')),
71
+ reason_code TEXT,
72
+ note TEXT,
73
+ scope_json TEXT NOT NULL DEFAULT '{}' CHECK(json_valid(scope_json)),
74
+ created_at INTEGER NOT NULL
75
+ );
76
+
77
+ CREATE INDEX idx_home_opportunity_feedback_item
78
+ ON home_opportunity_feedback(opportunity_id, created_at DESC);
@@ -0,0 +1,66 @@
1
+ CREATE TABLE agent_catalog_settings (
2
+ singleton_id INTEGER PRIMARY KEY CHECK(singleton_id = 1),
3
+ default_agent_id TEXT NOT NULL REFERENCES agents(id),
4
+ defaults_json TEXT NOT NULL CHECK(json_valid(defaults_json)),
5
+ revision INTEGER NOT NULL CHECK(revision > 0),
6
+ created_at INTEGER NOT NULL,
7
+ updated_at INTEGER NOT NULL
8
+ );
9
+
10
+ CREATE TABLE agents (
11
+ id TEXT PRIMARY KEY,
12
+ enabled INTEGER NOT NULL CHECK(enabled IN (0, 1)),
13
+ workspace_override TEXT,
14
+ profile_json TEXT CHECK(profile_json IS NULL OR json_valid(profile_json)),
15
+ overrides_json TEXT NOT NULL CHECK(json_valid(overrides_json)),
16
+ provisioning_state TEXT NOT NULL CHECK(provisioning_state IN ('pending', 'ready', 'error')),
17
+ provisioning_error TEXT,
18
+ revision INTEGER NOT NULL CHECK(revision > 0),
19
+ created_at INTEGER NOT NULL,
20
+ updated_at INTEGER NOT NULL,
21
+ deleted_at INTEGER
22
+ );
23
+
24
+ CREATE INDEX idx_agents_available ON agents(enabled, provisioning_state, deleted_at, id);
25
+
26
+ CREATE TABLE agent_bindings (
27
+ id TEXT PRIMARY KEY,
28
+ agent_id TEXT NOT NULL REFERENCES agents(id),
29
+ position INTEGER NOT NULL CHECK(position >= 0),
30
+ rule_json TEXT NOT NULL CHECK(json_valid(rule_json)),
31
+ revision INTEGER NOT NULL CHECK(revision > 0),
32
+ created_at INTEGER NOT NULL,
33
+ updated_at INTEGER NOT NULL,
34
+ UNIQUE(position)
35
+ );
36
+
37
+ CREATE INDEX idx_agent_bindings_agent ON agent_bindings(agent_id, position);
38
+
39
+ CREATE TABLE agent_surface_defaults (
40
+ surface TEXT PRIMARY KEY,
41
+ agent_id TEXT NOT NULL REFERENCES agents(id),
42
+ revision INTEGER NOT NULL CHECK(revision > 0),
43
+ updated_at INTEGER NOT NULL
44
+ );
45
+
46
+ CREATE TABLE agent_provisioning_jobs (
47
+ agent_id TEXT PRIMARY KEY REFERENCES agents(id) ON DELETE CASCADE,
48
+ operation TEXT NOT NULL CHECK(operation IN ('provision', 'purge')),
49
+ state TEXT NOT NULL CHECK(state IN ('pending', 'running', 'failed')),
50
+ attempts INTEGER NOT NULL DEFAULT 0 CHECK(attempts >= 0),
51
+ last_error TEXT,
52
+ created_at INTEGER NOT NULL,
53
+ updated_at INTEGER NOT NULL
54
+ );
55
+
56
+ CREATE TABLE application_migrations (
57
+ id TEXT PRIMARY KEY,
58
+ state TEXT NOT NULL,
59
+ source_digest TEXT,
60
+ source_backup_path TEXT,
61
+ database_backup_path TEXT,
62
+ error_json TEXT CHECK(error_json IS NULL OR json_valid(error_json)),
63
+ started_at INTEGER NOT NULL,
64
+ completed_at INTEGER,
65
+ updated_at INTEGER NOT NULL
66
+ );
@@ -0,0 +1,2 @@
1
+ ALTER TABLE home_advice_generations
2
+ ADD COLUMN strategy_version TEXT NOT NULL DEFAULT 'home-v1';
@@ -0,0 +1,121 @@
1
+ ALTER TABLE user_assertions ADD COLUMN domain TEXT NOT NULL DEFAULT 'identity'
2
+ CHECK(domain IN (
3
+ 'identity', 'life_history', 'health', 'emotion', 'personality', 'cognition',
4
+ 'values', 'motivation', 'goals', 'capabilities', 'behavior', 'preferences',
5
+ 'relationships', 'resources_constraints', 'environment', 'digital_life'
6
+ ));
7
+ ALTER TABLE user_assertions ADD COLUMN model_layer TEXT NOT NULL DEFAULT 'fact'
8
+ CHECK(model_layer IN ('fact', 'pattern', 'interpretation'));
9
+ ALTER TABLE user_assertions ADD COLUMN sensitivity_categories_json TEXT NOT NULL DEFAULT '[]'
10
+ CHECK(json_valid(sensitivity_categories_json));
11
+ ALTER TABLE user_assertions ADD COLUMN purpose_ids_json TEXT NOT NULL DEFAULT '["personalization"]'
12
+ CHECK(json_valid(purpose_ids_json));
13
+ ALTER TABLE user_assertions ADD COLUMN allowed_uses_json TEXT NOT NULL DEFAULT '["answer","rank","recommend"]'
14
+ CHECK(json_valid(allowed_uses_json));
15
+ ALTER TABLE user_assertions ADD COLUMN allowed_agent_ids_json TEXT CHECK(allowed_agent_ids_json IS NULL OR json_valid(allowed_agent_ids_json));
16
+ ALTER TABLE user_assertions ADD COLUMN consent_receipt_id TEXT;
17
+ ALTER TABLE user_assertions ADD COLUMN support_count INTEGER NOT NULL DEFAULT 0 CHECK(support_count >= 0);
18
+ ALTER TABLE user_assertions ADD COLUMN independent_source_count INTEGER NOT NULL DEFAULT 0 CHECK(independent_source_count >= 0);
19
+ ALTER TABLE user_assertions ADD COLUMN last_supported_at INTEGER;
20
+ ALTER TABLE user_assertions ADD COLUMN delete_after INTEGER;
21
+
22
+ UPDATE user_assertions SET
23
+ domain = CASE kind
24
+ WHEN 'identity' THEN 'identity'
25
+ WHEN 'preference' THEN 'preferences'
26
+ WHEN 'value' THEN 'values'
27
+ WHEN 'routine' THEN 'behavior'
28
+ WHEN 'capability' THEN 'capabilities'
29
+ WHEN 'relationship' THEN 'relationships'
30
+ WHEN 'current_state' THEN 'environment'
31
+ ELSE 'cognition'
32
+ END,
33
+ model_layer = CASE
34
+ WHEN authority = 'user_explicit' OR kind = 'current_state' THEN 'fact'
35
+ WHEN kind = 'derived_insight' THEN 'interpretation'
36
+ ELSE 'pattern'
37
+ END,
38
+ support_count = (
39
+ SELECT COUNT(*) FROM user_assertion_evidence evidence
40
+ WHERE evidence.assertion_id = user_assertions.assertion_id AND evidence.relation = 'supports'
41
+ ),
42
+ independent_source_count = (
43
+ SELECT COUNT(DISTINCT COALESCE(context.source_instance_id, context.source_type || ':' || context.source_ref))
44
+ FROM user_assertion_evidence evidence
45
+ JOIN context_evidence context ON context.evidence_id = evidence.evidence_id
46
+ WHERE evidence.assertion_id = user_assertions.assertion_id AND evidence.relation = 'supports'
47
+ ),
48
+ last_supported_at = (
49
+ SELECT MAX(context.observed_at)
50
+ FROM user_assertion_evidence evidence
51
+ JOIN context_evidence context ON context.evidence_id = evidence.evidence_id
52
+ WHERE evidence.assertion_id = user_assertions.assertion_id AND evidence.relation = 'supports'
53
+ );
54
+
55
+ CREATE TABLE understanding_consent_receipts (
56
+ receipt_id TEXT PRIMARY KEY,
57
+ grant_id TEXT NOT NULL REFERENCES understanding_source_grants(grant_id) ON DELETE CASCADE,
58
+ purposes_json TEXT NOT NULL CHECK(json_valid(purposes_json)),
59
+ allowed_domains_json TEXT NOT NULL CHECK(json_valid(allowed_domains_json)),
60
+ denied_domains_json TEXT NOT NULL DEFAULT '[]' CHECK(json_valid(denied_domains_json)),
61
+ allowed_fields_json TEXT NOT NULL CHECK(json_valid(allowed_fields_json)),
62
+ access_mode TEXT NOT NULL CHECK(access_mode IN ('once', 'continuous')),
63
+ lookback_days INTEGER NOT NULL CHECK(lookback_days >= 0),
64
+ raw_retention_days INTEGER NOT NULL CHECK(raw_retention_days >= 0),
65
+ processing_policy TEXT NOT NULL CHECK(processing_policy IN ('local_only', 'remote_allowed')),
66
+ allowed_agent_ids_json TEXT CHECK(allowed_agent_ids_json IS NULL OR json_valid(allowed_agent_ids_json)),
67
+ disclosure_version TEXT NOT NULL,
68
+ granted_at INTEGER NOT NULL,
69
+ revoked_at INTEGER
70
+ );
71
+
72
+ CREATE INDEX idx_understanding_consent_receipts_grant
73
+ ON understanding_consent_receipts(grant_id, granted_at DESC);
74
+ CREATE UNIQUE INDEX idx_understanding_consent_receipts_active
75
+ ON understanding_consent_receipts(grant_id) WHERE revoked_at IS NULL;
76
+
77
+ CREATE TABLE user_model_observations (
78
+ observation_id TEXT PRIMARY KEY,
79
+ principal_id TEXT NOT NULL,
80
+ domain TEXT NOT NULL CHECK(domain IN (
81
+ 'identity', 'life_history', 'health', 'emotion', 'personality', 'cognition',
82
+ 'values', 'motivation', 'goals', 'capabilities', 'behavior', 'preferences',
83
+ 'relationships', 'resources_constraints', 'environment', 'digital_life'
84
+ )),
85
+ observation_type TEXT NOT NULL,
86
+ subject_type TEXT NOT NULL CHECK(subject_type IN ('user', 'person', 'goal', 'project', 'topic')),
87
+ subject_id TEXT NOT NULL,
88
+ value_json TEXT NOT NULL CHECK(json_valid(value_json)),
89
+ context_json TEXT NOT NULL DEFAULT '{}' CHECK(json_valid(context_json)),
90
+ sensitivity_categories_json TEXT NOT NULL DEFAULT '[]' CHECK(json_valid(sensitivity_categories_json)),
91
+ owner_attribution TEXT NOT NULL CHECK(owner_attribution IN ('user', 'other', 'shared', 'unknown')),
92
+ observed_at INTEGER NOT NULL,
93
+ valid_to INTEGER,
94
+ delete_after INTEGER,
95
+ source_grant_id TEXT REFERENCES understanding_source_grants(grant_id) ON DELETE CASCADE,
96
+ source_item_id TEXT,
97
+ evidence_id TEXT REFERENCES context_evidence(evidence_id) ON DELETE CASCADE,
98
+ content_hash TEXT NOT NULL,
99
+ created_at INTEGER NOT NULL,
100
+ UNIQUE(principal_id, content_hash)
101
+ );
102
+
103
+ CREATE INDEX idx_user_model_observations_domain_time
104
+ ON user_model_observations(principal_id, domain, observed_at DESC);
105
+ CREATE INDEX idx_user_model_observations_expiry
106
+ ON user_model_observations(delete_after) WHERE delete_after IS NOT NULL;
107
+ CREATE INDEX idx_user_model_observations_source
108
+ ON user_model_observations(source_grant_id, source_item_id);
109
+
110
+ CREATE TABLE user_assertion_edges (
111
+ from_assertion_id TEXT NOT NULL REFERENCES user_assertions(assertion_id) ON DELETE CASCADE,
112
+ to_assertion_id TEXT NOT NULL REFERENCES user_assertions(assertion_id) ON DELETE CASCADE,
113
+ relation TEXT NOT NULL CHECK(relation IN ('supports', 'contradicts', 'derived_from', 'specializes')),
114
+ confidence REAL NOT NULL CHECK(confidence >= 0 AND confidence <= 1),
115
+ created_at INTEGER NOT NULL,
116
+ PRIMARY KEY(from_assertion_id, to_assertion_id, relation),
117
+ CHECK(from_assertion_id <> to_assertion_id)
118
+ );
119
+
120
+ CREATE INDEX idx_user_assertion_edges_to
121
+ ON user_assertion_edges(to_assertion_id, relation);
@@ -0,0 +1,2 @@
1
+ ALTER TABLE automations ADD COLUMN management_json TEXT
2
+ CHECK(management_json IS NULL OR json_valid(management_json));
@@ -0,0 +1,48 @@
1
+ CREATE TABLE automation_events (
2
+ event_id TEXT PRIMARY KEY,
3
+ event_type TEXT NOT NULL,
4
+ schema_version INTEGER NOT NULL DEFAULT 1,
5
+ source TEXT NOT NULL,
6
+ subject_kind TEXT,
7
+ subject_id TEXT,
8
+ occurred_at_ms INTEGER NOT NULL,
9
+ ingested_at_ms INTEGER NOT NULL,
10
+ correlation_id TEXT NOT NULL,
11
+ causation_id TEXT,
12
+ root_event_id TEXT NOT NULL,
13
+ chain_depth INTEGER NOT NULL DEFAULT 0 CHECK(chain_depth BETWEEN 0 AND 32),
14
+ dedupe_key TEXT,
15
+ trust TEXT NOT NULL CHECK(trust IN ('system', 'user', 'connector', 'untrusted_webhook')),
16
+ payload_json TEXT NOT NULL,
17
+ projected_at_ms INTEGER,
18
+ projection_attempts INTEGER NOT NULL DEFAULT 0,
19
+ projection_error TEXT
20
+ );
21
+
22
+ CREATE UNIQUE INDEX idx_automation_events_source_dedupe
23
+ ON automation_events(source, dedupe_key)
24
+ WHERE dedupe_key IS NOT NULL;
25
+
26
+ CREATE INDEX idx_automation_events_projection
27
+ ON automation_events(projected_at_ms, ingested_at_ms);
28
+
29
+ CREATE TABLE automation_event_deliveries (
30
+ event_id TEXT NOT NULL,
31
+ automation_id TEXT NOT NULL,
32
+ status TEXT NOT NULL CHECK(status IN ('pending', 'queued', 'completed', 'failed', 'cancelled', 'skipped')),
33
+ run_id TEXT,
34
+ attempts INTEGER NOT NULL DEFAULT 0,
35
+ next_attempt_at_ms INTEGER NOT NULL,
36
+ last_error TEXT,
37
+ created_at_ms INTEGER NOT NULL,
38
+ updated_at_ms INTEGER NOT NULL,
39
+ PRIMARY KEY(event_id, automation_id),
40
+ FOREIGN KEY(event_id) REFERENCES automation_events(event_id) ON DELETE CASCADE
41
+ );
42
+
43
+ CREATE UNIQUE INDEX idx_automation_event_deliveries_run
44
+ ON automation_event_deliveries(run_id)
45
+ WHERE run_id IS NOT NULL;
46
+
47
+ CREATE INDEX idx_automation_event_deliveries_pending
48
+ ON automation_event_deliveries(status, next_attempt_at_ms, created_at_ms);
@@ -0,0 +1,14 @@
1
+ UPDATE automations
2
+ SET reliability_json = json_remove(
3
+ json_set(
4
+ reliability_json,
5
+ '$.executionTimeoutSeconds',
6
+ COALESCE(
7
+ json_extract(reliability_json, '$.executionTimeoutSeconds'),
8
+ json_extract(reliability_json, '$.timeoutSeconds')
9
+ )
10
+ ),
11
+ '$.timeoutSeconds'
12
+ )
13
+ WHERE reliability_json IS NOT NULL
14
+ AND json_type(reliability_json, '$.timeoutSeconds') IS NOT NULL;
@@ -0,0 +1,16 @@
1
+ CREATE TABLE automation_result_deliveries (
2
+ run_id TEXT NOT NULL,
3
+ destination_key TEXT NOT NULL,
4
+ kind TEXT NOT NULL,
5
+ status TEXT NOT NULL CHECK(status IN ('pending', 'delivering', 'delivered', 'failed')),
6
+ config_json TEXT NOT NULL,
7
+ attempts INTEGER NOT NULL DEFAULT 0,
8
+ next_attempt_at_ms INTEGER NOT NULL,
9
+ last_error TEXT,
10
+ created_at_ms INTEGER NOT NULL,
11
+ updated_at_ms INTEGER NOT NULL,
12
+ PRIMARY KEY(run_id, destination_key)
13
+ );
14
+
15
+ CREATE INDEX idx_automation_result_deliveries_pending
16
+ ON automation_result_deliveries(status, next_attempt_at_ms, created_at_ms);