@xopcai/xopc 0.0.414 → 0.0.416

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 (359) hide show
  1. package/dist/browser-ext/_locales/en/messages.json +4 -1
  2. package/dist/browser-ext/_locales/zh_CN/messages.json +4 -1
  3. package/dist/browser-ext/dist/assets/{page-context-MuzjMBlJ.js → page-context-CVvmTWZb.js} +33 -9
  4. package/dist/browser-ext/dist/background.js +39 -10
  5. package/dist/browser-ext/dist/sidepanel.html +1 -1
  6. package/dist/browser-ext/dist/sidepanel.js +22 -3
  7. package/dist/browser-ext/manifest.json +1 -1
  8. package/dist/extensions/telegram/xopc.extension.json +1 -1
  9. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-ClobpdW3.js → agent-avatar-dicebear-CufU7cqe.js} +1 -1
  10. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DHDAcss8.js +1 -0
  11. package/dist/gateway/static/root/assets/agents-BV3dAoa0.js +77 -0
  12. package/dist/gateway/static/root/assets/{agents-admin-api-CeBkHnl8.js → agents-admin-api-B1p-ghg9.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-CLunLNGp.js → app-management-settings-panel-D4-n1uBg.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-DBEgoE9g.js → appearance-settings-Cgn4eNsX.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-BOYzD7Zz.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-JElK4Goq.js → archive-plugin-B4btCsiV.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automations-page-CZ0UqwyU.js → automations-page-yb1EL_3N.js} +1 -1
  18. package/dist/gateway/static/root/assets/automations-workspace-J7LJ4RuV.js +8 -0
  19. package/dist/gateway/static/root/assets/{binary-plugins-CXFawow6.js → binary-plugins-DQT9e258.js} +1 -1
  20. package/dist/gateway/static/root/assets/{block-editor-BoduwSYI.js → block-editor-B50rU9tL.js} +30 -30
  21. package/dist/gateway/static/root/assets/{browser-automation-inputs-D1pDgMJu.js → browser-automation-inputs-D6AccXaA.js} +1 -1
  22. package/dist/gateway/static/root/assets/browser-automations-page-BiQz6lJA.js +3 -0
  23. package/dist/gateway/static/root/assets/browser-settings-page-W9kuxBbE.js +3 -0
  24. package/dist/gateway/static/root/assets/{capabilities-Bpeh6E22.js → capabilities-BlxF36t-.js} +1 -1
  25. package/dist/gateway/static/root/assets/capabilities-page-iXe87MdG.js +2 -0
  26. package/dist/gateway/static/root/assets/capabilities-settings-panel-CRLSXe7Z.js +8 -0
  27. package/dist/gateway/static/root/assets/{capability-header-actions-BasrAWA0.js → capability-header-actions-BMnbzHms.js} +1 -1
  28. package/dist/gateway/static/root/assets/channels-CrRJkOKX.js +1 -0
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-CwQbzcZ_.js → chat-terminal-dock-Bd3af4gL.js} +2 -2
  30. package/dist/gateway/static/root/assets/{computer-settings-page-DNWeJKfF.js → computer-settings-page-DXfqy7xh.js} +1 -1
  31. package/dist/gateway/static/root/assets/{connector-service-page-CxHgC5RM.js → connector-service-page-B-cw0CPU.js} +1 -1
  32. package/dist/gateway/static/root/assets/connectors-page-DbFxc0Fd.js +1 -0
  33. package/dist/gateway/static/root/assets/{date-picker-CXxLbLJb.js → date-picker-CqzXevH6.js} +1 -1
  34. package/dist/gateway/static/root/assets/{dependency-picker-DVuWMrSj.js → dependency-picker-pgT4Gyaf.js} +1 -1
  35. package/dist/gateway/static/root/assets/{desktop-pet-settings-BDlg9g4s.js → desktop-pet-settings-Dy_-i2L8.js} +1 -1
  36. package/dist/gateway/static/root/assets/{desktop-pet-KbVLtAlO.js → desktop-pet-zICeqw9c.js} +1 -1
  37. package/dist/gateway/static/root/assets/device-pairing-wizard-ByGbxqkg.js +1 -0
  38. package/dist/gateway/static/root/assets/{directory-picker-path-field-a7xEodzo.js → directory-picker-path-field-C-aQ7qoM.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-debug-page-CHelH5u_.js → extension-debug-page-2NwpYkS5.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-page-CrVHmS9-.js → extension-page-y9J0z7_Q.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-settings-page-CiMybi0r.js → extension-settings-page-BtowusUh.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-config-swr-DF_HV6NP.js → gateway-config-swr-fQKBHBi1.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-realtime-C52ghnBK.js +1 -0
  44. package/dist/gateway/static/root/assets/gateway-realtime-store-Bx9KCID-.js +1 -0
  45. package/dist/gateway/static/root/assets/gateway-settings-BYSKzUMR.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-startup-retry-B91CBTzO.js → gateway-startup-retry-Cfwxof4k.js} +1 -1
  47. package/dist/gateway/static/root/assets/highlight-code-Cz6eeDH5.js +1 -0
  48. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-8ACAVktj.js → highlighted-body-KQOG7T2V-BiAa8HKC.js} +1 -1
  49. package/dist/gateway/static/root/assets/home-page-Cd1BjYHj.js +2 -0
  50. package/dist/gateway/static/root/assets/{image-generation-api-CVBaWmrV.js → image-generation-api-gBFro48x.js} +1 -1
  51. package/dist/gateway/static/root/assets/{imports-page-C5IP3e6d.js → imports-page-BZQpXgjj.js} +1 -1
  52. package/dist/gateway/static/root/assets/index-Cy16gQST.css +1 -0
  53. package/dist/gateway/static/root/assets/index-DRyGCING.js +710 -0
  54. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BhU6VYvd.js → keyboard-shortcuts-settings-CYunR34k.js} +1 -1
  55. package/dist/gateway/static/root/assets/local-app-workbench-page-B_Ac1lly.js +1 -0
  56. package/dist/gateway/static/root/assets/{local-apps-page-DcP1Bdlk.js → local-apps-page-w-J5bY02.js} +1 -1
  57. package/dist/gateway/static/root/assets/{local-session-drafts-DvmwiLUx.js → local-session-drafts-iGX_6O0O.js} +1 -1
  58. package/dist/gateway/static/root/assets/{locale-store-JogcXC4J.js → locale-store-B7s2Hb35.js} +1 -1
  59. package/dist/gateway/static/root/assets/logs-page-Dnjvvx2i.js +2 -0
  60. package/dist/gateway/static/root/assets/management-settings-w1EDwgLW.js +1 -0
  61. package/dist/gateway/static/root/assets/{media-plugins-BnPpcJ2J.js → media-plugins-CIx1koXw.js} +1 -1
  62. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DISkHmEC.js +1 -0
  63. package/dist/gateway/static/root/assets/{messages-RzwPiQNL.js → messages-BYq0cPbn.js} +2 -2
  64. package/dist/gateway/static/root/assets/note-detail-panel-CNkxMTFU.js +5 -0
  65. package/dist/gateway/static/root/assets/note-image-lightbox-D5GH2wuC.js +1 -0
  66. package/dist/gateway/static/root/assets/notes-page-DZgKqFBG.js +8 -0
  67. package/dist/gateway/static/root/assets/page-context-capture-button-DusR2Itk.js +1 -0
  68. package/dist/gateway/static/root/assets/personal-page-CR5JFkQ9.js +1 -0
  69. package/dist/gateway/static/root/assets/personal-settings-panel-B7undvlr.js +1 -0
  70. package/dist/gateway/static/root/assets/phone-model-picker-fWDltRUJ.js +1 -0
  71. package/dist/gateway/static/root/assets/phone-settings-page-CsOirAiy.js +1 -0
  72. package/dist/gateway/static/root/assets/plugin-details-dialog-BOBVIB3j.js +1 -0
  73. package/dist/gateway/static/root/assets/{preview-open-alternatives-FGqN-mQx.js → preview-open-alternatives-CMxjsKSw.js} +1 -1
  74. package/dist/gateway/static/root/assets/{product-open-page-CwnHLfdL.js → product-open-page-CrlyJx5M.js} +1 -1
  75. package/dist/gateway/static/root/assets/{product-preview-content-BD6k5hF9.js → product-preview-content-B-Jhzi7W.js} +1 -1
  76. package/dist/gateway/static/root/assets/project-detail-page-DoYUbtcI.js +7 -0
  77. package/dist/gateway/static/root/assets/projects-page-xGQd9oAZ.js +1 -0
  78. package/dist/gateway/static/root/assets/refresh-cw-BRlGaq2w.js +1 -0
  79. package/dist/gateway/static/root/assets/{registry-api-BGqSwITi.js → registry-api-BcfoLEna.js} +1 -1
  80. package/dist/gateway/static/root/assets/remote-access-hub-Gs0Xkws9.js +1 -0
  81. package/dist/gateway/static/root/assets/{runtime-tools-api-CSm5SpnR.js → runtime-tools-api-DesqGCnE.js} +1 -1
  82. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bwg7U7TR.js +1 -0
  83. package/dist/gateway/static/root/assets/{schema-form-DoVn5jJK.js → schema-form-ByzTNR_C.js} +1 -1
  84. package/dist/gateway/static/root/assets/{session-api-DTxZyMta.js → session-api-DdQnMwkl.js} +1 -1
  85. package/dist/gateway/static/root/assets/{session-manager-B2HDomj4.js → session-manager-B_h0jlLb.js} +1 -1
  86. package/dist/gateway/static/root/assets/sessions-page-XzK1ftbR.js +1 -0
  87. package/dist/gateway/static/root/assets/settings-advanced-gate-D_8Mvnog.js +1 -0
  88. package/dist/gateway/static/root/assets/{settings-form-section-Ce8vVv-9.js → settings-form-section-Brgd8IOV.js} +1 -1
  89. package/dist/gateway/static/root/assets/{settings-page-DP2w3ejC.js → settings-page-B6Mv02eg.js} +1 -1
  90. package/dist/gateway/static/root/assets/settings-page-header-BWyxJKOG.js +1 -0
  91. package/dist/gateway/static/root/assets/{settings-page-layout-B20AfmFG.js → settings-page-layout-DLHcS-0T.js} +1 -1
  92. package/dist/gateway/static/root/assets/setup-status-panel-DSCj5yis.js +1 -0
  93. package/dist/gateway/static/root/assets/{share-preview-page-DV4dKrmG.js → share-preview-page-DF8Of0aZ.js} +1 -1
  94. package/dist/gateway/static/root/assets/shares-settings-DXNPe4Tl.js +1 -0
  95. package/dist/gateway/static/root/assets/{skill-api-DTdejInH.js → skill-api-CKCDCHLq.js} +1 -1
  96. package/dist/gateway/static/root/assets/skill-reload-api-BH0WF6Br.js +1 -0
  97. package/dist/gateway/static/root/assets/skills-page-DFWMVRW4.js +2 -0
  98. package/dist/gateway/static/root/assets/system-settings-panel-DB-ttubV.js +1 -0
  99. package/dist/gateway/static/root/assets/task-detail-page-BJY7c8wb.js +2 -0
  100. package/dist/gateway/static/root/assets/{task-result-evidence-DIGSC4qF.js → task-result-evidence-B-vt1BgK.js} +1 -1
  101. package/dist/gateway/static/root/assets/{tracing-settings-page-BaU8frtc.js → tracing-settings-page-Dt51Z_ws.js} +1 -1
  102. package/dist/gateway/static/root/assets/{tunnel-api-BCcOUsqu.js → tunnel-api-Dok3t7Qe.js} +1 -1
  103. package/dist/gateway/static/root/assets/usage-page-lJym5G7F.js +1 -0
  104. package/dist/gateway/static/root/assets/{use-autosave-C1X47WVb.js → use-autosave-D4EMIB-V.js} +1 -1
  105. package/dist/gateway/static/root/assets/user-model-page-BXdNkITp.js +2 -0
  106. package/dist/gateway/static/root/assets/{voice-api-key-field-Bk4DQMTw.js → voice-api-key-field-CO3KuanA.js} +1 -1
  107. package/dist/gateway/static/root/assets/{voice-config-api-D7xsWrdh.js → voice-config-api-BkUlN7GH.js} +1 -1
  108. package/dist/gateway/static/root/assets/{work-discovery-overlay-B7_NmTB5.js → work-discovery-overlay-BJRtgQM3.js} +1 -1
  109. package/dist/gateway/static/root/assets/wrench-DFb4r8bH.js +1 -0
  110. package/dist/gateway/static/root/assets/xopc-cloud-account-card-CS-_GxHV.js +1 -0
  111. package/dist/gateway/static/root/browser-setup-test.html +5 -0
  112. package/dist/gateway/static/root/browser-setup-test.js +7 -0
  113. package/dist/gateway/static/root/index.html +17 -14
  114. package/dist/package.js +1 -1
  115. package/dist/packages/gateway-contract/src/browser-setup.js +6 -0
  116. package/dist/packages/gateway-contract/src/index.js +4 -0
  117. package/dist/packages/gateway-contract/src/phone-setup.js +6 -0
  118. package/dist/packages/realtime-client/src/index.js +1 -0
  119. package/dist/packages/realtime-protocol/src/index.js +1 -0
  120. package/dist/src/agent/agent-manager.d.ts +4 -0
  121. package/dist/src/agent/agent-manager.js +12 -1
  122. package/dist/src/agent/coding/workspace-revision.js +1 -1
  123. package/dist/src/agent/commands/command-registry.js +1 -1
  124. package/dist/src/agent/embedded/tool-search-extension.js +14 -1
  125. package/dist/src/agent/memory/context-recovery.d.ts +1 -1
  126. package/dist/src/agent/service.d.ts +1 -0
  127. package/dist/src/agent/service.js +5 -0
  128. package/dist/src/agent/service.types.d.ts +2 -0
  129. package/dist/src/agent/skills/installer.js +3 -3
  130. package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
  131. package/dist/src/agent/tool-manuals/phone.js +4 -2
  132. package/dist/src/agent/tool-manuals/xopc-configuration.d.ts +2 -0
  133. package/dist/src/agent/tool-manuals/xopc-configuration.js +25 -0
  134. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +2 -0
  135. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +6 -2
  136. package/dist/src/agent/tools/factory.d.ts +3 -0
  137. package/dist/src/agent/tools/factory.js +11 -1
  138. package/dist/src/agent/tools/personal-task-tool.d.ts +1 -1
  139. package/dist/src/agent/tools/personal-task-tool.js +23 -21
  140. package/dist/src/agent/tools/phone-use-tool.d.ts +1 -0
  141. package/dist/src/agent/tools/phone-use-tool.js +29 -1
  142. package/dist/src/agent/tools/tool-manual-tool.d.ts +1 -1
  143. package/dist/src/agent/tools/tool-manual-tool.js +3 -1
  144. package/dist/src/agent/tools/toolExposure.js +3 -0
  145. package/dist/src/agent/tools/xopc-use-tool.d.ts +4 -2
  146. package/dist/src/agent/tools/xopc-use-tool.js +40 -2
  147. package/dist/src/backup/archive.js +2 -1
  148. package/dist/src/browser/drivers/browser-driver.d.ts +2 -2
  149. package/dist/src/browser/drivers/extension-driver.d.ts +2 -2
  150. package/dist/src/browser/drivers/extension-driver.js +6 -3
  151. package/dist/src/browser/providers/browser-ext-install.js +3 -2
  152. package/dist/src/browser/runtime/browser-runtime.d.ts +4 -1
  153. package/dist/src/browser/runtime/browser-runtime.js +29 -17
  154. package/dist/src/browser/setup/repository.d.ts +5 -0
  155. package/dist/src/browser/setup/repository.js +42 -0
  156. package/dist/src/browser/setup/service.d.ts +152 -0
  157. package/dist/src/browser/setup/service.js +404 -0
  158. package/dist/src/browser/setup/types.d.ts +38 -0
  159. package/dist/src/browser/setup/types.js +1 -0
  160. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  161. package/dist/src/cli/commands/extension-marketplace.js +3 -3
  162. package/dist/src/cli/commands/extension-pack.js +1 -1
  163. package/dist/src/cli/commands/extension.js +2 -2
  164. package/dist/src/config/schema.d.ts +2 -0
  165. package/dist/src/extensions/install.js +1 -1
  166. package/dist/src/extensions/update.js +1 -1
  167. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  168. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  169. package/dist/src/gateway/hono/routes/browser-setup.d.ts +3 -0
  170. package/dist/src/gateway/hono/routes/browser-setup.js +114 -0
  171. package/dist/src/gateway/hono/routes/browser.d.ts +2 -1
  172. package/dist/src/gateway/hono/routes/browser.js +1 -1
  173. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  174. package/dist/src/gateway/hono/routes/phone-dependencies.js +1 -1
  175. package/dist/src/gateway/hono/routes/phone-setup.d.ts +7 -0
  176. package/dist/src/gateway/hono/routes/phone-setup.js +162 -0
  177. package/dist/src/gateway/hono/routes/phone.js +11 -7
  178. package/dist/src/gateway/hono/routes/public-gateway.js +2 -0
  179. package/dist/src/gateway/provider-model-setup.js +1 -1
  180. package/dist/src/gateway/service/config-coordinator.d.ts +2 -0
  181. package/dist/src/gateway/service/config-coordinator.js +1 -1
  182. package/dist/src/gateway/service/session-input-coordinator.js +1 -1
  183. package/dist/src/gateway/service.d.ts +5 -0
  184. package/dist/src/gateway/service.js +52 -7
  185. package/dist/src/gateway/xopc-cloud-capability-setup.js +7 -1
  186. package/dist/src/home-intelligence/host.js +2 -2
  187. package/dist/src/infra/unhandled-rejections.js +2 -2
  188. package/dist/src/infra/update-runner.js +1 -1
  189. package/dist/src/personal-agent/prompts.js +1 -1
  190. package/dist/src/phone/adb-driver.d.ts +8 -2
  191. package/dist/src/phone/adb-driver.js +124 -54
  192. package/dist/src/phone/cloud-adb.js +8 -0
  193. package/dist/src/phone/cloud-scrcpy.d.ts +3 -1
  194. package/dist/src/phone/cloud-scrcpy.js +17 -3
  195. package/dist/src/phone/contracts.d.ts +85 -0
  196. package/dist/src/phone/contracts.js +31 -5
  197. package/dist/src/phone/model-adapter.d.ts +141 -2
  198. package/dist/src/phone/model-adapter.js +176 -24
  199. package/dist/src/phone/numeric-entry.d.ts +31 -0
  200. package/dist/src/phone/numeric-entry.js +126 -0
  201. package/dist/src/phone/planning.d.ts +27 -0
  202. package/dist/src/phone/planning.js +79 -0
  203. package/dist/src/phone/recovery.d.ts +37 -0
  204. package/dist/src/phone/recovery.js +81 -0
  205. package/dist/src/phone/reliability.d.ts +7 -0
  206. package/dist/src/phone/reliability.js +66 -0
  207. package/dist/src/phone/repository.d.ts +1 -0
  208. package/dist/src/phone/repository.js +3 -0
  209. package/dist/src/phone/runtime.d.ts +8 -0
  210. package/dist/src/phone/runtime.js +387 -41
  211. package/dist/src/phone/scrcpy-text.d.ts +11 -0
  212. package/dist/src/phone/scrcpy-text.js +72 -0
  213. package/dist/src/phone/scrcpy.d.ts +5 -1
  214. package/dist/src/phone/scrcpy.js +48 -3
  215. package/dist/src/phone/semantic-controls.d.ts +13 -0
  216. package/dist/src/phone/semantic-controls.js +76 -0
  217. package/dist/src/phone/setup/service.d.ts +148 -0
  218. package/dist/src/phone/setup/service.js +251 -0
  219. package/dist/src/providers/presentation.js +2 -2
  220. package/dist/src/providers/xopc-cloud-model-source.js +6 -2
  221. package/dist/src/realtime/runtime.js +1 -1
  222. package/dist/src/storage/sqlite/connection.js +2 -2
  223. package/dist/src/storage/sqlite/offline-access.js +13 -7
  224. package/dist/src/storage/sqlite/schema-errors.d.ts +12 -0
  225. package/dist/src/storage/sqlite/schema-errors.js +21 -3
  226. package/dist/src/storage/sqlite/schema-upgrade.d.ts +4 -0
  227. package/dist/src/storage/sqlite/schema-upgrade.js +78 -0
  228. package/dist/src/storage/sqlite/schema.d.ts +4 -3
  229. package/dist/src/storage/sqlite/schema.js +14 -8
  230. package/dist/src/storage/sqlite/schema.sql +10 -0
  231. package/dist/src/storage/sqlite/upgrades/203_remove_retired_proactive_contracts.sql +70 -0
  232. package/dist/src/storage/sqlite/upgrades/204_home_intelligence.sql +78 -0
  233. package/dist/src/storage/sqlite/upgrades/205_agent_catalog.sql +66 -0
  234. package/dist/src/storage/sqlite/upgrades/206_home_advice_strategy_version.sql +2 -0
  235. package/dist/src/storage/sqlite/upgrades/207_user_model_policy_contract.sql +121 -0
  236. package/dist/src/storage/sqlite/upgrades/208_automation_management.sql +2 -0
  237. package/dist/src/storage/sqlite/upgrades/209_automation_event_hub.sql +48 -0
  238. package/dist/src/storage/sqlite/upgrades/210_remove_legacy_automation_timeout.sql +14 -0
  239. package/dist/src/storage/sqlite/upgrades/211_automation_result_deliveries.sql +16 -0
  240. package/dist/src/storage/sqlite/upgrades/212_automation_delivery_policy.sql +30 -0
  241. package/dist/src/storage/sqlite/upgrades/213_automation_reliability_contract.sql +188 -0
  242. package/dist/src/storage/sqlite/upgrades/214_ai_usage_ledger.sql +41 -0
  243. package/dist/src/storage/sqlite/upgrades/215_scene_execution_adapters.sql +6 -0
  244. package/dist/src/storage/sqlite/upgrades/216_remove_scene_model_usage.sql +1 -0
  245. package/dist/src/storage/sqlite/upgrades/217_remove_legacy_memory_tables.sql +4 -0
  246. package/dist/src/storage/sqlite/upgrades/218_core_relation_indexes.sql +26 -0
  247. package/dist/src/storage/sqlite/upgrades/219_json_contracts.sql +123 -0
  248. package/dist/src/storage/sqlite/upgrades/220_normalize_timestamps.sql +339 -0
  249. package/dist/src/storage/sqlite/upgrades/221_ai_usage_retention_index.sql +2 -0
  250. package/dist/src/storage/sqlite/upgrades/222_session_config_authority.sql +13 -0
  251. package/dist/src/storage/sqlite/upgrades/223_session_creation_receipts.sql +59 -0
  252. package/dist/src/storage/sqlite/upgrades/224_task_origin_links.sql +8 -0
  253. package/dist/src/storage/sqlite/upgrades/225_task_collaboration.sql +32 -0
  254. package/dist/src/storage/sqlite/upgrades/226_task_main_updates.sql +9 -0
  255. package/dist/src/storage/sqlite/upgrades/227_task_main_update_decisions.sql +8 -0
  256. package/dist/src/storage/sqlite/upgrades/228_task_main_agent_links.sql +14 -0
  257. package/dist/src/storage/sqlite/upgrades/229_task_criterion_reviews.sql +12 -0
  258. package/dist/src/storage/sqlite/upgrades/230_personal_agent_onboarding.sql +8 -0
  259. package/dist/src/storage/sqlite/upgrades/231_task_result_deliveries.sql +32 -0
  260. package/dist/src/storage/sqlite/upgrades/232_personal_requests.sql +28 -0
  261. package/dist/src/storage/sqlite/upgrades/233_observability_usage_links.sql +3 -0
  262. package/dist/src/storage/sqlite/upgrades/234_task_result_reply.sql +14 -0
  263. package/dist/src/storage/sqlite/upgrades/235_personal_conversation_priority.sql +3 -0
  264. package/dist/src/storage/sqlite/upgrades/236_personal_proactivity.sql +53 -0
  265. package/dist/src/storage/sqlite/upgrades/237_personal_strategy_versions.sql +18 -0
  266. package/dist/src/storage/sqlite/upgrades/238_browser_record_replay.sql +45 -0
  267. package/dist/src/storage/sqlite/upgrades/239_clarification_notifications.sql +26 -0
  268. package/dist/src/storage/sqlite/upgrades/240_device_settings.sql +5 -0
  269. package/dist/src/storage/sqlite/upgrades/241_device_grant_audit.sql +13 -0
  270. package/dist/src/storage/sqlite/upgrades/242_cloud_usage_receipts.sql +5 -0
  271. package/dist/src/storage/sqlite/upgrades/243_voice_opening_greetings.sql +12 -0
  272. package/dist/src/storage/sqlite/upgrades/244_device_request_proofs.sql +8 -0
  273. package/dist/src/storage/sqlite/upgrades/245_memory_learning.sql +125 -0
  274. package/dist/src/storage/sqlite/upgrades/246_personal_session_thinking.sql +22 -0
  275. package/dist/src/storage/sqlite/upgrades/247_agent_selection_records.sql +32 -0
  276. package/dist/src/storage/sqlite/upgrades/248_next_turn_suggestions.sql +20 -0
  277. package/dist/src/storage/sqlite/upgrades/249_task_allocations.sql +17 -0
  278. package/dist/src/storage/sqlite/upgrades/250_research_checkpoints.sql +15 -0
  279. package/dist/src/storage/sqlite/upgrades/251_personal_result_reads.sql +40 -0
  280. package/dist/src/storage/sqlite/upgrades/252_task_work_revisions.sql +15 -0
  281. package/dist/src/storage/sqlite/upgrades/253_discussion_processing_recovery.sql +20 -0
  282. package/dist/src/storage/sqlite/upgrades/254_discussion_annotations.sql +17 -0
  283. package/dist/src/storage/sqlite/upgrades/255_discussion_chapter_progress.sql +10 -0
  284. package/dist/src/storage/sqlite/upgrades/256_task_main_update_retries.sql +21 -0
  285. package/dist/src/storage/sqlite/upgrades/257_session_composer_history.sql +11 -0
  286. package/dist/src/storage/sqlite/upgrades/258_task_phase_changes.sql +20 -0
  287. package/dist/src/storage/sqlite/upgrades/259_personal_default_style.sql +10 -0
  288. package/dist/src/storage/sqlite/upgrades/260_browser_setup.sql +9 -0
  289. package/dist/src/storage/sqlite/windows-database-owners.js +33 -28
  290. package/dist/src/tasks/capabilities/relations.d.ts +2 -2
  291. package/dist/src/tui/clipboard-image.js +1 -1
  292. package/dist/src/tui/tui.js +1 -1
  293. package/dist/src/utils/index.js +1 -1
  294. package/dist/src/utils/logger/index.js +1 -1
  295. package/dist/src/utils/logger.js +1 -1
  296. package/dist/src/work-discovery/probe.js +1 -1
  297. package/package.json +3 -3
  298. package/skills/tools/configure-xopc/SKILL.md +47 -0
  299. package/skills/tools/configure-xopc/references/browser/acceptance.md +31 -0
  300. package/skills/tools/configure-xopc/references/browser/chrome-extension.md +19 -0
  301. package/skills/tools/configure-xopc/references/browser/overview.md +22 -0
  302. package/skills/tools/configure-xopc/references/browser/permissions.md +25 -0
  303. package/skills/tools/configure-xopc/references/browser/troubleshooting.md +24 -0
  304. package/skills/tools/configure-xopc/references/phone/acceptance.md +25 -0
  305. package/skills/tools/configure-xopc/references/phone/aliyun.md +29 -0
  306. package/skills/tools/configure-xopc/references/phone/dependencies.md +18 -0
  307. package/skills/tools/configure-xopc/references/phone/local.md +19 -0
  308. package/skills/tools/configure-xopc/references/phone/models.md +18 -0
  309. package/skills/tools/configure-xopc/references/phone/overview.md +30 -0
  310. package/skills/tools/configure-xopc/references/phone/troubleshooting.md +24 -0
  311. package/skills/tools/configure-xopc/references/scene-index.md +12 -0
  312. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-mf0jgEPE.js +0 -1
  313. package/dist/gateway/static/root/assets/agents-CKhZ4UYQ.js +0 -77
  314. package/dist/gateway/static/root/assets/apps-page-BZ_MaQJf.js +0 -1
  315. package/dist/gateway/static/root/assets/automations-workspace-CHUDHNVL.js +0 -8
  316. package/dist/gateway/static/root/assets/browser-automations-page-DStDm9y1.js +0 -3
  317. package/dist/gateway/static/root/assets/browser-settings-page-6I4oetKt.js +0 -3
  318. package/dist/gateway/static/root/assets/capabilities-page-C-EecWbS.js +0 -2
  319. package/dist/gateway/static/root/assets/capabilities-settings-panel-BQoCPk3x.js +0 -8
  320. package/dist/gateway/static/root/assets/channels-BKf_-Mdt.js +0 -1
  321. package/dist/gateway/static/root/assets/connectors-page-CUBg8spT.js +0 -1
  322. package/dist/gateway/static/root/assets/device-pairing-wizard-PmP_vGem.js +0 -1
  323. package/dist/gateway/static/root/assets/gateway-realtime-DMAzNlm-.js +0 -1
  324. package/dist/gateway/static/root/assets/gateway-realtime-store-CoIgC1Al.js +0 -1
  325. package/dist/gateway/static/root/assets/gateway-settings-DnrQ28E2.js +0 -1
  326. package/dist/gateway/static/root/assets/highlight-code-AMjU04kR.js +0 -1
  327. package/dist/gateway/static/root/assets/home-page-pTwVME-g.js +0 -2
  328. package/dist/gateway/static/root/assets/index-BLL0wKRZ.css +0 -1
  329. package/dist/gateway/static/root/assets/index-ygkHNYyo.js +0 -710
  330. package/dist/gateway/static/root/assets/local-app-workbench-page-Cwl6EvuX.js +0 -1
  331. package/dist/gateway/static/root/assets/logs-page-CS3hcTOq.js +0 -2
  332. package/dist/gateway/static/root/assets/management-settings-DC-Y_-GP.js +0 -1
  333. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-vckgHpON.js +0 -1
  334. package/dist/gateway/static/root/assets/note-detail-panel-C7u4dxEk.js +0 -5
  335. package/dist/gateway/static/root/assets/note-image-lightbox-jvqYtySx.js +0 -1
  336. package/dist/gateway/static/root/assets/notes-page-Bs7F5Hpf.js +0 -8
  337. package/dist/gateway/static/root/assets/page-context-capture-button-DO_yhXS1.js +0 -1
  338. package/dist/gateway/static/root/assets/personal-page-BexL2-PQ.js +0 -1
  339. package/dist/gateway/static/root/assets/personal-settings-panel-BKA4fbYH.js +0 -1
  340. package/dist/gateway/static/root/assets/phone-dependencies-card-ChFtdFhA.js +0 -1
  341. package/dist/gateway/static/root/assets/phone-model-picker-CZoIAQ1j.js +0 -1
  342. package/dist/gateway/static/root/assets/phone-settings-page-DRyK0nHH.js +0 -1
  343. package/dist/gateway/static/root/assets/plugin-details-dialog-B-N61jJH.js +0 -1
  344. package/dist/gateway/static/root/assets/project-detail-page-DtKmFBml.js +0 -7
  345. package/dist/gateway/static/root/assets/projects-page-CFZIz9mc.js +0 -1
  346. package/dist/gateway/static/root/assets/remote-access-hub-CWEc7W0m.js +0 -1
  347. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-q_oswAdV.js +0 -1
  348. package/dist/gateway/static/root/assets/sessions-page-BuPqNxpd.js +0 -1
  349. package/dist/gateway/static/root/assets/settings-advanced-gate-QTVDCGJG.js +0 -1
  350. package/dist/gateway/static/root/assets/settings-page-header-CYpuTXUW.js +0 -1
  351. package/dist/gateway/static/root/assets/setup-status-panel-ZmlE8jIE.js +0 -1
  352. package/dist/gateway/static/root/assets/shares-settings-CtNxWqW-.js +0 -1
  353. package/dist/gateway/static/root/assets/skill-reload-api-Egaf8PqZ.js +0 -1
  354. package/dist/gateway/static/root/assets/skills-page-C6FKxf4J.js +0 -2
  355. package/dist/gateway/static/root/assets/system-settings-panel-Baxkhov7.js +0 -1
  356. package/dist/gateway/static/root/assets/task-detail-page-C77-rpkt.js +0 -2
  357. package/dist/gateway/static/root/assets/usage-page-BFeIbpbi.js +0 -1
  358. package/dist/gateway/static/root/assets/user-model-page-u8zY5jea.js +0 -2
  359. package/dist/gateway/static/root/assets/xopc-cloud-account-card-CJ_akAvc.js +0 -1
@@ -0,0 +1,339 @@
1
+ CREATE TABLE sessions_next (
2
+ conversation_id TEXT PRIMARY KEY,
3
+ agent_id TEXT NOT NULL,
4
+ active_transcript_id TEXT NOT NULL UNIQUE,
5
+ status TEXT NOT NULL DEFAULT 'active',
6
+ name TEXT,
7
+ tags_json TEXT NOT NULL DEFAULT '[]',
8
+ created_at INTEGER NOT NULL,
9
+ updated_at INTEGER NOT NULL,
10
+ last_accessed_at INTEGER NOT NULL,
11
+ session_started_at INTEGER,
12
+ last_interaction_at INTEGER,
13
+ source_channel TEXT NOT NULL DEFAULT '',
14
+ source_chat_id TEXT NOT NULL DEFAULT '',
15
+ session_type TEXT,
16
+ hidden_from_session_list INTEGER NOT NULL DEFAULT 0,
17
+ parent_conversation_id TEXT,
18
+ workflow_run_id TEXT,
19
+ workflow_definition_id TEXT,
20
+ workflow_agent_id TEXT,
21
+ workflow_agent_label TEXT,
22
+ routing_json TEXT,
23
+ custom_data_json TEXT,
24
+ message_count INTEGER NOT NULL DEFAULT 0,
25
+ estimated_tokens INTEGER NOT NULL DEFAULT 0,
26
+ compacted_count INTEGER NOT NULL DEFAULT 0,
27
+ last_flushed_at INTEGER,
28
+ flush_count INTEGER NOT NULL DEFAULT 0,
29
+ thinking_level TEXT,
30
+ verbose_level TEXT,
31
+ project_id TEXT
32
+ );
33
+ INSERT INTO sessions_next SELECT
34
+ conversation_id, agent_id, active_transcript_id, status, name, tags_json, created_at,
35
+ updated_at, last_accessed_at, session_started_at, last_interaction_at, source_channel,
36
+ source_chat_id, session_type, hidden_from_session_list, parent_conversation_id,
37
+ workflow_run_id, workflow_definition_id, workflow_agent_id, workflow_agent_label,
38
+ routing_json, custom_data_json, message_count, estimated_tokens, compacted_count,
39
+ CASE WHEN last_flushed_at IS NULL THEN NULL
40
+ WHEN typeof(last_flushed_at) IN ('integer', 'real') THEN CAST(last_flushed_at AS INTEGER)
41
+ ELSE CAST(ROUND((julianday(last_flushed_at) - 2440587.5) * 86400000) AS INTEGER) END,
42
+ flush_count, thinking_level, verbose_level, project_id
43
+ FROM sessions;
44
+ DROP TABLE sessions;
45
+ ALTER TABLE sessions_next RENAME TO sessions;
46
+ CREATE INDEX idx_sessions_agent_updated ON sessions(agent_id, updated_at DESC);
47
+ CREATE INDEX idx_sessions_last_interaction ON sessions(last_interaction_at DESC);
48
+ CREATE INDEX idx_sessions_parent ON sessions(parent_conversation_id);
49
+ CREATE INDEX idx_sessions_project ON sessions(project_id, updated_at DESC);
50
+ CREATE INDEX idx_sessions_source_channel ON sessions(source_channel);
51
+ CREATE INDEX idx_sessions_status ON sessions(status);
52
+ CREATE INDEX idx_sessions_type ON sessions(session_type);
53
+ CREATE INDEX idx_sessions_workflow_run ON sessions(workflow_run_id);
54
+
55
+ CREATE TABLE connector_catalog_entries_next (
56
+ connector_id TEXT PRIMARY KEY,
57
+ provider TEXT NOT NULL,
58
+ definition_json TEXT NOT NULL,
59
+ fetched_at INTEGER NOT NULL,
60
+ expires_at INTEGER
61
+ );
62
+ INSERT INTO connector_catalog_entries_next SELECT
63
+ connector_id, provider, definition_json,
64
+ CASE WHEN typeof(fetched_at) IN ('integer', 'real') THEN CAST(fetched_at AS INTEGER)
65
+ ELSE CAST(ROUND((julianday(fetched_at) - 2440587.5) * 86400000) AS INTEGER) END,
66
+ CASE WHEN expires_at IS NULL THEN NULL
67
+ WHEN typeof(expires_at) IN ('integer', 'real') THEN CAST(expires_at AS INTEGER)
68
+ ELSE CAST(ROUND((julianday(expires_at) - 2440587.5) * 86400000) AS INTEGER) END
69
+ FROM connector_catalog_entries;
70
+ DROP TABLE connector_catalog_entries;
71
+ ALTER TABLE connector_catalog_entries_next RENAME TO connector_catalog_entries;
72
+ CREATE INDEX idx_connector_catalog_provider ON connector_catalog_entries(provider, fetched_at DESC);
73
+
74
+ CREATE TABLE connector_installations_next (
75
+ id TEXT PRIMARY KEY,
76
+ connector_id TEXT NOT NULL,
77
+ principal_id TEXT NOT NULL,
78
+ enabled INTEGER NOT NULL DEFAULT 1 CHECK(enabled IN (0, 1)),
79
+ allowed_agent_ids_json TEXT NOT NULL DEFAULT '[]',
80
+ max_scope TEXT NOT NULL DEFAULT 'read' CHECK(max_scope IN ('read', 'write', 'admin')),
81
+ confirmation_policy TEXT NOT NULL DEFAULT 'writes'
82
+ CHECK(confirmation_policy IN ('always', 'writes', 'admin', 'never')),
83
+ selected_account_ids_json TEXT NOT NULL DEFAULT '[]',
84
+ created_at INTEGER NOT NULL,
85
+ updated_at INTEGER NOT NULL,
86
+ UNIQUE(connector_id, principal_id)
87
+ );
88
+ INSERT INTO connector_installations_next SELECT
89
+ id, connector_id, principal_id, enabled, allowed_agent_ids_json, max_scope,
90
+ confirmation_policy, selected_account_ids_json,
91
+ CASE WHEN typeof(created_at) IN ('integer', 'real') THEN CAST(created_at AS INTEGER)
92
+ ELSE CAST(ROUND((julianday(created_at) - 2440587.5) * 86400000) AS INTEGER) END,
93
+ CASE WHEN typeof(updated_at) IN ('integer', 'real') THEN CAST(updated_at AS INTEGER)
94
+ ELSE CAST(ROUND((julianday(updated_at) - 2440587.5) * 86400000) AS INTEGER) END
95
+ FROM connector_installations;
96
+ DROP TABLE connector_installations;
97
+ ALTER TABLE connector_installations_next RENAME TO connector_installations;
98
+ CREATE INDEX idx_connector_installations_principal
99
+ ON connector_installations(principal_id, enabled, connector_id);
100
+
101
+ CREATE TABLE connector_accounts_next (
102
+ id TEXT PRIMARY KEY,
103
+ connector_id TEXT NOT NULL,
104
+ principal_id TEXT NOT NULL,
105
+ identity_key TEXT,
106
+ identity_json TEXT NOT NULL DEFAULT '{}',
107
+ current_connection_id TEXT,
108
+ created_at INTEGER NOT NULL,
109
+ updated_at INTEGER NOT NULL,
110
+ label TEXT,
111
+ enabled INTEGER NOT NULL DEFAULT 1,
112
+ allowed_agent_ids_json TEXT,
113
+ backend_id TEXT,
114
+ runtime_instance_id TEXT
115
+ );
116
+ INSERT INTO connector_accounts_next SELECT
117
+ id, connector_id, principal_id, identity_key, identity_json, current_connection_id,
118
+ CASE WHEN typeof(created_at) IN ('integer', 'real') THEN CAST(created_at AS INTEGER)
119
+ ELSE CAST(ROUND((julianday(created_at) - 2440587.5) * 86400000) AS INTEGER) END,
120
+ CASE WHEN typeof(updated_at) IN ('integer', 'real') THEN CAST(updated_at AS INTEGER)
121
+ ELSE CAST(ROUND((julianday(updated_at) - 2440587.5) * 86400000) AS INTEGER) END,
122
+ label, enabled, allowed_agent_ids_json, backend_id, runtime_instance_id
123
+ FROM connector_accounts;
124
+ DROP TABLE connector_accounts;
125
+ ALTER TABLE connector_accounts_next RENAME TO connector_accounts;
126
+ CREATE UNIQUE INDEX idx_cli_account_identity
127
+ ON connector_accounts(principal_id, runtime_instance_id, identity_key)
128
+ WHERE runtime_instance_id IS NOT NULL AND identity_key IS NOT NULL;
129
+ CREATE UNIQUE INDEX idx_connector_accounts_identity
130
+ ON connector_accounts(principal_id, backend_id, connector_id, identity_key)
131
+ WHERE identity_key IS NOT NULL;
132
+
133
+ CREATE TABLE connector_connections_next (
134
+ id TEXT PRIMARY KEY,
135
+ installation_id TEXT REFERENCES connector_installations(id) ON DELETE SET NULL,
136
+ connector_id TEXT NOT NULL,
137
+ provider TEXT NOT NULL,
138
+ principal_id TEXT NOT NULL,
139
+ provider_connection_id TEXT NOT NULL,
140
+ alias TEXT,
141
+ identity_json TEXT NOT NULL DEFAULT '{}',
142
+ status TEXT NOT NULL DEFAULT 'unknown'
143
+ CHECK(status IN ('pending', 'active', 'expired', 'failed', 'revoked', 'disabled', 'unknown')),
144
+ is_default INTEGER NOT NULL DEFAULT 0 CHECK(is_default IN (0, 1)),
145
+ connected_at INTEGER,
146
+ expires_at INTEGER,
147
+ last_error TEXT,
148
+ metadata_json TEXT NOT NULL DEFAULT '{}',
149
+ created_at INTEGER NOT NULL,
150
+ updated_at INTEGER NOT NULL,
151
+ account_id TEXT REFERENCES connector_accounts(id) ON DELETE CASCADE
152
+ );
153
+ INSERT INTO connector_connections_next SELECT
154
+ id, installation_id, connector_id, provider, principal_id, provider_connection_id,
155
+ alias, identity_json, status, is_default,
156
+ CASE WHEN connected_at IS NULL THEN NULL
157
+ WHEN typeof(connected_at) IN ('integer', 'real') THEN CAST(connected_at AS INTEGER)
158
+ ELSE CAST(ROUND((julianday(connected_at) - 2440587.5) * 86400000) AS INTEGER) END,
159
+ CASE WHEN expires_at IS NULL THEN NULL
160
+ WHEN typeof(expires_at) IN ('integer', 'real') THEN CAST(expires_at AS INTEGER)
161
+ ELSE CAST(ROUND((julianday(expires_at) - 2440587.5) * 86400000) AS INTEGER) END,
162
+ last_error, metadata_json,
163
+ CASE WHEN typeof(created_at) IN ('integer', 'real') THEN CAST(created_at AS INTEGER)
164
+ ELSE CAST(ROUND((julianday(created_at) - 2440587.5) * 86400000) AS INTEGER) END,
165
+ CASE WHEN typeof(updated_at) IN ('integer', 'real') THEN CAST(updated_at AS INTEGER)
166
+ ELSE CAST(ROUND((julianday(updated_at) - 2440587.5) * 86400000) AS INTEGER) END,
167
+ account_id
168
+ FROM connector_connections;
169
+ DROP TABLE connector_connections;
170
+ ALTER TABLE connector_connections_next RENAME TO connector_connections;
171
+ CREATE INDEX idx_connector_connections_account ON connector_connections(account_id);
172
+ CREATE INDEX idx_connector_connections_principal
173
+ ON connector_connections(principal_id, connector_id, status);
174
+ CREATE UNIQUE INDEX idx_connector_connections_provider_backend
175
+ ON connector_connections(provider, COALESCE(json_extract(metadata_json, '$.backendId'), ''), provider_connection_id);
176
+
177
+ CREATE TABLE connector_action_metadata_next (
178
+ connector_id TEXT NOT NULL,
179
+ action_id TEXT NOT NULL,
180
+ toolkit TEXT,
181
+ scope TEXT NOT NULL DEFAULT 'write' CHECK(scope IN ('read', 'write', 'admin')),
182
+ curated INTEGER NOT NULL DEFAULT 0 CHECK(curated IN (0, 1)),
183
+ input_schema_json TEXT,
184
+ schema_version TEXT,
185
+ cached_at INTEGER NOT NULL,
186
+ PRIMARY KEY(connector_id, action_id)
187
+ );
188
+ INSERT INTO connector_action_metadata_next SELECT
189
+ connector_id, action_id, toolkit, scope, curated, input_schema_json, schema_version,
190
+ CASE WHEN typeof(cached_at) IN ('integer', 'real') THEN CAST(cached_at AS INTEGER)
191
+ ELSE CAST(ROUND((julianday(cached_at) - 2440587.5) * 86400000) AS INTEGER) END
192
+ FROM connector_action_metadata;
193
+ DROP TABLE connector_action_metadata;
194
+ ALTER TABLE connector_action_metadata_next RENAME TO connector_action_metadata;
195
+ CREATE INDEX idx_connector_action_scope
196
+ ON connector_action_metadata(connector_id, scope, curated);
197
+
198
+ CREATE TABLE connector_execution_audit_next (
199
+ id TEXT PRIMARY KEY,
200
+ installation_id TEXT REFERENCES connector_installations(id) ON DELETE SET NULL,
201
+ connection_id TEXT REFERENCES connector_connections(id) ON DELETE SET NULL,
202
+ connector_id TEXT NOT NULL,
203
+ principal_id TEXT NOT NULL,
204
+ agent_id TEXT,
205
+ conversation_id TEXT,
206
+ action_id TEXT NOT NULL,
207
+ scope TEXT NOT NULL CHECK(scope IN ('read', 'write', 'admin')),
208
+ decision TEXT NOT NULL CHECK(decision IN ('allowed', 'denied', 'confirmation_required')),
209
+ result_status TEXT NOT NULL CHECK(result_status IN ('success', 'error', 'not_executed')),
210
+ duration_ms INTEGER,
211
+ error_code TEXT,
212
+ created_at INTEGER NOT NULL
213
+ );
214
+ INSERT INTO connector_execution_audit_next SELECT
215
+ id, installation_id, connection_id, connector_id, principal_id, agent_id,
216
+ conversation_id, action_id, scope, decision, result_status, duration_ms, error_code,
217
+ CASE WHEN typeof(created_at) IN ('integer', 'real') THEN CAST(created_at AS INTEGER)
218
+ ELSE CAST(ROUND((julianday(created_at) - 2440587.5) * 86400000) AS INTEGER) END
219
+ FROM connector_execution_audit;
220
+ DROP TABLE connector_execution_audit;
221
+ ALTER TABLE connector_execution_audit_next RENAME TO connector_execution_audit;
222
+ CREATE INDEX idx_connector_audit_connector_time
223
+ ON connector_execution_audit(connector_id, created_at DESC);
224
+ CREATE INDEX idx_connector_audit_principal_time
225
+ ON connector_execution_audit(principal_id, created_at DESC);
226
+ CREATE INDEX idx_connector_execution_audit_connection
227
+ ON connector_execution_audit(connection_id);
228
+ CREATE INDEX idx_connector_execution_audit_installation
229
+ ON connector_execution_audit(installation_id);
230
+
231
+ CREATE TABLE connector_approvals_next (
232
+ id TEXT PRIMARY KEY,
233
+ principal_id TEXT NOT NULL,
234
+ connector_id TEXT NOT NULL,
235
+ connection_id TEXT REFERENCES connector_connections(id) ON DELETE SET NULL,
236
+ agent_id TEXT,
237
+ conversation_id TEXT,
238
+ action_id TEXT NOT NULL,
239
+ scope TEXT NOT NULL CHECK(scope IN ('read', 'write', 'admin')),
240
+ arguments_hash TEXT NOT NULL,
241
+ arguments_preview_json TEXT NOT NULL DEFAULT '{}',
242
+ status TEXT NOT NULL DEFAULT 'pending'
243
+ CHECK(status IN ('pending', 'approved', 'denied', 'expired', 'consumed')),
244
+ expires_at INTEGER NOT NULL,
245
+ created_at INTEGER NOT NULL,
246
+ decided_at INTEGER,
247
+ consumed_at INTEGER,
248
+ wait_id TEXT
249
+ );
250
+ INSERT INTO connector_approvals_next SELECT
251
+ id, principal_id, connector_id, connection_id, agent_id, conversation_id, action_id,
252
+ scope, arguments_hash, arguments_preview_json, status,
253
+ CASE WHEN typeof(expires_at) IN ('integer', 'real') THEN CAST(expires_at AS INTEGER)
254
+ ELSE CAST(ROUND((julianday(expires_at) - 2440587.5) * 86400000) AS INTEGER) END,
255
+ CASE WHEN typeof(created_at) IN ('integer', 'real') THEN CAST(created_at AS INTEGER)
256
+ ELSE CAST(ROUND((julianday(created_at) - 2440587.5) * 86400000) AS INTEGER) END,
257
+ CASE WHEN decided_at IS NULL THEN NULL
258
+ WHEN typeof(decided_at) IN ('integer', 'real') THEN CAST(decided_at AS INTEGER)
259
+ ELSE CAST(ROUND((julianday(decided_at) - 2440587.5) * 86400000) AS INTEGER) END,
260
+ CASE WHEN consumed_at IS NULL THEN NULL
261
+ WHEN typeof(consumed_at) IN ('integer', 'real') THEN CAST(consumed_at AS INTEGER)
262
+ ELSE CAST(ROUND((julianday(consumed_at) - 2440587.5) * 86400000) AS INTEGER) END,
263
+ wait_id
264
+ FROM connector_approvals;
265
+ DROP TABLE connector_approvals;
266
+ ALTER TABLE connector_approvals_next RENAME TO connector_approvals;
267
+ CREATE INDEX idx_connector_approvals_connection ON connector_approvals(connection_id);
268
+ CREATE INDEX idx_connector_approvals_pending
269
+ ON connector_approvals(principal_id, status, expires_at, created_at DESC);
270
+ CREATE INDEX idx_connector_approvals_session
271
+ ON connector_approvals(conversation_id, status, created_at DESC);
272
+
273
+ CREATE TABLE connector_webhook_deliveries_next (
274
+ id TEXT PRIMARY KEY,
275
+ provider TEXT NOT NULL,
276
+ payload_hash TEXT NOT NULL,
277
+ status TEXT NOT NULL DEFAULT 'processing'
278
+ CHECK(status IN ('pending', 'processing', 'processed')),
279
+ attempts INTEGER NOT NULL DEFAULT 1,
280
+ received_at INTEGER NOT NULL,
281
+ processing_at INTEGER,
282
+ processed_at INTEGER,
283
+ last_error TEXT
284
+ );
285
+ INSERT INTO connector_webhook_deliveries_next SELECT
286
+ id, provider, payload_hash, status, attempts,
287
+ CASE WHEN typeof(received_at) IN ('integer', 'real') THEN CAST(received_at AS INTEGER)
288
+ ELSE CAST(ROUND((julianday(received_at) - 2440587.5) * 86400000) AS INTEGER) END,
289
+ CASE WHEN processing_at IS NULL THEN NULL
290
+ WHEN typeof(processing_at) IN ('integer', 'real') THEN CAST(processing_at AS INTEGER)
291
+ ELSE CAST(ROUND((julianday(processing_at) - 2440587.5) * 86400000) AS INTEGER) END,
292
+ CASE WHEN processed_at IS NULL THEN NULL
293
+ WHEN typeof(processed_at) IN ('integer', 'real') THEN CAST(processed_at AS INTEGER)
294
+ ELSE CAST(ROUND((julianday(processed_at) - 2440587.5) * 86400000) AS INTEGER) END,
295
+ last_error
296
+ FROM connector_webhook_deliveries;
297
+ DROP TABLE connector_webhook_deliveries;
298
+ ALTER TABLE connector_webhook_deliveries_next RENAME TO connector_webhook_deliveries;
299
+ CREATE INDEX idx_connector_webhook_deliveries_status
300
+ ON connector_webhook_deliveries(provider, status, received_at DESC);
301
+
302
+ CREATE TABLE user_trust_policies_next (
303
+ principal_id TEXT PRIMARY KEY,
304
+ default_action_level TEXT NOT NULL DEFAULT 'confirm'
305
+ CHECK(default_action_level IN ('observe', 'suggest', 'confirm', 'auto')),
306
+ updated_at INTEGER NOT NULL
307
+ );
308
+ INSERT INTO user_trust_policies_next SELECT
309
+ principal_id, default_action_level,
310
+ CASE WHEN typeof(updated_at) IN ('integer', 'real') THEN CAST(updated_at AS INTEGER)
311
+ ELSE CAST(ROUND((julianday(updated_at) - 2440587.5) * 86400000) AS INTEGER) END
312
+ FROM user_trust_policies;
313
+ DROP TABLE user_trust_policies;
314
+ ALTER TABLE user_trust_policies_next RENAME TO user_trust_policies;
315
+
316
+ CREATE TABLE connector_backends_next (
317
+ id TEXT PRIMARY KEY,
318
+ mode TEXT NOT NULL CHECK(mode IN ('managed', 'byok')),
319
+ label TEXT NOT NULL,
320
+ credential_ref TEXT,
321
+ credential_source TEXT NOT NULL DEFAULT 'stored'
322
+ CHECK(credential_source IN ('stored', 'environment')),
323
+ verified_at INTEGER,
324
+ active INTEGER NOT NULL DEFAULT 0,
325
+ created_at INTEGER NOT NULL
326
+ );
327
+ INSERT INTO connector_backends_next SELECT
328
+ id, mode, label, credential_ref, credential_source,
329
+ CASE WHEN verified_at IS NULL THEN NULL
330
+ WHEN typeof(verified_at) IN ('integer', 'real') THEN CAST(verified_at AS INTEGER)
331
+ ELSE CAST(ROUND((julianday(verified_at) - 2440587.5) * 86400000) AS INTEGER) END,
332
+ active,
333
+ CASE WHEN typeof(created_at) IN ('integer', 'real') THEN CAST(created_at AS INTEGER)
334
+ ELSE CAST(ROUND((julianday(created_at) - 2440587.5) * 86400000) AS INTEGER) END
335
+ FROM connector_backends;
336
+ DROP TABLE connector_backends;
337
+ ALTER TABLE connector_backends_next RENAME TO connector_backends;
338
+ CREATE UNIQUE INDEX idx_connector_backend_active
339
+ ON connector_backends(active) WHERE active = 1;
@@ -0,0 +1,2 @@
1
+ CREATE INDEX idx_ai_usage_events_provider_model
2
+ ON ai_usage_events(provider, model, started_at DESC);
@@ -0,0 +1,13 @@
1
+ INSERT INTO session_config (
2
+ conversation_id, thinking_level, verbose_level, updated_at
3
+ )
4
+ SELECT conversation_id, thinking_level, verbose_level, updated_at
5
+ FROM sessions
6
+ WHERE thinking_level IS NOT NULL OR verbose_level IS NOT NULL
7
+ ON CONFLICT(conversation_id) DO UPDATE SET
8
+ thinking_level = COALESCE(session_config.thinking_level, excluded.thinking_level),
9
+ verbose_level = COALESCE(session_config.verbose_level, excluded.verbose_level),
10
+ updated_at = MAX(session_config.updated_at, excluded.updated_at);
11
+
12
+ ALTER TABLE sessions DROP COLUMN thinking_level;
13
+ ALTER TABLE sessions DROP COLUMN verbose_level;
@@ -0,0 +1,59 @@
1
+ UPDATE sessions SET custom_data_json=json_remove(custom_data_json, '$.genericNewChatShell')
2
+ WHERE json_type(custom_data_json, '$.genericNewChatShell') IS NOT NULL;
3
+
4
+ CREATE TABLE session_input_receipts (
5
+ conversation_id TEXT NOT NULL,
6
+ client_message_id TEXT NOT NULL,
7
+ principal_id TEXT NOT NULL,
8
+ request_hash TEXT NOT NULL,
9
+ input_id TEXT,
10
+ transcript_id TEXT NOT NULL,
11
+ accepted_at INTEGER NOT NULL,
12
+ PRIMARY KEY (conversation_id, client_message_id)
13
+ );
14
+
15
+ CREATE TABLE session_tombstones (
16
+ conversation_id TEXT PRIMARY KEY,
17
+ deleted_at INTEGER NOT NULL
18
+ );
19
+
20
+ CREATE TABLE session_preparation_retries (
21
+ conversation_id TEXT NOT NULL,
22
+ idempotency_key TEXT NOT NULL,
23
+ operation_id TEXT NOT NULL,
24
+ expected_revision INTEGER NOT NULL,
25
+ principal_id TEXT NOT NULL,
26
+ PRIMARY KEY (conversation_id, idempotency_key)
27
+ );
28
+
29
+ CREATE TABLE session_preparations (
30
+ conversation_id TEXT PRIMARY KEY REFERENCES sessions(conversation_id) ON DELETE CASCADE,
31
+ operation_id TEXT NOT NULL UNIQUE,
32
+ creation_json TEXT NOT NULL CHECK(json_valid(creation_json)),
33
+ state TEXT NOT NULL CHECK(state IN ('preparing', 'ready', 'preparation_failed')),
34
+ environment_id TEXT NOT NULL,
35
+ base_commit TEXT,
36
+ revision INTEGER NOT NULL DEFAULT 1,
37
+ lease_until INTEGER NOT NULL DEFAULT 0,
38
+ last_error TEXT,
39
+ created_at INTEGER NOT NULL,
40
+ updated_at INTEGER NOT NULL
41
+ );
42
+
43
+ CREATE TABLE session_preparation_cleanup (
44
+ environment_id TEXT PRIMARY KEY,
45
+ conversation_id TEXT NOT NULL,
46
+ not_before INTEGER NOT NULL,
47
+ last_error TEXT
48
+ );
49
+
50
+ CREATE TRIGGER session_creation_tombstone BEFORE DELETE ON sessions BEGIN
51
+ INSERT INTO session_tombstones(conversation_id, deleted_at)
52
+ VALUES (OLD.conversation_id, CAST(unixepoch('subsec') * 1000 AS INTEGER))
53
+ ON CONFLICT(conversation_id) DO NOTHING;
54
+ INSERT INTO session_preparation_cleanup(environment_id, conversation_id, not_before)
55
+ SELECT environment_id, conversation_id, max(lease_until, CAST(unixepoch('subsec') * 1000 AS INTEGER)) + 5000
56
+ FROM session_preparations WHERE conversation_id=OLD.conversation_id
57
+ AND json_extract(creation_json, '$.execution.mode')='managed_worktree'
58
+ ON CONFLICT(environment_id) DO NOTHING;
59
+ END;
@@ -0,0 +1,8 @@
1
+ CREATE TABLE IF NOT EXISTS task_origin_links (
2
+ task_id TEXT PRIMARY KEY REFERENCES tasks(task_id) ON DELETE CASCADE,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ created_at INTEGER NOT NULL
5
+ );
6
+
7
+ CREATE INDEX IF NOT EXISTS idx_task_origin_links_conversation
8
+ ON task_origin_links(conversation_id, created_at DESC);
@@ -0,0 +1,32 @@
1
+ CREATE TABLE task_collaboration_entries (
2
+ entry_id TEXT PRIMARY KEY,
3
+ task_id TEXT NOT NULL REFERENCES tasks(task_id) ON DELETE CASCADE,
4
+ task_run_id TEXT REFERENCES task_runs(run_id) ON DELETE SET NULL,
5
+ assignment_epoch INTEGER,
6
+ sequence INTEGER NOT NULL,
7
+ author_kind TEXT NOT NULL CHECK (author_kind IN ('main_agent', 'worker_agent', 'user', 'system')),
8
+ author_id TEXT NOT NULL,
9
+ kind TEXT NOT NULL CHECK (kind IN ('progress', 'question', 'answer', 'instruction', 'ack', 'result', 'failure')),
10
+ body TEXT NOT NULL CHECK (length(body) BETWEEN 1 AND 8000),
11
+ causation_id TEXT,
12
+ idempotency_key TEXT NOT NULL,
13
+ created_at INTEGER NOT NULL,
14
+ UNIQUE (task_id, sequence),
15
+ UNIQUE (task_id, idempotency_key)
16
+ );
17
+
18
+ CREATE INDEX idx_task_collaboration_task_sequence
19
+ ON task_collaboration_entries(task_id, sequence);
20
+
21
+ CREATE TABLE task_collaboration_deliveries (
22
+ entry_id TEXT PRIMARY KEY REFERENCES task_collaboration_entries(entry_id) ON DELETE CASCADE,
23
+ status TEXT NOT NULL CHECK (status IN ('pending', 'delivered', 'confirmed', 'stale')),
24
+ conversation_id TEXT,
25
+ assignment_epoch INTEGER,
26
+ client_message_id TEXT NOT NULL UNIQUE,
27
+ attempts INTEGER NOT NULL DEFAULT 0,
28
+ updated_at INTEGER NOT NULL
29
+ );
30
+
31
+ CREATE INDEX idx_task_collaboration_deliveries_pending
32
+ ON task_collaboration_deliveries(status, updated_at);
@@ -0,0 +1,9 @@
1
+ CREATE TABLE task_main_update_deliveries (
2
+ entry_id TEXT PRIMARY KEY REFERENCES task_collaboration_entries(entry_id) ON DELETE CASCADE,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ status TEXT NOT NULL CHECK (status IN ('pending', 'delivered')),
5
+ updated_at INTEGER NOT NULL
6
+ );
7
+
8
+ CREATE INDEX idx_task_main_update_deliveries_pending
9
+ ON task_main_update_deliveries(status, updated_at);
@@ -0,0 +1,8 @@
1
+ ALTER TABLE task_main_update_deliveries
2
+ ADD COLUMN decision TEXT CHECK (decision IN ('notify', 'silent'));
3
+
4
+ ALTER TABLE task_main_update_deliveries
5
+ ADD COLUMN decision_reason TEXT;
6
+
7
+ ALTER TABLE task_main_update_deliveries
8
+ ADD COLUMN decided_at INTEGER;
@@ -0,0 +1,14 @@
1
+ CREATE TABLE task_main_agent_links (
2
+ task_id TEXT PRIMARY KEY REFERENCES tasks(task_id) ON DELETE CASCADE,
3
+ agent_id TEXT NOT NULL,
4
+ origin_conversation_id TEXT,
5
+ created_at INTEGER NOT NULL
6
+ );
7
+
8
+ CREATE INDEX idx_task_main_agent_links_agent_created
9
+ ON task_main_agent_links(agent_id, created_at DESC);
10
+
11
+ INSERT INTO task_main_agent_links (task_id, agent_id, origin_conversation_id, created_at)
12
+ SELECT origin.task_id, session.agent_id, origin.conversation_id, origin.created_at
13
+ FROM task_origin_links origin
14
+ JOIN sessions session ON session.conversation_id = origin.conversation_id;
@@ -0,0 +1,12 @@
1
+ CREATE TABLE IF NOT EXISTS task_criterion_reviews (
2
+ task_id TEXT NOT NULL,
3
+ contract_version INTEGER NOT NULL,
4
+ criterion_index INTEGER NOT NULL,
5
+ criterion_text TEXT NOT NULL,
6
+ status TEXT NOT NULL CHECK (status IN ('passed', 'failed')),
7
+ note TEXT,
8
+ reviewed_by_json TEXT NOT NULL,
9
+ reviewed_at INTEGER NOT NULL,
10
+ PRIMARY KEY (task_id, contract_version, criterion_index),
11
+ FOREIGN KEY (task_id, contract_version) REFERENCES task_contracts(task_id, version) ON DELETE CASCADE
12
+ );
@@ -0,0 +1,8 @@
1
+ CREATE TABLE personal_agent_onboarding (
2
+ owner_id TEXT PRIMARY KEY,
3
+ step TEXT NOT NULL,
4
+ draft_json TEXT NOT NULL DEFAULT '{}',
5
+ completed_at INTEGER,
6
+ welcome_finished_at INTEGER,
7
+ updated_at INTEGER NOT NULL
8
+ );
@@ -0,0 +1,32 @@
1
+ ALTER TABLE task_origin_links ADD COLUMN origin_transcript_id TEXT;
2
+ ALTER TABLE task_origin_links ADD COLUMN request_input_id TEXT;
3
+ UPDATE task_origin_links SET origin_transcript_id = (
4
+ SELECT active_transcript_id FROM sessions WHERE sessions.conversation_id = task_origin_links.conversation_id
5
+ );
6
+
7
+ CREATE TABLE task_run_outcomes (
8
+ task_run_id TEXT NOT NULL REFERENCES task_runs(run_id) ON DELETE CASCADE,
9
+ outcome_id TEXT NOT NULL,
10
+ assignment_epoch INTEGER NOT NULL,
11
+ outcome_json TEXT NOT NULL,
12
+ created_at INTEGER NOT NULL,
13
+ PRIMARY KEY(task_run_id, outcome_id)
14
+ );
15
+
16
+ CREATE TABLE task_result_deliveries (
17
+ delivery_id TEXT PRIMARY KEY,
18
+ task_run_id TEXT NOT NULL REFERENCES task_runs(run_id) ON DELETE CASCADE,
19
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
20
+ payload_json TEXT NOT NULL,
21
+ status TEXT NOT NULL CHECK(status IN ('pending', 'delivered', 'stale', 'failed')),
22
+ message_entry_id TEXT,
23
+ attempts INTEGER NOT NULL DEFAULT 0,
24
+ next_attempt_at INTEGER NOT NULL,
25
+ last_error TEXT,
26
+ created_at INTEGER NOT NULL,
27
+ delivered_at INTEGER,
28
+ notified_at INTEGER,
29
+ UNIQUE(task_run_id, conversation_id)
30
+ );
31
+ CREATE INDEX idx_task_result_deliveries_pending
32
+ ON task_result_deliveries(status, next_attempt_at);
@@ -0,0 +1,28 @@
1
+ CREATE TABLE personal_requests (
2
+ request_id TEXT PRIMARY KEY,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ transcript_id TEXT NOT NULL,
5
+ input_id TEXT NOT NULL,
6
+ idempotency_key TEXT NOT NULL,
7
+ request_hash TEXT NOT NULL,
8
+ objective TEXT NOT NULL,
9
+ connector_id TEXT NOT NULL,
10
+ executor_agent_id TEXT NOT NULL,
11
+ account_id TEXT,
12
+ parameters_json TEXT NOT NULL,
13
+ state TEXT NOT NULL CHECK(state IN ('preflighting','waiting_connection','queued','running','completed','failed','cancelled')),
14
+ connection_wait_id TEXT UNIQUE,
15
+ task_id TEXT UNIQUE REFERENCES tasks(task_id) ON DELETE SET NULL,
16
+ result_json TEXT,
17
+ result_run_id TEXT,
18
+ delivery_entry_id TEXT,
19
+ notified_at INTEGER,
20
+ delivery_attempts INTEGER NOT NULL DEFAULT 0,
21
+ delivery_next_attempt_at INTEGER NOT NULL DEFAULT 0,
22
+ delivery_error TEXT,
23
+ version INTEGER NOT NULL DEFAULT 1,
24
+ created_at INTEGER NOT NULL,
25
+ updated_at INTEGER NOT NULL,
26
+ UNIQUE(conversation_id, transcript_id, idempotency_key)
27
+ );
28
+ CREATE INDEX idx_personal_requests_conversation ON personal_requests(conversation_id, created_at);
@@ -0,0 +1,3 @@
1
+ ALTER TABLE ai_usage_events ADD COLUMN otel_trace_id TEXT;
2
+ ALTER TABLE ai_usage_events ADD COLUMN otel_span_id TEXT;
3
+ CREATE INDEX idx_ai_usage_events_otel_trace ON ai_usage_events(otel_trace_id) WHERE otel_trace_id IS NOT NULL;
@@ -0,0 +1,14 @@
1
+ -- Keep artifact delivery and final prose in one durable outbox with independent progress.
2
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_payload_json TEXT;
3
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_status TEXT CHECK(reply_status IN ('pending','generating','ready','delivered','stale'));
4
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_lease_token TEXT;
5
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_lease_until INTEGER NOT NULL DEFAULT 0;
6
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_text TEXT;
7
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_draft_transcript_id TEXT;
8
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_message_entry_id TEXT;
9
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_notified_at INTEGER;
10
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_attempts INTEGER NOT NULL DEFAULT 0;
11
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_next_attempt_at INTEGER NOT NULL DEFAULT 0;
12
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_last_error TEXT;
13
+
14
+ CREATE INDEX idx_task_result_reply_pending ON task_result_deliveries(reply_status, reply_next_attempt_at, reply_lease_until);
@@ -0,0 +1,3 @@
1
+ -- Conversation priority is independent of Task cancellation and artifact delivery.
2
+ ALTER TABLE session_inputs ADD COLUMN interrupt_requested INTEGER NOT NULL DEFAULT 0 CHECK(interrupt_requested IN (0, 1));
3
+ ALTER TABLE task_result_deliveries ADD COLUMN reply_context_revision INTEGER;
@@ -0,0 +1,53 @@
1
+ CREATE TABLE personal_attention_threads (
2
+ id TEXT PRIMARY KEY, owner_id TEXT NOT NULL, agent_id TEXT NOT NULL,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ subject TEXT NOT NULL, summary TEXT NOT NULL, kind TEXT NOT NULL CHECK(kind IN ('outcome','discussion','interest')),
5
+ status TEXT NOT NULL CHECK(status IN ('candidate','active','paused','completed','expired')),
6
+ authority TEXT NOT NULL CHECK(authority IN ('user_explicit','inferred')),
7
+ task_id TEXT, project_id TEXT, next_check_at INTEGER, pause_until INTEGER, expires_at INTEGER NOT NULL,
8
+ last_meaningful_at INTEGER NOT NULL, revision INTEGER NOT NULL DEFAULT 1,
9
+ created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL
10
+ );
11
+ CREATE INDEX personal_attention_due ON personal_attention_threads(status, next_check_at);
12
+ CREATE TABLE personal_attention_sources (
13
+ thread_id TEXT NOT NULL REFERENCES personal_attention_threads(id) ON DELETE CASCADE,
14
+ evidence_id TEXT REFERENCES context_evidence(evidence_id) ON DELETE CASCADE,
15
+ entry_id TEXT NOT NULL REFERENCES transcript_entries(entry_id) ON DELETE CASCADE,
16
+ transcript_id TEXT NOT NULL, conversation_id TEXT NOT NULL,
17
+ PRIMARY KEY(thread_id, entry_id)
18
+ );
19
+ CREATE TABLE personal_wakeups (
20
+ id TEXT PRIMARY KEY, thread_id TEXT NOT NULL REFERENCES personal_attention_threads(id) ON DELETE CASCADE,
21
+ dedupe_key TEXT NOT NULL UNIQUE, trigger_kind TEXT NOT NULL, source_event_id TEXT,
22
+ thread_revision INTEGER NOT NULL, not_before INTEGER NOT NULL, expires_at INTEGER NOT NULL,
23
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','evaluating','done','cancelled','dead_letter')),
24
+ lease_token TEXT, lease_until INTEGER NOT NULL DEFAULT 0, attempts INTEGER NOT NULL DEFAULT 0,
25
+ next_attempt_at INTEGER NOT NULL DEFAULT 0, last_error TEXT, created_at INTEGER NOT NULL
26
+ );
27
+ CREATE INDEX personal_wakeups_due ON personal_wakeups(status, next_attempt_at, not_before);
28
+ CREATE TABLE personal_outreach (
29
+ id TEXT PRIMARY KEY, wakeup_id TEXT NOT NULL UNIQUE REFERENCES personal_wakeups(id) ON DELETE CASCADE,
30
+ thread_id TEXT NOT NULL REFERENCES personal_attention_threads(id) ON DELETE CASCADE,
31
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
32
+ origin_transcript_id TEXT NOT NULL, thread_revision INTEGER NOT NULL, context_revision INTEGER NOT NULL,
33
+ policy_revision INTEGER NOT NULL, decision TEXT NOT NULL, reason TEXT NOT NULL,
34
+ state TEXT NOT NULL CHECK(state IN ('decided','ready','published','stale','cancelled')),
35
+ text TEXT, provenance_json TEXT NOT NULL CHECK(json_valid(provenance_json)),
36
+ valid_until INTEGER NOT NULL, message_entry_id TEXT, notified_at INTEGER,
37
+ created_at INTEGER NOT NULL, published_at INTEGER
38
+ );
39
+ CREATE INDEX personal_outreach_pending ON personal_outreach(state, created_at);
40
+ CREATE TABLE personal_feedback (
41
+ id TEXT PRIMARY KEY, outreach_id TEXT NOT NULL REFERENCES personal_outreach(id) ON DELETE CASCADE,
42
+ thread_id TEXT NOT NULL REFERENCES personal_attention_threads(id) ON DELETE CASCADE,
43
+ owner_id TEXT NOT NULL, kind TEXT NOT NULL, scope TEXT NOT NULL,
44
+ payload_json TEXT NOT NULL CHECK(json_valid(payload_json)), created_at INTEGER NOT NULL,
45
+ dedupe_key TEXT NOT NULL, UNIQUE(owner_id, dedupe_key)
46
+ );
47
+ CREATE TABLE personal_adaptive_strategies (
48
+ id TEXT PRIMARY KEY, thread_id TEXT NOT NULL REFERENCES personal_attention_threads(id) ON DELETE CASCADE,
49
+ feedback_id TEXT NOT NULL UNIQUE REFERENCES personal_feedback(id) ON DELETE CASCADE,
50
+ dimension TEXT NOT NULL CHECK(dimension = 'preparation'), value TEXT NOT NULL,
51
+ authority TEXT NOT NULL CHECK(authority = 'explicit'), revision INTEGER NOT NULL,
52
+ created_at INTEGER NOT NULL, review_at INTEGER NOT NULL
53
+ );