@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.
- package/dist/browser-ext/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/browser-ext/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/browser-ext/dist/assets/{sidepanel-Ccl0eSa1.css → sidepanel-CQeQB5vW.css} +3 -0
- package/dist/browser-ext/dist/sidepanel.html +1 -1
- package/dist/browser-ext/dist/sidepanel.js +16690 -3
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/gateway/static/root/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/gateway/static/root/assets/{activity-store-CKTm4K1I.js → activity-store-CB2X4Gmu.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-60ztIsyO.js → agent-avatar-dicebear-BSel9yf8.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DgHMyhuY.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-D0h_GOzZ.js → agent-plugin-dialog-BosuN4dO.js} +1 -1
- package/dist/gateway/static/root/assets/agents-B-pw5RKI.js +77 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-6aesahV-.js → agents-admin-api-BkULgC6Q.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-D7OQP_Q4.js → app-management-settings-panel-DuOqKkfH.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-CY44NMTV.js → appearance-settings-8JF9rXFr.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-CfrhlDw1.js → apps-page-Cuclpk0A.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-D5ouupwE.js → archive-plugin-De0ND0oA.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BTyga78U.js → automations-page-D7NwNy2I.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-CSxW4wX0.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-sYO6MAV6.js → binary-plugins-Do535ZGW.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BdOTO0Yo.css → block-editor-Cvy3D_4T.css} +1 -1
- package/dist/gateway/static/root/assets/block-editor-Dnb7CH_l.js +160 -0
- package/dist/gateway/static/root/assets/{browser-automation-inputs-BmILL059.js → browser-automation-inputs-B9M1RYTm.js} +1 -1
- package/dist/gateway/static/root/assets/browser-automations-page-GBgDe21o.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-B2FXaO3n.js +3 -0
- package/dist/gateway/static/root/assets/{capabilities-DFR31Yhq.js → capabilities-2Do3eKMM.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-BFuas9nS.js → capabilities-XFwwUNU3.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-f2-MquJn.js +2 -0
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-ByLA8WMF.js → capabilities-settings-panel-D9F0mw16.js} +6 -6
- package/dist/gateway/static/root/assets/{capability-header-actions-DBwN3Sxo.js → capability-header-actions-DVRxJPQP.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-hokrjIdA.js → channels-CnDm5T1t.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-BBNBN1KZ.js → chat-terminal-dock-BxSCDbK7.js} +2 -2
- package/dist/gateway/static/root/assets/{computer-settings-page-BWLBPHzl.js → computer-settings-page-DVAB-kQw.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-Bm5JwIw8.js → connector-service-page-D2EeLXei.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DK9n4hgZ.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-BhtD9xGl.js → date-picker-Cl9KfFj8.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-BZ7Xnjqt.js → dependency-picker-Ei6aX5WM.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CFPxAY1g.js → desktop-pet-4Evl4RKX.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-HHN0SYzH.js → desktop-pet-settings-DAD_OWcX.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-BA21epMn.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-DQm9XjdO.js → directory-picker-path-field-B_Zb5nNR.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BrwNSqhz.js → extension-debug-page-DtHNy4TE.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CpDc5gDd.js → extension-page-8gWSThWP.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-DF9qV04X.js → extension-provider-nbgU7xBS.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BLXL1IUp.js → extension-settings-page-CunUbB09.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-JL5hZ0k-.js → fallback-models-BSAfzXby.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-iceAEoJZ.js → gateway-config-swr-D0tBjSgj.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-DMpsQXjn.js → gateway-realtime-BnHraJ3O.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BVriF6Zj.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-CN-2229W.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BS6l0_QM.js → gateway-startup-retry-C1DQsIH3.js} +1 -1
- package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-BQJ5YRxv.js → highlighted-body-KQOG7T2V-DktBCtHF.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-CUJcNW3H.js +2 -0
- package/dist/gateway/static/root/assets/{image-generation-api-F2lG3T2E.js → image-generation-api-DodU6GNC.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-CsMEvde8.js → imports-page-DQm1MNNC.js} +1 -1
- package/dist/gateway/static/root/assets/index-BPNL54bv.js +260 -0
- package/dist/gateway/static/root/assets/index-yseLAt9D.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CeYVir-Q.js → keyboard-shortcuts-settings-DaC5YjuJ.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-Chj0R32r.js → local-app-workbench-page-DwQyyo7a.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-sTmfe7AL.js → local-apps-page-CpZhivpf.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-DdLyLxCp.js → local-session-drafts-D_tYFy7d.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-AAPVaavy.js → locale-store-uRu_DsWm.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-CpR_hGcR.js → logs-page-Db43nh1M.js} +2 -2
- package/dist/gateway/static/root/assets/{management-settings-B_rVRdFW.js → management-settings-DrKejBEZ.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-Ct4sKkUf.css +1 -0
- package/dist/gateway/static/root/assets/markdown-view-DHfQAvZQ.js +324 -0
- package/dist/gateway/static/root/assets/{media-plugins-Op_dDK0E.js → media-plugins-BombFqsX.js} +1 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-C4VzqE9z.js +1 -0
- package/dist/gateway/static/root/assets/messages-DTqbfje6.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-cache-Ct6X5zmB.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-a8NSwmmW.js +5 -0
- package/dist/gateway/static/root/assets/{notes-api-1TYlEpD2.js → notes-api-nqN2wKYc.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-BKRke43F.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-BYqWMp-X.js → page-context-capture-button-DUaMkmxv.js} +1 -1
- package/dist/gateway/static/root/assets/page-tabs-HLrKIjXH.js +1 -0
- package/dist/gateway/static/root/assets/personal-page-BqF-HHw1.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-BRBzKP2h.js → product-open-page-GrhtTQIz.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-BapT1QoP.js → product-preview-content-zdP7gN0y.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-9Vd_AqDW.js +1 -0
- package/dist/gateway/static/root/assets/{projects-page-BMN9evTF.js → projects-page-DGunhjoM.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-BPFXyHk8.js → registry-api-CYqA7bfl.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BoRsF3Lx.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-Cu0MRsAb.js → runtime-tools-api-zzoxjSuR.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CJF3NeTn.js → runtime-tools-settings-panel-W0HDm--J.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-D_BBF04t.js → scenes-page-CYsFOfVJ.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-CAmizvOH.js → schema-form-CBxEbBQq.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-G334tGIw.js → send-session-input-BCAF-Ikt.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-DYl61CUz.js → session-api-CzVTrG8n.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-J3r-UiPc.js → session-manager-_yy4bxhT.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Dthfx_vc.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-O_0Lk38S.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-B635QEij.js → settings-page-CFs-WP_2.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-D2-9fXYL.js +1 -0
- package/dist/gateway/static/root/assets/{share-link-dialog-Bht78zB4.js → share-link-dialog-C47Xgzta.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-epHeT5lh.js → share-preview-page-nJ2FWAEP.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-k1DyfoGP.js → shares-api-B0HlMAzi.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DTb88RHD.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-CLmxc6fX.js → skill-api-DJ8UBsxq.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-DZGoQACj.js → skill-reload-api-CEJx5rPd.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-clfZlVOG.js → skills-page-DjbBOikT.js} +1 -1
- package/dist/gateway/static/root/assets/specialists-4bkS5rZ4.js +1 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-DHjH7-OW.js → system-settings-panel-Dt5GkLhM.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-BcYnm1sO.js → task-detail-page-88EShcbs.js} +2 -2
- package/dist/gateway/static/root/assets/{task-expandable-content-OTHBryoz.js → task-expandable-content-CF6Bj-Qa.js} +1 -1
- package/dist/gateway/static/root/assets/tasks-DJIeIk9C.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-C2WOFv9Y.js → theme-store-BUfzeDvL.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-CnPpysvy.js → tracing-settings-page-C2q5B3Kp.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-C3bUe4Nc.js → tunnel-api-JHttXi63.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-Dgl7sh2E.js → usage-page-B3rUa0fW.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BXZr6Rm9.js → use-autosave-DgbCgsao.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-C7M9p0kf.js → use-composer-attachments-BFP3k6oC.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-CleMXYWu.js → use-file-preview-expanded-B1BiTQNS.js} +2 -2
- package/dist/gateway/static/root/assets/user-model-page-Cq1VSsZw.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-BeF8AHPT.js → voice-api-key-field-4AIkbm9R.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-CBORJPD_.js → voice-config-api-Kw1pYlLN.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-3egLlB1M.js → work-discovery-overlay-BAtG_JHv.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BhYnheW-.js → workflow-run-setup-panel-Cw12NFgx.js} +2 -2
- package/dist/gateway/static/root/assets/{workflows-page-C9dLtlfP.js → workflows-page-kR5ouOuM.js} +3 -3
- package/dist/gateway/static/root/assets/{workspace-api-DdkViIn3.js → workspace-api-Xr3wz8T3.js} +2 -2
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-4KUvnfnh.js → xopc-cloud-account-card-BTBVKpSg.js} +1 -1
- package/dist/gateway/static/root/index.html +30 -29
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/index.js +4 -0
- package/dist/packages/gateway-contract/src/next-turn-suggestions.js +40 -0
- package/dist/packages/gateway-contract/src/specialists.js +48 -0
- package/dist/packages/gateway-contract/src/task-lifecycle.js +3 -0
- package/dist/packages/gateway-contract/src/tasks.js +41 -10
- package/dist/src/agent/agent-manager.d.ts +6 -0
- package/dist/src/agent/agent-manager.js +7 -3
- package/dist/src/agent/child-agent-factory.d.ts +9 -0
- package/dist/src/agent/child-agent-factory.js +83 -46
- package/dist/src/agent/context/execution-scope.js +1 -1
- package/dist/src/agent/context/project-context.js +1 -1
- package/dist/src/agent/embedded/run-turn.js +11 -0
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
- package/dist/src/agent/orchestration/agent-turn-policy.d.ts +4 -0
- package/dist/src/agent/orchestration/delegation-budget.d.ts +60 -0
- package/dist/src/agent/orchestration/delegation-budget.js +154 -0
- package/dist/src/agent/prompt/response-language.js +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +2 -2
- package/dist/src/agent/service.d.ts +6 -0
- package/dist/src/agent/service.js +4 -1
- package/dist/src/agent/starter-agents.d.ts +2 -0
- package/dist/src/agent/starter-agents.js +114 -5
- package/dist/src/agent/tasks/task-judge-service.js +1 -1
- package/dist/src/agent/tools/delegate-tool.js +17 -3
- package/dist/src/agent/tools/error-pattern-matcher.js +1 -1
- package/dist/src/agent/tools/exec-command.js +3 -1
- package/dist/src/agent/tools/factory.d.ts +7 -0
- package/dist/src/agent/tools/factory.js +21 -2
- package/dist/src/agent/tools/personal-attention-tool.d.ts +2 -0
- package/dist/src/agent/tools/personal-attention-tool.js +51 -17
- package/dist/src/agent/tools/personal-read-tool.js +16 -6
- package/dist/src/agent/tools/personal-request-tool.js +64 -10
- package/dist/src/agent/tools/personal-result-budget.d.ts +2 -0
- package/dist/src/agent/tools/personal-result-budget.js +57 -0
- package/dist/src/agent/tools/personal-task-tool.d.ts +23 -11
- package/dist/src/agent/tools/personal-task-tool.js +394 -69
- package/dist/src/agent/tools/xopc-use-tool.d.ts +2 -0
- package/dist/src/agent/tools/xopc-use-tool.js +22 -9
- package/dist/src/agent-config/resolver.js +4 -0
- package/dist/src/agent-config/schema.d.ts +36 -2
- package/dist/src/agent-config/schema.js +9 -2
- package/dist/src/agent-matching/delegation-service.d.ts +17 -0
- package/dist/src/agent-matching/delegation-service.js +87 -0
- package/dist/src/agent-matching/schema.d.ts +2 -0
- package/dist/src/agent-matching/schema.js +6 -0
- package/dist/src/agent-matching/selection-repository.d.ts +54 -0
- package/dist/src/agent-matching/selection-repository.js +83 -0
- package/dist/src/agent-matching/service.d.ts +85 -0
- package/dist/src/agent-matching/service.js +192 -0
- package/dist/src/automations/capabilities/write.d.ts +6 -2
- package/dist/src/automations/domain/validation.d.ts +12 -4
- package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -1
- package/dist/src/cli/commands/channels.js +1 -1
- package/dist/src/cli/commands/connectors.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/extensions/sdk/index.js +1 -1
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agents-admin.d.ts +4 -0
- package/dist/src/gateway/agents-admin.js +5 -2
- package/dist/src/gateway/hono/routes/agents.js +18 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/next-turn-suggestions.d.ts +3 -0
- package/dist/src/gateway/hono/routes/next-turn-suggestions.js +39 -0
- package/dist/src/gateway/hono/routes/personal-agent.js +1 -1
- package/dist/src/gateway/hono/routes/tasks.js +2 -1
- package/dist/src/gateway/next-turn-suggestions/generator.d.ts +3 -0
- package/dist/src/gateway/next-turn-suggestions/generator.js +50 -0
- package/dist/src/gateway/next-turn-suggestions/service.d.ts +23 -0
- package/dist/src/gateway/next-turn-suggestions/service.js +125 -0
- package/dist/src/gateway/next-turn-suggestions/snapshot.d.ts +15 -0
- package/dist/src/gateway/next-turn-suggestions/snapshot.js +67 -0
- package/dist/src/gateway/service/agent-runner.d.ts +2 -0
- package/dist/src/gateway/service/agent-runner.js +13 -1
- package/dist/src/gateway/service/session-input-coordinator.js +1 -1
- package/dist/src/gateway/service.d.ts +1 -0
- package/dist/src/gateway/service.js +18 -4
- package/dist/src/gateway/session-context-summary.js +1 -1
- package/dist/src/personal-agent/capability-service.d.ts +2 -0
- package/dist/src/personal-agent/capability-service.js +29 -16
- package/dist/src/personal-agent/policy.js +2 -7
- package/dist/src/personal-agent/proactivity/service.js +1 -1
- package/dist/src/personal-agent/prompt-context.d.ts +1 -4
- package/dist/src/personal-agent/prompt-context.js +5 -35
- package/dist/src/personal-agent/prompts.js +32 -8
- package/dist/src/personal-agent/reply-composer.js +1 -1
- package/dist/src/personal-agent/request-delivery.js +1 -1
- package/dist/src/personal-agent/request-repository.d.ts +3 -2
- package/dist/src/personal-agent/request-repository.js +4 -4
- package/dist/src/personal-agent/request-service.d.ts +2 -1
- package/dist/src/personal-agent/request-service.js +161 -13
- package/dist/src/personal-agent/specialist-capabilities.js +6 -0
- package/dist/src/personal-agent/task-cancel.d.ts +7 -0
- package/dist/src/personal-agent/task-cancel.js +76 -0
- package/dist/src/session/client-history.js +1 -1
- package/dist/src/session/index.js +1 -1
- package/dist/src/storage/sqlite/migrations/247_agent_selection_records.sql +32 -0
- package/dist/src/storage/sqlite/migrations/248_next_turn_suggestions.sql +20 -0
- package/dist/src/storage/sqlite/migrations/249_task_allocations.sql +17 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/next-turn-suggestion-repository.d.ts +4 -0
- package/dist/src/storage/sqlite/next-turn-suggestion-repository.js +30 -0
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tasks/capabilities/read.js +1 -1
- package/dist/src/tasks/capabilities/relations.d.ts +38 -2
- package/dist/src/tasks/capabilities/write.d.ts +42 -0
- package/dist/src/tasks/capabilities/write.js +9 -7
- package/dist/src/tasks/index.js +1 -1
- package/dist/src/tasks/task-allocation-repository.d.ts +25 -0
- package/dist/src/tasks/task-allocation-repository.js +82 -0
- package/dist/src/tasks/task-allocation-service.d.ts +39 -0
- package/dist/src/tasks/task-allocation-service.js +310 -0
- package/dist/src/tasks/task-application-service.js +44 -1
- package/dist/src/tasks/task-context-assembler.js +1 -1
- package/dist/src/tasks/task-main-update-delivery.js +2 -0
- package/dist/src/tasks/task-origin-repository.d.ts +2 -1
- package/dist/src/tasks/task-origin-repository.js +9 -5
- package/dist/src/tasks/task-read-model-projector.d.ts +2 -1
- package/dist/src/tasks/task-read-model-projector.js +21 -8
- package/dist/src/tasks/task-result-delivery-service.js +2 -2
- package/dist/src/tasks/task-run-coordinator.js +9 -1
- package/dist/src/tasks/task-run-dispatcher.d.ts +1 -1
- package/dist/src/tasks/task-run-dispatcher.js +5 -4
- package/package.json +6 -5
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CzriaMLA.js +0 -1
- package/dist/gateway/static/root/assets/agents-Dwjb-Pmc.js +0 -66
- package/dist/gateway/static/root/assets/automations-workspace-DGZAGTNe.js +0 -6
- package/dist/gateway/static/root/assets/block-editor-CeytAoXT.js +0 -159
- package/dist/gateway/static/root/assets/browser-automations-page-Ko-r320n.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-DPICvQED.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-page-Crb7Oeay.js +0 -2
- package/dist/gateway/static/root/assets/connectors-page-ok0F1o0p.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-C00mHAYU.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-U3lzqE82.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-Bc9HD3uV.js +0 -1
- package/dist/gateway/static/root/assets/home-page-hHgcCF-P.js +0 -2
- package/dist/gateway/static/root/assets/index-BnHaXfFv.css +0 -1
- package/dist/gateway/static/root/assets/index-odJjleQM.js +0 -255
- package/dist/gateway/static/root/assets/markdown-view-ByJbFign.css +0 -1
- package/dist/gateway/static/root/assets/markdown-view-roJ1FcXL.js +0 -66
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-BUSGX-3o.js +0 -1
- package/dist/gateway/static/root/assets/messages-DwOSR5ue.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-cache-BFSZUHQI.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-D2qf-sDw.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-DNvVJasv.js +0 -8
- package/dist/gateway/static/root/assets/page-tabs-BLGO2VIm.js +0 -1
- package/dist/gateway/static/root/assets/personal-page-Bd4xN8C7.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-DJC5iE_A.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-sJTykTVP.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-B-wgtLR4.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CA6YH-tX.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-CUmMrn5b.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-BSQLmRXu.js +0 -1
- package/dist/gateway/static/root/assets/tasks-DwKXgZ-I.js +0 -1
- 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 =
|
|
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 ??
|
|
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 ??
|
|
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 =
|
|
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 };
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
}
|
|
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
|
}
|
package/dist/src/tasks/index.js
CHANGED
|
@@ -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 {};
|