@xopcai/xopc 0.0.383 → 0.0.385

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 (527) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/adapters/cli-login.js +3 -3
  3. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  4. package/dist/extensions/telegram/src/inbound-processor.js +2 -2
  5. package/dist/extensions/telegram/src/outbound-sender.js +1 -1
  6. package/dist/extensions/telegram/src/plugin.js +2 -2
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/extensions/weixin/src/api/api.js +2 -2
  9. package/dist/extensions/weixin/src/auth/accounts.js +12 -12
  10. package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
  11. package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
  12. package/dist/gateway/static/root/assets/{activity-store-qv0XyrXk.js → activity-store-CB2X4Gmu.js} +1 -1
  13. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-66HwhyEK.js → agent-avatar-dicebear-Cb9eaXxR.js} +1 -1
  14. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DEV-xtgm.js +1 -0
  15. package/dist/gateway/static/root/assets/{agent-plugin-dialog-CebTVaRM.js → agent-plugin-dialog-DXKc3Luj.js} +1 -1
  16. package/dist/gateway/static/root/assets/agents-DcNxwpJQ.js +77 -0
  17. package/dist/gateway/static/root/assets/{agents-admin-api-BGy9IvSr.js → agents-admin-api-BkULgC6Q.js} +1 -1
  18. package/dist/gateway/static/root/assets/{app-management-settings-panel-BKaU6sGT.js → app-management-settings-panel-X5i0Tz7_.js} +1 -1
  19. package/dist/gateway/static/root/assets/{appearance-settings-E5WFcCdZ.js → appearance-settings-CmHHzquT.js} +1 -1
  20. package/dist/gateway/static/root/assets/{apps-page-CExfOhRj.js → apps-page-ChFA4Zp0.js} +1 -1
  21. package/dist/gateway/static/root/assets/{archive-plugin-BvhxzyLJ.js → archive-plugin-De0ND0oA.js} +1 -1
  22. package/dist/gateway/static/root/assets/{automations-page-CWcNFzvK.js → automations-page-BFqsIqOI.js} +1 -1
  23. package/dist/gateway/static/root/assets/automations-workspace-Blfak-fT.js +6 -0
  24. package/dist/gateway/static/root/assets/{binary-plugins-CD0gYKR2.js → binary-plugins-Do535ZGW.js} +1 -1
  25. package/dist/gateway/static/root/assets/{block-editor-CBVXeGAt.js → block-editor-CpOLG3Co.js} +2 -2
  26. package/dist/gateway/static/root/assets/{browser-automation-inputs-B-Qz_411.js → browser-automation-inputs-B9M1RYTm.js} +1 -1
  27. package/dist/gateway/static/root/assets/browser-automations-page-BSbTJ9j2.js +3 -0
  28. package/dist/gateway/static/root/assets/browser-settings-page-BUlILJrB.js +3 -0
  29. package/dist/gateway/static/root/assets/{capabilities-w2GUuF7V.js → capabilities-2Do3eKMM.js} +1 -1
  30. package/dist/gateway/static/root/assets/{capabilities-CaL5RDm3.js → capabilities-XFwwUNU3.js} +1 -1
  31. package/dist/gateway/static/root/assets/capabilities-page-CeRdkwRf.js +2 -0
  32. package/dist/gateway/static/root/assets/{capabilities-settings-panel-CIvwbZps.js → capabilities-settings-panel-S-cKsGja.js} +6 -6
  33. package/dist/gateway/static/root/assets/{capability-header-actions-DKaZAOWW.js → capability-header-actions-6w8pQhnn.js} +1 -1
  34. package/dist/gateway/static/root/assets/{channels-D82wgP8A.js → channels-DfNTGBmp.js} +1 -1
  35. package/dist/gateway/static/root/assets/{chat-terminal-dock-DuqWzcEq.js → chat-terminal-dock-DnoQHpDc.js} +2 -2
  36. package/dist/gateway/static/root/assets/{computer-settings-page-BiM0fCvO.js → computer-settings-page-7yliE7sG.js} +1 -1
  37. package/dist/gateway/static/root/assets/{connector-service-page-o8kuXjVt.js → connector-service-page-DOLAUFSW.js} +1 -1
  38. package/dist/gateway/static/root/assets/connectors-page-DAsn97XG.js +1 -0
  39. package/dist/gateway/static/root/assets/{date-picker-5tzjG3n1.js → date-picker-DNDqr4Fk.js} +1 -1
  40. package/dist/gateway/static/root/assets/{dependency-picker-DLcDUyep.js → dependency-picker-B5oG7RgE.js} +1 -1
  41. package/dist/gateway/static/root/assets/{desktop-pet-D-w8487x.js → desktop-pet-K7kUCX1O.js} +1 -1
  42. package/dist/gateway/static/root/assets/{desktop-pet-settings-D-w7uF8Q.js → desktop-pet-settings-KgOAuqSh.js} +1 -1
  43. package/dist/gateway/static/root/assets/device-pairing-wizard-DvqniZDm.js +1 -0
  44. package/dist/gateway/static/root/assets/{directory-picker-path-field-B7d2s14w.js → directory-picker-path-field-BmOguLDl.js} +1 -1
  45. package/dist/gateway/static/root/assets/{extension-debug-page-sntm2YRN.js → extension-debug-page-DtHNy4TE.js} +1 -1
  46. package/dist/gateway/static/root/assets/{extension-page-CPbWA4Oy.js → extension-page-DSSuMQxp.js} +1 -1
  47. package/dist/gateway/static/root/assets/{extension-provider-CnDGKMN6.js → extension-provider-nbgU7xBS.js} +1 -1
  48. package/dist/gateway/static/root/assets/{extension-settings-page-PAHKn-Az.js → extension-settings-page-DSd__mNd.js} +1 -1
  49. package/dist/gateway/static/root/assets/{fallback-models-BJaSQNiV.js → fallback-models-D7bjbiwZ.js} +1 -1
  50. package/dist/gateway/static/root/assets/{gateway-config-swr-DIhXgHH-.js → gateway-config-swr-D0tBjSgj.js} +1 -1
  51. package/dist/gateway/static/root/assets/{gateway-realtime-BkgWeVUQ.js → gateway-realtime-BnHraJ3O.js} +1 -1
  52. package/dist/gateway/static/root/assets/gateway-realtime-store-BVriF6Zj.js +1 -0
  53. package/dist/gateway/static/root/assets/gateway-settings-hSXGWumL.js +1 -0
  54. package/dist/gateway/static/root/assets/{gateway-startup-retry-DnXc9GNb.js → gateway-startup-retry-C1DQsIH3.js} +1 -1
  55. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-Cw_HUlEk.js → highlighted-body-KQOG7T2V-C7xJwE61.js} +1 -1
  56. package/dist/gateway/static/root/assets/home-page-DJNmlMfH.js +2 -0
  57. package/dist/gateway/static/root/assets/{image-generation-api-4dtNAW64.js → image-generation-api-DodU6GNC.js} +1 -1
  58. package/dist/gateway/static/root/assets/{imports-page-DVvyrYUy.js → imports-page-BufZPzGE.js} +1 -1
  59. package/dist/gateway/static/root/assets/index-DBRwvWzm.css +1 -0
  60. package/dist/gateway/static/root/assets/{index-B-wZyMBY.js → index-K8SXDtxr.js} +110 -110
  61. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DywXmCvO.js → keyboard-shortcuts-settings-B8pPP5RF.js} +1 -1
  62. package/dist/gateway/static/root/assets/{local-app-workbench-page-dBlBepLG.js → local-app-workbench-page-zEtvE7pJ.js} +1 -1
  63. package/dist/gateway/static/root/assets/{local-apps-page-DdEXqsZw.js → local-apps-page-Bli7e_eg.js} +1 -1
  64. package/dist/gateway/static/root/assets/{local-session-drafts-D-_OuGWH.js → local-session-drafts-D_tYFy7d.js} +1 -1
  65. package/dist/gateway/static/root/assets/{locale-store-BNDrBt2C.js → locale-store-uRu_DsWm.js} +1 -1
  66. package/dist/gateway/static/root/assets/{logs-page-DpSob5Id.js → logs-page-BimZk3R4.js} +2 -2
  67. package/dist/gateway/static/root/assets/{management-settings-10Vl7gLU.js → management-settings-5Y4COyU9.js} +1 -1
  68. package/dist/gateway/static/root/assets/markdown-view-Ct4sKkUf.css +1 -0
  69. package/dist/gateway/static/root/assets/{markdown-view-pEV4TIPK.js → markdown-view-DHfQAvZQ.js} +1 -1
  70. package/dist/gateway/static/root/assets/{media-plugins-DU1Ike3m.js → media-plugins-BombFqsX.js} +1 -1
  71. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DBRj4-1-.js +1 -0
  72. package/dist/gateway/static/root/assets/messages-DTqbfje6.js +3 -0
  73. package/dist/gateway/static/root/assets/{models-hub-cache-Lp4PAH-A.js → models-hub-cache-Ct6X5zmB.js} +1 -1
  74. package/dist/gateway/static/root/assets/note-detail-panel-KLDPLVg7.js +5 -0
  75. package/dist/gateway/static/root/assets/{notes-api-B_LGV8Lh.js → notes-api-nqN2wKYc.js} +1 -1
  76. package/dist/gateway/static/root/assets/notes-page-DST0oPXD.js +8 -0
  77. package/dist/gateway/static/root/assets/{page-context-capture-button-DzkU3HrQ.js → page-context-capture-button-Bmed83-6.js} +1 -1
  78. package/dist/gateway/static/root/assets/page-tabs-HLrKIjXH.js +1 -0
  79. package/dist/gateway/static/root/assets/personal-page-BG4Ystrm.js +1 -0
  80. package/dist/gateway/static/root/assets/{product-open-page-Dbs3Xtis.js → product-open-page-CXkYP9xE.js} +1 -1
  81. package/dist/gateway/static/root/assets/{product-preview-content-x-EvUxt7.js → product-preview-content-DjmupQSq.js} +1 -1
  82. package/dist/gateway/static/root/assets/project-detail-page-CzBmV0P6.js +1 -0
  83. package/dist/gateway/static/root/assets/{projects-page-CSahay3I.js → projects-page-DByqe5Em.js} +1 -1
  84. package/dist/gateway/static/root/assets/{registry-api-DX5EhiBp.js → registry-api-CYqA7bfl.js} +1 -1
  85. package/dist/gateway/static/root/assets/remote-access-hub-DTjj-odF.js +1 -0
  86. package/dist/gateway/static/root/assets/{runtime-tools-api-DYeTxrEb.js → runtime-tools-api-zzoxjSuR.js} +1 -1
  87. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DbuAW7ky.js → runtime-tools-settings-panel-B_ptn3T8.js} +1 -1
  88. package/dist/gateway/static/root/assets/{scenes-page-DVzrw6Q9.js → scenes-page-wkua4l5y.js} +2 -2
  89. package/dist/gateway/static/root/assets/{schema-form-Ch-wK0Os.js → schema-form-VvOSM84Y.js} +1 -1
  90. package/dist/gateway/static/root/assets/{send-session-input-BKIg9cjN.js → send-session-input-BCAF-Ikt.js} +1 -1
  91. package/dist/gateway/static/root/assets/{session-api-Cf3ACMv7.js → session-api-CzVTrG8n.js} +1 -1
  92. package/dist/gateway/static/root/assets/{session-manager-Djtcwo3n.js → session-manager-_yy4bxhT.js} +1 -1
  93. package/dist/gateway/static/root/assets/sessions-page-D06XwYAT.js +1 -0
  94. package/dist/gateway/static/root/assets/settings-advanced-gate-DoAHy1wj.js +1 -0
  95. package/dist/gateway/static/root/assets/{settings-page-D-Uz-C5u.js → settings-page-C-6BJdb1.js} +1 -1
  96. package/dist/gateway/static/root/assets/setup-status-panel-L0JSG0K-.js +1 -0
  97. package/dist/gateway/static/root/assets/{share-link-dialog-Cke8qSIS.js → share-link-dialog-C47Xgzta.js} +1 -1
  98. package/dist/gateway/static/root/assets/{share-preview-page-CQjfWJVh.js → share-preview-page-nJ2FWAEP.js} +1 -1
  99. package/dist/gateway/static/root/assets/{shares-api-CQapohsa.js → shares-api-B0HlMAzi.js} +1 -1
  100. package/dist/gateway/static/root/assets/shares-settings-BbgAUM3v.js +1 -0
  101. package/dist/gateway/static/root/assets/{skill-api-v1XR_zqL.js → skill-api-BFU1tPyw.js} +1 -1
  102. package/dist/gateway/static/root/assets/{skill-reload-api-CPW9mIZH.js → skill-reload-api-CEJx5rPd.js} +1 -1
  103. package/dist/gateway/static/root/assets/{skills-page-Cu80KslP.js → skills-page-DZw6el4o.js} +1 -1
  104. package/dist/gateway/static/root/assets/specialists-4bkS5rZ4.js +1 -0
  105. package/dist/gateway/static/root/assets/{system-settings-panel-CbIHO53w.js → system-settings-panel-DshSGWNg.js} +1 -1
  106. package/dist/gateway/static/root/assets/{task-detail-page-DvRLEt8e.js → task-detail-page-CfZhq4XZ.js} +2 -2
  107. package/dist/gateway/static/root/assets/{task-expandable-content-CQ9Y17UE.js → task-expandable-content-CF6Bj-Qa.js} +1 -1
  108. package/dist/gateway/static/root/assets/tasks-DJIeIk9C.js +1 -0
  109. package/dist/gateway/static/root/assets/{theme-store-BNDzgUPq.js → theme-store-BUfzeDvL.js} +1 -1
  110. package/dist/gateway/static/root/assets/{tracing-settings-page-DbbQg2I5.js → tracing-settings-page-C2q5B3Kp.js} +1 -1
  111. package/dist/gateway/static/root/assets/{tunnel-api-CQXrU_XI.js → tunnel-api-DFDXwWnU.js} +1 -1
  112. package/dist/gateway/static/root/assets/{usage-page-BdLt6u0c.js → usage-page-2RJLg54s.js} +1 -1
  113. package/dist/gateway/static/root/assets/{use-autosave-CFn9aZYy.js → use-autosave-DgbCgsao.js} +1 -1
  114. package/dist/gateway/static/root/assets/{use-composer-attachments-DXCEME1D.js → use-composer-attachments-BFP3k6oC.js} +1 -1
  115. package/dist/gateway/static/root/assets/{use-file-preview-expanded-CEB7pfWq.js → use-file-preview-expanded-B1BiTQNS.js} +2 -2
  116. package/dist/gateway/static/root/assets/user-model-page-y1gjGYPI.js +2 -0
  117. package/dist/gateway/static/root/assets/{voice-api-key-field-C9s0iBGA.js → voice-api-key-field-4AIkbm9R.js} +1 -1
  118. package/dist/gateway/static/root/assets/{voice-config-api-BIm_aTqX.js → voice-config-api-Kw1pYlLN.js} +1 -1
  119. package/dist/gateway/static/root/assets/{work-discovery-overlay-C3KsL1Ap.js → work-discovery-overlay-Ch-KfpCF.js} +1 -1
  120. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CEx_jYPu.js → workflow-run-setup-panel-CTu297Hc.js} +2 -2
  121. package/dist/gateway/static/root/assets/{workflows-page-BYGPnFEF.js → workflows-page-CRZXG_rm.js} +3 -3
  122. package/dist/gateway/static/root/assets/{workspace-api-uZFF1SlQ.js → workspace-api-Xr3wz8T3.js} +2 -2
  123. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-DcPFuTIk.js → xopc-cloud-account-card-hEfjVjnc.js} +1 -1
  124. package/dist/gateway/static/root/index.html +30 -29
  125. package/dist/package.js +1 -1
  126. package/dist/packages/gateway-contract/src/index.js +1 -1
  127. package/dist/packages/gateway-contract/src/task-lifecycle.js +3 -0
  128. package/dist/packages/gateway-contract/src/tasks.js +41 -10
  129. package/dist/src/agent/agent-manager.d.ts +6 -0
  130. package/dist/src/agent/agent-manager.js +18 -15
  131. package/dist/src/agent/agent-scope.js +2 -2
  132. package/dist/src/agent/background-review/prompts.js +1 -1
  133. package/dist/src/agent/background-review/run-background-review.js +10 -10
  134. package/dist/src/agent/child-agent-factory.js +7 -1
  135. package/dist/src/agent/coding/repository-instructions.js +1 -1
  136. package/dist/src/agent/context/coordinator.js +2 -2
  137. package/dist/src/agent/context/execution-context.js +4 -4
  138. package/dist/src/agent/context/execution-scope.js +1 -1
  139. package/dist/src/agent/context/project-context.js +3 -3
  140. package/dist/src/agent/data-acquisition/service.js +1 -1
  141. package/dist/src/agent/embedded/codemode-extension.js +1 -1
  142. package/dist/src/agent/embedded/execution-tool-policy.d.ts +1 -1
  143. package/dist/src/agent/embedded/execution-tool-policy.js +3 -2
  144. package/dist/src/agent/embedded/index.js +1 -1
  145. package/dist/src/agent/embedded/run-for-session.js +38 -18
  146. package/dist/src/agent/embedded/run-turn.js +119 -35
  147. package/dist/src/agent/embedded/session-runner.js +12 -4
  148. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -2
  149. package/dist/src/agent/embedded/tool-result-truncation.js +1 -1
  150. package/dist/src/agent/embedded/types.d.ts +2 -1
  151. package/dist/src/agent/external-tools/cliProvider.d.ts +1 -0
  152. package/dist/src/agent/external-tools/cliProvider.js +4 -3
  153. package/dist/src/agent/external-tools/composio-provider.js +5 -3
  154. package/dist/src/agent/external-tools/endpoint-provider.js +4 -4
  155. package/dist/src/agent/external-tools/gateway-tools.js +10 -4
  156. package/dist/src/agent/external-tools/index.js +1 -1
  157. package/dist/src/agent/external-tools/service.d.ts +1 -0
  158. package/dist/src/agent/external-tools/service.js +3 -1
  159. package/dist/src/agent/external-tools/types.d.ts +4 -0
  160. package/dist/src/agent/image/generation/openai-images-provider.js +1 -1
  161. package/dist/src/agent/image/generation/runtime.js +1 -1
  162. package/dist/src/agent/image/index.js +1 -1
  163. package/dist/src/agent/image/load-image-media.js +1 -1
  164. package/dist/src/agent/image/tool-model-config.js +1 -1
  165. package/dist/src/agent/inbound/attachment-pipeline.js +2 -2
  166. package/dist/src/agent/inbound/inbound-loop.js +2 -2
  167. package/dist/src/agent/index.js +3 -3
  168. package/dist/src/agent/mcp/config.js +1 -1
  169. package/dist/src/agent/memory/context-budget.js +1 -1
  170. package/dist/src/agent/memory/context-recovery.js +1 -1
  171. package/dist/src/agent/memory/index.js +1 -1
  172. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  173. package/dist/src/agent/orchestration/agent-turn-policy.d.ts +1 -0
  174. package/dist/src/agent/orchestration/delegation-budget.js +2 -1
  175. package/dist/src/agent/orchestration/llm-turn-retry.d.ts +5 -0
  176. package/dist/src/agent/orchestration/llm-turn-retry.js +15 -5
  177. package/dist/src/agent/orchestration/turn-recovery.d.ts +6 -0
  178. package/dist/src/agent/orchestration/turn-recovery.js +29 -0
  179. package/dist/src/agent/prompt/response-language.js +1 -1
  180. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  181. package/dist/src/agent/prompt/service-prompt-builder.js +3 -3
  182. package/dist/src/agent/sandbox/exec-policy.js +1 -1
  183. package/dist/src/agent/service/direct-turn-helpers.js +11 -10
  184. package/dist/src/agent/service/process-direct-streaming.js +12 -6
  185. package/dist/src/agent/service/webchat-tts.js +2 -2
  186. package/dist/src/agent/service.d.ts +6 -0
  187. package/dist/src/agent/service.js +21 -18
  188. package/dist/src/agent/session/session-config-service.js +2 -2
  189. package/dist/src/agent/session/session-hydrator.js +1 -1
  190. package/dist/src/agent/session/session-inspector.js +1 -1
  191. package/dist/src/agent/source-context/index.js +2 -2
  192. package/dist/src/agent/starter-agents.d.ts +1 -0
  193. package/dist/src/agent/starter-agents.js +12 -0
  194. package/dist/src/agent/tasks/task-judge-service.js +32 -14
  195. package/dist/src/agent/tools/create-share-tool.js +3 -3
  196. package/dist/src/agent/tools/dataBatch.js +1 -1
  197. package/dist/src/agent/tools/delegate-tool.js +3 -3
  198. package/dist/src/agent/tools/error-pattern-matcher.js +1 -1
  199. package/dist/src/agent/tools/exec-command.js +3 -1
  200. package/dist/src/agent/tools/executor.js +1 -1
  201. package/dist/src/agent/tools/factory.d.ts +6 -0
  202. package/dist/src/agent/tools/factory.js +50 -40
  203. package/dist/src/agent/tools/fetch-text.js +1 -1
  204. package/dist/src/agent/tools/image-generate-tool.js +3 -3
  205. package/dist/src/agent/tools/index.d.ts +1 -0
  206. package/dist/src/agent/tools/index.js +8 -7
  207. package/dist/src/agent/tools/list-dir.js +1 -1
  208. package/dist/src/agent/tools/personal-attention-tool.d.ts +2 -0
  209. package/dist/src/agent/tools/personal-attention-tool.js +52 -18
  210. package/dist/src/agent/tools/personal-read-tool.js +16 -6
  211. package/dist/src/agent/tools/personal-request-result-tool.js +20 -3
  212. package/dist/src/agent/tools/personal-request-tool.js +216 -17
  213. package/dist/src/agent/tools/personal-result-budget.d.ts +2 -0
  214. package/dist/src/agent/tools/personal-result-budget.js +57 -0
  215. package/dist/src/agent/tools/personal-task-tool.d.ts +17 -21
  216. package/dist/src/agent/tools/personal-task-tool.js +356 -24
  217. package/dist/src/agent/tools/publish-artifacts.js +2 -2
  218. package/dist/src/agent/tools/read.js +2 -2
  219. package/dist/src/agent/tools/review-workspace.js +1 -1
  220. package/dist/src/agent/tools/send-media.js +2 -2
  221. package/dist/src/agent/tools/skills-tools.js +1 -1
  222. package/dist/src/agent/tools/task-collaboration-tool.d.ts +16 -0
  223. package/dist/src/agent/tools/task-collaboration-tool.js +153 -0
  224. package/dist/src/agent/tools/tts-tool.js +1 -1
  225. package/dist/src/agent/tools/user-context-tool.js +1 -1
  226. package/dist/src/agent/tools/write.js +2 -2
  227. package/dist/src/agent/tools/xopc-use-tool.js +25 -13
  228. package/dist/src/agent/transcript/index.js +2 -2
  229. package/dist/src/agent/transcript/transcript-hygiene.js +2 -2
  230. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  231. package/dist/src/agent-config/resolver.js +2 -0
  232. package/dist/src/agent-config/schema.d.ts +8 -0
  233. package/dist/src/agent-config/schema.js +2 -0
  234. package/dist/src/agent-matching/delegation-service.js +1 -1
  235. package/dist/src/agent-matching/selection-repository.d.ts +1 -0
  236. package/dist/src/agent-matching/selection-repository.js +1 -1
  237. package/dist/src/agent-matching/service.js +2 -2
  238. package/dist/src/ai-assist/text-assist.js +1 -1
  239. package/dist/src/auth/sync-provider-auth.js +1 -1
  240. package/dist/src/automations/capabilities/write.d.ts +4 -0
  241. package/dist/src/automations/domain/index.js +2 -2
  242. package/dist/src/automations/domain/validation.d.ts +8 -0
  243. package/dist/src/automations/draft/automation-draft-service.js +1 -1
  244. package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -0
  245. package/dist/src/automations/index.js +4 -4
  246. package/dist/src/automations/service/automation-service.js +2 -2
  247. package/dist/src/backup/archive.js +1 -1
  248. package/dist/src/browser/native-messaging-host.js +1 -1
  249. package/dist/src/channels/attachments/voice-stt-webchat.js +2 -2
  250. package/dist/src/channels/index.js +2 -2
  251. package/dist/src/channels/outbound-sender.js +1 -1
  252. package/dist/src/channels/pairing/allow-from-file.js +9 -9
  253. package/dist/src/channels/pairing/pairing-store.js +6 -6
  254. package/dist/src/chat-commands/agent-edit.js +1 -1
  255. package/dist/src/chat-commands/builtins/config.js +3 -3
  256. package/dist/src/chat-commands/builtins/review.js +1 -1
  257. package/dist/src/chat-commands/builtins/session.js +1 -1
  258. package/dist/src/chat-commands/builtins/thinking.js +1 -1
  259. package/dist/src/chat-commands/builtins/tts.js +1 -1
  260. package/dist/src/chat-commands/builtins/understanding.js +1 -1
  261. package/dist/src/chat-commands/builtins/workflow.js +1 -1
  262. package/dist/src/chat-commands/context.js +4 -4
  263. package/dist/src/chat-commands/index.js +3 -3
  264. package/dist/src/cli/commands/agent.js +8 -8
  265. package/dist/src/cli/commands/config.js +1 -1
  266. package/dist/src/cli/commands/connectors.js +1 -1
  267. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +1 -1
  268. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  269. package/dist/src/cli/commands/doctor/checks/gateway-health.js +1 -1
  270. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  271. package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +1 -1
  272. package/dist/src/cli/commands/extension-agent-plugin.js +1 -1
  273. package/dist/src/cli/commands/extension-dev.js +1 -1
  274. package/dist/src/cli/commands/extension-marketplace.js +3 -3
  275. package/dist/src/cli/commands/extension.js +4 -4
  276. package/dist/src/cli/commands/gateway/token.js +1 -1
  277. package/dist/src/cli/commands/image.js +1 -1
  278. package/dist/src/cli/commands/init.js +1 -1
  279. package/dist/src/cli/commands/mcp.js +1 -1
  280. package/dist/src/cli/commands/models.js +2 -2
  281. package/dist/src/cli/commands/onboard/channels/registry.js +1 -1
  282. package/dist/src/cli/commands/onboard.js +1 -1
  283. package/dist/src/cli/commands/project.js +2 -2
  284. package/dist/src/cli/commands/runtime.js +1 -1
  285. package/dist/src/cli/commands/skills.js +2 -2
  286. package/dist/src/cli/commands/tunnel.js +4 -4
  287. package/dist/src/cli/extension-cli-register.js +6 -6
  288. package/dist/src/cli/utils/gateway-client.js +1 -1
  289. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  290. package/dist/src/cli/utils/session.js +1 -1
  291. package/dist/src/computer/runtime.js +2 -2
  292. package/dist/src/config/agent-model-intents.js +1 -1
  293. package/dist/src/config/index.js +5 -5
  294. package/dist/src/config/loader.js +1 -1
  295. package/dist/src/config/schema.js +5 -5
  296. package/dist/src/connectors/cli/authorization.js +1 -1
  297. package/dist/src/connectors/cli/runtime.js +1 -1
  298. package/dist/src/connectors/composio-sessions.js +1 -1
  299. package/dist/src/connectors/composio.js +1 -1
  300. package/dist/src/connectors/connected-source-ingestion.js +4 -4
  301. package/dist/src/connectors/connected-source-understanding.js +4 -4
  302. package/dist/src/connectors/connection-recovery-service.d.ts +6 -0
  303. package/dist/src/connectors/connection-recovery-service.js +157 -38
  304. package/dist/src/connectors/content-enrichment.js +1 -1
  305. package/dist/src/connectors/health.js +1 -1
  306. package/dist/src/connectors/learning-coordinator.js +2 -2
  307. package/dist/src/discussions/live-worker.js +1 -1
  308. package/dist/src/discussions/recording.js +1 -1
  309. package/dist/src/discussions/sealer.js +1 -1
  310. package/dist/src/endpoint-tools/index.js +1 -1
  311. package/dist/src/endpoint-tools/runtime.js +2 -2
  312. package/dist/src/extensions/activation-context.js +3 -3
  313. package/dist/src/extensions/agent-plugins/source-http-fetch.js +1 -1
  314. package/dist/src/extensions/api.js +4 -4
  315. package/dist/src/extensions/bundled-extension-activation.js +1 -1
  316. package/dist/src/extensions/index.js +3 -3
  317. package/dist/src/extensions/install.js +1 -1
  318. package/dist/src/extensions/loader.js +2 -2
  319. package/dist/src/extensions/sdk/index.js +1 -1
  320. package/dist/src/extensions/sdk/media.js +1 -1
  321. package/dist/src/extensions/update.js +1 -1
  322. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  323. package/dist/src/gateway/agents-admin.js +1 -1
  324. package/dist/src/gateway/device-routes.js +2 -2
  325. package/dist/src/gateway/file-path-classifier.js +2 -2
  326. package/dist/src/gateway/global-defaults-admin.js +1 -1
  327. package/dist/src/gateway/hono/app.js +3 -3
  328. package/dist/src/gateway/hono/lib/config-payload.js +3 -3
  329. package/dist/src/gateway/hono/routes/agents.js +1 -1
  330. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  331. package/dist/src/gateway/hono/routes/commands-skills.js +4 -4
  332. package/dist/src/gateway/hono/routes/config-patch/gateway.js +1 -1
  333. package/dist/src/gateway/hono/routes/config-patch/misc.js +4 -4
  334. package/dist/src/gateway/hono/routes/connection-waits.js +3 -1
  335. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  336. package/dist/src/gateway/hono/routes/context-sources.js +2 -2
  337. package/dist/src/gateway/hono/routes/endpoint-tools.js +1 -1
  338. package/dist/src/gateway/hono/routes/home.js +1 -1
  339. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  340. package/dist/src/gateway/hono/routes/media.js +1 -1
  341. package/dist/src/gateway/hono/routes/memory-learning.js +3 -3
  342. package/dist/src/gateway/hono/routes/models.js +5 -5
  343. package/dist/src/gateway/hono/routes/notes.js +1 -1
  344. package/dist/src/gateway/hono/routes/personal-agent.js +2 -2
  345. package/dist/src/gateway/hono/routes/projects.js +4 -4
  346. package/dist/src/gateway/hono/routes/session-command-handler.js +2 -2
  347. package/dist/src/gateway/hono/routes/session-input-handler.js +4 -4
  348. package/dist/src/gateway/hono/routes/sessions.js +2 -2
  349. package/dist/src/gateway/hono/routes/shares.js +3 -3
  350. package/dist/src/gateway/hono/routes/side-chats.js +1 -1
  351. package/dist/src/gateway/hono/routes/site-shares.js +1 -1
  352. package/dist/src/gateway/hono/routes/tasks.js +3 -2
  353. package/dist/src/gateway/hono/routes/user-model.js +7 -7
  354. package/dist/src/gateway/hono/routes/voice.js +7 -7
  355. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  356. package/dist/src/gateway/image-generation-setup.js +1 -1
  357. package/dist/src/gateway/index.js +1 -1
  358. package/dist/src/gateway/lock.js +11 -11
  359. package/dist/src/gateway/media-access.js +1 -1
  360. package/dist/src/gateway/mobile-privacy.js +2 -2
  361. package/dist/src/gateway/ports.js +6 -6
  362. package/dist/src/gateway/run-loop.js +1 -1
  363. package/dist/src/gateway/scenes/mailContext.js +1 -1
  364. package/dist/src/gateway/scenes/slackThreadSource.js +1 -1
  365. package/dist/src/gateway/server.js +1 -1
  366. package/dist/src/gateway/service/agent-runner.js +2 -2
  367. package/dist/src/gateway/service/config-coordinator.js +2 -2
  368. package/dist/src/gateway/service/marketplace-service.js +1 -1
  369. package/dist/src/gateway/service/run-gateway-agent.js +12 -8
  370. package/dist/src/gateway/service/session-command-service.js +1 -1
  371. package/dist/src/gateway/service/session-input-coordinator.js +4 -2
  372. package/dist/src/gateway/service.d.ts +1 -0
  373. package/dist/src/gateway/service.js +62 -48
  374. package/dist/src/gateway/session-context-summary.js +3 -3
  375. package/dist/src/gateway/workspace-editor-path.js +2 -2
  376. package/dist/src/home-intelligence/generator.js +2 -2
  377. package/dist/src/home-intelligence/host.js +2 -2
  378. package/dist/src/imports/inventory.js +1 -1
  379. package/dist/src/infra/gateway-processes.js +2 -2
  380. package/dist/src/infra/path-env.js +3 -3
  381. package/dist/src/infra/update-global.js +10 -10
  382. package/dist/src/knowledge/connected-knowledge-pipeline.js +2 -2
  383. package/dist/src/knowledge/index.js +1 -1
  384. package/dist/src/knowledge-memory/repository.js +1 -1
  385. package/dist/src/local-apps/service.js +1 -1
  386. package/dist/src/mcp/gateway-http-client.js +1 -1
  387. package/dist/src/media-understanding/openai-compatible-audio.js +1 -1
  388. package/dist/src/memory-learning/source-learning.js +5 -5
  389. package/dist/src/memory-learning/task-receipts.js +1 -1
  390. package/dist/src/notes/agent-context.js +4 -4
  391. package/dist/src/notes/index.js +1 -1
  392. package/dist/src/notes/store.js +1 -1
  393. package/dist/src/personal-agent/capability-service.js +4 -4
  394. package/dist/src/personal-agent/policy.js +2 -7
  395. package/dist/src/personal-agent/proactivity/repository.js +1 -1
  396. package/dist/src/personal-agent/proactivity/routes.js +1 -1
  397. package/dist/src/personal-agent/proactivity/service.js +5 -5
  398. package/dist/src/personal-agent/prompt-context.d.ts +1 -4
  399. package/dist/src/personal-agent/prompt-context.js +9 -34
  400. package/dist/src/personal-agent/prompts.js +35 -10
  401. package/dist/src/personal-agent/reply-composer.js +27 -13
  402. package/dist/src/personal-agent/request-access.d.ts +3 -0
  403. package/dist/src/personal-agent/request-access.js +31 -0
  404. package/dist/src/personal-agent/request-delivery.js +10 -5
  405. package/dist/src/personal-agent/request-repository.d.ts +4 -2
  406. package/dist/src/personal-agent/request-repository.js +4 -4
  407. package/dist/src/personal-agent/request-service.d.ts +3 -1
  408. package/dist/src/personal-agent/request-service.js +131 -38
  409. package/dist/src/personal-agent/task-cancel.d.ts +7 -0
  410. package/dist/src/personal-agent/task-cancel.js +76 -0
  411. package/dist/src/providers/model-reference-auditor.js +1 -1
  412. package/dist/src/providers/model-response.js +13 -2
  413. package/dist/src/realtime/runtime.js +1 -1
  414. package/dist/src/remote-access/exposure-manager.js +1 -1
  415. package/dist/src/scenes/taskFollowUp/agentExecutor.js +4 -4
  416. package/dist/src/scenes/taskFollowUp/resources.js +1 -1
  417. package/dist/src/scenes/taskFollowUp/service.js +5 -5
  418. package/dist/src/session/client-history.js +1 -1
  419. package/dist/src/session/index.js +1 -1
  420. package/dist/src/session/store.js +24 -11
  421. package/dist/src/session/thinking-resolve.js +1 -1
  422. package/dist/src/share/share-store.js +1 -1
  423. package/dist/src/share/share-thumbnail.js +1 -1
  424. package/dist/src/share/share-zip.js +1 -1
  425. package/dist/src/share/site-proxy.js +1 -1
  426. package/dist/src/share/site-share-store.js +1 -1
  427. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +2 -0
  428. package/dist/src/storage/sqlite/connection-wait-repository.js +83 -4
  429. package/dist/src/storage/sqlite/connection.js +9 -9
  430. package/dist/src/storage/sqlite/migrations/249_task_allocations.sql +17 -0
  431. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  432. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  433. package/dist/src/storage/sqlite/schema.js +1 -1
  434. package/dist/src/storage/sqlite/transcript-repository.d.ts +2 -0
  435. package/dist/src/storage/sqlite/transcript-repository.js +25 -1
  436. package/dist/src/tasks/capabilities/read.js +2 -2
  437. package/dist/src/tasks/capabilities/relations.d.ts +38 -2
  438. package/dist/src/tasks/capabilities/write.d.ts +40 -0
  439. package/dist/src/tasks/capabilities/write.js +7 -6
  440. package/dist/src/tasks/execution-context.js +1 -1
  441. package/dist/src/tasks/home-query-service.js +2 -2
  442. package/dist/src/tasks/index.js +5 -5
  443. package/dist/src/tasks/task-allocation-repository.d.ts +25 -0
  444. package/dist/src/tasks/task-allocation-repository.js +82 -0
  445. package/dist/src/tasks/task-allocation-service.d.ts +39 -0
  446. package/dist/src/tasks/task-allocation-service.js +310 -0
  447. package/dist/src/tasks/task-application-service.js +47 -4
  448. package/dist/src/tasks/task-collaboration-delivery.js +5 -2
  449. package/dist/src/tasks/task-collaboration-repository.d.ts +3 -0
  450. package/dist/src/tasks/task-collaboration-repository.js +11 -1
  451. package/dist/src/tasks/task-context-assembler.js +15 -7
  452. package/dist/src/tasks/task-continuation.d.ts +5 -0
  453. package/dist/src/tasks/task-continuation.js +32 -0
  454. package/dist/src/tasks/task-handoff-service.js +2 -2
  455. package/dist/src/tasks/task-main-update-decision-service.js +2 -2
  456. package/dist/src/tasks/task-main-update-delivery.js +15 -8
  457. package/dist/src/tasks/task-origin-repository.d.ts +2 -1
  458. package/dist/src/tasks/task-origin-repository.js +9 -5
  459. package/dist/src/tasks/task-read-model-projector.d.ts +2 -1
  460. package/dist/src/tasks/task-read-model-projector.js +22 -9
  461. package/dist/src/tasks/task-result-delivery-repository.js +1 -1
  462. package/dist/src/tasks/task-result-delivery-service.js +4 -4
  463. package/dist/src/tasks/task-run-coordinator.d.ts +1 -0
  464. package/dist/src/tasks/task-run-coordinator.js +31 -8
  465. package/dist/src/tasks/task-run-dispatcher.d.ts +1 -1
  466. package/dist/src/tasks/task-run-dispatcher.js +16 -4
  467. package/dist/src/tasks/task-run-repository.d.ts +8 -0
  468. package/dist/src/tasks/task-run-repository.js +32 -1
  469. package/dist/src/tui/backends/embedded-backend.js +11 -11
  470. package/dist/src/tui/backends/gateway-realtime-backend.js +2 -2
  471. package/dist/src/tui/extension-host/load-extensions.js +2 -2
  472. package/dist/src/tui/tui-commands.js +6 -6
  473. package/dist/src/tui/tui-picker-overlay.js +1 -1
  474. package/dist/src/tui/tui-skills-autocomplete.js +2 -2
  475. package/dist/src/tui/tui-startup-resources.js +5 -5
  476. package/dist/src/tui/tui.js +7 -7
  477. package/dist/src/tunnel/frpc-binary.js +1 -1
  478. package/dist/src/tunnel/gateway-lifecycle.js +1 -1
  479. package/dist/src/user-context/access-policy.js +1 -1
  480. package/dist/src/user-model/bootstrap.js +1 -1
  481. package/dist/src/user-model/capture/executor.js +1 -1
  482. package/dist/src/user-model/index.js +2 -2
  483. package/dist/src/voice/realtime/memory-context.js +6 -6
  484. package/dist/src/voice/realtime/runtime.js +4 -4
  485. package/dist/src/voice/stt/index.js +2 -2
  486. package/dist/src/voice/stt/preflight.js +1 -1
  487. package/dist/src/voice/stt/providers/alibaba-transcription.js +1 -1
  488. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +1 -1
  489. package/dist/src/voice/stt/transcribe-core.js +1 -1
  490. package/dist/src/voice/tts/index.js +3 -3
  491. package/dist/src/voice/tts/merge-config.js +1 -1
  492. package/dist/src/voice/tts/payload.js +1 -1
  493. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +1 -1
  494. package/dist/src/voice/tts/speak-core.js +1 -1
  495. package/dist/src/work-discovery/index.js +1 -1
  496. package/dist/src/work-discovery/service.js +7 -7
  497. package/dist/src/workflows/engine/workflow-engine.js +1 -1
  498. package/dist/src/workflows/service/workflow-run-service.js +8 -8
  499. package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
  500. package/package.json +3 -3
  501. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bewx00VC.js +0 -1
  502. package/dist/gateway/static/root/assets/agents-ByJbzt3F.js +0 -77
  503. package/dist/gateway/static/root/assets/automations-workspace-DOJnSOJ7.js +0 -6
  504. package/dist/gateway/static/root/assets/browser-automations-page-DGcGOkIq.js +0 -3
  505. package/dist/gateway/static/root/assets/browser-settings-page-CHCWHtkG.js +0 -3
  506. package/dist/gateway/static/root/assets/capabilities-page-CVaH729t.js +0 -2
  507. package/dist/gateway/static/root/assets/connectors-page-BpCGV1Gg.js +0 -1
  508. package/dist/gateway/static/root/assets/device-pairing-wizard-CEfqb0dk.js +0 -1
  509. package/dist/gateway/static/root/assets/gateway-realtime-store-IK77lcix.js +0 -1
  510. package/dist/gateway/static/root/assets/gateway-settings-CnqeYLJI.js +0 -1
  511. package/dist/gateway/static/root/assets/home-page-CKUJdUkK.js +0 -2
  512. package/dist/gateway/static/root/assets/index-BvOYtdnP.css +0 -1
  513. package/dist/gateway/static/root/assets/markdown-view-CZWff4bI.css +0 -1
  514. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-Bd0DNN_v.js +0 -1
  515. package/dist/gateway/static/root/assets/messages-CRy8QVkB.js +0 -3
  516. package/dist/gateway/static/root/assets/note-detail-panel-DiJ5O3Ga.js +0 -5
  517. package/dist/gateway/static/root/assets/notes-page-BEhxVwpX.js +0 -8
  518. package/dist/gateway/static/root/assets/page-tabs-BLGO2VIm.js +0 -1
  519. package/dist/gateway/static/root/assets/personal-page-Dpgj9Y5a.js +0 -1
  520. package/dist/gateway/static/root/assets/project-detail-page-CAM4Q3Kh.js +0 -1
  521. package/dist/gateway/static/root/assets/remote-access-hub-B6y0lXZc.js +0 -1
  522. package/dist/gateway/static/root/assets/sessions-page-DY0UP_lC.js +0 -1
  523. package/dist/gateway/static/root/assets/settings-advanced-gate-BLTR6Opb.js +0 -1
  524. package/dist/gateway/static/root/assets/setup-status-panel-DWAAlzV5.js +0 -1
  525. package/dist/gateway/static/root/assets/shares-settings-DPrpUIj7.js +0 -1
  526. package/dist/gateway/static/root/assets/tasks-DwKXgZ-I.js +0 -1
  527. package/dist/gateway/static/root/assets/user-model-page-BgIW4ITJ.js +0 -2
@@ -6,11 +6,12 @@ import { connectionBindings, getActiveConnectionWait, init_connection_wait_repos
6
6
  import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
7
7
  import { init_session_repository } from "../../storage/sqlite/session-repository.js";
8
8
  import { listConnectorInstances } from "../../connectors/instances.js";
9
- import { getStoreConnectorInstallPlan, parseStoreConnectorCandidateRef, searchStoreConnectorInstallCandidates } from "../../capabilities/store-connector.js";
10
- import { connectionCandidates, resolveConnectionCandidate } from "../../connectors/connection-candidates.js";
11
9
  import { connectorPrincipalForSession } from "../../connectors/principal.js";
12
10
  import { parseExternalToolRef } from "./refs.js";
13
11
  import { setXopcToolMetadata } from "../embedded/tool-metadata.js";
12
+ import { getStoreConnectorInstallPlan, parseStoreConnectorCandidateRef, searchStoreConnectorInstallCandidates } from "../../capabilities/store-connector.js";
13
+ import { assertPersonalRequestAccountAccess } from "../../personal-agent/request-access.js";
14
+ import { connectionCandidates, resolveConnectionCandidate } from "../../connectors/connection-candidates.js";
14
15
  import { ExternalToolService } from "./service.js";
15
16
  import { EXTERNAL_TOOL_SOURCES } from "./types.js";
16
17
  import { bindExternalToolRegistry } from "./tool-registry.js";
@@ -143,6 +144,7 @@ function createExternalToolGatewayTools(providers, getContext, getConfig, getExe
143
144
  const connectorId = composio ? getConnectorInstallation(composio.namespace)?.connectorId : cli && config ? listConnectorInstances(config).find((instance) => instance.instanceId === cli.namespace)?.connectorId : void 0;
144
145
  if (connectorId !== request.connectorId) throw new Error("Use only the selected Personal request connector");
145
146
  if (composio && !listConnectorActionMetadata(connectorId).some((action) => action.actionId === composio.toolName && action.scope === "read" && action.curated)) throw new Error("Personal requests permit only curated read operations");
147
+ assertPersonalRequestAccountAccess(request);
146
148
  const account = getConnectorAccount(request.accountId);
147
149
  const connection = account?.currentConnectionId ? getConnectorConnection(account.currentConnectionId) : void 0;
148
150
  if (!connection || connection.status !== "active" || connection.expiresAt && Date.parse(connection.expiresAt) <= Date.now()) {
@@ -157,11 +159,15 @@ function createExternalToolGatewayTools(providers, getContext, getConfig, getExe
157
159
  }
158
160
  const result = await service.execute({
159
161
  ...params,
160
- ...request ? { readOnly: true } : {},
162
+ ...request ? {
163
+ readOnly: void 0,
164
+ personalReadOnly: true
165
+ } : {},
161
166
  context: {
162
167
  toolCallId,
163
168
  signal,
164
- onUpdate
169
+ onUpdate,
170
+ ...request ? { authorize: () => assertPersonalRequestAccountAccess(request) } : {}
165
171
  }
166
172
  });
167
173
  return {
@@ -1,5 +1,5 @@
1
- import { getEmbeddedExecutionSession } from "../embedded/execution-context.js";
2
1
  import { resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
2
+ import { getEmbeddedExecutionSession } from "../embedded/execution-context.js";
3
3
  import { parseExternalToolRef } from "./refs.js";
4
4
  import { CliToolProvider } from "./cliProvider.js";
5
5
  import { ComposioToolProvider } from "./composio-provider.js";
@@ -28,6 +28,7 @@ export declare class ExternalToolService {
28
28
  arguments?: Record<string, unknown>;
29
29
  approvalId?: string;
30
30
  readOnly?: boolean;
31
+ personalReadOnly?: boolean;
31
32
  context: ExternalToolExecutionContext;
32
33
  }): Promise<import("@earendil-works/pi-agent-core").AgentToolResult<Record<string, unknown>>>;
33
34
  private providerForRef;
@@ -137,10 +137,11 @@ var ExternalToolService = class {
137
137
  const descriptor = await provider.describe(params.toolRef);
138
138
  if (!descriptor) throw new Error(`External tool is unavailable: ${params.toolRef}`);
139
139
  const current = versionDescriptor(descriptor);
140
+ if (params.personalReadOnly && current.readOnly !== true && current.batchRead !== true) throw new Error("This external operation has no host-curated read-only contract");
140
141
  if (params.readOnly && current.batchRead !== true) throw new Error("This external operation is not approved for batch reads");
141
142
  if (current.revision !== params.revision) throw new Error(`Tool contract changed. Describe ${params.toolRef} again before executing it.`);
142
143
  const args = params.arguments ?? {};
143
- if (params.readOnly && (provider.source === "composio" || provider.source === "cli") && (typeof args.xopcAccountId !== "string" || !args.xopcAccountId)) throw new Error("Batch connector reads require an explicit xopcAccountId");
144
+ if ((params.readOnly || params.personalReadOnly) && (provider.source === "composio" || provider.source === "cli") && (typeof args.xopcAccountId !== "string" || !args.xopcAccountId)) throw new Error("Batch connector reads require an explicit xopcAccountId");
144
145
  let validate;
145
146
  try {
146
147
  validate = this.ajv.compile(current.inputSchema);
@@ -151,6 +152,7 @@ var ExternalToolService = class {
151
152
  if (!validate(input)) throw new Error(`Arguments do not match ${params.toolRef}: ${this.ajv.errorsText(validate.errors)}`);
152
153
  };
153
154
  validateArguments(args);
155
+ params.context.authorize?.();
154
156
  return provider.execute(params.toolRef, args, params.approvalId, {
155
157
  ...params.context,
156
158
  contractRevision: current.contractRevision,
@@ -27,6 +27,8 @@ export interface ExternalToolDescriptor extends ExternalToolSearchHit {
27
27
  exposure?: import('@earendil-works/pi-coding-agent').ToolExposure;
28
28
  /** Host-curated contract; never copied from remote readOnlyHint annotations. */
29
29
  batchRead?: boolean;
30
+ /** Host-curated read scope; separate from eligibility for batch execution. */
31
+ readOnly?: boolean;
30
32
  }
31
33
  export interface VersionedExternalToolDescriptor extends ExternalToolDescriptor {
32
34
  revision: string;
@@ -36,6 +38,8 @@ export interface ExternalToolExecutionContext {
36
38
  signal?: AbortSignal;
37
39
  onUpdate?: AgentToolUpdateCallback<Record<string, unknown>>;
38
40
  contractRevision?: string;
41
+ /** Host authorization recheck immediately before remote dispatch. */
42
+ authorize?: () => void;
39
43
  validateArguments?: (args: Record<string, unknown>) => void;
40
44
  }
41
45
  export interface ExternalToolTurnContext {
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from "../../../utils/logger/index.js";
2
2
  import { init_logger } from "../../../utils/logger.js";
3
+ import { imageFileExtensionForMimeType } from "./image-assets.js";
3
4
  import { pickTimeoutMsOrFallback } from "../../../media-shared/http/deadline.js";
4
5
  import { privateNetworkPolicyToSsrfGuardOptions } from "../../../media-shared/http/private-network.js";
5
6
  import { resolveProviderHttpRequestConfig } from "../../../media-shared/http/resolve-provider-http-request-config.js";
@@ -8,7 +9,6 @@ import "../../../media-shared/http/index.js";
8
9
  import { ImageProviderError, validateImageRequest } from "../../../../packages/image-providers/src/validation.js";
9
10
  import { decodeBase64, imageFromBytes } from "../../../../packages/image-providers/src/http.js";
10
11
  import "../../../../packages/image-providers/src/index.js";
11
- import { imageFileExtensionForMimeType } from "./image-assets.js";
12
12
  //#region src/agent/image/generation/openai-images-provider.ts
13
13
  /** Strict implementation of the OpenAI Images REST protocol. */
14
14
  init_logger();
@@ -3,12 +3,12 @@ import { init_logger } from "../../../utils/logger.js";
3
3
  import { PROVIDER_ENV_MAP, init_env_keys } from "../../../providers/env-keys.js";
4
4
  import { ImageProviderError } from "../../../../packages/image-providers/src/validation.js";
5
5
  import "../../../../packages/image-providers/src/index.js";
6
- import { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary as listImageGenerationProvidersSummary$1 } from "./provider-registry.js";
7
6
  import { describeFailoverError, isFailoverError } from "../../failover-error.js";
8
7
  import { buildNoCapabilityModelConfiguredMessage, recordCapabilityCandidateFailure, resolveCapabilityModelCandidates, throwCapabilityGenerationFailure } from "../../media-generation/runtime-shared.js";
9
8
  import "../../media-generation/index.js";
10
9
  import { parseImageGenerationModelRef } from "./model-ref.js";
11
10
  import { validateImageGenerationRequest } from "./validation.js";
11
+ import { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary as listImageGenerationProvidersSummary$1 } from "./provider-registry.js";
12
12
  //#region src/agent/image/generation/runtime.ts
13
13
  init_env_keys();
14
14
  init_logger();
@@ -1,9 +1,9 @@
1
- import { getImageGenerationProvider, listImageGenerationProviders } from "./generation/provider-registry.js";
2
1
  import { getImageUnderstandingProvider, listImageUnderstandingProviders, registerImageUnderstandingProvider } from "./understanding/provider-registry.js";
3
2
  import { resolveImageModelConfigForTool } from "./tool-model-config.js";
4
3
  import { describeImages, describeImagesWithFallback } from "./understanding/runtime.js";
5
4
  import { modelSupportsVision, resolveImageHandlingStrategy } from "./vision-detection.js";
6
5
  import { runWithImageModelFallback } from "./image-model-fallback.js";
7
6
  import { loadImageForToolInput } from "./load-image-media.js";
7
+ import { getImageGenerationProvider, listImageGenerationProviders } from "./generation/provider-registry.js";
8
8
  import { generateImage, listImageGenerationProvidersSummary } from "./generation/runtime.js";
9
9
  export { describeImages, describeImagesWithFallback, generateImage, getImageGenerationProvider, getImageUnderstandingProvider, listImageGenerationProviders, listImageGenerationProvidersSummary, listImageUnderstandingProviders, loadImageForToolInput, modelSupportsVision, registerImageUnderstandingProvider, resolveImageHandlingStrategy, resolveImageModelConfigForTool, runWithImageModelFallback };
@@ -1,5 +1,5 @@
1
- import { decodeDataUrl } from "./image-helpers.js";
2
1
  import { checkFileSafety } from "../prompt/safety.js";
2
+ import { decodeDataUrl } from "./image-helpers.js";
3
3
  import { homedir } from "node:os";
4
4
  import path from "node:path";
5
5
  import { promises } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
2
+ import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
2
3
  import { getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "../../config/schema.js";
3
4
  import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
4
- import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
5
5
  import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
6
6
  import { buildCapabilityPlansForConfig } from "../../capabilities/readiness/from-config.js";
7
7
  import "../../capabilities/readiness/index.js";
@@ -1,14 +1,14 @@
1
1
  import { stripRuntimeUserMessageEnvelope } from "../../../packages/gateway-contract/src/user-message-display.js";
2
2
  import { init_src } from "../../../packages/gateway-contract/src/index.js";
3
- import { isPersonalConversation } from "../../personal-agent/repository.js";
4
3
  import { extractProfileAgentId } from "../../config/agent-profile.js";
4
+ import { readAgentMessageContent } from "../memory/agent-message-access.js";
5
+ import { isPersonalConversation } from "../../personal-agent/repository.js";
5
6
  import { MODEL_IMAGE_MAX_BYTES, MODEL_IMAGE_SOURCE_MAX_BYTES, prepareImageForModel } from "../image/prepare-image-for-model.js";
6
7
  import { mimeTypeFromMediaPath } from "../../media/store.js";
7
8
  import { readMediaReference } from "../../media/media-reference.js";
8
9
  import { isImageInboundAttachment } from "../../channels/attachments/attachment-classifiers.js";
9
10
  import "../../channels/attachments/inbound-persist.js";
10
11
  import { expandAtFileMentionsInPlainText } from "../context/expand-at-file-mentions.js";
11
- import { readAgentMessageContent } from "../memory/agent-message-access.js";
12
12
  import { resolveImageHandlingStrategy } from "../image/vision-detection.js";
13
13
  import { resolveInboundImageContentParts } from "../image/inbound-image-handling.js";
14
14
  //#region src/agent/inbound/attachment-pipeline.ts
@@ -1,9 +1,9 @@
1
1
  import { runWithLogContext, updateAsyncLogContext } from "../../utils/logger/context.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { MessageBusShutdownError } from "../../infra/bus/queue.js";
4
- import "../../infra/bus/index.js";
5
3
  import { shouldSkipResetOverlapCommand } from "../../session/reset-triggers.js";
6
4
  import { initSessionTurn } from "../../session/init-session-turn.js";
5
+ import { MessageBusShutdownError } from "../../infra/bus/queue.js";
6
+ import "../../infra/bus/index.js";
7
7
  import { runEmbeddedTurnForSession } from "../embedded/run-for-session.js";
8
8
  import { inboundMessageLogRequestId } from "../service-inbound-utils.js";
9
9
  //#region src/agent/inbound/inbound-loop.ts
@@ -1,14 +1,14 @@
1
- import { extractToolCallsFromAssistant, extractToolResultId, sanitizeToolCallId, sanitizeToolCallIdsForCloudCodeAssist } from "./transcript/tool-call-id.js";
2
- import { makeMissingToolResult, repairToolUseResultPairing, sanitizeToolCallInputs, sanitizeToolUseResultPairing, stripToolResultDetails } from "./transcript/session-transcript-repair.js";
3
1
  import { resolveTranscriptPolicy } from "./transcript/transcript-policy.js";
4
2
  import { dropThinkingBlocks } from "./transcript/thinking.js";
3
+ import { extractToolCallsFromAssistant, extractToolResultId, sanitizeToolCallId, sanitizeToolCallIdsForCloudCodeAssist } from "./transcript/tool-call-id.js";
4
+ import { makeMissingToolResult, repairToolUseResultPairing, sanitizeToolCallInputs, sanitizeToolUseResultPairing, stripToolResultDetails } from "./transcript/session-transcript-repair.js";
5
5
  import { applySessionTranscriptHygiene, applySessionTranscriptHygieneForPersistence, applySessionTranscriptHygieneWithPolicy, resolvePolicyForModel, tryApplySessionTranscriptHygiene, tryApplySessionTranscriptHygieneForPersistence } from "./transcript/transcript-hygiene.js";
6
- import { AgentService } from "./service.js";
7
6
  import { createResponseMessage, createSignalMessage, createTaskMessage, isValidIPCMessage } from "./ipc/types.js";
8
7
  import { AgentInbox } from "./ipc/inbox.js";
9
8
  import { AgentBus } from "./ipc/bus.js";
10
9
  import { AgentSocketClient, AgentSocketServer, isSocketAvailable } from "./ipc/socket.js";
11
10
  import "./ipc/index.js";
11
+ import { AgentService } from "./service.js";
12
12
  import { stripToolMessages } from "./transcript/strip-tool-messages.js";
13
13
  import "./transcript/index.js";
14
14
  export { AgentBus, AgentInbox, AgentService, AgentSocketClient, AgentSocketServer, applySessionTranscriptHygiene, applySessionTranscriptHygieneForPersistence, applySessionTranscriptHygieneWithPolicy, createResponseMessage, createSignalMessage, createTaskMessage, dropThinkingBlocks, extractToolCallsFromAssistant, extractToolResultId, isSocketAvailable, isValidIPCMessage, makeMissingToolResult, repairToolUseResultPairing, resolvePolicyForModel, resolveTranscriptPolicy, sanitizeToolCallId, sanitizeToolCallIdsForCloudCodeAssist, sanitizeToolCallInputs, sanitizeToolUseResultPairing, stripToolMessages, stripToolResultDetails, tryApplySessionTranscriptHygiene, tryApplySessionTranscriptHygieneForPersistence };
@@ -1,6 +1,6 @@
1
+ import { AgentPluginStore } from "../../extensions/agent-plugins/store.js";
1
2
  import { normalizeConfiguredMcpServers } from "../../config/mcp-config-normalize.js";
2
3
  import { inspectExtensionConnectorDependencies } from "../../extensions/connector-dependencies.js";
3
- import { AgentPluginStore } from "../../extensions/agent-plugins/store.js";
4
4
  import { materializePluginServers } from "../../extensions/agent-plugins/mcp-adapter.js";
5
5
  //#region src/agent/mcp/config.ts
6
6
  function loadMergedMcpConfig(params) {
@@ -1,5 +1,5 @@
1
- import { getToolResultTextLength, truncateToolResultMessage } from "../embedded/tool-result-truncation.js";
2
1
  import { readAgentMessageContent } from "./agent-message-access.js";
2
+ import { getToolResultTextLength, truncateToolResultMessage } from "../embedded/tool-result-truncation.js";
3
3
  //#region src/agent/memory/context-budget.ts
4
4
  const MESSAGE_OVERHEAD_TOKENS = 12;
5
5
  const REQUEST_OVERHEAD_TOKENS = 256;
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { evaluateContextBudget, projectContextForModel, stringifyMessagesForBudget } from "./context-budget.js";
4
3
  import { stripTrailingErrorAssistantMessages } from "../orchestration/llm-turn-retry.js";
4
+ import { evaluateContextBudget, projectContextForModel, stringifyMessagesForBudget } from "./context-budget.js";
5
5
  //#region src/agent/memory/context-recovery.ts
6
6
  init_logger();
7
7
  const log = createLogger("ContextRecovery");
@@ -1,6 +1,6 @@
1
- import { buildUserContextBlock, sanitizeUserContextFenceEscapes } from "./context-fence.js";
2
1
  import { isMemorySubsystemEnabled } from "./memory-config.js";
3
2
  import { extractAgentUserPlainText } from "./user-message-text.js";
3
+ import { buildUserContextBlock, sanitizeUserContextFenceEscapes } from "./context-fence.js";
4
4
  import { MemoryManager } from "./manager.js";
5
5
  import { discoverMemoryPlugins } from "./plugin-discovery.js";
6
6
  import { createMemoryManagerFromConfig } from "./create-memory-manager.js";
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { abortEmbeddedRun } from "../embedded/runs.js";
3
4
  import { persistInboundAttachments } from "../../channels/attachments/inbound-persist.js";
4
5
  import { buildTranscriptUserMessage, clearPendingTranscriptUserMessage, hydrateUserTurnForLlm, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
5
- import { abortEmbeddedRun } from "../embedded/runs.js";
6
6
  import { resolveEffectiveThinkingLevel } from "../../session/thinking-resolve.js";
7
7
  import { runEmbeddedTurnForSession } from "../embedded/run-for-session.js";
8
8
  import { randomUUID } from "node:crypto";
@@ -8,6 +8,7 @@ export interface AgentTurnPolicy {
8
8
  takeContinuationMessage?(): string | undefined;
9
9
  /** Recheck limits at dispatch, including requests made by recovery paths. */
10
10
  beforeModelRequest?(signal?: AbortSignal): string | undefined;
11
+ stopReason?(): 'completed' | 'limit';
11
12
  }
12
13
  export interface AgentTurnPolicyOptions {
13
14
  maxTurns?: number;
@@ -126,7 +126,8 @@ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
126
126
  const message = continuation;
127
127
  continuation = void 0;
128
128
  return message;
129
- }
129
+ },
130
+ stopReason: () => !stopReason && options.isComplete?.() ? "completed" : "limit"
130
131
  },
131
132
  addTokens(tokens) {
132
133
  usage.totalTokens += Math.max(0, tokens);
@@ -26,6 +26,11 @@ export interface RetryTransientTurnOptions {
26
26
  baseDelayMs?: number;
27
27
  signal?: AbortSignal;
28
28
  conversationId: string;
29
+ onRetry?: () => void;
30
+ shouldRetry?: () => boolean;
31
+ budget?: {
32
+ continues: number;
33
+ };
29
34
  log: {
30
35
  warn: (obj: Record<string, unknown>, msg: string) => void;
31
36
  };
@@ -1,5 +1,6 @@
1
1
  import { isTransientProviderErrorMessage } from "../../providers/model-response.js";
2
2
  import { isContextOverflowError } from "./context-overflow.js";
3
+ import { canResumeAfterModelFailure } from "./turn-recovery.js";
3
4
  //#region src/agent/orchestration/llm-turn-retry.ts
4
5
  function isTransientLlmErrorMessage(message) {
5
6
  return isTransientProviderErrorMessage(message);
@@ -72,9 +73,9 @@ async function waitForRetryDelay(delayMs, signal) {
72
73
  */
73
74
  async function maybeRetryTurnAfterTransientLlmFailure(agent, options) {
74
75
  const maxContinues = options.maxContinues ?? 2;
75
- const baseDelayMs = Math.max(0, options.baseDelayMs ?? 300);
76
- let continues = 0;
77
- while (continues < maxContinues) {
76
+ const baseDelayMs = Math.max(0, options.baseDelayMs ?? 1e3);
77
+ const budget = options.budget ?? { continues: 0 };
78
+ while (budget.continues < maxContinues && options.shouldRetry?.() !== false) {
78
79
  const last = getLastAssistantMessage(agent.state.messages);
79
80
  if (!last) return;
80
81
  if (last.stopReason !== "error") return;
@@ -88,8 +89,15 @@ async function maybeRetryTurnAfterTransientLlmFailure(agent, options) {
88
89
  }, "Assistant turn ended with error (not retrying as transient)");
89
90
  return;
90
91
  }
91
- continues += 1;
92
- const retryDelayMs = baseDelayMs * 2 ** (continues - 1);
92
+ if (!canResumeAfterModelFailure(agent.state.messages)) {
93
+ options.log.warn({ conversationId: options.conversationId }, "Model recovery stopped because a tool outcome is unconfirmed");
94
+ return;
95
+ }
96
+ const continues = ++budget.continues;
97
+ const rateLimited = /429|rate.limit|too many requests/i.test(errMsg);
98
+ const serverDelay = /retry[- ]after\s*[:=]?\s*(\d+(?:\.\d+)?)\s*(ms|s|seconds)?/i.exec(errMsg);
99
+ const requestedDelay = serverDelay ? Number(serverDelay[1]) * (serverDelay[2] === "ms" ? 1 : 1e3) : 0;
100
+ const retryDelayMs = Math.min(6e4, Math.max(requestedDelay, (rateLimited && options.baseDelayMs === void 0 ? 5e3 : baseDelayMs) * 2 ** (continues - 1)));
93
101
  options.log.warn({
94
102
  conversationId: options.conversationId,
95
103
  errorMessage: errMsg,
@@ -99,6 +107,8 @@ async function maybeRetryTurnAfterTransientLlmFailure(agent, options) {
99
107
  retryDelayMs
100
108
  }, "LLM request failed with a transient network error; retrying the same turn. If this persists, check outbound HTTPS to the provider API and HTTP(S)_PROXY.");
101
109
  await waitForRetryDelay(retryDelayMs, options.signal);
110
+ options.signal?.throwIfAborted();
111
+ options.onRetry?.();
102
112
  const trimmed = stripTrailingErrorAssistantMessages(agent.state.messages);
103
113
  agent.state.messages = trimmed;
104
114
  await agent.continue();
@@ -0,0 +1,6 @@
1
+ import type { AgentMessage } from '@earendil-works/pi-agent-core';
2
+ /** A model request can be resumed only after every issued tool has a confirmed result. */
3
+ export declare function canResumeAfterModelFailure(rows: readonly unknown[]): boolean;
4
+ export declare function recoveryToolKey(name: string, args: unknown): string;
5
+ /** Prevent a recovering model from replaying an already confirmed operation with a new call ID. */
6
+ export declare function completedRecoveryToolResult(messages: readonly AgentMessage[], name: string, args: unknown): string | undefined;
@@ -0,0 +1,29 @@
1
+ //#region src/agent/orchestration/turn-recovery.ts
2
+ /** A model request can be resumed only after every issued tool has a confirmed result. */
3
+ function canResumeAfterModelFailure(rows) {
4
+ const messages = rows.filter((row) => !!row && typeof row === "object");
5
+ const pending = /* @__PURE__ */ new Set();
6
+ for (const message of messages.slice(Math.max(0, messages.findLastIndex((item) => item.role === "user")))) if (message.role === "assistant") {
7
+ if (message.stopReason === "aborted") return false;
8
+ if (message.stopReason === "error") continue;
9
+ for (const block of Array.isArray(message.content) ? message.content : []) if (block?.type === "toolCall" && typeof block.id === "string") pending.add(block.id);
10
+ } else if (message.role === "toolResult") {
11
+ const recordedReplay = Array.isArray(message.content) && message.content.some((block) => block?.type === "text" && typeof block.text === "string" && block.text.startsWith("This operation already completed before recovery."));
12
+ if (message.isError && !recordedReplay) return false;
13
+ if (typeof message.toolCallId === "string") pending.delete(message.toolCallId);
14
+ }
15
+ return pending.size === 0;
16
+ }
17
+ function recoveryToolKey(name, args) {
18
+ return JSON.stringify([name, args], (_key, value) => value && typeof value === "object" && !Array.isArray(value) ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b))) : value);
19
+ }
20
+ /** Prevent a recovering model from replaying an already confirmed operation with a new call ID. */
21
+ function completedRecoveryToolResult(messages, name, args) {
22
+ const calls = /* @__PURE__ */ new Map();
23
+ const key = recoveryToolKey(name, args);
24
+ for (const message of messages.slice(Math.max(0, messages.findLastIndex((item) => item.role === "user")))) if (message.role === "assistant" && message.stopReason !== "error" && message.stopReason !== "aborted") {
25
+ for (const block of message.content) if (block.type === "toolCall") calls.set(block.id, recoveryToolKey(block.name, block.arguments));
26
+ } else if (message.role === "toolResult" && !message.isError && calls.get(message.toolCallId) === key) return `This operation already completed before recovery. Do not execute it again. Use its recorded result and continue the remaining work:\n${JSON.stringify(message.content).slice(0, 8e3)}`;
27
+ }
28
+ //#endregion
29
+ export { canResumeAfterModelFailure, completedRecoveryToolResult, recoveryToolKey };
@@ -2,9 +2,9 @@ import { isXopcDatabaseOpen } from "../../storage/sqlite/connection.js";
2
2
  import { TaskRepository, init_task_repository } from "../../tasks/task-repository.js";
3
3
  import { getSessionConfig } from "../../storage/sqlite/config-repository.js";
4
4
  import { init_sqlite } from "../../storage/sqlite/index.js";
5
+ import { init_response_language, resolveResponseLanguage } from "../../i18n/response-language.js";
5
6
  import { resolveTaskLocale } from "../../tasks/task-language.js";
6
7
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
7
- import { init_response_language, resolveResponseLanguage } from "../../i18n/response-language.js";
8
8
  //#region src/agent/prompt/response-language.ts
9
9
  init_response_language();
10
10
  init_sqlite();
@@ -152,7 +152,7 @@ function buildToolingSection(params) {
152
152
  hasToolManual ? "Some complex tools have built-in manuals. Use `tool_manual(tool)` before non-trivial use." : "",
153
153
  hasDelegate ? "If a task is complex or long-running, delegate it. Completion is push-based: the sub-agent result returns when done." : "",
154
154
  ...orchestrationLines,
155
- "Do not poll delegate/workflow status in a tight loop; check on-demand or wait for completion."
155
+ hasDelegate || hasWorkflow ? "Do not poll delegate/workflow status in a tight loop; check on-demand or wait for completion." : ""
156
156
  ].filter(Boolean).join("\n");
157
157
  }
158
158
  function hasSkillsTools(toolNames) {
@@ -6,14 +6,14 @@ import { getInteractionState } from "../../storage/sqlite/interaction-state-repo
6
6
  import { DEFAULT_USER_TRUST_LEVEL, init_trust_policy } from "../../user-context/trust-policy.js";
7
7
  import { getUserTrustPolicy } from "../../storage/sqlite/user-trust-repository.js";
8
8
  import { init_sqlite } from "../../storage/sqlite/index.js";
9
- import { getUserTimezone } from "../../user-model/repository.js";
10
9
  import { appendStablePromptSection } from "./cache-boundary.js";
11
- import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
12
- import { buildTtsSystemPromptHint } from "../../voice/tts/directives.js";
10
+ import { getUserTimezone } from "../../user-model/repository.js";
13
11
  import "../../user-model/index.js";
14
12
  import { resolveSystemPromptBuildParams } from "./system-prompt-params.js";
15
13
  import { buildSystemPrompt } from "./system-prompt.js";
16
14
  import { resolveResponseLanguageForSession } from "./response-language.js";
15
+ import { buildTtsSystemPromptHint } from "../../voice/tts/directives.js";
16
+ import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
17
17
  //#region src/agent/prompt/service-prompt-builder.ts
18
18
  init_sqlite();
19
19
  init_interaction_state();
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { prepareSafeToolEnv } from "./sanitize-env-vars.js";
4
3
  import { validatePath, validateWritePath } from "./path-policy.js";
4
+ import { prepareSafeToolEnv } from "./sanitize-env-vars.js";
5
5
  import { auditCommand, validateCommand } from "./command-validator.js";
6
6
  import { DEFAULT_SANDBOX_CONFIG } from "./types.js";
7
7
  import { resolve } from "node:path";
@@ -1,17 +1,17 @@
1
1
  import { getClarificationResumeInput, init_clarification_wait_repository } from "../../storage/sqlite/clarification-wait-repository.js";
2
2
  import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
3
- import { parseSlashCommand } from "../../chat-commands/command-parse.js";
4
3
  import { isPersonalConversation } from "../../personal-agent/repository.js";
5
- import { personalCommandRejection } from "../../chat-commands/personal-command-policy.js";
6
- import { commandRegistry } from "../../chat-commands/registry.js";
7
- import "../../chat-commands/index.js";
8
4
  import { resolveImageHandlingStrategy } from "../image/vision-detection.js";
9
5
  import { hydrateUserTurnForLlm } from "../inbound/attachment-pipeline.js";
6
+ import { buildDelegatedTaskDirective, buildTaskExecutionDirective } from "../../tasks/task-context-assembler.js";
10
7
  import { shouldSkipResetOverlapCommand } from "../../session/reset-triggers.js";
8
+ import { parseSlashCommand } from "../../chat-commands/command-parse.js";
9
+ import { personalCommandRejection } from "../../chat-commands/personal-command-policy.js";
10
+ import { commandRegistry } from "../../chat-commands/registry.js";
11
+ import "../../chat-commands/index.js";
12
+ import { getTaskContinuation } from "../../tasks/task-continuation.js";
11
13
  import { runEmbeddedTurnForSession } from "../embedded/run-for-session.js";
12
14
  import { injectSourceContextsIntoUserMessage } from "../source-context/injector.js";
13
- import { buildDelegatedTaskDirective, buildTaskExecutionDirective } from "../../tasks/task-context-assembler.js";
14
- import { prependAgentContext } from "../context/prepend.js";
15
15
  import crypto from "node:crypto";
16
16
  //#region src/agent/service/direct-turn-helpers.ts
17
17
  /**
@@ -113,10 +113,11 @@ async function runDirectAgentTurn(deps, input) {
113
113
  const turnId = input.runId ?? crypto.randomUUID();
114
114
  const isConnectionResume = Boolean(getConnectionResumeInput(input.conversationId, turnId));
115
115
  const isClarificationResume = Boolean(getClarificationResumeInput(input.conversationId, turnId));
116
- const isResume = isConnectionResume || isClarificationResume;
116
+ const isResume = isConnectionResume || isClarificationResume || Boolean(getTaskContinuation(input.conversationId, turnId));
117
117
  const userContext = await deps.agentManager.prepareUserTurnContext(input.userMessage, input.conversationId, turnId);
118
118
  const sourceContexts = input.sourceContexts ?? [];
119
- const userMessageForModel = prependAgentContext(injectSourceContextsIntoUserMessage(input.userMessage, sourceContexts), [buildTaskExecutionDirective(input.conversationId), buildDelegatedTaskDirective(input.conversationId)].filter(Boolean).join("\n"));
119
+ const sourceEnrichedMessage = injectSourceContextsIntoUserMessage(input.userMessage, sourceContexts);
120
+ const taskContext = [buildTaskExecutionDirective(input.conversationId), buildDelegatedTaskDirective(input.conversationId)].filter(Boolean).join("\n");
120
121
  const modelRef = deps.modelManager.getModelForSession(input.conversationId);
121
122
  const llmTurn = await hydrateUserTurnForLlm({
122
123
  message: input.userMessage,
@@ -128,8 +129,8 @@ async function runDirectAgentTurn(deps, input) {
128
129
  const result = await runEmbeddedTurnForSession({
129
130
  conversationId: input.conversationId,
130
131
  runId: turnId,
131
- userMessage: userMessageForModel,
132
- dynamicSystemContext: userContext.dynamicSystemContext,
132
+ userMessage: sourceEnrichedMessage,
133
+ dynamicSystemContext: [userContext.dynamicSystemContext, taskContext].filter(Boolean).join("\n\n"),
133
134
  llmImages,
134
135
  presentation: input.presentation,
135
136
  requireVisibleReply: input.requireVisibleReply,
@@ -5,18 +5,19 @@ import { getClarificationResumeInput, init_clarification_wait_repository } from
5
5
  import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
6
6
  import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
7
7
  import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
8
- import { stripEnvelopeTimestampPrefix } from "../../channels/envelope-timestamp.js";
9
- import { mergeSttConfigFromAppConfig } from "../../voice/stt/config.js";
10
- import "../../voice/stt/index.js";
11
8
  import { readAgentMessageContent } from "../memory/agent-message-access.js";
12
- import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
13
9
  import { abortEmbeddedRun } from "../embedded/runs.js";
10
+ import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
11
+ import { mergeSttConfigFromAppConfig } from "../../voice/stt/config.js";
12
+ import "../../voice/stt/index.js";
13
+ import { formatAgentRunErrorForClient } from "../client-error-format.js";
14
14
  import { resolveConfiguredActivityDetailDefault, resolveEffectiveReasoningLevel } from "../../session/thinking-resolve.js";
15
15
  import { initSessionTurn } from "../../session/init-session-turn.js";
16
16
  import "../../session/index.js";
17
+ import { getTaskContinuation } from "../../tasks/task-continuation.js";
18
+ import { stripEnvelopeTimestampPrefix } from "../../channels/envelope-timestamp.js";
17
19
  import { isVoiceLikeAttachment, mergeVoiceTranscriptsIntoUserText, requestsOriginalVoiceInspection } from "../../channels/attachments/voice-stt-webchat.js";
18
20
  import { applyReasoningVisibility } from "../streaming/reasoning-visibility.js";
19
- import { formatAgentRunErrorForClient } from "../client-error-format.js";
20
21
  import { isSessionSourceBinding, summarizeSourceContext } from "../source-context/types.js";
21
22
  import { injectSourceContextsIntoUserMessage } from "../source-context/injector.js";
22
23
  import { AsyncQueue, AsyncQueueOverflowError } from "./async-queue.js";
@@ -141,7 +142,7 @@ async function* runProcessDirectStreaming(deps, input) {
141
142
  deps.sessionStore?.idleCompaction?.interrupt(conversationId);
142
143
  const isConnectionResume = Boolean(input.runId && getConnectionResumeInput(conversationId, input.runId));
143
144
  const isClarificationResume = Boolean(input.runId && getClarificationResumeInput(conversationId, input.runId));
144
- const isInternalResume = isConnectionResume || isClarificationResume;
145
+ const isInternalResume = isConnectionResume || isClarificationResume || Boolean(input.runId && getTaskContinuation(conversationId, input.runId));
145
146
  const isTaskUpdate = input.origin.type === "system" && input.origin.source === "task_update";
146
147
  const { channel, chatId } = await deps.resolveSessionEndpoint(conversationId);
147
148
  const context = deps.initDirectStreamingSession(conversationId, channel, chatId, input.origin);
@@ -402,6 +403,11 @@ async function* runProcessDirectStreaming(deps, input) {
402
403
  try {
403
404
  for await (const event of queue) yield event;
404
405
  await taskPromise;
406
+ if (streamOverflowed) yield {
407
+ type: "error",
408
+ runId: input.runId,
409
+ content: formatStreamError("Agent stream stopped because its critical event buffer overflowed")
410
+ };
405
411
  if (channel === "webchat" && ranSlashCommand) try {
406
412
  const userMsg = {
407
413
  role: "user",
@@ -1,12 +1,12 @@
1
1
  import { appendMediaToAssistantTranscriptEntry, findLatestAssistantTranscriptEntryId } from "../../storage/sqlite/transcript-repository.js";
2
2
  import { init_sqlite } from "../../storage/sqlite/index.js";
3
3
  import { isTTSAvailable } from "../../voice/tts/factory.js";
4
+ import { speak } from "../../voice/tts/speak-core.js";
4
5
  import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
5
6
  import { getChannelOutputFormat, shouldUseTTS } from "../../voice/tts/service.js";
6
- import { speak } from "../../voice/tts/speak-core.js";
7
7
  import { compressAudio } from "../../voice/tts/audio.js";
8
- import "../../voice/tts/index.js";
9
8
  import { persistOutboundTtsAudio } from "../../channels/attachments/outbound-tts-persist.js";
9
+ import "../../voice/tts/index.js";
10
10
  import { deleteMediaUris } from "../../media/session-references.js";
11
11
  //#region src/agent/service/webchat-tts.ts
12
12
  init_sqlite();
@@ -103,6 +103,12 @@ export declare class AgentService {
103
103
  applyRuntimeConfiguration(config: Config): void;
104
104
  getSkillCatalog(): SkillCatalogEntry[];
105
105
  getSkillCatalogSnapshot(): SkillCatalogSnapshot;
106
+ getAgentToolAvailability(agentId: string, name: string): {
107
+ condition: string;
108
+ state: "blocked" | "verified";
109
+ reasonCode: string;
110
+ detail: string;
111
+ };
106
112
  getAgentSkillAvailability(agentId: string): AgentSkillAvailabilityPayload;
107
113
  getSessionSkillAvailability(conversationId: string): Promise<AgentSkillAvailabilityPayload>;
108
114
  getSessionWorkspaceTrust(conversationId: string): Promise<WorkspaceTrustState>;