@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
@@ -0,0 +1,76 @@
1
+ import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
+ import { TaskRepository, init_task_repository } from "../tasks/task-repository.js";
3
+ import { TaskRunRepository, init_task_run_repository } from "../tasks/task-run-repository.js";
4
+ import { TaskAllocationRepository } from "../tasks/task-allocation-repository.js";
5
+ import { TaskOriginRepository } from "../tasks/task-origin-repository.js";
6
+ import { abortEmbeddedRun } from "../agent/embedded/runs.js";
7
+ import { TaskApplicationService } from "../tasks/task-application-service.js";
8
+ //#region src/personal-agent/task-cancel.ts
9
+ init_transaction();
10
+ init_task_repository();
11
+ init_task_run_repository();
12
+ /** Close before aborting so a late router decision or receipt cannot restart the task. */
13
+ async function cancelPersonalTask(taskId, conversationId, key) {
14
+ if (!new TaskOriginRepository().owns(taskId, conversationId)) throw new Error("Task does not belong to this personal conversation");
15
+ const runs = new TaskRunRepository();
16
+ const { active, changed } = runSqliteWriteTransaction(() => {
17
+ const task = new TaskRepository().require(taskId);
18
+ const run = runs.getActiveRoot(taskId);
19
+ if (task.phase !== "closed") {
20
+ if (!new TaskApplicationService().execute({
21
+ taskId,
22
+ expectedVersion: task.version,
23
+ idempotencyKey: `personal-cancel:${key}`,
24
+ command: {
25
+ type: "close",
26
+ resolution: "cancelled"
27
+ },
28
+ actor: { kind: "user" }
29
+ }).ok) throw new Error("Task changed while cancelling");
30
+ } else if (task.resolution !== "cancelled") throw new Error("Task is already closed");
31
+ getSqliteDatabase().prepare("UPDATE task_allocations SET status = 'cancelled', lease_token = NULL, updated_at = ? WHERE task_id = ? AND status != 'cancelled'").run(Date.now(), taskId);
32
+ return {
33
+ active: run,
34
+ changed: task.phase !== "closed"
35
+ };
36
+ });
37
+ const latest = active ?? runs.getLatestRoot(taskId);
38
+ let executionStopConfirmed = !latest || !latest.conversationId && !latest.startedAt && ["queued", "cancelled"].includes(latest.status);
39
+ if (active?.conversationId) {
40
+ await abortEmbeddedRun(active.conversationId);
41
+ executionStopConfirmed = false;
42
+ }
43
+ const current = active ? runs.get(active.id) : void 0;
44
+ if (current && runs.getActiveRoot(taskId)?.id === current.id) new TaskApplicationService().completeRun({
45
+ runId: current.id,
46
+ expectedRunVersion: current.version,
47
+ actor: { kind: "user" },
48
+ terminalCode: "cancelled_by_user",
49
+ suppressAttention: true,
50
+ receipt: {
51
+ status: "cancelled",
52
+ summary: "Task cancelled",
53
+ changes: [],
54
+ evidence: [],
55
+ verification: {
56
+ status: "unverified",
57
+ checks: []
58
+ },
59
+ remainingWork: [],
60
+ needsUser: false,
61
+ completionVerdict: "not_achieved"
62
+ }
63
+ });
64
+ if (changed && new TaskAllocationRepository().get(taskId)) {
65
+ const zh = new TaskRepository().require(taskId).locale === "zh";
66
+ runSqliteWriteTransaction(() => new TaskAllocationRepository().publish(taskId, zh ? "任务已取消。" : "Task cancelled."));
67
+ }
68
+ return {
69
+ ok: true,
70
+ taskId,
71
+ status: "cancelled",
72
+ executionStopConfirmed
73
+ };
74
+ }
75
+ //#endregion
76
+ export { cancelPersonalTask };
@@ -329,7 +329,7 @@ function customRowToClientHistory(row) {
329
329
  if (r.role !== "custom" && r.type !== "custom_message") return null;
330
330
  const customType = optionalString(r.customType)?.trim();
331
331
  if (!customType) return null;
332
- if (customType === "personal_request_status") {
332
+ if (customType === "personal_request_status" || customType === "task_allocation_status") {
333
333
  const content = typeof r.content === "string" ? r.content : "";
334
334
  return {
335
335
  role: "assistant",
@@ -1,8 +1,8 @@
1
1
  import { buildSessionContextForLlm, init_session_context_for_llm, isTranscriptContextEntry, mergeLlmMessagesPreservingContextRows, transcriptRowsFromJsonArray } from "./session-context-for-llm.js";
2
2
  import { SessionStatus, init_types } from "./types.js";
3
3
  import { effectiveWorkspacePathForSession, normalizeWorkingDirectoryInput, projectWorkspacePath } from "./session-workspace.js";
4
- import { flattenMessageContent, messagesToClientHistory } from "./client-history.js";
5
4
  import { emitSessionTranscriptUpdate, onSessionTranscriptUpdate } from "./transcript-events.js";
5
+ import { flattenMessageContent, messagesToClientHistory } from "./client-history.js";
6
6
  import { fallbackTitleFromMessages, generateSessionTitleFromMessages, getSessionTitleSource, isWebchatConversationId, maybeRefineSessionTitleWithLlm, maybeSetProvisionalSessionTitle, provisionalTitleFromUserText, sanitizeGeneratedSessionTitle, sanitizeSessionTitle, shouldAutoTitleConversationId, shouldRefineSessionTitleWithLlm } from "./session-title.js";
7
7
  import { SessionStore } from "./store.js";
8
8
  import { applySessionPatchToMetadata } from "./patch-metadata.js";
@@ -0,0 +1,32 @@
1
+ CREATE TABLE agent_selection_records (
2
+ id TEXT PRIMARY KEY,
3
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
4
+ transcript_id TEXT,
5
+ input_id TEXT,
6
+ personal_request_id TEXT REFERENCES personal_requests(request_id) ON DELETE CASCADE,
7
+ task_id TEXT REFERENCES tasks(task_id) ON DELETE CASCADE,
8
+ task_run_id TEXT REFERENCES task_runs(run_id) ON DELETE SET NULL,
9
+ decision_group_id TEXT NOT NULL,
10
+ previous_selection_id TEXT REFERENCES agent_selection_records(id) ON DELETE SET NULL,
11
+ idempotency_key TEXT NOT NULL,
12
+ request_hash TEXT NOT NULL,
13
+ selected_agent_id TEXT NOT NULL,
14
+ selected_agent_revision INTEGER,
15
+ matcher_version INTEGER NOT NULL,
16
+ catalog_revision INTEGER NOT NULL,
17
+ requirements_json TEXT NOT NULL,
18
+ selected_profile_json TEXT,
19
+ assessment_json TEXT NOT NULL,
20
+ candidates_json TEXT,
21
+ selection_source TEXT NOT NULL CHECK(selection_source IN ('snapshot','match','explicit','legacy')),
22
+ reason_source TEXT NOT NULL CHECK(reason_source IN ('model','system')),
23
+ selection_reason TEXT NOT NULL,
24
+ status TEXT NOT NULL CHECK(status IN ('pending_connection','rejected','task_linked','start_blocked','start_failed')),
25
+ reason_code TEXT,
26
+ created_at INTEGER NOT NULL,
27
+ updated_at INTEGER NOT NULL,
28
+ UNIQUE(conversation_id, idempotency_key)
29
+ );
30
+ CREATE INDEX agent_selection_task ON agent_selection_records(task_id, created_at);
31
+ CREATE INDEX agent_selection_request ON agent_selection_records(personal_request_id);
32
+ CREATE INDEX agent_selection_origin ON agent_selection_records(conversation_id, created_at);
@@ -0,0 +1,20 @@
1
+ CREATE TABLE next_turn_suggestions (
2
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
3
+ locale TEXT NOT NULL CHECK (locale IN ('zh', 'en')),
4
+ suggestion_id TEXT NOT NULL UNIQUE,
5
+ snapshot_key TEXT NOT NULL,
6
+ state TEXT NOT NULL CHECK (state IN ('ready', 'none')),
7
+ payload_json TEXT,
8
+ expires_at INTEGER NOT NULL,
9
+ PRIMARY KEY (conversation_id, locale)
10
+ );
11
+ CREATE TABLE next_turn_suggestion_feedback (
12
+ conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
13
+ suggestion_id TEXT NOT NULL,
14
+ impression_id TEXT NOT NULL,
15
+ event TEXT NOT NULL CHECK (event IN ('shown', 'accepted', 'dismissed', 'submitted')),
16
+ edited INTEGER NOT NULL DEFAULT 0,
17
+ created_at INTEGER NOT NULL,
18
+ PRIMARY KEY (suggestion_id, impression_id, event)
19
+ );
20
+ CREATE INDEX idx_next_turn_feedback_created ON next_turn_suggestion_feedback(created_at);
@@ -0,0 +1,17 @@
1
+ CREATE TABLE task_allocations (
2
+ id TEXT PRIMARY KEY,
3
+ task_id TEXT NOT NULL UNIQUE REFERENCES tasks(task_id) ON DELETE CASCADE,
4
+ origin_conversation_id TEXT NOT NULL REFERENCES sessions(conversation_id) ON DELETE CASCADE,
5
+ requirements_json TEXT NOT NULL,
6
+ task_version INTEGER NOT NULL,
7
+ status TEXT NOT NULL CHECK(status IN ('pending','selecting','assigned','blocked','failed','cancelled')),
8
+ selected_agent_id TEXT,
9
+ selection_reason TEXT,
10
+ reason_code TEXT,
11
+ attempts INTEGER NOT NULL DEFAULT 0,
12
+ lease_token TEXT,
13
+ lease_expires_at INTEGER,
14
+ next_attempt_at INTEGER NOT NULL,
15
+ updated_at INTEGER NOT NULL
16
+ );
17
+ CREATE INDEX task_allocations_pending ON task_allocations(status, next_attempt_at, lease_expires_at);
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 246;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 249;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -59,7 +59,7 @@ function applySingleMigration(db, migration, discardOldScenes = false) {
59
59
  function applyPendingMigrations(db, options = {}) {
60
60
  db.function("xopc_memory_search_text", { deterministic: true }, (value) => memorySearchText(String(value ?? "")));
61
61
  db.function("xopc_operation_id", () => currentOperationId() ?? null);
62
- const targetVersion = options.targetVersion ?? 246;
62
+ const targetVersion = options.targetVersion ?? 249;
63
63
  let currentVersion = readSchemaVersion(db);
64
64
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
65
65
  if (!options.migrationsDir && currentVersion < 165) throw new DatabaseSchemaTooOldError(currentVersion, 165);
@@ -97,7 +97,7 @@ function applyPendingMigrations(db, options = {}) {
97
97
  }
98
98
  /** Inspect schema version without mutating the database. */
99
99
  function inspectSchemaMigrationStatus(db, options = {}) {
100
- const appVersion = options.targetVersion ?? 246;
100
+ const appVersion = options.targetVersion ?? 249;
101
101
  const dbVersion = readSchemaVersion(db);
102
102
  if (dbVersion > appVersion) return {
103
103
  dbVersion,
@@ -140,7 +140,7 @@ var init_runner = __esmMin((() => {
140
140
  init_errors();
141
141
  log = createLogger("Sqlite:Migrations");
142
142
  XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
143
- XOPC_DB_SCHEMA_VERSION = 246;
143
+ XOPC_DB_SCHEMA_VERSION = 249;
144
144
  }));
145
145
  //#endregion
146
146
  init_runner();
@@ -0,0 +1,4 @@
1
+ import type { NextTurnSuggestion, NextTurnSuggestionFeedback, NextTurnSuggestionResponse } from '@xopcai/gateway-contract';
2
+ export declare function readNextTurnSuggestion(conversationId: string, locale: string, snapshotKey: string, now?: number): NextTurnSuggestionResponse | undefined;
3
+ export declare function saveNextTurnSuggestion(conversationId: string, locale: string, snapshotKey: string, id: string, expiresAt: number, suggestion: NextTurnSuggestion | null): void;
4
+ export declare function recordNextTurnSuggestionFeedback(conversationId: string, feedback: NextTurnSuggestionFeedback): boolean;
@@ -0,0 +1,30 @@
1
+ import { getSqliteDatabase, init_transaction } from "./transaction.js";
2
+ //#region src/storage/sqlite/next-turn-suggestion-repository.ts
3
+ init_transaction();
4
+ function readNextTurnSuggestion(conversationId, locale, snapshotKey, now = Date.now()) {
5
+ const row = getSqliteDatabase().prepare(`SELECT state, payload_json FROM next_turn_suggestions
6
+ WHERE conversation_id = ? AND locale = ? AND snapshot_key = ? AND expires_at > ?`).get(conversationId, locale, snapshotKey, now);
7
+ return row ? {
8
+ status: row.state,
9
+ ...row.payload_json ? { suggestion: JSON.parse(row.payload_json) } : {}
10
+ } : void 0;
11
+ }
12
+ function saveNextTurnSuggestion(conversationId, locale, snapshotKey, id, expiresAt, suggestion) {
13
+ getSqliteDatabase().prepare(`INSERT INTO next_turn_suggestions
14
+ (conversation_id, locale, snapshot_key, suggestion_id, state, payload_json, expires_at)
15
+ VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(conversation_id, locale) DO UPDATE SET
16
+ snapshot_key = excluded.snapshot_key, suggestion_id = excluded.suggestion_id, state = excluded.state,
17
+ payload_json = excluded.payload_json, expires_at = excluded.expires_at`).run(conversationId, locale, snapshotKey, id, suggestion ? "ready" : "none", suggestion ? JSON.stringify(suggestion) : null, expiresAt);
18
+ getSqliteDatabase().prepare("DELETE FROM next_turn_suggestions WHERE expires_at <= ?").run(Date.now());
19
+ getSqliteDatabase().prepare("DELETE FROM next_turn_suggestion_feedback WHERE created_at < ?").run(Date.now() - 30 * 864e5);
20
+ }
21
+ function recordNextTurnSuggestionFeedback(conversationId, feedback) {
22
+ const db = getSqliteDatabase();
23
+ if (!db.prepare(`SELECT 1 FROM next_turn_suggestions WHERE conversation_id = ? AND suggestion_id = ? AND state = 'ready'
24
+ UNION ALL SELECT 1 FROM next_turn_suggestion_feedback WHERE conversation_id = ? AND suggestion_id = ? AND impression_id = ? AND event = 'accepted' LIMIT 1`).get(conversationId, feedback.suggestionId, conversationId, feedback.suggestionId, feedback.impressionId)) return false;
25
+ db.prepare(`INSERT OR IGNORE INTO next_turn_suggestion_feedback
26
+ (conversation_id, suggestion_id, impression_id, event, edited, created_at) VALUES (?, ?, ?, ?, ?, ?)`).run(conversationId, feedback.suggestionId, feedback.impressionId, feedback.event, feedback.edited ? 1 : 0, Date.now());
27
+ return true;
28
+ }
29
+ //#endregion
30
+ export { readNextTurnSuggestion, recordNextTurnSuggestionFeedback, saveNextTurnSuggestion };
@@ -28,7 +28,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
28
28
  currentVersion = 165;
29
29
  }
30
30
  applyPendingMigrations(db, {
31
- targetVersion: 246,
31
+ targetVersion: 249,
32
32
  databasePath: fresh ? void 0 : options.databasePath
33
33
  });
34
34
  }
@@ -4,8 +4,8 @@ import { TaskRepository, init_task_repository } from "../task-repository.js";
4
4
  import { TaskRunRepository, init_task_run_repository } from "../task-run-repository.js";
5
5
  import { CapabilityError } from "../../capabilities/runtime/errors.js";
6
6
  import { defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
7
- import { TaskConversationRepository } from "../task-conversation-repository.js";
8
7
  import { TaskReadModelProjector } from "../task-read-model-projector.js";
8
+ import { TaskConversationRepository } from "../task-conversation-repository.js";
9
9
  import { TaskContextRepository } from "../task-context-repository.js";
10
10
  import { TaskDependencyService } from "../task-dependency-service.js";
11
11
  import { TaskCriterionReviewRepository } from "../task-criterion-review-repository.js";
@@ -86,10 +86,28 @@ export declare const TaskDependenciesOutputSchema: z.ZodObject<{
86
86
  duplicate: "duplicate";
87
87
  wont_do: "wont_do";
88
88
  }>>;
89
+ allocation: z.ZodOptional<z.ZodObject<{
90
+ id: z.ZodString;
91
+ taskId: z.ZodString;
92
+ status: z.ZodEnum<{
93
+ failed: "failed";
94
+ pending: "pending";
95
+ cancelled: "cancelled";
96
+ blocked: "blocked";
97
+ selecting: "selecting";
98
+ assigned: "assigned";
99
+ }>;
100
+ selectedAgentId: z.ZodOptional<z.ZodString>;
101
+ selectionReason: z.ZodOptional<z.ZodString>;
102
+ reasonCode: z.ZodOptional<z.ZodString>;
103
+ attempts: z.ZodNumber;
104
+ updatedAt: z.ZodNumber;
105
+ }, z.core.$strip>>;
89
106
  operationalState: z.ZodEnum<{
90
107
  failed: "failed";
91
108
  waiting: "waiting";
92
109
  cancelled: "cancelled";
110
+ allocating: "allocating";
93
111
  idle: "idle";
94
112
  queued: "queued";
95
113
  running: "running";
@@ -113,10 +131,28 @@ export declare const TaskDependenciesOutputSchema: z.ZodObject<{
113
131
  duplicate: "duplicate";
114
132
  wont_do: "wont_do";
115
133
  }>>;
134
+ allocation: z.ZodOptional<z.ZodObject<{
135
+ id: z.ZodString;
136
+ taskId: z.ZodString;
137
+ status: z.ZodEnum<{
138
+ failed: "failed";
139
+ pending: "pending";
140
+ cancelled: "cancelled";
141
+ blocked: "blocked";
142
+ selecting: "selecting";
143
+ assigned: "assigned";
144
+ }>;
145
+ selectedAgentId: z.ZodOptional<z.ZodString>;
146
+ selectionReason: z.ZodOptional<z.ZodString>;
147
+ reasonCode: z.ZodOptional<z.ZodString>;
148
+ attempts: z.ZodNumber;
149
+ updatedAt: z.ZodNumber;
150
+ }, z.core.$strip>>;
116
151
  operationalState: z.ZodEnum<{
117
152
  failed: "failed";
118
153
  waiting: "waiting";
119
154
  cancelled: "cancelled";
155
+ allocating: "allocating";
120
156
  idle: "idle";
121
157
  queued: "queued";
122
158
  running: "running";
@@ -147,9 +183,9 @@ export declare const TaskContextMutationOutputSchema: z.ZodObject<{
147
183
  role: z.ZodEnum<{
148
184
  evidence: "evidence";
149
185
  input: "input";
186
+ deliverable: "deliverable";
150
187
  reference: "reference";
151
188
  constraint: "constraint";
152
- deliverable: "deliverable";
153
189
  }>;
154
190
  title: z.ZodOptional<z.ZodString>;
155
191
  pinned: z.ZodBoolean;
@@ -184,9 +220,9 @@ export declare const TaskContextMutationOutputSchema: z.ZodObject<{
184
220
  role: z.ZodEnum<{
185
221
  evidence: "evidence";
186
222
  input: "input";
223
+ deliverable: "deliverable";
187
224
  reference: "reference";
188
225
  constraint: "constraint";
189
- deliverable: "deliverable";
190
226
  }>;
191
227
  title: z.ZodOptional<z.ZodString>;
192
228
  pinned: z.ZodBoolean;
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { type CapabilityDispatcher } from '../../capabilities/runtime/dispatcher.js';
3
+ import { TaskApplicationService } from '../task-application-service.js';
3
4
  import type { Config } from '../../config/schema.js';
4
5
  import type { ProjectService } from '../../projects/index.js';
5
6
  export declare const TaskMutationOutputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -75,6 +76,8 @@ export declare const TaskMutationOutputSchema: z.ZodDiscriminatedUnion<[z.ZodObj
75
76
  }, z.core.$strip>;
76
77
  attention: z.ZodArray<z.ZodObject<{
77
78
  kind: z.ZodEnum<{
79
+ allocation_blocked: "allocation_blocked";
80
+ allocation_failed: "allocation_failed";
78
81
  input_required: "input_required";
79
82
  approval_required: "approval_required";
80
83
  dependency_blocked: "dependency_blocked";
@@ -86,10 +89,28 @@ export declare const TaskMutationOutputSchema: z.ZodDiscriminatedUnion<[z.ZodObj
86
89
  summary: z.ZodString;
87
90
  sourceId: z.ZodOptional<z.ZodString>;
88
91
  }, z.core.$strip>>;
92
+ allocation: z.ZodOptional<z.ZodObject<{
93
+ id: z.ZodString;
94
+ taskId: z.ZodString;
95
+ status: z.ZodEnum<{
96
+ failed: "failed";
97
+ pending: "pending";
98
+ cancelled: "cancelled";
99
+ blocked: "blocked";
100
+ selecting: "selecting";
101
+ assigned: "assigned";
102
+ }>;
103
+ selectedAgentId: z.ZodOptional<z.ZodString>;
104
+ selectionReason: z.ZodOptional<z.ZodString>;
105
+ reasonCode: z.ZodOptional<z.ZodString>;
106
+ attempts: z.ZodNumber;
107
+ updatedAt: z.ZodNumber;
108
+ }, z.core.$strip>>;
89
109
  operationalState: z.ZodEnum<{
90
110
  failed: "failed";
91
111
  waiting: "waiting";
92
112
  cancelled: "cancelled";
113
+ allocating: "allocating";
93
114
  idle: "idle";
94
115
  queued: "queued";
95
116
  running: "running";
@@ -178,6 +199,8 @@ export declare const TaskMutationOutputSchema: z.ZodDiscriminatedUnion<[z.ZodObj
178
199
  }, z.core.$strip>;
179
200
  attention: z.ZodArray<z.ZodObject<{
180
201
  kind: z.ZodEnum<{
202
+ allocation_blocked: "allocation_blocked";
203
+ allocation_failed: "allocation_failed";
181
204
  input_required: "input_required";
182
205
  approval_required: "approval_required";
183
206
  dependency_blocked: "dependency_blocked";
@@ -189,10 +212,28 @@ export declare const TaskMutationOutputSchema: z.ZodDiscriminatedUnion<[z.ZodObj
189
212
  summary: z.ZodString;
190
213
  sourceId: z.ZodOptional<z.ZodString>;
191
214
  }, z.core.$strip>>;
215
+ allocation: z.ZodOptional<z.ZodObject<{
216
+ id: z.ZodString;
217
+ taskId: z.ZodString;
218
+ status: z.ZodEnum<{
219
+ failed: "failed";
220
+ pending: "pending";
221
+ cancelled: "cancelled";
222
+ blocked: "blocked";
223
+ selecting: "selecting";
224
+ assigned: "assigned";
225
+ }>;
226
+ selectedAgentId: z.ZodOptional<z.ZodString>;
227
+ selectionReason: z.ZodOptional<z.ZodString>;
228
+ reasonCode: z.ZodOptional<z.ZodString>;
229
+ attempts: z.ZodNumber;
230
+ updatedAt: z.ZodNumber;
231
+ }, z.core.$strip>>;
192
232
  operationalState: z.ZodEnum<{
193
233
  failed: "failed";
194
234
  waiting: "waiting";
195
235
  cancelled: "cancelled";
236
+ allocating: "allocating";
196
237
  idle: "idle";
197
238
  queued: "queued";
198
239
  running: "running";
@@ -203,6 +244,7 @@ export declare const TaskMutationOutputSchema: z.ZodDiscriminatedUnion<[z.ZodObj
203
244
  }, z.core.$strip>>;
204
245
  }, z.core.$strip>], "ok">;
205
246
  export interface TaskWriteCapabilityDeps {
247
+ createTask?: TaskApplicationService['create'];
206
248
  getConfig?: () => Config | undefined;
207
249
  getProjects?: () => ProjectService | undefined;
208
250
  wake?: (runs: boolean) => void;
@@ -18,7 +18,8 @@ const modelSchema = TaskDetailResponseSchema.pick({
18
18
  task: true,
19
19
  operationalState: true,
20
20
  attention: true,
21
- allowedCommands: true
21
+ allowedCommands: true,
22
+ allocation: true
22
23
  });
23
24
  const TaskMutationOutputSchema = z.discriminatedUnion("ok", [z.object({
24
25
  ok: z.literal(true),
@@ -45,7 +46,7 @@ function registerTaskWriteCapabilities(dispatcher, deps) {
45
46
  input: TaskCreateRequestSchema.omit({ idempotencyKey: true }),
46
47
  output: TaskMutationOutputSchema,
47
48
  execute(input, context) {
48
- if (input.activation.mode === "start" && !deps.wake) throw new CapabilityError("UNAVAILABLE", "Task execution service is unavailable");
49
+ if (input.activation.mode !== "capture" && !deps.wake) throw new CapabilityError("UNAVAILABLE", "Task execution service is unavailable");
49
50
  const config = deps.getConfig?.();
50
51
  const projects = deps.getProjects?.();
51
52
  const requestedAgentId = input.delegateAgentId ?? (input.activation.mode === "start" && input.activation.executor?.kind === "agent" ? input.activation.executor.agentId : void 0);
@@ -69,17 +70,18 @@ function registerTaskWriteCapabilities(dispatcher, deps) {
69
70
  title: input.title,
70
71
  contract: input.contract
71
72
  }) : language === "zh-CN" ? "zh" : "en");
72
- return new TaskApplicationService().create({
73
+ const request = {
73
74
  ...input,
74
75
  locale,
75
76
  originConversationId,
76
- delegateAgentId: agentId,
77
+ delegateAgentId: input.activation.mode === "allocate" ? void 0 : agentId,
77
78
  activation,
78
79
  idempotencyKey: context.idempotencyKey
79
- }, context.actor);
80
+ };
81
+ return deps.createTask ? deps.createTask(request, context.actor) : new TaskApplicationService().create(request, context.actor);
80
82
  },
81
83
  afterCommit(result) {
82
- if (result.ok) deps.wake?.(Boolean(result.runId));
84
+ if (result.ok) deps.wake?.(Boolean(result.runId || result.model.allocation));
83
85
  }
84
86
  }));
85
87
  dispatcher.register(defineAtomicCapability({
@@ -110,7 +112,7 @@ function registerTaskWriteCapabilities(dispatcher, deps) {
110
112
  const activeRun = new TaskRunRepository().getActiveRoot(input.taskId);
111
113
  if (activeRun?.conversationId && new TaskRepository().get(input.taskId)?.version === result.model.task.version) await deps.abortConversation?.(activeRun.conversationId);
112
114
  }
113
- deps.wake?.(Boolean(result.runId) || command.type === "resolve_wait" || command.type === "close");
115
+ deps.wake?.(Boolean(result.runId || result.model.allocation) || command.type === "resolve_wait" || command.type === "close");
114
116
  }
115
117
  }));
116
118
  }
@@ -1,8 +1,8 @@
1
1
  import { enqueueTaskAttentionRequiredEvent, enqueueTaskChanged, enqueueTaskChangedEvent, init_task_change_events } from "./task-change-events.js";
2
2
  import { TaskRepository, init_task_repository } from "./task-repository.js";
3
3
  import { TaskRunRepository, init_task_run_repository } from "./task-run-repository.js";
4
- import { TaskConversationConflictError, TaskConversationRepository } from "./task-conversation-repository.js";
5
4
  import { TaskReadModelProjector } from "./task-read-model-projector.js";
5
+ import { TaskConversationConflictError, TaskConversationRepository } from "./task-conversation-repository.js";
6
6
  import { TaskContextRepository } from "./task-context-repository.js";
7
7
  import { TaskDependencyError, TaskDependencyService } from "./task-dependency-service.js";
8
8
  import { TaskValueMetricsService } from "./task-value-metrics-service.js";
@@ -0,0 +1,25 @@
1
+ import type { TaskAllocation, SpecialistTaskRequirements } from '@xopcai/gateway-contract';
2
+ export interface AllocationRow {
3
+ id: string;
4
+ task_id: string;
5
+ origin_conversation_id: string;
6
+ requirements_json: string;
7
+ task_version: number;
8
+ status: TaskAllocation['status'];
9
+ selected_agent_id: string | null;
10
+ selection_reason: string | null;
11
+ reason_code: string | null;
12
+ attempts: number;
13
+ lease_token: string | null;
14
+ lease_expires_at: number | null;
15
+ next_attempt_at: number;
16
+ updated_at: number;
17
+ }
18
+ export declare class TaskAllocationRepository {
19
+ get(taskId: string): AllocationRow | undefined;
20
+ summary(taskId: string): TaskAllocation | undefined;
21
+ create(taskId: string, conversationId: string, taskVersion: number, requirements: SpecialistTaskRequirements): void;
22
+ claim(now?: number): AllocationRow | undefined;
23
+ owns(row: AllocationRow): boolean;
24
+ publish(taskId: string, content: string): void;
25
+ }
@@ -0,0 +1,82 @@
1
+ import { afterSqliteCommit, getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
+ import { enqueueTaskChangedEvent, init_task_change_events } from "./task-change-events.js";
3
+ import { appendTranscriptEntry, init_transcript_repository } from "../storage/sqlite/transcript-repository.js";
4
+ import { emitSessionTranscriptUpdate } from "../session/transcript-events.js";
5
+ import { resolveTaskLocale } from "./task-language.js";
6
+ import { randomUUID } from "node:crypto";
7
+ //#region src/tasks/task-allocation-repository.ts
8
+ init_transaction();
9
+ init_transcript_repository();
10
+ init_task_change_events();
11
+ var TaskAllocationRepository = class {
12
+ get(taskId) {
13
+ return getSqliteDatabase().prepare("SELECT * FROM task_allocations WHERE task_id = ?").get(taskId);
14
+ }
15
+ summary(taskId) {
16
+ const row = this.get(taskId);
17
+ return row ? {
18
+ id: row.id,
19
+ taskId,
20
+ status: row.status,
21
+ attempts: row.attempts,
22
+ updatedAt: row.updated_at,
23
+ ...row.selected_agent_id ? { selectedAgentId: row.selected_agent_id } : {},
24
+ ...row.selection_reason ? { selectionReason: row.selection_reason } : {},
25
+ ...row.reason_code ? { reasonCode: row.reason_code } : {}
26
+ } : void 0;
27
+ }
28
+ create(taskId, conversationId, taskVersion, requirements) {
29
+ const now = Date.now();
30
+ getSqliteDatabase().prepare(`INSERT INTO task_allocations
31
+ (id, task_id, origin_conversation_id, requirements_json, task_version, status, next_attempt_at, updated_at)
32
+ VALUES (?, ?, ?, ?, ?, 'pending', ?, ?)`).run(randomUUID(), taskId, conversationId, JSON.stringify(requirements), taskVersion, now, now);
33
+ const task = getSqliteDatabase().prepare("SELECT title, locale FROM tasks WHERE task_id = ?").get(taskId);
34
+ this.publish(taskId, resolveTaskLocale(task) === "zh" ? "任务已提交,正在分配执行者。" : "Task submitted; assigning an executor.");
35
+ }
36
+ claim(now = Date.now()) {
37
+ return runSqliteWriteTransaction((db) => {
38
+ db.prepare(`UPDATE task_allocations SET status = 'cancelled', lease_token = NULL
39
+ WHERE status IN ('pending','selecting') AND task_id IN (SELECT task_id FROM tasks WHERE phase = 'closed')`).run();
40
+ const row = db.prepare(`SELECT a.* FROM task_allocations a JOIN tasks t ON t.task_id = a.task_id
41
+ WHERE t.phase != 'closed' AND NOT EXISTS (SELECT 1 FROM task_waits w WHERE w.task_id = a.task_id AND w.status = 'active')
42
+ AND ((a.status = 'pending' AND a.next_attempt_at <= ?) OR (a.status = 'selecting' AND a.lease_expires_at <= ?))
43
+ ORDER BY a.next_attempt_at, a.id LIMIT 1`).get(now, now);
44
+ if (!row) return void 0;
45
+ const token = randomUUID();
46
+ db.prepare(`UPDATE task_allocations SET status = 'selecting', lease_token = ?, lease_expires_at = ?,
47
+ attempts = attempts + 1, updated_at = ? WHERE id = ?`).run(token, now + 6e4, now, row.id);
48
+ return this.get(row.task_id);
49
+ });
50
+ }
51
+ owns(row) {
52
+ const current = this.get(row.task_id);
53
+ return current?.status === "selecting" && current.lease_token === row.lease_token && (current.lease_expires_at ?? 0) > Date.now();
54
+ }
55
+ publish(taskId, content) {
56
+ const row = this.get(taskId);
57
+ if (!row) return;
58
+ const db = getSqliteDatabase();
59
+ const task = db.prepare("SELECT version, project_id FROM tasks WHERE task_id = ?").get(taskId);
60
+ appendTranscriptEntry(row.origin_conversation_id, {
61
+ role: "custom",
62
+ customType: "task_allocation_status",
63
+ content,
64
+ display: true,
65
+ details: {
66
+ taskId,
67
+ allocation: this.summary(taskId)
68
+ },
69
+ timestamp: Date.now()
70
+ });
71
+ enqueueTaskChangedEvent(db, {
72
+ taskId,
73
+ version: task.version,
74
+ projectId: task.project_id ?? void 0,
75
+ changedFields: ["delegateAgentId", "attention"],
76
+ source: "runtime"
77
+ });
78
+ afterSqliteCommit(() => emitSessionTranscriptUpdate({ conversationId: row.origin_conversation_id }));
79
+ }
80
+ };
81
+ //#endregion
82
+ export { TaskAllocationRepository };
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod';
2
+ import { type MatchingContext, type SpecialistAssessment } from '../agent-matching/service.js';
3
+ import { TaskRepository } from './task-repository.js';
4
+ declare const DecisionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5
+ kind: z.ZodLiteral<"select">;
6
+ agentId: z.ZodString;
7
+ reason: z.ZodString;
8
+ }, z.core.$strict>, z.ZodObject<{
9
+ kind: z.ZodLiteral<"no_candidate">;
10
+ reason: z.ZodString;
11
+ }, z.core.$strict>, z.ZodObject<{
12
+ kind: z.ZodLiteral<"needs_input">;
13
+ question: z.ZodString;
14
+ }, z.core.$strict>], "kind">;
15
+ export type AllocationDecision = z.infer<typeof DecisionSchema>;
16
+ export interface AllocationDecisionInput {
17
+ task: ReturnType<TaskRepository['require']>;
18
+ candidates: SpecialistAssessment[];
19
+ signal: AbortSignal;
20
+ }
21
+ /** The router is a separate Catalog Agent; it does not execute a TaskRun or call business tools. */
22
+ export declare function decideTaskAllocation(input: AllocationDecisionInput): Promise<AllocationDecision>;
23
+ export declare class TaskAllocationDispatcher {
24
+ #private;
25
+ private readonly deps;
26
+ constructor(deps: {
27
+ context: (conversationId: string) => MatchingContext;
28
+ decide?: (input: AllocationDecisionInput) => Promise<AllocationDecision>;
29
+ wake: () => void;
30
+ });
31
+ dispatch(): void;
32
+ stop(): void;
33
+ drain(): Promise<void>;
34
+ private drainSlot;
35
+ private allocate;
36
+ private cancel;
37
+ private finishFailure;
38
+ }
39
+ export {};