@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,192 @@
1
+ import { normalizeSpecialistRequirements } from "../../packages/gateway-contract/src/specialists.js";
2
+ import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
3
+ import { init_agent_config } from "../agent-config/index.js";
4
+ import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
5
+ import { getAvailablePersonalAgentTools, personalAgentModelAvailability } from "../personal-agent/specialist-capabilities.js";
6
+ //#region src/agent-matching/service.ts
7
+ init_repository();
8
+ init_agent_config();
9
+ const MATCHER_VERSION = 1;
10
+ function assessSpecialist(agentId, input, context) {
11
+ const requirements = normalizeSpecialistRequirements(input);
12
+ const repository = new AgentCatalogRepository();
13
+ const agent = repository.get(agentId);
14
+ const checks = [];
15
+ const add = (condition, state, reasonCode, detail) => checks.push({
16
+ condition,
17
+ state,
18
+ reasonCode,
19
+ ...detail ? { detail } : {}
20
+ });
21
+ const identityValid = agent && agent.enabled !== false && agent.provisioningState === "ready" && agent.purpose !== "task_dispatcher" && agent.id !== context.ownAgentId && !agent.id.startsWith("personal-");
22
+ add("identity", identityValid ? "verified" : "blocked", identityValid ? "agent_ready" : "agent_unavailable");
23
+ if (requirements.requestedAgentId && requirements.requestedAgentId !== agentId) add("requestedAgent", "blocked", "requested_agent_mismatch");
24
+ const entry = agent ? (({ revision: _revision, provisioningState: _state, provisioningError: _error, createdAt: _created, updatedAt: _updated, deletedAt: _deleted, ...value }) => value)(agent) : void 0;
25
+ const config = entry ? resolveEffectiveAgentConfig({
26
+ defaults: repository.getSettings().defaults,
27
+ agent: entry
28
+ }).config : void 0;
29
+ const model = config ? personalAgentModelAvailability(config) : {
30
+ available: false,
31
+ reason: "Agent unavailable"
32
+ };
33
+ add("model", model.available ? "configured" : "blocked", model.available ? "provider_configured_network_unverified" : "model_unavailable", model.reason);
34
+ const availableTools = config ? getAvailablePersonalAgentTools(config, context) : [];
35
+ for (const tool of requirements.requiredTools ?? []) {
36
+ if (!identityValid) {
37
+ add(`tool:${tool}`, "blocked", "agent_unavailable");
38
+ continue;
39
+ }
40
+ if (!(config && config.tools[tool]?.mode !== "deny" && (!config.toolAllowlist || config.toolAllowlist.includes(tool)))) add(`tool:${tool}`, "blocked", "tool_unavailable");
41
+ else {
42
+ let check;
43
+ try {
44
+ check = context.getAgentToolAvailability?.(agentId, tool);
45
+ } catch {
46
+ check = {
47
+ condition: `tool:${tool}`,
48
+ state: "unknown",
49
+ reasonCode: "tool_verification_failed"
50
+ };
51
+ }
52
+ check ??= context.legacyToolPolicyOnly ? {
53
+ condition: `tool:${tool}`,
54
+ state: availableTools.includes(tool) ? "configured" : "blocked",
55
+ reasonCode: "legacy_tool_policy_only"
56
+ } : {
57
+ condition: `tool:${tool}`,
58
+ state: "unknown",
59
+ reasonCode: "tool_configured_registration_unverified"
60
+ };
61
+ checks.push(check);
62
+ if (check.state === "verified" && !availableTools.includes(tool)) availableTools.push(tool);
63
+ }
64
+ }
65
+ const verifiedSkills = [];
66
+ if (requirements.requiredSkills?.length) {
67
+ let skills;
68
+ try {
69
+ skills = identityValid ? context.getAgentSkillAvailability?.(agentId).skills : void 0;
70
+ } catch {}
71
+ for (const name of requirements.requiredSkills) {
72
+ const skill = skills?.find((item) => item.name.toLowerCase() === name);
73
+ if (skill?.availableForCurrentAgent) {
74
+ verifiedSkills.push(skill.name);
75
+ add(`skill:${name}`, "verified", "skill_available");
76
+ } else add(`skill:${name}`, skills ? "blocked" : "unknown", skills ? "skill_unavailable" : "skill_verification_unavailable", skill?.unavailableReason ?? (skills ? "not-installed" : "Skill availability cannot be verified"));
77
+ }
78
+ }
79
+ if (requirements.connector) {
80
+ let check;
81
+ try {
82
+ check = identityValid ? context.checkConnector?.(agentId, requirements.connector) : void 0;
83
+ } catch {
84
+ check = {
85
+ condition: "connector",
86
+ state: "unknown",
87
+ reasonCode: "connector_verification_failed"
88
+ };
89
+ }
90
+ checks.push(check ?? {
91
+ condition: "connector",
92
+ state: "unknown",
93
+ reasonCode: "connector_verification_unavailable"
94
+ });
95
+ }
96
+ const matched = [];
97
+ const missing = [];
98
+ const profile = agent?.specialistProfile;
99
+ const tags = [
100
+ ...requirements.domain ? [[
101
+ "domain",
102
+ requirements.domain,
103
+ profile?.domains
104
+ ]] : [],
105
+ ...requirements.taskType ? [[
106
+ "taskType",
107
+ requirements.taskType,
108
+ profile?.taskTypes
109
+ ]] : [],
110
+ ...(requirements.inputKinds ?? []).map((value) => [
111
+ "input",
112
+ value,
113
+ profile?.inputKinds
114
+ ]),
115
+ ...(requirements.outputKinds ?? []).map((value) => [
116
+ "output",
117
+ value,
118
+ profile?.outputKinds
119
+ ])
120
+ ];
121
+ for (const [kind, value, declared] of tags) (declared?.includes(value) ? matched : missing).push(`${kind}:${value}`);
122
+ return {
123
+ id: agentId,
124
+ revision: agent?.revision,
125
+ name: agent?.profile?.name ?? agentId,
126
+ description: (agent?.profile?.description ?? "").slice(0, 300),
127
+ profileSource: profile ? "declared" : "legacy",
128
+ ...profile ? { specialistProfile: profile } : {},
129
+ availableTools,
130
+ model,
131
+ verifiedSkills,
132
+ eligibility: checks.some((check) => check.state === "blocked") ? "blocked" : checks.some((check) => check.state === "unknown") ? "needs_verification" : "eligible",
133
+ checks,
134
+ matched,
135
+ missing,
136
+ catalogRevision: repository.getRevision(),
137
+ checkedAt: Date.now(),
138
+ matcherVersion: 1
139
+ };
140
+ }
141
+ function matchSpecialists(input, context, options = {}) {
142
+ const requirements = normalizeSpecialistRequirements(input);
143
+ const repository = new AgentCatalogRepository();
144
+ const revision = repository.getRevision();
145
+ let offset = 0;
146
+ if (options.cursor) {
147
+ const match = /^(\d+):(\d+)$/.exec(options.cursor);
148
+ if (!match || Number(match[1]) !== revision) throw new Error("Specialist catalog changed; restart matching");
149
+ offset = Number(match[2]);
150
+ if (!Number.isSafeInteger(offset)) throw new Error("Invalid matching cursor");
151
+ }
152
+ const ids = requirements.requestedAgentId ? [requirements.requestedAgentId] : repository.list().filter((agent) => agent.purpose !== "task_dispatcher" && agent.id !== context.ownAgentId && !agent.id.startsWith("personal-")).map((agent) => agent.id);
153
+ const order = {
154
+ eligible: 0,
155
+ needs_verification: 1,
156
+ blocked: 2
157
+ };
158
+ const candidates = ids.map((id) => assessSpecialist(id, requirements, context)).sort((a, b) => order[a.eligibility] - order[b.eligibility] || Number(b.matched.some((tag) => tag.startsWith("taskType:"))) - Number(a.matched.some((tag) => tag.startsWith("taskType:"))) || Number(b.matched.some((tag) => tag.startsWith("domain:"))) - Number(a.matched.some((tag) => tag.startsWith("domain:"))) || a.id.localeCompare(b.id));
159
+ const limit = Math.max(1, Math.min(50, Math.floor(options.limit ?? 10)));
160
+ return {
161
+ matcherVersion: 1,
162
+ catalogRevision: revision,
163
+ checkedAt: Date.now(),
164
+ total: candidates.length,
165
+ candidates: candidates.slice(offset, offset + limit),
166
+ ...offset + limit < candidates.length ? { nextCursor: `${revision}:${offset + limit}` } : {}
167
+ };
168
+ }
169
+ function listSpecialistSummaries(context) {
170
+ return matchSpecialists({
171
+ version: 1,
172
+ summary: "Specialist discovery"
173
+ }, context, { limit: 50 });
174
+ }
175
+ /** Cheap snapshot projection; configuration is not proof of runtime tool readiness. */
176
+ function summarizeSpecialist(config, context) {
177
+ return {
178
+ id: config.id,
179
+ role: (config.profile?.description || config.profile?.name || config.id).slice(0, 80),
180
+ tools: getAvailablePersonalAgentTools(config, context),
181
+ available: personalAgentModelAvailability(config).available,
182
+ toolEvidence: "configured",
183
+ ...config.specialistProfile ? {
184
+ domains: config.specialistProfile.domains,
185
+ taskTypes: config.specialistProfile.taskTypes,
186
+ outputKinds: config.specialistProfile.outputKinds,
187
+ specialties: config.specialistProfile.specialties.slice(0, 2)
188
+ } : { profileSource: "legacy" }
189
+ };
190
+ }
191
+ //#endregion
192
+ export { MATCHER_VERSION, assessSpecialist, listSpecialistSummaries, matchSpecialists, summarizeSpecialist };
@@ -38,6 +38,8 @@ export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
38
38
  kind: z.ZodLiteral<"task_command">;
39
39
  taskId: z.ZodString;
40
40
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
41
+ type: z.ZodLiteral<"retry_allocation">;
42
+ }, z.core.$strip>, z.ZodObject<{
41
43
  type: z.ZodLiteral<"move">;
42
44
  phase: z.ZodEnum<{
43
45
  backlog: "backlog";
@@ -162,8 +164,8 @@ export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
162
164
  delivery: z.ZodDefault<z.ZodObject<{
163
165
  notificationPolicy: z.ZodDefault<z.ZodEnum<{
164
166
  attention: "attention";
165
- all: "all";
166
167
  none: "none";
168
+ all: "all";
167
169
  }>>;
168
170
  destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
169
171
  key: z.ZodString;
@@ -239,6 +241,8 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
239
241
  kind: z.ZodLiteral<"task_command">;
240
242
  taskId: z.ZodString;
241
243
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
244
+ type: z.ZodLiteral<"retry_allocation">;
245
+ }, z.core.$strip>, z.ZodObject<{
242
246
  type: z.ZodLiteral<"move">;
243
247
  phase: z.ZodEnum<{
244
248
  backlog: "backlog";
@@ -379,8 +383,8 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
379
383
  delivery: z.ZodOptional<z.ZodOptional<z.ZodObject<{
380
384
  notificationPolicy: z.ZodDefault<z.ZodEnum<{
381
385
  attention: "attention";
382
- all: "all";
383
386
  none: "none";
387
+ all: "all";
384
388
  }>>;
385
389
  destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
386
390
  key: z.ZodString;
@@ -68,6 +68,8 @@ export declare const AutomationActionSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
68
68
  kind: z.ZodLiteral<"task_command">;
69
69
  taskId: z.ZodString;
70
70
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
71
+ type: z.ZodLiteral<"retry_allocation">;
72
+ }, z.core.$strip>, z.ZodObject<{
71
73
  type: z.ZodLiteral<"move">;
72
74
  phase: z.ZodEnum<{
73
75
  backlog: "backlog";
@@ -187,8 +189,8 @@ export declare const AutomationSafetyPolicySchema: z.ZodObject<{
187
189
  export declare const AutomationDeliveryPolicySchema: z.ZodObject<{
188
190
  notificationPolicy: z.ZodDefault<z.ZodEnum<{
189
191
  attention: "attention";
190
- all: "all";
191
192
  none: "none";
193
+ all: "all";
192
194
  }>>;
193
195
  destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
194
196
  key: z.ZodString;
@@ -289,6 +291,8 @@ export declare const AutomationSchema: z.ZodObject<{
289
291
  kind: z.ZodLiteral<"task_command">;
290
292
  taskId: z.ZodString;
291
293
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
294
+ type: z.ZodLiteral<"retry_allocation">;
295
+ }, z.core.$strip>, z.ZodObject<{
292
296
  type: z.ZodLiteral<"move">;
293
297
  phase: z.ZodEnum<{
294
298
  backlog: "backlog";
@@ -397,8 +401,8 @@ export declare const AutomationSchema: z.ZodObject<{
397
401
  delivery: z.ZodDefault<z.ZodObject<{
398
402
  notificationPolicy: z.ZodDefault<z.ZodEnum<{
399
403
  attention: "attention";
400
- all: "all";
401
404
  none: "none";
405
+ all: "all";
402
406
  }>>;
403
407
  destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
404
408
  key: z.ZodString;
@@ -489,6 +493,8 @@ export declare const CreateAutomationSchema: z.ZodObject<{
489
493
  kind: z.ZodLiteral<"task_command">;
490
494
  taskId: z.ZodString;
491
495
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
496
+ type: z.ZodLiteral<"retry_allocation">;
497
+ }, z.core.$strip>, z.ZodObject<{
492
498
  type: z.ZodLiteral<"move">;
493
499
  phase: z.ZodEnum<{
494
500
  backlog: "backlog";
@@ -612,8 +618,8 @@ export declare const CreateAutomationSchema: z.ZodObject<{
612
618
  delivery: z.ZodDefault<z.ZodObject<{
613
619
  notificationPolicy: z.ZodDefault<z.ZodEnum<{
614
620
  attention: "attention";
615
- all: "all";
616
621
  none: "none";
622
+ all: "all";
617
623
  }>>;
618
624
  destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
619
625
  key: z.ZodString;
@@ -716,6 +722,8 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
716
722
  kind: z.ZodLiteral<"task_command">;
717
723
  taskId: z.ZodString;
718
724
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
725
+ type: z.ZodLiteral<"retry_allocation">;
726
+ }, z.core.$strip>, z.ZodObject<{
719
727
  type: z.ZodLiteral<"move">;
720
728
  phase: z.ZodEnum<{
721
729
  backlog: "backlog";
@@ -865,8 +873,8 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
865
873
  delivery: z.ZodOptional<z.ZodOptional<z.ZodObject<{
866
874
  notificationPolicy: z.ZodDefault<z.ZodEnum<{
867
875
  attention: "attention";
868
- all: "all";
869
876
  none: "none";
877
+ all: "all";
870
878
  }>>;
871
879
  destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
872
880
  key: z.ZodString;
@@ -12,7 +12,7 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
12
12
  automation: {
13
13
  name: string;
14
14
  delivery: {
15
- notificationPolicy: "attention" | "all" | "none";
15
+ notificationPolicy: "attention" | "none" | "all";
16
16
  destinations: ({
17
17
  key: string;
18
18
  kind: "gateway_event";
@@ -67,6 +67,8 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
67
67
  kind: "task_command";
68
68
  taskId: string;
69
69
  command?: {
70
+ type: "retry_allocation";
71
+ } | {
70
72
  type: "move";
71
73
  phase: "backlog" | "ready" | "active" | "review";
72
74
  } | {
@@ -1,8 +1,8 @@
1
1
  import { buildChannelCatalogForConfig } from "../../channels/catalog/channel-catalog-service.js";
2
2
  import { loadConfig, saveConfig } from "../../config/loader.js";
3
+ import { formatExamples, register } from "../registry.js";
3
4
  import { listChannelPairingState } from "../../channels/pairing/pairing-service.js";
4
5
  import { approveChannelPairingFromCli } from "../../channels/pairing/approve-cli.js";
5
- import { formatExamples, register } from "../registry.js";
6
6
  import { colors } from "../utils/colors.js";
7
7
  import { Command } from "commander";
8
8
  //#region src/cli/commands/channels.ts
@@ -1,8 +1,8 @@
1
1
  import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
2
2
  import { loadConfig, saveConfig } from "../../config/loader.js";
3
3
  import { register } from "../registry.js";
4
- import { confirm } from "@inquirer/prompts";
5
4
  import { Command } from "commander";
5
+ import { confirm } from "@inquirer/prompts";
6
6
  //#region src/cli/commands/connectors.ts
7
7
  function parsePairs(values, option) {
8
8
  const output = {};
@@ -53,7 +53,7 @@ async function checkDatabaseSchema(ctx) {
53
53
  id: "database-schema",
54
54
  label: "Database schema",
55
55
  status: "pass",
56
- message: `SQLite schema v${status.dbVersion} (current release v246).`,
56
+ message: `SQLite schema v${status.dbVersion} (current release v249).`,
57
57
  hints: []
58
58
  };
59
59
  }
@@ -16,8 +16,8 @@ import { existsSync, readFileSync, statSync } from "node:fs";
16
16
  import { execSync } from "node:child_process";
17
17
  import { createHash } from "node:crypto";
18
18
  import semver from "semver";
19
- import { confirm } from "@inquirer/prompts";
20
19
  import { Command } from "commander";
20
+ import { confirm } from "@inquirer/prompts";
21
21
  //#region src/cli/commands/extension-marketplace.ts
22
22
  init_paths();
23
23
  const MANIFEST = "xopc.extension.json";
@@ -16,8 +16,8 @@ import { prepareUpdateGlobalDefaults } from "../../gateway/global-defaults-admin
16
16
  import { disconnectProvider } from "../../providers/provider-disconnect.js";
17
17
  import { colors } from "../utils/colors.js";
18
18
  import { runCliOAuthLogin } from "../utils/oauth-login.js";
19
- import { input } from "@inquirer/prompts";
20
19
  import { Command } from "commander";
20
+ import { input } from "@inquirer/prompts";
21
21
  //#region src/cli/commands/models.ts
22
22
  init_credentials();
23
23
  init_schema();
@@ -11,8 +11,8 @@ import { initWorkspace } from "../utils/init-workspace.js";
11
11
  import { setupModel } from "./onboard/model.js";
12
12
  import { getChannelConfigurators } from "./onboard/channels/registry.js";
13
13
  import { setupChannels } from "./onboard/channels/index.js";
14
- import { select } from "@inquirer/prompts";
15
14
  import { Command } from "commander";
15
+ import { select } from "@inquirer/prompts";
16
16
  //#region src/cli/commands/onboard.ts
17
17
  init_repository();
18
18
  init_schema();
@@ -7,8 +7,8 @@ import { DEFAULT_SECURITY_CONFIG, checkExtensionDirSafety, checkExtensionPathSaf
7
7
  import { SlotRegistry, getSlotRegistry, registerSlotType } from "../slots.js";
8
8
  import { ExtensionDiagnostics, ExtensionLoaderCacheImpl, getExtensionCache, getExtensionDiagnostics } from "../diagnostics.js";
9
9
  import { ExtensionHookRunner, createHookContext, isHookEvent } from "../hooks.js";
10
- import { defineChannelPluginEntry } from "./channel-entry.js";
11
10
  import { registerExtensionCliProgram } from "./channel-helpers.js";
11
+ import { defineChannelPluginEntry } from "./channel-entry.js";
12
12
  import { lazyFunction, lazyModule } from "./lazy.js";
13
13
  import { createMockExtensionApi, createTestGateway } from "./testing.js";
14
14
  //#region src/extensions/sdk/index.ts
@@ -277,4 +277,4 @@ export declare const GATEWAY_BUILTIN_TOOLS: readonly [{
277
277
  readonly zh: "使用已验证的参数执行选定的外部工具。";
278
278
  };
279
279
  }];
280
- export declare const GATEWAY_BUILTIN_TOOL_IDS: ("automation" | "workflow" | "find" | "image" | "knowledge_search" | "knowledge_get" | "knowledge_write" | "user_context_search" | "user_context_get" | "user_context_update" | "web_search" | "web_fetch" | "browser_use" | "grep" | "session_search" | "read_file" | "list_dir" | "write_file" | "apply_patch" | "exec_command" | "update_plan" | "todo" | "clarify" | "xopc_tool_execute" | "web_extract" | "image_generate" | "read_media" | "xopc_tool_search" | "xopc_tool_describe" | "computer_use" | "send_message" | "text_to_speech" | "skills_list" | "skill_view" | "skill_manage" | "skills_marketplace_search" | "session_status" | "memory_maintenance" | "tool_manual" | "skill_install" | "send_media" | "create_share" | "delegate_task" | "execute_code" | "create_desktop_pet")[];
280
+ export declare const GATEWAY_BUILTIN_TOOL_IDS: ("automation" | "workflow" | "find" | "image" | "knowledge_search" | "knowledge_get" | "knowledge_write" | "user_context_search" | "user_context_get" | "user_context_update" | "web_search" | "web_fetch" | "browser_use" | "grep" | "session_search" | "read_file" | "list_dir" | "write_file" | "apply_patch" | "exec_command" | "update_plan" | "todo" | "clarify" | "xopc_tool_execute" | "web_extract" | "read_media" | "xopc_tool_search" | "xopc_tool_describe" | "image_generate" | "skills_list" | "skill_view" | "skill_manage" | "skills_marketplace_search" | "computer_use" | "send_message" | "text_to_speech" | "send_media" | "create_share" | "session_status" | "memory_maintenance" | "tool_manual" | "delegate_task" | "skill_install" | "execute_code" | "create_desktop_pet")[];
@@ -4,6 +4,7 @@
4
4
  import type { AgentEntry, AgentModelsOverride, EffectiveAgentConfig, SkillOverride } from '../agent-config/index.js';
5
5
  export type GatewayAgentRow = {
6
6
  id: string;
7
+ revision?: number;
7
8
  name?: string;
8
9
  description?: string;
9
10
  language?: string;
@@ -35,6 +36,7 @@ export type CreateAgentBody = {
35
36
  id?: string;
36
37
  workspace?: string;
37
38
  profile: NonNullable<AgentEntry['profile']>;
39
+ specialistProfile?: AgentEntry['specialistProfile'];
38
40
  };
39
41
  export type AgentAdminHttpStatus = 400 | 404 | 409;
40
42
  export type AgentAdminResult<T> = {
@@ -50,6 +52,8 @@ export declare function createGatewayAgent(body: CreateAgentBody): Promise<Agent
50
52
  workspace: string;
51
53
  }>>;
52
54
  export type UpdateAgentBody = {
55
+ expectedRevision?: number;
56
+ specialistProfile?: AgentEntry['specialistProfile'] | null;
53
57
  workspace?: string | null;
54
58
  profile?: AgentEntry['profile'] | null;
55
59
  models?: AgentModelsOverride | null;
@@ -40,6 +40,7 @@ async function listGatewayAgents(_options = {}) {
40
40
  ...identity?.avatar ? { avatar: identity.avatar } : {},
41
41
  workspace: profile.resolvedWorkspacePath,
42
42
  profileDir: resolveAgentProfileDir(id),
43
+ revision: new AgentCatalogRepository().get(entry.id)?.revision,
43
44
  override: structuredClone(entry),
44
45
  effective: structuredClone(profile.config),
45
46
  sources: { ...profile.sources },
@@ -98,7 +99,8 @@ async function createGatewayAgent(body) {
98
99
  id: agentId,
99
100
  enabled: true,
100
101
  ...workspace ? { workspace } : {},
101
- profile: structuredClone(body.profile)
102
+ profile: structuredClone(body.profile),
103
+ ...body.specialistProfile ? { specialistProfile: body.specialistProfile } : {}
102
104
  });
103
105
  return {
104
106
  ok: true,
@@ -125,6 +127,7 @@ async function updateGatewayAgent(agentIdRaw, body) {
125
127
  const patch = {};
126
128
  if (body.workspace !== void 0) patch.workspace = body.workspace?.trim() ? resolveUserPath(body.workspace) : void 0;
127
129
  if (body.profile !== void 0) patch.profile = body.profile ?? void 0;
130
+ if (body.specialistProfile !== void 0) patch.specialistProfile = body.specialistProfile ?? void 0;
128
131
  if (body.models !== void 0) patch.models = body.models ?? void 0;
129
132
  if (body.skills !== void 0) patch.skills = body.skills ?? void 0;
130
133
  if (body.tools !== void 0) patch.tools = body.tools ?? void 0;
@@ -133,7 +136,7 @@ async function updateGatewayAgent(agentIdRaw, body) {
133
136
  if (body.runtime !== void 0) patch.runtime = body.runtime ?? void 0;
134
137
  try {
135
138
  const service = new AgentCatalogService();
136
- await service.update(agentId, patch);
139
+ await service.update(agentId, patch, body.expectedRevision);
137
140
  if (body.setDefault === true) service.setDefault(agentId);
138
141
  return {
139
142
  ok: true,
@@ -16,17 +16,21 @@ function parseCreateAgentBody(raw) {
16
16
  const allowedKeys = new Set([
17
17
  "id",
18
18
  "workspace",
19
- "profile"
19
+ "profile",
20
+ "specialistProfile"
20
21
  ]);
21
22
  const unknownKey = Object.keys(body).find((key) => !allowedKeys.has(key));
22
23
  if (unknownKey) return { error: `unknown create-agent field "${unknownKey}"` };
23
24
  const workspace = typeof body.workspace === "string" ? body.workspace : void 0;
24
25
  const profile = AgentProfileSchema.safeParse(body.profile);
25
26
  if (!profile.success) return { error: `profile ${profile.error.issues[0]?.message ?? "is required"}` };
27
+ const specialist = AgentEntrySchema.shape.specialistProfile.safeParse(body.specialistProfile);
28
+ if (!specialist.success) return { error: `specialistProfile ${specialist.error.issues[0]?.message ?? "is invalid"}` };
26
29
  const id = typeof body.id === "string" ? body.id : void 0;
27
30
  return {
28
31
  workspace,
29
32
  profile: profile.data,
33
+ ...specialist.data ? { specialistProfile: specialist.data } : {},
30
34
  ...id !== void 0 ? { id } : {}
31
35
  };
32
36
  }
@@ -101,6 +105,8 @@ function registerAgentsRoutes(authenticated, deps) {
101
105
  }
102
106
  const allowedPatchKeys = new Set([
103
107
  "workspace",
108
+ "specialistProfile",
109
+ "expectedRevision",
104
110
  "profile",
105
111
  "models",
106
112
  "skills",
@@ -115,6 +121,15 @@ function registerAgentsRoutes(authenticated, deps) {
115
121
  ok: false,
116
122
  error: { message: `unknown agent field "${unknownPatchKey}"` }
117
123
  }, 400);
124
+ if (body.expectedRevision !== void 0 && (!Number.isInteger(body.expectedRevision) || Number(body.expectedRevision) < 1)) return c.json({
125
+ ok: false,
126
+ error: { message: "expectedRevision must be a positive integer" }
127
+ }, 400);
128
+ const specialistPatch = body.specialistProfile === null ? null : Object.hasOwn(body, "specialistProfile") ? AgentEntrySchema.shape.specialistProfile.safeParse(body.specialistProfile) : void 0;
129
+ if (specialistPatch && !specialistPatch.success) return c.json({
130
+ ok: false,
131
+ error: { message: `specialistProfile ${specialistPatch.error.issues[0]?.message ?? "is invalid"}` }
132
+ }, 400);
118
133
  const skillsPatch = body.skills === null ? null : Object.hasOwn(body, "skills") ? SkillOverrideSchema.safeParse(body.skills) : void 0;
119
134
  if (skillsPatch && skillsPatch !== null && !skillsPatch.success) return c.json({
120
135
  ok: false,
@@ -166,6 +181,8 @@ function registerAgentsRoutes(authenticated, deps) {
166
181
  error: { message: "workspace must be a string or null" }
167
182
  }, 400);
168
183
  const prep = await updateGatewayAgent(id, {
184
+ expectedRevision: body.expectedRevision,
185
+ ...specialistPatch !== void 0 ? { specialistProfile: specialistPatch === null ? null : specialistPatch.data } : {},
169
186
  ...workspacePatch !== void 0 ? { workspace: workspacePatch } : {},
170
187
  ...profilePatch !== void 0 ? { profile: profilePatch === null ? null : profilePatch.data } : {},
171
188
  ...modelsPatch !== void 0 ? { models: modelsPatch } : {},
@@ -3,6 +3,14 @@ function startsWithAny(path, prefixes) {
3
3
  return prefixes.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));
4
4
  }
5
5
  const AUTHENTICATED_LAZY_ROUTE_BUNDLES = [
6
+ {
7
+ id: "next-turn-suggestions",
8
+ match: (path) => /^\/api\/sessions\/[^/]+\/(?:next-turn-suggestion|next-turn-suggestion-feedback)$/.test(path),
9
+ load: async () => {
10
+ const { registerNextTurnSuggestionRoutes } = await import("./next-turn-suggestions.js");
11
+ return { register: registerNextTurnSuggestionRoutes };
12
+ }
13
+ },
6
14
  {
7
15
  id: "personal-agent",
8
16
  match: (path) => startsWithAny(path, ["/api/personal-agent"]),
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerNextTurnSuggestionRoutes(app: Hono, deps: AuthenticatedRouteDeps): void;
@@ -0,0 +1,39 @@
1
+ import { nextTurnSuggestionFeedbackSchema } from "../../../../packages/gateway-contract/src/next-turn-suggestions.js";
2
+ import { init_src } from "../../../../packages/gateway-contract/src/index.js";
3
+ import { getSessionMetadata } from "../../../storage/sqlite/session-read-repository.js";
4
+ import { init_session_repository } from "../../../storage/sqlite/session-repository.js";
5
+ import { recordNextTurnSuggestionFeedback } from "../../../storage/sqlite/next-turn-suggestion-repository.js";
6
+ import { createGatewayRouteLogger } from "../lib/route-logger.js";
7
+ //#region src/gateway/hono/routes/next-turn-suggestions.ts
8
+ init_src();
9
+ init_session_repository();
10
+ const log = createGatewayRouteLogger("NextTurnSuggestions");
11
+ function registerNextTurnSuggestionRoutes(app, deps) {
12
+ app.get("/api/sessions/:key/next-turn-suggestion", (c) => {
13
+ c.header("Cache-Control", "no-store");
14
+ if (!deps.service.isGatewayReady()) return c.json({ status: "none" }, 503);
15
+ const conversationId = c.req.param("key");
16
+ if (!getSessionMetadata(conversationId)) return c.json({ error: "Session not found" }, 404);
17
+ const locale = c.req.query("locale") ?? "en";
18
+ if (locale !== "zh" && locale !== "en") return c.json({ error: "Invalid locale" }, 400);
19
+ try {
20
+ return c.json(deps.service.agentRunner.nextTurnSuggestions.get(conversationId, locale));
21
+ } catch (err) {
22
+ log.debug({
23
+ err,
24
+ conversationId
25
+ }, "Next turn suggestion unavailable");
26
+ return c.json({ status: "none" });
27
+ }
28
+ });
29
+ app.post("/api/sessions/:key/next-turn-suggestion-feedback", deps.strictRateLimitMiddleware, async (c) => {
30
+ if (!deps.service.isGatewayReady()) return c.json({ ok: false }, 503);
31
+ const conversationId = c.req.param("key");
32
+ if (!getSessionMetadata(conversationId)) return c.json({ error: "Session not found" }, 404);
33
+ const body = nextTurnSuggestionFeedbackSchema.safeParse(await c.req.json().catch(() => null));
34
+ if (!body.success) return c.json({ error: "Invalid feedback" }, 400);
35
+ return recordNextTurnSuggestionFeedback(conversationId, body.data) ? c.json({ ok: true }) : c.json({ error: "Suggestion not found" }, 404);
36
+ });
37
+ }
38
+ //#endregion
39
+ export { registerNextTurnSuggestionRoutes };
@@ -1,8 +1,8 @@
1
1
  import { getDevice, init_device_access_repository } from "../../../storage/sqlite/device-access-repository.js";
2
2
  import { getPersonalRequest, init_request_repository, listPersonalRequests } from "../../../personal-agent/request-repository.js";
3
3
  import { getPersonalAgent } from "../../../personal-agent/repository.js";
4
- import { writeAgentAvatarFromBase64 } from "../../agents-admin.js";
5
4
  import { TaskOriginRepository } from "../../../tasks/task-origin-repository.js";
5
+ import { writeAgentAvatarFromBase64 } from "../../agents-admin.js";
6
6
  import { cancelPersonalRequest, personalRequestSnapshot, publishPersonalRequest } from "../../../personal-agent/request-service.js";
7
7
  import { PersonalOnboardingDraftSchema, PersonalOnboardingStepSchema, finishPersonalWelcome, getPersonalOnboarding, savePersonalOnboarding } from "../../../personal-agent/onboarding.js";
8
8
  import { PersonalAppearanceSchema, PersonalPreferencesSchema, createOrResumePersonalAgent, ensurePersonalConversationVisibility, listPersonalModels, patchPersonalProfile, refreshPersonalDelegationGuidance } from "../../../personal-agent/service.js";
@@ -93,8 +93,9 @@ function registerTaskRoutes(authenticated, deps) {
93
93
  ok: true,
94
94
  task: created.model.task,
95
95
  operationalState: created.model.operationalState,
96
+ allocation: created.model.allocation,
96
97
  ...created.runId ? { run: runs.get(created.runId) } : {}
97
- }, created.runId ? 202 : 201);
98
+ }, created.runId || created.model.allocation ? 202 : 201);
98
99
  } catch (error) {
99
100
  const message = error instanceof Error ? error.message : String(error);
100
101
  return c.json({
@@ -0,0 +1,3 @@
1
+ import type { SuggestionSnapshot } from './snapshot.js';
2
+ export declare function parseSuggestionOutput(raw: string): string | null;
3
+ export declare function generateNextTurnSuggestion(snapshot: SuggestionSnapshot, locale: 'zh' | 'en', modelRef: string, signal: AbortSignal): Promise<string | null>;