@qwen-code/qwen-code 0.23.1-preview.2 → 0.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/computer-use/SKILL.md +189 -116
- package/bundled/goal-draft/SKILL.md +23 -13
- package/bundled/qc-helper/docs/_meta.ts +1 -0
- package/bundled/qc-helper/docs/configuration/model-providers.md +47 -1
- package/bundled/qc-helper/docs/configuration/settings.md +50 -0
- package/bundled/qc-helper/docs/conversations-recovery.md +102 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +1 -1
- package/bundled/qc-helper/docs/features/computer-use.md +9 -7
- package/bundled/qc-helper/docs/features/followup-suggestions.md +2 -2
- package/bundled/qc-helper/docs/features/goals.md +15 -3
- package/bundled/qc-helper/docs/qwen-serve.md +19 -1
- package/chunks/{MaxSizedBox-IYIQ43IZ.js → MaxSizedBox-UDO6Y7RB.js} +20 -20
- package/chunks/{StandaloneSessionPicker-AWB2OHX6.js → StandaloneSessionPicker-D4CUOO4H.js} +38 -38
- package/chunks/{acp-startup-profiler-BAL4LJTN.js → acp-startup-profiler-KEU6VAYR.js} +2 -2
- package/chunks/{acpAgent-ZC57OLS4.js → acpAgent-KWLJFADK.js} +118 -91
- package/chunks/{agent-GEBPAEJS.js → agent-GSUPGEOL.js} +13 -13
- package/chunks/{agent-headless-63ZEYAJK.js → agent-headless-HNYCQUJB.js} +13 -13
- package/chunks/{anthropicContentGenerator-6XDHXIII.js → anthropicContentGenerator-I7LQZH26.js} +30 -7
- package/chunks/{askUserQuestion-3KAYLLMM.js → askUserQuestion-I5W5S3D6.js} +1 -1
- package/chunks/{bridge-MHWO5I5T.js → bridge-B7CV6RVI.js} +23 -23
- package/chunks/{channel-management-service-NFRZXQFO.js → channel-management-service-TRTLQTSV.js} +4 -4
- package/chunks/{channel-settings-store-T7PMIHKC.js → channel-settings-store-FW45IRUP.js} +31 -31
- package/chunks/{channel-worker-group-O2BWK5F7.js → channel-worker-group-PIYPVCTF.js} +6 -6
- package/chunks/{channel-worker-manager-4WP7VJOD.js → channel-worker-manager-FQHEDTD2.js} +6 -6
- package/chunks/{channel-worker-supervisor-CCUXD6J5.js → channel-worker-supervisor-XJPZZ3VK.js} +3 -3
- package/chunks/{chunk-KTLT7VCX.js → chunk-25CBAK3H.js} +2 -2
- package/chunks/{chunk-SHX2HIE7.js → chunk-27LTEY6D.js} +1 -1
- package/chunks/{chunk-ZT3XUGSU.js → chunk-2TMJRF46.js} +86 -9
- package/chunks/{chunk-HWZOOSEB.js → chunk-2YS3NU4A.js} +3 -3
- package/chunks/chunk-2Z3T52OC.js +82 -0
- package/chunks/{chunk-QW7BUOSI.js → chunk-2ZFO5JD7.js} +20 -3
- package/chunks/{chunk-RH344FKI.js → chunk-3BTHHXXE.js} +1 -1
- package/chunks/{chunk-OFB36ZBA.js → chunk-3LPJ776W.js} +1 -1
- package/chunks/{chunk-GEV66YGE.js → chunk-3VDLQUR2.js} +1 -1
- package/chunks/{chunk-RRCNEW2A.js → chunk-3VWPPK5Q.js} +58 -4
- package/chunks/{chunk-L36LLVA5.js → chunk-3YQMUBTS.js} +3 -3
- package/chunks/{chunk-LTCI6ZOJ.js → chunk-45ROPFQY.js} +1 -1
- package/chunks/{chunk-W4LL5RZO.js → chunk-4ALNJDHL.js} +52 -13
- package/chunks/{chunk-4OCYWXKF.js → chunk-5CVY5Q2P.js} +3 -3
- package/chunks/{chunk-ZRVFHLLK.js → chunk-5DQ4YTIZ.js} +1 -1
- package/chunks/{chunk-FWH4736Q.js → chunk-5IL2BZHW.js} +3 -3
- package/chunks/{chunk-537SQ2AI.js → chunk-5WC2ECUK.js} +104 -16
- package/chunks/{chunk-3K65MUKD.js → chunk-65I7S4Z3.js} +2 -1
- package/chunks/{chunk-RUMSY4ES.js → chunk-66JBCTJF.js} +8 -7
- package/chunks/{chunk-YLFICBYK.js → chunk-6JXHO7LG.js} +3 -3
- package/chunks/{chunk-TDHVOZ65.js → chunk-6QILGINT.js} +2 -2
- package/chunks/{chunk-WQBR7LN5.js → chunk-6QV7Z74P.js} +1 -1
- package/chunks/{chunk-RSU3I6UL.js → chunk-6SADVYQQ.js} +1 -1
- package/chunks/{chunk-AIMZIXZM.js → chunk-6TPVIESH.js} +5 -7
- package/chunks/{chunk-2LD5U7Q3.js → chunk-6YEOCHSE.js} +29 -1
- package/chunks/{chunk-7PMKXGRP.js → chunk-75LBC7SV.js} +66 -9
- package/chunks/{chunk-B5FF3LRF.js → chunk-7SL55L5H.js} +22 -15
- package/chunks/{chunk-I7UNCY24.js → chunk-ARYNBBBM.js} +3 -3
- package/chunks/{chunk-QQGAR64U.js → chunk-B3EL44K3.js} +4 -4
- package/chunks/{chunk-KAZWXVI3.js → chunk-CABDNUJ4.js} +2 -2
- package/chunks/{chunk-R7TKFIQO.js → chunk-CALNF3Z3.js} +1 -1
- package/chunks/{chunk-75UQFGFE.js → chunk-CHVU543W.js} +1 -1
- package/chunks/{chunk-C4NXRR7T.js → chunk-CIKL2DQP.js} +2 -2
- package/chunks/{chunk-LD53HMPV.js → chunk-CRZBDVP2.js} +1 -0
- package/chunks/{chunk-SHK2SIR5.js → chunk-D6AQNMUA.js} +4 -4
- package/chunks/{chunk-EPZWBYQI.js → chunk-DO5SMV52.js} +8 -6
- package/chunks/{chunk-P5Z7VD23.js → chunk-DXQ6Z7AH.js} +106 -39
- package/chunks/{chunk-3RMVM33U.js → chunk-DZ6D4B3K.js} +5 -5
- package/chunks/{chunk-T7TP5UQL.js → chunk-E7XSUYCZ.js} +4 -4
- package/chunks/{chunk-2C3XDBGL.js → chunk-EEKU6COG.js} +4 -4
- package/chunks/{chunk-AX23QSX3.js → chunk-EHTKOO6W.js} +4 -4
- package/chunks/{chunk-XNC2TCUO.js → chunk-ENZDGHGJ.js} +4 -4
- package/chunks/{chunk-733KQL63.js → chunk-EOET4H7C.js} +3 -3
- package/chunks/{chunk-37SOBIA3.js → chunk-ERXNTINK.js} +1 -1
- package/chunks/{chunk-F47DITLZ.js → chunk-FAWTMDX7.js} +14 -0
- package/chunks/{chunk-5JLQWQK6.js → chunk-FV4DM2M4.js} +2 -2
- package/chunks/{chunk-UTVIIA7N.js → chunk-FW4E4QPG.js} +1 -1
- package/chunks/{chunk-REDVV5NC.js → chunk-FWRRUITH.js} +7 -7
- package/chunks/{chunk-5V4B3EWA.js → chunk-GM44O6F7.js} +1 -1
- package/chunks/{chunk-Z6DDPSGJ.js → chunk-GNY7B3CA.js} +1 -1
- package/chunks/{chunk-ERMAXPXA.js → chunk-HIXUUCGY.js} +187 -12
- package/chunks/{chunk-EJNYBDYC.js → chunk-HNLMYDQE.js} +1 -1
- package/chunks/{chunk-XX4MBBFW.js → chunk-HUX2DOTF.js} +3 -3
- package/chunks/{chunk-RCUWMVN3.js → chunk-HZ2HUXX7.js} +1 -1
- package/chunks/{chunk-RD3VPM4E.js → chunk-IKG2YVRZ.js} +2 -2
- package/chunks/{chunk-IMWCUWQT.js → chunk-J3TJH52D.js} +1 -1
- package/chunks/{chunk-ZJ2LM2SI.js → chunk-JGDRB4FP.js} +104 -33
- package/chunks/{chunk-ANVC5CSK.js → chunk-L7V52QEZ.js} +10 -10
- package/chunks/{chunk-MFCWL4LI.js → chunk-LNCNUMJ5.js} +451 -396
- package/chunks/{chunk-AUJOWIT5.js → chunk-LZGFVUWZ.js} +3 -3
- package/chunks/{chunk-6KYWU726.js → chunk-M73KHGNR.js} +13 -66
- package/chunks/{chunk-ADJD4LZF.js → chunk-MA5OUNN6.js} +1 -1
- package/chunks/{chunk-I67KJGM6.js → chunk-MFYH2VXV.js} +3 -3
- package/chunks/{chunk-PLUAIHZO.js → chunk-N7YQEKGX.js} +6 -6
- package/chunks/{chunk-JOV46WGX.js → chunk-NB3NDQQK.js} +1 -1
- package/chunks/chunk-NOO4QFXM.js +171 -0
- package/chunks/{chunk-VYCJITND.js → chunk-O2JBJQCF.js} +1 -1
- package/chunks/{chunk-RQNAO42A.js → chunk-OESZTXTG.js} +1 -1
- package/chunks/{chunk-UKADFFL2.js → chunk-OFVAS4AR.js} +1 -1
- package/chunks/{chunk-Y3C5COGI.js → chunk-OPMKGOLD.js} +1 -1
- package/chunks/{chunk-TSLRORQR.js → chunk-PDUMGZ2P.js} +1467 -1323
- package/chunks/{chunk-Z6KFLEG7.js → chunk-PSPAM24S.js} +1 -0
- package/chunks/{chunk-5FYGZ7E3.js → chunk-QK4K76T6.js} +2 -2
- package/chunks/{chunk-NUQFUXOG.js → chunk-QTNCGZHQ.js} +2 -0
- package/chunks/{chunk-WFXD5OZH.js → chunk-QZOXVQPK.js} +1 -1
- package/chunks/{chunk-QJVZLILI.js → chunk-R7OO56VZ.js} +1 -1
- package/chunks/{chunk-KP5QK3FB.js → chunk-RNYENHN5.js} +397 -54
- package/chunks/{chunk-22QOQKG4.js → chunk-RXT4QBDX.js} +1 -1
- package/chunks/{chunk-LYHYXJJ3.js → chunk-S6QVI3MV.js} +3 -3
- package/chunks/{chunk-NXWYCSPL.js → chunk-SOA4HKRJ.js} +1 -1
- package/chunks/{chunk-IGOIYZBG.js → chunk-T2IHCZLS.js} +2 -2
- package/chunks/{chunk-C55CR5I4.js → chunk-TGC4264Q.js} +6 -6
- package/chunks/{chunk-EGRFCIXD.js → chunk-TWAMIEQ2.js} +79 -18
- package/chunks/{chunk-PMGWY6ZP.js → chunk-TWWS7XUW.js} +13 -10
- package/chunks/{chunk-RGAQDQ3Z.js → chunk-UHUT4IDM.js} +18 -9
- package/chunks/{chunk-HPE4LEWX.js → chunk-USN6VNTO.js} +1 -1
- package/chunks/{chunk-BNWIX6BM.js → chunk-UXDVUFKU.js} +3 -3
- package/chunks/{chunk-HY3DXYZK.js → chunk-UYDQYDW2.js} +1 -1
- package/chunks/{chunk-3K456UJF.js → chunk-VF6D6EGV.js} +12 -4
- package/chunks/{chunk-ZNI3V2XA.js → chunk-WAASYFPK.js} +2 -2
- package/chunks/{chunk-OHOO527W.js → chunk-WG7BL3FY.js} +52 -2
- package/chunks/{chunk-C7M445SS.js → chunk-WJDXKQIO.js} +1 -1
- package/chunks/{chunk-HZS3JRQW.js → chunk-WNISCNTA.js} +40 -2
- package/chunks/{chunk-AWDF462I.js → chunk-WQMUGQ6G.js} +2 -2
- package/chunks/{chunk-VU7O7CGQ.js → chunk-XDNFODER.js} +1 -1
- package/chunks/{chunk-65GHQ4FX.js → chunk-XVTCSVBK.js} +514 -47
- package/chunks/{chunk-SI6Q52UI.js → chunk-XZ3Z43XL.js} +3 -3
- package/chunks/{chunk-SD7Y2PMC.js → chunk-YAC7H4K3.js} +2 -2
- package/chunks/{chunk-FXYNIZPW.js → chunk-YCEKI7QX.js} +51 -10
- package/chunks/{chunk-7IKXTGZT.js → chunk-YI2YCNSP.js} +1 -1
- package/chunks/{chunk-E4VX6LXB.js → chunk-YZTGGCEE.js} +10 -2
- package/chunks/{chunk-VMFPZXRT.js → chunk-ZNO5BUAD.js} +43 -31
- package/chunks/{chunk-WLZRMF3C.js → chunk-ZPL2TZNA.js} +353 -11
- package/chunks/{chunk-TXAEXF2B.js → chunk-ZU2T5JIS.js} +21 -8
- package/chunks/{config-utils-F4CFJ4MW.js → config-utils-KTDSQ4MU.js} +24 -24
- package/chunks/{contextCommand-OIIGGOMU.js → contextCommand-UQ3KRYGK.js} +22 -22
- package/chunks/{core-runtime-JEHLOGMB.js → core-runtime-JR34JAFH.js} +20 -20
- package/chunks/{create-sub-session-MVFBE5RA.js → create-sub-session-RGPJOI4S.js} +21 -21
- package/chunks/{daemon-LCUELM6E.js → daemon-UI6SQSBV.js} +1 -1
- package/chunks/{daemon-git-worktree-guard-5FTKLJOU.js → daemon-git-worktree-guard-H3OA26KQ.js} +20 -20
- package/chunks/{daemon-status-provider-P6A5MPMW.js → daemon-status-provider-6WZLKSZU.js} +27 -27
- package/chunks/{daemon-trust-policy-ZJ3NFYUO.js → daemon-trust-policy-3EDP2BYD.js} +27 -27
- package/chunks/{daemon-trust-policy-monitor-6SDLEW7S.js → daemon-trust-policy-monitor-CRHZPK52.js} +27 -27
- package/chunks/{deferred-core-runtime-DWOXIU5S.js → deferred-core-runtime-LO5NTQQ4.js} +20 -20
- package/chunks/{discovery-TUM3ZQ6U.js → discovery-XP4RMDUM.js} +4 -2
- package/chunks/{dist-NXW4DUUX.js → dist-24TCWK5H.js} +1 -1
- package/chunks/{dist-I74QLLQS.js → dist-5I4HLUTO.js} +1 -1
- package/chunks/{dist-XINEKB5A.js → dist-FDISN4AK.js} +1 -1
- package/chunks/{dist-VCAS67N5.js → dist-M4CBX53H.js} +1 -1
- package/chunks/{dist-AI25RVRA.js → dist-NQ2636VT.js} +1 -1
- package/chunks/{dist-3H3WODVS.js → dist-OR2ZQTXZ.js} +1 -1
- package/chunks/{dist-P6YWBITG.js → dist-STAGIFNB.js} +430 -51
- package/chunks/{dist-YNQU4CKC.js → dist-WZTUKIDR.js} +2 -2
- package/chunks/{dist-T4PRA5EZ.js → dist-XJ25G6OH.js} +1 -1
- package/chunks/{edit-WPVXLL3T.js → edit-LB7Z7XK5.js} +13 -13
- package/chunks/{enter-worktree-5A6VW6BN.js → enter-worktree-YFTKHXHZ.js} +2 -2
- package/chunks/{enterPlanMode-JSODW7E2.js → enterPlanMode-P6TVUFIY.js} +13 -13
- package/chunks/{environment-5LLJ3I3W.js → environment-QATJNNKI.js} +23 -23
- package/chunks/{errors-IQT3YZEP.js → errors-3XJ37PS2.js} +22 -22
- package/chunks/{exit-worktree-QV7E7KP6.js → exit-worktree-NF2XEMES.js} +3 -3
- package/chunks/{exitPlanMode-DDVFYNW4.js → exitPlanMode-A3OKL5UO.js} +13 -13
- package/chunks/{fast-path-PAUQQEVU.js → fast-path-DBIT5YQQ.js} +3 -3
- package/chunks/{fast-path-settings-ISEJPRYE.js → fast-path-settings-SATXY3PD.js} +3 -3
- package/chunks/{glob-SQ7CTZ7F.js → glob-73EDTXUE.js} +13 -13
- package/chunks/{goal-tools-UWZRCLQB.js → goal-tools-DFI6YMSD.js} +13 -13
- package/chunks/{handleAutoUpdate-RUPZZTSG.js → handleAutoUpdate-2FUNJO3B.js} +23 -23
- package/chunks/{i18n-SF5MPWEB.js → i18n-FDIA6KFI.js} +23 -21
- package/chunks/{image-gen-Q3RUTVKR.js → image-gen-XP4NNIYG.js} +4 -4
- package/chunks/{initializer-CK4WPYZG.js → initializer-4MJTJOTW.js} +27 -27
- package/chunks/{installationInfo-IRPQEYRF.js → installationInfo-232RA2OK.js} +20 -20
- package/chunks/{list-E3PS3EBJ.js → list-WN6WSGEB.js} +30 -30
- package/chunks/{llm-JQKBOYAF.js → llm-UDFWQWZA.js} +62 -62
- package/chunks/{llm-content-generator-2QWGBW42.js → llm-content-generator-VLMZ2A7A.js} +23 -8
- package/chunks/{loadedSettingsAdapter-DGXGVYZS.js → loadedSettingsAdapter-OBQEIXM7.js} +27 -27
- package/chunks/{loggingContentGenerator-ZYURLJKK.js → loggingContentGenerator-RGVUMUVX.js} +14 -14
- package/chunks/{managed-npm-update-HTHR63EA.js → managed-npm-update-QBAJYCFU.js} +20 -20
- package/chunks/{mcp-I7G2AEWS.js → mcp-OTIZZCPY.js} +27 -27
- package/chunks/{monitor-4R76BCRZ.js → monitor-BV5XF6LL.js} +13 -13
- package/chunks/{nonInteractiveCli-24OQ3VP2.js → nonInteractiveCli-W6MUKDVJ.js} +64 -61
- package/chunks/{notebook-edit-PPSH7FEX.js → notebook-edit-HGBEKGTE.js} +13 -13
- package/chunks/{openaiContentGenerator-K7V5EO7F.js → openaiContentGenerator-NSU3ERBH.js} +8 -8
- package/chunks/{pidfile-TGIUY2GG.js → pidfile-LE3TU4GE.js} +20 -20
- package/chunks/{processUtils-3USXUQWX.js → processUtils-YFBGJK67.js} +2 -2
- package/chunks/{prompt-terminal-ledger-XHVZRXJI.js → prompt-terminal-ledger-4W4W7DSO.js} +21 -21
- package/chunks/{qwenContentGenerator-MPBOQB64.js → qwenContentGenerator-HTA57WFC.js} +16 -16
- package/chunks/{qwenOAuth2-BS5D2LYV.js → qwenOAuth2-KX6LVYQ3.js} +4 -4
- package/chunks/{read-file-R256LDWQ.js → read-file-KHPQ2MB6.js} +2 -2
- package/chunks/{resumeHistoryUtils-S43LTFHD.js → resumeHistoryUtils-K7RV3QBN.js} +23 -23
- package/chunks/{ripGrep-L7HPZ75Y.js → ripGrep-NBBVCMG4.js} +3 -3
- package/chunks/{run-qwen-serve-CTFL5R6U.js → run-qwen-serve-A3JBOZCM.js} +58 -60
- package/chunks/{runtime-FS5TL6P7.js → runtime-7YOU2KJ3.js} +32 -32
- package/chunks/{scheduled-tasks-QXPV3Q35.js → scheduled-tasks-52LXK7LN.js} +25 -25
- package/chunks/{scheduler-EXU5HMVK.js → scheduler-J44M72VM.js} +22 -22
- package/chunks/{send-message-GQKXGMPI.js → send-message-AWKUDJBH.js} +1 -1
- package/chunks/{serve-ITJC7WNN.js → serve-TRC6XJUB.js} +27 -27
- package/chunks/{server-6JQY3PTU.js → server-YPNTJLX2.js} +1296 -822
- package/chunks/{session-PJDEKXD4.js → session-FMMIBFYX.js} +63 -62
- package/chunks/{session-attachments-root-L37ORSST.js → session-attachments-root-LDJMNK7K.js} +20 -20
- package/chunks/{session-pr-refresh-WIFD52YL.js → session-pr-refresh-NLR4EK2J.js} +24 -24
- package/chunks/{settings-LO6J5SAZ.js → settings-A46L577J.js} +26 -26
- package/chunks/{shell-ANAFVYGR.js → shell-Q5LSQPPY.js} +13 -13
- package/chunks/{skill-SHJWKSPH.js → skill-75KPJRCM.js} +2 -2
- package/chunks/{skill-settings-GX3XHZ5Q.js → skill-settings-775YT4YR.js} +26 -26
- package/chunks/{spawnChannel-WE42VBKM.js → spawnChannel-XY73I5CU.js} +20 -20
- package/chunks/{standalone-update-CWDIKJRP.js → standalone-update-L46XXNQ2.js} +22 -22
- package/chunks/{start-opentui-ui-BBHGFOTF.js → start-opentui-ui-WLV43247.js} +1991 -986
- package/chunks/{startInteractiveUI-FQX7LUYP.js → startInteractiveUI-F5DKMLOV.js} +1119 -1478
- package/chunks/{team-create-WKTPCH6D.js → team-create-2PATB77U.js} +13 -13
- package/chunks/{team-plan-approval-Y23DL7WR.js → team-plan-approval-QTANEWOS.js} +13 -13
- package/chunks/{terminal-image-renderer-B646HBDW.js → terminal-image-renderer-OGULCFNF.js} +20 -20
- package/chunks/{theme-manager-BNWESY26.js → theme-manager-CNO3QERP.js} +20 -20
- package/chunks/{tool-search-PVQ5O5Y2.js → tool-search-VXWEOZE7.js} +2 -2
- package/chunks/{total-session-admission-P5Z43KNW.js → total-session-admission-4KAADZPB.js} +24 -24
- package/chunks/{trustedFolders-FH2LT2MZ.js → trustedFolders-PPJSOPOT.js} +21 -21
- package/chunks/{update-relaunch-WOWTKJSN.js → update-relaunch-4PT4MW7B.js} +5 -5
- package/chunks/{updateCheck-3MYFMM35.js → updateCheck-WAVFLWNG.js} +22 -22
- package/chunks/{useAutoAcceptIndicator-Q7ZRRRKO.js → useAutoAcceptIndicator-XNED4NRB.js} +29 -29
- package/chunks/{validateNonInterActiveAuth-MYEWJX3G.js → validateNonInterActiveAuth-J676DUQ2.js} +59 -58
- package/chunks/{version-RO2FPO76.js → version-J6SRRQB2.js} +1 -1
- package/chunks/{web-fetch-QAKY2LUA.js → web-fetch-FMZZYX44.js} +5 -5
- package/chunks/{web-search-XA5Z4ZCD.js → web-search-3G2KXCX5.js} +18 -7
- package/chunks/{workflow-QFIOCMDM.js → workflow-PPZZICQ7.js} +15 -15
- package/chunks/{workspace-providers-status-B2UD7RAG.js → workspace-providers-status-IIYTAQST.js} +29 -29
- package/chunks/{workspace-registration-store-VZLRTI3Q.js → workspace-registration-store-VHCDXAV7.js} +1 -1
- package/chunks/{workspace-registry-GYOGG6TM.js → workspace-registry-I7VQIPS2.js} +24 -24
- package/chunks/{workspace-runtime-coordinator-7KRXGQ4V.js → workspace-runtime-coordinator-DBGNY32G.js} +24 -24
- package/chunks/{workspace-service-DJEYGJE4.js → workspace-service-QSKB2T54.js} +31 -31
- package/chunks/{workspace-skills-status-MOKNESUC.js → workspace-skills-status-T7GPT65J.js} +27 -27
- package/chunks/{workspace-trust-reconciler-AXOSUTQW.js → workspace-trust-reconciler-2PKRDAU4.js} +31 -31
- package/chunks/{write-file-QOYVHAKK.js → write-file-L76CGFTQ.js} +14 -14
- package/chunks/{zoom-image-UCCLGFNC.js → zoom-image-TDJJY2VZ.js} +2 -2
- package/cli.js +13 -13
- package/export-transcript-document.js +126 -122
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-CTstZpXw.js → abnfDiagram-VCTEODGH-DHc6plZn.js} +1 -1
- package/web-shell/assets/{arc-DKW0mbPo.js → arc-BQ9m8TDV.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-DkMpJ42t.js → architectureDiagram-5GKGNRK7-D5ap3oVB.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-7Cp1_4i3.js → blockDiagram-NRAW4CY4-BIbnyNph.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BfaoSlBK.js → c4Diagram-UCG6FXSJ-BRsdx_iG.js} +1 -1
- package/web-shell/assets/channel-uMMdTrYk.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-_n1qzAio.js → chunk-2Q5K7J3B-3lf1fNlx.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-0cira5ZV.js → chunk-5VM5RSS4-DP8VNRc4.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-DseRXSHC.js → chunk-F27PBJKO-DrohDmZ6.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-BehQWin0.js → chunk-G27WJ6UU-UZ2QhSx6.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-B5ftg1Bb.js → chunk-JWPE2WC7-BIMHVcZK.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-D7rnbVdk.js → chunk-LCL6LL3I-izRxdSDd.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-2Bp-Orju.js → chunk-POPQ4Y6H-CXADD4PP.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-CD2goGva.js → chunk-SVP7TREG-B96d8Y_1.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-DzQt-Rji.js → chunk-XXDRQBXY-CF2sVQpv.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-C-BZXSUn.js → cose-bilkent-JH36ORCC-CT6tXVAS.js} +1 -1
- package/web-shell/assets/csv-CX7rUNeC.svg +1 -0
- package/web-shell/assets/{cynefin-OW5HDTMX-BTcvowe1.js → cynefin-OW5HDTMX-X1NS4vtV.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BoUE6K81.js → cynefinDiagram-5FMLGOSQ-DNsKNOT4.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-BHxy9xeB.js → dagre-3AP2YEHR-9-AHKqsb.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-DMiJIvDT.js → diagram-S7CK7UJ4-Bjgms7j6.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-DXV09Aes.js → diagram-UQ7AKVKN-h6bCprbE.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-CocpRomV.js → diagram-VSXAHHWV-4SbQXVLt.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-DL7nqtb4.js → diagram-VX7I27RA-B5gPCzzB.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-CPZ2Jux_.js → diagram-Z3DM3KII-DFJXIA3A.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-BX-eVNsX.js → ebnfDiagram-PWID7BFC-FwyaU7VY.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CPy_Ir6y.js → erDiagram-SSCWMZ5O-8vJQh2te.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-eknAOte9.js → flowDiagram-A5DVABFB-BzA_1gMN.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-crAxw_t7.js → ganttDiagram-EL5Y4UJY-Co-ABbVX.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-M29pa3Tc.js → gitGraphDiagram-WWUBYQGX-DW_FcyrX.js} +1 -1
- package/web-shell/assets/{index-C9R-iojE.js → index-BbMXfhNG.js} +1 -1
- package/web-shell/assets/{index-B4TLaxWs.js → index-Bu-rZoJ-.js} +462 -454
- package/web-shell/assets/index-CsPwZ1ut.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-XqspXdOU.js → infoDiagram-RXCK75RN-BEgfhUFN.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-C5KFS-7j.js → ishikawaDiagram-5VMMS53U-DCsMxQmc.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-Cc57LVRo.js → journeyDiagram-EYS64GPL-DyIEYoHz.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-C81OG-AI.js → kanban-definition-3QL26DDD-CkxjqCNr.js} +1 -1
- package/web-shell/assets/{layout-CFVu37BB.js → layout-BEWc0Al9.js} +1 -1
- package/web-shell/assets/{linear-ChBxdtWf.js → linear-CNuNxirL.js} +1 -1
- package/web-shell/assets/{mermaid.core-CMLfue0w.js → mermaid.core-DZBre674.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-DFsvJThp.js → mindmap-definition-FBJOCRG2-CpafFz_F.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-BzpRzM4F.js → pegDiagram-XKGWAZYB-DfZqk_dq.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-Cv0Kankl.js → pieDiagram-E7YTZNPT-S0UWXlgC.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-Bh2BJ3Ay.js → quadrantDiagram-AXDQQJYC-dd37_Ohj.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-y8rNDdDS.js → railroadDiagram-O6MQD6OU-CH8NJZ7u.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-C0m2DKJ_.js → requirementDiagram-EFPCY7ZU-CFdqWYih.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-BzdGnSF4.js → sankeyDiagram-P5KCCOFB-CsddcEGD.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DPzAVmzz.js → sequenceDiagram-WJ2MYXX4-BZ270mGw.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-LcHG28Zh.js → sizeCapture-X5ZJPWSS-CGaS4DBV.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-C1Bzy3IT.js → stateDiagram-HBIQ2CUA-COpIzMu6.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-Bftk8V64.js → swimlanes-XN3QIQJK-CMF889m3.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-BfXHcN1A.js → timeline-definition-24CTP7MA-BelnxYz5.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DRSlI9-V.js → vennDiagram-4TSXK5OY-CU-NRqIB.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CaLmqGau.js → wardleyDiagram-VM6X3IG4-CDNKqWh-.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-8lgUT6e8.js → xychartDiagram-S5SC5T6Z-CLqguL5D.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-3UMWOKJC.js +0 -78
- package/chunks/chunk-IQAFKVXS.js +0 -22
- package/web-shell/assets/channel-CQx7VSAp.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-C-Uz8hHk.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-C-Uz8hHk.js +0 -1
- package/web-shell/assets/index-CCrkEbzz.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-LuuL5byY.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-COmnNq8s.js +0 -8
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
sanitizePromptText,
|
|
15
15
|
sanitizeSenderName,
|
|
16
16
|
truncateUtf16Units
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-XVTCSVBK.js";
|
|
18
18
|
import "./chunk-IW6RQPQB.js";
|
|
19
19
|
import "./chunk-CQ35AJ4Z.js";
|
|
20
20
|
import "./chunk-DMTGGOSA.js";
|
|
@@ -6933,6 +6933,95 @@ __name(parseDingtalkCardActorId, "parseDingtalkCardActorId");
|
|
|
6933
6933
|
// packages/channels/dingtalk/dist/status-card-controller.js
|
|
6934
6934
|
init_esbuild_shims();
|
|
6935
6935
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
6936
|
+
|
|
6937
|
+
// packages/channels/dingtalk/dist/presentation-phase.js
|
|
6938
|
+
init_esbuild_shims();
|
|
6939
|
+
var DINGTALK_PRESENTATION_PHASE_LABELS = {
|
|
6940
|
+
thinking: "\u{1F914} Thinking",
|
|
6941
|
+
reading: "\u{1F4D6} Reading",
|
|
6942
|
+
searching: "\u{1F50E} Searching",
|
|
6943
|
+
running: "\u{1F5A5}\uFE0F Running",
|
|
6944
|
+
editing: "\u{1F6E0}\uFE0F Editing",
|
|
6945
|
+
deleting: "\u{1F5D1}\uFE0F Deleting",
|
|
6946
|
+
moving: "\u{1F4E6} Moving",
|
|
6947
|
+
fetching: "\u{1F310} Fetching",
|
|
6948
|
+
switching: "\u{1F504} Switching mode",
|
|
6949
|
+
working: "\u{1F6E0}\uFE0F Working",
|
|
6950
|
+
failed: "\u26A0\uFE0F Tool failed",
|
|
6951
|
+
replying: "\u270D\uFE0F Replying"
|
|
6952
|
+
};
|
|
6953
|
+
var DINGTALK_ZH_PRESENTATION_PHASE_LABELS = {
|
|
6954
|
+
thinking: "\u{1F914} \u601D\u8003\u4E2D",
|
|
6955
|
+
reading: "\u{1F4D6} \u8BFB\u53D6\u4E2D",
|
|
6956
|
+
searching: "\u{1F50E} \u641C\u7D22\u4E2D",
|
|
6957
|
+
running: "\u{1F5A5}\uFE0F \u6267\u884C\u4E2D",
|
|
6958
|
+
editing: "\u{1F6E0}\uFE0F \u7F16\u8F91\u4E2D",
|
|
6959
|
+
deleting: "\u{1F5D1}\uFE0F \u5220\u9664\u4E2D",
|
|
6960
|
+
moving: "\u{1F4E6} \u79FB\u52A8\u4E2D",
|
|
6961
|
+
fetching: "\u{1F310} \u83B7\u53D6\u4E2D",
|
|
6962
|
+
switching: "\u{1F504} \u5207\u6362\u6A21\u5F0F\u4E2D",
|
|
6963
|
+
working: "\u{1F6E0}\uFE0F \u5904\u7406\u4E2D",
|
|
6964
|
+
failed: "\u26A0\uFE0F \u5DE5\u5177\u5931\u8D25",
|
|
6965
|
+
replying: "\u270D\uFE0F \u56DE\u590D\u4E2D"
|
|
6966
|
+
};
|
|
6967
|
+
function isChinesePresentationLanguage(language) {
|
|
6968
|
+
const normalized = language?.trim().toLowerCase().replaceAll("_", "-");
|
|
6969
|
+
return normalized === "zh" || normalized === "zh-cn";
|
|
6970
|
+
}
|
|
6971
|
+
__name(isChinesePresentationLanguage, "isChinesePresentationLanguage");
|
|
6972
|
+
function presentationPhaseLabel(phase, language) {
|
|
6973
|
+
return (isChinesePresentationLanguage(language) ? DINGTALK_ZH_PRESENTATION_PHASE_LABELS : DINGTALK_PRESENTATION_PHASE_LABELS)[phase];
|
|
6974
|
+
}
|
|
6975
|
+
__name(presentationPhaseLabel, "presentationPhaseLabel");
|
|
6976
|
+
function toolPresentationPhase(kind) {
|
|
6977
|
+
switch (kind.trim().toLowerCase()) {
|
|
6978
|
+
case "read":
|
|
6979
|
+
return "reading";
|
|
6980
|
+
case "edit":
|
|
6981
|
+
return "editing";
|
|
6982
|
+
case "delete":
|
|
6983
|
+
return "deleting";
|
|
6984
|
+
case "move":
|
|
6985
|
+
return "moving";
|
|
6986
|
+
case "search":
|
|
6987
|
+
return "searching";
|
|
6988
|
+
case "execute":
|
|
6989
|
+
return "running";
|
|
6990
|
+
case "think":
|
|
6991
|
+
return "thinking";
|
|
6992
|
+
case "fetch":
|
|
6993
|
+
return "fetching";
|
|
6994
|
+
case "switch_mode":
|
|
6995
|
+
return "switching";
|
|
6996
|
+
case "other":
|
|
6997
|
+
return "working";
|
|
6998
|
+
default:
|
|
6999
|
+
if (/read/iu.test(kind))
|
|
7000
|
+
return "reading";
|
|
7001
|
+
if (/search|browser|web/iu.test(kind))
|
|
7002
|
+
return "searching";
|
|
7003
|
+
if (/shell|exec|command|run/iu.test(kind))
|
|
7004
|
+
return "running";
|
|
7005
|
+
if (/edit|write|patch/iu.test(kind))
|
|
7006
|
+
return "editing";
|
|
7007
|
+
return "working";
|
|
7008
|
+
}
|
|
7009
|
+
}
|
|
7010
|
+
__name(toolPresentationPhase, "toolPresentationPhase");
|
|
7011
|
+
function lifecyclePresentationPhase(event) {
|
|
7012
|
+
if (event.type === "text_chunk")
|
|
7013
|
+
return "replying";
|
|
7014
|
+
if (event.type !== "tool_call")
|
|
7015
|
+
return void 0;
|
|
7016
|
+
if (/fail|error/iu.test(event.toolCall.status))
|
|
7017
|
+
return "failed";
|
|
7018
|
+
if (/complete|success/iu.test(event.toolCall.status))
|
|
7019
|
+
return "thinking";
|
|
7020
|
+
return toolPresentationPhase(event.toolCall.kind);
|
|
7021
|
+
}
|
|
7022
|
+
__name(lifecyclePresentationPhase, "lifecyclePresentationPhase");
|
|
7023
|
+
|
|
7024
|
+
// packages/channels/dingtalk/dist/status-card-controller.js
|
|
6936
7025
|
var FLUSH_INTERVAL_MS = 500;
|
|
6937
7026
|
var STATUS_REFRESH_INTERVAL_MS = 1e3;
|
|
6938
7027
|
var CONTENT_SYNC_INTERVAL_SECONDS = 5;
|
|
@@ -6948,6 +7037,23 @@ function boundContent(content) {
|
|
|
6948
7037
|
return `${TRUNCATION_MARKER}${content.slice(content.length - (CONTENT_LIMIT - TRUNCATION_MARKER.length))}`;
|
|
6949
7038
|
}
|
|
6950
7039
|
__name(boundContent, "boundContent");
|
|
7040
|
+
function activeContent(phase, content, language, sourcePrefix) {
|
|
7041
|
+
const label = presentationPhaseLabel(phase, language);
|
|
7042
|
+
const sanitized = sanitizeStreamingImageMarkers(content);
|
|
7043
|
+
const renderedSourcePrefix = sourcePrefix && (sanitized === sourcePrefix || sanitized.startsWith(`${sourcePrefix}
|
|
7044
|
+
|
|
7045
|
+
`)) ? sourcePrefix : void 0;
|
|
7046
|
+
const body = renderedSourcePrefix ? sanitized.slice(renderedSourcePrefix.length + (sanitized.length === renderedSourcePrefix.length ? 0 : 2)) : sanitized;
|
|
7047
|
+
const prefix = [label, renderedSourcePrefix].filter(Boolean).join("\n\n");
|
|
7048
|
+
if (!body)
|
|
7049
|
+
return prefix;
|
|
7050
|
+
const separator = "\n\n";
|
|
7051
|
+
const available = CONTENT_LIMIT - prefix.length - separator.length;
|
|
7052
|
+
if (body.length <= available)
|
|
7053
|
+
return `${prefix}${separator}${body}`;
|
|
7054
|
+
return `${prefix}${separator}${TRUNCATION_MARKER}${body.slice(body.length - (available - TRUNCATION_MARKER.length))}`;
|
|
7055
|
+
}
|
|
7056
|
+
__name(activeContent, "activeContent");
|
|
6951
7057
|
var StatusCardController = class {
|
|
6952
7058
|
static {
|
|
6953
7059
|
__name(this, "StatusCardController");
|
|
@@ -7080,6 +7186,8 @@ var StatusCardController = class {
|
|
|
7080
7186
|
target,
|
|
7081
7187
|
outTrackId,
|
|
7082
7188
|
content: boundContent(initialContent),
|
|
7189
|
+
...segment.sourceLabel ? { sourcePrefix: escapeDingTalkMarkdown(segment.sourceLabel) } : {},
|
|
7190
|
+
phase: "thinking",
|
|
7083
7191
|
startedAt: Date.now(),
|
|
7084
7192
|
lastStatusSecond: 0,
|
|
7085
7193
|
lastContentSyncSecond: 0,
|
|
@@ -7114,6 +7222,20 @@ var StatusCardController = class {
|
|
|
7114
7222
|
complete(segmentId, text, retainedContent) {
|
|
7115
7223
|
return this.finalize(segmentId, boundContent(text), "Completed", false, retainedContent);
|
|
7116
7224
|
}
|
|
7225
|
+
updateRunPhase(runId, phase) {
|
|
7226
|
+
if (this.disposed)
|
|
7227
|
+
return;
|
|
7228
|
+
for (const segmentId of this.segmentIdsByRun.get(runId) ?? []) {
|
|
7229
|
+
const record = this.recordsBySegment.get(segmentId);
|
|
7230
|
+
if (!record || record.terminal || record.streamFailed || record.phase === phase) {
|
|
7231
|
+
continue;
|
|
7232
|
+
}
|
|
7233
|
+
record.phase = phase;
|
|
7234
|
+
record.contentVersion++;
|
|
7235
|
+
record.hasPendingWrite = true;
|
|
7236
|
+
this.scheduleFlush(record);
|
|
7237
|
+
}
|
|
7238
|
+
}
|
|
7117
7239
|
fail(segmentId, error) {
|
|
7118
7240
|
void this.finalize(segmentId, boundContent(error), "Failed", true);
|
|
7119
7241
|
}
|
|
@@ -7169,9 +7291,9 @@ var StatusCardController = class {
|
|
|
7169
7291
|
outTrackId: record.outTrackId,
|
|
7170
7292
|
target,
|
|
7171
7293
|
cardParamMap: {
|
|
7172
|
-
content:
|
|
7294
|
+
content: activeContent(record.phase, record.content, this.options.language, record.sourcePrefix),
|
|
7173
7295
|
flowStatus: 2,
|
|
7174
|
-
statusLine: this.statusLine(record
|
|
7296
|
+
statusLine: this.statusLine(record).text,
|
|
7175
7297
|
hasAction: "true",
|
|
7176
7298
|
stop_action: "true"
|
|
7177
7299
|
}
|
|
@@ -7196,7 +7318,7 @@ var StatusCardController = class {
|
|
|
7196
7318
|
await this.options.client.openOrUpdateStream({
|
|
7197
7319
|
outTrackId: record.outTrackId,
|
|
7198
7320
|
key: "content",
|
|
7199
|
-
content:
|
|
7321
|
+
content: activeContent(record.phase, record.content, this.options.language, record.sourcePrefix),
|
|
7200
7322
|
finalize: false
|
|
7201
7323
|
});
|
|
7202
7324
|
} catch (error) {
|
|
@@ -7245,7 +7367,7 @@ var StatusCardController = class {
|
|
|
7245
7367
|
await this.options.client.openOrUpdateStream({
|
|
7246
7368
|
outTrackId: record.outTrackId,
|
|
7247
7369
|
key: "content",
|
|
7248
|
-
content:
|
|
7370
|
+
content: activeContent(record.phase, record.content, this.options.language, record.sourcePrefix),
|
|
7249
7371
|
finalize: false
|
|
7250
7372
|
});
|
|
7251
7373
|
contentWritten = true;
|
|
@@ -7448,14 +7570,28 @@ var StatusCardController = class {
|
|
|
7448
7570
|
const second = Math.max(0, Math.floor((Date.now() - record.startedAt) / 1e3));
|
|
7449
7571
|
const model = this.options.model?.trim();
|
|
7450
7572
|
return {
|
|
7451
|
-
text: [
|
|
7573
|
+
text: [
|
|
7574
|
+
state ? this.statusStateLabel(state) : void 0,
|
|
7575
|
+
model,
|
|
7576
|
+
`${second}s`
|
|
7577
|
+
].filter(Boolean).join(" \xB7 "),
|
|
7452
7578
|
second
|
|
7453
7579
|
};
|
|
7454
7580
|
}
|
|
7581
|
+
statusStateLabel(state) {
|
|
7582
|
+
if (!isChinesePresentationLanguage(this.options.language))
|
|
7583
|
+
return state;
|
|
7584
|
+
return {
|
|
7585
|
+
Completed: "\u5DF2\u5B8C\u6210",
|
|
7586
|
+
Failed: "\u5DF2\u5931\u8D25",
|
|
7587
|
+
Stopped: "\u5DF2\u7EC8\u6B62",
|
|
7588
|
+
Cancelled: "\u5DF2\u53D6\u6D88"
|
|
7589
|
+
}[state] ?? state;
|
|
7590
|
+
}
|
|
7455
7591
|
async updateRunningStatus(record) {
|
|
7456
7592
|
if (this.disposed || record.terminal || record.streamFailed)
|
|
7457
7593
|
return;
|
|
7458
|
-
const status = this.statusLine(record
|
|
7594
|
+
const status = this.statusLine(record);
|
|
7459
7595
|
if (status.second === record.lastStatusSecond)
|
|
7460
7596
|
return;
|
|
7461
7597
|
const syncContent = status.second - record.lastContentSyncSecond >= CONTENT_SYNC_INTERVAL_SECONDS;
|
|
@@ -7463,7 +7599,9 @@ var StatusCardController = class {
|
|
|
7463
7599
|
await this.options.client.updateInstance({
|
|
7464
7600
|
outTrackId: record.outTrackId,
|
|
7465
7601
|
cardParamMap: {
|
|
7466
|
-
...syncContent ? {
|
|
7602
|
+
...syncContent ? {
|
|
7603
|
+
content: activeContent(record.phase, record.content, this.options.language, record.sourcePrefix)
|
|
7604
|
+
} : {},
|
|
7467
7605
|
statusLine: status.text
|
|
7468
7606
|
}
|
|
7469
7607
|
});
|
|
@@ -7905,6 +8043,12 @@ var DingtalkInteractionPresenter = class {
|
|
|
7905
8043
|
statusCards?.replace(statusContext, target, this.withSourcePrefix(run, ""));
|
|
7906
8044
|
});
|
|
7907
8045
|
}
|
|
8046
|
+
updateStatusCardPhase(runId, phase) {
|
|
8047
|
+
const run = this.runs.get(runId);
|
|
8048
|
+
if (!run || run.terminal)
|
|
8049
|
+
return;
|
|
8050
|
+
void this.enqueue(run, () => this.options.statusCards?.updateRunPhase(runId, phase));
|
|
8051
|
+
}
|
|
7908
8052
|
appendOutput(segment, chunk) {
|
|
7909
8053
|
const run = this.runs.get(segment.runId);
|
|
7910
8054
|
if (!run || run.terminal || run.ownerId !== segment.owner.id || run.target.chatId !== segment.target.chatId || run.target.isGroup !== segment.target.isGroup || !chunk || this.terminalSegmentIds.has(segment.segmentId)) {
|
|
@@ -8005,6 +8149,20 @@ var DingtalkInteractionPresenter = class {
|
|
|
8005
8149
|
return Promise.resolve({ kind: "unsupported" });
|
|
8006
8150
|
return questionCards.present(context, this.cardTarget(context.target));
|
|
8007
8151
|
}
|
|
8152
|
+
terminalCopy() {
|
|
8153
|
+
if (this.options.language !== void 0 && !isChinesePresentationLanguage(this.options.language)) {
|
|
8154
|
+
return {
|
|
8155
|
+
failed: "Processing failed, please try again later.",
|
|
8156
|
+
stopped: "Task stopped",
|
|
8157
|
+
cancelled: "Task cancelled"
|
|
8158
|
+
};
|
|
8159
|
+
}
|
|
8160
|
+
return {
|
|
8161
|
+
failed: "\u672C\u6B21\u5904\u7406\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
|
|
8162
|
+
stopped: "\u4EFB\u52A1\u5DF2\u505C\u6B62",
|
|
8163
|
+
cancelled: "\u4EFB\u52A1\u5DF2\u53D6\u6D88"
|
|
8164
|
+
};
|
|
8165
|
+
}
|
|
8008
8166
|
terminalizeRun(runId, terminal, detail = "") {
|
|
8009
8167
|
const run = this.runs.get(runId);
|
|
8010
8168
|
if (!run || run.terminal)
|
|
@@ -8017,16 +8175,17 @@ var DingtalkInteractionPresenter = class {
|
|
|
8017
8175
|
this.segments.delete(activeSegmentId);
|
|
8018
8176
|
this.addTerminalSegment(activeSegmentId);
|
|
8019
8177
|
}
|
|
8178
|
+
const copy = this.terminalCopy();
|
|
8020
8179
|
const finalization = this.enqueue(run, async () => {
|
|
8021
8180
|
if (terminal === "failed") {
|
|
8022
8181
|
const statusContext = this.ensureStatusContext(run);
|
|
8023
8182
|
this.options.statusCards?.ensure(statusContext, this.cardTarget(statusContext.target));
|
|
8024
|
-
this.options.statusCards?.fail(statusContext.segmentId, this.withSenderPrefix(run,
|
|
8183
|
+
this.options.statusCards?.fail(statusContext.segmentId, this.withSenderPrefix(run, copy.failed));
|
|
8025
8184
|
await this.redeliverCardDeliveredContent(run);
|
|
8026
8185
|
} else if (terminal === "cancelled") {
|
|
8027
8186
|
const statusContext = run.statusContext;
|
|
8028
8187
|
if (statusContext) {
|
|
8029
|
-
this.options.statusCards?.replace(statusContext, this.cardTarget(statusContext.target), this.withSenderPrefix(run, detail === "cancel_command" ?
|
|
8188
|
+
this.options.statusCards?.replace(statusContext, this.cardTarget(statusContext.target), this.withSenderPrefix(run, detail === "cancel_command" ? copy.stopped : copy.cancelled));
|
|
8030
8189
|
}
|
|
8031
8190
|
this.options.statusCards?.cancelRun(runId, detail === "cancel_command" ? "cancel_command" : "dropped");
|
|
8032
8191
|
await this.redeliverCardDeliveredContent(run);
|
|
@@ -8388,9 +8547,15 @@ var BACKGROUND_RESPONSE_AGGREGATION_MAX_RETRIES = 3;
|
|
|
8388
8547
|
var ACK_REACTION_NAME = "\u{1F440}";
|
|
8389
8548
|
var ACK_EMOTION_ID = "2659900";
|
|
8390
8549
|
var ACK_EMOTION_BG_ID = "im_bg_1";
|
|
8550
|
+
var STATUS_EMOTION_ID = "34019";
|
|
8551
|
+
var STATUS_EMOTION_BG_ID = "im_bg_6";
|
|
8552
|
+
var DONE_EMOTION_ID = "54054";
|
|
8553
|
+
var DONE_EMOTION_BG_ID = "im_bg_5";
|
|
8391
8554
|
var EMOTION_API = "https://api.dingtalk.com/v1.0/robot/emotion";
|
|
8392
8555
|
var EMOTION_MAX_ATTEMPTS = 3;
|
|
8393
8556
|
var EMOTION_RETRY_BASE_DELAY_MS = 250;
|
|
8557
|
+
var EMOTION_FETCH_TIMEOUT_MS = 15e3;
|
|
8558
|
+
var EMOTION_FINISH_MAX_ATTEMPTS = 3;
|
|
8394
8559
|
var GROUP_MSG_API = "https://api.dingtalk.com/v1.0/robot/groupMessages/send";
|
|
8395
8560
|
var DIRECT_MSG_API = "https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend";
|
|
8396
8561
|
var PROACTIVE_MSG_KEY = "sampleMarkdown";
|
|
@@ -8518,6 +8683,26 @@ var FILE_INSTRUCTIONS = [
|
|
|
8518
8683
|
"File paths containing ] are not supported.",
|
|
8519
8684
|
"Do not claim delivery succeeded; DingTalk shows successful files separately and reports failures in the final text."
|
|
8520
8685
|
].join("\n");
|
|
8686
|
+
function statusEmotionTag(name) {
|
|
8687
|
+
return {
|
|
8688
|
+
name,
|
|
8689
|
+
emotionId: STATUS_EMOTION_ID,
|
|
8690
|
+
backgroundId: STATUS_EMOTION_BG_ID
|
|
8691
|
+
};
|
|
8692
|
+
}
|
|
8693
|
+
__name(statusEmotionTag, "statusEmotionTag");
|
|
8694
|
+
var EYE_TAG = {
|
|
8695
|
+
name: ACK_REACTION_NAME,
|
|
8696
|
+
emotionId: ACK_EMOTION_ID,
|
|
8697
|
+
backgroundId: ACK_EMOTION_BG_ID
|
|
8698
|
+
};
|
|
8699
|
+
var DONE_TAG = {
|
|
8700
|
+
name: "\u2705 Done",
|
|
8701
|
+
emotionId: DONE_EMOTION_ID,
|
|
8702
|
+
backgroundId: DONE_EMOTION_BG_ID
|
|
8703
|
+
};
|
|
8704
|
+
var FAILED_TAG = statusEmotionTag("\u274C Failed");
|
|
8705
|
+
var STOPPED_TAG = statusEmotionTag("\u23F9\uFE0F Stopped");
|
|
8521
8706
|
function collectNonBotMentionIds(data) {
|
|
8522
8707
|
if (!Array.isArray(data.atUsers) || typeof data.chatbotUserId !== "string") {
|
|
8523
8708
|
return [];
|
|
@@ -8585,6 +8770,7 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
8585
8770
|
}
|
|
8586
8771
|
client;
|
|
8587
8772
|
atSender;
|
|
8773
|
+
displayLanguage;
|
|
8588
8774
|
connectionManager;
|
|
8589
8775
|
seenMessages = /* @__PURE__ */ new Map();
|
|
8590
8776
|
mentionTargets = /* @__PURE__ */ new Map();
|
|
@@ -8595,8 +8781,11 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
8595
8781
|
/** Map conversationId → latest sessionWebhook URL for sending replies. */
|
|
8596
8782
|
webhooks = /* @__PURE__ */ new Map();
|
|
8597
8783
|
activeReactionKeys = /* @__PURE__ */ new Set();
|
|
8784
|
+
reactionStates = /* @__PURE__ */ new Map();
|
|
8598
8785
|
/** sessionId → reaction keys, so a dead session's reactions can be recalled. */
|
|
8599
8786
|
sessionReactionKeys = /* @__PURE__ */ new Map();
|
|
8787
|
+
/** Settles when the reaction cleanup queued by disconnect() has run. */
|
|
8788
|
+
disconnectDrain;
|
|
8600
8789
|
/**
|
|
8601
8790
|
* Real inbound message ids (insertion-ordered, size-capped). Unlike the
|
|
8602
8791
|
* TTL-swept seenMessages dedup map, entries survive long queue waits, so a
|
|
@@ -8636,6 +8825,7 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
8636
8825
|
constructor(name, config, bridge, options) {
|
|
8637
8826
|
super(name, config, bridge, options);
|
|
8638
8827
|
this.atSender = config["atSender"] === true;
|
|
8828
|
+
this.displayLanguage = options?.displayLanguage;
|
|
8639
8829
|
if (!this.config.instructions) {
|
|
8640
8830
|
this.config.instructions = [
|
|
8641
8831
|
"## DingTalk Channel",
|
|
@@ -8679,6 +8869,7 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
8679
8869
|
client: this.interactiveCardClient,
|
|
8680
8870
|
cancelRun: /* @__PURE__ */ __name((sessionId, runId) => this.requestPromptRunCancellation(sessionId, runId), "cancelRun"),
|
|
8681
8871
|
...config.model ? { model: config.model } : {},
|
|
8872
|
+
...options?.displayLanguage ? { language: options.displayLanguage } : {},
|
|
8682
8873
|
onError: /* @__PURE__ */ __name((operation, error) => {
|
|
8683
8874
|
process.stderr.write(`[DingTalk:${this.name}] ${operation} failed: ${sanitizeLogText(String(error), 300)}
|
|
8684
8875
|
`);
|
|
@@ -8701,6 +8892,7 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
8701
8892
|
this.interactionPresenter = new DingtalkInteractionPresenter({
|
|
8702
8893
|
statusCards: this.statusCardController,
|
|
8703
8894
|
questionCards: this.questionCardController,
|
|
8895
|
+
...options?.displayLanguage ? { language: options.displayLanguage } : {},
|
|
8704
8896
|
...config.blockStreaming !== "on" ? {
|
|
8705
8897
|
sendFallback: /* @__PURE__ */ __name((chatId, text, sessionId, sourceLabel) => this.sendFallbackReply(chatId, text, sessionId, sourceLabel), "sendFallback")
|
|
8706
8898
|
} : {}
|
|
@@ -9351,14 +9543,14 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9351
9543
|
getAccessToken() {
|
|
9352
9544
|
return this.client.getConfig().access_token;
|
|
9353
9545
|
}
|
|
9354
|
-
async emotionApi(endpoint, msgId, conversationId) {
|
|
9546
|
+
async emotionApi(endpoint, msgId, conversationId, tag) {
|
|
9355
9547
|
const robotCode = this.config.clientId;
|
|
9356
9548
|
if (!robotCode || !msgId || !conversationId)
|
|
9357
|
-
return;
|
|
9549
|
+
return false;
|
|
9358
9550
|
try {
|
|
9359
9551
|
const token = this.config.clientSecret ? await this.getProactiveToken() : this.getAccessToken();
|
|
9360
9552
|
if (!token)
|
|
9361
|
-
return;
|
|
9553
|
+
return false;
|
|
9362
9554
|
for (let attempt = 0; attempt < EMOTION_MAX_ATTEMPTS; attempt++) {
|
|
9363
9555
|
const resp = await fetch(`${EMOTION_API}/${endpoint}`, {
|
|
9364
9556
|
method: "POST",
|
|
@@ -9371,17 +9563,18 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9371
9563
|
openMsgId: msgId,
|
|
9372
9564
|
openConversationId: conversationId,
|
|
9373
9565
|
emotionType: 2,
|
|
9374
|
-
emotionName:
|
|
9566
|
+
emotionName: tag.name,
|
|
9375
9567
|
textEmotion: {
|
|
9376
|
-
emotionId:
|
|
9377
|
-
emotionName:
|
|
9378
|
-
text:
|
|
9379
|
-
backgroundId:
|
|
9568
|
+
emotionId: tag.emotionId,
|
|
9569
|
+
emotionName: tag.name,
|
|
9570
|
+
text: tag.name,
|
|
9571
|
+
backgroundId: tag.backgroundId
|
|
9380
9572
|
}
|
|
9381
|
-
})
|
|
9573
|
+
}),
|
|
9574
|
+
signal: AbortSignal.timeout(EMOTION_FETCH_TIMEOUT_MS)
|
|
9382
9575
|
});
|
|
9383
9576
|
if (resp.ok)
|
|
9384
|
-
return;
|
|
9577
|
+
return true;
|
|
9385
9578
|
const isTransient = resp.status === 429 || resp.status >= 500;
|
|
9386
9579
|
if (isTransient && attempt < EMOTION_MAX_ATTEMPTS - 1) {
|
|
9387
9580
|
await resp.body?.cancel();
|
|
@@ -9391,25 +9584,31 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9391
9584
|
const detail = sanitizeLogText(await resp.text().catch(() => ""), 500);
|
|
9392
9585
|
process.stderr.write(`[DingTalk:${this.name}] emotion/${endpoint} failed after ${attempt + 1}/${EMOTION_MAX_ATTEMPTS} attempts: ${resp.status} ${detail}
|
|
9393
9586
|
`);
|
|
9394
|
-
return;
|
|
9587
|
+
return false;
|
|
9395
9588
|
}
|
|
9396
9589
|
} catch {
|
|
9397
9590
|
}
|
|
9591
|
+
return false;
|
|
9398
9592
|
}
|
|
9399
|
-
async attachReaction(msgId, conversationId) {
|
|
9400
|
-
|
|
9593
|
+
async attachReaction(msgId, conversationId, tag = EYE_TAG) {
|
|
9594
|
+
return this.emotionApi("reply", msgId, conversationId, tag);
|
|
9401
9595
|
}
|
|
9402
|
-
async recallReaction(msgId, conversationId) {
|
|
9403
|
-
|
|
9596
|
+
async recallReaction(msgId, conversationId, tag = EYE_TAG) {
|
|
9597
|
+
return this.emotionApi("recall", msgId, conversationId, tag);
|
|
9404
9598
|
}
|
|
9405
9599
|
disconnect() {
|
|
9406
9600
|
if (this.dedupTimer) {
|
|
9407
9601
|
clearInterval(this.dedupTimer);
|
|
9408
9602
|
}
|
|
9603
|
+
const reactionStates = [...this.reactionStates.values()];
|
|
9604
|
+
for (const state of reactionStates) {
|
|
9605
|
+
this.finishReaction(state.chatId, state.messageId, state.sessionId);
|
|
9606
|
+
}
|
|
9409
9607
|
this.statusCardController?.dispose();
|
|
9410
9608
|
this.drainBackgroundResponseAggregations();
|
|
9411
9609
|
this.activeReactionKeys.clear();
|
|
9412
9610
|
this.sessionReactionKeys.clear();
|
|
9611
|
+
this.reactionStates.clear();
|
|
9413
9612
|
if (this.connectionManager) {
|
|
9414
9613
|
this.connectionManager.stop();
|
|
9415
9614
|
} else {
|
|
@@ -9417,6 +9616,10 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9417
9616
|
}
|
|
9418
9617
|
process.stderr.write(`[DingTalk:${this.name}] Disconnected.
|
|
9419
9618
|
`);
|
|
9619
|
+
this.disconnectDrain = Promise.allSettled(reactionStates.map((state) => state.tail)).then(() => void 0);
|
|
9620
|
+
}
|
|
9621
|
+
waitForDisconnect() {
|
|
9622
|
+
return this.disconnectDrain ?? Promise.resolve();
|
|
9420
9623
|
}
|
|
9421
9624
|
/** Stable API targets are conversation or user IDs, never webhook URLs. */
|
|
9422
9625
|
isStableTargetId(chatId) {
|
|
@@ -9425,6 +9628,111 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9425
9628
|
reactionKey(messageId, conversationId) {
|
|
9426
9629
|
return `${conversationId}:${messageId}`;
|
|
9427
9630
|
}
|
|
9631
|
+
forgetReactionState(state) {
|
|
9632
|
+
this.activeReactionKeys.delete(state.key);
|
|
9633
|
+
if (this.reactionStates.get(state.key) === state) {
|
|
9634
|
+
this.reactionStates.delete(state.key);
|
|
9635
|
+
}
|
|
9636
|
+
if (!state.sessionId)
|
|
9637
|
+
return;
|
|
9638
|
+
const keys = this.sessionReactionKeys.get(state.sessionId);
|
|
9639
|
+
keys?.delete(state.key);
|
|
9640
|
+
if (keys?.size === 0)
|
|
9641
|
+
this.sessionReactionKeys.delete(state.sessionId);
|
|
9642
|
+
}
|
|
9643
|
+
enqueueReaction(state, operation) {
|
|
9644
|
+
state.tail = state.tail.then(operation).catch((err) => {
|
|
9645
|
+
this.logReactionFailure("lifecycle tag update", err);
|
|
9646
|
+
});
|
|
9647
|
+
}
|
|
9648
|
+
scheduleReactionDrain(state) {
|
|
9649
|
+
if (state.drainScheduled)
|
|
9650
|
+
return;
|
|
9651
|
+
state.drainScheduled = true;
|
|
9652
|
+
this.enqueueReaction(state, async () => {
|
|
9653
|
+
try {
|
|
9654
|
+
await this.drainReactionState(state);
|
|
9655
|
+
} finally {
|
|
9656
|
+
state.drainScheduled = false;
|
|
9657
|
+
if (this.reactionStates.get(state.key) === state && (state.finishing ? !state.finishBlocked : this.activeReactionKeys.has(state.key) && state.desiredStatusTag && state.desiredStatusTag.name !== state.statusTag?.name)) {
|
|
9658
|
+
this.scheduleReactionDrain(state);
|
|
9659
|
+
}
|
|
9660
|
+
}
|
|
9661
|
+
});
|
|
9662
|
+
}
|
|
9663
|
+
async drainReactionState(state) {
|
|
9664
|
+
while (true) {
|
|
9665
|
+
if (state.finishing) {
|
|
9666
|
+
await this.finishReactionState(state);
|
|
9667
|
+
return;
|
|
9668
|
+
}
|
|
9669
|
+
if (this.reactionStates.get(state.key) !== state || !this.activeReactionKeys.has(state.key)) {
|
|
9670
|
+
return;
|
|
9671
|
+
}
|
|
9672
|
+
const desired = state.desiredStatusTag;
|
|
9673
|
+
if (!desired || desired.name === state.statusTag?.name)
|
|
9674
|
+
return;
|
|
9675
|
+
const latched = state.failedTransition;
|
|
9676
|
+
if (state.statusTag) {
|
|
9677
|
+
const from = state.statusTag.name;
|
|
9678
|
+
if (latched && latched.from === from && latched.to === desired.name) {
|
|
9679
|
+
state.desiredStatusTag = state.statusTag;
|
|
9680
|
+
return;
|
|
9681
|
+
}
|
|
9682
|
+
const revision2 = state.revision;
|
|
9683
|
+
if (await this.recallReaction(state.messageId, state.chatId, state.statusTag) === false) {
|
|
9684
|
+
state.failedTransition = { from, to: desired.name };
|
|
9685
|
+
if (state.revision !== revision2)
|
|
9686
|
+
continue;
|
|
9687
|
+
state.desiredStatusTag = state.statusTag;
|
|
9688
|
+
return;
|
|
9689
|
+
}
|
|
9690
|
+
state.failedTransition = void 0;
|
|
9691
|
+
state.statusTag = void 0;
|
|
9692
|
+
continue;
|
|
9693
|
+
}
|
|
9694
|
+
if (latched && latched.from === void 0 && latched.to === desired.name) {
|
|
9695
|
+
state.desiredStatusTag = void 0;
|
|
9696
|
+
return;
|
|
9697
|
+
}
|
|
9698
|
+
const revision = state.revision;
|
|
9699
|
+
if (await this.attachReaction(state.messageId, state.chatId, desired) === false) {
|
|
9700
|
+
state.failedTransition = { from: void 0, to: desired.name };
|
|
9701
|
+
if (state.revision !== revision)
|
|
9702
|
+
continue;
|
|
9703
|
+
state.desiredStatusTag = void 0;
|
|
9704
|
+
return;
|
|
9705
|
+
}
|
|
9706
|
+
state.failedTransition = void 0;
|
|
9707
|
+
state.statusTag = desired;
|
|
9708
|
+
}
|
|
9709
|
+
}
|
|
9710
|
+
async finishReactionState(state) {
|
|
9711
|
+
let statusCleared = true;
|
|
9712
|
+
if (state.statusTag) {
|
|
9713
|
+
statusCleared = await this.recallReaction(state.messageId, state.chatId, state.statusTag) !== false;
|
|
9714
|
+
if (statusCleared)
|
|
9715
|
+
state.statusTag = void 0;
|
|
9716
|
+
}
|
|
9717
|
+
const eyeCleared = !state.eyeAttached || await this.recallReaction(state.messageId, state.chatId, EYE_TAG) !== false;
|
|
9718
|
+
if (eyeCleared)
|
|
9719
|
+
state.eyeAttached = false;
|
|
9720
|
+
let terminalAttached = true;
|
|
9721
|
+
if (state.terminalTag && statusCleared && eyeCleared) {
|
|
9722
|
+
terminalAttached = await this.attachReaction(state.messageId, state.chatId, state.terminalTag) !== false;
|
|
9723
|
+
}
|
|
9724
|
+
if (!statusCleared || !eyeCleared || !terminalAttached) {
|
|
9725
|
+
state.finishAttempts = (state.finishAttempts ?? 0) + 1;
|
|
9726
|
+
if (state.finishAttempts >= EMOTION_FINISH_MAX_ATTEMPTS) {
|
|
9727
|
+
this.logReactionFailure("reaction cleanup", `abandoned after ${state.finishAttempts} attempts`);
|
|
9728
|
+
this.forgetReactionState(state);
|
|
9729
|
+
return;
|
|
9730
|
+
}
|
|
9731
|
+
state.finishBlocked = true;
|
|
9732
|
+
return;
|
|
9733
|
+
}
|
|
9734
|
+
this.forgetReactionState(state);
|
|
9735
|
+
}
|
|
9428
9736
|
rememberInboundMessageId(msgId) {
|
|
9429
9737
|
this.inboundMessageIds.delete(msgId);
|
|
9430
9738
|
this.inboundMessageIds.add(msgId);
|
|
@@ -9447,6 +9755,19 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9447
9755
|
if (this.activeReactionKeys.has(key))
|
|
9448
9756
|
return;
|
|
9449
9757
|
this.activeReactionKeys.add(key);
|
|
9758
|
+
const state = {
|
|
9759
|
+
key,
|
|
9760
|
+
messageId,
|
|
9761
|
+
chatId,
|
|
9762
|
+
...sessionId ? { sessionId } : {},
|
|
9763
|
+
desiredStatusTag: this.phaseReactionTag("thinking"),
|
|
9764
|
+
finishing: false,
|
|
9765
|
+
drainScheduled: false,
|
|
9766
|
+
eyeAttached: false,
|
|
9767
|
+
revision: 0,
|
|
9768
|
+
tail: Promise.resolve()
|
|
9769
|
+
};
|
|
9770
|
+
this.reactionStates.set(key, state);
|
|
9450
9771
|
if (sessionId) {
|
|
9451
9772
|
let keys = this.sessionReactionKeys.get(sessionId);
|
|
9452
9773
|
if (!keys) {
|
|
@@ -9455,34 +9776,68 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9455
9776
|
}
|
|
9456
9777
|
keys.set(key, { messageId, chatId });
|
|
9457
9778
|
}
|
|
9458
|
-
this.
|
|
9459
|
-
|
|
9460
|
-
|
|
9461
|
-
this.
|
|
9462
|
-
|
|
9779
|
+
this.enqueueReaction(state, async () => {
|
|
9780
|
+
try {
|
|
9781
|
+
if (await this.attachReaction(messageId, chatId, EYE_TAG) === false) {
|
|
9782
|
+
this.forgetReactionState(state);
|
|
9783
|
+
return;
|
|
9784
|
+
}
|
|
9785
|
+
state.eyeAttached = true;
|
|
9786
|
+
this.scheduleReactionDrain(state);
|
|
9787
|
+
} catch (err) {
|
|
9788
|
+
this.forgetReactionState(state);
|
|
9789
|
+
this.logReactionFailure("reaction attach", err);
|
|
9463
9790
|
}
|
|
9464
|
-
}).catch((err) => {
|
|
9465
|
-
this.activeReactionKeys.delete(key);
|
|
9466
|
-
this.logReactionFailure("reaction attach", err);
|
|
9467
9791
|
});
|
|
9468
9792
|
}
|
|
9469
|
-
|
|
9793
|
+
replaceStatusReaction(chatId, messageId, tag) {
|
|
9794
|
+
if (!messageId)
|
|
9795
|
+
return;
|
|
9796
|
+
const state = this.reactionStates.get(this.reactionKey(messageId, chatId));
|
|
9797
|
+
if (!state || !this.activeReactionKeys.has(state.key))
|
|
9798
|
+
return;
|
|
9799
|
+
state.desiredStatusTag = tag;
|
|
9800
|
+
state.revision++;
|
|
9801
|
+
this.scheduleReactionDrain(state);
|
|
9802
|
+
}
|
|
9803
|
+
phaseReactionTag(phase) {
|
|
9804
|
+
return statusEmotionTag(presentationPhaseLabel(phase, this.displayLanguage));
|
|
9805
|
+
}
|
|
9806
|
+
terminalReactionTag(type) {
|
|
9807
|
+
if (!isChinesePresentationLanguage(this.displayLanguage)) {
|
|
9808
|
+
return type === "completed" ? DONE_TAG : type === "failed" ? FAILED_TAG : STOPPED_TAG;
|
|
9809
|
+
}
|
|
9810
|
+
if (type === "completed") {
|
|
9811
|
+
return { ...DONE_TAG, name: "\u2705 \u5DF2\u5B8C\u6210" };
|
|
9812
|
+
}
|
|
9813
|
+
return statusEmotionTag(type === "failed" ? "\u274C \u5931\u8D25" : "\u23F9\uFE0F \u5DF2\u505C\u6B62");
|
|
9814
|
+
}
|
|
9815
|
+
finishReaction(chatId, messageId, sessionId, terminalTag) {
|
|
9470
9816
|
if (!messageId || !this.isStableTargetId(chatId))
|
|
9471
9817
|
return;
|
|
9472
9818
|
const key = this.reactionKey(messageId, chatId);
|
|
9473
|
-
|
|
9474
|
-
|
|
9475
|
-
|
|
9476
|
-
|
|
9477
|
-
|
|
9478
|
-
|
|
9479
|
-
|
|
9819
|
+
const state = this.reactionStates.get(key);
|
|
9820
|
+
if (!state)
|
|
9821
|
+
return;
|
|
9822
|
+
if (state.finishing) {
|
|
9823
|
+
if (!state.finishBlocked)
|
|
9824
|
+
return;
|
|
9825
|
+
state.finishBlocked = false;
|
|
9826
|
+
if (terminalTag)
|
|
9827
|
+
state.terminalTag = terminalTag;
|
|
9828
|
+
this.scheduleReactionDrain(state);
|
|
9829
|
+
return;
|
|
9480
9830
|
}
|
|
9481
9831
|
if (!this.activeReactionKeys.delete(key))
|
|
9482
9832
|
return;
|
|
9483
|
-
|
|
9484
|
-
|
|
9485
|
-
|
|
9833
|
+
state.finishing = true;
|
|
9834
|
+
state.desiredStatusTag = void 0;
|
|
9835
|
+
state.terminalTag = terminalTag;
|
|
9836
|
+
state.revision++;
|
|
9837
|
+
this.scheduleReactionDrain(state);
|
|
9838
|
+
}
|
|
9839
|
+
stopReaction(chatId, messageId, sessionId) {
|
|
9840
|
+
this.finishReaction(chatId, messageId, sessionId);
|
|
9486
9841
|
}
|
|
9487
9842
|
/** Recall reactions left behind when a session dies without terminal lifecycle events. */
|
|
9488
9843
|
onSessionDied(sessionId) {
|
|
@@ -9511,16 +9866,32 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9511
9866
|
const keys = this.sessionReactionKeys.get(sessionId);
|
|
9512
9867
|
if (keys) {
|
|
9513
9868
|
this.sessionReactionKeys.delete(sessionId);
|
|
9514
|
-
for (const
|
|
9515
|
-
|
|
9516
|
-
void this.recallReaction(messageId, chatId).catch((err) => {
|
|
9517
|
-
this.logReactionFailure("session-death reaction recall", err);
|
|
9518
|
-
});
|
|
9519
|
-
}
|
|
9869
|
+
for (const { messageId, chatId } of keys.values()) {
|
|
9870
|
+
this.finishReaction(chatId, messageId, sessionId);
|
|
9520
9871
|
}
|
|
9521
9872
|
}
|
|
9522
9873
|
super.onSessionDied(sessionId);
|
|
9523
9874
|
}
|
|
9875
|
+
/**
|
|
9876
|
+
* A crashed standalone bridge never settles its in-flight turns, so their
|
|
9877
|
+
* transient tags and ticking status cards would otherwise assert a live
|
|
9878
|
+
* turn forever. Finish the tags without a terminal result and terminalize
|
|
9879
|
+
* the cards as interrupted. Session state stays: crash recovery restores
|
|
9880
|
+
* the sessions on a fresh bridge.
|
|
9881
|
+
*/
|
|
9882
|
+
onBridgeDisconnected() {
|
|
9883
|
+
for (const [sessionId, keys] of this.sessionReactionKeys) {
|
|
9884
|
+
this.sessionReactionKeys.delete(sessionId);
|
|
9885
|
+
for (const { messageId, chatId } of keys.values()) {
|
|
9886
|
+
this.finishReaction(chatId, messageId, sessionId);
|
|
9887
|
+
}
|
|
9888
|
+
}
|
|
9889
|
+
for (const [sessionId, runId] of this.cardRunBySession) {
|
|
9890
|
+
this.cardRunBySession.delete(sessionId);
|
|
9891
|
+
this.interactionPresenter?.terminalizeRun(runId, "cancelled");
|
|
9892
|
+
this.cardRuns.delete(runId);
|
|
9893
|
+
}
|
|
9894
|
+
}
|
|
9524
9895
|
onSessionRetiring(sessionId) {
|
|
9525
9896
|
this.drainBackgroundResponseAggregations(sessionId);
|
|
9526
9897
|
}
|
|
@@ -9539,10 +9910,18 @@ var DingtalkChannel = class _DingtalkChannel extends ChannelBase {
|
|
|
9539
9910
|
}
|
|
9540
9911
|
return;
|
|
9541
9912
|
}
|
|
9913
|
+
const presentationPhase = lifecyclePresentationPhase(event);
|
|
9914
|
+
if (event.runId && presentationPhase) {
|
|
9915
|
+
this.interactionPresenter?.updateStatusCardPhase(event.runId, presentationPhase);
|
|
9916
|
+
}
|
|
9917
|
+
if (presentationPhase) {
|
|
9918
|
+
this.replaceStatusReaction(event.chatId, event.messageId, this.phaseReactionTag(presentationPhase));
|
|
9919
|
+
return;
|
|
9920
|
+
}
|
|
9542
9921
|
if (isTerminalTaskLifecycleType(event.type)) {
|
|
9543
9922
|
if (event.messageId)
|
|
9544
9923
|
this.mentionTargets.delete(event.messageId);
|
|
9545
|
-
this.
|
|
9924
|
+
this.finishReaction(event.chatId, event.messageId, event.sessionId, this.terminalReactionTag(event.type));
|
|
9546
9925
|
if (event.runId) {
|
|
9547
9926
|
this.deleteFileProjectorsForRun(event.runId);
|
|
9548
9927
|
if (event.type === "failed") {
|