@qwen-code/qwen-code 0.22.3 → 0.23.0
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 +30 -0
- package/bundled/computer-use/SKILL.md +116 -180
- package/bundled/goal-draft/SKILL.md +5 -1
- package/bundled/qc-helper/docs/common-workflow.md +32 -0
- package/bundled/qc-helper/docs/configuration/auth.md +6 -6
- package/bundled/qc-helper/docs/configuration/model-providers.md +8 -2
- package/bundled/qc-helper/docs/configuration/settings.md +63 -58
- package/bundled/qc-helper/docs/extension/introduction.md +1 -1
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
- package/bundled/qc-helper/docs/features/auto-mode.md +34 -17
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +4 -2
- package/bundled/qc-helper/docs/features/channels/dws.md +6 -2
- package/bundled/qc-helper/docs/features/channels/overview.md +5 -2
- package/bundled/qc-helper/docs/features/code-review.md +2 -2
- package/bundled/qc-helper/docs/features/commands.md +79 -1
- package/bundled/qc-helper/docs/features/computer-use.md +2 -2
- package/bundled/qc-helper/docs/features/goals.md +9 -3
- package/bundled/qc-helper/docs/features/headless.md +16 -1
- package/bundled/qc-helper/docs/features/hooks.md +8 -3
- package/bundled/qc-helper/docs/features/memory.md +1 -0
- package/bundled/qc-helper/docs/features/output-styles.md +38 -0
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +17 -7
- package/bundled/qc-helper/docs/qwen-serve.md +74 -55
- package/bundled/review/SKILL.md +16 -7
- package/bundled/review/references/posting.md +3 -3
- package/chunks/MaxSizedBox-B3D7545A.js +111 -0
- package/chunks/{StandaloneSessionPicker-2FJAOLGG.js → StandaloneSessionPicker-QUMO4LLQ.js} +88 -86
- package/chunks/{acp-startup-profiler-GNYAL6LI.js → acp-startup-profiler-M4X5F3VK.js} +2 -2
- package/chunks/{acpAgent-2ZMIJAFV.js → acpAgent-2GTFCIEP.js} +2041 -444
- package/chunks/{agent-X5WX3L2I.js → agent-XKF5SZWU.js} +46 -46
- package/chunks/agent-headless-OC2IB55D.js +85 -0
- package/chunks/{anthropicContentGenerator-YVTB6QX7.js → anthropicContentGenerator-L76MR5OR.js} +53 -20
- package/chunks/{artifact-tool-XSMPHZBT.js → artifact-tool-MYCL2QCS.js} +3 -4
- package/chunks/{askUserQuestion-4SWJY65V.js → askUserQuestion-THQZMG44.js} +45 -7
- package/chunks/bridge-IHSBI2YJ.js +118 -0
- package/chunks/{build-INBK7IXX.js → build-63BIOYWK.js} +1 -1
- package/chunks/{ca-7HPYOYSZ.js → ca-BNU7YNDE.js} +3 -0
- package/chunks/{channel-management-service-HQ6KDS7C.js → channel-management-service-4MTCEGJB.js} +4 -4
- package/chunks/channel-settings-store-BVKWAI2T.js +121 -0
- package/chunks/{channel-worker-group-6NA6BBZV.js → channel-worker-group-47F4ISUZ.js} +7 -7
- package/chunks/{channel-worker-manager-NEZ2J6RK.js → channel-worker-manager-I5Y44GYR.js} +51 -10
- package/chunks/{channel-worker-supervisor-FKU7DIHJ.js → channel-worker-supervisor-6VCLUXFE.js} +4 -4
- package/chunks/{chunk-PPKZ7JOE.js → chunk-22UH7VTP.js} +1 -1
- package/chunks/chunk-24FVUD5P.js +49 -0
- package/chunks/{chunk-MZCJWS5Y.js → chunk-2M3EWQNG.js} +20 -0
- package/chunks/{chunk-7T52W4SW.js → chunk-32LU3APX.js} +1 -1
- package/chunks/{chunk-42IDLQWS.js → chunk-373DQUVA.js} +48 -13
- package/chunks/{chunk-MSBO7X2W.js → chunk-37JFWFCD.js} +1 -1
- package/chunks/{chunk-3JXM2CVW.js → chunk-3AKCBZVW.js} +3 -3
- package/chunks/{chunk-TVC6HQ2U.js → chunk-3JQZVCBI.js} +2 -2
- package/chunks/{chunk-2LNNVAUV.js → chunk-3L724BJ5.js} +246 -15
- package/chunks/{chunk-E7REAOTN.js → chunk-47ECGEJC.js} +4 -0
- package/chunks/{chunk-WNPDGUJO.js → chunk-47RYEQW5.js} +2 -3
- package/chunks/{chunk-TZBSGJ6C.js → chunk-4BGDFKQE.js} +7 -7
- package/chunks/{chunk-PZ66FRIC.js → chunk-4F7GQGXB.js} +11772 -4773
- package/chunks/{chunk-DMLVSW7L.js → chunk-4HVH57J3.js} +713 -9
- package/chunks/{chunk-CMHFCLBU.js → chunk-4LIFGNI4.js} +1 -1
- package/chunks/{chunk-3SZC4VP4.js → chunk-4M24B5J5.js} +88 -49
- package/chunks/{chunk-BOWFGCEU.js → chunk-4PSDSCW3.js} +3 -3
- package/chunks/chunk-4UANMABT.js +1026 -0
- package/chunks/{chunk-M3QRM3DE.js → chunk-54C6PIGT.js} +5 -5
- package/chunks/{chunk-HP5LR5HL.js → chunk-5EIOJGCR.js} +4 -4
- package/chunks/{chunk-64REQJJ2.js → chunk-5H5S4UY5.js} +3 -3
- package/chunks/chunk-5IENVM7Z.js +35 -0
- package/chunks/{chunk-I6LYRJPB.js → chunk-5Q5RC2WE.js} +2 -2
- package/chunks/{chunk-WGY3AVGM.js → chunk-5RTTI4GE.js} +79 -5
- package/chunks/{chunk-KID24ZFN.js → chunk-64QH2UC6.js} +13 -1
- package/chunks/{chunk-MF7HCQWZ.js → chunk-65HWLGA7.js} +3 -3
- package/chunks/{chunk-OU5APVWO.js → chunk-6A2D4QSO.js} +13 -7
- package/chunks/chunk-6HUXPLB5.js +110 -0
- package/chunks/{chunk-VQUGEVGR.js → chunk-7IKXTGZT.js} +1 -1
- package/chunks/{chunk-UTLCH2FK.js → chunk-7JMGTOH7.js} +437 -136
- package/chunks/{chunk-7LOELM2I.js → chunk-7RB56BRJ.js} +3 -3
- package/chunks/{chunk-NIFYWDYN.js → chunk-7TBU7PU2.js} +1 -1
- package/chunks/{chunk-V2NDP3I4.js → chunk-7XL4WRXM.js} +2 -2
- package/chunks/chunk-ADJD4LZF.js +210 -0
- package/chunks/{chunk-T7KMERIX.js → chunk-ADYN7P2Y.js} +2 -2
- package/chunks/{chunk-TPI7O7HR.js → chunk-AHYTURFB.js} +1 -1
- package/chunks/{chunk-LUEHOUHM.js → chunk-AI35S34R.js} +3 -3
- package/chunks/{chunk-CIZCL2MW.js → chunk-ALUYNJPM.js} +1486 -2172
- package/chunks/{chunk-ABS25QER.js → chunk-ANVG3BVV.js} +1 -1
- package/chunks/{chunk-6ZPDLGHN.js → chunk-AZJLY2XZ.js} +5 -5
- package/chunks/{chunk-A3LWD5MK.js → chunk-BA4WJC4L.js} +1 -1
- package/chunks/{chunk-W3JH33JE.js → chunk-BFY33IB4.js} +18 -10
- package/chunks/{chunk-N4X7G4J2.js → chunk-BHTYRHJF.js} +1 -1
- package/chunks/{chunk-TEBDFQBZ.js → chunk-BJXCYUGM.js} +11 -6
- package/chunks/{chunk-7VMIMAVB.js → chunk-C2VWOXHS.js} +8 -8
- package/chunks/{chunk-XHF7WQ6B.js → chunk-C4TIXFDZ.js} +16 -5
- package/chunks/chunk-CHEIIBT3.js +40 -0
- package/chunks/chunk-CVX63TFJ.js +348 -0
- package/chunks/{chunk-RXFQM6FQ.js → chunk-DMEUXLSS.js} +16 -1
- package/chunks/{chunk-EKSCLBBF.js → chunk-DQCKVAF5.js} +23 -5
- package/chunks/{chunk-734C6JGI.js → chunk-DSX7KQPM.js} +5195 -666
- package/chunks/{chunk-4CMJKUND.js → chunk-DTVQSSNM.js} +67 -2
- package/chunks/{chunk-BKWNKLZB.js → chunk-DYTW3QVG.js} +24 -9
- package/chunks/{chunk-C2X7KY45.js → chunk-E4JNFXNI.js} +3 -3
- package/chunks/{chunk-UHQFIS7N.js → chunk-EAHOJF6V.js} +28 -4
- package/chunks/{chunk-YLSQLSH7.js → chunk-EBDGRBZX.js} +24 -16
- package/chunks/{chunk-DJBQCO2E.js → chunk-EFTPIZIC.js} +412 -3
- package/chunks/{chunk-6DIGWMGT.js → chunk-EIJT2PQ6.js} +2 -2
- package/chunks/{chunk-4TT3IVGA.js → chunk-EIY7SUPZ.js} +1 -1
- package/chunks/{chunk-XQFT3QUF.js → chunk-ENYUKMFK.js} +1 -1
- package/chunks/{chunk-ZWJDJ6RU.js → chunk-EVFDRBUM.js} +157 -153
- package/chunks/{chunk-4VPCTGH6.js → chunk-EWRW2WQC.js} +15 -9
- package/chunks/{chunk-VBCPNIQD.js → chunk-F33GFWPR.js} +47 -184
- package/chunks/{chunk-ERFDKH32.js → chunk-F47DITLZ.js} +19 -8
- package/chunks/{chunk-73RM4POK.js → chunk-F7NF2IOE.js} +7 -7
- package/chunks/{chunk-EB6QRGHM.js → chunk-FD5SJOWT.js} +10 -7
- package/chunks/{chunk-SS5SDCD3.js → chunk-FRICLXCZ.js} +7 -7
- package/chunks/{chunk-NU7RKEZR.js → chunk-FUO5V5KI.js} +14 -7
- package/chunks/{chunk-G6FECKTJ.js → chunk-G5PBOQWI.js} +9 -6
- package/chunks/{chunk-CAJTKR6W.js → chunk-G7HBEEX7.js} +15 -9
- package/chunks/{chunk-4QHPPXK2.js → chunk-GB4UKWY5.js} +2 -2
- package/chunks/{chunk-QYMAKPY5.js → chunk-GH2S4GD5.js} +350 -12
- package/chunks/{chunk-LHBUKJG2.js → chunk-GXUTFQXK.js} +28 -25
- package/chunks/{chunk-KJO2LBUK.js → chunk-H43PSPYS.js} +5 -5
- package/chunks/{chunk-XSG6G3G6.js → chunk-HJBHMANB.js} +12 -14
- package/chunks/chunk-HRPFBHW7.js +336 -0
- package/chunks/{chunk-6PJOTWAN.js → chunk-HT5S5TRQ.js} +1 -1
- package/chunks/{chunk-HCOBAG2L.js → chunk-HWVUSYSN.js} +3 -8
- package/chunks/{chunk-2OUD5T67.js → chunk-I2TMJPCV.js} +213 -185
- package/chunks/{chunk-CLWO3B77.js → chunk-I4NRYS6A.js} +11 -11
- package/chunks/{chunk-V7EESTJV.js → chunk-I5N4EAS6.js} +1 -1
- package/chunks/{chunk-K5KXUXWC.js → chunk-IG4W5SJR.js} +3 -3
- package/chunks/{chunk-FROAFEFB.js → chunk-IPATA3T2.js} +3 -3
- package/chunks/{chunk-NKLP3DCK.js → chunk-IQAFKVXS.js} +1 -1
- package/chunks/{chunk-AYHQZBJ4.js → chunk-IRKQ4YYX.js} +3 -3
- package/chunks/{chunk-J3NNHTV6.js → chunk-J5TTWBZK.js} +6 -0
- package/chunks/{chunk-QFCDF5PL.js → chunk-JHN7UIDW.js} +1 -1
- package/chunks/{chunk-AVNATYLY.js → chunk-JJKNYRFY.js} +1 -1
- package/chunks/{chunk-CQH5KTKC.js → chunk-JR42V4UY.js} +1 -1
- package/chunks/chunk-JS73NNWF.js +30 -0
- package/chunks/{chunk-NV55WWD6.js → chunk-JUARRUMA.js} +802 -2011
- package/chunks/chunk-JX6XHPTX.js +26 -0
- package/chunks/{chunk-5JTIYALA.js → chunk-JZWOCUZ3.js} +1 -1
- package/chunks/{chunk-P2G476QN.js → chunk-KEVYJSI4.js} +13 -13
- package/chunks/{chunk-B466ZSHZ.js → chunk-KFN2IZYR.js} +3 -3
- package/chunks/{chunk-JWALNCLT.js → chunk-KGV55H53.js} +1 -1
- package/chunks/{chunk-23RFD54N.js → chunk-KHP66DFN.js} +1 -1
- package/chunks/{chunk-2SXSLSQE.js → chunk-KM3XVTMO.js} +12 -6
- package/chunks/{chunk-GPGU4S2N.js → chunk-KMU3ZHH4.js} +3 -3
- package/chunks/chunk-KOGW3YWJ.js +2054 -0
- package/chunks/{chunk-NMOD2FXQ.js → chunk-L26ONV2Y.js} +8 -8
- package/chunks/chunk-L34XSHIZ.js +28 -0
- package/chunks/{chunk-SEONHUS3.js → chunk-LAUEEBDL.js} +2 -0
- package/chunks/{chunk-3WK3QDNV.js → chunk-LB3WQQJK.js} +2 -2
- package/chunks/{chunk-URE3QBBB.js → chunk-LEPCWS5A.js} +3 -3
- package/chunks/{chunk-36GSQ3MM.js → chunk-LHBNR6EU.js} +2 -2
- package/chunks/{chunk-V4264FEG.js → chunk-LKODFJRD.js} +1 -1
- package/chunks/{chunk-PADPMMYM.js → chunk-LOBDDFYK.js} +5 -29
- package/chunks/{chunk-BXDAPVQU.js → chunk-LU77UT4D.js} +28 -4
- package/chunks/{chunk-RFIDDFAL.js → chunk-M4KFODIP.js} +1 -1
- package/chunks/{chunk-CFJY4DGX.js → chunk-M4LBBSVP.js} +4 -2
- package/chunks/{chunk-KYWTPLBJ.js → chunk-MOF6VZN2.js} +2 -2
- package/chunks/{chunk-DJPASAUV.js → chunk-MP6YZ4RK.js} +4829 -3638
- package/chunks/{chunk-T26EAKDL.js → chunk-N2TNM3QB.js} +2 -6
- package/chunks/{chunk-2TNL5KPM.js → chunk-N4QWUPDM.js} +7 -0
- package/chunks/{chunk-7S226YTK.js → chunk-NFIDVZND.js} +11 -1
- package/chunks/{chunk-ZEYFMJQA.js → chunk-NQ4L2CMD.js} +83 -18
- package/chunks/{chunk-ZZUKP7HV.js → chunk-NRL5CUZT.js} +1 -1
- package/chunks/{chunk-WXEA74YB.js → chunk-NSUKQ4DN.js} +9 -3
- package/chunks/chunk-NUHOLAQ6.js +59 -0
- package/chunks/{chunk-DJEZ55D4.js → chunk-NVVJTUSL.js} +336 -140
- package/chunks/{chunk-3XKLXHGK.js → chunk-NXKOVOM5.js} +9 -9
- package/chunks/{chunk-5Q372OFJ.js → chunk-O4KNCAX4.js} +57 -10
- package/chunks/{chunk-GOXKNSDZ.js → chunk-O5CD7T4T.js} +40 -9
- package/chunks/{chunk-XIQ5HQ2F.js → chunk-OBTWL6ZW.js} +1 -1
- package/chunks/{chunk-PDQGMSZK.js → chunk-ODZF64DM.js} +1 -1
- package/chunks/{chunk-5MK45KZ3.js → chunk-OHOO527W.js} +1 -1
- package/chunks/{chunk-36LGBEM6.js → chunk-OHU2H5CS.js} +1 -1
- package/chunks/{chunk-JB4JIVTJ.js → chunk-OKTNXDVO.js} +1 -1
- package/chunks/{chunk-CETB5XY4.js → chunk-ORFIYTI2.js} +1 -1
- package/chunks/{chunk-7E7UCJHS.js → chunk-OSHQMOBS.js} +18 -17
- package/chunks/chunk-OSSTATJF.js +1310 -0
- package/chunks/chunk-P6UIF2OW.js +400 -0
- package/chunks/{chunk-U54AYGEC.js → chunk-PB7JBAHF.js} +15 -49
- package/chunks/{chunk-Y5S7LBOZ.js → chunk-PCRBLMIN.js} +17 -3
- package/chunks/{chunk-WAOIHTJS.js → chunk-PDAKFU7M.js} +1 -1
- package/chunks/{chunk-YTDVNSUQ.js → chunk-QAK5475D.js} +1 -1
- package/chunks/{chunk-ST5MDGH3.js → chunk-QI27MKNQ.js} +27 -19
- package/chunks/{chunk-MK2GIB46.js → chunk-QJGYU5PG.js} +1 -1
- package/chunks/{chunk-SMPR7SPO.js → chunk-QJNDUTOL.js} +45 -239
- package/chunks/{chunk-MQM5PJML.js → chunk-QJVZLILI.js} +1 -1
- package/chunks/{chunk-B5PHIJGI.js → chunk-QKDNS6FU.js} +2 -2
- package/chunks/{chunk-ZU4UDIWX.js → chunk-QQD2GART.js} +15 -9
- package/chunks/{chunk-62GQFYID.js → chunk-RAFQIHN2.js} +3 -3
- package/chunks/{chunk-MO3FC2WT.js → chunk-RJUVTJEZ.js} +1 -1
- package/chunks/{chunk-M6FOJXW3.js → chunk-RKW36UWC.js} +1 -1
- package/chunks/{chunk-GBJBJ4HX.js → chunk-RM4WT2XB.js} +4 -26
- package/chunks/{chunk-VGIFXISB.js → chunk-RN3YGDCA.js} +7 -5
- package/chunks/{chunk-DYXFD5RO.js → chunk-S2T7H5MI.js} +1 -1
- package/chunks/{chunk-FTF2YIZ5.js → chunk-S6H3ELPG.js} +1 -1
- package/chunks/{chunk-4NDLQAY2.js → chunk-SI7WDR3U.js} +524 -16
- package/chunks/{chunk-2YOHKHYR.js → chunk-SRF4KTAG.js} +6 -6
- package/chunks/{chunk-ZZMSC3RG.js → chunk-STCVJXQB.js} +24 -24
- package/chunks/{chunk-ST5V3ZOC.js → chunk-SULZPKTA.js} +3 -3
- package/chunks/{chunk-6X7EU5TI.js → chunk-SX2QIMJV.js} +9 -7
- package/chunks/{chunk-V5J4J5TP.js → chunk-TJYRTS4S.js} +2 -20
- package/chunks/{chunk-C3PEFRKD.js → chunk-TMKTOTMQ.js} +5 -5
- package/chunks/{chunk-ISKH4QX3.js → chunk-TQHPVKO6.js} +4 -4
- package/chunks/{chunk-HVC3PNVC.js → chunk-TSZSGQ3N.js} +1 -1
- package/chunks/{chunk-ICURCKIU.js → chunk-U4DJ5XB3.js} +594 -91
- package/chunks/{chunk-TTX2JUE6.js → chunk-U6D2PPMN.js} +1 -1
- package/chunks/{chunk-GVIVASYK.js → chunk-UAKRDON5.js} +4 -4
- package/chunks/{chunk-D5LUXLUH.js → chunk-UJ4DUYIH.js} +18 -4
- package/chunks/{chunk-VTHREBQM.js → chunk-UKYXYWI2.js} +2 -2
- package/chunks/{chunk-ZYMLPEZQ.js → chunk-UM2FFKXN.js} +3 -3
- package/chunks/{chunk-2OBKDPZZ.js → chunk-UPFRILIL.js} +2 -2
- package/chunks/{chunk-2HYKTO7V.js → chunk-UUASLXHW.js} +55 -6
- package/chunks/chunk-V5U2NZNJ.js +29 -0
- package/chunks/{chunk-P5Y23G2L.js → chunk-V7RNNPGC.js} +1 -18
- package/chunks/{chunk-Q2MSPKIJ.js → chunk-VBWD6C27.js} +1 -1
- package/chunks/chunk-VGHZT6JR.js +51 -0
- package/chunks/{chunk-MPNBVAEU.js → chunk-VNAYZAFX.js} +4 -4
- package/chunks/chunk-VPSIC437.js +780 -0
- package/chunks/{chunk-AIAOIFY4.js → chunk-VWTSRH6C.js} +92 -17
- package/chunks/{chunk-4K7KNVWH.js → chunk-VYIUNFEA.js} +3 -3
- package/chunks/{chunk-EQSBPBZ3.js → chunk-WP4AX3XD.js} +5 -7
- package/chunks/{chunk-BFPESSTR.js → chunk-XEAAO654.js} +1 -1
- package/chunks/{chunk-RU7BK6B3.js → chunk-XLXAZLDR.js} +3 -3
- package/chunks/{chunk-EFWRMA2I.js → chunk-YPWZTR7F.js} +3 -3
- package/chunks/{chunk-XF63PKEN.js → chunk-ZDFQGHZH.js} +1 -1
- package/chunks/{chunk-OZ6KS6KW.js → chunk-ZGCKTAL5.js} +6 -1
- package/chunks/chunk-ZHO2CW6D.js +205 -0
- package/chunks/chunk-ZJ2LM2SI.js +198 -0
- package/chunks/{chunk-AYFA7MZV.js → chunk-ZKFTS3OV.js} +6 -6
- package/chunks/{chunk-HMJ2P3SV.js → chunk-ZL4HFSL6.js} +91 -29
- package/chunks/{chunk-DJECZIJX.js → chunk-ZTPGUFQV.js} +30 -8
- package/chunks/{chunk-7EQQR46F.js → chunk-ZVP4PWBU.js} +1 -1
- package/chunks/chunk-bdqvmfwv-ZTSOWAFE.js +17446 -0
- package/chunks/config-utils-LVSYDLHZ.js +114 -0
- package/chunks/contextCommand-TZD7UAJK.js +107 -0
- package/chunks/{core-runtime-AXB6SK5D.js → core-runtime-B4UKKIAQ.js} +63 -62
- package/chunks/{create-sub-session-23ITIELI.js → create-sub-session-LUPWEUHR.js} +3 -3
- package/chunks/{create-sub-session-4QNE64MR.js → create-sub-session-NJ24B4US.js} +94 -66
- package/chunks/{cron-create-KJ4IY6PP.js → cron-create-CRSPET3H.js} +4 -4
- package/chunks/{cron-delete-MBLQCAYY.js → cron-delete-DB77SZTU.js} +4 -4
- package/chunks/{cron-list-DWH2PQ47.js → cron-list-U2JNYWV6.js} +4 -4
- package/chunks/{daemon-3GNHB3M2.js → daemon-RKDGBFLK.js} +613 -102
- package/chunks/{daemon-git-worktree-guard-IVAJJWYK.js → daemon-git-worktree-guard-O2HPOBAB.js} +62 -61
- package/chunks/daemon-status-provider-GRRVCJFW.js +117 -0
- package/chunks/daemon-trust-policy-YJL442BK.js +113 -0
- package/chunks/{daemon-trust-policy-monitor-KGGROSIV.js → daemon-trust-policy-monitor-JL7F4Y4Q.js} +68 -67
- package/chunks/{de-X6HLSIFE.js → de-T4BLOKEC.js} +3 -0
- package/chunks/deferred-core-runtime-S32AYVZI.js +115 -0
- package/chunks/{devtools-JCG4K2NZ.js → devtools-VDRJYPZF.js} +1 -1
- package/chunks/{discovery-X2NV535U.js → discovery-TUM3ZQ6U.js} +2 -2
- package/chunks/{display-image-BE7I6ZB6.js → display-image-73C7XNRK.js} +5 -5
- package/chunks/{dist-LVZCXVPF.js → dist-62OZ7QXB.js} +44 -26
- package/chunks/{dist-GFN5DCBX.js → dist-EDHQIBYD.js} +152 -63
- package/chunks/{dist-N6W6E753.js → dist-GT64AAUR.js} +135 -26
- package/chunks/{dist-6BPYWHVD.js → dist-JVXT4VUJ.js} +14 -7
- package/chunks/{dist-4WXLCBDR.js → dist-L6URO6CK.js} +12 -5
- package/chunks/{dist-5VXFRTWU.js → dist-LXFYIJNG.js} +866 -172
- package/chunks/{dist-SWQMYP2Q.js → dist-PDGNRVPY.js} +27 -8
- package/chunks/{dist-NSV4NBPK.js → dist-QAF5DO3Y.js} +380 -83
- package/chunks/{dist-HZNT6GQS.js → dist-ZCJLKQSP.js} +28 -14
- package/chunks/earlyInputCapture-BBPCIVZG.js +108 -0
- package/chunks/{edit-LEQLAGPZ.js → edit-SUGXY63Y.js} +47 -47
- package/chunks/{en-YLXBXM4Z.js → en-2RATMNX7.js} +5 -0
- package/chunks/{enter-worktree-35QCAAFP.js → enter-worktree-B6USKSIK.js} +7 -7
- package/chunks/{enterPlanMode-ONQN3WHE.js → enterPlanMode-MDX4RVVL.js} +48 -48
- package/chunks/{environment-UANTR7A4.js → environment-VN6RXDVN.js} +63 -62
- package/chunks/errors-UEY36PIT.js +114 -0
- package/chunks/{exit-worktree-XQD6D543.js → exit-worktree-DLQ73SJH.js} +10 -8
- package/chunks/exitPlanMode-EPHIEDAA.js +83 -0
- package/chunks/{fast-path-WUL7UZ6H.js → fast-path-Y73R42LV.js} +8 -7
- package/chunks/{fast-path-settings-XH426LUU.js → fast-path-settings-MFUR3IWK.js} +3 -3
- package/chunks/{fr-FTZWF462.js → fr-BGHGYX6A.js} +3 -0
- package/chunks/{glob-Y54QUWDY.js → glob-DMGH7EZN.js} +47 -47
- package/chunks/goal-tools-3RF3PXCL.js +99 -0
- package/chunks/{grep-5GPICQBU.js → grep-AJVLCVXC.js} +9 -7
- package/chunks/handleAutoUpdate-HVWQT2AU.js +110 -0
- package/chunks/i18n-5OR7NTRZ.js +125 -0
- package/chunks/{image-gen-J6FDGUZP.js → image-gen-VOIDOHOB.js} +8 -8
- package/chunks/initializer-JE5RQSOE.js +114 -0
- package/chunks/installationInfo-KO3CCSCK.js +108 -0
- package/chunks/{ja-2GL5FKYJ.js → ja-G3FTD5XE.js} +3 -0
- package/chunks/{keychain-token-storage-37XPR34V.js → keychain-token-storage-REZVMJA6.js} +2 -2
- package/chunks/list-3IORSFIY.js +117 -0
- package/chunks/list-agents-SBMONIUK.js +128 -0
- package/chunks/{llm-NSAVK5V3.js → llm-K26SUDVK.js} +223 -140
- package/chunks/{llm-content-generator-AY2QKXHE.js → llm-content-generator-TT6EAUD4.js} +11 -12
- package/chunks/loadedSettingsAdapter-KLLFZF3M.js +111 -0
- package/chunks/{loggingContentGenerator-DSFQHXIF.js → loggingContentGenerator-EYQBA4M4.js} +66 -65
- package/chunks/{loop-wakeup-XJFONSQ7.js → loop-wakeup-QA6SHCZT.js} +5 -5
- package/chunks/{ls-3VAT2J7A.js → ls-HEJNCEYO.js} +4 -4
- package/chunks/{lsp-5W7IRUBH.js → lsp-WOQKNZP6.js} +2 -2
- package/chunks/{managed-npm-update-TSWENTK5.js → managed-npm-update-HIJTODQT.js} +61 -60
- package/chunks/mcp-A2UEHETW.js +111 -0
- package/chunks/{monitor-RW4GWJHB.js → monitor-DKNZQAB2.js} +46 -46
- package/chunks/{node-QKLNSZMX.js → node-UETAYMMO.js} +3 -3
- package/chunks/nonInteractiveCli-YA47F2F4.js +190 -0
- package/chunks/{notebook-edit-CQNYS5OR.js → notebook-edit-MGHTRL2D.js} +47 -47
- package/chunks/{open-with-auth-YN3QZHVM.js → open-with-auth-D6JD6LDS.js} +3 -3
- package/chunks/{openaiContentGenerator-J6QIF7EX.js → openaiContentGenerator-ZJIEQ3ZJ.js} +26 -28
- package/chunks/pidfile-ETHAZNMY.js +112 -0
- package/chunks/{processUtils-GPHNANKZ.js → processUtils-UY3SAJJZ.js} +2 -2
- package/chunks/prompt-terminal-ledger-GZ747VYE.js +106 -0
- package/chunks/{pt-XN2YWJVM.js → pt-D73IFYT7.js} +3 -0
- package/chunks/{qwenContentGenerator-WWDXPYQI.js → qwenContentGenerator-VI4KATRY.js} +58 -58
- package/chunks/{qwenOAuth2-OF5WRBQT.js → qwenOAuth2-7AOCKSOQ.js} +7 -7
- package/chunks/{read-file-FQUQHC6N.js → read-file-P7F4P7LV.js} +11 -13
- package/chunks/{read-mcp-resource-XD257PGJ.js → read-mcp-resource-GLAGB6R7.js} +2 -2
- package/chunks/{record-artifact-VW23GS4F.js → record-artifact-SWVR7NSU.js} +4 -4
- package/chunks/renderer-selection-M4UN63VJ.js +99 -0
- package/chunks/{report-findings-AO5VYFLR.js → report-findings-AL5YW3KI.js} +5 -5
- package/chunks/{request-shutdown-BCLA3JV2.js → request-shutdown-5YK4IZ54.js} +8 -7
- package/chunks/resumeHistoryUtils-DPZKFW24.js +119 -0
- package/chunks/ripGrep-C7LJKUPZ.js +37 -0
- package/chunks/{ru-OLTMFJEW.js → ru-QMISLKRH.js} +3 -0
- package/chunks/{run-qwen-serve-5X6IDZER.js → run-qwen-serve-OGTEEUR2.js} +589 -251
- package/chunks/{runtime-HK27GMPF.js → runtime-LNBLEMZS.js} +73 -72
- package/chunks/scheduled-tasks-FLDYZQOF.js +128 -0
- package/chunks/{scheduler-WD4MHMO5.js → scheduler-73YXGUGW.js} +62 -61
- package/chunks/{sdk-exporters-grpc-G5IT4XS4.js → sdk-exporters-grpc-MXTVSE3C.js} +2 -2
- package/chunks/{sdk-exporters-http-TTU2CHBU.js → sdk-exporters-http-3JO5TJNU.js} +4 -4
- package/chunks/{sdk-impl-UUMVYMAL.js → sdk-impl-HZAUUTHJ.js} +6 -6
- package/chunks/{send-message-AJ4OCUBV.js → send-message-JC7NJTY6.js} +166 -35
- package/chunks/serve-3UR2H4CV.js +119 -0
- package/chunks/{server-GO2N5DH7.js → server-AOYZVVOM.js} +2904 -860
- package/chunks/{session-IFNHTUBT.js → session-UAWFNFGI.js} +119 -114
- package/chunks/session-attachments-root-ZCGXQQTR.js +104 -0
- package/chunks/{session-pr-refresh-I3UBWMVP.js → session-pr-refresh-CT2INROL.js} +157 -88
- package/chunks/{settings-L6N54CU6.js → settings-BHRGDASJ.js} +67 -66
- package/chunks/{shell-4Y5LLW6N.js → shell-YHOGC7TO.js} +46 -46
- package/chunks/{skill-YOWTRAKQ.js → skill-ZGBKNCHQ.js} +131 -97
- package/chunks/skill-settings-AKSP665O.js +119 -0
- package/chunks/spawnChannel-N25MBB6F.js +112 -0
- package/chunks/standalone-update-XGPWJDRN.js +119 -0
- package/chunks/start-opentui-ui-FZ4USOU7.js +55342 -0
- package/chunks/{startInteractiveUI-XDFSHBZD.js → startInteractiveUI-E2WQJUOA.js} +3509 -4706
- package/chunks/{syntheticOutput-ML43GEFN.js → syntheticOutput-HJNZSEHN.js} +3 -3
- package/chunks/{task-create-QN4LYRSE.js → task-create-6RSD54S5.js} +12 -12
- package/chunks/{task-list-JPLGK45U.js → task-list-IQSACPOM.js} +34 -11
- package/chunks/{task-stop-CXEH5L2D.js → task-stop-HE2LRQNW.js} +2 -2
- package/chunks/{task-update-IWEOJFV2.js → task-update-XAJ2NYOA.js} +13 -14
- package/chunks/{team-create-OOPXCDBA.js → team-create-SOKMYSQU.js} +54 -55
- package/chunks/{team-delete-RZVVSGCY.js → team-delete-NGNNKGMG.js} +25 -8
- package/chunks/{team-plan-approval-DSX5EWAT.js → team-plan-approval-U7ZWXYAY.js} +46 -46
- package/chunks/terminal-image-renderer-KKM4OBLO.js +117 -0
- package/chunks/theme-manager-GQHF3A7T.js +103 -0
- package/chunks/{todoWrite-WDJNQEMW.js → todoWrite-5UTVUXHA.js} +39 -9
- package/chunks/{tool-search-J5Q6U7DN.js → tool-search-IAI2RVWT.js} +21 -19
- package/chunks/total-session-admission-G4CGCSTG.js +113 -0
- package/chunks/trustedFolders-D2I3FDPB.js +123 -0
- package/chunks/{update-relaunch-SIKHLHVR.js → update-relaunch-5RWKZAL3.js} +5 -5
- package/chunks/updateCheck-ZXOQDFEI.js +119 -0
- package/chunks/useAutoAcceptIndicator-6EK4QGAH.js +121 -0
- package/chunks/{validateNonInterActiveAuth-JUDQP6V4.js → validateNonInterActiveAuth-QPFEKATS.js} +113 -109
- package/chunks/{version-C63GDDWN.js → version-JKNG7YDH.js} +1 -1
- package/chunks/{web-fetch-FOQZMNSC.js → web-fetch-X3AHIIHW.js} +16 -19
- package/chunks/{web-search-PUJTBFUC.js → web-search-K2FMOGS5.js} +10 -11
- package/chunks/{web-shell-static-HNB4FDOE.js → web-shell-static-POZHGGXE.js} +5 -4
- package/chunks/{workflow-Y5IPINVH.js → workflow-TOLPAK5G.js} +213 -119
- package/chunks/workspace-providers-status-PCJK3RC7.js +115 -0
- package/chunks/{workspace-registration-store-SMJWI2AI.js → workspace-registration-store-KQWVVW4Y.js} +2 -1
- package/chunks/workspace-registry-YNIOB6HJ.js +122 -0
- package/chunks/workspace-runtime-coordinator-WG2RNEN7.js +123 -0
- package/chunks/workspace-service-G4ZNBOFH.js +127 -0
- package/chunks/workspace-skills-status-FMTPPMWC.js +114 -0
- package/chunks/{workspace-trust-reconciler-PLIDLJZX.js → workspace-trust-reconciler-IBDFQBQS.js} +76 -77
- package/chunks/wrapper-JH3IFHT2.js +35 -0
- package/chunks/write-file-YTLFY2S5.js +88 -0
- package/chunks/{zh-UNY63FR3.js → zh-25DF7OGK.js} +5 -0
- package/chunks/{zh-TW-RPTMRTHG.js → zh-TW-5EDMZVGK.js} +5 -0
- package/chunks/{zoom-image-LYQD7BQA.js → zoom-image-IFXSN74N.js} +11 -13
- package/cli.js +131 -90
- package/locales/ca.js +6 -0
- package/locales/de.js +6 -0
- package/locales/en.js +9 -0
- package/locales/fr.js +6 -0
- package/locales/ja.js +6 -0
- package/locales/pt.js +6 -0
- package/locales/ru.js +6 -0
- package/locales/zh-TW.js +9 -0
- package/locales/zh.js +9 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-TRCMSA_6.js → abnfDiagram-VCTEODGH-Cxf7xE_Z.js} +1 -1
- package/web-shell/assets/{arc-D9Uls5b3.js → arc-ESi1eNkE.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-Bwb8jPXg.js → architectureDiagram-5GKGNRK7-D9l7-bDo.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-DHj71TSX.js → blockDiagram-NRAW4CY4-Bc8DEasw.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-uKBBdbyr.js → c4Diagram-UCG6FXSJ-Dimb2Hmh.js} +1 -1
- package/web-shell/assets/channel-B7ohGDil.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-BZd0Phrl.js → chunk-2Q5K7J3B-jVDmOpAQ.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-7KNeNBqN.js → chunk-5VM5RSS4-DbG_SwdB.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-BeboS7Fi.js → chunk-F27PBJKO-QEc4cY1v.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-RV3JONoj.js → chunk-G27WJ6UU-iJ36lQ3X.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-Yw9FCFsP.js → chunk-JWPE2WC7-DuArnVtF.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-GIMnydDe.js → chunk-LCL6LL3I-DxOf1zwL.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-Cfrux7bL.js → chunk-POPQ4Y6H-lVLu9Ild.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-BlvIN0CO.js → chunk-SVP7TREG-C6XYlIer.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-DMs7Rr4t.js → chunk-XXDRQBXY-CiG2j2Ji.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DdFpqpfD.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DdFpqpfD.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-DNGqTNwI.js → cose-bilkent-JH36ORCC-DGVHMMVm.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-CojMpaoH.js → cynefin-OW5HDTMX-D6cgpCnH.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DF07YXGo.js → cynefinDiagram-5FMLGOSQ-BKv4Z-UX.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-17-4WtCH.js → dagre-3AP2YEHR-B4ABMIG-.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-G3Wuyz9m.js → diagram-S7CK7UJ4-DgCkp_Lm.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-nyWIKZ8P.js → diagram-UQ7AKVKN-FG0FNokz.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-tKHhmYSC.js → diagram-VSXAHHWV-JgkP9qg-.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-CpDf1hYk.js → diagram-VX7I27RA-ADh2x83l.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-Cah2IFXG.js → diagram-Z3DM3KII-yXqoYF1J.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-DNaCkgxy.js → ebnfDiagram-PWID7BFC-Duk83Ek_.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CAdRgcf1.js → erDiagram-SSCWMZ5O-DMdvxySG.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CMUJAShL.js → flowDiagram-A5DVABFB-DHjVgSji.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-o-_MUNey.js → ganttDiagram-EL5Y4UJY-DMM9DkCE.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-_aG-2Z7O.js → gitGraphDiagram-WWUBYQGX-t_ug9vO8.js} +1 -1
- package/web-shell/assets/index-BGZRqbRo.css +36 -0
- package/web-shell/assets/index-DRri_6_x.js +2067 -0
- package/web-shell/assets/{index-BK_NKxiJ.js → index-zqvnpGHv.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-qJPeZbGP.js → infoDiagram-RXCK75RN-eT1fANNm.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-7Om4vNo1.js → ishikawaDiagram-5VMMS53U-k3evzZNn.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-BNtXqmBW.js → journeyDiagram-EYS64GPL-CGim3EAi.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-COgFec8P.js → kanban-definition-3QL26DDD-WHfJo-22.js} +1 -1
- package/web-shell/assets/{layout-B9n81PC9.js → layout-DkqIaFlJ.js} +1 -1
- package/web-shell/assets/{linear-Bb6nXZQq.js → linear-Bdkd3mCz.js} +1 -1
- package/web-shell/assets/{mermaid.core-Cgrm3JVT.js → mermaid.core-CGw0LkT_.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-TKwLTjnG.js → mindmap-definition-FBJOCRG2-C9V4rBvo.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-BJPuvlpi.js → pegDiagram-XKGWAZYB-CwoI2T5G.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-D01VkNsW.js → pieDiagram-E7YTZNPT-DaTmBmPG.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-C4hHsiv-.js → quadrantDiagram-AXDQQJYC-plh6MyGI.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CuEO4xK2.js → railroadDiagram-O6MQD6OU-D_b-S0iK.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-D5J_vIo5.js → requirementDiagram-EFPCY7ZU-zUzTN7VE.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-DQKY223V.js → sankeyDiagram-P5KCCOFB-m6AhoD0l.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D27YV_cm.js → sequenceDiagram-WJ2MYXX4-Cwhzsine.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-TJg8UcwV.js → sizeCapture-X5ZJPWSS-CcZuKIae.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-CmnPzUIx.js → stateDiagram-HBIQ2CUA-CFoiJwD_.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V--H8HdEmk.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-ByeP3_Nu.js → swimlanes-XN3QIQJK-CgS9hcaV.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ShE9OIgf.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-BsFA5juR.js → timeline-definition-24CTP7MA-Dzzc05t9.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DREP2ECo.js → vennDiagram-4TSXK5OY-DemK0f7Y.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-iyd9lKi2.js → wardleyDiagram-VM6X3IG4-CquLxtMr.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CVr1_j9q.js → xychartDiagram-S5SC5T6Z-BTBKTM5g.js} +1 -1
- package/web-shell/index.html +196 -2
- package/chunks/MaxSizedBox-X42SXBJH.js +0 -110
- package/chunks/agent-headless-IZM25LJA.js +0 -85
- package/chunks/bridge-ME6QXZNA.js +0 -119
- package/chunks/channel-settings-store-PEOI7XCG.js +0 -120
- package/chunks/chunk-7J6OTNGO.js +0 -424
- package/chunks/chunk-BWORX6FA.js +0 -135
- package/chunks/chunk-CPBF7KYF.js +0 -51
- package/chunks/chunk-H72BQNM3.js +0 -645
- package/chunks/chunk-JHYH6PYQ.js +0 -3096
- package/chunks/chunk-SS4MRMKE.js +0 -3525
- package/chunks/chunk-T4EFG2P5.js +0 -113
- package/chunks/chunk-XZA32HII.js +0 -19
- package/chunks/chunk-ZYNTSXWK.js +0 -32
- package/chunks/config-utils-R6M3TA34.js +0 -113
- package/chunks/contextCommand-ZCAP23J6.js +0 -106
- package/chunks/daemon-status-provider-K3SJ5C2U.js +0 -117
- package/chunks/daemon-trust-policy-DOR3YG62.js +0 -112
- package/chunks/deferred-core-runtime-WOYLUQQ7.js +0 -114
- package/chunks/earlyInputCapture-OHBEVO4K.js +0 -107
- package/chunks/errors-WAK6KFBC.js +0 -113
- package/chunks/exitPlanMode-UEYBG6P5.js +0 -83
- package/chunks/goal-tools-PTD3MBA7.js +0 -411
- package/chunks/handleAutoUpdate-FP3NWNSG.js +0 -109
- package/chunks/i18n-INIU5X7A.js +0 -124
- package/chunks/initializer-TYODV6GE.js +0 -113
- package/chunks/installationInfo-AAPKYDSZ.js +0 -107
- package/chunks/list-TUODDN6J.js +0 -116
- package/chunks/list-agents-DI3YFTDT.js +0 -80
- package/chunks/loadedSettingsAdapter-KJCLZ3C4.js +0 -110
- package/chunks/mcp-MWSAPFOL.js +0 -110
- package/chunks/nonInteractiveCli-JXKL343Q.js +0 -185
- package/chunks/pidfile-QOIQZFT2.js +0 -111
- package/chunks/prompt-terminal-ledger-FOMFTYOM.js +0 -105
- package/chunks/resumeHistoryUtils-NSGF3UCB.js +0 -118
- package/chunks/ripGrep-4CAT6SKV.js +0 -39
- package/chunks/scheduled-tasks-MN2ZZ5P6.js +0 -127
- package/chunks/serve-2XCHPPGG.js +0 -118
- package/chunks/skill-settings-ZL4JY5UE.js +0 -118
- package/chunks/spawnChannel-ZST6XJVJ.js +0 -112
- package/chunks/standalone-update-THVU3OKY.js +0 -118
- package/chunks/terminal-image-renderer-KS25G33E.js +0 -114
- package/chunks/theme-manager-YMZNG45F.js +0 -102
- package/chunks/total-session-admission-PVN64JVV.js +0 -114
- package/chunks/trustedFolders-FATSC4YI.js +0 -122
- package/chunks/updateCheck-D3YG2WCD.js +0 -118
- package/chunks/useAutoAcceptIndicator-ILINOSAS.js +0 -120
- package/chunks/workspace-providers-status-IJ4VHFMB.js +0 -114
- package/chunks/workspace-registry-BTGZIMPK.js +0 -123
- package/chunks/workspace-service-SIN67ITC.js +0 -126
- package/chunks/workspace-skills-status-F3RKCUIX.js +0 -113
- package/chunks/write-file-PAIGB33C.js +0 -88
- package/web-shell/assets/channel-CXjVLaBa.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DANEijO3.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DANEijO3.js +0 -1
- package/web-shell/assets/index-Ci-z4zWY.js +0 -1913
- package/web-shell/assets/index-LDlXZRHA.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DNKPyrDc.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ZL1HPC6w.js +0 -8
- /package/chunks/{chunk-FOGQO4FG.js → chunk-JA5CBKRP.js} +0 -0
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
isTerminalTaskLifecycleType,
|
|
6
6
|
sanitizeLogText,
|
|
7
7
|
truncateCodePoints
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-U4DJ5XB3.js";
|
|
9
9
|
import "./chunk-IW6RQPQB.js";
|
|
10
10
|
import "./chunk-CQ35AJ4Z.js";
|
|
11
11
|
import {
|
|
@@ -765,7 +765,27 @@ var DwsClient = class {
|
|
|
765
765
|
if (source.kind === "group") {
|
|
766
766
|
args.push("--group", source.conversationId);
|
|
767
767
|
}
|
|
768
|
-
return this.eventStarter(this.executable, args,
|
|
768
|
+
return this.eventStarter(this.executable, args, (line) => {
|
|
769
|
+
const message = parseDwsImEvent(line);
|
|
770
|
+
const result = onMessage(message);
|
|
771
|
+
if (!result || !("admitted" in result))
|
|
772
|
+
return result;
|
|
773
|
+
if (source.kind !== "direct")
|
|
774
|
+
return result.completed;
|
|
775
|
+
const reportError = /* @__PURE__ */ __name((error) => {
|
|
776
|
+
try {
|
|
777
|
+
onError(error instanceof Error ? error : new Error(String(error)));
|
|
778
|
+
} catch {
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
}, "reportError");
|
|
782
|
+
const admissionSucceeded = result.admitted.then(() => true, () => false);
|
|
783
|
+
void result.completed.catch(async (error) => {
|
|
784
|
+
if (await admissionSucceeded)
|
|
785
|
+
reportError(error);
|
|
786
|
+
});
|
|
787
|
+
return result.admitted;
|
|
788
|
+
}, onError);
|
|
769
789
|
}
|
|
770
790
|
async sendImMessage(target, content, idempotencyKey) {
|
|
771
791
|
const targetArgs = target.kind === "group" ? ["--group", target.conversationId] : ["--open-dingtalk-id", target.openDingTalkId];
|
|
@@ -1056,6 +1076,7 @@ var MAX_DOCUMENT_CONTEXT_CHARS = 12e3;
|
|
|
1056
1076
|
var MAX_TODO_CONTEXT_CHARS = 12e3;
|
|
1057
1077
|
var MAX_COMMENT_CHARS = 4e3;
|
|
1058
1078
|
var MAX_PROCESSED_ITEMS = 5e3;
|
|
1079
|
+
var MAX_DIRECT_REPLAY_DISPATCHES = 16;
|
|
1059
1080
|
var MAX_INBOUND_ATTEMPTS = 5;
|
|
1060
1081
|
var MAX_IM_TARGETS = 1e3;
|
|
1061
1082
|
var MAX_TODO_STATES = 1e3;
|
|
@@ -1065,7 +1086,7 @@ var EVENT_RESTART_DELAY_MS = 2e3;
|
|
|
1065
1086
|
var EVENT_RESTART_MAX_DELAY_MS = 5 * 6e4;
|
|
1066
1087
|
var NO_REPLY_SENTINEL = "[NO_REPLY]";
|
|
1067
1088
|
var NO_REPLY_SENTINEL_PATTERN = /^\[NO_REPLY\][.!]?$/i;
|
|
1068
|
-
var
|
|
1089
|
+
var DEFAULT_START_REACTION = "\u{1F914}";
|
|
1069
1090
|
var MAX_INBOUND_REACTION_TARGETS = 1e3;
|
|
1070
1091
|
var NOTIFICATION_HISTORY_OVERLAP_MS = 5e3;
|
|
1071
1092
|
var NOTIFICATION_POLL_INTERVAL_MS = 5e3;
|
|
@@ -1317,12 +1338,23 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1317
1338
|
userInstructions;
|
|
1318
1339
|
client;
|
|
1319
1340
|
imStates;
|
|
1341
|
+
startReactionName;
|
|
1342
|
+
endReactionName;
|
|
1320
1343
|
watchTodos;
|
|
1321
1344
|
inboundReactionTargets = /* @__PURE__ */ new Map();
|
|
1322
|
-
|
|
1345
|
+
activeReactions = /* @__PURE__ */ new Map();
|
|
1323
1346
|
sessionReactionKeys = /* @__PURE__ */ new Map();
|
|
1347
|
+
reactionOperations = /* @__PURE__ */ new Map();
|
|
1348
|
+
endReactionKeys = /* @__PURE__ */ new Set();
|
|
1324
1349
|
notifiedSenderPairingNotifications = /* @__PURE__ */ new Set();
|
|
1325
1350
|
processingMessages = /* @__PURE__ */ new Map();
|
|
1351
|
+
queuedDirectMessages = /* @__PURE__ */ new Map();
|
|
1352
|
+
// Replay-started direct dispatches only. The cap must not be consumed by
|
|
1353
|
+
// live or followup traffic, whose queue entries outlive their turn.
|
|
1354
|
+
replayDirectDispatches = /* @__PURE__ */ new Map();
|
|
1355
|
+
directConversationTails = /* @__PURE__ */ new Map();
|
|
1356
|
+
directMessageStartResolvers = /* @__PURE__ */ new Map();
|
|
1357
|
+
pendingMessageCapacityWaiters = /* @__PURE__ */ new Set();
|
|
1326
1358
|
pollAbortController = new AbortController();
|
|
1327
1359
|
lifecycleGeneration = 0;
|
|
1328
1360
|
connectionStartedAt = 0;
|
|
@@ -1331,6 +1363,8 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1331
1363
|
notificationWatermarkPulledBack = false;
|
|
1332
1364
|
constructor(name, config, bridge, options, client) {
|
|
1333
1365
|
const profile = configuredString(config.profile, "profile");
|
|
1366
|
+
const startReactionName = configuredString(config.startReaction, "startReaction") ?? DEFAULT_START_REACTION;
|
|
1367
|
+
const endReactionName = configuredString(config.endReaction, "endReaction");
|
|
1334
1368
|
const watchTodos = configuredBoolean(config.watchTodos, "watchTodos");
|
|
1335
1369
|
if (profile?.includes(",")) {
|
|
1336
1370
|
throw new Error("DWS channel profile must select exactly one login profile.");
|
|
@@ -1358,6 +1392,8 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1358
1392
|
source,
|
|
1359
1393
|
restartAttempts: 0
|
|
1360
1394
|
}));
|
|
1395
|
+
this.startReactionName = startReactionName;
|
|
1396
|
+
this.endReactionName = endReactionName;
|
|
1361
1397
|
this.watchTodos = watchTodos;
|
|
1362
1398
|
}
|
|
1363
1399
|
createInitialCursor() {
|
|
@@ -1497,15 +1533,19 @@ var DwsChannel = class extends PollingChannelBase {
|
|
|
1497
1533
|
this.pollAbortController.abort();
|
|
1498
1534
|
this.lastTodoPollAt = 0;
|
|
1499
1535
|
this.todoTargets.clear();
|
|
1500
|
-
for (const
|
|
1501
|
-
|
|
1502
|
-
if (!this.activeReactionKeys.delete(key))
|
|
1503
|
-
continue;
|
|
1504
|
-
void this.client.removeImReaction(conversationId, messageId, ACK_REACTION_NAME).catch((error) => this.logReactionFailure("disconnect reaction removal", error));
|
|
1505
|
-
}
|
|
1536
|
+
for (const key of [...this.activeReactions.keys()]) {
|
|
1537
|
+
this.cleanupReaction(key, "disconnect reaction removal");
|
|
1506
1538
|
}
|
|
1507
|
-
this.activeReactionKeys.clear();
|
|
1508
1539
|
this.sessionReactionKeys.clear();
|
|
1540
|
+
this.queuedDirectMessages.clear();
|
|
1541
|
+
this.replayDirectDispatches.clear();
|
|
1542
|
+
for (const resolve of this.directMessageStartResolvers.values())
|
|
1543
|
+
resolve();
|
|
1544
|
+
this.directMessageStartResolvers.clear();
|
|
1545
|
+
this.directConversationTails.clear();
|
|
1546
|
+
for (const resolve of this.pendingMessageCapacityWaiters)
|
|
1547
|
+
resolve();
|
|
1548
|
+
this.pendingMessageCapacityWaiters.clear();
|
|
1509
1549
|
this.stopPollLoop();
|
|
1510
1550
|
for (const state of this.imStates) {
|
|
1511
1551
|
if (state.retryTimer)
|
|
@@ -1601,7 +1641,7 @@ Ask the bot operator to approve you with:
|
|
|
1601
1641
|
}
|
|
1602
1642
|
await this.client.sendImMessage(target, text, idempotencyKey);
|
|
1603
1643
|
}
|
|
1604
|
-
async sendThreadMessage(chatId, threadId, text) {
|
|
1644
|
+
async sendThreadMessage(chatId, threadId, text, sourceLabel2) {
|
|
1605
1645
|
if (!this.connected) {
|
|
1606
1646
|
throw new Error(`[Channel:${this.name}] DWS channel is disconnected.`);
|
|
1607
1647
|
}
|
|
@@ -1610,21 +1650,23 @@ Ask the bot operator to approve you with:
|
|
|
1610
1650
|
if (threadId !== taskId) {
|
|
1611
1651
|
throw new Error(`[Channel:${this.name}] DWS todo delivery requires its taskId thread.`);
|
|
1612
1652
|
}
|
|
1613
|
-
await this.client.addTodoComment(taskId, text);
|
|
1653
|
+
await this.client.addTodoComment(taskId, this.formatMarkdownAttributedText(text, sourceLabel2));
|
|
1614
1654
|
return;
|
|
1615
1655
|
}
|
|
1616
1656
|
if (!this.documentSet.has(chatId)) {
|
|
1617
|
-
await this.sendMessage(chatId, text);
|
|
1657
|
+
await this.sendMessage(chatId, this.formatAttributedText(text, sourceLabel2));
|
|
1618
1658
|
return;
|
|
1619
1659
|
}
|
|
1620
1660
|
if (!threadId) {
|
|
1621
1661
|
throw new Error(`[Channel:${this.name}] DWS document delivery requires a commentKey.`);
|
|
1622
1662
|
}
|
|
1623
|
-
await this.client.replyToComment(chatId, threadId, text);
|
|
1663
|
+
await this.client.replyToComment(chatId, threadId, this.formatMarkdownAttributedText(text, sourceLabel2));
|
|
1624
1664
|
}
|
|
1625
|
-
async sendResponseMessage(chatId, text, sessionId) {
|
|
1665
|
+
async sendResponseMessage(chatId, text, sessionId, sourceLabel2) {
|
|
1626
1666
|
if (isNoReply(text))
|
|
1627
1667
|
return;
|
|
1668
|
+
const label = sourceLabel2 ?? this.getResponseSourceLabel(sessionId);
|
|
1669
|
+
const markdown = this.formatMarkdownAttributedText(text, label);
|
|
1628
1670
|
const threadId = this.getResponseThreadId(sessionId);
|
|
1629
1671
|
const taskId = this.todoTargets.get(chatId) ?? (threadId && todoChatId(threadId) === chatId ? threadId : void 0);
|
|
1630
1672
|
if (taskId) {
|
|
@@ -1632,7 +1674,7 @@ Ask the bot operator to approve you with:
|
|
|
1632
1674
|
throw new Error(`[Channel:${this.name}] DWS channel is disconnected.`);
|
|
1633
1675
|
}
|
|
1634
1676
|
try {
|
|
1635
|
-
await this.client.addTodoComment(taskId,
|
|
1677
|
+
await this.client.addTodoComment(taskId, markdown);
|
|
1636
1678
|
} catch (error) {
|
|
1637
1679
|
if (!(error instanceof DwsCommandError) || error.outcome !== "unknown") {
|
|
1638
1680
|
throw error;
|
|
@@ -1650,7 +1692,7 @@ Ask the bot operator to approve you with:
|
|
|
1650
1692
|
throw new Error(`[Channel:${this.name}] DWS document delivery requires a commentKey.`);
|
|
1651
1693
|
}
|
|
1652
1694
|
try {
|
|
1653
|
-
await this.client.replyToComment(chatId, threadId,
|
|
1695
|
+
await this.client.replyToComment(chatId, threadId, markdown);
|
|
1654
1696
|
} catch (error) {
|
|
1655
1697
|
if (!(error instanceof DwsCommandError) || error.outcome !== "unknown") {
|
|
1656
1698
|
throw error;
|
|
@@ -1663,15 +1705,20 @@ Ask the bot operator to approve you with:
|
|
|
1663
1705
|
const messageId = this.getResponseMessageId(sessionId);
|
|
1664
1706
|
const senderId = this.getResponseSenderId(sessionId);
|
|
1665
1707
|
if (!messageId || !senderId) {
|
|
1666
|
-
await this.sendMessage(chatId, text);
|
|
1708
|
+
await this.sendMessage(chatId, this.formatAttributedText(text, label));
|
|
1667
1709
|
return;
|
|
1668
1710
|
}
|
|
1669
1711
|
const idempotencyKey = stableUuid(`${this.name}\0${chatId}\0${messageId}\0${text}`);
|
|
1670
1712
|
if (this.findImTarget(chatId)?.kind === "direct") {
|
|
1671
|
-
await this.sendImText(chatId, text, idempotencyKey);
|
|
1713
|
+
await this.sendImText(chatId, this.formatAttributedText(text, label), idempotencyKey);
|
|
1672
1714
|
return;
|
|
1673
1715
|
}
|
|
1674
|
-
await this.client.replyToImMessage(chatId, messageId, senderId, text, idempotencyKey);
|
|
1716
|
+
await this.client.replyToImMessage(chatId, messageId, senderId, this.formatAttributedText(text, label), idempotencyKey);
|
|
1717
|
+
}
|
|
1718
|
+
async pushProactive(target, text, sourceLabel2) {
|
|
1719
|
+
if (isNoReply(text))
|
|
1720
|
+
return;
|
|
1721
|
+
await super.pushProactive(target, text, sourceLabel2);
|
|
1675
1722
|
}
|
|
1676
1723
|
async pollOnce() {
|
|
1677
1724
|
const signal = this.pollAbortController.signal;
|
|
@@ -1695,7 +1742,7 @@ Ask the bot operator to approve you with:
|
|
|
1695
1742
|
for (const message of mentions.messages) {
|
|
1696
1743
|
if (signal.aborted || !this.connected)
|
|
1697
1744
|
return;
|
|
1698
|
-
await this.
|
|
1745
|
+
await this.receiveImMessage({ kind: "at" }, message, true);
|
|
1699
1746
|
}
|
|
1700
1747
|
if (mentions.nextCursor) {
|
|
1701
1748
|
this.cursor.mentionCheckpoint = {
|
|
@@ -1730,15 +1777,10 @@ Ask the bot operator to approve you with:
|
|
|
1730
1777
|
}
|
|
1731
1778
|
if (this.hasPendingMessage(key))
|
|
1732
1779
|
continue;
|
|
1733
|
-
|
|
1734
|
-
await this.handleImMessage({ kind: "direct" }, message, true);
|
|
1735
|
-
} catch (error) {
|
|
1736
|
-
if (!this.hasPendingMessage(key))
|
|
1737
|
-
throw error;
|
|
1738
|
-
process2.stderr.write(`[Channel:${this.name}] direct-message dispatch failed mid-window; the message is parked for retry: ${sanitizeLogText(error instanceof Error ? error.message : String(error), 300)}
|
|
1739
|
-
`);
|
|
1740
|
-
}
|
|
1780
|
+
await this.receiveDirectMessage(message, true).admitted;
|
|
1741
1781
|
}
|
|
1782
|
+
if (signal.aborted || !this.connected)
|
|
1783
|
+
return;
|
|
1742
1784
|
if (this.notificationWatermarkPulledBack) {
|
|
1743
1785
|
this.cursor.notificationCheckpoint = void 0;
|
|
1744
1786
|
} else if (page.nextCursor) {
|
|
@@ -1885,7 +1927,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
1885
1927
|
const subscription = await this.client.subscribeToIm(state.source, (message) => {
|
|
1886
1928
|
state.lastError = void 0;
|
|
1887
1929
|
state.restartAttempts = 0;
|
|
1888
|
-
return this.
|
|
1930
|
+
return state.source.kind === "direct" ? this.receiveDirectMessage(message) : this.receiveImMessage(state.source, message);
|
|
1889
1931
|
}, (error) => {
|
|
1890
1932
|
if (error instanceof DwsEventProcessError)
|
|
1891
1933
|
state.lastError = error;
|
|
@@ -1975,35 +2017,120 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
1975
2017
|
process2.stderr.write(`[Channel:${this.name}] DWS ${sanitizeLogText(sourceLabel(source), 120)} stream error: ${sanitizeLogText(error.message, 300)}
|
|
1976
2018
|
`);
|
|
1977
2019
|
}
|
|
1978
|
-
async
|
|
2020
|
+
async receiveImMessage(source, message, fromHistory = false) {
|
|
1979
2021
|
if (!this.connected)
|
|
1980
2022
|
return;
|
|
1981
|
-
if (this.
|
|
2023
|
+
if (this.markSelfMessageProcessed(message))
|
|
2024
|
+
return;
|
|
2025
|
+
if (this.isStaleLiveMessage(message, fromHistory) && message.eventTime !== void 0) {
|
|
1982
2026
|
this.markProcessedMessage(messageKey(message));
|
|
1983
2027
|
this.saveCursor();
|
|
1984
2028
|
return;
|
|
1985
2029
|
}
|
|
1986
|
-
if (
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
2030
|
+
if (source.kind === "group-all" && (this.config.groups[message.conversationId]?.requireMention ?? this.config.groups["*"]?.requireMention ?? true)) {
|
|
2031
|
+
return;
|
|
2032
|
+
}
|
|
2033
|
+
if ((source.kind === "group" || source.kind === "group-all") && this.config.groupPolicy === "pairing" && !this.groupGate.isGroupApproved(message.conversationId)) {
|
|
2034
|
+
return;
|
|
2035
|
+
}
|
|
2036
|
+
await this.dispatchImMessage(source, message, messageKey(message));
|
|
2037
|
+
}
|
|
2038
|
+
receiveDirectMessage(message, fromHistory = false, reportFailure = fromHistory) {
|
|
2039
|
+
const admission = this.admitReceivedDirectMessage(message, fromHistory, reportFailure);
|
|
2040
|
+
const completed = admission.then(({ completion }) => completion);
|
|
2041
|
+
void completed.catch(() => void 0);
|
|
2042
|
+
return {
|
|
2043
|
+
admitted: admission.then(() => void 0),
|
|
2044
|
+
completed
|
|
2045
|
+
};
|
|
2046
|
+
}
|
|
2047
|
+
async admitReceivedDirectMessage(message, fromHistory, reportFailure) {
|
|
2048
|
+
if (!this.connected)
|
|
2049
|
+
return { completion: Promise.resolve() };
|
|
2050
|
+
const key = messageKey(message);
|
|
2051
|
+
if (this.markSelfMessageProcessed(message)) {
|
|
2052
|
+
return { completion: Promise.resolve() };
|
|
2053
|
+
}
|
|
2054
|
+
if (this.isStaleLiveMessage(message, fromHistory) && message.eventTime !== void 0) {
|
|
1992
2055
|
this.cursor.notificationWatermark = Math.min(this.cursor.notificationWatermark ?? this.connectionStartedAt, message.eventTime);
|
|
1993
2056
|
this.notificationWatermarkPulledBack = true;
|
|
1994
2057
|
this.cursor.notificationCheckpoint = void 0;
|
|
1995
2058
|
process2.stderr.write(`[Channel:${this.name}] parked a stale direct message for history polling and pulled the watermark back to ${message.eventTime}: ${sanitizeLogText(message.messageId, 120)}
|
|
1996
2059
|
`);
|
|
1997
2060
|
this.saveCursor();
|
|
1998
|
-
return;
|
|
2061
|
+
return { completion: Promise.resolve() };
|
|
1999
2062
|
}
|
|
2000
|
-
|
|
2001
|
-
|
|
2063
|
+
return this.admitDirectMessage({ kind: "direct" }, message, key, reportFailure);
|
|
2064
|
+
}
|
|
2065
|
+
markSelfMessageProcessed(message) {
|
|
2066
|
+
if (!this.isSelfMessage(message))
|
|
2067
|
+
return false;
|
|
2068
|
+
this.markProcessedMessage(messageKey(message));
|
|
2069
|
+
this.saveCursor();
|
|
2070
|
+
return true;
|
|
2071
|
+
}
|
|
2072
|
+
isStaleLiveMessage(message, fromHistory) {
|
|
2073
|
+
return !fromHistory && message.eventTime !== void 0 && message.eventTime < this.connectionStartedAt - 5e3;
|
|
2074
|
+
}
|
|
2075
|
+
async admitDirectMessage(source, message, key, reportFailure) {
|
|
2076
|
+
if (this.cursor.processedMessages.includes(key)) {
|
|
2077
|
+
this.removePersistedPendingMessage(key);
|
|
2078
|
+
return { completion: Promise.resolve() };
|
|
2002
2079
|
}
|
|
2003
|
-
if (
|
|
2004
|
-
|
|
2080
|
+
if (!this.hasPendingMessage(key)) {
|
|
2081
|
+
if (!await this.rememberPendingMessage(source, message)) {
|
|
2082
|
+
return { completion: Promise.resolve() };
|
|
2083
|
+
}
|
|
2005
2084
|
}
|
|
2006
|
-
|
|
2085
|
+
return {
|
|
2086
|
+
completion: this.scheduleDirectMessage(source, message, key, reportFailure)
|
|
2087
|
+
};
|
|
2088
|
+
}
|
|
2089
|
+
scheduleDirectMessage(source, message, key, reportFailure) {
|
|
2090
|
+
const queued = this.queuedDirectMessages.get(key);
|
|
2091
|
+
if (queued)
|
|
2092
|
+
return queued;
|
|
2093
|
+
if (this.cursor.processedMessages.includes(key)) {
|
|
2094
|
+
this.removePersistedPendingMessage(key);
|
|
2095
|
+
return Promise.resolve();
|
|
2096
|
+
}
|
|
2097
|
+
const generation = this.lifecycleGeneration;
|
|
2098
|
+
const dispatch = /* @__PURE__ */ __name(async () => {
|
|
2099
|
+
try {
|
|
2100
|
+
if (!this.connected || generation !== this.lifecycleGeneration)
|
|
2101
|
+
return;
|
|
2102
|
+
await this.dispatchImMessage(source, message, key);
|
|
2103
|
+
} finally {
|
|
2104
|
+
if (this.queuedDirectMessages.get(key) === task) {
|
|
2105
|
+
this.queuedDirectMessages.delete(key);
|
|
2106
|
+
}
|
|
2107
|
+
}
|
|
2108
|
+
}, "dispatch");
|
|
2109
|
+
let resolveStarted;
|
|
2110
|
+
const started = new Promise((resolve) => {
|
|
2111
|
+
resolveStarted = resolve;
|
|
2112
|
+
});
|
|
2113
|
+
const previous = this.directConversationTails.get(message.conversationId);
|
|
2114
|
+
const predecessor = reportFailure || this.config.dispatchMode === "followup" ? previous?.completed : previous?.started;
|
|
2115
|
+
const task = predecessor ? predecessor.catch(() => void 0).then(dispatch) : Promise.resolve().then(dispatch);
|
|
2116
|
+
const tail = { started, completed: task };
|
|
2117
|
+
this.queuedDirectMessages.set(key, task);
|
|
2118
|
+
this.directMessageStartResolvers.set(key, resolveStarted);
|
|
2119
|
+
this.directConversationTails.set(message.conversationId, tail);
|
|
2120
|
+
void task.finally(() => {
|
|
2121
|
+
this.releaseDirectMessageStart(message.conversationId, message.messageId);
|
|
2122
|
+
if (this.directConversationTails.get(message.conversationId) === tail) {
|
|
2123
|
+
this.directConversationTails.delete(message.conversationId);
|
|
2124
|
+
}
|
|
2125
|
+
}).catch(() => void 0);
|
|
2126
|
+
if (reportFailure) {
|
|
2127
|
+
void task.catch((error) => {
|
|
2128
|
+
this.logImError(source, error instanceof Error ? error : new Error(String(error)));
|
|
2129
|
+
});
|
|
2130
|
+
}
|
|
2131
|
+
return task;
|
|
2132
|
+
}
|
|
2133
|
+
async dispatchImMessage(source, message, key) {
|
|
2007
2134
|
let waitedOnInFlight = false;
|
|
2008
2135
|
let inFlightError;
|
|
2009
2136
|
while (true) {
|
|
@@ -2021,6 +2148,9 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2021
2148
|
this.processingMessages.set(key, task);
|
|
2022
2149
|
try {
|
|
2023
2150
|
await task;
|
|
2151
|
+
if (this.cursor.processedMessages.includes(key) && this.hasPendingMessage(key)) {
|
|
2152
|
+
this.removePersistedPendingMessage(key);
|
|
2153
|
+
}
|
|
2024
2154
|
} finally {
|
|
2025
2155
|
if (this.processingMessages.get(key) === task) {
|
|
2026
2156
|
this.processingMessages.delete(key);
|
|
@@ -2065,7 +2195,7 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2065
2195
|
await this.handleInbound(envelope);
|
|
2066
2196
|
} catch (error) {
|
|
2067
2197
|
if (source.kind !== "at") {
|
|
2068
|
-
this.
|
|
2198
|
+
await this.rememberFailedMessage(source, message);
|
|
2069
2199
|
}
|
|
2070
2200
|
if (this.recordInboundFailure(key, error, () => {
|
|
2071
2201
|
this.markProcessedMessage(key);
|
|
@@ -2121,24 +2251,63 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2121
2251
|
return;
|
|
2122
2252
|
this.cursor.inboundFailures = failures.filter((failure) => failure.key !== key);
|
|
2123
2253
|
}
|
|
2124
|
-
rememberPendingMessage(source, message) {
|
|
2254
|
+
async rememberPendingMessage(source, message) {
|
|
2125
2255
|
const key = messageKey(message);
|
|
2126
2256
|
if (this.hasPendingMessage(key))
|
|
2127
|
-
return;
|
|
2257
|
+
return true;
|
|
2258
|
+
if (!this.connected)
|
|
2259
|
+
return false;
|
|
2260
|
+
if ((this.cursor.pendingMessages?.length ?? 0) >= MAX_PROCESSED_ITEMS) {
|
|
2261
|
+
throw new Error("DWS pending-message capacity is exhausted; retry later.");
|
|
2262
|
+
}
|
|
2263
|
+
if (this.hasPendingMessage(key))
|
|
2264
|
+
return true;
|
|
2128
2265
|
const pending = this.cursor.pendingMessages ?? [];
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2266
|
+
pending.push({ source, message });
|
|
2267
|
+
this.cursor.pendingMessages = pending;
|
|
2268
|
+
try {
|
|
2269
|
+
this.saveCursor();
|
|
2270
|
+
} catch (error) {
|
|
2271
|
+
this.removePendingMessage(key);
|
|
2272
|
+
throw error;
|
|
2136
2273
|
}
|
|
2274
|
+
return true;
|
|
2275
|
+
}
|
|
2276
|
+
async rememberFailedMessage(source, message) {
|
|
2277
|
+
const key = messageKey(message);
|
|
2278
|
+
if (this.hasPendingMessage(key))
|
|
2279
|
+
return;
|
|
2280
|
+
const generation = this.lifecycleGeneration;
|
|
2281
|
+
while (this.connected && generation === this.lifecycleGeneration && (this.cursor.pendingMessages?.length ?? 0) >= MAX_PROCESSED_ITEMS) {
|
|
2282
|
+
await new Promise((resolve) => {
|
|
2283
|
+
this.pendingMessageCapacityWaiters.add(resolve);
|
|
2284
|
+
});
|
|
2285
|
+
}
|
|
2286
|
+
if (this.hasPendingMessage(key))
|
|
2287
|
+
return;
|
|
2288
|
+
const pending = this.cursor.pendingMessages ?? [];
|
|
2137
2289
|
pending.push({ source, message });
|
|
2138
2290
|
this.cursor.pendingMessages = pending;
|
|
2291
|
+
try {
|
|
2292
|
+
this.saveCursor();
|
|
2293
|
+
} catch {
|
|
2294
|
+
return;
|
|
2295
|
+
}
|
|
2296
|
+
}
|
|
2297
|
+
removePersistedPendingMessage(key) {
|
|
2298
|
+
if (this.removePendingMessage(key))
|
|
2299
|
+
this.saveCursor();
|
|
2139
2300
|
}
|
|
2140
2301
|
removePendingMessage(key) {
|
|
2141
|
-
|
|
2302
|
+
const pending = this.cursor.pendingMessages ?? [];
|
|
2303
|
+
const remaining = pending.filter((item) => messageKey(item.message) !== key);
|
|
2304
|
+
this.cursor.pendingMessages = remaining;
|
|
2305
|
+
if (remaining.length === pending.length)
|
|
2306
|
+
return false;
|
|
2307
|
+
for (const resolve of this.pendingMessageCapacityWaiters)
|
|
2308
|
+
resolve();
|
|
2309
|
+
this.pendingMessageCapacityWaiters.clear();
|
|
2310
|
+
return true;
|
|
2142
2311
|
}
|
|
2143
2312
|
async processDocumentNotification(message, key, notification) {
|
|
2144
2313
|
const notificationKey = documentNotificationKey(notification);
|
|
@@ -2150,12 +2319,15 @@ ${truncateCodePoints(JSON.stringify(detail.data), MAX_TODO_CONTEXT_CHARS)}`
|
|
|
2150
2319
|
const inFlight = this.processingMessages.get(notificationKey);
|
|
2151
2320
|
if (inFlight) {
|
|
2152
2321
|
await inFlight;
|
|
2153
|
-
if (this.cursor.processedMessages.includes(notificationKey) || this.hasPendingDocumentNotification(notificationKey) && !this.gate.isAllowed(message.senderId)) {
|
|
2322
|
+
if (this.cursor.processedMessages.includes(notificationKey) || this.hasPendingDocumentNotification(notificationKey, message.senderId) && !this.gate.isAllowed(message.senderId)) {
|
|
2154
2323
|
this.markProcessedMessage(key);
|
|
2155
|
-
|
|
2156
|
-
|
|
2324
|
+
this.saveCursor();
|
|
2325
|
+
return;
|
|
2157
2326
|
}
|
|
2158
|
-
this.
|
|
2327
|
+
if (this.processingMessages.get(notificationKey) === inFlight) {
|
|
2328
|
+
this.processingMessages.delete(notificationKey);
|
|
2329
|
+
}
|
|
2330
|
+
await this.processDocumentNotification(message, key, notification);
|
|
2159
2331
|
return;
|
|
2160
2332
|
}
|
|
2161
2333
|
const task = (async () => {
|
|
@@ -2230,8 +2402,23 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2230
2402
|
if (signal.aborted || !this.connected)
|
|
2231
2403
|
return;
|
|
2232
2404
|
const key = messageKey(pending.message);
|
|
2405
|
+
if (pending.source.kind === "direct") {
|
|
2406
|
+
if (this.queuedDirectMessages.has(key))
|
|
2407
|
+
continue;
|
|
2408
|
+
if (this.replayDirectDispatches.size >= MAX_DIRECT_REPLAY_DISPATCHES) {
|
|
2409
|
+
continue;
|
|
2410
|
+
}
|
|
2411
|
+
const dispatched = this.scheduleDirectMessage(pending.source, pending.message, key, true);
|
|
2412
|
+
this.replayDirectDispatches.set(key, dispatched);
|
|
2413
|
+
void dispatched.finally(() => {
|
|
2414
|
+
if (this.replayDirectDispatches.get(key) === dispatched) {
|
|
2415
|
+
this.replayDirectDispatches.delete(key);
|
|
2416
|
+
}
|
|
2417
|
+
}).catch(() => void 0);
|
|
2418
|
+
continue;
|
|
2419
|
+
}
|
|
2233
2420
|
try {
|
|
2234
|
-
await this.
|
|
2421
|
+
await this.receiveImMessage(pending.source, pending.message, true);
|
|
2235
2422
|
this.removePendingMessage(key);
|
|
2236
2423
|
this.saveCursor();
|
|
2237
2424
|
} catch (error) {
|
|
@@ -2280,8 +2467,8 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2280
2467
|
hasPendingMessage(key) {
|
|
2281
2468
|
return (this.cursor.pendingMessages ?? []).some((pending) => messageKey(pending.message) === key);
|
|
2282
2469
|
}
|
|
2283
|
-
hasPendingDocumentNotification(notificationKey) {
|
|
2284
|
-
return (this.cursor.pendingDocumentNotifications ?? []).some((pending) => documentNotificationKey(pending) === notificationKey);
|
|
2470
|
+
hasPendingDocumentNotification(notificationKey, senderId) {
|
|
2471
|
+
return (this.cursor.pendingDocumentNotifications ?? []).some((pending) => documentNotificationKey(pending) === notificationKey && (senderId === void 0 || pending.senderId === senderId));
|
|
2285
2472
|
}
|
|
2286
2473
|
rememberPendingDocumentNotification(message, notification) {
|
|
2287
2474
|
const key = documentNotificationKey(notification);
|
|
@@ -2323,6 +2510,14 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2323
2510
|
reactionKey(conversationId, messageId) {
|
|
2324
2511
|
return `${conversationId}\0${messageId}`;
|
|
2325
2512
|
}
|
|
2513
|
+
releaseDirectMessageStart(conversationId, messageId) {
|
|
2514
|
+
const key = `${conversationId}\0${messageId}`;
|
|
2515
|
+
const resolve = this.directMessageStartResolvers.get(key);
|
|
2516
|
+
if (!resolve)
|
|
2517
|
+
return;
|
|
2518
|
+
this.directMessageStartResolvers.delete(key);
|
|
2519
|
+
resolve();
|
|
2520
|
+
}
|
|
2326
2521
|
rememberInboundReactionTarget(chatId, messageId, conversationId = chatId) {
|
|
2327
2522
|
const key = this.reactionKey(chatId, messageId);
|
|
2328
2523
|
this.inboundReactionTargets.delete(key);
|
|
@@ -2345,6 +2540,47 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2345
2540
|
if (reactions.size === 0)
|
|
2346
2541
|
this.sessionReactionKeys.delete(sessionId);
|
|
2347
2542
|
}
|
|
2543
|
+
releaseActiveReaction(key) {
|
|
2544
|
+
const reaction = this.activeReactions.get(key);
|
|
2545
|
+
if (!reaction)
|
|
2546
|
+
return void 0;
|
|
2547
|
+
this.activeReactions.delete(key);
|
|
2548
|
+
this.untrackSessionReaction(reaction.sessionId, key);
|
|
2549
|
+
return reaction;
|
|
2550
|
+
}
|
|
2551
|
+
enqueueReactionOperation(key, operation) {
|
|
2552
|
+
const previous = this.reactionOperations.get(key) ?? Promise.resolve();
|
|
2553
|
+
const next = previous.catch(() => void 0).then(() => operation(() => this.reactionOperations.get(key) === next)).catch((error) => this.logReactionFailure("reaction transition", error)).finally(() => {
|
|
2554
|
+
if (this.reactionOperations.get(key) === next) {
|
|
2555
|
+
this.reactionOperations.delete(key);
|
|
2556
|
+
}
|
|
2557
|
+
});
|
|
2558
|
+
this.reactionOperations.set(key, next);
|
|
2559
|
+
}
|
|
2560
|
+
rememberEndReaction(key) {
|
|
2561
|
+
this.endReactionKeys.delete(key);
|
|
2562
|
+
this.endReactionKeys.add(key);
|
|
2563
|
+
if (this.endReactionKeys.size > MAX_INBOUND_REACTION_TARGETS) {
|
|
2564
|
+
const oldest = this.endReactionKeys.values().next().value;
|
|
2565
|
+
if (oldest !== void 0)
|
|
2566
|
+
this.endReactionKeys.delete(oldest);
|
|
2567
|
+
}
|
|
2568
|
+
}
|
|
2569
|
+
async removeStartedReaction(reaction, action) {
|
|
2570
|
+
if (!reaction.added)
|
|
2571
|
+
return;
|
|
2572
|
+
try {
|
|
2573
|
+
await this.client.removeImReaction(reaction.target.conversationId, reaction.target.messageId, this.startReactionName);
|
|
2574
|
+
} catch (error) {
|
|
2575
|
+
this.logReactionFailure(action, error);
|
|
2576
|
+
}
|
|
2577
|
+
}
|
|
2578
|
+
cleanupReaction(key, action) {
|
|
2579
|
+
const reaction = this.releaseActiveReaction(key);
|
|
2580
|
+
if (!reaction)
|
|
2581
|
+
return;
|
|
2582
|
+
this.enqueueReactionOperation(key, () => this.removeStartedReaction(reaction, action));
|
|
2583
|
+
}
|
|
2348
2584
|
startReaction(conversationId, messageId, sessionId) {
|
|
2349
2585
|
if (!messageId)
|
|
2350
2586
|
return;
|
|
@@ -2352,54 +2588,97 @@ ${context}` : "Document Markdown was unavailable; answer from the comment only."
|
|
|
2352
2588
|
if (!target)
|
|
2353
2589
|
return;
|
|
2354
2590
|
const key = this.reactionKey(target.conversationId, target.messageId);
|
|
2355
|
-
if (this.
|
|
2591
|
+
if (this.activeReactions.has(key))
|
|
2356
2592
|
return;
|
|
2357
|
-
this.activeReactionKeys.add(key);
|
|
2358
2593
|
let reactions = this.sessionReactionKeys.get(sessionId);
|
|
2359
2594
|
if (!reactions) {
|
|
2360
|
-
reactions = /* @__PURE__ */ new
|
|
2595
|
+
reactions = /* @__PURE__ */ new Set();
|
|
2361
2596
|
this.sessionReactionKeys.set(sessionId, reactions);
|
|
2362
2597
|
}
|
|
2363
|
-
reactions.
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2598
|
+
reactions.add(key);
|
|
2599
|
+
const reaction = {
|
|
2600
|
+
target,
|
|
2601
|
+
sessionId,
|
|
2602
|
+
added: false
|
|
2603
|
+
};
|
|
2604
|
+
this.activeReactions.set(key, reaction);
|
|
2605
|
+
this.enqueueReactionOperation(key, async () => {
|
|
2606
|
+
if (this.activeReactions.get(key) !== reaction)
|
|
2607
|
+
return;
|
|
2608
|
+
if (this.endReactionName && this.endReactionKeys.has(key)) {
|
|
2609
|
+
try {
|
|
2610
|
+
await this.client.removeImReaction(target.conversationId, target.messageId, this.endReactionName);
|
|
2611
|
+
this.endReactionKeys.delete(key);
|
|
2612
|
+
if (this.endReactionName === this.startReactionName) {
|
|
2613
|
+
reaction.added = false;
|
|
2614
|
+
}
|
|
2615
|
+
} catch (error) {
|
|
2616
|
+
this.logReactionFailure("previous end reaction removal", error);
|
|
2617
|
+
}
|
|
2618
|
+
}
|
|
2619
|
+
if (this.activeReactions.get(key) !== reaction)
|
|
2620
|
+
return;
|
|
2621
|
+
if (reaction.added)
|
|
2622
|
+
return;
|
|
2623
|
+
try {
|
|
2624
|
+
await this.client.addImReaction(target.conversationId, target.messageId, this.startReactionName);
|
|
2625
|
+
reaction.added = true;
|
|
2626
|
+
} catch (error) {
|
|
2627
|
+
this.logReactionFailure("start reaction add", error);
|
|
2367
2628
|
}
|
|
2368
|
-
}).catch((error) => {
|
|
2369
|
-
this.activeReactionKeys.delete(key);
|
|
2370
|
-
this.untrackSessionReaction(sessionId, key);
|
|
2371
|
-
this.logReactionFailure("reaction add", error);
|
|
2372
2629
|
});
|
|
2373
2630
|
}
|
|
2374
|
-
|
|
2631
|
+
finishReaction(conversationId, messageId, sessionId) {
|
|
2375
2632
|
if (!messageId)
|
|
2376
2633
|
return;
|
|
2377
2634
|
const target = this.inboundReactionTargets.get(this.reactionKey(conversationId, messageId));
|
|
2378
2635
|
if (!target)
|
|
2379
2636
|
return;
|
|
2380
2637
|
const key = this.reactionKey(target.conversationId, target.messageId);
|
|
2381
|
-
this.
|
|
2382
|
-
if (!
|
|
2638
|
+
const active = this.activeReactions.get(key);
|
|
2639
|
+
if (!active || active.sessionId !== sessionId)
|
|
2383
2640
|
return;
|
|
2384
|
-
|
|
2641
|
+
const reaction = this.releaseActiveReaction(key);
|
|
2642
|
+
if (!reaction)
|
|
2643
|
+
return;
|
|
2644
|
+
const generation = this.lifecycleGeneration;
|
|
2645
|
+
this.enqueueReactionOperation(key, async (isLatest) => {
|
|
2646
|
+
const replacement = this.activeReactions.get(key);
|
|
2647
|
+
if (replacement) {
|
|
2648
|
+
if (reaction.added)
|
|
2649
|
+
replacement.added = true;
|
|
2650
|
+
return;
|
|
2651
|
+
}
|
|
2652
|
+
await this.removeStartedReaction(reaction, "start reaction removal");
|
|
2653
|
+
if (!isLatest() || this.activeReactions.has(key) || !this.endReactionName || this.endReactionKeys.has(key) || !this.connected || generation !== this.lifecycleGeneration) {
|
|
2654
|
+
return;
|
|
2655
|
+
}
|
|
2656
|
+
try {
|
|
2657
|
+
await this.client.addImReaction(reaction.target.conversationId, reaction.target.messageId, this.endReactionName);
|
|
2658
|
+
this.rememberEndReaction(key);
|
|
2659
|
+
} catch (error) {
|
|
2660
|
+
this.logReactionFailure("end reaction add", error);
|
|
2661
|
+
}
|
|
2662
|
+
});
|
|
2385
2663
|
}
|
|
2386
2664
|
onTaskLifecycle(event) {
|
|
2387
2665
|
if (event.type === "started") {
|
|
2666
|
+
if (event.messageId) {
|
|
2667
|
+
this.releaseDirectMessageStart(event.chatId, event.messageId);
|
|
2668
|
+
}
|
|
2388
2669
|
this.startReaction(event.chatId, event.messageId, event.sessionId);
|
|
2389
2670
|
return;
|
|
2390
2671
|
}
|
|
2391
2672
|
if (isTerminalTaskLifecycleType(event.type)) {
|
|
2392
|
-
this.
|
|
2673
|
+
this.finishReaction(event.chatId, event.messageId, event.sessionId);
|
|
2393
2674
|
}
|
|
2394
2675
|
}
|
|
2395
2676
|
onSessionDied(sessionId) {
|
|
2396
2677
|
const reactions = this.sessionReactionKeys.get(sessionId);
|
|
2397
2678
|
if (reactions) {
|
|
2398
2679
|
this.sessionReactionKeys.delete(sessionId);
|
|
2399
|
-
for (const
|
|
2400
|
-
|
|
2401
|
-
continue;
|
|
2402
|
-
void this.client.removeImReaction(conversationId, messageId, ACK_REACTION_NAME).catch((error) => this.logReactionFailure("session-death reaction removal", error));
|
|
2680
|
+
for (const key of reactions) {
|
|
2681
|
+
this.cleanupReaction(key, "session-death reaction removal");
|
|
2403
2682
|
}
|
|
2404
2683
|
}
|
|
2405
2684
|
super.onSessionDied(sessionId);
|
|
@@ -2496,6 +2775,19 @@ var plugin = {
|
|
|
2496
2775
|
label: "Watch Native Todos",
|
|
2497
2776
|
kind: "boolean",
|
|
2498
2777
|
description: "Poll pending todos assigned to this DWS account and run newly assigned or changed tasks"
|
|
2778
|
+
},
|
|
2779
|
+
{
|
|
2780
|
+
key: "startReaction",
|
|
2781
|
+
label: "Start Reaction",
|
|
2782
|
+
kind: "string",
|
|
2783
|
+
default: DEFAULT_START_REACTION,
|
|
2784
|
+
description: `DingTalk reaction emoji or name added while a task is running. Leave empty to use ${DEFAULT_START_REACTION}`
|
|
2785
|
+
},
|
|
2786
|
+
{
|
|
2787
|
+
key: "endReaction",
|
|
2788
|
+
label: "End Reaction",
|
|
2789
|
+
kind: "string",
|
|
2790
|
+
description: "DingTalk reaction emoji or name added after a task ends. Leave empty to disable it"
|
|
2499
2791
|
}
|
|
2500
2792
|
],
|
|
2501
2793
|
validateConfig: /* @__PURE__ */ __name((config) => {
|
|
@@ -2508,6 +2800,11 @@ var plugin = {
|
|
|
2508
2800
|
if (config["watchTodos"] !== void 0 && typeof config["watchTodos"] !== "boolean") {
|
|
2509
2801
|
return "DWS watchTodos must be a boolean.";
|
|
2510
2802
|
}
|
|
2803
|
+
for (const field of ["startReaction", "endReaction"]) {
|
|
2804
|
+
if (config[field] !== void 0 && typeof config[field] !== "string") {
|
|
2805
|
+
return `DWS ${field} must be a string.`;
|
|
2806
|
+
}
|
|
2807
|
+
}
|
|
2511
2808
|
return void 0;
|
|
2512
2809
|
}, "validateConfig")
|
|
2513
2810
|
},
|