@qwen-code/qwen-code 0.23.2 → 0.23.3-nightly.20260911.aaa6a32aae
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 +10 -10
- package/bundled/qc-helper/docs/configuration/model-providers.md +66 -28
- package/bundled/qc-helper/docs/configuration/settings.md +8 -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 +62 -9
- package/bundled/qc-helper/docs/features/computer-use.md +1 -1
- package/bundled/qc-helper/docs/features/cross-session-protocol.md +338 -0
- package/bundled/qc-helper/docs/features/goals.md +22 -18
- package/bundled/qc-helper/docs/features/hooks.md +28 -22
- package/bundled/qc-helper/docs/features/sub-agents.md +27 -0
- package/bundled/qc-helper/docs/qwen-serve.md +23 -6
- package/bundled/review/SKILL.md +93 -80
- package/bundled/review/references/persistence.md +2 -0
- package/bundled/review/references/posting.md +31 -14
- package/bundled/workflow-authoring/SKILL.md +410 -0
- package/bundled/workflow-creator/SKILL.md +1 -1
- package/chunks/{MaxSizedBox-4C3BKKKY.js → MaxSizedBox-7C5XTBZI.js} +64 -53
- package/chunks/{StandaloneSessionPicker-TXVF65YW.js → StandaloneSessionPicker-IGTT3ZRX.js} +88 -76
- package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-RUQNTNU5.js} +2 -2
- package/chunks/acp-subagent-executor-IUHVNVVO.js +140 -0
- package/chunks/{acpAgent-H5XBKGB4.js → acpAgent-W43WM2K4.js} +957 -243
- package/chunks/{agent-T5LEFJIU.js → agent-2XMXC5JW.js} +48 -38
- package/chunks/{agent-headless-VZKSRH36.js → agent-headless-2HHBVCP6.js} +48 -38
- package/chunks/{anthropicContentGenerator-PRJWWVYJ.js → anthropicContentGenerator-7RI3MPIW.js} +69 -36
- package/chunks/{artifact-tool-G5LHNECG.js → artifact-tool-HHVHCPNG.js} +59 -109
- package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-RFMXTD3B.js} +2 -2
- package/chunks/{bridge-AOX5IY44.js → bridge-ID6N4IH5.js} +69 -58
- package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
- package/chunks/{channel-management-service-MWQGHPAS.js → channel-management-service-ASCXI7FR.js} +6 -6
- package/chunks/{channel-settings-store-XZCGDGHW.js → channel-settings-store-TPJFQAZY.js} +76 -65
- package/chunks/{channel-worker-group-SQ5FRWOH.js → channel-worker-group-JR6JOELM.js} +9 -9
- package/chunks/{channel-worker-manager-TU4ZNWOE.js → channel-worker-manager-AVKJEZFL.js} +19 -10
- package/chunks/{channel-worker-supervisor-EMITFMCP.js → channel-worker-supervisor-OOYY7BAQ.js} +7 -7
- package/chunks/{chunk-4WMGYG3F.js → chunk-22FWWGSM.js} +2 -2
- package/chunks/{chunk-LWX4WDFF.js → chunk-2S5RIGZJ.js} +43 -15
- package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
- package/chunks/{chunk-HJ5UJQQL.js → chunk-2UKKQGRA.js} +3639 -1804
- package/chunks/{chunk-MWIO7MF6.js → chunk-2WSLXP3W.js} +4 -0
- package/chunks/{chunk-HNLMYDQE.js → chunk-33LYAC4R.js} +10 -6
- package/chunks/{chunk-VBLAI2HA.js → chunk-3FPYT6QC.js} +0 -31
- package/chunks/{chunk-F53KKZUD.js → chunk-3LMDSCLU.js} +158 -10
- package/chunks/{chunk-WXFCI3O5.js → chunk-3MAUPOZ4.js} +2 -2
- package/chunks/{chunk-CRZBDVP2.js → chunk-432JQKIO.js} +10 -10
- package/chunks/{chunk-IRGDIDGJ.js → chunk-43RQ552L.js} +364 -84
- package/chunks/{chunk-PFKGV6PO.js → chunk-465USTVK.js} +9 -15
- package/chunks/{chunk-WG7BL3FY.js → chunk-473RJLIH.js} +1 -1
- package/chunks/{chunk-J3VZF2AL.js → chunk-4O2AXZXU.js} +2 -2
- package/chunks/{chunk-N6S3NUYJ.js → chunk-55VOWZ4C.js} +1 -1
- package/chunks/{chunk-OWCFKIFQ.js → chunk-5CZMWDJI.js} +2 -2
- package/chunks/{chunk-7NDZKE2M.js → chunk-5MUIHID6.js} +5 -5
- package/chunks/{chunk-RM244SCQ.js → chunk-5Z74GE4N.js} +1 -1
- package/chunks/{chunk-G5VOXCRX.js → chunk-6375QMAO.js} +2 -2
- package/chunks/{chunk-3LPJ776W.js → chunk-63GQZKXL.js} +164 -31
- package/chunks/{chunk-O2FEO2CB.js → chunk-6GDELAVL.js} +18 -2
- package/chunks/{chunk-7PD7ZMX5.js → chunk-6HI2I3OM.js} +168 -6
- package/chunks/{chunk-CALNF3Z3.js → chunk-7C57HCOR.js} +1 -1
- package/chunks/{chunk-UYDQYDW2.js → chunk-7IBS746B.js} +1 -1
- package/chunks/{chunk-AUTUFD5X.js → chunk-ABNX6E6K.js} +1 -1
- package/chunks/chunk-ACHCT36C.js +28 -0
- package/chunks/{chunk-2WC3Y7YY.js → chunk-AEY27Z35.js} +401 -23
- package/chunks/{chunk-AO2VMS72.js → chunk-AQFRRH73.js} +3 -3
- package/chunks/{chunk-PDN7FJZV.js → chunk-ASWEMQIZ.js} +4 -4
- package/chunks/chunk-AYEJOTIU.js +43 -0
- package/chunks/{chunk-QFJZAY7W.js → chunk-BKFRA4F5.js} +5 -5
- package/chunks/{chunk-KCF2436G.js → chunk-BNLW5N6U.js} +4 -4
- package/chunks/{chunk-GOKAOSCN.js → chunk-BRFOZEPA.js} +2 -2
- package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
- package/chunks/chunk-C5CECJ46.js +340 -0
- package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
- package/chunks/chunk-CAAMI77K.js +937 -0
- package/chunks/{chunk-QTB4VP4K.js → chunk-CBGHRAWM.js} +304 -23
- package/chunks/chunk-CF5KXZZX.js +150 -0
- package/chunks/chunk-CFMZLE3L.js +75 -0
- package/chunks/{chunk-TGNNLRC3.js → chunk-CJ3DHN5I.js} +1 -0
- package/chunks/{chunk-ERXNTINK.js → chunk-CQZJYGRX.js} +1 -1
- package/chunks/{chunk-WBU2PIZ5.js → chunk-CSDKDHWV.js} +23 -16
- package/chunks/{chunk-2EKVPSIJ.js → chunk-D754KKNZ.js} +9 -2
- package/chunks/{chunk-E6TI726I.js → chunk-DGC7BKEZ.js} +1 -1
- package/chunks/{chunk-7SVM3RP2.js → chunk-DMMOQWRF.js} +4 -6
- package/chunks/{chunk-J3TJH52D.js → chunk-DOTF2PF2.js} +1 -1
- package/chunks/{chunk-2BMXHB6N.js → chunk-DWBNQR53.js} +7 -7
- package/chunks/{chunk-ZN5TKAVR.js → chunk-E5LTUWKZ.js} +3 -3
- package/chunks/chunk-EGW3ZP6Y.js +32 -0
- package/chunks/chunk-ELRMZTPF.js +374 -0
- package/chunks/{chunk-RNAJVXUG.js → chunk-ENAUXRPG.js} +6 -6
- package/chunks/{chunk-WXD7INFV.js → chunk-EO4U2X47.js} +10 -8
- package/chunks/{chunk-WDVV3LRM.js → chunk-EPVEPTI3.js} +45 -152
- package/chunks/chunk-ERU3SDXT.js +27 -0
- package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
- package/chunks/{chunk-GSFV5RQW.js → chunk-EYN3G5XD.js} +328 -4
- package/chunks/{chunk-QB3KS3N3.js → chunk-FGROOEKM.js} +5 -40
- package/chunks/{chunk-TOOOLHVS.js → chunk-FH5AVEWJ.js} +3 -3
- package/chunks/{chunk-DAI65CMX.js → chunk-FJZWRNEW.js} +1 -1
- package/chunks/{chunk-GNY7B3CA.js → chunk-FUQK5ZNL.js} +1 -1
- package/chunks/{chunk-GOEVQADN.js → chunk-GDIPPCW6.js} +330 -175
- package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
- package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
- package/chunks/{chunk-ELD3OBPU.js → chunk-GWOVD63C.js} +3 -3
- package/chunks/{chunk-IWABUX6T.js → chunk-GX5FF2IE.js} +6 -6
- package/chunks/{chunk-22GORRNY.js → chunk-GZMNHAYC.js} +1 -1
- package/chunks/{chunk-YZTGGCEE.js → chunk-H3TFIFX3.js} +1 -1
- package/chunks/{chunk-6G4V7SE4.js → chunk-HG46TTAG.js} +1 -1
- package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
- package/chunks/{chunk-KEPC5BOL.js → chunk-IBRQG2MP.js} +12 -15
- package/chunks/{chunk-OXR34GCD.js → chunk-IILWL3KY.js} +2054 -146
- package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
- package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
- package/chunks/{chunk-CMWU6P4D.js → chunk-IRJRB3OD.js} +1 -1
- package/chunks/{chunk-QHLHE2OT.js → chunk-IUN5ZMFY.js} +1 -1
- package/chunks/{chunk-LYT2OU7D.js → chunk-IXXV6BVB.js} +172 -6
- package/chunks/{chunk-R3JIDRUL.js → chunk-J6H4JP25.js} +4 -4
- package/chunks/{chunk-NB3NDQQK.js → chunk-J6SBP5G2.js} +1 -1
- package/chunks/{chunk-TRQNRP2H.js → chunk-J7LBAKDH.js} +46 -3
- package/chunks/{chunk-67XTVRVB.js → chunk-JJFHISXU.js} +30 -25
- package/chunks/chunk-JL6APGBX.js +43 -0
- package/chunks/{chunk-NX7ZTXFF.js → chunk-JSKEW4E7.js} +2 -1
- package/chunks/{chunk-BK7D2JR6.js → chunk-JVTXAA35.js} +3 -3
- package/chunks/chunk-K2OJUPOE.js +78 -0
- package/chunks/{chunk-G3ZUMSFS.js → chunk-K3U6VB3O.js} +6 -6
- package/chunks/{chunk-4I3WFI3U.js → chunk-K4KWLF7Q.js} +12 -12
- package/chunks/{chunk-WXPPUPHM.js → chunk-KWFFJ6AK.js} +1 -1
- package/chunks/{chunk-46MMBZHI.js → chunk-KZYOFJ6V.js} +4 -4
- package/chunks/{chunk-ULZECEIP.js → chunk-LDQHA6L4.js} +2 -20
- package/chunks/{chunk-7LTCFO6T.js → chunk-LQBAFO5D.js} +6 -5
- package/chunks/{chunk-SOA4HKRJ.js → chunk-LT2XFADM.js} +2 -2
- package/chunks/{chunk-JYGIJA4W.js → chunk-LWWRJRCD.js} +1 -1
- package/chunks/{chunk-YQGW3M6Z.js → chunk-MFQWRBFB.js} +5 -5
- package/chunks/{chunk-TODNHE76.js → chunk-MUFGTWQH.js} +5 -5
- package/chunks/{chunk-5DQ4YTIZ.js → chunk-MV5XRRML.js} +3 -3
- package/chunks/{chunk-IR6JKBAP.js → chunk-NOUK63IR.js} +2 -2
- package/chunks/{chunk-XQ4RDO5B.js → chunk-NV77SEX3.js} +1 -1
- package/chunks/{chunk-OFVAS4AR.js → chunk-NWDPOFJI.js} +2 -2
- package/chunks/chunk-NY6OPAPS.js +820 -0
- package/chunks/{chunk-WDN64MVT.js → chunk-O5VX66FB.js} +127 -18
- package/chunks/{chunk-MV5DTLJV.js → chunk-OHCR4O3U.js} +1 -1
- package/chunks/{chunk-LEAOJ43M.js → chunk-OKOPKQ2X.js} +1310 -2107
- package/chunks/{chunk-B25JYXZE.js → chunk-ONLJBOI2.js} +971 -17
- package/chunks/{chunk-QQK4L3UU.js → chunk-OWUAZXXN.js} +132 -26
- package/chunks/{chunk-R457KFV7.js → chunk-P42IUOAO.js} +3 -3
- package/chunks/{chunk-LUNC5KCL.js → chunk-PRELUGCQ.js} +214 -39
- package/chunks/{chunk-5OZUKLL7.js → chunk-QSMQKTXV.js} +4 -4
- package/chunks/{chunk-FAJPLSYF.js → chunk-QTQYLQ5A.js} +85 -81
- package/chunks/{chunk-CALTQWTZ.js → chunk-QVZDV4ZS.js} +2 -2
- package/chunks/{chunk-J6MB5ZHZ.js → chunk-QZW6WRB7.js} +2 -1
- package/chunks/{chunk-KFECPHLV.js → chunk-RBWAGV73.js} +3 -3
- package/chunks/{chunk-4VY3ITHR.js → chunk-RF5RQRTD.js} +3 -3
- package/chunks/{chunk-HIXUUCGY.js → chunk-RPMXMR6U.js} +2 -2
- package/chunks/{chunk-3OAXF3UK.js → chunk-RRQEZBL2.js} +3756 -1343
- package/chunks/{chunk-4ALNJDHL.js → chunk-RSGEAWFJ.js} +19 -1
- package/chunks/{chunk-5BH2AIEY.js → chunk-RUE62UH6.js} +2 -2
- package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
- package/chunks/{chunk-A7EFXK7P.js → chunk-SAOJHRWY.js} +2 -2
- package/chunks/{chunk-JO77FGNZ.js → chunk-SDUIETBG.js} +19 -7
- package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
- package/chunks/{chunk-PSPAM24S.js → chunk-TBSCTWKF.js} +6 -0
- package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
- package/chunks/{chunk-XDNFODER.js → chunk-TUIW5LLK.js} +1 -1
- package/chunks/{chunk-APXIW2TF.js → chunk-TVV5FA3G.js} +4 -4
- package/chunks/chunk-U6H3XTFA.js +95 -0
- package/chunks/{chunk-S5QR6CB5.js → chunk-UKMWZ5NS.js} +108 -887
- package/chunks/{chunk-U6REWGVR.js → chunk-VG2BRSEK.js} +2 -2
- package/chunks/chunk-VGBOJH2D.js +127 -0
- package/chunks/chunk-VGY2RGXL.js +100 -0
- package/chunks/{chunk-ZP5XDLSA.js → chunk-VLWG3EHY.js} +12 -12
- package/chunks/{chunk-4JNHNVAZ.js → chunk-W547PYQ7.js} +9 -4
- package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
- package/chunks/{chunk-QAZ2MGYT.js → chunk-W7JJLUSB.js} +2 -2
- package/chunks/{chunk-CCBTNJB4.js → chunk-W7Q7XDQI.js} +39 -27
- package/chunks/{chunk-DARWOZY6.js → chunk-WD6YQI5M.js} +1 -1
- package/chunks/{chunk-F2NYVASI.js → chunk-WXAWG3JS.js} +30 -13
- package/chunks/{chunk-NPKCVSXX.js → chunk-XB5JRCAM.js} +11 -9
- package/chunks/{chunk-XSOXPG2L.js → chunk-XE46RQFI.js} +136 -8
- package/chunks/{chunk-QTNCGZHQ.js → chunk-XX5HQLCZ.js} +16 -0
- package/chunks/{chunk-2Z3T52OC.js → chunk-Y5TM7SBV.js} +7 -2
- package/chunks/chunk-YC6XOB5N.js +691 -0
- package/chunks/{chunk-CWVZBIZJ.js → chunk-YDW4ERSS.js} +1 -1
- package/chunks/{chunk-TRWQQBVH.js → chunk-YGCTOXUT.js} +10 -24
- package/chunks/{chunk-WK7P62DV.js → chunk-YKC67ZEF.js} +6 -6
- package/chunks/{chunk-KA5HR3G2.js → chunk-YKM6MITI.js} +5 -5
- package/chunks/{chunk-X7LFJF5D.js → chunk-YM6KUQ2S.js} +36 -84
- package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
- package/chunks/{chunk-G37O7YO6.js → chunk-ZAWM6KRF.js} +3 -3
- package/chunks/{chunk-H3Q3RSKZ.js → chunk-ZFIWHBJ3.js} +1 -1
- package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
- package/chunks/{chunk-YLOHCA6I.js → chunk-ZKWO4CF4.js} +2 -2
- package/chunks/{chunk-VJJXG73H.js → chunk-ZMQL5BL5.js} +21 -6
- package/chunks/{chunk-FGHPZGOP.js → chunk-ZMUYBOYB.js} +39 -55
- package/chunks/{chunk-FV4DM2M4.js → chunk-ZNI3YJHS.js} +26 -6
- package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
- package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
- package/chunks/codex-subagent-executor-26XOHVKH.js +585 -0
- package/chunks/{config-utils-GPLIABL2.js → config-utils-JUG3MOYN.js} +68 -57
- package/chunks/{contextCommand-NCUQUDBY.js → contextCommand-6K3POZFA.js} +65 -54
- package/chunks/{core-runtime-WKYKWVYU.js → core-runtime-XQFZLA2V.js} +66 -55
- package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-4UJ6RM6W.js} +5 -2
- package/chunks/{create-sub-session-PPLXB3JJ.js → create-sub-session-T4IYIOC7.js} +178 -91
- package/chunks/{cron-create-GTPVMJCF.js → cron-create-6466RWSO.js} +2 -2
- package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-W4QUWHOA.js} +2 -2
- package/chunks/{cron-list-KTFKFDKC.js → cron-list-Q5LJ5PZE.js} +2 -2
- package/chunks/{daemon-2CKIAO3I.js → daemon-PHPJUXDZ.js} +4 -2
- package/chunks/{daemon-git-worktree-guard-73ZWOLKL.js → daemon-git-worktree-guard-5WEMZ64U.js} +65 -54
- package/chunks/{daemon-status-provider-OK7VONJG.js → daemon-status-provider-GMD7QD4T.js} +74 -63
- package/chunks/{daemon-trust-policy-CAUCREG2.js → daemon-trust-policy-IPBZES2Z.js} +71 -60
- package/chunks/{daemon-trust-policy-monitor-3Y36OOEQ.js → daemon-trust-policy-monitor-MHYEN7X7.js} +71 -60
- package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
- package/chunks/{deferred-core-runtime-Q7WFWYD3.js → deferred-core-runtime-CY43FZNZ.js} +63 -52
- package/chunks/{discovery-XP4RMDUM.js → discovery-5KUEPR65.js} +2 -2
- package/chunks/{display-image-CTNHJRZC.js → display-image-6AZIHP3J.js} +3 -3
- package/chunks/{dist-F34J4FZX.js → dist-2QYIVNS6.js} +2 -5
- package/chunks/{dist-6YDUH3BB.js → dist-GIMQXYLI.js} +10 -631
- package/chunks/{dist-NP7QKLVG.js → dist-GUB7QRYA.js} +3 -6
- package/chunks/{dist-Y5KC3IHW.js → dist-L45UB6DG.js} +233 -35
- package/chunks/{dist-XLV33CLY.js → dist-MPUZZOG5.js} +5 -18
- package/chunks/{dist-ZDNJK74R.js → dist-PA7WPFVE.js} +6 -37
- package/chunks/{dist-F6JLAJLE.js → dist-T6DDPDLQ.js} +16 -36
- package/chunks/{dist-BNQVF565.js → dist-TFGETXFN.js} +14 -37
- package/chunks/{dist-UFTFGI6I.js → dist-VDLSBCLM.js} +2 -6
- package/chunks/{edit-YJD6IETK.js → edit-6NUP5IPX.js} +48 -38
- package/chunks/{en-YJNRUQG4.js → en-ZSZW3PZX.js} +4 -1
- package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-EETDMJRF.js} +5 -5
- package/chunks/{enterPlanMode-EFPVTWIH.js → enterPlanMode-AZHYHEII.js} +48 -38
- package/chunks/{environment-HP3AXFTB.js → environment-ON6GIQ4F.js} +66 -55
- package/chunks/{errors-22ON46G7.js → errors-DQE63SCC.js} +65 -54
- package/chunks/exec-66WQIVYU.js +505 -0
- package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-DIPJ6S55.js} +5 -5
- package/chunks/{exitPlanMode-MOQUNCBH.js → exitPlanMode-NHBV6LAI.js} +48 -38
- package/chunks/{fast-path-2X7BPMXX.js → fast-path-EPJSUZZC.js} +7 -7
- package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-XDYX7X5Z.js} +2 -2
- package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
- package/chunks/{glob-Y7ACIB3P.js → glob-MNEXQ2NV.js} +51 -41
- package/chunks/{goal-tools-DABMICUC.js → goal-tools-D2A4QBCJ.js} +54 -40
- package/chunks/{grep-BLHF2S5D.js → grep-EFWPV3MM.js} +2 -2
- package/chunks/{handleAutoUpdate-MCAMHYDI.js → handleAutoUpdate-2RY3OQA6.js} +67 -56
- package/chunks/{i18n-C3GDCALP.js → i18n-HTHDB3I7.js} +64 -53
- package/chunks/{image-gen-XP4NNIYG.js → image-gen-2PHED3P4.js} +8 -6
- package/chunks/{initializer-4URDQL2G.js → initializer-JEVLJCQA.js} +71 -60
- package/chunks/{installationInfo-LBOL6SBV.js → installationInfo-ITRB6J4L.js} +63 -52
- package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
- package/chunks/list-KOUIMHT5.js +133 -0
- package/chunks/{list-agents-2CXPGJUE.js → list-agents-IY4NEWLP.js} +17 -7
- package/chunks/{llm-2KPNSAVY.js → llm-F7WHGESY.js} +132 -120
- package/chunks/{llm-content-generator-GR3FOHLB.js → llm-content-generator-NYQ2NAVA.js} +6 -5
- package/chunks/{loadedSettingsAdapter-DVKROEJD.js → loadedSettingsAdapter-HZUAX5CX.js} +71 -60
- package/chunks/{loggingContentGenerator-P4K6K5W4.js → loggingContentGenerator-WMNU7C5J.js} +70 -59
- package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-ANX25YW2.js} +3 -3
- package/chunks/{ls-YV7RKLKY.js → ls-4XCMJNZF.js} +4 -4
- package/chunks/{lsp-NO3AMRZT.js → lsp-K5E2Y64R.js} +1 -1
- package/chunks/{managed-npm-update-VWBKHNIN.js → managed-npm-update-EJJB65QI.js} +63 -52
- package/chunks/mcp-I73R6HS3.js +127 -0
- package/chunks/{monitor-A255TNZR.js → monitor-T56GJNA4.js} +50 -40
- package/chunks/{nonInteractiveCli-LXGIKQAT.js → nonInteractiveCli-CKHHJ423.js} +120 -109
- package/chunks/{notebook-edit-5UYHS2DM.js → notebook-edit-W5TU3EZ3.js} +48 -38
- package/chunks/openai-WX26N5OJ.js +47 -0
- package/chunks/{openaiContentGenerator-A6MAMEO5.js → openaiContentGenerator-TH6YAWAH.js} +33 -25
- package/chunks/openaiResponsesContentGenerator-EWLWQPKS.js +1738 -0
- package/chunks/{pidfile-B7DZC4TP.js → pidfile-RCC6TCEM.js} +63 -52
- package/chunks/process-registry-X6ZCASEN.js +10 -0
- package/chunks/{processUtils-BPZ2MCZS.js → processUtils-DQDQBRMC.js} +2 -2
- package/chunks/{prompt-terminal-ledger-FYYTAOXS.js → prompt-terminal-ledger-2LXWAGWU.js} +64 -53
- package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
- package/chunks/{qwenContentGenerator-4IOJFD4S.js → qwenContentGenerator-LG65Z2YV.js} +61 -49
- package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-PJ63CCFD.js} +7 -5
- package/chunks/{read-file-A4H4O3VQ.js → read-file-72HMRUT4.js} +12 -9
- package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-NPF44YSC.js} +1 -1
- package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-MDXCCW2J.js} +3 -3
- package/chunks/record-source-VJLKDGGR.js +22 -0
- package/chunks/{report-findings-TJ34R7QK.js → report-findings-CZTYMZTC.js} +4 -4
- package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-KOZHPVZU.js} +5 -5
- package/chunks/{resumeHistoryUtils-YQQ43E4N.js → resumeHistoryUtils-S2Q3M3EH.js} +69 -58
- package/chunks/{ripGrep-W32NWFTA.js → ripGrep-B2I3L5CO.js} +17 -13
- package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
- package/chunks/{run-qwen-serve-WBSWWIRV.js → run-qwen-serve-AOPYFCVP.js} +305 -132
- package/chunks/{runtime-VRVBX2E5.js → runtime-TZMHKZAP.js} +77 -66
- package/chunks/{scheduled-tasks-D65KJDA3.js → scheduled-tasks-7RL6ZOYT.js} +72 -60
- package/chunks/{scheduler-M2YPN7Z7.js → scheduler-D6RLOFNU.js} +65 -54
- 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-MMZVSS7P.js} +12 -9
- package/chunks/{serve-BE3H2P6P.js → serve-HWWDYI37.js} +72 -61
- package/chunks/{server-FLY5JERG.js → server-MD2X5U5L.js} +3156 -564
- package/chunks/{session-JVN62R5K.js → session-AFUMFNN7.js} +124 -113
- package/chunks/{session-attachments-root-7ACGLHXA.js → session-attachments-root-QPN3YWTY.js} +63 -52
- package/chunks/{session-pr-refresh-TQS57SDK.js → session-pr-refresh-4Y2ANMJX.js} +72 -60
- package/chunks/{settings-D44YMZFT.js → settings-QQRQ2LR7.js} +74 -63
- package/chunks/{shell-3VE6I4V5.js → shell-NUYUYMVI.js} +48 -38
- package/chunks/{skill-FHEGRRZU.js → skill-KHLDVOXW.js} +68 -30
- package/chunks/{skill-settings-VHEJMBFL.js → skill-settings-INLEGDEZ.js} +70 -59
- package/chunks/{spawnChannel-T6MX2ZDN.js → spawnChannel-KBGZHW2G.js} +67 -56
- package/chunks/{standalone-update-QUGHFMCS.js → standalone-update-3QP5NDVJ.js} +65 -54
- package/chunks/{start-opentui-ui-IHIIZ2LE.js → start-opentui-ui-VBT3XDWN.js} +2682 -2153
- package/chunks/{startInteractiveUI-LR7K2ARZ.js → startInteractiveUI-AZHKCHMR.js} +1562 -2317
- package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-KRASPDE3.js} +2 -2
- package/chunks/{task-create-MWXJFRRM.js → task-create-TNXNT7ZD.js} +8 -8
- package/chunks/{task-list-EYO3FE57.js → task-list-FHNIJDKT.js} +1 -1
- package/chunks/{task-stop-BFSKRTGV.js → task-stop-MG4ZMTEI.js} +1 -1
- package/chunks/{task-update-2JJJRHMT.js → task-update-4HU62CJT.js} +8 -8
- package/chunks/{team-create-GY3VFY47.js → team-create-K5DNSJXR.js} +50 -40
- package/chunks/{team-delete-IQZ6XGFI.js → team-delete-2T44GUNN.js} +1 -1
- package/chunks/{team-plan-approval-BQPGZOT5.js → team-plan-approval-2ZNAQT2A.js} +48 -38
- package/chunks/{terminal-image-renderer-YNYW5CQG.js → terminal-image-renderer-23CW4A6Q.js} +65 -54
- package/chunks/{theme-manager-U6CIK3GM.js → theme-manager-G2333AMH.js} +63 -52
- package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-BO2GR5MN.js} +4 -4
- package/chunks/{tool-search-XI3QWD5I.js → tool-search-MKQCKXN5.js} +22 -15
- package/chunks/{total-session-admission-3SNSJJ32.js → total-session-admission-ENKTM2KX.js} +69 -58
- package/chunks/{trustedFolders-OVAQKNV5.js → trustedFolders-2ETDL7OD.js} +64 -53
- package/chunks/{update-relaunch-XV5O74E3.js → update-relaunch-FMVNN5KA.js} +5 -5
- package/chunks/{updateCheck-CHUYWD6L.js → updateCheck-KWRV5KLJ.js} +66 -55
- package/chunks/{useAutoAcceptIndicator-VKSVIXZC.js → useAutoAcceptIndicator-7AUXAIQF.js} +73 -62
- package/chunks/{validateNonInterActiveAuth-ZNUTD3E5.js → validateNonInterActiveAuth-NETKLLDV.js} +117 -106
- package/chunks/{version-EK7VAGSI.js → version-DACNN2ZM.js} +1 -1
- package/chunks/{web-fetch-24KZO763.js → web-fetch-CIVCRET4.js} +16 -12
- package/chunks/{web-search-CRNXKZ2X.js → web-search-GOHZRGMM.js} +389 -327
- package/chunks/{web-shell-static-BFDESDD4.js → web-shell-static-T7UGLVE4.js} +2 -7
- package/chunks/workflow-IL2FOALZ.js +1324 -0
- package/chunks/workspace-providers-status-YGXL6N5U.js +131 -0
- package/chunks/{workspace-registration-store-HKLJEDQX.js → workspace-registration-store-E4IAOFFZ.js} +3 -1
- package/chunks/{workspace-registry-7RDDOBLN.js → workspace-registry-KX6BIBYK.js} +69 -58
- package/chunks/{workspace-runtime-coordinator-LEPDPXJO.js → workspace-runtime-coordinator-2KYYGDDR.js} +72 -59
- package/chunks/{workspace-service-5IFDCNN3.js → workspace-service-5Q6LWBYR.js} +76 -65
- package/chunks/{workspace-skills-status-FJ3HNH4H.js → workspace-skills-status-PJZTFPVV.js} +72 -61
- package/chunks/{workspace-trust-reconciler-PQFHIWLR.js → workspace-trust-reconciler-HS6PWNEA.js} +77 -66
- package/chunks/{write-file-ERG67ZFX.js → write-file-JB3DRM7O.js} +50 -40
- package/chunks/{zh-VBFCRQBL.js → zh-7UJA4ICT.js} +4 -1
- package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-RV24PWUI.js} +4 -1
- package/chunks/{zoom-image-WQYEC3SR.js → zoom-image-AVHQFOOQ.js} +12 -9
- package/cli.js +16 -16
- package/codeModeHost.js +4425 -0
- 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 +5 -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 +5 -2
- package/locales/zh.js +5 -2
- package/package.json +6 -4
- package/web-shell/assets/{abnfDiagram-VCTEODGH-BRLgQbnT.js → abnfDiagram-VCTEODGH-BH2nK5Z_.js} +1 -1
- package/web-shell/assets/{arc-qAF9_XsR.js → arc-CUUQ6krv.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-BorUttEz.js → architectureDiagram-5GKGNRK7-CJjiRuGx.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-Bj0qZVxu.js → blockDiagram-NRAW4CY4-GCDyU9ZX.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BTqJis32.js → c4Diagram-UCG6FXSJ-C68MiN6h.js} +1 -1
- package/web-shell/assets/channel-DauVlmdF.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-RrQ5X8m-.js → chunk-2Q5K7J3B-_8B6frXZ.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-uUjDl8wO.js → chunk-5VM5RSS4-CroSinX7.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-C3JhpyzI.js → chunk-F27PBJKO-CGn4Z0Fx.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-C8ZNFs7F.js → chunk-G27WJ6UU-BI5nLQcf.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-DNpXtEOs.js → chunk-JWPE2WC7-CYJH0FuH.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-DagA2ZLw.js → chunk-LCL6LL3I-DjWZUqA1.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-R23uH7Xm.js → chunk-POPQ4Y6H-DcTkIHm8.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-Qz9RN_BR.js → chunk-SVP7TREG-E8sZT5uK.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-jYb1_hni.js → chunk-XXDRQBXY-CurjPKw_.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-BuIh7bj1.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-BuIh7bj1.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-Cv2OunpE.js → cose-bilkent-JH36ORCC-CJEnNhth.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-LH42KFJx.js → cynefin-OW5HDTMX-jwEkm0yw.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dha4_OoR.js → cynefinDiagram-5FMLGOSQ-B-OVQ6AO.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-Br5lnUKD.js → dagre-3AP2YEHR-CKKK9WNR.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-dpKq2bBX.js → diagram-S7CK7UJ4-D486veFQ.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-BAgHWpXr.js → diagram-UQ7AKVKN-C3GujqHv.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-GRRzpyE2.js → diagram-VSXAHHWV-BrOTDwuU.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-BNFiaYpG.js → diagram-VX7I27RA-C4D9kWE3.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-BisZzB_h.js → diagram-Z3DM3KII-7rAManT0.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-B1xbwycf.js → ebnfDiagram-PWID7BFC-CqVzKOdr.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CQMzbGE5.js → erDiagram-SSCWMZ5O-D2s08fc_.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CZ_Zondl.js → flowDiagram-A5DVABFB-CrKtBxB2.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BTh2ShxS.js → ganttDiagram-EL5Y4UJY-CD1CKdlt.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js → gitGraphDiagram-WWUBYQGX-CHDXdVNn.js} +1 -1
- package/web-shell/assets/index-D8tzgUOC.css +36 -0
- package/web-shell/assets/{index-DWoFMu5x.js → index-DWz95m74.js} +1 -1
- package/web-shell/assets/index-cDFf68Wd.js +2204 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-C0QpudbG.js → infoDiagram-RXCK75RN-Cr1oLCwe.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-a6B741uT.js → ishikawaDiagram-5VMMS53U--RghV1mm.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-Dbht9ICp.js → journeyDiagram-EYS64GPL-MN1ZkGW8.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-D4OFR8-h.js → kanban-definition-3QL26DDD-DL05VTn0.js} +1 -1
- package/web-shell/assets/{layout-Dvdh5jRH.js → layout-D_TvQzvn.js} +1 -1
- package/web-shell/assets/{linear-Dvc6KIW2.js → linear-B_0OH6XF.js} +1 -1
- package/web-shell/assets/{mermaid.core-CB36RfIb.js → mermaid.core-B9Nklh9I.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-Fmqo1CjP.js → mindmap-definition-FBJOCRG2-CevIQ0LR.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-CCxYBoA4.js → pegDiagram-XKGWAZYB-DQ8PIv0d.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-BVHKQFzt.js → pieDiagram-E7YTZNPT-BVTV1pPe.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-l95IznwR.js → quadrantDiagram-AXDQQJYC-DHN6nhpe.js} +1 -1
- package/web-shell/assets/qwen-code-notification-BRVagufF.png +0 -0
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-BlLdRdXp.js → railroadDiagram-O6MQD6OU-8HOyX0u-.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BkDLBR5w.js → requirementDiagram-EFPCY7ZU-9W4_14i8.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-jAIqRp65.js → sankeyDiagram-P5KCCOFB-DSUBB2XP.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-f-soZYPr.js → sequenceDiagram-WJ2MYXX4-DD3jH6Jn.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-BzOuAfB2.js → sizeCapture-X5ZJPWSS-RAFTU3Cz.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-BPLSs12r.js → stateDiagram-HBIQ2CUA-Drk-oZ2x.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-QzYteVIm.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-D-9E_RIR.js → swimlanes-XN3QIQJK-Cy2nlOGx.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-xTr-HG26.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-CT56K-gV.js → timeline-definition-24CTP7MA-B7outYof.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-B-vi4IyO.js → vennDiagram-4TSXK5OY-Di_u1Ic6.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9O7Ju98.js → wardleyDiagram-VM6X3IG4-DYocuCAM.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-6d8w3jg2.js → xychartDiagram-S5SC5T6Z-AADDse54.js} +1 -1
- package/web-shell/index.html +29 -5
- package/chunks/chunk-V7RNNPGC.js +0 -44
- package/chunks/list-JOGBAC2R.js +0 -122
- package/chunks/mcp-6YYNSYLK.js +0 -116
- package/chunks/workflow-HD5NYMW5.js +0 -2907
- package/chunks/workspace-providers-status-MAM42IZS.js +0 -120
- 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
- package/chunks/{open-with-auth-6MVIHMXB.js → open-with-auth-XFCCJOO6.js} +3 -3
|
@@ -11,12 +11,12 @@ import {
|
|
|
11
11
|
sendMessage,
|
|
12
12
|
sendTyping,
|
|
13
13
|
uploadToCdn
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-LWWRJRCD.js";
|
|
15
15
|
import {
|
|
16
16
|
ChannelBase,
|
|
17
17
|
isTerminalTaskLifecycleType
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-EPVEPTI3.js";
|
|
19
|
+
import "./chunk-IJOS26LH.js";
|
|
20
20
|
import "./chunk-CQ35AJ4Z.js";
|
|
21
21
|
import {
|
|
22
22
|
init_esbuild_shims
|
|
@@ -483,9 +483,6 @@ var WeixinChannel = class extends ChannelBase {
|
|
|
483
483
|
senderName: msg.fromUserId,
|
|
484
484
|
chatId: msg.fromUserId,
|
|
485
485
|
text: msg.text,
|
|
486
|
-
// A caption-less image or file carries only the placeholder above,
|
|
487
|
-
// which no user action can prefix -- gating it on `messagePrefix`
|
|
488
|
-
// would drop every WeChat media message.
|
|
489
486
|
...msg.syntheticText ? { syntheticText: true } : {},
|
|
490
487
|
isGroup: false,
|
|
491
488
|
isMentioned: false,
|
|
@@ -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-EPVEPTI3.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 {
|
|
@@ -1936,8 +2148,6 @@ Ask the bot operator to approve you with:
|
|
|
1936
2148
|
messageId: `todo-${fingerprint}`,
|
|
1937
2149
|
text: `Process this DingTalk todo:
|
|
1938
2150
|
${truncateCodePoints(title, MAX_COMMENT_CHARS)}`,
|
|
1939
|
-
displayText: title,
|
|
1940
|
-
bypassMessagePrefix: true,
|
|
1941
2151
|
isGroup: true,
|
|
1942
2152
|
isMentioned: true,
|
|
1943
2153
|
isReplyToBot: false,
|
|
@@ -2110,12 +2320,9 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2110
2320
|
}
|
|
2111
2321
|
if (this.shouldFilterImMessage(source, message)) {
|
|
2112
2322
|
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
|
-
}
|
|
2323
|
+
const envelope = this.createImEnvelope(source, message);
|
|
2324
|
+
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required" && !this.queuedMessages.has(key) && !this.cursor.processedMessages.includes(key) && !this.hasPendingMessage(key)) {
|
|
2325
|
+
this.recordPendingGroupHistory(envelope);
|
|
2119
2326
|
}
|
|
2120
2327
|
}
|
|
2121
2328
|
this.removePersistedPendingMessageForSource(key, source);
|
|
@@ -2288,14 +2495,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2288
2495
|
}
|
|
2289
2496
|
}
|
|
2290
2497
|
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
|
-
}
|
|
2498
|
+
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
2499
|
const target = source.kind === "direct" ? { kind: "direct", openDingTalkId: message.senderId } : { kind: "group", conversationId: message.conversationId };
|
|
2300
2500
|
this.rememberImTarget(message.conversationId, target);
|
|
2301
2501
|
if (!text) {
|
|
@@ -2303,13 +2503,14 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2303
2503
|
this.saveCursor();
|
|
2304
2504
|
return;
|
|
2305
2505
|
}
|
|
2306
|
-
const documentNotification =
|
|
2506
|
+
const documentNotification = source.kind === "direct" ? parseDocumentMentionNotification(text) : void 0;
|
|
2307
2507
|
if (documentNotification) {
|
|
2308
2508
|
await this.processDocumentNotification(message, key, documentNotification);
|
|
2309
2509
|
return;
|
|
2310
2510
|
}
|
|
2311
2511
|
const envelope = this.createImEnvelope(source, message, text);
|
|
2312
2512
|
this.rememberInboundReactionTarget(message.conversationId, message.messageId);
|
|
2513
|
+
this.imResponseKinds.set(key, source.kind !== "direct");
|
|
2313
2514
|
try {
|
|
2314
2515
|
await this.handleInbound(envelope);
|
|
2315
2516
|
} catch (error) {
|
|
@@ -2321,6 +2522,8 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2321
2522
|
throw error;
|
|
2322
2523
|
}
|
|
2323
2524
|
return;
|
|
2525
|
+
} finally {
|
|
2526
|
+
this.imResponseKinds.delete(key);
|
|
2324
2527
|
}
|
|
2325
2528
|
this.clearInboundFailure(key);
|
|
2326
2529
|
this.removePendingMessage(key);
|
|
@@ -2336,7 +2539,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2336
2539
|
chatName: message.conversationId,
|
|
2337
2540
|
messageId: message.messageId,
|
|
2338
2541
|
text,
|
|
2339
|
-
bypassMessagePrefix: true,
|
|
2340
2542
|
...message.referencedText ? { referencedText: message.referencedText } : {},
|
|
2341
2543
|
isGroup: source.kind !== "direct",
|
|
2342
2544
|
isMentioned: source.kind === "at",
|
|
@@ -2513,7 +2715,6 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2513
2715
|
threadId: notification.commentKey,
|
|
2514
2716
|
messageId: message.messageId,
|
|
2515
2717
|
text: truncateCodePoints(notification.request, MAX_COMMENT_CHARS),
|
|
2516
|
-
bypassMessagePrefix: true,
|
|
2517
2718
|
isGroup: true,
|
|
2518
2719
|
isMentioned: true,
|
|
2519
2720
|
isReplyToBot: false,
|
|
@@ -2576,12 +2777,9 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2576
2777
|
continue;
|
|
2577
2778
|
if (this.shouldFilterImMessage(pending.source, pending.message)) {
|
|
2578
2779
|
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
|
-
}
|
|
2780
|
+
const envelope = this.createImEnvelope(pending.source, pending.message);
|
|
2781
|
+
if (this.groupGate.check(envelope, { createPairingRequest: false }).reason === "mention_required") {
|
|
2782
|
+
this.recordPendingGroupHistory(envelope);
|
|
2585
2783
|
}
|
|
2586
2784
|
}
|
|
2587
2785
|
this.removePersistedPendingMessageForSource(key, pending.source);
|
|
@@ -5,12 +5,9 @@ import {
|
|
|
5
5
|
getGlobalQwenDir,
|
|
6
6
|
getWorkspaceScopeDirName,
|
|
7
7
|
sanitizeDisplayText,
|
|
8
|
-
sanitizeLogText
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
truncateCodePoints
|
|
12
|
-
} from "./chunk-WDVV3LRM.js";
|
|
13
|
-
import "./chunk-IW6RQPQB.js";
|
|
8
|
+
sanitizeLogText
|
|
9
|
+
} from "./chunk-EPVEPTI3.js";
|
|
10
|
+
import "./chunk-IJOS26LH.js";
|
|
14
11
|
import "./chunk-CQ35AJ4Z.js";
|
|
15
12
|
import {
|
|
16
13
|
require_dist
|
|
@@ -3920,7 +3917,7 @@ function isInboundEnvelope(value) {
|
|
|
3920
3917
|
if (value === null || typeof value !== "object")
|
|
3921
3918
|
return false;
|
|
3922
3919
|
const envelope = value;
|
|
3923
|
-
return typeof envelope.channelName === "string" && typeof envelope.senderId === "string" && typeof envelope.senderName === "string" && typeof envelope.chatId === "string" && typeof envelope.text === "string" && typeof envelope.isGroup === "boolean" && typeof envelope.isMentioned === "boolean" && typeof envelope.isReplyToBot === "boolean" && (envelope.chatName === void 0 || typeof envelope.chatName === "string") && (envelope.threadId === void 0 || typeof envelope.threadId === "string") && (envelope.messageId === void 0 || typeof envelope.messageId === "string") && (envelope.referencedText === void 0 || typeof envelope.referencedText === "string") && isOptionalStringArray(envelope.mentionedMemberIds) && (envelope.imageBase64 === void 0 || typeof envelope.imageBase64 === "string") && (envelope.imageMimeType === void 0 || typeof envelope.imageMimeType === "string") && (envelope.attachments === void 0 || Array.isArray(envelope.attachments)) && (envelope.metadata === void 0 || typeof envelope.metadata === "string") && (envelope.
|
|
3920
|
+
return typeof envelope.channelName === "string" && typeof envelope.senderId === "string" && typeof envelope.senderName === "string" && typeof envelope.chatId === "string" && typeof envelope.text === "string" && typeof envelope.isGroup === "boolean" && typeof envelope.isMentioned === "boolean" && typeof envelope.isReplyToBot === "boolean" && (envelope.chatName === void 0 || typeof envelope.chatName === "string") && (envelope.threadId === void 0 || typeof envelope.threadId === "string") && (envelope.messageId === void 0 || typeof envelope.messageId === "string") && (envelope.referencedText === void 0 || typeof envelope.referencedText === "string") && isOptionalStringArray(envelope.mentionedMemberIds) && (envelope.imageBase64 === void 0 || typeof envelope.imageBase64 === "string") && (envelope.imageMimeType === void 0 || typeof envelope.imageMimeType === "string") && (envelope.attachments === void 0 || Array.isArray(envelope.attachments)) && (envelope.metadata === void 0 || typeof envelope.metadata === "string") && (envelope.alreadyPrefixed === void 0 || envelope.alreadyPrefixed === true);
|
|
3924
3921
|
}
|
|
3925
3922
|
__name(isInboundEnvelope, "isInboundEnvelope");
|
|
3926
3923
|
function isInboundTaskRecord(value) {
|
|
@@ -4611,7 +4608,6 @@ var GithubChannel = class extends PollingChannelBase {
|
|
|
4611
4608
|
return;
|
|
4612
4609
|
const meta = reason === "review_requested" ? await this.fetchPrMeta(ctx) : await this.fetchIssueMeta(ctx);
|
|
4613
4610
|
const title = meta.title || ctx.subjectTitle;
|
|
4614
|
-
const displayTitle = truncateCodePoints(sanitizePromptText(title), 500);
|
|
4615
4611
|
const details = reason === "review_requested" ? `Author: ${meta.user?.login || "unknown"} | State: ${meta.state || "unknown"} | Draft: ${meta.draft ? "true" : "false"} | Branch: ${meta.head?.ref || "unknown"} \u2192 ${meta.base?.ref || "unknown"}` : `Author: ${meta.user?.login || "unknown"} | State: ${meta.state || "unknown"}`;
|
|
4616
4612
|
const envelope = {
|
|
4617
4613
|
channelName: this.name,
|
|
@@ -4623,8 +4619,6 @@ var GithubChannel = class extends PollingChannelBase {
|
|
|
4623
4619
|
// acknowledgements only target real comment messages.
|
|
4624
4620
|
messageId: `event-${trigger.id}`,
|
|
4625
4621
|
text: reason === "review_requested" ? "Return a formal review summary with verified actionable findings, or a concise no-blocker result." : "Triage this issue and respond with the next action.",
|
|
4626
|
-
displayText: reason === "review_requested" ? `Review requested: ${displayTitle}` : `Issue assigned: ${displayTitle}`,
|
|
4627
|
-
bypassMessagePrefix: true,
|
|
4628
4622
|
isGroup: true,
|
|
4629
4623
|
isMentioned: true,
|
|
4630
4624
|
isReplyToBot: false,
|
|
@@ -4652,12 +4646,7 @@ ${details}`
|
|
|
4652
4646
|
for (const comment of newComments) {
|
|
4653
4647
|
this.recordDispatchedComment(comment.node_id || String(comment.id));
|
|
4654
4648
|
}
|
|
4655
|
-
const
|
|
4656
|
-
const comments = newComments.flatMap((comment) => {
|
|
4657
|
-
const rawBody = comment.body || "";
|
|
4658
|
-
const body = messagePrefix ? stripMessagePrefix(this.botUsername ? stripBotMention(rawBody, this.botUsername) : rawBody, messagePrefix) : rawBody.trim();
|
|
4659
|
-
return body === void 0 ? [] : [{ comment, body }];
|
|
4660
|
-
}).slice(-MAX_AGGREGATE_COMMENTS);
|
|
4649
|
+
const comments = newComments.map((comment) => ({ comment, body: (comment.body || "").trim() })).slice(-MAX_AGGREGATE_COMMENTS);
|
|
4661
4650
|
if (comments.length === 0)
|
|
4662
4651
|
return;
|
|
4663
4652
|
const first = comments[0].comment;
|
|
@@ -4671,8 +4660,6 @@ ${details}`
|
|
|
4671
4660
|
messageId: String(first.id),
|
|
4672
4661
|
text: `Review these new comments and output exactly ${NO_REPLY_SENTINEL} if no public reply is needed:
|
|
4673
4662
|
${summary}`,
|
|
4674
|
-
displayText: summary,
|
|
4675
|
-
bypassMessagePrefix: true,
|
|
4676
4663
|
isGroup: true,
|
|
4677
4664
|
isMentioned: true,
|
|
4678
4665
|
isReplyToBot: false,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import {
|
|
4
|
-
require_lib
|
|
5
|
-
} from "./chunk-ZL4HFSL6.js";
|
|
6
3
|
import {
|
|
7
4
|
require_axios,
|
|
8
5
|
require_ws
|
|
9
6
|
} from "./chunk-JJKNYRFY.js";
|
|
7
|
+
import {
|
|
8
|
+
require_lib
|
|
9
|
+
} from "./chunk-ZL4HFSL6.js";
|
|
10
10
|
import "./chunk-OBTWL6ZW.js";
|
|
11
11
|
import "./chunk-K6KS3LTN.js";
|
|
12
12
|
import "./chunk-OSHQMOBS.js";
|
|
@@ -15,10 +15,9 @@ import {
|
|
|
15
15
|
ChannelProactiveDeliveryError,
|
|
16
16
|
isChannelProactiveDeliveryError,
|
|
17
17
|
isTerminalTaskLifecycleType,
|
|
18
|
-
sanitizeSenderName
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
import "./chunk-IW6RQPQB.js";
|
|
18
|
+
sanitizeSenderName
|
|
19
|
+
} from "./chunk-EPVEPTI3.js";
|
|
20
|
+
import "./chunk-IJOS26LH.js";
|
|
22
21
|
import "./chunk-CQ35AJ4Z.js";
|
|
23
22
|
import {
|
|
24
23
|
require_index_minimal
|
|
@@ -102065,25 +102064,6 @@ var FEISHU_STATUS_STRINGS = [
|
|
|
102065
102064
|
];
|
|
102066
102065
|
var escapeRegExp = /* @__PURE__ */ __name((value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "escapeRegExp");
|
|
102067
102066
|
var escapeFeishuMarkdown = /* @__PURE__ */ __name((value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replace(/([\\`*_[\]{}()#+.!|>~-])/gu, "\\$1"), "escapeFeishuMarkdown");
|
|
102068
|
-
function stripLeadingMentionNames(text, names, prefix) {
|
|
102069
|
-
let rest = text.trimStart();
|
|
102070
|
-
const tokens = [
|
|
102071
|
-
...new Set(names.filter(Boolean).map((name) => `@${name}`))
|
|
102072
|
-
].sort((a, b) => b.length - a.length);
|
|
102073
|
-
let consumed = true;
|
|
102074
|
-
while (consumed && !(prefix && startsWithMessagePrefix(rest, prefix))) {
|
|
102075
|
-
consumed = false;
|
|
102076
|
-
for (const token of tokens) {
|
|
102077
|
-
if (!rest.startsWith(token))
|
|
102078
|
-
continue;
|
|
102079
|
-
rest = rest.slice(token.length).trimStart();
|
|
102080
|
-
consumed = true;
|
|
102081
|
-
break;
|
|
102082
|
-
}
|
|
102083
|
-
}
|
|
102084
|
-
return rest;
|
|
102085
|
-
}
|
|
102086
|
-
__name(stripLeadingMentionNames, "stripLeadingMentionNames");
|
|
102087
102067
|
var FEISHU_STATUS_LABELS = `(?:${FEISHU_STATUS_STRINGS.map(escapeRegExp).join("|")})`;
|
|
102088
102068
|
var FEISHU_STATUS_BLOCK_RE = new RegExp(`(?:^|\\n)---\\n\\*${FEISHU_STATUS_LABELS}\\*(?=\\n|$)`, "g");
|
|
102089
102069
|
var FEISHU_SOURCE_LABEL_LINE_RE = /^\\\[(?:[A-Za-z0-9](?:[A-Za-z0-9]|\\[_-]){0,31}|[^\r\n]+ · [A-Za-z0-9](?:[A-Za-z0-9]|\\[_-]){0,31})\\\](?:\n\n?)?/u;
|
|
@@ -103750,7 +103730,6 @@ ${contentPart}` : prefix : contentPart;
|
|
|
103750
103730
|
const content = this.extractContent(msg.message_type, msg.content);
|
|
103751
103731
|
let isMentioned = false;
|
|
103752
103732
|
let cleanText = content.text;
|
|
103753
|
-
const mentionNames = [...content.mentionNames ?? []];
|
|
103754
103733
|
if (msg.mentions && msg.mentions.length > 0) {
|
|
103755
103734
|
const mentionReplacements = /* @__PURE__ */ new Map();
|
|
103756
103735
|
for (const mention of msg.mentions) {
|
|
@@ -103760,8 +103739,6 @@ ${contentPart}` : prefix : contentPart;
|
|
|
103760
103739
|
isMentioned = true;
|
|
103761
103740
|
}
|
|
103762
103741
|
mentionReplacements.set(mention.key, isBotMention ? "" : `@${mention.name}`);
|
|
103763
|
-
if (!isBotMention && mention.name)
|
|
103764
|
-
mentionNames.push(mention.name);
|
|
103765
103742
|
}
|
|
103766
103743
|
const mentionKeys = [...mentionReplacements.keys()].sort((a, b) => b.length - a.length);
|
|
103767
103744
|
if (mentionKeys.length > 0) {
|
|
@@ -103774,7 +103751,6 @@ ${contentPart}` : prefix : contentPart;
|
|
|
103774
103751
|
this.msgToSenderId.delete(msgId);
|
|
103775
103752
|
return;
|
|
103776
103753
|
}
|
|
103777
|
-
const messagePrefixText = stripLeadingMentionNames(cleanText, mentionNames, this.configuredMessagePrefix());
|
|
103778
103754
|
const envelope = {
|
|
103779
103755
|
channelName: this.name,
|
|
103780
103756
|
senderId,
|
|
@@ -103782,11 +103758,7 @@ ${contentPart}` : prefix : contentPart;
|
|
|
103782
103758
|
chatId,
|
|
103783
103759
|
...chatName ? { chatName } : {},
|
|
103784
103760
|
text: cleanText,
|
|
103785
|
-
// A media message carries only an adapter-synthesized placeholder,
|
|
103786
|
-
// which no user action can prefix -- gating it would drop every
|
|
103787
|
-
// image, file, audio and video with the prefix configured.
|
|
103788
103761
|
...!content.userAuthoredText ? { syntheticText: true } : {},
|
|
103789
|
-
messagePrefixText: messagePrefixText.trim(),
|
|
103790
103762
|
messageId: msgId,
|
|
103791
103763
|
threadId: msg.root_id || void 0,
|
|
103792
103764
|
isGroup,
|
|
@@ -103926,7 +103898,6 @@ ${envelope.text}`;
|
|
|
103926
103898
|
};
|
|
103927
103899
|
case "post": {
|
|
103928
103900
|
const lines = [];
|
|
103929
|
-
const mentionNames = [];
|
|
103930
103901
|
const post = content;
|
|
103931
103902
|
const firstVal = Object.values(post)[0];
|
|
103932
103903
|
const langPost = typeof firstVal === "object" && firstVal !== null ? firstVal : post;
|
|
@@ -103945,7 +103916,6 @@ ${envelope.text}`;
|
|
|
103945
103916
|
const userName = node["user_name"];
|
|
103946
103917
|
if (typeof userName === "string" && userName) {
|
|
103947
103918
|
parts.push(`@${userName}`);
|
|
103948
|
-
mentionNames.push(userName);
|
|
103949
103919
|
}
|
|
103950
103920
|
}
|
|
103951
103921
|
}
|
|
@@ -103954,7 +103924,6 @@ ${envelope.text}`;
|
|
|
103954
103924
|
}
|
|
103955
103925
|
return {
|
|
103956
103926
|
text: lines.join("\n").trim() || "",
|
|
103957
|
-
mentionNames,
|
|
103958
103927
|
userAuthoredText: true
|
|
103959
103928
|
};
|
|
103960
103929
|
}
|