@qwen-code/qwen-code 0.23.2 → 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/model-providers.md +66 -28
- 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 +0 -20
- package/bundled/qc-helper/docs/features/channels/dws.md +7 -1
- package/bundled/qc-helper/docs/features/channels/overview.md +5 -6
- package/bundled/qc-helper/docs/features/commands.md +57 -9
- 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 +3 -3
- package/bundled/qc-helper/docs/features/hooks.md +14 -13
- package/bundled/qc-helper/docs/qwen-serve.md +23 -6
- package/bundled/review/SKILL.md +82 -79
- package/bundled/review/references/posting.md +31 -14
- package/chunks/{MaxSizedBox-4C3BKKKY.js → MaxSizedBox-UZW24XUX.js} +61 -54
- package/chunks/{StandaloneSessionPicker-TXVF65YW.js → StandaloneSessionPicker-IDK7NAZL.js} +83 -76
- 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-H5XBKGB4.js → acpAgent-YRCNNIIU.js} +707 -209
- package/chunks/{agent-T5LEFJIU.js → agent-SGU5EE7U.js} +45 -39
- package/chunks/{agent-headless-VZKSRH36.js → agent-headless-JVYBLNLT.js} +45 -39
- package/chunks/{anthropicContentGenerator-PRJWWVYJ.js → anthropicContentGenerator-SGIR5IKF.js} +68 -36
- package/chunks/{artifact-tool-G5LHNECG.js → artifact-tool-PMYZCYNH.js} +2 -2
- package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-4M4YYIB4.js} +2 -2
- package/chunks/{bridge-AOX5IY44.js → bridge-YF6NYRPZ.js} +66 -59
- package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
- package/chunks/{channel-management-service-MWQGHPAS.js → channel-management-service-E4HTMU7T.js} +9 -9
- package/chunks/{channel-settings-store-XZCGDGHW.js → channel-settings-store-FZ5VKHQD.js} +72 -65
- package/chunks/{channel-worker-group-SQ5FRWOH.js → channel-worker-group-X6WH4XWF.js} +9 -9
- package/chunks/{channel-worker-manager-TU4ZNWOE.js → channel-worker-manager-SICFJDPJ.js} +19 -10
- package/chunks/{channel-worker-supervisor-EMITFMCP.js → channel-worker-supervisor-HSFAKML6.js} +6 -6
- package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
- package/chunks/{chunk-F2NYVASI.js → chunk-34ZYDM3F.js} +14 -12
- package/chunks/{chunk-HIXUUCGY.js → chunk-36HCNKDS.js} +1 -1
- package/chunks/{chunk-VBLAI2HA.js → chunk-3FPYT6QC.js} +0 -31
- package/chunks/{chunk-QB3KS3N3.js → chunk-3I7W2POO.js} +1 -1
- package/chunks/{chunk-TOOOLHVS.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-OXR34GCD.js → chunk-5FKZ7KFQ.js} +1851 -34
- package/chunks/{chunk-QQK4L3UU.js → chunk-5GLDOLNQ.js} +131 -26
- package/chunks/{chunk-TODNHE76.js → chunk-5ZJ3KK5J.js} +5 -5
- package/chunks/{chunk-ZN5TKAVR.js → chunk-6EDWSKN4.js} +3 -3
- package/chunks/{chunk-5OZUKLL7.js → chunk-6EOMQPTS.js} +4 -4
- package/chunks/{chunk-JYGIJA4W.js → chunk-6NONRGYX.js} +1 -1
- package/chunks/{chunk-TRQNRP2H.js → chunk-6UK77U7D.js} +46 -3
- package/chunks/{chunk-4JNHNVAZ.js → chunk-72BGC7RT.js} +4 -4
- package/chunks/{chunk-CRZBDVP2.js → chunk-74JEYK2C.js} +10 -10
- package/chunks/{chunk-RM244SCQ.js → chunk-7XM6KEVW.js} +1 -1
- package/chunks/{chunk-CALNF3Z3.js → chunk-7XVQNDFB.js} +1 -1
- package/chunks/{chunk-G37O7YO6.js → chunk-7ZKDPTYO.js} +2 -2
- package/chunks/{chunk-WXPPUPHM.js → chunk-7ZVIGDZF.js} +1 -1
- package/chunks/{chunk-2WC3Y7YY.js → chunk-AEY27Z35.js} +401 -23
- package/chunks/{chunk-LEAOJ43M.js → chunk-ATH66AEU.js} +62 -59
- package/chunks/{chunk-7NDZKE2M.js → chunk-AW2SIT3B.js} +3 -3
- package/chunks/{chunk-R3JIDRUL.js → chunk-AWMJRE5N.js} +4 -4
- package/chunks/chunk-AYEJOTIU.js +43 -0
- package/chunks/{chunk-VJJXG73H.js → chunk-B2TGBZXY.js} +16 -1
- package/chunks/{chunk-XDNFODER.js → chunk-B6BDT4RX.js} +1 -1
- package/chunks/{chunk-3OAXF3UK.js → chunk-BHR6IN2X.js} +3080 -933
- package/chunks/{chunk-FGHPZGOP.js → chunk-BI3WSRQE.js} +39 -55
- package/chunks/{chunk-QHLHE2OT.js → chunk-BQOP3K76.js} +1 -1
- package/chunks/{chunk-4WMGYG3F.js → chunk-BTWGOKHU.js} +2 -2
- package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
- package/chunks/{chunk-WDVV3LRM.js → chunk-C4NLHK7X.js} +34 -129
- 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-TGNNLRC3.js → chunk-CJ3DHN5I.js} +1 -0
- package/chunks/{chunk-AUTUFD5X.js → chunk-CSHX5ZC4.js} +1 -1
- package/chunks/{chunk-UYDQYDW2.js → chunk-CUK6F5UF.js} +1 -1
- package/chunks/{chunk-CALTQWTZ.js → chunk-DLH7YIX6.js} +2 -2
- package/chunks/{chunk-CMWU6P4D.js → chunk-DMX7RF6E.js} +1 -1
- package/chunks/{chunk-TRWQQBVH.js → chunk-DTNV6UZY.js} +1 -1
- package/chunks/{chunk-GSFV5RQW.js → chunk-E4UEO3XM.js} +3 -2
- package/chunks/{chunk-KFECPHLV.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-GOEVQADN.js → chunk-F2RKL5I2.js} +287 -169
- package/chunks/{chunk-ELD3OBPU.js → chunk-F45SKYIQ.js} +3 -3
- package/chunks/{chunk-7PD7ZMX5.js → chunk-FCQJLMA2.js} +98 -5
- package/chunks/{chunk-G3ZUMSFS.js → chunk-FGRDUDCI.js} +6 -6
- package/chunks/{chunk-7SVM3RP2.js → chunk-FGV2QEAO.js} +4 -6
- package/chunks/{chunk-4VY3ITHR.js → chunk-FN3JNDRU.js} +3 -3
- package/chunks/{chunk-GOKAOSCN.js → chunk-FRVV5SSD.js} +2 -2
- package/chunks/{chunk-ULZECEIP.js → chunk-FYZ5NZ3V.js} +2 -20
- package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
- package/chunks/{chunk-RNAJVXUG.js → chunk-GP47UR3M.js} +6 -6
- package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
- package/chunks/{chunk-6G4V7SE4.js → chunk-HG46TTAG.js} +1 -1
- package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
- package/chunks/{chunk-WDN64MVT.js → chunk-HL2DQG3Y.js} +83 -17
- 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-IRGDIDGJ.js → chunk-IFHJIEMN.js} +26 -19
- package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
- package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
- package/chunks/{chunk-XSOXPG2L.js → chunk-IOUBOANU.js} +36 -7
- package/chunks/{chunk-KA5HR3G2.js → chunk-IUVIBDKU.js} +2 -2
- package/chunks/{chunk-U6REWGVR.js → chunk-J2RNOJRV.js} +2 -2
- package/chunks/{chunk-PDN7FJZV.js → chunk-J5PYQVD2.js} +2 -2
- package/chunks/{chunk-DAI65CMX.js → chunk-JDEW3V5B.js} +1 -1
- package/chunks/{chunk-67XTVRVB.js → chunk-JEMDIKGQ.js} +7 -7
- package/chunks/chunk-JL6APGBX.js +43 -0
- package/chunks/{chunk-PFKGV6PO.js → chunk-JOMCZWX7.js} +9 -15
- package/chunks/{chunk-HJ5UJQQL.js → chunk-JV5YASQA.js} +1822 -1335
- package/chunks/{chunk-N6S3NUYJ.js → chunk-JXNIF2O5.js} +1 -1
- package/chunks/chunk-K2OJUPOE.js +78 -0
- package/chunks/{chunk-QFJZAY7W.js → chunk-KFGPNCCY.js} +4 -4
- package/chunks/{chunk-NX7ZTXFF.js → chunk-KHIBLKNK.js} +1 -1
- package/chunks/{chunk-A7EFXK7P.js → chunk-KVBNJ4K2.js} +5 -5
- package/chunks/{chunk-CWVZBIZJ.js → chunk-KZ2CU2LH.js} +1 -1
- package/chunks/{chunk-IWABUX6T.js → chunk-L2KF7HUE.js} +6 -6
- package/chunks/{chunk-4ALNJDHL.js → chunk-L3DTX6U4.js} +3 -1
- package/chunks/{chunk-22GORRNY.js → chunk-LAP7X6EC.js} +1 -1
- package/chunks/{chunk-DARWOZY6.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-WK7P62DV.js → chunk-LIR7YS2O.js} +6 -6
- package/chunks/{chunk-X7LFJF5D.js → chunk-LK2WUCDQ.js} +36 -84
- package/chunks/{chunk-46MMBZHI.js → chunk-LY2GK2PR.js} +4 -4
- package/chunks/{chunk-NPKCVSXX.js → chunk-MOS5OAOG.js} +10 -8
- package/chunks/chunk-MXOALJIL.js +691 -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-KCF2436G.js → chunk-O3MKRN2I.js} +4 -4
- package/chunks/{chunk-MV5DTLJV.js → chunk-ONGZNOIP.js} +1 -1
- package/chunks/{chunk-WBU2PIZ5.js → chunk-OOLSYRZ7.js} +16 -16
- package/chunks/{chunk-QTB4VP4K.js → chunk-PIGUW2U2.js} +149 -12
- package/chunks/{chunk-QAZ2MGYT.js → chunk-PLLIWEM3.js} +2 -2
- package/chunks/{chunk-WXD7INFV.js → chunk-PMS4FVLY.js} +8 -8
- package/chunks/{chunk-NB3NDQQK.js → chunk-Q2XLNLAV.js} +1 -1
- package/chunks/{chunk-4I3WFI3U.js → chunk-Q6HXLBZF.js} +12 -12
- package/chunks/{chunk-CCBTNJB4.js → chunk-QPWZX4ZV.js} +27 -27
- package/chunks/{chunk-JO77FGNZ.js → chunk-RJZTX2OF.js} +19 -7
- package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
- package/chunks/{chunk-IR6JKBAP.js → chunk-SAWPURIU.js} +2 -2
- package/chunks/{chunk-LWX4WDFF.js → chunk-SNZWDV67.js} +43 -15
- package/chunks/{chunk-YLOHCA6I.js → chunk-SXEE6PND.js} +2 -2
- package/chunks/{chunk-G5VOXCRX.js → chunk-T4JVQR7Z.js} +2 -2
- package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
- package/chunks/{chunk-YQGW3M6Z.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-B25JYXZE.js → chunk-TWC3FHUI.js} +4 -4
- package/chunks/{chunk-H3Q3RSKZ.js → chunk-U7O65WKL.js} +1 -1
- package/chunks/{chunk-LUNC5KCL.js → chunk-UBEYS536.js} +7 -7
- package/chunks/{chunk-R457KFV7.js → chunk-UGS62IR2.js} +3 -3
- package/chunks/{chunk-S5QR6CB5.js → chunk-UKMWZ5NS.js} +108 -887
- package/chunks/{chunk-7LTCFO6T.js → chunk-VHKOULAI.js} +6 -5
- package/chunks/{chunk-FAJPLSYF.js → chunk-VID4BW52.js} +90 -86
- package/chunks/{chunk-2BMXHB6N.js → chunk-VLZOU6UH.js} +7 -7
- package/chunks/{chunk-ZP5XDLSA.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-AO2VMS72.js → chunk-WS7MOFK6.js} +3 -3
- package/chunks/{chunk-FV4DM2M4.js → chunk-WXFK4MH7.js} +32 -12
- package/chunks/{chunk-APXIW2TF.js → chunk-WY4N6KS7.js} +4 -4
- package/chunks/{chunk-KEPC5BOL.js → chunk-XDQUDARC.js} +10 -13
- package/chunks/{chunk-2EKVPSIJ.js → chunk-Y2MYW47X.js} +1 -1
- package/chunks/{chunk-5BH2AIEY.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-BK7D2JR6.js → chunk-ZUQVZTWG.js} +3 -3
- package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
- package/chunks/{config-utils-GPLIABL2.js → config-utils-S5LFS4RN.js} +65 -58
- package/chunks/{contextCommand-NCUQUDBY.js → contextCommand-XXKZMMSQ.js} +62 -55
- package/chunks/{core-runtime-WKYKWVYU.js → core-runtime-YGUA42AZ.js} +64 -57
- package/chunks/{create-sub-session-PPLXB3JJ.js → create-sub-session-SEK6KCYR.js} +62 -55
- 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-2CKIAO3I.js → daemon-G5TYKZD6.js} +2 -2
- package/chunks/{daemon-git-worktree-guard-73ZWOLKL.js → daemon-git-worktree-guard-3AWINPPX.js} +63 -56
- package/chunks/{daemon-status-provider-OK7VONJG.js → daemon-status-provider-RTKHKUFJ.js} +71 -64
- package/chunks/{daemon-trust-policy-CAUCREG2.js → daemon-trust-policy-6YQOC7B6.js} +67 -60
- package/chunks/{daemon-trust-policy-monitor-3Y36OOEQ.js → daemon-trust-policy-monitor-EN5L23GS.js} +67 -60
- package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
- package/chunks/{deferred-core-runtime-Q7WFWYD3.js → deferred-core-runtime-JPLQRVZO.js} +60 -53
- package/chunks/{display-image-CTNHJRZC.js → display-image-NAH3AZ63.js} +3 -3
- package/chunks/{dist-6YDUH3BB.js → dist-3BJVSJ7D.js} +10 -631
- package/chunks/{dist-F6JLAJLE.js → dist-65Q3TRLH.js} +16 -36
- package/chunks/{dist-Y5KC3IHW.js → dist-HX2LG76F.js} +233 -34
- package/chunks/{dist-BNQVF565.js → dist-J7PDFK53.js} +12 -31
- package/chunks/{dist-NP7QKLVG.js → dist-JCXKXRH6.js} +3 -6
- package/chunks/{dist-UFTFGI6I.js → dist-LHGMHIDK.js} +2 -6
- package/chunks/{dist-XLV33CLY.js → dist-QPTIRE3U.js} +4 -12
- package/chunks/{dist-ZDNJK74R.js → dist-SBK33YLC.js} +3 -34
- package/chunks/{dist-F34J4FZX.js → dist-WMFHZG3R.js} +2 -5
- package/chunks/{edit-YJD6IETK.js → edit-QXJZIWRQ.js} +48 -42
- 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-EFPVTWIH.js → enterPlanMode-2ITCVQ5N.js} +45 -39
- package/chunks/{environment-HP3AXFTB.js → environment-URPO5ORZ.js} +63 -56
- package/chunks/{errors-22ON46G7.js → errors-TDUYLEKI.js} +62 -55
- package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-EORJDKDS.js} +4 -4
- package/chunks/{exitPlanMode-MOQUNCBH.js → exitPlanMode-RA7KMUEW.js} +45 -39
- package/chunks/{fast-path-2X7BPMXX.js → fast-path-Q2JYP64P.js} +6 -6
- 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-Y7ACIB3P.js → glob-VHSV4BKE.js} +48 -42
- package/chunks/{goal-tools-DABMICUC.js → goal-tools-5FIE56CK.js} +51 -41
- package/chunks/{grep-BLHF2S5D.js → grep-3PKFKLCA.js} +2 -2
- package/chunks/{handleAutoUpdate-MCAMHYDI.js → handleAutoUpdate-7FZFLKNZ.js} +63 -56
- package/chunks/{i18n-C3GDCALP.js → i18n-NTFQDWKR.js} +61 -54
- package/chunks/{image-gen-XP4NNIYG.js → image-gen-TF3IQWSH.js} +7 -6
- package/chunks/{initializer-4URDQL2G.js → initializer-LB3T635H.js} +67 -60
- package/chunks/{installationInfo-LBOL6SBV.js → installationInfo-KRO433ZG.js} +60 -53
- package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
- package/chunks/{list-JOGBAC2R.js → list-NEP3WPZ7.js} +70 -63
- package/chunks/{list-agents-2CXPGJUE.js → list-agents-QLDXS5OD.js} +17 -7
- package/chunks/{llm-2KPNSAVY.js → llm-AZEJEIAD.js} +130 -123
- package/chunks/{llm-content-generator-GR3FOHLB.js → llm-content-generator-KWXFHBR3.js} +6 -5
- package/chunks/{loadedSettingsAdapter-DVKROEJD.js → loadedSettingsAdapter-NZORJLSD.js} +67 -60
- package/chunks/{loggingContentGenerator-P4K6K5W4.js → loggingContentGenerator-NGHVU6AK.js} +67 -60
- 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-VWBKHNIN.js → managed-npm-update-3LHNBEAG.js} +60 -53
- package/chunks/{mcp-6YYNSYLK.js → mcp-4SWJKDX7.js} +67 -60
- package/chunks/{monitor-A255TNZR.js → monitor-V5EFBZC7.js} +47 -41
- package/chunks/{nonInteractiveCli-LXGIKQAT.js → nonInteractiveCli-5UFUBUAT.js} +114 -107
- package/chunks/{notebook-edit-5UYHS2DM.js → notebook-edit-ATV46KWD.js} +46 -40
- package/chunks/openai-WX26N5OJ.js +47 -0
- package/chunks/{openaiContentGenerator-A6MAMEO5.js → openaiContentGenerator-BKTO5QJK.js} +31 -25
- package/chunks/openaiResponsesContentGenerator-RTCAJ5V5.js +1658 -0
- package/chunks/{pidfile-B7DZC4TP.js → pidfile-JAIOWPI3.js} +60 -53
- package/chunks/process-registry-X6ZCASEN.js +10 -0
- package/chunks/{processUtils-BPZ2MCZS.js → processUtils-TCQH3LVD.js} +2 -2
- package/chunks/{prompt-terminal-ledger-FYYTAOXS.js → prompt-terminal-ledger-BYXHEUHX.js} +61 -54
- package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
- package/chunks/{qwenContentGenerator-4IOJFD4S.js → qwenContentGenerator-K5TJK75P.js} +58 -50
- package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-NOXRK323.js} +6 -5
- package/chunks/{read-file-A4H4O3VQ.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-YQQ43E4N.js → resumeHistoryUtils-OYKXZ4YO.js} +66 -59
- package/chunks/{ripGrep-W32NWFTA.js → ripGrep-EOUMIU4K.js} +15 -13
- package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
- package/chunks/{run-qwen-serve-WBSWWIRV.js → run-qwen-serve-PPTGWC5B.js} +305 -138
- package/chunks/{runtime-VRVBX2E5.js → runtime-5RO22P2N.js} +73 -66
- package/chunks/{scheduled-tasks-D65KJDA3.js → scheduled-tasks-YGERFWLZ.js} +68 -61
- package/chunks/{scheduler-M2YPN7Z7.js → scheduler-S6WU6M3C.js} +62 -55
- 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-76BKWKFZ.js → send-message-TWOGWCBG.js} +12 -9
- package/chunks/{serve-BE3H2P6P.js → serve-HT4WOCWS.js} +68 -61
- package/chunks/{server-FLY5JERG.js → server-SWXVPRCS.js} +2947 -523
- package/chunks/{session-JVN62R5K.js → session-6DSFUOMO.js} +122 -115
- package/chunks/{session-attachments-root-7ACGLHXA.js → session-attachments-root-SOZCTQWW.js} +60 -53
- package/chunks/{session-pr-refresh-TQS57SDK.js → session-pr-refresh-F7XUBQBH.js} +68 -61
- package/chunks/{settings-D44YMZFT.js → settings-SWQH36PO.js} +72 -65
- package/chunks/{shell-3VE6I4V5.js → shell-XUQL6EYV.js} +45 -39
- package/chunks/{skill-FHEGRRZU.js → skill-HNRDD54C.js} +33 -23
- package/chunks/{skill-settings-VHEJMBFL.js → skill-settings-JU72PCII.js} +66 -59
- package/chunks/{spawnChannel-T6MX2ZDN.js → spawnChannel-7ZVM3GBU.js} +63 -56
- package/chunks/{standalone-update-QUGHFMCS.js → standalone-update-64JQY2LX.js} +62 -55
- package/chunks/{start-opentui-ui-IHIIZ2LE.js → start-opentui-ui-RSLBXESU.js} +183 -161
- package/chunks/{startInteractiveUI-LR7K2ARZ.js → startInteractiveUI-ZDPHD7XE.js} +553 -1123
- package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-F6F27JMK.js} +2 -2
- package/chunks/{task-create-MWXJFRRM.js → task-create-Y623TBHB.js} +8 -8
- package/chunks/{task-list-EYO3FE57.js → task-list-FCPEEGWL.js} +1 -1
- package/chunks/{task-stop-BFSKRTGV.js → task-stop-QTKZXLPH.js} +1 -1
- package/chunks/{task-update-2JJJRHMT.js → task-update-YLSXF25N.js} +8 -8
- package/chunks/{team-create-GY3VFY47.js → team-create-U52VYSNO.js} +47 -41
- package/chunks/{team-delete-IQZ6XGFI.js → team-delete-S7TLHZCF.js} +1 -1
- package/chunks/{team-plan-approval-BQPGZOT5.js → team-plan-approval-IQ4ADQIK.js} +45 -39
- package/chunks/{terminal-image-renderer-YNYW5CQG.js → terminal-image-renderer-ZEMF7LB2.js} +62 -55
- package/chunks/{theme-manager-U6CIK3GM.js → theme-manager-DK2S2SOX.js} +60 -53
- package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-5QI2H2FW.js} +4 -4
- package/chunks/{tool-search-XI3QWD5I.js → tool-search-6U4OQG7K.js} +21 -15
- package/chunks/{total-session-admission-3SNSJJ32.js → total-session-admission-BOARHBZU.js} +66 -59
- package/chunks/{trustedFolders-OVAQKNV5.js → trustedFolders-GKQZXZSV.js} +61 -54
- package/chunks/{update-relaunch-XV5O74E3.js → update-relaunch-GLACF7PX.js} +5 -5
- package/chunks/{updateCheck-CHUYWD6L.js → updateCheck-NLBSZB4Q.js} +62 -55
- package/chunks/{useAutoAcceptIndicator-VKSVIXZC.js → useAutoAcceptIndicator-3X3BYU7H.js} +70 -63
- package/chunks/{validateNonInterActiveAuth-ZNUTD3E5.js → validateNonInterActiveAuth-NE3JLOIR.js} +111 -104
- package/chunks/{version-EK7VAGSI.js → version-6H5YAT4N.js} +1 -1
- package/chunks/{web-fetch-24KZO763.js → web-fetch-RWSO7TTN.js} +15 -13
- package/chunks/{web-search-CRNXKZ2X.js → web-search-DADI3LV5.js} +388 -327
- package/chunks/{web-shell-static-BFDESDD4.js → web-shell-static-CCN4JZEE.js} +1 -1
- package/chunks/workflow-LPGCZCIT.js +1224 -0
- package/chunks/{workspace-providers-status-MAM42IZS.js → workspace-providers-status-QBRBEFTO.js} +71 -64
- package/chunks/{workspace-registration-store-HKLJEDQX.js → workspace-registration-store-WUKTMJPW.js} +3 -1
- package/chunks/{workspace-registry-7RDDOBLN.js → workspace-registry-CJV7KVGF.js} +66 -59
- package/chunks/{workspace-runtime-coordinator-LEPDPXJO.js → workspace-runtime-coordinator-7LYMFMFF.js} +69 -60
- package/chunks/{workspace-service-5IFDCNN3.js → workspace-service-HWXZSA4J.js} +73 -66
- package/chunks/{workspace-skills-status-FJ3HNH4H.js → workspace-skills-status-D6QXUWCC.js} +68 -61
- package/chunks/{workspace-trust-reconciler-PQFHIWLR.js → workspace-trust-reconciler-VZX7G7CZ.js} +73 -66
- package/chunks/{write-file-ERG67ZFX.js → write-file-KKHV26YV.js} +47 -41
- 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-WQYEC3SR.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 +5 -4
- package/web-shell/assets/{abnfDiagram-VCTEODGH-BRLgQbnT.js → abnfDiagram-VCTEODGH-NT0lTLRG.js} +1 -1
- package/web-shell/assets/{arc-qAF9_XsR.js → arc-DDqnIMMx.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-BorUttEz.js → architectureDiagram-5GKGNRK7-DfYghE3W.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-Bj0qZVxu.js → blockDiagram-NRAW4CY4-DlqJIx5c.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BTqJis32.js → c4Diagram-UCG6FXSJ-CinqLGU4.js} +1 -1
- package/web-shell/assets/channel-BHGoSkEv.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-RrQ5X8m-.js → chunk-2Q5K7J3B-CsjJX5M7.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-uUjDl8wO.js → chunk-5VM5RSS4-CaVb2tdH.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-C3JhpyzI.js → chunk-F27PBJKO-CRyErlzW.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-C8ZNFs7F.js → chunk-G27WJ6UU-7I79DZCf.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-DNpXtEOs.js → chunk-JWPE2WC7-Dz4cac5F.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-DagA2ZLw.js → chunk-LCL6LL3I-Ls24Derb.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-R23uH7Xm.js → chunk-POPQ4Y6H-JzYe4qx7.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-Qz9RN_BR.js → chunk-SVP7TREG-BxDwesA-.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-jYb1_hni.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-Cv2OunpE.js → cose-bilkent-JH36ORCC-DxikE9iF.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-LH42KFJx.js → cynefin-OW5HDTMX-CvVsIkVN.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dha4_OoR.js → cynefinDiagram-5FMLGOSQ-CDHkk3wq.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-Br5lnUKD.js → dagre-3AP2YEHR-BgLdkVLT.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-dpKq2bBX.js → diagram-S7CK7UJ4-DP43cGhe.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-BAgHWpXr.js → diagram-UQ7AKVKN-BWrZYhoT.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-GRRzpyE2.js → diagram-VSXAHHWV-B80wjH_n.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-BNFiaYpG.js → diagram-VX7I27RA-DPpKmDsY.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-BisZzB_h.js → diagram-Z3DM3KII-kaEBNbNU.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-B1xbwycf.js → ebnfDiagram-PWID7BFC-1-qbEZvk.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CQMzbGE5.js → erDiagram-SSCWMZ5O-CrK2gMkV.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CZ_Zondl.js → flowDiagram-A5DVABFB-Dic2xofW.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BTh2ShxS.js → ganttDiagram-EL5Y4UJY-DJko8vT7.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-oHOB-Uxt.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-DWoFMu5x.js → index-t7VBrUeD.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-C0QpudbG.js → infoDiagram-RXCK75RN-DcRUJbNi.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-a6B741uT.js → ishikawaDiagram-5VMMS53U-CUPw-2_e.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-Dbht9ICp.js → journeyDiagram-EYS64GPL-yOHhZxkW.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-D4OFR8-h.js → kanban-definition-3QL26DDD-CFUGBbqz.js} +1 -1
- package/web-shell/assets/{layout-Dvdh5jRH.js → layout-BoilNfBU.js} +1 -1
- package/web-shell/assets/{linear-Dvc6KIW2.js → linear-DOuHaPrl.js} +1 -1
- package/web-shell/assets/{mermaid.core-CB36RfIb.js → mermaid.core-1G1fXWda.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-Fmqo1CjP.js → mindmap-definition-FBJOCRG2-B8BhkrOX.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-CCxYBoA4.js → pegDiagram-XKGWAZYB-CipC5K1D.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-BVHKQFzt.js → pieDiagram-E7YTZNPT-CHBDFDUJ.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-l95IznwR.js → quadrantDiagram-AXDQQJYC-_iiBkoZO.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-BlLdRdXp.js → railroadDiagram-O6MQD6OU-Cx1peHDi.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BkDLBR5w.js → requirementDiagram-EFPCY7ZU-CBRiPbdQ.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-jAIqRp65.js → sankeyDiagram-P5KCCOFB-TT6GcHaZ.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-f-soZYPr.js → sequenceDiagram-WJ2MYXX4-CWP42PNb.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-BzOuAfB2.js → sizeCapture-X5ZJPWSS-Bp94roEG.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-BPLSs12r.js → stateDiagram-HBIQ2CUA-0ftrzTAy.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-PgAST0dK.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-D-9E_RIR.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-CT56K-gV.js → timeline-definition-24CTP7MA-Ctvrj28y.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-B-vi4IyO.js → vennDiagram-4TSXK5OY-5DZncjOt.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9O7Ju98.js → wardleyDiagram-VM6X3IG4-jZjYwPY7.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-6d8w3jg2.js → xychartDiagram-S5SC5T6Z-Ci6Q2C2_.js} +1 -1
- package/web-shell/index.html +29 -5
- package/chunks/chunk-V7RNNPGC.js +0 -44
- package/chunks/workflow-HD5NYMW5.js +0 -2907
- package/web-shell/assets/channel-COIuCrVH.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +0 -1
- package/web-shell/assets/index-CI1ysIEv.js +0 -2154
- package/web-shell/assets/index-CpxXGH-8.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.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");
|
|
@@ -1406,7 +1437,6 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1406
1437
|
}));
|
|
1407
1438
|
this.startReactionName = startReactionName;
|
|
1408
1439
|
this.endReactionName = endReactionName;
|
|
1409
|
-
this.dwsMessagePrefix = messagePrefix;
|
|
1410
1440
|
this.watchTodos = watchTodos;
|
|
1411
1441
|
}
|
|
1412
1442
|
createInitialCursor() {
|
|
@@ -1419,6 +1449,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1419
1449
|
mentionCheckpoint: void 0,
|
|
1420
1450
|
pendingDocumentNotifications: [],
|
|
1421
1451
|
pendingMessages: [],
|
|
1452
|
+
pendingImDeliveries: [],
|
|
1422
1453
|
processedMessages: [],
|
|
1423
1454
|
imTargets: [],
|
|
1424
1455
|
todosInitialized: false,
|
|
@@ -1431,7 +1462,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1431
1462
|
return null;
|
|
1432
1463
|
}
|
|
1433
1464
|
const cursor = parsed;
|
|
1434
|
-
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))) {
|
|
1435
1466
|
return null;
|
|
1436
1467
|
}
|
|
1437
1468
|
return {
|
|
@@ -1445,6 +1476,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1445
1476
|
mentionCheckpoint: cursor.mentionCheckpoint,
|
|
1446
1477
|
pendingDocumentNotifications: (cursor.pendingDocumentNotifications ?? []).slice(-MAX_PROCESSED_ITEMS),
|
|
1447
1478
|
pendingMessages: (cursor.pendingMessages ?? []).slice(),
|
|
1479
|
+
pendingImDeliveries: (cursor.pendingImDeliveries ?? []).slice(-MAX_PENDING_IM_DELIVERIES),
|
|
1448
1480
|
processedMessages: cursor.processedMessages.slice(-MAX_PROCESSED_ITEMS),
|
|
1449
1481
|
imTargets: cursor.imTargets.slice(-MAX_IM_TARGETS),
|
|
1450
1482
|
todosInitialized: cursor.todosInitialized ?? false,
|
|
@@ -1484,6 +1516,7 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1484
1516
|
this.cursor.documentIds = [];
|
|
1485
1517
|
this.cursor.pendingDocumentNotifications = [];
|
|
1486
1518
|
this.cursor.pendingMessages = [];
|
|
1519
|
+
this.cursor.pendingImDeliveries = [];
|
|
1487
1520
|
this.cursor.imTargets = [];
|
|
1488
1521
|
this.cursor.processedMessages = [];
|
|
1489
1522
|
this.cursor.pairingNotifications = [];
|
|
@@ -1753,11 +1786,187 @@ Ask the bot operator to approve you with:
|
|
|
1753
1786
|
return;
|
|
1754
1787
|
}
|
|
1755
1788
|
const idempotencyKey = stableUuid(`${this.name}\0${chatId}\0${messageId}\0${text}`);
|
|
1756
|
-
|
|
1757
|
-
|
|
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");
|
|
1758
1838
|
return;
|
|
1759
1839
|
}
|
|
1760
|
-
|
|
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
|
+
}
|
|
1761
1970
|
}
|
|
1762
1971
|
async pushProactive(target, text, sourceLabel2) {
|
|
1763
1972
|
if (isNoReply(text))
|
|
@@ -1852,6 +2061,9 @@ Ask the bot operator to approve you with:
|
|
|
1852
2061
|
process2.stderr.write(`[Channel:${this.name}] failed to poll DWS direct-message history: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1853
2062
|
`);
|
|
1854
2063
|
}
|
|
2064
|
+
await this.replayPendingImDeliveries(signal);
|
|
2065
|
+
if (signal.aborted || !this.connected)
|
|
2066
|
+
return;
|
|
1855
2067
|
this.saveCursor();
|
|
1856
2068
|
if (this.watchTodos && (this.lastTodoPollAt === 0 || endTime - this.lastTodoPollAt >= this.todoPollInterval)) {
|
|
1857
2069
|
try {
|
|
@@ -1937,7 +2149,6 @@ Ask the bot operator to approve you with:
|
|
|
1937
2149
|
text: `Process this DingTalk todo:
|
|
1938
2150
|
${truncateCodePoints(title, MAX_COMMENT_CHARS)}`,
|
|
1939
2151
|
displayText: title,
|
|
1940
|
-
bypassMessagePrefix: true,
|
|
1941
2152
|
isGroup: true,
|
|
1942
2153
|
isMentioned: true,
|
|
1943
2154
|
isReplyToBot: false,
|
|
@@ -2110,12 +2321,9 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2110
2321
|
}
|
|
2111
2322
|
if (this.shouldFilterImMessage(source, message)) {
|
|
2112
2323
|
if (source.kind === "group" || source.kind === "group-all") {
|
|
2113
|
-
const
|
|
2114
|
-
if (!this.
|
|
2115
|
-
|
|
2116
|
-
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required" && !this.queuedMessages.has(key) && !this.cursor.processedMessages.includes(key) && !this.hasPendingMessage(key)) {
|
|
2117
|
-
this.recordPendingGroupHistory(envelope);
|
|
2118
|
-
}
|
|
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);
|
|
2119
2327
|
}
|
|
2120
2328
|
}
|
|
2121
2329
|
this.removePersistedPendingMessageForSource(key, source);
|
|
@@ -2288,14 +2496,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2288
2496
|
}
|
|
2289
2497
|
}
|
|
2290
2498
|
async processImMessage(source, message, key) {
|
|
2291
|
-
const
|
|
2292
|
-
const providerDocumentNotification = source.kind === "direct" ? parseDocumentMentionNotification(rawText) : void 0;
|
|
2293
|
-
const text = providerDocumentNotification ? rawText : stripMessagePrefix(rawText, this.dwsMessagePrefix);
|
|
2294
|
-
if (this.dwsMessagePrefix && !text) {
|
|
2295
|
-
this.markProcessedMessage(key);
|
|
2296
|
-
this.saveCursor();
|
|
2297
|
-
return;
|
|
2298
|
-
}
|
|
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();
|
|
2299
2500
|
const target = source.kind === "direct" ? { kind: "direct", openDingTalkId: message.senderId } : { kind: "group", conversationId: message.conversationId };
|
|
2300
2501
|
this.rememberImTarget(message.conversationId, target);
|
|
2301
2502
|
if (!text) {
|
|
@@ -2303,13 +2504,14 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2303
2504
|
this.saveCursor();
|
|
2304
2505
|
return;
|
|
2305
2506
|
}
|
|
2306
|
-
const documentNotification =
|
|
2507
|
+
const documentNotification = source.kind === "direct" ? parseDocumentMentionNotification(text) : void 0;
|
|
2307
2508
|
if (documentNotification) {
|
|
2308
2509
|
await this.processDocumentNotification(message, key, documentNotification);
|
|
2309
2510
|
return;
|
|
2310
2511
|
}
|
|
2311
2512
|
const envelope = this.createImEnvelope(source, message, text);
|
|
2312
2513
|
this.rememberInboundReactionTarget(message.conversationId, message.messageId);
|
|
2514
|
+
this.imResponseKinds.set(key, source.kind !== "direct");
|
|
2313
2515
|
try {
|
|
2314
2516
|
await this.handleInbound(envelope);
|
|
2315
2517
|
} catch (error) {
|
|
@@ -2321,6 +2523,8 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2321
2523
|
throw error;
|
|
2322
2524
|
}
|
|
2323
2525
|
return;
|
|
2526
|
+
} finally {
|
|
2527
|
+
this.imResponseKinds.delete(key);
|
|
2324
2528
|
}
|
|
2325
2529
|
this.clearInboundFailure(key);
|
|
2326
2530
|
this.removePendingMessage(key);
|
|
@@ -2336,7 +2540,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2336
2540
|
chatName: message.conversationId,
|
|
2337
2541
|
messageId: message.messageId,
|
|
2338
2542
|
text,
|
|
2339
|
-
bypassMessagePrefix: true,
|
|
2340
2543
|
...message.referencedText ? { referencedText: message.referencedText } : {},
|
|
2341
2544
|
isGroup: source.kind !== "direct",
|
|
2342
2545
|
isMentioned: source.kind === "at",
|
|
@@ -2513,7 +2716,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2513
2716
|
threadId: notification.commentKey,
|
|
2514
2717
|
messageId: message.messageId,
|
|
2515
2718
|
text: truncateCodePoints(notification.request, MAX_COMMENT_CHARS),
|
|
2516
|
-
bypassMessagePrefix: true,
|
|
2517
2719
|
isGroup: true,
|
|
2518
2720
|
isMentioned: true,
|
|
2519
2721
|
isReplyToBot: false,
|
|
@@ -2576,12 +2778,9 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2576
2778
|
continue;
|
|
2577
2779
|
if (this.shouldFilterImMessage(pending.source, pending.message)) {
|
|
2578
2780
|
if (pending.source.kind === "group" || pending.source.kind === "group-all") {
|
|
2579
|
-
const
|
|
2580
|
-
if (
|
|
2581
|
-
|
|
2582
|
-
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
|
|
2583
|
-
this.recordPendingGroupHistory(envelope);
|
|
2584
|
-
}
|
|
2781
|
+
const envelope = this.createImEnvelope(pending.source, pending.message);
|
|
2782
|
+
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
|
|
2783
|
+
this.recordPendingGroupHistory(envelope);
|
|
2585
2784
|
}
|
|
2586
2785
|
}
|
|
2587
2786
|
this.removePersistedPendingMessageForSource(key, pending.source);
|