@qwen-code/qwen-code 0.23.0 → 0.23.1-preview.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/new-app/SKILL.md +1 -1
- package/bundled/qc-helper/docs/configuration/auth.md +84 -12
- package/bundled/qc-helper/docs/configuration/settings.md +76 -74
- package/bundled/qc-helper/docs/features/arena.md +15 -20
- package/bundled/qc-helper/docs/features/channels/overview.md +7 -2
- package/bundled/qc-helper/docs/features/code-review.md +22 -19
- package/bundled/qc-helper/docs/features/commands.md +51 -10
- package/bundled/qc-helper/docs/features/followup-suggestions.md +1 -1
- package/bundled/qc-helper/docs/features/goals.md +8 -0
- package/bundled/qc-helper/docs/features/headless.md +2 -2
- package/bundled/qc-helper/docs/features/hooks.md +19 -19
- package/bundled/qc-helper/docs/features/output-styles.md +35 -2
- package/bundled/qc-helper/docs/qwen-serve.md +67 -52
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +3 -1
- package/bundled/qc-helper/docs/support/troubleshooting.md +3 -3
- package/bundled/review/SKILL.md +45 -41
- package/bundled/review/references/aone.md +1 -1
- package/bundled/review/references/posting.md +1 -1
- package/bundled/workflow-creator/SKILL.md +48 -0
- package/bundled/zvec-grep-install/SKILL.md +57 -0
- package/chunks/MaxSizedBox-5ARLO5PR.js +116 -0
- package/chunks/{StandaloneSessionPicker-QUMO4LLQ.js → StandaloneSessionPicker-T6B322CB.js} +87 -82
- package/chunks/{acp-startup-profiler-M4X5F3VK.js → acp-startup-profiler-6ULXXQMS.js} +2 -2
- package/chunks/{acpAgent-2GTFCIEP.js → acpAgent-WTDEY5KD.js} +1041 -364
- package/chunks/{agent-XKF5SZWU.js → agent-NXPUXEVZ.js} +46 -43
- package/chunks/agent-headless-QQZTWOKO.js +88 -0
- package/chunks/{anthropicContentGenerator-L76MR5OR.js → anthropicContentGenerator-6XDHXIII.js} +16 -9
- package/chunks/{artifact-tool-MYCL2QCS.js → artifact-tool-DFVVJXL2.js} +3 -3
- package/chunks/askUserQuestion-GF7VQ44M.js +14 -0
- package/chunks/bridge-OHY5OGOZ.js +123 -0
- package/chunks/{ca-BNU7YNDE.js → ca-KC2AISNS.js} +1 -0
- package/chunks/{channel-management-service-4MTCEGJB.js → channel-management-service-ZDDG3G5S.js} +4 -4
- package/chunks/channel-settings-store-7BJAS2SU.js +126 -0
- package/chunks/{channel-worker-group-47F4ISUZ.js → channel-worker-group-2ISMRENV.js} +6 -6
- package/chunks/{channel-worker-manager-I5Y44GYR.js → channel-worker-manager-VSRPVPRH.js} +6 -6
- package/chunks/{channel-worker-supervisor-6VCLUXFE.js → channel-worker-supervisor-SRJBK72Z.js} +4 -4
- package/chunks/{chunk-5RTTI4GE.js → chunk-2RYWGYB3.js} +4 -3
- package/chunks/{chunk-FUO5V5KI.js → chunk-2UWQX4FP.js} +2 -2
- package/chunks/{chunk-L26ONV2Y.js → chunk-2WGJG2KW.js} +9 -8
- package/chunks/{chunk-JHN7UIDW.js → chunk-2XRE4KE4.js} +1 -1
- package/chunks/chunk-32CM56LO.js +20 -0
- package/chunks/{chunk-SI7WDR3U.js → chunk-32YDNYXP.js} +129 -14
- package/chunks/{chunk-ZHO2CW6D.js → chunk-3CZ2BQV6.js} +1 -1
- package/chunks/{chunk-FD5SJOWT.js → chunk-3K456UJF.js} +9 -4
- package/chunks/{chunk-5M6IDOMF.js → chunk-3K65MUKD.js} +105 -0
- package/chunks/chunk-3UMWOKJC.js +78 -0
- package/chunks/{chunk-UM2FFKXN.js → chunk-43JNQAHO.js} +3 -3
- package/chunks/{chunk-KM3XVTMO.js → chunk-43NOB5NM.js} +112 -12
- package/chunks/{chunk-G5PBOQWI.js → chunk-47BZVBTE.js} +3 -3
- package/chunks/{chunk-32LU3APX.js → chunk-4F2QRVW6.js} +1 -1
- package/chunks/{chunk-KMU3ZHH4.js → chunk-4HC4DYKN.js} +2 -2
- package/chunks/{chunk-22UH7VTP.js → chunk-4HOEU2OR.js} +1 -1
- package/chunks/{chunk-NXKOVOM5.js → chunk-4IQKBLTQ.js} +15 -9
- package/chunks/{chunk-M4KFODIP.js → chunk-4JAGXZR3.js} +1 -1
- package/chunks/{chunk-PDAKFU7M.js → chunk-4LIPOIXS.js} +1 -1
- package/chunks/{chunk-LEPCWS5A.js → chunk-4MCY33Y2.js} +3 -3
- package/chunks/{chunk-U6D2PPMN.js → chunk-4VUVBN3Y.js} +1 -1
- package/chunks/{chunk-37JFWFCD.js → chunk-4VZCORNT.js} +1 -1
- package/chunks/{daemon-RKDGBFLK.js → chunk-537SQ2AI.js} +2216 -1721
- package/chunks/{chunk-VNAYZAFX.js → chunk-54TF2ZIQ.js} +4 -4
- package/chunks/{chunk-OKTNXDVO.js → chunk-565U2ANU.js} +1 -1
- package/chunks/chunk-5ETULJLP.js +74 -0
- package/chunks/{chunk-ADYN7P2Y.js → chunk-5JLQWQK6.js} +8 -6
- package/chunks/{chunk-BFY33IB4.js → chunk-5MTARK4Y.js} +7 -7
- package/chunks/{chunk-BJXCYUGM.js → chunk-5YY5MZT6.js} +1 -1
- package/chunks/{chunk-4PSDSCW3.js → chunk-64MQTIX7.js} +3 -3
- package/chunks/{chunk-54C6PIGT.js → chunk-6UIACMGH.js} +3 -3
- package/chunks/{chunk-ALUYNJPM.js → chunk-7BZS4ZDV.js} +1362 -1140
- package/chunks/{chunk-LB3WQQJK.js → chunk-7OCIQNKX.js} +2 -2
- package/chunks/{chunk-QKDNS6FU.js → chunk-7VEYUF3N.js} +13 -2
- package/chunks/{chunk-AZJLY2XZ.js → chunk-AHBLRVD5.js} +5 -5
- package/chunks/{chunk-VWTSRH6C.js → chunk-AQ5NAGWI.js} +89 -17
- package/chunks/{chunk-MOF6VZN2.js → chunk-AXPOOQAW.js} +2 -2
- package/chunks/{chunk-CVX63TFJ.js → chunk-B44JBZBB.js} +3 -3
- package/chunks/{chunk-AI35S34R.js → chunk-B54PFQS5.js} +3 -3
- package/chunks/{chunk-373DQUVA.js → chunk-BF3RUIVP.js} +5 -4
- package/chunks/{chunk-RJUVTJEZ.js → chunk-BKNY7PDI.js} +1 -1
- package/chunks/{chunk-UKYXYWI2.js → chunk-BUQN5LTI.js} +2 -2
- package/chunks/{chunk-O5CD7T4T.js → chunk-BW4333PP.js} +0 -95
- package/chunks/{chunk-UPFRILIL.js → chunk-CWNC7M73.js} +2 -2
- package/chunks/{chunk-3L724BJ5.js → chunk-CZACBHAW.js} +6 -6
- package/chunks/{chunk-EBDGRBZX.js → chunk-D4CU6DKR.js} +6 -6
- package/chunks/{chunk-G7HBEEX7.js → chunk-D6PIMKY3.js} +9 -9
- package/chunks/{chunk-ENYUKMFK.js → chunk-DJXSOEFB.js} +1 -1
- package/chunks/{chunk-C2VWOXHS.js → chunk-DNPHKA72.js} +8 -8
- package/chunks/{chunk-UUASLXHW.js → chunk-E4L5BM2B.js} +5 -5
- package/chunks/{chunk-HT5S5TRQ.js → chunk-EDIDYZBT.js} +4 -11
- package/chunks/{chunk-5H5S4UY5.js → chunk-EFT7OMDN.js} +1 -1
- package/chunks/{chunk-GB4UKWY5.js → chunk-EJNYBDYC.js} +2 -2
- package/chunks/{chunk-NQ4L2CMD.js → chunk-ER273QE6.js} +53 -9
- package/chunks/{chunk-RKW36UWC.js → chunk-EWNKP4V4.js} +1 -1
- package/chunks/{chunk-UJ4DUYIH.js → chunk-F53KKZUD.js} +2 -2
- package/chunks/{chunk-EFTPIZIC.js → chunk-FDOGGKAA.js} +21 -0
- package/chunks/{chunk-AQ37AY7B.js → chunk-FKJM6JKY.js} +5 -0
- package/chunks/{chunk-KEVYJSI4.js → chunk-G34YLYCS.js} +13 -13
- package/chunks/{chunk-P6UIF2OW.js → chunk-GCFZ2LAX.js} +195 -10
- package/chunks/{chunk-VGHZT6JR.js → chunk-GELRJXE2.js} +1 -1
- package/chunks/{chunk-ZDFQGHZH.js → chunk-GMNLYQOS.js} +1 -1
- package/chunks/{chunk-KOGW3YWJ.js → chunk-GVVCLL2P.js} +12 -12
- package/chunks/{chunk-OSSTATJF.js → chunk-GXZHYPHZ.js} +428 -30
- package/chunks/{chunk-IPATA3T2.js → chunk-GZWW2QWR.js} +2 -2
- package/chunks/{chunk-C4TIXFDZ.js → chunk-H3UDNQLO.js} +6 -4
- package/chunks/chunk-HD7O6WLV.js +18 -0
- package/chunks/{chunk-4UANMABT.js → chunk-HFTB354P.js} +259 -49
- package/chunks/{chunk-LOBDDFYK.js → chunk-HJ34U5J4.js} +5 -5
- package/chunks/{chunk-M4LBBSVP.js → chunk-HY3DXYZK.js} +2 -2
- package/chunks/{chunk-4F7GQGXB.js → chunk-I72PHOKL.js} +1451 -415
- package/chunks/{chunk-YPWZTR7F.js → chunk-IFD3BTEA.js} +3 -3
- package/chunks/{chunk-EWRW2WQC.js → chunk-IKLFS6SC.js} +5 -5
- package/chunks/{chunk-VPSIC437.js → chunk-IQN2CCIE.js} +66 -6
- package/chunks/{chunk-F7NF2IOE.js → chunk-IXSGOSEG.js} +7 -7
- package/chunks/{chunk-ODZF64DM.js → chunk-IZ2U57NY.js} +1 -1
- package/chunks/{chunk-4BGDFKQE.js → chunk-J3O5I5ZD.js} +24 -7
- package/chunks/{chunk-DYTW3QVG.js → chunk-J6MB5ZHZ.js} +1 -1
- package/chunks/{chunk-HJBHMANB.js → chunk-JBTZUFR4.js} +11 -8
- package/chunks/{chunk-SRF4KTAG.js → chunk-JLWFGYXU.js} +4 -4
- package/chunks/{chunk-SX2QIMJV.js → chunk-JOPC3FND.js} +5 -5
- package/chunks/chunk-JPEAQJNS.js +2142 -0
- package/chunks/{chunk-ZTPGUFQV.js → chunk-JRYL3T2O.js} +24 -5
- package/chunks/{chunk-GXUTFQXK.js → chunk-KE3Q4JMY.js} +4 -4
- package/chunks/{chunk-LKODFJRD.js → chunk-KFFCDLKV.js} +1 -1
- package/chunks/{chunk-4M24B5J5.js → chunk-KJJPJYHI.js} +79 -30
- package/chunks/chunk-KK2GZGBK.js +21080 -0
- package/chunks/{chunk-64QH2UC6.js → chunk-KPXRFTT7.js} +12 -1
- package/chunks/{chunk-JZWOCUZ3.js → chunk-L4R7BCVV.js} +1 -1
- package/chunks/{chunk-IG4W5SJR.js → chunk-LDS57224.js} +3 -3
- package/chunks/{chunk-UAKRDON5.js → chunk-LK7S2D6V.js} +4 -4
- package/chunks/{chunk-4HVH57J3.js → chunk-LMJQSPWB.js} +21 -6
- package/chunks/{chunk-ANVG3BVV.js → chunk-LNYV4GXX.js} +13 -3
- package/chunks/{chunk-RM4WT2XB.js → chunk-LPBQODMR.js} +4 -4
- package/chunks/{chunk-XEAAO654.js → chunk-M3JGHRMQ.js} +1 -1
- package/chunks/{chunk-AMDSOFFV.js → chunk-MATEIJZF.js} +1 -0
- package/chunks/{chunk-LHBNR6EU.js → chunk-MNEYUNOE.js} +2 -2
- package/chunks/{chunk-I4NRYS6A.js → chunk-MUZCSTOO.js} +11 -11
- package/chunks/{chunk-I5N4EAS6.js → chunk-MWHY26G3.js} +1 -1
- package/chunks/{chunk-7XL4WRXM.js → chunk-N6VQ37ZZ.js} +2 -2
- package/chunks/{chunk-AHYTURFB.js → chunk-N7EYO2E7.js} +1 -1
- package/chunks/{chunk-LU77UT4D.js → chunk-N7VURC4O.js} +24 -26
- package/chunks/{chunk-DSX7KQPM.js → chunk-NAKALAL4.js} +227 -29
- package/chunks/{chunk-QQD2GART.js → chunk-NGX4NUNP.js} +3 -3
- package/chunks/{chunk-2M3EWQNG.js → chunk-NUQFUXOG.js} +17 -1
- package/chunks/{chunk-E4JNFXNI.js → chunk-NXWYCSPL.js} +3 -3
- package/chunks/{chunk-6A2D4QSO.js → chunk-O2GG7H4C.js} +4 -4
- package/chunks/{chunk-ZKFTS3OV.js → chunk-O45WBTNS.js} +6 -6
- package/chunks/{chunk-KGV55H53.js → chunk-OECNP26L.js} +1 -1
- package/chunks/{chunk-S6H3ELPG.js → chunk-P4RUUG64.js} +1 -1
- package/chunks/{chunk-GH2S4GD5.js → chunk-P5LDR7FI.js} +21 -68
- package/chunks/{chunk-RN3YGDCA.js → chunk-P6LATTDG.js} +4 -4
- package/chunks/{chunk-WP4AX3XD.js → chunk-PTFFWTTO.js} +3 -3
- package/chunks/{chunk-DTVQSSNM.js → chunk-PZUOHCWI.js} +3 -3
- package/chunks/{chunk-VYIUNFEA.js → chunk-PZV2FASB.js} +3 -3
- package/chunks/{chunk-XLXAZLDR.js → chunk-Q2SAQTEJ.js} +1 -1
- package/chunks/{chunk-47RYEQW5.js → chunk-QMFOYPGV.js} +2 -2
- package/chunks/{chunk-SULZPKTA.js → chunk-QSC5YOEC.js} +3 -3
- package/chunks/{chunk-F33GFWPR.js → chunk-QWZOOIR3.js} +58 -18
- package/chunks/{chunk-H43PSPYS.js → chunk-R355CUNQ.js} +4 -4
- package/chunks/{chunk-DQCKVAF5.js → chunk-RDKXZ2LS.js} +3 -3
- package/chunks/{chunk-7JMGTOH7.js → chunk-RPBMP6BN.js} +21 -1
- package/chunks/{chunk-5Q5RC2WE.js → chunk-RVNS7NWN.js} +2 -2
- package/chunks/{chunk-7RB56BRJ.js → chunk-SAZS4IWW.js} +6 -4
- package/chunks/{chunk-5EIOJGCR.js → chunk-SFMCYMVF.js} +4 -4
- package/chunks/{chunk-TMKTOTMQ.js → chunk-SN5FV4FY.js} +5 -5
- package/chunks/{chunk-QJGYU5PG.js → chunk-TDP7UULF.js} +1 -1
- package/chunks/{chunk-EIJT2PQ6.js → chunk-TIGXX4PA.js} +2 -2
- package/chunks/{chunk-PCRBLMIN.js → chunk-TMWB67LS.js} +21 -3
- package/chunks/{chunk-JUARRUMA.js → chunk-UEZOXZNI.js} +1358 -646
- package/chunks/{chunk-KFN2IZYR.js → chunk-UKADFFL2.js} +3 -3
- package/chunks/{chunk-TJYRTS4S.js → chunk-UKKYOIVT.js} +2 -2
- package/chunks/{chunk-EVFDRBUM.js → chunk-URSCX7S7.js} +12 -7
- package/chunks/{chunk-U4DJ5XB3.js → chunk-VDXYYVCD.js} +269 -70
- package/chunks/{chunk-4LIFGNI4.js → chunk-VEFRT7NX.js} +1 -1
- package/chunks/chunk-VFFQAOPR.js +18 -0
- package/chunks/{chunk-3AKCBZVW.js → chunk-VU7O7CGQ.js} +3 -3
- package/chunks/{chunk-RAFQIHN2.js → chunk-VUSSAGKI.js} +76 -5
- package/chunks/{chunk-TQHPVKO6.js → chunk-VY6UVU7G.js} +6 -6
- package/chunks/{chunk-S2T7H5MI.js → chunk-W4LL5RZO.js} +1 -1
- package/chunks/{chunk-ZGCKTAL5.js → chunk-WEXA2DNG.js} +2 -0
- package/chunks/{chunk-NVVJTUSL.js → chunk-WR3SH3EY.js} +136 -85
- package/chunks/{chunk-JR42V4UY.js → chunk-WTW36TJ3.js} +1 -1
- package/chunks/{chunk-TSZSGQ3N.js → chunk-WXC6OAWD.js} +1 -1
- package/chunks/{chunk-ZVP4PWBU.js → chunk-X35VIWWJ.js} +1 -1
- package/chunks/{chunk-KHP66DFN.js → chunk-XFFRI3WM.js} +1 -1
- package/chunks/{chunk-EIY7SUPZ.js → chunk-XHGGYCTA.js} +1 -1
- package/chunks/{chunk-BA4WJC4L.js → chunk-XOVVCGZX.js} +1 -1
- package/chunks/{chunk-VBWD6C27.js → chunk-XUSOYE2I.js} +1 -1
- package/chunks/{chunk-NUHOLAQ6.js → chunk-XWJFDJZK.js} +1 -1
- package/chunks/{chunk-65HWLGA7.js → chunk-XY3USGFE.js} +3 -3
- package/chunks/{chunk-STCVJXQB.js → chunk-Y3ZKI4RQ.js} +56 -26
- package/chunks/{chunk-QAK5475D.js → chunk-Y53DG2HA.js} +1 -1
- package/chunks/{chunk-3JQZVCBI.js → chunk-YCDL2SAS.js} +2 -2
- package/chunks/{chunk-NSUKQ4DN.js → chunk-YHDGABDC.js} +3 -3
- package/chunks/{chunk-FRICLXCZ.js → chunk-Z6WZPXQH.js} +3 -3
- package/chunks/{chunk-EAHOJF6V.js → chunk-ZAFYHRVY.js} +12 -0
- package/chunks/{chunk-MP6YZ4RK.js → chunk-ZAZ3NFL6.js} +852 -309
- package/chunks/{chunk-7TBU7PU2.js → chunk-ZSTCM3MX.js} +1 -1
- package/chunks/{chunk-NRL5CUZT.js → chunk-ZTAVGFKA.js} +1 -1
- package/chunks/config-utils-QXDOTXEQ.js +119 -0
- package/chunks/contextCommand-RN4KARWC.js +112 -0
- package/chunks/{core-runtime-B4UKKIAQ.js → core-runtime-NAZCOKHB.js} +63 -58
- package/chunks/{create-sub-session-NJ24B4US.js → create-sub-session-BCSM4WKB.js} +61 -56
- package/chunks/{create-sub-session-LUPWEUHR.js → create-sub-session-BQ3SE4TX.js} +3 -3
- package/chunks/{cron-create-CRSPET3H.js → cron-create-D6HQ7I7I.js} +4 -4
- package/chunks/{cron-delete-DB77SZTU.js → cron-delete-KK3D2SQV.js} +4 -4
- package/chunks/{cron-list-U2JNYWV6.js → cron-list-VBF3IZMF.js} +4 -4
- package/chunks/daemon-LCUELM6E.js +191 -0
- package/chunks/{daemon-git-worktree-guard-O2HPOBAB.js → daemon-git-worktree-guard-3K5CAU36.js} +62 -57
- package/chunks/daemon-status-provider-4X3ZZQTZ.js +122 -0
- package/chunks/daemon-trust-policy-R45CFUJA.js +118 -0
- package/chunks/{daemon-trust-policy-monitor-JL7F4Y4Q.js → daemon-trust-policy-monitor-DSSFCO3K.js} +69 -64
- package/chunks/{de-T4BLOKEC.js → de-UU2YTO37.js} +1 -0
- package/chunks/deferred-core-runtime-UO2M6WYI.js +120 -0
- package/chunks/{display-image-73C7XNRK.js → display-image-EVVTBVYE.js} +6 -6
- package/chunks/{dist-EDHQIBYD.js → dist-3T5MDUHP.js} +62 -20
- package/chunks/{dist-ZCJLKQSP.js → dist-AFH3BMZZ.js} +18 -10
- package/chunks/{dist-LXFYIJNG.js → dist-MK5PPBRF.js} +40 -9
- package/chunks/{dist-GT64AAUR.js → dist-PH5RSTEA.js} +56 -20
- package/chunks/{dist-62OZ7QXB.js → dist-QUU7TVE3.js} +35 -12
- package/chunks/{dist-JVXT4VUJ.js → dist-R5Y34V6T.js} +11 -2
- package/chunks/{dist-L6URO6CK.js → dist-SB2XRXZA.js} +5 -1
- package/chunks/{dist-QAF5DO3Y.js → dist-SIHF5MU2.js} +326 -131
- package/chunks/{dist-PDGNRVPY.js → dist-UVHW2U56.js} +20 -1
- package/chunks/earlyInputCapture-BXP7V2P3.js +22 -0
- package/chunks/{edit-SUGXY63Y.js → edit-VNBCTRWP.js} +48 -44
- package/chunks/{en-2RATMNX7.js → en-JMR535HP.js} +3 -1
- package/chunks/{enter-worktree-B6USKSIK.js → enter-worktree-CEVK7MQ2.js} +7 -7
- package/chunks/{enterPlanMode-MDX4RVVL.js → enterPlanMode-4KMZMUIA.js} +48 -45
- package/chunks/environment-S2HYQDON.js +135 -0
- package/chunks/errors-DAAN5TL7.js +119 -0
- package/chunks/{exit-worktree-DLQ73SJH.js → exit-worktree-D3YE6MUN.js} +7 -7
- package/chunks/exitPlanMode-HR36HG3D.js +86 -0
- package/chunks/{fast-path-Y73R42LV.js → fast-path-4IWSW3UV.js} +3 -3
- package/chunks/{fast-path-settings-MFUR3IWK.js → fast-path-settings-ISEJPRYE.js} +6 -4
- package/chunks/{fr-BGHGYX6A.js → fr-HKNWVXRJ.js} +1 -0
- package/chunks/{glob-DMGH7EZN.js → glob-IZYB2XH2.js} +46 -43
- package/chunks/{goal-tools-3RF3PXCL.js → goal-tools-VGUPKQDJ.js} +46 -43
- package/chunks/{grep-AJVLCVXC.js → grep-OUVLNXG7.js} +9 -8
- package/chunks/handleAutoUpdate-D56FMDTW.js +115 -0
- package/chunks/i18n-BKE5WO6T.js +130 -0
- package/chunks/{image-gen-VOIDOHOB.js → image-gen-SHVQ3XID.js} +8 -8
- package/chunks/initializer-MS4SGEHF.js +119 -0
- package/chunks/installationInfo-542MGC4S.js +113 -0
- package/chunks/{ja-G3FTD5XE.js → ja-GJS5RZGU.js} +1 -0
- package/chunks/{keychain-token-storage-REZVMJA6.js → keychain-token-storage-NQ5XWIPX.js} +2 -2
- package/chunks/list-H6XTKUWL.js +122 -0
- package/chunks/{list-agents-SBMONIUK.js → list-agents-ULYBGJXC.js} +6 -6
- package/chunks/{llm-K26SUDVK.js → llm-3NUC4EJY.js} +132 -113
- package/chunks/{llm-content-generator-TT6EAUD4.js → llm-content-generator-R4NL3OQN.js} +40 -13
- package/chunks/loadedSettingsAdapter-3XLKYDVT.js +116 -0
- package/chunks/{loggingContentGenerator-EYQBA4M4.js → loggingContentGenerator-ZYSWVNEO.js} +55 -52
- package/chunks/{loop-wakeup-QA6SHCZT.js → loop-wakeup-B27BEYRL.js} +5 -5
- package/chunks/{lowlight-J2OZNPCA.js → lowlight-BTE423KL.js} +3 -6
- package/chunks/{ls-HEJNCEYO.js → ls-3IIMMVKF.js} +5 -4
- package/chunks/{lsp-WOQKNZP6.js → lsp-VJAT7XKS.js} +2 -2
- package/chunks/{managed-npm-update-HIJTODQT.js → managed-npm-update-L2I53ZAI.js} +62 -57
- package/chunks/mcp-4PIXQASW.js +116 -0
- package/chunks/{monitor-DKNZQAB2.js → monitor-O2YQTOZZ.js} +50 -46
- package/chunks/{node-UETAYMMO.js → node-ISQAFKIS.js} +2 -2
- package/chunks/nonInteractiveCli-LV7CDBA2.js +198 -0
- package/chunks/{notebook-edit-MGHTRL2D.js → notebook-edit-4RE2ALH4.js} +48 -44
- package/chunks/{openaiContentGenerator-ZJIEQ3ZJ.js → openaiContentGenerator-7ND7K5CP.js} +30 -25
- package/chunks/pidfile-UFTLQ7NP.js +117 -0
- package/chunks/{processUtils-UY3SAJJZ.js → processUtils-3XBB4FYV.js} +2 -2
- package/chunks/prompt-terminal-ledger-2QASOGMM.js +111 -0
- package/chunks/{pt-D73IFYT7.js → pt-FXMYXEUV.js} +1 -0
- package/chunks/{qwenContentGenerator-VI4KATRY.js → qwenContentGenerator-AELTUTH6.js} +52 -49
- package/chunks/{qwenOAuth2-7AOCKSOQ.js → qwenOAuth2-BS5D2LYV.js} +7 -7
- package/chunks/{read-file-P7F4P7LV.js → read-file-PDWHZPHX.js} +13 -11
- package/chunks/{read-mcp-resource-GLAGB6R7.js → read-mcp-resource-YXJZ75UB.js} +2 -2
- package/chunks/{record-artifact-SWVR7NSU.js → record-artifact-WJDOV6XU.js} +4 -4
- package/chunks/{report-findings-AL5YW3KI.js → report-findings-Q4UACKWR.js} +5 -5
- package/chunks/{request-shutdown-5YK4IZ54.js → request-shutdown-2YZ3E3GH.js} +8 -8
- package/chunks/resumeHistoryUtils-QRXZEEBA.js +124 -0
- package/chunks/ripGrep-KSOOLE6H.js +39 -0
- package/chunks/{ru-QMISLKRH.js → ru-RMHURE5U.js} +1 -0
- package/chunks/{run-qwen-serve-OGTEEUR2.js → run-qwen-serve-RTAREPT6.js} +84 -70
- package/chunks/runtime-ESFSCJRZ.js +154 -0
- package/chunks/scheduled-tasks-6ZHRNBH6.js +133 -0
- package/chunks/{scheduler-73YXGUGW.js → scheduler-DQI6KV7T.js} +63 -58
- package/chunks/{sdk-exporters-http-3JO5TJNU.js → sdk-exporters-http-7R2ARBPV.js} +2 -2
- package/chunks/{sdk-impl-HZAUUTHJ.js → sdk-impl-YOLO7LV4.js} +4 -4
- package/chunks/{send-message-JC7NJTY6.js → send-message-PQCVSVMN.js} +24 -24
- package/chunks/serve-FY7ZEW52.js +124 -0
- package/chunks/{server-AOYZVVOM.js → server-KNDY6K5F.js} +1594 -273
- package/chunks/{session-UAWFNFGI.js → session-MCEPXAZP.js} +113 -105
- package/chunks/session-attachments-root-OLNAE6GF.js +109 -0
- package/chunks/{session-pr-refresh-CT2INROL.js → session-pr-refresh-HKJHQQQK.js} +67 -62
- package/chunks/{settings-BHRGDASJ.js → settings-VXO4WBMK.js} +68 -63
- package/chunks/shell-U263OTES.js +96 -0
- package/chunks/{skill-ZGBKNCHQ.js → skill-SDODGBKL.js} +19 -17
- package/chunks/skill-settings-YEIA22QJ.js +124 -0
- package/chunks/spawnChannel-4WJZVFPP.js +117 -0
- package/chunks/standalone-update-ZWVQUO64.js +124 -0
- package/chunks/{start-opentui-ui-FZ4USOU7.js → start-opentui-ui-BFYCJQRZ.js} +1199 -190
- package/chunks/{startInteractiveUI-E2WQJUOA.js → startInteractiveUI-JYAFCMHL.js} +2977 -2319
- package/chunks/{syntheticOutput-HJNZSEHN.js → syntheticOutput-AUAJBNXR.js} +3 -3
- package/chunks/{task-create-6RSD54S5.js → task-create-LD5ISM3E.js} +12 -12
- package/chunks/{task-list-IQSACPOM.js → task-list-YISJ4RJA.js} +5 -5
- package/chunks/{task-stop-HE2LRQNW.js → task-stop-65ZOVATJ.js} +2 -2
- package/chunks/{task-update-XAJ2NYOA.js → task-update-AAN4ZVEY.js} +15 -15
- package/chunks/{team-create-SOKMYSQU.js → team-create-KU7MABNO.js} +47 -44
- package/chunks/{team-delete-NGNNKGMG.js → team-delete-XFRRTJTT.js} +5 -5
- package/chunks/{team-plan-approval-U7ZWXYAY.js → team-plan-approval-DPB377A3.js} +46 -43
- package/chunks/terminal-image-renderer-WGWRENOF.js +124 -0
- package/chunks/theme-manager-GBUFULSO.js +108 -0
- package/chunks/{todoWrite-5UTVUXHA.js → todoWrite-G7NT4IFP.js} +5 -5
- package/chunks/{tool-search-IAI2RVWT.js → tool-search-6YUXHBPT.js} +19 -17
- package/chunks/total-session-admission-54R2JQ5L.js +118 -0
- package/chunks/trustedFolders-KAJIDJTH.js +128 -0
- package/chunks/{update-relaunch-5RWKZAL3.js → update-relaunch-XM4IWBFD.js} +5 -5
- package/chunks/updateCheck-W6UZFURI.js +124 -0
- package/chunks/useAutoAcceptIndicator-LAWYHY3U.js +126 -0
- package/chunks/{validateNonInterActiveAuth-QPFEKATS.js → validateNonInterActiveAuth-7WCKHRN2.js} +109 -101
- package/chunks/{version-JKNG7YDH.js → version-3ZU43RJ6.js} +1 -1
- package/chunks/{web-fetch-X3AHIIHW.js → web-fetch-QHI2SQL4.js} +16 -14
- package/chunks/{web-search-K2FMOGS5.js → web-search-3KZZKWNY.js} +9 -8
- package/chunks/{workflow-TOLPAK5G.js → workflow-HRW7Y2X4.js} +330 -1667
- package/chunks/workspace-providers-status-KTGCWCPC.js +120 -0
- package/chunks/{workspace-registration-store-KQWVVW4Y.js → workspace-registration-store-LHLPPWNE.js} +1 -1
- package/chunks/workspace-registry-X34MLN52.js +127 -0
- package/chunks/workspace-runtime-coordinator-U4PW4P7K.js +128 -0
- package/chunks/workspace-service-KD7BCGYL.js +132 -0
- package/chunks/workspace-skills-status-YJGO6Y3T.js +119 -0
- package/chunks/{workspace-trust-reconciler-IBDFQBQS.js → workspace-trust-reconciler-EUYHISCH.js} +74 -69
- package/chunks/write-file-EBSB34NJ.js +91 -0
- package/chunks/{zh-25DF7OGK.js → zh-DVFYHRK5.js} +3 -1
- package/chunks/{zh-TW-5EDMZVGK.js → zh-TW-W2GNP2IU.js} +3 -1
- package/chunks/{zoom-image-IFXSN74N.js → zoom-image-UJ5VKWKP.js} +13 -11
- package/cli.js +13 -13
- package/export-transcript-document.js +617 -0
- package/locales/ca.js +1 -0
- package/locales/de.js +1 -0
- package/locales/en.js +5 -2
- package/locales/fr.js +1 -0
- package/locales/ja.js +1 -0
- package/locales/pt.js +1 -0
- package/locales/ru.js +1 -0
- package/locales/zh-TW.js +5 -2
- package/locales/zh.js +5 -2
- package/package.json +5 -4
- package/web-shell/assets/{abnfDiagram-VCTEODGH-Cxf7xE_Z.js → abnfDiagram-VCTEODGH-Dur--luQ.js} +1 -1
- package/web-shell/assets/{arc-ESi1eNkE.js → arc-tYLobxFi.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-D9l7-bDo.js → architectureDiagram-5GKGNRK7-IG6aXD03.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-Bc8DEasw.js → blockDiagram-NRAW4CY4-C6eBSkfA.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-Dimb2Hmh.js → c4Diagram-UCG6FXSJ-BrX3HJqB.js} +1 -1
- package/web-shell/assets/channel-uEkvKckd.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-jVDmOpAQ.js → chunk-2Q5K7J3B-B3fcJ8ee.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-DbG_SwdB.js → chunk-5VM5RSS4-CeC90yKM.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-QEc4cY1v.js → chunk-F27PBJKO-CW44RVki.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-iJ36lQ3X.js → chunk-G27WJ6UU-D1PAMukD.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-DuArnVtF.js → chunk-JWPE2WC7-Dt3Y2Fvx.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-DxOf1zwL.js → chunk-LCL6LL3I-CZHw2lLI.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-lVLu9Ild.js → chunk-POPQ4Y6H-ysNAdTGx.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-C6XYlIer.js → chunk-SVP7TREG-BdNXW6YQ.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-CiG2j2Ji.js → chunk-XXDRQBXY-DgqQ9UA8.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DuPsnhWS.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DuPsnhWS.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-DGVHMMVm.js → cose-bilkent-JH36ORCC-BILImXzJ.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-D6cgpCnH.js → cynefin-OW5HDTMX-DR88Pund.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BKv4Z-UX.js → cynefinDiagram-5FMLGOSQ-BYFbfkA6.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-B4ABMIG-.js → dagre-3AP2YEHR-rfpyc6sX.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-DgCkp_Lm.js → diagram-S7CK7UJ4-BJxLmEwH.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-FG0FNokz.js → diagram-UQ7AKVKN-H34xm7k3.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-JgkP9qg-.js → diagram-VSXAHHWV-HYxhwNLx.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-ADh2x83l.js → diagram-VX7I27RA-BJazso8F.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-yXqoYF1J.js → diagram-Z3DM3KII-Clje1aNy.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-Duk83Ek_.js → ebnfDiagram-PWID7BFC-M93YBkFh.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-DMdvxySG.js → erDiagram-SSCWMZ5O-DY8XzSHU.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-DHjVgSji.js → flowDiagram-A5DVABFB-CE6Aylcq.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DMM9DkCE.js → ganttDiagram-EL5Y4UJY-DI-5LL22.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-t_ug9vO8.js → gitGraphDiagram-WWUBYQGX-C7BZWElk.js} +1 -1
- package/web-shell/assets/index-CVyqwW7y.js +2142 -0
- package/web-shell/assets/{index-zqvnpGHv.js → index-DclFHns9.js} +1 -1
- package/web-shell/assets/index-FO7JXPnH.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-eT1fANNm.js → infoDiagram-RXCK75RN-CGUSy4Pc.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-k3evzZNn.js → ishikawaDiagram-5VMMS53U-B5BVks9q.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-CGim3EAi.js → journeyDiagram-EYS64GPL-CFh6Tf7h.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-WHfJo-22.js → kanban-definition-3QL26DDD-B7TlxP7c.js} +1 -1
- package/web-shell/assets/{layout-DkqIaFlJ.js → layout-Br_pZq2Q.js} +1 -1
- package/web-shell/assets/{linear-Bdkd3mCz.js → linear-BVlP6fte.js} +1 -1
- package/web-shell/assets/{mermaid.core-CGw0LkT_.js → mermaid.core-TrcYWoiF.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-C9V4rBvo.js → mindmap-definition-FBJOCRG2-BJ4LzqjZ.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-CwoI2T5G.js → pegDiagram-XKGWAZYB-1b_MxlOl.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-DaTmBmPG.js → pieDiagram-E7YTZNPT-B8zl0YhY.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-plh6MyGI.js → quadrantDiagram-AXDQQJYC-CIZO8ukl.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-D_b-S0iK.js → railroadDiagram-O6MQD6OU-CepHSbCj.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-zUzTN7VE.js → requirementDiagram-EFPCY7ZU-BCgxkcSW.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-m6AhoD0l.js → sankeyDiagram-P5KCCOFB-CE5CcoMM.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-Cwhzsine.js → sequenceDiagram-WJ2MYXX4-DvgHi-d5.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CcZuKIae.js → sizeCapture-X5ZJPWSS-T-fAsCPX.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-CFoiJwD_.js → stateDiagram-HBIQ2CUA-DYHaul-5.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BcYho9a4.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-CgS9hcaV.js → swimlanes-XN3QIQJK-Dbz3Qiej.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6HsOIgX.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-Dzzc05t9.js → timeline-definition-24CTP7MA-9NVRts3N.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DemK0f7Y.js → vennDiagram-4TSXK5OY-C7cb7vnH.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CquLxtMr.js → wardleyDiagram-VM6X3IG4-CG-8Ddjm.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-BTBKTM5g.js → xychartDiagram-S5SC5T6Z-iGeYAcP4.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/MaxSizedBox-B3D7545A.js +0 -111
- package/chunks/agent-headless-OC2IB55D.js +0 -85
- package/chunks/askUserQuestion-THQZMG44.js +0 -322
- package/chunks/bridge-IHSBI2YJ.js +0 -118
- package/chunks/channel-settings-store-BVKWAI2T.js +0 -121
- package/chunks/chunk-I2TMJPCV.js +0 -448
- package/chunks/chunk-QI27MKNQ.js +0 -4008
- package/chunks/config-utils-LVSYDLHZ.js +0 -114
- package/chunks/contextCommand-TZD7UAJK.js +0 -107
- package/chunks/daemon-status-provider-GRRVCJFW.js +0 -117
- package/chunks/daemon-trust-policy-YJL442BK.js +0 -113
- package/chunks/deferred-core-runtime-S32AYVZI.js +0 -115
- package/chunks/earlyInputCapture-BBPCIVZG.js +0 -108
- package/chunks/environment-VN6RXDVN.js +0 -130
- package/chunks/errors-UEY36PIT.js +0 -114
- package/chunks/exitPlanMode-EPHIEDAA.js +0 -83
- package/chunks/handleAutoUpdate-HVWQT2AU.js +0 -110
- package/chunks/i18n-5OR7NTRZ.js +0 -125
- package/chunks/initializer-JE5RQSOE.js +0 -114
- package/chunks/installationInfo-KO3CCSCK.js +0 -108
- package/chunks/list-3IORSFIY.js +0 -117
- package/chunks/loadedSettingsAdapter-KLLFZF3M.js +0 -111
- package/chunks/mcp-A2UEHETW.js +0 -111
- package/chunks/nonInteractiveCli-YA47F2F4.js +0 -190
- package/chunks/pidfile-ETHAZNMY.js +0 -112
- package/chunks/prompt-terminal-ledger-GZ747VYE.js +0 -106
- package/chunks/resumeHistoryUtils-DPZKFW24.js +0 -119
- package/chunks/ripGrep-C7LJKUPZ.js +0 -37
- package/chunks/runtime-LNBLEMZS.js +0 -149
- package/chunks/scheduled-tasks-FLDYZQOF.js +0 -128
- package/chunks/serve-3UR2H4CV.js +0 -119
- package/chunks/session-attachments-root-ZCGXQQTR.js +0 -104
- package/chunks/shell-YHOGC7TO.js +0 -93
- package/chunks/skill-settings-AKSP665O.js +0 -119
- package/chunks/spawnChannel-N25MBB6F.js +0 -112
- package/chunks/standalone-update-XGPWJDRN.js +0 -119
- package/chunks/terminal-image-renderer-KKM4OBLO.js +0 -117
- package/chunks/theme-manager-GQHF3A7T.js +0 -103
- package/chunks/total-session-admission-G4CGCSTG.js +0 -113
- package/chunks/trustedFolders-D2I3FDPB.js +0 -123
- package/chunks/updateCheck-ZXOQDFEI.js +0 -119
- package/chunks/useAutoAcceptIndicator-6EK4QGAH.js +0 -121
- package/chunks/workspace-providers-status-PCJK3RC7.js +0 -115
- package/chunks/workspace-registry-YNIOB6HJ.js +0 -122
- package/chunks/workspace-runtime-coordinator-WG2RNEN7.js +0 -123
- package/chunks/workspace-service-G4ZNBOFH.js +0 -127
- package/chunks/workspace-skills-status-FMTPPMWC.js +0 -114
- package/chunks/write-file-YTLFY2S5.js +0 -88
- package/web-shell/assets/channel-B7ohGDil.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DdFpqpfD.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DdFpqpfD.js +0 -1
- package/web-shell/assets/index-BGZRqbRo.css +0 -36
- package/web-shell/assets/index-DRri_6_x.js +0 -2067
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V--H8HdEmk.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ShE9OIgf.js +0 -8
|
@@ -579,6 +579,7 @@ var PERMISSION_MODES = [
|
|
|
579
579
|
];
|
|
580
580
|
|
|
581
581
|
// packages/sdk-typescript/src/daemon/types.ts
|
|
582
|
+
var GOAL_PAUSE_REASON_COMMAND = "Paused with /goal pause.";
|
|
582
583
|
var DaemonCapabilityMissingError = class extends Error {
|
|
583
584
|
static {
|
|
584
585
|
__name(this, "DaemonCapabilityMissingError");
|
|
@@ -1058,6 +1059,9 @@ var urlEncode = encodeURIComponent;
|
|
|
1058
1059
|
function transcriptPageSuffix(opts) {
|
|
1059
1060
|
const query = new URLSearchParams();
|
|
1060
1061
|
if (opts.cursor !== void 0) query.set("cursor", opts.cursor);
|
|
1062
|
+
if (opts.direction !== void 0) query.set("direction", opts.direction);
|
|
1063
|
+
if (opts.atRecordId !== void 0) query.set("atRecordId", opts.atRecordId);
|
|
1064
|
+
if (opts.snapshot !== void 0) query.set("snapshot", opts.snapshot);
|
|
1061
1065
|
if (opts.beforeRecordId !== void 0) {
|
|
1062
1066
|
query.set("beforeRecordId", opts.beforeRecordId);
|
|
1063
1067
|
}
|
|
@@ -1066,6 +1070,15 @@ function transcriptPageSuffix(opts) {
|
|
|
1066
1070
|
return value ? `?${value}` : "";
|
|
1067
1071
|
}
|
|
1068
1072
|
__name(transcriptPageSuffix, "transcriptPageSuffix");
|
|
1073
|
+
function turnIndexPageSuffix(opts) {
|
|
1074
|
+
const query = new URLSearchParams();
|
|
1075
|
+
if (opts.snapshot !== void 0) query.set("snapshot", opts.snapshot);
|
|
1076
|
+
if (opts.start !== void 0) query.set("start", String(opts.start));
|
|
1077
|
+
if (opts.limit !== void 0) query.set("limit", String(opts.limit));
|
|
1078
|
+
const value = query.toString();
|
|
1079
|
+
return value ? `?${value}` : "";
|
|
1080
|
+
}
|
|
1081
|
+
__name(turnIndexPageSuffix, "turnIndexPageSuffix");
|
|
1069
1082
|
function normalizePermissionRuleInput(rule) {
|
|
1070
1083
|
const trimmed = rule.trim();
|
|
1071
1084
|
if (!trimmed) {
|
|
@@ -1650,6 +1663,16 @@ var DaemonClient = class {
|
|
|
1650
1663
|
}
|
|
1651
1664
|
);
|
|
1652
1665
|
}
|
|
1666
|
+
workspaceConfigSkills() {
|
|
1667
|
+
return this.jsonRequest("/workspace/config/skills", "Skills config", {
|
|
1668
|
+
mode: "rest"
|
|
1669
|
+
});
|
|
1670
|
+
}
|
|
1671
|
+
workspaceRuntimeSkills() {
|
|
1672
|
+
return this.jsonRequest("/workspace/runtime/skills", "Skills runtime", {
|
|
1673
|
+
mode: "rest"
|
|
1674
|
+
});
|
|
1675
|
+
}
|
|
1653
1676
|
async workspaceAcpPreheat(timeoutMs) {
|
|
1654
1677
|
const serverBudgetMs = timeoutMs ?? 5e3;
|
|
1655
1678
|
const suffix = timeoutMs !== void 0 ? `?timeoutMs=${encodeURIComponent(timeoutMs)}` : "";
|
|
@@ -1721,6 +1744,13 @@ var DaemonClient = class {
|
|
|
1721
1744
|
}
|
|
1722
1745
|
);
|
|
1723
1746
|
}
|
|
1747
|
+
async sessionResources(sessionId, clientId) {
|
|
1748
|
+
return await this.jsonRequest(
|
|
1749
|
+
`/session/${urlEncode(sessionId)}/resources`,
|
|
1750
|
+
"GET /session/:id/resources",
|
|
1751
|
+
{ clientId, mode: "rest" }
|
|
1752
|
+
);
|
|
1753
|
+
}
|
|
1724
1754
|
async workspaceExtensions() {
|
|
1725
1755
|
return await this.jsonRequest(
|
|
1726
1756
|
"/workspace/extensions",
|
|
@@ -2958,6 +2988,13 @@ var DaemonClient = class {
|
|
|
2958
2988
|
}
|
|
2959
2989
|
);
|
|
2960
2990
|
}
|
|
2991
|
+
async getSessionTurnIndexPage(sessionId, opts = {}) {
|
|
2992
|
+
return await this.jsonRequest(
|
|
2993
|
+
`/session/${urlEncode(sessionId)}/turn-index${turnIndexPageSuffix(opts)}`,
|
|
2994
|
+
"GET /session/:id/turn-index",
|
|
2995
|
+
{ clientId: opts.clientId, mode: "rest" }
|
|
2996
|
+
);
|
|
2997
|
+
}
|
|
2961
2998
|
async resolveSubagentSession(sessionId, subagentRef, clientId) {
|
|
2962
2999
|
return await this.jsonRequest(
|
|
2963
3000
|
`/session/${urlEncode(sessionId)}/subagents/${urlEncode(subagentRef)}`,
|
|
@@ -3098,6 +3135,35 @@ var DaemonClient = class {
|
|
|
3098
3135
|
}
|
|
3099
3136
|
);
|
|
3100
3137
|
}
|
|
3138
|
+
async sessionAgents(sessionId, clientId, signal) {
|
|
3139
|
+
return await this.fetchWithTimeout(
|
|
3140
|
+
`${this.baseUrl}/session/${urlEncode(sessionId)}/agents`,
|
|
3141
|
+
{ headers: this.headers({}, clientId), signal },
|
|
3142
|
+
async (res) => {
|
|
3143
|
+
if (!res.ok) {
|
|
3144
|
+
throw await this.failOnError(res, "GET /session/:id/agents");
|
|
3145
|
+
}
|
|
3146
|
+
return await res.json();
|
|
3147
|
+
}
|
|
3148
|
+
);
|
|
3149
|
+
}
|
|
3150
|
+
async sessionAgentTrace(sessionId, opts = {}) {
|
|
3151
|
+
const query = new URLSearchParams();
|
|
3152
|
+
if (opts.rootAgentId) {
|
|
3153
|
+
query.set("rootAgentId", opts.rootAgentId);
|
|
3154
|
+
}
|
|
3155
|
+
const suffix = query.size > 0 ? `?${query}` : "";
|
|
3156
|
+
return await this.fetchWithTimeout(
|
|
3157
|
+
`${this.baseUrl}/session/${urlEncode(sessionId)}/agent-trace${suffix}`,
|
|
3158
|
+
{ headers: this.headers({}, opts.clientId), signal: opts.signal },
|
|
3159
|
+
async (res) => {
|
|
3160
|
+
if (!res.ok) {
|
|
3161
|
+
throw await this.failOnError(res, "GET /session/:id/agent-trace");
|
|
3162
|
+
}
|
|
3163
|
+
return await res.json();
|
|
3164
|
+
}
|
|
3165
|
+
);
|
|
3166
|
+
}
|
|
3101
3167
|
async sessionWorkflowTasks(sessionId, clientId) {
|
|
3102
3168
|
return await this.fetchWithTimeout(
|
|
3103
3169
|
`${this.baseUrl}/session/${urlEncode(sessionId)}/tasks?includeWorkflows=true`,
|
|
@@ -3110,6 +3176,21 @@ var DaemonClient = class {
|
|
|
3110
3176
|
}
|
|
3111
3177
|
);
|
|
3112
3178
|
}
|
|
3179
|
+
async sessionSavedWorkflow(sessionId, name, clientId) {
|
|
3180
|
+
return await this.fetchWithTimeout(
|
|
3181
|
+
`${this.baseUrl}/session/${urlEncode(sessionId)}/saved-workflows/${urlEncode(name)}`,
|
|
3182
|
+
{ headers: this.headers({}, clientId) },
|
|
3183
|
+
async (res) => {
|
|
3184
|
+
if (!res.ok) {
|
|
3185
|
+
throw await this.failOnError(
|
|
3186
|
+
res,
|
|
3187
|
+
"GET /session/:id/saved-workflows/:name"
|
|
3188
|
+
);
|
|
3189
|
+
}
|
|
3190
|
+
return await res.json();
|
|
3191
|
+
}
|
|
3192
|
+
);
|
|
3193
|
+
}
|
|
3113
3194
|
async sessionLspStatus(sessionId, clientId) {
|
|
3114
3195
|
return await this.fetchWithTimeout(
|
|
3115
3196
|
`${this.baseUrl}/session/${urlEncode(sessionId)}/lsp`,
|
|
@@ -3438,6 +3519,23 @@ var DaemonClient = class {
|
|
|
3438
3519
|
}
|
|
3439
3520
|
);
|
|
3440
3521
|
}
|
|
3522
|
+
async listSessionAttachments(sessionId, opts) {
|
|
3523
|
+
return await this.fetchWithTimeout(
|
|
3524
|
+
`${this.baseUrl}/session/${urlEncode(sessionId)}/attachments`,
|
|
3525
|
+
{
|
|
3526
|
+
method: "GET",
|
|
3527
|
+
headers: this.headers({}, opts?.clientId),
|
|
3528
|
+
signal: opts?.signal
|
|
3529
|
+
},
|
|
3530
|
+
async (res) => {
|
|
3531
|
+
if (!res.ok) {
|
|
3532
|
+
throw await this.failOnError(res, "GET /session/:id/attachments");
|
|
3533
|
+
}
|
|
3534
|
+
const body = await res.json();
|
|
3535
|
+
return Array.isArray(body.attachments) ? body.attachments : [];
|
|
3536
|
+
}
|
|
3537
|
+
);
|
|
3538
|
+
}
|
|
3441
3539
|
async removeSessionAttachment(sessionId, attachmentId, opts) {
|
|
3442
3540
|
return await this.fetchWithTimeout(
|
|
3443
3541
|
`${this.baseUrl}/session/${urlEncode(sessionId)}/attachments/${urlEncode(attachmentId)}`,
|
|
@@ -3713,6 +3811,20 @@ var DaemonClient = class {
|
|
|
3713
3811
|
{ method: "DELETE" }
|
|
3714
3812
|
);
|
|
3715
3813
|
}
|
|
3814
|
+
installWorkspaceConfigSkill(request) {
|
|
3815
|
+
return this.jsonRequest("/workspace/config/skills/install", "Skill", {
|
|
3816
|
+
method: "POST",
|
|
3817
|
+
body: request,
|
|
3818
|
+
mode: "rest"
|
|
3819
|
+
});
|
|
3820
|
+
}
|
|
3821
|
+
deleteWorkspaceConfigSkill(skillName, scope) {
|
|
3822
|
+
return this.jsonRequest(
|
|
3823
|
+
`/workspace/config/skills/${urlEncode(skillName)}?scope=${scope}`,
|
|
3824
|
+
"Skill",
|
|
3825
|
+
{ method: "DELETE", mode: "rest" }
|
|
3826
|
+
);
|
|
3827
|
+
}
|
|
3716
3828
|
async workspaceSettings(opts) {
|
|
3717
3829
|
return await this.fetchWithTimeout(
|
|
3718
3830
|
`${this.baseUrl}/workspace/settings`,
|
|
@@ -5495,6 +5607,51 @@ var WorkspaceDaemonClient = class {
|
|
|
5495
5607
|
workspaceSkills() {
|
|
5496
5608
|
return this.get("/skills", "GET /workspaces/:workspace/skills");
|
|
5497
5609
|
}
|
|
5610
|
+
workspaceConfigSkills() {
|
|
5611
|
+
return this.client.workspaceJsonRequest(
|
|
5612
|
+
this.workspaceSelector,
|
|
5613
|
+
"/config/skills",
|
|
5614
|
+
"GET /workspaces/:workspace/config/skills",
|
|
5615
|
+
{ mode: "rest" }
|
|
5616
|
+
);
|
|
5617
|
+
}
|
|
5618
|
+
workspaceRuntimeSkills() {
|
|
5619
|
+
return this.client.workspaceJsonRequest(
|
|
5620
|
+
this.workspaceSelector,
|
|
5621
|
+
"/runtime/skills",
|
|
5622
|
+
"GET /workspaces/:workspace/runtime/skills",
|
|
5623
|
+
{ mode: "rest" }
|
|
5624
|
+
);
|
|
5625
|
+
}
|
|
5626
|
+
setWorkspaceConfigSkillEnabled(skillName, enabled, opts) {
|
|
5627
|
+
return this.client.workspaceJsonRequest(
|
|
5628
|
+
this.workspaceSelector,
|
|
5629
|
+
`/config/skills/${urlEncode(skillName)}/enable`,
|
|
5630
|
+
"POST /workspaces/:workspace/config/skills/:name/enable",
|
|
5631
|
+
{
|
|
5632
|
+
method: "POST",
|
|
5633
|
+
body: { enabled },
|
|
5634
|
+
clientId: opts?.clientId,
|
|
5635
|
+
mode: "rest"
|
|
5636
|
+
}
|
|
5637
|
+
);
|
|
5638
|
+
}
|
|
5639
|
+
installWorkspaceConfigSkill(request) {
|
|
5640
|
+
return this.client.workspaceJsonRequest(
|
|
5641
|
+
this.workspaceSelector,
|
|
5642
|
+
"/config/skills/install",
|
|
5643
|
+
"POST /workspaces/:workspace/config/skills/install",
|
|
5644
|
+
{ method: "POST", body: request, mode: "rest" }
|
|
5645
|
+
);
|
|
5646
|
+
}
|
|
5647
|
+
deleteWorkspaceConfigSkill(skillName, scope) {
|
|
5648
|
+
return this.client.workspaceJsonRequest(
|
|
5649
|
+
this.workspaceSelector,
|
|
5650
|
+
`/config/skills/${urlEncode(skillName)}?scope=${scope}`,
|
|
5651
|
+
"DELETE /workspaces/:workspace/config/skills/:name",
|
|
5652
|
+
{ method: "DELETE", mode: "rest" }
|
|
5653
|
+
);
|
|
5654
|
+
}
|
|
5498
5655
|
workspaceProviders() {
|
|
5499
5656
|
return this.get("/providers", "GET /workspaces/:workspace/providers");
|
|
5500
5657
|
}
|
|
@@ -5652,6 +5809,15 @@ var WorkspaceDaemonClient = class {
|
|
|
5652
5809
|
{ clientId: opts.clientId, mode: "rest" }
|
|
5653
5810
|
);
|
|
5654
5811
|
}
|
|
5812
|
+
/** Read one sparse page of persisted navigation turns in this workspace. */
|
|
5813
|
+
getSessionTurnIndexPage(sessionId, opts = {}) {
|
|
5814
|
+
return this.client.workspaceJsonRequest(
|
|
5815
|
+
this.workspaceSelector,
|
|
5816
|
+
`/session/${urlEncode(sessionId)}/turn-index${turnIndexPageSuffix(opts)}`,
|
|
5817
|
+
"GET /workspaces/:workspace/session/:id/turn-index",
|
|
5818
|
+
{ clientId: opts.clientId, mode: "rest" }
|
|
5819
|
+
);
|
|
5820
|
+
}
|
|
5655
5821
|
/** Export an active persisted session from this registered workspace. */
|
|
5656
5822
|
exportSession(sessionId, opts = {}) {
|
|
5657
5823
|
return this.client.sessionExportRequest(
|
|
@@ -6314,6 +6480,9 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
6314
6480
|
get worktree() {
|
|
6315
6481
|
return this.session.worktree;
|
|
6316
6482
|
}
|
|
6483
|
+
get worktreeState() {
|
|
6484
|
+
return this.session.worktreeState;
|
|
6485
|
+
}
|
|
6317
6486
|
get branch() {
|
|
6318
6487
|
return this.session.branch;
|
|
6319
6488
|
}
|
|
@@ -6449,6 +6618,14 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
6449
6618
|
})
|
|
6450
6619
|
);
|
|
6451
6620
|
}
|
|
6621
|
+
async listAttachments(signal) {
|
|
6622
|
+
return await this.withClientIdSelfHeal(
|
|
6623
|
+
() => this.client.listSessionAttachments(this.sessionId, {
|
|
6624
|
+
...signal ? { signal } : {},
|
|
6625
|
+
...this.clientId ? { clientId: this.clientId } : {}
|
|
6626
|
+
})
|
|
6627
|
+
);
|
|
6628
|
+
}
|
|
6452
6629
|
async removeAttachment(attachmentId, signal) {
|
|
6453
6630
|
const removed = await this.withClientIdSelfHeal(
|
|
6454
6631
|
() => this.client.removeSessionAttachment(this.sessionId, attachmentId, {
|
|
@@ -6493,7 +6670,19 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
6493
6670
|
const resume = this.restoreStrategy.kind === "standalone" ? this.client.resumeStandaloneSession(this.sessionId) : this.client.resumeSession(this.sessionId, {
|
|
6494
6671
|
workspaceCwd: this.restoreStrategy.workspaceCwd
|
|
6495
6672
|
});
|
|
6496
|
-
this.reattaching = resume.then((session) => {
|
|
6673
|
+
this.reattaching = resume.then(async (session) => {
|
|
6674
|
+
if (this.session.worktreeState === "persisted-v1") {
|
|
6675
|
+
const sameWorktree = session.worktreeState === "persisted-v1" && session.worktree?.path === this.session.worktree?.path;
|
|
6676
|
+
if (!sameWorktree) {
|
|
6677
|
+
await this.client.detachSession(session.sessionId, session.clientId).catch(() => {
|
|
6678
|
+
});
|
|
6679
|
+
throw new Error(
|
|
6680
|
+
`Daemon lost durable worktree identity for session ${this.sessionId}`
|
|
6681
|
+
);
|
|
6682
|
+
}
|
|
6683
|
+
this.session.worktree = session.worktree;
|
|
6684
|
+
this.session.worktreeState = session.worktreeState;
|
|
6685
|
+
}
|
|
6497
6686
|
this.session.clientId = session.clientId;
|
|
6498
6687
|
});
|
|
6499
6688
|
try {
|
|
@@ -6657,6 +6846,12 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
6657
6846
|
)
|
|
6658
6847
|
};
|
|
6659
6848
|
}
|
|
6849
|
+
async getTurnIndexPage(opts = {}) {
|
|
6850
|
+
return this.client.getSessionTurnIndexPage(this.sessionId, {
|
|
6851
|
+
...opts,
|
|
6852
|
+
clientId: opts.clientId ?? this.clientId
|
|
6853
|
+
});
|
|
6854
|
+
}
|
|
6660
6855
|
removePendingPrompt(promptId) {
|
|
6661
6856
|
return this.client.removePendingPrompt(this.sessionId, promptId, {
|
|
6662
6857
|
...this.clientId ? { clientId: this.clientId } : {}
|
|
@@ -6689,12 +6884,31 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
6689
6884
|
tasks() {
|
|
6690
6885
|
return this.client.sessionTasks(this.sessionId, this.clientId);
|
|
6691
6886
|
}
|
|
6887
|
+
agents(signal) {
|
|
6888
|
+
return this.client.sessionAgents(this.sessionId, this.clientId, signal);
|
|
6889
|
+
}
|
|
6890
|
+
agentTrace(opts = {}) {
|
|
6891
|
+
return this.client.sessionAgentTrace(this.sessionId, {
|
|
6892
|
+
...opts,
|
|
6893
|
+
clientId: this.clientId
|
|
6894
|
+
});
|
|
6895
|
+
}
|
|
6692
6896
|
workflowTasks() {
|
|
6693
6897
|
return this.client.sessionWorkflowTasks(this.sessionId, this.clientId);
|
|
6694
6898
|
}
|
|
6899
|
+
savedWorkflow(name) {
|
|
6900
|
+
return this.client.sessionSavedWorkflow(
|
|
6901
|
+
this.sessionId,
|
|
6902
|
+
name,
|
|
6903
|
+
this.clientId
|
|
6904
|
+
);
|
|
6905
|
+
}
|
|
6695
6906
|
lspStatus() {
|
|
6696
6907
|
return this.client.sessionLspStatus(this.sessionId, this.clientId);
|
|
6697
6908
|
}
|
|
6909
|
+
resources() {
|
|
6910
|
+
return this.client.sessionResources(this.sessionId, this.clientId);
|
|
6911
|
+
}
|
|
6698
6912
|
cancelTask(taskId, kind) {
|
|
6699
6913
|
return this.client.sessionTaskCancel(
|
|
6700
6914
|
this.sessionId,
|
|
@@ -6959,7 +7173,11 @@ var DaemonSessionClient = class _DaemonSessionClient {
|
|
|
6959
7173
|
return {
|
|
6960
7174
|
type: "image",
|
|
6961
7175
|
data: attachment.data,
|
|
6962
|
-
mimeType: attachment.mimeType
|
|
7176
|
+
mimeType: attachment.mimeType,
|
|
7177
|
+
// Keep the reference id on the hydrated block so message images stay
|
|
7178
|
+
// re-fetchable after a reload (Web Shell previews persist the id
|
|
7179
|
+
// instead of the data URL).
|
|
7180
|
+
attachmentId: block.attachmentId
|
|
6963
7181
|
};
|
|
6964
7182
|
} catch (err) {
|
|
6965
7183
|
if (err instanceof DaemonHttpError && (err.status === 404 || err.status === 410)) {
|
|
@@ -7121,7 +7339,7 @@ var DAEMON_KNOWN_EVENT_TYPE_VALUES = [
|
|
|
7121
7339
|
// Daemon assist push events. `followup_suggestion`: server-side
|
|
7122
7340
|
// ghost-text "what you might want to ask next" suggestion, generated
|
|
7123
7341
|
// after each end_turn by the ACP child and forwarded through the per-
|
|
7124
|
-
// session SSE bus so
|
|
7342
|
+
// session SSE bus so Web Shell (and other future daemon adapters)
|
|
7125
7343
|
// can render the suggestion in their input placeholder. The wire
|
|
7126
7344
|
// carries only post-filter suggestions (`getFilterReason()===null`);
|
|
7127
7345
|
// generator-side suppression telemetry stays on the daemon. Old SDK
|
|
@@ -8019,7 +8237,7 @@ function isDaemonSkillToggleMutation(value) {
|
|
|
8019
8237
|
const skills = value["skills"];
|
|
8020
8238
|
return isNonEmptyString(value["id"]) && value["kind"] === "skill_toggle" && Array.isArray(skills) && skills.length > 0 && skills.every(
|
|
8021
8239
|
(skill) => isRecord(skill) && isNonEmptyString(skill["name"]) && typeof skill["enabled"] === "boolean"
|
|
8022
|
-
) && (activation === "applied" || activation === "deferred" || activation === "partial") && isFiniteNumber(value["sessionsRefreshed"]) && isFiniteNumber(value["sessionsFailed"]);
|
|
8240
|
+
) && (activation === "applied" || activation === "deferred" || activation === "reconciling" || activation === "partial") && isFiniteNumber(value["sessionsRefreshed"]) && isFiniteNumber(value["sessionsFailed"]);
|
|
8023
8241
|
}
|
|
8024
8242
|
__name(isDaemonSkillToggleMutation, "isDaemonSkillToggleMutation");
|
|
8025
8243
|
function isSettingsChangedData(value) {
|
|
@@ -8284,6 +8502,9 @@ function isUnrecognizedDiagnosticReason(reason) {
|
|
|
8284
8502
|
}
|
|
8285
8503
|
__name(isUnrecognizedDiagnosticReason, "isUnrecognizedDiagnosticReason");
|
|
8286
8504
|
|
|
8505
|
+
// packages/sdk-typescript/src/daemon/ui/toolPreview.ts
|
|
8506
|
+
init_esbuild_shims();
|
|
8507
|
+
|
|
8287
8508
|
// packages/sdk-typescript/src/daemon/ui/utils.ts
|
|
8288
8509
|
init_esbuild_shims();
|
|
8289
8510
|
function isRecord2(value) {
|
|
@@ -8478,1860 +8699,2053 @@ var dcsSequencePattern = new RegExp(
|
|
|
8478
8699
|
var csiSequencePattern = new RegExp(`${escapeChar}\\[[0-?]*[ -/]*[@-~]`, "g");
|
|
8479
8700
|
var bidiControlPattern = /[\u200e\u200f\u202a-\u202e\u2066-\u2069]/g;
|
|
8480
8701
|
|
|
8481
|
-
// packages/sdk-typescript/src/daemon/ui/
|
|
8482
|
-
var
|
|
8483
|
-
var
|
|
8484
|
-
var
|
|
8485
|
-
|
|
8486
|
-
|
|
8487
|
-
|
|
8488
|
-
|
|
8489
|
-
|
|
8490
|
-
|
|
8491
|
-
|
|
8492
|
-
|
|
8493
|
-
|
|
8494
|
-
|
|
8495
|
-
|
|
8496
|
-
|
|
8497
|
-
return normalizeSessionUpdate(event, base, opts);
|
|
8498
|
-
case "shell_output": {
|
|
8499
|
-
const text = getOutputText(event.data);
|
|
8500
|
-
const stream = getShellStream(event.data);
|
|
8501
|
-
const source = getSource(event.data);
|
|
8502
|
-
return text ? [
|
|
8702
|
+
// packages/sdk-typescript/src/daemon/ui/toolPreview.ts
|
|
8703
|
+
var MAX_TOOL_PREVIEW_DEPTH = 8;
|
|
8704
|
+
var MAX_TODO_PREVIEW_ENTRIES = 1e3;
|
|
8705
|
+
var MAX_TOOL_RESULT_PREVIEW_LENGTH = 1e5;
|
|
8706
|
+
var MAX_TODO_ID_LENGTH = 512;
|
|
8707
|
+
function createDaemonToolPreview(input, opts = {}, depth = 0) {
|
|
8708
|
+
if (depth > MAX_TOOL_PREVIEW_DEPTH) {
|
|
8709
|
+
const summary2 = opts.title ?? opts.toolName ?? opts.toolKind;
|
|
8710
|
+
return { kind: "generic", ...summary2 ? { summary: summary2 } : {} };
|
|
8711
|
+
}
|
|
8712
|
+
if (isRecord2(input)) {
|
|
8713
|
+
const nestedInput = input["rawInput"] ?? input["input"] ?? input["args"];
|
|
8714
|
+
if (nestedInput !== void 0 && nestedInput !== input) {
|
|
8715
|
+
const meta = isRecord2(input["_meta"]) ? input["_meta"] : void 0;
|
|
8716
|
+
const nested = createDaemonToolPreview(
|
|
8717
|
+
nestedInput,
|
|
8503
8718
|
{
|
|
8504
|
-
|
|
8505
|
-
|
|
8506
|
-
|
|
8507
|
-
|
|
8508
|
-
|
|
8509
|
-
|
|
8719
|
+
title: opts.title ?? getFirstString(input, ["title"]),
|
|
8720
|
+
toolName: opts.toolName ?? getFirstString(input, ["toolName", "name"]) ?? (meta ? getFirstString(meta, ["toolName"]) : void 0),
|
|
8721
|
+
toolKind: opts.toolKind ?? getFirstString(input, ["kind"])
|
|
8722
|
+
},
|
|
8723
|
+
depth + 1
|
|
8724
|
+
);
|
|
8725
|
+
if (nested.kind !== "generic" || !nested.summary) return nested;
|
|
8510
8726
|
}
|
|
8511
|
-
|
|
8512
|
-
|
|
8513
|
-
|
|
8514
|
-
|
|
8515
|
-
|
|
8516
|
-
|
|
8517
|
-
|
|
8518
|
-
|
|
8519
|
-
|
|
8520
|
-
|
|
8521
|
-
|
|
8522
|
-
|
|
8523
|
-
|
|
8524
|
-
|
|
8525
|
-
|
|
8526
|
-
|
|
8527
|
-
|
|
8528
|
-
|
|
8529
|
-
|
|
8530
|
-
|
|
8531
|
-
|
|
8532
|
-
|
|
8533
|
-
|
|
8534
|
-
|
|
8535
|
-
|
|
8536
|
-
|
|
8537
|
-
|
|
8538
|
-
|
|
8539
|
-
|
|
8540
|
-
|
|
8541
|
-
|
|
8542
|
-
|
|
8543
|
-
];
|
|
8727
|
+
}
|
|
8728
|
+
const askUserQuestions = extractAskUserQuestions(input);
|
|
8729
|
+
if (askUserQuestions.length > 0) {
|
|
8730
|
+
return { kind: "ask_user_question", questions: askUserQuestions };
|
|
8731
|
+
}
|
|
8732
|
+
const todoList = detectTodoList(input, opts, true);
|
|
8733
|
+
if (todoList) return todoList;
|
|
8734
|
+
const mcpPreview = detectMcpInvocation(input, opts);
|
|
8735
|
+
if (mcpPreview) return mcpPreview;
|
|
8736
|
+
const subagent = detectSubagentDelegation(input, opts);
|
|
8737
|
+
if (subagent) return subagent;
|
|
8738
|
+
const search = detectSearch(input, opts);
|
|
8739
|
+
if (search) return search;
|
|
8740
|
+
const imageGeneration = detectImageGeneration(input, opts);
|
|
8741
|
+
if (imageGeneration) return imageGeneration;
|
|
8742
|
+
const fileDiff = detectFileDiff(input, opts);
|
|
8743
|
+
if (fileDiff) return fileDiff;
|
|
8744
|
+
const fileRead = detectFileRead(input, opts);
|
|
8745
|
+
if (fileRead) return fileRead;
|
|
8746
|
+
const webFetch = detectWebFetch(input);
|
|
8747
|
+
if (webFetch) return webFetch;
|
|
8748
|
+
const codeBlock = detectCodeBlock(input, opts);
|
|
8749
|
+
if (codeBlock) return codeBlock;
|
|
8750
|
+
const tabular = detectTabular(input);
|
|
8751
|
+
if (tabular) return tabular;
|
|
8752
|
+
if (isRecord2(input)) {
|
|
8753
|
+
const command = getFirstString(input, ["command", "cmd"]);
|
|
8754
|
+
if (command) {
|
|
8755
|
+
const cwd = getFirstString(input, [
|
|
8756
|
+
"cwd",
|
|
8757
|
+
"directory",
|
|
8758
|
+
"workingDirectory"
|
|
8759
|
+
]);
|
|
8760
|
+
return { kind: "command", command, ...cwd ? { cwd } : {} };
|
|
8544
8761
|
}
|
|
8545
|
-
|
|
8546
|
-
|
|
8547
|
-
|
|
8548
|
-
...base,
|
|
8549
|
-
type: "status",
|
|
8550
|
-
text: `Session closed: ${getString2(event.data, "reason") ?? "closed"}`
|
|
8551
|
-
}
|
|
8552
|
-
];
|
|
8553
|
-
case "session_recording_degraded": {
|
|
8554
|
-
const sessionId = getString2(event.data, "sessionId");
|
|
8555
|
-
if (!sessionId || getString2(event.data, "reason") !== "write_failed") {
|
|
8556
|
-
return fallbackDebug(event, base, "malformed recording state");
|
|
8557
|
-
}
|
|
8558
|
-
return [
|
|
8559
|
-
{
|
|
8560
|
-
...base,
|
|
8561
|
-
type: "error",
|
|
8562
|
-
recoverable: true,
|
|
8563
|
-
code: "session_recording_degraded",
|
|
8564
|
-
text: SESSION_RECORDING_DEGRADED_MESSAGE
|
|
8565
|
-
}
|
|
8566
|
-
];
|
|
8567
|
-
}
|
|
8568
|
-
case "session_snapshot": {
|
|
8569
|
-
if (!isRecord2(event.data) || !getString2(event.data, "sessionId")) {
|
|
8570
|
-
return fallbackDebug(event, base, "malformed recording snapshot");
|
|
8571
|
-
}
|
|
8572
|
-
const recordingDegraded = event.data["recordingDegraded"];
|
|
8573
|
-
if (recordingDegraded !== void 0 && typeof recordingDegraded !== "boolean") {
|
|
8574
|
-
return fallbackDebug(event, base, "malformed recording snapshot");
|
|
8575
|
-
}
|
|
8576
|
-
if (recordingDegraded === true) {
|
|
8577
|
-
return [
|
|
8578
|
-
{
|
|
8579
|
-
...base,
|
|
8580
|
-
type: "error",
|
|
8581
|
-
recoverable: true,
|
|
8582
|
-
code: "session_recording_degraded",
|
|
8583
|
-
text: SESSION_RECORDING_DEGRADED_MESSAGE
|
|
8584
|
-
}
|
|
8585
|
-
];
|
|
8586
|
-
}
|
|
8587
|
-
return [];
|
|
8588
|
-
}
|
|
8589
|
-
case "client_evicted":
|
|
8590
|
-
return [
|
|
8591
|
-
{
|
|
8592
|
-
...base,
|
|
8593
|
-
type: "error",
|
|
8594
|
-
recoverable: true,
|
|
8595
|
-
text: getString2(event.data, "reason") ?? "SSE client evicted (no details available)"
|
|
8596
|
-
}
|
|
8597
|
-
];
|
|
8598
|
-
case "slow_client_warning":
|
|
8599
|
-
return [
|
|
8600
|
-
{
|
|
8601
|
-
...base,
|
|
8602
|
-
type: "status",
|
|
8603
|
-
text: "SSE stream is lagging"
|
|
8604
|
-
}
|
|
8605
|
-
];
|
|
8606
|
-
case "stream_error": {
|
|
8607
|
-
const errorKind = asDaemonErrorKind(getString2(event.data, "errorKind"));
|
|
8608
|
-
return [
|
|
8609
|
-
{
|
|
8610
|
-
...base,
|
|
8611
|
-
type: "error",
|
|
8612
|
-
recoverable: true,
|
|
8613
|
-
...errorKind ? { errorKind } : {},
|
|
8614
|
-
text: getString2(event.data, "error") ?? "SSE stream error (no details available)"
|
|
8615
|
-
}
|
|
8616
|
-
];
|
|
8617
|
-
}
|
|
8618
|
-
case "turn_error": {
|
|
8619
|
-
const code = getString2(event.data, "code");
|
|
8620
|
-
const errorKind = asDaemonErrorKind(getString2(event.data, "errorKind"));
|
|
8621
|
-
const promptId = getString2(event.data, "promptId");
|
|
8622
|
-
return [
|
|
8623
|
-
{
|
|
8624
|
-
...base,
|
|
8625
|
-
type: "error",
|
|
8626
|
-
source: "turn_error",
|
|
8627
|
-
recoverable: true,
|
|
8628
|
-
...code ? { code } : {},
|
|
8629
|
-
...errorKind ? { errorKind } : {},
|
|
8630
|
-
...promptId ? { promptId } : {},
|
|
8631
|
-
text: getString2(event.data, "message") ?? "Prompt failed (no details available)"
|
|
8632
|
-
}
|
|
8633
|
-
];
|
|
8762
|
+
const rows = collectPreviewRows(input);
|
|
8763
|
+
if (rows.length > 0) {
|
|
8764
|
+
return { kind: "key_value", rows };
|
|
8634
8765
|
}
|
|
8635
|
-
|
|
8636
|
-
|
|
8637
|
-
|
|
8638
|
-
|
|
8639
|
-
|
|
8640
|
-
|
|
8641
|
-
|
|
8642
|
-
|
|
8643
|
-
|
|
8644
|
-
|
|
8645
|
-
|
|
8646
|
-
|
|
8647
|
-
|
|
8766
|
+
}
|
|
8767
|
+
const summary = opts.title ?? opts.toolName ?? opts.toolKind;
|
|
8768
|
+
return { kind: "generic", ...summary ? { summary } : {} };
|
|
8769
|
+
}
|
|
8770
|
+
__name(createDaemonToolPreview, "createDaemonToolPreview");
|
|
8771
|
+
function createDaemonToolResultPreview(output, content, opts = {}) {
|
|
8772
|
+
const todoList = detectTodoList(output, opts, false);
|
|
8773
|
+
if (todoList) return todoList;
|
|
8774
|
+
return createDaemonToolResultTextPreview(
|
|
8775
|
+
extractDisplayContentText(content) ?? ""
|
|
8776
|
+
);
|
|
8777
|
+
}
|
|
8778
|
+
__name(createDaemonToolResultPreview, "createDaemonToolResultPreview");
|
|
8779
|
+
function createDaemonToolResultTextPreview(text) {
|
|
8780
|
+
return text.length > 0 && text.length <= MAX_TOOL_RESULT_PREVIEW_LENGTH ? { kind: "text", text } : void 0;
|
|
8781
|
+
}
|
|
8782
|
+
__name(createDaemonToolResultTextPreview, "createDaemonToolResultTextPreview");
|
|
8783
|
+
function detectTodoList(input, opts, includeLegacySummary) {
|
|
8784
|
+
if (!isRecord2(input)) return void 0;
|
|
8785
|
+
const toolName = opts.toolName?.toLowerCase();
|
|
8786
|
+
const entries = Array.isArray(input["entries"]) ? input["entries"] : Array.isArray(input["todos"]) ? input["todos"] : void 0;
|
|
8787
|
+
if (!entries || toolName !== "todo_write" && toolName !== "todowrite") {
|
|
8788
|
+
return void 0;
|
|
8789
|
+
}
|
|
8790
|
+
const retainedEntries = entries.slice(0, MAX_TODO_PREVIEW_ENTRIES);
|
|
8791
|
+
const authoredIds = /* @__PURE__ */ new Set();
|
|
8792
|
+
for (const entry of retainedEntries) {
|
|
8793
|
+
if (!isRecord2(entry)) continue;
|
|
8794
|
+
const meta2 = isRecord2(entry["_meta"]) ? entry["_meta"] : void 0;
|
|
8795
|
+
const qwenTodo = meta2 && isRecord2(meta2["qwenTodo"]) ? meta2["qwenTodo"] : void 0;
|
|
8796
|
+
const authoredId = getFirstString(qwenTodo, ["id"]) ?? getFirstString(entry, ["id"]);
|
|
8797
|
+
if (authoredId && authoredId.length <= MAX_TODO_ID_LENGTH) {
|
|
8798
|
+
authoredIds.add(authoredId);
|
|
8799
|
+
}
|
|
8800
|
+
}
|
|
8801
|
+
const normalized = [];
|
|
8802
|
+
const usedIds = /* @__PURE__ */ new Set();
|
|
8803
|
+
let truncated = entries.length > MAX_TODO_PREVIEW_ENTRIES;
|
|
8804
|
+
let remainingText = MAX_TOOL_RESULT_PREVIEW_LENGTH;
|
|
8805
|
+
let remainingDependencyInputs = MAX_TODO_PREVIEW_ENTRIES;
|
|
8806
|
+
retainedEntries.forEach((entry, index) => {
|
|
8807
|
+
if (!isRecord2(entry)) {
|
|
8808
|
+
truncated = true;
|
|
8809
|
+
return;
|
|
8648
8810
|
}
|
|
8649
|
-
|
|
8650
|
-
|
|
8651
|
-
|
|
8652
|
-
return
|
|
8653
|
-
case "pending_prompt_added":
|
|
8654
|
-
case "pending_prompt_started":
|
|
8655
|
-
case "pending_prompt_completed":
|
|
8656
|
-
return [];
|
|
8657
|
-
case "user_shell_command": {
|
|
8658
|
-
const command = getString2(event.data, "command");
|
|
8659
|
-
const cwd = getString2(event.data, "cwd");
|
|
8660
|
-
return command ? [
|
|
8661
|
-
{
|
|
8662
|
-
...base,
|
|
8663
|
-
type: "user.shell.command",
|
|
8664
|
-
command,
|
|
8665
|
-
...cwd ? { cwd } : {}
|
|
8666
|
-
},
|
|
8667
|
-
{ ...base, type: "user.text.delta", text: `$ ${command}` }
|
|
8668
|
-
] : [];
|
|
8811
|
+
const rawContent = getFirstString(entry, ["content", "text", "title"]);
|
|
8812
|
+
if (!rawContent) {
|
|
8813
|
+
truncated = true;
|
|
8814
|
+
return;
|
|
8669
8815
|
}
|
|
8670
|
-
|
|
8671
|
-
|
|
8672
|
-
|
|
8673
|
-
const text = aborted ? "Shell command was aborted" : `Shell command exited with code ${exitCode ?? "unknown"}`;
|
|
8674
|
-
return [{ ...base, type: "status", text }];
|
|
8816
|
+
if (remainingText === 0) {
|
|
8817
|
+
truncated = true;
|
|
8818
|
+
return;
|
|
8675
8819
|
}
|
|
8676
|
-
|
|
8677
|
-
|
|
8678
|
-
|
|
8679
|
-
|
|
8680
|
-
|
|
8681
|
-
|
|
8682
|
-
|
|
8683
|
-
|
|
8684
|
-
|
|
8685
|
-
|
|
8686
|
-
|
|
8820
|
+
const content = detachString(rawContent.slice(0, remainingText));
|
|
8821
|
+
if (content.length < rawContent.length) truncated = true;
|
|
8822
|
+
remainingText -= content.length;
|
|
8823
|
+
const meta2 = isRecord2(entry["_meta"]) ? entry["_meta"] : void 0;
|
|
8824
|
+
const qwenTodo = meta2 && isRecord2(meta2["qwenTodo"]) ? meta2["qwenTodo"] : void 0;
|
|
8825
|
+
const qwenTodoId = getFirstString(qwenTodo, ["id"]);
|
|
8826
|
+
const entryId = getFirstString(entry, ["id"]);
|
|
8827
|
+
const authoredId = qwenTodoId ?? entryId;
|
|
8828
|
+
const rawId = authoredId ?? `plan-${index}`;
|
|
8829
|
+
if (qwenTodo?.["id"] !== void 0 !== !!qwenTodoId || entry["id"] !== void 0 !== !!entryId) {
|
|
8830
|
+
truncated = true;
|
|
8831
|
+
}
|
|
8832
|
+
let id = rawId.length <= MAX_TODO_ID_LENGTH ? rawId : `plan-${index}`;
|
|
8833
|
+
if (id !== rawId) truncated = true;
|
|
8834
|
+
const idWasSynthesized = authoredId === void 0 || id !== rawId;
|
|
8835
|
+
if (usedIds.has(id) || idWasSynthesized && authoredIds.has(id)) {
|
|
8836
|
+
id = allocateUniqueTodoId(id, authoredIds, usedIds);
|
|
8837
|
+
}
|
|
8838
|
+
usedIds.add(id);
|
|
8839
|
+
const rawStatus = getFirstString(entry, ["status"]);
|
|
8840
|
+
if (entry["status"] !== void 0 && rawStatus === void 0) {
|
|
8841
|
+
truncated = true;
|
|
8842
|
+
}
|
|
8843
|
+
const status = rawStatus === "completed" || rawStatus === "in_progress" ? rawStatus : "pending";
|
|
8844
|
+
if (rawStatus !== void 0 && rawStatus !== "pending" && rawStatus !== "in_progress" && rawStatus !== "completed") {
|
|
8845
|
+
truncated = true;
|
|
8846
|
+
}
|
|
8847
|
+
const rawPriority = getFirstString(entry, ["priority"]);
|
|
8848
|
+
const priority = rawPriority === "high" || rawPriority === "medium" || rawPriority === "low" ? rawPriority : void 0;
|
|
8849
|
+
if (entry["priority"] !== void 0 !== !!priority) {
|
|
8850
|
+
truncated = true;
|
|
8851
|
+
}
|
|
8852
|
+
const blockedBySource = qwenTodo?.["blockedBy"] ?? entry["blockedBy"];
|
|
8853
|
+
const rawBlockedBy = Array.isArray(blockedBySource) ? blockedBySource : [];
|
|
8854
|
+
if (blockedBySource !== void 0 && !Array.isArray(blockedBySource)) {
|
|
8855
|
+
truncated = true;
|
|
8856
|
+
}
|
|
8857
|
+
const blockedBy = [];
|
|
8858
|
+
for (const dependency of rawBlockedBy) {
|
|
8859
|
+
if (remainingDependencyInputs === 0) {
|
|
8860
|
+
truncated = true;
|
|
8861
|
+
break;
|
|
8862
|
+
}
|
|
8863
|
+
remainingDependencyInputs -= 1;
|
|
8864
|
+
if (typeof dependency !== "string" || dependency.length === 0 || dependency.length > MAX_TODO_ID_LENGTH) {
|
|
8865
|
+
truncated = true;
|
|
8866
|
+
continue;
|
|
8867
|
+
}
|
|
8868
|
+
blockedBy.push(dependency);
|
|
8687
8869
|
}
|
|
8688
|
-
|
|
8689
|
-
|
|
8690
|
-
|
|
8691
|
-
|
|
8692
|
-
|
|
8693
|
-
|
|
8694
|
-
|
|
8695
|
-
|
|
8696
|
-
|
|
8697
|
-
|
|
8698
|
-
|
|
8699
|
-
|
|
8700
|
-
|
|
8701
|
-
|
|
8702
|
-
|
|
8703
|
-
|
|
8704
|
-
|
|
8705
|
-
|
|
8706
|
-
|
|
8707
|
-
|
|
8708
|
-
|
|
8709
|
-
|
|
8710
|
-
|
|
8711
|
-
|
|
8712
|
-
|
|
8713
|
-
|
|
8714
|
-
|
|
8715
|
-
|
|
8716
|
-
|
|
8717
|
-
|
|
8718
|
-
|
|
8719
|
-
|
|
8720
|
-
case "mcp_server_restart_refused":
|
|
8721
|
-
return normalizeMcpServerRestartRefused(event, base);
|
|
8722
|
-
case "mcp_server_added":
|
|
8723
|
-
return normalizeMcpServerChanged(event, base, "added");
|
|
8724
|
-
case "mcp_server_removed":
|
|
8725
|
-
return normalizeMcpServerChanged(event, base, "removed");
|
|
8726
|
-
case "mcp_server_changed":
|
|
8727
|
-
return normalizeMcpServerChanged(event, base);
|
|
8728
|
-
case "extensions_changed":
|
|
8729
|
-
return normalizeExtensionsChanged(event, base);
|
|
8730
|
-
case "artifact_changed":
|
|
8731
|
-
return normalizeArtifactChanged(event, base);
|
|
8732
|
-
// ── Auth device-flow events (RFC 8628) ─────────────────
|
|
8733
|
-
case "auth_device_flow_started":
|
|
8734
|
-
return normalizeAuthDeviceFlowStarted(event, base);
|
|
8735
|
-
case "auth_device_flow_throttled":
|
|
8736
|
-
return normalizeAuthDeviceFlowThrottled(event, base);
|
|
8737
|
-
case "auth_device_flow_authorized":
|
|
8738
|
-
return normalizeAuthDeviceFlowAuthorized(event, base);
|
|
8739
|
-
case "auth_device_flow_failed":
|
|
8740
|
-
return normalizeAuthDeviceFlowFailed(event, base);
|
|
8741
|
-
case "auth_device_flow_cancelled":
|
|
8742
|
-
return normalizeAuthDeviceFlowCancelled(event, base);
|
|
8743
|
-
default:
|
|
8744
|
-
return normalizeUnrecognizedEvent(event, base);
|
|
8745
|
-
}
|
|
8870
|
+
normalized.push({
|
|
8871
|
+
id,
|
|
8872
|
+
content,
|
|
8873
|
+
status,
|
|
8874
|
+
...priority ? { priority } : {},
|
|
8875
|
+
...blockedBy.length > 0 ? { blockedBy } : {}
|
|
8876
|
+
});
|
|
8877
|
+
});
|
|
8878
|
+
const meta = isRecord2(input["_meta"]) ? input["_meta"] : void 0;
|
|
8879
|
+
const todoPlan = meta && isRecord2(meta["qwenTodoPlan"]) ? meta["qwenTodoPlan"] : void 0;
|
|
8880
|
+
const plan = isRecord2(input["plan"]) ? input["plan"] : void 0;
|
|
8881
|
+
const todoPlanId = getFirstString(todoPlan, ["id"]);
|
|
8882
|
+
const nestedPlanId = getFirstString(plan, ["id"]);
|
|
8883
|
+
const inputPlanId = getFirstString(input, ["planId"]);
|
|
8884
|
+
const rawPlanId = todoPlanId ?? nestedPlanId ?? inputPlanId;
|
|
8885
|
+
if (todoPlan?.["id"] !== void 0 !== !!todoPlanId || plan?.["id"] !== void 0 !== !!nestedPlanId || input["planId"] !== void 0 !== !!inputPlanId) {
|
|
8886
|
+
truncated = true;
|
|
8887
|
+
}
|
|
8888
|
+
const planId = rawPlanId && rawPlanId.length <= MAX_TODO_ID_LENGTH ? rawPlanId : void 0;
|
|
8889
|
+
if (rawPlanId && !planId) truncated = true;
|
|
8890
|
+
const rawRevision = todoPlan?.["revision"] ?? plan?.["revision"] ?? input["revision"];
|
|
8891
|
+
const revision = typeof rawRevision === "number" && Number.isSafeInteger(rawRevision) && rawRevision >= 0 ? rawRevision : void 0;
|
|
8892
|
+
if (rawRevision !== void 0 && revision === void 0) truncated = true;
|
|
8893
|
+
const summary = opts.title ?? opts.toolName ?? opts.toolKind;
|
|
8894
|
+
return {
|
|
8895
|
+
kind: "todo_list",
|
|
8896
|
+
entries: normalized,
|
|
8897
|
+
...includeLegacySummary && summary ? { summary } : {},
|
|
8898
|
+
...truncated ? { truncated: true } : {},
|
|
8899
|
+
...planId ? { planId } : {},
|
|
8900
|
+
...revision !== void 0 ? { revision } : {}
|
|
8901
|
+
};
|
|
8746
8902
|
}
|
|
8747
|
-
__name(
|
|
8748
|
-
function
|
|
8749
|
-
|
|
8750
|
-
{
|
|
8751
|
-
|
|
8752
|
-
|
|
8753
|
-
|
|
8754
|
-
|
|
8755
|
-
|
|
8756
|
-
|
|
8757
|
-
|
|
8903
|
+
__name(detectTodoList, "detectTodoList");
|
|
8904
|
+
function allocateUniqueTodoId(base, authoredIds, usedIds) {
|
|
8905
|
+
for (let attempt = 1; ; attempt += 1) {
|
|
8906
|
+
const suffix = attempt === 1 ? "-s" : `-s${attempt}`;
|
|
8907
|
+
const candidate = `${base.slice(0, MAX_TODO_ID_LENGTH - suffix.length)}${suffix}`;
|
|
8908
|
+
if (!authoredIds.has(candidate) && !usedIds.has(candidate)) {
|
|
8909
|
+
return candidate;
|
|
8910
|
+
}
|
|
8911
|
+
}
|
|
8912
|
+
}
|
|
8913
|
+
__name(allocateUniqueTodoId, "allocateUniqueTodoId");
|
|
8914
|
+
function extractDisplayContentText(content) {
|
|
8915
|
+
if (!Array.isArray(content)) return void 0;
|
|
8916
|
+
let text = "";
|
|
8917
|
+
for (const entry of content) {
|
|
8918
|
+
if (!isRecord2(entry) || entry["type"] !== "content") continue;
|
|
8919
|
+
const body = isRecord2(entry["content"]) ? entry["content"] : void 0;
|
|
8920
|
+
const next = typeof body?.["text"] === "string" ? body["text"] : void 0;
|
|
8921
|
+
if (!next) continue;
|
|
8922
|
+
if (text.length + (text ? 1 : 0) + next.length > MAX_TOOL_RESULT_PREVIEW_LENGTH) {
|
|
8923
|
+
return void 0;
|
|
8758
8924
|
}
|
|
8759
|
-
|
|
8760
|
-
}
|
|
8761
|
-
__name(normalizeUnrecognizedEvent, "normalizeUnrecognizedEvent");
|
|
8762
|
-
function normalizeStateResyncRequired(event, base) {
|
|
8763
|
-
const reason = getString2(event.data, "reason");
|
|
8764
|
-
const lastDeliveredId = numberField(event.data, "lastDeliveredId");
|
|
8765
|
-
const earliestAvailableId = numberField(event.data, "earliestAvailableId");
|
|
8766
|
-
if (!reason || lastDeliveredId === void 0 || earliestAvailableId === void 0) {
|
|
8767
|
-
return fallbackDebug(
|
|
8768
|
-
event,
|
|
8769
|
-
base,
|
|
8770
|
-
"malformed state_resync_required payload"
|
|
8771
|
-
);
|
|
8925
|
+
text += `${text ? "\n" : ""}${next}`;
|
|
8772
8926
|
}
|
|
8773
|
-
return
|
|
8774
|
-
{
|
|
8775
|
-
...base,
|
|
8776
|
-
type: "session.state_resync_required",
|
|
8777
|
-
reason,
|
|
8778
|
-
lastDeliveredId,
|
|
8779
|
-
earliestAvailableId
|
|
8780
|
-
}
|
|
8781
|
-
];
|
|
8927
|
+
return text || void 0;
|
|
8782
8928
|
}
|
|
8783
|
-
__name(
|
|
8784
|
-
function
|
|
8785
|
-
|
|
8786
|
-
const
|
|
8787
|
-
|
|
8788
|
-
|
|
8789
|
-
|
|
8790
|
-
|
|
8791
|
-
|
|
8792
|
-
|
|
8793
|
-
const
|
|
8794
|
-
|
|
8795
|
-
|
|
8796
|
-
|
|
8797
|
-
|
|
8798
|
-
|
|
8799
|
-
|
|
8800
|
-
|
|
8801
|
-
|
|
8802
|
-
|
|
8803
|
-
|
|
8804
|
-
|
|
8805
|
-
|
|
8806
|
-
|
|
8807
|
-
|
|
8808
|
-
|
|
8809
|
-
|
|
8810
|
-
|
|
8811
|
-
|
|
8929
|
+
__name(extractDisplayContentText, "extractDisplayContentText");
|
|
8930
|
+
function detectFileDiff(input, opts = {}) {
|
|
8931
|
+
if (!isRecord2(input)) return void 0;
|
|
8932
|
+
const path = getFirstString(input, [
|
|
8933
|
+
"path",
|
|
8934
|
+
"filePath",
|
|
8935
|
+
"file_path",
|
|
8936
|
+
"absolutePath"
|
|
8937
|
+
]);
|
|
8938
|
+
if (!path) return void 0;
|
|
8939
|
+
const oldText = getFirstString(input, [
|
|
8940
|
+
"oldText",
|
|
8941
|
+
"old_text",
|
|
8942
|
+
"old_string",
|
|
8943
|
+
"old_str",
|
|
8944
|
+
"old_string",
|
|
8945
|
+
"oldString"
|
|
8946
|
+
]);
|
|
8947
|
+
const explicitNewText = getFirstString(input, [
|
|
8948
|
+
"newText",
|
|
8949
|
+
"new_text",
|
|
8950
|
+
"new_string",
|
|
8951
|
+
"new_str",
|
|
8952
|
+
"new_string",
|
|
8953
|
+
"newString"
|
|
8954
|
+
]);
|
|
8955
|
+
const toolNameLower = (opts.toolName ?? "").toLowerCase();
|
|
8956
|
+
const writeIntent = /(?:^|[_-])(write|create|edit|replace|save|update|overwrite|modify|patch|generate)(?:$|[_-])/.test(
|
|
8957
|
+
toolNameLower
|
|
8958
|
+
) || !!oldText;
|
|
8959
|
+
const contentField = explicitNewText === void 0 && writeIntent ? getFirstString(input, ["content"]) : void 0;
|
|
8960
|
+
const newText = explicitNewText ?? contentField;
|
|
8961
|
+
const patch = getFirstString(input, ["patch", "diff", "unified_diff"]);
|
|
8962
|
+
if (!oldText && !newText && !patch) return void 0;
|
|
8963
|
+
return {
|
|
8964
|
+
kind: "file_diff",
|
|
8965
|
+
path,
|
|
8966
|
+
...oldText ? { oldText } : {},
|
|
8967
|
+
...newText ? { newText } : {},
|
|
8968
|
+
...patch ? { patch } : {}
|
|
8969
|
+
};
|
|
8812
8970
|
}
|
|
8813
|
-
__name(
|
|
8814
|
-
function
|
|
8815
|
-
|
|
8816
|
-
const
|
|
8817
|
-
|
|
8818
|
-
|
|
8819
|
-
|
|
8820
|
-
|
|
8821
|
-
|
|
8822
|
-
|
|
8823
|
-
|
|
8824
|
-
|
|
8825
|
-
|
|
8826
|
-
|
|
8827
|
-
|
|
8971
|
+
__name(detectFileDiff, "detectFileDiff");
|
|
8972
|
+
function detectFileRead(input, opts) {
|
|
8973
|
+
if (!isRecord2(input)) return void 0;
|
|
8974
|
+
const path = getFirstString(input, [
|
|
8975
|
+
"path",
|
|
8976
|
+
"filePath",
|
|
8977
|
+
"file_path",
|
|
8978
|
+
"absolutePath"
|
|
8979
|
+
]);
|
|
8980
|
+
if (!path) return void 0;
|
|
8981
|
+
const toolName = opts.toolName ?? getFirstString(input, ["toolName", "name"]);
|
|
8982
|
+
const looksLikeRead = toolName !== void 0 && /read|view|cat/i.test(toolName);
|
|
8983
|
+
const rangeArr = input["lineRange"] ?? input["line_range"] ?? input["range"];
|
|
8984
|
+
let range;
|
|
8985
|
+
if (Array.isArray(rangeArr) && rangeArr.length === 2 && typeof rangeArr[0] === "number" && typeof rangeArr[1] === "number") {
|
|
8986
|
+
range = [rangeArr[0], rangeArr[1]];
|
|
8987
|
+
} else {
|
|
8988
|
+
const offset = input["offset"];
|
|
8989
|
+
const limit = input["limit"];
|
|
8990
|
+
if (typeof offset === "number" && typeof limit === "number" && limit > 0) {
|
|
8991
|
+
range = [offset + 1, offset + limit];
|
|
8828
8992
|
}
|
|
8829
|
-
];
|
|
8830
|
-
}
|
|
8831
|
-
__name(normalizeSessionRewound, "normalizeSessionRewound");
|
|
8832
|
-
function normalizeSessionBranched(event, base) {
|
|
8833
|
-
const sourceSessionId = getString2(event.data, "sourceSessionId");
|
|
8834
|
-
const newSessionId = getString2(event.data, "newSessionId");
|
|
8835
|
-
const displayName = getString2(event.data, "displayName");
|
|
8836
|
-
if (!sourceSessionId || !newSessionId || !displayName) {
|
|
8837
|
-
return fallbackDebug(event, base, "malformed session_branched payload");
|
|
8838
8993
|
}
|
|
8839
|
-
return
|
|
8840
|
-
|
|
8841
|
-
|
|
8842
|
-
|
|
8843
|
-
|
|
8844
|
-
|
|
8845
|
-
displayName
|
|
8846
|
-
}
|
|
8847
|
-
];
|
|
8994
|
+
if (!looksLikeRead && !range) return void 0;
|
|
8995
|
+
return {
|
|
8996
|
+
kind: "file_read",
|
|
8997
|
+
path,
|
|
8998
|
+
...range ? { range } : {}
|
|
8999
|
+
};
|
|
8848
9000
|
}
|
|
8849
|
-
__name(
|
|
8850
|
-
function
|
|
8851
|
-
|
|
8852
|
-
const
|
|
8853
|
-
|
|
8854
|
-
if (
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
8858
|
-
|
|
8859
|
-
|
|
8860
|
-
|
|
8861
|
-
sessionId,
|
|
8862
|
-
suggestion,
|
|
8863
|
-
promptId
|
|
8864
|
-
}
|
|
8865
|
-
];
|
|
9001
|
+
__name(detectFileRead, "detectFileRead");
|
|
9002
|
+
function detectWebFetch(input) {
|
|
9003
|
+
if (!isRecord2(input)) return void 0;
|
|
9004
|
+
const url = getFirstString(input, ["url", "uri", "href"]);
|
|
9005
|
+
if (!url) return void 0;
|
|
9006
|
+
if (!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(url)) return void 0;
|
|
9007
|
+
const method = getFirstString(input, ["method", "httpMethod"]);
|
|
9008
|
+
return {
|
|
9009
|
+
kind: "web_fetch",
|
|
9010
|
+
url,
|
|
9011
|
+
...method ? { method } : {}
|
|
9012
|
+
};
|
|
8866
9013
|
}
|
|
8867
|
-
__name(
|
|
8868
|
-
function
|
|
8869
|
-
|
|
8870
|
-
|
|
9014
|
+
__name(detectWebFetch, "detectWebFetch");
|
|
9015
|
+
function detectMcpInvocation(input, opts) {
|
|
9016
|
+
const toolName = opts.toolName ?? (isRecord2(input) ? getFirstString(input, ["toolName", "name"]) : void 0);
|
|
9017
|
+
if (!toolName || !toolName.startsWith("mcp__")) return void 0;
|
|
9018
|
+
const rest = toolName.slice("mcp__".length);
|
|
9019
|
+
const sep = rest.indexOf("__");
|
|
9020
|
+
if (sep <= 0) return void 0;
|
|
9021
|
+
const serverId = rest.slice(0, sep);
|
|
9022
|
+
const toolPart = rest.slice(sep + 2);
|
|
9023
|
+
let argsSummary;
|
|
9024
|
+
if (isRecord2(input)) {
|
|
9025
|
+
const args = input["arguments"] ?? input["args"] ?? input;
|
|
9026
|
+
if (isRecord2(args)) {
|
|
9027
|
+
const firstEntry = Object.entries(args).filter(([key]) => key !== "name" && key !== "toolName").slice(0, 1).map(([key, value]) => {
|
|
9028
|
+
const v = isSensitiveKey(key) ? "[redacted]" : typeof value === "string" ? value : stringifyCompactRedactedJson(value);
|
|
9029
|
+
const trimmed = v.length > 60 ? `${v.slice(0, 60)}\u2026` : v;
|
|
9030
|
+
return `${key}=${trimmed}`;
|
|
9031
|
+
})[0];
|
|
9032
|
+
if (firstEntry) argsSummary = firstEntry;
|
|
9033
|
+
}
|
|
8871
9034
|
}
|
|
8872
|
-
|
|
8873
|
-
|
|
8874
|
-
|
|
8875
|
-
|
|
8876
|
-
|
|
8877
|
-
|
|
8878
|
-
|
|
8879
|
-
|
|
8880
|
-
|
|
8881
|
-
|
|
8882
|
-
|
|
8883
|
-
|
|
8884
|
-
return
|
|
9035
|
+
return {
|
|
9036
|
+
kind: "mcp_invocation",
|
|
9037
|
+
serverId,
|
|
9038
|
+
toolName: toolPart,
|
|
9039
|
+
...argsSummary ? { argsSummary } : {}
|
|
9040
|
+
};
|
|
9041
|
+
}
|
|
9042
|
+
__name(detectMcpInvocation, "detectMcpInvocation");
|
|
9043
|
+
function stringifyCompactRedactedJson(value) {
|
|
9044
|
+
try {
|
|
9045
|
+
return JSON.stringify(redactSensitiveFields(value)) ?? String(value);
|
|
9046
|
+
} catch {
|
|
9047
|
+
return String(value);
|
|
8885
9048
|
}
|
|
8886
|
-
|
|
8887
|
-
|
|
8888
|
-
|
|
8889
|
-
|
|
9049
|
+
}
|
|
9050
|
+
__name(stringifyCompactRedactedJson, "stringifyCompactRedactedJson");
|
|
9051
|
+
function extractAskUserQuestions(input) {
|
|
9052
|
+
if (!isRecord2(input) || !Array.isArray(input["questions"])) return [];
|
|
9053
|
+
return input["questions"].filter(isRecord2).map((question) => {
|
|
9054
|
+
const header = getFirstString(question, ["header", "title", "label"]);
|
|
9055
|
+
const prompt = getFirstString(question, ["question", "prompt", "text"]) ?? "Question";
|
|
9056
|
+
const options = Array.isArray(question["options"]) ? question["options"].filter(isRecord2).map(normalizeQuestionOption) : [];
|
|
8890
9057
|
return {
|
|
8891
|
-
...
|
|
8892
|
-
|
|
8893
|
-
|
|
8894
|
-
|
|
8895
|
-
data: {
|
|
8896
|
-
...data,
|
|
8897
|
-
messages: [text],
|
|
8898
|
-
...Array.isArray(items) ? { items: item !== void 0 ? [item] : [] } : {},
|
|
8899
|
-
...typeof messageId === "string" ? { messageIds: [messageId] } : Array.isArray(data["messageIds"]) ? { messageIds: [] } : {}
|
|
8900
|
-
}
|
|
9058
|
+
...header ? { header } : {},
|
|
9059
|
+
question: prompt,
|
|
9060
|
+
options,
|
|
9061
|
+
raw: question
|
|
8901
9062
|
};
|
|
8902
9063
|
});
|
|
8903
9064
|
}
|
|
8904
|
-
__name(
|
|
8905
|
-
function
|
|
8906
|
-
const
|
|
8907
|
-
const
|
|
8908
|
-
const branchRecordId = extractBranchRecordId(event);
|
|
9065
|
+
__name(extractAskUserQuestions, "extractAskUserQuestions");
|
|
9066
|
+
function normalizeQuestionOption(option) {
|
|
9067
|
+
const label = getFirstString(option, ["label", "title", "value"]) ?? "Option";
|
|
9068
|
+
const description = getFirstString(option, ["description", "detail", "text"]);
|
|
8909
9069
|
return {
|
|
8910
|
-
|
|
8911
|
-
...
|
|
8912
|
-
|
|
8913
|
-
...event.promptId ? { promptId: event.promptId } : {},
|
|
8914
|
-
...branchRecordId ? { branchRecordId } : {},
|
|
8915
|
-
...event.originatorClientId ? { originatorClientId: event.originatorClientId } : {},
|
|
8916
|
-
...opts.includeRawEvent ? { rawEvent: { ...event, data: redactSensitiveFields(event.data) } } : {}
|
|
9070
|
+
label,
|
|
9071
|
+
...description ? { description } : {},
|
|
9072
|
+
raw: option
|
|
8917
9073
|
};
|
|
8918
9074
|
}
|
|
8919
|
-
__name(
|
|
8920
|
-
function
|
|
8921
|
-
|
|
8922
|
-
const
|
|
8923
|
-
|
|
8924
|
-
|
|
8925
|
-
|
|
8926
|
-
|
|
8927
|
-
|
|
8928
|
-
|
|
8929
|
-
|
|
8930
|
-
|
|
8931
|
-
const envelopeMeta = event._meta;
|
|
8932
|
-
if (isRecord2(envelopeMeta)) {
|
|
8933
|
-
const ts = envelopeMeta["serverTimestamp"];
|
|
8934
|
-
if (typeof ts === "number" && Number.isFinite(ts)) return ts;
|
|
8935
|
-
}
|
|
8936
|
-
if (isRecord2(event.data)) {
|
|
8937
|
-
const dataMeta = event.data["_meta"];
|
|
8938
|
-
const update = event.data["update"];
|
|
8939
|
-
const updateMeta = isRecord2(update) ? update["_meta"] : void 0;
|
|
8940
|
-
if (isRecord2(dataMeta)) {
|
|
8941
|
-
const ts = dataMeta["serverTimestamp"];
|
|
8942
|
-
if (typeof ts === "number" && Number.isFinite(ts)) return ts;
|
|
8943
|
-
}
|
|
8944
|
-
if (isRecord2(updateMeta)) {
|
|
8945
|
-
const serverTs = updateMeta["serverTimestamp"];
|
|
8946
|
-
if (typeof serverTs === "number" && Number.isFinite(serverTs)) {
|
|
8947
|
-
return serverTs;
|
|
8948
|
-
}
|
|
8949
|
-
}
|
|
8950
|
-
const timestampCandidates = [
|
|
8951
|
-
isRecord2(updateMeta) ? updateMeta["timestamp"] : void 0,
|
|
8952
|
-
isRecord2(update) ? update["timestamp"] : void 0,
|
|
8953
|
-
isRecord2(dataMeta) ? dataMeta["timestamp"] : void 0,
|
|
8954
|
-
event.data["timestamp"]
|
|
8955
|
-
];
|
|
8956
|
-
for (const candidate of timestampCandidates) {
|
|
8957
|
-
const timestamp = parseTimestamp(candidate);
|
|
8958
|
-
if (timestamp !== void 0) return timestamp;
|
|
8959
|
-
}
|
|
9075
|
+
__name(normalizeQuestionOption, "normalizeQuestionOption");
|
|
9076
|
+
function collectPreviewRows(input) {
|
|
9077
|
+
const rows = [];
|
|
9078
|
+
const candidates = [
|
|
9079
|
+
["Path", ["path", "filePath", "file_path", "absolutePath"]],
|
|
9080
|
+
["Cwd", ["cwd", "directory", "workingDirectory"]],
|
|
9081
|
+
["Query", ["query", "pattern", "search"]],
|
|
9082
|
+
["Note", ["description", "reason"]]
|
|
9083
|
+
];
|
|
9084
|
+
for (const [label, keys] of candidates) {
|
|
9085
|
+
const value = getFirstString(input, keys);
|
|
9086
|
+
if (value) rows.push({ label, value });
|
|
8960
9087
|
}
|
|
8961
|
-
|
|
8962
|
-
|
|
8963
|
-
|
|
8964
|
-
|
|
8965
|
-
|
|
8966
|
-
|
|
8967
|
-
|
|
8968
|
-
|
|
8969
|
-
return Number.isFinite(numeric) ? numeric : void 0;
|
|
9088
|
+
if (rows.length > 0) return rows;
|
|
9089
|
+
for (const [key, value] of Object.entries(input).slice(0, 4)) {
|
|
9090
|
+
if (value === void 0 || value === null || Array.isArray(value)) continue;
|
|
9091
|
+
if (isRecord2(value)) continue;
|
|
9092
|
+
rows.push({
|
|
9093
|
+
label: key,
|
|
9094
|
+
value: isSensitiveKey(key) ? "[redacted]" : capDetails(stringifyRedactedJson(value))
|
|
9095
|
+
});
|
|
8970
9096
|
}
|
|
8971
|
-
|
|
8972
|
-
return Number.isFinite(parsed) ? parsed : void 0;
|
|
9097
|
+
return rows;
|
|
8973
9098
|
}
|
|
8974
|
-
__name(
|
|
8975
|
-
|
|
8976
|
-
|
|
9099
|
+
__name(collectPreviewRows, "collectPreviewRows");
|
|
9100
|
+
var MAX_TABULAR_ROWS = 50;
|
|
9101
|
+
var MAX_SEARCH_TOP_RESULTS = 5;
|
|
9102
|
+
function detectSubagentDelegation(input, opts) {
|
|
9103
|
+
const toolName = opts.toolName ?? "";
|
|
9104
|
+
const looksLikeDelegate = /^task$/i.test(toolName) || /(?:^|_)(?:delegate|subagent|spawn[_-]?task)$/i.test(toolName) || /agent/i.test(opts.toolKind ?? "");
|
|
9105
|
+
if (!looksLikeDelegate) return void 0;
|
|
9106
|
+
if (!isRecord2(input)) return void 0;
|
|
9107
|
+
const agentName = getFirstString(input, [
|
|
9108
|
+
"subagent_type",
|
|
9109
|
+
"agent",
|
|
9110
|
+
"agentName",
|
|
9111
|
+
"agent_name",
|
|
9112
|
+
"subagent"
|
|
9113
|
+
]);
|
|
9114
|
+
const task = getFirstString(input, [
|
|
9115
|
+
"prompt",
|
|
9116
|
+
"task",
|
|
9117
|
+
"description",
|
|
9118
|
+
"instruction",
|
|
9119
|
+
"query"
|
|
9120
|
+
]);
|
|
9121
|
+
if (!agentName && !task) return void 0;
|
|
9122
|
+
const parentDelegationId = getFirstString(input, [
|
|
9123
|
+
"parentDelegationId",
|
|
9124
|
+
"parent_delegation_id",
|
|
9125
|
+
"parent_id"
|
|
9126
|
+
]);
|
|
9127
|
+
return {
|
|
9128
|
+
kind: "subagent_delegation",
|
|
9129
|
+
agentName: agentName ?? "subagent",
|
|
9130
|
+
task: task ?? "(no task description)",
|
|
9131
|
+
...parentDelegationId ? { parentDelegationId } : {}
|
|
9132
|
+
};
|
|
8977
9133
|
}
|
|
8978
|
-
__name(
|
|
8979
|
-
function
|
|
8980
|
-
|
|
8981
|
-
|
|
8982
|
-
|
|
8983
|
-
|
|
8984
|
-
|
|
8985
|
-
|
|
8986
|
-
|
|
8987
|
-
|
|
9134
|
+
__name(detectSubagentDelegation, "detectSubagentDelegation");
|
|
9135
|
+
function detectSearch(input, opts) {
|
|
9136
|
+
if (!isRecord2(input)) return void 0;
|
|
9137
|
+
const query = getFirstString(input, ["query", "pattern", "search", "q"]);
|
|
9138
|
+
if (!query) return void 0;
|
|
9139
|
+
const toolName = opts.toolName ?? "";
|
|
9140
|
+
const looksLikeSearch = /(grep|search|find|ripgrep|rg|glob|lookup)/i.test(toolName) || typeof input["resultCount"] === "number" || Array.isArray(input["results"]) || Array.isArray(input["matches"]);
|
|
9141
|
+
if (!looksLikeSearch) return void 0;
|
|
9142
|
+
const resultCount = typeof input["resultCount"] === "number" ? input["resultCount"] : typeof input["total"] === "number" ? input["total"] : Array.isArray(input["results"]) ? input["results"].length : Array.isArray(input["matches"]) ? input["matches"].length : void 0;
|
|
9143
|
+
let top;
|
|
9144
|
+
const rawResults = input["results"] ?? input["matches"];
|
|
9145
|
+
if (Array.isArray(rawResults)) {
|
|
9146
|
+
top = rawResults.slice(0, MAX_SEARCH_TOP_RESULTS).map((item) => {
|
|
9147
|
+
if (typeof item === "string") return item;
|
|
9148
|
+
if (isRecord2(item)) {
|
|
9149
|
+
return getFirstString(item, ["path", "file", "name", "title", "text"]) ?? stringifyJson(item).slice(0, 120);
|
|
8988
9150
|
}
|
|
8989
|
-
|
|
9151
|
+
return String(item);
|
|
9152
|
+
}).filter(Boolean);
|
|
9153
|
+
if (top.length === 0) top = void 0;
|
|
8990
9154
|
}
|
|
8991
|
-
|
|
8992
|
-
|
|
8993
|
-
|
|
8994
|
-
|
|
8995
|
-
|
|
8996
|
-
|
|
8997
|
-
|
|
8998
|
-
|
|
8999
|
-
|
|
9000
|
-
|
|
9001
|
-
|
|
9002
|
-
|
|
9003
|
-
|
|
9004
|
-
|
|
9005
|
-
|
|
9006
|
-
|
|
9007
|
-
|
|
9008
|
-
|
|
9009
|
-
|
|
9010
|
-
|
|
9011
|
-
|
|
9012
|
-
|
|
9013
|
-
|
|
9014
|
-
|
|
9015
|
-
|
|
9016
|
-
|
|
9017
|
-
|
|
9018
|
-
|
|
9019
|
-
|
|
9020
|
-
|
|
9021
|
-
|
|
9022
|
-
|
|
9023
|
-
|
|
9024
|
-
|
|
9025
|
-
|
|
9026
|
-
|
|
9027
|
-
|
|
9028
|
-
|
|
9029
|
-
|
|
9030
|
-
|
|
9031
|
-
|
|
9032
|
-
|
|
9033
|
-
|
|
9034
|
-
|
|
9035
|
-
|
|
9036
|
-
|
|
9037
|
-
|
|
9038
|
-
|
|
9039
|
-
|
|
9040
|
-
|
|
9041
|
-
|
|
9042
|
-
|
|
9043
|
-
|
|
9044
|
-
|
|
9045
|
-
|
|
9046
|
-
|
|
9047
|
-
|
|
9048
|
-
|
|
9049
|
-
|
|
9050
|
-
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
|
|
9054
|
-
|
|
9055
|
-
|
|
9056
|
-
|
|
9057
|
-
|
|
9058
|
-
|
|
9059
|
-
|
|
9060
|
-
|
|
9061
|
-
|
|
9155
|
+
return {
|
|
9156
|
+
kind: "search",
|
|
9157
|
+
query,
|
|
9158
|
+
...resultCount !== void 0 ? { resultCount } : {},
|
|
9159
|
+
...top ? { top } : {}
|
|
9160
|
+
};
|
|
9161
|
+
}
|
|
9162
|
+
__name(detectSearch, "detectSearch");
|
|
9163
|
+
function detectImageGeneration(input, opts) {
|
|
9164
|
+
const toolName = opts.toolName ?? "";
|
|
9165
|
+
const looksLikeImageGen = /(image[_-]?gen|generate[_-]?image|diffusion|dalle|imagen|flux|stable[_-]?diffusion|midjourney|sora)/i.test(
|
|
9166
|
+
toolName
|
|
9167
|
+
);
|
|
9168
|
+
if (!looksLikeImageGen) return void 0;
|
|
9169
|
+
if (!isRecord2(input)) return void 0;
|
|
9170
|
+
const prompt = getFirstString(input, ["prompt", "description", "query"]);
|
|
9171
|
+
if (!prompt) return void 0;
|
|
9172
|
+
const thumbnailUrl = getFirstString(input, [
|
|
9173
|
+
"thumbnailUrl",
|
|
9174
|
+
"thumbnail",
|
|
9175
|
+
"url",
|
|
9176
|
+
"imageUrl",
|
|
9177
|
+
"preview"
|
|
9178
|
+
]);
|
|
9179
|
+
const model = getFirstString(input, ["model", "modelId", "model_name"]);
|
|
9180
|
+
return {
|
|
9181
|
+
kind: "image_generation",
|
|
9182
|
+
prompt,
|
|
9183
|
+
...thumbnailUrl ? { thumbnailUrl } : {},
|
|
9184
|
+
...model ? { model } : {}
|
|
9185
|
+
};
|
|
9186
|
+
}
|
|
9187
|
+
__name(detectImageGeneration, "detectImageGeneration");
|
|
9188
|
+
function detectCodeBlock(input, opts) {
|
|
9189
|
+
if (!isRecord2(input)) return void 0;
|
|
9190
|
+
const code = getFirstString(input, ["code", "snippet", "source"]);
|
|
9191
|
+
if (!code) return void 0;
|
|
9192
|
+
const language = getFirstString(input, [
|
|
9193
|
+
"language",
|
|
9194
|
+
"lang",
|
|
9195
|
+
"codeLanguage",
|
|
9196
|
+
"syntax"
|
|
9197
|
+
]);
|
|
9198
|
+
const toolName = opts.toolName ?? "";
|
|
9199
|
+
const codeTool = /(repl|format|prettier|eslint|tsc|compile|exec[_-]?code)/i.test(toolName);
|
|
9200
|
+
if (!language && !codeTool) return void 0;
|
|
9201
|
+
const origin = getFirstString(input, ["origin", "source_location", "path"]);
|
|
9202
|
+
return {
|
|
9203
|
+
kind: "code_block",
|
|
9204
|
+
code,
|
|
9205
|
+
...language ? { language } : {},
|
|
9206
|
+
...origin ? { origin } : {}
|
|
9207
|
+
};
|
|
9208
|
+
}
|
|
9209
|
+
__name(detectCodeBlock, "detectCodeBlock");
|
|
9210
|
+
function detectTabular(input) {
|
|
9211
|
+
if (!isRecord2(input)) return void 0;
|
|
9212
|
+
const explicitColumns = input["columns"];
|
|
9213
|
+
const explicitRows = input["rows"];
|
|
9214
|
+
if (Array.isArray(explicitColumns) && Array.isArray(explicitRows)) {
|
|
9215
|
+
const columns = explicitColumns.filter((c) => typeof c === "string").slice(0, 30);
|
|
9216
|
+
if (columns.length === 0) return void 0;
|
|
9217
|
+
const rows = explicitRows.slice(0, MAX_TABULAR_ROWS).map(
|
|
9218
|
+
(row) => Array.isArray(row) ? row.map(
|
|
9219
|
+
(cell) => typeof cell === "string" ? cell : stringifyJson(cell).slice(0, 80)
|
|
9220
|
+
) : []
|
|
9221
|
+
);
|
|
9222
|
+
return {
|
|
9223
|
+
kind: "tabular",
|
|
9224
|
+
columns,
|
|
9225
|
+
rows,
|
|
9226
|
+
...explicitRows.length > rows.length ? { totalRows: explicitRows.length } : {}
|
|
9227
|
+
};
|
|
9228
|
+
}
|
|
9229
|
+
const data = input["data"] ?? input["records"];
|
|
9230
|
+
if (Array.isArray(data) && data.length > 0 && isRecord2(data[0])) {
|
|
9231
|
+
const columns = Object.keys(data[0]).slice(
|
|
9232
|
+
0,
|
|
9233
|
+
30
|
|
9234
|
+
);
|
|
9235
|
+
if (columns.length === 0) return void 0;
|
|
9236
|
+
const rows = data.slice(0, MAX_TABULAR_ROWS).map((row) => {
|
|
9237
|
+
const r = row;
|
|
9238
|
+
return columns.map((col) => {
|
|
9239
|
+
const v = r[col];
|
|
9240
|
+
return typeof v === "string" ? v : stringifyJson(v).slice(0, 80);
|
|
9241
|
+
});
|
|
9242
|
+
});
|
|
9243
|
+
return {
|
|
9244
|
+
kind: "tabular",
|
|
9245
|
+
columns,
|
|
9246
|
+
rows,
|
|
9247
|
+
...data.length > rows.length ? { totalRows: data.length } : {}
|
|
9248
|
+
};
|
|
9249
|
+
}
|
|
9250
|
+
return void 0;
|
|
9251
|
+
}
|
|
9252
|
+
__name(detectTabular, "detectTabular");
|
|
9253
|
+
|
|
9254
|
+
// packages/sdk-typescript/src/daemon/ui/normalizer.ts
|
|
9255
|
+
var DAEMON_ERROR_KIND_SET = new Set(DAEMON_ERROR_KINDS);
|
|
9256
|
+
var DEVICE_FLOW_PROVIDER_SET = /* @__PURE__ */ new Set(["qwen", "qwen-oauth"]);
|
|
9257
|
+
var MCP_RESTART_REFUSED_REASONS2 = /* @__PURE__ */ new Set([
|
|
9258
|
+
"in_flight",
|
|
9259
|
+
"disabled",
|
|
9260
|
+
"budget_would_exceed",
|
|
9261
|
+
"authentication_required"
|
|
9262
|
+
]);
|
|
9263
|
+
var MALFORMED_MEMORY_CHANGED = "malformed memory_changed payload";
|
|
9264
|
+
var SESSION_RECORDING_DEGRADED_MESSAGE = "Session recording stopped after a write failure. New messages for the affected session will not be saved. Check disk space and permissions, then start a new session to resume recording.";
|
|
9265
|
+
var ATTACHMENT_UNAVAILABLE_TEXT = "[Attachment is no longer available]";
|
|
9266
|
+
function normalizeDaemonEvent(event, opts = {}) {
|
|
9267
|
+
const base = createBase(event, opts);
|
|
9268
|
+
switch (event.type) {
|
|
9269
|
+
case "session_update":
|
|
9270
|
+
return normalizeSessionUpdate(event, base, opts);
|
|
9271
|
+
case "shell_output": {
|
|
9272
|
+
const text = getOutputText(event.data);
|
|
9273
|
+
const stream = getShellStream(event.data);
|
|
9274
|
+
const source = getSource(event.data);
|
|
9062
9275
|
return text ? [
|
|
9063
9276
|
{
|
|
9064
9277
|
...base,
|
|
9065
|
-
type: "user.
|
|
9278
|
+
type: source === "user-shell" ? "user.shell.output" : "shell.output",
|
|
9066
9279
|
text,
|
|
9067
|
-
...
|
|
9280
|
+
...stream ? { stream } : {}
|
|
9068
9281
|
}
|
|
9069
9282
|
] : [];
|
|
9070
9283
|
}
|
|
9071
|
-
case "
|
|
9072
|
-
|
|
9073
|
-
|
|
9074
|
-
|
|
9075
|
-
|
|
9076
|
-
|
|
9077
|
-
|
|
9284
|
+
case "permission_request":
|
|
9285
|
+
return normalizePermissionRequest(event, base);
|
|
9286
|
+
case "permission_resolved":
|
|
9287
|
+
case "permission_already_resolved":
|
|
9288
|
+
return normalizePermissionResolved(event, base);
|
|
9289
|
+
case "model_switched":
|
|
9290
|
+
return [
|
|
9291
|
+
{
|
|
9078
9292
|
...base,
|
|
9079
|
-
type: "
|
|
9080
|
-
|
|
9081
|
-
|
|
9082
|
-
|
|
9083
|
-
|
|
9084
|
-
|
|
9085
|
-
|
|
9086
|
-
if (usage) {
|
|
9087
|
-
events.push({
|
|
9293
|
+
type: "model.changed",
|
|
9294
|
+
modelId: getString2(event.data, "modelId") ?? "unknown"
|
|
9295
|
+
}
|
|
9296
|
+
];
|
|
9297
|
+
case "model_switch_failed":
|
|
9298
|
+
return [
|
|
9299
|
+
{
|
|
9088
9300
|
...base,
|
|
9089
|
-
type: "
|
|
9090
|
-
|
|
9091
|
-
|
|
9092
|
-
}
|
|
9093
|
-
|
|
9094
|
-
|
|
9301
|
+
type: "error",
|
|
9302
|
+
recoverable: true,
|
|
9303
|
+
text: getString2(event.data, "error") ?? "Model switch failed (no details available)"
|
|
9304
|
+
}
|
|
9305
|
+
];
|
|
9306
|
+
case "session_died": {
|
|
9307
|
+
const errorKind = asDaemonErrorKind(getString2(event.data, "errorKind"));
|
|
9308
|
+
return [
|
|
9309
|
+
{
|
|
9310
|
+
...base,
|
|
9311
|
+
type: "error",
|
|
9312
|
+
recoverable: false,
|
|
9313
|
+
...errorKind ? { errorKind } : {},
|
|
9314
|
+
text: getString2(event.data, "reason") ?? "Session died (no details available)"
|
|
9315
|
+
}
|
|
9316
|
+
];
|
|
9095
9317
|
}
|
|
9096
|
-
case "
|
|
9097
|
-
const text = getTextContent(update["content"]);
|
|
9098
|
-
if (!text) return [];
|
|
9099
|
-
const parentToolCallId = extractParentToolCallId(update);
|
|
9100
|
-
const meta = extractUpdateMeta(update);
|
|
9318
|
+
case "session_closed":
|
|
9101
9319
|
return [
|
|
9102
9320
|
{
|
|
9103
9321
|
...base,
|
|
9104
|
-
type: "
|
|
9105
|
-
text,
|
|
9106
|
-
|
|
9107
|
-
|
|
9322
|
+
type: "status",
|
|
9323
|
+
text: `Session closed: ${getString2(event.data, "reason") ?? "closed"}`
|
|
9324
|
+
}
|
|
9325
|
+
];
|
|
9326
|
+
case "session_recording_degraded": {
|
|
9327
|
+
const sessionId = getString2(event.data, "sessionId");
|
|
9328
|
+
if (!sessionId || getString2(event.data, "reason") !== "write_failed") {
|
|
9329
|
+
return fallbackDebug(event, base, "malformed recording state");
|
|
9330
|
+
}
|
|
9331
|
+
return [
|
|
9332
|
+
{
|
|
9333
|
+
...base,
|
|
9334
|
+
type: "error",
|
|
9335
|
+
recoverable: true,
|
|
9336
|
+
code: "session_recording_degraded",
|
|
9337
|
+
text: SESSION_RECORDING_DEGRADED_MESSAGE
|
|
9108
9338
|
}
|
|
9109
9339
|
];
|
|
9110
9340
|
}
|
|
9111
|
-
case "
|
|
9112
|
-
|
|
9113
|
-
|
|
9114
|
-
if (getString2(update, "status") === "in_progress" && getString2(update, "kind") === void 0 && meta?.["shellProgress"] !== void 0) {
|
|
9115
|
-
return [];
|
|
9341
|
+
case "session_snapshot": {
|
|
9342
|
+
if (!isRecord2(event.data) || !getString2(event.data, "sessionId")) {
|
|
9343
|
+
return fallbackDebug(event, base, "malformed recording snapshot");
|
|
9116
9344
|
}
|
|
9117
|
-
|
|
9345
|
+
const recordingDegraded = event.data["recordingDegraded"];
|
|
9346
|
+
if (recordingDegraded !== void 0 && typeof recordingDegraded !== "boolean") {
|
|
9347
|
+
return fallbackDebug(event, base, "malformed recording snapshot");
|
|
9348
|
+
}
|
|
9349
|
+
if (recordingDegraded === true) {
|
|
9350
|
+
return [
|
|
9351
|
+
{
|
|
9352
|
+
...base,
|
|
9353
|
+
type: "error",
|
|
9354
|
+
recoverable: true,
|
|
9355
|
+
code: "session_recording_degraded",
|
|
9356
|
+
text: SESSION_RECORDING_DEGRADED_MESSAGE
|
|
9357
|
+
}
|
|
9358
|
+
];
|
|
9359
|
+
}
|
|
9360
|
+
return [];
|
|
9118
9361
|
}
|
|
9119
|
-
case "
|
|
9120
|
-
|
|
9121
|
-
const text = getOutputText(update);
|
|
9122
|
-
const stream = getShellStream(update) ?? getShellStream(event.data);
|
|
9123
|
-
const source = getSource(update) ?? getSource(event.data);
|
|
9124
|
-
return text ? [
|
|
9362
|
+
case "client_evicted":
|
|
9363
|
+
return [
|
|
9125
9364
|
{
|
|
9126
9365
|
...base,
|
|
9127
|
-
type:
|
|
9128
|
-
|
|
9129
|
-
|
|
9366
|
+
type: "error",
|
|
9367
|
+
recoverable: true,
|
|
9368
|
+
text: getString2(event.data, "reason") ?? "SSE client evicted (no details available)"
|
|
9130
9369
|
}
|
|
9131
|
-
]
|
|
9370
|
+
];
|
|
9371
|
+
case "slow_client_warning":
|
|
9372
|
+
return [
|
|
9373
|
+
{
|
|
9374
|
+
...base,
|
|
9375
|
+
type: "status",
|
|
9376
|
+
text: "SSE stream is lagging"
|
|
9377
|
+
}
|
|
9378
|
+
];
|
|
9379
|
+
case "stream_error": {
|
|
9380
|
+
const errorKind = asDaemonErrorKind(getString2(event.data, "errorKind"));
|
|
9381
|
+
return [
|
|
9382
|
+
{
|
|
9383
|
+
...base,
|
|
9384
|
+
type: "error",
|
|
9385
|
+
recoverable: true,
|
|
9386
|
+
...errorKind ? { errorKind } : {},
|
|
9387
|
+
text: getString2(event.data, "error") ?? "SSE stream error (no details available)"
|
|
9388
|
+
}
|
|
9389
|
+
];
|
|
9132
9390
|
}
|
|
9133
|
-
case "
|
|
9134
|
-
const
|
|
9135
|
-
const
|
|
9391
|
+
case "turn_error": {
|
|
9392
|
+
const code = getString2(event.data, "code");
|
|
9393
|
+
const errorKind = asDaemonErrorKind(getString2(event.data, "errorKind"));
|
|
9394
|
+
const promptId = getString2(event.data, "promptId");
|
|
9136
9395
|
return [
|
|
9137
9396
|
{
|
|
9138
9397
|
...base,
|
|
9139
|
-
type: "
|
|
9140
|
-
|
|
9141
|
-
|
|
9398
|
+
type: "error",
|
|
9399
|
+
source: "turn_error",
|
|
9400
|
+
recoverable: true,
|
|
9401
|
+
...code ? { code } : {},
|
|
9402
|
+
...errorKind ? { errorKind } : {},
|
|
9403
|
+
...promptId ? { promptId } : {},
|
|
9404
|
+
text: getString2(event.data, "message") ?? "Prompt failed (no details available)"
|
|
9142
9405
|
}
|
|
9143
9406
|
];
|
|
9144
9407
|
}
|
|
9145
|
-
case "
|
|
9146
|
-
return
|
|
9147
|
-
case "
|
|
9148
|
-
|
|
9408
|
+
case "state_resync_required":
|
|
9409
|
+
return normalizeStateResyncRequired(event, base);
|
|
9410
|
+
case "history_truncated":
|
|
9411
|
+
return normalizeHistoryTruncated(event, base);
|
|
9412
|
+
case "session_rewound":
|
|
9413
|
+
return normalizeSessionRewound(event, base);
|
|
9414
|
+
case "session_branched":
|
|
9415
|
+
return normalizeSessionBranched(event, base);
|
|
9416
|
+
case "prompt_cancelled": {
|
|
9417
|
+
const reason = stringField(event.data, "reason");
|
|
9418
|
+
return [
|
|
9419
|
+
{ ...base, type: "prompt.cancelled", ...reason ? { reason } : {} }
|
|
9420
|
+
];
|
|
9421
|
+
}
|
|
9422
|
+
case "followup_suggestion":
|
|
9423
|
+
return normalizeFollowupSuggestion(event, base);
|
|
9424
|
+
case "mid_turn_message_injected":
|
|
9425
|
+
return normalizeMidTurnMessageInjected(event, base);
|
|
9426
|
+
case "pending_prompt_added":
|
|
9427
|
+
case "pending_prompt_started":
|
|
9428
|
+
case "pending_prompt_completed":
|
|
9149
9429
|
return [];
|
|
9150
|
-
|
|
9430
|
+
case "user_shell_command": {
|
|
9431
|
+
const command = getString2(event.data, "command");
|
|
9432
|
+
const cwd = getString2(event.data, "cwd");
|
|
9433
|
+
return command ? [
|
|
9434
|
+
{
|
|
9435
|
+
...base,
|
|
9436
|
+
type: "user.shell.command",
|
|
9437
|
+
command,
|
|
9438
|
+
...cwd ? { cwd } : {}
|
|
9439
|
+
},
|
|
9440
|
+
{ ...base, type: "user.text.delta", text: `$ ${command}` }
|
|
9441
|
+
] : [];
|
|
9442
|
+
}
|
|
9443
|
+
case "user_shell_result": {
|
|
9444
|
+
const exitCode = numberField(event.data, "exitCode");
|
|
9445
|
+
const aborted = isRecord2(event.data) && event.data["aborted"] === true;
|
|
9446
|
+
const text = aborted ? "Shell command was aborted" : `Shell command exited with code ${exitCode ?? "unknown"}`;
|
|
9447
|
+
return [{ ...base, type: "status", text }];
|
|
9448
|
+
}
|
|
9449
|
+
case "replay_complete": {
|
|
9450
|
+
const replayedCount = numberField(event.data, "replayedCount") ?? 0;
|
|
9451
|
+
const lastReplayedEventId = numberField(event.data, "lastReplayedEventId") ?? numberField(event.data, "lastEventId");
|
|
9151
9452
|
return [
|
|
9152
9453
|
{
|
|
9153
9454
|
...base,
|
|
9154
|
-
type: "
|
|
9155
|
-
|
|
9156
|
-
|
|
9157
|
-
// not a string. That is a broken frame, not a kind from a newer
|
|
9158
|
-
// daemon — classifying it as unrecognized would hide the only
|
|
9159
|
-
// diagnostic a malformed `session_update` produces. A whitespace-only
|
|
9160
|
-
// discriminator is truthy but no more usable than an empty one, so
|
|
9161
|
-
// apply the same `trim()` convention `getFirstString` uses.
|
|
9162
|
-
debugReason: kind?.trim() ? "unrecognized_session_update" : "malformed_payload",
|
|
9163
|
-
text: debugBlockText(kind ?? "session_update", update)
|
|
9455
|
+
type: "session.replay_complete",
|
|
9456
|
+
replayedCount,
|
|
9457
|
+
...lastReplayedEventId !== void 0 ? { lastReplayedEventId } : {}
|
|
9164
9458
|
}
|
|
9165
9459
|
];
|
|
9460
|
+
}
|
|
9461
|
+
// ── Session-meta events ──────────────────────────────────────────────
|
|
9462
|
+
case "session_metadata_updated":
|
|
9463
|
+
return normalizeSessionMetadataUpdated(event, base);
|
|
9464
|
+
case "approval_mode_changed":
|
|
9465
|
+
return normalizeApprovalModeChanged(event, base);
|
|
9466
|
+
// ── Workspace events ──────────────────────────────────────
|
|
9467
|
+
case "git_branch_changed":
|
|
9468
|
+
return [];
|
|
9469
|
+
case "git_status_changed":
|
|
9470
|
+
return [];
|
|
9471
|
+
case "memory_changed":
|
|
9472
|
+
return normalizeMemoryChanged(event, base);
|
|
9473
|
+
case "agent_changed":
|
|
9474
|
+
return normalizeAgentChanged(event, base);
|
|
9475
|
+
case "tool_toggled":
|
|
9476
|
+
return normalizeToolToggled(event, base);
|
|
9477
|
+
case "settings_changed":
|
|
9478
|
+
return normalizeSettingsChanged(event, base);
|
|
9479
|
+
case "settings_reloaded":
|
|
9480
|
+
return normalizeSettingsReloaded(event, base);
|
|
9481
|
+
case "trust_change_requested":
|
|
9482
|
+
return normalizeTrustChangeRequested(event, base);
|
|
9483
|
+
case "workspace_initialized":
|
|
9484
|
+
return normalizeWorkspaceInitialized(event, base);
|
|
9485
|
+
case "github_setup_completed":
|
|
9486
|
+
return normalizeGithubSetupCompleted(event, base);
|
|
9487
|
+
case "mcp_budget_warning":
|
|
9488
|
+
return normalizeMcpBudgetWarning(event, base);
|
|
9489
|
+
case "mcp_child_refused_batch":
|
|
9490
|
+
return normalizeMcpChildRefused(event, base);
|
|
9491
|
+
case "mcp_server_restarted":
|
|
9492
|
+
return normalizeMcpServerRestarted(event, base);
|
|
9493
|
+
case "mcp_server_restart_refused":
|
|
9494
|
+
return normalizeMcpServerRestartRefused(event, base);
|
|
9495
|
+
case "mcp_server_added":
|
|
9496
|
+
return normalizeMcpServerChanged(event, base, "added");
|
|
9497
|
+
case "mcp_server_removed":
|
|
9498
|
+
return normalizeMcpServerChanged(event, base, "removed");
|
|
9499
|
+
case "mcp_server_changed":
|
|
9500
|
+
return normalizeMcpServerChanged(event, base);
|
|
9501
|
+
case "extensions_changed":
|
|
9502
|
+
return normalizeExtensionsChanged(event, base);
|
|
9503
|
+
case "artifact_changed":
|
|
9504
|
+
return normalizeArtifactChanged(event, base);
|
|
9505
|
+
// ── Auth device-flow events (RFC 8628) ─────────────────
|
|
9506
|
+
case "auth_device_flow_started":
|
|
9507
|
+
return normalizeAuthDeviceFlowStarted(event, base);
|
|
9508
|
+
case "auth_device_flow_throttled":
|
|
9509
|
+
return normalizeAuthDeviceFlowThrottled(event, base);
|
|
9510
|
+
case "auth_device_flow_authorized":
|
|
9511
|
+
return normalizeAuthDeviceFlowAuthorized(event, base);
|
|
9512
|
+
case "auth_device_flow_failed":
|
|
9513
|
+
return normalizeAuthDeviceFlowFailed(event, base);
|
|
9514
|
+
case "auth_device_flow_cancelled":
|
|
9515
|
+
return normalizeAuthDeviceFlowCancelled(event, base);
|
|
9516
|
+
default:
|
|
9517
|
+
return normalizeUnrecognizedEvent(event, base);
|
|
9166
9518
|
}
|
|
9167
9519
|
}
|
|
9168
|
-
__name(
|
|
9169
|
-
function
|
|
9170
|
-
|
|
9171
|
-
|
|
9172
|
-
}
|
|
9173
|
-
__name(extractParentToolCallId, "extractParentToolCallId");
|
|
9174
|
-
function extractUpdateMeta(update) {
|
|
9175
|
-
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9176
|
-
if (!meta) return void 0;
|
|
9177
|
-
const { qwenTranscript: _qwenTranscript, ...displayMeta } = meta;
|
|
9178
|
-
return Object.keys(displayMeta).length > 0 ? displayMeta : void 0;
|
|
9179
|
-
}
|
|
9180
|
-
__name(extractUpdateMeta, "extractUpdateMeta");
|
|
9181
|
-
function extractSourceRecordIds(event) {
|
|
9182
|
-
if (!isRecord2(event.data)) return void 0;
|
|
9183
|
-
const update = getSessionUpdatePayload(event.data);
|
|
9184
|
-
const meta = update && isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9185
|
-
const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
|
|
9186
|
-
const values = transcript?.["sourceRecordIds"];
|
|
9187
|
-
if (!Array.isArray(values)) return void 0;
|
|
9188
|
-
const ids = [
|
|
9189
|
-
...new Set(
|
|
9190
|
-
values.filter((value) => typeof value === "string")
|
|
9191
|
-
)
|
|
9192
|
-
];
|
|
9193
|
-
return ids.length > 0 ? ids : void 0;
|
|
9194
|
-
}
|
|
9195
|
-
__name(extractSourceRecordIds, "extractSourceRecordIds");
|
|
9196
|
-
function extractAssistantUsage(update) {
|
|
9197
|
-
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9198
|
-
const usage = meta && isRecord2(meta["usage"]) ? meta["usage"] : void 0;
|
|
9199
|
-
if (!usage) return void 0;
|
|
9200
|
-
const inputTokens = numberField(usage, "inputTokens");
|
|
9201
|
-
const outputTokens = numberField(usage, "outputTokens");
|
|
9202
|
-
if (inputTokens === void 0 && outputTokens === void 0) return void 0;
|
|
9203
|
-
const cachedTokens = numberField(usage, "cachedReadTokens");
|
|
9204
|
-
return {
|
|
9205
|
-
inputTokens: inputTokens ?? 0,
|
|
9206
|
-
outputTokens: outputTokens ?? 0,
|
|
9207
|
-
...cachedTokens !== void 0 ? { cachedTokens } : {}
|
|
9208
|
-
};
|
|
9209
|
-
}
|
|
9210
|
-
__name(extractAssistantUsage, "extractAssistantUsage");
|
|
9211
|
-
function normalizeToolUpdate(update, base) {
|
|
9212
|
-
const metadata = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9213
|
-
const toolName = getString2(update, "toolName") ?? getString2(update, "name") ?? (metadata ? getString2(metadata, "toolName") : void 0) ?? (metadata ? getString2(metadata, "name") : void 0);
|
|
9214
|
-
const toolKind = getString2(update, "kind");
|
|
9215
|
-
const explicitTitle = getString2(update, "title");
|
|
9216
|
-
const title = explicitTitle ?? (getString2(update, "sessionUpdate") === "tool_call" ? toolName ?? toolKind : void 0);
|
|
9217
|
-
const rawInputSource = update["rawInput"] ?? update["input"] ?? update["args"];
|
|
9218
|
-
const rawOutputSource = update["rawOutput"] ?? update["output"] ?? update["result"];
|
|
9219
|
-
const rawInput = rawInputSource !== void 0 ? redactSensitiveFields(rawInputSource) : void 0;
|
|
9220
|
-
const rawOutput = rawOutputSource !== void 0 ? redactSensitiveFields(rawOutputSource) : void 0;
|
|
9221
|
-
const content = update["content"] !== void 0 ? redactSensitiveFields(update["content"]) : void 0;
|
|
9222
|
-
const locations = update["locations"] !== void 0 ? redactSensitiveFields(update["locations"]) : void 0;
|
|
9223
|
-
const toolCallId = getString2(update, "toolCallId");
|
|
9224
|
-
const status = getString2(update, "status");
|
|
9225
|
-
if (!toolCallId) {
|
|
9226
|
-
return {
|
|
9520
|
+
__name(normalizeDaemonEvent, "normalizeDaemonEvent");
|
|
9521
|
+
function normalizeUnrecognizedEvent(event, base) {
|
|
9522
|
+
return [
|
|
9523
|
+
{
|
|
9227
9524
|
...base,
|
|
9228
|
-
type: "
|
|
9229
|
-
|
|
9230
|
-
|
|
9231
|
-
|
|
9232
|
-
|
|
9233
|
-
|
|
9234
|
-
const { provenance, serverId } = extractToolProvenance(update, toolName);
|
|
9235
|
-
const rawParentToolCallId = getString2(update, "parentToolCallId") ?? (metadata ? getString2(metadata, "parentToolCallId") : void 0);
|
|
9236
|
-
const parentToolCallId = rawParentToolCallId && rawParentToolCallId !== toolCallId ? rawParentToolCallId : void 0;
|
|
9237
|
-
const subagentType = getString2(update, "subagentType") ?? (metadata ? getString2(metadata, "subagentType") : void 0);
|
|
9238
|
-
return {
|
|
9239
|
-
...base,
|
|
9240
|
-
type: "tool.update",
|
|
9241
|
-
toolCallId,
|
|
9242
|
-
...status ? { status } : {},
|
|
9243
|
-
...title ? { title } : {},
|
|
9244
|
-
...toolName ? { toolName } : {},
|
|
9245
|
-
...toolKind ? { toolKind } : {},
|
|
9246
|
-
...content !== void 0 ? { content } : {},
|
|
9247
|
-
...locations !== void 0 ? { locations } : {},
|
|
9248
|
-
...provenance ? { provenance } : {},
|
|
9249
|
-
...serverId ? { serverId } : {},
|
|
9250
|
-
...parentToolCallId ? { parentToolCallId } : {},
|
|
9251
|
-
...subagentType ? { subagentType } : {},
|
|
9252
|
-
...rawInput !== void 0 ? { rawInput } : {},
|
|
9253
|
-
...rawOutput !== void 0 ? { rawOutput } : {},
|
|
9254
|
-
...rawInput !== void 0 ? { details: capDetails(stringifyRedactedJson(rawInput)) } : rawOutput !== void 0 ? { details: capDetails(stringifyRedactedJson(rawOutput)) } : {}
|
|
9255
|
-
};
|
|
9256
|
-
}
|
|
9257
|
-
__name(normalizeToolUpdate, "normalizeToolUpdate");
|
|
9258
|
-
function normalizePlanUpdate(update, base) {
|
|
9259
|
-
const entries = Array.isArray(update["entries"]) ? update["entries"] : [];
|
|
9260
|
-
const contentText = capDetails(formatPlanEntries(entries));
|
|
9261
|
-
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9262
|
-
const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
|
|
9263
|
-
const planCallId = getString2(transcript, "planToolCallId") ?? (base.eventId !== void 0 ? `${DAEMON_PLAN_TOOL_CALL_ID}-${base.eventId}` : DAEMON_PLAN_TOOL_CALL_ID);
|
|
9264
|
-
const stats = meta && isRecord2(meta["stats"]) ? meta["stats"] : void 0;
|
|
9265
|
-
const todoPlan = meta && isRecord2(meta["qwenTodoPlan"]) ? meta["qwenTodoPlan"] : void 0;
|
|
9266
|
-
const planId = getString2(todoPlan, "id");
|
|
9267
|
-
const sessionWorkflow = meta?.["qwenSessionWorkflow"] === true;
|
|
9268
|
-
return {
|
|
9269
|
-
...base,
|
|
9270
|
-
type: "tool.update",
|
|
9271
|
-
toolCallId: planCallId,
|
|
9272
|
-
title: "Updated Plan",
|
|
9273
|
-
status: "completed",
|
|
9274
|
-
toolName: "todo_write",
|
|
9275
|
-
toolKind: "updated_plan",
|
|
9276
|
-
content: [
|
|
9277
|
-
{
|
|
9278
|
-
type: "content",
|
|
9279
|
-
content: { type: "text", text: contentText }
|
|
9280
|
-
}
|
|
9281
|
-
],
|
|
9282
|
-
rawOutput: {
|
|
9283
|
-
entries,
|
|
9284
|
-
...stats ? { stats } : {},
|
|
9285
|
-
...planId ? { plan: { id: planId, sourceCallId: planCallId } } : {},
|
|
9286
|
-
...sessionWorkflow ? { sessionWorkflow: true } : {}
|
|
9525
|
+
type: "debug",
|
|
9526
|
+
debugReason: "unrecognized_event",
|
|
9527
|
+
text: debugBlockText(
|
|
9528
|
+
`${event.type} (unrecognized daemon event)`,
|
|
9529
|
+
event.data
|
|
9530
|
+
)
|
|
9287
9531
|
}
|
|
9288
|
-
|
|
9289
|
-
}
|
|
9290
|
-
__name(normalizePlanUpdate, "normalizePlanUpdate");
|
|
9291
|
-
function formatPlanEntries(entries) {
|
|
9292
|
-
return entries.flatMap((entry) => {
|
|
9293
|
-
if (!isRecord2(entry)) return [];
|
|
9294
|
-
const content = getString2(entry, "content");
|
|
9295
|
-
if (!content) return [];
|
|
9296
|
-
const marker = getPlanEntryMarker(getString2(entry, "status"));
|
|
9297
|
-
return [`- [${marker}] ${content}`];
|
|
9298
|
-
}).join("\n");
|
|
9299
|
-
}
|
|
9300
|
-
__name(formatPlanEntries, "formatPlanEntries");
|
|
9301
|
-
function getPlanEntryMarker(status) {
|
|
9302
|
-
switch (status) {
|
|
9303
|
-
case "completed":
|
|
9304
|
-
return "x";
|
|
9305
|
-
case "in_progress":
|
|
9306
|
-
return "-";
|
|
9307
|
-
default:
|
|
9308
|
-
return " ";
|
|
9309
|
-
}
|
|
9532
|
+
];
|
|
9310
9533
|
}
|
|
9311
|
-
__name(
|
|
9312
|
-
function
|
|
9313
|
-
const
|
|
9314
|
-
const
|
|
9315
|
-
|
|
9316
|
-
|
|
9317
|
-
|
|
9318
|
-
|
|
9319
|
-
|
|
9534
|
+
__name(normalizeUnrecognizedEvent, "normalizeUnrecognizedEvent");
|
|
9535
|
+
function normalizeStateResyncRequired(event, base) {
|
|
9536
|
+
const reason = getString2(event.data, "reason");
|
|
9537
|
+
const lastDeliveredId = numberField(event.data, "lastDeliveredId");
|
|
9538
|
+
const earliestAvailableId = numberField(event.data, "earliestAvailableId");
|
|
9539
|
+
if (!reason || lastDeliveredId === void 0 || earliestAvailableId === void 0) {
|
|
9540
|
+
return fallbackDebug(
|
|
9541
|
+
event,
|
|
9542
|
+
base,
|
|
9543
|
+
"malformed state_resync_required payload"
|
|
9544
|
+
);
|
|
9320
9545
|
}
|
|
9321
|
-
|
|
9322
|
-
|
|
9323
|
-
|
|
9324
|
-
|
|
9325
|
-
|
|
9546
|
+
return [
|
|
9547
|
+
{
|
|
9548
|
+
...base,
|
|
9549
|
+
type: "session.state_resync_required",
|
|
9550
|
+
reason,
|
|
9551
|
+
lastDeliveredId,
|
|
9552
|
+
earliestAvailableId
|
|
9326
9553
|
}
|
|
9327
|
-
|
|
9328
|
-
return {};
|
|
9329
|
-
}
|
|
9330
|
-
__name(extractToolProvenance, "extractToolProvenance");
|
|
9331
|
-
function asDaemonErrorKind(value) {
|
|
9332
|
-
if (!value) return void 0;
|
|
9333
|
-
return DAEMON_ERROR_KIND_SET.has(value) ? value : void 0;
|
|
9334
|
-
}
|
|
9335
|
-
__name(asDaemonErrorKind, "asDaemonErrorKind");
|
|
9336
|
-
function debugBlockText(prefix, data) {
|
|
9337
|
-
return capDetails(`${prefix}: ${stringifyRedactedJson(data)}`);
|
|
9554
|
+
];
|
|
9338
9555
|
}
|
|
9339
|
-
__name(
|
|
9340
|
-
function
|
|
9341
|
-
|
|
9342
|
-
|
|
9343
|
-
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
|
|
9347
|
-
|
|
9348
|
-
}
|
|
9349
|
-
];
|
|
9556
|
+
__name(normalizeStateResyncRequired, "normalizeStateResyncRequired");
|
|
9557
|
+
function normalizeHistoryTruncated(event, base) {
|
|
9558
|
+
const reason = getString2(event.data, "reason");
|
|
9559
|
+
const truncatedEvents = numberField(event.data, "truncatedEvents");
|
|
9560
|
+
const retainedEvents = numberField(event.data, "retainedEvents");
|
|
9561
|
+
const maxBytes = numberField(event.data, "maxBytes");
|
|
9562
|
+
const maxEvents = numberField(event.data, "maxEvents");
|
|
9563
|
+
if (reason !== "replay_window_exceeded" || truncatedEvents === void 0 || retainedEvents === void 0 || maxBytes === void 0 || !isRecord2(event.data) || typeof event.data["fullTranscriptAvailable"] !== "boolean") {
|
|
9564
|
+
return fallbackDebug(event, base, "malformed history_truncated payload");
|
|
9350
9565
|
}
|
|
9351
|
-
const
|
|
9352
|
-
if (!
|
|
9353
|
-
return
|
|
9354
|
-
{
|
|
9355
|
-
...base,
|
|
9356
|
-
type: "debug",
|
|
9357
|
-
debugReason: "malformed_payload",
|
|
9358
|
-
text: debugBlockText("permission_request", event.data)
|
|
9359
|
-
}
|
|
9360
|
-
];
|
|
9566
|
+
const scope = getString2(event.data, "scope");
|
|
9567
|
+
if (event.data["scope"] !== void 0 && !scope || event.data["maxEvents"] !== void 0 && (maxEvents === void 0 || !Number.isInteger(maxEvents) || maxEvents < 0)) {
|
|
9568
|
+
return fallbackDebug(event, base, "malformed history_truncated payload");
|
|
9361
9569
|
}
|
|
9362
|
-
const
|
|
9570
|
+
const fullTranscriptAvailable = event.data["fullTranscriptAvailable"];
|
|
9571
|
+
const limits = [
|
|
9572
|
+
maxEvents === void 0 ? void 0 : `${maxEvents} ${scope === "live_journal" ? "replay entries" : "events"}`,
|
|
9573
|
+
`${maxBytes} bytes`
|
|
9574
|
+
].filter((limit) => limit !== void 0).join(" / ");
|
|
9575
|
+
const text = scope === "live_journal" ? `History truncated for live turn replay: kept the latest ${retainedEvents} source events and dropped ${truncatedEvents} older source events (limits: ${limits}). ${fullTranscriptAvailable ? "Complete content remains available after the turn finishes." : "Complete content is not available for automatic recovery."}` : scope === void 0 ? `History truncated in replay history: kept the latest ${retainedEvents} events and dropped ${truncatedEvents} older replay events (limits: ${limits}). ${fullTranscriptAvailable ? "Older content remains available from the full transcript." : "Older content is not available from a full transcript."}` : `History truncated: kept the latest ${retainedEvents} events and dropped ${truncatedEvents} older replay events (limits: ${limits}). ${fullTranscriptAvailable ? "Full transcript content remains available." : "Full transcript content is not available."}`;
|
|
9363
9576
|
return [
|
|
9364
9577
|
{
|
|
9365
9578
|
...base,
|
|
9366
|
-
type: "
|
|
9367
|
-
|
|
9368
|
-
|
|
9369
|
-
|
|
9370
|
-
options: normalizePermissionOptions(event.data["options"]),
|
|
9371
|
-
toolCall
|
|
9579
|
+
type: "status",
|
|
9580
|
+
text,
|
|
9581
|
+
source: "history_truncated",
|
|
9582
|
+
data: event.data
|
|
9372
9583
|
}
|
|
9373
9584
|
];
|
|
9374
9585
|
}
|
|
9375
|
-
__name(
|
|
9376
|
-
function
|
|
9377
|
-
const
|
|
9378
|
-
|
|
9379
|
-
|
|
9380
|
-
|
|
9381
|
-
...base,
|
|
9382
|
-
type: "debug",
|
|
9383
|
-
debugReason: "malformed_payload",
|
|
9384
|
-
text: debugBlockText(event.type, event.data)
|
|
9385
|
-
}
|
|
9386
|
-
];
|
|
9586
|
+
__name(normalizeHistoryTruncated, "normalizeHistoryTruncated");
|
|
9587
|
+
function normalizeSessionRewound(event, base) {
|
|
9588
|
+
const promptId = getString2(event.data, "promptId");
|
|
9589
|
+
const targetTurnIndex = numberField(event.data, "targetTurnIndex");
|
|
9590
|
+
if (!promptId || targetTurnIndex === void 0) {
|
|
9591
|
+
return fallbackDebug(event, base, "malformed session_rewound payload");
|
|
9387
9592
|
}
|
|
9388
|
-
const
|
|
9593
|
+
const sessionId = getString2(event.data, "sessionId");
|
|
9389
9594
|
return [
|
|
9390
9595
|
{
|
|
9391
9596
|
...base,
|
|
9392
|
-
type: "
|
|
9393
|
-
|
|
9394
|
-
|
|
9395
|
-
...
|
|
9597
|
+
type: "session.rewound",
|
|
9598
|
+
promptId,
|
|
9599
|
+
targetTurnIndex,
|
|
9600
|
+
...sessionId ? { sessionId } : {}
|
|
9396
9601
|
}
|
|
9397
9602
|
];
|
|
9398
9603
|
}
|
|
9399
|
-
__name(
|
|
9400
|
-
function
|
|
9401
|
-
|
|
9402
|
-
const
|
|
9403
|
-
|
|
9404
|
-
|
|
9405
|
-
|
|
9406
|
-
function normalizePermissionOptions(value) {
|
|
9407
|
-
if (!Array.isArray(value)) return [];
|
|
9408
|
-
return value.flatMap((option) => {
|
|
9409
|
-
if (!isRecord2(option)) return [];
|
|
9410
|
-
const optionId = getString2(option, "optionId");
|
|
9411
|
-
if (!optionId) return [];
|
|
9412
|
-
return [
|
|
9413
|
-
{
|
|
9414
|
-
optionId,
|
|
9415
|
-
label: getString2(option, "label") ?? getString2(option, "title") ?? getString2(option, "name") ?? optionId,
|
|
9416
|
-
...getString2(option, "description") ? { description: getString2(option, "description") } : {},
|
|
9417
|
-
raw: option
|
|
9418
|
-
}
|
|
9419
|
-
];
|
|
9420
|
-
});
|
|
9421
|
-
}
|
|
9422
|
-
__name(normalizePermissionOptions, "normalizePermissionOptions");
|
|
9423
|
-
function describePermissionOutcome(value) {
|
|
9424
|
-
if (!isRecord2(value)) return stringifyJson(value);
|
|
9425
|
-
const outcome = value["outcome"];
|
|
9426
|
-
if (typeof outcome === "string") return outcome;
|
|
9427
|
-
if (isRecord2(outcome)) {
|
|
9428
|
-
const kind = getString2(outcome, "outcome") ?? "selected";
|
|
9429
|
-
const optionId = getString2(outcome, "optionId");
|
|
9430
|
-
return optionId ? `${kind}:${optionId}` : kind;
|
|
9604
|
+
__name(normalizeSessionRewound, "normalizeSessionRewound");
|
|
9605
|
+
function normalizeSessionBranched(event, base) {
|
|
9606
|
+
const sourceSessionId = getString2(event.data, "sourceSessionId");
|
|
9607
|
+
const newSessionId = getString2(event.data, "newSessionId");
|
|
9608
|
+
const displayName = getString2(event.data, "displayName");
|
|
9609
|
+
if (!sourceSessionId || !newSessionId || !displayName) {
|
|
9610
|
+
return fallbackDebug(event, base, "malformed session_branched payload");
|
|
9431
9611
|
}
|
|
9432
|
-
return getFirstString(value, ["status", "reason"]) ?? stringifyJson(value);
|
|
9433
|
-
}
|
|
9434
|
-
__name(describePermissionOutcome, "describePermissionOutcome");
|
|
9435
|
-
function describeToolCall(value) {
|
|
9436
|
-
if (!isRecord2(value)) return "Tool permission";
|
|
9437
|
-
return getString2(value, "title") ?? getString2(value, "name") ?? getString2(value, "kind") ?? getString2(value, "toolName") ?? "Tool permission";
|
|
9438
|
-
}
|
|
9439
|
-
__name(describeToolCall, "describeToolCall");
|
|
9440
|
-
function getShellStream(value) {
|
|
9441
|
-
const stream = getString2(value, "stream");
|
|
9442
|
-
return stream === "stdout" || stream === "stderr" ? stream : void 0;
|
|
9443
|
-
}
|
|
9444
|
-
__name(getShellStream, "getShellStream");
|
|
9445
|
-
function getSource(value) {
|
|
9446
|
-
if (!isRecord2(value)) return void 0;
|
|
9447
|
-
const direct = getString2(value, "source");
|
|
9448
|
-
if (direct) return direct;
|
|
9449
|
-
const meta = value["_meta"];
|
|
9450
|
-
return isRecord2(meta) ? getString2(meta, "source") : void 0;
|
|
9451
|
-
}
|
|
9452
|
-
__name(getSource, "getSource");
|
|
9453
|
-
function fallbackDebug(event, base, reason) {
|
|
9454
9612
|
return [
|
|
9455
9613
|
{
|
|
9456
9614
|
...base,
|
|
9457
|
-
type: "
|
|
9458
|
-
|
|
9459
|
-
|
|
9615
|
+
type: "session.branched",
|
|
9616
|
+
sourceSessionId,
|
|
9617
|
+
newSessionId,
|
|
9618
|
+
displayName
|
|
9460
9619
|
}
|
|
9461
9620
|
];
|
|
9462
9621
|
}
|
|
9463
|
-
__name(
|
|
9464
|
-
function
|
|
9622
|
+
__name(normalizeSessionBranched, "normalizeSessionBranched");
|
|
9623
|
+
function normalizeFollowupSuggestion(event, base) {
|
|
9465
9624
|
const sessionId = getString2(event.data, "sessionId");
|
|
9466
|
-
|
|
9467
|
-
const
|
|
9625
|
+
const suggestion = getString2(event.data, "suggestion");
|
|
9626
|
+
const promptId = getString2(event.data, "promptId");
|
|
9627
|
+
if (!sessionId || !suggestion || !promptId) {
|
|
9628
|
+
return fallbackDebug(event, base, "malformed followup_suggestion payload");
|
|
9629
|
+
}
|
|
9468
9630
|
return [
|
|
9469
9631
|
{
|
|
9470
9632
|
...base,
|
|
9471
|
-
type: "
|
|
9633
|
+
type: "followup.suggestion",
|
|
9472
9634
|
sessionId,
|
|
9473
|
-
|
|
9635
|
+
suggestion,
|
|
9636
|
+
promptId
|
|
9474
9637
|
}
|
|
9475
9638
|
];
|
|
9476
9639
|
}
|
|
9477
|
-
__name(
|
|
9478
|
-
function
|
|
9479
|
-
|
|
9480
|
-
|
|
9481
|
-
if (!sessionId || !isRecord2(change)) {
|
|
9482
|
-
return fallbackDebug(event, base, "malformed artifact_changed payload");
|
|
9640
|
+
__name(normalizeFollowupSuggestion, "normalizeFollowupSuggestion");
|
|
9641
|
+
function normalizeMidTurnMessageInjected(event, base) {
|
|
9642
|
+
if (!isRecord2(event.data)) {
|
|
9643
|
+
return fallbackDebug(event, base, "malformed mid_turn_message_injected");
|
|
9483
9644
|
}
|
|
9484
|
-
const
|
|
9485
|
-
const
|
|
9486
|
-
|
|
9487
|
-
|
|
9645
|
+
const data = event.data;
|
|
9646
|
+
const rawMessages = data["messages"];
|
|
9647
|
+
const messages = Array.isArray(rawMessages) && rawMessages.every(
|
|
9648
|
+
(message) => typeof message === "string"
|
|
9649
|
+
) ? rawMessages : [];
|
|
9650
|
+
const items = data["items"];
|
|
9651
|
+
const hasRenderableItemContent = Array.isArray(items) && items.some(
|
|
9652
|
+
(item) => isRecord2(item) && Array.isArray(item["content"]) && item["content"].some(
|
|
9653
|
+
(block) => isRecord2(block) && (block["type"] === "image" || block["type"] === "resource" || block["type"] === "text" && typeof block["text"] === "string" && block["text"].length > 0)
|
|
9654
|
+
)
|
|
9655
|
+
);
|
|
9656
|
+
if (messages.length === 0 || !messages.some(Boolean) && !hasRenderableItemContent) {
|
|
9657
|
+
return fallbackDebug(event, base, "malformed mid_turn_message_injected");
|
|
9658
|
+
}
|
|
9659
|
+
const messageIds = Array.isArray(data["messageIds"]) ? data["messageIds"] : [];
|
|
9660
|
+
return messages.map((text, index) => {
|
|
9661
|
+
const item = Array.isArray(items) ? items[index] : void 0;
|
|
9662
|
+
const messageId = messageIds[index];
|
|
9663
|
+
return {
|
|
9664
|
+
...base,
|
|
9665
|
+
type: "status",
|
|
9666
|
+
text,
|
|
9667
|
+
source: "mid_turn_message_injected",
|
|
9668
|
+
data: {
|
|
9669
|
+
...data,
|
|
9670
|
+
messages: [text],
|
|
9671
|
+
...Array.isArray(items) ? { items: item !== void 0 ? [item] : [] } : {},
|
|
9672
|
+
...typeof messageId === "string" ? { messageIds: [messageId] } : Array.isArray(data["messageIds"]) ? { messageIds: [] } : {}
|
|
9673
|
+
}
|
|
9674
|
+
};
|
|
9675
|
+
});
|
|
9676
|
+
}
|
|
9677
|
+
__name(normalizeMidTurnMessageInjected, "normalizeMidTurnMessageInjected");
|
|
9678
|
+
function createBase(event, opts) {
|
|
9679
|
+
const serverTimestamp = extractServerTimestamp(event);
|
|
9680
|
+
const sourceRecordIds = extractSourceRecordIds(event);
|
|
9681
|
+
const segmentId = extractTranscriptSegmentId(event);
|
|
9682
|
+
const branchRecordId = extractBranchRecordId(event);
|
|
9683
|
+
return {
|
|
9684
|
+
...event.id !== void 0 ? { eventId: event.id } : {},
|
|
9685
|
+
...serverTimestamp !== void 0 ? { serverTimestamp } : {},
|
|
9686
|
+
...sourceRecordIds ? { sourceRecordIds } : {},
|
|
9687
|
+
...segmentId ? { segmentId } : {},
|
|
9688
|
+
...event.promptId ? { promptId: event.promptId } : {},
|
|
9689
|
+
...branchRecordId ? { branchRecordId } : {},
|
|
9690
|
+
...event.originatorClientId ? { originatorClientId: event.originatorClientId } : {},
|
|
9691
|
+
...opts.includeRawEvent ? { rawEvent: { ...event, data: redactSensitiveFields(event.data) } } : {}
|
|
9692
|
+
};
|
|
9693
|
+
}
|
|
9694
|
+
__name(createBase, "createBase");
|
|
9695
|
+
function extractTranscriptSegmentId(event) {
|
|
9696
|
+
if (!isRecord2(event.data)) return void 0;
|
|
9697
|
+
const update = getSessionUpdatePayload(event.data);
|
|
9698
|
+
const meta = update && isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9699
|
+
const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
|
|
9700
|
+
const segmentId = getString2(transcript, "segmentId");
|
|
9701
|
+
return segmentId && segmentId.length <= 512 ? segmentId : void 0;
|
|
9702
|
+
}
|
|
9703
|
+
__name(extractTranscriptSegmentId, "extractTranscriptSegmentId");
|
|
9704
|
+
function extractBranchRecordId(event) {
|
|
9705
|
+
if (!isRecord2(event.data)) return void 0;
|
|
9706
|
+
const update = getSessionUpdatePayload(event.data);
|
|
9707
|
+
const meta = update && isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9708
|
+
const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
|
|
9709
|
+
return transcript ? getString2(transcript, "branchRecordId") : void 0;
|
|
9710
|
+
}
|
|
9711
|
+
__name(extractBranchRecordId, "extractBranchRecordId");
|
|
9712
|
+
function extractServerTimestamp(event) {
|
|
9713
|
+
const direct = event.serverTimestamp;
|
|
9714
|
+
if (typeof direct === "number" && Number.isFinite(direct)) return direct;
|
|
9715
|
+
const envelopeMeta = event._meta;
|
|
9716
|
+
if (isRecord2(envelopeMeta)) {
|
|
9717
|
+
const ts = envelopeMeta["serverTimestamp"];
|
|
9718
|
+
if (typeof ts === "number" && Number.isFinite(ts)) return ts;
|
|
9488
9719
|
}
|
|
9489
|
-
|
|
9490
|
-
|
|
9491
|
-
|
|
9492
|
-
|
|
9493
|
-
|
|
9494
|
-
|
|
9720
|
+
if (isRecord2(event.data)) {
|
|
9721
|
+
const dataMeta = event.data["_meta"];
|
|
9722
|
+
const update = event.data["update"];
|
|
9723
|
+
const updateMeta = isRecord2(update) ? update["_meta"] : void 0;
|
|
9724
|
+
if (isRecord2(dataMeta)) {
|
|
9725
|
+
const ts = dataMeta["serverTimestamp"];
|
|
9726
|
+
if (typeof ts === "number" && Number.isFinite(ts)) return ts;
|
|
9495
9727
|
}
|
|
9496
|
-
|
|
9728
|
+
if (isRecord2(updateMeta)) {
|
|
9729
|
+
const serverTs = updateMeta["serverTimestamp"];
|
|
9730
|
+
if (typeof serverTs === "number" && Number.isFinite(serverTs)) {
|
|
9731
|
+
return serverTs;
|
|
9732
|
+
}
|
|
9733
|
+
}
|
|
9734
|
+
const timestampCandidates = [
|
|
9735
|
+
isRecord2(updateMeta) ? updateMeta["timestamp"] : void 0,
|
|
9736
|
+
isRecord2(update) ? update["timestamp"] : void 0,
|
|
9737
|
+
isRecord2(dataMeta) ? dataMeta["timestamp"] : void 0,
|
|
9738
|
+
event.data["timestamp"]
|
|
9739
|
+
];
|
|
9740
|
+
for (const candidate of timestampCandidates) {
|
|
9741
|
+
const timestamp = parseTimestamp(candidate);
|
|
9742
|
+
if (timestamp !== void 0) return timestamp;
|
|
9743
|
+
}
|
|
9744
|
+
}
|
|
9745
|
+
return void 0;
|
|
9497
9746
|
}
|
|
9498
|
-
__name(
|
|
9499
|
-
function
|
|
9500
|
-
|
|
9501
|
-
|
|
9502
|
-
|
|
9503
|
-
|
|
9504
|
-
return
|
|
9747
|
+
__name(extractServerTimestamp, "extractServerTimestamp");
|
|
9748
|
+
function parseTimestamp(value) {
|
|
9749
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
9750
|
+
if (typeof value !== "string") return void 0;
|
|
9751
|
+
if (/^\d+$/.test(value)) {
|
|
9752
|
+
const numeric = Number(value);
|
|
9753
|
+
return Number.isFinite(numeric) ? numeric : void 0;
|
|
9505
9754
|
}
|
|
9506
|
-
const
|
|
9507
|
-
return
|
|
9508
|
-
{
|
|
9509
|
-
...base,
|
|
9510
|
-
type: "session.approval_mode.changed",
|
|
9511
|
-
sessionId,
|
|
9512
|
-
previous,
|
|
9513
|
-
next,
|
|
9514
|
-
persisted
|
|
9515
|
-
}
|
|
9516
|
-
];
|
|
9755
|
+
const parsed = Date.parse(value);
|
|
9756
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
9517
9757
|
}
|
|
9518
|
-
__name(
|
|
9519
|
-
function
|
|
9520
|
-
|
|
9521
|
-
|
|
9522
|
-
|
|
9523
|
-
|
|
9524
|
-
|
|
9525
|
-
|
|
9526
|
-
return fallbackDebug(event, base, MALFORMED_MEMORY_CHANGED);
|
|
9527
|
-
}
|
|
9758
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
9759
|
+
function isAttachmentReferenceContent(value) {
|
|
9760
|
+
return isRecord2(value) && (value["type"] === "image" || value["type"] === "resource") && typeof value["attachmentId"] === "string" && value["attachmentId"].length > 0 && value["data"] === void 0 && value["url"] === void 0 && value["source"] === void 0;
|
|
9761
|
+
}
|
|
9762
|
+
__name(isAttachmentReferenceContent, "isAttachmentReferenceContent");
|
|
9763
|
+
function normalizeSessionUpdate(event, base, opts) {
|
|
9764
|
+
const update = getSessionUpdatePayload(event.data);
|
|
9765
|
+
if (!update) {
|
|
9528
9766
|
return [
|
|
9529
9767
|
{
|
|
9530
9768
|
...base,
|
|
9531
|
-
type: "
|
|
9532
|
-
|
|
9533
|
-
|
|
9534
|
-
taskId,
|
|
9535
|
-
touchedScopes
|
|
9769
|
+
type: "debug",
|
|
9770
|
+
debugReason: "malformed_payload",
|
|
9771
|
+
text: debugBlockText("session_update", event.data)
|
|
9536
9772
|
}
|
|
9537
9773
|
];
|
|
9538
9774
|
}
|
|
9539
|
-
const
|
|
9540
|
-
|
|
9541
|
-
|
|
9542
|
-
|
|
9543
|
-
|
|
9544
|
-
|
|
9545
|
-
|
|
9546
|
-
|
|
9547
|
-
|
|
9548
|
-
|
|
9549
|
-
|
|
9550
|
-
|
|
9551
|
-
|
|
9552
|
-
|
|
9553
|
-
|
|
9554
|
-
|
|
9555
|
-
|
|
9775
|
+
const kind = getString2(update, "sessionUpdate");
|
|
9776
|
+
switch (kind) {
|
|
9777
|
+
case "user_message_chunk": {
|
|
9778
|
+
if (opts.suppressOwnUserEcho && opts.clientId && event.originatorClientId === opts.clientId) {
|
|
9779
|
+
return [];
|
|
9780
|
+
}
|
|
9781
|
+
const meta = extractUpdateMeta(update);
|
|
9782
|
+
const content = update["content"];
|
|
9783
|
+
const part = extractContentPart(content);
|
|
9784
|
+
if (part) {
|
|
9785
|
+
if (part.kind === "image") {
|
|
9786
|
+
const data = part.source.data;
|
|
9787
|
+
let mimeType = part.mediaType || "image/*";
|
|
9788
|
+
if (mimeType === "image/*" && data) {
|
|
9789
|
+
const rawData = data.startsWith("data:") ? data.split(",")[1] ?? "" : data;
|
|
9790
|
+
const prefix = rawData.slice(0, 10);
|
|
9791
|
+
if (prefix.startsWith("iVBORw0KGg")) mimeType = "image/png";
|
|
9792
|
+
else if (prefix.startsWith("/9j/")) mimeType = "image/jpeg";
|
|
9793
|
+
else if (prefix.startsWith("R0lGOD")) mimeType = "image/gif";
|
|
9794
|
+
else if (prefix.startsWith("UklGR")) mimeType = "image/webp";
|
|
9795
|
+
}
|
|
9796
|
+
if (data) {
|
|
9797
|
+
const contentRecord = isRecord2(content) ? content : void 0;
|
|
9798
|
+
const attachmentId = typeof contentRecord?.["attachmentId"] === "string" ? contentRecord["attachmentId"] : void 0;
|
|
9799
|
+
return [
|
|
9800
|
+
{
|
|
9801
|
+
...base,
|
|
9802
|
+
type: "user.image.delta",
|
|
9803
|
+
data,
|
|
9804
|
+
mimeType,
|
|
9805
|
+
...attachmentId ? { attachmentId } : {},
|
|
9806
|
+
...meta ? { meta } : {}
|
|
9807
|
+
}
|
|
9808
|
+
];
|
|
9809
|
+
}
|
|
9810
|
+
return [];
|
|
9811
|
+
}
|
|
9812
|
+
if (part.kind === "text") {
|
|
9813
|
+
return part.text ? [
|
|
9814
|
+
{
|
|
9815
|
+
...base,
|
|
9816
|
+
type: "user.text.delta",
|
|
9817
|
+
text: part.text,
|
|
9818
|
+
...meta ? { meta } : {}
|
|
9819
|
+
}
|
|
9820
|
+
] : [];
|
|
9821
|
+
}
|
|
9822
|
+
return [];
|
|
9823
|
+
}
|
|
9824
|
+
if (isAttachmentReferenceContent(content)) {
|
|
9825
|
+
if (content["type"] === "resource") {
|
|
9826
|
+
const attachmentId = content["attachmentId"];
|
|
9827
|
+
const mimeType = content["mimeType"];
|
|
9828
|
+
return [
|
|
9829
|
+
{
|
|
9830
|
+
...base,
|
|
9831
|
+
type: "user.file.delta",
|
|
9832
|
+
name: attachmentId,
|
|
9833
|
+
attachmentId,
|
|
9834
|
+
mimeType: typeof mimeType === "string" ? mimeType : "",
|
|
9835
|
+
...meta ? { meta } : {}
|
|
9836
|
+
}
|
|
9837
|
+
];
|
|
9838
|
+
}
|
|
9839
|
+
return [
|
|
9840
|
+
{
|
|
9841
|
+
...base,
|
|
9842
|
+
type: "user.text.delta",
|
|
9843
|
+
text: ATTACHMENT_UNAVAILABLE_TEXT,
|
|
9844
|
+
...meta ? { meta } : {}
|
|
9845
|
+
}
|
|
9846
|
+
];
|
|
9847
|
+
}
|
|
9848
|
+
const text = getTextContent(content);
|
|
9849
|
+
return text ? [
|
|
9850
|
+
{
|
|
9851
|
+
...base,
|
|
9852
|
+
type: "user.text.delta",
|
|
9853
|
+
text,
|
|
9854
|
+
...meta ? { meta } : {}
|
|
9855
|
+
}
|
|
9856
|
+
] : [];
|
|
9857
|
+
}
|
|
9858
|
+
case "agent_message_chunk": {
|
|
9859
|
+
const text = getTextContent(update["content"]);
|
|
9860
|
+
const parentToolCallId = extractParentToolCallId(update);
|
|
9861
|
+
const meta = extractUpdateMeta(update);
|
|
9862
|
+
const events = [];
|
|
9863
|
+
if (text) {
|
|
9864
|
+
events.push({
|
|
9865
|
+
...base,
|
|
9866
|
+
type: "assistant.text.delta",
|
|
9867
|
+
text,
|
|
9868
|
+
...parentToolCallId ? { parentToolCallId } : {},
|
|
9869
|
+
...meta ? { meta } : {}
|
|
9870
|
+
});
|
|
9871
|
+
}
|
|
9872
|
+
const usage = extractAssistantUsage(update);
|
|
9873
|
+
if (usage) {
|
|
9874
|
+
events.push({
|
|
9875
|
+
...base,
|
|
9876
|
+
type: "assistant.usage",
|
|
9877
|
+
usage,
|
|
9878
|
+
...parentToolCallId ? { parentToolCallId } : {}
|
|
9879
|
+
});
|
|
9880
|
+
}
|
|
9881
|
+
return events;
|
|
9882
|
+
}
|
|
9883
|
+
case "agent_thought_chunk": {
|
|
9884
|
+
const text = getTextContent(update["content"]);
|
|
9885
|
+
if (!text) return [];
|
|
9886
|
+
const parentToolCallId = extractParentToolCallId(update);
|
|
9887
|
+
const meta = extractUpdateMeta(update);
|
|
9888
|
+
return [
|
|
9889
|
+
{
|
|
9890
|
+
...base,
|
|
9891
|
+
type: "thought.text.delta",
|
|
9892
|
+
text,
|
|
9893
|
+
...parentToolCallId ? { parentToolCallId } : {},
|
|
9894
|
+
...meta ? { meta } : {}
|
|
9895
|
+
}
|
|
9896
|
+
];
|
|
9897
|
+
}
|
|
9898
|
+
case "tool_call":
|
|
9899
|
+
case "tool_call_update": {
|
|
9900
|
+
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9901
|
+
if (getString2(update, "status") === "in_progress" && getString2(update, "kind") === void 0 && (meta?.["shellProgress"] !== void 0 || meta?.subagentProgress === true)) {
|
|
9902
|
+
return [];
|
|
9903
|
+
}
|
|
9904
|
+
return [normalizeToolUpdate(update, base)];
|
|
9905
|
+
}
|
|
9906
|
+
case "shell_output":
|
|
9907
|
+
case "tool_output": {
|
|
9908
|
+
const text = getOutputText(update);
|
|
9909
|
+
const stream = getShellStream(update) ?? getShellStream(event.data);
|
|
9910
|
+
const source = getSource(update) ?? getSource(event.data);
|
|
9911
|
+
return text ? [
|
|
9912
|
+
{
|
|
9913
|
+
...base,
|
|
9914
|
+
type: source === "user-shell" ? "user.shell.output" : "shell.output",
|
|
9915
|
+
text,
|
|
9916
|
+
...stream ? { stream } : {}
|
|
9917
|
+
}
|
|
9918
|
+
] : [];
|
|
9919
|
+
}
|
|
9920
|
+
case "available_commands_update": {
|
|
9921
|
+
const rawCommands = Array.isArray(update["availableCommands"]) ? update["availableCommands"] : [];
|
|
9922
|
+
const commands = rawCommands.filter(isRecord2);
|
|
9923
|
+
return [
|
|
9924
|
+
{
|
|
9925
|
+
...base,
|
|
9926
|
+
type: "session.available_commands",
|
|
9927
|
+
count: commands.length,
|
|
9928
|
+
commands
|
|
9929
|
+
}
|
|
9930
|
+
];
|
|
9556
9931
|
}
|
|
9557
|
-
|
|
9558
|
-
|
|
9559
|
-
|
|
9560
|
-
|
|
9561
|
-
|
|
9562
|
-
|
|
9563
|
-
|
|
9564
|
-
|
|
9565
|
-
|
|
9932
|
+
case "plan":
|
|
9933
|
+
return [normalizePlanUpdate(update, base)];
|
|
9934
|
+
case "current_mode_update":
|
|
9935
|
+
case "session_info_update":
|
|
9936
|
+
case "usage_update":
|
|
9937
|
+
return [];
|
|
9938
|
+
default:
|
|
9939
|
+
return [
|
|
9940
|
+
{
|
|
9941
|
+
...base,
|
|
9942
|
+
type: "debug",
|
|
9943
|
+
// `getSessionUpdatePayload` accepts any record, so `kind` is
|
|
9944
|
+
// `undefined` for a payload whose discriminator is missing, empty or
|
|
9945
|
+
// not a string. That is a broken frame, not a kind from a newer
|
|
9946
|
+
// daemon — classifying it as unrecognized would hide the only
|
|
9947
|
+
// diagnostic a malformed `session_update` produces. A whitespace-only
|
|
9948
|
+
// discriminator is truthy but no more usable than an empty one, so
|
|
9949
|
+
// apply the same `trim()` convention `getFirstString` uses.
|
|
9950
|
+
debugReason: kind?.trim() ? "unrecognized_session_update" : "malformed_payload",
|
|
9951
|
+
text: debugBlockText(kind ?? "session_update", update)
|
|
9952
|
+
}
|
|
9953
|
+
];
|
|
9566
9954
|
}
|
|
9567
|
-
return [
|
|
9568
|
-
{
|
|
9569
|
-
...base,
|
|
9570
|
-
type: "workspace.agent.changed",
|
|
9571
|
-
change,
|
|
9572
|
-
name,
|
|
9573
|
-
level
|
|
9574
|
-
}
|
|
9575
|
-
];
|
|
9576
9955
|
}
|
|
9577
|
-
__name(
|
|
9578
|
-
function
|
|
9579
|
-
const
|
|
9580
|
-
|
|
9581
|
-
if (!toolName || enabled === void 0) {
|
|
9582
|
-
return fallbackDebug(event, base, "malformed tool_toggled payload");
|
|
9583
|
-
}
|
|
9584
|
-
return [
|
|
9585
|
-
{
|
|
9586
|
-
...base,
|
|
9587
|
-
type: "workspace.tool.toggled",
|
|
9588
|
-
toolName,
|
|
9589
|
-
enabled
|
|
9590
|
-
}
|
|
9591
|
-
];
|
|
9956
|
+
__name(normalizeSessionUpdate, "normalizeSessionUpdate");
|
|
9957
|
+
function extractParentToolCallId(update) {
|
|
9958
|
+
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9959
|
+
return meta ? getString2(meta, "parentToolCallId") : void 0;
|
|
9592
9960
|
}
|
|
9593
|
-
__name(
|
|
9594
|
-
function
|
|
9595
|
-
const
|
|
9596
|
-
|
|
9597
|
-
|
|
9598
|
-
|
|
9599
|
-
}
|
|
9600
|
-
const mutation = isSettingsChangedData(event.data) && event.data.mutation;
|
|
9601
|
-
return [
|
|
9602
|
-
{
|
|
9603
|
-
...base,
|
|
9604
|
-
type: "workspace.settings.changed",
|
|
9605
|
-
key,
|
|
9606
|
-
scope: scope ?? "workspace",
|
|
9607
|
-
value: isRecord2(event.data) ? event.data["value"] : void 0,
|
|
9608
|
-
...mutation ? { mutation } : {}
|
|
9609
|
-
}
|
|
9610
|
-
];
|
|
9961
|
+
__name(extractParentToolCallId, "extractParentToolCallId");
|
|
9962
|
+
function extractUpdateMeta(update) {
|
|
9963
|
+
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9964
|
+
if (!meta) return void 0;
|
|
9965
|
+
const { qwenTranscript: _qwenTranscript, ...displayMeta } = meta;
|
|
9966
|
+
return Object.keys(displayMeta).length > 0 ? displayMeta : void 0;
|
|
9611
9967
|
}
|
|
9612
|
-
__name(
|
|
9613
|
-
function
|
|
9614
|
-
if (!isRecord2(event.data))
|
|
9615
|
-
|
|
9616
|
-
|
|
9617
|
-
|
|
9618
|
-
|
|
9619
|
-
|
|
9620
|
-
|
|
9621
|
-
|
|
9622
|
-
|
|
9623
|
-
|
|
9624
|
-
}
|
|
9968
|
+
__name(extractUpdateMeta, "extractUpdateMeta");
|
|
9969
|
+
function extractSourceRecordIds(event) {
|
|
9970
|
+
if (!isRecord2(event.data)) return void 0;
|
|
9971
|
+
const update = getSessionUpdatePayload(event.data);
|
|
9972
|
+
const meta = update && isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9973
|
+
const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
|
|
9974
|
+
const values = transcript?.["sourceRecordIds"];
|
|
9975
|
+
if (!Array.isArray(values)) return void 0;
|
|
9976
|
+
const ids = [
|
|
9977
|
+
...new Set(
|
|
9978
|
+
values.filter((value) => typeof value === "string")
|
|
9979
|
+
)
|
|
9625
9980
|
];
|
|
9981
|
+
return ids.length > 0 ? ids : void 0;
|
|
9626
9982
|
}
|
|
9627
|
-
__name(
|
|
9628
|
-
function
|
|
9629
|
-
const
|
|
9630
|
-
const
|
|
9631
|
-
if (!
|
|
9632
|
-
|
|
9633
|
-
|
|
9634
|
-
|
|
9635
|
-
|
|
9636
|
-
|
|
9637
|
-
|
|
9638
|
-
|
|
9983
|
+
__name(extractSourceRecordIds, "extractSourceRecordIds");
|
|
9984
|
+
function extractAssistantUsage(update) {
|
|
9985
|
+
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
9986
|
+
const usage = meta && isRecord2(meta["usage"]) ? meta["usage"] : void 0;
|
|
9987
|
+
if (!usage) return void 0;
|
|
9988
|
+
const inputTokens = numberField(usage, "inputTokens");
|
|
9989
|
+
const outputTokens = numberField(usage, "outputTokens");
|
|
9990
|
+
if (inputTokens === void 0 && outputTokens === void 0) return void 0;
|
|
9991
|
+
const cachedTokens = numberField(usage, "cachedReadTokens");
|
|
9992
|
+
return {
|
|
9993
|
+
inputTokens: inputTokens ?? 0,
|
|
9994
|
+
outputTokens: outputTokens ?? 0,
|
|
9995
|
+
...cachedTokens !== void 0 ? { cachedTokens } : {}
|
|
9996
|
+
};
|
|
9639
9997
|
}
|
|
9640
|
-
__name(
|
|
9641
|
-
function
|
|
9642
|
-
const
|
|
9643
|
-
const
|
|
9644
|
-
const
|
|
9645
|
-
|
|
9646
|
-
|
|
9647
|
-
|
|
9648
|
-
|
|
9649
|
-
|
|
9998
|
+
__name(extractAssistantUsage, "extractAssistantUsage");
|
|
9999
|
+
function normalizeToolUpdate(update, base) {
|
|
10000
|
+
const metadata = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
10001
|
+
const transcript = metadata && isRecord2(metadata["qwenTranscript"]) ? metadata["qwenTranscript"] : void 0;
|
|
10002
|
+
const resultPreview = createDaemonToolResultTextPreview(
|
|
10003
|
+
getString2(transcript, "resultPreviewText") ?? ""
|
|
10004
|
+
);
|
|
10005
|
+
const toolName = getString2(update, "toolName") ?? getString2(update, "name") ?? (metadata ? getString2(metadata, "toolName") : void 0) ?? (metadata ? getString2(metadata, "name") : void 0);
|
|
10006
|
+
const toolKind = getString2(update, "kind");
|
|
10007
|
+
const explicitTitle = getString2(update, "title");
|
|
10008
|
+
const title = explicitTitle ?? (getString2(update, "sessionUpdate") === "tool_call" ? toolName ?? toolKind : void 0);
|
|
10009
|
+
const rawInputSource = update["rawInput"] ?? update["input"] ?? update["args"];
|
|
10010
|
+
const rawOutputSource = update["rawOutput"] ?? update["output"] ?? update["result"];
|
|
10011
|
+
const rawInput = rawInputSource !== void 0 ? redactSensitiveFields(rawInputSource) : void 0;
|
|
10012
|
+
const rawOutput = rawOutputSource !== void 0 ? redactSensitiveFields(rawOutputSource) : void 0;
|
|
10013
|
+
const content = update["content"] !== void 0 ? redactSensitiveFields(update["content"]) : void 0;
|
|
10014
|
+
const locations = update["locations"] !== void 0 ? redactSensitiveFields(update["locations"]) : void 0;
|
|
10015
|
+
const toolCallId = getString2(update, "toolCallId");
|
|
10016
|
+
const status = getString2(update, "status");
|
|
10017
|
+
if (!toolCallId) {
|
|
10018
|
+
return {
|
|
9650
10019
|
...base,
|
|
9651
|
-
type: "
|
|
9652
|
-
|
|
9653
|
-
|
|
9654
|
-
|
|
9655
|
-
}
|
|
9656
|
-
];
|
|
9657
|
-
}
|
|
9658
|
-
__name(normalizeTrustChangeRequested, "normalizeTrustChangeRequested");
|
|
9659
|
-
function normalizeGithubSetupCompleted(event, base) {
|
|
9660
|
-
const releaseTag = getString2(event.data, "releaseTag");
|
|
9661
|
-
const readmeUrl = getString2(event.data, "readmeUrl");
|
|
9662
|
-
if (!releaseTag || !readmeUrl || !isRecord2(event.data)) {
|
|
9663
|
-
return fallbackDebug(
|
|
9664
|
-
event,
|
|
9665
|
-
base,
|
|
9666
|
-
"malformed github_setup_completed payload"
|
|
9667
|
-
);
|
|
10020
|
+
type: "error",
|
|
10021
|
+
code: "daemon.protocol.tool_update_missing_tool_call_id",
|
|
10022
|
+
recoverable: true,
|
|
10023
|
+
text: `Tool update missing toolCallId${title ? ` (${title})` : ""}`
|
|
10024
|
+
};
|
|
9668
10025
|
}
|
|
9669
|
-
const
|
|
9670
|
-
const
|
|
9671
|
-
|
|
9672
|
-
|
|
9673
|
-
|
|
9674
|
-
|
|
9675
|
-
|
|
9676
|
-
|
|
9677
|
-
|
|
9678
|
-
|
|
9679
|
-
|
|
9680
|
-
|
|
9681
|
-
|
|
9682
|
-
|
|
9683
|
-
}
|
|
9684
|
-
|
|
10026
|
+
const { provenance, serverId } = extractToolProvenance(update, toolName);
|
|
10027
|
+
const rawParentToolCallId = getString2(update, "parentToolCallId") ?? (metadata ? getString2(metadata, "parentToolCallId") : void 0);
|
|
10028
|
+
const parentToolCallId = rawParentToolCallId && rawParentToolCallId !== toolCallId ? rawParentToolCallId : void 0;
|
|
10029
|
+
const subagentType = getString2(update, "subagentType") ?? (metadata ? getString2(metadata, "subagentType") : void 0);
|
|
10030
|
+
return {
|
|
10031
|
+
...base,
|
|
10032
|
+
type: "tool.update",
|
|
10033
|
+
toolCallId,
|
|
10034
|
+
...status ? { status } : {},
|
|
10035
|
+
...title ? { title } : {},
|
|
10036
|
+
...toolName ? { toolName } : {},
|
|
10037
|
+
...toolKind ? { toolKind } : {},
|
|
10038
|
+
...content !== void 0 ? { content } : {},
|
|
10039
|
+
...locations !== void 0 ? { locations } : {},
|
|
10040
|
+
...provenance ? { provenance } : {},
|
|
10041
|
+
...serverId ? { serverId } : {},
|
|
10042
|
+
...parentToolCallId ? { parentToolCallId } : {},
|
|
10043
|
+
...subagentType ? { subagentType } : {},
|
|
10044
|
+
...rawInput !== void 0 ? { rawInput } : {},
|
|
10045
|
+
...rawOutput !== void 0 ? { rawOutput } : {},
|
|
10046
|
+
...resultPreview ? { resultPreview } : {},
|
|
10047
|
+
...rawInput !== void 0 ? { details: capDetails(stringifyRedactedJson(rawInput)) } : rawOutput !== void 0 ? { details: capDetails(stringifyRedactedJson(rawOutput)) } : {}
|
|
10048
|
+
};
|
|
9685
10049
|
}
|
|
9686
|
-
__name(
|
|
9687
|
-
function
|
|
9688
|
-
|
|
9689
|
-
|
|
9690
|
-
|
|
9691
|
-
const
|
|
9692
|
-
const
|
|
9693
|
-
const
|
|
9694
|
-
const
|
|
9695
|
-
const
|
|
9696
|
-
|
|
9697
|
-
|
|
9698
|
-
|
|
9699
|
-
|
|
9700
|
-
|
|
9701
|
-
|
|
9702
|
-
|
|
9703
|
-
|
|
9704
|
-
|
|
9705
|
-
|
|
9706
|
-
|
|
9707
|
-
|
|
10050
|
+
__name(normalizeToolUpdate, "normalizeToolUpdate");
|
|
10051
|
+
function normalizePlanUpdate(update, base) {
|
|
10052
|
+
const entries = Array.isArray(update["entries"]) ? update["entries"] : [];
|
|
10053
|
+
const contentText = capDetails(formatPlanEntries(entries));
|
|
10054
|
+
const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
|
|
10055
|
+
const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
|
|
10056
|
+
const planCallId = getString2(transcript, "planToolCallId") ?? (base.eventId !== void 0 ? `${DAEMON_PLAN_TOOL_CALL_ID}-${base.eventId}` : DAEMON_PLAN_TOOL_CALL_ID);
|
|
10057
|
+
const stats = meta && isRecord2(meta["stats"]) ? meta["stats"] : void 0;
|
|
10058
|
+
const todoPlan = meta && isRecord2(meta["qwenTodoPlan"]) ? meta["qwenTodoPlan"] : void 0;
|
|
10059
|
+
const planId = getString2(todoPlan, "id");
|
|
10060
|
+
const sessionWorkflow = meta?.["qwenSessionWorkflow"] === true;
|
|
10061
|
+
return {
|
|
10062
|
+
...base,
|
|
10063
|
+
type: "tool.update",
|
|
10064
|
+
toolCallId: planCallId,
|
|
10065
|
+
title: "Updated Plan",
|
|
10066
|
+
status: "completed",
|
|
10067
|
+
toolName: "todo_write",
|
|
10068
|
+
toolKind: "updated_plan",
|
|
10069
|
+
content: [
|
|
10070
|
+
{
|
|
10071
|
+
type: "content",
|
|
10072
|
+
content: { type: "text", text: contentText }
|
|
10073
|
+
}
|
|
10074
|
+
],
|
|
10075
|
+
rawOutput: {
|
|
10076
|
+
entries,
|
|
10077
|
+
...stats ? { stats } : {},
|
|
10078
|
+
...planId ? { plan: { id: planId, sourceCallId: planCallId } } : {},
|
|
10079
|
+
...sessionWorkflow ? { sessionWorkflow: true } : {}
|
|
9708
10080
|
}
|
|
9709
|
-
|
|
10081
|
+
};
|
|
9710
10082
|
}
|
|
9711
|
-
__name(
|
|
9712
|
-
function
|
|
9713
|
-
|
|
9714
|
-
|
|
10083
|
+
__name(normalizePlanUpdate, "normalizePlanUpdate");
|
|
10084
|
+
function formatPlanEntries(entries) {
|
|
10085
|
+
return entries.flatMap((entry) => {
|
|
10086
|
+
if (!isRecord2(entry)) return [];
|
|
10087
|
+
const content = getString2(entry, "content");
|
|
10088
|
+
if (!content) return [];
|
|
10089
|
+
const marker = getPlanEntryMarker(getString2(entry, "status"));
|
|
10090
|
+
return [`- [${marker}] ${content}`];
|
|
10091
|
+
}).join("\n");
|
|
10092
|
+
}
|
|
10093
|
+
__name(formatPlanEntries, "formatPlanEntries");
|
|
10094
|
+
function getPlanEntryMarker(status) {
|
|
10095
|
+
switch (status) {
|
|
10096
|
+
case "completed":
|
|
10097
|
+
return "x";
|
|
10098
|
+
case "in_progress":
|
|
10099
|
+
return "-";
|
|
10100
|
+
default:
|
|
10101
|
+
return " ";
|
|
9715
10102
|
}
|
|
9716
|
-
|
|
9717
|
-
|
|
9718
|
-
|
|
9719
|
-
|
|
9720
|
-
|
|
10103
|
+
}
|
|
10104
|
+
__name(getPlanEntryMarker, "getPlanEntryMarker");
|
|
10105
|
+
function extractToolProvenance(update, toolName) {
|
|
10106
|
+
const explicit = getString2(update, "provenance");
|
|
10107
|
+
const explicitServerId = getString2(update, "serverId");
|
|
10108
|
+
if (explicit === "builtin" || explicit === "mcp" || explicit === "subagent") {
|
|
9721
10109
|
return {
|
|
9722
|
-
|
|
9723
|
-
|
|
9724
|
-
reason: "budget_exhausted"
|
|
10110
|
+
provenance: explicit,
|
|
10111
|
+
...explicit === "mcp" && explicitServerId ? { serverId: explicitServerId } : {}
|
|
9725
10112
|
};
|
|
9726
|
-
}).filter(
|
|
9727
|
-
(v) => v !== null
|
|
9728
|
-
) : [];
|
|
9729
|
-
const budget = numberField(event.data, "budget");
|
|
9730
|
-
const liveCount = numberField(event.data, "liveCount");
|
|
9731
|
-
const reservedCount = numberField(event.data, "reservedCount");
|
|
9732
|
-
if (refusedServers.length === 0 || budget === void 0 || liveCount === void 0 || reservedCount === void 0) {
|
|
9733
|
-
return fallbackDebug(
|
|
9734
|
-
event,
|
|
9735
|
-
base,
|
|
9736
|
-
"malformed mcp_child_refused_batch payload"
|
|
9737
|
-
);
|
|
9738
10113
|
}
|
|
9739
|
-
|
|
9740
|
-
|
|
9741
|
-
|
|
9742
|
-
|
|
9743
|
-
|
|
9744
|
-
budget,
|
|
9745
|
-
liveCount,
|
|
9746
|
-
reservedCount
|
|
10114
|
+
if (toolName && toolName.startsWith("mcp__")) {
|
|
10115
|
+
const rest = toolName.slice("mcp__".length);
|
|
10116
|
+
const sep = rest.indexOf("__");
|
|
10117
|
+
if (sep > 0) {
|
|
10118
|
+
return { provenance: "mcp", serverId: rest.slice(0, sep) };
|
|
9747
10119
|
}
|
|
9748
|
-
|
|
10120
|
+
}
|
|
10121
|
+
return {};
|
|
9749
10122
|
}
|
|
9750
|
-
__name(
|
|
9751
|
-
function
|
|
9752
|
-
|
|
9753
|
-
|
|
9754
|
-
|
|
9755
|
-
|
|
10123
|
+
__name(extractToolProvenance, "extractToolProvenance");
|
|
10124
|
+
function asDaemonErrorKind(value) {
|
|
10125
|
+
if (!value) return void 0;
|
|
10126
|
+
return DAEMON_ERROR_KIND_SET.has(value) ? value : void 0;
|
|
10127
|
+
}
|
|
10128
|
+
__name(asDaemonErrorKind, "asDaemonErrorKind");
|
|
10129
|
+
function debugBlockText(prefix, data) {
|
|
10130
|
+
return capDetails(`${prefix}: ${stringifyRedactedJson(data)}`);
|
|
10131
|
+
}
|
|
10132
|
+
__name(debugBlockText, "debugBlockText");
|
|
10133
|
+
function normalizePermissionRequest(event, base) {
|
|
10134
|
+
if (!isRecord2(event.data)) {
|
|
10135
|
+
return [
|
|
10136
|
+
{
|
|
10137
|
+
...base,
|
|
10138
|
+
type: "debug",
|
|
10139
|
+
debugReason: "malformed_payload",
|
|
10140
|
+
text: debugBlockText("permission_request", event.data)
|
|
10141
|
+
}
|
|
10142
|
+
];
|
|
10143
|
+
}
|
|
10144
|
+
const requestId = getString2(event.data, "requestId");
|
|
10145
|
+
if (!requestId) {
|
|
10146
|
+
return [
|
|
10147
|
+
{
|
|
10148
|
+
...base,
|
|
10149
|
+
type: "debug",
|
|
10150
|
+
debugReason: "malformed_payload",
|
|
10151
|
+
text: debugBlockText("permission_request", event.data)
|
|
10152
|
+
}
|
|
10153
|
+
];
|
|
9756
10154
|
}
|
|
10155
|
+
const toolCall = event.data["toolCall"] !== void 0 ? redactSensitiveFields(event.data["toolCall"]) : void 0;
|
|
9757
10156
|
return [
|
|
9758
10157
|
{
|
|
9759
10158
|
...base,
|
|
9760
|
-
type: "
|
|
9761
|
-
|
|
9762
|
-
|
|
10159
|
+
type: "permission.request",
|
|
10160
|
+
requestId,
|
|
10161
|
+
sessionId: getString2(event.data, "sessionId"),
|
|
10162
|
+
title: describeToolCall(toolCall),
|
|
10163
|
+
options: normalizePermissionOptions(event.data["options"]),
|
|
10164
|
+
toolCall
|
|
9763
10165
|
}
|
|
9764
10166
|
];
|
|
9765
10167
|
}
|
|
9766
|
-
__name(
|
|
9767
|
-
function
|
|
9768
|
-
const
|
|
9769
|
-
|
|
9770
|
-
|
|
9771
|
-
|
|
9772
|
-
|
|
9773
|
-
|
|
9774
|
-
|
|
9775
|
-
|
|
10168
|
+
__name(normalizePermissionRequest, "normalizePermissionRequest");
|
|
10169
|
+
function normalizePermissionResolved(event, base) {
|
|
10170
|
+
const requestId = getString2(event.data, "requestId");
|
|
10171
|
+
if (!requestId) {
|
|
10172
|
+
return [
|
|
10173
|
+
{
|
|
10174
|
+
...base,
|
|
10175
|
+
type: "debug",
|
|
10176
|
+
debugReason: "malformed_payload",
|
|
10177
|
+
text: debugBlockText(event.type, event.data)
|
|
10178
|
+
}
|
|
10179
|
+
];
|
|
9776
10180
|
}
|
|
10181
|
+
const voterClientId = getString2(event.data, "voterClientId") ?? base.originatorClientId;
|
|
9777
10182
|
return [
|
|
9778
10183
|
{
|
|
9779
10184
|
...base,
|
|
9780
|
-
type: "
|
|
9781
|
-
|
|
9782
|
-
|
|
10185
|
+
type: "permission.resolved",
|
|
10186
|
+
requestId,
|
|
10187
|
+
outcome: describePermissionOutcome(event.data),
|
|
10188
|
+
...voterClientId ? { voterClientId } : {}
|
|
9783
10189
|
}
|
|
9784
10190
|
];
|
|
9785
10191
|
}
|
|
9786
|
-
__name(
|
|
9787
|
-
function
|
|
9788
|
-
|
|
9789
|
-
const
|
|
9790
|
-
|
|
9791
|
-
|
|
9792
|
-
|
|
9793
|
-
|
|
9794
|
-
|
|
9795
|
-
|
|
9796
|
-
|
|
9797
|
-
"
|
|
9798
|
-
|
|
9799
|
-
return
|
|
10192
|
+
__name(normalizePermissionResolved, "normalizePermissionResolved");
|
|
10193
|
+
function getSessionUpdatePayload(value) {
|
|
10194
|
+
if (!isRecord2(value)) return void 0;
|
|
10195
|
+
const update = value["update"];
|
|
10196
|
+
return isRecord2(update) ? update : value;
|
|
10197
|
+
}
|
|
10198
|
+
__name(getSessionUpdatePayload, "getSessionUpdatePayload");
|
|
10199
|
+
function normalizePermissionOptions(value) {
|
|
10200
|
+
if (!Array.isArray(value)) return [];
|
|
10201
|
+
return value.flatMap((option) => {
|
|
10202
|
+
if (!isRecord2(option)) return [];
|
|
10203
|
+
const optionId = getString2(option, "optionId");
|
|
10204
|
+
if (!optionId) return [];
|
|
10205
|
+
return [
|
|
10206
|
+
{
|
|
10207
|
+
optionId,
|
|
10208
|
+
label: getString2(option, "label") ?? getString2(option, "title") ?? getString2(option, "name") ?? optionId,
|
|
10209
|
+
...getString2(option, "description") ? { description: getString2(option, "description") } : {},
|
|
10210
|
+
raw: option
|
|
10211
|
+
}
|
|
10212
|
+
];
|
|
10213
|
+
});
|
|
10214
|
+
}
|
|
10215
|
+
__name(normalizePermissionOptions, "normalizePermissionOptions");
|
|
10216
|
+
function describePermissionOutcome(value) {
|
|
10217
|
+
if (!isRecord2(value)) return stringifyJson(value);
|
|
10218
|
+
const outcome = value["outcome"];
|
|
10219
|
+
if (typeof outcome === "string") return outcome;
|
|
10220
|
+
if (isRecord2(outcome)) {
|
|
10221
|
+
const kind = getString2(outcome, "outcome") ?? "selected";
|
|
10222
|
+
const optionId = getString2(outcome, "optionId");
|
|
10223
|
+
return optionId ? `${kind}:${optionId}` : kind;
|
|
9800
10224
|
}
|
|
10225
|
+
return getFirstString(value, ["status", "reason"]) ?? stringifyJson(value);
|
|
10226
|
+
}
|
|
10227
|
+
__name(describePermissionOutcome, "describePermissionOutcome");
|
|
10228
|
+
function describeToolCall(value) {
|
|
10229
|
+
if (!isRecord2(value)) return "Tool permission";
|
|
10230
|
+
return getString2(value, "title") ?? getString2(value, "name") ?? getString2(value, "kind") ?? getString2(value, "toolName") ?? "Tool permission";
|
|
10231
|
+
}
|
|
10232
|
+
__name(describeToolCall, "describeToolCall");
|
|
10233
|
+
function getShellStream(value) {
|
|
10234
|
+
const stream = getString2(value, "stream");
|
|
10235
|
+
return stream === "stdout" || stream === "stderr" ? stream : void 0;
|
|
10236
|
+
}
|
|
10237
|
+
__name(getShellStream, "getShellStream");
|
|
10238
|
+
function getSource(value) {
|
|
10239
|
+
if (!isRecord2(value)) return void 0;
|
|
10240
|
+
const direct = getString2(value, "source");
|
|
10241
|
+
if (direct) return direct;
|
|
10242
|
+
const meta = value["_meta"];
|
|
10243
|
+
return isRecord2(meta) ? getString2(meta, "source") : void 0;
|
|
10244
|
+
}
|
|
10245
|
+
__name(getSource, "getSource");
|
|
10246
|
+
function fallbackDebug(event, base, reason) {
|
|
9801
10247
|
return [
|
|
9802
10248
|
{
|
|
9803
10249
|
...base,
|
|
9804
|
-
type: "
|
|
9805
|
-
|
|
9806
|
-
|
|
10250
|
+
type: "debug",
|
|
10251
|
+
debugReason: "malformed_payload",
|
|
10252
|
+
text: `${event.type}: ${reason}`
|
|
9807
10253
|
}
|
|
9808
10254
|
];
|
|
9809
10255
|
}
|
|
9810
|
-
__name(
|
|
9811
|
-
function
|
|
9812
|
-
const
|
|
9813
|
-
|
|
9814
|
-
const
|
|
9815
|
-
const source = getString2(event.data, "source");
|
|
9816
|
-
const name = getString2(event.data, "name");
|
|
9817
|
-
const version = getString2(event.data, "version");
|
|
9818
|
-
const error = getString2(event.data, "error");
|
|
9819
|
-
if (refreshed === void 0 || failed === void 0) {
|
|
9820
|
-
return fallbackDebug(event, base, "malformed extensions_changed payload");
|
|
9821
|
-
}
|
|
9822
|
-
if (status !== void 0 && status !== "installed" && status !== "enabled" && status !== "disabled" && status !== "updated" && status !== "uninstalled" && status !== "failed") {
|
|
9823
|
-
return fallbackDebug(event, base, "malformed extensions_changed payload");
|
|
9824
|
-
}
|
|
10256
|
+
__name(fallbackDebug, "fallbackDebug");
|
|
10257
|
+
function normalizeSessionMetadataUpdated(event, base) {
|
|
10258
|
+
const sessionId = getString2(event.data, "sessionId");
|
|
10259
|
+
if (!sessionId) return fallbackDebug(event, base, "missing sessionId");
|
|
10260
|
+
const displayName = getString2(event.data, "displayName");
|
|
9825
10261
|
return [
|
|
9826
10262
|
{
|
|
9827
10263
|
...base,
|
|
9828
|
-
type: "
|
|
9829
|
-
|
|
9830
|
-
|
|
9831
|
-
...status ? { status } : {},
|
|
9832
|
-
...source ? { source } : {},
|
|
9833
|
-
...name ? { name } : {},
|
|
9834
|
-
...version ? { version } : {},
|
|
9835
|
-
...error ? { error } : {}
|
|
10264
|
+
type: "session.metadata.changed",
|
|
10265
|
+
sessionId,
|
|
10266
|
+
...displayName !== void 0 ? { displayName } : {}
|
|
9836
10267
|
}
|
|
9837
10268
|
];
|
|
9838
10269
|
}
|
|
9839
|
-
__name(
|
|
9840
|
-
function
|
|
9841
|
-
const
|
|
9842
|
-
const
|
|
9843
|
-
|
|
9844
|
-
|
|
9845
|
-
|
|
9846
|
-
|
|
9847
|
-
|
|
9848
|
-
|
|
9849
|
-
);
|
|
10270
|
+
__name(normalizeSessionMetadataUpdated, "normalizeSessionMetadataUpdated");
|
|
10271
|
+
function normalizeArtifactChanged(event, base) {
|
|
10272
|
+
const sessionId = getString2(event.data, "sessionId");
|
|
10273
|
+
const change = isRecord2(event.data) ? event.data["change"] : void 0;
|
|
10274
|
+
if (!sessionId || !isRecord2(change)) {
|
|
10275
|
+
return fallbackDebug(event, base, "malformed artifact_changed payload");
|
|
10276
|
+
}
|
|
10277
|
+
const action = getString2(change, "action");
|
|
10278
|
+
const artifactId = getString2(change, "artifactId");
|
|
10279
|
+
if (!action || !artifactId) {
|
|
10280
|
+
return fallbackDebug(event, base, "missing action or artifactId");
|
|
9850
10281
|
}
|
|
9851
10282
|
return [
|
|
9852
10283
|
{
|
|
9853
10284
|
...base,
|
|
9854
|
-
type: "
|
|
9855
|
-
|
|
9856
|
-
|
|
9857
|
-
expiresAt
|
|
10285
|
+
type: "session.artifact.changed",
|
|
10286
|
+
sessionId,
|
|
10287
|
+
change
|
|
9858
10288
|
}
|
|
9859
10289
|
];
|
|
9860
10290
|
}
|
|
9861
|
-
__name(
|
|
9862
|
-
function
|
|
9863
|
-
const
|
|
9864
|
-
const
|
|
9865
|
-
|
|
9866
|
-
|
|
9867
|
-
|
|
9868
|
-
base,
|
|
9869
|
-
"malformed auth_device_flow_throttled payload"
|
|
9870
|
-
);
|
|
10291
|
+
__name(normalizeArtifactChanged, "normalizeArtifactChanged");
|
|
10292
|
+
function normalizeApprovalModeChanged(event, base) {
|
|
10293
|
+
const sessionId = getString2(event.data, "sessionId");
|
|
10294
|
+
const previous = getString2(event.data, "previous");
|
|
10295
|
+
const next = getString2(event.data, "next");
|
|
10296
|
+
if (!sessionId || !previous || !next) {
|
|
10297
|
+
return fallbackDebug(event, base, "missing sessionId / previous / next");
|
|
9871
10298
|
}
|
|
10299
|
+
const persisted = isRecord2(event.data) && typeof event.data["persisted"] === "boolean" ? event.data["persisted"] : false;
|
|
9872
10300
|
return [
|
|
9873
10301
|
{
|
|
9874
10302
|
...base,
|
|
9875
|
-
type: "
|
|
9876
|
-
|
|
9877
|
-
|
|
10303
|
+
type: "session.approval_mode.changed",
|
|
10304
|
+
sessionId,
|
|
10305
|
+
previous,
|
|
10306
|
+
next,
|
|
10307
|
+
persisted
|
|
9878
10308
|
}
|
|
9879
10309
|
];
|
|
9880
10310
|
}
|
|
9881
|
-
__name(
|
|
9882
|
-
function
|
|
9883
|
-
const
|
|
9884
|
-
|
|
9885
|
-
|
|
9886
|
-
|
|
9887
|
-
|
|
9888
|
-
|
|
9889
|
-
|
|
9890
|
-
|
|
10311
|
+
__name(normalizeApprovalModeChanged, "normalizeApprovalModeChanged");
|
|
10312
|
+
function normalizeMemoryChanged(event, base) {
|
|
10313
|
+
const scope = getString2(event.data, "scope");
|
|
10314
|
+
if (scope === "managed") {
|
|
10315
|
+
const source = getString2(event.data, "source");
|
|
10316
|
+
const taskId = getString2(event.data, "taskId");
|
|
10317
|
+
const touchedScopes = event.data?.["touchedScopes"];
|
|
10318
|
+
if (!(source && taskId && Array.isArray(touchedScopes)) || touchedScopes.some((s) => s !== "user" && s !== "project")) {
|
|
10319
|
+
return fallbackDebug(event, base, MALFORMED_MEMORY_CHANGED);
|
|
10320
|
+
}
|
|
10321
|
+
return [
|
|
10322
|
+
{
|
|
10323
|
+
...base,
|
|
10324
|
+
type: "workspace.memory.changed",
|
|
10325
|
+
scope,
|
|
10326
|
+
source,
|
|
10327
|
+
taskId,
|
|
10328
|
+
touchedScopes
|
|
10329
|
+
}
|
|
10330
|
+
];
|
|
10331
|
+
}
|
|
10332
|
+
const filePath = getString2(event.data, "filePath");
|
|
10333
|
+
const mode = getString2(event.data, "mode");
|
|
10334
|
+
const bytesWritten = numberField(
|
|
10335
|
+
isRecord2(event.data) ? event.data : void 0,
|
|
10336
|
+
"bytesWritten"
|
|
10337
|
+
);
|
|
10338
|
+
if (scope !== "workspace" && scope !== "global" || !filePath || mode !== "append" && mode !== "replace" || bytesWritten === void 0) {
|
|
10339
|
+
return fallbackDebug(event, base, MALFORMED_MEMORY_CHANGED);
|
|
9891
10340
|
}
|
|
9892
|
-
const expiresAt = numberField(event.data, "expiresAt");
|
|
9893
|
-
const accountAlias = getString2(event.data, "accountAlias");
|
|
9894
10341
|
return [
|
|
9895
10342
|
{
|
|
9896
10343
|
...base,
|
|
9897
|
-
type: "
|
|
9898
|
-
|
|
9899
|
-
|
|
9900
|
-
|
|
9901
|
-
|
|
10344
|
+
type: "workspace.memory.changed",
|
|
10345
|
+
scope,
|
|
10346
|
+
filePath,
|
|
10347
|
+
mode,
|
|
10348
|
+
bytesWritten
|
|
9902
10349
|
}
|
|
9903
10350
|
];
|
|
9904
10351
|
}
|
|
9905
|
-
__name(
|
|
9906
|
-
function
|
|
9907
|
-
const
|
|
9908
|
-
const
|
|
9909
|
-
|
|
9910
|
-
|
|
9911
|
-
|
|
9912
|
-
base,
|
|
9913
|
-
"malformed auth_device_flow_failed payload"
|
|
9914
|
-
);
|
|
10352
|
+
__name(normalizeMemoryChanged, "normalizeMemoryChanged");
|
|
10353
|
+
function normalizeAgentChanged(event, base) {
|
|
10354
|
+
const change = getString2(event.data, "change");
|
|
10355
|
+
const name = getString2(event.data, "name");
|
|
10356
|
+
const level = getString2(event.data, "level");
|
|
10357
|
+
if (change !== "created" && change !== "updated" && change !== "deleted" || !name || level !== "project" && level !== "user") {
|
|
10358
|
+
return fallbackDebug(event, base, "malformed agent_changed payload");
|
|
9915
10359
|
}
|
|
9916
|
-
const hint = getString2(event.data, "hint");
|
|
9917
10360
|
return [
|
|
9918
10361
|
{
|
|
9919
10362
|
...base,
|
|
9920
|
-
type: "
|
|
9921
|
-
|
|
9922
|
-
|
|
9923
|
-
|
|
10363
|
+
type: "workspace.agent.changed",
|
|
10364
|
+
change,
|
|
10365
|
+
name,
|
|
10366
|
+
level
|
|
9924
10367
|
}
|
|
9925
10368
|
];
|
|
9926
10369
|
}
|
|
9927
|
-
__name(
|
|
9928
|
-
function
|
|
9929
|
-
|
|
9930
|
-
|
|
9931
|
-
|
|
9932
|
-
|
|
9933
|
-
const deviceFlowId = getString2(event.data, "deviceFlowId");
|
|
9934
|
-
if (!deviceFlowId) {
|
|
9935
|
-
return fallbackDebug(
|
|
9936
|
-
event,
|
|
9937
|
-
base,
|
|
9938
|
-
"malformed auth_device_flow_cancelled payload"
|
|
9939
|
-
);
|
|
9940
|
-
}
|
|
9941
|
-
return [{ ...base, type: "auth.device_flow.cancelled", deviceFlowId }];
|
|
9942
|
-
}
|
|
9943
|
-
__name(normalizeAuthDeviceFlowCancelled, "normalizeAuthDeviceFlowCancelled");
|
|
9944
|
-
function numberField(value, key) {
|
|
9945
|
-
if (!isRecord2(value)) return void 0;
|
|
9946
|
-
const v = value[key];
|
|
9947
|
-
return typeof v === "number" && Number.isFinite(v) ? v : void 0;
|
|
9948
|
-
}
|
|
9949
|
-
__name(numberField, "numberField");
|
|
9950
|
-
function stringField(value, key) {
|
|
9951
|
-
if (!isRecord2(value)) return void 0;
|
|
9952
|
-
const v = value[key];
|
|
9953
|
-
return typeof v === "string" && v.length > 0 ? v : void 0;
|
|
9954
|
-
}
|
|
9955
|
-
__name(stringField, "stringField");
|
|
9956
|
-
|
|
9957
|
-
// packages/sdk-typescript/src/daemon/ui/toolPreview.ts
|
|
9958
|
-
init_esbuild_shims();
|
|
9959
|
-
var MAX_TOOL_PREVIEW_DEPTH = 8;
|
|
9960
|
-
function createDaemonToolPreview(input, opts = {}, depth = 0) {
|
|
9961
|
-
if (depth > MAX_TOOL_PREVIEW_DEPTH) {
|
|
9962
|
-
const summary2 = opts.title ?? opts.toolName ?? opts.toolKind;
|
|
9963
|
-
return { kind: "generic", ...summary2 ? { summary: summary2 } : {} };
|
|
10370
|
+
__name(normalizeAgentChanged, "normalizeAgentChanged");
|
|
10371
|
+
function normalizeToolToggled(event, base) {
|
|
10372
|
+
const toolName = getString2(event.data, "toolName");
|
|
10373
|
+
const enabled = isRecord2(event.data) && typeof event.data["enabled"] === "boolean" ? event.data["enabled"] : void 0;
|
|
10374
|
+
if (!toolName || enabled === void 0) {
|
|
10375
|
+
return fallbackDebug(event, base, "malformed tool_toggled payload");
|
|
9964
10376
|
}
|
|
9965
|
-
|
|
9966
|
-
|
|
9967
|
-
|
|
9968
|
-
|
|
9969
|
-
|
|
9970
|
-
|
|
9971
|
-
{
|
|
9972
|
-
title: opts.title ?? getFirstString(input, ["title"]),
|
|
9973
|
-
toolName: opts.toolName ?? getFirstString(input, ["toolName", "name"]) ?? (meta ? getFirstString(meta, ["toolName"]) : void 0),
|
|
9974
|
-
toolKind: opts.toolKind ?? getFirstString(input, ["kind"])
|
|
9975
|
-
},
|
|
9976
|
-
depth + 1
|
|
9977
|
-
);
|
|
9978
|
-
if (nested.kind !== "generic" || !nested.summary) return nested;
|
|
10377
|
+
return [
|
|
10378
|
+
{
|
|
10379
|
+
...base,
|
|
10380
|
+
type: "workspace.tool.toggled",
|
|
10381
|
+
toolName,
|
|
10382
|
+
enabled
|
|
9979
10383
|
}
|
|
10384
|
+
];
|
|
10385
|
+
}
|
|
10386
|
+
__name(normalizeToolToggled, "normalizeToolToggled");
|
|
10387
|
+
function normalizeSettingsChanged(event, base) {
|
|
10388
|
+
const key = getString2(event.data, "key");
|
|
10389
|
+
const scope = getString2(event.data, "scope");
|
|
10390
|
+
if (!key) {
|
|
10391
|
+
return fallbackDebug(event, base, "malformed settings_changed payload");
|
|
9980
10392
|
}
|
|
9981
|
-
const
|
|
9982
|
-
|
|
9983
|
-
|
|
9984
|
-
|
|
9985
|
-
|
|
9986
|
-
|
|
9987
|
-
|
|
9988
|
-
|
|
9989
|
-
|
|
9990
|
-
if (search) return search;
|
|
9991
|
-
const imageGeneration = detectImageGeneration(input, opts);
|
|
9992
|
-
if (imageGeneration) return imageGeneration;
|
|
9993
|
-
const fileDiff = detectFileDiff(input, opts);
|
|
9994
|
-
if (fileDiff) return fileDiff;
|
|
9995
|
-
const fileRead = detectFileRead(input, opts);
|
|
9996
|
-
if (fileRead) return fileRead;
|
|
9997
|
-
const webFetch = detectWebFetch(input);
|
|
9998
|
-
if (webFetch) return webFetch;
|
|
9999
|
-
const codeBlock = detectCodeBlock(input, opts);
|
|
10000
|
-
if (codeBlock) return codeBlock;
|
|
10001
|
-
const tabular = detectTabular(input);
|
|
10002
|
-
if (tabular) return tabular;
|
|
10003
|
-
if (isRecord2(input)) {
|
|
10004
|
-
const command = getFirstString(input, ["command", "cmd"]);
|
|
10005
|
-
if (command) {
|
|
10006
|
-
const cwd = getFirstString(input, [
|
|
10007
|
-
"cwd",
|
|
10008
|
-
"directory",
|
|
10009
|
-
"workingDirectory"
|
|
10010
|
-
]);
|
|
10011
|
-
return { kind: "command", command, ...cwd ? { cwd } : {} };
|
|
10012
|
-
}
|
|
10013
|
-
const rows = collectPreviewRows(input);
|
|
10014
|
-
if (rows.length > 0) {
|
|
10015
|
-
return { kind: "key_value", rows };
|
|
10393
|
+
const mutation = isSettingsChangedData(event.data) && event.data.mutation;
|
|
10394
|
+
return [
|
|
10395
|
+
{
|
|
10396
|
+
...base,
|
|
10397
|
+
type: "workspace.settings.changed",
|
|
10398
|
+
key,
|
|
10399
|
+
scope: scope ?? "workspace",
|
|
10400
|
+
value: isRecord2(event.data) ? event.data["value"] : void 0,
|
|
10401
|
+
...mutation ? { mutation } : {}
|
|
10016
10402
|
}
|
|
10017
|
-
|
|
10018
|
-
const summary = opts.title ?? opts.toolName ?? opts.toolKind;
|
|
10019
|
-
return { kind: "generic", ...summary ? { summary } : {} };
|
|
10020
|
-
}
|
|
10021
|
-
__name(createDaemonToolPreview, "createDaemonToolPreview");
|
|
10022
|
-
function detectFileDiff(input, opts = {}) {
|
|
10023
|
-
if (!isRecord2(input)) return void 0;
|
|
10024
|
-
const path = getFirstString(input, [
|
|
10025
|
-
"path",
|
|
10026
|
-
"filePath",
|
|
10027
|
-
"file_path",
|
|
10028
|
-
"absolutePath"
|
|
10029
|
-
]);
|
|
10030
|
-
if (!path) return void 0;
|
|
10031
|
-
const oldText = getFirstString(input, [
|
|
10032
|
-
"oldText",
|
|
10033
|
-
"old_text",
|
|
10034
|
-
"old_string",
|
|
10035
|
-
"old_str",
|
|
10036
|
-
"oldString"
|
|
10037
|
-
]);
|
|
10038
|
-
const explicitNewText = getFirstString(input, [
|
|
10039
|
-
"newText",
|
|
10040
|
-
"new_text",
|
|
10041
|
-
"new_string",
|
|
10042
|
-
"new_str",
|
|
10043
|
-
"newString"
|
|
10044
|
-
]);
|
|
10045
|
-
const toolNameLower = (opts.toolName ?? "").toLowerCase();
|
|
10046
|
-
const writeIntent = /(?:^|[_-])(write|create|edit|replace|save|update|overwrite|modify|patch|generate)(?:$|[_-])/.test(
|
|
10047
|
-
toolNameLower
|
|
10048
|
-
) || !!oldText;
|
|
10049
|
-
const contentField = explicitNewText === void 0 && writeIntent ? getFirstString(input, ["content"]) : void 0;
|
|
10050
|
-
const newText = explicitNewText ?? contentField;
|
|
10051
|
-
const patch = getFirstString(input, ["patch", "diff", "unified_diff"]);
|
|
10052
|
-
if (!oldText && !newText && !patch) return void 0;
|
|
10053
|
-
return {
|
|
10054
|
-
kind: "file_diff",
|
|
10055
|
-
path,
|
|
10056
|
-
...oldText ? { oldText } : {},
|
|
10057
|
-
...newText ? { newText } : {},
|
|
10058
|
-
...patch ? { patch } : {}
|
|
10059
|
-
};
|
|
10403
|
+
];
|
|
10060
10404
|
}
|
|
10061
|
-
__name(
|
|
10062
|
-
function
|
|
10063
|
-
if (!isRecord2(
|
|
10064
|
-
|
|
10065
|
-
|
|
10066
|
-
|
|
10067
|
-
|
|
10068
|
-
|
|
10069
|
-
|
|
10070
|
-
|
|
10071
|
-
|
|
10072
|
-
|
|
10073
|
-
const rangeArr = input["lineRange"] ?? input["line_range"] ?? input["range"];
|
|
10074
|
-
let range;
|
|
10075
|
-
if (Array.isArray(rangeArr) && rangeArr.length === 2 && typeof rangeArr[0] === "number" && typeof rangeArr[1] === "number") {
|
|
10076
|
-
range = [rangeArr[0], rangeArr[1]];
|
|
10077
|
-
} else {
|
|
10078
|
-
const offset = input["offset"];
|
|
10079
|
-
const limit = input["limit"];
|
|
10080
|
-
if (typeof offset === "number" && typeof limit === "number" && limit > 0) {
|
|
10081
|
-
range = [offset + 1, offset + limit];
|
|
10405
|
+
__name(normalizeSettingsChanged, "normalizeSettingsChanged");
|
|
10406
|
+
function normalizeSettingsReloaded(event, base) {
|
|
10407
|
+
if (!isRecord2(event.data)) {
|
|
10408
|
+
return fallbackDebug(event, base, "malformed settings_reloaded payload");
|
|
10409
|
+
}
|
|
10410
|
+
return [
|
|
10411
|
+
{
|
|
10412
|
+
...base,
|
|
10413
|
+
type: "workspace.settings.changed",
|
|
10414
|
+
key: "settings_reloaded",
|
|
10415
|
+
scope: "workspace",
|
|
10416
|
+
value: event.data
|
|
10082
10417
|
}
|
|
10418
|
+
];
|
|
10419
|
+
}
|
|
10420
|
+
__name(normalizeSettingsReloaded, "normalizeSettingsReloaded");
|
|
10421
|
+
function normalizeWorkspaceInitialized(event, base) {
|
|
10422
|
+
const path = getString2(event.data, "path");
|
|
10423
|
+
const action = getString2(event.data, "action");
|
|
10424
|
+
if (!path || action !== "created" && action !== "overwrote" && action !== "noop") {
|
|
10425
|
+
return fallbackDebug(
|
|
10426
|
+
event,
|
|
10427
|
+
base,
|
|
10428
|
+
"malformed workspace_initialized payload"
|
|
10429
|
+
);
|
|
10083
10430
|
}
|
|
10084
|
-
|
|
10085
|
-
return {
|
|
10086
|
-
kind: "file_read",
|
|
10087
|
-
path,
|
|
10088
|
-
...range ? { range } : {}
|
|
10089
|
-
};
|
|
10431
|
+
return [{ ...base, type: "workspace.initialized", path, action }];
|
|
10090
10432
|
}
|
|
10091
|
-
__name(
|
|
10092
|
-
function
|
|
10093
|
-
|
|
10094
|
-
const
|
|
10095
|
-
|
|
10096
|
-
if (
|
|
10097
|
-
|
|
10098
|
-
|
|
10099
|
-
|
|
10100
|
-
|
|
10101
|
-
|
|
10102
|
-
|
|
10433
|
+
__name(normalizeWorkspaceInitialized, "normalizeWorkspaceInitialized");
|
|
10434
|
+
function normalizeTrustChangeRequested(event, base) {
|
|
10435
|
+
const workspaceCwd = getString2(event.data, "workspaceCwd");
|
|
10436
|
+
const desiredState = getString2(event.data, "desiredState");
|
|
10437
|
+
const reason = getString2(event.data, "reason");
|
|
10438
|
+
if (!workspaceCwd || desiredState !== "trusted" && desiredState !== "untrusted") {
|
|
10439
|
+
return fallbackDebug(event, base, "bad trust_change_requested payload");
|
|
10440
|
+
}
|
|
10441
|
+
return [
|
|
10442
|
+
{
|
|
10443
|
+
...base,
|
|
10444
|
+
type: "workspace.trust.change.requested",
|
|
10445
|
+
workspaceCwd,
|
|
10446
|
+
desiredState,
|
|
10447
|
+
...reason !== void 0 ? { reason } : {}
|
|
10448
|
+
}
|
|
10449
|
+
];
|
|
10103
10450
|
}
|
|
10104
|
-
__name(
|
|
10105
|
-
function
|
|
10106
|
-
const
|
|
10107
|
-
|
|
10108
|
-
|
|
10109
|
-
|
|
10110
|
-
|
|
10111
|
-
|
|
10112
|
-
|
|
10113
|
-
|
|
10114
|
-
|
|
10115
|
-
|
|
10116
|
-
|
|
10117
|
-
|
|
10118
|
-
|
|
10119
|
-
|
|
10120
|
-
|
|
10121
|
-
|
|
10122
|
-
|
|
10451
|
+
__name(normalizeTrustChangeRequested, "normalizeTrustChangeRequested");
|
|
10452
|
+
function normalizeGithubSetupCompleted(event, base) {
|
|
10453
|
+
const releaseTag = getString2(event.data, "releaseTag");
|
|
10454
|
+
const readmeUrl = getString2(event.data, "readmeUrl");
|
|
10455
|
+
if (!releaseTag || !readmeUrl || !isRecord2(event.data)) {
|
|
10456
|
+
return fallbackDebug(
|
|
10457
|
+
event,
|
|
10458
|
+
base,
|
|
10459
|
+
"malformed github_setup_completed payload"
|
|
10460
|
+
);
|
|
10461
|
+
}
|
|
10462
|
+
const workflows = event.data["workflows"];
|
|
10463
|
+
const warnings = event.data["warnings"];
|
|
10464
|
+
return [
|
|
10465
|
+
{
|
|
10466
|
+
...base,
|
|
10467
|
+
type: "workspace.github.setup.completed",
|
|
10468
|
+
releaseTag,
|
|
10469
|
+
readmeUrl,
|
|
10470
|
+
...typeof event.data["secretsUrl"] === "string" ? { secretsUrl: event.data["secretsUrl"] } : {},
|
|
10471
|
+
workflows: Array.isArray(workflows) ? workflows : [],
|
|
10472
|
+
gitignore: event.data["gitignore"],
|
|
10473
|
+
warnings: Array.isArray(warnings) ? warnings.filter(
|
|
10474
|
+
(warning) => typeof warning === "string"
|
|
10475
|
+
) : []
|
|
10123
10476
|
}
|
|
10477
|
+
];
|
|
10478
|
+
}
|
|
10479
|
+
__name(normalizeGithubSetupCompleted, "normalizeGithubSetupCompleted");
|
|
10480
|
+
function normalizeMcpBudgetWarning(event, base) {
|
|
10481
|
+
if (!isRecord2(event.data)) {
|
|
10482
|
+
return fallbackDebug(event, base, "non-object payload");
|
|
10124
10483
|
}
|
|
10125
|
-
|
|
10126
|
-
|
|
10127
|
-
|
|
10128
|
-
|
|
10129
|
-
|
|
10130
|
-
|
|
10484
|
+
const liveCount = numberField(event.data, "liveCount");
|
|
10485
|
+
const reservedCount = numberField(event.data, "reservedCount");
|
|
10486
|
+
const budget = numberField(event.data, "budget");
|
|
10487
|
+
const thresholdRatio = numberField(event.data, "thresholdRatio");
|
|
10488
|
+
const mode = getString2(event.data, "mode");
|
|
10489
|
+
if (liveCount === void 0 || reservedCount === void 0 || budget === void 0 || thresholdRatio === void 0 || mode !== "warn" && mode !== "enforce") {
|
|
10490
|
+
return fallbackDebug(event, base, "malformed mcp_budget_warning payload");
|
|
10491
|
+
}
|
|
10492
|
+
return [
|
|
10493
|
+
{
|
|
10494
|
+
...base,
|
|
10495
|
+
type: "workspace.mcp.budget_warning",
|
|
10496
|
+
liveCount,
|
|
10497
|
+
reservedCount,
|
|
10498
|
+
budget,
|
|
10499
|
+
thresholdRatio,
|
|
10500
|
+
mode
|
|
10501
|
+
}
|
|
10502
|
+
];
|
|
10131
10503
|
}
|
|
10132
|
-
__name(
|
|
10133
|
-
function
|
|
10134
|
-
if (!isRecord2(
|
|
10135
|
-
|
|
10136
|
-
|
|
10137
|
-
|
|
10138
|
-
const
|
|
10504
|
+
__name(normalizeMcpBudgetWarning, "normalizeMcpBudgetWarning");
|
|
10505
|
+
function normalizeMcpChildRefused(event, base) {
|
|
10506
|
+
if (!isRecord2(event.data)) {
|
|
10507
|
+
return fallbackDebug(event, base, "non-object payload");
|
|
10508
|
+
}
|
|
10509
|
+
const refusedServers = Array.isArray(event.data["refusedServers"]) ? event.data["refusedServers"].filter(isRecord2).map((s) => {
|
|
10510
|
+
const name = getString2(s, "name");
|
|
10511
|
+
const transport = getString2(s, "transport");
|
|
10512
|
+
const reason = getString2(s, "reason");
|
|
10513
|
+
if (!name || !transport || reason !== "budget_exhausted") return null;
|
|
10139
10514
|
return {
|
|
10140
|
-
|
|
10141
|
-
|
|
10142
|
-
|
|
10143
|
-
raw: question
|
|
10515
|
+
name,
|
|
10516
|
+
transport,
|
|
10517
|
+
reason: "budget_exhausted"
|
|
10144
10518
|
};
|
|
10145
|
-
})
|
|
10146
|
-
|
|
10147
|
-
|
|
10148
|
-
|
|
10149
|
-
const
|
|
10150
|
-
const
|
|
10151
|
-
|
|
10152
|
-
|
|
10153
|
-
|
|
10154
|
-
|
|
10155
|
-
|
|
10156
|
-
|
|
10157
|
-
|
|
10158
|
-
|
|
10159
|
-
|
|
10160
|
-
|
|
10161
|
-
|
|
10162
|
-
|
|
10163
|
-
|
|
10164
|
-
|
|
10519
|
+
}).filter(
|
|
10520
|
+
(v) => v !== null
|
|
10521
|
+
) : [];
|
|
10522
|
+
const budget = numberField(event.data, "budget");
|
|
10523
|
+
const liveCount = numberField(event.data, "liveCount");
|
|
10524
|
+
const reservedCount = numberField(event.data, "reservedCount");
|
|
10525
|
+
if (refusedServers.length === 0 || budget === void 0 || liveCount === void 0 || reservedCount === void 0) {
|
|
10526
|
+
return fallbackDebug(
|
|
10527
|
+
event,
|
|
10528
|
+
base,
|
|
10529
|
+
"malformed mcp_child_refused_batch payload"
|
|
10530
|
+
);
|
|
10531
|
+
}
|
|
10532
|
+
return [
|
|
10533
|
+
{
|
|
10534
|
+
...base,
|
|
10535
|
+
type: "workspace.mcp.child_refused",
|
|
10536
|
+
refusedServers,
|
|
10537
|
+
budget,
|
|
10538
|
+
liveCount,
|
|
10539
|
+
reservedCount
|
|
10540
|
+
}
|
|
10165
10541
|
];
|
|
10166
|
-
|
|
10167
|
-
|
|
10168
|
-
|
|
10542
|
+
}
|
|
10543
|
+
__name(normalizeMcpChildRefused, "normalizeMcpChildRefused");
|
|
10544
|
+
function normalizeMcpServerRestarted(event, base) {
|
|
10545
|
+
const serverName = getString2(event.data, "serverName");
|
|
10546
|
+
const durationMs = numberField(event.data, "durationMs");
|
|
10547
|
+
if (!serverName || durationMs === void 0) {
|
|
10548
|
+
return fallbackDebug(event, base, "malformed mcp_server_restarted payload");
|
|
10169
10549
|
}
|
|
10170
|
-
|
|
10171
|
-
|
|
10172
|
-
|
|
10173
|
-
|
|
10174
|
-
|
|
10175
|
-
|
|
10176
|
-
|
|
10177
|
-
|
|
10550
|
+
return [
|
|
10551
|
+
{
|
|
10552
|
+
...base,
|
|
10553
|
+
type: "workspace.mcp.server_restarted",
|
|
10554
|
+
serverName,
|
|
10555
|
+
durationMs
|
|
10556
|
+
}
|
|
10557
|
+
];
|
|
10558
|
+
}
|
|
10559
|
+
__name(normalizeMcpServerRestarted, "normalizeMcpServerRestarted");
|
|
10560
|
+
function normalizeMcpServerRestartRefused(event, base) {
|
|
10561
|
+
const serverName = getString2(event.data, "serverName");
|
|
10562
|
+
const reason = getString2(event.data, "reason");
|
|
10563
|
+
if (!serverName || !reason || !MCP_RESTART_REFUSED_REASONS2.has(reason)) {
|
|
10564
|
+
return fallbackDebug(
|
|
10565
|
+
event,
|
|
10566
|
+
base,
|
|
10567
|
+
"malformed mcp_server_restart_refused payload"
|
|
10568
|
+
);
|
|
10178
10569
|
}
|
|
10179
|
-
return
|
|
10570
|
+
return [
|
|
10571
|
+
{
|
|
10572
|
+
...base,
|
|
10573
|
+
type: "workspace.mcp.server_restart_refused",
|
|
10574
|
+
serverName,
|
|
10575
|
+
reason
|
|
10576
|
+
}
|
|
10577
|
+
];
|
|
10180
10578
|
}
|
|
10181
|
-
__name(
|
|
10182
|
-
|
|
10183
|
-
|
|
10184
|
-
|
|
10185
|
-
|
|
10186
|
-
|
|
10187
|
-
|
|
10188
|
-
|
|
10189
|
-
|
|
10190
|
-
"
|
|
10191
|
-
"
|
|
10192
|
-
"
|
|
10193
|
-
|
|
10194
|
-
|
|
10195
|
-
|
|
10196
|
-
|
|
10197
|
-
|
|
10198
|
-
|
|
10199
|
-
|
|
10200
|
-
|
|
10201
|
-
|
|
10202
|
-
|
|
10203
|
-
|
|
10204
|
-
const parentDelegationId = getFirstString(input, [
|
|
10205
|
-
"parentDelegationId",
|
|
10206
|
-
"parent_delegation_id",
|
|
10207
|
-
"parent_id"
|
|
10208
|
-
]);
|
|
10209
|
-
return {
|
|
10210
|
-
kind: "subagent_delegation",
|
|
10211
|
-
agentName: agentName ?? "subagent",
|
|
10212
|
-
task: task ?? "(no task description)",
|
|
10213
|
-
...parentDelegationId ? { parentDelegationId } : {}
|
|
10214
|
-
};
|
|
10579
|
+
__name(normalizeMcpServerRestartRefused, "normalizeMcpServerRestartRefused");
|
|
10580
|
+
function normalizeMcpServerChanged(event, base, fixedAction) {
|
|
10581
|
+
const serverName = getString2(event.data, fixedAction ? "name" : "serverName");
|
|
10582
|
+
const action = fixedAction ?? getString2(event.data, "action");
|
|
10583
|
+
if (!serverName || !action || ![
|
|
10584
|
+
"added",
|
|
10585
|
+
"removed",
|
|
10586
|
+
"approve",
|
|
10587
|
+
"enable",
|
|
10588
|
+
"disable",
|
|
10589
|
+
"authenticate",
|
|
10590
|
+
"clear-auth"
|
|
10591
|
+
].includes(action)) {
|
|
10592
|
+
return fallbackDebug(event, base, `malformed ${event.type} payload`);
|
|
10593
|
+
}
|
|
10594
|
+
return [
|
|
10595
|
+
{
|
|
10596
|
+
...base,
|
|
10597
|
+
type: "workspace.mcp.server_changed",
|
|
10598
|
+
serverName,
|
|
10599
|
+
action
|
|
10600
|
+
}
|
|
10601
|
+
];
|
|
10215
10602
|
}
|
|
10216
|
-
__name(
|
|
10217
|
-
function
|
|
10218
|
-
|
|
10219
|
-
const
|
|
10220
|
-
|
|
10221
|
-
const
|
|
10222
|
-
const
|
|
10223
|
-
|
|
10224
|
-
const
|
|
10225
|
-
|
|
10226
|
-
|
|
10227
|
-
if (Array.isArray(rawResults)) {
|
|
10228
|
-
top = rawResults.slice(0, MAX_SEARCH_TOP_RESULTS).map((item) => {
|
|
10229
|
-
if (typeof item === "string") return item;
|
|
10230
|
-
if (isRecord2(item)) {
|
|
10231
|
-
return getFirstString(item, ["path", "file", "name", "title", "text"]) ?? stringifyJson(item).slice(0, 120);
|
|
10232
|
-
}
|
|
10233
|
-
return String(item);
|
|
10234
|
-
}).filter(Boolean);
|
|
10235
|
-
if (top.length === 0) top = void 0;
|
|
10603
|
+
__name(normalizeMcpServerChanged, "normalizeMcpServerChanged");
|
|
10604
|
+
function normalizeExtensionsChanged(event, base) {
|
|
10605
|
+
const refreshed = numberField(event.data, "refreshed");
|
|
10606
|
+
const failed = numberField(event.data, "failed");
|
|
10607
|
+
const status = getString2(event.data, "status");
|
|
10608
|
+
const source = getString2(event.data, "source");
|
|
10609
|
+
const name = getString2(event.data, "name");
|
|
10610
|
+
const version = getString2(event.data, "version");
|
|
10611
|
+
const error = getString2(event.data, "error");
|
|
10612
|
+
if (refreshed === void 0 || failed === void 0) {
|
|
10613
|
+
return fallbackDebug(event, base, "malformed extensions_changed payload");
|
|
10236
10614
|
}
|
|
10237
|
-
|
|
10238
|
-
|
|
10239
|
-
|
|
10240
|
-
|
|
10241
|
-
|
|
10242
|
-
|
|
10615
|
+
if (status !== void 0 && status !== "installed" && status !== "enabled" && status !== "disabled" && status !== "updated" && status !== "uninstalled" && status !== "failed") {
|
|
10616
|
+
return fallbackDebug(event, base, "malformed extensions_changed payload");
|
|
10617
|
+
}
|
|
10618
|
+
return [
|
|
10619
|
+
{
|
|
10620
|
+
...base,
|
|
10621
|
+
type: "workspace.extensions.changed",
|
|
10622
|
+
refreshed,
|
|
10623
|
+
failed,
|
|
10624
|
+
...status ? { status } : {},
|
|
10625
|
+
...source ? { source } : {},
|
|
10626
|
+
...name ? { name } : {},
|
|
10627
|
+
...version ? { version } : {},
|
|
10628
|
+
...error ? { error } : {}
|
|
10629
|
+
}
|
|
10630
|
+
];
|
|
10243
10631
|
}
|
|
10244
|
-
__name(
|
|
10245
|
-
function
|
|
10246
|
-
const
|
|
10247
|
-
const
|
|
10248
|
-
|
|
10249
|
-
)
|
|
10250
|
-
|
|
10251
|
-
|
|
10252
|
-
|
|
10253
|
-
|
|
10254
|
-
|
|
10255
|
-
|
|
10256
|
-
|
|
10257
|
-
|
|
10258
|
-
|
|
10259
|
-
|
|
10260
|
-
|
|
10261
|
-
|
|
10262
|
-
|
|
10263
|
-
|
|
10264
|
-
|
|
10265
|
-
...thumbnailUrl ? { thumbnailUrl } : {},
|
|
10266
|
-
...model ? { model } : {}
|
|
10267
|
-
};
|
|
10632
|
+
__name(normalizeExtensionsChanged, "normalizeExtensionsChanged");
|
|
10633
|
+
function normalizeAuthDeviceFlowStarted(event, base) {
|
|
10634
|
+
const deviceFlowId = getString2(event.data, "deviceFlowId");
|
|
10635
|
+
const providerId = getString2(event.data, "providerId");
|
|
10636
|
+
const expiresAt = numberField(event.data, "expiresAt");
|
|
10637
|
+
if (!deviceFlowId || !providerId || !DEVICE_FLOW_PROVIDER_SET.has(providerId) || expiresAt === void 0) {
|
|
10638
|
+
return fallbackDebug(
|
|
10639
|
+
event,
|
|
10640
|
+
base,
|
|
10641
|
+
"malformed auth_device_flow_started payload"
|
|
10642
|
+
);
|
|
10643
|
+
}
|
|
10644
|
+
return [
|
|
10645
|
+
{
|
|
10646
|
+
...base,
|
|
10647
|
+
type: "auth.device_flow.started",
|
|
10648
|
+
deviceFlowId,
|
|
10649
|
+
providerId,
|
|
10650
|
+
expiresAt
|
|
10651
|
+
}
|
|
10652
|
+
];
|
|
10268
10653
|
}
|
|
10269
|
-
__name(
|
|
10270
|
-
function
|
|
10271
|
-
|
|
10272
|
-
const
|
|
10273
|
-
if (!
|
|
10274
|
-
|
|
10275
|
-
|
|
10276
|
-
|
|
10277
|
-
|
|
10278
|
-
|
|
10279
|
-
|
|
10280
|
-
|
|
10281
|
-
|
|
10282
|
-
|
|
10283
|
-
|
|
10284
|
-
|
|
10285
|
-
|
|
10286
|
-
|
|
10287
|
-
|
|
10288
|
-
...origin ? { origin } : {}
|
|
10289
|
-
};
|
|
10654
|
+
__name(normalizeAuthDeviceFlowStarted, "normalizeAuthDeviceFlowStarted");
|
|
10655
|
+
function normalizeAuthDeviceFlowThrottled(event, base) {
|
|
10656
|
+
const deviceFlowId = getString2(event.data, "deviceFlowId");
|
|
10657
|
+
const intervalMs = numberField(event.data, "intervalMs");
|
|
10658
|
+
if (!deviceFlowId || intervalMs === void 0) {
|
|
10659
|
+
return fallbackDebug(
|
|
10660
|
+
event,
|
|
10661
|
+
base,
|
|
10662
|
+
"malformed auth_device_flow_throttled payload"
|
|
10663
|
+
);
|
|
10664
|
+
}
|
|
10665
|
+
return [
|
|
10666
|
+
{
|
|
10667
|
+
...base,
|
|
10668
|
+
type: "auth.device_flow.throttled",
|
|
10669
|
+
deviceFlowId,
|
|
10670
|
+
intervalMs
|
|
10671
|
+
}
|
|
10672
|
+
];
|
|
10290
10673
|
}
|
|
10291
|
-
__name(
|
|
10292
|
-
function
|
|
10293
|
-
|
|
10294
|
-
const
|
|
10295
|
-
|
|
10296
|
-
|
|
10297
|
-
|
|
10298
|
-
|
|
10299
|
-
|
|
10300
|
-
(row) => Array.isArray(row) ? row.map(
|
|
10301
|
-
(cell) => typeof cell === "string" ? cell : stringifyJson(cell).slice(0, 80)
|
|
10302
|
-
) : []
|
|
10674
|
+
__name(normalizeAuthDeviceFlowThrottled, "normalizeAuthDeviceFlowThrottled");
|
|
10675
|
+
function normalizeAuthDeviceFlowAuthorized(event, base) {
|
|
10676
|
+
const deviceFlowId = getString2(event.data, "deviceFlowId");
|
|
10677
|
+
const providerId = getString2(event.data, "providerId");
|
|
10678
|
+
if (!deviceFlowId || !providerId || !DEVICE_FLOW_PROVIDER_SET.has(providerId)) {
|
|
10679
|
+
return fallbackDebug(
|
|
10680
|
+
event,
|
|
10681
|
+
base,
|
|
10682
|
+
"malformed auth_device_flow_authorized payload"
|
|
10303
10683
|
);
|
|
10304
|
-
return {
|
|
10305
|
-
kind: "tabular",
|
|
10306
|
-
columns,
|
|
10307
|
-
rows,
|
|
10308
|
-
...explicitRows.length > rows.length ? { totalRows: explicitRows.length } : {}
|
|
10309
|
-
};
|
|
10310
10684
|
}
|
|
10311
|
-
const
|
|
10312
|
-
|
|
10313
|
-
|
|
10314
|
-
|
|
10315
|
-
|
|
10685
|
+
const expiresAt = numberField(event.data, "expiresAt");
|
|
10686
|
+
const accountAlias = getString2(event.data, "accountAlias");
|
|
10687
|
+
return [
|
|
10688
|
+
{
|
|
10689
|
+
...base,
|
|
10690
|
+
type: "auth.device_flow.authorized",
|
|
10691
|
+
deviceFlowId,
|
|
10692
|
+
providerId,
|
|
10693
|
+
...expiresAt !== void 0 ? { expiresAt } : {},
|
|
10694
|
+
...accountAlias ? { accountAlias } : {}
|
|
10695
|
+
}
|
|
10696
|
+
];
|
|
10697
|
+
}
|
|
10698
|
+
__name(normalizeAuthDeviceFlowAuthorized, "normalizeAuthDeviceFlowAuthorized");
|
|
10699
|
+
function normalizeAuthDeviceFlowFailed(event, base) {
|
|
10700
|
+
const deviceFlowId = getString2(event.data, "deviceFlowId");
|
|
10701
|
+
const errorKind = getString2(event.data, "errorKind");
|
|
10702
|
+
if (!deviceFlowId || !isDeviceFlowErrorKind(errorKind)) {
|
|
10703
|
+
return fallbackDebug(
|
|
10704
|
+
event,
|
|
10705
|
+
base,
|
|
10706
|
+
"malformed auth_device_flow_failed payload"
|
|
10316
10707
|
);
|
|
10317
|
-
if (columns.length === 0) return void 0;
|
|
10318
|
-
const rows = data.slice(0, MAX_TABULAR_ROWS).map((row) => {
|
|
10319
|
-
const r = row;
|
|
10320
|
-
return columns.map((col) => {
|
|
10321
|
-
const v = r[col];
|
|
10322
|
-
return typeof v === "string" ? v : stringifyJson(v).slice(0, 80);
|
|
10323
|
-
});
|
|
10324
|
-
});
|
|
10325
|
-
return {
|
|
10326
|
-
kind: "tabular",
|
|
10327
|
-
columns,
|
|
10328
|
-
rows,
|
|
10329
|
-
...data.length > rows.length ? { totalRows: data.length } : {}
|
|
10330
|
-
};
|
|
10331
10708
|
}
|
|
10332
|
-
|
|
10709
|
+
const hint = getString2(event.data, "hint");
|
|
10710
|
+
return [
|
|
10711
|
+
{
|
|
10712
|
+
...base,
|
|
10713
|
+
type: "auth.device_flow.failed",
|
|
10714
|
+
deviceFlowId,
|
|
10715
|
+
errorKind,
|
|
10716
|
+
...hint ? { hint } : {}
|
|
10717
|
+
}
|
|
10718
|
+
];
|
|
10333
10719
|
}
|
|
10334
|
-
__name(
|
|
10720
|
+
__name(normalizeAuthDeviceFlowFailed, "normalizeAuthDeviceFlowFailed");
|
|
10721
|
+
function isDeviceFlowErrorKind(value) {
|
|
10722
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
10723
|
+
}
|
|
10724
|
+
__name(isDeviceFlowErrorKind, "isDeviceFlowErrorKind");
|
|
10725
|
+
function normalizeAuthDeviceFlowCancelled(event, base) {
|
|
10726
|
+
const deviceFlowId = getString2(event.data, "deviceFlowId");
|
|
10727
|
+
if (!deviceFlowId) {
|
|
10728
|
+
return fallbackDebug(
|
|
10729
|
+
event,
|
|
10730
|
+
base,
|
|
10731
|
+
"malformed auth_device_flow_cancelled payload"
|
|
10732
|
+
);
|
|
10733
|
+
}
|
|
10734
|
+
return [{ ...base, type: "auth.device_flow.cancelled", deviceFlowId }];
|
|
10735
|
+
}
|
|
10736
|
+
__name(normalizeAuthDeviceFlowCancelled, "normalizeAuthDeviceFlowCancelled");
|
|
10737
|
+
function numberField(value, key) {
|
|
10738
|
+
if (!isRecord2(value)) return void 0;
|
|
10739
|
+
const v = value[key];
|
|
10740
|
+
return typeof v === "number" && Number.isFinite(v) ? v : void 0;
|
|
10741
|
+
}
|
|
10742
|
+
__name(numberField, "numberField");
|
|
10743
|
+
function stringField(value, key) {
|
|
10744
|
+
if (!isRecord2(value)) return void 0;
|
|
10745
|
+
const v = value[key];
|
|
10746
|
+
return typeof v === "string" && v.length > 0 ? v : void 0;
|
|
10747
|
+
}
|
|
10748
|
+
__name(stringField, "stringField");
|
|
10335
10749
|
|
|
10336
10750
|
// packages/sdk-typescript/src/daemon/ui/transcript.ts
|
|
10337
10751
|
init_esbuild_shims();
|
|
@@ -10447,6 +10861,15 @@ function reduceDaemonTranscriptEvents(state, events, opts = {}) {
|
|
|
10447
10861
|
return result;
|
|
10448
10862
|
}
|
|
10449
10863
|
__name(reduceDaemonTranscriptEvents, "reduceDaemonTranscriptEvents");
|
|
10864
|
+
function finalizeOfflineDaemonTranscriptState(state) {
|
|
10865
|
+
const next = cloneTranscriptState(state, { now: 0 });
|
|
10866
|
+
finishAssistant(next);
|
|
10867
|
+
next.activeUserBlockId = void 0;
|
|
10868
|
+
Object.freeze(next.blocks);
|
|
10869
|
+
Object.freeze(next.blockIndexById);
|
|
10870
|
+
return next;
|
|
10871
|
+
}
|
|
10872
|
+
__name(finalizeOfflineDaemonTranscriptState, "finalizeOfflineDaemonTranscriptState");
|
|
10450
10873
|
function rebuildDaemonTranscriptBlockIndex(blocks) {
|
|
10451
10874
|
const blockIndexById = createIndex();
|
|
10452
10875
|
blocks.forEach((block, index) => {
|
|
@@ -10470,7 +10893,8 @@ function userBlockForAttachment(next, event) {
|
|
|
10470
10893
|
event.serverTimestamp,
|
|
10471
10894
|
event.meta,
|
|
10472
10895
|
event.sourceRecordIds,
|
|
10473
|
-
event.promptId
|
|
10896
|
+
event.promptId,
|
|
10897
|
+
event.segmentId
|
|
10474
10898
|
);
|
|
10475
10899
|
appendBlock(next, block);
|
|
10476
10900
|
next.activeUserBlockId = block.id;
|
|
@@ -10508,7 +10932,11 @@ function applyDaemonTranscriptEvent(next, event) {
|
|
|
10508
10932
|
if (event.meta) block.meta = { ...block.meta, ...event.meta };
|
|
10509
10933
|
block.images = [
|
|
10510
10934
|
...block.images ?? [],
|
|
10511
|
-
{
|
|
10935
|
+
{
|
|
10936
|
+
data: event.data,
|
|
10937
|
+
mimeType: event.mimeType,
|
|
10938
|
+
...event.attachmentId ? { attachmentId: event.attachmentId } : {}
|
|
10939
|
+
}
|
|
10512
10940
|
];
|
|
10513
10941
|
next.retainedBytes += estimateBlockBytes(block) - bytesBefore;
|
|
10514
10942
|
break;
|
|
@@ -10827,7 +11255,8 @@ function appendTextDelta(state, kind, activeKey, text, event) {
|
|
|
10827
11255
|
const effectiveId = parentMap && parentId != null ? parentMap[parentId] : state[activeKey];
|
|
10828
11256
|
const existing = getWritableBlockById(state, effectiveId);
|
|
10829
11257
|
if (existing && existing.kind === kind && canMergeTextDelta(existing, event)) {
|
|
10830
|
-
existing.text
|
|
11258
|
+
const separator = kind === "user" && existing.text.length > 0 && text.length > 0 && existing.segmentId !== event.segmentId && !existing.text.endsWith("\n") && !text.startsWith("\n") ? "\n" : "";
|
|
11259
|
+
existing.text = appendBoundedText(state, existing, separator + text);
|
|
10831
11260
|
existing.updatedAt = state.now;
|
|
10832
11261
|
if (event.eventId !== void 0) existing.eventId = event.eventId;
|
|
10833
11262
|
if (event.serverTimestamp !== void 0) {
|
|
@@ -10839,6 +11268,9 @@ function appendTextDelta(state, kind, activeKey, text, event) {
|
|
|
10839
11268
|
if (existing.promptId === void 0 && event.promptId !== void 0) {
|
|
10840
11269
|
existing.promptId = event.promptId;
|
|
10841
11270
|
}
|
|
11271
|
+
if (event.segmentId !== void 0) {
|
|
11272
|
+
existing.segmentId = event.segmentId;
|
|
11273
|
+
}
|
|
10842
11274
|
if (kind === "assistant" && event.branchRecordId) {
|
|
10843
11275
|
existing.branchRecordId = event.branchRecordId;
|
|
10844
11276
|
}
|
|
@@ -10857,7 +11289,8 @@ function appendTextDelta(state, kind, activeKey, text, event) {
|
|
|
10857
11289
|
event.serverTimestamp,
|
|
10858
11290
|
"meta" in event ? event.meta : void 0,
|
|
10859
11291
|
event.sourceRecordIds,
|
|
10860
|
-
event.promptId
|
|
11292
|
+
event.promptId,
|
|
11293
|
+
event.segmentId
|
|
10861
11294
|
);
|
|
10862
11295
|
if (kind === "assistant" && event.branchRecordId) {
|
|
10863
11296
|
block.branchRecordId = event.branchRecordId;
|
|
@@ -10891,13 +11324,19 @@ function canMergeTextDelta(existing, event) {
|
|
|
10891
11324
|
if (existing.kind !== "user" && existing.kind !== "assistant" && existing.kind !== "thought") {
|
|
10892
11325
|
return false;
|
|
10893
11326
|
}
|
|
10894
|
-
|
|
11327
|
+
const sameRecordedUser = existing.kind === "user" && (existing.sourceRecordIds?.length ?? 0) > 0 && (event.sourceRecordIds?.length ?? 0) > 0;
|
|
11328
|
+
if (!sameRecordedUser && existing.meta?.qwenDiscreteMessage === true) {
|
|
11329
|
+
return false;
|
|
11330
|
+
}
|
|
10895
11331
|
if (existing.promptId !== void 0 && event.promptId !== void 0 && existing.promptId !== event.promptId)
|
|
10896
11332
|
return false;
|
|
11333
|
+
if (!sameRecordedUser && existing.segmentId !== event.segmentId) {
|
|
11334
|
+
return false;
|
|
11335
|
+
}
|
|
10897
11336
|
if (!stringArraysEqual(existing.sourceRecordIds, event.sourceRecordIds)) {
|
|
10898
11337
|
return false;
|
|
10899
11338
|
}
|
|
10900
|
-
return !("meta" in event) || event.meta?.qwenDiscreteMessage !== true;
|
|
11339
|
+
return sameRecordedUser || !("meta" in event) || event.meta?.qwenDiscreteMessage !== true;
|
|
10901
11340
|
}
|
|
10902
11341
|
__name(canMergeTextDelta, "canMergeTextDelta");
|
|
10903
11342
|
function findFinalVisibleAssistantForPrompt(state, promptId) {
|
|
@@ -11005,6 +11444,19 @@ function upsertToolBlock(state, event) {
|
|
|
11005
11444
|
}
|
|
11006
11445
|
}
|
|
11007
11446
|
existing.rawOutput = rawOutput;
|
|
11447
|
+
if (isBackgroundToolOutput(rawOutput)) existing.background = true;
|
|
11448
|
+
}
|
|
11449
|
+
const resultPreview2 = event.resultPreview ?? createDaemonToolResultPreview(
|
|
11450
|
+
rawOutput ?? existing.rawOutput,
|
|
11451
|
+
event.content ?? existing.content,
|
|
11452
|
+
{
|
|
11453
|
+
toolName: event.toolName ?? existing.toolName,
|
|
11454
|
+
toolKind: event.toolKind ?? existing.toolKind
|
|
11455
|
+
}
|
|
11456
|
+
);
|
|
11457
|
+
if (resultPreview2) existing.resultPreview = resultPreview2;
|
|
11458
|
+
else if (event.resultPreview !== void 0 || rawOutput !== void 0 || event.content !== void 0) {
|
|
11459
|
+
delete existing.resultPreview;
|
|
11008
11460
|
}
|
|
11009
11461
|
existing.sourceRecordIds = unionStrings(
|
|
11010
11462
|
existing.sourceRecordIds,
|
|
@@ -11029,6 +11481,10 @@ function upsertToolBlock(state, event) {
|
|
|
11029
11481
|
return;
|
|
11030
11482
|
}
|
|
11031
11483
|
const parentBlockId = event.parentToolCallId && state.toolBlockByCallId[event.parentToolCallId] !== TRIMMED_TOOL_BLOCK_ID ? state.toolBlockByCallId[event.parentToolCallId] : void 0;
|
|
11484
|
+
const resultPreview = event.resultPreview ?? createDaemonToolResultPreview(rawOutput, event.content, {
|
|
11485
|
+
toolName: event.toolName,
|
|
11486
|
+
toolKind: event.toolKind
|
|
11487
|
+
});
|
|
11032
11488
|
const block = {
|
|
11033
11489
|
id: allocateBlockId(state, "tool"),
|
|
11034
11490
|
kind: "tool",
|
|
@@ -11040,12 +11496,15 @@ function upsertToolBlock(state, event) {
|
|
|
11040
11496
|
toolName: event.toolName,
|
|
11041
11497
|
toolKind: event.toolKind
|
|
11042
11498
|
}),
|
|
11499
|
+
...resultPreview ? { resultPreview } : {},
|
|
11500
|
+
...isBackgroundToolOutput(rawOutput) ? { background: true } : {},
|
|
11043
11501
|
clientReceivedAt: state.now,
|
|
11044
11502
|
createdAt: state.now,
|
|
11045
11503
|
updatedAt: state.now,
|
|
11046
11504
|
...event.eventId !== void 0 ? { eventId: event.eventId } : {},
|
|
11047
11505
|
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
11048
11506
|
...event.sourceRecordIds ? { sourceRecordIds: [...event.sourceRecordIds] } : {},
|
|
11507
|
+
...event.segmentId ? { segmentId: event.segmentId } : {},
|
|
11049
11508
|
...event.details ? { details: event.details } : {},
|
|
11050
11509
|
...!compactTaskOutput && event.content !== void 0 ? { content: event.content } : {},
|
|
11051
11510
|
...event.locations !== void 0 ? { locations: event.locations } : {},
|
|
@@ -11071,6 +11530,10 @@ function upsertToolBlock(state, event) {
|
|
|
11071
11530
|
clearActiveText(state, event.parentToolCallId);
|
|
11072
11531
|
}
|
|
11073
11532
|
__name(upsertToolBlock, "upsertToolBlock");
|
|
11533
|
+
function isBackgroundToolOutput(value) {
|
|
11534
|
+
return isRecord2(value) && value["status"] === "background";
|
|
11535
|
+
}
|
|
11536
|
+
__name(isBackgroundToolOutput, "isBackgroundToolOutput");
|
|
11074
11537
|
function discardToolBlock(state, toolCallId) {
|
|
11075
11538
|
const blockId = state.toolBlockByCallId[toolCallId];
|
|
11076
11539
|
if (!blockId || blockId === TRIMMED_TOOL_BLOCK_ID) return;
|
|
@@ -11157,7 +11620,7 @@ __name(propagateCancellationToInFlightTools, "propagateCancellationToInFlightToo
|
|
|
11157
11620
|
function appendShellBlock(state, event) {
|
|
11158
11621
|
if (!event.text) return;
|
|
11159
11622
|
const last = state.blocks[state.blocks.length - 1];
|
|
11160
|
-
if (last?.kind === "shell" && last.stream === event.stream) {
|
|
11623
|
+
if (last?.kind === "shell" && last.stream === event.stream && last.segmentId === event.segmentId) {
|
|
11161
11624
|
const writable = getWritableBlockById(state, last.id);
|
|
11162
11625
|
if (writable?.kind === "shell") {
|
|
11163
11626
|
writable.text = appendBoundedText(state, writable, event.text);
|
|
@@ -11176,6 +11639,7 @@ function appendShellBlock(state, event) {
|
|
|
11176
11639
|
updatedAt: state.now,
|
|
11177
11640
|
...event.eventId !== void 0 ? { eventId: event.eventId } : {},
|
|
11178
11641
|
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
11642
|
+
...event.segmentId ? { segmentId: event.segmentId } : {},
|
|
11179
11643
|
...event.stream ? { stream: event.stream } : {}
|
|
11180
11644
|
};
|
|
11181
11645
|
appendBlock(state, block);
|
|
@@ -11185,7 +11649,7 @@ __name(appendShellBlock, "appendShellBlock");
|
|
|
11185
11649
|
function appendUserShellBlock(state, event) {
|
|
11186
11650
|
if (!event.text) return;
|
|
11187
11651
|
const last = state.blocks[state.blocks.length - 1];
|
|
11188
|
-
if (last?.kind === "user_shell" && last.stream === event.stream && !state.pendingUserShellCommand) {
|
|
11652
|
+
if (last?.kind === "user_shell" && last.stream === event.stream && last.segmentId === event.segmentId && !state.pendingUserShellCommand) {
|
|
11189
11653
|
const writable = getWritableBlockById(state, last.id);
|
|
11190
11654
|
if (writable?.kind === "user_shell") {
|
|
11191
11655
|
writable.text = appendBoundedText(state, writable, event.text);
|
|
@@ -11208,6 +11672,7 @@ function appendUserShellBlock(state, event) {
|
|
|
11208
11672
|
updatedAt: state.now,
|
|
11209
11673
|
...event.eventId !== void 0 ? { eventId: event.eventId } : {},
|
|
11210
11674
|
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
11675
|
+
...event.segmentId ? { segmentId: event.segmentId } : {},
|
|
11211
11676
|
...event.stream ? { stream: event.stream } : {}
|
|
11212
11677
|
};
|
|
11213
11678
|
state.pendingUserShellCommand = void 0;
|
|
@@ -11222,11 +11687,15 @@ function upsertPermissionBlock(state, event) {
|
|
|
11222
11687
|
const preview = createDaemonToolPreview(event.toolCall, {
|
|
11223
11688
|
title: event.title
|
|
11224
11689
|
});
|
|
11690
|
+
const toolIdentity = getPermissionToolIdentity(event.toolCall);
|
|
11225
11691
|
if (existing?.kind === "permission") {
|
|
11226
11692
|
existing.title = event.title;
|
|
11227
11693
|
existing.options = event.options.map((option) => ({ ...option }));
|
|
11228
11694
|
existing.toolCall = event.toolCall;
|
|
11229
11695
|
existing.preview = preview;
|
|
11696
|
+
if (toolIdentity.toolCallId) existing.toolCallId = toolIdentity.toolCallId;
|
|
11697
|
+
if (toolIdentity.toolName) existing.toolName = toolIdentity.toolName;
|
|
11698
|
+
if (toolIdentity.toolKind) existing.toolKind = toolIdentity.toolKind;
|
|
11230
11699
|
existing.updatedAt = state.now;
|
|
11231
11700
|
if (event.eventId !== void 0) existing.eventId = event.eventId;
|
|
11232
11701
|
return;
|
|
@@ -11238,11 +11707,13 @@ function upsertPermissionBlock(state, event) {
|
|
|
11238
11707
|
title: event.title,
|
|
11239
11708
|
options: event.options.map((option) => ({ ...option })),
|
|
11240
11709
|
preview,
|
|
11710
|
+
...toolIdentity,
|
|
11241
11711
|
clientReceivedAt: state.now,
|
|
11242
11712
|
createdAt: state.now,
|
|
11243
11713
|
updatedAt: state.now,
|
|
11244
11714
|
...event.eventId !== void 0 ? { eventId: event.eventId } : {},
|
|
11245
11715
|
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
11716
|
+
...event.segmentId ? { segmentId: event.segmentId } : {},
|
|
11246
11717
|
...event.sessionId ? { sessionId: event.sessionId } : {},
|
|
11247
11718
|
...event.toolCall !== void 0 ? { toolCall: event.toolCall } : {}
|
|
11248
11719
|
};
|
|
@@ -11275,7 +11746,8 @@ function resolvePermissionBlock(state, event) {
|
|
|
11275
11746
|
createdAt: state.now,
|
|
11276
11747
|
updatedAt: state.now,
|
|
11277
11748
|
...event.eventId !== void 0 ? { eventId: event.eventId } : {},
|
|
11278
|
-
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {}
|
|
11749
|
+
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
11750
|
+
...event.segmentId ? { segmentId: event.segmentId } : {}
|
|
11279
11751
|
};
|
|
11280
11752
|
appendBlock(state, block);
|
|
11281
11753
|
state.permissionBlockByRequestId[event.requestId] = block.id;
|
|
@@ -11314,6 +11786,7 @@ function appendStatusBlock(state, kind, text, event, opts = {}) {
|
|
|
11314
11786
|
updatedAt: state.now,
|
|
11315
11787
|
...event?.eventId !== void 0 ? { eventId: event.eventId } : {},
|
|
11316
11788
|
...event?.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
11789
|
+
...event?.segmentId ? { segmentId: event.segmentId } : {},
|
|
11317
11790
|
...event?.type === "error" && event.code ? { code: event.code } : {},
|
|
11318
11791
|
...event?.type === "error" && event.promptId ? { promptId: event.promptId } : {},
|
|
11319
11792
|
...event?.type === "error" && event.errorKind ? { errorKind: event.errorKind } : {},
|
|
@@ -11344,13 +11817,14 @@ function appendPromptCancelledBlock(state, event) {
|
|
|
11344
11817
|
updatedAt: state.now,
|
|
11345
11818
|
...event.reason ? { reason: event.reason } : {},
|
|
11346
11819
|
...event.eventId !== void 0 ? { eventId: event.eventId } : {},
|
|
11347
|
-
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {}
|
|
11820
|
+
...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
|
|
11821
|
+
...event.segmentId ? { segmentId: event.segmentId } : {}
|
|
11348
11822
|
};
|
|
11349
11823
|
appendBlock(state, block);
|
|
11350
11824
|
clearActiveText(state);
|
|
11351
11825
|
}
|
|
11352
11826
|
__name(appendPromptCancelledBlock, "appendPromptCancelledBlock");
|
|
11353
|
-
function createTextBlock(state, kind, text, eventId, serverTimestamp, meta, sourceRecordIds, promptId) {
|
|
11827
|
+
function createTextBlock(state, kind, text, eventId, serverTimestamp, meta, sourceRecordIds, promptId, segmentId) {
|
|
11354
11828
|
const blockId = allocateBlockId(state, kind);
|
|
11355
11829
|
return {
|
|
11356
11830
|
id: blockId,
|
|
@@ -11362,6 +11836,7 @@ function createTextBlock(state, kind, text, eventId, serverTimestamp, meta, sour
|
|
|
11362
11836
|
...eventId !== void 0 ? { eventId } : {},
|
|
11363
11837
|
...serverTimestamp !== void 0 ? { serverTimestamp } : {},
|
|
11364
11838
|
...sourceRecordIds ? { sourceRecordIds: [...sourceRecordIds] } : {},
|
|
11839
|
+
...segmentId ? { segmentId } : {},
|
|
11365
11840
|
...promptId ? { promptId } : {},
|
|
11366
11841
|
...meta ? { meta: { ...meta } } : {}
|
|
11367
11842
|
};
|
|
@@ -11671,6 +12146,7 @@ function cloneBlockForWrite(block) {
|
|
|
11671
12146
|
return {
|
|
11672
12147
|
...block,
|
|
11673
12148
|
preview: cloneJsonLike(block.preview),
|
|
12149
|
+
resultPreview: cloneJsonLike(block.resultPreview),
|
|
11674
12150
|
content: cloneJsonLike(block.content),
|
|
11675
12151
|
locations: cloneJsonLike(block.locations),
|
|
11676
12152
|
rawInput: cloneJsonLike(block.rawInput),
|
|
@@ -11686,6 +12162,19 @@ function allocateBlockId(state, prefix) {
|
|
|
11686
12162
|
return id;
|
|
11687
12163
|
}
|
|
11688
12164
|
__name(allocateBlockId, "allocateBlockId");
|
|
12165
|
+
function getPermissionToolIdentity(toolCall) {
|
|
12166
|
+
if (!isRecord2(toolCall)) return {};
|
|
12167
|
+
const meta = isRecord2(toolCall["_meta"]) ? toolCall["_meta"] : void 0;
|
|
12168
|
+
const toolCallId = getFirstString(toolCall, ["toolCallId", "id"]);
|
|
12169
|
+
const toolName = getFirstString(meta, ["toolName"]) ?? getFirstString(toolCall, ["toolName", "name"]);
|
|
12170
|
+
const toolKind = getFirstString(toolCall, ["kind"]);
|
|
12171
|
+
const identity = {};
|
|
12172
|
+
if (toolCallId) identity.toolCallId = toolCallId;
|
|
12173
|
+
if (toolName) identity.toolName = toolName;
|
|
12174
|
+
if (toolKind) identity.toolKind = toolKind;
|
|
12175
|
+
return identity;
|
|
12176
|
+
}
|
|
12177
|
+
__name(getPermissionToolIdentity, "getPermissionToolIdentity");
|
|
11689
12178
|
function clearActiveText(state, parentToolCallId) {
|
|
11690
12179
|
if (parentToolCallId) {
|
|
11691
12180
|
clearActiveAssistantForParent(state, parentToolCallId);
|
|
@@ -12652,6 +13141,7 @@ function daemonToolPreviewToMarkdown(preview, opts = {}) {
|
|
|
12652
13141
|
opts
|
|
12653
13142
|
)}`
|
|
12654
13143
|
).join("\n");
|
|
13144
|
+
case "todo_list":
|
|
12655
13145
|
case "generic":
|
|
12656
13146
|
return preview.summary ? `_${escapeMarkdownText(preview.summary, opts)}_` : "";
|
|
12657
13147
|
default:
|
|
@@ -12784,6 +13274,7 @@ ${cap(preview.code)}` : cap(preview.code);
|
|
|
12784
13274
|
return `delegate to ${cap(preview.agentName)}: ${cap(preview.task)}`;
|
|
12785
13275
|
case "key_value":
|
|
12786
13276
|
return preview.rows.map((r) => `${cap(r.label)}: ${cap(r.value)}`).join("\n");
|
|
13277
|
+
case "todo_list":
|
|
12787
13278
|
case "generic":
|
|
12788
13279
|
return preview.summary ? cap(preview.summary) : "";
|
|
12789
13280
|
default:
|
|
@@ -13303,96 +13794,100 @@ var DAEMON_UI_CONFORMANCE_FIXTURES = [
|
|
|
13303
13794
|
expectedContains: ["code-reviewer", "review the diff", "TODO"]
|
|
13304
13795
|
}
|
|
13305
13796
|
];
|
|
13797
|
+
|
|
13306
13798
|
export {
|
|
13307
|
-
|
|
13308
|
-
|
|
13309
|
-
|
|
13310
|
-
DAEMON_KNOWN_EVENT_TYPE_VALUES,
|
|
13311
|
-
DAEMON_PLAN_TOOL_CALL_ID,
|
|
13312
|
-
DAEMON_UI_CONFORMANCE_FIXTURES,
|
|
13313
|
-
DAEMON_UI_DEBUG_REASONS,
|
|
13314
|
-
DAEMON_UI_UNRECOGNIZED_DIAGNOSTIC_REASONS,
|
|
13799
|
+
DaemonHttpError,
|
|
13800
|
+
isSubagentSessionNotFound,
|
|
13801
|
+
isSessionLevelNotFound,
|
|
13315
13802
|
DEVICE_FLOW_EXPIRY_GRACE_MS,
|
|
13316
13803
|
DaemonAuthFlow,
|
|
13804
|
+
DaemonTransportClosedError,
|
|
13805
|
+
SseFramingError,
|
|
13806
|
+
parseSseStream,
|
|
13807
|
+
GOAL_PAUSE_REASON_COMMAND,
|
|
13317
13808
|
DaemonCapabilityMissingError,
|
|
13318
|
-
|
|
13319
|
-
|
|
13809
|
+
requireWorkspaceCwd,
|
|
13810
|
+
DAEMON_ERROR_KINDS,
|
|
13811
|
+
isDaemonContentHash,
|
|
13812
|
+
DAEMON_APPROVAL_MODES,
|
|
13813
|
+
STANDALONE_SESSIONS_CAPABILITY,
|
|
13814
|
+
STANDALONE_SESSION_OPTIONS_CAPABILITY,
|
|
13815
|
+
DaemonStandaloneProtocolError,
|
|
13816
|
+
DaemonStandaloneCreationOutcomeUnknownError,
|
|
13817
|
+
isStandaloneSessionNotFoundError,
|
|
13818
|
+
isStandaloneCreationOutcomeUnknown,
|
|
13320
13819
|
DaemonPendingPromptLimitError,
|
|
13321
|
-
DaemonSessionClient,
|
|
13322
13820
|
DaemonSessionIdProtocolError,
|
|
13323
|
-
DaemonStandaloneCreationOutcomeUnknownError,
|
|
13324
|
-
DaemonStandaloneProtocolError,
|
|
13325
|
-
DaemonTransportClosedError,
|
|
13326
13821
|
EXTENSION_ARCHIVE_UPLOAD_TIMEOUT_MS,
|
|
13822
|
+
isDaemonTurnError,
|
|
13823
|
+
isStaleBranchPointError,
|
|
13824
|
+
DaemonClient,
|
|
13825
|
+
WorkspaceDaemonClient,
|
|
13826
|
+
matchTurnEvent,
|
|
13827
|
+
isNonBlockingAccepted,
|
|
13828
|
+
DaemonSessionClient,
|
|
13327
13829
|
MID_TURN_MESSAGE_INJECTED_EVENT,
|
|
13328
13830
|
PENDING_PROMPT_ADDED_EVENT,
|
|
13329
|
-
PENDING_PROMPT_COMPLETED_EVENT,
|
|
13330
13831
|
PENDING_PROMPT_STARTED_EVENT,
|
|
13331
|
-
|
|
13332
|
-
|
|
13333
|
-
|
|
13334
|
-
|
|
13335
|
-
|
|
13336
|
-
|
|
13832
|
+
PENDING_PROMPT_COMPLETED_EVENT,
|
|
13833
|
+
DAEMON_KNOWN_EVENT_TYPE_VALUES,
|
|
13834
|
+
createDaemonSessionViewState,
|
|
13835
|
+
isKnownDaemonEvent,
|
|
13836
|
+
isDaemonEventType,
|
|
13837
|
+
isWorkspaceScopedBudgetEvent,
|
|
13337
13838
|
asKnownDaemonEvent,
|
|
13839
|
+
reduceDaemonSessionEvent,
|
|
13840
|
+
reduceDaemonSessionEvents,
|
|
13338
13841
|
createDaemonAuthState,
|
|
13339
|
-
|
|
13340
|
-
|
|
13341
|
-
|
|
13342
|
-
|
|
13343
|
-
|
|
13344
|
-
|
|
13345
|
-
|
|
13346
|
-
|
|
13347
|
-
|
|
13348
|
-
estimateDaemonTranscriptBlockBytes,
|
|
13842
|
+
reduceDaemonAuthEvent,
|
|
13843
|
+
reduceDaemonAuthEvents,
|
|
13844
|
+
DAEMON_PLAN_TOOL_CALL_ID,
|
|
13845
|
+
DAEMON_UI_DEBUG_REASONS,
|
|
13846
|
+
DAEMON_UI_UNRECOGNIZED_DIAGNOSTIC_REASONS,
|
|
13847
|
+
isUnrecognizedDiagnosticReason,
|
|
13848
|
+
stringifyJson,
|
|
13849
|
+
redactSensitiveFields,
|
|
13850
|
+
isSensitiveKey,
|
|
13349
13851
|
extractContentPart,
|
|
13852
|
+
getOutputText,
|
|
13853
|
+
sanitizeTerminalText,
|
|
13854
|
+
stripOscSequences,
|
|
13855
|
+
createDaemonToolPreview,
|
|
13856
|
+
createDaemonToolResultPreview,
|
|
13857
|
+
normalizeDaemonEvent,
|
|
13350
13858
|
extractServerTimestamp,
|
|
13351
|
-
formatBlockTimestamp,
|
|
13352
|
-
getOutputText as getDaemonUiOutputText,
|
|
13353
13859
|
getSessionUpdatePayload,
|
|
13354
|
-
|
|
13355
|
-
isDaemonEventType,
|
|
13356
|
-
isDaemonTurnError,
|
|
13357
|
-
isSensitiveKey as isDaemonUiSensitiveKey,
|
|
13358
|
-
isKnownDaemonEvent,
|
|
13359
|
-
isNonBlockingAccepted,
|
|
13360
|
-
isSessionLevelNotFound,
|
|
13361
|
-
isStaleBranchPointError,
|
|
13362
|
-
isStandaloneCreationOutcomeUnknown,
|
|
13363
|
-
isStandaloneSessionNotFoundError,
|
|
13364
|
-
isSubagentChildBlock,
|
|
13365
|
-
isSubagentSessionNotFound,
|
|
13366
|
-
isTaskExecutionMode,
|
|
13367
|
-
isTrimmedPermissionBlockId,
|
|
13860
|
+
UNRECOGNIZED_DIAGNOSTICS_LIMIT,
|
|
13368
13861
|
isTrimmedToolBlockId,
|
|
13369
|
-
|
|
13370
|
-
|
|
13371
|
-
|
|
13372
|
-
normalizeDaemonEvent,
|
|
13373
|
-
parseSseStream,
|
|
13374
|
-
rebuildDaemonTranscriptBlockIndex,
|
|
13375
|
-
redactSensitiveFields as redactDaemonUiSensitiveFields,
|
|
13376
|
-
reduceDaemonAuthEvent,
|
|
13377
|
-
reduceDaemonAuthEvents,
|
|
13378
|
-
reduceDaemonSessionEvent,
|
|
13379
|
-
reduceDaemonSessionEvents,
|
|
13862
|
+
isTrimmedPermissionBlockId,
|
|
13863
|
+
createDaemonTranscriptState,
|
|
13864
|
+
appendLocalUserTranscriptMessage,
|
|
13380
13865
|
reduceDaemonTranscriptEvents,
|
|
13381
|
-
|
|
13382
|
-
|
|
13383
|
-
sanitizeTerminalText as sanitizeDaemonTerminalText,
|
|
13384
|
-
selectApprovalMode,
|
|
13385
|
-
selectCurrentTool,
|
|
13386
|
-
selectLastFollowupSuggestion,
|
|
13387
|
-
selectPendingPermissionBlocks,
|
|
13388
|
-
selectSubagentChildBlocks,
|
|
13389
|
-
selectToolProgress,
|
|
13866
|
+
finalizeOfflineDaemonTranscriptState,
|
|
13867
|
+
rebuildDaemonTranscriptBlockIndex,
|
|
13390
13868
|
selectTranscriptBlocks,
|
|
13869
|
+
selectPendingPermissionBlocks,
|
|
13870
|
+
isTaskExecutionMode,
|
|
13871
|
+
estimateDaemonTranscriptBlockBytes,
|
|
13391
13872
|
selectTranscriptBlocksOrderedByEventId,
|
|
13873
|
+
selectCurrentTool,
|
|
13874
|
+
selectApprovalMode,
|
|
13875
|
+
selectLastFollowupSuggestion,
|
|
13392
13876
|
selectUnrecognizedDiagnostics,
|
|
13393
|
-
|
|
13394
|
-
|
|
13395
|
-
|
|
13877
|
+
selectToolProgress,
|
|
13878
|
+
selectSubagentChildBlocks,
|
|
13879
|
+
isSubagentChildBlock,
|
|
13880
|
+
formatBlockTimestamp,
|
|
13881
|
+
createDaemonTranscriptStore,
|
|
13882
|
+
DAEMON_GOAL_STATUS_SENTINEL_PREFIX,
|
|
13883
|
+
daemonUiEventToTerminalText,
|
|
13884
|
+
transcriptBlockToTerminalText,
|
|
13885
|
+
daemonBlockToMarkdown,
|
|
13886
|
+
daemonToolPreviewToMarkdown,
|
|
13887
|
+
daemonBlockToPlainText,
|
|
13888
|
+
daemonBlockToHtml,
|
|
13889
|
+
runAdapterConformanceSuite,
|
|
13890
|
+
DAEMON_UI_CONFORMANCE_FIXTURES
|
|
13396
13891
|
};
|
|
13397
13892
|
/**
|
|
13398
13893
|
* @license
|