@qwen-code/qwen-code 0.20.2-jobbench-no-todo-write.0 → 0.21.0
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 +5 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +23 -5
- package/bundled/qc-helper/docs/integration-github-action.md +9 -9
- package/bundled/review/SKILL.md +7 -3
- package/chunks/MaxSizedBox-5DPPWPGT.js +85 -0
- package/chunks/{StandaloneSessionPicker-WBRBHD2M.js → StandaloneSessionPicker-BIRMPLRD.js} +66 -58
- package/chunks/{acp-startup-profiler-N3RHHXJ3.js → acp-startup-profiler-RV3IV562.js} +2 -2
- package/chunks/{acpAgent-BBQZ33CA.js → acpAgent-6J2U72PQ.js} +706 -182
- package/chunks/agent-6ODUANDO.js +81 -0
- package/chunks/agent-headless-7BYQTMHW.js +75 -0
- package/chunks/{anthropicContentGenerator-HGWAHO24.js → anthropicContentGenerator-75BKLTSP.js} +117 -43
- package/chunks/{artifact-tool-56T5IMBP.js → artifact-tool-Y5T7GG7F.js} +3 -3
- package/chunks/{askUserQuestion-E25OBIC2.js → askUserQuestion-2H6747FR.js} +3 -3
- package/chunks/bridge-ZUB64FAE.js +90 -0
- package/chunks/{build-SSCNEHZZ.js → build-RV63TIRH.js} +2 -3
- package/chunks/{ca-N6VVUFVB.js → ca-25EDXPFZ.js} +2 -0
- package/chunks/{channel-worker-group-LFBT7K64.js → channel-worker-group-2ZD7TVAT.js} +7 -6
- package/chunks/{channel-worker-manager-3RUPERG2.js → channel-worker-manager-4OA4BCGB.js} +189 -29
- package/chunks/{channel-worker-supervisor-A3KVATD3.js → channel-worker-supervisor-V7KCFJTS.js} +6 -5
- package/chunks/{chunk-TYQMGACW.js → chunk-22C7BQ6D.js} +508 -10967
- package/chunks/chunk-2JZBVYTU.js +452 -0
- package/chunks/{chunk-H2XVO6NE.js → chunk-2MIN6GRR.js} +1 -1
- package/chunks/{chunk-B2HSPMD4.js → chunk-2NH6DYI4.js} +12 -12
- package/chunks/chunk-2SCDWPXI.js +246 -0
- package/chunks/{chunk-JK26TQON.js → chunk-2X55UKQE.js} +3 -3
- package/chunks/{chunk-7VUQQBR7.js → chunk-3QMGYBFN.js} +2 -65
- package/chunks/{chunk-UMCULC5M.js → chunk-3RN6GBKS.js} +1 -1
- package/chunks/{chunk-QR6U5QPP.js → chunk-3SJ43L4W.js} +4 -0
- package/chunks/chunk-46UV252V.js +128 -0
- package/chunks/{chunk-GPMVHZP4.js → chunk-4WIZGAH3.js} +7 -7
- package/chunks/{chunk-CI3GWKGJ.js → chunk-55DJUCI2.js} +87 -29
- package/chunks/{chunk-QNLNLENL.js → chunk-5I2IWRSH.js} +2 -2
- package/chunks/{chunk-D7WXIW7H.js → chunk-5NBDS5S6.js} +145 -5
- package/chunks/{chunk-E4IMU4Y5.js → chunk-63P4EL5V.js} +1 -1
- package/chunks/chunk-6FGBXPWM.js +293 -0
- package/chunks/{chunk-NEEB7UEN.js → chunk-6GMVPFB2.js} +153 -72
- package/chunks/{chunk-KWK7UE6L.js → chunk-6OUGMXDC.js} +6 -6
- package/chunks/{chunk-QRUIS3DN.js → chunk-6PEXNQTX.js} +22 -1
- package/chunks/{chunk-77OZOGPT.js → chunk-7JURR4JT.js} +1 -1
- package/chunks/{chunk-4MWNZNJ4.js → chunk-7MVVZO4N.js} +4 -4
- package/chunks/{chunk-6ZBPS62S.js → chunk-7ZCNENPP.js} +1 -1
- package/chunks/{chunk-6X4GWOPW.js → chunk-A5L3JMUA.js} +1 -1
- package/chunks/{chunk-B3I77W5J.js → chunk-ACY3A37B.js} +3 -3
- package/chunks/chunk-AMDSOFFV.js +10860 -0
- package/chunks/{chunk-RV4C2ZFG.js → chunk-BIQWWWJN.js} +1 -1
- package/chunks/{chunk-ZHERRXZJ.js → chunk-BJX6ZSUK.js} +4 -4
- package/chunks/chunk-BK2UNYWD.js +29 -0
- package/chunks/{chunk-7TLUW4ZE.js → chunk-BKHWX6I2.js} +3 -3
- package/chunks/chunk-BPJSQIJX.js +100 -0
- package/chunks/{chunk-M7WBGLYP.js → chunk-BULDBTYC.js} +2 -0
- package/chunks/{chunk-H4A4A2SY.js → chunk-CIKQ7KKO.js} +4625 -8645
- package/chunks/{chunk-QZJY47IE.js → chunk-D3UEZIQH.js} +7 -5
- package/chunks/chunk-DHHOYAPR.js +1462 -0
- package/chunks/{chunk-LESHKUWF.js → chunk-DLWL3Z7A.js} +5 -3
- package/chunks/{chunk-XHATNRQA.js → chunk-DP3IHZGG.js} +0 -2
- package/chunks/chunk-E5TUC6CA.js +479 -0
- package/chunks/{chunk-6NRFYMKG.js → chunk-EBJQ6AXW.js} +11 -10
- package/chunks/{chunk-HABKX6LY.js → chunk-EPDRMGT4.js} +164 -17
- package/chunks/{chunk-P2BQZ7H7.js → chunk-ETSW4KLJ.js} +2 -2
- package/chunks/{chunk-KHOVYUHX.js → chunk-FNQ6T3CV.js} +20 -3
- package/chunks/{chunk-64EG42HV.js → chunk-FQK6JAFG.js} +72 -23
- package/chunks/{chunk-L6U47G5P.js → chunk-FSITMZJH.js} +8 -8
- package/chunks/{chunk-6RLROE6G.js → chunk-GLWP3FDB.js} +80 -15
- package/chunks/{chunk-CXIOPXRR.js → chunk-GSN55ZRI.js} +5 -5
- package/chunks/{chunk-LVA5OHQO.js → chunk-H4SBPHSA.js} +3 -3
- package/chunks/chunk-H5FFA6TH.js +902 -0
- package/chunks/{chunk-TDKQP3M6.js → chunk-HIJQF5B5.js} +1 -1
- package/chunks/{chunk-NXE6SQIV.js → chunk-IJTOWOD7.js} +14 -3
- package/chunks/chunk-IKCX4CCL.js +469 -0
- package/chunks/{chunk-7SSWNGEJ.js → chunk-IKYJHJNF.js} +3 -3
- package/chunks/{chunk-64XKYOXK.js → chunk-IO3IX5Q4.js} +1 -1
- package/chunks/{chunk-RS7MT2QG.js → chunk-IPUUTYMV.js} +2 -4
- package/chunks/{chunk-XU457J4V.js → chunk-IRH27ZC2.js} +2 -2
- package/chunks/{chunk-SVIMKSEI.js → chunk-J24WCGIN.js} +4 -4
- package/chunks/{chunk-4LVZNIDO.js → chunk-J56UI34H.js} +4 -13
- package/chunks/{chunk-TJTKSVIV.js → chunk-JLU636DO.js} +5 -1
- package/chunks/{chunk-7PIL2BYF.js → chunk-JVPM2ULZ.js} +6 -6
- package/chunks/{chunk-KBB5O3JO.js → chunk-JXJFVC6E.js} +37 -18
- package/chunks/chunk-JZA3JUDJ.js +82 -0
- package/chunks/{chunk-45PO6ZIS.js → chunk-K36B6G2O.js} +5 -5
- package/chunks/{chunk-GPSKDNEE.js → chunk-K4XWPEWB.js} +4 -4
- package/chunks/{chunk-K7EUPLIP.js → chunk-KIM5GUMA.js} +654 -117
- package/chunks/{chunk-42W5BDEY.js → chunk-KMQ33DO4.js} +7 -5
- package/chunks/{chunk-E2UVIFI2.js → chunk-KRXPRVGL.js} +0 -1
- package/chunks/{chunk-WHGVTP7Q.js → chunk-L26JL52R.js} +3 -3
- package/chunks/{chunk-7Z6JQEL6.js → chunk-L5UHQJTJ.js} +1 -1
- package/chunks/{chunk-26CBI4DC.js → chunk-LB6DUZ26.js} +259 -67
- package/chunks/chunk-LEH5C7FV.js +232 -0
- package/chunks/{chunk-UTGFTJ2H.js → chunk-LH2BYDQ5.js} +6 -4
- package/chunks/{chunk-QKTHJXCS.js → chunk-LK7CHLVP.js} +79 -2
- package/chunks/{chunk-V7WNRZL7.js → chunk-LKEJ26GS.js} +11 -11
- package/chunks/{chunk-6VPLV3L3.js → chunk-LQIW3YFY.js} +227 -41
- package/chunks/chunk-LS77BEZP.js +405 -0
- package/chunks/{chunk-5WDRI7US.js → chunk-M4FMGVY4.js} +3 -3
- package/chunks/{chunk-57FIIFJN.js → chunk-M5JM7OSF.js} +1 -1
- package/chunks/{chunk-7362QS5B.js → chunk-MB4MZHMJ.js} +80 -37
- package/chunks/{chunk-4K56OJFJ.js → chunk-MUP3T3AD.js} +1 -1
- package/chunks/{chunk-CJQ3FZ2G.js → chunk-MVSUYZDT.js} +4 -4
- package/chunks/{chunk-6FZYKBKV.js → chunk-MZAXJAUM.js} +1 -1
- package/chunks/{chunk-32L4D2O2.js → chunk-NH6KE4JX.js} +3 -3
- package/chunks/chunk-NIBLUX3Y.js +934 -0
- package/chunks/{chunk-OQB4EXO4.js → chunk-NL7LTRLR.js} +1 -1
- package/chunks/{chunk-6S5HSCOI.js → chunk-OFDOK3VM.js} +5 -5
- package/chunks/{chunk-LIZRAKPB.js → chunk-OHNBB4XR.js} +1 -1
- package/chunks/{chunk-MDZTPSXO.js → chunk-OKY7HXPG.js} +2 -2
- package/chunks/{chunk-NHDKSOEY.js → chunk-P3QQPMQA.js} +5 -5
- package/chunks/{chunk-4SCOLXTD.js → chunk-PC6JANNU.js} +5 -5
- package/chunks/{chunk-IWALV67J.js → chunk-PHOF65IG.js} +4300 -1284
- package/chunks/{chunk-OQ5SYCPE.js → chunk-PJIZUQVC.js} +2 -2
- package/chunks/{chunk-5DTTYNB7.js → chunk-PQNHRFJC.js} +16 -3
- package/chunks/{chunk-YM3SZTH4.js → chunk-PR75REBZ.js} +18 -1
- package/chunks/{chunk-5XORMWA2.js → chunk-PSOO6YXD.js} +18 -15
- package/chunks/{chunk-X6N25LXS.js → chunk-PWTZEM3C.js} +2 -2
- package/chunks/{chunk-GSX6P2JW.js → chunk-PWVFN2LF.js} +1 -1
- package/chunks/{chunk-AHX6AKPD.js → chunk-Q4M4MDQ4.js} +2 -2
- package/chunks/{chunk-3EHJ44GG.js → chunk-QAF7NMK7.js} +1 -1
- package/chunks/{chunk-WSYKDFYR.js → chunk-R5AFZNQW.js} +5 -5
- package/chunks/{chunk-63DJBU32.js → chunk-RF3EXIHJ.js} +39 -18
- package/chunks/{chunk-4K7VDKAD.js → chunk-RHLZR4E5.js} +1 -1
- package/chunks/{chunk-SXPSOMQ4.js → chunk-RIBKPMRP.js} +220 -141
- package/chunks/{chunk-RVLZCXEE.js → chunk-RWTEFFPU.js} +82 -3
- package/chunks/{chunk-ZUTM4LHM.js → chunk-RZIX2G32.js} +1 -1
- package/chunks/{chunk-ZKBNRL6O.js → chunk-SQCQ4KO2.js} +336 -404
- package/chunks/{chunk-THJNPLI4.js → chunk-TARRHLLG.js} +1 -0
- package/chunks/{chunk-RHYFF54J.js → chunk-TEHGS6UP.js} +50 -21
- package/chunks/{chunk-ACQJPDDS.js → chunk-TGILQ3YH.js} +8 -8
- package/chunks/{chunk-Q2YKNMLS.js → chunk-TOFQCPDC.js} +43 -10
- package/chunks/{chunk-ACZIBDYD.js → chunk-TPRQ7RZH.js} +587 -176
- package/chunks/{chunk-T4TZQJ7W.js → chunk-TWPJO254.js} +5 -16
- package/chunks/{chunk-7MWABCXU.js → chunk-U7M2DMGW.js} +3 -3
- package/chunks/{chunk-KQQ757OQ.js → chunk-UDX5OBWR.js} +41 -9
- package/chunks/{chunk-SRPZG4ER.js → chunk-USTWD7QV.js} +6 -4
- package/chunks/{chunk-NPQDJGKU.js → chunk-UUUTRMI2.js} +1 -1
- package/chunks/chunk-UW5EOVUN.js +249 -0
- package/chunks/{chunk-6IL7KRLE.js → chunk-VAK25FTU.js} +1 -1
- package/chunks/{chunk-TDDFEPBX.js → chunk-VIA5XA4U.js} +5 -2
- package/chunks/{chunk-3BJDQVE6.js → chunk-VRYUBFMC.js} +1 -1
- package/chunks/{chunk-PLQODS7F.js → chunk-VULLI6WQ.js} +172 -6
- package/chunks/{chunk-GN45XAAU.js → chunk-WCXCRJYB.js} +1 -1
- package/chunks/{chunk-2LI23QA6.js → chunk-X5XDDSSH.js} +1 -1
- package/chunks/{chunk-O32RMIMO.js → chunk-Y34KJKDC.js} +1 -1
- package/chunks/{chunk-7ZD5EKXE.js → chunk-YBL3QUDD.js} +2 -2
- package/chunks/{chunk-H4AR2JQF.js → chunk-YH6G52F2.js} +3 -3
- package/chunks/{chunk-3G3UUMRS.js → chunk-YPE6A4GC.js} +2 -2
- package/chunks/{chunk-3F2JUWCH.js → chunk-YX324OPW.js} +1 -1
- package/chunks/{chunk-CGIDQG6J.js → chunk-Z2BC6UJ5.js} +3 -3
- package/chunks/{chunk-QLJUC7TG.js → chunk-ZD6UTE4A.js} +1 -1
- package/chunks/{chunk-ZPWJZHJ2.js → chunk-ZFDTEDCF.js} +6 -6
- package/chunks/chunk-ZJHVAS7M.js +289 -0
- package/chunks/{chunk-XAGLQITN.js → chunk-ZNAUOR2I.js} +15 -12
- package/chunks/{chunk-T2L47JJK.js → chunk-ZOIFNCKL.js} +4 -4
- package/chunks/{computer-use-RZ3UUWYW.js → computer-use-SOQ4E3VX.js} +43 -34
- package/chunks/{config-utils-SQUBZEQM.js → config-utils-7V7GGIW6.js} +3 -3
- package/chunks/contextCommand-JLHYA34Z.js +80 -0
- package/chunks/{create-sub-session-AZ77LBL3.js → create-sub-session-IWW2IZ2T.js} +3 -3
- package/chunks/{create-sub-session-EQG73FT6.js → create-sub-session-QRJLW5BV.js} +43 -34
- package/chunks/{cron-create-KTWJM7QT.js → cron-create-YIID5XAW.js} +6 -6
- package/chunks/{cron-delete-2P3I5ULL.js → cron-delete-ZVHYCEP2.js} +5 -5
- package/chunks/{cron-list-PXDPGEDQ.js → cron-list-XEGS463Q.js} +5 -5
- package/chunks/{daemon-RAPSDJH7.js → daemon-YO6433NF.js} +350 -53
- package/chunks/daemon-status-provider-2233Q37D.js +89 -0
- package/chunks/{de-4IBXM7CN.js → de-HGRCYDEJ.js} +1 -0
- package/chunks/{dist-UIFWIFRO.js → dist-46NQKLTW.js} +2 -2
- package/chunks/{dist-XRYV6TJP.js → dist-AIKFMUKK.js} +50 -4
- package/chunks/{dist-XBJVSWS2.js → dist-BBLXMS3N.js} +14 -2
- package/chunks/{dist-OMW6WDEO.js → dist-F6IBUDR4.js} +40 -9
- package/chunks/{dist-PJLG2XYX.js → dist-WEAHOXDM.js} +1 -1
- package/chunks/{dist-OAV7LJGJ.js → dist-YFNEUWSE.js} +26 -2
- package/chunks/earlyInputCapture-A7NDU3PF.js +82 -0
- package/chunks/{edit-XRSKQPHQ.js → edit-OBDSQURM.js} +43 -34
- package/chunks/{en-USMCCJAJ.js → en-MTWBNGDO.js} +15 -0
- package/chunks/{enter-worktree-WAHCWE6I.js → enter-worktree-U6MRPQ2P.js} +43 -34
- package/chunks/{enterPlanMode-QIOYLDCF.js → enterPlanMode-BC5QUZZ2.js} +43 -34
- package/chunks/{environment-T3FXCDJI.js → environment-W5UFC2CH.js} +46 -37
- package/chunks/errors-M7CLORXH.js +88 -0
- package/chunks/{exit-worktree-RHVTLX6T.js → exit-worktree-DGNYMECB.js} +43 -34
- package/chunks/{exitPlanMode-UATOE2GQ.js → exitPlanMode-GXTBWQAR.js} +43 -34
- package/chunks/{fast-path-J3RHOYSZ.js → fast-path-JJZFJANL.js} +6 -6
- package/chunks/{fast-path-settings-XB3CPUJT.js → fast-path-settings-WQJU2LAT.js} +2 -2
- package/chunks/{fr-WVHEBDDB.js → fr-45RLL55O.js} +1 -0
- package/chunks/{gemini-P72OGOH6.js → gemini-QS36EBZV.js} +133 -102
- package/chunks/{geminiContentGenerator-F6EG5FXF.js → geminiContentGenerator-AG4KB6CV.js} +14 -8
- package/chunks/{getMachineId-bsd-QFVLPUPT.js → getMachineId-bsd-V7W3GODC.js} +1 -1
- package/chunks/{getMachineId-darwin-DGMQQE2E.js → getMachineId-darwin-TDO75DQP.js} +1 -1
- package/chunks/{getMachineId-linux-R4Z6CSWC.js → getMachineId-linux-TF43WQT2.js} +1 -1
- package/chunks/{getMachineId-unsupported-Z3SBVBUV.js → getMachineId-unsupported-ZGUO3TXT.js} +1 -1
- package/chunks/{getMachineId-win-SCK5UFDT.js → getMachineId-win-ECFYZZFQ.js} +1 -1
- package/chunks/{glob-WHASQZRX.js → glob-V7R3PSK3.js} +43 -34
- package/chunks/{grep-LS7AADJ3.js → grep-QYPSK7OP.js} +43 -34
- package/chunks/handleAutoUpdate-6DBEZYPV.js +81 -0
- package/chunks/{i18n-IMVASWIF.js → i18n-VUJJZIMU.js} +44 -35
- package/chunks/image-gen-Z3VPGKRC.js +240 -0
- package/chunks/initializer-UWAK5U5O.js +86 -0
- package/chunks/installationInfo-6O2YAA52.js +80 -0
- package/chunks/{ja-KY4ROZTE.js → ja-B7DF7DFG.js} +1 -0
- package/chunks/{keychain-token-storage-6ACJDYIB.js → keychain-token-storage-MDTG3WRM.js} +3 -3
- package/chunks/{kittyProtocolDetector-HCNNKJTI.js → kittyProtocolDetector-MBRTDRBK.js} +5 -3
- package/chunks/list-GB4ESM3T.js +89 -0
- package/chunks/list-agents-5KJJHR6I.js +80 -0
- package/chunks/loadedSettingsAdapter-OT6JVQ7U.js +83 -0
- package/chunks/loggingContentGenerator-HS3S5H3Q.js +1077 -0
- package/chunks/{loop-wakeup-RNMRVA66.js → loop-wakeup-FXKNNYSY.js} +7 -7
- package/chunks/{ls-J2ZI5XYK.js → ls-NTK6VOQJ.js} +5 -5
- package/chunks/{lsp-UMS3NUB5.js → lsp-2JI24STP.js} +3 -3
- package/chunks/{managed-npm-update-L6UY7OM7.js → managed-npm-update-JYEMMXA3.js} +94 -37
- package/chunks/mcp-6DBDJPFU.js +83 -0
- package/chunks/{monitor-DXYFB5QD.js → monitor-R3ODH5U6.js} +45 -35
- package/chunks/node-UUDY34IG.js +305 -0
- package/chunks/nonInteractiveCli-MOYCYBBU.js +141 -0
- package/chunks/{notebook-edit-KGD7YJEA.js → notebook-edit-BNOK452R.js} +43 -34
- package/chunks/{openaiContentGenerator-C74A2XAU.js → openaiContentGenerator-WMCU3O2H.js} +27 -17
- package/chunks/pidfile-TFRZZZIO.js +86 -0
- package/chunks/{processUtils-GUT5B4R6.js → processUtils-RT7UNCC2.js} +2 -2
- package/chunks/{pt-OK455PLH.js → pt-22Q3FP73.js} +1 -0
- package/chunks/{qwenContentGenerator-PT46FQPA.js → qwenContentGenerator-HHCRK4SX.js} +56 -41
- package/chunks/{qwenOAuth2-S7DZHUUU.js → qwenOAuth2-OWLB5AKH.js} +14 -27
- package/chunks/read-file-APMO3PSX.js +31 -0
- package/chunks/{read-mcp-resource-F6HYMDUY.js → read-mcp-resource-4DKQWGHD.js} +3 -3
- package/chunks/{record-artifact-7GCFLDD7.js → record-artifact-RQKFYO5B.js} +3 -3
- package/chunks/resumeHistoryUtils-6KRYEAWZ.js +91 -0
- package/chunks/ripGrep-BEJDEDXW.js +73 -0
- package/chunks/{ru-7SPDGMGD.js → ru-FZCNZHDC.js} +1 -0
- package/chunks/{run-qwen-serve-QO4PT5NV.js → run-qwen-serve-FU6HEM4J.js} +276 -62
- package/chunks/{runtime-EOTXBUM6.js → runtime-XXRRTNP6.js} +55 -44
- package/chunks/{scheduler-MAIQ2PHR.js → scheduler-G2ZS2Z7E.js} +43 -34
- package/chunks/{sdk-exporters-grpc-ETLH47EP.js → sdk-exporters-grpc-AK3LGHNO.js} +3 -3
- package/chunks/{sdk-exporters-http-T3POX73F.js → sdk-exporters-http-FYBSUCPD.js} +6 -6
- package/chunks/{sdk-impl-NSLPDH6I.js → sdk-impl-GMVPB7NB.js} +6 -6
- package/chunks/{send-message-PYIJ2PZL.js → send-message-Q6OOR6BR.js} +46 -9
- package/chunks/serve-7BSTXJ4T.js +89 -0
- package/chunks/{server-CBCC3XQC.js → server-4UMH7OIZ.js} +2348 -396
- package/chunks/{session-RQUEFQDL.js → session-K3O3Q2SV.js} +107 -88
- package/chunks/{settings-QHXCJDSR.js → settings-CR2EWTBA.js} +53 -44
- package/chunks/shell-HH3PF3A2.js +83 -0
- package/chunks/{skill-WHSGTGKP.js → skill-I3SDA4MB.js} +17 -15
- package/chunks/spawnChannel-RWNDBXGA.js +82 -0
- package/chunks/{src-F3HKX47D.js → src-GE4TTTML.js} +290 -171
- package/chunks/{standalone-update-BKLONSVI.js → standalone-update-Q6WFRZZQ.js} +45 -36
- package/chunks/{startInteractiveUI-TNJ37X5W.js → startInteractiveUI-SLZGHRPH.js} +736 -298
- package/chunks/{syntheticOutput-H7RTI5KL.js → syntheticOutput-I3757IWH.js} +4 -4
- package/chunks/{task-create-7474AJJD.js → task-create-N7WQSGYA.js} +10 -10
- package/chunks/{task-list-633HGOIB.js → task-list-FOPULZEP.js} +7 -7
- package/chunks/{task-stop-MNUGHPIA.js → task-stop-H6RHXFVQ.js} +4 -4
- package/chunks/{task-update-66GQB5LI.js → task-update-M57TFZJT.js} +10 -10
- package/chunks/{team-create-LUHJ7ZCC.js → team-create-YJALH5D2.js} +44 -35
- package/chunks/{team-delete-BB3CG3QF.js → team-delete-QE2UXJL7.js} +7 -7
- package/chunks/{team-plan-approval-X3DYRL6L.js → team-plan-approval-34QFYKGN.js} +43 -34
- package/chunks/theme-manager-SWRILQHI.js +77 -0
- package/chunks/todoWrite-VQ7FKOHL.js +358 -0
- package/chunks/{tool-search-BAWOETUY.js → tool-search-NF7GB6LE.js} +16 -16
- package/chunks/total-session-admission-DLHHHLD3.js +84 -0
- package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
- package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
- package/chunks/{trustedFolders-4UEOIKOF.js → trustedFolders-KHXHY6PY.js} +44 -35
- package/chunks/{update-relaunch-WDWABT5P.js → update-relaunch-WBUZJC5O.js} +5 -5
- package/chunks/updateCheck-RKL6M5XN.js +92 -0
- package/chunks/useAutoAcceptIndicator-CFQ5BUJL.js +93 -0
- package/chunks/{validateNonInterActiveAuth-OKUE3JLF.js → validateNonInterActiveAuth-3R223G3R.js} +91 -81
- package/chunks/{version-GMUULLWB.js → version-HS7YSFHV.js} +1 -1
- package/chunks/{web-fetch-JBWTMPFN.js → web-fetch-NKCSG7ZE.js} +18 -16
- package/chunks/{web-search-27COJHJT.js → web-search-S62WAP4S.js} +13 -27
- package/chunks/{workflow-5L37J7YF.js → workflow-QAGU5RU4.js} +44 -35
- package/chunks/workspace-providers-status-QSVZUETE.js +86 -0
- package/chunks/{workspace-registration-store-TYPYXIP6.js → workspace-registration-store-24JMHDGF.js} +2 -2
- package/chunks/workspace-registry-UT4RBNBM.js +88 -0
- package/chunks/workspace-service-JFWRUS4V.js +98 -0
- package/chunks/workspace-skills-status-ZBBKJOI2.js +85 -0
- package/chunks/write-file-VHIXW5M7.js +73 -0
- package/chunks/{zh-WY5DWYZD.js → zh-LUIGBD55.js} +15 -0
- package/chunks/{zh-TW-BM47YBFH.js → zh-TW-F5KG2IYD.js} +15 -0
- package/cli-entry.js +10 -1
- package/cli.js +13 -13
- package/locales/ca.js +2 -0
- package/locales/de.js +1 -0
- package/locales/en.js +25 -0
- package/locales/fr.js +1 -0
- package/locales/ja.js +1 -0
- package/locales/pt.js +1 -0
- package/locales/ru.js +1 -0
- package/locales/zh-TW.js +23 -0
- package/locales/zh.js +23 -0
- package/package.json +3 -3
- package/web-shell/assets/{arc-BWFm0SI0.js → arc-DcbWnB9T.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-CZ_yL-DQ.js → architectureDiagram-3BPJPVTR-kMMF5sud.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-B9F9mJvG.js → blockDiagram-GPEHLZMM-Htl9vTJS.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BUdwJW5f.js → c4Diagram-AAUBKEIU-BnZnm0mQ.js} +1 -1
- package/web-shell/assets/channel-Cq7YKtfC.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-w4cF-qlF.js → chunk-2J33WTMH-DziB7kDG.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BXwURxHJ.js → chunk-4BX2VUAB-CmkD8daw.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-Gem3LalC.js → chunk-55IACEB6-CHAd9A_U.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-A3ddVojI.js → chunk-727SXJPM-Dqaam3fE.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-CjHZ5L_R.js → chunk-AQP2D5EJ-D_-saBYM.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CKgdgcpv.js → chunk-FMBD7UC4-B9r_veWD.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-Cn2Dykjb.js → chunk-ND2GUHAM-B3EaCSpL.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN--0SyraC5.js → chunk-QZHKN3VN-CYq8x9mn.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CQ9aC1Tg.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CQ9aC1Tg.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-CphhAity.js → cose-bilkent-S5V4N54A-D0ng4uiB.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-DU--jiKp.js → dagre-BM42HDAG-DCZollQv.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BzvuZw1Y.js → diagram-2AECGRRQ-Dfk2pWS0.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-D84-49Y0.js → diagram-5GNKFQAL-kX38ltWR.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-DQTq-3_3.js → diagram-KO2AKTUF-CJz2vsXh.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-8FTrshzN.js → diagram-LMA3HP47-BvMLZm_7.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-BCjpDBCm.js → diagram-OG6HWLK6-l7kfStkO.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-BtRObkmg.js → erDiagram-TEJ5UH35-BSVa8GGT.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-DTrW6oxy.js → flowDiagram-I6XJVG4X-CoawKIXH.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BgPNSW6j.js → ganttDiagram-6RSMTGT7-DFUDH0zF.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BTclNgGV.js → gitGraphDiagram-PVQCEYII-Y2pvpT4e.js} +1 -1
- package/web-shell/assets/{index-CxA7AqY6.js → index-D0GX0zZf.js} +1 -1
- package/web-shell/assets/index-D9haPt0X.css +5 -0
- package/web-shell/assets/index-ckX9Pq5k.js +1230 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DCE4AJt2.js → infoDiagram-5YYISTIA-CU8_zLiX.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-C8iE6q4Y.js → ishikawaDiagram-YF4QCWOH-AVQiV0DU.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-C_dxdyEc.js → journeyDiagram-JHISSGLW-DQ0VSKa3.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Dw3n1u3w.js → kanban-definition-UN3LZRKU-BqnWqsE_.js} +1 -1
- package/web-shell/assets/{linear-C2BF2zJ9.js → linear-BkoihsaA.js} +1 -1
- package/web-shell/assets/{mermaid.core-CGTQU3MA.js → mermaid.core-5RJs-31j.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BVFZm9ZC.js → mindmap-definition-RKZ34NQL-D33Bxnpd.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-Cc-TNN3n.js → pieDiagram-4H26LBE5-BuEAw3BH.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CgW3Rzsi.js → quadrantDiagram-W4KKPZXB-Kox_usEq.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BAaj0Y3B.js → requirementDiagram-4Y6WPE33-CNjeUif0.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-XJWmekxS.js → sankeyDiagram-5OEKKPKP-BCd2OL_U.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CtRc_0wf.js → sequenceDiagram-3UESZ5HK-CF2ZTsz0.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-WCnvMGy5.js → stateDiagram-AJRCARHV-qenSzHtm.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-B7W4zlCr.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-C9cRx49L.js → timeline-definition-PNZ67QCA-B5DyWdgs.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BvXOCEt-.js → vennDiagram-CIIHVFJN-DqP4I_o_.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-ByafGtzu.js → wardley-L42UT6IY-CJe2e4mg.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CozAnw8x.js → wardleyDiagram-YWT4CUSO-BMDSw-Rr.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-Camu9Qvq.js → xychartDiagram-2RQKCTM6-BTVZYkxD.js} +1 -1
- package/web-shell/index.html +17 -13
- package/chunks/MaxSizedBox-HNWBEL5H.js +0 -77
- package/chunks/agent-KTMY6SF3.js +0 -72
- package/chunks/agent-headless-HJ56ZZOW.js +0 -66
- package/chunks/bridge-AMC5AD7W.js +0 -80
- package/chunks/chunk-CBOQ3HY7.js +0 -2019
- package/chunks/chunk-UHGNAWHK.js +0 -6928
- package/chunks/contextCommand-PW4GINQU.js +0 -71
- package/chunks/daemon-status-provider-3IWTBWQ3.js +0 -79
- package/chunks/earlyInputCapture-TYNI3B6E.js +0 -73
- package/chunks/errors-QAWTJTAW.js +0 -79
- package/chunks/handleAutoUpdate-V5A3JHOG.js +0 -72
- package/chunks/initializer-JJLF5JCJ.js +0 -77
- package/chunks/installationInfo-LAWMHQAG.js +0 -71
- package/chunks/list-L2ECB6UM.js +0 -80
- package/chunks/loadedSettingsAdapter-RLMZ4Z3E.js +0 -74
- package/chunks/mcp-E4O7Z6FO.js +0 -74
- package/chunks/nonInteractiveCli-GU2UKULE.js +0 -131
- package/chunks/pidfile-IWQWZNZV.js +0 -77
- package/chunks/read-file-ZOCXW4AD.js +0 -31
- package/chunks/resumeHistoryUtils-TJWRDE2L.js +0 -83
- package/chunks/ripGrep-OFKAW2VE.js +0 -64
- package/chunks/serve-UB4CF67Q.js +0 -80
- package/chunks/shell-RPK7EAOC.js +0 -74
- package/chunks/spawnChannel-IUP3ZNMT.js +0 -73
- package/chunks/theme-manager-ALL7F4CJ.js +0 -68
- package/chunks/total-session-admission-PLONPNXI.js +0 -74
- package/chunks/updateCheck-PVROE4GR.js +0 -87
- package/chunks/useAutoAcceptIndicator-6BNLNN5S.js +0 -85
- package/chunks/workspace-providers-status-2U3IF4TX.js +0 -77
- package/chunks/workspace-registry-DLQDDDIF.js +0 -78
- package/chunks/workspace-service-7K3LF4QX.js +0 -89
- package/chunks/workspace-skills-status-4DOZ3DBS.js +0 -76
- package/chunks/write-file-PTPXDKZ3.js +0 -64
- package/web-shell/assets/channel-DiLlxxIf.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CkylTdM4.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CkylTdM4.js +0 -1
- package/web-shell/assets/index-CGtQqOIa.css +0 -5
- package/web-shell/assets/index-TtM0hVjU.js +0 -1207
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-D1gzH2Ue.js +0 -1
|
@@ -381,6 +381,9 @@ var RestSseTransport = class {
|
|
|
381
381
|
}
|
|
382
382
|
if (opts.lastEventId !== void 0) {
|
|
383
383
|
headers["Last-Event-ID"] = String(opts.lastEventId);
|
|
384
|
+
if (opts.epoch !== void 0) {
|
|
385
|
+
headers["X-Qwen-Event-Epoch"] = opts.epoch;
|
|
386
|
+
}
|
|
384
387
|
}
|
|
385
388
|
const fetchSignal = opts.signal ? composeAbortSignals([opts.signal, requestCtrl.signal]) : requestCtrl.signal;
|
|
386
389
|
let url = `${this.baseUrl}/session/${encodeURIComponent(sessionId)}/events`;
|
|
@@ -439,6 +442,10 @@ var RestSseTransport = class {
|
|
|
439
442
|
if (!res.body) {
|
|
440
443
|
throw new Error("No SSE body");
|
|
441
444
|
}
|
|
445
|
+
const responseEpoch = res.headers.get("x-qwen-event-epoch");
|
|
446
|
+
if (responseEpoch) {
|
|
447
|
+
opts.onEpoch?.(responseEpoch);
|
|
448
|
+
}
|
|
442
449
|
yield* parseSseStream(res.body, fetchSignal);
|
|
443
450
|
} finally {
|
|
444
451
|
requestCtrl.abort();
|
|
@@ -590,6 +597,7 @@ var DEFAULT_SESSION_LIST_PAGE_SIZE = 20;
|
|
|
590
597
|
var DEFAULT_FETCH_TIMEOUT_MS = 3e4;
|
|
591
598
|
var VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS = 65e3;
|
|
592
599
|
var GITHUB_SETUP_DEFAULT_TIMEOUT_MS = 9e4;
|
|
600
|
+
var CHANNEL_NOTIFY_DEFAULT_TIMEOUT_MS = 35e3;
|
|
593
601
|
var MAX_TIMER_DELAY_MS = 2147483647;
|
|
594
602
|
var DEFAULT_MAX_PENDING_PROMPTS_PER_SESSION = 5;
|
|
595
603
|
var MCP_RESTART_DEFAULT_TIMEOUT_MS = MCP_RESTART_SERVER_DEADLINE_MS + MCP_RESTART_CLIENT_HEADROOM_MS;
|
|
@@ -902,6 +910,25 @@ var DaemonClient = class {
|
|
|
902
910
|
}
|
|
903
911
|
);
|
|
904
912
|
}
|
|
913
|
+
/**
|
|
914
|
+
* Send text directly through the primary workspace's channel worker.
|
|
915
|
+
* This does not create or prompt an Agent session. Pre-flight the
|
|
916
|
+
* `channel_delivery` capability before calling across mixed daemon versions.
|
|
917
|
+
* A successful capability check does not guarantee worker liveness; callers
|
|
918
|
+
* must treat 503 `channel_worker_unavailable` as an expected outcome.
|
|
919
|
+
*/
|
|
920
|
+
async notify(req, opts) {
|
|
921
|
+
return await this.jsonRequest(
|
|
922
|
+
"/workspace/notify",
|
|
923
|
+
"POST /workspace/notify",
|
|
924
|
+
{
|
|
925
|
+
method: "POST",
|
|
926
|
+
body: req,
|
|
927
|
+
timeoutMs: opts?.timeoutMs ?? CHANNEL_NOTIFY_DEFAULT_TIMEOUT_MS,
|
|
928
|
+
mode: "rest"
|
|
929
|
+
}
|
|
930
|
+
);
|
|
931
|
+
}
|
|
905
932
|
async requireCapability(capability) {
|
|
906
933
|
const caps = await this.capabilities();
|
|
907
934
|
if (!caps.features.includes(capability)) {
|
|
@@ -968,13 +995,13 @@ var DaemonClient = class {
|
|
|
968
995
|
}
|
|
969
996
|
);
|
|
970
997
|
}
|
|
971
|
-
async reloadWorkspaceMcp() {
|
|
998
|
+
async reloadWorkspaceMcp(options = {}) {
|
|
972
999
|
return await this.fetchWithTimeout(
|
|
973
1000
|
`${this.baseUrl}/workspace/mcp/reload`,
|
|
974
1001
|
{
|
|
975
1002
|
method: "POST",
|
|
976
1003
|
headers: this.headers({ "Content-Type": "application/json" }),
|
|
977
|
-
body:
|
|
1004
|
+
body: JSON.stringify(options)
|
|
978
1005
|
},
|
|
979
1006
|
async (res) => {
|
|
980
1007
|
if (!res.ok) {
|
|
@@ -1628,9 +1655,47 @@ var DaemonClient = class {
|
|
|
1628
1655
|
MCP_RESTART_DEFAULT_TIMEOUT_MS
|
|
1629
1656
|
);
|
|
1630
1657
|
}
|
|
1631
|
-
async
|
|
1658
|
+
async *generateContentEvents(path, label, body, opts, parse, requireTerminal) {
|
|
1659
|
+
const res = await this.transport.fetch(`${this.baseUrl}${path}`, {
|
|
1660
|
+
method: "POST",
|
|
1661
|
+
headers: this.headers(
|
|
1662
|
+
{
|
|
1663
|
+
"Content-Type": "application/json",
|
|
1664
|
+
Accept: "text/event-stream"
|
|
1665
|
+
},
|
|
1666
|
+
opts?.clientId
|
|
1667
|
+
),
|
|
1668
|
+
body: JSON.stringify(body),
|
|
1669
|
+
signal: opts?.signal
|
|
1670
|
+
});
|
|
1671
|
+
if (!res.ok) throw await this.failOnError(res, label);
|
|
1672
|
+
if (!res.body) throw new Error("Generation response body is missing");
|
|
1673
|
+
let sawTerminal = false;
|
|
1674
|
+
for await (const event of parseSseStream(res.body, opts?.signal)) {
|
|
1675
|
+
const generationEvent = parse(event);
|
|
1676
|
+
if (!generationEvent) continue;
|
|
1677
|
+
sawTerminal = generationEvent.type === "done" || generationEvent.type === "error";
|
|
1678
|
+
yield generationEvent;
|
|
1679
|
+
if (requireTerminal && sawTerminal) return;
|
|
1680
|
+
}
|
|
1681
|
+
if (requireTerminal && !opts?.signal?.aborted && !sawTerminal) {
|
|
1682
|
+
throw new Error("Stream ended without terminal event");
|
|
1683
|
+
}
|
|
1684
|
+
}
|
|
1685
|
+
async *generateWorkspaceContent(prompt, opts) {
|
|
1686
|
+
yield* this.generateContentEvents(
|
|
1687
|
+
"/workspace/generate",
|
|
1688
|
+
"POST /workspace/generate",
|
|
1689
|
+
{ prompt },
|
|
1690
|
+
opts,
|
|
1691
|
+
parseSessionGenerationEvent,
|
|
1692
|
+
true
|
|
1693
|
+
);
|
|
1694
|
+
}
|
|
1695
|
+
async getWorkspaceAgent(agentType, opts = {}) {
|
|
1696
|
+
const url = opts.scope ? `${this.baseUrl}/workspace/agents/${urlEncode(agentType)}?scope=${urlEncode(opts.scope)}` : `${this.baseUrl}/workspace/agents/${urlEncode(agentType)}`;
|
|
1632
1697
|
return await this.fetchWithTimeout(
|
|
1633
|
-
|
|
1698
|
+
url,
|
|
1634
1699
|
{ headers: this.headers() },
|
|
1635
1700
|
async (res) => {
|
|
1636
1701
|
if (!res.ok) {
|
|
@@ -1766,7 +1831,8 @@ var DaemonClient = class {
|
|
|
1766
1831
|
...req.approvalMode !== void 0 ? { approvalMode: req.approvalMode } : {},
|
|
1767
1832
|
...req.sourceType !== void 0 ? { sourceType: req.sourceType } : {},
|
|
1768
1833
|
...req.sourceId !== void 0 ? { sourceId: req.sourceId } : {},
|
|
1769
|
-
...req.worktree !== void 0 ? { worktree: req.worktree } : {}
|
|
1834
|
+
...req.worktree !== void 0 ? { worktree: req.worktree } : {},
|
|
1835
|
+
...req.branch !== void 0 ? { branch: req.branch } : {}
|
|
1770
1836
|
})
|
|
1771
1837
|
},
|
|
1772
1838
|
async (res) => {
|
|
@@ -1880,6 +1946,20 @@ var DaemonClient = class {
|
|
|
1880
1946
|
}
|
|
1881
1947
|
);
|
|
1882
1948
|
}
|
|
1949
|
+
async resolveSubagentSession(sessionId, toolCallId, clientId) {
|
|
1950
|
+
return await this.jsonRequest(
|
|
1951
|
+
`/session/${urlEncode(sessionId)}/subagents/${urlEncode(toolCallId)}`,
|
|
1952
|
+
"GET /session/:id/subagents/:toolCallId",
|
|
1953
|
+
{ clientId, mode: "rest" }
|
|
1954
|
+
);
|
|
1955
|
+
}
|
|
1956
|
+
async cancelSubagentSession(sessionId, toolCallId, clientId) {
|
|
1957
|
+
return await this.jsonRequest(
|
|
1958
|
+
`/session/${urlEncode(sessionId)}/subagents/${urlEncode(toolCallId)}/cancel`,
|
|
1959
|
+
"POST /session/:id/subagents/:toolCallId/cancel",
|
|
1960
|
+
{ clientId, mode: "rest", method: "POST" }
|
|
1961
|
+
);
|
|
1962
|
+
}
|
|
1883
1963
|
async resumeSession(sessionId, req = {}, clientId) {
|
|
1884
1964
|
return this.restoreSession("resume", sessionId, req, clientId);
|
|
1885
1965
|
}
|
|
@@ -2191,29 +2271,14 @@ var DaemonClient = class {
|
|
|
2191
2271
|
return await res.json();
|
|
2192
2272
|
}
|
|
2193
2273
|
async *generateSessionContent(sessionId, prompt, opts) {
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
Accept: "text/event-stream"
|
|
2202
|
-
},
|
|
2203
|
-
opts?.clientId
|
|
2204
|
-
),
|
|
2205
|
-
body: JSON.stringify({ prompt }),
|
|
2206
|
-
signal: opts?.signal
|
|
2207
|
-
}
|
|
2274
|
+
yield* this.generateContentEvents(
|
|
2275
|
+
`/session/${urlEncode(sessionId)}/generate`,
|
|
2276
|
+
"POST /session/:id/generate",
|
|
2277
|
+
{ prompt },
|
|
2278
|
+
opts,
|
|
2279
|
+
parseSessionGenerationEvent,
|
|
2280
|
+
false
|
|
2208
2281
|
);
|
|
2209
|
-
if (!res.ok) {
|
|
2210
|
-
throw await this.failOnError(res, "POST /session/:id/generate");
|
|
2211
|
-
}
|
|
2212
|
-
if (!res.body) throw new Error("Generation response body is missing");
|
|
2213
|
-
for await (const event of parseSseStream(res.body, opts?.signal)) {
|
|
2214
|
-
const generationEvent = parseSessionGenerationEvent(event);
|
|
2215
|
-
if (generationEvent) yield generationEvent;
|
|
2216
|
-
}
|
|
2217
2282
|
}
|
|
2218
2283
|
async btwSession(sessionId, question, opts) {
|
|
2219
2284
|
const res = await this.transport.fetch(
|
|
@@ -2948,7 +3013,8 @@ var DaemonClient = class {
|
|
|
2948
3013
|
accept.promptId,
|
|
2949
3014
|
accept.lastEventId,
|
|
2950
3015
|
signal,
|
|
2951
|
-
clientId
|
|
3016
|
+
clientId,
|
|
3017
|
+
accept.eventEpoch
|
|
2952
3018
|
);
|
|
2953
3019
|
} finally {
|
|
2954
3020
|
releasePromptSlot();
|
|
@@ -3002,12 +3068,16 @@ var DaemonClient = class {
|
|
|
3002
3068
|
}
|
|
3003
3069
|
return await res.json();
|
|
3004
3070
|
}
|
|
3005
|
-
async _awaitTurnComplete(sessionId, promptId, lastEventId, signal, clientId) {
|
|
3071
|
+
async _awaitTurnComplete(sessionId, promptId, lastEventId, signal, clientId, eventEpoch) {
|
|
3006
3072
|
const sseAbort = new AbortController();
|
|
3007
3073
|
const composedSignal = signal ? composeAbortSignals2([signal, sseAbort.signal]) : sseAbort.signal;
|
|
3008
3074
|
try {
|
|
3009
3075
|
const events = this.subscribeEvents(sessionId, {
|
|
3010
3076
|
lastEventId,
|
|
3077
|
+
// Cursor and epoch both come from the 202 envelope: a daemon
|
|
3078
|
+
// restart between the 202 and this subscribe is detected as an
|
|
3079
|
+
// epoch mismatch instead of silently mis-resuming (DAEMON-001).
|
|
3080
|
+
...eventEpoch !== void 0 ? { epoch: eventEpoch } : {},
|
|
3011
3081
|
signal: composedSignal
|
|
3012
3082
|
});
|
|
3013
3083
|
for await (const event of events) {
|
|
@@ -3073,6 +3143,8 @@ var DaemonClient = class {
|
|
|
3073
3143
|
async *subscribeEvents(sessionId, opts = {}) {
|
|
3074
3144
|
yield* this.transport.subscribeEvents(sessionId, {
|
|
3075
3145
|
lastEventId: opts.lastEventId,
|
|
3146
|
+
epoch: opts.epoch,
|
|
3147
|
+
onEpoch: opts.onEpoch,
|
|
3076
3148
|
maxQueued: opts.maxQueued,
|
|
3077
3149
|
signal: opts.signal,
|
|
3078
3150
|
connectTimeoutMs: this.fetchTimeoutMs || void 0
|
|
@@ -3469,6 +3541,24 @@ var WorkspaceDaemonClient = class {
|
|
|
3469
3541
|
workspaceMcp() {
|
|
3470
3542
|
return this.get("/mcp", "GET /workspaces/:workspace/mcp");
|
|
3471
3543
|
}
|
|
3544
|
+
/**
|
|
3545
|
+
* Send text directly through this exact workspace's channel worker.
|
|
3546
|
+
* A successful capability pre-flight does not guarantee worker liveness;
|
|
3547
|
+
* callers must treat 503 `channel_worker_unavailable` as an expected outcome.
|
|
3548
|
+
*/
|
|
3549
|
+
notify(req, opts) {
|
|
3550
|
+
return this.client.workspaceJsonRequest(
|
|
3551
|
+
this.workspaceSelector,
|
|
3552
|
+
"/notify",
|
|
3553
|
+
"POST /workspaces/:workspace/notify",
|
|
3554
|
+
{
|
|
3555
|
+
method: "POST",
|
|
3556
|
+
body: req,
|
|
3557
|
+
timeoutMs: opts?.timeoutMs ?? CHANNEL_NOTIFY_DEFAULT_TIMEOUT_MS,
|
|
3558
|
+
mode: "rest"
|
|
3559
|
+
}
|
|
3560
|
+
);
|
|
3561
|
+
}
|
|
3472
3562
|
initializeWorkspaceMcp() {
|
|
3473
3563
|
return this.post(
|
|
3474
3564
|
"/mcp/initialize",
|
|
@@ -3476,11 +3566,11 @@ var WorkspaceDaemonClient = class {
|
|
|
3476
3566
|
{}
|
|
3477
3567
|
);
|
|
3478
3568
|
}
|
|
3479
|
-
reloadWorkspaceMcp() {
|
|
3569
|
+
reloadWorkspaceMcp(options = {}) {
|
|
3480
3570
|
return this.post(
|
|
3481
3571
|
"/mcp/reload",
|
|
3482
3572
|
"POST /workspaces/:workspace/mcp/reload",
|
|
3483
|
-
|
|
3573
|
+
options
|
|
3484
3574
|
);
|
|
3485
3575
|
}
|
|
3486
3576
|
workspaceVoice(clientId) {
|
|
@@ -4049,7 +4139,20 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4049
4139
|
replaySnapshot;
|
|
4050
4140
|
hasActivePrompt;
|
|
4051
4141
|
historyHasMore;
|
|
4142
|
+
/**
|
|
4143
|
+
* True when the load response flagged the replay snapshot as degraded
|
|
4144
|
+
* (`replayDegraded` — compaction failed at least once, so
|
|
4145
|
+
* `replaySnapshot` may lag behind live events). Prefer the full
|
|
4146
|
+
* transcript (see `fullTranscriptAvailable`) when set.
|
|
4147
|
+
*/
|
|
4148
|
+
replayDegraded;
|
|
4052
4149
|
lastSeenEventId;
|
|
4150
|
+
/**
|
|
4151
|
+
* Epoch token paired with {@link lastSeenEventId}. Seeded from the
|
|
4152
|
+
* load/resume/create response when available, refreshed from every
|
|
4153
|
+
* subscription's `X-Qwen-Event-Epoch` response header.
|
|
4154
|
+
*/
|
|
4155
|
+
lastSeenEpoch;
|
|
4053
4156
|
subscriptionActive = false;
|
|
4054
4157
|
/** In-flight `reattach()` so concurrent prompts re-register only once. */
|
|
4055
4158
|
reattaching;
|
|
@@ -4061,11 +4164,13 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4061
4164
|
this.state = { ...opts.state ?? {} };
|
|
4062
4165
|
this.hasActivePrompt = opts.hasActivePrompt ?? false;
|
|
4063
4166
|
this.historyHasMore = opts.historyHasMore ?? false;
|
|
4167
|
+
this.replayDegraded = opts.replayDegraded ?? false;
|
|
4064
4168
|
this.replaySnapshot = opts.replaySnapshot ?? {
|
|
4065
4169
|
compactedReplay: [],
|
|
4066
4170
|
liveJournal: []
|
|
4067
4171
|
};
|
|
4068
4172
|
this.lastSeenEventId = validateLastEventId(opts.lastEventId);
|
|
4173
|
+
this.lastSeenEpoch = opts.eventEpoch;
|
|
4069
4174
|
this.promptLimit = opts.maxPendingPromptsPerSession === void 0 ? opts.client.maxPendingPromptsPerSession : normalizePendingPromptLimit(opts.maxPendingPromptsPerSession);
|
|
4070
4175
|
}
|
|
4071
4176
|
/**
|
|
@@ -4078,7 +4183,11 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4078
4183
|
client,
|
|
4079
4184
|
session,
|
|
4080
4185
|
hasActivePrompt: session.hasActivePrompt,
|
|
4081
|
-
lastEventId
|
|
4186
|
+
lastEventId,
|
|
4187
|
+
// Newer daemons may stamp the bus epoch on the create/attach
|
|
4188
|
+
// response; older ones don't — the first subscription then learns it
|
|
4189
|
+
// from the `X-Qwen-Event-Epoch` response header.
|
|
4190
|
+
eventEpoch: session.eventEpoch
|
|
4082
4191
|
});
|
|
4083
4192
|
}
|
|
4084
4193
|
/**
|
|
@@ -4093,7 +4202,9 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4093
4202
|
compactedReplay,
|
|
4094
4203
|
liveJournal,
|
|
4095
4204
|
historyHasMore,
|
|
4205
|
+
replayDegraded,
|
|
4096
4206
|
lastEventId: serverLastEventId,
|
|
4207
|
+
eventEpoch,
|
|
4097
4208
|
...session
|
|
4098
4209
|
} = await client.loadSession(sessionId, req, clientId);
|
|
4099
4210
|
return new _DaemonSessionClient({
|
|
@@ -4102,11 +4213,13 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4102
4213
|
hasActivePrompt,
|
|
4103
4214
|
state,
|
|
4104
4215
|
lastEventId: serverLastEventId ?? 0,
|
|
4216
|
+
eventEpoch,
|
|
4105
4217
|
replaySnapshot: {
|
|
4106
4218
|
compactedReplay: compactedReplay ?? [],
|
|
4107
4219
|
liveJournal: liveJournal ?? []
|
|
4108
4220
|
},
|
|
4109
|
-
historyHasMore
|
|
4221
|
+
historyHasMore,
|
|
4222
|
+
replayDegraded
|
|
4110
4223
|
});
|
|
4111
4224
|
}
|
|
4112
4225
|
/**
|
|
@@ -4120,6 +4233,7 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4120
4233
|
state,
|
|
4121
4234
|
hasActivePrompt,
|
|
4122
4235
|
lastEventId: serverLastEventId,
|
|
4236
|
+
eventEpoch,
|
|
4123
4237
|
...session
|
|
4124
4238
|
} = await client.resumeSession(sessionId, req, clientId);
|
|
4125
4239
|
return new _DaemonSessionClient({
|
|
@@ -4127,7 +4241,8 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4127
4241
|
session,
|
|
4128
4242
|
hasActivePrompt,
|
|
4129
4243
|
state,
|
|
4130
|
-
lastEventId: serverLastEventId ?? 0
|
|
4244
|
+
lastEventId: serverLastEventId ?? 0,
|
|
4245
|
+
eventEpoch
|
|
4131
4246
|
});
|
|
4132
4247
|
}
|
|
4133
4248
|
get sessionId() {
|
|
@@ -4145,6 +4260,9 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4145
4260
|
get worktree() {
|
|
4146
4261
|
return this.session.worktree;
|
|
4147
4262
|
}
|
|
4263
|
+
get branch() {
|
|
4264
|
+
return this.session.branch;
|
|
4265
|
+
}
|
|
4148
4266
|
get lastEventId() {
|
|
4149
4267
|
return this.lastSeenEventId;
|
|
4150
4268
|
}
|
|
@@ -4511,9 +4629,16 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
4511
4629
|
try {
|
|
4512
4630
|
const { resume = true, ...subscribeOpts } = opts;
|
|
4513
4631
|
const lastEventId = subscribeOpts.lastEventId ?? (resume ? this.lastSeenEventId : void 0);
|
|
4632
|
+
const epoch = subscribeOpts.epoch ?? (resume ? this.lastSeenEpoch : void 0);
|
|
4633
|
+
const callerOnEpoch = subscribeOpts.onEpoch;
|
|
4514
4634
|
for await (const event of this.client.subscribeEvents(this.sessionId, {
|
|
4515
4635
|
...subscribeOpts,
|
|
4516
|
-
lastEventId
|
|
4636
|
+
lastEventId,
|
|
4637
|
+
...epoch !== void 0 ? { epoch } : {},
|
|
4638
|
+
onEpoch: /* @__PURE__ */ __name((learned) => {
|
|
4639
|
+
this.lastSeenEpoch = learned;
|
|
4640
|
+
callerOnEpoch?.(learned);
|
|
4641
|
+
}, "onEpoch")
|
|
4517
4642
|
})) {
|
|
4518
4643
|
this._dispatchTurnEvent(event);
|
|
4519
4644
|
yield event;
|
|
@@ -4686,6 +4811,7 @@ var DAEMON_KNOWN_EVENT_TYPE_VALUES = [
|
|
|
4686
4811
|
// consumers silently drop this event via `asKnownDaemonEvent`
|
|
4687
4812
|
// returning undefined (no protocol bump required).
|
|
4688
4813
|
"followup_suggestion",
|
|
4814
|
+
"channel_delivery_result",
|
|
4689
4815
|
"user_shell_command",
|
|
4690
4816
|
"user_shell_result",
|
|
4691
4817
|
"turn_complete",
|
|
@@ -4874,6 +5000,8 @@ function asKnownDaemonEvent(event) {
|
|
|
4874
5000
|
return event.data != null && typeof event.data === "object" ? event : void 0;
|
|
4875
5001
|
case "followup_suggestion":
|
|
4876
5002
|
return isFollowupSuggestionData(event.data) ? event : void 0;
|
|
5003
|
+
case "channel_delivery_result":
|
|
5004
|
+
return isChannelDeliveryResultData(event.data) ? event : void 0;
|
|
4877
5005
|
case "mcp_server_added":
|
|
4878
5006
|
return isMcpServerAddedData(event.data) ? event : void 0;
|
|
4879
5007
|
case "mcp_server_removed":
|
|
@@ -5187,6 +5315,7 @@ function reduceDaemonSessionEvent(state, rawEvent) {
|
|
|
5187
5315
|
case PENDING_PROMPT_ADDED_EVENT:
|
|
5188
5316
|
case PENDING_PROMPT_STARTED_EVENT:
|
|
5189
5317
|
case PENDING_PROMPT_COMPLETED_EVENT:
|
|
5318
|
+
case "channel_delivery_result":
|
|
5190
5319
|
return base;
|
|
5191
5320
|
case "session_rewound":
|
|
5192
5321
|
return {
|
|
@@ -5610,6 +5739,38 @@ function isFollowupSuggestionData(value) {
|
|
|
5610
5739
|
return isRecord(value) && isNonEmptyString(value["sessionId"]) && isNonEmptyString(value["suggestion"]) && isNonEmptyString(value["promptId"]);
|
|
5611
5740
|
}
|
|
5612
5741
|
__name(isFollowupSuggestionData, "isFollowupSuggestionData");
|
|
5742
|
+
var CHANNEL_DELIVERY_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
5743
|
+
"channel_worker_unavailable",
|
|
5744
|
+
"channel_delivery_timeout",
|
|
5745
|
+
"channel_delivery_invalid",
|
|
5746
|
+
"channel_delivery_rejected",
|
|
5747
|
+
"channel_delivery_queue_full",
|
|
5748
|
+
"channel_delivery_failed"
|
|
5749
|
+
]);
|
|
5750
|
+
function isChannelDeliveryResultData(value) {
|
|
5751
|
+
if (!isRecord(value) || !isNonEmptyString(value["sessionId"]) || !isNonEmptyString(value["deliveryId"]) || value["status"] !== "delivered" && value["status"] !== "failed" && value["status"] !== "skipped" || !Object.keys(value).every(
|
|
5752
|
+
(key) => [
|
|
5753
|
+
"sessionId",
|
|
5754
|
+
"deliveryId",
|
|
5755
|
+
"source",
|
|
5756
|
+
"status",
|
|
5757
|
+
"promptId",
|
|
5758
|
+
"taskId",
|
|
5759
|
+
"firedAt",
|
|
5760
|
+
"code",
|
|
5761
|
+
"error"
|
|
5762
|
+
].includes(key)
|
|
5763
|
+
)) {
|
|
5764
|
+
return false;
|
|
5765
|
+
}
|
|
5766
|
+
const correlationValid = value["source"] === "prompt" && isNonEmptyString(value["promptId"]) && value["taskId"] === void 0 && value["firedAt"] === void 0 || value["source"] === "scheduled" && isNonEmptyString(value["taskId"]) && isFiniteNumber(value["firedAt"]) && value["promptId"] === void 0;
|
|
5767
|
+
if (!correlationValid) return false;
|
|
5768
|
+
if (value["status"] === "failed") {
|
|
5769
|
+
return typeof value["code"] === "string" && CHANNEL_DELIVERY_ERROR_CODES.has(value["code"]) && isNonEmptyString(value["error"]);
|
|
5770
|
+
}
|
|
5771
|
+
return value["code"] === void 0 && value["error"] === void 0;
|
|
5772
|
+
}
|
|
5773
|
+
__name(isChannelDeliveryResultData, "isChannelDeliveryResultData");
|
|
5613
5774
|
function isMcpServerAddedData(value) {
|
|
5614
5775
|
if (!isRecord(value)) return false;
|
|
5615
5776
|
if (!isNonEmptyString(value["name"])) return false;
|
|
@@ -6351,26 +6512,43 @@ function extractServerTimestamp(event) {
|
|
|
6351
6512
|
}
|
|
6352
6513
|
if (isRecord2(event.data)) {
|
|
6353
6514
|
const dataMeta = event.data["_meta"];
|
|
6515
|
+
const update = event.data["update"];
|
|
6516
|
+
const updateMeta = isRecord2(update) ? update["_meta"] : void 0;
|
|
6354
6517
|
if (isRecord2(dataMeta)) {
|
|
6355
6518
|
const ts = dataMeta["serverTimestamp"];
|
|
6356
6519
|
if (typeof ts === "number" && Number.isFinite(ts)) return ts;
|
|
6357
6520
|
}
|
|
6358
|
-
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
|
|
6362
|
-
const serverTs = updateMeta["serverTimestamp"];
|
|
6363
|
-
if (typeof serverTs === "number" && Number.isFinite(serverTs)) {
|
|
6364
|
-
return serverTs;
|
|
6365
|
-
}
|
|
6366
|
-
const ts = updateMeta["timestamp"];
|
|
6367
|
-
if (typeof ts === "number" && Number.isFinite(ts)) return ts;
|
|
6521
|
+
if (isRecord2(updateMeta)) {
|
|
6522
|
+
const serverTs = updateMeta["serverTimestamp"];
|
|
6523
|
+
if (typeof serverTs === "number" && Number.isFinite(serverTs)) {
|
|
6524
|
+
return serverTs;
|
|
6368
6525
|
}
|
|
6369
6526
|
}
|
|
6527
|
+
const timestampCandidates = [
|
|
6528
|
+
isRecord2(updateMeta) ? updateMeta["timestamp"] : void 0,
|
|
6529
|
+
isRecord2(update) ? update["timestamp"] : void 0,
|
|
6530
|
+
isRecord2(dataMeta) ? dataMeta["timestamp"] : void 0,
|
|
6531
|
+
event.data["timestamp"]
|
|
6532
|
+
];
|
|
6533
|
+
for (const candidate of timestampCandidates) {
|
|
6534
|
+
const timestamp = parseTimestamp(candidate);
|
|
6535
|
+
if (timestamp !== void 0) return timestamp;
|
|
6536
|
+
}
|
|
6370
6537
|
}
|
|
6371
6538
|
return void 0;
|
|
6372
6539
|
}
|
|
6373
6540
|
__name(extractServerTimestamp, "extractServerTimestamp");
|
|
6541
|
+
function parseTimestamp(value) {
|
|
6542
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
6543
|
+
if (typeof value !== "string") return void 0;
|
|
6544
|
+
if (/^\d+$/.test(value)) {
|
|
6545
|
+
const numeric = Number(value);
|
|
6546
|
+
return Number.isFinite(numeric) ? numeric : void 0;
|
|
6547
|
+
}
|
|
6548
|
+
const parsed = Date.parse(value);
|
|
6549
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
6550
|
+
}
|
|
6551
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
6374
6552
|
function normalizeSessionUpdate(event, base, opts) {
|
|
6375
6553
|
const update = getSessionUpdatePayload(event.data);
|
|
6376
6554
|
if (!update) {
|
|
@@ -6563,7 +6741,8 @@ function normalizeToolUpdate(update, base) {
|
|
|
6563
6741
|
const metadata = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
6564
6742
|
const toolName = getString2(update, "toolName") ?? getString2(update, "name") ?? (metadata ? getString2(metadata, "toolName") : void 0) ?? (metadata ? getString2(metadata, "name") : void 0);
|
|
6565
6743
|
const toolKind = getString2(update, "kind");
|
|
6566
|
-
const
|
|
6744
|
+
const explicitTitle = getString2(update, "title");
|
|
6745
|
+
const title = explicitTitle ?? (getString2(update, "sessionUpdate") === "tool_call" ? toolName ?? toolKind : void 0);
|
|
6567
6746
|
const rawInputSource = update["rawInput"] ?? update["input"] ?? update["args"];
|
|
6568
6747
|
const rawOutputSource = update["rawOutput"] ?? update["output"] ?? update["result"];
|
|
6569
6748
|
const rawInput = rawInputSource !== void 0 ? redactSensitiveFields(rawInputSource) : void 0;
|
|
@@ -7692,7 +7871,8 @@ function createDaemonTranscriptState(opts = {}) {
|
|
|
7692
7871
|
resyncRequiredCount: 0,
|
|
7693
7872
|
nextOrdinal: 1,
|
|
7694
7873
|
now: opts.now ?? Date.now(),
|
|
7695
|
-
maxBlocks: opts.maxBlocks ?? DEFAULT_MAX_BLOCKS
|
|
7874
|
+
maxBlocks: opts.maxBlocks ?? DEFAULT_MAX_BLOCKS,
|
|
7875
|
+
retainSubagentBlocks: opts.retainSubagentBlocks ?? true
|
|
7696
7876
|
};
|
|
7697
7877
|
if (opts.onTruncation) truncationCallbacks.set(state, opts.onTruncation);
|
|
7698
7878
|
return state;
|
|
@@ -7811,6 +7991,7 @@ function applyDaemonTranscriptEvent(next, event) {
|
|
|
7811
7991
|
break;
|
|
7812
7992
|
}
|
|
7813
7993
|
case "assistant.text.delta":
|
|
7994
|
+
if (event.parentToolCallId && !next.retainSubagentBlocks) break;
|
|
7814
7995
|
appendTextDelta(
|
|
7815
7996
|
next,
|
|
7816
7997
|
"assistant",
|
|
@@ -7826,9 +8007,14 @@ function applyDaemonTranscriptEvent(next, event) {
|
|
|
7826
8007
|
}
|
|
7827
8008
|
break;
|
|
7828
8009
|
case "assistant.usage":
|
|
7829
|
-
|
|
8010
|
+
if (event.parentToolCallId && !next.retainSubagentBlocks) {
|
|
8011
|
+
applySubagentUsageToParentTool(next, event);
|
|
8012
|
+
} else {
|
|
8013
|
+
applyAssistantUsage(next, event);
|
|
8014
|
+
}
|
|
7830
8015
|
break;
|
|
7831
8016
|
case "thought.text.delta":
|
|
8017
|
+
if (event.parentToolCallId && !next.retainSubagentBlocks) break;
|
|
7832
8018
|
appendTextDelta(
|
|
7833
8019
|
next,
|
|
7834
8020
|
"thought",
|
|
@@ -7838,6 +8024,10 @@ function applyDaemonTranscriptEvent(next, event) {
|
|
|
7838
8024
|
);
|
|
7839
8025
|
break;
|
|
7840
8026
|
case "tool.update":
|
|
8027
|
+
if (event.parentToolCallId && !next.retainSubagentBlocks) {
|
|
8028
|
+
discardToolBlock(next, event.toolCallId);
|
|
8029
|
+
break;
|
|
8030
|
+
}
|
|
7841
8031
|
upsertToolBlock(next, event);
|
|
7842
8032
|
break;
|
|
7843
8033
|
case "shell.output":
|
|
@@ -7993,6 +8183,35 @@ function applyAssistantUsage(state, event) {
|
|
|
7993
8183
|
block.updatedAt = state.now;
|
|
7994
8184
|
}
|
|
7995
8185
|
__name(applyAssistantUsage, "applyAssistantUsage");
|
|
8186
|
+
function applySubagentUsageToParentTool(state, event) {
|
|
8187
|
+
if (!event.parentToolCallId) return;
|
|
8188
|
+
const block = getWritableBlockById(
|
|
8189
|
+
state,
|
|
8190
|
+
state.toolBlockByCallId[event.parentToolCallId]
|
|
8191
|
+
);
|
|
8192
|
+
if (block?.kind !== "tool") return;
|
|
8193
|
+
const current = isRecord2(block.rawOutput) ? block.rawOutput : void 0;
|
|
8194
|
+
const currentSummary = isRecord2(current?.["executionSummary"]) ? current["executionSummary"] : void 0;
|
|
8195
|
+
const inputTokens = finiteNumber(currentSummary?.["inputTokens"]) + event.usage.inputTokens;
|
|
8196
|
+
const outputTokens = finiteNumber(currentSummary?.["outputTokens"]) + event.usage.outputTokens;
|
|
8197
|
+
const cachedTokens = finiteNumber(currentSummary?.["cachedTokens"]) + (event.usage.cachedTokens ?? 0);
|
|
8198
|
+
block.rawOutput = {
|
|
8199
|
+
...current ?? { type: "task_execution", status: "running" },
|
|
8200
|
+
executionSummary: {
|
|
8201
|
+
...currentSummary ?? {},
|
|
8202
|
+
inputTokens,
|
|
8203
|
+
outputTokens,
|
|
8204
|
+
cachedTokens,
|
|
8205
|
+
totalTokens: inputTokens + outputTokens
|
|
8206
|
+
}
|
|
8207
|
+
};
|
|
8208
|
+
block.updatedAt = state.now;
|
|
8209
|
+
}
|
|
8210
|
+
__name(applySubagentUsageToParentTool, "applySubagentUsageToParentTool");
|
|
8211
|
+
function finiteNumber(value) {
|
|
8212
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
8213
|
+
}
|
|
8214
|
+
__name(finiteNumber, "finiteNumber");
|
|
7996
8215
|
function clearActiveThought(state, event) {
|
|
7997
8216
|
finalizeStreamingTextBlock(state, state.activeThoughtBlockId, event);
|
|
7998
8217
|
state.activeThoughtBlockId = void 0;
|
|
@@ -8095,6 +8314,11 @@ function finishAssistant(state, event) {
|
|
|
8095
8314
|
}
|
|
8096
8315
|
__name(finishAssistant, "finishAssistant");
|
|
8097
8316
|
function upsertToolBlock(state, event) {
|
|
8317
|
+
const compactTaskOutput = !state.retainSubagentBlocks && isRecord2(event.rawOutput) && event.rawOutput["type"] === "task_execution";
|
|
8318
|
+
let rawOutput = compactTaskExecutionOutput(
|
|
8319
|
+
event.rawOutput,
|
|
8320
|
+
state.retainSubagentBlocks
|
|
8321
|
+
);
|
|
8098
8322
|
const existingId = state.toolBlockByCallId[event.toolCallId];
|
|
8099
8323
|
if (existingId === TRIMMED_TOOL_BLOCK_ID) {
|
|
8100
8324
|
if (shouldRecreateTrimmedToolBlock(event)) {
|
|
@@ -8128,10 +8352,49 @@ function upsertToolBlock(state, event) {
|
|
|
8128
8352
|
existing.updatedAt = state.now;
|
|
8129
8353
|
if (event.eventId !== void 0) existing.eventId = event.eventId;
|
|
8130
8354
|
if (event.details) existing.details = event.details;
|
|
8131
|
-
if (
|
|
8355
|
+
if (compactTaskOutput) delete existing.content;
|
|
8356
|
+
else if (event.content !== void 0) existing.content = event.content;
|
|
8132
8357
|
if (event.locations !== void 0) existing.locations = event.locations;
|
|
8133
8358
|
if (event.rawInput !== void 0) existing.rawInput = event.rawInput;
|
|
8134
|
-
if (
|
|
8359
|
+
if (rawOutput !== void 0) {
|
|
8360
|
+
if (compactTaskOutput && isRecord2(rawOutput) && isRecord2(existing.rawOutput)) {
|
|
8361
|
+
const prevSummary = isRecord2(existing.rawOutput["executionSummary"]) ? existing.rawOutput["executionSummary"] : void 0;
|
|
8362
|
+
const nextSummary = isRecord2(rawOutput["executionSummary"]) ? rawOutput["executionSummary"] : void 0;
|
|
8363
|
+
if (prevSummary && nextSummary) {
|
|
8364
|
+
const inputTokens = Math.max(
|
|
8365
|
+
finiteNumber(prevSummary["inputTokens"]),
|
|
8366
|
+
finiteNumber(nextSummary["inputTokens"])
|
|
8367
|
+
);
|
|
8368
|
+
const outputTokens = Math.max(
|
|
8369
|
+
finiteNumber(prevSummary["outputTokens"]),
|
|
8370
|
+
finiteNumber(nextSummary["outputTokens"])
|
|
8371
|
+
);
|
|
8372
|
+
rawOutput = {
|
|
8373
|
+
...rawOutput,
|
|
8374
|
+
executionSummary: {
|
|
8375
|
+
...nextSummary,
|
|
8376
|
+
inputTokens,
|
|
8377
|
+
outputTokens,
|
|
8378
|
+
cachedTokens: Math.max(
|
|
8379
|
+
finiteNumber(prevSummary["cachedTokens"]),
|
|
8380
|
+
finiteNumber(nextSummary["cachedTokens"])
|
|
8381
|
+
),
|
|
8382
|
+
totalTokens: Math.max(
|
|
8383
|
+
finiteNumber(prevSummary["totalTokens"]),
|
|
8384
|
+
finiteNumber(nextSummary["totalTokens"]),
|
|
8385
|
+
inputTokens + outputTokens
|
|
8386
|
+
)
|
|
8387
|
+
}
|
|
8388
|
+
};
|
|
8389
|
+
} else if (prevSummary) {
|
|
8390
|
+
rawOutput = {
|
|
8391
|
+
...rawOutput,
|
|
8392
|
+
executionSummary: { ...prevSummary }
|
|
8393
|
+
};
|
|
8394
|
+
}
|
|
8395
|
+
}
|
|
8396
|
+
existing.rawOutput = rawOutput;
|
|
8397
|
+
}
|
|
8135
8398
|
existing.sourceRecordIds = unionStrings(
|
|
8136
8399
|
existing.sourceRecordIds,
|
|
8137
8400
|
event.sourceRecordIds
|
|
@@ -8172,10 +8435,10 @@ function upsertToolBlock(state, event) {
|
|
|
8172
8435
|
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
8173
8436
|
...event.sourceRecordIds ? { sourceRecordIds: [...event.sourceRecordIds] } : {},
|
|
8174
8437
|
...event.details ? { details: event.details } : {},
|
|
8175
|
-
|
|
8438
|
+
...!compactTaskOutput && event.content !== void 0 ? { content: event.content } : {},
|
|
8176
8439
|
...event.locations !== void 0 ? { locations: event.locations } : {},
|
|
8177
8440
|
...event.rawInput !== void 0 ? { rawInput: event.rawInput } : {},
|
|
8178
|
-
...
|
|
8441
|
+
...rawOutput !== void 0 ? { rawOutput } : {},
|
|
8179
8442
|
...event.toolName ? { toolName: event.toolName } : {},
|
|
8180
8443
|
...event.toolKind ? { toolKind: event.toolKind } : {},
|
|
8181
8444
|
...event.parentToolCallId ? { parentToolCallId: event.parentToolCallId } : {},
|
|
@@ -8196,6 +8459,38 @@ function upsertToolBlock(state, event) {
|
|
|
8196
8459
|
clearActiveText(state, event.parentToolCallId);
|
|
8197
8460
|
}
|
|
8198
8461
|
__name(upsertToolBlock, "upsertToolBlock");
|
|
8462
|
+
function discardToolBlock(state, toolCallId) {
|
|
8463
|
+
const blockId = state.toolBlockByCallId[toolCallId];
|
|
8464
|
+
if (!blockId || blockId === TRIMMED_TOOL_BLOCK_ID) return;
|
|
8465
|
+
takeBlocksOwnership(state);
|
|
8466
|
+
state.blocks = state.blocks.filter((block) => block.id !== blockId);
|
|
8467
|
+
state.blockIndexById = rebuildDaemonTranscriptBlockIndex(state.blocks);
|
|
8468
|
+
delete state.toolBlockByCallId[toolCallId];
|
|
8469
|
+
delete state.toolProgress[toolCallId];
|
|
8470
|
+
if (state.currentToolCallId === toolCallId) {
|
|
8471
|
+
state.currentToolCallId = void 0;
|
|
8472
|
+
}
|
|
8473
|
+
}
|
|
8474
|
+
__name(discardToolBlock, "discardToolBlock");
|
|
8475
|
+
function compactTaskExecutionOutput(rawOutput, retainSubagentBlocks) {
|
|
8476
|
+
if (retainSubagentBlocks || !isRecord2(rawOutput) || rawOutput["type"] !== "task_execution") {
|
|
8477
|
+
return rawOutput;
|
|
8478
|
+
}
|
|
8479
|
+
const compact = { type: "task_execution" };
|
|
8480
|
+
for (const key of [
|
|
8481
|
+
"subagentName",
|
|
8482
|
+
"subagentColor",
|
|
8483
|
+
"taskDescription",
|
|
8484
|
+
"status",
|
|
8485
|
+
"terminateReason",
|
|
8486
|
+
"tokenCount",
|
|
8487
|
+
"executionSummary"
|
|
8488
|
+
]) {
|
|
8489
|
+
if (rawOutput[key] !== void 0) compact[key] = rawOutput[key];
|
|
8490
|
+
}
|
|
8491
|
+
return compact;
|
|
8492
|
+
}
|
|
8493
|
+
__name(compactTaskExecutionOutput, "compactTaskExecutionOutput");
|
|
8199
8494
|
function updateCurrentToolPointer(state, toolCallId, status) {
|
|
8200
8495
|
if (status === void 0) return;
|
|
8201
8496
|
if (IN_FLIGHT_TOOL_STATUSES.has(status)) {
|
|
@@ -8425,6 +8720,7 @@ function cloneTranscriptState(state, opts) {
|
|
|
8425
8720
|
...state,
|
|
8426
8721
|
now: opts.now ?? Date.now(),
|
|
8427
8722
|
maxBlocks: opts.maxBlocks ?? state.maxBlocks,
|
|
8723
|
+
retainSubagentBlocks: opts.retainSubagentBlocks ?? state.retainSubagentBlocks,
|
|
8428
8724
|
// Lazy copy-on-write for
|
|
8429
8725
|
// `blocks` + `blockIndexById`. Eager `[...state.blocks]` defeated the
|
|
8430
8726
|
// `sortedBlocksCache` / `childrenIndexCache` WeakMaps — every dispatch
|
|
@@ -8894,6 +9190,7 @@ function createDaemonTranscriptStore(seed = {}) {
|
|
|
8894
9190
|
reset(nextSeed = {}) {
|
|
8895
9191
|
state = createState({
|
|
8896
9192
|
maxBlocks: nextSeed.maxBlocks ?? state.maxBlocks,
|
|
9193
|
+
retainSubagentBlocks: nextSeed.retainSubagentBlocks ?? state.retainSubagentBlocks,
|
|
8897
9194
|
...nextSeed
|
|
8898
9195
|
});
|
|
8899
9196
|
scheduleNotify();
|
|
@@ -9003,7 +9300,7 @@ function daemonUiEventToTerminalText(event) {
|
|
|
9003
9300
|
case "tool.update":
|
|
9004
9301
|
return terminalLine(
|
|
9005
9302
|
`tool ${event.status}`,
|
|
9006
|
-
`${event.title}${event.details ? ` ${event.details}` : ""}`,
|
|
9303
|
+
`${event.title ?? event.toolName ?? event.toolKind ?? "Tool"}${event.details ? ` ${event.details}` : ""}`,
|
|
9007
9304
|
"38;5;75"
|
|
9008
9305
|
);
|
|
9009
9306
|
case "shell.output":
|