@xopcai/xopc 0.0.382 → 0.0.384

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 (396) hide show
  1. package/dist/browser-ext/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  2. package/dist/browser-ext/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  3. package/dist/browser-ext/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  4. package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  5. package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  6. package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  7. package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  8. package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  9. package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  10. package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  11. package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  12. package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  13. package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  14. package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  15. package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  16. package/dist/browser-ext/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  17. package/dist/browser-ext/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  18. package/dist/browser-ext/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  19. package/dist/browser-ext/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  20. package/dist/browser-ext/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  21. package/dist/browser-ext/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  22. package/dist/browser-ext/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  23. package/dist/browser-ext/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  24. package/dist/browser-ext/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  25. package/dist/browser-ext/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  26. package/dist/browser-ext/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  27. package/dist/browser-ext/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  28. package/dist/browser-ext/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  29. package/dist/browser-ext/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  30. package/dist/browser-ext/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  31. package/dist/browser-ext/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  32. package/dist/browser-ext/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  33. package/dist/browser-ext/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  34. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  35. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  36. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  37. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  38. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  39. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  40. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  41. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  42. package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  43. package/dist/browser-ext/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  44. package/dist/browser-ext/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  45. package/dist/browser-ext/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  46. package/dist/browser-ext/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  47. package/dist/browser-ext/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  48. package/dist/browser-ext/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  49. package/dist/browser-ext/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  50. package/dist/browser-ext/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  51. package/dist/browser-ext/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  52. package/dist/browser-ext/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  53. package/dist/browser-ext/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  54. package/dist/browser-ext/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  55. package/dist/browser-ext/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  56. package/dist/browser-ext/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  57. package/dist/browser-ext/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  58. package/dist/browser-ext/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  59. package/dist/browser-ext/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  60. package/dist/browser-ext/dist/assets/{sidepanel-Ccl0eSa1.css → sidepanel-CQeQB5vW.css} +3 -0
  61. package/dist/browser-ext/dist/sidepanel.html +1 -1
  62. package/dist/browser-ext/dist/sidepanel.js +16690 -3
  63. package/dist/browser-ext/manifest.json +1 -1
  64. package/dist/extensions/telegram/xopc.extension.json +1 -1
  65. package/dist/gateway/static/root/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  66. package/dist/gateway/static/root/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  67. package/dist/gateway/static/root/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  68. package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  69. package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  70. package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  71. package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  72. package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  73. package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  74. package/dist/gateway/static/root/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  75. package/dist/gateway/static/root/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  76. package/dist/gateway/static/root/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  77. package/dist/gateway/static/root/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  78. package/dist/gateway/static/root/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  79. package/dist/gateway/static/root/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  80. package/dist/gateway/static/root/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  81. package/dist/gateway/static/root/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  82. package/dist/gateway/static/root/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  83. package/dist/gateway/static/root/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  84. package/dist/gateway/static/root/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  85. package/dist/gateway/static/root/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  86. package/dist/gateway/static/root/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  87. package/dist/gateway/static/root/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  88. package/dist/gateway/static/root/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  89. package/dist/gateway/static/root/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  90. package/dist/gateway/static/root/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  91. package/dist/gateway/static/root/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  92. package/dist/gateway/static/root/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  93. package/dist/gateway/static/root/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  94. package/dist/gateway/static/root/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  95. package/dist/gateway/static/root/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  96. package/dist/gateway/static/root/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  97. package/dist/gateway/static/root/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  98. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  99. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  100. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  101. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  102. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  103. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  104. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  105. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  106. package/dist/gateway/static/root/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  107. package/dist/gateway/static/root/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  108. package/dist/gateway/static/root/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  109. package/dist/gateway/static/root/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  110. package/dist/gateway/static/root/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  111. package/dist/gateway/static/root/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  112. package/dist/gateway/static/root/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  113. package/dist/gateway/static/root/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  114. package/dist/gateway/static/root/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  115. package/dist/gateway/static/root/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  116. package/dist/gateway/static/root/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  117. package/dist/gateway/static/root/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  118. package/dist/gateway/static/root/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  119. package/dist/gateway/static/root/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  120. package/dist/gateway/static/root/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  121. package/dist/gateway/static/root/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  122. package/dist/gateway/static/root/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  123. package/dist/gateway/static/root/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  124. package/dist/gateway/static/root/assets/{activity-store-CKTm4K1I.js → activity-store-CB2X4Gmu.js} +1 -1
  125. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-60ztIsyO.js → agent-avatar-dicebear-BSel9yf8.js} +1 -1
  126. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DgHMyhuY.js +1 -0
  127. package/dist/gateway/static/root/assets/{agent-plugin-dialog-D0h_GOzZ.js → agent-plugin-dialog-BosuN4dO.js} +1 -1
  128. package/dist/gateway/static/root/assets/agents-B-pw5RKI.js +77 -0
  129. package/dist/gateway/static/root/assets/{agents-admin-api-6aesahV-.js → agents-admin-api-BkULgC6Q.js} +1 -1
  130. package/dist/gateway/static/root/assets/{app-management-settings-panel-D7OQP_Q4.js → app-management-settings-panel-DuOqKkfH.js} +1 -1
  131. package/dist/gateway/static/root/assets/{appearance-settings-CY44NMTV.js → appearance-settings-8JF9rXFr.js} +1 -1
  132. package/dist/gateway/static/root/assets/{apps-page-CfrhlDw1.js → apps-page-Cuclpk0A.js} +1 -1
  133. package/dist/gateway/static/root/assets/{archive-plugin-D5ouupwE.js → archive-plugin-De0ND0oA.js} +1 -1
  134. package/dist/gateway/static/root/assets/{automations-page-BTyga78U.js → automations-page-D7NwNy2I.js} +1 -1
  135. package/dist/gateway/static/root/assets/automations-workspace-CSxW4wX0.js +6 -0
  136. package/dist/gateway/static/root/assets/{binary-plugins-sYO6MAV6.js → binary-plugins-Do535ZGW.js} +1 -1
  137. package/dist/gateway/static/root/assets/{block-editor-BdOTO0Yo.css → block-editor-Cvy3D_4T.css} +1 -1
  138. package/dist/gateway/static/root/assets/block-editor-Dnb7CH_l.js +160 -0
  139. package/dist/gateway/static/root/assets/{browser-automation-inputs-BmILL059.js → browser-automation-inputs-B9M1RYTm.js} +1 -1
  140. package/dist/gateway/static/root/assets/browser-automations-page-GBgDe21o.js +3 -0
  141. package/dist/gateway/static/root/assets/browser-settings-page-B2FXaO3n.js +3 -0
  142. package/dist/gateway/static/root/assets/{capabilities-DFR31Yhq.js → capabilities-2Do3eKMM.js} +1 -1
  143. package/dist/gateway/static/root/assets/{capabilities-BFuas9nS.js → capabilities-XFwwUNU3.js} +1 -1
  144. package/dist/gateway/static/root/assets/capabilities-page-f2-MquJn.js +2 -0
  145. package/dist/gateway/static/root/assets/{capabilities-settings-panel-ByLA8WMF.js → capabilities-settings-panel-D9F0mw16.js} +6 -6
  146. package/dist/gateway/static/root/assets/{capability-header-actions-DBwN3Sxo.js → capability-header-actions-DVRxJPQP.js} +1 -1
  147. package/dist/gateway/static/root/assets/{channels-hokrjIdA.js → channels-CnDm5T1t.js} +1 -1
  148. package/dist/gateway/static/root/assets/{chat-terminal-dock-BBNBN1KZ.js → chat-terminal-dock-BxSCDbK7.js} +2 -2
  149. package/dist/gateway/static/root/assets/{computer-settings-page-BWLBPHzl.js → computer-settings-page-DVAB-kQw.js} +1 -1
  150. package/dist/gateway/static/root/assets/{connector-service-page-Bm5JwIw8.js → connector-service-page-D2EeLXei.js} +1 -1
  151. package/dist/gateway/static/root/assets/connectors-page-DK9n4hgZ.js +1 -0
  152. package/dist/gateway/static/root/assets/{date-picker-BhtD9xGl.js → date-picker-Cl9KfFj8.js} +1 -1
  153. package/dist/gateway/static/root/assets/{dependency-picker-BZ7Xnjqt.js → dependency-picker-Ei6aX5WM.js} +1 -1
  154. package/dist/gateway/static/root/assets/{desktop-pet-CFPxAY1g.js → desktop-pet-4Evl4RKX.js} +1 -1
  155. package/dist/gateway/static/root/assets/{desktop-pet-settings-HHN0SYzH.js → desktop-pet-settings-DAD_OWcX.js} +1 -1
  156. package/dist/gateway/static/root/assets/device-pairing-wizard-BA21epMn.js +1 -0
  157. package/dist/gateway/static/root/assets/{directory-picker-path-field-DQm9XjdO.js → directory-picker-path-field-B_Zb5nNR.js} +1 -1
  158. package/dist/gateway/static/root/assets/{extension-debug-page-BrwNSqhz.js → extension-debug-page-DtHNy4TE.js} +1 -1
  159. package/dist/gateway/static/root/assets/{extension-page-CpDc5gDd.js → extension-page-8gWSThWP.js} +1 -1
  160. package/dist/gateway/static/root/assets/{extension-provider-DF9qV04X.js → extension-provider-nbgU7xBS.js} +1 -1
  161. package/dist/gateway/static/root/assets/{extension-settings-page-BLXL1IUp.js → extension-settings-page-CunUbB09.js} +1 -1
  162. package/dist/gateway/static/root/assets/{fallback-models-JL5hZ0k-.js → fallback-models-BSAfzXby.js} +1 -1
  163. package/dist/gateway/static/root/assets/{gateway-config-swr-iceAEoJZ.js → gateway-config-swr-D0tBjSgj.js} +1 -1
  164. package/dist/gateway/static/root/assets/{gateway-realtime-DMpsQXjn.js → gateway-realtime-BnHraJ3O.js} +1 -1
  165. package/dist/gateway/static/root/assets/gateway-realtime-store-BVriF6Zj.js +1 -0
  166. package/dist/gateway/static/root/assets/gateway-settings-CN-2229W.js +1 -0
  167. package/dist/gateway/static/root/assets/{gateway-startup-retry-BS6l0_QM.js → gateway-startup-retry-C1DQsIH3.js} +1 -1
  168. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-BQJ5YRxv.js → highlighted-body-KQOG7T2V-DktBCtHF.js} +1 -1
  169. package/dist/gateway/static/root/assets/home-page-CUJcNW3H.js +2 -0
  170. package/dist/gateway/static/root/assets/{image-generation-api-F2lG3T2E.js → image-generation-api-DodU6GNC.js} +1 -1
  171. package/dist/gateway/static/root/assets/{imports-page-CsMEvde8.js → imports-page-DQm1MNNC.js} +1 -1
  172. package/dist/gateway/static/root/assets/index-BPNL54bv.js +260 -0
  173. package/dist/gateway/static/root/assets/index-yseLAt9D.css +1 -0
  174. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CeYVir-Q.js → keyboard-shortcuts-settings-DaC5YjuJ.js} +1 -1
  175. package/dist/gateway/static/root/assets/{local-app-workbench-page-Chj0R32r.js → local-app-workbench-page-DwQyyo7a.js} +1 -1
  176. package/dist/gateway/static/root/assets/{local-apps-page-sTmfe7AL.js → local-apps-page-CpZhivpf.js} +1 -1
  177. package/dist/gateway/static/root/assets/{local-session-drafts-DdLyLxCp.js → local-session-drafts-D_tYFy7d.js} +1 -1
  178. package/dist/gateway/static/root/assets/{locale-store-AAPVaavy.js → locale-store-uRu_DsWm.js} +1 -1
  179. package/dist/gateway/static/root/assets/{logs-page-CpR_hGcR.js → logs-page-Db43nh1M.js} +2 -2
  180. package/dist/gateway/static/root/assets/{management-settings-B_rVRdFW.js → management-settings-DrKejBEZ.js} +1 -1
  181. package/dist/gateway/static/root/assets/markdown-view-Ct4sKkUf.css +1 -0
  182. package/dist/gateway/static/root/assets/markdown-view-DHfQAvZQ.js +324 -0
  183. package/dist/gateway/static/root/assets/{media-plugins-Op_dDK0E.js → media-plugins-BombFqsX.js} +1 -1
  184. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-C4VzqE9z.js +1 -0
  185. package/dist/gateway/static/root/assets/messages-DTqbfje6.js +3 -0
  186. package/dist/gateway/static/root/assets/models-hub-cache-Ct6X5zmB.js +1 -0
  187. package/dist/gateway/static/root/assets/note-detail-panel-a8NSwmmW.js +5 -0
  188. package/dist/gateway/static/root/assets/{notes-api-1TYlEpD2.js → notes-api-nqN2wKYc.js} +1 -1
  189. package/dist/gateway/static/root/assets/notes-page-BKRke43F.js +8 -0
  190. package/dist/gateway/static/root/assets/{page-context-capture-button-BYqWMp-X.js → page-context-capture-button-DUaMkmxv.js} +1 -1
  191. package/dist/gateway/static/root/assets/page-tabs-HLrKIjXH.js +1 -0
  192. package/dist/gateway/static/root/assets/personal-page-BqF-HHw1.js +1 -0
  193. package/dist/gateway/static/root/assets/{product-open-page-BRBzKP2h.js → product-open-page-GrhtTQIz.js} +1 -1
  194. package/dist/gateway/static/root/assets/{product-preview-content-BapT1QoP.js → product-preview-content-zdP7gN0y.js} +1 -1
  195. package/dist/gateway/static/root/assets/project-detail-page-9Vd_AqDW.js +1 -0
  196. package/dist/gateway/static/root/assets/{projects-page-BMN9evTF.js → projects-page-DGunhjoM.js} +1 -1
  197. package/dist/gateway/static/root/assets/{registry-api-BPFXyHk8.js → registry-api-CYqA7bfl.js} +1 -1
  198. package/dist/gateway/static/root/assets/remote-access-hub-BoRsF3Lx.js +1 -0
  199. package/dist/gateway/static/root/assets/{runtime-tools-api-Cu0MRsAb.js → runtime-tools-api-zzoxjSuR.js} +1 -1
  200. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CJF3NeTn.js → runtime-tools-settings-panel-W0HDm--J.js} +1 -1
  201. package/dist/gateway/static/root/assets/{scenes-page-D_BBF04t.js → scenes-page-CYsFOfVJ.js} +2 -2
  202. package/dist/gateway/static/root/assets/{schema-form-CAmizvOH.js → schema-form-CBxEbBQq.js} +1 -1
  203. package/dist/gateway/static/root/assets/{send-session-input-G334tGIw.js → send-session-input-BCAF-Ikt.js} +1 -1
  204. package/dist/gateway/static/root/assets/{session-api-DYl61CUz.js → session-api-CzVTrG8n.js} +1 -1
  205. package/dist/gateway/static/root/assets/{session-manager-J3r-UiPc.js → session-manager-_yy4bxhT.js} +1 -1
  206. package/dist/gateway/static/root/assets/sessions-page-Dthfx_vc.js +1 -0
  207. package/dist/gateway/static/root/assets/settings-advanced-gate-O_0Lk38S.js +1 -0
  208. package/dist/gateway/static/root/assets/{settings-page-B635QEij.js → settings-page-CFs-WP_2.js} +1 -1
  209. package/dist/gateway/static/root/assets/setup-status-panel-D2-9fXYL.js +1 -0
  210. package/dist/gateway/static/root/assets/{share-link-dialog-Bht78zB4.js → share-link-dialog-C47Xgzta.js} +1 -1
  211. package/dist/gateway/static/root/assets/{share-preview-page-epHeT5lh.js → share-preview-page-nJ2FWAEP.js} +1 -1
  212. package/dist/gateway/static/root/assets/{shares-api-k1DyfoGP.js → shares-api-B0HlMAzi.js} +1 -1
  213. package/dist/gateway/static/root/assets/shares-settings-DTb88RHD.js +1 -0
  214. package/dist/gateway/static/root/assets/{skill-api-CLmxc6fX.js → skill-api-DJ8UBsxq.js} +1 -1
  215. package/dist/gateway/static/root/assets/{skill-reload-api-DZGoQACj.js → skill-reload-api-CEJx5rPd.js} +1 -1
  216. package/dist/gateway/static/root/assets/{skills-page-clfZlVOG.js → skills-page-DjbBOikT.js} +1 -1
  217. package/dist/gateway/static/root/assets/specialists-4bkS5rZ4.js +1 -0
  218. package/dist/gateway/static/root/assets/{system-settings-panel-DHjH7-OW.js → system-settings-panel-Dt5GkLhM.js} +1 -1
  219. package/dist/gateway/static/root/assets/{task-detail-page-BcYnm1sO.js → task-detail-page-88EShcbs.js} +2 -2
  220. package/dist/gateway/static/root/assets/{task-expandable-content-OTHBryoz.js → task-expandable-content-CF6Bj-Qa.js} +1 -1
  221. package/dist/gateway/static/root/assets/tasks-DJIeIk9C.js +1 -0
  222. package/dist/gateway/static/root/assets/{theme-store-C2WOFv9Y.js → theme-store-BUfzeDvL.js} +1 -1
  223. package/dist/gateway/static/root/assets/{tracing-settings-page-CnPpysvy.js → tracing-settings-page-C2q5B3Kp.js} +1 -1
  224. package/dist/gateway/static/root/assets/{tunnel-api-C3bUe4Nc.js → tunnel-api-JHttXi63.js} +1 -1
  225. package/dist/gateway/static/root/assets/{usage-page-Dgl7sh2E.js → usage-page-B3rUa0fW.js} +1 -1
  226. package/dist/gateway/static/root/assets/{use-autosave-BXZr6Rm9.js → use-autosave-DgbCgsao.js} +1 -1
  227. package/dist/gateway/static/root/assets/{use-composer-attachments-C7M9p0kf.js → use-composer-attachments-BFP3k6oC.js} +1 -1
  228. package/dist/gateway/static/root/assets/{use-file-preview-expanded-CleMXYWu.js → use-file-preview-expanded-B1BiTQNS.js} +2 -2
  229. package/dist/gateway/static/root/assets/user-model-page-Cq1VSsZw.js +2 -0
  230. package/dist/gateway/static/root/assets/{voice-api-key-field-BeF8AHPT.js → voice-api-key-field-4AIkbm9R.js} +1 -1
  231. package/dist/gateway/static/root/assets/{voice-config-api-CBORJPD_.js → voice-config-api-Kw1pYlLN.js} +1 -1
  232. package/dist/gateway/static/root/assets/{work-discovery-overlay-3egLlB1M.js → work-discovery-overlay-BAtG_JHv.js} +1 -1
  233. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BhYnheW-.js → workflow-run-setup-panel-Cw12NFgx.js} +2 -2
  234. package/dist/gateway/static/root/assets/{workflows-page-C9dLtlfP.js → workflows-page-kR5ouOuM.js} +3 -3
  235. package/dist/gateway/static/root/assets/{workspace-api-DdkViIn3.js → workspace-api-Xr3wz8T3.js} +2 -2
  236. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-4KUvnfnh.js → xopc-cloud-account-card-BTBVKpSg.js} +1 -1
  237. package/dist/gateway/static/root/index.html +30 -29
  238. package/dist/package.js +1 -1
  239. package/dist/packages/gateway-contract/src/index.js +4 -0
  240. package/dist/packages/gateway-contract/src/next-turn-suggestions.js +40 -0
  241. package/dist/packages/gateway-contract/src/specialists.js +48 -0
  242. package/dist/packages/gateway-contract/src/task-lifecycle.js +3 -0
  243. package/dist/packages/gateway-contract/src/tasks.js +41 -10
  244. package/dist/src/agent/agent-manager.d.ts +6 -0
  245. package/dist/src/agent/agent-manager.js +7 -3
  246. package/dist/src/agent/child-agent-factory.d.ts +9 -0
  247. package/dist/src/agent/child-agent-factory.js +83 -46
  248. package/dist/src/agent/context/execution-scope.js +1 -1
  249. package/dist/src/agent/context/project-context.js +1 -1
  250. package/dist/src/agent/embedded/run-turn.js +11 -0
  251. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  252. package/dist/src/agent/orchestration/agent-turn-policy.d.ts +4 -0
  253. package/dist/src/agent/orchestration/delegation-budget.d.ts +60 -0
  254. package/dist/src/agent/orchestration/delegation-budget.js +154 -0
  255. package/dist/src/agent/prompt/response-language.js +1 -1
  256. package/dist/src/agent/prompt/sections/tooling.js +2 -2
  257. package/dist/src/agent/service.d.ts +6 -0
  258. package/dist/src/agent/service.js +4 -1
  259. package/dist/src/agent/starter-agents.d.ts +2 -0
  260. package/dist/src/agent/starter-agents.js +114 -5
  261. package/dist/src/agent/tasks/task-judge-service.js +1 -1
  262. package/dist/src/agent/tools/delegate-tool.js +17 -3
  263. package/dist/src/agent/tools/error-pattern-matcher.js +1 -1
  264. package/dist/src/agent/tools/exec-command.js +3 -1
  265. package/dist/src/agent/tools/factory.d.ts +7 -0
  266. package/dist/src/agent/tools/factory.js +21 -2
  267. package/dist/src/agent/tools/personal-attention-tool.d.ts +2 -0
  268. package/dist/src/agent/tools/personal-attention-tool.js +51 -17
  269. package/dist/src/agent/tools/personal-read-tool.js +16 -6
  270. package/dist/src/agent/tools/personal-request-tool.js +64 -10
  271. package/dist/src/agent/tools/personal-result-budget.d.ts +2 -0
  272. package/dist/src/agent/tools/personal-result-budget.js +57 -0
  273. package/dist/src/agent/tools/personal-task-tool.d.ts +23 -11
  274. package/dist/src/agent/tools/personal-task-tool.js +394 -69
  275. package/dist/src/agent/tools/xopc-use-tool.d.ts +2 -0
  276. package/dist/src/agent/tools/xopc-use-tool.js +22 -9
  277. package/dist/src/agent-config/resolver.js +4 -0
  278. package/dist/src/agent-config/schema.d.ts +36 -2
  279. package/dist/src/agent-config/schema.js +9 -2
  280. package/dist/src/agent-matching/delegation-service.d.ts +17 -0
  281. package/dist/src/agent-matching/delegation-service.js +87 -0
  282. package/dist/src/agent-matching/schema.d.ts +2 -0
  283. package/dist/src/agent-matching/schema.js +6 -0
  284. package/dist/src/agent-matching/selection-repository.d.ts +54 -0
  285. package/dist/src/agent-matching/selection-repository.js +83 -0
  286. package/dist/src/agent-matching/service.d.ts +85 -0
  287. package/dist/src/agent-matching/service.js +192 -0
  288. package/dist/src/automations/capabilities/write.d.ts +6 -2
  289. package/dist/src/automations/domain/validation.d.ts +12 -4
  290. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -1
  291. package/dist/src/cli/commands/channels.js +1 -1
  292. package/dist/src/cli/commands/connectors.js +1 -1
  293. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  294. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  295. package/dist/src/cli/commands/models.js +1 -1
  296. package/dist/src/cli/commands/onboard.js +1 -1
  297. package/dist/src/extensions/sdk/index.js +1 -1
  298. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  299. package/dist/src/gateway/agents-admin.d.ts +4 -0
  300. package/dist/src/gateway/agents-admin.js +5 -2
  301. package/dist/src/gateway/hono/routes/agents.js +18 -1
  302. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  303. package/dist/src/gateway/hono/routes/next-turn-suggestions.d.ts +3 -0
  304. package/dist/src/gateway/hono/routes/next-turn-suggestions.js +39 -0
  305. package/dist/src/gateway/hono/routes/personal-agent.js +1 -1
  306. package/dist/src/gateway/hono/routes/tasks.js +2 -1
  307. package/dist/src/gateway/next-turn-suggestions/generator.d.ts +3 -0
  308. package/dist/src/gateway/next-turn-suggestions/generator.js +50 -0
  309. package/dist/src/gateway/next-turn-suggestions/service.d.ts +23 -0
  310. package/dist/src/gateway/next-turn-suggestions/service.js +125 -0
  311. package/dist/src/gateway/next-turn-suggestions/snapshot.d.ts +15 -0
  312. package/dist/src/gateway/next-turn-suggestions/snapshot.js +67 -0
  313. package/dist/src/gateway/service/agent-runner.d.ts +2 -0
  314. package/dist/src/gateway/service/agent-runner.js +13 -1
  315. package/dist/src/gateway/service/session-input-coordinator.js +1 -1
  316. package/dist/src/gateway/service.d.ts +1 -0
  317. package/dist/src/gateway/service.js +18 -4
  318. package/dist/src/gateway/session-context-summary.js +1 -1
  319. package/dist/src/personal-agent/capability-service.d.ts +2 -0
  320. package/dist/src/personal-agent/capability-service.js +29 -16
  321. package/dist/src/personal-agent/policy.js +2 -7
  322. package/dist/src/personal-agent/proactivity/service.js +1 -1
  323. package/dist/src/personal-agent/prompt-context.d.ts +1 -4
  324. package/dist/src/personal-agent/prompt-context.js +5 -35
  325. package/dist/src/personal-agent/prompts.js +32 -8
  326. package/dist/src/personal-agent/reply-composer.js +1 -1
  327. package/dist/src/personal-agent/request-delivery.js +1 -1
  328. package/dist/src/personal-agent/request-repository.d.ts +3 -2
  329. package/dist/src/personal-agent/request-repository.js +4 -4
  330. package/dist/src/personal-agent/request-service.d.ts +2 -1
  331. package/dist/src/personal-agent/request-service.js +161 -13
  332. package/dist/src/personal-agent/specialist-capabilities.js +6 -0
  333. package/dist/src/personal-agent/task-cancel.d.ts +7 -0
  334. package/dist/src/personal-agent/task-cancel.js +76 -0
  335. package/dist/src/session/client-history.js +1 -1
  336. package/dist/src/session/index.js +1 -1
  337. package/dist/src/storage/sqlite/migrations/247_agent_selection_records.sql +32 -0
  338. package/dist/src/storage/sqlite/migrations/248_next_turn_suggestions.sql +20 -0
  339. package/dist/src/storage/sqlite/migrations/249_task_allocations.sql +17 -0
  340. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  341. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  342. package/dist/src/storage/sqlite/next-turn-suggestion-repository.d.ts +4 -0
  343. package/dist/src/storage/sqlite/next-turn-suggestion-repository.js +30 -0
  344. package/dist/src/storage/sqlite/schema.js +1 -1
  345. package/dist/src/tasks/capabilities/read.js +1 -1
  346. package/dist/src/tasks/capabilities/relations.d.ts +38 -2
  347. package/dist/src/tasks/capabilities/write.d.ts +42 -0
  348. package/dist/src/tasks/capabilities/write.js +9 -7
  349. package/dist/src/tasks/index.js +1 -1
  350. package/dist/src/tasks/task-allocation-repository.d.ts +25 -0
  351. package/dist/src/tasks/task-allocation-repository.js +82 -0
  352. package/dist/src/tasks/task-allocation-service.d.ts +39 -0
  353. package/dist/src/tasks/task-allocation-service.js +310 -0
  354. package/dist/src/tasks/task-application-service.js +44 -1
  355. package/dist/src/tasks/task-context-assembler.js +1 -1
  356. package/dist/src/tasks/task-main-update-delivery.js +2 -0
  357. package/dist/src/tasks/task-origin-repository.d.ts +2 -1
  358. package/dist/src/tasks/task-origin-repository.js +9 -5
  359. package/dist/src/tasks/task-read-model-projector.d.ts +2 -1
  360. package/dist/src/tasks/task-read-model-projector.js +21 -8
  361. package/dist/src/tasks/task-result-delivery-service.js +2 -2
  362. package/dist/src/tasks/task-run-coordinator.js +9 -1
  363. package/dist/src/tasks/task-run-dispatcher.d.ts +1 -1
  364. package/dist/src/tasks/task-run-dispatcher.js +5 -4
  365. package/package.json +6 -5
  366. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CzriaMLA.js +0 -1
  367. package/dist/gateway/static/root/assets/agents-Dwjb-Pmc.js +0 -66
  368. package/dist/gateway/static/root/assets/automations-workspace-DGZAGTNe.js +0 -6
  369. package/dist/gateway/static/root/assets/block-editor-CeytAoXT.js +0 -159
  370. package/dist/gateway/static/root/assets/browser-automations-page-Ko-r320n.js +0 -3
  371. package/dist/gateway/static/root/assets/browser-settings-page-DPICvQED.js +0 -3
  372. package/dist/gateway/static/root/assets/capabilities-page-Crb7Oeay.js +0 -2
  373. package/dist/gateway/static/root/assets/connectors-page-ok0F1o0p.js +0 -1
  374. package/dist/gateway/static/root/assets/device-pairing-wizard-C00mHAYU.js +0 -1
  375. package/dist/gateway/static/root/assets/gateway-realtime-store-U3lzqE82.js +0 -1
  376. package/dist/gateway/static/root/assets/gateway-settings-Bc9HD3uV.js +0 -1
  377. package/dist/gateway/static/root/assets/home-page-hHgcCF-P.js +0 -2
  378. package/dist/gateway/static/root/assets/index-BnHaXfFv.css +0 -1
  379. package/dist/gateway/static/root/assets/index-odJjleQM.js +0 -255
  380. package/dist/gateway/static/root/assets/markdown-view-ByJbFign.css +0 -1
  381. package/dist/gateway/static/root/assets/markdown-view-roJ1FcXL.js +0 -66
  382. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-BUSGX-3o.js +0 -1
  383. package/dist/gateway/static/root/assets/messages-DwOSR5ue.js +0 -3
  384. package/dist/gateway/static/root/assets/models-hub-cache-BFSZUHQI.js +0 -1
  385. package/dist/gateway/static/root/assets/note-detail-panel-D2qf-sDw.js +0 -5
  386. package/dist/gateway/static/root/assets/notes-page-DNvVJasv.js +0 -8
  387. package/dist/gateway/static/root/assets/page-tabs-BLGO2VIm.js +0 -1
  388. package/dist/gateway/static/root/assets/personal-page-Bd4xN8C7.js +0 -1
  389. package/dist/gateway/static/root/assets/project-detail-page-DJC5iE_A.js +0 -1
  390. package/dist/gateway/static/root/assets/remote-access-hub-sJTykTVP.js +0 -1
  391. package/dist/gateway/static/root/assets/sessions-page-B-wgtLR4.js +0 -1
  392. package/dist/gateway/static/root/assets/settings-advanced-gate-CA6YH-tX.js +0 -1
  393. package/dist/gateway/static/root/assets/setup-status-panel-CUmMrn5b.js +0 -1
  394. package/dist/gateway/static/root/assets/shares-settings-BSQLmRXu.js +0 -1
  395. package/dist/gateway/static/root/assets/tasks-DwKXgZ-I.js +0 -1
  396. package/dist/gateway/static/root/assets/user-model-page-BQBsKpmh.js +0 -2
@@ -1,11 +1,17 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { cloudCreditBudgetStopMessage, isCloudCreditBudgetExhausted } from "../providers/xopc-cloud-credit-budget.js";
1
4
  import { evictEmbeddedSessionRunner } from "./embedded/session-runner.js";
2
5
  import { InMemoryTranscriptRuntime } from "./embedded/transcript-runtime.js";
3
6
  import { runXopcEmbeddedTurn } from "./embedded/run-turn.js";
4
7
  import { createAgentTurnPolicy } from "./orchestration/agent-turn-policy.js";
8
+ import { createDelegationBudgetPolicy, resolveDelegationBudget } from "./orchestration/delegation-budget.js";
5
9
  import { buildSubagentSystemPrompt } from "./prompt/subagent-context.js";
6
10
  import { resolveResponseLanguageForSession } from "./prompt/response-language.js";
7
11
  import { randomUUID } from "node:crypto";
8
12
  //#region src/agent/child-agent-factory.ts
13
+ init_logger();
14
+ const log = createLogger("DelegateChild");
9
15
  /** Leaf workers use the same execution, transcript and verification harness as foreground turns. */
10
16
  function createDelegateChildHandle(options) {
11
17
  const controller = new AbortController();
@@ -31,47 +37,43 @@ function createDelegateChildHandle(options) {
31
37
  toolExecutorConfig: options.toolExecutorConfig,
32
38
  browserConversationId: options.requesterConversationId ?? options.conversationId
33
39
  }).filter((tool) => allow.has(tool.name));
34
- const limit = Math.min(60, Math.max(1, Math.floor(options.maxIterations)));
35
- let toolIterations = 0, exhausted = false, tokens = 0;
36
- let terminationReason;
37
- const policy = createAgentTurnPolicy({
38
- maxTurns: limit + 1,
39
- maxToolFailures: 5,
40
- authorizeToolCall: async (context, signal) => {
41
- const { toolCall } = context;
42
- if (options.isComplete?.()) return {
43
- block: true,
44
- reason: "The delegated result is already complete."
45
- };
46
- if (!allow.has(toolCall.name)) return {
40
+ const budget = createDelegationBudgetPolicy(resolveDelegationBudget(options.budgetTier, options.maxIterations, options.timeoutMs), {
41
+ isComplete: options.isComplete,
42
+ authorizeToolCall: options.authorizeToolCall
43
+ });
44
+ const limit = budget.snapshot().limits.maxToolCalls;
45
+ let handoffCompleted = false;
46
+ const expanded = createAgentTurnPolicy({ authorizeToolCall: async (context, signal) => {
47
+ const { toolCall } = context;
48
+ const creditStop = cloudCreditBudgetStopMessage();
49
+ if (creditStop) {
50
+ budget.stop("credit_budget", creditStop);
51
+ return {
47
52
  block: true,
48
- reason: "Tool is outside the delegated capability set."
53
+ terminate: true,
54
+ reason: creditStop
49
55
  };
50
- if (toolIterations >= limit || tokens >= 1e5) {
51
- exhausted = true;
52
- return {
53
- block: true,
54
- terminate: true,
55
- reason: "Sub-agent budget exhausted."
56
- };
57
- }
58
- if (toolCall.name !== "data_batch") toolIterations++;
59
- const decision = await options.authorizeToolCall?.(context, signal);
60
- if (decision?.block) {
61
- if (decision.terminate) {
62
- exhausted = true;
63
- terminationReason = decision.reason;
64
- }
65
- return decision;
66
- }
67
56
  }
68
- });
69
- const baseStop = policy.shouldStopAfterTurn;
70
- policy.shouldStopAfterTurn = (context) => {
71
- if (options.isComplete?.()) return true;
72
- const stop = baseStop(context) || tokens >= 1e5;
73
- if (stop) exhausted = true;
74
- return stop;
57
+ if (!allow.has(toolCall.name)) return {
58
+ block: true,
59
+ reason: "Tool is outside the delegated capability set."
60
+ };
61
+ return budget.policy.beforeToolCall(context, signal);
62
+ } });
63
+ const policy = {
64
+ ...budget.policy,
65
+ beforeToolCall: expanded.beforeToolCall,
66
+ beforeModelRequest: (signal) => {
67
+ const creditStop = cloudCreditBudgetStopMessage();
68
+ if (creditStop) budget.stop("credit_budget", creditStop);
69
+ if (controller.signal.aborted) budget.stop("cancelled", "Sub-agent cancelled");
70
+ return budget.policy.beforeModelRequest?.(signal);
71
+ },
72
+ shouldStopAfterTurn: (context) => {
73
+ const creditStop = cloudCreditBudgetStopMessage();
74
+ if (creditStop) budget.stop("credit_budget", creditStop);
75
+ return budget.policy.shouldStopAfterTurn(context);
76
+ }
75
77
  };
76
78
  try {
77
79
  const result = await runXopcEmbeddedTurn({
@@ -89,7 +91,7 @@ function createDelegateChildHandle(options) {
89
91
  transcriptRuntime: runtime,
90
92
  turnPolicy: policy,
91
93
  abortSignal: controller.signal,
92
- timeoutMs: Math.min(options.timeoutMs ?? 3e5, 3e5),
94
+ timeoutMs: budget.snapshot().limits.timeoutMs,
93
95
  thinkingLevel: "medium",
94
96
  verifyChanges: options.verifyChanges,
95
97
  systemPrompt: buildSubagentSystemPrompt({
@@ -98,12 +100,13 @@ function createDelegateChildHandle(options) {
98
100
  workspace: options.workspace,
99
101
  toolNames: tools.map((tool) => tool.name),
100
102
  responseLanguage: resolveResponseLanguageForSession(options.getConfig(), options.requesterConversationId)
101
- }),
103
+ }) + `\n\nDelegation budget: ${JSON.stringify(budget.snapshot().limits)}. Tokens are cumulative across requests. Search before reading targeted chunks; continue truncated reads from their returned next position. If asked for a budget handoff, stop tools and summarize evidence, incomplete work and precise next steps.`,
102
104
  onEvent: (event) => {
103
105
  const progress = options.progressHooks;
104
106
  if (event.type === "message_end" && event.message.role === "assistant") {
105
107
  const usage = event.message.usage;
106
- tokens += usage?.totalTokens ?? (usage?.input ?? 0) + (usage?.output ?? 0);
108
+ budget.addTokens(usage?.totalTokens ?? (usage?.input ?? 0) + (usage?.output ?? 0));
109
+ if (budget.snapshot().handoffRequested && event.message.stopReason === "stop" && event.message.content.some((item) => item.type === "text" && item.text.trim()) && !event.message.content.some((item) => item.type === "toolCall")) handoffCompleted = true;
107
110
  }
108
111
  if (event.type === "tool_execution_start") progress?.onProgress({
109
112
  type: "tool_start",
@@ -120,7 +123,7 @@ function createDelegateChildHandle(options) {
120
123
  });
121
124
  progress?.onProgress({
122
125
  type: "iteration",
123
- count: toolIterations,
126
+ count: budget.snapshot().usage.toolCalls,
124
127
  max: limit
125
128
  });
126
129
  }
@@ -136,11 +139,45 @@ function createDelegateChildHandle(options) {
136
139
  const verification = runtime.openSessionManager(options.workspace).getBranch().findLast((entry) => entry.type === "custom" && entry.customType === "coding_verification");
137
140
  const proof = verification?.type === "custom" ? verification.data : void 0;
138
141
  const unverified = options.verifyChanges && proof?.changed && (!proof.evidence.some((item) => item.kind === "check" && item.status === "passed") || proof.evidence.some((item) => item.status !== "passed"));
142
+ const snapshot = budget.snapshot();
143
+ const stopReason = controller.signal.aborted ? "cancelled" : isCloudCreditBudgetExhausted(result.errorMessage ?? "") ? "credit_budget" : /timed out|did not settle/i.test(result.errorMessage ?? "") ? "timeout" : snapshot.stopReason ?? (!result.ok ? "runtime_error" : unverified ? "verification" : "completed");
144
+ const messages = await runtime.loadMessages();
145
+ const evidence = stopReason !== "completed" && !handoffCompleted ? messages.filter((message) => message.role === "toolResult").slice(-3).map((message) => {
146
+ if (message.role !== "toolResult") return "";
147
+ const text = message.content.filter((item) => item.type === "text").map((item) => item.text).join("\n");
148
+ return `${message.toolName}: ${text.slice(0, 1500)}`;
149
+ }).join("\n\n") : "";
150
+ const summary = [
151
+ result.lastAssistantText,
152
+ result.errorMessage,
153
+ snapshot.stopMessage,
154
+ evidence ? `Recent tool evidence (bounded excerpts; not a completion claim):\n${evidence}` : "",
155
+ stopReason !== "completed" ? `Delegation stopped: ${stopReason}. Treat this as a partial handoff; validate completion before continuing.` : ""
156
+ ].filter(Boolean).join("\n\n") || "(no final response)";
157
+ log.info({
158
+ conversationId,
159
+ stopReason,
160
+ budgetTier: snapshot.tier,
161
+ usage: snapshot.usage,
162
+ limits: snapshot.limits,
163
+ handoffRequested: snapshot.handoffRequested,
164
+ handoffCompleted
165
+ }, `Delegation stopped: ${stopReason}`);
139
166
  return {
140
- summary: [result.lastAssistantText || result.errorMessage, terminationReason].filter(Boolean).join("\n\n") || (exhausted ? "Sub-agent budget exhausted." : "(no final response)"),
141
- toolIterations,
142
- messages: await runtime.loadMessages(),
143
- status: controller.signal.aborted ? "cancelled" : !result.ok ? "failed" : exhausted || unverified ? "partial" : "success",
167
+ summary,
168
+ stopReason,
169
+ budget: {
170
+ ...snapshot,
171
+ stopReason
172
+ },
173
+ handoff: {
174
+ requested: snapshot.handoffRequested,
175
+ completed: handoffCompleted,
176
+ summary
177
+ },
178
+ toolIterations: snapshot.usage.toolCalls,
179
+ messages,
180
+ status: controller.signal.aborted ? "cancelled" : !result.ok ? "failed" : stopReason !== "completed" ? "partial" : "success",
144
181
  ...verification?.type === "custom" ? { verification: verification.data } : {}
145
182
  };
146
183
  } finally {
@@ -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 { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
4
4
  import { init_sqlite } from "../../storage/sqlite/index.js";
5
+ import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
5
6
  import { sanitizeForPromptLiteral } from "../prompt/sanitize-for-prompt.js";
6
7
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
7
- import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
8
8
  import { buildActiveProjectContextForPrompt } from "./project-context.js";
9
9
  //#region src/agent/context/execution-scope.ts
10
10
  init_sqlite();
@@ -6,8 +6,8 @@ import { listKnowledgeItems, searchKnowledgeItems } from "../../knowledge-memory
6
6
  import "../../knowledge-memory/index.js";
7
7
  import { ProjectStore } from "../../projects/project-store.js";
8
8
  import { getProjectForSession, getProjectWorkspacePathForSession } from "../../projects/workspace.js";
9
- import { sanitizeForPromptLiteral } from "../prompt/sanitize-for-prompt.js";
10
9
  import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
10
+ import { sanitizeForPromptLiteral } from "../prompt/sanitize-for-prompt.js";
11
11
  import { LocalAppStore } from "../../local-apps/store.js";
12
12
  //#region src/agent/context/project-context.ts
13
13
  init_sqlite();
@@ -507,6 +507,8 @@ async function runXopcEmbeddedTurnInner(params) {
507
507
  };
508
508
  effectiveSystemPrompt = getCurrentSystemPrompt(effectiveContext.messages);
509
509
  effectiveTools = getCurrentTools(effectiveContext.messages);
510
+ const modelRequestStop = params.turnPolicy?.beforeModelRequest?.(options?.signal ?? runAbortSignal);
511
+ if (modelRequestStop) return createContextErrorStream(streamModel, modelRequestStop);
510
512
  const promptCacheSnapshot = buildPromptCacheSnapshot({
511
513
  model: streamModel,
512
514
  systemPrompt: effectiveSystemPrompt,
@@ -663,6 +665,15 @@ async function runXopcEmbeddedTurnInner(params) {
663
665
  }
664
666
  policyStopped ||= params.turnPolicy?.shouldStopAfterTurn(context) ?? false;
665
667
  if (policyStopped || connectionStopped || clarificationStopped) return { action: "end" };
668
+ const continuation = params.turnPolicy?.takeContinuationMessage?.();
669
+ if (continuation) {
670
+ session.agent.steer({
671
+ role: "user",
672
+ content: continuation,
673
+ timestamp: Date.now()
674
+ });
675
+ return { action: "continue" };
676
+ }
666
677
  if (baseDecision && baseDecision.action === "continue") return { action: "continue" };
667
678
  };
668
679
  unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
@@ -1,8 +1,8 @@
1
1
  import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
2
+ import { emitSessionTranscriptUpdate } from "../../session/transcript-events.js";
2
3
  import { extractToolCallsFromAssistant, extractToolResultId } from "../transcript/tool-call-id.js";
3
4
  import { makeMissingToolResult, sanitizeToolCallInputs } from "../transcript/session-transcript-repair.js";
4
5
  import { boundedJsonUtf8Bytes, firstEnumerableOwnKeys, jsonUtf8BytesOrInfinity } from "../../infra/json-utf8-bytes.js";
5
- import { emitSessionTranscriptUpdate } from "../../session/transcript-events.js";
6
6
  import { formatContextLimitTruncationNotice } from "./tool-result-context-guard.js";
7
7
  import { resolveLiveToolResultMaxChars, truncateToolResultMessage } from "./tool-result-truncation.js";
8
8
  //#region src/agent/embedded/session-tool-result-guard.ts
@@ -4,6 +4,10 @@ export interface AgentTurnPolicy {
4
4
  beforeToolCall(context: BeforeToolCallContext, signal?: AbortSignal): Promise<BeforeToolCallResult | undefined>;
5
5
  afterToolCall(context: AfterToolCallContext): Promise<undefined>;
6
6
  shouldStopAfterTurn(context: AgentTurnContext): boolean;
7
+ /** One bounded continuation requested by a policy, e.g. a budget handoff. */
8
+ takeContinuationMessage?(): string | undefined;
9
+ /** Recheck limits at dispatch, including requests made by recovery paths. */
10
+ beforeModelRequest?(signal?: AbortSignal): string | undefined;
7
11
  }
8
12
  export interface AgentTurnPolicyOptions {
9
13
  maxTurns?: number;
@@ -0,0 +1,60 @@
1
+ import type { AgentTurnPolicy, AgentTurnPolicyOptions } from './agent-turn-policy.js';
2
+ export declare const DELEGATION_BUDGETS: {
3
+ readonly light: {
4
+ readonly maxToolCalls: 15;
5
+ readonly maxTotalTokens: 50000;
6
+ readonly timeoutMs: 120000;
7
+ };
8
+ readonly standard: {
9
+ readonly maxToolCalls: 30;
10
+ readonly maxTotalTokens: 100000;
11
+ readonly timeoutMs: 300000;
12
+ };
13
+ readonly deep: {
14
+ readonly maxToolCalls: 60;
15
+ readonly maxTotalTokens: 200000;
16
+ readonly timeoutMs: 600000;
17
+ };
18
+ };
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';
21
+ export declare function resolveDelegationBudget(tier?: DelegationBudgetTier, maxIterations?: number, timeoutMs?: number): {
22
+ tier: "light" | "standard" | "deep";
23
+ limits: {
24
+ maxToolCalls: number;
25
+ maxTotalTokens: 50000 | 100000 | 200000;
26
+ maxModelTurns: number;
27
+ maxToolFailures: number;
28
+ timeoutMs: number;
29
+ };
30
+ };
31
+ /** Reserve the last 20% for one tool-free handoff, without bypassing hard limits. */
32
+ export declare function createDelegationBudgetPolicy(budget: ReturnType<typeof resolveDelegationBudget>, options: {
33
+ isComplete?: () => boolean;
34
+ authorizeToolCall?: AgentTurnPolicyOptions['authorizeToolCall'];
35
+ }, now?: () => number): {
36
+ policy: AgentTurnPolicy;
37
+ addTokens(tokens: number): void;
38
+ stop(reason: DelegationStopReason, message?: string): void;
39
+ snapshot(): {
40
+ usage: {
41
+ elapsedMs: number;
42
+ toolCalls: number;
43
+ totalTokens: number;
44
+ modelTurns: number;
45
+ toolFailures: number;
46
+ };
47
+ stopReason: DelegationStopReason;
48
+ stopMessage: string;
49
+ handoffRequested: boolean;
50
+ handoffReason: DelegationStopReason;
51
+ tier: "light" | "standard" | "deep";
52
+ limits: {
53
+ maxToolCalls: number;
54
+ maxTotalTokens: 50000 | 100000 | 200000;
55
+ maxModelTurns: number;
56
+ maxToolFailures: number;
57
+ timeoutMs: number;
58
+ };
59
+ };
60
+ };
@@ -0,0 +1,154 @@
1
+ //#region src/agent/orchestration/delegation-budget.ts
2
+ const DELEGATION_BUDGETS = {
3
+ light: {
4
+ maxToolCalls: 15,
5
+ maxTotalTokens: 5e4,
6
+ timeoutMs: 12e4
7
+ },
8
+ standard: {
9
+ maxToolCalls: 30,
10
+ maxTotalTokens: 1e5,
11
+ timeoutMs: 3e5
12
+ },
13
+ deep: {
14
+ maxToolCalls: 60,
15
+ maxTotalTokens: 2e5,
16
+ timeoutMs: 6e5
17
+ }
18
+ };
19
+ function resolveDelegationBudget(tier = "standard", maxIterations, timeoutMs) {
20
+ const preset = DELEGATION_BUDGETS[tier];
21
+ return {
22
+ tier,
23
+ limits: {
24
+ maxToolCalls: Math.min(60, Math.max(1, Math.floor(maxIterations ?? preset.maxToolCalls))),
25
+ maxTotalTokens: preset.maxTotalTokens,
26
+ maxModelTurns: Math.min(60, Math.max(1, Math.floor(maxIterations ?? preset.maxToolCalls))) + 1,
27
+ maxToolFailures: 5,
28
+ timeoutMs: Math.min(timeoutMs ?? preset.timeoutMs, preset.timeoutMs)
29
+ }
30
+ };
31
+ }
32
+ /** Reserve the last 20% for one tool-free handoff, without bypassing hard limits. */
33
+ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
34
+ const startedAt = now();
35
+ const usage = {
36
+ toolCalls: 0,
37
+ totalTokens: 0,
38
+ modelTurns: 0,
39
+ toolFailures: 0,
40
+ elapsedMs: 0
41
+ };
42
+ const limits = budget.limits;
43
+ let stopReason;
44
+ let stopMessage;
45
+ let handoffReason;
46
+ let handoffRequested = false;
47
+ let continuation;
48
+ let handoffRequestStarted = false;
49
+ const reasonAt = (ratio) => {
50
+ if (usage.totalTokens >= limits.maxTotalTokens * ratio) return "total_tokens";
51
+ if (now() - startedAt >= limits.timeoutMs * ratio) return "timeout";
52
+ if (usage.toolCalls >= limits.maxToolCalls * ratio) return "tool_calls";
53
+ if (usage.modelTurns >= limits.maxModelTurns * ratio) return "model_turns";
54
+ if (usage.toolFailures >= limits.maxToolFailures * ratio) return "tool_failures";
55
+ };
56
+ 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
+ return {
58
+ policy: {
59
+ reset() {},
60
+ beforeModelRequest(signal) {
61
+ signal?.throwIfAborted();
62
+ const hard = reasonAt(1);
63
+ if (hard || stopReason) {
64
+ stopReason ??= hard;
65
+ return stopMessage ?? `Delegation stopped: ${stopReason}.`;
66
+ }
67
+ if (handoffRequested) {
68
+ if (handoffRequestStarted) {
69
+ stopReason = handoffReason;
70
+ return "Delegation handoff already attempted; no additional model request is permitted.";
71
+ }
72
+ handoffRequestStarted = true;
73
+ }
74
+ },
75
+ async beforeToolCall(context, signal) {
76
+ signal?.throwIfAborted();
77
+ if (options.isComplete?.()) return {
78
+ block: true,
79
+ reason: "The delegated result is already complete."
80
+ };
81
+ const hard = reasonAt(1);
82
+ if (hard) {
83
+ stopReason = hard;
84
+ return {
85
+ block: true,
86
+ terminate: true,
87
+ reason: `Sub-agent budget exhausted: ${hard}.`
88
+ };
89
+ }
90
+ if (handoffRequested) return {
91
+ block: true,
92
+ reason: handoff()
93
+ };
94
+ if (context.toolCall.name !== "data_batch") usage.toolCalls++;
95
+ const decision = await options.authorizeToolCall?.(context, signal);
96
+ if (decision?.block && decision.terminate) {
97
+ stopReason = "parent_policy";
98
+ stopMessage = decision.reason;
99
+ }
100
+ return decision;
101
+ },
102
+ async afterToolCall(context) {
103
+ if (context.isError) usage.toolFailures++;
104
+ },
105
+ shouldStopAfterTurn(context) {
106
+ usage.modelTurns++;
107
+ if (options.isComplete?.()) return true;
108
+ const hard = reasonAt(1);
109
+ if (hard || stopReason) {
110
+ stopReason ??= hard;
111
+ return true;
112
+ }
113
+ if (handoffRequested) {
114
+ stopReason = handoffReason;
115
+ return true;
116
+ }
117
+ const near = reasonAt(.8);
118
+ if (near && context.toolResults.length) {
119
+ handoffReason = near;
120
+ handoffRequested = true;
121
+ continuation = handoff();
122
+ }
123
+ return false;
124
+ },
125
+ takeContinuationMessage() {
126
+ const message = continuation;
127
+ continuation = void 0;
128
+ return message;
129
+ }
130
+ },
131
+ addTokens(tokens) {
132
+ usage.totalTokens += Math.max(0, tokens);
133
+ },
134
+ stop(reason, message) {
135
+ stopReason = reason;
136
+ stopMessage = message;
137
+ },
138
+ snapshot() {
139
+ return {
140
+ ...budget,
141
+ usage: {
142
+ ...usage,
143
+ elapsedMs: now() - startedAt
144
+ },
145
+ stopReason,
146
+ stopMessage,
147
+ handoffRequested,
148
+ handoffReason
149
+ };
150
+ }
151
+ };
152
+ }
153
+ //#endregion
154
+ export { DELEGATION_BUDGETS, createDelegationBudgetPolicy, resolveDelegationBudget };
@@ -3,8 +3,8 @@ import { TaskRepository, init_task_repository } from "../../tasks/task-repositor
3
3
  import { getSessionConfig } from "../../storage/sqlite/config-repository.js";
4
4
  import { init_sqlite } from "../../storage/sqlite/index.js";
5
5
  import { init_response_language, resolveResponseLanguage } from "../../i18n/response-language.js";
6
- import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
7
6
  import { resolveTaskLocale } from "../../tasks/task-language.js";
7
+ import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
8
8
  //#region src/agent/prompt/response-language.ts
9
9
  init_response_language();
10
10
  init_sqlite();
@@ -130,7 +130,7 @@ function buildToolingSection(params) {
130
130
  const hasPublishArtifacts = availableTools.has("publish_artifacts");
131
131
  const hasXopcUse = availableTools.has("xopc_use");
132
132
  const orchestrationLines = [];
133
- if (hasDelegate) orchestrationLines.push("- Sub-agent delegation → use `delegate_task(goal, context?, mode?, capabilities?, toolset?)`. Default research inherits available read capabilities; pass necessary context explicitly. Use implement for isolated worktree changes. Check rejectedTools and partial results before relying on the answer.");
133
+ if (hasDelegate) orchestrationLines.push("- Sub-agent delegation → use `delegate_task(goal, context?, mode?, capabilities?, toolset?, budgetTier?, maxIterations?)`. Choose light for narrow lookups, standard for bounded research, and deep for broader investigations. Supply relevant facts and a clear stopping condition; search before reading targeted chunks. Default research inherits available read capabilities. Use implement for isolated worktree changes. Inspect stopReason, budget usage, handoff and rejectedTools; resume incomplete work from the handoff rather than repeating the investigation.");
134
134
  if (hasWorkflow) orchestrationLines.push("- Multi-phase workflows → use `workflow` to start persisted runs with subagents when a script defines phases.");
135
135
  return [
136
136
  "## Tooling",
@@ -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) {
@@ -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>;
@@ -14,12 +14,12 @@ import { applyConfigOverrides } from "../config/runtime-overrides.js";
14
14
  import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
15
15
  import { getProjectForSession } from "../projects/workspace.js";
16
16
  import "../user-model/index.js";
17
+ import { onSessionTranscriptUpdate } from "../session/transcript-events.js";
17
18
  import { runWithEmbeddedExecutionSession } from "./embedded/execution-context.js";
18
19
  import { removeSkillsLockEntry } from "./skills/hub-lock.js";
19
20
  import { installSkillFromZip } from "./skills/managed-store.js";
20
21
  import { resolveWorkspaceSkillsDir, resolveWorkspaceSkillsLockPath } from "./skills/workspace-skills-dir.js";
21
22
  import { pullSkillFromSource } from "./skills/hub-pull.js";
22
- import { onSessionTranscriptUpdate } from "../session/transcript-events.js";
23
23
  import { persistInboundAttachments } from "../channels/attachments/inbound-persist.js";
24
24
  import { buildTranscriptUserMessage, hydrateUserTurnForLlm } from "./inbound/attachment-pipeline.js";
25
25
  import { drainEmbeddedSessionRunnerShutdowns } from "./embedded/session-runner.js";
@@ -496,6 +496,9 @@ var AgentService = class {
496
496
  getSkillCatalogSnapshot() {
497
497
  return this.agentManager.getSkillCatalogSnapshot();
498
498
  }
499
+ getAgentToolAvailability(agentId, name) {
500
+ return this.agentManager.getAgentToolAvailability(agentId, name);
501
+ }
499
502
  getAgentSkillAvailability(agentId) {
500
503
  return this.agentManager.getAgentSkillAvailability(agentId);
501
504
  }
@@ -2,10 +2,12 @@ import type { AgentEntry } from '../agent-config/index.js';
2
2
  export declare const STARTER_AGENTS_INITIALIZED_VERSION = 1;
3
3
  type StarterAgent = {
4
4
  id: string;
5
+ purpose?: AgentEntry['purpose'];
5
6
  tools?: AgentEntry['tools'];
6
7
  toolAllowlist?: AgentEntry['toolAllowlist'];
7
8
  skills?: AgentEntry['skills'];
8
9
  profile?: AgentEntry['profile'];
10
+ specialistProfile?: AgentEntry['specialistProfile'];
9
11
  profileFiles: Record<string, string>;
10
12
  };
11
13
  export declare const STARTER_AGENTS: readonly StarterAgent[];