@xopcai/xopc 0.0.385 → 0.0.387

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 (360) hide show
  1. package/dist/browser-ext/dist/sidepanel.js +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Cb9eaXxR.js → agent-avatar-dicebear-Bv8M5ygD.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-DEV-xtgm.js → agent-defaults-settings-panel-UBy01-65.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-plugin-dialog-DXKc3Luj.js → agent-plugin-dialog-Q9guA8kU.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agents-DcNxwpJQ.js → agents-yfJFubD0.js} +3 -3
  8. package/dist/gateway/static/root/assets/{app-management-settings-panel-X5i0Tz7_.js → app-management-settings-panel-Cdyad8c1.js} +1 -1
  9. package/dist/gateway/static/root/assets/{appearance-settings-CmHHzquT.js → appearance-settings-DPPvnKH_.js} +1 -1
  10. package/dist/gateway/static/root/assets/{apps-page-ChFA4Zp0.js → apps-page-Bn_jwaeA.js} +1 -1
  11. package/dist/gateway/static/root/assets/{automations-page-BFqsIqOI.js → automations-page-CAB2sLJ5.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-workspace-Blfak-fT.js → automations-workspace-CYRUhhH4.js} +1 -1
  13. package/dist/gateway/static/root/assets/{block-editor-CpOLG3Co.js → block-editor-B9DmMEa8.js} +1 -1
  14. package/dist/gateway/static/root/assets/{browser-automations-page-BSbTJ9j2.js → browser-automations-page-BHAWpZE2.js} +1 -1
  15. package/dist/gateway/static/root/assets/{browser-settings-page-BUlILJrB.js → browser-settings-page-BG_17NcQ.js} +2 -2
  16. package/dist/gateway/static/root/assets/{capabilities-2Do3eKMM.js → capabilities-BX1rCiVm.js} +1 -1
  17. package/dist/gateway/static/root/assets/{capabilities-XFwwUNU3.js → capabilities-CW389yo6.js} +1 -1
  18. package/dist/gateway/static/root/assets/{capabilities-page-CeRdkwRf.js → capabilities-page-BAnBYWlY.js} +2 -2
  19. package/dist/gateway/static/root/assets/{capabilities-settings-panel-S-cKsGja.js → capabilities-settings-panel-Ca-d6lXk.js} +3 -3
  20. package/dist/gateway/static/root/assets/{capability-header-actions-6w8pQhnn.js → capability-header-actions-B3TL8TcF.js} +1 -1
  21. package/dist/gateway/static/root/assets/{channels-DfNTGBmp.js → channels-BadpS-nq.js} +1 -1
  22. package/dist/gateway/static/root/assets/{chat-terminal-dock-DnoQHpDc.js → chat-terminal-dock-C_vntFpP.js} +1 -1
  23. package/dist/gateway/static/root/assets/{chunk-KS7C4IRE-BMYIfy9x.js → chunk-KS7C4IRE--EKdQGRF.js} +1 -1
  24. package/dist/gateway/static/root/assets/{computer-settings-page-7yliE7sG.js → computer-settings-page-B-5kxk70.js} +1 -1
  25. package/dist/gateway/static/root/assets/{connector-service-page-DOLAUFSW.js → connector-service-page-DTnfpLHL.js} +1 -1
  26. package/dist/gateway/static/root/assets/{connectors-page-DAsn97XG.js → connectors-page-CmJV7gqj.js} +1 -1
  27. package/dist/gateway/static/root/assets/constants-DeXt1mV-.js +1 -0
  28. package/dist/gateway/static/root/assets/{date-picker-DNDqr4Fk.js → date-picker-D5zYeC8q.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dependency-picker-B5oG7RgE.js → dependency-picker-D72vT-tb.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-K7kUCX1O.js → desktop-pet-DvoeVPf_.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-settings-KgOAuqSh.js → desktop-pet-settings-Dfb392hs.js} +1 -1
  32. package/dist/gateway/static/root/assets/{device-pairing-wizard-DvqniZDm.js → device-pairing-wizard-B06Sqn5D.js} +1 -1
  33. package/dist/gateway/static/root/assets/{directory-picker-path-field-BmOguLDl.js → directory-picker-path-field-CA3H3bc-.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-DtHNy4TE.js → extension-debug-page-B0wTBCx4.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-DSSuMQxp.js → extension-page-BeHiXhB1.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-provider-nbgU7xBS.js → extension-provider-CJZ5EVpQ.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-DSd__mNd.js → extension-settings-page-Q88-LFCJ.js} +1 -1
  38. package/dist/gateway/static/root/assets/{fallback-models-D7bjbiwZ.js → fallback-models-BXoPCvzq.js} +1 -1
  39. package/dist/gateway/static/root/assets/{gateway-settings-hSXGWumL.js → gateway-settings-IICLMGDI.js} +1 -1
  40. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-C7xJwE61.js → highlighted-body-KQOG7T2V-D336so8z.js} +1 -1
  41. package/dist/gateway/static/root/assets/home-page--MvqsFhQ.js +2 -0
  42. package/dist/gateway/static/root/assets/{imports-page-BufZPzGE.js → imports-page-muV1SduS.js} +1 -1
  43. package/dist/gateway/static/root/assets/index-D0qMv3jf.js +260 -0
  44. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B8pPP5RF.js → keyboard-shortcuts-settings-i1sDWcwl.js} +1 -1
  45. package/dist/gateway/static/root/assets/{local-app-workbench-page-zEtvE7pJ.js → local-app-workbench-page-DY9tXEO6.js} +1 -1
  46. package/dist/gateway/static/root/assets/{local-apps-page-Bli7e_eg.js → local-apps-page-BHD73STy.js} +1 -1
  47. package/dist/gateway/static/root/assets/local-session-drafts-Be4BGM4Z.js +1 -0
  48. package/dist/gateway/static/root/assets/{logs-page-BimZk3R4.js → logs-page-DsPpe8Ws.js} +1 -1
  49. package/dist/gateway/static/root/assets/{management-settings-5Y4COyU9.js → management-settings-Buwi2wQE.js} +1 -1
  50. package/dist/gateway/static/root/assets/{markdown-view-DHfQAvZQ.js → markdown-view-CBjl-XEc.js} +2 -2
  51. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-D2mip-f9.js +1 -0
  52. package/dist/gateway/static/root/assets/{note-detail-panel-KLDPLVg7.js → note-detail-panel-D8n80Gbr.js} +3 -3
  53. package/dist/gateway/static/root/assets/{notes-api-nqN2wKYc.js → notes-api-BlGP533W.js} +1 -1
  54. package/dist/gateway/static/root/assets/{notes-page-DST0oPXD.js → notes-page-Btf-jSS_.js} +5 -5
  55. package/dist/gateway/static/root/assets/{page-context-capture-button-Bmed83-6.js → page-context-capture-button-97RL8Gc7.js} +1 -1
  56. package/dist/gateway/static/root/assets/{personal-page-BG4Ystrm.js → personal-page-B04L8Oz5.js} +1 -1
  57. package/dist/gateway/static/root/assets/product-open-page-9zEDvZa7.js +1 -0
  58. package/dist/gateway/static/root/assets/{product-preview-content-DjmupQSq.js → product-preview-content-DynBrIXq.js} +1 -1
  59. package/dist/gateway/static/root/assets/{project-detail-page-CzBmV0P6.js → project-detail-page-BM7MsoVA.js} +1 -1
  60. package/dist/gateway/static/root/assets/{projects-page-DByqe5Em.js → projects-page-pcyeEJnz.js} +1 -1
  61. package/dist/gateway/static/root/assets/{remote-access-hub-DTjj-odF.js → remote-access-hub-CphyTu22.js} +1 -1
  62. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-B_ptn3T8.js → runtime-tools-settings-panel-DPafoO0G.js} +1 -1
  63. package/dist/gateway/static/root/assets/{scenes-page-wkua4l5y.js → scenes-page-j97FrDRW.js} +2 -2
  64. package/dist/gateway/static/root/assets/{schema-form-VvOSM84Y.js → schema-form-CuJNwKHO.js} +1 -1
  65. package/dist/gateway/static/root/assets/{send-session-input-BCAF-Ikt.js → send-session-input-C293-Hbx.js} +1 -1
  66. package/dist/gateway/static/root/assets/session-manager-COd9RECl.js +16 -0
  67. package/dist/gateway/static/root/assets/{sessions-page-D06XwYAT.js → sessions-page-D8t_8fMl.js} +1 -1
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-CDkitNHA.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-page-C-6BJdb1.js → settings-page-DS9DMYUe.js} +1 -1
  70. package/dist/gateway/static/root/assets/{setup-status-panel-L0JSG0K-.js → setup-status-panel-DRDvm9yZ.js} +1 -1
  71. package/dist/gateway/static/root/assets/{share-link-dialog-C47Xgzta.js → share-link-dialog-BKGI8Kr0.js} +1 -1
  72. package/dist/gateway/static/root/assets/{share-preview-page-nJ2FWAEP.js → share-preview-page-BF2WaO43.js} +1 -1
  73. package/dist/gateway/static/root/assets/{shares-settings-BbgAUM3v.js → shares-settings-DQTQZu6V.js} +1 -1
  74. package/dist/gateway/static/root/assets/{skill-api-BFU1tPyw.js → skill-api-DzVa7G-O.js} +1 -1
  75. package/dist/gateway/static/root/assets/{skills-page-DZw6el4o.js → skills-page-CfJIjRdS.js} +1 -1
  76. package/dist/gateway/static/root/assets/{system-settings-panel-DshSGWNg.js → system-settings-panel-Bzhqed-a.js} +1 -1
  77. package/dist/gateway/static/root/assets/task-detail-page-BYQFC0-U.js +2 -0
  78. package/dist/gateway/static/root/assets/task-expandable-content-C9ohICpw.js +1 -0
  79. package/dist/gateway/static/root/assets/{tasks-DJIeIk9C.js → tasks-PuIUgF9L.js} +1 -1
  80. package/dist/gateway/static/root/assets/{tunnel-api-DFDXwWnU.js → tunnel-api-DrgpZ81I.js} +1 -1
  81. package/dist/gateway/static/root/assets/{usage-page-2RJLg54s.js → usage-page-Drk8FWnj.js} +1 -1
  82. package/dist/gateway/static/root/assets/{use-composer-attachments-BFP3k6oC.js → use-composer-attachments-rgW7h4sD.js} +1 -1
  83. package/dist/gateway/static/root/assets/{use-file-preview-expanded-B1BiTQNS.js → use-file-preview-expanded-DSKIxfz9.js} +1 -1
  84. package/dist/gateway/static/root/assets/{user-model-page-y1gjGYPI.js → user-model-page-07t2-nFE.js} +2 -2
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-Ch-KfpCF.js → work-discovery-overlay-TQ5bjVot.js} +1 -1
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CTu297Hc.js → workflow-run-setup-panel-C9HP2uGG.js} +1 -1
  87. package/dist/gateway/static/root/assets/{workflows-page-CRZXG_rm.js → workflows-page-DK01JRI1.js} +3 -3
  88. package/dist/gateway/static/root/assets/{workspace-api-Xr3wz8T3.js → workspace-api-JWHOFos6.js} +2 -2
  89. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-hEfjVjnc.js → xopc-cloud-account-card-B-BhQdAf.js} +1 -1
  90. package/dist/gateway/static/root/index.html +16 -16
  91. package/dist/package.js +1 -1
  92. package/dist/packages/gateway-contract/src/index.js +4 -0
  93. package/dist/packages/gateway-contract/src/result-reference.js +25 -0
  94. package/dist/packages/gateway-contract/src/session-input-command.js +2 -1
  95. package/dist/packages/gateway-contract/src/task-research-result.js +90 -0
  96. package/dist/packages/gateway-contract/src/task-result-delivery.js +21 -0
  97. package/dist/packages/gateway-contract/src/tasks.js +7 -1
  98. package/dist/packages/gateway-contract/src/turn-outcome.js +4 -0
  99. package/dist/src/agent/agent-manager.js +3 -3
  100. package/dist/src/agent/background-review/run-background-review.js +1 -1
  101. package/dist/src/agent/child-agent-factory.d.ts +4 -1
  102. package/dist/src/agent/child-agent-factory.js +86 -12
  103. package/dist/src/agent/context/connection-objective-context.d.ts +1 -0
  104. package/dist/src/agent/context/connection-objective-context.js +33 -0
  105. package/dist/src/agent/data-acquisition/service.js +41 -6
  106. package/dist/src/agent/data-acquisition/types.d.ts +2 -0
  107. package/dist/src/agent/embedded/agent-profile-context.d.ts +7 -0
  108. package/dist/src/agent/embedded/agent-profile-context.js +92 -0
  109. package/dist/src/agent/embedded/run-for-session.js +5 -2
  110. package/dist/src/agent/embedded/run-turn.js +19 -6
  111. package/dist/src/agent/embedded/runs.d.ts +9 -2
  112. package/dist/src/agent/embedded/runs.js +30 -7
  113. package/dist/src/agent/embedded/session-runner.js +5 -2
  114. package/dist/src/agent/embedded/types.d.ts +4 -0
  115. package/dist/src/agent/embedded/xopc-tools-bridge.js +13 -2
  116. package/dist/src/agent/external-tools/cliProvider.js +1 -1
  117. package/dist/src/agent/external-tools/composio-provider.js +2 -2
  118. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  119. package/dist/src/agent/external-tools/gateway-tools.js +8 -4
  120. package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
  121. package/dist/src/agent/orchestration/agent-run-supervisor.js +2 -1
  122. package/dist/src/agent/orchestration/agent-turn-policy.js +5 -1
  123. package/dist/src/agent/orchestration/delegation-budget.d.ts +7 -1
  124. package/dist/src/agent/orchestration/delegation-budget.js +17 -9
  125. package/dist/src/agent/orchestration/research-checkpoint.d.ts +56 -0
  126. package/dist/src/agent/orchestration/research-checkpoint.js +64 -0
  127. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +3 -1
  128. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +15 -2
  129. package/dist/src/agent/orchestration/run-termination.d.ts +12 -0
  130. package/dist/src/agent/orchestration/run-termination.js +24 -0
  131. package/dist/src/agent/orchestration/turn-recovery.d.ts +4 -1
  132. package/dist/src/agent/orchestration/turn-recovery.js +19 -3
  133. package/dist/src/agent/prompt/sections/agent-identity.js +12 -7
  134. package/dist/src/agent/prompt/sections/messaging-runtime.js +1 -1
  135. package/dist/src/agent/prompt/sections/project-context.js +1 -1
  136. package/dist/src/agent/prompt/sections/response-language.d.ts +1 -1
  137. package/dist/src/agent/prompt/sections/response-language.js +6 -2
  138. package/dist/src/agent/prompt/subagent-context.js +1 -1
  139. package/dist/src/agent/prompt/system-prompt.js +4 -6
  140. package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -0
  141. package/dist/src/agent/service/direct-turn-helpers.js +4 -0
  142. package/dist/src/agent/service/process-direct-one-shot.js +4 -1
  143. package/dist/src/agent/service/process-direct-streaming.js +3 -2
  144. package/dist/src/agent/service.js +2 -2
  145. package/dist/src/agent/skills/index.js +1 -1
  146. package/dist/src/agent/skills/managed-store.js +1 -1
  147. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  148. package/dist/src/agent/source-context/index.js +1 -1
  149. package/dist/src/agent/source-context/result-context.d.ts +2 -0
  150. package/dist/src/agent/source-context/result-context.js +32 -0
  151. package/dist/src/agent/source-context/types.d.ts +2 -2
  152. package/dist/src/agent/source-context/types.js +1 -1
  153. package/dist/src/agent/tasks/task-judge-service.js +3 -1
  154. package/dist/src/agent/tools/apply-patch.js +1 -1
  155. package/dist/src/agent/tools/delegate-tool.js +216 -121
  156. package/dist/src/agent/tools/delegation-policy.js +13 -1
  157. package/dist/src/agent/tools/exec-command.js +47 -2
  158. package/dist/src/agent/tools/factory.js +19 -10
  159. package/dist/src/agent/tools/index.d.ts +1 -0
  160. package/dist/src/agent/tools/index.js +2 -1
  161. package/dist/src/agent/tools/language-diagnostics.js +1 -1
  162. package/dist/src/agent/tools/personal-performance.d.ts +2 -0
  163. package/dist/src/agent/tools/personal-performance.js +82 -0
  164. package/dist/src/agent/tools/personal-read-tool.js +1 -1
  165. package/dist/src/agent/tools/personal-request-tool.js +9 -14
  166. package/dist/src/agent/tools/personal-result-tool.d.ts +2 -0
  167. package/dist/src/agent/tools/personal-result-tool.js +106 -0
  168. package/dist/src/agent/tools/personal-task-tool.d.ts +12 -3
  169. package/dist/src/agent/tools/personal-task-tool.js +115 -10
  170. package/dist/src/agent/tools/publish-artifacts.js +1 -1
  171. package/dist/src/agent/tools/research-checkpoint-tool.d.ts +3 -0
  172. package/dist/src/agent/tools/research-checkpoint-tool.js +28 -0
  173. package/dist/src/agent/tools/review-workspace.js +21 -2
  174. package/dist/src/agent/tools/search/cache.d.ts +20 -0
  175. package/dist/src/agent/tools/search/cache.js +19 -0
  176. package/dist/src/agent/tools/search/errors.d.ts +19 -0
  177. package/dist/src/agent/tools/search/errors.js +69 -0
  178. package/dist/src/agent/tools/search/providers/bing-api.js +2 -1
  179. package/dist/src/agent/tools/search/providers/bing-html.js +2 -1
  180. package/dist/src/agent/tools/search/providers/brave.js +2 -1
  181. package/dist/src/agent/tools/search/providers/duckduckgo-html.js +2 -1
  182. package/dist/src/agent/tools/search/providers/searxng.js +2 -1
  183. package/dist/src/agent/tools/search/providers/tavily.js +2 -1
  184. package/dist/src/agent/tools/search/providers/xopc-cloud.d.ts +1 -0
  185. package/dist/src/agent/tools/search/providers/xopc-cloud.js +7 -2
  186. package/dist/src/agent/tools/search/registry.d.ts +21 -5
  187. package/dist/src/agent/tools/search/registry.js +252 -25
  188. package/dist/src/agent/tools/search/types.d.ts +25 -0
  189. package/dist/src/agent/tools/send-media.js +1 -1
  190. package/dist/src/agent/tools/task-collaboration-tool.d.ts +9 -1
  191. package/dist/src/agent/tools/task-collaboration-tool.js +121 -2
  192. package/dist/src/agent/tools/task-evidence.d.ts +3 -0
  193. package/dist/src/agent/tools/task-evidence.js +71 -0
  194. package/dist/src/agent/tools/task-result-tool.d.ts +2 -0
  195. package/dist/src/agent/tools/task-result-tool.js +93 -0
  196. package/dist/src/agent/tools/tool-media.js +1 -1
  197. package/dist/src/agent/tools/web.d.ts +16 -2
  198. package/dist/src/agent/tools/web.js +74 -29
  199. package/dist/src/agent/tools/xopc-use-tool.js +27 -6
  200. package/dist/src/agent/workspace-runtime/registry.js +1 -1
  201. package/dist/src/agent-catalog/capabilities.js +2 -2
  202. package/dist/src/automations/capabilities/drafts.js +1 -1
  203. package/dist/src/automations/capabilities/write.d.ts +4 -4
  204. package/dist/src/automations/domain/validation.d.ts +8 -8
  205. package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -2
  206. package/dist/src/automations/service/action-executor.js +1 -1
  207. package/dist/src/bootstrap/application-state.js +1 -1
  208. package/dist/src/browser/automations/schema.d.ts +2 -2
  209. package/dist/src/browser/automations/service.d.ts +2 -2
  210. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  211. package/dist/src/capabilities/runtime/product.js +1 -1
  212. package/dist/src/chat-commands/agent-edit.js +1 -1
  213. package/dist/src/cli/commands/agent.js +1 -1
  214. package/dist/src/cli/commands/agents.js +1 -1
  215. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  216. package/dist/src/cli/commands/models.js +1 -1
  217. package/dist/src/cli/commands/onboard/model.js +1 -1
  218. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  219. package/dist/src/config/agent-profile.js +2 -2
  220. package/dist/src/config/index.js +2 -2
  221. package/dist/src/config/loader.js +1 -1
  222. package/dist/src/config/models-json.js +1 -1
  223. package/dist/src/config/schema.d.ts +1 -0
  224. package/dist/src/config/schema.js +5 -2
  225. package/dist/src/connectors/connection-recovery-service.d.ts +3 -1
  226. package/dist/src/connectors/connection-recovery-service.js +67 -6
  227. package/dist/src/discussions/action-tasks.d.ts +2 -2
  228. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  229. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  230. package/dist/src/gateway/agents-admin.js +2 -2
  231. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  232. package/dist/src/gateway/hono/routes/agent-stream.js +1 -1
  233. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  234. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  235. package/dist/src/gateway/hono/routes/context-sources.js +1 -1
  236. package/dist/src/gateway/hono/routes/notes.js +2 -2
  237. package/dist/src/gateway/hono/routes/projects.js +3 -3
  238. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +18 -2
  239. package/dist/src/gateway/hono/routes/session-input-handler.js +2 -2
  240. package/dist/src/gateway/hono/routes/tasks.js +2 -2
  241. package/dist/src/gateway/image-generation-setup.js +1 -1
  242. package/dist/src/gateway/lock.js +1 -1
  243. package/dist/src/gateway/media-access.js +1 -1
  244. package/dist/src/gateway/service/agent-runner.d.ts +2 -0
  245. package/dist/src/gateway/service/agent-runner.js +30 -17
  246. package/dist/src/gateway/service/run-gateway-agent.js +32 -2
  247. package/dist/src/gateway/service/session-input-coordinator.d.ts +10 -1
  248. package/dist/src/gateway/service/session-input-coordinator.js +214 -27
  249. package/dist/src/gateway/service.d.ts +1 -0
  250. package/dist/src/gateway/service.js +49 -16
  251. package/dist/src/gateway/session-context-summary.js +1 -1
  252. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  253. package/dist/src/home-intelligence/host.js +2 -2
  254. package/dist/src/local-apps/service.js +1 -1
  255. package/dist/src/media/session-references.js +1 -1
  256. package/dist/src/personal-agent/communication.js +1 -0
  257. package/dist/src/personal-agent/performance.d.ts +83 -0
  258. package/dist/src/personal-agent/performance.js +65 -0
  259. package/dist/src/personal-agent/policy.d.ts +1 -1
  260. package/dist/src/personal-agent/policy.js +1 -0
  261. package/dist/src/personal-agent/proactivity/service.js +1 -1
  262. package/dist/src/personal-agent/prompt-context.js +3 -1
  263. package/dist/src/personal-agent/prompts.js +10 -4
  264. package/dist/src/personal-agent/reply-composer.d.ts +1 -0
  265. package/dist/src/personal-agent/reply-composer.js +149 -20
  266. package/dist/src/personal-agent/reply-style.d.ts +1 -1
  267. package/dist/src/personal-agent/reply-style.js +1 -0
  268. package/dist/src/personal-agent/repository.d.ts +1 -1
  269. package/dist/src/personal-agent/repository.js +1 -1
  270. package/dist/src/personal-agent/request-delivery.js +3 -1
  271. package/dist/src/personal-agent/request-repository.d.ts +2 -0
  272. package/dist/src/personal-agent/request-service.d.ts +4 -0
  273. package/dist/src/personal-agent/request-service.js +91 -20
  274. package/dist/src/personal-agent/result-extraction.d.ts +42 -0
  275. package/dist/src/personal-agent/result-extraction.js +209 -0
  276. package/dist/src/personal-agent/result-file-links.d.ts +3 -0
  277. package/dist/src/personal-agent/result-file-links.js +21 -0
  278. package/dist/src/personal-agent/result-read-continuations.d.ts +13 -0
  279. package/dist/src/personal-agent/result-read-continuations.js +78 -0
  280. package/dist/src/personal-agent/result-reader.d.ts +43 -0
  281. package/dist/src/personal-agent/result-reader.js +461 -0
  282. package/dist/src/personal-agent/service.js +2 -2
  283. package/dist/src/personal-agent/task-cancel.js +85 -35
  284. package/dist/src/providers/model-catalog-persistence.js +1 -1
  285. package/dist/src/routing/resolve-route.js +1 -1
  286. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  287. package/dist/src/scenes/taskFollowUp/service.d.ts +15 -5
  288. package/dist/src/session/client-history.d.ts +1 -1
  289. package/dist/src/session/client-history.js +1 -1
  290. package/dist/src/session/session-context-for-llm.js +4 -2
  291. package/dist/src/session/store.d.ts +3 -1
  292. package/dist/src/session/store.js +13 -3
  293. package/dist/src/share/hosted-session-share.js +1 -1
  294. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +5 -2
  295. package/dist/src/storage/sqlite/connection-wait-repository.js +42 -17
  296. package/dist/src/storage/sqlite/index.d.ts +1 -0
  297. package/dist/src/storage/sqlite/index.js +3 -1
  298. package/dist/src/storage/sqlite/migrations/250_research_checkpoints.sql +15 -0
  299. package/dist/src/storage/sqlite/migrations/251_personal_result_reads.sql +40 -0
  300. package/dist/src/storage/sqlite/migrations/252_task_work_revisions.sql +15 -0
  301. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  302. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  303. package/dist/src/storage/sqlite/research-checkpoint-repository.d.ts +24 -0
  304. package/dist/src/storage/sqlite/research-checkpoint-repository.js +91 -0
  305. package/dist/src/storage/sqlite/schema.js +1 -1
  306. package/dist/src/storage/sqlite/session-creation-repository.js +3 -2
  307. package/dist/src/storage/sqlite/session-input-repository.d.ts +16 -0
  308. package/dist/src/storage/sqlite/session-input-repository.js +41 -7
  309. package/dist/src/tasks/capabilities/management.d.ts +2 -2
  310. package/dist/src/tasks/capabilities/read.js +2 -2
  311. package/dist/src/tasks/capabilities/relations.d.ts +7 -7
  312. package/dist/src/tasks/capabilities/write.d.ts +2 -2
  313. package/dist/src/tasks/capabilities/write.js +1 -1
  314. package/dist/src/tasks/index.js +1 -1
  315. package/dist/src/tasks/task-allocation-service.d.ts +2 -0
  316. package/dist/src/tasks/task-allocation-service.js +100 -8
  317. package/dist/src/tasks/task-application-service.d.ts +18 -0
  318. package/dist/src/tasks/task-application-service.js +133 -2
  319. package/dist/src/tasks/task-context-assembler.js +13 -5
  320. package/dist/src/tasks/task-continuation.d.ts +1 -0
  321. package/dist/src/tasks/task-continuation.js +1 -0
  322. package/dist/src/tasks/task-contract-definition.d.ts +3 -0
  323. package/dist/src/tasks/task-contract-planner.d.ts +1 -0
  324. package/dist/src/tasks/task-contract-planner.js +61 -20
  325. package/dist/src/tasks/task-conversation-repository.js +1 -1
  326. package/dist/src/tasks/task-evidence-ranges.d.ts +7 -0
  327. package/dist/src/tasks/task-evidence-ranges.js +20 -0
  328. package/dist/src/tasks/task-execution-capabilities.d.ts +26 -0
  329. package/dist/src/tasks/task-execution-capabilities.js +117 -0
  330. package/dist/src/tasks/task-handoff-service.js +1 -1
  331. package/dist/src/tasks/task-handoff.d.ts +56 -0
  332. package/dist/src/tasks/task-handoff.js +510 -0
  333. package/dist/src/tasks/task-model-call.d.ts +7 -0
  334. package/dist/src/tasks/task-model-call.js +35 -0
  335. package/dist/src/tasks/task-read-model-projector.d.ts +6 -0
  336. package/dist/src/tasks/task-read-model-projector.js +12 -1
  337. package/dist/src/tasks/task-research-repair.d.ts +19 -0
  338. package/dist/src/tasks/task-research-repair.js +79 -0
  339. package/dist/src/tasks/task-research-result.d.ts +99 -0
  340. package/dist/src/tasks/task-research-result.js +478 -0
  341. package/dist/src/tasks/task-result-delivery-repository.js +37 -3
  342. package/dist/src/tasks/task-result-delivery-service.js +38 -10
  343. package/dist/src/tasks/task-run-coordinator.js +71 -15
  344. package/dist/src/tasks/task-run-dispatcher.d.ts +1 -0
  345. package/dist/src/tasks/task-run-dispatcher.js +3 -1
  346. package/dist/src/tasks/task-run-repository.d.ts +5 -0
  347. package/dist/src/tasks/task-run-repository.js +88 -1
  348. package/dist/src/tui/backends/embedded-backend.js +2 -2
  349. package/dist/src/voice/realtime/persona-context.js +1 -1
  350. package/package.json +12 -6
  351. package/dist/gateway/static/root/assets/constants-Dy8Gw0sF.js +0 -1
  352. package/dist/gateway/static/root/assets/home-page-DJNmlMfH.js +0 -2
  353. package/dist/gateway/static/root/assets/index-K8SXDtxr.js +0 -260
  354. package/dist/gateway/static/root/assets/local-session-drafts-D_tYFy7d.js +0 -1
  355. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DBRj4-1-.js +0 -1
  356. package/dist/gateway/static/root/assets/product-open-page-CXkYP9xE.js +0 -1
  357. package/dist/gateway/static/root/assets/session-manager-_yy4bxhT.js +0 -16
  358. package/dist/gateway/static/root/assets/settings-advanced-gate-DoAHy1wj.js +0 -1
  359. package/dist/gateway/static/root/assets/task-detail-page-CfZhq4XZ.js +0 -2
  360. package/dist/gateway/static/root/assets/task-expandable-content-CF6Bj-Qa.js +0 -1
@@ -1,49 +1,36 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
1
3
  import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
4
+ import { getSessionInputById, getSessionInputState, init_session_input_repository } from "../storage/sqlite/session-input-repository.js";
2
5
  import { TaskRepository, init_task_repository } from "../tasks/task-repository.js";
3
6
  import { TaskRunRepository, init_task_run_repository } from "../tasks/task-run-repository.js";
4
7
  import { TaskAllocationRepository } from "../tasks/task-allocation-repository.js";
5
8
  import { TaskOriginRepository } from "../tasks/task-origin-repository.js";
6
- import { abortEmbeddedRun } from "../agent/embedded/runs.js";
9
+ import { abortEmbeddedRun, getEmbeddedRunByConversationId } from "../agent/embedded/runs.js";
7
10
  import { TaskApplicationService } from "../tasks/task-application-service.js";
8
11
  //#region src/personal-agent/task-cancel.ts
9
12
  init_transaction();
10
13
  init_task_repository();
11
14
  init_task_run_repository();
12
- /** Close before aborting so a late router decision or receipt cannot restart the task. */
13
- async function cancelPersonalTask(taskId, conversationId, key) {
14
- if (!new TaskOriginRepository().owns(taskId, conversationId)) throw new Error("Task does not belong to this personal conversation");
15
+ init_session_input_repository();
16
+ init_logger();
17
+ const log = createLogger("PersonalTaskCancel");
18
+ const pendingStops = /* @__PURE__ */ new Set();
19
+ function finalizeCancellation(runId) {
15
20
  const runs = new TaskRunRepository();
16
- const { active, changed } = runSqliteWriteTransaction(() => {
17
- const task = new TaskRepository().require(taskId);
18
- const run = runs.getActiveRoot(taskId);
19
- if (task.phase !== "closed") {
20
- if (!new TaskApplicationService().execute({
21
- taskId,
22
- expectedVersion: task.version,
23
- idempotencyKey: `personal-cancel:${key}`,
24
- command: {
25
- type: "close",
26
- resolution: "cancelled"
27
- },
28
- actor: { kind: "user" }
29
- }).ok) throw new Error("Task changed while cancelling");
30
- } else if (task.resolution !== "cancelled") throw new Error("Task is already closed");
31
- getSqliteDatabase().prepare("UPDATE task_allocations SET status = 'cancelled', lease_token = NULL, updated_at = ? WHERE task_id = ? AND status != 'cancelled'").run(Date.now(), taskId);
32
- return {
33
- active: run,
34
- changed: task.phase !== "closed"
35
- };
36
- });
37
- const latest = active ?? runs.getLatestRoot(taskId);
38
- let executionStopConfirmed = !latest || !latest.conversationId && !latest.startedAt && ["queued", "cancelled"].includes(latest.status);
39
- if (active?.conversationId) {
40
- await abortEmbeddedRun(active.conversationId);
41
- executionStopConfirmed = false;
42
- }
43
- const current = active ? runs.get(active.id) : void 0;
44
- if (current && runs.getActiveRoot(taskId)?.id === current.id) new TaskApplicationService().completeRun({
45
- runId: current.id,
46
- expectedRunVersion: current.version,
21
+ const run = runId ? runs.get(runId) : void 0;
22
+ if (!run || ![
23
+ "queued",
24
+ "running",
25
+ "waiting",
26
+ "verifying",
27
+ "cancelled"
28
+ ].includes(run.status)) return;
29
+ runs.resolveCancelledRunWaits(run.id, { kind: "user" });
30
+ if (run.status === "cancelled") return;
31
+ if (!new TaskApplicationService().completeRun({
32
+ runId: run.id,
33
+ expectedRunVersion: run.version,
47
34
  actor: { kind: "user" },
48
35
  terminalCode: "cancelled_by_user",
49
36
  suppressAttention: true,
@@ -60,7 +47,70 @@ async function cancelPersonalTask(taskId, conversationId, key) {
60
47
  needsUser: false,
61
48
  completionVerdict: "not_achieved"
62
49
  }
50
+ }).ok) throw new Error("Task changed while cancelling");
51
+ }
52
+ /** Close before aborting so a late router decision or receipt cannot restart the task. */
53
+ async function cancelPersonalTask(taskId, conversationId, key) {
54
+ if (!new TaskOriginRepository().owns(taskId, conversationId)) throw new Error("Task does not belong to this personal conversation");
55
+ const runs = new TaskRunRepository();
56
+ const { active, changed, targetKnown } = runSqliteWriteTransaction(() => {
57
+ const previous = getSqliteDatabase().prepare(`SELECT subject_id, result_json FROM command_deduplication
58
+ WHERE idempotency_key = ?`).get(`personal-cancel:${key}`);
59
+ if (previous) {
60
+ if (previous.subject_id !== taskId) throw new Error("Cancellation key belongs to another Task");
61
+ const saved = JSON.parse(previous.result_json);
62
+ const active = saved.cancellationRunId ? runs.get(saved.cancellationRunId) : void 0;
63
+ finalizeCancellation(active?.id);
64
+ return {
65
+ active,
66
+ changed: false,
67
+ targetKnown: Object.hasOwn(saved, "cancellationRunId")
68
+ };
69
+ }
70
+ const task = new TaskRepository().require(taskId);
71
+ if (task.phase === "closed" && task.resolution !== "cancelled") throw new Error("Task is already closed");
72
+ const run = runs.getActiveRoot(taskId) ?? (task.phase === "closed" ? runs.getLatestRoot(taskId) : void 0);
73
+ if (!new TaskApplicationService().execute({
74
+ taskId,
75
+ expectedVersion: task.version,
76
+ idempotencyKey: `personal-cancel:${key}`,
77
+ command: {
78
+ type: "close",
79
+ resolution: "cancelled"
80
+ },
81
+ actor: { kind: "user" }
82
+ }).ok) throw new Error("Task changed while cancelling");
83
+ getSqliteDatabase().prepare(`UPDATE command_deduplication SET result_json = json_set(result_json, '$.cancellationRunId', ?)
84
+ WHERE idempotency_key = ?`).run(run?.id ?? null, `personal-cancel:${key}`);
85
+ getSqliteDatabase().prepare("UPDATE task_allocations SET status = 'cancelled', lease_token = NULL, updated_at = ? WHERE task_id = ? AND status != 'cancelled'").run(Date.now(), taskId);
86
+ finalizeCancellation(run?.id);
87
+ return {
88
+ active: run,
89
+ changed: task.phase !== "closed",
90
+ targetKnown: true
91
+ };
63
92
  });
93
+ let executionStopConfirmed = targetKnown && (!active || !active.conversationId && !active.startedAt && ["queued", "cancelled"].includes(active.status));
94
+ if (active?.conversationId) {
95
+ const state = getSessionInputState(active.conversationId);
96
+ const input = state.activeInputId ? getSessionInputById(active.conversationId, state.activeInputId) : void 0;
97
+ const embedded = getEmbeddedRunByConversationId(active.conversationId);
98
+ const executionId = input?.taskRunId === active.id ? state.activeRunId : embedded?.runId === active.id ? active.id : void 0;
99
+ if (executionId && !pendingStops.has(executionId)) {
100
+ pendingStops.add(executionId);
101
+ abortEmbeddedRun(active.conversationId, "user_cancelled", executionId).catch((err) => {
102
+ log.warn({
103
+ err,
104
+ taskId,
105
+ runId: active.id,
106
+ executionId
107
+ }, "Task cancelled; execution stop was not confirmed");
108
+ }).finally(() => {
109
+ pendingStops.delete(executionId);
110
+ });
111
+ }
112
+ executionStopConfirmed = false;
113
+ }
64
114
  if (changed && new TaskAllocationRepository().get(taskId)) {
65
115
  const zh = new TaskRepository().require(taskId).locale === "zh";
66
116
  runSqliteWriteTransaction(() => new TaskAllocationRepository().publish(taskId, zh ? "任务已取消。" : "Task cancelled."));
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths_state, resolveXopcCloudCatalogCachePath } from "../config/paths-state.js";
3
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
3
  import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
5
5
  import { ImageGenerationCapabilitiesSchema, init_models_json } from "../config/models-json.js";
6
6
  import { voiceManifestSchema } from "../../packages/realtime-protocol/src/voice-catalog.js";
7
7
  import { init_voice } from "../../packages/realtime-protocol/src/voice.js";
@@ -1,9 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_account_id, normalizeAccountId } from "./account-id.js";
3
- import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
4
3
  import { getConversationRouting } from "../storage/sqlite/conversation-repository.js";
5
4
  import { init_agent_session_key, resolveAgentPeerConversationId } from "./agent-session-key.js";
6
5
  import { init_session_key, resolveConversationId } from "./session-key.js";
6
+ import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
7
7
  import { init_bindings, parseBindingRules, resolveRoute as resolveRoute$1 } from "./bindings.js";
8
8
  //#region src/routing/resolve-route.ts
9
9
  /**
@@ -1,8 +1,8 @@
1
1
  import { validateConversationId } from "../../packages/gateway-contract/src/conversation-identity.js";
2
2
  import { init_src } from "../../packages/gateway-contract/src/index.js";
3
+ import { init_agent_session_key, normalizeAgentId } from "./agent-session-key.js";
3
4
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
4
5
  import { init_agent_scope, listAgentEntries, resolveAgentIdByWorkspacePath, resolveDefaultAgentId } from "../agent/agent-scope.js";
5
- import { init_agent_session_key, normalizeAgentId } from "./agent-session-key.js";
6
6
  import { randomUUID } from "node:crypto";
7
7
  //#region src/routing/resolve-tui-session-key.ts
8
8
  init_src();
@@ -50,7 +50,7 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
50
50
  task: {
51
51
  id: string;
52
52
  title: string;
53
- phase: "backlog" | "ready" | "active" | "review" | "closed";
53
+ phase: "review" | "backlog" | "ready" | "active" | "closed";
54
54
  priority: "low" | "normal" | "high" | "critical";
55
55
  source: string;
56
56
  latestContractVersion: number;
@@ -170,6 +170,8 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
170
170
  criterion: string;
171
171
  status: "failed" | "passed" | "unverified";
172
172
  evidenceTitles: string[];
173
+ note?: string;
174
+ method?: "unverified" | "model_reviewed" | "tool_verified";
173
175
  }[];
174
176
  };
175
177
  remainingWork: string[];
@@ -201,7 +203,7 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
201
203
  task: {
202
204
  id: string;
203
205
  title: string;
204
- phase: "backlog" | "ready" | "active" | "review" | "closed";
206
+ phase: "review" | "backlog" | "ready" | "active" | "closed";
205
207
  priority: "low" | "normal" | "high" | "critical";
206
208
  source: string;
207
209
  latestContractVersion: number;
@@ -321,6 +323,8 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
321
323
  criterion: string;
322
324
  status: "failed" | "passed" | "unverified";
323
325
  evidenceTitles: string[];
326
+ note?: string;
327
+ method?: "unverified" | "model_reviewed" | "tool_verified";
324
328
  }[];
325
329
  };
326
330
  remainingWork: string[];
@@ -351,7 +355,7 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
351
355
  task: {
352
356
  id: string;
353
357
  title: string;
354
- phase: "backlog" | "ready" | "active" | "review" | "closed";
358
+ phase: "review" | "backlog" | "ready" | "active" | "closed";
355
359
  priority: "low" | "normal" | "high" | "critical";
356
360
  source: string;
357
361
  latestContractVersion: number;
@@ -471,6 +475,8 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
471
475
  criterion: string;
472
476
  status: "failed" | "passed" | "unverified";
473
477
  evidenceTitles: string[];
478
+ note?: string;
479
+ method?: "unverified" | "model_reviewed" | "tool_verified";
474
480
  }[];
475
481
  };
476
482
  remainingWork: string[];
@@ -527,7 +533,7 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
527
533
  task: {
528
534
  id: string;
529
535
  title: string;
530
- phase: "backlog" | "ready" | "active" | "review" | "closed";
536
+ phase: "review" | "backlog" | "ready" | "active" | "closed";
531
537
  priority: "low" | "normal" | "high" | "critical";
532
538
  source: string;
533
539
  latestContractVersion: number;
@@ -647,6 +653,8 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
647
653
  criterion: string;
648
654
  status: "failed" | "passed" | "unverified";
649
655
  evidenceTitles: string[];
656
+ note?: string;
657
+ method?: "unverified" | "model_reviewed" | "tool_verified";
650
658
  }[];
651
659
  };
652
660
  remainingWork: string[];
@@ -677,7 +685,7 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
677
685
  task: {
678
686
  id: string;
679
687
  title: string;
680
- phase: "backlog" | "ready" | "active" | "review" | "closed";
688
+ phase: "review" | "backlog" | "ready" | "active" | "closed";
681
689
  priority: "low" | "normal" | "high" | "critical";
682
690
  source: string;
683
691
  latestContractVersion: number;
@@ -797,6 +805,8 @@ export declare class SceneTaskExecutionService implements SceneActivationAdapter
797
805
  criterion: string;
798
806
  status: "failed" | "passed" | "unverified";
799
807
  evidenceTitles: string[];
808
+ note?: string;
809
+ method?: "unverified" | "model_reviewed" | "tool_verified";
800
810
  }[];
801
811
  };
802
812
  remainingWork: string[];
@@ -24,7 +24,7 @@ export interface ClientHistoryMessage {
24
24
  clientMessageId?: string;
25
25
  sourceContexts?: Array<{
26
26
  refId?: string;
27
- kind: 'note' | 'task' | 'file' | 'session' | 'browser_tab' | 'browser_page' | 'mcp_resource';
27
+ kind: 'result' | 'note' | 'task' | 'file' | 'session' | 'browser_tab' | 'browser_page' | 'mcp_resource';
28
28
  sourceId: string;
29
29
  version: string;
30
30
  title: string;
@@ -38,7 +38,7 @@ function sourceContextDisplayMetadata(metadata) {
38
38
  const sourceContexts = rows.flatMap((value) => {
39
39
  if (!value || typeof value !== "object" || Array.isArray(value)) return [];
40
40
  const row = value;
41
- if (row.kind !== "note" && row.kind !== "task" && row.kind !== "file" && row.kind !== "session" && row.kind !== "browser_tab" && row.kind !== "browser_page" && row.kind !== "mcp_resource" || typeof row.sourceId !== "string" || typeof row.version !== "string" || typeof row.title !== "string") return [];
41
+ if (row.kind !== "note" && row.kind !== "task" && row.kind !== "file" && row.kind !== "session" && row.kind !== "browser_tab" && row.kind !== "result" && row.kind !== "browser_page" && row.kind !== "mcp_resource" || typeof row.sourceId !== "string" || typeof row.version !== "string" || typeof row.title !== "string") return [];
42
42
  return [{
43
43
  ...typeof row.refId === "string" ? { refId: row.refId } : {},
44
44
  kind: row.kind,
@@ -297,7 +297,7 @@ function buildSessionContextForLlm(rows) {
297
297
  continue;
298
298
  }
299
299
  if (isTranscriptCustomMessageEntry(r)) {
300
- if (r.customType === "personal_request_status") continue;
300
+ if (r.customType === "personal_request_status" || r.customType === "connection_control_status") continue;
301
301
  if (r.customType === "personal_proactive_message") {
302
302
  const message = parsePersonalProactiveMessage(r.details);
303
303
  if (message) out.push({
@@ -319,6 +319,8 @@ function buildSessionContextForLlm(rows) {
319
319
  taskId: delivery.taskId,
320
320
  title: delivery.taskTitle,
321
321
  status: delivery.outcome.status,
322
+ resultId: delivery.deliveryId.replace(/^reply:/, ""),
323
+ readWith: "This chat projection is an excerpt; retrieve exact source content with available result or file tools.",
322
324
  ...delivery.text ? { result: delivery.text.slice(0, 1200) } : {},
323
325
  ...delivery.deliveryId.startsWith("personal-request:") ? { summary: delivery.outcome.summary } : {},
324
326
  artifacts: delivery.outcome.deliverables.map((item) => ({
@@ -350,7 +352,7 @@ function buildSessionDisplayMessages(rows) {
350
352
  const out = [];
351
353
  for (const r of rows) {
352
354
  if (isTranscriptCustomMessageEntry(r)) {
353
- if (r.customType === "personal_request_status") {
355
+ if (r.customType === "personal_request_status" || r.customType === "connection_control_status") {
354
356
  out.push({
355
357
  role: "assistant",
356
358
  content: [{
@@ -116,7 +116,9 @@ export declare class SessionStore {
116
116
  private buildSessionDetail;
117
117
  loadTranscriptRows(key: string): Promise<TranscriptStoredRow[]>;
118
118
  loadTranscriptHistoryRows(key: string): Promise<TranscriptStoredRow[]>;
119
- prepareModelFallback(key: string, rowsBeforeAttempt: readonly TranscriptStoredRow[]): Promise<ModelFallbackPreparation>;
119
+ prepareModelFallback(key: string, rowsBeforeAttempt: readonly TranscriptStoredRow[], options?: {
120
+ resumeTaskContinuation?: boolean;
121
+ }): Promise<ModelFallbackPreparation>;
120
122
  getMetadata(key: string): Promise<SessionMetadata | null>;
121
123
  resolveKeyByTranscriptId(transcriptId: string): Promise<string | null>;
122
124
  updateMetadata(key: string, updates: Partial<SessionMetadata>): Promise<void>;
@@ -15,7 +15,7 @@ import { init_sqlite } from "../storage/sqlite/index.js";
15
15
  import { init_agent_session_key, resolveAgentIdFromConversationId } from "../routing/agent-session-key.js";
16
16
  import { resolveUserContextSessionAccess } from "../user-context/access-policy.js";
17
17
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
18
- import { canResumeAfterModelFailure } from "../agent/orchestration/turn-recovery.js";
18
+ import { ACCEPTANCE_REPAIR_READ_TOOLS, canResumeAfterModelFailure } from "../agent/orchestration/turn-recovery.js";
19
19
  import { DurableState } from "../storage/sqlite/durable-state.js";
20
20
  import { transcriptRowsToClientHistory } from "./client-history.js";
21
21
  import { SessionCompactor } from "../agent/memory/compaction.js";
@@ -272,7 +272,7 @@ var SessionStore = class {
272
272
  requireXopcDatabase();
273
273
  return loadTranscriptHistoryRowsForSession(key);
274
274
  }
275
- async prepareModelFallback(key, rowsBeforeAttempt) {
275
+ async prepareModelFallback(key, rowsBeforeAttempt, options) {
276
276
  return this.runStoreMutation(async () => {
277
277
  requireXopcDatabase();
278
278
  const currentRows = loadTranscriptRowsForSession(key);
@@ -289,7 +289,17 @@ var SessionStore = class {
289
289
  "assistant",
290
290
  "toolResult"
291
291
  ].includes(String(row.role)));
292
- if (appendedRows.some((row) => isTranscriptMessageRole(row, "user")) && appendedRows.filter((row) => isTranscriptMessageRole(row, "user")).length === 1 && (isTranscriptMessageRole(tail, "user") || isTranscriptMessageRole(tail, "toolResult")) && canResumeAfterModelFailure(preparedRows) || appendedRows.length === 1 && isTranscriptMessageRole(appendedRows[0], "user") || removedError && appendedRows.length === 0 && isTranscriptMessageRole(preparedRows.at(-1), "user")) {
292
+ const onlyRecoveryMetadata = appendedRows.every((row) => "type" in row && row.type === "custom" && [
293
+ "coding_run_started",
294
+ "coding_verification",
295
+ "codemode-store",
296
+ "xopc-tool-discovery-state"
297
+ ].includes(String(row.customType)));
298
+ if (removedError && options?.resumeTaskContinuation && onlyRecoveryMetadata && canResumeAfterModelFailure(preparedRows, { allowFailedReadTools: ACCEPTANCE_REPAIR_READ_TOOLS })) {
299
+ archiveFailedModelAttempts(key, rowsBeforeAttempt.length);
300
+ return "prompt";
301
+ }
302
+ if (appendedRows.some((row) => isTranscriptMessageRole(row, "user")) && appendedRows.filter((row) => isTranscriptMessageRole(row, "user")).length === 1 && (isTranscriptMessageRole(tail, "user") || isTranscriptMessageRole(tail, "toolResult")) && canResumeAfterModelFailure(preparedRows, { allowFailedReadTools: ACCEPTANCE_REPAIR_READ_TOOLS }) || appendedRows.length === 1 && isTranscriptMessageRole(appendedRows[0], "user") || removedError && appendedRows.length === 0 && isTranscriptMessageRole(preparedRows.at(-1), "user") || removedError && onlyRecoveryMetadata && (isTranscriptMessageRole(tail, "user") || isTranscriptMessageRole(tail, "toolResult")) && canResumeAfterModelFailure(preparedRows, { allowFailedReadTools: ACCEPTANCE_REPAIR_READ_TOOLS })) {
293
303
  if (removedError) archiveFailedModelAttempts(key, rowsBeforeAttempt.length);
294
304
  return "resume";
295
305
  }
@@ -2,8 +2,8 @@ import { init_connection, requireXopcDatabase } from "../storage/sqlite/connecti
2
2
  import { init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
3
3
  import { init_resolution, resolveConnectedPlatformEndpoint } from "../platform/resolution.js";
4
4
  import { CredentialResolver, init_credentials } from "../auth/credentials.js";
5
- import { DurableState } from "../storage/sqlite/durable-state.js";
6
5
  import { resolveMediaReference } from "../media/media-reference.js";
6
+ import { DurableState } from "../storage/sqlite/durable-state.js";
7
7
  import { projectSessionShare } from "./session-share-projector.js";
8
8
  import { SessionShareSnapshotConflictError } from "./session-share-service.js";
9
9
  import { basename } from "node:path";
@@ -21,6 +21,9 @@ export declare function requireSessionConnection(input: {
21
21
  status: 'connection_required' | 'skipped' | 'objective_conflict';
22
22
  waitId?: string;
23
23
  };
24
+ /** Pending messages may revise the goal; controls cannot become a competing model execution. */
25
+ export declare function interruptedConnectionMessage(wait: ConnectionWait): SessionInput | undefined;
26
+ export declare function hasPendingConnectionMessages(wait: ConnectionWait, includeControls?: boolean): boolean;
24
27
  /** The input and the wait transition commit together, using the existing queue's unique key. */
25
28
  export declare function queueConnectionResolution(wait: ConnectionWait, resolution: 'continued' | 'skipped', resolvePersonal?: (wait: ConnectionWait, resolution: 'continued' | 'skipped') => unknown): ConnectionWait;
26
29
  export declare function consumeConnectionResume(input: SessionInput): boolean;
@@ -29,10 +32,10 @@ export declare function connectionBindings(conversationId: string): ConnectionNe
29
32
  export declare function connectorObjectiveScope(conversationId: string): string | undefined;
30
33
  export declare function bindObjectiveAccount(conversationId: string, connectorId: string, accountId: string): void;
31
34
  export declare function connectionBinding(conversationId: string, connectorId: string): string | undefined;
32
- /** New input wins over an outstanding auto-resume intent, including an already queued resume. */
35
+ /** Explicit objective changes invalidate an outstanding auto-resume intent. */
33
36
  export declare function invalidateConnectionResumeIntent(conversationId: string): void;
34
37
  export declare function reviseCurrentConnectionObjective(conversationId: string, summary: string | undefined): void;
35
- export declare function cancelConnectionObjective(conversationId: string): void;
38
+ export declare function cancelConnectionObjective(conversationId: string, expectedWaitId?: string, expectedObjectiveRevision?: number): void;
36
39
  export declare function getConnectionResumeInput(conversationId: string, runId: string): SessionInput | undefined;
37
40
  export declare function listConnectionWaitsToCheck(): ConnectionWait[];
38
41
  /** A queued wait has not crossed consumeConnectionResume's execution boundary. */
@@ -73,7 +73,7 @@ function requireSessionConnection(input) {
73
73
  const origin = originId ? getSessionInputById(input.conversationId, originId) : void 0;
74
74
  const originRunId = input.origin?.runId ?? runtime.activeRunId;
75
75
  if (!transcriptId || !origin || !originRunId || origin.expectedTranscriptId && origin.expectedTranscriptId !== transcriptId) throw new Error("Connection recovery requires a queued chat execution.");
76
- const resumed = origin.payload ? getConnectionWait(origin.payload.waitId) : void 0;
76
+ const resumed = origin.kind === "connection_resume" && origin.payload ? getConnectionWait(origin.payload.waitId) : void 0;
77
77
  if (resumed?.resolution === "skipped") return { status: "skipped" };
78
78
  const active = getActiveConnectionWait(input.conversationId);
79
79
  if (active) {
@@ -162,11 +162,23 @@ function requireSessionConnection(input) {
162
162
  };
163
163
  });
164
164
  }
165
+ /** Pending messages may revise the goal; controls cannot become a competing model execution. */
166
+ function interruptedConnectionMessage(wait) {
167
+ return getSessionInputState(wait.conversationId).inputs.find((input) => input.status === "interrupted" && input.kind === "message" && input.payload?.connectionBarrier && input.payload.waitId === wait.id && input.payload.objectiveRevision === wait.objectiveRevision);
168
+ }
169
+ function hasPendingConnectionMessages(wait, includeControls = false) {
170
+ return Boolean(interruptedConnectionMessage(wait)) || getSessionInputState(wait.conversationId).inputs.some((input) => input.id !== wait.originInputId && input.kind === "message" && (includeControls || !input.payload?.connectionAction) && [
171
+ "queued",
172
+ "running",
173
+ "injecting"
174
+ ].includes(input.status));
175
+ }
165
176
  /** The input and the wait transition commit together, using the existing queue's unique key. */
166
177
  function queueConnectionResolution(wait, resolution, resolvePersonal) {
167
178
  return runSqliteWriteTransaction(() => {
168
179
  const current = getConnectionWait(wait.id);
169
180
  if (!current || current.version !== wait.version || current.status !== "open") throw new Error("WAIT_CHANGED");
181
+ if (resolution === "continued" && hasPendingConnectionMessages(wait)) return current;
170
182
  if (resolvePersonal?.(wait, resolution)) return updateConnectionWait({
171
183
  ...wait,
172
184
  status: "closed",
@@ -212,8 +224,9 @@ function queueConnectionResolution(wait, resolution, resolvePersonal) {
212
224
  function consumeConnectionResume(input) {
213
225
  if (input.kind !== "connection_resume") return true;
214
226
  return runSqliteWriteTransaction(() => {
215
- const wait = input.payload ? getConnectionWait(input.payload.waitId) : void 0;
227
+ const wait = input.kind === "connection_resume" && input.payload ? getConnectionWait(input.payload.waitId) : void 0;
216
228
  if (!wait || wait.status !== "queued" || wait.queuedInputId !== input.id || wait.objectiveRevision !== input.payload?.objectiveRevision) return false;
229
+ if (hasPendingConnectionMessages(wait, true)) return false;
217
230
  if (readCurrentTranscriptId(getSqliteDatabase(), input.conversationId) !== wait.transcriptId) return false;
218
231
  if (wait.taskRunId) {
219
232
  const runs = new TaskRunRepository();
@@ -289,7 +302,7 @@ function connectionBindings(conversationId) {
289
302
  const state = getSessionInputState(conversationId);
290
303
  const input = state.activeInputId ? getSessionInputById(conversationId, state.activeInputId) : void 0;
291
304
  if (!input) return [];
292
- const wait = input.payload ? getConnectionWait(input.payload.waitId) : void 0;
305
+ const wait = input.kind === "connection_resume" && input.payload ? getConnectionWait(input.payload.waitId) : void 0;
293
306
  const stored = getSqliteDatabase().prepare(`SELECT connector_id, account_id FROM connector_objective_accounts
294
307
  WHERE conversation_id = ? AND transcript_id = ? AND objective_id = ?`).all(conversationId, readCurrentTranscriptId(getSqliteDatabase(), conversationId) ?? "", wait?.objectiveId ?? input.id);
295
308
  return (wait?.needs ?? stored.map((row) => ({
@@ -317,7 +330,7 @@ function connectorObjectiveScope(conversationId) {
317
330
  const input = state.activeInputId ? getSessionInputById(conversationId, state.activeInputId) : void 0;
318
331
  if (!input) return void 0;
319
332
  const active = getActiveConnectionWait(conversationId);
320
- const wait = input.payload ? getConnectionWait(input.payload.waitId) : active?.originInputId === input.id ? active : void 0;
333
+ const wait = input.kind === "connection_resume" && input.payload ? getConnectionWait(input.payload.waitId) : active?.originInputId === input.id ? active : void 0;
321
334
  return JSON.stringify([
322
335
  readCurrentTranscriptId(getSqliteDatabase(), conversationId),
323
336
  wait?.objectiveId ?? input.id,
@@ -329,7 +342,7 @@ function bindObjectiveAccount(conversationId, connectorId, accountId) {
329
342
  const state = getSessionInputState(conversationId);
330
343
  const input = state.activeInputId ? getSessionInputById(conversationId, state.activeInputId) : void 0;
331
344
  if (!input) return;
332
- const wait = input.payload ? getConnectionWait(input.payload.waitId) : void 0;
345
+ const wait = input.kind === "connection_resume" && input.payload ? getConnectionWait(input.payload.waitId) : void 0;
333
346
  db.prepare(`INSERT OR IGNORE INTO connector_objective_accounts
334
347
  (conversation_id, transcript_id, objective_id, connector_id, account_id) VALUES (?, ?, ?, ?, ?)`).run(conversationId, readCurrentTranscriptId(db, conversationId) ?? "", wait?.objectiveId ?? input.id, connectorId, accountId);
335
348
  }
@@ -337,7 +350,7 @@ function connectionBinding(conversationId, connectorId) {
337
350
  const matches = connectionBindings(conversationId).filter((need) => need.target.type === "connector" && need.target.connectorId === connectorId);
338
351
  return matches.length === 1 ? matches[0].connectionId : void 0;
339
352
  }
340
- /** New input wins over an outstanding auto-resume intent, including an already queued resume. */
353
+ /** Explicit objective changes invalidate an outstanding auto-resume intent. */
341
354
  function invalidateConnectionResumeIntent(conversationId) {
342
355
  const wait = getActiveConnectionWait(conversationId);
343
356
  if (!wait) return;
@@ -385,26 +398,38 @@ function reviseCurrentConnectionObjective(conversationId, summary) {
385
398
  reviewRequired: true,
386
399
  objectiveRevision: wait.objectiveRevision + 1
387
400
  }, wait.version);
401
+ getSqliteDatabase().prepare(`UPDATE session_inputs SET payload_json = json_set(payload_json, '$.objectiveRevision', ?),
402
+ version = version + 1, updated_at_ms = ? WHERE conversation_id = ? AND kind = 'message'
403
+ AND status IN ('queued','running','injecting') AND json_extract(payload_json, '$.connectionBarrier') = 1
404
+ AND json_extract(payload_json, '$.waitId') = ?`).run(wait.objectiveRevision + 1, Date.now(), conversationId, wait.id);
388
405
  });
389
406
  publishConnectionWait(conversationId);
390
407
  }
391
- function cancelConnectionObjective(conversationId) {
392
- const wait = getActiveConnectionWait(conversationId);
408
+ function cancelConnectionObjective(conversationId, expectedWaitId, expectedObjectiveRevision) {
409
+ const runtime = getSessionInputState(conversationId);
410
+ const executing = runtime.activeInputId ? getSessionInputById(conversationId, runtime.activeInputId) : void 0;
411
+ const wait = getActiveConnectionWait(conversationId) ?? (expectedWaitId && executing?.kind === "connection_resume" && executing.payload?.waitId === expectedWaitId ? getConnectionWait(expectedWaitId) : void 0);
393
412
  if (!wait) return;
413
+ if (expectedWaitId && wait.id !== expectedWaitId) return;
414
+ if (expectedObjectiveRevision !== void 0 && wait.objectiveRevision !== expectedObjectiveRevision) return;
394
415
  runSqliteWriteTransaction(() => {
395
416
  if (wait.queuedInputId) setSessionInputStatus(wait.queuedInputId, "cancelled");
396
417
  const personalRequest = personalRequestForWait(wait.id);
397
418
  const runs = new TaskRunRepository();
398
- const taskRunId = wait.taskRunId ?? (personalRequest?.taskId ? runs.getActiveRoot(personalRequest.taskId)?.id : void 0);
419
+ const personalTaskWait = personalRequest?.taskId ? getSqliteDatabase().prepare(`SELECT task_run_id FROM task_waits
420
+ WHERE task_id = ? AND json_extract(condition_json, '$.connectionWaitId') = ? LIMIT 1`).get(personalRequest.taskId, wait.id) : void 0;
421
+ const taskRunId = wait.taskRunId ?? personalRequest?.parameters.taskRunId ?? personalTaskWait?.task_run_id;
399
422
  if (taskRunId) {
400
423
  const run = runs.get(taskRunId);
401
- if (run?.status === "waiting") {
402
- for (const taskWait of runs.listActiveWaits(run.taskId)) if (taskWait.condition.connectionWaitId === wait.id) runs.resolveWait({
403
- waitId: taskWait.id,
404
- actor: { kind: "system" },
405
- resolution: { cancelled: true }
406
- });
407
- runs.finalize({
424
+ if (run && [
425
+ "queued",
426
+ "running",
427
+ "waiting",
428
+ "verifying",
429
+ "cancelled"
430
+ ].includes(run.status)) {
431
+ runs.resolveCancelledRunWaits(run.id, { kind: "system" });
432
+ if (run.status !== "cancelled") runs.finalize({
408
433
  runId: run.id,
409
434
  expectedVersion: run.version,
410
435
  receipt: {
@@ -534,4 +559,4 @@ var init_connection_wait_repository = __esmMin((() => {
534
559
  }));
535
560
  //#endregion
536
561
  init_connection_wait_repository();
537
- export { bindObjectiveAccount, cancelConnectionObjective, connectionBinding, connectionBindings, connectorObjectiveScope, consumeConnectionResume, getActiveConnectionWait, getConnectionResumeInput, getConnectionWait, init_connection_wait_repository, invalidateConnectionResumeIntent, isConnectionSuspended, listConnectionWaitsToCheck, onConnectionWaitChanged, publishConnectionWait, queueConnectionResolution, reconcileConnectionWaits, requireSessionConnection, reviseCurrentConnectionObjective, updateConnectionWait };
562
+ export { bindObjectiveAccount, cancelConnectionObjective, connectionBinding, connectionBindings, connectorObjectiveScope, consumeConnectionResume, getActiveConnectionWait, getConnectionResumeInput, getConnectionWait, hasPendingConnectionMessages, init_connection_wait_repository, interruptedConnectionMessage, invalidateConnectionResumeIntent, isConnectionSuspended, listConnectionWaitsToCheck, onConnectionWaitChanged, publishConnectionWait, queueConnectionResolution, reconcileConnectionWaits, requireSessionConnection, reviseCurrentConnectionObjective, updateConnectionWait };
@@ -38,3 +38,4 @@ export { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeC
38
38
  export { getConnectorAccount, listConnectorAccounts, refreshConnectorAccountCurrent, reconcileConnectorAccount, } from './connector-account-repository.js';
39
39
  export { getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, listConnectorSyncPolicies, upsertConnectorSyncPolicy, type ConnectorSyncPolicy, } from './connector-sync-policy-repository.js';
40
40
  export { getUserTrustPolicy, setUserTrustPolicy, } from './user-trust-repository.js';
41
+ export { createResearchCheckpoint, getResearchCheckpoint, claimResearchCheckpoint, saveResearchCheckpoint, recordResearchEvidence, recordResearchSearch, finishResearchCheckpoint, type StoredResearchCheckpoint, } from './research-checkpoint-repository.js';
@@ -42,6 +42,7 @@ import { deleteSessionConfig, getSessionConfig, hasSessionConfig, init_config_re
42
42
  import { createObjectLinkRecord, deleteObjectLinkRecord, getActivityEventRecord, init_activity_repository, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent } from "./activity-repository.js";
43
43
  import { getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, init_connector_sync_policy_repository, listConnectorSyncPolicies, upsertConnectorSyncPolicy } from "./connector-sync-policy-repository.js";
44
44
  import { getUserTrustPolicy, init_user_trust_repository, setUserTrustPolicy } from "./user-trust-repository.js";
45
+ import { claimResearchCheckpoint, createResearchCheckpoint, finishResearchCheckpoint, getResearchCheckpoint, init_research_checkpoint_repository, recordResearchEvidence, recordResearchSearch, saveResearchCheckpoint } from "./research-checkpoint-repository.js";
45
46
  //#region src/storage/sqlite/index.ts
46
47
  var init_sqlite = __esmMin((() => {
47
48
  init_paths();
@@ -84,7 +85,8 @@ var init_sqlite = __esmMin((() => {
84
85
  init_connector_account_repository();
85
86
  init_connector_sync_policy_repository();
86
87
  init_user_trust_repository();
88
+ init_research_checkpoint_repository();
87
89
  }));
88
90
  //#endregion
89
91
  init_sqlite();
90
- export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, SCHEMA_META_SCHEMA_VERSION_KEY, SidebarLayoutConflictError, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMediaToAssistantTranscriptEntry, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeClarificationApproval, consumeClarificationResume, consumeConnectorApproval, countKnowledgeSourceItems, createClarificationWait, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, decideConnectorApproval, deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrowserTabBindingsByPrincipal, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteEndpointSessionBindingsByPrincipal, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findConversationIdByTranscriptId, findLatestAssistantTranscriptEntryId, findSessionInput, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActiveClarification, getActivityEventRecord, getBrowserTabBinding, getBrowserTabBindingById, getCachedConnectorCatalogEntry, getClarification, getClarificationResumeInput, getClarificationSnapshot, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentTranscriptId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionTaskPlan, getSidebarLayout, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, init_sqlite, insertSessionInput, inspectSchemaMigrationStatus, isClarificationSuspended, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isXopcDatabaseOpen, issueDeviceTokenPair, listActiveSessionInputExecutions, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listDevices, listEndpointPrincipals, listEndpointToolInvocationAuditPage, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTaskUpdateRunIds, listTaskUpdateTriggers, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceSidebarLayout, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveClarification, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setBrowserTabBinding, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, sortBySidebarLayout, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, supersedeActiveClarification, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
92
+ export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, SCHEMA_META_SCHEMA_VERSION_KEY, SidebarLayoutConflictError, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMediaToAssistantTranscriptEntry, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, claimResearchCheckpoint, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeClarificationApproval, consumeClarificationResume, consumeConnectorApproval, countKnowledgeSourceItems, createClarificationWait, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, createResearchCheckpoint, decideConnectorApproval, deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrowserTabBindingsByPrincipal, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteEndpointSessionBindingsByPrincipal, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findConversationIdByTranscriptId, findLatestAssistantTranscriptEntryId, findSessionInput, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishResearchCheckpoint, finishSessionInputRun, getActiveClarification, getActivityEventRecord, getBrowserTabBinding, getBrowserTabBindingById, getCachedConnectorCatalogEntry, getClarification, getClarificationResumeInput, getClarificationSnapshot, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentTranscriptId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getResearchCheckpoint, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionTaskPlan, getSidebarLayout, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, init_sqlite, insertSessionInput, inspectSchemaMigrationStatus, isClarificationSuspended, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isXopcDatabaseOpen, issueDeviceTokenPair, listActiveSessionInputExecutions, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listDevices, listEndpointPrincipals, listEndpointToolInvocationAuditPage, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTaskUpdateRunIds, listTaskUpdateTriggers, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recordResearchEvidence, recordResearchSearch, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceSidebarLayout, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveClarification, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, saveResearchCheckpoint, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setBrowserTabBinding, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, sortBySidebarLayout, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, supersedeActiveClarification, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
@@ -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);