@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,18 @@
1
+ CREATE TABLE personal_strategy_versions (
2
+ id TEXT PRIMARY KEY,
3
+ owner_id TEXT NOT NULL,
4
+ thread_id TEXT NOT NULL REFERENCES personal_attention_threads(id) ON DELETE CASCADE,
5
+ revision INTEGER NOT NULL,
6
+ kind TEXT NOT NULL CHECK(kind IN ('stop', 'defer', 'adjust', 'rollback')),
7
+ before_json TEXT NOT NULL CHECK(json_valid(before_json)),
8
+ after_json TEXT NOT NULL CHECK(json_valid(after_json)),
9
+ input_json TEXT NOT NULL CHECK(json_valid(input_json)),
10
+ source_entry_id TEXT REFERENCES transcript_entries(entry_id) ON DELETE SET NULL,
11
+ feedback_id TEXT REFERENCES personal_feedback(id) ON DELETE SET NULL,
12
+ restored_version_id TEXT REFERENCES personal_strategy_versions(id),
13
+ dedupe_key TEXT NOT NULL,
14
+ created_at INTEGER NOT NULL,
15
+ UNIQUE(owner_id, dedupe_key),
16
+ UNIQUE(thread_id, revision)
17
+ );
18
+ CREATE INDEX personal_strategy_versions_thread ON personal_strategy_versions(thread_id, revision DESC);
@@ -0,0 +1,45 @@
1
+ CREATE TABLE browser_automation_versions (
2
+ automation_id TEXT NOT NULL REFERENCES browser_automations(automation_id) ON DELETE CASCADE,
3
+ revision INTEGER NOT NULL,
4
+ definition_json TEXT NOT NULL,
5
+ created_at_ms INTEGER NOT NULL,
6
+ PRIMARY KEY (automation_id, revision)
7
+ );
8
+ INSERT INTO browser_automation_versions SELECT automation_id, revision, definition_json, updated_at_ms FROM browser_automations;
9
+
10
+ CREATE TABLE browser_automation_verifications (
11
+ automation_id TEXT NOT NULL,
12
+ revision INTEGER NOT NULL,
13
+ run_id TEXT NOT NULL REFERENCES browser_automation_runs(run_id) ON DELETE CASCADE,
14
+ verified_at_ms INTEGER NOT NULL,
15
+ PRIMARY KEY (automation_id, revision),
16
+ FOREIGN KEY (automation_id, revision) REFERENCES browser_automation_versions(automation_id, revision) ON DELETE CASCADE
17
+ );
18
+ ALTER TABLE browser_automation_runs ADD COLUMN client_request_id TEXT;
19
+ ALTER TABLE browser_automation_runs ADD COLUMN business_outcome TEXT;
20
+ CREATE UNIQUE INDEX idx_browser_run_request ON browser_automation_runs(client_request_id) WHERE client_request_id IS NOT NULL;
21
+
22
+ CREATE TABLE browser_recordings (
23
+ recording_id TEXT PRIMARY KEY,
24
+ principal_id TEXT NOT NULL,
25
+ state TEXT NOT NULL,
26
+ ack_seq INTEGER NOT NULL DEFAULT 0,
27
+ final_seq INTEGER,
28
+ automation_id TEXT REFERENCES browser_automations(automation_id) ON DELETE CASCADE,
29
+ error TEXT,
30
+ created_at_ms INTEGER NOT NULL,
31
+ updated_at_ms INTEGER NOT NULL
32
+ );
33
+ CREATE TABLE browser_recording_events (
34
+ recording_id TEXT NOT NULL REFERENCES browser_recordings(recording_id) ON DELETE CASCADE,
35
+ seq INTEGER NOT NULL,
36
+ event_id TEXT NOT NULL UNIQUE,
37
+ payload_json TEXT NOT NULL,
38
+ PRIMARY KEY (recording_id, seq)
39
+ );
40
+
41
+ UPDATE automations SET action_json=json_set(action_json, '$.revision', COALESCE((SELECT revision FROM browser_automations WHERE automation_id=json_extract(automations.action_json, '$.automationId')), 1)), enabled=0
42
+ WHERE json_extract(action_json, '$.kind')='browser_automation';
43
+
44
+ UPDATE devices SET scopes_json=json_insert(scopes_json, '$[#]', 'automations.read') WHERE platform='chrome' AND NOT EXISTS(SELECT 1 FROM json_each(scopes_json) WHERE value='automations.read');
45
+ UPDATE devices SET scopes_json=json_insert(scopes_json, '$[#]', 'automations.write') WHERE platform='chrome' AND NOT EXISTS(SELECT 1 FROM json_each(scopes_json) WHERE value='automations.write');
@@ -0,0 +1,26 @@
1
+ CREATE TABLE clarification_notification_outbox (
2
+ wait_id TEXT PRIMARY KEY REFERENCES session_clarification_waits(id) ON DELETE CASCADE,
3
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'settled')),
4
+ created_at INTEGER NOT NULL
5
+ );
6
+ CREATE INDEX idx_clarification_notification_pending ON clarification_notification_outbox(status, created_at);
7
+ INSERT INTO clarification_notification_outbox(wait_id, created_at)
8
+ SELECT id, CAST(json_extract(data_json, '$.createdAt') AS INTEGER)
9
+ FROM session_clarification_waits WHERE status = 'open';
10
+
11
+ ALTER TABLE notification_deliveries RENAME TO notification_deliveries_old;
12
+ CREATE TABLE notification_deliveries (
13
+ event_id TEXT NOT NULL REFERENCES notification_events(event_id) ON DELETE CASCADE,
14
+ device_id TEXT NOT NULL REFERENCES device_push_endpoints(device_id) ON DELETE CASCADE,
15
+ status TEXT NOT NULL CHECK(status IN ('pending', 'accepted', 'delivered', 'dead', 'cancelled')),
16
+ attempts INTEGER NOT NULL DEFAULT 0,
17
+ next_attempt_at INTEGER NOT NULL,
18
+ provider_ticket_id TEXT,
19
+ last_error TEXT,
20
+ updated_at INTEGER NOT NULL,
21
+ PRIMARY KEY(event_id, device_id)
22
+ );
23
+ INSERT INTO notification_deliveries SELECT * FROM notification_deliveries_old;
24
+ DROP TABLE notification_deliveries_old;
25
+ CREATE INDEX idx_notification_deliveries_due ON notification_deliveries(status, next_attempt_at);
26
+ CREATE INDEX idx_notification_deliveries_device ON notification_deliveries(device_id);
@@ -0,0 +1,5 @@
1
+ CREATE TABLE endpoint_device_settings (
2
+ principal_id TEXT PRIMARY KEY REFERENCES endpoint_principals(id) ON DELETE CASCADE,
3
+ nickname TEXT NOT NULL CHECK(length(nickname) BETWEEN 1 AND 80),
4
+ revision INTEGER NOT NULL DEFAULT 1 CHECK(revision > 0)
5
+ );
@@ -0,0 +1,13 @@
1
+ CREATE TABLE device_grant_events (
2
+ id TEXT PRIMARY KEY,
3
+ grant_id TEXT NOT NULL,
4
+ conversation_id TEXT NOT NULL,
5
+ requestor_principal_id TEXT NOT NULL,
6
+ target_principal_id TEXT NOT NULL,
7
+ target_endpoint_id TEXT NOT NULL,
8
+ tool_name TEXT NOT NULL,
9
+ arguments_sha256 TEXT NOT NULL,
10
+ event TEXT NOT NULL CHECK(event IN ('issued','reserved','consumed','revoked','expired')),
11
+ created_at_ms INTEGER NOT NULL
12
+ );
13
+ CREATE INDEX device_grant_events_conversation ON device_grant_events(conversation_id, created_at_ms);
@@ -0,0 +1,5 @@
1
+ ALTER TABLE ai_usage_events ADD COLUMN cloud_request_id TEXT;
2
+ ALTER TABLE ai_usage_events ADD COLUMN cloud_billing_json TEXT
3
+ CHECK(cloud_billing_json IS NULL OR json_valid(cloud_billing_json));
4
+ CREATE UNIQUE INDEX idx_ai_usage_cloud_request
5
+ ON ai_usage_events(cloud_request_id) WHERE cloud_request_id IS NOT NULL;
@@ -0,0 +1,12 @@
1
+ CREATE TABLE voice_opening_greetings (
2
+ principal_id TEXT NOT NULL,
3
+ conversation_id TEXT NOT NULL,
4
+ logical_call_id TEXT NOT NULL,
5
+ response_id TEXT NOT NULL,
6
+ state TEXT NOT NULL CHECK(state IN ('claimed', 'completed', 'skipped', 'interrupted', 'failed', 'expired')),
7
+ reason TEXT,
8
+ created_at INTEGER NOT NULL,
9
+ updated_at INTEGER NOT NULL,
10
+ PRIMARY KEY (principal_id, conversation_id, logical_call_id)
11
+ );
12
+ CREATE INDEX idx_voice_opening_greetings_created ON voice_opening_greetings(created_at);
@@ -0,0 +1,8 @@
1
+ ALTER TABLE devices ADD COLUMN request_proof_version INTEGER NOT NULL DEFAULT 0;
2
+ CREATE TABLE device_request_nonces (
3
+ device_id TEXT NOT NULL REFERENCES devices(device_id) ON DELETE CASCADE,
4
+ nonce TEXT NOT NULL,
5
+ expires_at INTEGER NOT NULL,
6
+ PRIMARY KEY (device_id, nonce)
7
+ ) WITHOUT ROWID;
8
+ CREATE INDEX device_request_nonces_expiry ON device_request_nonces(expires_at);
@@ -0,0 +1,125 @@
1
+ ALTER TABLE knowledge_items ADD COLUMN claim_mode TEXT NOT NULL DEFAULT 'observed'
2
+ CHECK (claim_mode IN ('explicit', 'observed', 'inferred', 'reported'));
3
+ ALTER TABLE knowledge_items ADD COLUMN verification TEXT NOT NULL DEFAULT 'supported'
4
+ CHECK (verification IN ('supported', 'tentative', 'conflicted'));
5
+ ALTER TABLE knowledge_items ADD COLUMN sensitivity TEXT NOT NULL DEFAULT 'normal'
6
+ CHECK (sensitivity IN ('normal', 'personal', 'secret', 'regulated'));
7
+ ALTER TABLE user_assertion_evidence ADD COLUMN content_hash TEXT;
8
+ CREATE TRIGGER assertion_evidence_snapshot_insert AFTER INSERT ON user_assertion_evidence BEGIN
9
+ UPDATE user_assertion_evidence SET content_hash = (SELECT content_hash FROM context_evidence WHERE evidence_id = NEW.evidence_id)
10
+ WHERE assertion_id = NEW.assertion_id AND evidence_id = NEW.evidence_id AND relation = NEW.relation;
11
+ END;
12
+ CREATE TRIGGER assertion_evidence_snapshot_update AFTER UPDATE OF confidence ON user_assertion_evidence BEGIN
13
+ UPDATE user_assertion_evidence SET content_hash = (SELECT content_hash FROM context_evidence WHERE evidence_id = NEW.evidence_id)
14
+ WHERE assertion_id = NEW.assertion_id AND evidence_id = NEW.evidence_id AND relation = NEW.relation;
15
+ END;
16
+ UPDATE knowledge_items SET claim_mode = CASE origin_class
17
+ WHEN 'owner' THEN 'explicit' WHEN 'untrusted' THEN 'reported' ELSE 'observed' END,
18
+ verification = CASE WHEN origin_class = 'untrusted' AND record_class = 'memory' THEN 'tentative' ELSE 'supported' END;
19
+
20
+ CREATE TABLE knowledge_revisions (
21
+ revision_id TEXT PRIMARY KEY,
22
+ knowledge_id TEXT NOT NULL REFERENCES knowledge_items(knowledge_id) ON DELETE CASCADE,
23
+ content TEXT NOT NULL,
24
+ source_json TEXT NOT NULL,
25
+ created_at INTEGER NOT NULL
26
+ );
27
+ CREATE INDEX knowledge_revisions_item ON knowledge_revisions(knowledge_id, created_at);
28
+ CREATE TABLE knowledge_evidence_links (
29
+ knowledge_id TEXT NOT NULL REFERENCES knowledge_items(knowledge_id) ON DELETE CASCADE,
30
+ evidence_id TEXT NOT NULL REFERENCES context_evidence(evidence_id) ON DELETE CASCADE,
31
+ content_hash TEXT,
32
+ consent_receipt_id TEXT REFERENCES understanding_consent_receipts(receipt_id),
33
+ PRIMARY KEY (knowledge_id, evidence_id)
34
+ );
35
+ CREATE TABLE owner_identity_bindings (
36
+ principal_id TEXT NOT NULL,
37
+ channel TEXT NOT NULL,
38
+ account_id TEXT NOT NULL,
39
+ peer_id TEXT NOT NULL,
40
+ verified_at INTEGER NOT NULL,
41
+ revoked_at INTEGER,
42
+ PRIMARY KEY (channel, account_id, peer_id)
43
+ );
44
+ CREATE TABLE memory_learning_jobs (
45
+ job_id TEXT PRIMARY KEY,
46
+ principal_id TEXT NOT NULL DEFAULT 'local-owner',
47
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
48
+ transcript_id TEXT NOT NULL,
49
+ through_seq INTEGER NOT NULL,
50
+ start_seq INTEGER,
51
+ extractor_version TEXT NOT NULL,
52
+ policy_hash TEXT NOT NULL,
53
+ workspace_id TEXT NOT NULL,
54
+ state TEXT NOT NULL CHECK (state IN ('queued','running','succeeded','retry_wait','failed','canceled')),
55
+ lease_token TEXT,
56
+ lease_until INTEGER,
57
+ attempts INTEGER NOT NULL DEFAULT 0,
58
+ next_attempt_at INTEGER NOT NULL,
59
+ error_code TEXT,
60
+ created_at INTEGER NOT NULL,
61
+ updated_at INTEGER NOT NULL,
62
+ UNIQUE(conversation_id, transcript_id, through_seq, extractor_version, policy_hash)
63
+ );
64
+ CREATE INDEX memory_learning_jobs_due ON memory_learning_jobs(state, next_attempt_at, lease_until);
65
+ CREATE TABLE memory_source_learning_jobs (
66
+ job_id TEXT PRIMARY KEY,
67
+ chunk_id TEXT NOT NULL REFERENCES knowledge_source_chunks(chunk_id) ON DELETE CASCADE,
68
+ agent_id TEXT NOT NULL,
69
+ workspace_id TEXT NOT NULL,
70
+ consent_receipt_id TEXT NOT NULL REFERENCES understanding_consent_receipts(receipt_id),
71
+ policy_hash TEXT NOT NULL,
72
+ state TEXT NOT NULL CHECK(state IN ('queued','running','succeeded','retry_wait','failed','canceled')),
73
+ lease_token TEXT,
74
+ lease_until INTEGER,
75
+ attempts INTEGER NOT NULL DEFAULT 0,
76
+ next_attempt_at INTEGER NOT NULL,
77
+ error_code TEXT,
78
+ created_at INTEGER NOT NULL,
79
+ updated_at INTEGER NOT NULL,
80
+ UNIQUE(chunk_id, agent_id, consent_receipt_id, policy_hash)
81
+ );
82
+ CREATE INDEX memory_source_learning_due ON memory_source_learning_jobs(state, next_attempt_at, lease_until);
83
+ CREATE TABLE memory_learning_receipts (
84
+ run_id TEXT PRIMARY KEY REFERENCES task_run_receipts(run_id) ON DELETE CASCADE,
85
+ learned_at INTEGER NOT NULL,
86
+ knowledge_id TEXT
87
+ );
88
+ CREATE TABLE memory_learning_cursors (
89
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
90
+ transcript_id TEXT NOT NULL,
91
+ processed_seq INTEGER NOT NULL DEFAULT 0,
92
+ observed_seq INTEGER NOT NULL DEFAULT 0,
93
+ updated_at INTEGER NOT NULL,
94
+ PRIMARY KEY (conversation_id, transcript_id)
95
+ );
96
+ CREATE TABLE knowledge_source_chunks (
97
+ chunk_id TEXT PRIMARY KEY,
98
+ source_item_id TEXT NOT NULL REFERENCES knowledge_source_items(item_id) ON DELETE CASCADE,
99
+ source_version TEXT NOT NULL,
100
+ consent_receipt_id TEXT REFERENCES understanding_consent_receipts(receipt_id),
101
+ ordinal INTEGER NOT NULL,
102
+ locator TEXT NOT NULL,
103
+ text TEXT NOT NULL,
104
+ UNIQUE(source_item_id, ordinal)
105
+ );
106
+ CREATE VIRTUAL TABLE knowledge_chunks_fts USING fts5(search_text, chunk_id UNINDEXED, tokenize='unicode61');
107
+ CREATE TRIGGER knowledge_chunk_insert AFTER INSERT ON knowledge_source_chunks BEGIN
108
+ INSERT INTO knowledge_chunks_fts(search_text, chunk_id) VALUES (xopc_memory_search_text(NEW.text), NEW.chunk_id);
109
+ END;
110
+ CREATE TRIGGER knowledge_chunk_delete AFTER DELETE ON knowledge_source_chunks BEGIN
111
+ DELETE FROM knowledge_chunks_fts WHERE chunk_id = OLD.chunk_id;
112
+ END;
113
+ CREATE VIRTUAL TABLE knowledge_search_fts USING fts5(search_text, knowledge_id UNINDEXED, tokenize='unicode61');
114
+ INSERT INTO knowledge_search_fts SELECT xopc_memory_search_text(content), knowledge_id FROM knowledge_items;
115
+ DROP TABLE knowledge_items_fts;
116
+ CREATE TRIGGER knowledge_search_insert AFTER INSERT ON knowledge_items BEGIN
117
+ INSERT INTO knowledge_search_fts VALUES (xopc_memory_search_text(NEW.content), NEW.knowledge_id);
118
+ END;
119
+ CREATE TRIGGER knowledge_search_update AFTER UPDATE OF content ON knowledge_items BEGIN
120
+ DELETE FROM knowledge_search_fts WHERE knowledge_id = OLD.knowledge_id;
121
+ INSERT INTO knowledge_search_fts VALUES (xopc_memory_search_text(NEW.content), NEW.knowledge_id);
122
+ END;
123
+ CREATE TRIGGER knowledge_search_delete AFTER DELETE ON knowledge_items BEGIN
124
+ DELETE FROM knowledge_search_fts WHERE knowledge_id = OLD.knowledge_id;
125
+ END;
@@ -0,0 +1,22 @@
1
+ -- Personal thinking preferences belong to the dedicated conversation, not its Agent.
2
+ INSERT INTO session_config (conversation_id, thinking_level, updated_at)
3
+ SELECT s.conversation_id, json_extract(a.overrides_json, '$.runtime.thinkingLevel'),
4
+ MAX(a.updated_at, s.updated_at)
5
+ FROM sessions s JOIN agents a ON a.id = s.agent_id
6
+ WHERE json_extract(s.custom_data_json, '$.personalAgent') = 1
7
+ AND json_type(a.overrides_json, '$.runtime.thinkingLevel') = 'text'
8
+ ON CONFLICT(conversation_id) DO UPDATE SET
9
+ thinking_level = COALESCE(session_config.thinking_level, excluded.thinking_level),
10
+ updated_at = CASE WHEN session_config.thinking_level IS NULL
11
+ THEN MAX(session_config.updated_at + 1, excluded.updated_at) ELSE session_config.updated_at END;
12
+
13
+ UPDATE agents SET
14
+ overrides_json = json_remove(overrides_json, '$.runtime.thinkingLevel'),
15
+ revision = revision + 1,
16
+ updated_at = MAX(updated_at + 1, CAST(unixepoch('subsec') * 1000 AS INTEGER))
17
+ WHERE id IN (SELECT agent_id FROM sessions WHERE json_extract(custom_data_json, '$.personalAgent') = 1)
18
+ AND json_type(overrides_json, '$.runtime.thinkingLevel') IS NOT NULL;
19
+
20
+ UPDATE agent_catalog_settings SET revision = revision + 1,
21
+ updated_at = MAX(updated_at + 1, CAST(unixepoch('subsec') * 1000 AS INTEGER))
22
+ WHERE singleton_id = 1 AND changes() > 0;
@@ -0,0 +1,32 @@
1
+ CREATE TABLE agent_selection_records (
2
+ id TEXT PRIMARY KEY,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ transcript_id TEXT,
5
+ input_id TEXT,
6
+ personal_request_id TEXT REFERENCES personal_requests(request_id) ON DELETE CASCADE,
7
+ task_id TEXT REFERENCES tasks(task_id) ON DELETE CASCADE,
8
+ task_run_id TEXT REFERENCES task_runs(run_id) ON DELETE SET NULL,
9
+ decision_group_id TEXT NOT NULL,
10
+ previous_selection_id TEXT REFERENCES agent_selection_records(id) ON DELETE SET NULL,
11
+ idempotency_key TEXT NOT NULL,
12
+ request_hash TEXT NOT NULL,
13
+ selected_agent_id TEXT NOT NULL,
14
+ selected_agent_revision INTEGER,
15
+ matcher_version INTEGER NOT NULL,
16
+ catalog_revision INTEGER NOT NULL,
17
+ requirements_json TEXT NOT NULL,
18
+ selected_profile_json TEXT,
19
+ assessment_json TEXT NOT NULL,
20
+ candidates_json TEXT,
21
+ selection_source TEXT NOT NULL CHECK(selection_source IN ('snapshot','match','explicit','legacy')),
22
+ reason_source TEXT NOT NULL CHECK(reason_source IN ('model','system')),
23
+ selection_reason TEXT NOT NULL,
24
+ status TEXT NOT NULL CHECK(status IN ('pending_connection','rejected','task_linked','start_blocked','start_failed')),
25
+ reason_code TEXT,
26
+ created_at INTEGER NOT NULL,
27
+ updated_at INTEGER NOT NULL,
28
+ UNIQUE(conversation_id, idempotency_key)
29
+ );
30
+ CREATE INDEX agent_selection_task ON agent_selection_records(task_id, created_at);
31
+ CREATE INDEX agent_selection_request ON agent_selection_records(personal_request_id);
32
+ CREATE INDEX agent_selection_origin ON agent_selection_records(conversation_id, created_at);
@@ -0,0 +1,20 @@
1
+ CREATE TABLE next_turn_suggestions (
2
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
3
+ locale TEXT NOT NULL CHECK (locale IN ('zh', 'en')),
4
+ suggestion_id TEXT NOT NULL UNIQUE,
5
+ snapshot_key TEXT NOT NULL,
6
+ state TEXT NOT NULL CHECK (state IN ('ready', 'none')),
7
+ payload_json TEXT,
8
+ expires_at INTEGER NOT NULL,
9
+ PRIMARY KEY (conversation_id, locale)
10
+ );
11
+ CREATE TABLE next_turn_suggestion_feedback (
12
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
13
+ suggestion_id TEXT NOT NULL,
14
+ impression_id TEXT NOT NULL,
15
+ event TEXT NOT NULL CHECK (event IN ('shown', 'accepted', 'dismissed', 'submitted')),
16
+ edited INTEGER NOT NULL DEFAULT 0,
17
+ created_at INTEGER NOT NULL,
18
+ PRIMARY KEY (suggestion_id, impression_id, event)
19
+ );
20
+ CREATE INDEX idx_next_turn_feedback_created ON next_turn_suggestion_feedback(created_at);
@@ -0,0 +1,17 @@
1
+ CREATE TABLE task_allocations (
2
+ id TEXT PRIMARY KEY,
3
+ task_id TEXT NOT NULL UNIQUE REFERENCES tasks(task_id) ON DELETE CASCADE,
4
+ origin_conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
5
+ requirements_json TEXT NOT NULL,
6
+ task_version INTEGER NOT NULL,
7
+ status TEXT NOT NULL CHECK(status IN ('pending','selecting','assigned','blocked','failed','cancelled')),
8
+ selected_agent_id TEXT,
9
+ selection_reason TEXT,
10
+ reason_code TEXT,
11
+ attempts INTEGER NOT NULL DEFAULT 0,
12
+ lease_token TEXT,
13
+ lease_expires_at INTEGER,
14
+ next_attempt_at INTEGER NOT NULL,
15
+ updated_at INTEGER NOT NULL
16
+ );
17
+ CREATE INDEX task_allocations_pending ON task_allocations(status, next_attempt_at, lease_expires_at);
@@ -0,0 +1,15 @@
1
+ CREATE TABLE research_checkpoints (
2
+ id TEXT PRIMARY KEY,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ workspace TEXT NOT NULL,
5
+ goal TEXT NOT NULL,
6
+ checkpoint_json TEXT NOT NULL CHECK(json_valid(checkpoint_json)),
7
+ status TEXT NOT NULL CHECK(status IN ('running','partial','completed','failed','cancelled')),
8
+ attempts INTEGER NOT NULL DEFAULT 0,
9
+ stop_reason TEXT,
10
+ summary TEXT NOT NULL DEFAULT '',
11
+ lease_token TEXT,
12
+ lease_expires_at INTEGER,
13
+ updated_at INTEGER NOT NULL
14
+ );
15
+ CREATE INDEX research_checkpoints_conversation ON research_checkpoints(conversation_id, updated_at);
@@ -0,0 +1,40 @@
1
+ CREATE TABLE personal_result_documents (
2
+ document_id TEXT PRIMARY KEY,
3
+ delivery_id TEXT NOT NULL REFERENCES task_result_deliveries(delivery_id) ON DELETE CASCADE,
4
+ source_id TEXT NOT NULL,
5
+ status TEXT NOT NULL CHECK(status IN ('pending', 'ready', 'unsupported', 'failed')),
6
+ lease_token TEXT,
7
+ lease_until INTEGER NOT NULL DEFAULT 0,
8
+ parser_version INTEGER NOT NULL,
9
+ content_revision TEXT,
10
+ content TEXT,
11
+ sections_json TEXT NOT NULL DEFAULT '[]',
12
+ limitations_json TEXT NOT NULL DEFAULT '[]',
13
+ fingerprint TEXT,
14
+ error TEXT,
15
+ UNIQUE(delivery_id, source_id)
16
+ );
17
+ CREATE VIRTUAL TABLE personal_result_search USING fts5(
18
+ document_id UNINDEXED, start_offset UNINDEXED, text, tokenize='trigram'
19
+ );
20
+ CREATE TABLE personal_result_sections (
21
+ document_id TEXT NOT NULL REFERENCES personal_result_documents(document_id) ON DELETE CASCADE,
22
+ section_id TEXT NOT NULL,
23
+ ordinal INTEGER NOT NULL,
24
+ title TEXT NOT NULL,
25
+ start_offset INTEGER NOT NULL,
26
+ char_length INTEGER NOT NULL,
27
+ locator_json TEXT NOT NULL,
28
+ PRIMARY KEY(document_id, section_id)
29
+ );
30
+ CREATE INDEX idx_personal_result_sections_order ON personal_result_sections(document_id, ordinal);
31
+ CREATE TABLE personal_result_read_waits (
32
+ input_id TEXT PRIMARY KEY REFERENCES session_inputs(id) ON DELETE CASCADE,
33
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
34
+ transcript_id TEXT NOT NULL,
35
+ requests_json TEXT NOT NULL,
36
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','queued','done','stale'))
37
+ );
38
+ CREATE TRIGGER personal_result_documents_delete AFTER DELETE ON personal_result_documents BEGIN
39
+ DELETE FROM personal_result_search WHERE document_id = old.document_id;
40
+ END;
@@ -0,0 +1,15 @@
1
+ CREATE TABLE task_work_revisions (
2
+ revision_id TEXT PRIMARY KEY,
3
+ task_id TEXT NOT NULL REFERENCES tasks(task_id) ON DELETE CASCADE,
4
+ contract_version INTEGER NOT NULL,
5
+ baseline_delivery_id TEXT NOT NULL,
6
+ baseline_version TEXT NOT NULL,
7
+ instruction_entry_id TEXT NOT NULL,
8
+ input_id TEXT,
9
+ idempotency_key TEXT NOT NULL UNIQUE,
10
+ request_hash TEXT NOT NULL,
11
+ supersedes_json TEXT NOT NULL DEFAULT '[]',
12
+ original_body TEXT,
13
+ created_at INTEGER NOT NULL,
14
+ UNIQUE(task_id, contract_version)
15
+ );
@@ -0,0 +1,20 @@
1
+ CREATE TABLE discussion_processing (
2
+ discussion_id TEXT PRIMARY KEY REFERENCES discussion_captures(id) ON DELETE CASCADE,
3
+ run_id TEXT NOT NULL UNIQUE,
4
+ audio_sha256 TEXT,
5
+ base_transcript_revision INTEGER NOT NULL,
6
+ force_audio INTEGER NOT NULL DEFAULT 0 CHECK(force_audio IN (0,1)),
7
+ retry_stage TEXT,
8
+ attempt_count INTEGER NOT NULL DEFAULT 0,
9
+ next_attempt_at INTEGER,
10
+ lease_owner TEXT,
11
+ lease_until INTEGER
12
+ );
13
+ CREATE TABLE discussion_transcription_checkpoints (
14
+ run_id TEXT NOT NULL REFERENCES discussion_processing(run_id) ON DELETE CASCADE,
15
+ started_at_ms REAL NOT NULL,
16
+ ended_at_ms REAL NOT NULL,
17
+ result_json TEXT NOT NULL,
18
+ created_at INTEGER NOT NULL,
19
+ PRIMARY KEY(run_id, started_at_ms, ended_at_ms)
20
+ );
@@ -0,0 +1,17 @@
1
+ CREATE TABLE discussion_annotations (
2
+ discussion_id TEXT NOT NULL REFERENCES discussion_captures(id) ON DELETE CASCADE,
3
+ id TEXT NOT NULL,
4
+ kind TEXT NOT NULL CHECK(kind IN ('highlight','question','note')),
5
+ text TEXT NOT NULL,
6
+ anchor_json TEXT NOT NULL,
7
+ revision INTEGER NOT NULL,
8
+ deleted INTEGER NOT NULL DEFAULT 0,
9
+ created_at INTEGER NOT NULL,
10
+ updated_at INTEGER NOT NULL,
11
+ PRIMARY KEY(discussion_id,id)
12
+ );
13
+ CREATE TABLE discussion_media_timeline (
14
+ discussion_id TEXT PRIMARY KEY REFERENCES discussion_captures(id) ON DELETE CASCADE,
15
+ audio_sha256 TEXT NOT NULL,
16
+ timeline_json TEXT NOT NULL
17
+ );
@@ -0,0 +1,10 @@
1
+ CREATE TABLE discussion_chapter_progress (
2
+ discussion_id TEXT NOT NULL REFERENCES discussion_captures(id) ON DELETE CASCADE,
3
+ source_sha256 TEXT NOT NULL,
4
+ transcript_revision INTEGER NOT NULL,
5
+ transcript_sha256 TEXT NOT NULL,
6
+ input_hash TEXT NOT NULL,
7
+ position INTEGER NOT NULL,
8
+ chapter_json TEXT NOT NULL,
9
+ PRIMARY KEY(discussion_id, source_sha256, transcript_revision, transcript_sha256, input_hash)
10
+ );
@@ -0,0 +1,21 @@
1
+ CREATE TABLE task_main_update_deliveries_new (
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', 'failed')),
5
+ updated_at INTEGER NOT NULL,
6
+ decision TEXT CHECK (decision IN ('notify', 'silent')),
7
+ decision_reason TEXT,
8
+ decided_at INTEGER,
9
+ failure_count INTEGER NOT NULL DEFAULT 0,
10
+ last_error TEXT
11
+ );
12
+
13
+ INSERT INTO task_main_update_deliveries_new
14
+ (entry_id, conversation_id, status, updated_at, decision, decision_reason, decided_at)
15
+ SELECT entry_id, conversation_id, status, updated_at, decision, decision_reason, decided_at
16
+ FROM task_main_update_deliveries;
17
+
18
+ DROP TABLE task_main_update_deliveries;
19
+ ALTER TABLE task_main_update_deliveries_new RENAME TO task_main_update_deliveries;
20
+ CREATE INDEX idx_task_main_update_deliveries_pending
21
+ ON task_main_update_deliveries(status, updated_at);
@@ -0,0 +1,11 @@
1
+ -- Keep unscoped legacy entries out of session recall.
2
+ ALTER TABLE composer_input_history RENAME TO composer_input_history_legacy;
3
+ DROP INDEX idx_composer_input_history_recent;
4
+ CREATE TABLE composer_input_history (
5
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
6
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
7
+ text TEXT NOT NULL,
8
+ created_at INTEGER NOT NULL
9
+ );
10
+ CREATE INDEX idx_composer_input_history_recent
11
+ ON composer_input_history(conversation_id, id DESC);
@@ -0,0 +1,20 @@
1
+ ALTER TABLE tasks ADD COLUMN manual_phase_revision INTEGER NOT NULL DEFAULT 0;
2
+ ALTER TABLE tasks ADD COLUMN automatic_phase_revision INTEGER NOT NULL DEFAULT 0;
3
+ ALTER TABLE task_runs ADD COLUMN manual_phase_revision INTEGER NOT NULL DEFAULT 0;
4
+
5
+ CREATE TABLE task_phase_changes (
6
+ id TEXT PRIMARY KEY,
7
+ task_id TEXT NOT NULL REFERENCES tasks(task_id) ON DELETE CASCADE,
8
+ from_phase TEXT NOT NULL,
9
+ to_phase TEXT NOT NULL,
10
+ from_resolution TEXT,
11
+ to_resolution TEXT,
12
+ actor_json TEXT NOT NULL,
13
+ source TEXT NOT NULL,
14
+ operation_id TEXT,
15
+ run_id TEXT,
16
+ task_version INTEGER NOT NULL,
17
+ created_at INTEGER NOT NULL,
18
+ UNIQUE(task_id, task_version)
19
+ );
20
+ CREATE INDEX idx_task_phase_changes_task ON task_phase_changes(task_id, task_version);
@@ -0,0 +1,10 @@
1
+ -- Remove obsolete response controls before strict Agent profile validation.
2
+ UPDATE agents
3
+ SET profile_json = json_remove(profile_json, '$.responsePreferences'), revision = revision + 1
4
+ WHERE profile_json IS NOT NULL AND json_type(profile_json, '$.responsePreferences') IS NOT NULL;
5
+
6
+ -- Rebuild Personal instructions from the product defaults on the next load.
7
+ UPDATE agents
8
+ SET profile_json = json_remove(profile_json, '$.instructions'), revision = revision + 1
9
+ WHERE id IN (SELECT agent_id FROM sessions WHERE json_extract(custom_data_json, '$.personalAgent') = 1)
10
+ AND profile_json IS NOT NULL;
@@ -0,0 +1,9 @@
1
+ CREATE TABLE browser_setup_runs (
2
+ id TEXT PRIMARY KEY,
3
+ conversation_id TEXT NOT NULL,
4
+ agent_id TEXT NOT NULL,
5
+ revision INTEGER NOT NULL,
6
+ updated_at INTEGER NOT NULL,
7
+ payload_json TEXT NOT NULL
8
+ );
9
+ CREATE INDEX browser_setup_conversation ON browser_setup_runs(conversation_id, agent_id, updated_at);
@@ -1,8 +1,37 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
1
2
  import { resolve } from "node:path";
2
3
  import { existsSync } from "node:fs";
3
4
  import { execFileSync } from "node:child_process";
4
5
  //#region src/storage/sqlite/windows-database-owners.ts
5
- const script = String.raw`
6
+ function windowsDatabaseOwners(databasePath, execute = execFileSync) {
7
+ const paths = [
8
+ databasePath,
9
+ `${databasePath}-wal`,
10
+ `${databasePath}-shm`
11
+ ].filter(existsSync).map((path) => resolve(path));
12
+ return execute("powershell.exe", [
13
+ "-NoProfile",
14
+ "-NonInteractive",
15
+ "-Command",
16
+ script
17
+ ], {
18
+ encoding: "utf8",
19
+ timeout: 3e4,
20
+ windowsHide: true,
21
+ env: {
22
+ ...process.env,
23
+ XOPC_DATABASE_FILES: JSON.stringify(paths)
24
+ },
25
+ stdio: [
26
+ "ignore",
27
+ "pipe",
28
+ "pipe"
29
+ ]
30
+ }).trim().split(/\s+/).filter((pid) => pid && pid !== String(process.pid));
31
+ }
32
+ var script;
33
+ var init_windows_database_owners = __esmMin((() => {
34
+ script = String.raw`
6
35
  $ErrorActionPreference = 'Stop'
7
36
  Add-Type -TypeDefinition @'
8
37
  using System;
@@ -60,31 +89,7 @@ public static class XopcDatabaseOwners {
60
89
  '@
61
90
  [XopcDatabaseOwners]::Read([string[]](ConvertFrom-Json $env:XOPC_DATABASE_FILES)) | ForEach-Object { $_ }
62
91
  `;
63
- function windowsDatabaseOwners(databasePath, execute = execFileSync) {
64
- const paths = [
65
- databasePath,
66
- `${databasePath}-wal`,
67
- `${databasePath}-shm`
68
- ].filter(existsSync).map((path) => resolve(path));
69
- return execute("powershell.exe", [
70
- "-NoProfile",
71
- "-NonInteractive",
72
- "-Command",
73
- script
74
- ], {
75
- encoding: "utf8",
76
- timeout: 3e4,
77
- windowsHide: true,
78
- env: {
79
- ...process.env,
80
- XOPC_DATABASE_FILES: JSON.stringify(paths)
81
- },
82
- stdio: [
83
- "ignore",
84
- "pipe",
85
- "pipe"
86
- ]
87
- }).trim().split(/\s+/).filter((pid) => pid && pid !== String(process.pid));
88
- }
92
+ }));
89
93
  //#endregion
90
- export { windowsDatabaseOwners };
94
+ init_windows_database_owners();
95
+ export { init_windows_database_owners, windowsDatabaseOwners };