@qwen-code/qwen-code 0.21.9 → 0.21.10
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/bundled/qc-helper/docs/configuration/settings.md +1 -1
- package/bundled/qc-helper/docs/features/status-line.md +13 -13
- package/bundled/qc-helper/docs/integration-jetbrains.md +1 -0
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +14 -10
- package/bundled/review/SKILL.md +2 -2
- package/chunks/{MaxSizedBox-6BZANW7X.js → MaxSizedBox-FKXYULMW.js} +5 -5
- package/chunks/{StandaloneSessionPicker-VDC5KE7T.js → StandaloneSessionPicker-OQS3M7AY.js} +19 -19
- package/chunks/{acp-startup-profiler-B5BYAMYQ.js → acp-startup-profiler-VNTFWYAC.js} +2 -2
- package/chunks/{acpAgent-F2NSBCUF.js → acpAgent-AGS6HLQQ.js} +95 -43
- package/chunks/{agent-VOHJOEBB.js → agent-4NCVO27U.js} +5 -5
- package/chunks/{agent-headless-J5NFOPHP.js → agent-headless-HYEHZFH6.js} +5 -5
- package/chunks/{anthropicContentGenerator-SSFE2753.js → anthropicContentGenerator-D3Y4RFT4.js} +1 -1
- package/chunks/{bridge-NQIZZLAS.js → bridge-FHINXZMN.js} +8 -8
- package/chunks/{channel-settings-store-VIY2OENO.js → channel-settings-store-OXYG5S5X.js} +11 -11
- package/chunks/{channel-worker-group-MSHT6CWR.js → channel-worker-group-WQP4RCDO.js} +3 -3
- package/chunks/{channel-worker-manager-XXD3GDSK.js → channel-worker-manager-MRDFAKIM.js} +3 -3
- package/chunks/{chunk-7AEPJGL4.js → chunk-26CXSA6V.js} +1 -1
- package/chunks/{chunk-KTQGGPGV.js → chunk-2PLNY5TN.js} +4 -4
- package/chunks/{chunk-G2TX5ZXC.js → chunk-47PEPJO7.js} +3 -3
- package/chunks/{chunk-3XVDTHBJ.js → chunk-4MKXUHXY.js} +2 -2
- package/chunks/{chunk-D7BXVKSF.js → chunk-4WL6SY4F.js} +1 -1
- package/chunks/{chunk-P3RBMQ4P.js → chunk-5MZCSWI4.js} +4 -4
- package/chunks/{chunk-LP2QGNSP.js → chunk-624NHDGB.js} +3 -1
- package/chunks/{chunk-FBMCDU63.js → chunk-6LP743KE.js} +4 -4
- package/chunks/{chunk-II6G3EY6.js → chunk-7GTMV7UE.js} +339 -213
- package/chunks/{chunk-4XQNB3KN.js → chunk-A7XMDZRI.js} +2 -2
- package/chunks/{chunk-PNBBJOCP.js → chunk-AAE6SR4Q.js} +1 -1
- package/chunks/{chunk-JUWS2Z5K.js → chunk-ABVRJU3D.js} +5 -5
- package/chunks/{chunk-IOEZE2YT.js → chunk-AEL7KN2O.js} +1 -1
- package/chunks/{chunk-OGDIJKHK.js → chunk-AQAJJMRR.js} +1 -1
- package/chunks/{chunk-AKJQSWV4.js → chunk-BSI645OU.js} +2 -2
- package/chunks/{chunk-FCLHHEUK.js → chunk-D27I6YJT.js} +11 -11
- package/chunks/{chunk-P2FK2HBV.js → chunk-DCZEPFB4.js} +2 -2
- package/chunks/{chunk-GAKGOXTC.js → chunk-EBZ6BJTF.js} +1 -1
- package/chunks/{chunk-KSAFZ5TA.js → chunk-ECWR5LQR.js} +1 -1
- package/chunks/{chunk-XX7QFP34.js → chunk-EI3NWELG.js} +116 -62
- package/chunks/{chunk-P4ZEZSJZ.js → chunk-F24A2JBM.js} +260 -65
- package/chunks/{chunk-DH5YXSIF.js → chunk-F6WDTQ3M.js} +2 -2
- package/chunks/{chunk-ZOSTTOUJ.js → chunk-GWVUR3QZ.js} +1 -1
- package/chunks/{chunk-BZP4QPNK.js → chunk-IBUGFUXC.js} +9 -9
- package/chunks/{chunk-SCAZZ3Q4.js → chunk-IRZ2ZH72.js} +4 -4
- package/chunks/{chunk-OGNFHGIG.js → chunk-IWTMYQ32.js} +4 -4
- package/chunks/{chunk-CG3WBKJK.js → chunk-JT7XS4YW.js} +1 -1
- package/chunks/{chunk-MTCYGTWH.js → chunk-KID7K6H2.js} +4 -4
- package/chunks/{chunk-DGEIYUC3.js → chunk-KM73TBQ4.js} +7 -1
- package/chunks/{chunk-TZ6KJ44L.js → chunk-KONVMRK7.js} +1 -1
- package/chunks/{scheduler-YNQNOU2E.js → chunk-KZ22NXBY.js} +238 -110
- package/chunks/{chunk-RBHQXGDK.js → chunk-LLCWZQCU.js} +1 -1
- package/chunks/{chunk-UJUM2SRN.js → chunk-MIKXJYZB.js} +27 -26
- package/chunks/{chunk-THIKWITR.js → chunk-NDU63YLI.js} +2 -2
- package/chunks/{chunk-ATMO54WE.js → chunk-NEOXOWYH.js} +2 -2
- package/chunks/{chunk-QSNSL4R4.js → chunk-NRLFZWCT.js} +1 -1
- package/chunks/{chunk-TQCYNLNJ.js → chunk-NV65ZUVM.js} +1 -1
- package/chunks/{chunk-HZGBKOX3.js → chunk-O3EU6GMH.js} +2 -2
- package/chunks/{chunk-46YJDYCU.js → chunk-OCSFNUU4.js} +7 -7
- package/chunks/{chunk-T5RLUXWJ.js → chunk-OJUQF2PL.js} +2 -2
- package/chunks/{chunk-ZTQSOV56.js → chunk-OONWZLFK.js} +3 -3
- package/chunks/{chunk-23VQTELM.js → chunk-P3BJLFSZ.js} +1 -1
- package/chunks/{chunk-BIRWP6LU.js → chunk-Q3AL4JQ3.js} +1 -1
- package/chunks/{chunk-CMOBWHWW.js → chunk-QBJYSIQ4.js} +1 -1
- package/chunks/{chunk-XTY5DN4Y.js → chunk-QG3FFJYU.js} +1 -1
- package/chunks/{chunk-W3FSZSF2.js → chunk-QGNOFE5E.js} +1 -1
- package/chunks/{chunk-3WDYBTTI.js → chunk-QJMOAMXT.js} +4 -4
- package/chunks/{chunk-67N6HB5H.js → chunk-QUI267ZP.js} +1 -0
- package/chunks/{chunk-K4ADGWHU.js → chunk-TRRF5BSP.js} +1 -1
- package/chunks/{chunk-7GOYZQPR.js → chunk-UBX6NL47.js} +3 -3
- package/chunks/{chunk-WP5VOXF7.js → chunk-UEOKWYGY.js} +1 -1
- package/chunks/{chunk-HADWBW5R.js → chunk-UMD7WQTR.js} +4 -4
- package/chunks/{chunk-RVSTTOJ4.js → chunk-URKIBIFC.js} +2 -2
- package/chunks/{chunk-7S4JBJLU.js → chunk-VSFKIRRW.js} +3 -3
- package/chunks/{chunk-ZBXGWQ4S.js → chunk-VWKER4ZH.js} +2 -2
- package/chunks/{chunk-M2PNLYGY.js → chunk-W5UC37EE.js} +2 -0
- package/chunks/{chunk-BT6GQIEJ.js → chunk-X2UOOG5V.js} +1 -1
- package/chunks/{chunk-WGK4TSB7.js → chunk-XVHYA33G.js} +3 -3
- package/chunks/{chunk-BAMN6XSD.js → chunk-Y3OVRWRY.js} +1 -1
- package/chunks/{chunk-PVOGHGSF.js → chunk-Y4R47ZUH.js} +6 -6
- package/chunks/{chunk-LZZLUCRS.js → chunk-YF5MALI4.js} +3 -3
- package/chunks/{chunk-5RBDAGC6.js → chunk-YWPSGJFI.js} +2 -2
- package/chunks/{chunk-MHP476D3.js → chunk-Z4JX4NSH.js} +52 -39
- package/chunks/{chunk-T6HEQR2Q.js → chunk-ZJ4W6SUY.js} +1 -1
- package/chunks/{chunk-UYAUA63Q.js → chunk-ZRBMO3C7.js} +1 -1
- package/chunks/{chunk-KTKYGS2P.js → chunk-ZZCWJWTF.js} +8 -1
- package/chunks/{computer-use-PMZ7ICGY.js → computer-use-WQFK33Z3.js} +5 -5
- package/chunks/{contextCommand-GEZU7YHE.js → contextCommand-7EOZND7C.js} +7 -7
- package/chunks/{core-runtime-HRJI2MN6.js → core-runtime-FGMQRM6E.js} +5 -5
- package/chunks/{create-sub-session-VBNVI4YU.js → create-sub-session-QM2K5HLZ.js} +6 -6
- package/chunks/{daemon-POSQPD3G.js → daemon-GWD7BT6E.js} +46 -5
- package/chunks/{daemon-status-provider-N4CRQKFI.js → daemon-status-provider-L3J6GKCT.js} +12 -12
- package/chunks/{daemon-trust-policy-BHO3JUHM.js → daemon-trust-policy-4PHPY23S.js} +11 -11
- package/chunks/{daemon-trust-policy-monitor-YEKJ2726.js → daemon-trust-policy-monitor-6UKEABN5.js} +11 -11
- package/chunks/{deferred-core-runtime-SH57E3J3.js → deferred-core-runtime-67GJXHXS.js} +5 -5
- package/chunks/{earlyInputCapture-B2JJ2HME.js → earlyInputCapture-IWMYR6OB.js} +5 -5
- package/chunks/{edit-7FTXENAN.js → edit-ZFGROCAF.js} +5 -5
- package/chunks/{enter-worktree-JPHV2PBG.js → enter-worktree-TZZZCDM5.js} +5 -5
- package/chunks/{enterPlanMode-CGBJ3AHJ.js → enterPlanMode-U77BI3R6.js} +5 -5
- package/chunks/{environment-LXASZAHD.js → environment-HC37DS2I.js} +7 -7
- package/chunks/{errors-XIGVT2AD.js → errors-6AG54JPD.js} +7 -7
- package/chunks/{exit-worktree-DKSGXW65.js → exit-worktree-UYYWFPNK.js} +5 -5
- package/chunks/{exitPlanMode-THFL2HYN.js → exitPlanMode-RWJR2KGB.js} +5 -5
- package/chunks/{fast-path-4NXAT5UL.js → fast-path-F5FSZ3O7.js} +2 -2
- package/chunks/{gemini-B3N6FACU.js → gemini-NKQHYM36.js} +76 -52
- package/chunks/{geminiContentGenerator-YYFE2HIE.js → geminiContentGenerator-HCWZOUX3.js} +1 -1
- package/chunks/{glob-BPHSCFJP.js → glob-3PDXKBAO.js} +5 -5
- package/chunks/{goal-tools-PXWN5VK3.js → goal-tools-SWNB6GP4.js} +1 -1
- package/chunks/{grep-ROZIRFLU.js → grep-5HZKZYVD.js} +5 -5
- package/chunks/{handleAutoUpdate-WV6SPZQB.js → handleAutoUpdate-NHFSGYTF.js} +9 -9
- package/chunks/{i18n-YWJWPQKD.js → i18n-Q27KKNDL.js} +6 -6
- package/chunks/{image-gen-SISRZ6FS.js → image-gen-2Z2RJ6W7.js} +1 -1
- package/chunks/{initializer-66OAD6GO.js → initializer-Y5DJLT43.js} +11 -11
- package/chunks/{installationInfo-3YUGIP36.js → installationInfo-XXB75T7O.js} +6 -6
- package/chunks/{list-VEYR66XB.js → list-YHNQ32CS.js} +14 -14
- package/chunks/{loadedSettingsAdapter-V2JCPCYD.js → loadedSettingsAdapter-GHUQK7H4.js} +11 -11
- package/chunks/{loggingContentGenerator-RBLNDREC.js → loggingContentGenerator-6NTFBM7Q.js} +1 -1
- package/chunks/{managed-npm-update-C5ID5R4R.js → managed-npm-update-SPHYQUWZ.js} +6 -6
- package/chunks/{mcp-OZ54NZJQ.js → mcp-EA3KO6FS.js} +11 -11
- package/chunks/{monitor-7Y4TVFTK.js → monitor-ZBBPAA54.js} +5 -5
- package/chunks/{nonInteractiveCli-QEK4LHAC.js → nonInteractiveCli-NNOR56HU.js} +35 -35
- package/chunks/{notebook-edit-OG35EBGY.js → notebook-edit-5W3FW7Z2.js} +5 -5
- package/chunks/{openaiContentGenerator-443BNRPJ.js → openaiContentGenerator-TQANPEVZ.js} +1 -1
- package/chunks/{pidfile-ZK4OLRZA.js → pidfile-EQOBLH4E.js} +5 -5
- package/chunks/{processUtils-4YGB4RUZ.js → processUtils-7XQG7EHS.js} +2 -2
- package/chunks/{qwenContentGenerator-D5C2LCSZ.js → qwenContentGenerator-BKCPHHXU.js} +5 -5
- package/chunks/{qwenOAuth2-Z4YQBMYN.js → qwenOAuth2-BJ6PQKE6.js} +1 -1
- package/chunks/{read-file-EXTJLWMU.js → read-file-KKTXGIZD.js} +1 -1
- package/chunks/{resumeHistoryUtils-UPCGRJUL.js → resumeHistoryUtils-6N6XGJJW.js} +8 -8
- package/chunks/{ripGrep-QBVIRCU4.js → ripGrep-SJVAAYDV.js} +5 -5
- package/chunks/{run-qwen-serve-ZYGJNE3E.js → run-qwen-serve-BCKBCAMX.js} +34 -34
- package/chunks/{runtime-BZZ4LWCP.js → runtime-E2437YKL.js} +12 -12
- package/chunks/scheduler-K3D5Z655.js +108 -0
- package/chunks/{serve-LJHAXDCH.js → serve-IH4XR5IL.js} +11 -11
- package/chunks/{server-ADMLELR6.js → server-UD6INW7J.js} +616 -245
- package/chunks/{session-YKZXFFTM.js → session-GR4ZEVW4.js} +43 -44
- package/chunks/{settings-EQBUAQ7Y.js → settings-5O24D3OJ.js} +10 -10
- package/chunks/{shell-3QZOJGTT.js → shell-UTLWLG5G.js} +5 -5
- package/chunks/{skill-UWSSMXE7.js → skill-QQAZL4VO.js} +1 -1
- package/chunks/{skill-settings-T6MLB7NU.js → skill-settings-P3YHJVBZ.js} +10 -10
- package/chunks/{spawnChannel-VS7ZFUFP.js → spawnChannel-UAQMH6Y6.js} +5 -5
- package/chunks/{standalone-update-2W26SRRO.js → standalone-update-QP742MGP.js} +7 -7
- package/chunks/{startInteractiveUI-CVS7K3D6.js → startInteractiveUI-YCS6AEPN.js} +1209 -926
- package/chunks/{team-create-4WFTNNUL.js → team-create-WFH7OCDQ.js} +5 -5
- package/chunks/{team-plan-approval-DBYI33S3.js → team-plan-approval-EGTT53MV.js} +5 -5
- package/chunks/{terminal-image-renderer-S5WPPQKH.js → terminal-image-renderer-BWRESAQ7.js} +5 -5
- package/chunks/{theme-manager-LI2RIOVR.js → theme-manager-ZNDGAHJN.js} +5 -5
- package/chunks/{tool-search-4773EUQ4.js → tool-search-TI5PTIBF.js} +1 -1
- package/chunks/{total-session-admission-PAY5CH2Z.js → total-session-admission-66UDSOHO.js} +9 -9
- package/chunks/{trustedFolders-FRSLE674.js → trustedFolders-4KYHA4IG.js} +6 -6
- package/chunks/{update-relaunch-ZSFQTU6M.js → update-relaunch-WB6LGIF2.js} +5 -5
- package/chunks/{updateCheck-AXWSO7KA.js → updateCheck-LOS5GYFC.js} +8 -8
- package/chunks/{useAutoAcceptIndicator-VHLXIA7U.js → useAutoAcceptIndicator-MHAPY52L.js} +11 -11
- package/chunks/{validateNonInterActiveAuth-PDJECMFU.js → validateNonInterActiveAuth-QV22HNQU.js} +32 -32
- package/chunks/{version-RBN764QS.js → version-DALWZHKQ.js} +1 -1
- package/chunks/{web-fetch-7BJK42AF.js → web-fetch-JMJVMYFE.js} +1 -1
- package/chunks/{web-search-L2CILQXV.js → web-search-DNDUIPU5.js} +2 -2
- package/chunks/{workflow-5VH2R74I.js → workflow-JGNN64PM.js} +6 -6
- package/chunks/{workspace-providers-status-OZTQ6JFH.js → workspace-providers-status-K22B3Z6B.js} +13 -13
- package/chunks/{workspace-registration-store-IX5RJQS5.js → workspace-registration-store-LRJG7QA4.js} +1 -1
- package/chunks/{workspace-registry-73N4BGG4.js → workspace-registry-KVXIFM36.js} +9 -9
- package/chunks/{workspace-service-I5RUPSNV.js → workspace-service-PO4AAKKT.js} +15 -15
- package/chunks/{workspace-skills-status-DMK6VYDO.js → workspace-skills-status-DDYCBVSH.js} +11 -11
- package/chunks/{workspace-trust-reconciler-QX4RL3TC.js → workspace-trust-reconciler-DOZPCVHG.js} +15 -15
- package/chunks/{write-file-UGDD5UTS.js → write-file-TT6MWIKC.js} +5 -5
- package/chunks/{zoom-image-ZAHEO3YP.js → zoom-image-CNC77ZMA.js} +1 -1
- package/cli.js +13 -13
- package/package.json +3 -3
- package/web-shell/assets/{arc-CHY4saMJ.js → arc-CDk0d60K.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-Bu6CwvHj.js → architectureDiagram-3BPJPVTR-h-W3I2lP.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-XGt6iGf_.js → blockDiagram-GPEHLZMM-D1pvSmZg.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CBbYl19W.js → c4Diagram-AAUBKEIU-ByAm5ZNf.js} +1 -1
- package/web-shell/assets/channel-DPFUV4oi.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BEhmVrdx.js → chunk-2J33WTMH-VrGPPOGV.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-fQLyE0Bg.js → chunk-4BX2VUAB-B7hTowgG.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-yGdtyx4a.js → chunk-55IACEB6-j1Fq8DpE.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DYbX2GLo.js → chunk-727SXJPM-UjABYpF2.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DyKTEsYn.js → chunk-AQP2D5EJ-D4uBItrs.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-D8Uy_GzX.js → chunk-FMBD7UC4-DeFbKlb8.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-C8wNR2K7.js → chunk-ND2GUHAM-rQJ8TIgT.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BnybNxnt.js → chunk-QZHKN3VN-DAGcRxvq.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CLm0hVvw.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CLm0hVvw.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-jq4uiFRp.js → cose-bilkent-S5V4N54A-MaE7MJSt.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-Bs7oye1U.js → dagre-BM42HDAG-DzijYGSb.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BHGGJNyM.js → diagram-2AECGRRQ-WdbG7WnX.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BJezVLGT.js → diagram-5GNKFQAL-NYutsBnw.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-5JzQN_rL.js → diagram-KO2AKTUF-Dqg0eBY0.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BlPYOgY9.js → diagram-LMA3HP47-C7vRP2Lb.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CtMHEaFK.js → diagram-OG6HWLK6-B2sEPpPt.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-CRNdq2AB.js → erDiagram-TEJ5UH35-a4zIbzm8.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-De1WwLzu.js → flowDiagram-I6XJVG4X-BK9y89ya.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-YbWfL5Zn.js → ganttDiagram-6RSMTGT7-wUQTSNvV.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DzCN8bmd.js → gitGraphDiagram-PVQCEYII-Dnzt4SAi.js} +1 -1
- package/web-shell/assets/{index-CocPvF9Q.js → index-BA3wUcKL.js} +1 -1
- package/web-shell/assets/{index-BDOGGGaN.css → index-BjC3yjjL.css} +2 -2
- package/web-shell/assets/index-QzFq6w7o.js +1775 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DLHoopnE.js → infoDiagram-5YYISTIA-DcaoToij.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-XnbU04SS.js → ishikawaDiagram-YF4QCWOH-DzduqhP2.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CipPyEeJ.js → journeyDiagram-JHISSGLW-BvviZR_O.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DrSeyE5d.js → kanban-definition-UN3LZRKU-Efm2JxY3.js} +1 -1
- package/web-shell/assets/{linear-LrBKnAo_.js → linear-DtY3IbOs.js} +1 -1
- package/web-shell/assets/{mermaid.core-C3U9UVmf.js → mermaid.core-PzpFqoMe.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-DqRWgC9H.js → mindmap-definition-RKZ34NQL-BLlTkHS0.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-BNXY5p6H.js → pieDiagram-4H26LBE5-D-mKF-jE.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Ccj9QzE4.js → quadrantDiagram-W4KKPZXB-DYCzslGm.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CjPM2_gx.js → requirementDiagram-4Y6WPE33-Dfpxlk7R.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C0RsvKbj.js → sankeyDiagram-5OEKKPKP-D5cRaaxh.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-ClN1P5z7.js → sequenceDiagram-3UESZ5HK-s04DReiS.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-By0eiB2Y.js → stateDiagram-AJRCARHV-01UNFgnb.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DXb5olqv.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-g_iaSQgv.js → timeline-definition-PNZ67QCA-DX8_wZBC.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-y9ZqJ-TD.js → vennDiagram-CIIHVFJN-BK0FlBme.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-BVVfaxpF.js → wardley-L42UT6IY-DkPc9UlD.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D3ooZKZT.js → wardleyDiagram-YWT4CUSO-DNKkpDAo.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-6GXrY6M1.js → xychartDiagram-2RQKCTM6-CiPwg8QG.js} +1 -1
- package/web-shell/index.html +2 -2
- package/web-shell/assets/channel-B40srHOa.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +0 -1
- package/web-shell/assets/index-DSH2KrMc.js +0 -1771
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +0 -1
|
@@ -50,6 +50,7 @@ import {
|
|
|
50
50
|
LOAD_REPLAY_PAGE_SIZE_META_KEY,
|
|
51
51
|
LOAD_REPLAY_VERSION,
|
|
52
52
|
MID_TURN_QUEUE_DRAIN_METHOD,
|
|
53
|
+
MID_TURN_RECONCILIATION_RING_SIZE,
|
|
53
54
|
PROMPT_CANCEL_METHOD,
|
|
54
55
|
REQUESTED_SESSION_ID_META_KEY,
|
|
55
56
|
TODO_STOP_GUARD_CONTINUATION_CLAIM_METHOD,
|
|
@@ -57,7 +58,7 @@ import {
|
|
|
57
58
|
WORKTREE_MCP_DEFER_META_KEY,
|
|
58
59
|
clampActiveWorkIntervalMs,
|
|
59
60
|
isValidTrustedModelPrompt
|
|
60
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-W5UC37EE.js";
|
|
61
62
|
import {
|
|
62
63
|
BranchWhilePromptActiveError,
|
|
63
64
|
BridgeChannelQuarantinedError,
|
|
@@ -79,7 +80,7 @@ import {
|
|
|
79
80
|
SessionShellDisabledError,
|
|
80
81
|
WorkspaceMismatchError,
|
|
81
82
|
isNotCurrentlyGeneratingCancelError
|
|
82
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-624NHDGB.js";
|
|
83
84
|
import {
|
|
84
85
|
canonicalizeWorkspace,
|
|
85
86
|
translateAndCheckAbsoluteWorkspacePath
|
|
@@ -113,7 +114,7 @@ import {
|
|
|
113
114
|
metadataBudgetBytes,
|
|
114
115
|
normalizeSnapshotPayload,
|
|
115
116
|
stableSessionArtifactId
|
|
116
|
-
} from "./chunk-
|
|
117
|
+
} from "./chunk-EI3NWELG.js";
|
|
117
118
|
import {
|
|
118
119
|
DAEMON_TRACEPARENT_META_KEY,
|
|
119
120
|
DAEMON_TRACESTATE_META_KEY
|
|
@@ -2414,34 +2415,36 @@ var BridgeClient = class {
|
|
|
2414
2415
|
const entry = this.resolveEntry(sessionId);
|
|
2415
2416
|
if (!entry) return { messages: [], hasQueuedPrompt: false };
|
|
2416
2417
|
const drained = entry.midTurnMessageQueue.splice(0);
|
|
2417
|
-
const messages = drained.map((item) => item.text);
|
|
2418
|
-
const hasQueuedPrompt = entry.pendingPromptList.some(
|
|
2419
|
-
(prompt) => prompt.state === "queued" && !prompt.abortController.signal.aborted
|
|
2420
|
-
);
|
|
2421
2418
|
if (drained.length > 0) {
|
|
2422
|
-
const byOriginator = /* @__PURE__ */ new Map();
|
|
2423
2419
|
for (const item of drained) {
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
const published = entry.events.publish({
|
|
2431
|
-
type: MID_TURN_MESSAGE_INJECTED_EVENT,
|
|
2432
|
-
...entry.activePromptId ? { promptId: entry.activePromptId } : {},
|
|
2433
|
-
data: {
|
|
2434
|
-
sessionId: entry.sessionId,
|
|
2435
|
-
messages: texts,
|
|
2436
|
-
messageIds: items.map((item) => item.messageId)
|
|
2437
|
-
},
|
|
2438
|
-
...originatorClientId ? { originatorClientId } : {}
|
|
2439
|
-
});
|
|
2440
|
-
writeStderrLine(
|
|
2441
|
-
published ? `[mid-turn] session=${entry.sessionId} drained=${texts.length}${originatorClientId ? ` originator=${originatorClientId}` : ""} injected into running turn` : `[mid-turn] session=${entry.sessionId} drained=${texts.length} echo frame dropped (bus closed); browser may resend next turn`
|
|
2420
|
+
entry.settledMidTurnMessageIds.push(item.messageId);
|
|
2421
|
+
}
|
|
2422
|
+
if (entry.settledMidTurnMessageIds.length > MID_TURN_RECONCILIATION_RING_SIZE) {
|
|
2423
|
+
entry.settledMidTurnMessageIds.splice(
|
|
2424
|
+
0,
|
|
2425
|
+
entry.settledMidTurnMessageIds.length - MID_TURN_RECONCILIATION_RING_SIZE
|
|
2442
2426
|
);
|
|
2443
2427
|
}
|
|
2444
2428
|
}
|
|
2429
|
+
const echoed = drained.filter((item) => !item.queueOnly);
|
|
2430
|
+
const messages = drained.map((item) => item.text);
|
|
2431
|
+
const hasQueuedPrompt = entry.pendingPromptList.some(
|
|
2432
|
+
(prompt) => prompt.state === "queued" && !prompt.abortController.signal.aborted
|
|
2433
|
+
);
|
|
2434
|
+
if (echoed.length > 0) {
|
|
2435
|
+
const published = entry.events.publish({
|
|
2436
|
+
type: MID_TURN_MESSAGE_INJECTED_EVENT,
|
|
2437
|
+
...entry.activePromptId ? { promptId: entry.activePromptId } : {},
|
|
2438
|
+
data: {
|
|
2439
|
+
sessionId: entry.sessionId,
|
|
2440
|
+
messages: echoed.map((item) => item.text),
|
|
2441
|
+
messageIds: echoed.map((item) => item.messageId)
|
|
2442
|
+
}
|
|
2443
|
+
});
|
|
2444
|
+
writeStderrLine(
|
|
2445
|
+
published ? `[mid-turn] session=${entry.sessionId} drained=${messages.length} echoed=${echoed.length} injected into running turn` : `[mid-turn] session=${entry.sessionId} drained=${messages.length} echoed=${echoed.length} echo frame dropped (bus closed); reconciliation required`
|
|
2446
|
+
);
|
|
2447
|
+
}
|
|
2445
2448
|
return { messages, hasQueuedPrompt };
|
|
2446
2449
|
}
|
|
2447
2450
|
async handleExternalToolGuardPrepare(params) {
|
|
@@ -6385,6 +6388,7 @@ var SESSION_GENERATION_TIMEOUT_MS = 65e3;
|
|
|
6385
6388
|
var GENERATION_STREAM_QUEUE_CAPACITY = 128;
|
|
6386
6389
|
var SESSION_BTW_TIMEOUT_MS = 6e4;
|
|
6387
6390
|
var SESSION_TRANSCRIPT_TIMEOUT_MS = 6e4;
|
|
6391
|
+
var MAX_EMPTY_TRANSCRIPT_PAGES = 20;
|
|
6388
6392
|
var SHELL_COMMAND_TIMEOUT_MS = 12e4;
|
|
6389
6393
|
var MAX_SHELL_OUTPUT_FOR_HISTORY = 1e4;
|
|
6390
6394
|
var MAX_MID_TURN_QUEUE_DEPTH = 20;
|
|
@@ -8236,6 +8240,8 @@ function createAcpSessionBridge(opts) {
|
|
|
8236
8240
|
pendingAgentNotificationCount: 0,
|
|
8237
8241
|
pendingPromptList: [],
|
|
8238
8242
|
midTurnMessageQueue: [],
|
|
8243
|
+
settledMidTurnMessageIds: [],
|
|
8244
|
+
promotedMidTurnMessageIds: [],
|
|
8239
8245
|
modelChangeQueue: Promise.resolve(),
|
|
8240
8246
|
approvalModeQueue: Promise.resolve(),
|
|
8241
8247
|
modelPublishGeneration: 0,
|
|
@@ -8486,11 +8492,26 @@ function createAcpSessionBridge(opts) {
|
|
|
8486
8492
|
for (let attempt = 0; attempt < 2; attempt++) {
|
|
8487
8493
|
try {
|
|
8488
8494
|
const lastEventId = entry.events.lastEventId;
|
|
8489
|
-
const
|
|
8490
|
-
|
|
8491
|
-
|
|
8492
|
-
|
|
8493
|
-
|
|
8495
|
+
const seenCursors = /* @__PURE__ */ new Set();
|
|
8496
|
+
let emptyPageCount = 0;
|
|
8497
|
+
let cursor;
|
|
8498
|
+
let page;
|
|
8499
|
+
do {
|
|
8500
|
+
page = await requestSessionTranscriptPage({
|
|
8501
|
+
sessionId: entry.sessionId,
|
|
8502
|
+
...cursor ? { cursor } : { direction: "backward" },
|
|
8503
|
+
limit: historyPageSize
|
|
8504
|
+
});
|
|
8505
|
+
const nextCursor = page.nextCursor;
|
|
8506
|
+
if (page.events.length === 0 && page.hasMore && (nextCursor === void 0 || seenCursors.has(nextCursor))) {
|
|
8507
|
+
throw new Error("Transcript cursor did not advance");
|
|
8508
|
+
}
|
|
8509
|
+
if (page.events.length === 0 && page.hasMore && ++emptyPageCount >= MAX_EMPTY_TRANSCRIPT_PAGES) {
|
|
8510
|
+
throw new Error("Transcript empty-page limit exceeded");
|
|
8511
|
+
}
|
|
8512
|
+
cursor = nextCursor;
|
|
8513
|
+
if (cursor !== void 0) seenCursors.add(cursor);
|
|
8514
|
+
} while (page.events.length === 0 && page.hasMore && cursor !== void 0 && page.partial !== true && page.replayError === void 0);
|
|
8494
8515
|
if (byId.get(entry.sessionId) === entry && !entry.promptActive && entry.events.lastEventId === lastEventId) {
|
|
8495
8516
|
return {
|
|
8496
8517
|
compactedReplay: page.events,
|
|
@@ -8565,14 +8586,22 @@ function createAcpSessionBridge(opts) {
|
|
|
8565
8586
|
if (isClosingOrAuthorizingClose(existing)) {
|
|
8566
8587
|
throw new SessionNotFoundError(
|
|
8567
8588
|
req.sessionId,
|
|
8568
|
-
"The session is closing; retry after close completes"
|
|
8589
|
+
"The session is closing; retry after close completes",
|
|
8590
|
+
"session_closing"
|
|
8569
8591
|
);
|
|
8570
8592
|
}
|
|
8571
8593
|
const replayFields = action === "load" && req.historyPageSize !== void 0 ? await refreshedReplayFieldsFor(existing, req.historyPageSize) : replayFieldsFor(existing, action);
|
|
8572
8594
|
const historyAnchorRecordId = action === "load" ? await resolveHistoryAnchorRecordId(existing, replayFields) : void 0;
|
|
8573
|
-
if (byId.get(req.sessionId) !== existing
|
|
8595
|
+
if (byId.get(req.sessionId) !== existing) {
|
|
8574
8596
|
throw new SessionNotFoundError(req.sessionId);
|
|
8575
8597
|
}
|
|
8598
|
+
if (isClosingOrAuthorizingClose(existing)) {
|
|
8599
|
+
throw new SessionNotFoundError(
|
|
8600
|
+
req.sessionId,
|
|
8601
|
+
"The session is closing; retry after close completes",
|
|
8602
|
+
"session_closing"
|
|
8603
|
+
);
|
|
8604
|
+
}
|
|
8576
8605
|
existing.attachCount++;
|
|
8577
8606
|
const clientId = registerClient(existing, req.clientId);
|
|
8578
8607
|
recordAttachRef(existing, clientId);
|
|
@@ -8950,7 +8979,8 @@ function createAcpSessionBridge(opts) {
|
|
|
8950
8979
|
if (isClosingOrAuthorizingClose(racedEntry)) {
|
|
8951
8980
|
throw new SessionNotFoundError(
|
|
8952
8981
|
req.sessionId,
|
|
8953
|
-
"The session is closing; retry after close completes"
|
|
8982
|
+
"The session is closing; retry after close completes",
|
|
8983
|
+
"session_closing"
|
|
8954
8984
|
);
|
|
8955
8985
|
}
|
|
8956
8986
|
racedEntry.attachCount += 1 + coalesceState.count;
|
|
@@ -9138,7 +9168,8 @@ function createAcpSessionBridge(opts) {
|
|
|
9138
9168
|
if (entry.closing) {
|
|
9139
9169
|
throw new SessionNotFoundError(
|
|
9140
9170
|
sessionId,
|
|
9141
|
-
"The session is already closing"
|
|
9171
|
+
"The session is already closing",
|
|
9172
|
+
"session_closing"
|
|
9142
9173
|
);
|
|
9143
9174
|
}
|
|
9144
9175
|
let originatorClientId;
|
|
@@ -9243,6 +9274,36 @@ function createAcpSessionBridge(opts) {
|
|
|
9243
9274
|
}
|
|
9244
9275
|
__name(closeSessionImpl, "closeSessionImpl");
|
|
9245
9276
|
startSessionReaper();
|
|
9277
|
+
const rememberMidTurnId = /* @__PURE__ */ __name((ring, messageId) => {
|
|
9278
|
+
ring.push(messageId);
|
|
9279
|
+
if (ring.length > MID_TURN_RECONCILIATION_RING_SIZE) {
|
|
9280
|
+
ring.splice(0, ring.length - MID_TURN_RECONCILIATION_RING_SIZE);
|
|
9281
|
+
}
|
|
9282
|
+
}, "rememberMidTurnId");
|
|
9283
|
+
const promoteMidTurnMessage = /* @__PURE__ */ __name((entry, messageId, text, originatorClientId) => {
|
|
9284
|
+
void bridgeApi.sendPrompt(
|
|
9285
|
+
entry.sessionId,
|
|
9286
|
+
{
|
|
9287
|
+
sessionId: entry.sessionId,
|
|
9288
|
+
prompt: [{ type: "text", text }]
|
|
9289
|
+
},
|
|
9290
|
+
void 0,
|
|
9291
|
+
{
|
|
9292
|
+
promptId: messageId,
|
|
9293
|
+
promotedMidTurn: { originatorClientId },
|
|
9294
|
+
// Record the id only once sendPrompt owns its FIFO slot: an
|
|
9295
|
+
// admission failure must not land the id in the reconciliation
|
|
9296
|
+
// ring, or retries would be acked for a message that never runs.
|
|
9297
|
+
onPromptAdmitted: /* @__PURE__ */ __name(() => {
|
|
9298
|
+
rememberMidTurnId(entry.promotedMidTurnMessageIds, messageId);
|
|
9299
|
+
}, "onPromptAdmitted")
|
|
9300
|
+
}
|
|
9301
|
+
).catch((error) => {
|
|
9302
|
+
writeStderrLine(
|
|
9303
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} failed to run promoted message ${JSON.stringify(messageId)}: ${JSON.stringify(error instanceof Error ? error.message : String(error))}`
|
|
9304
|
+
);
|
|
9305
|
+
});
|
|
9306
|
+
}, "promoteMidTurnMessage");
|
|
9246
9307
|
const bridgeApi = {
|
|
9247
9308
|
setLiveScreenContextCaptureHandler(handler) {
|
|
9248
9309
|
liveScreenContextCaptureHandler = handler;
|
|
@@ -9389,7 +9450,8 @@ function createAcpSessionBridge(opts) {
|
|
|
9389
9450
|
if (isClosingOrAuthorizingClose(existing)) {
|
|
9390
9451
|
throw new SessionNotFoundError(
|
|
9391
9452
|
existing.sessionId,
|
|
9392
|
-
"The session is closing; retry after close completes"
|
|
9453
|
+
"The session is closing; retry after close completes",
|
|
9454
|
+
"session_closing"
|
|
9393
9455
|
);
|
|
9394
9456
|
}
|
|
9395
9457
|
existing.attachCount++;
|
|
@@ -9549,14 +9611,14 @@ function createAcpSessionBridge(opts) {
|
|
|
9549
9611
|
return Promise.reject(
|
|
9550
9612
|
new SessionNotFoundError(
|
|
9551
9613
|
sessionId,
|
|
9552
|
-
"The session is closing; retry after close completes"
|
|
9614
|
+
"The session is closing; retry after close completes",
|
|
9615
|
+
"session_closing"
|
|
9553
9616
|
)
|
|
9554
9617
|
);
|
|
9555
9618
|
}
|
|
9556
|
-
const
|
|
9557
|
-
|
|
9558
|
-
|
|
9559
|
-
);
|
|
9619
|
+
const promotedMidTurn = context?.promotedMidTurn;
|
|
9620
|
+
const isPromotedMidTurn = promotedMidTurn !== void 0;
|
|
9621
|
+
const originatorClientId = promotedMidTurn ? promotedMidTurn.originatorClientId : resolveTrustedClientId(entry, context?.clientId);
|
|
9560
9622
|
const modelPrompt = context?.modelPrompt;
|
|
9561
9623
|
if (modelPrompt !== void 0 && !isValidTrustedModelPrompt(modelPrompt)) {
|
|
9562
9624
|
throw new TypeError(
|
|
@@ -9566,7 +9628,7 @@ function createAcpSessionBridge(opts) {
|
|
|
9566
9628
|
if (signal?.aborted) {
|
|
9567
9629
|
throw new DOMException("Prompt aborted", "AbortError");
|
|
9568
9630
|
}
|
|
9569
|
-
if (entry.pendingPromptCount >= maxPendingPromptsPerSession) {
|
|
9631
|
+
if (!isPromotedMidTurn && entry.pendingPromptCount >= maxPendingPromptsPerSession) {
|
|
9570
9632
|
throw new PromptQueueFullError(
|
|
9571
9633
|
maxPendingPromptsPerSession,
|
|
9572
9634
|
entry.pendingPromptCount,
|
|
@@ -9604,6 +9666,7 @@ function createAcpSessionBridge(opts) {
|
|
|
9604
9666
|
promptId,
|
|
9605
9667
|
queuedAt,
|
|
9606
9668
|
...originatorClientId !== void 0 ? { originatorClientId } : {},
|
|
9669
|
+
...isPromotedMidTurn ? { promotedMidTurn: true } : {},
|
|
9607
9670
|
text: extractPromptText(req.prompt),
|
|
9608
9671
|
abortController: pendingAbort,
|
|
9609
9672
|
state: isQueued ? "queued" : "running"
|
|
@@ -9697,9 +9760,11 @@ function createAcpSessionBridge(opts) {
|
|
|
9697
9760
|
}
|
|
9698
9761
|
throw new DOMException("Prompt aborted", "AbortError");
|
|
9699
9762
|
}
|
|
9700
|
-
if (pendingEntry.state === "queued") {
|
|
9701
|
-
|
|
9702
|
-
|
|
9763
|
+
if (pendingEntry.state === "queued" || isPromotedMidTurn) {
|
|
9764
|
+
if (pendingEntry.state === "queued") {
|
|
9765
|
+
delete entry.todoStopGuardAwaitingQueuedPromptOwnerPromptId;
|
|
9766
|
+
pendingEntry.state = "running";
|
|
9767
|
+
}
|
|
9703
9768
|
entry.events.publish({
|
|
9704
9769
|
type: "pending_prompt_started",
|
|
9705
9770
|
promptId: pendingEntry.promptId,
|
|
@@ -9915,12 +9980,26 @@ function createAcpSessionBridge(opts) {
|
|
|
9915
9980
|
}
|
|
9916
9981
|
}
|
|
9917
9982
|
}
|
|
9983
|
+
const shouldSettleMidTurnQueue = entry.pendingPromptCount === 1 && !entry.closing && byId.get(entry.sessionId) === entry;
|
|
9984
|
+
const undrainedMessages = shouldSettleMidTurnQueue ? entry.midTurnMessageQueue.splice(0) : [];
|
|
9918
9985
|
releasePromptSlot();
|
|
9919
|
-
|
|
9920
|
-
|
|
9921
|
-
|
|
9986
|
+
for (const message of undrainedMessages) {
|
|
9987
|
+
if (message.queueOnly) {
|
|
9988
|
+
try {
|
|
9989
|
+
message.onSettledWithoutDrain?.();
|
|
9990
|
+
} catch (error) {
|
|
9991
|
+
writeStderrLine(
|
|
9992
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} failed to hand undrained queue-only message ${JSON.stringify(message.messageId)} back to its caller: ${JSON.stringify(error instanceof Error ? error.message : String(error))}`
|
|
9993
|
+
);
|
|
9994
|
+
}
|
|
9995
|
+
continue;
|
|
9996
|
+
}
|
|
9997
|
+
promoteMidTurnMessage(
|
|
9998
|
+
entry,
|
|
9999
|
+
message.messageId,
|
|
10000
|
+
message.text,
|
|
10001
|
+
message.originatorClientId
|
|
9922
10002
|
);
|
|
9923
|
-
entry.midTurnMessageQueue.length = 0;
|
|
9924
10003
|
}
|
|
9925
10004
|
void maybeCloseIdleSession(entry, "prompt_settled");
|
|
9926
10005
|
}).catch(() => {
|
|
@@ -11192,7 +11271,7 @@ function createAcpSessionBridge(opts) {
|
|
|
11192
11271
|
}
|
|
11193
11272
|
return { removed: true };
|
|
11194
11273
|
},
|
|
11195
|
-
enqueueMidTurnMessage(sessionId, message, context) {
|
|
11274
|
+
enqueueMidTurnMessage(sessionId, message, context, requestedMessageId, options) {
|
|
11196
11275
|
const entry = byId.get(sessionId);
|
|
11197
11276
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
11198
11277
|
const originatorClientId = resolveTrustedClientId(
|
|
@@ -11200,43 +11279,139 @@ function createAcpSessionBridge(opts) {
|
|
|
11200
11279
|
context?.clientId
|
|
11201
11280
|
);
|
|
11202
11281
|
const trimmed = message.trim();
|
|
11203
|
-
if (trimmed.length === 0
|
|
11282
|
+
if (trimmed.length === 0) {
|
|
11283
|
+
writeStderrLine(
|
|
11284
|
+
`[mid-turn] session=${entry.sessionId} rejected: empty`
|
|
11285
|
+
);
|
|
11286
|
+
return { accepted: false };
|
|
11287
|
+
}
|
|
11288
|
+
if (requestedMessageId !== void 0) {
|
|
11289
|
+
const existing = entry.midTurnMessageQueue.find(
|
|
11290
|
+
(queued) => queued.messageId === requestedMessageId
|
|
11291
|
+
);
|
|
11292
|
+
if (existing) {
|
|
11293
|
+
if (existing.text === trimmed) {
|
|
11294
|
+
return { accepted: true, messageId: requestedMessageId };
|
|
11295
|
+
}
|
|
11296
|
+
writeStderrLine(
|
|
11297
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected id ${JSON.stringify(requestedMessageId)}: text mismatch`
|
|
11298
|
+
);
|
|
11299
|
+
return { accepted: false };
|
|
11300
|
+
}
|
|
11301
|
+
const promoted = entry.pendingPromptList.find(
|
|
11302
|
+
(pending) => pending.promptId === requestedMessageId
|
|
11303
|
+
);
|
|
11304
|
+
if (promoted) {
|
|
11305
|
+
if (promoted.text === trimmed) {
|
|
11306
|
+
return { accepted: true, messageId: requestedMessageId };
|
|
11307
|
+
}
|
|
11308
|
+
writeStderrLine(
|
|
11309
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected promoted id ${JSON.stringify(requestedMessageId)}: text mismatch`
|
|
11310
|
+
);
|
|
11311
|
+
return { accepted: false };
|
|
11312
|
+
}
|
|
11313
|
+
if (entry.settledMidTurnMessageIds.includes(requestedMessageId)) {
|
|
11314
|
+
return { accepted: true, messageId: requestedMessageId };
|
|
11315
|
+
}
|
|
11316
|
+
if (entry.promotedMidTurnMessageIds.includes(requestedMessageId)) {
|
|
11317
|
+
return { accepted: true, messageId: requestedMessageId };
|
|
11318
|
+
}
|
|
11319
|
+
}
|
|
11320
|
+
if (isClosingOrAuthorizingClose(entry)) {
|
|
11204
11321
|
writeStderrLine(
|
|
11205
|
-
`[mid-turn] session=${entry.sessionId} rejected:
|
|
11322
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected: session closing`
|
|
11206
11323
|
);
|
|
11207
11324
|
return { accepted: false };
|
|
11208
11325
|
}
|
|
11326
|
+
const messageId = requestedMessageId ?? randomUUID2();
|
|
11327
|
+
if (entry.pendingPromptCount === 0) {
|
|
11328
|
+
if (options?.queueOnly) {
|
|
11329
|
+
writeStderrLine(
|
|
11330
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} rejected id ${JSON.stringify(messageId)}: session idle`
|
|
11331
|
+
);
|
|
11332
|
+
return { accepted: false };
|
|
11333
|
+
}
|
|
11334
|
+
promoteMidTurnMessage(entry, messageId, trimmed, originatorClientId);
|
|
11335
|
+
return { accepted: true, messageId };
|
|
11336
|
+
}
|
|
11209
11337
|
if (entry.midTurnMessageQueue.length >= MAX_MID_TURN_QUEUE_DEPTH) {
|
|
11210
11338
|
writeStderrLine(
|
|
11211
|
-
`[mid-turn] session=${entry.sessionId} rejected: queue full (depth ${entry.midTurnMessageQueue.length} >= ${MAX_MID_TURN_QUEUE_DEPTH})
|
|
11339
|
+
`[mid-turn] session=${entry.sessionId} rejected: queue full (depth ${entry.midTurnMessageQueue.length} >= ${MAX_MID_TURN_QUEUE_DEPTH})`
|
|
11212
11340
|
);
|
|
11213
11341
|
return { accepted: false };
|
|
11214
11342
|
}
|
|
11215
|
-
const
|
|
11216
|
-
entry.midTurnMessageQueue.push({
|
|
11343
|
+
const queuedMessage = {
|
|
11217
11344
|
messageId,
|
|
11218
11345
|
text: trimmed,
|
|
11219
|
-
originatorClientId
|
|
11220
|
-
|
|
11346
|
+
originatorClientId,
|
|
11347
|
+
...options?.queueOnly ? {
|
|
11348
|
+
queueOnly: true,
|
|
11349
|
+
onSettledWithoutDrain: options.onSettledWithoutDrain
|
|
11350
|
+
} : {}
|
|
11351
|
+
};
|
|
11352
|
+
entry.midTurnMessageQueue.push(queuedMessage);
|
|
11353
|
+
if (originatorClientId) {
|
|
11354
|
+
try {
|
|
11355
|
+
entry.events.publish({
|
|
11356
|
+
type: "pending_prompt_added",
|
|
11357
|
+
promptId: messageId,
|
|
11358
|
+
data: {
|
|
11359
|
+
sessionId,
|
|
11360
|
+
promptId: messageId,
|
|
11361
|
+
text: trimmed,
|
|
11362
|
+
queuedAt: Date.now()
|
|
11363
|
+
},
|
|
11364
|
+
originatorClientId
|
|
11365
|
+
});
|
|
11366
|
+
} catch {
|
|
11367
|
+
}
|
|
11368
|
+
}
|
|
11221
11369
|
return { accepted: true, messageId };
|
|
11222
11370
|
},
|
|
11223
11371
|
removeMidTurnMessage(sessionId, messageId, context) {
|
|
11224
11372
|
const entry = byId.get(sessionId);
|
|
11225
11373
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
11226
|
-
|
|
11227
|
-
entry,
|
|
11228
|
-
context?.clientId
|
|
11229
|
-
);
|
|
11374
|
+
resolveTrustedClientId(entry, context?.clientId);
|
|
11230
11375
|
const index = entry.midTurnMessageQueue.findIndex(
|
|
11231
|
-
(message) => message.messageId === messageId
|
|
11376
|
+
(message) => message.messageId === messageId
|
|
11232
11377
|
);
|
|
11233
11378
|
if (index === -1) {
|
|
11379
|
+
const isPromoted = entry.pendingPromptList.some(
|
|
11380
|
+
(pending) => pending.promptId === messageId && pending.promotedMidTurn === true
|
|
11381
|
+
);
|
|
11382
|
+
if (!isPromoted) {
|
|
11383
|
+
writeStderrLine(
|
|
11384
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} remove missed messageId=${JSON.stringify(messageId)} (already drained or completed)`
|
|
11385
|
+
);
|
|
11386
|
+
return { removed: false };
|
|
11387
|
+
}
|
|
11388
|
+
const promoted = bridgeApi.removePendingPrompt(
|
|
11389
|
+
sessionId,
|
|
11390
|
+
messageId,
|
|
11391
|
+
context
|
|
11392
|
+
);
|
|
11393
|
+
if (promoted.removed) {
|
|
11394
|
+
rememberMidTurnId(entry.settledMidTurnMessageIds, messageId);
|
|
11395
|
+
return promoted;
|
|
11396
|
+
}
|
|
11234
11397
|
writeStderrLine(
|
|
11235
|
-
`[mid-turn] session=${JSON.stringify(entry.sessionId)} remove missed messageId=${JSON.stringify(messageId)} (already drained or
|
|
11398
|
+
`[mid-turn] session=${JSON.stringify(entry.sessionId)} remove missed messageId=${JSON.stringify(messageId)} (already drained or completed)`
|
|
11236
11399
|
);
|
|
11237
11400
|
return { removed: false };
|
|
11238
11401
|
}
|
|
11239
|
-
entry.midTurnMessageQueue.splice(index, 1);
|
|
11402
|
+
const [removed] = entry.midTurnMessageQueue.splice(index, 1);
|
|
11403
|
+
rememberMidTurnId(entry.settledMidTurnMessageIds, messageId);
|
|
11404
|
+
if (removed) {
|
|
11405
|
+
try {
|
|
11406
|
+
entry.events.publish({
|
|
11407
|
+
type: "pending_prompt_completed",
|
|
11408
|
+
promptId: messageId,
|
|
11409
|
+
data: { sessionId, promptId: messageId, state: "removed" },
|
|
11410
|
+
...removed.originatorClientId ? { originatorClientId: removed.originatorClientId } : {}
|
|
11411
|
+
});
|
|
11412
|
+
} catch {
|
|
11413
|
+
}
|
|
11414
|
+
}
|
|
11240
11415
|
return { removed: true };
|
|
11241
11416
|
},
|
|
11242
11417
|
async enqueueBackgroundNotification(sessionId, notification) {
|
|
@@ -11266,6 +11441,22 @@ function createAcpSessionBridge(opts) {
|
|
|
11266
11441
|
void maybeCloseIdleSession(entry, "agent_notification_settled");
|
|
11267
11442
|
}
|
|
11268
11443
|
},
|
|
11444
|
+
getMidTurnMessages(sessionId, context) {
|
|
11445
|
+
const entry = byId.get(sessionId);
|
|
11446
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
11447
|
+
resolveTrustedClientId(entry, context?.clientId);
|
|
11448
|
+
return {
|
|
11449
|
+
// Anonymous enqueues (live steering) stay off the shared surface:
|
|
11450
|
+
// their delegation text is not a user message other attached clients
|
|
11451
|
+
// should restore into their queue views.
|
|
11452
|
+
messages: entry.midTurnMessageQueue.filter((message) => message.originatorClientId !== void 0).map((message) => ({
|
|
11453
|
+
messageId: message.messageId,
|
|
11454
|
+
text: message.text
|
|
11455
|
+
})),
|
|
11456
|
+
settledMessageIds: [...entry.settledMidTurnMessageIds],
|
|
11457
|
+
promotedMessageIds: [...entry.promotedMidTurnMessageIds]
|
|
11458
|
+
};
|
|
11459
|
+
},
|
|
11269
11460
|
async generateSessionBtw(sessionId, question, signal, _context) {
|
|
11270
11461
|
const entry = byId.get(sessionId);
|
|
11271
11462
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
@@ -11506,7 +11697,11 @@ function createAcpSessionBridge(opts) {
|
|
|
11506
11697
|
const entry = byId.get(sessionId);
|
|
11507
11698
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
11508
11699
|
if (isClosingOrAuthorizingClose(entry)) {
|
|
11509
|
-
throw new SessionNotFoundError(
|
|
11700
|
+
throw new SessionNotFoundError(
|
|
11701
|
+
sessionId,
|
|
11702
|
+
"The session is closing; retry after close completes",
|
|
11703
|
+
"session_closing"
|
|
11704
|
+
);
|
|
11510
11705
|
}
|
|
11511
11706
|
const info = channelInfoForEntry(entry);
|
|
11512
11707
|
if (!info || info.isDying) throw new SessionNotFoundError(sessionId);
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
t
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-UEOKWYGY.js";
|
|
6
6
|
import {
|
|
7
7
|
computeThresholds,
|
|
8
8
|
getCoreSystemPrompt,
|
|
9
9
|
resolveInteractionMode
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-EI3NWELG.js";
|
|
11
11
|
import {
|
|
12
12
|
buildSkillLlmContent
|
|
13
13
|
} from "./chunk-K623ENWT.js";
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
appEvents
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-7GTMV7UE.js";
|
|
6
6
|
import {
|
|
7
7
|
CUSTOM_SANDBOX_IMAGE_ENV_VAR,
|
|
8
8
|
HOST_UPDATE_RELAUNCH_ENV_VAR,
|
|
9
9
|
SKIP_UPDATE_CHECK_ENV_VAR,
|
|
10
10
|
requestUpdateOnExit
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KONVMRK7.js";
|
|
12
12
|
import {
|
|
13
13
|
loadUndici
|
|
14
14
|
} from "./chunk-3Z43GZUQ.js";
|
|
15
15
|
import {
|
|
16
16
|
IdeClient,
|
|
17
17
|
getAllProviderBaseUrls
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-EI3NWELG.js";
|
|
19
19
|
import {
|
|
20
20
|
detectRuntime,
|
|
21
21
|
getOrCreateSharedDispatcher,
|
|
@@ -231,11 +231,11 @@ function startPostRenderPrefetches(config, settings, options = {}) {
|
|
|
231
231
|
{ updateEventEmitter },
|
|
232
232
|
{ t }
|
|
233
233
|
] = await Promise.all([
|
|
234
|
-
import("./updateCheck-
|
|
235
|
-
import("./handleAutoUpdate-
|
|
236
|
-
import("./installationInfo-
|
|
234
|
+
import("./updateCheck-LOS5GYFC.js"),
|
|
235
|
+
import("./handleAutoUpdate-NHFSGYTF.js"),
|
|
236
|
+
import("./installationInfo-XXB75T7O.js"),
|
|
237
237
|
import("./updateEventEmitter-5MKC7BLQ.js"),
|
|
238
|
-
import("./i18n-
|
|
238
|
+
import("./i18n-Q27KKNDL.js")
|
|
239
239
|
]);
|
|
240
240
|
const updateCheckSkippedMessage = /* @__PURE__ */ __name((error) => t("Update check skipped ({{reason}}) \u2014 run /update to retry.", {
|
|
241
241
|
reason: describeUpdateCheckFailure(error)
|
|
@@ -308,7 +308,7 @@ ${t(
|
|
|
308
308
|
state: "connecting"
|
|
309
309
|
});
|
|
310
310
|
try {
|
|
311
|
-
const { connectIdeForStartup } = await import("./initializer-
|
|
311
|
+
const { connectIdeForStartup } = await import("./initializer-Y5DJLT43.js");
|
|
312
312
|
await withTimeout(
|
|
313
313
|
connectIdeForStartup(config),
|
|
314
314
|
"ide_connect",
|
|
@@ -332,7 +332,7 @@ ${t(
|
|
|
332
332
|
}
|
|
333
333
|
if (config.isInteractive()) {
|
|
334
334
|
runDeferredTask("background_housekeeping", async () => {
|
|
335
|
-
const { startBackgroundHousekeeping } = await import("./scheduler-
|
|
335
|
+
const { startBackgroundHousekeeping } = await import("./scheduler-K3D5Z655.js");
|
|
336
336
|
startBackgroundHousekeeping(config, settings);
|
|
337
337
|
});
|
|
338
338
|
}
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
getErrorMessage
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DCZEPFB4.js";
|
|
6
6
|
import {
|
|
7
7
|
extensionToOutputString,
|
|
8
8
|
getExtensionManager
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UMD7WQTR.js";
|
|
10
10
|
import {
|
|
11
11
|
loadSettings
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ABVRJU3D.js";
|
|
13
13
|
import {
|
|
14
14
|
initializeI18n,
|
|
15
15
|
resolveLanguageSetting,
|
|
16
16
|
t
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-UEOKWYGY.js";
|
|
18
18
|
import {
|
|
19
19
|
writeStderrLine,
|
|
20
20
|
writeStdoutLine
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
import {
|
|
22
22
|
formatHistoryGapNotice,
|
|
23
23
|
indexGapsByChild
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-ZRBMO3C7.js";
|
|
25
25
|
import {
|
|
26
26
|
stringWidth
|
|
27
27
|
} from "./chunk-2MIN6GRR.js";
|
|
@@ -33,11 +33,11 @@ import {
|
|
|
33
33
|
} from "./chunk-3SH53ANB.js";
|
|
34
34
|
import {
|
|
35
35
|
t
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-UEOKWYGY.js";
|
|
37
37
|
import {
|
|
38
38
|
getToolResponseDisplayText,
|
|
39
39
|
isGoalCheckpointBookkeepingRecord
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-EI3NWELG.js";
|
|
41
41
|
import {
|
|
42
42
|
stripAnsi
|
|
43
43
|
} from "./chunk-TWPJO254.js";
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
GoalPersistenceUnavailableError,
|
|
46
46
|
parseGoalStateRecordPayloadV2,
|
|
47
47
|
projectUserTranscriptForDisplay
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-QUI267ZP.js";
|
|
49
49
|
import {
|
|
50
50
|
ToolDisplayNames
|
|
51
51
|
} from "./chunk-PYQADEFD.js";
|