@qwen-code/qwen-code 0.23.3 → 0.23.4-dev.codemode-responses.20260914.87437db784
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/computer-use/SKILL.md +46 -198
- package/bundled/computer-use/references/macos.md +208 -0
- package/bundled/computer-use/references/windows-linux.md +247 -0
- package/bundled/goal-draft/SKILL.md +10 -10
- package/bundled/qc-helper/docs/configuration/settings.md +81 -71
- package/bundled/qc-helper/docs/extension/getting-started-extensions.md +2 -0
- package/bundled/qc-helper/docs/extension/introduction.md +9 -3
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/agent-board.md +89 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +3 -21
- package/bundled/qc-helper/docs/features/channels/dws.md +5 -1
- package/bundled/qc-helper/docs/features/channels/overview.md +5 -6
- package/bundled/qc-helper/docs/features/code-review.md +18 -4
- package/bundled/qc-helper/docs/features/commands.md +9 -0
- package/bundled/qc-helper/docs/features/computer-use.md +26 -8
- package/bundled/qc-helper/docs/features/cross-session-protocol.md +23 -5
- package/bundled/qc-helper/docs/features/followup-suggestions.md +17 -5
- package/bundled/qc-helper/docs/features/goals.md +22 -18
- package/bundled/qc-helper/docs/features/hooks.md +48 -37
- package/bundled/qc-helper/docs/features/skills.md +33 -3
- package/bundled/qc-helper/docs/features/status-line.md +2 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +27 -0
- package/bundled/qc-helper/docs/qwen-serve.md +7 -3
- package/bundled/review/SKILL.md +20 -10
- package/bundled/review/references/persistence.md +2 -0
- package/bundled/workflow-authoring/SKILL.md +442 -0
- package/bundled/workflow-creator/SKILL.md +1 -1
- package/chunks/{MaxSizedBox-D4LW7RZZ.js → MaxSizedBox-CSMC6NNQ.js} +59 -55
- package/chunks/{StandaloneSessionPicker-ALTTRWUP.js → StandaloneSessionPicker-5G46NROB.js} +83 -79
- package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-RUQNTNU5.js} +2 -2
- package/chunks/acp-subagent-executor-4JLSF7SA.js +141 -0
- package/chunks/{acpAgent-BBSW7XZG.js → acpAgent-WJ45JV2S.js} +1026 -355
- package/chunks/{agent-SQ6OY3QD.js → agent-KWNOVXAD.js} +43 -39
- package/chunks/{agent-headless-RI2THRQ7.js → agent-headless-TU5N3GFF.js} +43 -39
- package/chunks/{anthropicContentGenerator-JSKMKS6V.js → anthropicContentGenerator-H5YPXIDE.js} +37 -15
- package/chunks/{artifact-tool-PMYZCYNH.js → artifact-tool-MFGORTWZ.js} +59 -109
- package/chunks/{askUserQuestion-4M4YYIB4.js → askUserQuestion-WS4GUT7C.js} +3 -3
- package/chunks/{bridge-DAFMI72L.js → bridge-PF7UX6MH.js} +63 -58
- package/chunks/{build-63BIOYWK.js → build-5KWQBWEQ.js} +1 -1
- package/chunks/{ca-KC2AISNS.js → ca-GZ4FDJU2.js} +3 -3
- package/chunks/{channel-management-service-OWDXVL7R.js → channel-management-service-AFVIT4VH.js} +8 -8
- package/chunks/{channel-settings-store-4I6JONT7.js → channel-settings-store-3OVAGIC2.js} +68 -64
- package/chunks/{channel-worker-group-F2ZZMLNS.js → channel-worker-group-JR6JOELM.js} +8 -8
- package/chunks/{channel-worker-manager-2SZLJJSJ.js → channel-worker-manager-AVKJEZFL.js} +8 -8
- package/chunks/{channel-worker-supervisor-ZFNWMG6D.js → channel-worker-supervisor-OOYY7BAQ.js} +5 -5
- package/chunks/{chunk-6JACAGYH.js → chunk-2S2WIGCM.js} +1 -1
- package/chunks/{chunk-NRXWJXJ4.js → chunk-2YGR3VN6.js} +15 -15
- package/chunks/{chunk-IUVIBDKU.js → chunk-2YMRRI2C.js} +9 -10
- package/chunks/{chunk-3BTSSIJO.js → chunk-3DOAKZYD.js} +99 -14
- package/chunks/{chunk-F53KKZUD.js → chunk-3LMDSCLU.js} +158 -10
- package/chunks/{chunk-2ZN3O5FT.js → chunk-457DR2MC.js} +6 -6
- package/chunks/{chunk-WG7BL3FY.js → chunk-473RJLIH.js} +1 -1
- package/chunks/{chunk-W5ZQMAEM.js → chunk-4Y2I3CI3.js} +1 -1
- package/chunks/{chunk-HGEUHUEV.js → chunk-54B2LTKP.js} +1 -1
- package/chunks/{chunk-IRH27ZC2.js → chunk-5EZRLTLQ.js} +4 -4
- package/chunks/{chunk-DLH7YIX6.js → chunk-5FK4MSHB.js} +3 -3
- package/chunks/{chunk-CUEXOHQH.js → chunk-5ODRE7E5.js} +9 -15
- package/chunks/{chunk-532WHF4F.js → chunk-5VQR2DD7.js} +2 -2
- package/chunks/{chunk-3KQBQ6FM.js → chunk-63WKMKVD.js} +190 -28
- package/chunks/{chunk-YBUMTY7B.js → chunk-66N6C4EH.js} +1 -1
- package/chunks/{chunk-MLQNSPRZ.js → chunk-6MLDTOHU.js} +15 -5
- package/chunks/{chunk-SBRX4BDI.js → chunk-6NKDU7YL.js} +2 -2
- package/chunks/{chunk-3UXUOFO6.js → chunk-6TMXX4Z4.js} +9 -10
- package/chunks/{chunk-Y2MYW47X.js → chunk-6WXVEDT2.js} +9 -2
- package/chunks/{chunk-ZHKTKHMO.js → chunk-7MIBD3LG.js} +1 -1
- package/chunks/{chunk-EVTNACMT.js → chunk-A6QMKS5S.js} +12 -12
- package/chunks/{chunk-NOAG7N22.js → chunk-A6YU6R5N.js} +2 -2
- package/chunks/{chunk-76RGWKLS.js → chunk-ABNX6E6K.js} +1 -1
- package/chunks/chunk-ACHCT36C.js +28 -0
- package/chunks/{chunk-NE624IVP.js → chunk-ADQUK6WA.js} +1 -1
- package/chunks/{chunk-PLLIWEM3.js → chunk-AEWCOE64.js} +2 -2
- package/chunks/{chunk-3FPYT6QC.js → chunk-ARDHE6MM.js} +23 -0
- package/chunks/{chunk-LILGKQ4B.js → chunk-AXZMWAJV.js} +156 -26
- package/chunks/{chunk-SYLECP23.js → chunk-B776VKDA.js} +4 -4
- package/chunks/{chunk-AC6KDLH3.js → chunk-BNYQHLPR.js} +1 -1
- package/chunks/{chunk-BZM5U74J.js → chunk-BS7ON54G.js} +724 -468
- package/chunks/{chunk-TPKQIA7G.js → chunk-BSIOCNDK.js} +1 -1
- package/chunks/{chunk-U7O65WKL.js → chunk-BW2SMO6L.js} +1 -1
- package/chunks/{chunk-POC3YMHG.js → chunk-BY6CE34S.js} +4 -4
- package/chunks/{chunk-RLLRJJDR.js → chunk-C3VNHDWJ.js} +2 -2
- package/chunks/{chunk-WBCPROWX.js → chunk-C4HBZQNH.js} +1 -1
- package/chunks/{chunk-MSNHNAQZ.js → chunk-C5ABXOC2.js} +3 -3
- package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
- package/chunks/chunk-CCWWPFZJ.js +191 -0
- package/chunks/chunk-CFMZLE3L.js +75 -0
- package/chunks/{chunk-N7VWZDWW.js → chunk-CFSBWJBB.js} +4462 -3840
- package/chunks/{chunk-KOKPXIAN.js → chunk-CL7JONZN.js} +3 -3
- package/chunks/{chunk-AXTFYDXT.js → chunk-CXXAZ2LZ.js} +1 -1
- package/chunks/{chunk-JYKWOREU.js → chunk-DBUOMHLZ.js} +13 -3
- package/chunks/{chunk-R4Q2PEFV.js → chunk-DLJBYORJ.js} +1 -1
- package/chunks/{chunk-DT75RKNH.js → chunk-DNVA2MQ2.js} +3 -3
- package/chunks/{chunk-J3TJH52D.js → chunk-DOTF2PF2.js} +1 -1
- package/chunks/{chunk-HGAELO7B.js → chunk-DQMBQCTY.js} +2 -2
- package/chunks/{chunk-2ALXPGB4.js → chunk-E6IR653O.js} +1 -1
- package/chunks/{chunk-ZKYR7QS4.js → chunk-EDB556X7.js} +2 -2
- package/chunks/chunk-EKJXDLDD.js +32 -0
- package/chunks/{chunk-NUQVB25K.js → chunk-EKMJR7M3.js} +2 -2
- package/chunks/{chunk-7QYWGTHB.js → chunk-EPVEPTI3.js} +44 -151
- package/chunks/{chunk-GCDXVPFK.js → chunk-EZSSJSKR.js} +31 -7
- package/chunks/{chunk-S6Q6Q4P2.js → chunk-FBDHP23D.js} +1 -1
- package/chunks/{chunk-UKZ45TJL.js → chunk-FFBP5POK.js} +420 -219
- package/chunks/{chunk-3I7W2POO.js → chunk-FGROOEKM.js} +5 -40
- package/chunks/{chunk-HNLMYDQE.js → chunk-FMLBBXHB.js} +13 -9
- package/chunks/{chunk-SSGAAWLY.js → chunk-GCV4NOHV.js} +95 -73
- package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
- package/chunks/{chunk-XBZTAGB7.js → chunk-GMN73IMT.js} +1 -1
- package/chunks/{chunk-IAEXTMED.js → chunk-GNV2SFO7.js} +173 -7
- package/chunks/{chunk-CXTPVBFA.js → chunk-GSS4SZNG.js} +100 -17
- package/chunks/chunk-GXN7DWZZ.js +154 -0
- package/chunks/{chunk-SODMFNAR.js → chunk-H23UWPF7.js} +5 -5
- package/chunks/{chunk-6HUXPLB5.js → chunk-HEOH7JZY.js} +5 -5
- package/chunks/{chunk-DTNV6UZY.js → chunk-HFJSQ4GL.js} +10 -24
- package/chunks/{chunk-GOXQL4YH.js → chunk-HWRXJQ6B.js} +2 -2
- package/chunks/{chunk-VZUCTJ2P.js → chunk-I6YJZGHS.js} +10 -10
- package/chunks/{chunk-RZHU3K6M.js → chunk-IAS753HG.js} +2 -20
- package/chunks/{chunk-EDMXGXAK.js → chunk-IBRQG2MP.js} +10 -13
- package/chunks/chunk-INGBUYL6.js +230 -0
- package/chunks/{chunk-7BXXIQG4.js → chunk-J73WJIMT.js} +36 -72
- package/chunks/{chunk-XGYHNWL3.js → chunk-J7LBAKDH.js} +3 -3
- package/chunks/{chunk-Z3GF56ME.js → chunk-JAYWZWZF.js} +3 -3
- package/chunks/{chunk-DYFOSJHU.js → chunk-JBFC2644.js} +2756 -1153
- package/chunks/{chunk-Q5BD56BW.js → chunk-JPCYCFYG.js} +7 -7
- package/chunks/{chunk-LG5Y4OWO.js → chunk-JRHKM3YQ.js} +2 -2
- package/chunks/{chunk-NHCZJQE4.js → chunk-JZKBMADP.js} +6 -6
- package/chunks/{chunk-MF6E7FSA.js → chunk-K7CQWBLT.js} +8 -201
- package/chunks/{chunk-K2OJUPOE.js → chunk-KP2FHIFR.js} +12 -0
- package/chunks/{chunk-ZU47FBOC.js → chunk-KSIOXYVX.js} +126 -12
- package/chunks/{chunk-IV7GDNKC.js → chunk-KZCK5JUN.js} +4 -4
- package/chunks/{chunk-3XLK2QMY.js → chunk-L3S2Y2FF.js} +59 -16
- package/chunks/{chunk-ZW2EUO2A.js → chunk-L6DIANLD.js} +1 -1
- package/chunks/{chunk-6W4HBUA2.js → chunk-LATAUG2M.js} +1 -1
- package/chunks/{chunk-RWVD5RRY.js → chunk-LBDASOPR.js} +3 -3
- package/chunks/{chunk-OX7IZ2G5.js → chunk-LF5AD7PY.js} +4 -4
- package/chunks/{chunk-NMRCXKQ5.js → chunk-LKCNETDW.js} +3 -3
- package/chunks/chunk-LMJSPC55.js +260 -0
- package/chunks/{chunk-X6K77VHC.js → chunk-LWWRJRCD.js} +1 -1
- package/chunks/{chunk-UXEO7E3V.js → chunk-LYD3T3H7.js} +1 -0
- package/chunks/{chunk-KFZYGSJN.js → chunk-M3YNPR56.js} +3 -3
- package/chunks/{chunk-HBQ2NXOU.js → chunk-MDG6GKSE.js} +2 -2
- package/chunks/{chunk-E4UEO3XM.js → chunk-ME4JBHSB.js} +324 -2
- package/chunks/{chunk-BV6Q5HMY.js → chunk-MJHLKWGJ.js} +8 -7
- package/chunks/{chunk-NFYEQRLG.js → chunk-MQRLLBMQ.js} +1 -1
- package/chunks/{chunk-O4KNCAX4.js → chunk-NCPFOLM2.js} +11 -0
- package/chunks/{chunk-2SZH22YO.js → chunk-NJ2OFVUX.js} +115 -97
- package/chunks/{chunk-DAWWT2ID.js → chunk-NN4EC2WO.js} +1374 -2164
- package/chunks/{chunk-6MBXY6WM.js → chunk-NRQI3PGS.js} +1 -1
- package/chunks/{chunk-HBU7EKY4.js → chunk-NRUKL236.js} +45 -15
- package/chunks/{chunk-53GWJOLP.js → chunk-NTCFKGQF.js} +3 -1
- package/chunks/{chunk-3CZ2BQV6.js → chunk-NXUZFW3G.js} +49 -19
- package/chunks/{chunk-X7UJKOHZ.js → chunk-OMDXAHCT.js} +4 -6
- package/chunks/{chunk-5GLDOLNQ.js → chunk-OWUAZXXN.js} +4 -3
- package/chunks/{chunk-2UWQX4FP.js → chunk-OZEV3R3S.js} +1 -1
- package/chunks/{acp-subagent-executor-LEUN3N7N.js → chunk-PAPBT3WP.js} +11 -110
- package/chunks/{chunk-7ICHPMBQ.js → chunk-PHSQVB6D.js} +4 -4
- package/chunks/{chunk-FCQJLMA2.js → chunk-Q3TFRP5G.js} +178 -8
- package/chunks/{chunk-YQHLFCPU.js → chunk-Q5CCYZD3.js} +32 -24
- package/chunks/chunk-QQL5BFOL.js +1416 -0
- package/chunks/{chunk-ZKZHSB5W.js → chunk-QR4Q425T.js} +9 -9
- package/chunks/{chunk-J6MB5ZHZ.js → chunk-QZW6WRB7.js} +2 -1
- package/chunks/{chunk-TP6FYVQT.js → chunk-RSWBT7AZ.js} +33 -1
- package/chunks/{chunk-2PJRI3EH.js → chunk-RVOD66ID.js} +218 -43
- package/chunks/{chunk-W5FIP7FC.js → chunk-S3PU3CNW.js} +5 -5
- package/chunks/chunk-S7UQ3V2H.js +87 -0
- package/chunks/{chunk-N6VQ37ZZ.js → chunk-SFL6U7U7.js} +1 -1
- package/chunks/{chunk-MOS5OAOG.js → chunk-SROLVJFY.js} +6 -6
- package/chunks/{chunk-HUXPEUFL.js → chunk-SYROIHU7.js} +1 -1
- package/chunks/{chunk-E7LB57MB.js → chunk-T3LUMYFP.js} +6 -6
- package/chunks/{chunk-PSPAM24S.js → chunk-TBSCTWKF.js} +6 -0
- package/chunks/{chunk-5KI7ZDTB.js → chunk-TV5WDW7R.js} +24 -12
- package/chunks/{chunk-NMCDMLHL.js → chunk-TXUJOKVR.js} +50 -35
- package/chunks/{chunk-NHJKAR6E.js → chunk-TYWLBEL2.js} +972 -18
- package/chunks/chunk-U6H3XTFA.js +95 -0
- package/chunks/{chunk-GSILBZLN.js → chunk-U7RWQBGZ.js} +2 -2
- package/chunks/{chunk-7APZIRH3.js → chunk-V3CMBOQ6.js} +5 -5
- package/chunks/{chunk-JXNIF2O5.js → chunk-V545KI73.js} +1 -1
- package/chunks/chunk-VGY2RGXL.js +100 -0
- package/chunks/{chunk-TBEXLLAO.js → chunk-VRQZESKP.js} +1 -1
- package/chunks/{chunk-FN3JNDRU.js → chunk-VVI7MK3V.js} +3 -3
- package/chunks/{chunk-EUURTIV6.js → chunk-WBSJ6VPZ.js} +10 -2
- package/chunks/{chunk-NLNQNBZ2.js → chunk-WD6YQI5M.js} +1 -1
- package/chunks/chunk-WFNEY5G7.js +347 -0
- package/chunks/{chunk-XKBFYTCD.js → chunk-WK6DEH3Q.js} +46 -0
- package/chunks/{chunk-36HCNKDS.js → chunk-WKVZES7O.js} +65 -14
- package/chunks/{chunk-BWAMMKIS.js → chunk-WLLRNQVT.js} +135 -6
- package/chunks/{chunk-MHAADZOZ.js → chunk-WMSP3XZK.js} +3 -3
- package/chunks/{chunk-IL5M5NYD.js → chunk-WUTXSXPP.js} +11 -9
- package/chunks/{chunk-NJQTG2G3.js → chunk-XE5ZFBVD.js} +11 -11
- package/chunks/{chunk-OLTN767L.js → chunk-XO3Z27IL.js} +2 -2
- package/chunks/{chunk-VX63RJXE.js → chunk-XX5HQLCZ.js} +7 -0
- package/chunks/{chunk-2Z3T52OC.js → chunk-Y5TM7SBV.js} +7 -2
- package/chunks/{chunk-V2P3DOQR.js → chunk-YDFOHRS5.js} +1 -1
- package/chunks/{chunk-QMUYLYT5.js → chunk-YGFJ6BRT.js} +1 -1
- package/chunks/{chunk-LK2WUCDQ.js → chunk-YM6KUQ2S.js} +1 -1
- package/chunks/{chunk-F42YYSCK.js → chunk-YVF4PKCV.js} +8 -8
- package/chunks/{chunk-LDVNJZGH.js → chunk-Z2H5HQS3.js} +17 -8
- package/chunks/chunk-Z72PLR74.js +36 -0
- package/chunks/{chunk-BWQLXU37.js → chunk-ZDHXRKRG.js} +381 -86
- package/chunks/{chunk-BHTYRHJF.js → chunk-ZJ7JQUGY.js} +4 -1
- package/chunks/{chunk-4ALNJDHL.js → chunk-ZKIAGIGH.js} +87 -4
- package/chunks/{chunk-VG3Q2NC4.js → chunk-ZNI3YJHS.js} +32 -12
- package/chunks/chunk-ZRZZLM37.js +2780 -0
- package/chunks/{chunk-Q2LVVIKF.js → chunk-ZZUXUBEB.js} +29 -12
- package/chunks/codex-subagent-executor-SM3TUSBA.js +586 -0
- package/chunks/{config-utils-L6KLDYIV.js → config-utils-JHKHFOG6.js} +60 -56
- package/chunks/{contextCommand-UYEH7NIU.js → contextCommand-XE4NDYQW.js} +58 -54
- package/chunks/{core-runtime-NVHT3Z3V.js → core-runtime-PNCWH3RE.js} +58 -55
- package/chunks/{create-sub-session-TIGCFGCS.js → create-sub-session-MSGNIM37.js} +5 -2
- package/chunks/{create-sub-session-YWASE5VH.js → create-sub-session-P7E5Y3HY.js} +169 -89
- package/chunks/{cron-create-AKWX67FO.js → cron-create-U2JJ5CCF.js} +3 -3
- package/chunks/{cron-delete-XPB6IYZJ.js → cron-delete-7DM4LJWD.js} +2 -2
- package/chunks/{cron-list-XBKO4WU5.js → cron-list-VCUSZK2Y.js} +2 -2
- package/chunks/{daemon-G5TYKZD6.js → daemon-NJB4PWZ7.js} +3 -1
- package/chunks/{daemon-git-worktree-guard-FOW4RQSK.js → daemon-git-worktree-guard-JFD5VZRN.js} +58 -54
- package/chunks/{daemon-status-provider-O5KQZYMP.js → daemon-status-provider-A3VFVFWW.js} +68 -63
- package/chunks/{daemon-trust-policy-3ATXEON7.js → daemon-trust-policy-NPZ47MZH.js} +64 -60
- package/chunks/{daemon-trust-policy-monitor-7MCNDNEC.js → daemon-trust-policy-monitor-XG2CHL3Z.js} +64 -60
- package/chunks/{de-UU2YTO37.js → de-VGY3VNBU.js} +3 -3
- package/chunks/{deferred-core-runtime-JK5IXL5K.js → deferred-core-runtime-V42EMU27.js} +56 -52
- package/chunks/{discovery-XP4RMDUM.js → discovery-5KUEPR65.js} +2 -2
- package/chunks/{display-image-NAH3AZ63.js → display-image-QTHALY6N.js} +3 -3
- package/chunks/{dist-KLZ7XGEQ.js → dist-2QYIVNS6.js} +1 -4
- package/chunks/{dist-AHJYPSJL.js → dist-GUB7QRYA.js} +2 -5
- package/chunks/{dist-ZXTZTE54.js → dist-MPUZZOG5.js} +4 -17
- package/chunks/{dist-F2DVGTL3.js → dist-NIOJXMGY.js} +111 -101
- package/chunks/{dist-KJGRVIGJ.js → dist-PA7WPFVE.js} +5 -36
- package/chunks/{dist-AIKC5E5P.js → dist-SE4J6Z4O.js} +43 -669
- package/chunks/{dist-H6G3K26N.js → dist-T6DDPDLQ.js} +14 -34
- package/chunks/{dist-GWNQVPZT.js → dist-TFGETXFN.js} +10 -33
- package/chunks/{dist-ZA52JXAS.js → dist-VDLSBCLM.js} +1 -5
- package/chunks/{edit-SY35KYIE.js → edit-E2ZGJDBJ.js} +46 -42
- package/chunks/{en-CAJHTIQT.js → en-E5ZO5TZW.js} +5 -3
- package/chunks/{enter-worktree-54L5QJ3N.js → enter-worktree-CAARFWBI.js} +6 -5
- package/chunks/{enterPlanMode-HXX6KQJR.js → enterPlanMode-442YAAZB.js} +43 -39
- package/chunks/{environment-DKXHG4HB.js → environment-DCJ5FVHM.js} +59 -55
- package/chunks/{errors-ADY7LQJJ.js → errors-ZWTDW2NJ.js} +58 -54
- package/chunks/exec-RPKEY6HP.js +505 -0
- package/chunks/{exit-worktree-EORJDKDS.js → exit-worktree-JXGGUOBP.js} +6 -5
- package/chunks/{exitPlanMode-HSK2CQI6.js → exitPlanMode-4PLQOFOO.js} +43 -39
- package/chunks/{fast-path-U636VWN2.js → fast-path-DBSGDGB3.js} +10 -10
- package/chunks/{fast-path-settings-V7MI7EZJ.js → fast-path-settings-XDYX7X5Z.js} +2 -2
- package/chunks/{fr-HKNWVXRJ.js → fr-UAZJJH5N.js} +3 -3
- package/chunks/{glob-GUGGTH5L.js → glob-VWOE4W7K.js} +43 -39
- package/chunks/{goal-tools-PXYRSQGX.js → goal-tools-K6SIBXMB.js} +49 -41
- package/chunks/{grep-3PKFKLCA.js → grep-H2I33VAO.js} +8 -3
- package/chunks/{handleAutoUpdate-5KHS4HIN.js → handleAutoUpdate-NCC3XELY.js} +61 -57
- package/chunks/{i18n-KSGKMUPT.js → i18n-GO7JI4PT.js} +57 -53
- package/chunks/{image-gen-OCCR2WWU.js → image-gen-5G2TQ3DY.js} +6 -5
- package/chunks/{initializer-YYT5XEZF.js → initializer-BXKAW5A6.js} +64 -60
- package/chunks/{installationInfo-UNSBPYW2.js → installationInfo-5JONIX62.js} +57 -53
- package/chunks/{ja-GJS5RZGU.js → ja-2RITCMAJ.js} +3 -3
- package/chunks/list-QW74LCLS.js +133 -0
- package/chunks/{list-agents-QLDXS5OD.js → list-agents-EWDCEPIW.js} +3 -3
- package/chunks/{llm-XGGLBGPH.js → llm-FJHSMJTM.js} +161 -125
- package/chunks/{llm-content-generator-ZHQQT5W7.js → llm-content-generator-3VLLPQS4.js} +14 -7
- package/chunks/{loadedSettingsAdapter-3DXLASK7.js → loadedSettingsAdapter-OLMQSKVC.js} +64 -60
- package/chunks/{loggingContentGenerator-V72OCCJO.js → loggingContentGenerator-IMLIJULY.js} +47 -43
- package/chunks/{loop-wakeup-HHMYIC7Z.js → loop-wakeup-VG6CGBQA.js} +4 -4
- package/chunks/{ls-N7ABR6HI.js → ls-6ZB3BEIR.js} +1 -1
- package/chunks/{lsp-LTOFWG5P.js → lsp-M54FQARP.js} +5 -1
- package/chunks/{managed-npm-update-HV5LPZH2.js → managed-npm-update-LXLBWCNA.js} +57 -53
- package/chunks/mcp-FOXA3372.js +127 -0
- package/chunks/model-configuration-SCOI2KPF.js +140 -0
- package/chunks/modelConfigUtils-EA44S64C.js +119 -0
- package/chunks/{monitor-TLBNM4MV.js → monitor-TJAHYCCY.js} +43 -39
- package/chunks/{nonInteractiveCli-LSJSQ2W4.js → nonInteractiveCli-QH2HABWC.js} +112 -107
- package/chunks/{notebook-edit-OSPOLZP6.js → notebook-edit-WEMSBUBS.js} +45 -41
- package/chunks/{openaiContentGenerator-BE4S5TRD.js → openaiContentGenerator-WD5DWYOA.js} +24 -19
- package/chunks/{openaiResponsesContentGenerator-RTCAJ5V5.js → openaiResponsesContentGenerator-AWRYZLJU.js} +110 -19
- package/chunks/{pidfile-H32FEPWA.js → pidfile-TQL2LCEG.js} +56 -52
- package/chunks/{processUtils-SSLIPDEA.js → processUtils-6ZU56DCI.js} +2 -2
- package/chunks/{prompt-terminal-ledger-I5SLL6UF.js → prompt-terminal-ledger-3HAKHXFV.js} +57 -53
- package/chunks/{pt-FXMYXEUV.js → pt-5ZF7ZQUV.js} +3 -3
- package/chunks/{qwenContentGenerator-TMQC623Z.js → qwenContentGenerator-3OIZQZLC.js} +47 -43
- package/chunks/{qwenOAuth2-3ZRQHHTC.js → qwenOAuth2-WIEUEFEY.js} +5 -4
- package/chunks/{read-file-T2QAIZE2.js → read-file-2PWWL6J2.js} +9 -8
- package/chunks/{read-mcp-resource-B37WANAQ.js → read-mcp-resource-LPSWXVOD.js} +1 -1
- package/chunks/{record-artifact-OAXWXZ5D.js → record-artifact-PXMNP7GZ.js} +3 -3
- package/chunks/{record-source-D7R7X3GT.js → record-source-2GSY5JD5.js} +6 -6
- package/chunks/{report-findings-AR3VC6EQ.js → report-findings-W6GR7SYZ.js} +4 -4
- package/chunks/{request-shutdown-IKNWTX5M.js → request-shutdown-53SNYGVR.js} +5 -5
- package/chunks/{resumeHistoryUtils-QLKDH5GY.js → resumeHistoryUtils-S4TEUTKE.js} +63 -59
- package/chunks/{ripGrep-YGWL7KCV.js → ripGrep-5NMGLMLX.js} +13 -11
- package/chunks/{ru-RMHURE5U.js → ru-7BNZFQKG.js} +3 -3
- package/chunks/{run-qwen-serve-26KZDECC.js → run-qwen-serve-6MGYRK4V.js} +314 -127
- package/chunks/{runtime-BMEIVDDG.js → runtime-ZJYUQCPP.js} +69 -65
- package/chunks/{scheduled-tasks-NCFPP6VQ.js → scheduled-tasks-5MKF4EV3.js} +66 -60
- package/chunks/{scheduler-47TVMUVN.js → scheduler-72DZWRH5.js} +58 -54
- package/chunks/{sdk-exporters-http-VWTF4W6K.js → sdk-exporters-http-3R2TRQHE.js} +2 -1
- package/chunks/{sdk-impl-G6FVTBQZ.js → sdk-impl-4WF3VZ2F.js} +3 -3
- package/chunks/{send-message-TWOGWCBG.js → send-message-UMJKN27Q.js} +7 -7
- package/chunks/{serve-KL3G6LQQ.js → serve-7ZDMMA7I.js} +66 -62
- package/chunks/{server-LBPYXZ5G.js → server-ONK5RTEV.js} +783 -350
- package/chunks/{session-YG6742LO.js → session-XQW2LM4S.js} +117 -112
- package/chunks/{session-attachments-root-OUBQDYC4.js → session-attachments-root-Q5IUCMQV.js} +56 -52
- package/chunks/{session-pr-refresh-EKGMYNAW.js → session-pr-refresh-MVECWT3W.js} +66 -60
- package/chunks/{settings-DDNHJX2L.js → settings-DL6K2HQ3.js} +67 -63
- package/chunks/{shell-KUCXWITU.js → shell-BLP25QJU.js} +43 -39
- package/chunks/{skill-JQLKPNWZ.js → skill-7KURUNLD.js} +128 -23
- package/chunks/{skill-settings-XERQCUXZ.js → skill-settings-MY76LM46.js} +72 -60
- package/chunks/{spawnChannel-GQ45QFGB.js → spawnChannel-IJLH3Z74.js} +60 -55
- package/chunks/{standalone-update-PRF3ILGZ.js → standalone-update-YQKN7VNO.js} +58 -54
- package/chunks/{start-opentui-ui-JDSOZE3N.js → start-opentui-ui-ORNGKZTG.js} +2693 -2160
- package/chunks/{startInteractiveUI-RRW3JVHN.js → startInteractiveUI-PRLIKB4U.js} +1610 -1773
- package/chunks/{syntheticOutput-F6F27JMK.js → syntheticOutput-EX5L5GYI.js} +2 -2
- package/chunks/{task-create-Y623TBHB.js → task-create-75HVPEAH.js} +7 -7
- package/chunks/{task-list-FCPEEGWL.js → task-list-ZLJSMRFA.js} +2 -2
- package/chunks/{task-stop-QTKZXLPH.js → task-stop-MD7P6QGK.js} +1 -1
- package/chunks/{task-update-YLSXF25N.js → task-update-RI7QNVDP.js} +20 -13
- package/chunks/{team-create-5DRLOLOE.js → team-create-ANLKOQ44.js} +43 -39
- package/chunks/{team-delete-S7TLHZCF.js → team-delete-RIDINW6I.js} +1 -1
- package/chunks/{team-plan-approval-MWSGAL5T.js → team-plan-approval-EFUENI6Y.js} +43 -39
- package/chunks/{terminal-image-renderer-H7PD4FQW.js → terminal-image-renderer-CXMFIWKC.js} +58 -54
- package/chunks/{theme-manager-7AV73D6R.js → theme-manager-JUFYQDQQ.js} +56 -52
- package/chunks/{todoWrite-5QI2H2FW.js → todoWrite-XSTG2VT5.js} +6 -3
- package/chunks/{tool-search-UGYTBLUV.js → tool-search-SNCEA4VA.js} +17 -12
- package/chunks/{total-session-admission-JIHSTJ5S.js → total-session-admission-UHYNUO3L.js} +63 -58
- package/chunks/{tree-sitter-4D7QS7F6.js → tree-sitter-NZ3QACD7.js} +1 -1
- package/chunks/{tree-sitter-bash-VEJGF5XF.js → tree-sitter-bash-WXHLMORC.js} +1 -1
- package/chunks/{trustedFolders-5VCBXFOP.js → trustedFolders-YBR5URPG.js} +57 -53
- package/chunks/{update-relaunch-4LF3APCV.js → update-relaunch-L6MTSN76.js} +5 -5
- package/chunks/{updateCheck-4T3WUE5F.js → updateCheck-Z3SPZXHC.js} +60 -56
- package/chunks/{useAutoAcceptIndicator-UMGB64Z6.js → useAutoAcceptIndicator-PR5XGMO6.js} +68 -64
- package/chunks/{validateNonInterActiveAuth-GFJ72U2C.js → validateNonInterActiveAuth-KFLTWEYW.js} +109 -104
- package/chunks/{version-EAAZN4T2.js → version-NGAKFVUF.js} +1 -1
- package/chunks/{web-fetch-VRU3A2NI.js → web-fetch-WPGTHGU5.js} +15 -13
- package/chunks/web-search-JT63IJJV.js +39 -0
- package/chunks/{web-shell-static-CCN4JZEE.js → web-shell-static-T7UGLVE4.js} +2 -7
- package/chunks/{workflow-UHPFALVZ.js → workflow-EB63BAL4.js} +179 -79
- package/chunks/workspace-providers-status-NEPR67D2.js +133 -0
- package/chunks/{workspace-registration-store-A7RGKW62.js → workspace-registration-store-CFWXOMGH.js} +2 -2
- package/chunks/{workspace-registry-C2NGE6SD.js → workspace-registry-6KRZXOGB.js} +63 -58
- package/chunks/{workspace-runtime-coordinator-QKMZ24YF.js → workspace-runtime-coordinator-SP4X3UVH.js} +66 -59
- package/chunks/{workspace-service-RQTTAGGC.js → workspace-service-PRMYJTTV.js} +70 -65
- package/chunks/workspace-skills-status-VYTZJ5MB.js +130 -0
- package/chunks/{workspace-trust-reconciler-KFWATZUU.js → workspace-trust-reconciler-B4QMGDMI.js} +73 -68
- package/chunks/{write-file-DPVB2SBQ.js → write-file-EGBMW7TS.js} +45 -41
- package/chunks/{zh-TW-2K2WRFPY.js → zh-TW-7PRVUGLW.js} +5 -3
- package/chunks/{zh-S5V3Z5CR.js → zh-V2EYTYJP.js} +5 -3
- package/chunks/{zoom-image-S7AWLAPC.js → zoom-image-UR6K2LDR.js} +11 -10
- package/cli.js +18 -17
- package/codeModeHost.js +4425 -0
- package/export-transcript-document.css +1 -1
- package/export-transcript-document.js +151 -151
- package/locales/ca.js +5 -6
- package/locales/de.js +5 -6
- package/locales/en.js +7 -6
- package/locales/fr.js +6 -6
- package/locales/ja.js +5 -6
- package/locales/pt.js +5 -6
- package/locales/ru.js +6 -6
- package/locales/zh-TW.js +7 -6
- package/locales/zh.js +7 -6
- package/package.json +4 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-nU24rpIE.js → abnfDiagram-VCTEODGH-S_JCiANq.js} +1 -1
- package/web-shell/assets/{arc-D1hTu8QI.js → arc-DP-839Xn.js} +1 -1
- package/web-shell/assets/architectureDiagram-5GKGNRK7-C8rCd2KK.js +36 -0
- package/web-shell/assets/blockDiagram-NRAW4CY4-DQR82jwr.js +129 -0
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-kEFoC1ei.js → c4Diagram-UCG6FXSJ-D21PNMRP.js} +4 -4
- package/web-shell/assets/channel-BgGrpX_z.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-DbT9wS7j.js → chunk-2Q5K7J3B-KdDInGLi.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-CNbULt6O.js → chunk-5VM5RSS4-ltb7zRmH.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-CbQRy4Tb.js → chunk-F27PBJKO-DcpQA0Ng.js} +1 -1
- package/web-shell/assets/chunk-G27WJ6UU-C8NDZxcy.js +231 -0
- package/web-shell/assets/chunk-JWPE2WC7-hXhhHTs1.js +1 -0
- package/web-shell/assets/chunk-LCL6LL3I-CLaOR-Hl.js +206 -0
- package/web-shell/assets/chunk-POPQ4Y6H-Y5_qlB1N.js +1 -0
- package/web-shell/assets/{chunk-SVP7TREG-DyBb2Axj.js → chunk-SVP7TREG-BWX2Voh7.js} +4 -4
- package/web-shell/assets/{chunk-XXDRQBXY-BIA0eb5B.js → chunk-XXDRQBXY-1wmj_kXI.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-jUH7ADYs.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-jUH7ADYs.js +1 -0
- package/web-shell/assets/cose-bilkent-JH36ORCC-DpLc-cdd.js +1 -0
- package/web-shell/assets/cynefin-OW5HDTMX-DhxGiPZW.js +178 -0
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-LENf_IUy.js → cynefinDiagram-5FMLGOSQ-Dl3jfBry.js} +1 -1
- package/web-shell/assets/{cytoscape.esm-CUqq0XTU.js → cytoscape.esm-DJK6lGiH.js} +3 -3
- package/web-shell/assets/dagre-3AP2YEHR-C8FA8vJk.js +4 -0
- package/web-shell/assets/diagram-S7CK7UJ4-D-quIUtW.js +30 -0
- package/web-shell/assets/diagram-UQ7AKVKN-Bjo09Uts.js +41 -0
- package/web-shell/assets/diagram-VSXAHHWV-IoI3ttq4.js +3 -0
- package/web-shell/assets/diagram-VX7I27RA-BKyOZ5SO.js +24 -0
- package/web-shell/assets/diagram-Z3DM3KII-Cu_OHEhw.js +24 -0
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-BGpiquRm.js → ebnfDiagram-PWID7BFC-UVB-bbPg.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-D0besu_U.js → erDiagram-SSCWMZ5O-l8drddto.js} +13 -13
- package/web-shell/assets/flowDiagram-A5DVABFB-DU1I_VAI.js +168 -0
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-CNlsAeNr.js → ganttDiagram-EL5Y4UJY-BLRH05uB.js} +1 -1
- package/web-shell/assets/gitGraphDiagram-WWUBYQGX-Czg_BkRE.js +106 -0
- package/web-shell/assets/index-CmMV8Jla.js +3 -0
- package/web-shell/assets/{index-CGT341lL.js → index-DohPy72Z.js} +1 -1
- package/web-shell/assets/index-DyMtNYuu.js +2207 -0
- package/web-shell/assets/index-n6N-2a3v.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-Bpai64Ll.js → infoDiagram-RXCK75RN-BpBvjkro.js} +1 -1
- package/web-shell/assets/ishikawaDiagram-5VMMS53U-phy1l3jm.js +70 -0
- package/web-shell/assets/{journeyDiagram-EYS64GPL-iz_DKgFX.js → journeyDiagram-EYS64GPL-oY-9LgVS.js} +1 -1
- package/web-shell/assets/kanban-definition-3QL26DDD-slZoy-sc.js +89 -0
- package/web-shell/assets/{layout-qEvKgnvU.js → layout-0hnn_P9l.js} +1 -1
- package/web-shell/assets/{linear-C6lklGdq.js → linear-7Wqe8DRy.js} +1 -1
- package/web-shell/assets/mermaid.core-BaK8n0bq.js +312 -0
- package/web-shell/assets/mindmap-definition-FBJOCRG2-BedUdy_E.js +96 -0
- package/web-shell/assets/{pegDiagram-XKGWAZYB-BhD0q0i6.js → pegDiagram-XKGWAZYB-DQLRdmxq.js} +1 -1
- package/web-shell/assets/pieDiagram-E7YTZNPT-UC20w9-5.js +39 -0
- package/web-shell/assets/quadrantDiagram-AXDQQJYC-CQx2Hmk3.js +7 -0
- package/web-shell/assets/qwen-code-notification-BRVagufF.png +0 -0
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-E1g2KIFK.js → railroadDiagram-O6MQD6OU-2UEJe_y-.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CuerYJOe.js → requirementDiagram-EFPCY7ZU-DOAJggB4.js} +13 -13
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CqWyCZGA.js → sankeyDiagram-P5KCCOFB-DnQ_qJo7.js} +7 -7
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-B-YWb8x4.js → sequenceDiagram-WJ2MYXX4-DZrZUoCo.js} +16 -16
- package/web-shell/assets/sizeCapture-X5ZJPWSS-B5G4GDQB.js +1 -0
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-C8LDpNHS.js → stateDiagram-HBIQ2CUA-Bn1cT0qF.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BF3xtNvJ.js +1 -0
- package/web-shell/assets/swimlanes-XN3QIQJK-Bzhcdn87.js +1 -0
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-B753mA3E.js +8 -0
- package/web-shell/assets/timeline-definition-24CTP7MA-BqZ_3D10.js +120 -0
- package/web-shell/assets/vennDiagram-4TSXK5OY-z9kw1kmm.js +34 -0
- package/web-shell/assets/wardleyDiagram-VM6X3IG4-Cydp1zJW.js +78 -0
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-ruD2Wjhg.js → xychartDiagram-S5SC5T6Z-j4X1lQKo.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-7Q2AXRDJ.js +0 -114
- package/chunks/chunk-AEY27Z35.js +0 -1411
- package/chunks/chunk-CFKIH3D3.js +0 -50
- package/chunks/chunk-HWVUSYSN.js +0 -126
- package/chunks/chunk-QHMLYMMS.js +0 -32
- package/chunks/chunk-SAH4BD2J.js +0 -92
- package/chunks/chunk-TWUKBNWM.js +0 -86
- package/chunks/chunk-ZTTC7T4X.js +0 -126
- package/chunks/list-YL6LDQKQ.js +0 -129
- package/chunks/mcp-IYVSIW6O.js +0 -123
- package/chunks/web-search-NEGYQNDJ.js +0 -912
- package/chunks/workspace-providers-status-AEYISSU2.js +0 -127
- package/chunks/workspace-skills-status-5HWZU3HX.js +0 -126
- package/web-shell/assets/architectureDiagram-5GKGNRK7-B_fgkKe7.js +0 -36
- package/web-shell/assets/blockDiagram-NRAW4CY4-C3pddUNg.js +0 -129
- package/web-shell/assets/channel-Blod4z1X.js +0 -1
- package/web-shell/assets/chunk-G27WJ6UU-CVbXTxYk.js +0 -231
- package/web-shell/assets/chunk-JWPE2WC7-D89c_BXy.js +0 -1
- package/web-shell/assets/chunk-LCL6LL3I-B7-I_9KB.js +0 -206
- package/web-shell/assets/chunk-POPQ4Y6H-DcLQFzS4.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-D6hFDMqb.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-D6hFDMqb.js +0 -1
- package/web-shell/assets/cose-bilkent-JH36ORCC-Db2FYN85.js +0 -1
- package/web-shell/assets/cynefin-OW5HDTMX-i4GwmBVy.js +0 -178
- package/web-shell/assets/dagre-3AP2YEHR-CF9XVrD9.js +0 -4
- package/web-shell/assets/diagram-S7CK7UJ4-DD5PJfSm.js +0 -30
- package/web-shell/assets/diagram-UQ7AKVKN-CjD_sBMj.js +0 -41
- package/web-shell/assets/diagram-VSXAHHWV-U5WwMqyA.js +0 -3
- package/web-shell/assets/diagram-VX7I27RA-BujpHJJf.js +0 -24
- package/web-shell/assets/diagram-Z3DM3KII-3ZLtKEXo.js +0 -24
- package/web-shell/assets/flowDiagram-A5DVABFB-9DwDuIyr.js +0 -168
- package/web-shell/assets/gitGraphDiagram-WWUBYQGX-C_pPFiTR.js +0 -106
- package/web-shell/assets/index-BYWs4JWq.js +0 -3
- package/web-shell/assets/index-D3YS6KuJ.js +0 -2173
- package/web-shell/assets/index-eBxK3rs2.css +0 -36
- package/web-shell/assets/ishikawaDiagram-5VMMS53U-ktpJFq4r.js +0 -70
- package/web-shell/assets/kanban-definition-3QL26DDD-m_gG00Yt.js +0 -89
- package/web-shell/assets/mermaid.core-DSCYB_2P.js +0 -312
- package/web-shell/assets/mindmap-definition-FBJOCRG2-DRQbT8w-.js +0 -96
- package/web-shell/assets/pieDiagram-E7YTZNPT-BvIGQCSd.js +0 -39
- package/web-shell/assets/quadrantDiagram-AXDQQJYC-BDQtfpU-.js +0 -7
- package/web-shell/assets/sizeCapture-X5ZJPWSS-BB7YY4Tl.js +0 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-C4CbdvGa.js +0 -1
- package/web-shell/assets/swimlanes-XN3QIQJK-D94vOoxZ.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN--QNSIOC8.js +0 -8
- package/web-shell/assets/timeline-definition-24CTP7MA-C9C8uEYm.js +0 -120
- package/web-shell/assets/vennDiagram-4TSXK5OY-CYzMHbVW.js +0 -34
- package/web-shell/assets/wardleyDiagram-VM6X3IG4-G9nhtLES.js +0 -78
- package/chunks/{open-with-auth-6MVIHMXB.js → open-with-auth-XFCCJOO6.js} +3 -3
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
sanitizePromptText,
|
|
15
15
|
sanitizeSenderName,
|
|
16
16
|
truncateUtf16Units
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-EPVEPTI3.js";
|
|
18
18
|
import "./chunk-IJOS26LH.js";
|
|
19
19
|
import "./chunk-CQ35AJ4Z.js";
|
|
20
20
|
import "./chunk-DMTGGOSA.js";
|
|
@@ -8655,6 +8655,10 @@ function nonEmptyString(value) {
|
|
|
8655
8655
|
return trimmed || void 0;
|
|
8656
8656
|
}
|
|
8657
8657
|
__name(nonEmptyString, "nonEmptyString");
|
|
8658
|
+
function richTextPartType(part) {
|
|
8659
|
+
return part.type || part.msgType || "text";
|
|
8660
|
+
}
|
|
8661
|
+
__name(richTextPartType, "richTextPartType");
|
|
8658
8662
|
function parseJsonArray(value) {
|
|
8659
8663
|
if (Array.isArray(value))
|
|
8660
8664
|
return value;
|
|
@@ -8844,9 +8848,6 @@ ${boundedLines.join("\n")}`);
|
|
|
8844
8848
|
}
|
|
8845
8849
|
__name(formatChatRecord, "formatChatRecord");
|
|
8846
8850
|
var DEDUP_TTL_MS = 5 * 60 * 1e3;
|
|
8847
|
-
var BACKGROUND_RESPONSE_AGGREGATION_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
8848
|
-
var BACKGROUND_RESPONSE_AGGREGATION_RETRY_MS = 30 * 1e3;
|
|
8849
|
-
var BACKGROUND_RESPONSE_AGGREGATION_MAX_RETRIES = 3;
|
|
8850
8851
|
var ACK_REACTION_NAME = "\u{1F440}";
|
|
8851
8852
|
var ACK_EMOTION_ID = "2659900";
|
|
8852
8853
|
var ACK_EMOTION_BG_ID = "im_bg_1";
|
|
@@ -9043,30 +9044,6 @@ async function withConnectLoggingSuppressed(connect) {
|
|
|
9043
9044
|
}
|
|
9044
9045
|
}
|
|
9045
9046
|
__name(withConnectLoggingSuppressed, "withConnectLoggingSuppressed");
|
|
9046
|
-
var ProactiveTextDeliveryError = class extends Error {
|
|
9047
|
-
static {
|
|
9048
|
-
__name(this, "ProactiveTextDeliveryError");
|
|
9049
|
-
}
|
|
9050
|
-
plan;
|
|
9051
|
-
retryable;
|
|
9052
|
-
constructor(plan, cause) {
|
|
9053
|
-
super(cause instanceof Error ? cause.message : String(cause), { cause });
|
|
9054
|
-
this.plan = plan;
|
|
9055
|
-
if (cause instanceof DingtalkCardRequestError) {
|
|
9056
|
-
this.retryable = cause.retryable;
|
|
9057
|
-
}
|
|
9058
|
-
}
|
|
9059
|
-
};
|
|
9060
|
-
var ReplyTextDeliveryError = class extends Error {
|
|
9061
|
-
static {
|
|
9062
|
-
__name(this, "ReplyTextDeliveryError");
|
|
9063
|
-
}
|
|
9064
|
-
plan;
|
|
9065
|
-
constructor(plan, cause) {
|
|
9066
|
-
super(cause instanceof Error ? cause.message : String(cause), { cause });
|
|
9067
|
-
this.plan = plan;
|
|
9068
|
-
}
|
|
9069
|
-
};
|
|
9070
9047
|
var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
9071
9048
|
static {
|
|
9072
9049
|
__name(this, "DingtalkChannel");
|
|
@@ -9101,7 +9078,6 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9101
9078
|
*/
|
|
9102
9079
|
proactiveToken;
|
|
9103
9080
|
interactiveCardConfig;
|
|
9104
|
-
aggregateBackgroundAgentResponses;
|
|
9105
9081
|
interactiveCardClient;
|
|
9106
9082
|
statusCardController;
|
|
9107
9083
|
questionCardController;
|
|
@@ -9114,10 +9090,6 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9114
9090
|
// boundary, input requested) mints a fresh segment UUID but the projection
|
|
9115
9091
|
// state must survive it, or a marker split across the reset leaks.
|
|
9116
9092
|
fileProjectors = /* @__PURE__ */ new Map();
|
|
9117
|
-
backgroundResponseAggregations = /* @__PURE__ */ new Map();
|
|
9118
|
-
detachedBackgroundResponseAggregations = /* @__PURE__ */ new Set();
|
|
9119
|
-
pendingBackgroundResponseTerminals = /* @__PURE__ */ new Map();
|
|
9120
|
-
detachedPendingBackgroundResponseTerminals = /* @__PURE__ */ new Set();
|
|
9121
9093
|
constructor(name, config, bridge, options) {
|
|
9122
9094
|
super(name, config, bridge, options);
|
|
9123
9095
|
this.atSender = config["atSender"] === true;
|
|
@@ -9136,11 +9108,6 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9136
9108
|
this.config.instructions += FILE_INSTRUCTIONS;
|
|
9137
9109
|
}
|
|
9138
9110
|
this.interactiveCardConfig = parseDingtalkInteractiveCardConfig(config.interactiveCards);
|
|
9139
|
-
const rawAggregateBackgroundAgentResponses = config.aggregateBackgroundAgentResponses;
|
|
9140
|
-
if (rawAggregateBackgroundAgentResponses !== void 0 && typeof rawAggregateBackgroundAgentResponses !== "boolean") {
|
|
9141
|
-
throw new Error(`Channel "${name}" aggregateBackgroundAgentResponses must be a boolean.`);
|
|
9142
|
-
}
|
|
9143
|
-
this.aggregateBackgroundAgentResponses = rawAggregateBackgroundAgentResponses === true;
|
|
9144
9111
|
if (!config.clientId || !config.clientSecret) {
|
|
9145
9112
|
throw new Error(`Channel "${name}" requires clientId and clientSecret for DingTalk.`);
|
|
9146
9113
|
}
|
|
@@ -9552,25 +9519,18 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9552
9519
|
}
|
|
9553
9520
|
return replaceImageMarkers(text, markers, replacements);
|
|
9554
9521
|
}
|
|
9555
|
-
async sendReply(chatId, text, atUserId, sourceLabel, prepared = false
|
|
9522
|
+
async sendReply(chatId, text, atUserId, sourceLabel, prepared = false) {
|
|
9556
9523
|
const webhook = this.webhooks.get(chatId);
|
|
9557
9524
|
if (!webhook) {
|
|
9558
9525
|
process.stderr.write(`[DingTalk:${this.name}] No webhook for chatId ${chatId}, cannot send.
|
|
9559
9526
|
`);
|
|
9560
|
-
if (failOnHttpError) {
|
|
9561
|
-
throw new Error("DingTalk session webhook unavailable");
|
|
9562
|
-
}
|
|
9563
9527
|
return;
|
|
9564
9528
|
}
|
|
9565
9529
|
const outgoingText = prepared ? text : await this.prepareReplyOutput(chatId, text);
|
|
9566
9530
|
if (!outgoingText.trim())
|
|
9567
9531
|
return;
|
|
9568
9532
|
const plan = this.createReplyTextDelivery(outgoingText, atUserId, sourceLabel);
|
|
9569
|
-
|
|
9570
|
-
await this.deliverReplyText(chatId, plan, failOnHttpError);
|
|
9571
|
-
} catch (error) {
|
|
9572
|
-
throw new ReplyTextDeliveryError(plan, error);
|
|
9573
|
-
}
|
|
9533
|
+
await this.deliverReplyText(chatId, plan);
|
|
9574
9534
|
}
|
|
9575
9535
|
createReplyTextDelivery(outgoingText, atUserId, sourceLabel) {
|
|
9576
9536
|
const mentionPrefix = atUserId ? `@${atUserId}
|
|
@@ -9591,12 +9551,9 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9591
9551
|
...atUserId ? { atUserId } : {}
|
|
9592
9552
|
};
|
|
9593
9553
|
}
|
|
9594
|
-
async deliverReplyText(chatId, plan
|
|
9554
|
+
async deliverReplyText(chatId, plan) {
|
|
9595
9555
|
const webhook = this.webhooks.get(chatId);
|
|
9596
9556
|
if (!webhook) {
|
|
9597
|
-
if (failOnHttpError) {
|
|
9598
|
-
throw new Error("DingTalk session webhook unavailable");
|
|
9599
|
-
}
|
|
9600
9557
|
return;
|
|
9601
9558
|
}
|
|
9602
9559
|
while (plan.nextChunk < plan.chunks.length) {
|
|
@@ -9636,19 +9593,6 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9636
9593
|
const detail = await resp.text().catch(() => "");
|
|
9637
9594
|
process.stderr.write(`[DingTalk:${this.name}] sendMessage failed: HTTP ${resp.status} ${detail}
|
|
9638
9595
|
`);
|
|
9639
|
-
if (failOnHttpError) {
|
|
9640
|
-
throw new Error(`DingTalk reply send failed: HTTP ${resp.status} ${detail}`);
|
|
9641
|
-
}
|
|
9642
|
-
} else if (failOnHttpError) {
|
|
9643
|
-
const payload = await resp.clone().json().catch(() => void 0);
|
|
9644
|
-
const response = payload && typeof payload === "object" ? payload : void 0;
|
|
9645
|
-
const value = response?.["errcode"] ?? response?.["code"];
|
|
9646
|
-
if (value !== void 0 && String(value) !== "0") {
|
|
9647
|
-
const detail = sanitizeLogText(String(response?.["errmsg"] ?? response?.["message"] ?? value), 300);
|
|
9648
|
-
process.stderr.write(`[DingTalk:${this.name}] sendMessage failed: ${detail}
|
|
9649
|
-
`);
|
|
9650
|
-
throw new Error(`DingTalk reply send failed: ${detail}`);
|
|
9651
|
-
}
|
|
9652
9596
|
}
|
|
9653
9597
|
plan.nextChunk++;
|
|
9654
9598
|
}
|
|
@@ -9683,11 +9627,7 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9683
9627
|
const plan = await this.createProactiveTextDelivery(target, text, sourceLabel);
|
|
9684
9628
|
if (!plan)
|
|
9685
9629
|
return;
|
|
9686
|
-
|
|
9687
|
-
await this.deliverProactiveText(target, plan);
|
|
9688
|
-
} catch (error) {
|
|
9689
|
-
throw new ProactiveTextDeliveryError(plan, error);
|
|
9690
|
-
}
|
|
9630
|
+
await this.deliverProactiveText(target, plan);
|
|
9691
9631
|
}
|
|
9692
9632
|
async createProactiveTextDelivery(target, text, sourceLabel) {
|
|
9693
9633
|
const outgoingText = await this.prepareFileOutput(text, (file, mediaId) => this.sendProactiveFile(target, file, mediaId));
|
|
@@ -9922,7 +9862,6 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9922
9862
|
this.finishReaction(state.chatId, state.messageId, state.sessionId);
|
|
9923
9863
|
}
|
|
9924
9864
|
this.statusCardController?.dispose();
|
|
9925
|
-
this.drainBackgroundResponseAggregations();
|
|
9926
9865
|
this.activeReactionKeys.clear();
|
|
9927
9866
|
this.sessionReactionKeys.clear();
|
|
9928
9867
|
this.reactionStates.clear();
|
|
@@ -10171,7 +10110,6 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
10171
10110
|
}
|
|
10172
10111
|
}
|
|
10173
10112
|
this.sessionMentionTargets.delete(sessionId);
|
|
10174
|
-
this.drainBackgroundResponseAggregations(sessionId);
|
|
10175
10113
|
const cardRunId = this.cardRunBySession.get(sessionId);
|
|
10176
10114
|
if (cardRunId) {
|
|
10177
10115
|
this.cardRunBySession.delete(sessionId);
|
|
@@ -10207,9 +10145,6 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
10207
10145
|
this.cardRuns.delete(runId);
|
|
10208
10146
|
}
|
|
10209
10147
|
}
|
|
10210
|
-
onSessionRetiring(sessionId) {
|
|
10211
|
-
this.drainBackgroundResponseAggregations(sessionId);
|
|
10212
|
-
}
|
|
10213
10148
|
onTaskLifecycle(event) {
|
|
10214
10149
|
if (event.type === "started") {
|
|
10215
10150
|
this.startReaction(event.chatId, event.messageId, event.sessionId);
|
|
@@ -10346,573 +10281,11 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
10346
10281
|
this.sessionMentionTargets.delete(sessionId);
|
|
10347
10282
|
this.stopReaction(chatId, messageId, sessionId);
|
|
10348
10283
|
}
|
|
10349
|
-
|
|
10350
|
-
async dispatchBackgroundResponse(sessionId, text, context) {
|
|
10351
|
-
const target = this.router.getTarget(sessionId);
|
|
10352
|
-
if (!target || target.channelName !== this.name || context !== void 0 && context.kind !== "agent") {
|
|
10353
|
-
return super.dispatchBackgroundResponse(sessionId, text, context);
|
|
10354
|
-
}
|
|
10355
|
-
const canAggregate = this.aggregateBackgroundAgentResponses && context?.kind === "agent" && typeof context.turnComplete === "boolean";
|
|
10356
|
-
if (!canAggregate) {
|
|
10357
|
-
if (text.trim().length === 0) {
|
|
10358
|
-
return super.dispatchBackgroundResponse(sessionId, text, context);
|
|
10359
|
-
}
|
|
10360
|
-
return super.dispatchBackgroundResponse(sessionId, this.formatBackgroundAgentResponse(text, context?.label), context);
|
|
10361
|
-
}
|
|
10362
|
-
const key = JSON.stringify([sessionId, context.taskId, context.turnId]);
|
|
10363
|
-
let current = this.backgroundResponseAggregations.get(key);
|
|
10364
|
-
let parked = this.pendingBackgroundResponseTerminals.get(key);
|
|
10365
|
-
if (current?.turnComplete === true) {
|
|
10366
|
-
this.detachedBackgroundResponseAggregations.add(current);
|
|
10367
|
-
this.backgroundResponseAggregations.delete(key);
|
|
10368
|
-
current = void 0;
|
|
10369
|
-
}
|
|
10370
|
-
if (!current && (parked?.turnEnded === true || parked?.turnComplete === true && (parked.retryTimer || parked.retryInFlight || parked.resolvers > 0))) {
|
|
10371
|
-
if (!parked.turnEnded) {
|
|
10372
|
-
this.detachedPendingBackgroundResponseTerminals.add(parked);
|
|
10373
|
-
}
|
|
10374
|
-
parked = { sessionId, target, resolvers: 0, held: [] };
|
|
10375
|
-
this.pendingBackgroundResponseTerminals.set(key, parked);
|
|
10376
|
-
}
|
|
10377
|
-
if (!current && text.trim().length === 0) {
|
|
10378
|
-
if (!parked || parked.resolvers === 0 && !parked.retryTimer && !parked.retryInFlight && !parked.resolutionDropped && !parked.turnComplete) {
|
|
10379
|
-
if (parked)
|
|
10380
|
-
this.pendingBackgroundResponseTerminals.delete(key);
|
|
10381
|
-
return super.dispatchBackgroundResponse(sessionId, text, context);
|
|
10382
|
-
}
|
|
10383
|
-
if (context.turnComplete) {
|
|
10384
|
-
parked.turnComplete = true;
|
|
10385
|
-
parked.status = context.status;
|
|
10386
|
-
parked.label = context.label ?? parked.label;
|
|
10387
|
-
parked.completionPartial = context.partial === true;
|
|
10388
|
-
if (parked.resolvers === 0 && !parked.retryTimer && !parked.retryInFlight && (parked.retryAttempts ?? 0) >= BACKGROUND_RESPONSE_AGGREGATION_MAX_RETRIES) {
|
|
10389
|
-
parked.turnEnded = true;
|
|
10390
|
-
this.pendingBackgroundResponseTerminals.delete(key);
|
|
10391
|
-
}
|
|
10392
|
-
}
|
|
10393
|
-
return;
|
|
10394
|
-
}
|
|
10395
|
-
if (!current) {
|
|
10396
|
-
parked ??= { sessionId, target, resolvers: 0, held: [] };
|
|
10397
|
-
this.pendingBackgroundResponseTerminals.set(key, parked);
|
|
10398
|
-
this.holdPendingBackgroundResponse(parked, text, context);
|
|
10399
|
-
parked.resolvers++;
|
|
10400
|
-
try {
|
|
10401
|
-
let delivery;
|
|
10402
|
-
try {
|
|
10403
|
-
delivery = await this.resolveBackgroundResponseDelivery(sessionId);
|
|
10404
|
-
} catch (error) {
|
|
10405
|
-
if (parked.resolvers === 1 && !this.backgroundResponseAggregations.has(key)) {
|
|
10406
|
-
this.scheduleBackgroundResponseResolutionRetry(key, sessionId, parked);
|
|
10407
|
-
} else {
|
|
10408
|
-
const existing = this.backgroundResponseAggregations.get(key);
|
|
10409
|
-
if (existing) {
|
|
10410
|
-
if (parked.held.length > 0) {
|
|
10411
|
-
this.applyHeldBackgroundResponses(existing, parked);
|
|
10412
|
-
}
|
|
10413
|
-
this.applyPendingBackgroundResponseTerminal(existing, parked);
|
|
10414
|
-
if (parked.resolvers === 1) {
|
|
10415
|
-
if (existing.turnComplete) {
|
|
10416
|
-
await this.completeBackgroundResponseAggregation(key, existing);
|
|
10417
|
-
} else {
|
|
10418
|
-
this.scheduleBackgroundResponseAggregationFlush(key, existing);
|
|
10419
|
-
}
|
|
10420
|
-
}
|
|
10421
|
-
}
|
|
10422
|
-
}
|
|
10423
|
-
throw error;
|
|
10424
|
-
}
|
|
10425
|
-
if (!delivery || this.router.getTarget(sessionId) !== delivery.target) {
|
|
10426
|
-
if (parked.resolvers === 1 && !this.backgroundResponseAggregations.has(key)) {
|
|
10427
|
-
this.scheduleBackgroundResponseResolutionRetry(key, sessionId, parked);
|
|
10428
|
-
} else {
|
|
10429
|
-
const existing = this.backgroundResponseAggregations.get(key);
|
|
10430
|
-
if (existing) {
|
|
10431
|
-
if (parked.held.length > 0) {
|
|
10432
|
-
this.applyHeldBackgroundResponses(existing, parked);
|
|
10433
|
-
}
|
|
10434
|
-
this.applyPendingBackgroundResponseTerminal(existing, parked);
|
|
10435
|
-
if (parked.resolvers === 1) {
|
|
10436
|
-
if (existing.turnComplete) {
|
|
10437
|
-
await this.completeBackgroundResponseAggregation(key, existing);
|
|
10438
|
-
} else {
|
|
10439
|
-
this.scheduleBackgroundResponseAggregationFlush(key, existing);
|
|
10440
|
-
}
|
|
10441
|
-
}
|
|
10442
|
-
}
|
|
10443
|
-
}
|
|
10444
|
-
return;
|
|
10445
|
-
}
|
|
10446
|
-
if (parked.retiring || this.pendingBackgroundResponseTerminals.get(key) !== parked) {
|
|
10447
|
-
await this.flushDetachedBackgroundResponse(key, sessionId, parked, delivery);
|
|
10448
|
-
return;
|
|
10449
|
-
}
|
|
10450
|
-
if (parked.retryTimer) {
|
|
10451
|
-
clearTimeout(parked.retryTimer);
|
|
10452
|
-
parked.retryTimer = void 0;
|
|
10453
|
-
}
|
|
10454
|
-
current = this.backgroundResponseAggregations.get(key) ?? this.createBackgroundResponseAggregation(key, sessionId, parked.held[0]?.context ?? context, delivery.target, delivery.sourceLabel);
|
|
10455
|
-
this.applyHeldBackgroundResponses(current, parked);
|
|
10456
|
-
this.applyPendingBackgroundResponseTerminal(current, parked);
|
|
10457
|
-
if (parked.resolutionDropped) {
|
|
10458
|
-
current.resolutionDropped = true;
|
|
10459
|
-
parked.resolutionDropped = void 0;
|
|
10460
|
-
}
|
|
10461
|
-
} finally {
|
|
10462
|
-
parked.resolvers--;
|
|
10463
|
-
if (this.pendingBackgroundResponseTerminals.get(key) === parked && parked.resolvers === 0 && !parked.retryTimer && parked.held.length === 0 && (!parked.resolutionDropped || parked.turnEnded)) {
|
|
10464
|
-
this.pendingBackgroundResponseTerminals.delete(key);
|
|
10465
|
-
}
|
|
10466
|
-
}
|
|
10467
|
-
if (!current)
|
|
10468
|
-
return;
|
|
10469
|
-
if (current.turnComplete && parked.resolvers > 0)
|
|
10470
|
-
return;
|
|
10471
|
-
if (!current.turnComplete) {
|
|
10472
|
-
this.scheduleBackgroundResponseAggregationFlush(key, current);
|
|
10473
|
-
} else {
|
|
10474
|
-
await this.completeBackgroundResponseAggregation(key, current);
|
|
10475
|
-
}
|
|
10476
|
-
return;
|
|
10477
|
-
}
|
|
10478
|
-
current.status = context.status;
|
|
10479
|
-
current.label = context.label ?? current.label;
|
|
10480
|
-
if (text.trim().length > 0)
|
|
10481
|
-
current.parts.push(text);
|
|
10482
|
-
if (context.turnComplete && parked && parked.resolvers > 0) {
|
|
10483
|
-
parked.turnComplete = true;
|
|
10484
|
-
parked.status = context.status;
|
|
10485
|
-
parked.label = context.label ?? parked.label;
|
|
10486
|
-
parked.completionPartial = context.partial === true;
|
|
10487
|
-
} else if (context.turnComplete) {
|
|
10488
|
-
current.turnComplete = true;
|
|
10489
|
-
current.completionPartial = context.partial === true;
|
|
10490
|
-
} else if (parked?.turnComplete && parked.resolvers === 0) {
|
|
10491
|
-
current.turnComplete = true;
|
|
10492
|
-
current.status = parked.status ?? current.status;
|
|
10493
|
-
current.label = parked.label ?? current.label;
|
|
10494
|
-
current.completionPartial = parked.completionPartial === true;
|
|
10495
|
-
}
|
|
10496
|
-
current.resolutionDropped ||= parked?.resolutionDropped;
|
|
10497
|
-
if (!current.turnComplete) {
|
|
10498
|
-
this.scheduleBackgroundResponseAggregationFlush(key, current);
|
|
10499
|
-
return;
|
|
10500
|
-
}
|
|
10501
|
-
await this.completeBackgroundResponseAggregation(key, current);
|
|
10502
|
-
}
|
|
10503
|
-
async flushBackgroundResponseAggregation(key, aggregation) {
|
|
10504
|
-
if (this.backgroundResponseAggregations.get(key) !== aggregation && !this.detachedBackgroundResponseAggregations.has(aggregation) || aggregation.flushing) {
|
|
10505
|
-
return;
|
|
10506
|
-
}
|
|
10507
|
-
this.refreshBackgroundResponseDelivery(aggregation);
|
|
10508
|
-
if (aggregation.retryTimer)
|
|
10509
|
-
clearTimeout(aggregation.retryTimer);
|
|
10510
|
-
aggregation.retryTimer = void 0;
|
|
10511
|
-
let delivery = aggregation.delivery;
|
|
10512
|
-
if (!delivery) {
|
|
10513
|
-
if (aggregation.parts.length === 0) {
|
|
10514
|
-
if (!this.owesTerminalBackgroundResponseCard(aggregation)) {
|
|
10515
|
-
if (aggregation.retiring || aggregation.turnComplete) {
|
|
10516
|
-
this.removeBackgroundResponseAggregation(key, aggregation);
|
|
10517
|
-
} else {
|
|
10518
|
-
this.scheduleBackgroundResponseAggregationFlush(key, aggregation);
|
|
10519
|
-
}
|
|
10520
|
-
return;
|
|
10521
|
-
}
|
|
10522
|
-
}
|
|
10523
|
-
if (aggregation.timeoutTimer)
|
|
10524
|
-
clearTimeout(aggregation.timeoutTimer);
|
|
10525
|
-
aggregation.timeoutTimer = void 0;
|
|
10526
|
-
const parts = aggregation.parts.splice(0);
|
|
10527
|
-
delivery = {
|
|
10528
|
-
status: aggregation.status,
|
|
10529
|
-
label: aggregation.label,
|
|
10530
|
-
parts,
|
|
10531
|
-
partial: this.isPartialBackgroundResponseDelivery(aggregation, parts.length),
|
|
10532
|
-
attempts: 0,
|
|
10533
|
-
composedTurnComplete: aggregation.turnComplete === true
|
|
10534
|
-
};
|
|
10535
|
-
aggregation.delivery = delivery;
|
|
10536
|
-
}
|
|
10537
|
-
const body = this.formatBackgroundResponseAggregation(delivery);
|
|
10538
|
-
aggregation.flushing = true;
|
|
10539
|
-
let error;
|
|
10540
|
-
try {
|
|
10541
|
-
if (delivery.proactivePlan) {
|
|
10542
|
-
await this.deliverProactiveText(aggregation.target, delivery.proactivePlan);
|
|
10543
|
-
} else if (delivery.replyPlan) {
|
|
10544
|
-
await this.deliverReplyText(aggregation.target.chatId, delivery.replyPlan, true);
|
|
10545
|
-
} else if (this.supportsProactiveSend() && this.supportsProactiveTarget(aggregation.target)) {
|
|
10546
|
-
await this.deliverBackgroundResponseToTarget(aggregation.sessionId, body, {
|
|
10547
|
-
target: aggregation.target,
|
|
10548
|
-
sourceLabel: aggregation.sourceLabel
|
|
10549
|
-
});
|
|
10550
|
-
} else {
|
|
10551
|
-
delivery.preparedReplyBody ??= await this.prepareReplyOutput(aggregation.target.chatId, body);
|
|
10552
|
-
await this.deliverBackgroundReply(aggregation.target.chatId, delivery.preparedReplyBody, aggregation.sessionId, aggregation.sourceLabel, true, true);
|
|
10553
|
-
}
|
|
10554
|
-
} catch (caught) {
|
|
10555
|
-
error = caught;
|
|
10556
|
-
if (caught instanceof ProactiveTextDeliveryError) {
|
|
10557
|
-
delivery.proactivePlan = caught.plan;
|
|
10558
|
-
} else if (caught instanceof ReplyTextDeliveryError) {
|
|
10559
|
-
delivery.replyPlan = caught.plan;
|
|
10560
|
-
}
|
|
10561
|
-
} finally {
|
|
10562
|
-
aggregation.flushing = false;
|
|
10563
|
-
}
|
|
10564
|
-
if (error === void 0) {
|
|
10565
|
-
aggregation.delivery = void 0;
|
|
10566
|
-
aggregation.delivered = true;
|
|
10567
|
-
if (delivery.composedTurnComplete === true && aggregation.turnComplete && delivery.partial !== true && !aggregation.retiring) {
|
|
10568
|
-
aggregation.completionDelivered = true;
|
|
10569
|
-
}
|
|
10570
|
-
if (aggregation.retiring || aggregation.turnComplete) {
|
|
10571
|
-
await this.flushBackgroundResponseAggregation(key, aggregation);
|
|
10572
|
-
} else {
|
|
10573
|
-
this.scheduleBackgroundResponseAggregationFlush(key, aggregation);
|
|
10574
|
-
}
|
|
10575
|
-
return;
|
|
10576
|
-
}
|
|
10577
|
-
delivery.attempts++;
|
|
10578
|
-
process.stderr.write(`[DingTalk:${this.name}] background response delivery failed (attempt ${delivery.attempts}): ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
10579
|
-
`);
|
|
10580
|
-
if (delivery.attempts >= BACKGROUND_RESPONSE_AGGREGATION_MAX_RETRIES || // A permanently rejected send (an invalid appkey, a missing app) cannot
|
|
10581
|
-
// succeed later; retrying it only spends the chat's send quota.
|
|
10582
|
-
error instanceof ProactiveTextDeliveryError && error.retryable === false) {
|
|
10583
|
-
aggregation.delivery = void 0;
|
|
10584
|
-
aggregation.dropped = true;
|
|
10585
|
-
if (aggregation.parts.length === 0) {
|
|
10586
|
-
if (aggregation.retiring || aggregation.turnComplete) {
|
|
10587
|
-
this.removeBackgroundResponseAggregation(key, aggregation);
|
|
10588
|
-
} else {
|
|
10589
|
-
this.scheduleBackgroundResponseAggregationFlush(key, aggregation);
|
|
10590
|
-
}
|
|
10591
|
-
} else if (aggregation.retiring || aggregation.turnComplete) {
|
|
10592
|
-
await this.flushBackgroundResponseAggregation(key, aggregation);
|
|
10593
|
-
} else {
|
|
10594
|
-
this.scheduleBackgroundResponseAggregationFlush(key, aggregation);
|
|
10595
|
-
}
|
|
10596
|
-
return;
|
|
10597
|
-
}
|
|
10598
|
-
aggregation.retryTimer = setTimeout(() => {
|
|
10599
|
-
aggregation.retryTimer = void 0;
|
|
10600
|
-
void this.flushBackgroundResponseAggregation(key, aggregation);
|
|
10601
|
-
}, BACKGROUND_RESPONSE_AGGREGATION_RETRY_MS);
|
|
10602
|
-
aggregation.retryTimer.unref?.();
|
|
10603
|
-
}
|
|
10604
|
-
/**
|
|
10605
|
-
* A card carries `(部分)` whenever it is not the turn's whole output: the
|
|
10606
|
-
* turn is still open, earlier text already went out (or was given up on),
|
|
10607
|
-
* or the turn itself ended early.
|
|
10608
|
-
*/
|
|
10609
|
-
isPartialBackgroundResponseDelivery(aggregation, partCount) {
|
|
10610
|
-
return partCount > 0 && (aggregation.delivered === true || aggregation.dropped === true || aggregation.resolutionDropped === true || aggregation.retiring === true || aggregation.completionPartial === true || aggregation.turnComplete !== true);
|
|
10611
|
-
}
|
|
10612
|
-
/**
|
|
10613
|
-
* A turn that outran the bounded wait had its text delivered under the
|
|
10614
|
-
* `(部分)` label. When it then completes normally with nothing buffered,
|
|
10615
|
-
* a header-only card is the only way the chat ever learns it finished.
|
|
10616
|
-
*/
|
|
10617
|
-
owesTerminalBackgroundResponseCard(aggregation) {
|
|
10618
|
-
return aggregation.turnComplete === true && aggregation.delivered === true && aggregation.completionDelivered !== true && aggregation.retiring !== true && aggregation.completionPartial !== true && aggregation.dropped !== true && aggregation.resolutionDropped !== true;
|
|
10619
|
-
}
|
|
10620
|
-
refreshBackgroundResponseDelivery(aggregation) {
|
|
10621
|
-
const delivery = aggregation.delivery;
|
|
10622
|
-
if (!delivery || aggregation.flushing)
|
|
10623
|
-
return;
|
|
10624
|
-
const plan = delivery.proactivePlan ?? delivery.replyPlan;
|
|
10625
|
-
if (plan && plan.nextChunk > 0)
|
|
10626
|
-
return;
|
|
10627
|
-
const body = this.formatBackgroundResponseAggregation(delivery);
|
|
10628
|
-
const header = body.split("\n", 1)[0];
|
|
10629
|
-
const replaceHeader = /* @__PURE__ */ __name((text) => text.replace(/## (?:✅|❌|⏹️) Agent · [^\n]+/, () => header), "replaceHeader");
|
|
10630
|
-
if (plan) {
|
|
10631
|
-
plan.title = extractTitle(body);
|
|
10632
|
-
plan.chunks[0] = replaceHeader(plan.chunks[0]);
|
|
10633
|
-
}
|
|
10634
|
-
if (delivery.preparedReplyBody) {
|
|
10635
|
-
delivery.preparedReplyBody = replaceHeader(delivery.preparedReplyBody);
|
|
10636
|
-
}
|
|
10637
|
-
delivery.composedTurnComplete = aggregation.turnComplete === true;
|
|
10638
|
-
}
|
|
10639
|
-
removeBackgroundResponseAggregation(key, aggregation) {
|
|
10640
|
-
if (this.backgroundResponseAggregations.get(key) === aggregation) {
|
|
10641
|
-
this.backgroundResponseAggregations.delete(key);
|
|
10642
|
-
}
|
|
10643
|
-
this.detachedBackgroundResponseAggregations.delete(aggregation);
|
|
10644
|
-
}
|
|
10645
|
-
drainBackgroundResponseAggregations(sessionId) {
|
|
10646
|
-
for (const [key, pending] of this.pendingBackgroundResponseTerminals) {
|
|
10647
|
-
if (sessionId !== void 0 && pending.sessionId !== sessionId)
|
|
10648
|
-
continue;
|
|
10649
|
-
if (pending.retryTimer)
|
|
10650
|
-
clearTimeout(pending.retryTimer);
|
|
10651
|
-
pending.retryTimer = void 0;
|
|
10652
|
-
pending.retiring = true;
|
|
10653
|
-
pending.turnComplete = true;
|
|
10654
|
-
pending.completionPartial = true;
|
|
10655
|
-
this.pendingBackgroundResponseTerminals.delete(key);
|
|
10656
|
-
this.detachedPendingBackgroundResponseTerminals.add(pending);
|
|
10657
|
-
}
|
|
10658
|
-
for (const pending of this.detachedPendingBackgroundResponseTerminals) {
|
|
10659
|
-
if (sessionId !== void 0 && pending.sessionId !== sessionId)
|
|
10660
|
-
continue;
|
|
10661
|
-
if (pending.retryTimer)
|
|
10662
|
-
clearTimeout(pending.retryTimer);
|
|
10663
|
-
pending.retryTimer = void 0;
|
|
10664
|
-
pending.retiring = true;
|
|
10665
|
-
pending.turnComplete = true;
|
|
10666
|
-
pending.completionPartial = true;
|
|
10667
|
-
if (pending.held.length > 0 && this.router.getTarget(pending.sessionId) === pending.target) {
|
|
10668
|
-
void this.flushDetachedBackgroundResponse("", pending.sessionId, pending, { target: pending.target }).catch((error) => {
|
|
10669
|
-
process.stderr.write(`[DingTalk:${this.name}] background response delivery failed during drain: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
10670
|
-
`);
|
|
10671
|
-
});
|
|
10672
|
-
} else if (pending.held.length > 0) {
|
|
10673
|
-
process.stderr.write(`[DingTalk:${this.name}] background response target unavailable during drain; ${pending.held.length} buffered segment(s) discarded
|
|
10674
|
-
`);
|
|
10675
|
-
pending.held.length = 0;
|
|
10676
|
-
this.detachedPendingBackgroundResponseTerminals.delete(pending);
|
|
10677
|
-
} else if (pending.held.length === 0) {
|
|
10678
|
-
this.detachedPendingBackgroundResponseTerminals.delete(pending);
|
|
10679
|
-
}
|
|
10680
|
-
}
|
|
10681
|
-
const aggregations = /* @__PURE__ */ new Set([
|
|
10682
|
-
...this.backgroundResponseAggregations.values(),
|
|
10683
|
-
...this.detachedBackgroundResponseAggregations
|
|
10684
|
-
]);
|
|
10685
|
-
for (const aggregation of aggregations) {
|
|
10686
|
-
if (sessionId !== void 0 && aggregation.sessionId !== sessionId) {
|
|
10687
|
-
continue;
|
|
10688
|
-
}
|
|
10689
|
-
if (aggregation.timeoutTimer)
|
|
10690
|
-
clearTimeout(aggregation.timeoutTimer);
|
|
10691
|
-
if (aggregation.retryTimer)
|
|
10692
|
-
clearTimeout(aggregation.retryTimer);
|
|
10693
|
-
aggregation.timeoutTimer = void 0;
|
|
10694
|
-
aggregation.retryTimer = void 0;
|
|
10695
|
-
aggregation.retiring = true;
|
|
10696
|
-
aggregation.turnComplete = true;
|
|
10697
|
-
aggregation.completionPartial = true;
|
|
10698
|
-
if (!aggregation.flushing) {
|
|
10699
|
-
void this.flushBackgroundResponseAggregation(aggregation.key, aggregation);
|
|
10700
|
-
}
|
|
10701
|
-
}
|
|
10702
|
-
}
|
|
10703
|
-
createBackgroundResponseAggregation(key, sessionId, context, target, sourceLabel) {
|
|
10704
|
-
const aggregation = {
|
|
10705
|
-
key,
|
|
10706
|
-
sessionId,
|
|
10707
|
-
target,
|
|
10708
|
-
sourceLabel,
|
|
10709
|
-
status: context.status,
|
|
10710
|
-
label: context.label,
|
|
10711
|
-
parts: []
|
|
10712
|
-
};
|
|
10713
|
-
this.backgroundResponseAggregations.set(key, aggregation);
|
|
10714
|
-
return aggregation;
|
|
10715
|
-
}
|
|
10716
|
-
scheduleBackgroundResponseResolutionRetry(key, sessionId, pending) {
|
|
10717
|
-
if (pending.retiring)
|
|
10718
|
-
return;
|
|
10719
|
-
if (pending.retryTimer)
|
|
10720
|
-
return;
|
|
10721
|
-
pending.retryAttempts = (pending.retryAttempts ?? 0) + 1;
|
|
10722
|
-
if (pending.retryAttempts >= BACKGROUND_RESPONSE_AGGREGATION_MAX_RETRIES) {
|
|
10723
|
-
pending.resolutionDropped = true;
|
|
10724
|
-
pending.turnEnded = pending.turnComplete === true;
|
|
10725
|
-
pending.held.length = 0;
|
|
10726
|
-
pending.turnComplete = void 0;
|
|
10727
|
-
pending.status = void 0;
|
|
10728
|
-
pending.label = void 0;
|
|
10729
|
-
pending.completionPartial = void 0;
|
|
10730
|
-
if (pending.turnEnded) {
|
|
10731
|
-
this.detachedPendingBackgroundResponseTerminals.delete(pending);
|
|
10732
|
-
}
|
|
10733
|
-
return;
|
|
10734
|
-
}
|
|
10735
|
-
pending.retryTimer = setTimeout(() => {
|
|
10736
|
-
pending.retryTimer = void 0;
|
|
10737
|
-
pending.retryInFlight = true;
|
|
10738
|
-
void this.retryBackgroundResponseResolution(key, sessionId, pending).catch((error) => {
|
|
10739
|
-
process.stderr.write(`[DingTalk:${this.name}] background response target resolution failed: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
10740
|
-
`);
|
|
10741
|
-
}).finally(() => {
|
|
10742
|
-
pending.retryInFlight = false;
|
|
10743
|
-
if (pending.retiring || !pending.retryTimer && !pending.resolutionDropped) {
|
|
10744
|
-
this.detachedPendingBackgroundResponseTerminals.delete(pending);
|
|
10745
|
-
}
|
|
10746
|
-
if (this.pendingBackgroundResponseTerminals.get(key) === pending && pending.resolvers === 0 && !pending.retryTimer && pending.held.length === 0 && (!pending.resolutionDropped || pending.turnEnded)) {
|
|
10747
|
-
this.pendingBackgroundResponseTerminals.delete(key);
|
|
10748
|
-
}
|
|
10749
|
-
});
|
|
10750
|
-
}, BACKGROUND_RESPONSE_AGGREGATION_RETRY_MS);
|
|
10751
|
-
pending.retryTimer.unref?.();
|
|
10752
|
-
const active = this.pendingBackgroundResponseTerminals.get(key);
|
|
10753
|
-
if (!active || active === pending) {
|
|
10754
|
-
this.pendingBackgroundResponseTerminals.set(key, pending);
|
|
10755
|
-
}
|
|
10756
|
-
}
|
|
10757
|
-
async retryBackgroundResponseResolution(key, sessionId, pending) {
|
|
10758
|
-
let delivery;
|
|
10759
|
-
try {
|
|
10760
|
-
delivery = await this.resolveBackgroundResponseDelivery(sessionId);
|
|
10761
|
-
} catch (error) {
|
|
10762
|
-
if (this.pendingBackgroundResponseTerminals.get(key) === pending && !this.backgroundResponseAggregations.has(key) || this.detachedPendingBackgroundResponseTerminals.has(pending)) {
|
|
10763
|
-
this.scheduleBackgroundResponseResolutionRetry(key, sessionId, pending);
|
|
10764
|
-
}
|
|
10765
|
-
throw error;
|
|
10766
|
-
}
|
|
10767
|
-
if (!delivery || this.router.getTarget(sessionId) !== delivery.target) {
|
|
10768
|
-
if (pending.retiring) {
|
|
10769
|
-
if (pending.held.length > 0) {
|
|
10770
|
-
process.stderr.write(`[DingTalk:${this.name}] background response target unavailable during drain; ${pending.held.length} buffered segment(s) discarded
|
|
10771
|
-
`);
|
|
10772
|
-
}
|
|
10773
|
-
pending.held.length = 0;
|
|
10774
|
-
this.detachedPendingBackgroundResponseTerminals.delete(pending);
|
|
10775
|
-
return;
|
|
10776
|
-
}
|
|
10777
|
-
if (this.pendingBackgroundResponseTerminals.get(key) === pending && !this.backgroundResponseAggregations.has(key) || this.detachedPendingBackgroundResponseTerminals.has(pending)) {
|
|
10778
|
-
this.scheduleBackgroundResponseResolutionRetry(key, sessionId, pending);
|
|
10779
|
-
}
|
|
10780
|
-
return;
|
|
10781
|
-
}
|
|
10782
|
-
if (pending.retiring || this.pendingBackgroundResponseTerminals.get(key) !== pending || pending.turnComplete) {
|
|
10783
|
-
await this.flushDetachedBackgroundResponse(key, sessionId, pending, delivery);
|
|
10784
|
-
return;
|
|
10785
|
-
}
|
|
10786
|
-
const first = pending.held[0];
|
|
10787
|
-
if (!first)
|
|
10788
|
-
return;
|
|
10789
|
-
const aggregation = this.createBackgroundResponseAggregation(key, sessionId, first.context, delivery.target, delivery.sourceLabel);
|
|
10790
|
-
this.applyHeldBackgroundResponses(aggregation, pending);
|
|
10791
|
-
if (pending.resolutionDropped) {
|
|
10792
|
-
aggregation.resolutionDropped = true;
|
|
10793
|
-
pending.resolutionDropped = void 0;
|
|
10794
|
-
}
|
|
10795
|
-
if (this.pendingBackgroundResponseTerminals.get(key) === pending) {
|
|
10796
|
-
this.pendingBackgroundResponseTerminals.delete(key);
|
|
10797
|
-
}
|
|
10798
|
-
this.scheduleBackgroundResponseAggregationFlush(key, aggregation);
|
|
10799
|
-
}
|
|
10800
|
-
holdPendingBackgroundResponse(pending, text, context) {
|
|
10801
|
-
if (text.trim().length > 0)
|
|
10802
|
-
pending.held.push({ text, context });
|
|
10803
|
-
if (context.turnComplete) {
|
|
10804
|
-
pending.turnComplete = true;
|
|
10805
|
-
pending.status = context.status;
|
|
10806
|
-
pending.label = context.label ?? pending.label;
|
|
10807
|
-
pending.completionPartial = context.partial === true;
|
|
10808
|
-
}
|
|
10809
|
-
}
|
|
10810
|
-
applyHeldBackgroundResponses(aggregation, pending) {
|
|
10811
|
-
for (const { text, context } of pending.held.splice(0)) {
|
|
10812
|
-
aggregation.status = context.status;
|
|
10813
|
-
aggregation.label = context.label ?? aggregation.label;
|
|
10814
|
-
aggregation.parts.push(text);
|
|
10815
|
-
if (context.turnComplete) {
|
|
10816
|
-
aggregation.turnComplete = true;
|
|
10817
|
-
aggregation.completionPartial = context.partial === true;
|
|
10818
|
-
}
|
|
10819
|
-
}
|
|
10820
|
-
}
|
|
10821
|
-
applyPendingBackgroundResponseTerminal(aggregation, pending) {
|
|
10822
|
-
if (!pending.turnComplete)
|
|
10823
|
-
return;
|
|
10824
|
-
aggregation.turnComplete = true;
|
|
10825
|
-
aggregation.status = pending.status ?? aggregation.status;
|
|
10826
|
-
aggregation.label = pending.label ?? aggregation.label;
|
|
10827
|
-
aggregation.completionPartial = pending.completionPartial === true;
|
|
10828
|
-
pending.turnComplete = void 0;
|
|
10829
|
-
pending.status = void 0;
|
|
10830
|
-
pending.label = void 0;
|
|
10831
|
-
pending.completionPartial = void 0;
|
|
10832
|
-
}
|
|
10833
|
-
async completeBackgroundResponseAggregation(key, aggregation) {
|
|
10834
|
-
if (aggregation.delivery) {
|
|
10835
|
-
aggregation.delivery.status = aggregation.status;
|
|
10836
|
-
aggregation.delivery.label = aggregation.label ?? aggregation.delivery.label;
|
|
10837
|
-
aggregation.delivery.partial = this.isPartialBackgroundResponseDelivery(aggregation, aggregation.delivery.parts.length) || aggregation.parts.length > 0;
|
|
10838
|
-
}
|
|
10839
|
-
if (aggregation.timeoutTimer)
|
|
10840
|
-
clearTimeout(aggregation.timeoutTimer);
|
|
10841
|
-
aggregation.timeoutTimer = void 0;
|
|
10842
|
-
await this.flushBackgroundResponseAggregation(key, aggregation);
|
|
10843
|
-
}
|
|
10844
|
-
async flushDetachedBackgroundResponse(key, sessionId, pending, delivery) {
|
|
10845
|
-
const first = pending.held[0];
|
|
10846
|
-
if (!first) {
|
|
10847
|
-
this.detachedPendingBackgroundResponseTerminals.delete(pending);
|
|
10848
|
-
return;
|
|
10849
|
-
}
|
|
10850
|
-
const aggregation = {
|
|
10851
|
-
key,
|
|
10852
|
-
sessionId,
|
|
10853
|
-
target: delivery.target,
|
|
10854
|
-
sourceLabel: delivery.sourceLabel,
|
|
10855
|
-
status: first.context.status,
|
|
10856
|
-
label: first.context.label,
|
|
10857
|
-
parts: [],
|
|
10858
|
-
turnComplete: pending.turnComplete,
|
|
10859
|
-
completionPartial: pending.completionPartial,
|
|
10860
|
-
resolutionDropped: pending.resolutionDropped
|
|
10861
|
-
};
|
|
10862
|
-
this.applyHeldBackgroundResponses(aggregation, pending);
|
|
10863
|
-
aggregation.status = pending.status ?? aggregation.status;
|
|
10864
|
-
aggregation.label = pending.label ?? aggregation.label;
|
|
10865
|
-
if (this.pendingBackgroundResponseTerminals.get(key) === pending) {
|
|
10866
|
-
this.pendingBackgroundResponseTerminals.delete(key);
|
|
10867
|
-
}
|
|
10868
|
-
this.detachedPendingBackgroundResponseTerminals.delete(pending);
|
|
10869
|
-
this.detachedBackgroundResponseAggregations.add(aggregation);
|
|
10870
|
-
await this.flushBackgroundResponseAggregation(key, aggregation);
|
|
10871
|
-
}
|
|
10872
|
-
scheduleBackgroundResponseAggregationFlush(key, aggregation) {
|
|
10873
|
-
if (aggregation.timeoutTimer || aggregation.delivery)
|
|
10874
|
-
return;
|
|
10875
|
-
aggregation.timeoutTimer = setTimeout(() => {
|
|
10876
|
-
aggregation.timeoutTimer = void 0;
|
|
10877
|
-
void this.flushBackgroundResponseAggregation(key, aggregation);
|
|
10878
|
-
}, BACKGROUND_RESPONSE_AGGREGATION_TIMEOUT_MS);
|
|
10879
|
-
aggregation.timeoutTimer.unref?.();
|
|
10880
|
-
}
|
|
10881
|
-
formatBackgroundResponseAggregation(delivery) {
|
|
10882
|
-
const icon = delivery.status === "completed" ? "\u2705" : delivery.status === "failed" ? "\u274C" : "\u23F9\uFE0F";
|
|
10883
|
-
const label = this.formatBackgroundAgentLabel(delivery.label);
|
|
10884
|
-
const header = `## ${icon} Agent \xB7 ${label}${delivery.partial ? "\uFF08\u90E8\u5206\uFF09" : ""}`;
|
|
10885
|
-
if (delivery.parts.length === 0)
|
|
10886
|
-
return header;
|
|
10887
|
-
return `${header}
|
|
10888
|
-
|
|
10889
|
-
${delivery.parts.join("\n\n")}`;
|
|
10890
|
-
}
|
|
10891
|
-
formatBackgroundAgentResponse(text, label) {
|
|
10892
|
-
return `## \u{1F916} Agent \xB7 ${this.formatBackgroundAgentLabel(label)}
|
|
10893
|
-
|
|
10894
|
-
${text}`;
|
|
10895
|
-
}
|
|
10896
|
-
formatBackgroundAgentLabel(label) {
|
|
10897
|
-
const normalized = label?.replace(new RegExp("\\p{Cc}+", "gu"), " ").replace(/\s+/g, " ").trim();
|
|
10898
|
-
return escapeDingTalkMarkdown(normalized || "\u540E\u53F0\u4EFB\u52A1");
|
|
10899
|
-
}
|
|
10900
|
-
/**
|
|
10901
|
-
* Body-identical to the base implementation — this override exists only to
|
|
10902
|
-
* widen the signature, which the base seam does not declare. The background
|
|
10903
|
-
* aggregation flush passes `prepared` so the body it already projected isn't
|
|
10904
|
-
* projected a second time (that would re-upload its files), and
|
|
10905
|
-
* `failOnHttpError` so a failed send throws instead of being swallowed,
|
|
10906
|
-
* letting the flush capture the delivery plan for the next retry.
|
|
10907
|
-
*/
|
|
10908
|
-
async deliverBackgroundReply(chatId, text, sessionId, sourceLabel, prepared = false, failOnHttpError = false) {
|
|
10909
|
-
await this.sendResponseMessage(chatId, text, sessionId, sourceLabel, prepared, failOnHttpError);
|
|
10910
|
-
}
|
|
10911
|
-
async sendResponseMessage(chatId, text, sessionId, sourceLabel, prepared = false, failOnHttpError = false) {
|
|
10284
|
+
async sendResponseMessage(chatId, text, sessionId, sourceLabel, prepared = false) {
|
|
10912
10285
|
const atUserId = this.atSender ? this.sessionMentionTargets.get(sessionId) : void 0;
|
|
10913
10286
|
if (atUserId)
|
|
10914
10287
|
this.sessionMentionTargets.delete(sessionId);
|
|
10915
|
-
await this.sendReply(chatId, text, atUserId, sourceLabel ?? this.getResponseSourceLabel(sessionId), prepared
|
|
10288
|
+
await this.sendReply(chatId, text, atUserId, sourceLabel ?? this.getResponseSourceLabel(sessionId), prepared);
|
|
10916
10289
|
}
|
|
10917
10290
|
async sendFallbackReply(chatId, text, sessionId, sourceLabel) {
|
|
10918
10291
|
const atUserId = this.atSender ? this.sessionMentionTargets.get(sessionId) : void 0;
|
|
@@ -10985,27 +10358,39 @@ ${text}`;
|
|
|
10985
10358
|
const replied = data.text.repliedMsg;
|
|
10986
10359
|
const isReplyToBot = !!data.chatbotUserId && replied.senderId === data.chatbotUserId;
|
|
10987
10360
|
const text = this.summarizeRepliedContent(replied);
|
|
10988
|
-
const
|
|
10989
|
-
const
|
|
10990
|
-
|
|
10991
|
-
|
|
10992
|
-
|
|
10993
|
-
|
|
10994
|
-
|
|
10361
|
+
const media = [];
|
|
10362
|
+
const richText = replied.content?.richText;
|
|
10363
|
+
if (Array.isArray(richText)) {
|
|
10364
|
+
for (const part of richText) {
|
|
10365
|
+
const mediaType = this.mediaTypeFromMsgType(richTextPartType(part));
|
|
10366
|
+
if (part.downloadCode && mediaType) {
|
|
10367
|
+
media.push({ downloadCode: part.downloadCode, mediaType });
|
|
10368
|
+
}
|
|
10369
|
+
}
|
|
10370
|
+
} else {
|
|
10371
|
+
const downloadCode = replied.content?.downloadCode;
|
|
10372
|
+
const mediaType = this.mediaTypeFromMsgType(replied.msgType);
|
|
10373
|
+
if (downloadCode && mediaType) {
|
|
10374
|
+
media.push({
|
|
10995
10375
|
downloadCode,
|
|
10996
10376
|
mediaType,
|
|
10997
10377
|
fileName: replied.content?.fileName
|
|
10998
|
-
}
|
|
10999
|
-
}
|
|
10378
|
+
});
|
|
10379
|
+
}
|
|
10380
|
+
}
|
|
10381
|
+
return {
|
|
10382
|
+
referencedText: text || void 0,
|
|
10383
|
+
isReplyToBot,
|
|
10384
|
+
media
|
|
11000
10385
|
};
|
|
11001
10386
|
}
|
|
11002
10387
|
if (data.quoteMessage) {
|
|
11003
10388
|
const quote = data.quoteMessage;
|
|
11004
10389
|
const isReplyToBot = !!data.chatbotUserId && quote.senderId === data.chatbotUserId;
|
|
11005
10390
|
const text = quote.text?.content?.trim();
|
|
11006
|
-
return { referencedText: text || void 0, isReplyToBot };
|
|
10391
|
+
return { referencedText: text || void 0, isReplyToBot, media: [] };
|
|
11007
10392
|
}
|
|
11008
|
-
return { isReplyToBot: false };
|
|
10393
|
+
return { isReplyToBot: false, media: [] };
|
|
11009
10394
|
}
|
|
11010
10395
|
/**
|
|
11011
10396
|
* Warn once when a chat-record payload yields nothing to show the model.
|
|
@@ -11044,9 +10429,10 @@ ${text}`;
|
|
|
11044
10429
|
if (content?.richText && Array.isArray(content.richText)) {
|
|
11045
10430
|
const parts = [];
|
|
11046
10431
|
for (const part of content.richText) {
|
|
11047
|
-
const partType = part
|
|
11048
|
-
|
|
11049
|
-
|
|
10432
|
+
const partType = richTextPartType(part);
|
|
10433
|
+
const partText = typeof part.text === "string" ? part.text : part.content;
|
|
10434
|
+
if (partType === "text" && partText) {
|
|
10435
|
+
parts.push(partText);
|
|
11050
10436
|
} else if (partType === "picture") {
|
|
11051
10437
|
parts.push("[image]");
|
|
11052
10438
|
} else if (partType === "at" && part.atName) {
|
|
@@ -11178,8 +10564,7 @@ ${text}`;
|
|
|
11178
10564
|
* this message's own media — `(audio)`, `(video)`, `(file: name)`. Only the
|
|
11179
10565
|
* direct-media call site has one, and only that call may erase it: on the
|
|
11180
10566
|
* quoted-media path `envelope.text` is the user's own reply, and a reply
|
|
11181
|
-
* that happens to read exactly like a placeholder must survive
|
|
11182
|
-
* `@Bot (audio)` reaches here as exactly `(audio)` after mention removal).
|
|
10567
|
+
* that happens to read exactly like a placeholder must survive.
|
|
11183
10568
|
*/
|
|
11184
10569
|
async attachMedia(envelope, downloadCode, mediaType, fileName, cleanPlaceholderText) {
|
|
11185
10570
|
let token;
|
|
@@ -11282,13 +10667,8 @@ ${text}`;
|
|
|
11282
10667
|
process.stderr.write(`[DingTalk:${this.name}] message msgId=${sanitizeLogText(msgId || "unknown", 80)} conversationId=${sanitizeLogText(conversationId || "", 120)} isGroup=${isGroup} isMentioned=${isMentioned} senderNick=${sanitizeLogText(senderNick || "", 80)} senderStaffId=${sanitizeLogText(senderStaffId || "", 80)} senderId=${sanitizeLogText(senderIdValue || "", 80)}
|
|
11283
10668
|
`);
|
|
11284
10669
|
const content = this.extractContent(data);
|
|
11285
|
-
let cleanText = content.text;
|
|
11286
|
-
if (isMentioned) {
|
|
11287
|
-
cleanText = cleanText.replace(/^\s*@[^\s\p{Cf}]+/u, "").trim();
|
|
11288
|
-
}
|
|
11289
10670
|
const quoted = this.extractQuotedContext(data);
|
|
11290
10671
|
const chatId = conversationId || sessionWebhook;
|
|
11291
|
-
const messageText = isMentioned ? cleanText : cleanText || content.text;
|
|
11292
10672
|
const mentionedMemberIds = isGroup ? collectNonBotMentionIds(data) : [];
|
|
11293
10673
|
const senderId = senderStaffId || senderIdValue || "";
|
|
11294
10674
|
const senderName = senderNick || senderId || "Unknown";
|
|
@@ -11298,7 +10678,7 @@ ${text}`;
|
|
|
11298
10678
|
senderName,
|
|
11299
10679
|
chatId,
|
|
11300
10680
|
...isGroup && conversationTitle ? { chatName: conversationTitle } : {},
|
|
11301
|
-
text:
|
|
10681
|
+
text: content.text,
|
|
11302
10682
|
...content.syntheticText ? { syntheticText: true } : {},
|
|
11303
10683
|
...mentionedMemberIds.length > 0 ? { mentionedMemberIds } : {},
|
|
11304
10684
|
isGroup,
|
|
@@ -11310,14 +10690,14 @@ ${text}`;
|
|
|
11310
10690
|
if (this.atSender && isGroup && senderStaffId) {
|
|
11311
10691
|
envelope[mentionTarget] = senderStaffId;
|
|
11312
10692
|
}
|
|
11313
|
-
const processMessage = content.downloadCodes.length > 0 || quoted.media ? this.prepareThenHandleInbound(envelope, async () => {
|
|
10693
|
+
const processMessage = content.downloadCodes.length > 0 || quoted.media.length > 0 ? this.prepareThenHandleInbound(envelope, async () => {
|
|
11314
10694
|
if (content.downloadCodes.length > 0 && content.mediaType) {
|
|
11315
10695
|
for (const downloadCode of content.downloadCodes) {
|
|
11316
10696
|
await this.attachMedia(envelope, downloadCode, content.mediaType, content.fileName, content.placeholder);
|
|
11317
10697
|
}
|
|
11318
10698
|
}
|
|
11319
|
-
|
|
11320
|
-
await this.attachMedia(envelope,
|
|
10699
|
+
for (const media of quoted.media) {
|
|
10700
|
+
await this.attachMedia(envelope, media.downloadCode, media.mediaType, media.fileName);
|
|
11321
10701
|
}
|
|
11322
10702
|
}) : this.handleInbound(envelope);
|
|
11323
10703
|
processMessage.catch((err) => {
|
|
@@ -11363,12 +10743,6 @@ var plugin = {
|
|
|
11363
10743
|
required: true,
|
|
11364
10744
|
envResolvable: true
|
|
11365
10745
|
},
|
|
11366
|
-
{
|
|
11367
|
-
key: "aggregateBackgroundAgentResponses",
|
|
11368
|
-
label: "Aggregate Background Agent Responses",
|
|
11369
|
-
kind: "boolean",
|
|
11370
|
-
description: "Buffer each background Agent turn and send one labeled result instead of labeled segments"
|
|
11371
|
-
},
|
|
11372
10746
|
{
|
|
11373
10747
|
key: "interactiveCards",
|
|
11374
10748
|
label: "Interactive Cards",
|