@qwen-code/qwen-code 0.23.2-preview.0 → 0.23.3-nightly.20260910.c46cb85cf2
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/README.md +35 -15
- package/bundled/computer-use/SKILL.md +1 -1
- package/bundled/goal-draft/SKILL.md +2 -2
- package/bundled/qc-helper/docs/configuration/auth.md +1 -1
- package/bundled/qc-helper/docs/configuration/model-providers.md +76 -34
- package/bundled/qc-helper/docs/configuration/settings.md +5 -3
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +1 -21
- package/bundled/qc-helper/docs/features/channels/dws.md +7 -1
- package/bundled/qc-helper/docs/features/channels/github.md +1 -9
- package/bundled/qc-helper/docs/features/channels/overview.md +30 -56
- package/bundled/qc-helper/docs/features/channels/qqbot.md +1 -2
- package/bundled/qc-helper/docs/features/commands.md +105 -18
- package/bundled/qc-helper/docs/features/computer-use.md +1 -1
- package/bundled/qc-helper/docs/features/cross-session-protocol.md +320 -0
- package/bundled/qc-helper/docs/features/goals.md +5 -3
- package/bundled/qc-helper/docs/features/hooks.md +14 -13
- package/bundled/qc-helper/docs/features/sub-agents.md +8 -0
- package/bundled/qc-helper/docs/qwen-serve.md +84 -53
- package/bundled/review/SKILL.md +82 -79
- package/bundled/review/references/posting.md +31 -14
- package/chunks/{MaxSizedBox-ZZJT3PJF.js → MaxSizedBox-UZW24XUX.js} +63 -55
- package/chunks/{StandaloneSessionPicker-DIOSZTMX.js → StandaloneSessionPicker-IDK7NAZL.js} +85 -77
- package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-ARO4II44.js} +2 -2
- package/chunks/acp-subagent-executor-7TLJGISS.js +919 -0
- package/chunks/{acpAgent-62JUP5A7.js → acpAgent-YRCNNIIU.js} +939 -306
- package/chunks/{agent-NLPEQQDZ.js → agent-SGU5EE7U.js} +47 -41
- package/chunks/{agent-headless-Y2GR5F2Q.js → agent-headless-JVYBLNLT.js} +47 -41
- package/chunks/{anthropicContentGenerator-I7LQZH26.js → anthropicContentGenerator-SGIR5IKF.js} +68 -36
- package/chunks/{artifact-tool-P52OKKEF.js → artifact-tool-PMYZCYNH.js} +2 -2
- package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-4M4YYIB4.js} +2 -2
- package/chunks/{bridge-Q66BD62H.js → bridge-YF6NYRPZ.js} +68 -60
- package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
- package/chunks/{channel-management-service-TRTLQTSV.js → channel-management-service-E4HTMU7T.js} +9 -9
- package/chunks/{channel-settings-store-R5STFWUW.js → channel-settings-store-FZ5VKHQD.js} +74 -66
- package/chunks/{channel-worker-group-PIYPVCTF.js → channel-worker-group-X6WH4XWF.js} +9 -9
- package/chunks/{channel-worker-manager-FQHEDTD2.js → channel-worker-manager-SICFJDPJ.js} +19 -10
- package/chunks/{channel-worker-supervisor-XJPZZ3VK.js → channel-worker-supervisor-HSFAKML6.js} +6 -6
- package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
- package/chunks/{chunk-OIPUQE3S.js → chunk-34ZYDM3F.js} +27 -12
- package/chunks/{chunk-HIXUUCGY.js → chunk-36HCNKDS.js} +1 -1
- package/chunks/{chunk-6YEOCHSE.js → chunk-3FPYT6QC.js} +101 -31
- package/chunks/{chunk-NFIDVZND.js → chunk-3I7W2POO.js} +3 -22
- package/chunks/{chunk-W3ONSAYO.js → chunk-3VPFA6L2.js} +3 -3
- package/chunks/chunk-532WHF4F.js +127 -0
- package/chunks/{chunk-J3TJH52D.js → chunk-5FFAUU4T.js} +1 -1
- package/chunks/{chunk-G5QLLD53.js → chunk-5FKZ7KFQ.js} +1864 -35
- package/chunks/{chunk-B44JBZBB.js → chunk-5GLDOLNQ.js} +132 -27
- package/chunks/{chunk-ORREXWOM.js → chunk-5ZJ3KK5J.js} +5 -5
- package/chunks/{chunk-2OR32P5M.js → chunk-6EDWSKN4.js} +125 -10
- package/chunks/{chunk-EA4NFWVG.js → chunk-6EOMQPTS.js} +4 -4
- package/chunks/{chunk-45ROPFQY.js → chunk-6NONRGYX.js} +1 -1
- package/chunks/{chunk-EHTKOO6W.js → chunk-6UK77U7D.js} +46 -3
- package/chunks/{chunk-QXXBW2G4.js → chunk-72BGC7RT.js} +4 -4
- package/chunks/{chunk-CRZBDVP2.js → chunk-74JEYK2C.js} +10 -10
- package/chunks/{chunk-B54PFQS5.js → chunk-7CLLH5TI.js} +1 -1
- package/chunks/{chunk-CG2PDIGD.js → chunk-7XM6KEVW.js} +1 -1
- package/chunks/{chunk-CALNF3Z3.js → chunk-7XVQNDFB.js} +1 -1
- package/chunks/{chunk-TK4XHPKW.js → chunk-7ZKDPTYO.js} +2 -2
- package/chunks/{chunk-ZIPYCXQP.js → chunk-7ZVIGDZF.js} +1 -1
- package/chunks/chunk-AEY27Z35.js +1411 -0
- package/chunks/{chunk-WIRYFL2L.js → chunk-ATH66AEU.js} +64 -59
- package/chunks/{chunk-33MLFMCL.js → chunk-AW2SIT3B.js} +3 -3
- package/chunks/{chunk-4BLTSTF6.js → chunk-AWMJRE5N.js} +4 -4
- package/chunks/chunk-AYEJOTIU.js +43 -0
- package/chunks/{chunk-M73KHGNR.js → chunk-B2TGBZXY.js} +420 -227
- package/chunks/{chunk-XDNFODER.js → chunk-B6BDT4RX.js} +1 -1
- package/chunks/{chunk-WZ4YULVF.js → chunk-BHR6IN2X.js} +3251 -974
- package/chunks/{chunk-GXIHBIHC.js → chunk-BI3WSRQE.js} +61 -72
- package/chunks/{chunk-NVS4Z6GT.js → chunk-BQOP3K76.js} +1 -1
- package/chunks/{chunk-R2266LQ5.js → chunk-BTWGOKHU.js} +2 -2
- package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
- package/chunks/{chunk-XVTCSVBK.js → chunk-C4NLHK7X.js} +227 -298
- package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
- package/chunks/chunk-CAAMI77K.js +937 -0
- package/chunks/chunk-CF5KXZZX.js +150 -0
- package/chunks/{chunk-SOA4HKRJ.js → chunk-CGKEUUYG.js} +2 -2
- package/chunks/{chunk-BF3RUIVP.js → chunk-CH2YDT6X.js} +36 -38
- package/chunks/{chunk-5HBA2Z7V.js → chunk-CJ3DHN5I.js} +3 -3
- package/chunks/{chunk-3BTHHXXE.js → chunk-CSHX5ZC4.js} +1 -1
- package/chunks/{chunk-UYDQYDW2.js → chunk-CUK6F5UF.js} +1 -1
- package/chunks/{chunk-RPFJJ33Z.js → chunk-DLH7YIX6.js} +3 -3
- package/chunks/{chunk-L6ZME3W7.js → chunk-DMX7RF6E.js} +1 -1
- package/chunks/{chunk-TRWQQBVH.js → chunk-DTNV6UZY.js} +1 -1
- package/chunks/{chunk-FDOGGKAA.js → chunk-E4UEO3XM.js} +5 -2
- package/chunks/{chunk-RN6V5HKE.js → chunk-E5GQNSJY.js} +3 -3
- package/chunks/chunk-ELRMZTPF.js +374 -0
- package/chunks/chunk-ERU3SDXT.js +27 -0
- package/chunks/{chunk-O2FEO2CB.js → chunk-EUURTIV6.js} +18 -2
- package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
- package/chunks/{chunk-ZELCTN6Y.js → chunk-F23YN37B.js} +10 -0
- package/chunks/{chunk-BL6B2QS2.js → chunk-F2RKL5I2.js} +809 -1195
- package/chunks/{chunk-J4ECGDA3.js → chunk-F45SKYIQ.js} +3 -3
- package/chunks/{chunk-5WC2ECUK.js → chunk-FCQJLMA2.js} +114 -8
- package/chunks/{chunk-4JKLPTV6.js → chunk-FGRDUDCI.js} +13 -6
- package/chunks/{chunk-ZUNWKOAP.js → chunk-FGV2QEAO.js} +5 -27
- package/chunks/{chunk-4VY3ITHR.js → chunk-FN3JNDRU.js} +3 -3
- package/chunks/{chunk-XI7RST4D.js → chunk-FRVV5SSD.js} +2 -2
- package/chunks/{chunk-UXDVUFKU.js → chunk-FYZ5NZ3V.js} +2 -20
- package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
- package/chunks/{chunk-W7PXLIZJ.js → chunk-GP47UR3M.js} +6 -6
- package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
- package/chunks/{chunk-MA5OUNN6.js → chunk-HG46TTAG.js} +1 -1
- package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
- package/chunks/{chunk-UULHYZ4W.js → chunk-HL2DQG3Y.js} +148 -23
- package/chunks/{chunk-E6TI726I.js → chunk-HUXPEUFL.js} +1 -1
- package/chunks/{chunk-5DQ4YTIZ.js → chunk-HZTXKVSV.js} +1 -1
- package/chunks/{chunk-LYT2OU7D.js → chunk-IAEXTMED.js} +1 -1
- package/chunks/{chunk-CPJRFFPH.js → chunk-IFHJIEMN.js} +576 -169
- package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
- package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
- package/chunks/{chunk-MWEF5MUK.js → chunk-IOUBOANU.js} +42 -13
- package/chunks/{chunk-KA5HR3G2.js → chunk-IUVIBDKU.js} +2 -2
- package/chunks/{chunk-PQWM4SX2.js → chunk-J2RNOJRV.js} +2 -2
- package/chunks/{chunk-VHPG7BH6.js → chunk-J5PYQVD2.js} +2 -2
- package/chunks/{chunk-JDPBJIKI.js → chunk-JDEW3V5B.js} +1 -1
- package/chunks/{chunk-RX3FYFCN.js → chunk-JEMDIKGQ.js} +7 -7
- package/chunks/chunk-JL6APGBX.js +43 -0
- package/chunks/{chunk-UHUT4IDM.js → chunk-JOMCZWX7.js} +9 -15
- package/chunks/{chunk-43CI6YWJ.js → chunk-JV5YASQA.js} +2777 -2151
- package/chunks/{chunk-N6S3NUYJ.js → chunk-JXNIF2O5.js} +1 -1
- package/chunks/chunk-K2OJUPOE.js +78 -0
- package/chunks/{chunk-QLM7D7W3.js → chunk-KFGPNCCY.js} +8 -8
- package/chunks/{chunk-7RXOEUFF.js → chunk-KHIBLKNK.js} +1 -1
- package/chunks/{chunk-5GD7LYOH.js → chunk-KVBNJ4K2.js} +5 -5
- package/chunks/{chunk-QJAFSFYA.js → chunk-KZ2CU2LH.js} +1 -1
- package/chunks/{chunk-DCPRCDSR.js → chunk-L2KF7HUE.js} +6 -6
- package/chunks/{chunk-4ALNJDHL.js → chunk-L3DTX6U4.js} +3 -1
- package/chunks/{chunk-3SH53ANB.js → chunk-LAP7X6EC.js} +12 -0
- package/chunks/{chunk-GM44O6F7.js → chunk-LEGNDA46.js} +1 -1
- package/chunks/{chunk-WXFCI3O5.js → chunk-LG5Y4OWO.js} +2 -2
- package/chunks/{chunk-3LPJ776W.js → chunk-LILGKQ4B.js} +10 -7
- package/chunks/{chunk-LBKYQ33T.js → chunk-LIR7YS2O.js} +18 -12
- package/chunks/{chunk-5Z4FCEPY.js → chunk-LK2WUCDQ.js} +625 -119
- package/chunks/{chunk-W673V2H3.js → chunk-LY2GK2PR.js} +4 -4
- package/chunks/{chunk-PQSCGZT2.js → chunk-MOS5OAOG.js} +36 -10
- package/chunks/chunk-MXOALJIL.js +691 -0
- package/chunks/chunk-NFXXBWSE.js +463 -0
- package/chunks/chunk-NUQ4GK5I.js +315 -0
- package/chunks/{chunk-J3VZF2AL.js → chunk-NUQVB25K.js} +2 -2
- package/chunks/{chunk-GNY7B3CA.js → chunk-NVIBH7WS.js} +1 -1
- package/chunks/{chunk-M6YLOETP.js → chunk-O3MKRN2I.js} +4 -4
- package/chunks/{chunk-ISPBBKJN.js → chunk-ONGZNOIP.js} +7 -2
- package/chunks/{chunk-Q2F43WTJ.js → chunk-OOLSYRZ7.js} +36 -19
- package/chunks/{chunk-63ACHB2H.js → chunk-PIGUW2U2.js} +197 -28
- package/chunks/{chunk-QAZ2MGYT.js → chunk-PLLIWEM3.js} +2 -2
- package/chunks/{chunk-ULY4ISY2.js → chunk-PMS4FVLY.js} +23 -8
- package/chunks/{chunk-NB3NDQQK.js → chunk-Q2XLNLAV.js} +1 -1
- package/chunks/{chunk-6GRDHIVI.js → chunk-Q6HXLBZF.js} +12 -12
- package/chunks/{chunk-EUXF6URV.js → chunk-QPWZX4ZV.js} +32 -34
- package/chunks/{chunk-DTB5BXRG.js → chunk-RJZTX2OF.js} +30 -17
- package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
- package/chunks/{chunk-LUVXLLMS.js → chunk-SAWPURIU.js} +2 -2
- package/chunks/{chunk-WZS3X663.js → chunk-SNZWDV67.js} +43 -18
- package/chunks/{chunk-IRKQ4YYX.js → chunk-SVWWF5TZ.js} +29 -1
- package/chunks/{chunk-5VZFJTL2.js → chunk-SXEE6PND.js} +2 -2
- package/chunks/{chunk-743XE7N7.js → chunk-T4JVQR7Z.js} +2 -2
- package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
- package/chunks/{chunk-LN3WBOKU.js → chunk-TP2DUOB6.js} +8 -8
- package/chunks/{chunk-MWIO7MF6.js → chunk-TP6FYVQT.js} +2 -0
- package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
- package/chunks/{chunk-VH764G6B.js → chunk-TWC3FHUI.js} +4 -4
- package/chunks/{chunk-H3Q3RSKZ.js → chunk-U7O65WKL.js} +1 -1
- package/chunks/{chunk-IUJLW6ZI.js → chunk-UBEYS536.js} +7 -7
- package/chunks/{chunk-VEQBVJYH.js → chunk-UGS62IR2.js} +3 -3
- package/chunks/{chunk-VF6D6EGV.js → chunk-UKMWZ5NS.js} +109 -842
- package/chunks/{chunk-7GZCCHJL.js → chunk-VHKOULAI.js} +6 -5
- package/chunks/{chunk-ODBNTMZW.js → chunk-VID4BW52.js} +97 -86
- package/chunks/{chunk-7L35FKPF.js → chunk-VLZOU6UH.js} +7 -7
- package/chunks/{chunk-XBLG564H.js → chunk-VTBPMLRO.js} +12 -12
- package/chunks/{chunk-QTNCGZHQ.js → chunk-VX63RJXE.js} +9 -0
- package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
- package/chunks/{chunk-XQ4RDO5B.js → chunk-WBCPROWX.js} +1 -1
- package/chunks/{chunk-RDV4NLI3.js → chunk-WS7MOFK6.js} +3 -3
- package/chunks/{chunk-FV4DM2M4.js → chunk-WXFK4MH7.js} +32 -12
- package/chunks/{chunk-XAXTQURR.js → chunk-WY4N6KS7.js} +4 -4
- package/chunks/{chunk-CABDNUJ4.js → chunk-XDQUDARC.js} +11 -14
- package/chunks/{chunk-YHDGABDC.js → chunk-XKBFYTCD.js} +1 -1
- package/chunks/{chunk-2EKVPSIJ.js → chunk-Y2MYW47X.js} +1 -1
- package/chunks/{chunk-Y6ZWXM44.js → chunk-YIU5PEAT.js} +2 -2
- package/chunks/{chunk-PSPAM24S.js → chunk-YKK2XXHF.js} +4 -0
- package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
- package/chunks/{chunk-OFVAS4AR.js → chunk-ZGQIIGNQ.js} +2 -2
- package/chunks/{chunk-HNLMYDQE.js → chunk-ZHECLGA6.js} +2 -4
- package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
- package/chunks/{chunk-OWCFKIFQ.js → chunk-ZKYR7QS4.js} +1 -1
- package/chunks/{chunk-YZTGGCEE.js → chunk-ZKZHSB5W.js} +1 -1
- package/chunks/{chunk-ERXNTINK.js → chunk-ZT6EPPBY.js} +1 -1
- package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
- package/chunks/{chunk-MMMA36MN.js → chunk-ZUQVZTWG.js} +3 -3
- package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
- package/chunks/{config-utils-37FHWPTP.js → config-utils-S5LFS4RN.js} +67 -59
- package/chunks/{contextCommand-R4JUBV5N.js → contextCommand-XXKZMMSQ.js} +64 -56
- package/chunks/{core-runtime-6U4OXU5C.js → core-runtime-YGUA42AZ.js} +68 -59
- package/chunks/{create-sub-session-LLUYAGZN.js → create-sub-session-SEK6KCYR.js} +64 -56
- package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-TIGCFGCS.js} +2 -2
- package/chunks/{cron-create-GTPVMJCF.js → cron-create-AKWX67FO.js} +1 -1
- package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-XPB6IYZJ.js} +1 -1
- package/chunks/{cron-list-KTFKFDKC.js → cron-list-XBKO4WU5.js} +1 -1
- package/chunks/{daemon-UI6SQSBV.js → daemon-G5TYKZD6.js} +2 -2
- package/chunks/{daemon-git-worktree-guard-O2UTNFJC.js → daemon-git-worktree-guard-3AWINPPX.js} +65 -57
- package/chunks/{daemon-status-provider-7GMAKSTX.js → daemon-status-provider-RTKHKUFJ.js} +73 -65
- package/chunks/{daemon-trust-policy-VNP76VMO.js → daemon-trust-policy-6YQOC7B6.js} +69 -61
- package/chunks/{daemon-trust-policy-monitor-TD5O3BZA.js → daemon-trust-policy-monitor-EN5L23GS.js} +69 -61
- package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
- package/chunks/{deferred-core-runtime-NJM63YJS.js → deferred-core-runtime-JPLQRVZO.js} +62 -54
- package/chunks/{display-image-CTNHJRZC.js → display-image-NAH3AZ63.js} +3 -3
- package/chunks/{dist-STAGIFNB.js → dist-3BJVSJ7D.js} +389 -724
- package/chunks/{dist-OR2ZQTXZ.js → dist-65Q3TRLH.js} +16 -36
- package/chunks/{dist-24TCWK5H.js → dist-HX2LG76F.js} +233 -35
- package/chunks/{dist-XJ25G6OH.js → dist-J7PDFK53.js} +13 -38
- package/chunks/{dist-WZTUKIDR.js → dist-JCXKXRH6.js} +3 -6
- package/chunks/{dist-M4CBX53H.js → dist-LHGMHIDK.js} +2 -6
- package/chunks/{dist-5I4HLUTO.js → dist-QPTIRE3U.js} +4 -13
- package/chunks/{dist-FDISN4AK.js → dist-SBK33YLC.js} +5 -40
- package/chunks/{dist-NQ2636VT.js → dist-WMFHZG3R.js} +2 -5
- package/chunks/{edit-GL7OA6RV.js → edit-QXJZIWRQ.js} +50 -44
- package/chunks/{en-YJNRUQG4.js → en-7BZ2OZKH.js} +2 -1
- package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-54L5QJ3N.js} +4 -4
- package/chunks/{enterPlanMode-VC4BCSZE.js → enterPlanMode-2ITCVQ5N.js} +47 -41
- package/chunks/{environment-BI6IBAZJ.js → environment-URPO5ORZ.js} +65 -57
- package/chunks/{errors-D6G2ZM2R.js → errors-TDUYLEKI.js} +64 -56
- package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-EORJDKDS.js} +4 -4
- package/chunks/{exitPlanMode-DX446CA6.js → exitPlanMode-RA7KMUEW.js} +47 -41
- package/chunks/{fast-path-MAYDLJIP.js → fast-path-Q2JYP64P.js} +7 -7
- package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-GTHZLVSS.js} +2 -2
- package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
- package/chunks/{glob-TVKRFY36.js → glob-VHSV4BKE.js} +50 -44
- package/chunks/{goal-tools-CA6YANRN.js → goal-tools-5FIE56CK.js} +53 -43
- package/chunks/{grep-BLHF2S5D.js → grep-3PKFKLCA.js} +2 -2
- package/chunks/{handleAutoUpdate-AW4ZAHON.js → handleAutoUpdate-7FZFLKNZ.js} +65 -57
- package/chunks/{i18n-IH5CRAY7.js → i18n-NTFQDWKR.js} +63 -55
- package/chunks/{image-gen-XP4NNIYG.js → image-gen-TF3IQWSH.js} +7 -6
- package/chunks/{initializer-UBR37ZNM.js → initializer-LB3T635H.js} +69 -61
- package/chunks/{installationInfo-Y52756EC.js → installationInfo-KRO433ZG.js} +62 -54
- package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
- package/chunks/{list-7V5JDZPO.js → list-NEP3WPZ7.js} +72 -64
- package/chunks/{list-agents-I5TRH3J7.js → list-agents-QLDXS5OD.js} +18 -8
- package/chunks/{llm-QDB6JVF5.js → llm-AZEJEIAD.js} +141 -128
- package/chunks/{llm-content-generator-EO6MZCEO.js → llm-content-generator-KWXFHBR3.js} +6 -5
- package/chunks/{loadedSettingsAdapter-I3YQKMC4.js → loadedSettingsAdapter-NZORJLSD.js} +69 -61
- package/chunks/{loggingContentGenerator-MNXYUGDG.js → loggingContentGenerator-NGHVU6AK.js} +69 -62
- package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-HHMYIC7Z.js} +2 -2
- package/chunks/{ls-YV7RKLKY.js → ls-N7ABR6HI.js} +4 -4
- package/chunks/{lsp-NO3AMRZT.js → lsp-LTOFWG5P.js} +1 -1
- package/chunks/{managed-npm-update-EA3EXPTO.js → managed-npm-update-3LHNBEAG.js} +62 -54
- package/chunks/{mcp-QTAJ544Y.js → mcp-4SWJKDX7.js} +69 -61
- package/chunks/{monitor-6FQKQOTP.js → monitor-V5EFBZC7.js} +49 -43
- package/chunks/{nonInteractiveCli-MRCTZL5X.js → nonInteractiveCli-5UFUBUAT.js} +117 -109
- package/chunks/{notebook-edit-BQQCKI7K.js → notebook-edit-ATV46KWD.js} +48 -42
- package/chunks/{open-with-auth-D6JD6LDS.js → open-with-auth-6MVIHMXB.js} +1 -1
- package/chunks/openai-WX26N5OJ.js +47 -0
- package/chunks/{openaiContentGenerator-TTSKXNVH.js → openaiContentGenerator-BKTO5QJK.js} +31 -25
- package/chunks/openaiResponsesContentGenerator-RTCAJ5V5.js +1658 -0
- package/chunks/{pidfile-KPIS6RIT.js → pidfile-JAIOWPI3.js} +65 -55
- package/chunks/process-registry-X6ZCASEN.js +10 -0
- package/chunks/{processUtils-ZCASPKK4.js → processUtils-TCQH3LVD.js} +2 -2
- package/chunks/{prompt-terminal-ledger-D6HM6TV7.js → prompt-terminal-ledger-BYXHEUHX.js} +63 -55
- package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
- package/chunks/{qwenContentGenerator-GGZEFLBD.js → qwenContentGenerator-K5TJK75P.js} +60 -52
- package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-NOXRK323.js} +6 -5
- package/chunks/{read-file-VE5GDFLP.js → read-file-DL7GNZD5.js} +11 -9
- package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-B37WANAQ.js} +1 -1
- package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-OAXWXZ5D.js} +2 -2
- package/chunks/record-source-D7R7X3GT.js +22 -0
- package/chunks/{report-findings-TJ34R7QK.js → report-findings-AR3VC6EQ.js} +3 -3
- package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-IKNWTX5M.js} +5 -5
- package/chunks/{resumeHistoryUtils-HSSGMYDC.js → resumeHistoryUtils-OYKXZ4YO.js} +68 -60
- package/chunks/{ripGrep-SEJE7AA6.js → ripGrep-EOUMIU4K.js} +15 -13
- package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
- package/chunks/{run-qwen-serve-OJYVH7N6.js → run-qwen-serve-PPTGWC5B.js} +471 -152
- package/chunks/{runtime-KGMQQFJD.js → runtime-5RO22P2N.js} +77 -67
- package/chunks/{scheduled-tasks-7H5HWHYD.js → scheduled-tasks-YGERFWLZ.js} +70 -62
- package/chunks/{scheduler-BE42AKDG.js → scheduler-S6WU6M3C.js} +64 -56
- package/chunks/{sdk-exporters-grpc-MXTVSE3C.js → sdk-exporters-grpc-Y2ZUQDUQ.js} +2 -2
- package/chunks/{sdk-exporters-http-7R2ARBPV.js → sdk-exporters-http-VWTF4W6K.js} +3 -3
- package/chunks/{sdk-impl-YOLO7LV4.js → sdk-impl-G6FVTBQZ.js} +9 -9
- package/chunks/{send-message-AWKUDJBH.js → send-message-TWOGWCBG.js} +13 -10
- package/chunks/{serve-KZVKYMSL.js → serve-HT4WOCWS.js} +70 -62
- package/chunks/{server-PJRALPJQ.js → server-SWXVPRCS.js} +2977 -617
- package/chunks/{session-IHITXU2S.js → session-6DSFUOMO.js} +154 -119
- package/chunks/{session-attachments-root-GQ2TUI3Y.js → session-attachments-root-SOZCTQWW.js} +62 -54
- package/chunks/{session-pr-refresh-H43LULTE.js → session-pr-refresh-F7XUBQBH.js} +70 -62
- package/chunks/{settings-RKEQQDFC.js → settings-SWQH36PO.js} +74 -66
- package/chunks/{shell-6PJ444U5.js → shell-XUQL6EYV.js} +47 -41
- package/chunks/{skill-Q3UP7B5V.js → skill-HNRDD54C.js} +33 -23
- package/chunks/{skill-settings-LZR5YRRW.js → skill-settings-JU72PCII.js} +68 -60
- package/chunks/{spawnChannel-WM3DT2BF.js → spawnChannel-7ZVM3GBU.js} +65 -57
- package/chunks/{standalone-update-E5474IBI.js → standalone-update-64JQY2LX.js} +64 -56
- package/chunks/{start-opentui-ui-WLWZNQ2I.js → start-opentui-ui-RSLBXESU.js} +554 -297
- package/chunks/{startInteractiveUI-FBQSGWGO.js → startInteractiveUI-ZDPHD7XE.js} +1282 -1915
- package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-F6F27JMK.js} +2 -2
- package/chunks/{task-create-PMAFST2T.js → task-create-Y623TBHB.js} +10 -10
- package/chunks/{task-list-R2HSY2NC.js → task-list-FCPEEGWL.js} +3 -3
- package/chunks/{task-stop-BFSKRTGV.js → task-stop-QTKZXLPH.js} +1 -1
- package/chunks/{task-update-JYC57USF.js → task-update-YLSXF25N.js} +10 -10
- package/chunks/{team-create-VIGUFUT4.js → team-create-U52VYSNO.js} +49 -43
- package/chunks/{team-delete-CBHVBTPB.js → team-delete-S7TLHZCF.js} +3 -3
- package/chunks/{team-plan-approval-HQVZA3MD.js → team-plan-approval-IQ4ADQIK.js} +47 -41
- package/chunks/{terminal-image-renderer-LUKNCOVM.js → terminal-image-renderer-ZEMF7LB2.js} +64 -56
- package/chunks/{theme-manager-LOENKYLY.js → theme-manager-DK2S2SOX.js} +62 -54
- package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-5QI2H2FW.js} +4 -4
- package/chunks/{tool-search-ZIFAQCE2.js → tool-search-6U4OQG7K.js} +21 -15
- package/chunks/{total-session-admission-FUUJH3QH.js → total-session-admission-BOARHBZU.js} +68 -60
- package/chunks/{trustedFolders-C76KYROP.js → trustedFolders-GKQZXZSV.js} +63 -55
- package/chunks/{update-relaunch-4G2SRXKX.js → update-relaunch-GLACF7PX.js} +5 -5
- package/chunks/{updateCheck-EIZIO7HI.js → updateCheck-NLBSZB4Q.js} +64 -56
- package/chunks/{useAutoAcceptIndicator-EAA6KSY4.js → useAutoAcceptIndicator-3X3BYU7H.js} +72 -64
- package/chunks/{validateNonInterActiveAuth-BRX22QCN.js → validateNonInterActiveAuth-NE3JLOIR.js} +114 -106
- package/chunks/{version-E56RU7PR.js → version-6H5YAT4N.js} +3 -1
- package/chunks/{web-fetch-AAUCD7RM.js → web-fetch-RWSO7TTN.js} +15 -13
- package/chunks/{web-search-HFUQF44Q.js → web-search-DADI3LV5.js} +560 -322
- package/chunks/{web-shell-static-POZHGGXE.js → web-shell-static-CCN4JZEE.js} +5 -4
- package/chunks/workflow-LPGCZCIT.js +1224 -0
- package/chunks/workspace-providers-status-QBRBEFTO.js +127 -0
- package/chunks/{workspace-registration-store-YL7HLYYI.js → workspace-registration-store-WUKTMJPW.js} +3 -2
- package/chunks/{workspace-registry-BNRP2ELW.js → workspace-registry-CJV7KVGF.js} +68 -60
- package/chunks/{workspace-runtime-coordinator-WKGF7VHS.js → workspace-runtime-coordinator-7LYMFMFF.js} +71 -61
- package/chunks/{workspace-service-4MYO72MM.js → workspace-service-HWXZSA4J.js} +75 -67
- package/chunks/{workspace-skills-status-SU66TJLZ.js → workspace-skills-status-D6QXUWCC.js} +70 -62
- package/chunks/{workspace-trust-reconciler-D5QT7WQB.js → workspace-trust-reconciler-VZX7G7CZ.js} +75 -67
- package/chunks/{write-file-NVPQE2AZ.js → write-file-KKHV26YV.js} +49 -43
- package/chunks/{zh-VBFCRQBL.js → zh-J2GLI64H.js} +2 -1
- package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-TBAICUJQ.js} +2 -1
- package/chunks/{zoom-image-RJHC66WG.js → zoom-image-OG7X7KAA.js} +12 -10
- package/cli.js +14 -14
- package/export-transcript-document.css +1 -0
- package/export-transcript-document.js +164 -165
- package/locales/ca.js +2 -2
- package/locales/de.js +2 -2
- package/locales/en.js +3 -2
- package/locales/fr.js +2 -2
- package/locales/ja.js +2 -2
- package/locales/pt.js +2 -2
- package/locales/ru.js +2 -2
- package/locales/zh-TW.js +3 -2
- package/locales/zh.js +3 -2
- package/package.json +6 -5
- package/web-shell/assets/{abnfDiagram-VCTEODGH-DHc6plZn.js → abnfDiagram-VCTEODGH-NT0lTLRG.js} +1 -1
- package/web-shell/assets/{arc-BQ9m8TDV.js → arc-DDqnIMMx.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-D5ap3oVB.js → architectureDiagram-5GKGNRK7-DfYghE3W.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-BIbnyNph.js → blockDiagram-NRAW4CY4-DlqJIx5c.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BRsdx_iG.js → c4Diagram-UCG6FXSJ-CinqLGU4.js} +1 -1
- package/web-shell/assets/channel-BHGoSkEv.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-3lf1fNlx.js → chunk-2Q5K7J3B-CsjJX5M7.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-DP8VNRc4.js → chunk-5VM5RSS4-CaVb2tdH.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-DrohDmZ6.js → chunk-F27PBJKO-CRyErlzW.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-UZ2QhSx6.js → chunk-G27WJ6UU-7I79DZCf.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-BIMHVcZK.js → chunk-JWPE2WC7-Dz4cac5F.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-izRxdSDd.js → chunk-LCL6LL3I-Ls24Derb.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-CXADD4PP.js → chunk-POPQ4Y6H-JzYe4qx7.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-B96d8Y_1.js → chunk-SVP7TREG-BxDwesA-.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-CF2sVQpv.js → chunk-XXDRQBXY-CW4hjgWc.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-E47Xnn15.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-E47Xnn15.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-CT6tXVAS.js → cose-bilkent-JH36ORCC-DxikE9iF.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-X1NS4vtV.js → cynefin-OW5HDTMX-CvVsIkVN.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DNsKNOT4.js → cynefinDiagram-5FMLGOSQ-CDHkk3wq.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-9-AHKqsb.js → dagre-3AP2YEHR-BgLdkVLT.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-Bjgms7j6.js → diagram-S7CK7UJ4-DP43cGhe.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-h6bCprbE.js → diagram-UQ7AKVKN-BWrZYhoT.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-4SbQXVLt.js → diagram-VSXAHHWV-B80wjH_n.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-B5gPCzzB.js → diagram-VX7I27RA-DPpKmDsY.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-DFJXIA3A.js → diagram-Z3DM3KII-kaEBNbNU.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-FwyaU7VY.js → ebnfDiagram-PWID7BFC-1-qbEZvk.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-8vJQh2te.js → erDiagram-SSCWMZ5O-CrK2gMkV.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-BzA_1gMN.js → flowDiagram-A5DVABFB-Dic2xofW.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-Co-ABbVX.js → ganttDiagram-EL5Y4UJY-DJko8vT7.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DW_FcyrX.js → gitGraphDiagram-WWUBYQGX-DxsQ-bHT.js} +1 -1
- package/web-shell/assets/index-DY8CxdBr.js +2173 -0
- package/web-shell/assets/index-eBxK3rs2.css +36 -0
- package/web-shell/assets/{index-BbMXfhNG.js → index-t7VBrUeD.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-BEgfhUFN.js → infoDiagram-RXCK75RN-DcRUJbNi.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DCsMxQmc.js → ishikawaDiagram-5VMMS53U-CUPw-2_e.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-DyIEYoHz.js → journeyDiagram-EYS64GPL-yOHhZxkW.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-CkxjqCNr.js → kanban-definition-3QL26DDD-CFUGBbqz.js} +1 -1
- package/web-shell/assets/{layout-BEWc0Al9.js → layout-BoilNfBU.js} +1 -1
- package/web-shell/assets/{linear-CNuNxirL.js → linear-DOuHaPrl.js} +1 -1
- package/web-shell/assets/{mermaid.core-DZBre674.js → mermaid.core-1G1fXWda.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-CpafFz_F.js → mindmap-definition-FBJOCRG2-B8BhkrOX.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DfZqk_dq.js → pegDiagram-XKGWAZYB-CipC5K1D.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-S0UWXlgC.js → pieDiagram-E7YTZNPT-CHBDFDUJ.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-dd37_Ohj.js → quadrantDiagram-AXDQQJYC-_iiBkoZO.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CH8NJZ7u.js → railroadDiagram-O6MQD6OU-Cx1peHDi.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CFdqWYih.js → requirementDiagram-EFPCY7ZU-CBRiPbdQ.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CsddcEGD.js → sankeyDiagram-P5KCCOFB-TT6GcHaZ.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BZ270mGw.js → sequenceDiagram-WJ2MYXX4-CWP42PNb.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CGaS4DBV.js → sizeCapture-X5ZJPWSS-Bp94roEG.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-COpIzMu6.js → stateDiagram-HBIQ2CUA-0ftrzTAy.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-PgAST0dK.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-CMF889m3.js → swimlanes-XN3QIQJK-D-FsenYJ.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-BcWcB5bj.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-BelnxYz5.js → timeline-definition-24CTP7MA-Ctvrj28y.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-CU-NRqIB.js → vennDiagram-4TSXK5OY-5DZncjOt.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CDNKqWh-.js → wardleyDiagram-VM6X3IG4-jZjYwPY7.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CLqguL5D.js → xychartDiagram-S5SC5T6Z-Ci6Q2C2_.js} +1 -1
- package/web-shell/index.html +29 -5
- package/chunks/chunk-V7RNNPGC.js +0 -44
- package/chunks/chunk-X35VIWWJ.js +0 -276
- package/chunks/workflow-3MABM53N.js +0 -2771
- package/chunks/workspace-providers-status-2FRLBZ5I.js +0 -119
- package/web-shell/assets/channel-uMMdTrYk.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +0 -1
- package/web-shell/assets/index-Bu-rZoJ-.js +0 -2150
- package/web-shell/assets/index-CsPwZ1ut.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +0 -8
- /package/chunks/{chunk-JA5CBKRP.js → chunk-7NXSVSFB.js} +0 -0
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
ClientSideConnection,
|
|
5
5
|
PROTOCOL_VERSION,
|
|
6
6
|
ndJsonStream
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IJOS26LH.js";
|
|
8
8
|
import {
|
|
9
9
|
init_esbuild_shims
|
|
10
10
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -1245,118 +1245,6 @@ init_esbuild_shims();
|
|
|
1245
1245
|
import { basename as basename3, join as join5 } from "node:path";
|
|
1246
1246
|
import { randomUUID as randomUUID3 } from "node:crypto";
|
|
1247
1247
|
|
|
1248
|
-
// packages/channels/base/dist/BlockStreamer.js
|
|
1249
|
-
init_esbuild_shims();
|
|
1250
|
-
var BlockStreamer = class {
|
|
1251
|
-
static {
|
|
1252
|
-
__name(this, "BlockStreamer");
|
|
1253
|
-
}
|
|
1254
|
-
buffer = "";
|
|
1255
|
-
idleTimer = null;
|
|
1256
|
-
sending = Promise.resolve();
|
|
1257
|
-
opts;
|
|
1258
|
-
/** Number of blocks emitted so far. */
|
|
1259
|
-
blockCount = 0;
|
|
1260
|
-
constructor(opts) {
|
|
1261
|
-
this.opts = opts;
|
|
1262
|
-
}
|
|
1263
|
-
/** Feed a new text chunk from the agent stream. */
|
|
1264
|
-
push(chunk) {
|
|
1265
|
-
this.buffer += chunk;
|
|
1266
|
-
this.clearIdleTimer();
|
|
1267
|
-
this.checkEmit();
|
|
1268
|
-
if (this.buffer.length > 0 && this.opts.idleMs > 0) {
|
|
1269
|
-
this.idleTimer = setTimeout(() => this.onIdle(), this.opts.idleMs);
|
|
1270
|
-
}
|
|
1271
|
-
}
|
|
1272
|
-
/** Flush all remaining buffered text. Awaits all pending sends. */
|
|
1273
|
-
async flush() {
|
|
1274
|
-
this.clearIdleTimer();
|
|
1275
|
-
if (this.buffer.length > 0) {
|
|
1276
|
-
this.emitBlock(this.buffer);
|
|
1277
|
-
this.buffer = "";
|
|
1278
|
-
}
|
|
1279
|
-
await this.sending;
|
|
1280
|
-
}
|
|
1281
|
-
/** Drop buffered text and cancel future idle emission. */
|
|
1282
|
-
stop() {
|
|
1283
|
-
this.clearIdleTimer();
|
|
1284
|
-
this.buffer = "";
|
|
1285
|
-
}
|
|
1286
|
-
/** Await already-queued sends without emitting the buffered text. */
|
|
1287
|
-
async drain() {
|
|
1288
|
-
await this.sending;
|
|
1289
|
-
}
|
|
1290
|
-
// ---------------------------------------------------------------------------
|
|
1291
|
-
// Internal
|
|
1292
|
-
// ---------------------------------------------------------------------------
|
|
1293
|
-
checkEmit() {
|
|
1294
|
-
while (this.buffer.length >= this.opts.maxChars) {
|
|
1295
|
-
const bp = this.findBreakPoint(this.buffer, this.opts.maxChars);
|
|
1296
|
-
this.emitBlock(this.buffer.slice(0, bp));
|
|
1297
|
-
this.buffer = this.buffer.slice(bp);
|
|
1298
|
-
}
|
|
1299
|
-
if (this.buffer.length >= this.opts.minChars) {
|
|
1300
|
-
const bp = this.findBlockBoundary(this.buffer);
|
|
1301
|
-
if (bp > 0) {
|
|
1302
|
-
this.emitBlock(this.buffer.slice(0, bp));
|
|
1303
|
-
this.buffer = this.buffer.slice(bp);
|
|
1304
|
-
}
|
|
1305
|
-
}
|
|
1306
|
-
}
|
|
1307
|
-
onIdle() {
|
|
1308
|
-
this.idleTimer = null;
|
|
1309
|
-
if (this.buffer.length >= this.opts.minChars) {
|
|
1310
|
-
this.emitBlock(this.buffer);
|
|
1311
|
-
this.buffer = "";
|
|
1312
|
-
}
|
|
1313
|
-
}
|
|
1314
|
-
emitBlock(text) {
|
|
1315
|
-
const trimmed = text.trim();
|
|
1316
|
-
if (!trimmed)
|
|
1317
|
-
return;
|
|
1318
|
-
const block = /\n[^\S\n]*$/.test(text) ? `${trimmed}
|
|
1319
|
-
` : trimmed;
|
|
1320
|
-
this.blockCount++;
|
|
1321
|
-
this.sending = this.sending.then(() => this.opts.send(block)).catch(() => {
|
|
1322
|
-
});
|
|
1323
|
-
}
|
|
1324
|
-
/**
|
|
1325
|
-
* Find the last paragraph boundary (\n\n) in the buffer.
|
|
1326
|
-
* Returns the position after the boundary, or -1 if no suitable boundary
|
|
1327
|
-
* exists at or after minChars.
|
|
1328
|
-
*/
|
|
1329
|
-
findBlockBoundary(text) {
|
|
1330
|
-
const last = text.lastIndexOf("\n\n");
|
|
1331
|
-
if (last < 0 || last < this.opts.minChars)
|
|
1332
|
-
return -1;
|
|
1333
|
-
return last + 2;
|
|
1334
|
-
}
|
|
1335
|
-
/**
|
|
1336
|
-
* Find the best break point at or before maxPos.
|
|
1337
|
-
* Prefers paragraph break > newline > space > maxPos.
|
|
1338
|
-
*/
|
|
1339
|
-
findBreakPoint(text, maxPos) {
|
|
1340
|
-
const sub = text.slice(0, maxPos);
|
|
1341
|
-
const para = sub.lastIndexOf("\n\n");
|
|
1342
|
-
if (para > 0)
|
|
1343
|
-
return para + 2;
|
|
1344
|
-
const nl = sub.lastIndexOf("\n");
|
|
1345
|
-
if (nl > 0)
|
|
1346
|
-
return nl + 1;
|
|
1347
|
-
const sp = sub.lastIndexOf(" ");
|
|
1348
|
-
if (sp > 0)
|
|
1349
|
-
return sp + 1;
|
|
1350
|
-
return maxPos;
|
|
1351
|
-
}
|
|
1352
|
-
clearIdleTimer() {
|
|
1353
|
-
if (this.idleTimer !== null) {
|
|
1354
|
-
clearTimeout(this.idleTimer);
|
|
1355
|
-
this.idleTimer = null;
|
|
1356
|
-
}
|
|
1357
|
-
}
|
|
1358
|
-
};
|
|
1359
|
-
|
|
1360
1248
|
// packages/channels/base/dist/ChannelProactiveDeliveryError.js
|
|
1361
1249
|
init_esbuild_shims();
|
|
1362
1250
|
var CHANNEL_PROACTIVE_DELIVERY_ERROR_CODE = "channel_proactive_delivery_error";
|
|
@@ -3931,71 +3819,6 @@ function truncateError(message) {
|
|
|
3931
3819
|
}
|
|
3932
3820
|
__name(truncateError, "truncateError");
|
|
3933
3821
|
|
|
3934
|
-
// packages/channels/base/dist/message-prefix.js
|
|
3935
|
-
init_esbuild_shims();
|
|
3936
|
-
function startsWithMessagePrefix(text, prefix) {
|
|
3937
|
-
return text.startsWith(prefix) && (text.length === prefix.length || /\s/u.test(text.charAt(prefix.length)));
|
|
3938
|
-
}
|
|
3939
|
-
__name(startsWithMessagePrefix, "startsWithMessagePrefix");
|
|
3940
|
-
function stripMessagePrefix(text, prefix) {
|
|
3941
|
-
if (!prefix)
|
|
3942
|
-
return text;
|
|
3943
|
-
let candidate = text.trim();
|
|
3944
|
-
while (!startsWithMessagePrefix(candidate, prefix) && (candidate.startsWith("@") || candidate.startsWith("<@"))) {
|
|
3945
|
-
const mention = candidate.match(/^(?:@[^@\s]+|<@[^>]{1,64}>)\s+/u)?.[0];
|
|
3946
|
-
if (!mention)
|
|
3947
|
-
return void 0;
|
|
3948
|
-
candidate = candidate.slice(mention.length);
|
|
3949
|
-
}
|
|
3950
|
-
if (!startsWithMessagePrefix(candidate, prefix))
|
|
3951
|
-
return void 0;
|
|
3952
|
-
const suffix = candidate.slice(prefix.length);
|
|
3953
|
-
if (!/^\s+\S[\s\S]*$/u.test(suffix))
|
|
3954
|
-
return void 0;
|
|
3955
|
-
return suffix.trim();
|
|
3956
|
-
}
|
|
3957
|
-
__name(stripMessagePrefix, "stripMessagePrefix");
|
|
3958
|
-
function locateDisplayText(envelope, displayText) {
|
|
3959
|
-
const offset = envelope.displayTextOffset;
|
|
3960
|
-
if (offset !== void 0 && envelope.text.startsWith(displayText, offset)) {
|
|
3961
|
-
return offset;
|
|
3962
|
-
}
|
|
3963
|
-
if (offset === void 0 && envelope.text.endsWith(displayText)) {
|
|
3964
|
-
return envelope.text.length - displayText.length;
|
|
3965
|
-
}
|
|
3966
|
-
const first = envelope.text.indexOf(displayText);
|
|
3967
|
-
if (first === -1)
|
|
3968
|
-
return -1;
|
|
3969
|
-
return envelope.text.indexOf(displayText, first + 1) === -1 ? first : "ambiguous";
|
|
3970
|
-
}
|
|
3971
|
-
__name(locateDisplayText, "locateDisplayText");
|
|
3972
|
-
function applyMessagePrefix(envelope, prefix) {
|
|
3973
|
-
if (!prefix || envelope.bypassMessagePrefix || envelope.syntheticText) {
|
|
3974
|
-
return true;
|
|
3975
|
-
}
|
|
3976
|
-
const displayText = envelope.displayText;
|
|
3977
|
-
const prefixText = envelope.messagePrefixText;
|
|
3978
|
-
const sourceText = prefixText ?? displayText ?? envelope.text;
|
|
3979
|
-
const stripped = stripMessagePrefix(sourceText, prefix);
|
|
3980
|
-
if (stripped === void 0)
|
|
3981
|
-
return false;
|
|
3982
|
-
if (displayText === void 0) {
|
|
3983
|
-
if (prefixText !== void 0)
|
|
3984
|
-
envelope.messagePrefixText = stripped;
|
|
3985
|
-
envelope.text = stripped;
|
|
3986
|
-
return true;
|
|
3987
|
-
}
|
|
3988
|
-
const at = locateDisplayText(envelope, displayText);
|
|
3989
|
-
if (at === "ambiguous" || at === -1)
|
|
3990
|
-
return false;
|
|
3991
|
-
if (prefixText !== void 0)
|
|
3992
|
-
envelope.messagePrefixText = stripped;
|
|
3993
|
-
envelope.displayText = stripped;
|
|
3994
|
-
envelope.text = envelope.text.slice(0, at) + stripped + envelope.text.slice(at + displayText.length);
|
|
3995
|
-
return true;
|
|
3996
|
-
}
|
|
3997
|
-
__name(applyMessagePrefix, "applyMessagePrefix");
|
|
3998
|
-
|
|
3999
3822
|
// packages/channels/base/dist/ChannelWebhookTask.js
|
|
4000
3823
|
init_esbuild_shims();
|
|
4001
3824
|
var MAX_WEBHOOK_PROMPT_CHARS = 8500;
|
|
@@ -4330,6 +4153,45 @@ function isRecord2(value) {
|
|
|
4330
4153
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4331
4154
|
}
|
|
4332
4155
|
__name(isRecord2, "isRecord");
|
|
4156
|
+
var PERMISSION_COPY = {
|
|
4157
|
+
en: {
|
|
4158
|
+
toolUse: "Tool use",
|
|
4159
|
+
allowOnce: "Allow once",
|
|
4160
|
+
allowAlwaysProject: "always allow for this project",
|
|
4161
|
+
allowAlwaysUser: "always allow for this user",
|
|
4162
|
+
allowAlways: "always allow",
|
|
4163
|
+
deny: "Deny",
|
|
4164
|
+
required: "Permission required to run a tool",
|
|
4165
|
+
request: "Request:",
|
|
4166
|
+
tool: "Tool:",
|
|
4167
|
+
action: "Action:",
|
|
4168
|
+
parameters: "Parameters:",
|
|
4169
|
+
replyWith: "Reply with:"
|
|
4170
|
+
},
|
|
4171
|
+
zh: {
|
|
4172
|
+
toolUse: "\u5DE5\u5177\u8C03\u7528",
|
|
4173
|
+
allowOnce: "\u4EC5\u5141\u8BB8\u672C\u6B21",
|
|
4174
|
+
allowAlwaysProject: "\u59CB\u7EC8\u5141\u8BB8\u6B64\u9879\u76EE",
|
|
4175
|
+
allowAlwaysUser: "\u59CB\u7EC8\u5141\u8BB8\u6B64\u7528\u6237",
|
|
4176
|
+
allowAlways: "\u59CB\u7EC8\u5141\u8BB8",
|
|
4177
|
+
deny: "\u62D2\u7EDD",
|
|
4178
|
+
required: "\u8FD0\u884C\u5DE5\u5177\u9700\u8981\u6388\u6743",
|
|
4179
|
+
request: "\u8BF7\u6C42\uFF1A",
|
|
4180
|
+
tool: "\u5DE5\u5177\uFF1A",
|
|
4181
|
+
action: "\u64CD\u4F5C\uFF1A",
|
|
4182
|
+
parameters: "\u53C2\u6570\uFF1A",
|
|
4183
|
+
replyWith: "\u56DE\u590D\u4EE5\u4E0B\u547D\u4EE4\uFF1A"
|
|
4184
|
+
}
|
|
4185
|
+
};
|
|
4186
|
+
function localizedScopedAlwaysLabel(label, stockLabel, localizedLabel) {
|
|
4187
|
+
if (label === stockLabel)
|
|
4188
|
+
return localizedLabel;
|
|
4189
|
+
const scopeSeparator = ": ";
|
|
4190
|
+
if (!label.startsWith(stockLabel + scopeSeparator))
|
|
4191
|
+
return void 0;
|
|
4192
|
+
return `${localizedLabel}\uFF1A${label.slice(stockLabel.length + scopeSeparator.length)}`;
|
|
4193
|
+
}
|
|
4194
|
+
__name(localizedScopedAlwaysLabel, "localizedScopedAlwaysLabel");
|
|
4333
4195
|
var COMMAND_TOKEN_CHARS = "a-zA-Z0-9_:-";
|
|
4334
4196
|
var PARSE_COMMAND_RE = new RegExp(`^\\/([${COMMAND_TOKEN_CHARS}]+)(?:@\\S+)?\\s*(.*)`, "s");
|
|
4335
4197
|
var COMMAND_TOKEN_RE = new RegExp(`^[${COMMAND_TOKEN_CHARS}]+(?:@\\S+)?$`);
|
|
@@ -4373,6 +4235,7 @@ var ChannelBase = class {
|
|
|
4373
4235
|
proxy;
|
|
4374
4236
|
/** Adapter-owned persistent state directory, when supplied by the runtime. */
|
|
4375
4237
|
stateDir;
|
|
4238
|
+
locale;
|
|
4376
4239
|
channelMemory;
|
|
4377
4240
|
memoryIntentClassifier;
|
|
4378
4241
|
channelMemoryRecallObserver;
|
|
@@ -4386,9 +4249,6 @@ var ChannelBase = class {
|
|
|
4386
4249
|
observedContacts;
|
|
4387
4250
|
namedSessions;
|
|
4388
4251
|
observedContactEnvelopes = /* @__PURE__ */ new WeakSet();
|
|
4389
|
-
messagePrefix;
|
|
4390
|
-
messagePrefixCheckedEnvelopes = /* @__PURE__ */ new WeakSet();
|
|
4391
|
-
messagePrefixRejectedEnvelopes = /* @__PURE__ */ new WeakSet();
|
|
4392
4252
|
instructedSessions = /* @__PURE__ */ new Set();
|
|
4393
4253
|
unattendedMemorySessions = /* @__PURE__ */ new Set();
|
|
4394
4254
|
channelMemoryReads = /* @__PURE__ */ new Map();
|
|
@@ -4524,7 +4384,7 @@ var ChannelBase = class {
|
|
|
4524
4384
|
async handleBtw(envelope, sessionId, question, sourceLabel) {
|
|
4525
4385
|
const target = this.router.getTarget(sessionId);
|
|
4526
4386
|
if (!target || target.channelName !== this.name) {
|
|
4527
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not resolve the current task for
|
|
4387
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not resolve the current task for /btw.`, sourceLabel);
|
|
4528
4388
|
return;
|
|
4529
4389
|
}
|
|
4530
4390
|
const running = this.activeBtw.get(sessionId);
|
|
@@ -4706,6 +4566,10 @@ No answer is available from the current conversation context.`;
|
|
|
4706
4566
|
if (presentation && await presentation) {
|
|
4707
4567
|
return;
|
|
4708
4568
|
}
|
|
4569
|
+
const permissionPresentation = this.tryPresentPermission(pending);
|
|
4570
|
+
if (permissionPresentation && await permissionPresentation) {
|
|
4571
|
+
return;
|
|
4572
|
+
}
|
|
4709
4573
|
const text = this.formatPermissionRequest(pending);
|
|
4710
4574
|
if (target.threadId !== void 0 && this.supportsProactiveSend() && this.supportsProactiveTarget(target)) {
|
|
4711
4575
|
await this.pushProactive(target, text, pending.sourceLabel);
|
|
@@ -4786,6 +4650,103 @@ No answer is available from the current conversation context.`;
|
|
|
4786
4650
|
}
|
|
4787
4651
|
})();
|
|
4788
4652
|
}
|
|
4653
|
+
tryPresentPermission(pending) {
|
|
4654
|
+
const active = this.activePrompts.get(pending.sessionId);
|
|
4655
|
+
const toolCall = pending.request.toolCall;
|
|
4656
|
+
const meta = isRecord2(toolCall["_meta"]) ? toolCall["_meta"] : void 0;
|
|
4657
|
+
const isUserQuestion = meta?.["qwenInteractionKind"] === "user_question" || meta?.["toolName"] === "ask_user_question" || toolCall["kind"] === "ask_user_question";
|
|
4658
|
+
const decisions = this.permissionPresentationDecisions(pending);
|
|
4659
|
+
if (!active || active.loopPrompt || !active.owner || isUserQuestion || !decisions) {
|
|
4660
|
+
return void 0;
|
|
4661
|
+
}
|
|
4662
|
+
const precedingSegment = this.closeOutputSegment(pending.sessionId, active, pending.target);
|
|
4663
|
+
let respondInvoked = false;
|
|
4664
|
+
const context = {
|
|
4665
|
+
requestId: pending.requestId,
|
|
4666
|
+
sessionId: pending.sessionId,
|
|
4667
|
+
runId: active.runId,
|
|
4668
|
+
owner: active.owner,
|
|
4669
|
+
target: pending.target,
|
|
4670
|
+
...precedingSegment ? { precedingSegmentId: precedingSegment.segmentId } : {},
|
|
4671
|
+
title: this.permissionTitle(pending.request.toolCall),
|
|
4672
|
+
decisions,
|
|
4673
|
+
onSettled: /* @__PURE__ */ __name((listener) => {
|
|
4674
|
+
if (pending.settled) {
|
|
4675
|
+
listener(pending.settled);
|
|
4676
|
+
return () => {
|
|
4677
|
+
};
|
|
4678
|
+
}
|
|
4679
|
+
pending.settlementListeners.add(listener);
|
|
4680
|
+
return () => {
|
|
4681
|
+
pending.settlementListeners.delete(listener);
|
|
4682
|
+
};
|
|
4683
|
+
}, "onSettled"),
|
|
4684
|
+
respond: /* @__PURE__ */ __name((decision) => {
|
|
4685
|
+
const response = this.permissionPresentationResponse(pending, decision);
|
|
4686
|
+
if (!response)
|
|
4687
|
+
return Promise.resolve(false);
|
|
4688
|
+
respondInvoked = true;
|
|
4689
|
+
return this.respondToUserInput(pending, response);
|
|
4690
|
+
}, "respond")
|
|
4691
|
+
};
|
|
4692
|
+
pending.permissionPresented = true;
|
|
4693
|
+
return (async () => {
|
|
4694
|
+
try {
|
|
4695
|
+
if (precedingSegment) {
|
|
4696
|
+
await this.notifyOutputSegmentEnd(pending.target.chatId, pending.sessionId, precedingSegment, "input_requested");
|
|
4697
|
+
}
|
|
4698
|
+
if (this.pendingPermissions.get(pending.requestId) !== pending) {
|
|
4699
|
+
return true;
|
|
4700
|
+
}
|
|
4701
|
+
const result = await this.presentPermissionRequest(context);
|
|
4702
|
+
if (this.pendingPermissions.get(pending.requestId) !== pending) {
|
|
4703
|
+
return true;
|
|
4704
|
+
}
|
|
4705
|
+
if (result.kind === "presented" || result.kind === "handled" && respondInvoked) {
|
|
4706
|
+
return true;
|
|
4707
|
+
}
|
|
4708
|
+
pending.permissionPresented = false;
|
|
4709
|
+
return false;
|
|
4710
|
+
} catch (err) {
|
|
4711
|
+
process.stderr.write(`[${this.name}] permission presentation failed for request ${sanitizeLogText(pending.requestId, 128)}: ${this.lifecycleError(err)}
|
|
4712
|
+
`);
|
|
4713
|
+
if (this.pendingPermissions.get(pending.requestId) !== pending) {
|
|
4714
|
+
return true;
|
|
4715
|
+
}
|
|
4716
|
+
pending.permissionPresented = false;
|
|
4717
|
+
return false;
|
|
4718
|
+
}
|
|
4719
|
+
})();
|
|
4720
|
+
}
|
|
4721
|
+
permissionPresentationDecisions(pending) {
|
|
4722
|
+
const allowOnce = this.approvalOption(pending);
|
|
4723
|
+
if (!allowOnce)
|
|
4724
|
+
return void 0;
|
|
4725
|
+
const copy = PERMISSION_COPY[this.locale];
|
|
4726
|
+
const allowAlways = this.approvalAlwaysOption(pending);
|
|
4727
|
+
return [
|
|
4728
|
+
{
|
|
4729
|
+
kind: "allow_once",
|
|
4730
|
+
label: sanitizeQuotedText(this.permissionOptionLabel(allowOnce, copy.allowOnce), 80)
|
|
4731
|
+
},
|
|
4732
|
+
...allowAlways ? [
|
|
4733
|
+
{
|
|
4734
|
+
kind: "allow_always",
|
|
4735
|
+
label: sanitizeQuotedText(allowAlways.label, 80)
|
|
4736
|
+
}
|
|
4737
|
+
] : [],
|
|
4738
|
+
{
|
|
4739
|
+
kind: "deny",
|
|
4740
|
+
label: sanitizeQuotedText(this.permissionOptionLabel(this.denialOption(pending), copy.deny), 80)
|
|
4741
|
+
}
|
|
4742
|
+
];
|
|
4743
|
+
}
|
|
4744
|
+
permissionPresentationResponse(pending, decision) {
|
|
4745
|
+
if (decision === "deny")
|
|
4746
|
+
return this.denialResponse(pending);
|
|
4747
|
+
const optionId = decision === "allow_once" ? this.approvalOptionId(pending) : this.approvalAlwaysOption(pending)?.optionId;
|
|
4748
|
+
return optionId ? { outcome: { outcome: "selected", optionId } } : void 0;
|
|
4749
|
+
}
|
|
4789
4750
|
normalizeUserQuestions(pending) {
|
|
4790
4751
|
const toolCall = pending.request.toolCall;
|
|
4791
4752
|
const meta = isRecord2(toolCall["_meta"]) ? toolCall["_meta"] : void 0;
|
|
@@ -4830,7 +4791,8 @@ No answer is available from the current conversation context.`;
|
|
|
4830
4791
|
}
|
|
4831
4792
|
async respondToUserInput(pending, response) {
|
|
4832
4793
|
if (pending.responsePromise) {
|
|
4833
|
-
|
|
4794
|
+
await pending.responsePromise;
|
|
4795
|
+
return false;
|
|
4834
4796
|
}
|
|
4835
4797
|
if (this.pendingPermissions.get(pending.requestId) !== pending || !this.bridge.respondToPermission) {
|
|
4836
4798
|
return false;
|
|
@@ -4876,13 +4838,10 @@ No answer is available from the current conversation context.`;
|
|
|
4876
4838
|
this.removePendingPermission(event.requestId, this.userInputSettlementReason(pending, event.outcome));
|
|
4877
4839
|
}
|
|
4878
4840
|
constructor(name, config, bridge, options) {
|
|
4879
|
-
if (config.messagePrefix !== void 0 && typeof config.messagePrefix !== "string") {
|
|
4880
|
-
throw new Error(`Channel "${name}" field "messagePrefix" must be a string.`);
|
|
4881
|
-
}
|
|
4882
4841
|
this.name = name;
|
|
4883
4842
|
this.config = config;
|
|
4884
|
-
this.messagePrefix = config.messagePrefix?.trim() || void 0;
|
|
4885
4843
|
this.bridge = bridge;
|
|
4844
|
+
this.locale = options?.locale ?? "en";
|
|
4886
4845
|
this.proxy = options?.proxy;
|
|
4887
4846
|
this.stateDir = options?.stateDir;
|
|
4888
4847
|
this.identity = Object.freeze(this.resolveIdentity(name, config));
|
|
@@ -4945,6 +4904,9 @@ No answer is available from the current conversation context.`;
|
|
|
4945
4904
|
async presentUserInputRequest(_context) {
|
|
4946
4905
|
return { kind: "unsupported" };
|
|
4947
4906
|
}
|
|
4907
|
+
async presentPermissionRequest(_context) {
|
|
4908
|
+
return { kind: "unsupported" };
|
|
4909
|
+
}
|
|
4948
4910
|
emitTaskLifecycle(event) {
|
|
4949
4911
|
try {
|
|
4950
4912
|
const result = this.onTaskLifecycle(event);
|
|
@@ -5837,7 +5799,6 @@ ${promptText}` : promptText;
|
|
|
5837
5799
|
return false;
|
|
5838
5800
|
}
|
|
5839
5801
|
active.cancelled = true;
|
|
5840
|
-
this.stopActiveStreaming(active, sessionId, reason);
|
|
5841
5802
|
this.dropCollectBuffer(sessionId);
|
|
5842
5803
|
this.removePendingPermissionsForSession(sessionId, "run_cancelled");
|
|
5843
5804
|
this.emitTaskCancellation(active, sessionId, reason);
|
|
@@ -6144,44 +6105,39 @@ ${promptText}` : promptText;
|
|
|
6144
6105
|
return { kind: "found", pending: matching[0] };
|
|
6145
6106
|
}
|
|
6146
6107
|
canEnvelopeAnswerPendingPermission(envelope, pending) {
|
|
6147
|
-
return pending.target.chatId === envelope.chatId && pending.target.threadId === envelope.threadId && (!pending.userInputPresented || pending.target.senderId === envelope.senderId) && (this.isSharedSessionTarget(pending.target) || pending.target.senderId === envelope.senderId);
|
|
6108
|
+
return pending.target.chatId === envelope.chatId && pending.target.threadId === envelope.threadId && (!pending.userInputPresented && !pending.permissionPresented || pending.target.senderId === envelope.senderId) && (this.isSharedSessionTarget(pending.target) || pending.target.senderId === envelope.senderId);
|
|
6148
6109
|
}
|
|
6149
6110
|
formatPermissionRequest(pending) {
|
|
6150
6111
|
const { toolCall } = pending.request;
|
|
6112
|
+
const copy = PERMISSION_COPY[this.locale];
|
|
6151
6113
|
const parameters = this.permissionParameterSummary(toolCall);
|
|
6152
|
-
const approveLabel = this.permissionOptionLabel(this.approvalOption(pending),
|
|
6114
|
+
const approveLabel = this.permissionOptionLabel(this.approvalOption(pending), copy.allowOnce.toLocaleLowerCase(this.locale));
|
|
6153
6115
|
const alwaysOption = this.approvalAlwaysOption(pending);
|
|
6154
|
-
const denyLabel = this.permissionOptionLabel(this.denialOption(pending),
|
|
6116
|
+
const denyLabel = this.permissionOptionLabel(this.denialOption(pending), copy.deny.toLocaleLowerCase(this.locale));
|
|
6155
6117
|
const requestSuffix = pending.taskName ? ` ${pending.requestId}` : "";
|
|
6156
6118
|
const replyPadding = pending.taskName ? { approve: " ", always: " ", deny: " " } : { approve: " ", always: " ", deny: " " };
|
|
6157
6119
|
const replies = [
|
|
6158
|
-
|
|
6120
|
+
`/approve${requestSuffix}${replyPadding.approve}${approveLabel}`,
|
|
6159
6121
|
...alwaysOption ? [
|
|
6160
|
-
|
|
6122
|
+
`/approve-always${requestSuffix}${replyPadding.always}${alwaysOption.label}`
|
|
6161
6123
|
] : [],
|
|
6162
|
-
|
|
6124
|
+
`/deny${requestSuffix}${replyPadding.deny}${denyLabel}`
|
|
6163
6125
|
];
|
|
6164
6126
|
return [
|
|
6165
|
-
|
|
6166
|
-
...pending.taskName ? [
|
|
6127
|
+
copy.required,
|
|
6128
|
+
...pending.taskName ? [`${copy.request} ${pending.requestId}`] : [],
|
|
6167
6129
|
"",
|
|
6168
|
-
|
|
6169
|
-
|
|
6170
|
-
...parameters ? [
|
|
6130
|
+
`${copy.tool} ${this.permissionToolName(toolCall)}`,
|
|
6131
|
+
`${copy.action} ${this.permissionTitle(toolCall)}`,
|
|
6132
|
+
...parameters ? [`${copy.parameters} ${parameters}`] : [],
|
|
6171
6133
|
"",
|
|
6172
|
-
|
|
6134
|
+
copy.replyWith,
|
|
6173
6135
|
...replies
|
|
6174
6136
|
].join("\n");
|
|
6175
6137
|
}
|
|
6176
|
-
prefixedCommand(command) {
|
|
6177
|
-
return this.messagePrefix ? `${this.messagePrefix} ${command}` : command;
|
|
6178
|
-
}
|
|
6179
|
-
configuredMessagePrefix() {
|
|
6180
|
-
return this.messagePrefix;
|
|
6181
|
-
}
|
|
6182
6138
|
permissionTitle(toolCall) {
|
|
6183
6139
|
const rawTitle = typeof toolCall.title === "string" ? toolCall.title : void 0;
|
|
6184
|
-
return sanitizeQuotedText(rawTitle || "", 160).trim() ||
|
|
6140
|
+
return sanitizeQuotedText(rawTitle || "", 160).trim() || PERMISSION_COPY[this.locale].toolUse;
|
|
6185
6141
|
}
|
|
6186
6142
|
permissionToolName(toolCall) {
|
|
6187
6143
|
const rawToolCall = toolCall;
|
|
@@ -6221,7 +6177,31 @@ ${promptText}` : promptText;
|
|
|
6221
6177
|
permissionOptionLabel(option, fallback) {
|
|
6222
6178
|
const rawLabel = typeof option?.name === "string" ? option.name : "";
|
|
6223
6179
|
const label = sanitizeQuotedText(rawLabel, 160).trim();
|
|
6224
|
-
|
|
6180
|
+
if (!label)
|
|
6181
|
+
return fallback;
|
|
6182
|
+
return this.localizedPermissionOptionLabel(option, label) ?? label;
|
|
6183
|
+
}
|
|
6184
|
+
localizedPermissionOptionLabel(option, label) {
|
|
6185
|
+
if (this.locale !== "zh")
|
|
6186
|
+
return void 0;
|
|
6187
|
+
const copy = PERMISSION_COPY[this.locale];
|
|
6188
|
+
if (option?.kind === "allow_always") {
|
|
6189
|
+
if (option.optionId === "proceed_always_project") {
|
|
6190
|
+
return localizedScopedAlwaysLabel(label, "Always Allow in project", copy.allowAlwaysProject);
|
|
6191
|
+
}
|
|
6192
|
+
if (option.optionId === "proceed_always_user") {
|
|
6193
|
+
return localizedScopedAlwaysLabel(label, "Always Allow for user", copy.allowAlwaysUser);
|
|
6194
|
+
}
|
|
6195
|
+
if (option.optionId === "proceed_always" && label === "Allow All Edits") {
|
|
6196
|
+
return copy.allowAlways;
|
|
6197
|
+
}
|
|
6198
|
+
return void 0;
|
|
6199
|
+
}
|
|
6200
|
+
if (label === "Allow" || label === "Allow once")
|
|
6201
|
+
return copy.allowOnce;
|
|
6202
|
+
if (label === "Deny" || label === "Reject")
|
|
6203
|
+
return copy.deny;
|
|
6204
|
+
return void 0;
|
|
6225
6205
|
}
|
|
6226
6206
|
approvalOption(pending) {
|
|
6227
6207
|
const options = pending.request.options;
|
|
@@ -6245,13 +6225,14 @@ ${promptText}` : promptText;
|
|
|
6245
6225
|
return options.find((option) => option.optionId === `proceed_always_${scope}`);
|
|
6246
6226
|
}
|
|
6247
6227
|
approvalAlwaysLabel(option) {
|
|
6228
|
+
const copy = PERMISSION_COPY[this.locale];
|
|
6248
6229
|
if (option.optionId === "proceed_always_project") {
|
|
6249
|
-
return
|
|
6230
|
+
return copy.allowAlwaysProject;
|
|
6250
6231
|
}
|
|
6251
6232
|
if (option.optionId === "proceed_always_user") {
|
|
6252
|
-
return
|
|
6233
|
+
return copy.allowAlwaysUser;
|
|
6253
6234
|
}
|
|
6254
|
-
return
|
|
6235
|
+
return copy.allowAlways;
|
|
6255
6236
|
}
|
|
6256
6237
|
denialResponse(pending) {
|
|
6257
6238
|
const option = this.denialOption(pending);
|
|
@@ -6287,7 +6268,7 @@ ${promptText}` : promptText;
|
|
|
6287
6268
|
const task = pending2?.taskName ? `Task ${pending2.taskName} \u2014 ` : "";
|
|
6288
6269
|
return `- ${task}${sanitizeQuotedText(id, 128)}${title}`;
|
|
6289
6270
|
}).join("\n");
|
|
6290
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Multiple permission requests are pending for this chat. Reply with
|
|
6271
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Multiple permission requests are pending for this chat. Reply with /${decision} <request-id>.
|
|
6291
6272
|
${requestList}`);
|
|
6292
6273
|
return true;
|
|
6293
6274
|
}
|
|
@@ -6301,7 +6282,7 @@ ${requestList}`);
|
|
|
6301
6282
|
return true;
|
|
6302
6283
|
}
|
|
6303
6284
|
if (pending.userInputPresented && decision !== "deny") {
|
|
6304
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Submit this question through its interactive card, or use
|
|
6285
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Submit this question through its interactive card, or use /deny [request-id] to cancel it.`, pending.sourceLabel);
|
|
6305
6286
|
return true;
|
|
6306
6287
|
}
|
|
6307
6288
|
const response = (() => {
|
|
@@ -6317,7 +6298,7 @@ ${requestList}`);
|
|
|
6317
6298
|
}
|
|
6318
6299
|
let accepted;
|
|
6319
6300
|
try {
|
|
6320
|
-
accepted = pending.userInputPresented ? await this.respondToUserInput(pending, response) : await this.bridge.respondToPermission(pending.requestId, response);
|
|
6301
|
+
accepted = pending.userInputPresented || pending.permissionPresented ? await this.respondToUserInput(pending, response) : await this.bridge.respondToPermission(pending.requestId, response);
|
|
6321
6302
|
} catch (err) {
|
|
6322
6303
|
this.removePendingPermission(pending.requestId);
|
|
6323
6304
|
process.stderr.write(`[${this.name}] permission response failed for request ${sanitizeLogText(pending.requestId, 128)}: ${this.lifecycleError(err)}
|
|
@@ -6468,7 +6449,7 @@ ${requestList}`);
|
|
|
6468
6449
|
if (safeTaskName !== void 0 && failedTaskName === await this.selectedTaskName(envelope)) {
|
|
6469
6450
|
return `${subject} ${problem}. Its files were not changed. ${interrupted ? "Clear the task again to finish the reset." : "Clear the task to restart it in the same worktree, or close it."}`;
|
|
6470
6451
|
}
|
|
6471
|
-
const remedy = safeTaskName === void 0 ? "select this task first or close it" : `select this task first or close it with
|
|
6452
|
+
const remedy = safeTaskName === void 0 ? "select this task first or close it" : `select this task first or close it with /session close ${safeTaskName}`;
|
|
6472
6453
|
return `${subject} ${problem}. Its files were not changed. Clearing now would reset the selected task instead, so ${remedy}.`;
|
|
6473
6454
|
}
|
|
6474
6455
|
async selectedTaskName(envelope) {
|
|
@@ -6495,7 +6476,7 @@ ${requestList}`);
|
|
|
6495
6476
|
return false;
|
|
6496
6477
|
const normalized = args.trim().toLowerCase();
|
|
6497
6478
|
if (normalized !== "" && normalized !== "all") {
|
|
6498
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage:
|
|
6479
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /sessions [all]`);
|
|
6499
6480
|
return true;
|
|
6500
6481
|
}
|
|
6501
6482
|
try {
|
|
@@ -6526,7 +6507,7 @@ ${requestList}`);
|
|
|
6526
6507
|
if (parts.length > 0)
|
|
6527
6508
|
break;
|
|
6528
6509
|
const current = await namedSessions.current(owner);
|
|
6529
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, current ? `Current task: ${current.name} (${current.isolation})` : `No task is currently selected. Use
|
|
6510
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, current ? `Current task: ${current.name} (${current.isolation})` : `No task is currently selected. Use /session new <name> or /session use <name>.`);
|
|
6530
6511
|
return true;
|
|
6531
6512
|
}
|
|
6532
6513
|
case "new": {
|
|
@@ -6585,7 +6566,7 @@ ${requestList}`);
|
|
|
6585
6566
|
await this.sendNamedSessionError(envelope, error);
|
|
6586
6567
|
return true;
|
|
6587
6568
|
}
|
|
6588
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage:
|
|
6569
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /session current | /session new <name> [--worktree] | /session use <name> | /session close <name> | /session cancel [<name>]`);
|
|
6589
6570
|
return true;
|
|
6590
6571
|
}
|
|
6591
6572
|
/** Register shared slash commands. Called from constructor. */
|
|
@@ -6678,7 +6659,7 @@ ${requestList}`);
|
|
|
6678
6659
|
return true;
|
|
6679
6660
|
}
|
|
6680
6661
|
if (this.isSharedSession(envelope) && args.toLowerCase() !== "confirm") {
|
|
6681
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `This clears the shared session for everyone who shares it. Re-send with "confirm" (e.g.
|
|
6662
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `This clears the shared session for everyone who shares it. Re-send with "confirm" (e.g. /clear confirm) to proceed.`);
|
|
6682
6663
|
return true;
|
|
6683
6664
|
}
|
|
6684
6665
|
await doClear(envelope);
|
|
@@ -6719,19 +6700,19 @@ ${requestList}`);
|
|
|
6719
6700
|
this.registerCommand("help", async (envelope) => {
|
|
6720
6701
|
const lines = [
|
|
6721
6702
|
"Commands:",
|
|
6722
|
-
|
|
6723
|
-
this.isSharedSession(envelope) ?
|
|
6724
|
-
|
|
6725
|
-
|
|
6726
|
-
|
|
6727
|
-
|
|
6728
|
-
|
|
6703
|
+
`/help \u2014 Show this help`,
|
|
6704
|
+
this.isSharedSession(envelope) ? `/clear confirm \u2014 Clear the shared session (aliases: /reset, /new)` : `/clear \u2014 Clear your session (aliases: /reset, /new)`,
|
|
6705
|
+
`/who \u2014 Show current session & workspace`,
|
|
6706
|
+
`/status \u2014 Show session info`,
|
|
6707
|
+
`/approve [request-id] \u2014 Approve a pending permission request`,
|
|
6708
|
+
`/approve-always [request-id] \u2014 Always approve a pending permission request`,
|
|
6709
|
+
`/deny [request-id] \u2014 Deny a pending permission request`,
|
|
6729
6710
|
...this.bridge.btw ? [
|
|
6730
|
-
|
|
6711
|
+
`/btw <question> \u2014 Ask a side question without interrupting the current task`
|
|
6731
6712
|
] : [],
|
|
6732
6713
|
...this.namedSessions ? [
|
|
6733
|
-
|
|
6734
|
-
|
|
6714
|
+
`/sessions [all] \u2014 List your named tasks`,
|
|
6715
|
+
`/session current|new|use|close|cancel \u2014 Manage your named tasks`
|
|
6735
6716
|
] : []
|
|
6736
6717
|
];
|
|
6737
6718
|
const sharedCmds = /* @__PURE__ */ new Set([
|
|
@@ -6754,7 +6735,7 @@ ${requestList}`);
|
|
|
6754
6735
|
const platformCmds = [...this.commands.keys()].filter((c) => !sharedCmds.has(c));
|
|
6755
6736
|
if (platformCmds.length > 0) {
|
|
6756
6737
|
for (const cmd of platformCmds) {
|
|
6757
|
-
lines.push(
|
|
6738
|
+
lines.push(`/${cmd}`);
|
|
6758
6739
|
}
|
|
6759
6740
|
}
|
|
6760
6741
|
const sessionId = await this.currentSessionId(envelope);
|
|
@@ -6765,10 +6746,10 @@ ${requestList}`);
|
|
|
6765
6746
|
if (agentCommands.length > 0) {
|
|
6766
6747
|
lines.push("", "Agent commands (forwarded to Qwen Code):");
|
|
6767
6748
|
for (const cmd of agentCommands) {
|
|
6768
|
-
lines.push(
|
|
6749
|
+
lines.push(`/${cmd.name} \u2014 ${cmd.description}`);
|
|
6769
6750
|
}
|
|
6770
6751
|
}
|
|
6771
|
-
lines.push("",
|
|
6752
|
+
lines.push("", "Send any text to chat with the agent.");
|
|
6772
6753
|
await this.sendThreadMessage(envelope.chatId, envelope.threadId, lines.join("\n"));
|
|
6773
6754
|
return true;
|
|
6774
6755
|
});
|
|
@@ -6813,7 +6794,7 @@ ${requestList}`);
|
|
|
6813
6794
|
case "cancel":
|
|
6814
6795
|
return this.handleLoopCancel(envelope, rest[0]);
|
|
6815
6796
|
default:
|
|
6816
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage:
|
|
6797
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop add "<cron>" <prompt> | /loop list | /loop inspect <id> | /loop cancel <id>`);
|
|
6817
6798
|
return true;
|
|
6818
6799
|
}
|
|
6819
6800
|
}
|
|
@@ -6830,7 +6811,7 @@ ${requestList}`);
|
|
|
6830
6811
|
}
|
|
6831
6812
|
const parsed = parseLoopAddArgs(args);
|
|
6832
6813
|
if (!parsed) {
|
|
6833
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage:
|
|
6814
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop add "<cron>" <prompt>`);
|
|
6834
6815
|
return true;
|
|
6835
6816
|
}
|
|
6836
6817
|
try {
|
|
@@ -6984,7 +6965,7 @@ ${requestList}`);
|
|
|
6984
6965
|
if (!this.loopController)
|
|
6985
6966
|
return true;
|
|
6986
6967
|
if (!id) {
|
|
6987
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage:
|
|
6968
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop inspect <id>`);
|
|
6988
6969
|
return true;
|
|
6989
6970
|
}
|
|
6990
6971
|
const jobs = await this.loopController.listForTarget(this.name, this.loopTargetFromEnvelope(envelope));
|
|
@@ -7044,7 +7025,7 @@ ${requestList}`);
|
|
|
7044
7025
|
if (!this.loopController)
|
|
7045
7026
|
return true;
|
|
7046
7027
|
if (!id) {
|
|
7047
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage:
|
|
7028
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /loop cancel <id>`);
|
|
7048
7029
|
return true;
|
|
7049
7030
|
}
|
|
7050
7031
|
const jobs = await this.loopController.listForTarget(this.name, this.loopTargetFromEnvelope(envelope));
|
|
@@ -7629,17 +7610,8 @@ ${sanitizePromptText(entry.text).trim()}` : `No channel memory entry ${intent.id
|
|
|
7629
7610
|
const active = this.activePrompts.get(sessionId);
|
|
7630
7611
|
return active?.senderName || active?.senderId || target.senderId || "agent";
|
|
7631
7612
|
}
|
|
7632
|
-
stopActiveStreaming(active, sessionId, reason) {
|
|
7633
|
-
try {
|
|
7634
|
-
active.stopStreaming?.();
|
|
7635
|
-
} catch (err) {
|
|
7636
|
-
process.stderr.write(`[${this.name}] stopStreaming threw during ${reason} for session ${sessionId}: ${err instanceof Error ? err.message : err}
|
|
7637
|
-
`);
|
|
7638
|
-
}
|
|
7639
|
-
}
|
|
7640
7613
|
/**
|
|
7641
|
-
* Cancel the active turn and wait (bounded) for it to wind down.
|
|
7642
|
-
* BlockStreamer so buffered text can't leak via the idle timer, then fires a
|
|
7614
|
+
* Cancel the active turn and wait (bounded) for it to wind down. Fires a
|
|
7643
7615
|
* best-effort cancelSession (NOT awaited — a wedged child/daemon can leave the
|
|
7644
7616
|
* request pending forever). Returns true if active.done settled first, false
|
|
7645
7617
|
* if the CLEAR_CANCEL_TIMEOUT_MS bound won (the turn never wound down). Used by
|
|
@@ -7650,7 +7622,6 @@ ${sanitizePromptText(entry.text).trim()}` : `No channel memory entry ${intent.id
|
|
|
7650
7622
|
*/
|
|
7651
7623
|
async cancelAndAwaitActive(active, sessionId) {
|
|
7652
7624
|
active.cancelled = true;
|
|
7653
|
-
this.stopActiveStreaming(active, sessionId, "cancel");
|
|
7654
7625
|
void this.bridge.cancelSession(sessionId).catch((err) => {
|
|
7655
7626
|
process.stderr.write(`[${this.name}] cancelSession failed for session=${sessionId} (clear/await): ${err instanceof Error ? err.message : err}
|
|
7656
7627
|
`);
|
|
@@ -7853,18 +7824,6 @@ ${CURRENT_MESSAGE_MARKER}
|
|
|
7853
7824
|
${promptText}`;
|
|
7854
7825
|
}
|
|
7855
7826
|
preflightInbound(envelope, options = {}) {
|
|
7856
|
-
if (this.messagePrefixRejectedEnvelopes.has(envelope))
|
|
7857
|
-
return false;
|
|
7858
|
-
if (!this.messagePrefixCheckedEnvelopes.has(envelope)) {
|
|
7859
|
-
this.messagePrefixCheckedEnvelopes.add(envelope);
|
|
7860
|
-
if (!applyMessagePrefix(envelope, this.messagePrefix)) {
|
|
7861
|
-
this.messagePrefixRejectedEnvelopes.add(envelope);
|
|
7862
|
-
if (!(envelope.isGroup && !envelope.isMentioned && !envelope.isReplyToBot)) {
|
|
7863
|
-
this.logPreflightRejected("message_prefix_mismatch");
|
|
7864
|
-
}
|
|
7865
|
-
return false;
|
|
7866
|
-
}
|
|
7867
|
-
}
|
|
7868
7827
|
const groupResult = this.groupGate.check(envelope, {
|
|
7869
7828
|
createPairingRequest: !options.deferPairingRequests
|
|
7870
7829
|
});
|
|
@@ -7920,9 +7879,6 @@ ${promptText}`;
|
|
|
7920
7879
|
process.stderr.write(`[Channel:${this.name}] preflight rejected reason=${sanitizeLogText(reason, 80)}
|
|
7921
7880
|
`);
|
|
7922
7881
|
}
|
|
7923
|
-
wasMessagePrefixRejected(envelope) {
|
|
7924
|
-
return this.messagePrefixRejectedEnvelopes.has(envelope);
|
|
7925
|
-
}
|
|
7926
7882
|
logDebugPayload(platform, payload) {
|
|
7927
7883
|
if (!isDebugPayloadEnabled(this.name))
|
|
7928
7884
|
return;
|
|
@@ -8146,12 +8102,12 @@ ${text}`;
|
|
|
8146
8102
|
}
|
|
8147
8103
|
if (parsed.command === "btw" && this.bridge.btw) {
|
|
8148
8104
|
if (!this.isAuthorizedForSharedSession(envelope)) {
|
|
8149
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Only authorized members can use
|
|
8105
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Only authorized members can use /btw in this shared session.`);
|
|
8150
8106
|
return;
|
|
8151
8107
|
}
|
|
8152
8108
|
btwQuestion = parsed.args.trim();
|
|
8153
8109
|
if (!btwQuestion) {
|
|
8154
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage:
|
|
8110
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Usage: /btw <question>`);
|
|
8155
8111
|
return;
|
|
8156
8112
|
}
|
|
8157
8113
|
if (btwQuestion.length > CHANNEL_BTW_MAX_INPUT_LENGTH) {
|
|
@@ -8159,7 +8115,7 @@ ${text}`;
|
|
|
8159
8115
|
return;
|
|
8160
8116
|
}
|
|
8161
8117
|
if (envelope.imageBase64 || envelope.attachments?.length) {
|
|
8162
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId,
|
|
8118
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `/btw supports text-only questions.`);
|
|
8163
8119
|
return;
|
|
8164
8120
|
}
|
|
8165
8121
|
}
|
|
@@ -8217,7 +8173,7 @@ ${text}`;
|
|
|
8217
8173
|
return;
|
|
8218
8174
|
}
|
|
8219
8175
|
if (!sessionId) {
|
|
8220
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `No task is currently selected. Use
|
|
8176
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `No task is currently selected. Use /session new <name> or /session use <name>.`);
|
|
8221
8177
|
return;
|
|
8222
8178
|
}
|
|
8223
8179
|
} else {
|
|
@@ -8225,7 +8181,7 @@ ${text}`;
|
|
|
8225
8181
|
}
|
|
8226
8182
|
const sourceLabel = this.namedSessions ? this.sourceLabelForTurn(sessionId, envelope) : void 0;
|
|
8227
8183
|
if (this.namedSessions && !sourceLabel) {
|
|
8228
|
-
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not identify the selected task. Use
|
|
8184
|
+
await this.sendThreadMessage(envelope.chatId, envelope.threadId, `Could not identify the selected task. Use /sessions, select it again, and retry.`);
|
|
8229
8185
|
return;
|
|
8230
8186
|
}
|
|
8231
8187
|
if (btwQuestion !== void 0) {
|
|
@@ -8340,7 +8296,6 @@ ${promptText}`;
|
|
|
8340
8296
|
if (firstCancellation) {
|
|
8341
8297
|
process.stderr.write(`[${this.name}] steer: cancelled active turn for ${envelope.senderId} in session ${sessionId}
|
|
8342
8298
|
`);
|
|
8343
|
-
this.stopActiveStreaming(active, sessionId, "steer");
|
|
8344
8299
|
void this.bridge.cancelSession(sessionId).catch((err) => {
|
|
8345
8300
|
process.stderr.write(`[${this.name}] cancelSession failed for session=${sessionId} (steer): ${err instanceof Error ? err.message : err}
|
|
8346
8301
|
`);
|
|
@@ -8375,7 +8330,6 @@ ${promptText}`;
|
|
|
8375
8330
|
}
|
|
8376
8331
|
const prev = this.sessionQueues.get(sessionId) ?? Promise.resolve();
|
|
8377
8332
|
const generation = namedTurn?.generation ?? this.sessionGenerations.get(sessionId) ?? 0;
|
|
8378
|
-
const useBlockStreaming = this.config.blockStreaming === "on";
|
|
8379
8333
|
if (namedTurn) {
|
|
8380
8334
|
namedTurn.claimed = true;
|
|
8381
8335
|
} else {
|
|
@@ -8478,18 +8432,9 @@ ${promptToSend}`;
|
|
|
8478
8432
|
process.stderr.write(`[${this.name}] onPromptStart threw for session ${sessionId}: ${this.lifecycleError(err)}
|
|
8479
8433
|
`);
|
|
8480
8434
|
}
|
|
8481
|
-
const streamer = useBlockStreaming ? new BlockStreamer({
|
|
8482
|
-
minChars: this.config.blockStreamingChunk?.minChars ?? 400,
|
|
8483
|
-
maxChars: this.config.blockStreamingChunk?.maxChars ?? 1e3,
|
|
8484
|
-
idleMs: this.config.blockStreamingCoalesce?.idleMs ?? 1500,
|
|
8485
|
-
send: /* @__PURE__ */ __name((text) => this.sendResponseMessage(envelope.chatId, text, sessionId, sourceLabel), "send")
|
|
8486
|
-
}) : null;
|
|
8487
|
-
promptState.stopStreaming = () => streamer?.stop();
|
|
8488
8435
|
const heldChunks = [];
|
|
8489
|
-
let hasStreamedText = false;
|
|
8490
8436
|
const releaseHeldChunks = /* @__PURE__ */ __name(() => {
|
|
8491
8437
|
for (const held of heldChunks.splice(0)) {
|
|
8492
|
-
hasStreamedText = true;
|
|
8493
8438
|
const segment = this.ensureOutputSegment(sessionId, promptState);
|
|
8494
8439
|
this.emitTaskLifecycle({
|
|
8495
8440
|
...this.lifecycleBase(envelope.chatId, sessionId, envelope.messageId),
|
|
@@ -8497,7 +8442,6 @@ ${promptToSend}`;
|
|
|
8497
8442
|
chunk: held
|
|
8498
8443
|
});
|
|
8499
8444
|
this.onResponseChunk(envelope.chatId, held, sessionId, segment);
|
|
8500
|
-
streamer?.push(held);
|
|
8501
8445
|
}
|
|
8502
8446
|
}, "releaseHeldChunks");
|
|
8503
8447
|
const onChunk = /* @__PURE__ */ __name((sid, chunk) => {
|
|
@@ -8514,10 +8458,8 @@ ${promptToSend}`;
|
|
|
8514
8458
|
return;
|
|
8515
8459
|
}
|
|
8516
8460
|
heldChunks.length = 0;
|
|
8517
|
-
hasStreamedText = false;
|
|
8518
8461
|
const segment = this.closeOutputSegment(sessionId, promptState);
|
|
8519
8462
|
void this.notifyOutputSegmentEnd(envelope.chatId, sessionId, segment, "response_boundary");
|
|
8520
|
-
streamer?.stop();
|
|
8521
8463
|
}, "onResponseBoundary");
|
|
8522
8464
|
await this.waitForBridgeRecovery();
|
|
8523
8465
|
const promptBridge = this.bridge;
|
|
@@ -8536,17 +8478,10 @@ ${promptToSend}`;
|
|
|
8536
8478
|
}
|
|
8537
8479
|
if (!promptState.cancelled && response) {
|
|
8538
8480
|
promptState.deliveryStarted = true;
|
|
8539
|
-
|
|
8540
|
-
|
|
8541
|
-
|
|
8542
|
-
|
|
8543
|
-
await streamer.flush();
|
|
8544
|
-
} else {
|
|
8545
|
-
const segment = this.ensureOutputSegment(sessionId, promptState);
|
|
8546
|
-
await this.onResponseComplete(envelope.chatId, response, sessionId, segment);
|
|
8547
|
-
if (segment && promptState.activeSegmentId === segment.segmentId) {
|
|
8548
|
-
promptState.activeSegmentId = void 0;
|
|
8549
|
-
}
|
|
8481
|
+
const segment = this.ensureOutputSegment(sessionId, promptState);
|
|
8482
|
+
await this.onResponseComplete(envelope.chatId, response, sessionId, segment);
|
|
8483
|
+
if (segment && promptState.activeSegmentId === segment.segmentId) {
|
|
8484
|
+
promptState.activeSegmentId = void 0;
|
|
8550
8485
|
}
|
|
8551
8486
|
}
|
|
8552
8487
|
if (!promptState.deliveryStarted) {
|
|
@@ -8591,10 +8526,6 @@ ${promptToSend}`;
|
|
|
8591
8526
|
} finally {
|
|
8592
8527
|
promptBridge.off("textChunk", onChunk);
|
|
8593
8528
|
promptBridge.off("responseBoundary", onResponseBoundary);
|
|
8594
|
-
if (streamer) {
|
|
8595
|
-
streamer.stop();
|
|
8596
|
-
await streamer.drain();
|
|
8597
|
-
}
|
|
8598
8529
|
const stillCurrent = this.activePrompts.get(sessionId) === promptState;
|
|
8599
8530
|
if (!promptState.clearEvicted) {
|
|
8600
8531
|
try {
|
|
@@ -9906,8 +9837,6 @@ export {
|
|
|
9906
9837
|
sanitizeLogText,
|
|
9907
9838
|
SessionRouter,
|
|
9908
9839
|
ChannelLoopScheduler,
|
|
9909
|
-
startsWithMessagePrefix,
|
|
9910
|
-
stripMessagePrefix,
|
|
9911
9840
|
ChannelBase,
|
|
9912
9841
|
PollingChannelBase,
|
|
9913
9842
|
CHANNEL_PROMPT_META_KEY,
|