@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
|
@@ -2,15 +2,14 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
ChannelBase,
|
|
5
|
-
isTerminalTaskLifecycleType
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import "./chunk-
|
|
5
|
+
isTerminalTaskLifecycleType
|
|
6
|
+
} from "./chunk-C4NLHK7X.js";
|
|
7
|
+
import "./chunk-IJOS26LH.js";
|
|
8
|
+
import "./chunk-CQ35AJ4Z.js";
|
|
9
9
|
import {
|
|
10
10
|
require_abort_controller,
|
|
11
11
|
require_lib
|
|
12
12
|
} from "./chunk-DI35ZN7T.js";
|
|
13
|
-
import "./chunk-CQ35AJ4Z.js";
|
|
14
13
|
import "./chunk-5WV5S2GT.js";
|
|
15
14
|
import "./chunk-XWRJCPHC.js";
|
|
16
15
|
import {
|
|
@@ -9725,14 +9724,14 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9725
9724
|
this.bot.on("message:text", async (ctx) => {
|
|
9726
9725
|
const msg = ctx.message;
|
|
9727
9726
|
const text = msg.text;
|
|
9728
|
-
const envelope = this.buildEnvelope(msg, text, msg.entities
|
|
9727
|
+
const envelope = this.buildEnvelope(msg, text, msg.entities);
|
|
9729
9728
|
this.handleInbound(envelope).catch((err) => {
|
|
9730
9729
|
this.reportInboundError(envelope, err, () => ctx.reply("Sorry, something went wrong processing your message."));
|
|
9731
9730
|
});
|
|
9732
9731
|
});
|
|
9733
9732
|
this.bot.on("message:photo", async (ctx) => {
|
|
9734
9733
|
const msg = ctx.message;
|
|
9735
|
-
const envelope = this.buildEnvelope(msg, msg.caption || "(image)", msg.caption_entities,
|
|
9734
|
+
const envelope = this.buildEnvelope(msg, msg.caption || "(image)", msg.caption_entities, !msg.caption);
|
|
9736
9735
|
const photo = msg.photo[msg.photo.length - 1];
|
|
9737
9736
|
if (!photo)
|
|
9738
9737
|
return;
|
|
@@ -9762,7 +9761,7 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9762
9761
|
const msg = ctx.message;
|
|
9763
9762
|
const doc = msg.document;
|
|
9764
9763
|
const fileName = doc.file_name || `file_${Date.now()}`;
|
|
9765
|
-
const envelope = this.buildEnvelope(msg, msg.caption || `(file: ${fileName})`, msg.caption_entities,
|
|
9764
|
+
const envelope = this.buildEnvelope(msg, msg.caption || `(file: ${fileName})`, msg.caption_entities, !msg.caption);
|
|
9766
9765
|
this.prepareThenHandleInbound(envelope, async () => {
|
|
9767
9766
|
try {
|
|
9768
9767
|
const file = await ctx.api.getFile(doc.file_id);
|
|
@@ -9775,9 +9774,7 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9775
9774
|
mkdirSync(dir, { recursive: true });
|
|
9776
9775
|
const filePath = join(dir, basename(fileName) || `file_${Date.now()}`);
|
|
9777
9776
|
writeFileSync(filePath, buf);
|
|
9778
|
-
|
|
9779
|
-
envelope.text = msg.caption || "";
|
|
9780
|
-
}
|
|
9777
|
+
envelope.text = msg.caption || "";
|
|
9781
9778
|
envelope.attachments = [
|
|
9782
9779
|
{
|
|
9783
9780
|
type: "file",
|
|
@@ -9789,7 +9786,7 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9789
9786
|
} catch (err) {
|
|
9790
9787
|
process.stderr.write(`[Telegram:${this.name}] Failed to download document: ${err instanceof Error ? err.message : err}
|
|
9791
9788
|
`);
|
|
9792
|
-
const promptText =
|
|
9789
|
+
const promptText = msg.caption || "";
|
|
9793
9790
|
envelope.text = `${promptText}
|
|
9794
9791
|
|
|
9795
9792
|
(User sent a file "${fileName}" but download failed)`;
|
|
@@ -9806,7 +9803,6 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9806
9803
|
msg,
|
|
9807
9804
|
msg.caption || "(voice message)",
|
|
9808
9805
|
msg.caption_entities,
|
|
9809
|
-
false,
|
|
9810
9806
|
// Standard Telegram clients cannot caption a voice message, so
|
|
9811
9807
|
// this is effectively always synthetic.
|
|
9812
9808
|
!msg.caption
|
|
@@ -9823,9 +9819,7 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9823
9819
|
mkdirSync(dir, { recursive: true });
|
|
9824
9820
|
const filePath = join(dir, fileName);
|
|
9825
9821
|
writeFileSync(filePath, buf);
|
|
9826
|
-
|
|
9827
|
-
envelope.text = msg.caption || "";
|
|
9828
|
-
}
|
|
9822
|
+
envelope.text = msg.caption || "";
|
|
9829
9823
|
envelope.attachments = [
|
|
9830
9824
|
{
|
|
9831
9825
|
type: "audio",
|
|
@@ -9837,7 +9831,7 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9837
9831
|
} catch (err) {
|
|
9838
9832
|
process.stderr.write(`[Telegram:${this.name}] Failed to download voice message: ${err instanceof Error ? err.message : err}
|
|
9839
9833
|
`);
|
|
9840
|
-
const promptText =
|
|
9834
|
+
const promptText = msg.caption || "";
|
|
9841
9835
|
envelope.text = `${promptText}
|
|
9842
9836
|
|
|
9843
9837
|
(User sent a voice message but download failed)`;
|
|
@@ -9865,14 +9859,13 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9865
9859
|
}
|
|
9866
9860
|
}
|
|
9867
9861
|
startMessage() {
|
|
9868
|
-
const prefix = this.configuredMessagePrefix();
|
|
9869
9862
|
return [
|
|
9870
9863
|
"Qwen Code Telegram bot",
|
|
9871
9864
|
"",
|
|
9872
|
-
|
|
9873
|
-
|
|
9874
|
-
|
|
9875
|
-
|
|
9865
|
+
"Send any message to chat with Qwen Code.",
|
|
9866
|
+
"Use /new to start a fresh conversation.",
|
|
9867
|
+
"Use /cancel to stop a running request.",
|
|
9868
|
+
"Use /help to see available commands."
|
|
9876
9869
|
].join("\n");
|
|
9877
9870
|
}
|
|
9878
9871
|
/** Per-chat typing interval — repeats every 4s since Telegram expires it after 5s. */
|
|
@@ -9984,7 +9977,7 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
9984
9977
|
this.activeTypingSessions.clear();
|
|
9985
9978
|
this.bot.stop();
|
|
9986
9979
|
}
|
|
9987
|
-
buildEnvelope(msg, text, entities,
|
|
9980
|
+
buildEnvelope(msg, text, entities, syntheticText = false) {
|
|
9988
9981
|
const isGroup = msg.chat.type === "group" || msg.chat.type === "supergroup";
|
|
9989
9982
|
const isMentioned = entities?.some((e) => {
|
|
9990
9983
|
if (!this.botUsername)
|
|
@@ -10006,18 +9999,6 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
10006
9999
|
cleanText = text.replace(new RegExp(`@${this.botUsername}`, "gi"), "").trim();
|
|
10007
10000
|
}
|
|
10008
10001
|
const referencedText = msg.reply_to_message?.text || void 0;
|
|
10009
|
-
const configuredPrefix = this.configuredMessagePrefix();
|
|
10010
|
-
const bypassMessagePrefix = allowRegisteredCommandBypass && !(configuredPrefix && startsWithMessagePrefix(text.trim(), configuredPrefix)) && (entities?.some((entity) => {
|
|
10011
|
-
if (entity.type !== "bot_command" || entity.offset !== 0)
|
|
10012
|
-
return false;
|
|
10013
|
-
const value = text.slice(0, entity.length).toLowerCase();
|
|
10014
|
-
const command = value.slice(1).split("@", 1)[0];
|
|
10015
|
-
const atIndex = value.indexOf("@", 1);
|
|
10016
|
-
if (atIndex !== -1 && value.slice(atIndex + 1) !== this.botUsername.toLowerCase()) {
|
|
10017
|
-
return false;
|
|
10018
|
-
}
|
|
10019
|
-
return TELEGRAM_BOT_COMMANDS.some((registered) => registered.command === command);
|
|
10020
|
-
}) ?? false);
|
|
10021
10002
|
return {
|
|
10022
10003
|
channelName: this.name,
|
|
10023
10004
|
senderId: String(msg.from.id),
|
|
@@ -10027,7 +10008,6 @@ var TelegramChannel = class extends ChannelBase {
|
|
|
10027
10008
|
threadId: typeof msg.message_thread_id === "number" ? String(msg.message_thread_id) : void 0,
|
|
10028
10009
|
text: cleanText,
|
|
10029
10010
|
...syntheticText ? { syntheticText: true } : {},
|
|
10030
|
-
...bypassMessagePrefix ? { bypassMessagePrefix: true } : {},
|
|
10031
10011
|
isGroup,
|
|
10032
10012
|
isMentioned,
|
|
10033
10013
|
isReplyToBot,
|
|
@@ -4,10 +4,9 @@ import {
|
|
|
4
4
|
PollingChannelBase,
|
|
5
5
|
isTerminalTaskLifecycleType,
|
|
6
6
|
sanitizeLogText,
|
|
7
|
-
stripMessagePrefix,
|
|
8
7
|
truncateCodePoints
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-C4NLHK7X.js";
|
|
9
|
+
import "./chunk-IJOS26LH.js";
|
|
11
10
|
import "./chunk-CQ35AJ4Z.js";
|
|
12
11
|
import {
|
|
13
12
|
init_esbuild_shims
|
|
@@ -32,6 +31,7 @@ import { execFile } from "node:child_process";
|
|
|
32
31
|
init_esbuild_shims();
|
|
33
32
|
import process from "node:process";
|
|
34
33
|
var SAFE_KEYS = /* @__PURE__ */ new Set([
|
|
34
|
+
"AONE_SANDBOX_ID",
|
|
35
35
|
"APPDATA",
|
|
36
36
|
"COMSPEC",
|
|
37
37
|
"HOME",
|
|
@@ -1091,6 +1091,13 @@ var NOTIFICATION_HISTORY_OVERLAP_MS = 5e3;
|
|
|
1091
1091
|
var NOTIFICATION_POLL_INTERVAL_MS = 5e3;
|
|
1092
1092
|
var TODO_POLL_INTERVAL_MS = 3e4;
|
|
1093
1093
|
var TODO_CHAT_PREFIX = "todo:";
|
|
1094
|
+
var IM_DELIVERY_RETRY_BASE_MS = 5e3;
|
|
1095
|
+
var IM_DELIVERY_RETRY_MAX_MS = 5 * 6e4;
|
|
1096
|
+
var IM_DELIVERY_MAX_ATTEMPTS = 16;
|
|
1097
|
+
var IM_DELIVERY_MAX_LOCAL_DEFERRALS = 32;
|
|
1098
|
+
var MAX_PENDING_IM_DELIVERIES = 100;
|
|
1099
|
+
var MAX_IM_DELIVERY_CONTENT_CHARS = 12e3;
|
|
1100
|
+
var IM_DELIVERY_TRUNCATION_NOTICE = "\n\n[Response truncated for DWS delivery.]";
|
|
1094
1101
|
function configuredString(value, field) {
|
|
1095
1102
|
if (value === void 0 || value === null || value === "")
|
|
1096
1103
|
return void 0;
|
|
@@ -1220,6 +1227,19 @@ function isPendingMessage(value) {
|
|
|
1220
1227
|
].every((item) => typeof item === "string") && (message.referencedText === void 0 || typeof message.referencedText === "string") && (message.eventTime === void 0 || Number.isSafeInteger(message.eventTime) && message.eventTime >= 0);
|
|
1221
1228
|
}
|
|
1222
1229
|
__name(isPendingMessage, "isPendingMessage");
|
|
1230
|
+
function isPersistedImDelivery(value) {
|
|
1231
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
1232
|
+
return false;
|
|
1233
|
+
}
|
|
1234
|
+
const delivery = value;
|
|
1235
|
+
return [
|
|
1236
|
+
delivery.conversationId,
|
|
1237
|
+
delivery.messageId,
|
|
1238
|
+
delivery.senderId,
|
|
1239
|
+
delivery.idempotencyKey
|
|
1240
|
+
].every((item) => typeof item === "string" && Boolean(item)) && typeof delivery.content === "string" && (delivery.directTarget === void 0 || delivery.directTarget.kind === "direct" && typeof delivery.directTarget.openDingTalkId === "string" && Boolean(delivery.directTarget.openDingTalkId)) && (delivery.isGroup === void 0 || typeof delivery.isGroup === "boolean") && Number.isSafeInteger(delivery.attempts) && delivery.attempts >= 0 && (delivery.localDeferrals === void 0 || Number.isSafeInteger(delivery.localDeferrals) && delivery.localDeferrals >= 0) && Number.isSafeInteger(delivery.nextRetryAt) && delivery.nextRetryAt >= 0;
|
|
1241
|
+
}
|
|
1242
|
+
__name(isPersistedImDelivery, "isPersistedImDelivery");
|
|
1223
1243
|
function isPersistedInboundFailure(value) {
|
|
1224
1244
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
1225
1245
|
return false;
|
|
@@ -1266,6 +1286,17 @@ function stableUuid(value) {
|
|
|
1266
1286
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-5${hex.slice(13, 16)}-8${hex.slice(17, 20)}-${hex.slice(20)}`;
|
|
1267
1287
|
}
|
|
1268
1288
|
__name(stableUuid, "stableUuid");
|
|
1289
|
+
function imDeliveryLogContext(delivery) {
|
|
1290
|
+
return `conversationId=${sanitizeLogText(delivery?.conversationId ?? "", 120)} messageId=${sanitizeLogText(delivery?.messageId ?? "", 120)}`;
|
|
1291
|
+
}
|
|
1292
|
+
__name(imDeliveryLogContext, "imDeliveryLogContext");
|
|
1293
|
+
function boundedImDeliveryContent(content) {
|
|
1294
|
+
if (Array.from(content).length <= MAX_IM_DELIVERY_CONTENT_CHARS) {
|
|
1295
|
+
return content;
|
|
1296
|
+
}
|
|
1297
|
+
return `${truncateCodePoints(content, MAX_IM_DELIVERY_CONTENT_CHARS - Array.from(IM_DELIVERY_TRUNCATION_NOTICE).length)}${IM_DELIVERY_TRUNCATION_NOTICE}`;
|
|
1298
|
+
}
|
|
1299
|
+
__name(boundedImDeliveryContent, "boundedImDeliveryContent");
|
|
1269
1300
|
function isNoReply(text) {
|
|
1270
1301
|
const trimmed = text.trim();
|
|
1271
1302
|
const fenced = trimmed.match(/^```[^\n]*\n([\s\S]*?)\n```$/u) ?? trimmed.match(/^```([^`\n]*)```$/u);
|
|
@@ -1345,7 +1376,6 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1345
1376
|
userInstructions;
|
|
1346
1377
|
client;
|
|
1347
1378
|
imStates;
|
|
1348
|
-
dwsMessagePrefix;
|
|
1349
1379
|
startReactionName;
|
|
1350
1380
|
endReactionName;
|
|
1351
1381
|
watchTodos;
|
|
@@ -1361,6 +1391,8 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1361
1391
|
// live or followup traffic, whose queue entries outlive their turn.
|
|
1362
1392
|
replayDispatches = /* @__PURE__ */ new Map();
|
|
1363
1393
|
attemptedPendingMessages = /* @__PURE__ */ new Set();
|
|
1394
|
+
activeImDeliveries = /* @__PURE__ */ new Set();
|
|
1395
|
+
imResponseKinds = /* @__PURE__ */ new Map();
|
|
1364
1396
|
conversationTails = /* @__PURE__ */ new Map();
|
|
1365
1397
|
messageStartResolvers = /* @__PURE__ */ new Map();
|
|
1366
1398
|
processingMessageGenerations = /* @__PURE__ */ new Map();
|
|
@@ -1375,7 +1407,6 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1375
1407
|
notificationWatermarkPulledBack = false;
|
|
1376
1408
|
constructor(name, config, bridge, options, client) {
|
|
1377
1409
|
const profile = configuredString(config.profile, "profile");
|
|
1378
|
-
const messagePrefix = configuredString(config.messagePrefix, "messagePrefix");
|
|
1379
1410
|
const startReactionName = configuredString(config.startReaction, "startReaction") ?? DEFAULT_START_REACTION;
|
|
1380
1411
|
const endReactionName = configuredString(config.endReaction, "endReaction");
|
|
1381
1412
|
const watchTodos = configuredBoolean(config.watchTodos, "watchTodos");
|
|
@@ -1395,7 +1426,6 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1395
1426
|
}
|
|
1396
1427
|
config.approvalMode ??= "default";
|
|
1397
1428
|
const userInstructions = config.instructions?.trim() || void 0;
|
|
1398
|
-
config.blockStreaming = "off";
|
|
1399
1429
|
config.instructions = channelInstructions(userInstructions, profile);
|
|
1400
1430
|
super(name, config, bridge, options);
|
|
1401
1431
|
this.router.setChannelApprovalMode(name, config.approvalMode);
|
|
@@ -1407,7 +1437,6 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1407
1437
|
}));
|
|
1408
1438
|
this.startReactionName = startReactionName;
|
|
1409
1439
|
this.endReactionName = endReactionName;
|
|
1410
|
-
this.dwsMessagePrefix = messagePrefix;
|
|
1411
1440
|
this.watchTodos = watchTodos;
|
|
1412
1441
|
}
|
|
1413
1442
|
createInitialCursor() {
|
|
@@ -1420,6 +1449,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1420
1449
|
mentionCheckpoint: void 0,
|
|
1421
1450
|
pendingDocumentNotifications: [],
|
|
1422
1451
|
pendingMessages: [],
|
|
1452
|
+
pendingImDeliveries: [],
|
|
1423
1453
|
processedMessages: [],
|
|
1424
1454
|
imTargets: [],
|
|
1425
1455
|
todosInitialized: false,
|
|
@@ -1432,7 +1462,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1432
1462
|
return null;
|
|
1433
1463
|
}
|
|
1434
1464
|
const cursor = parsed;
|
|
1435
|
-
if (cursor.version !== 1 || cursor.selfProfile !== void 0 && (typeof cursor.selfProfile !== "string" || !cursor.selfProfile.trim()) || cursor.selfSenderIds !== void 0 && (!Array.isArray(cursor.selfSenderIds) || !cursor.selfSenderIds.every((item) => typeof item === "string" && Boolean(item.trim()))) || cursor.documentIds !== void 0 && (!Array.isArray(cursor.documentIds) || !cursor.documentIds.every((item) => typeof item === "string" && /^[\p{L}\p{N}_~-]+$/u.test(item))) || cursor.notificationWatermark !== void 0 && (typeof cursor.notificationWatermark !== "number" || !Number.isSafeInteger(cursor.notificationWatermark) || cursor.notificationWatermark < 0) || cursor.mentionWatermark !== void 0 && (typeof cursor.mentionWatermark !== "number" || !Number.isSafeInteger(cursor.mentionWatermark) || cursor.mentionWatermark < 0) || cursor.notificationCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.notificationCheckpoint) || cursor.mentionCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.mentionCheckpoint) || cursor.pendingDocumentNotifications !== void 0 && (!Array.isArray(cursor.pendingDocumentNotifications) || !cursor.pendingDocumentNotifications.every(isPendingDocumentNotification)) || cursor.pendingMessages !== void 0 && (!Array.isArray(cursor.pendingMessages) || !cursor.pendingMessages.every(isPendingMessage)) || !Array.isArray(cursor.processedMessages) || !cursor.processedMessages.every((item) => typeof item === "string") || !Array.isArray(cursor.imTargets) || !cursor.imTargets.every(isPersistedTarget) || cursor.todosInitialized !== void 0 && typeof cursor.todosInitialized !== "boolean" || cursor.todoTasks !== void 0 && (!Array.isArray(cursor.todoTasks) || !cursor.todoTasks.every(isPersistedTodoState)) || cursor.pairingNotifications !== void 0 && (!Array.isArray(cursor.pairingNotifications) || !cursor.pairingNotifications.every((item) => typeof item === "string" && Boolean(item))) || cursor.inboundFailures !== void 0 && (!Array.isArray(cursor.inboundFailures) || !cursor.inboundFailures.every(isPersistedInboundFailure))) {
|
|
1465
|
+
if (cursor.version !== 1 || cursor.selfProfile !== void 0 && (typeof cursor.selfProfile !== "string" || !cursor.selfProfile.trim()) || cursor.selfSenderIds !== void 0 && (!Array.isArray(cursor.selfSenderIds) || !cursor.selfSenderIds.every((item) => typeof item === "string" && Boolean(item.trim()))) || cursor.documentIds !== void 0 && (!Array.isArray(cursor.documentIds) || !cursor.documentIds.every((item) => typeof item === "string" && /^[\p{L}\p{N}_~-]+$/u.test(item))) || cursor.notificationWatermark !== void 0 && (typeof cursor.notificationWatermark !== "number" || !Number.isSafeInteger(cursor.notificationWatermark) || cursor.notificationWatermark < 0) || cursor.mentionWatermark !== void 0 && (typeof cursor.mentionWatermark !== "number" || !Number.isSafeInteger(cursor.mentionWatermark) || cursor.mentionWatermark < 0) || cursor.notificationCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.notificationCheckpoint) || cursor.mentionCheckpoint !== void 0 && !isNotificationCheckpoint(cursor.mentionCheckpoint) || cursor.pendingDocumentNotifications !== void 0 && (!Array.isArray(cursor.pendingDocumentNotifications) || !cursor.pendingDocumentNotifications.every(isPendingDocumentNotification)) || cursor.pendingMessages !== void 0 && (!Array.isArray(cursor.pendingMessages) || !cursor.pendingMessages.every(isPendingMessage)) || cursor.pendingImDeliveries !== void 0 && (!Array.isArray(cursor.pendingImDeliveries) || !cursor.pendingImDeliveries.every(isPersistedImDelivery)) || !Array.isArray(cursor.processedMessages) || !cursor.processedMessages.every((item) => typeof item === "string") || !Array.isArray(cursor.imTargets) || !cursor.imTargets.every(isPersistedTarget) || cursor.todosInitialized !== void 0 && typeof cursor.todosInitialized !== "boolean" || cursor.todoTasks !== void 0 && (!Array.isArray(cursor.todoTasks) || !cursor.todoTasks.every(isPersistedTodoState)) || cursor.pairingNotifications !== void 0 && (!Array.isArray(cursor.pairingNotifications) || !cursor.pairingNotifications.every((item) => typeof item === "string" && Boolean(item))) || cursor.inboundFailures !== void 0 && (!Array.isArray(cursor.inboundFailures) || !cursor.inboundFailures.every(isPersistedInboundFailure))) {
|
|
1436
1466
|
return null;
|
|
1437
1467
|
}
|
|
1438
1468
|
return {
|
|
@@ -1446,6 +1476,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1446
1476
|
mentionCheckpoint: cursor.mentionCheckpoint,
|
|
1447
1477
|
pendingDocumentNotifications: (cursor.pendingDocumentNotifications ?? []).slice(-MAX_PROCESSED_ITEMS),
|
|
1448
1478
|
pendingMessages: (cursor.pendingMessages ?? []).slice(),
|
|
1479
|
+
pendingImDeliveries: (cursor.pendingImDeliveries ?? []).slice(-MAX_PENDING_IM_DELIVERIES),
|
|
1449
1480
|
processedMessages: cursor.processedMessages.slice(-MAX_PROCESSED_ITEMS),
|
|
1450
1481
|
imTargets: cursor.imTargets.slice(-MAX_IM_TARGETS),
|
|
1451
1482
|
todosInitialized: cursor.todosInitialized ?? false,
|
|
@@ -1485,6 +1516,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1485
1516
|
this.cursor.documentIds = [];
|
|
1486
1517
|
this.cursor.pendingDocumentNotifications = [];
|
|
1487
1518
|
this.cursor.pendingMessages = [];
|
|
1519
|
+
this.cursor.pendingImDeliveries = [];
|
|
1488
1520
|
this.cursor.imTargets = [];
|
|
1489
1521
|
this.cursor.processedMessages = [];
|
|
1490
1522
|
this.cursor.pairingNotifications = [];
|
|
@@ -1754,11 +1786,187 @@ Ask the bot operator to approve you with:
|
|
|
1754
1786
|
return;
|
|
1755
1787
|
}
|
|
1756
1788
|
const idempotencyKey = stableUuid(`${this.name}\0${chatId}\0${messageId}\0${text}`);
|
|
1757
|
-
|
|
1758
|
-
|
|
1789
|
+
const target = this.findImTarget(chatId);
|
|
1790
|
+
const isGroup = this.imResponseKinds.get(`${chatId}\0${messageId}`) ?? target?.kind !== "direct";
|
|
1791
|
+
const delivery = {
|
|
1792
|
+
conversationId: chatId,
|
|
1793
|
+
messageId,
|
|
1794
|
+
senderId,
|
|
1795
|
+
content: boundedImDeliveryContent(this.formatAttributedText(text, label)),
|
|
1796
|
+
idempotencyKey,
|
|
1797
|
+
...target?.kind === "direct" ? { directTarget: target } : {},
|
|
1798
|
+
isGroup,
|
|
1799
|
+
attempts: 0,
|
|
1800
|
+
nextRetryAt: 0
|
|
1801
|
+
};
|
|
1802
|
+
const pending = this.rememberImDelivery(delivery);
|
|
1803
|
+
void this.attemptImDelivery(pending).catch((error) => {
|
|
1804
|
+
this.deferImDelivery(pending, error);
|
|
1805
|
+
});
|
|
1806
|
+
}
|
|
1807
|
+
rememberImDelivery(delivery) {
|
|
1808
|
+
const existing = (this.cursor.pendingImDeliveries ?? []).find(({ idempotencyKey }) => idempotencyKey === delivery.idempotencyKey);
|
|
1809
|
+
if (existing)
|
|
1810
|
+
return existing;
|
|
1811
|
+
const pending = this.cursor.pendingImDeliveries ?? [];
|
|
1812
|
+
while (pending.length >= MAX_PENDING_IM_DELIVERIES) {
|
|
1813
|
+
const dropped = pending.shift();
|
|
1814
|
+
process2.stderr.write(`[Channel:${this.name}] DWS IM delivery queue is full; dropping the oldest undelivered reply ${imDeliveryLogContext(dropped)} key=${sanitizeLogText(dropped?.idempotencyKey ?? "", 64)}
|
|
1815
|
+
`);
|
|
1816
|
+
}
|
|
1817
|
+
pending.push(delivery);
|
|
1818
|
+
this.cursor.pendingImDeliveries = pending;
|
|
1819
|
+
try {
|
|
1820
|
+
this.saveCursor();
|
|
1821
|
+
} catch (error) {
|
|
1822
|
+
process2.stderr.write(`[Channel:${this.name}] DWS IM delivery pre-send checkpoint failed; keeping the entry in memory and delivering anyway with the same idempotency key: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1823
|
+
`);
|
|
1824
|
+
}
|
|
1825
|
+
return delivery;
|
|
1826
|
+
}
|
|
1827
|
+
async attemptImDelivery(delivery) {
|
|
1828
|
+
if (delivery.nextRetryAt > Date.now() || this.activeImDeliveries.has(delivery.idempotencyKey) || !(this.cursor.pendingImDeliveries ?? []).includes(delivery)) {
|
|
1829
|
+
return;
|
|
1830
|
+
}
|
|
1831
|
+
if (!this.connected) {
|
|
1832
|
+
this.deferImDelivery(delivery, new Error("channel disconnected"), "local");
|
|
1833
|
+
return;
|
|
1834
|
+
}
|
|
1835
|
+
const authorization = this.imDeliveryAuthorization(delivery);
|
|
1836
|
+
if (authorization === "unknown") {
|
|
1837
|
+
this.deferImDelivery(delivery, new Error("stored pairing approval could not be confirmed"), "local");
|
|
1759
1838
|
return;
|
|
1760
1839
|
}
|
|
1761
|
-
|
|
1840
|
+
if (authorization === "denied") {
|
|
1841
|
+
this.cursor.pendingImDeliveries = (this.cursor.pendingImDeliveries ?? []).filter((pending) => pending !== delivery);
|
|
1842
|
+
process2.stderr.write(`[Channel:${this.name}] dropping a completed DWS IM reply after a definitive authorization denial: ${imDeliveryLogContext(delivery)}
|
|
1843
|
+
`);
|
|
1844
|
+
try {
|
|
1845
|
+
this.saveCursor();
|
|
1846
|
+
} catch (error) {
|
|
1847
|
+
process2.stderr.write(`[Channel:${this.name}] failed to checkpoint a revoked DWS IM delivery ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1848
|
+
`);
|
|
1849
|
+
}
|
|
1850
|
+
return;
|
|
1851
|
+
}
|
|
1852
|
+
this.activeImDeliveries.add(delivery.idempotencyKey);
|
|
1853
|
+
try {
|
|
1854
|
+
try {
|
|
1855
|
+
if (delivery.directTarget) {
|
|
1856
|
+
await this.client.sendImMessage(delivery.directTarget, delivery.content, delivery.idempotencyKey);
|
|
1857
|
+
} else {
|
|
1858
|
+
await this.client.replyToImMessage(delivery.conversationId, delivery.messageId, delivery.senderId, delivery.content, delivery.idempotencyKey);
|
|
1859
|
+
}
|
|
1860
|
+
} catch (error) {
|
|
1861
|
+
if (!(error instanceof DwsCommandError))
|
|
1862
|
+
throw error;
|
|
1863
|
+
this.deferImDelivery(delivery, error);
|
|
1864
|
+
return;
|
|
1865
|
+
}
|
|
1866
|
+
const pending = this.cursor.pendingImDeliveries ?? [];
|
|
1867
|
+
if (!pending.includes(delivery))
|
|
1868
|
+
return;
|
|
1869
|
+
this.cursor.pendingImDeliveries = pending.filter(({ idempotencyKey }) => idempotencyKey !== delivery.idempotencyKey);
|
|
1870
|
+
try {
|
|
1871
|
+
this.saveCursor();
|
|
1872
|
+
} catch (error) {
|
|
1873
|
+
this.cursor.pendingImDeliveries.push(delivery);
|
|
1874
|
+
const delay = this.scheduleImDeliveryRetry(delivery);
|
|
1875
|
+
if (delay === void 0) {
|
|
1876
|
+
process2.stderr.write(`[Channel:${this.name}] abandoning a completed DWS IM reply because its success checkpoint repeatedly failed; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1877
|
+
`);
|
|
1878
|
+
} else {
|
|
1879
|
+
process2.stderr.write(`[Channel:${this.name}] DWS IM delivery succeeded but its checkpoint failed; retrying with the same idempotency key in ${delay}ms; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1880
|
+
`);
|
|
1881
|
+
}
|
|
1882
|
+
}
|
|
1883
|
+
} finally {
|
|
1884
|
+
this.activeImDeliveries.delete(delivery.idempotencyKey);
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
imDeliveryAuthorization(delivery) {
|
|
1888
|
+
const isGroup = delivery.isGroup ?? delivery.directTarget === void 0;
|
|
1889
|
+
const envelope = {
|
|
1890
|
+
channelName: this.name,
|
|
1891
|
+
senderId: delivery.senderId,
|
|
1892
|
+
senderName: delivery.senderId,
|
|
1893
|
+
chatId: delivery.conversationId,
|
|
1894
|
+
text: "",
|
|
1895
|
+
isGroup,
|
|
1896
|
+
isMentioned: true,
|
|
1897
|
+
isReplyToBot: true
|
|
1898
|
+
};
|
|
1899
|
+
const groupAllowed = this.groupGate.check(envelope, {
|
|
1900
|
+
createPairingRequest: false
|
|
1901
|
+
}).allowed;
|
|
1902
|
+
if (!groupAllowed) {
|
|
1903
|
+
return this.config.groupPolicy === "pairing" ? "unknown" : "denied";
|
|
1904
|
+
}
|
|
1905
|
+
if (!this.dmGate.check(envelope).allowed)
|
|
1906
|
+
return "denied";
|
|
1907
|
+
if (isGroup && this.config.groupPolicy === "pairing")
|
|
1908
|
+
return "allowed";
|
|
1909
|
+
if (this.gate.isAllowed(delivery.senderId))
|
|
1910
|
+
return "allowed";
|
|
1911
|
+
return this.config.senderPolicy === "pairing" ? "unknown" : "denied";
|
|
1912
|
+
}
|
|
1913
|
+
deferImDelivery(delivery, error, retryKind = "delivery") {
|
|
1914
|
+
if (!(this.cursor.pendingImDeliveries ?? []).includes(delivery))
|
|
1915
|
+
return;
|
|
1916
|
+
const delay = this.scheduleImDeliveryRetry(delivery, retryKind);
|
|
1917
|
+
try {
|
|
1918
|
+
this.saveCursor();
|
|
1919
|
+
} catch (saveError) {
|
|
1920
|
+
process2.stderr.write(`[Channel:${this.name}] DWS IM delivery retry checkpoint failed: ${sanitizeLogText(saveError instanceof Error ? saveError.message : String(saveError), 300)}
|
|
1921
|
+
`);
|
|
1922
|
+
}
|
|
1923
|
+
if (delay === void 0) {
|
|
1924
|
+
if (retryKind === "local") {
|
|
1925
|
+
process2.stderr.write(`[Channel:${this.name}] abandoning a completed DWS IM reply after ${delivery.localDeferrals} consecutive local deferrals without reaching transport; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1926
|
+
`);
|
|
1927
|
+
return;
|
|
1928
|
+
}
|
|
1929
|
+
process2.stderr.write(`[Channel:${this.name}] abandoning a completed DWS IM reply after ${delivery.attempts} failed delivery attempts; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1930
|
+
`);
|
|
1931
|
+
return;
|
|
1932
|
+
}
|
|
1933
|
+
if (retryKind === "local") {
|
|
1934
|
+
process2.stderr.write(`[Channel:${this.name}] DWS IM delivery is locally deferred; retrying the pre-send check in ${delay}ms without consuming the delivery-attempt budget; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1935
|
+
`);
|
|
1936
|
+
return;
|
|
1937
|
+
}
|
|
1938
|
+
process2.stderr.write(`[Channel:${this.name}] DWS IM delivery failed; retrying delivery only in ${delay}ms without rerunning the originating task; ${imDeliveryLogContext(delivery)}: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1939
|
+
`);
|
|
1940
|
+
}
|
|
1941
|
+
scheduleImDeliveryRetry(delivery, retryKind = "delivery") {
|
|
1942
|
+
const retryCount = retryKind === "local" ? delivery.localDeferrals = (delivery.localDeferrals ?? 0) + 1 : delivery.attempts += 1;
|
|
1943
|
+
if (retryKind === "delivery")
|
|
1944
|
+
delivery.localDeferrals = 0;
|
|
1945
|
+
const maxRetries = retryKind === "local" ? IM_DELIVERY_MAX_LOCAL_DEFERRALS : IM_DELIVERY_MAX_ATTEMPTS;
|
|
1946
|
+
if (retryCount >= maxRetries) {
|
|
1947
|
+
this.cursor.pendingImDeliveries = (this.cursor.pendingImDeliveries ?? []).filter((pending) => pending !== delivery);
|
|
1948
|
+
return void 0;
|
|
1949
|
+
}
|
|
1950
|
+
const delay = Math.min(IM_DELIVERY_RETRY_BASE_MS * 2 ** Math.min(retryCount - 1, 16), IM_DELIVERY_RETRY_MAX_MS);
|
|
1951
|
+
delivery.nextRetryAt = Date.now() + delay;
|
|
1952
|
+
return delay;
|
|
1953
|
+
}
|
|
1954
|
+
async replayPendingImDeliveries(signal) {
|
|
1955
|
+
let attempts = 0;
|
|
1956
|
+
for (const delivery of [...this.cursor.pendingImDeliveries ?? []]) {
|
|
1957
|
+
if (signal.aborted || !this.connected)
|
|
1958
|
+
return;
|
|
1959
|
+
if (delivery.nextRetryAt > Date.now())
|
|
1960
|
+
continue;
|
|
1961
|
+
if (attempts >= MAX_REPLAY_CONVERSATIONS)
|
|
1962
|
+
return;
|
|
1963
|
+
attempts += 1;
|
|
1964
|
+
try {
|
|
1965
|
+
await this.attemptImDelivery(delivery);
|
|
1966
|
+
} catch (error) {
|
|
1967
|
+
this.deferImDelivery(delivery, error);
|
|
1968
|
+
}
|
|
1969
|
+
}
|
|
1762
1970
|
}
|
|
1763
1971
|
async pushProactive(target, text, sourceLabel2) {
|
|
1764
1972
|
if (isNoReply(text))
|
|
@@ -1853,6 +2061,9 @@ Ask the bot operator to approve you with:
|
|
|
1853
2061
|
process2.stderr.write(`[Channel:${this.name}] failed to poll DWS direct-message history: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1854
2062
|
`);
|
|
1855
2063
|
}
|
|
2064
|
+
await this.replayPendingImDeliveries(signal);
|
|
2065
|
+
if (signal.aborted || !this.connected)
|
|
2066
|
+
return;
|
|
1856
2067
|
this.saveCursor();
|
|
1857
2068
|
if (this.watchTodos && (this.lastTodoPollAt === 0 || endTime - this.lastTodoPollAt >= this.todoPollInterval)) {
|
|
1858
2069
|
try {
|
|
@@ -1938,7 +2149,6 @@ Ask the bot operator to approve you with:
|
|
|
1938
2149
|
text: `Process this DingTalk todo:
|
|
1939
2150
|
${truncateCodePoints(title, MAX_COMMENT_CHARS)}`,
|
|
1940
2151
|
displayText: title,
|
|
1941
|
-
bypassMessagePrefix: true,
|
|
1942
2152
|
isGroup: true,
|
|
1943
2153
|
isMentioned: true,
|
|
1944
2154
|
isReplyToBot: false,
|
|
@@ -2111,12 +2321,9 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2111
2321
|
}
|
|
2112
2322
|
if (this.shouldFilterImMessage(source, message)) {
|
|
2113
2323
|
if (source.kind === "group" || source.kind === "group-all") {
|
|
2114
|
-
const
|
|
2115
|
-
if (!this.
|
|
2116
|
-
|
|
2117
|
-
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required" && !this.queuedMessages.has(key) && !this.cursor.processedMessages.includes(key) && !this.hasPendingMessage(key)) {
|
|
2118
|
-
this.recordPendingGroupHistory(envelope);
|
|
2119
|
-
}
|
|
2324
|
+
const envelope = this.createImEnvelope(source, message);
|
|
2325
|
+
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required" && !this.queuedMessages.has(key) && !this.cursor.processedMessages.includes(key) && !this.hasPendingMessage(key)) {
|
|
2326
|
+
this.recordPendingGroupHistory(envelope);
|
|
2120
2327
|
}
|
|
2121
2328
|
}
|
|
2122
2329
|
this.removePersistedPendingMessageForSource(key, source);
|
|
@@ -2289,14 +2496,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2289
2496
|
}
|
|
2290
2497
|
}
|
|
2291
2498
|
async processImMessage(source, message, key) {
|
|
2292
|
-
const
|
|
2293
|
-
const providerDocumentNotification = source.kind === "direct" ? parseDocumentMentionNotification(rawText) : void 0;
|
|
2294
|
-
const text = providerDocumentNotification ? rawText : stripMessagePrefix(rawText, this.dwsMessagePrefix);
|
|
2295
|
-
if (this.dwsMessagePrefix && !text) {
|
|
2296
|
-
this.markProcessedMessage(key);
|
|
2297
|
-
this.saveCursor();
|
|
2298
|
-
return;
|
|
2299
|
-
}
|
|
2499
|
+
const text = source.kind === "at" && this.requiresMention(message.conversationId) ? message.content.replace(/^\s*@[^\s\p{Cf}]+\s+(?=\/[a-zA-Z0-9_:-]+(?:\s|$))(?![\s\S]*(?<![A-Za-z0-9_])@)/u, "").trim() : message.content.trim();
|
|
2300
2500
|
const target = source.kind === "direct" ? { kind: "direct", openDingTalkId: message.senderId } : { kind: "group", conversationId: message.conversationId };
|
|
2301
2501
|
this.rememberImTarget(message.conversationId, target);
|
|
2302
2502
|
if (!text) {
|
|
@@ -2304,13 +2504,14 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2304
2504
|
this.saveCursor();
|
|
2305
2505
|
return;
|
|
2306
2506
|
}
|
|
2307
|
-
const documentNotification =
|
|
2507
|
+
const documentNotification = source.kind === "direct" ? parseDocumentMentionNotification(text) : void 0;
|
|
2308
2508
|
if (documentNotification) {
|
|
2309
2509
|
await this.processDocumentNotification(message, key, documentNotification);
|
|
2310
2510
|
return;
|
|
2311
2511
|
}
|
|
2312
2512
|
const envelope = this.createImEnvelope(source, message, text);
|
|
2313
2513
|
this.rememberInboundReactionTarget(message.conversationId, message.messageId);
|
|
2514
|
+
this.imResponseKinds.set(key, source.kind !== "direct");
|
|
2314
2515
|
try {
|
|
2315
2516
|
await this.handleInbound(envelope);
|
|
2316
2517
|
} catch (error) {
|
|
@@ -2322,6 +2523,8 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2322
2523
|
throw error;
|
|
2323
2524
|
}
|
|
2324
2525
|
return;
|
|
2526
|
+
} finally {
|
|
2527
|
+
this.imResponseKinds.delete(key);
|
|
2325
2528
|
}
|
|
2326
2529
|
this.clearInboundFailure(key);
|
|
2327
2530
|
this.removePendingMessage(key);
|
|
@@ -2337,7 +2540,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2337
2540
|
chatName: message.conversationId,
|
|
2338
2541
|
messageId: message.messageId,
|
|
2339
2542
|
text,
|
|
2340
|
-
bypassMessagePrefix: true,
|
|
2341
2543
|
...message.referencedText ? { referencedText: message.referencedText } : {},
|
|
2342
2544
|
isGroup: source.kind !== "direct",
|
|
2343
2545
|
isMentioned: source.kind === "at",
|
|
@@ -2514,7 +2716,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2514
2716
|
threadId: notification.commentKey,
|
|
2515
2717
|
messageId: message.messageId,
|
|
2516
2718
|
text: truncateCodePoints(notification.request, MAX_COMMENT_CHARS),
|
|
2517
|
-
bypassMessagePrefix: true,
|
|
2518
2719
|
isGroup: true,
|
|
2519
2720
|
isMentioned: true,
|
|
2520
2721
|
isReplyToBot: false,
|
|
@@ -2577,12 +2778,9 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2577
2778
|
continue;
|
|
2578
2779
|
if (this.shouldFilterImMessage(pending.source, pending.message)) {
|
|
2579
2780
|
if (pending.source.kind === "group" || pending.source.kind === "group-all") {
|
|
2580
|
-
const
|
|
2581
|
-
if (
|
|
2582
|
-
|
|
2583
|
-
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
|
|
2584
|
-
this.recordPendingGroupHistory(envelope);
|
|
2585
|
-
}
|
|
2781
|
+
const envelope = this.createImEnvelope(pending.source, pending.message);
|
|
2782
|
+
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
|
|
2783
|
+
this.recordPendingGroupHistory(envelope);
|
|
2586
2784
|
}
|
|
2587
2785
|
}
|
|
2588
2786
|
this.removePersistedPendingMessageForSource(key, pending.source);
|