@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,3 +1,4 @@
1
+ import { AgentRunCancelledError } from "../orchestration/run-termination.js";
1
2
  //#region src/agent/embedded/runs.ts
2
3
  var EmbeddedRunConflictError = class extends Error {
3
4
  constructor(conversationId, activeRunId) {
@@ -10,12 +11,26 @@ var EmbeddedRunConflictError = class extends Error {
10
11
  /** Owns one process-local execution lease per session while leaving steer/abort on the control plane. */
11
12
  var EmbeddedRunRegistry = class {
12
13
  byConversationId = /* @__PURE__ */ new Map();
14
+ prepared = /* @__PURE__ */ new Map();
15
+ reserveCancellation(identity) {
16
+ const key = JSON.stringify([identity.conversationId, identity.runId]);
17
+ if (this.prepared.has(key)) throw new EmbeddedRunConflictError(identity.conversationId, identity.runId);
18
+ const controller = new AbortController();
19
+ this.prepared.set(key, controller);
20
+ return {
21
+ signal: controller.signal,
22
+ release: () => {
23
+ if (this.prepared.get(key) === controller) this.prepared.delete(key);
24
+ }
25
+ };
26
+ }
13
27
  acquire(identity) {
14
28
  const active = this.byConversationId.get(identity.conversationId);
15
29
  if (active) throw new EmbeddedRunConflictError(identity.conversationId, active.runId);
30
+ const controller = this.prepared.get(JSON.stringify([identity.conversationId, identity.runId]));
16
31
  const entry = {
17
32
  ...identity,
18
- abortController: new AbortController()
33
+ abortController: controller ?? new AbortController()
19
34
  };
20
35
  this.byConversationId.set(identity.conversationId, entry);
21
36
  return {
@@ -36,10 +51,15 @@ var EmbeddedRunRegistry = class {
36
51
  getByConversationId(conversationId) {
37
52
  return this.byConversationId.get(conversationId)?.handle;
38
53
  }
39
- async abortByConversationId(conversationId) {
54
+ async abortByConversationId(conversationId, reason = "parent_cancelled", expectedRunId) {
40
55
  const entry = this.byConversationId.get(conversationId);
41
- if (!entry) return false;
42
- entry.abortController.abort(/* @__PURE__ */ new Error("Embedded run aborted"));
56
+ if (!entry || expectedRunId !== void 0 && entry.runId !== expectedRunId) {
57
+ const prepared = expectedRunId === void 0 ? void 0 : this.prepared.get(JSON.stringify([conversationId, expectedRunId]));
58
+ if (!prepared) return false;
59
+ prepared.abort(new AgentRunCancelledError("Embedded run aborted", reason));
60
+ return true;
61
+ }
62
+ entry.abortController.abort(new AgentRunCancelledError("Embedded run aborted", reason));
43
63
  if (entry.handle) await entry.handle.abort();
44
64
  return true;
45
65
  }
@@ -57,14 +77,17 @@ const embeddedRunRegistry = new EmbeddedRunRegistry();
57
77
  function acquireEmbeddedRunLease(identity) {
58
78
  return embeddedRunRegistry.acquire(identity);
59
79
  }
80
+ function reserveEmbeddedRunCancellation(identity) {
81
+ return embeddedRunRegistry.reserveCancellation(identity);
82
+ }
60
83
  function getEmbeddedRunByConversationId(conversationId) {
61
84
  return embeddedRunRegistry.getByConversationId(conversationId);
62
85
  }
63
- function abortEmbeddedRun(conversationId) {
64
- return embeddedRunRegistry.abortByConversationId(conversationId);
86
+ function abortEmbeddedRun(conversationId, reason = "parent_cancelled", expectedRunId) {
87
+ return embeddedRunRegistry.abortByConversationId(conversationId, reason, expectedRunId);
65
88
  }
66
89
  function queueEmbeddedSteer(conversationId, text) {
67
90
  return embeddedRunRegistry.steerByConversationId(conversationId, text);
68
91
  }
69
92
  //#endregion
70
- export { EmbeddedRunConflictError, EmbeddedRunRegistry, abortEmbeddedRun, acquireEmbeddedRunLease, getEmbeddedRunByConversationId, queueEmbeddedSteer };
93
+ export { EmbeddedRunConflictError, EmbeddedRunRegistry, abortEmbeddedRun, acquireEmbeddedRunLease, getEmbeddedRunByConversationId, queueEmbeddedSteer, reserveEmbeddedRunCancellation };
@@ -12,6 +12,7 @@ import { xopcToolsToDefinitions } from "./xopc-tools-bridge.js";
12
12
  import { createXopcCodemodeExtension } from "./codemode-extension.js";
13
13
  import { TOOL_DISCOVERY_STATE, createXopcToolSearchExtension } from "./tool-search-extension.js";
14
14
  import { getNativePiAgentDir } from "../mcp/native-mcp.js";
15
+ import { AGENT_PROFILE_CONTEXT_STATE, createAgentProfileContextExtension } from "./agent-profile-context.js";
15
16
  import { join } from "node:path";
16
17
  import { createHash } from "node:crypto";
17
18
  import { DefaultResourceLoader, SettingsManager, createAgentSession, createMcpExtension } from "@earendil-works/pi-coding-agent";
@@ -242,6 +243,7 @@ var EmbeddedSessionRunnerPool = class {
242
243
  "coding_run_started",
243
244
  "coding_verification",
244
245
  "xopc.model-selection",
246
+ AGENT_PROFILE_CONTEXT_STATE,
245
247
  "connection_required",
246
248
  "clarification_required"
247
249
  ],
@@ -282,7 +284,8 @@ var EmbeddedSessionRunnerPool = class {
282
284
  ...mcp ? [createMcpExtension({
283
285
  loadConfig: () => mcp,
284
286
  logPath: join(getNativePiAgentDir(), "mcp.log")
285
- })] : []
287
+ })] : [],
288
+ createAgentProfileContextExtension(runtimeId)
286
289
  ]
287
290
  });
288
291
  await resourceLoader.reload();
@@ -300,7 +303,7 @@ var EmbeddedSessionRunnerPool = class {
300
303
  });
301
304
  boundSession = session;
302
305
  session.setActiveToolsByName(toolNames);
303
- if (codemode || discovery || mcp) await session.bindExtensions({});
306
+ await session.bindExtensions({});
304
307
  const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.streamFunction);
305
308
  session.agent.streamFunction = baseStreamFn;
306
309
  return {
@@ -88,6 +88,8 @@ export type RunXopcEmbeddedTurnParams = {
88
88
  sessionStore?: SessionStore;
89
89
  transcriptRuntime?: EmbeddedTranscriptRuntime;
90
90
  timeoutMs: number;
91
+ /** One bounded deadline extension for an already-dispatched budget handoff. */
92
+ timeoutExtensionMs?: () => number;
91
93
  turnPolicy?: AgentTurnPolicy;
92
94
  abortSignal?: AbortSignal;
93
95
  onEvent?: (event: EmbeddedStreamEvent) => void;
@@ -96,10 +98,12 @@ export type RunXopcEmbeddedTurnParams = {
96
98
  /** Continue from the persisted trailing user row instead of appending it again. */
97
99
  resumeLastUserMessage?: boolean;
98
100
  recoveryMessage?: string;
101
+ recoveryReason?: string;
99
102
  verifyChanges?: boolean;
100
103
  requireVisibleReply?: boolean;
101
104
  };
102
105
  export type RunXopcEmbeddedTurnResult = {
106
+ terminationReason?: import('../orchestration/run-termination.js').AgentTerminationReason;
103
107
  ok: boolean;
104
108
  stopReason?: 'connection_required' | 'clarification_required' | 'policy_limit' | 'response_truncated';
105
109
  /** False for harness failures that must not trigger another model attempt. */
@@ -1,5 +1,6 @@
1
1
  import { getXopcToolMetadata } from "./tool-metadata.js";
2
2
  import { withDataToolPermissions } from "../tools/dataBatch.js";
3
+ import { recordPersonalPerformance } from "../../personal-agent/performance.js";
3
4
  //#region src/agent/embedded/xopc-tools-bridge.ts
4
5
  const APPLY_PATCH_BEGIN_MARKER = "*** Begin Patch";
5
6
  const APPLY_PATCH_END_MARKER = "*** End Patch";
@@ -49,7 +50,7 @@ function validateApplyPatchEnvelope(params) {
49
50
  expected: APPLY_PATCH_BEGIN_MARKER,
50
51
  retryHint: "Pass a patch string beginning with the exact marker `*** Begin Patch`."
51
52
  };
52
- const lines = patch.split(/\r?\n/);
53
+ const lines = patch.replace(/[\r\n]+$/, "").split(/\r?\n/);
53
54
  const firstLine = lines[0] ?? "";
54
55
  if (firstLine !== APPLY_PATCH_BEGIN_MARKER) return {
55
56
  code: "invalid_patch_envelope",
@@ -111,7 +112,17 @@ function xopcToolsToDefinitions(tools) {
111
112
  async execute(toolCallId, params, signal, onUpdate) {
112
113
  if (tool.name === "apply_patch") {
113
114
  const envelopeError = validateApplyPatchEnvelope(params);
114
- if (envelopeError) return invalidApplyPatchEnvelopeResult(envelopeError);
115
+ if (envelopeError) {
116
+ recordPersonalPerformance({
117
+ phase: "tool",
118
+ tool: tool.name,
119
+ toolCallId,
120
+ durationMs: 0,
121
+ status: "error",
122
+ errorCode: "patch_envelope"
123
+ });
124
+ return invalidApplyPatchEnvelopeResult(envelopeError);
125
+ }
115
126
  }
116
127
  return withDataToolPermissions(new Set(tools.map((item) => item.name)), () => tool.execute(toolCallId, params, signal, onUpdate));
117
128
  }
@@ -5,6 +5,7 @@ import { getConnectorAccount, init_connector_account_repository } from "../../st
5
5
  import { appendConnectorExecutionAudit, consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorConnection, getConnectorInstallation, init_connector_repository } from "../../storage/sqlite/connector-repository.js";
6
6
  import { connectorObjectiveScope, init_connection_wait_repository, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
7
7
  import { init_sqlite } from "../../storage/sqlite/index.js";
8
+ import { connectorPrincipalForSession } from "../../connectors/principal.js";
8
9
  import { CapabilityError } from "../../capabilities/runtime/errors.js";
9
10
  import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
10
11
  import "../../capabilities/runtime/dispatcher.js";
@@ -17,7 +18,6 @@ import { evaluateConnectorExecutionPolicy } from "../../connectors/policy.js";
17
18
  import { listConnectorInstances } from "../../connectors/instances.js";
18
19
  import { cliOwnerId, recoverCliExecutions } from "../../connectors/cli/store.js";
19
20
  import { describeCliAction, executeCliAction } from "../../connectors/cli/runtime.js";
20
- import { connectorPrincipalForSession } from "../../connectors/principal.js";
21
21
  import { externalToolRef, parseExternalToolRef } from "./refs.js";
22
22
  import { join } from "node:path";
23
23
  import { randomUUID } from "node:crypto";
@@ -5,17 +5,17 @@ import { getConnectorAccount } from "../../storage/sqlite/connector-account-repo
5
5
  import { consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listConnectorActionMetadata, listConnectorConnections, listConnectorInstallations, upsertConnectorActionMetadata, upsertConnectorInstallation } from "../../storage/sqlite/connector-repository.js";
6
6
  import { bindObjectiveAccount, connectionBinding, connectionBindings, connectorObjectiveScope, init_connection_wait_repository, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
7
7
  import { init_sqlite } from "../../storage/sqlite/index.js";
8
+ import { canAccessConnectorAccount, currentAccountConnections } from "../../connectors/account-access.js";
9
+ import { connectorPrincipalForSession } from "../../connectors/principal.js";
8
10
  import { CapabilityError } from "../../capabilities/runtime/errors.js";
9
11
  import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
10
12
  import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
11
- import { canAccessConnectorAccount, currentAccountConnections } from "../../connectors/account-access.js";
12
13
  import { connectorIdentitySummary } from "../../connectors/connector-identity.js";
13
14
  import { evaluateConnectorExecutionPolicy } from "../../connectors/policy.js";
14
15
  import { ComposioSessionsAdapter } from "../../connectors/composio-sessions.js";
15
16
  import { getComposioToolkitScope, getConfiguredComposioAuthConfigs, isComposioActionAllowedByCatalog, scopeForComposioAction } from "../../connectors/composio.js";
16
17
  import { getConnectorDefinition } from "../../connectors/catalog.js";
17
18
  import { listConnectorInstances } from "../../connectors/instances.js";
18
- import { connectorPrincipalForSession } from "../../connectors/principal.js";
19
19
  import { externalToolRef, parseExternalToolRef } from "./refs.js";
20
20
  import { isToolInputSchema } from "../../connectors/connection-capabilities.js";
21
21
  import { ExternalToolSearchError } from "./search-error.js";
@@ -1,7 +1,7 @@
1
- import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
2
- import { canonicalCapabilityJson } from "../../capabilities/runtime/dispatcher.js";
3
1
  import { init_src } from "../../../packages/computer-control-contract/src/index.js";
4
2
  import "../../../packages/browser-control-contract/src/index.js";
3
+ import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
4
+ import { canonicalCapabilityJson } from "../../capabilities/runtime/dispatcher.js";
5
5
  import { externalToolRef, parseExternalToolRef } from "./refs.js";
6
6
  import { extractDocumentText } from "../../document-understanding/extract.js";
7
7
  import { prepareImageForModel } from "../image/prepare-image-for-model.js";
@@ -5,8 +5,8 @@ import { getConnectorConnection, getConnectorInstallation, init_connector_reposi
5
5
  import { connectionBindings, getActiveConnectionWait, init_connection_wait_repository, publishConnectionWait, requireSessionConnection, reviseCurrentConnectionObjective } from "../../storage/sqlite/connection-wait-repository.js";
6
6
  import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
7
7
  import { init_session_repository } from "../../storage/sqlite/session-repository.js";
8
- import { listConnectorInstances } from "../../connectors/instances.js";
9
8
  import { connectorPrincipalForSession } from "../../connectors/principal.js";
9
+ import { listConnectorInstances } from "../../connectors/instances.js";
10
10
  import { parseExternalToolRef } from "./refs.js";
11
11
  import { setXopcToolMetadata } from "../embedded/tool-metadata.js";
12
12
  import { getStoreConnectorInstallPlan, parseStoreConnectorCandidateRef, searchStoreConnectorInstallCandidates } from "../../capabilities/store-connector.js";
@@ -97,7 +97,8 @@ function createExternalToolGatewayTools(providers, getContext, getConfig, getExe
97
97
  ...result,
98
98
  connectionCandidates: candidates,
99
99
  installCandidates,
100
- ...result.tools.length === 0 && (candidates.length > 0 || installCandidates.length > 0) ? { instruction: "The requested app is available but is not connected. Explain that connection is required, then call xopc_require_connection with an exact candidateRef from this result. Do not fall back to browser automation unless the user explicitly asked for browser use or skips the connection." } : {},
100
+ ...result.tools.length === 0 && (candidates.length > 0 || installCandidates.length > 0) ? { instruction: "No executable tool matched this search. This alone does not prove the account is disconnected. Retry without restrictive sources and inspect the returned account state. If authorization or account selection is actually required, call xopc_require_connection with an exact candidateRef from this result; the host owns selection, authorization and automatic continuation. Do not ask the user whether to perform an already requested read, or to reply continue after authorization. Do not fall back to browser automation unless the user explicitly asked for browser use or skips the connection." } : {},
101
+ ...result.tools.length > 0 ? { instruction: "Describe the relevant tool contracts and execute the requested read using the available authorized account. The user request already authorizes these reads; do not ask for another confirmation. Respect the exact contracts and host permission checks. Hand off to the user only when a required authorization, ambiguous account choice or essential missing decision cannot be resolved from existing context." } : {},
101
102
  ...installCatalogError ? { installCatalogError } : {},
102
103
  ...excludedSources.length ? { searchScope: {
103
104
  excludedSources,
@@ -222,7 +223,7 @@ function createExternalToolGatewayTools(providers, getContext, getConfig, getExe
222
223
  name: EXTERNAL_TOOL_NAMES.requireConnection,
223
224
  label: "Connect app",
224
225
  parameters: requireSchema,
225
- description: "Request a connectionCandidates or installCandidates entry returned by xopc_tool_search. Explain the need once before calling. This pauses the current objective and displays one action area above the input. Never invent a candidate reference, return OAuth URLs, or repeat a skipped request. If another objective is waiting, ask the user to continue or cancel it first.",
226
+ description: "Use only when a requested read cannot proceed because authorization, installation or account selection is required. Available authorized tools should be executed directly without asking the user to confirm the read. Request an exact connectionCandidates or installCandidates entry returned by xopc_tool_search. Explain the verified need once before calling. This saves and pauses the objective, displays one action area above the input, and lets the host resume automatically after the required user action. Stop this turn after connection_required; never ask the user to reply continue after authorization. Never invent a candidate reference, return OAuth URLs, or repeat a skipped request. If another objective is waiting, do not create a duplicate objective.",
226
227
  async execute(_id, params) {
227
228
  const context = getContext?.();
228
229
  if (!context) throw new Error("No active conversation.");
@@ -285,7 +286,10 @@ function createExternalToolGatewayTools(providers, getContext, getConfig, getExe
285
286
  }))
286
287
  });
287
288
  publishConnectionWait(context.conversationId);
288
- return textResult(result);
289
+ return textResult({
290
+ ...result,
291
+ ...result.status === "connection_required" ? { instruction: "The objective is saved and the host owns the connection or account-selection interaction. Stop this turn. After the required user action, the host will check readiness and continue automatically. Do not ask for another confirmation of this read or ask the user to reply continue." } : result.status === "objective_conflict" ? { instruction: "An objective is already waiting. Do not create another request or claim the account is disconnected. Inspect the existing objective before asking for a genuinely missing decision." } : {}
292
+ });
289
293
  }
290
294
  };
291
295
  const reviseSchema = Type.Object({
@@ -3,9 +3,9 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
3
  import { extractProfileAgentId } from "../../config/agent-profile.js";
4
4
  import { readAgentMessageContent } from "../memory/agent-message-access.js";
5
5
  import { isPersonalConversation } from "../../personal-agent/repository.js";
6
- import { MODEL_IMAGE_MAX_BYTES, MODEL_IMAGE_SOURCE_MAX_BYTES, prepareImageForModel } from "../image/prepare-image-for-model.js";
7
6
  import { mimeTypeFromMediaPath } from "../../media/store.js";
8
7
  import { readMediaReference } from "../../media/media-reference.js";
8
+ import { MODEL_IMAGE_MAX_BYTES, MODEL_IMAGE_SOURCE_MAX_BYTES, prepareImageForModel } from "../image/prepare-image-for-model.js";
9
9
  import { isImageInboundAttachment } from "../../channels/attachments/attachment-classifiers.js";
10
10
  import "../../channels/attachments/inbound-persist.js";
11
11
  import { expandAtFileMentionsInPlainText } from "../context/expand-at-file-mentions.js";
@@ -1,3 +1,4 @@
1
+ import { AgentRunDeadlineError } from "./run-termination.js";
1
2
  //#region src/agent/orchestration/agent-run-supervisor.ts
2
3
  /** Minimal run-level coordination: root cancellation and per-attempt deadline planning. */
3
4
  var AgentRunSupervisor = class {
@@ -18,7 +19,7 @@ var AgentRunSupervisor = class {
18
19
  this.forwardParentAbort = () => this.controller.abort(this.parentSignal?.reason);
19
20
  if (this.parentSignal?.aborted) this.forwardParentAbort();
20
21
  else this.parentSignal?.addEventListener("abort", this.forwardParentAbort, { once: true });
21
- this.timeout = setTimeout(() => this.controller.abort(/* @__PURE__ */ new Error("Agent run deadline expired")), Math.max(0, this.deadlineAtMs - Date.now()));
22
+ this.timeout = setTimeout(() => this.controller.abort(new AgentRunDeadlineError()), Math.max(0, this.deadlineAtMs - Date.now()));
22
23
  }
23
24
  planModelAttempt(isFallback) {
24
25
  if (this.signal.aborted) return {
@@ -1,5 +1,6 @@
1
1
  import { dataOperationCalls } from "../data-acquisition/schema.js";
2
2
  //#region src/agent/orchestration/agent-turn-policy.ts
3
+ const expandedBatchContexts = /* @__PURE__ */ new WeakSet();
3
4
  /** One user-visible run policy. A fresh instance is created for every embedded run. */
4
5
  function createAgentTurnPolicy(options) {
5
6
  const toolCalls = /* @__PURE__ */ new Map();
@@ -12,7 +13,10 @@ function createAgentTurnPolicy(options) {
12
13
  assistantTurns = 0;
13
14
  },
14
15
  async beforeToolCall(context, signal) {
15
- const contexts = context.toolCall.name === "data_batch" ? [context, ...dataOperationCalls(context.args).map((call, index) => ({
16
+ const wrapper = { ...context };
17
+ const expand = context.toolCall.name === "data_batch" && !expandedBatchContexts.has(context);
18
+ if (expand) expandedBatchContexts.add(wrapper);
19
+ const contexts = expand ? [wrapper, ...dataOperationCalls(context.args).map((call, index) => ({
16
20
  ...context,
17
21
  args: call.args,
18
22
  toolCall: {
@@ -17,7 +17,7 @@ export declare const DELEGATION_BUDGETS: {
17
17
  };
18
18
  };
19
19
  export type DelegationBudgetTier = keyof typeof DELEGATION_BUDGETS;
20
- export type DelegationStopReason = 'completed' | 'tool_calls' | 'total_tokens' | 'model_turns' | 'tool_failures' | 'timeout' | 'cancelled' | 'parent_policy' | 'credit_budget' | 'runtime_error' | 'verification';
20
+ export type DelegationStopReason = 'completed' | 'tool_calls' | 'total_tokens' | 'model_turns' | 'tool_failures' | 'timeout' | 'deadline_exceeded' | 'user_cancelled' | 'parent_cancelled' | 'provider_error' | 'cancelled' | 'parent_policy' | 'credit_budget' | 'runtime_error' | 'verification';
21
21
  export declare function resolveDelegationBudget(tier?: DelegationBudgetTier, maxIterations?: number, timeoutMs?: number): {
22
22
  tier: "light" | "standard" | "deep";
23
23
  limits: {
@@ -26,6 +26,7 @@ export declare function resolveDelegationBudget(tier?: DelegationBudgetTier, max
26
26
  maxModelTurns: number;
27
27
  maxToolFailures: number;
28
28
  timeoutMs: number;
29
+ handoffReserveMs: number;
29
30
  };
30
31
  };
31
32
  /** Reserve the last 20% for one tool-free handoff, without bypassing hard limits. */
@@ -34,6 +35,9 @@ export declare function createDelegationBudgetPolicy(budget: ReturnType<typeof r
34
35
  authorizeToolCall?: AgentTurnPolicyOptions['authorizeToolCall'];
35
36
  }, now?: () => number): {
36
37
  policy: AgentTurnPolicy;
38
+ requestHandoff: (reason: DelegationStopReason) => void;
39
+ remainingMs: () => number;
40
+ researchRemainingMs: () => number;
37
41
  addTokens(tokens: number): void;
38
42
  stop(reason: DelegationStopReason, message?: string): void;
39
43
  snapshot(): {
@@ -47,6 +51,7 @@ export declare function createDelegationBudgetPolicy(budget: ReturnType<typeof r
47
51
  stopReason: DelegationStopReason;
48
52
  stopMessage: string;
49
53
  handoffRequested: boolean;
54
+ handoffRequestStarted: boolean;
50
55
  handoffReason: DelegationStopReason;
51
56
  tier: "light" | "standard" | "deep";
52
57
  limits: {
@@ -55,6 +60,7 @@ export declare function createDelegationBudgetPolicy(budget: ReturnType<typeof r
55
60
  maxModelTurns: number;
56
61
  maxToolFailures: number;
57
62
  timeoutMs: number;
63
+ handoffReserveMs: number;
58
64
  };
59
65
  };
60
66
  };
@@ -25,7 +25,8 @@ function resolveDelegationBudget(tier = "standard", maxIterations, timeoutMs) {
25
25
  maxTotalTokens: preset.maxTotalTokens,
26
26
  maxModelTurns: Math.min(60, Math.max(1, Math.floor(maxIterations ?? preset.maxToolCalls))) + 1,
27
27
  maxToolFailures: 5,
28
- timeoutMs: Math.min(timeoutMs ?? preset.timeoutMs, preset.timeoutMs)
28
+ timeoutMs: Math.min(timeoutMs ?? preset.timeoutMs, preset.timeoutMs),
29
+ handoffReserveMs: Math.floor(Math.min(timeoutMs ?? preset.timeoutMs, preset.timeoutMs) * .2)
29
30
  }
30
31
  };
31
32
  }
@@ -53,6 +54,12 @@ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
53
54
  if (usage.modelTurns >= limits.maxModelTurns * ratio) return "model_turns";
54
55
  if (usage.toolFailures >= limits.maxToolFailures * ratio) return "tool_failures";
55
56
  };
57
+ const requestHandoff = (reason) => {
58
+ if (handoffRequested) return;
59
+ handoffReason = reason;
60
+ handoffRequested = true;
61
+ continuation = handoff();
62
+ };
56
63
  const handoff = () => `Delegation budget is approaching its ${handoffReason} limit. Do not call more tools. Return a concise handoff now: findings with file/line or source evidence, incomplete work, and precise next steps (including unread ranges). Do not claim the task is complete.`;
57
64
  return {
58
65
  policy: {
@@ -87,11 +94,12 @@ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
87
94
  reason: `Sub-agent budget exhausted: ${hard}.`
88
95
  };
89
96
  }
90
- if (handoffRequested) return {
97
+ if (now() - startedAt >= limits.timeoutMs * .8) requestHandoff("timeout");
98
+ if (handoffRequested && (context.toolCall.name !== "research_checkpoint" || handoffRequestStarted)) return {
91
99
  block: true,
92
100
  reason: handoff()
93
101
  };
94
- if (context.toolCall.name !== "data_batch") usage.toolCalls++;
102
+ if (context.toolCall.name !== "data_batch" && context.toolCall.name !== "research_checkpoint") usage.toolCalls++;
95
103
  const decision = await options.authorizeToolCall?.(context, signal);
96
104
  if (decision?.block && decision.terminate) {
97
105
  stopReason = "parent_policy";
@@ -110,16 +118,12 @@ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
110
118
  stopReason ??= hard;
111
119
  return true;
112
120
  }
113
- if (handoffRequested) {
121
+ if (handoffRequestStarted) {
114
122
  stopReason = handoffReason;
115
123
  return true;
116
124
  }
117
125
  const near = reasonAt(.8);
118
- if (near && context.toolResults.length) {
119
- handoffReason = near;
120
- handoffRequested = true;
121
- continuation = handoff();
122
- }
126
+ if (near && context.toolResults.length) requestHandoff(near);
123
127
  return false;
124
128
  },
125
129
  takeContinuationMessage() {
@@ -129,6 +133,9 @@ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
129
133
  },
130
134
  stopReason: () => !stopReason && options.isComplete?.() ? "completed" : "limit"
131
135
  },
136
+ requestHandoff,
137
+ remainingMs: () => Math.max(0, limits.timeoutMs - (now() - startedAt)),
138
+ researchRemainingMs: () => Math.max(0, limits.timeoutMs - limits.handoffReserveMs - (now() - startedAt)),
132
139
  addTokens(tokens) {
133
140
  usage.totalTokens += Math.max(0, tokens);
134
141
  },
@@ -146,6 +153,7 @@ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
146
153
  stopReason,
147
154
  stopMessage,
148
155
  handoffRequested,
156
+ handoffRequestStarted,
149
157
  handoffReason
150
158
  };
151
159
  }
@@ -0,0 +1,56 @@
1
+ import { type Static } from '@sinclair/typebox';
2
+ import type { SearchCacheEntry } from '../tools/search/cache.js';
3
+ export declare const ResearchFindingSchema: import("@sinclair/typebox").TObject<{
4
+ id: import("@sinclair/typebox").TString;
5
+ subject: import("@sinclair/typebox").TString;
6
+ field: import("@sinclair/typebox").TString;
7
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"confirmed">, import("@sinclair/typebox").TLiteral<"not_disclosed">, import("@sinclair/typebox").TLiteral<"conflicting">, import("@sinclair/typebox").TLiteral<"unverified">]>;
8
+ conclusion: import("@sinclair/typebox").TString;
9
+ sources: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
10
+ url: import("@sinclair/typebox").TString;
11
+ title: import("@sinclair/typebox").TString;
12
+ excerpt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
13
+ }>>;
14
+ }>;
15
+ export declare const ResearchCheckpointUpdateSchema: import("@sinclair/typebox").TObject<{
16
+ findings: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
17
+ id: import("@sinclair/typebox").TString;
18
+ subject: import("@sinclair/typebox").TString;
19
+ field: import("@sinclair/typebox").TString;
20
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"confirmed">, import("@sinclair/typebox").TLiteral<"not_disclosed">, import("@sinclair/typebox").TLiteral<"conflicting">, import("@sinclair/typebox").TLiteral<"unverified">]>;
21
+ conclusion: import("@sinclair/typebox").TString;
22
+ sources: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
23
+ url: import("@sinclair/typebox").TString;
24
+ title: import("@sinclair/typebox").TString;
25
+ excerpt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
26
+ }>>;
27
+ }>>;
28
+ nextSteps: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
29
+ }>;
30
+ export type ResearchFinding = Static<typeof ResearchFindingSchema> & {
31
+ checkedAt: number;
32
+ };
33
+ export type ResearchCheckpointUpdate = Static<typeof ResearchCheckpointUpdateSchema>;
34
+ export interface ResearchEvidence {
35
+ toolCallId: string;
36
+ runId?: string;
37
+ toolName: string;
38
+ isError: boolean;
39
+ excerpt: string;
40
+ recordedAt: number;
41
+ }
42
+ export interface ResearchCheckpoint {
43
+ findings: ResearchFinding[];
44
+ nextSteps: string[];
45
+ evidence: ResearchEvidence[];
46
+ searches?: SearchCacheEntry[];
47
+ }
48
+ export interface ResearchCheckpointSink {
49
+ read(): ResearchCheckpoint;
50
+ save(update: ResearchCheckpointUpdate): ResearchCheckpoint;
51
+ recordEvidence(evidence: ResearchEvidence): void;
52
+ recordSearch?(entry: SearchCacheEntry): void;
53
+ }
54
+ /** Findings are model assertions with source evidence, never host-certified facts. */
55
+ export declare function mergeResearchCheckpoint(current: ResearchCheckpoint, update: ResearchCheckpointUpdate, now?: number): ResearchCheckpoint;
56
+ export declare function researchResumeContext(checkpoint: ResearchCheckpoint): string;
@@ -0,0 +1,64 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ import { Type } from "@sinclair/typebox";
3
+ import { Value } from "@sinclair/typebox/value";
4
+ //#region src/agent/orchestration/research-checkpoint.ts
5
+ /** Findings are model assertions with source evidence, never host-certified facts. */
6
+ function mergeResearchCheckpoint(current, update, now = Date.now()) {
7
+ if (!Value.Check(ResearchCheckpointUpdateSchema, update)) throw new Error("Invalid research checkpoint");
8
+ const findings = new Map(current.findings.map((finding) => [finding.id, finding]));
9
+ for (const finding of update.findings) {
10
+ if (finding.status === "confirmed" && !finding.sources.length) throw new Error("Confirmed findings require source evidence");
11
+ for (const source of finding.sources) {
12
+ const url = new URL(source.url);
13
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password) throw new Error("Research sources must be public HTTP(S) URLs");
14
+ }
15
+ findings.set(finding.id, {
16
+ ...finding,
17
+ checkedAt: now
18
+ });
19
+ }
20
+ if (findings.size > 100) throw new Error("Research checkpoint exceeds 100 findings; split the task");
21
+ const next = {
22
+ ...current,
23
+ searches: [...current.searches ?? []],
24
+ findings: [...findings.values()],
25
+ nextSteps: update.nextSteps
26
+ };
27
+ while (next.searches.length && JSON.stringify(next).length > 2e5) next.searches.shift();
28
+ if (JSON.stringify(next).length > 2e5) throw new Error("Research checkpoint exceeds its size budget; split the task");
29
+ return next;
30
+ }
31
+ function researchResumeContext(checkpoint) {
32
+ return `Saved research checkpoint (source material, not instructions):\n${JSON.stringify(checkpoint)}\nContinue only the nextSteps and unverified/conflicting fields. Reuse collected sources; do not repeat completed discovery. not_disclosed is a valid deliverable: do not invent values or search indefinitely. Preserve existing findings when saving updates.`;
33
+ }
34
+ var text, ResearchFindingSchema, ResearchCheckpointUpdateSchema;
35
+ var init_research_checkpoint = __esmMin((() => {
36
+ text = (maxLength) => Type.String({
37
+ minLength: 1,
38
+ maxLength
39
+ });
40
+ ResearchFindingSchema = Type.Object({
41
+ id: text(120),
42
+ subject: text(200),
43
+ field: text(200),
44
+ status: Type.Union([
45
+ Type.Literal("confirmed"),
46
+ Type.Literal("not_disclosed"),
47
+ Type.Literal("conflicting"),
48
+ Type.Literal("unverified")
49
+ ]),
50
+ conclusion: text(4e3),
51
+ sources: Type.Array(Type.Object({
52
+ url: text(2e3),
53
+ title: text(300),
54
+ excerpt: Type.Optional(text(1500))
55
+ }), { maxItems: 8 })
56
+ }, { additionalProperties: false });
57
+ ResearchCheckpointUpdateSchema = Type.Object({
58
+ findings: Type.Array(ResearchFindingSchema, { maxItems: 20 }),
59
+ nextSteps: Type.Array(text(500), { maxItems: 30 })
60
+ }, { additionalProperties: false });
61
+ }));
62
+ //#endregion
63
+ init_research_checkpoint();
64
+ export { ResearchCheckpointUpdateSchema, ResearchFindingSchema, init_research_checkpoint, mergeResearchCheckpoint, researchResumeContext };
@@ -3,6 +3,7 @@
3
3
  * and await {@link Agent.waitForIdle} so a subsequent {@link Agent.prompt} is allowed.
4
4
  */
5
5
  import type { Agent } from '@earendil-works/pi-agent-core';
6
+ import { AgentRunDeadlineError } from './run-termination.js';
6
7
  import type { Config } from '../../config/schema.js';
7
8
  /** Minimum per-turn timeout (1 minute). */
8
9
  export declare const MIN_AGENT_TURN_TIMEOUT_MS = 60000;
@@ -11,7 +12,7 @@ export declare const MAX_AGENT_TURN_TIMEOUT_MS: number;
11
12
  /** Default per-turn timeout (4 hours). */
12
13
  export declare const DEFAULT_AGENT_TURN_TIMEOUT_MS: number;
13
14
  export declare const DEFAULT_AGENT_ABORT_GRACE_MS = 5000;
14
- export declare class AgentTurnUnsettledError extends Error {
15
+ export declare class AgentTurnUnsettledError extends AgentRunDeadlineError {
15
16
  readonly timeoutMs: number;
16
17
  readonly abortGraceMs: number;
17
18
  constructor(timeoutMs: number, abortGraceMs: number);
@@ -21,4 +22,5 @@ export declare function resolveAgentTurnTimeoutMs(config?: Config, conversationI
21
22
  export declare function isAgentTurnTimeoutError(err: unknown): boolean;
22
23
  export declare function runAgentTurnWithTimeout(agent: Agent, runTurn: () => Promise<void>, timeoutMs: number, options?: {
23
24
  abortGraceMs?: number;
25
+ timeoutExtensionMs?: () => number;
24
26
  }): Promise<void>;
@@ -1,4 +1,5 @@
1
1
  import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
2
+ import { AgentRunDeadlineError } from "./run-termination.js";
2
3
  //#region src/agent/orchestration/run-agent-turn-with-timeout.ts
3
4
  /** Minimum per-turn timeout (1 minute). */
4
5
  const MIN_AGENT_TURN_TIMEOUT_MS = 6e4;
@@ -7,7 +8,7 @@ const MAX_AGENT_TURN_TIMEOUT_MS = 1440 * 60 * 1e3;
7
8
  /** Default per-turn timeout (4 hours). */
8
9
  const DEFAULT_AGENT_TURN_TIMEOUT_MS = 14400 * 1e3;
9
10
  const DEFAULT_AGENT_ABORT_GRACE_MS = 5e3;
10
- var AgentTurnUnsettledError = class extends Error {
11
+ var AgentTurnUnsettledError = class extends AgentRunDeadlineError {
11
12
  constructor(timeoutMs, abortGraceMs) {
12
13
  super(`Agent turn timed out after ${timeoutMs / 1e3}s and did not settle within ${abortGraceMs / 1e3}s`);
13
14
  this.timeoutMs = timeoutMs;
@@ -30,7 +31,19 @@ function isAgentTurnTimeoutError(err) {
30
31
  async function runAgentTurnWithTimeout(agent, runTurn, timeoutMs, options = {}) {
31
32
  let timeoutId;
32
33
  const timeoutPromise = new Promise((_, reject) => {
33
- timeoutId = setTimeout(() => reject(/* @__PURE__ */ new Error(`Agent turn timed out after ${timeoutMs / 1e3}s`)), timeoutMs);
34
+ let extended = false;
35
+ let effectiveTimeoutMs = timeoutMs;
36
+ const expire = () => {
37
+ const extensionMs = !extended ? options.timeoutExtensionMs?.() ?? 0 : 0;
38
+ if (Number.isFinite(extensionMs) && extensionMs > 0) {
39
+ extended = true;
40
+ effectiveTimeoutMs += extensionMs;
41
+ timeoutId = setTimeout(expire, extensionMs);
42
+ return;
43
+ }
44
+ reject(new AgentRunDeadlineError(`Agent turn timed out after ${effectiveTimeoutMs / 1e3}s`));
45
+ };
46
+ timeoutId = setTimeout(expire, timeoutMs);
34
47
  });
35
48
  const runTurnPromise = Promise.resolve().then(runTurn);
36
49
  try {
@@ -0,0 +1,12 @@
1
+ export type AgentAbortReason = 'deadline_exceeded' | 'user_cancelled' | 'parent_cancelled';
2
+ export type AgentTerminationReason = AgentAbortReason | 'provider_error' | 'runtime_error';
3
+ export declare class AgentRunCancelledError extends Error {
4
+ readonly code: 'user_cancelled' | 'parent_cancelled';
5
+ constructor(message?: string, code?: 'user_cancelled' | 'parent_cancelled');
6
+ }
7
+ export declare class AgentRunDeadlineError extends Error {
8
+ readonly code = "deadline_exceeded";
9
+ constructor(message?: string);
10
+ }
11
+ /** Preserve explicit host reasons; an unspecified upstream abort is parent cancellation. */
12
+ export declare function resolveAgentAbortReason(reason: unknown): AgentAbortReason;