wednesdayai 0.5.1-dev.21 → 0.5.1-dev.23
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/dist/{acp-cli-BmhbACSZ.js → acp-cli-D7pT9Bao.js} +2 -2
- package/dist/{acp-cli-Dblp7m2Z.js → acp-cli-DFqeyWQJ.js} +2 -2
- package/dist/{agent-scope-CeLIuOpq.js → agent-scope-DCgndASv.js} +3 -3
- package/dist/{agent-turn-enqueue-IiwTs8II.js → agent-turn-enqueue-B30hT0x-.js} +5 -5
- package/dist/{agent-turn-enqueue-DK8QApSV.js → agent-turn-enqueue-CI-A0Cuo.js} +5 -5
- package/dist/{agent-turn-execute-3cc3W1hp.js → agent-turn-execute-CFwfJKy2.js} +39 -37
- package/dist/{agent-turn-recovery-adapter-BkoX8bcd.js → agent-turn-recovery-adapter-DWGzJ2s-.js} +1 -1
- package/dist/{agent-turn-recovery-adapter-B909sIMD.js → agent-turn-recovery-adapter-TKOtg3bA.js} +1 -1
- package/dist/{agent-turn-runner-DUKUxZcn.js → agent-turn-runner-12Exv9CB.js} +1 -1
- package/dist/{agent-turn-runner-C3Buntbu.js → agent-turn-runner-Btk5sBH0.js} +1 -1
- package/dist/{agent-turn-runner-BglHs_p0.js → agent-turn-runner-CpsTt9uv.js} +6 -6
- package/dist/{agent-turn-runner-BTBy1i8Z.js → agent-turn-runner-XPJ75h7l.js} +4 -4
- package/dist/{agents-DJ_ssbNO.js → agents-BcHFvOHE.js} +6 -6
- package/dist/{agents.config-D-yD07v8.js → agents.config-C_4HsmOy.js} +1 -1
- package/dist/{agents.config-BcBusEWj.js → agents.config-DwW88u5f.js} +1 -1
- package/dist/{api-key-rotation-DQY1fynd.js → api-key-rotation-dv2YbGr8.js} +2 -2
- package/dist/{audio-preflight-DMq3PMsW.js → audio-preflight-Cv1eSuSU.js} +6 -6
- package/dist/{audio-preflight-DZdCHEnu.js → audio-preflight-DGyrDCsN.js} +7 -7
- package/dist/{audio-preflight-C0VnQEEN.js → audio-preflight-DKR8c6Qw.js} +7 -7
- package/dist/{audio-preflight-BTQmKMCZ.js → audio-preflight-DnuyzcBj.js} +29 -29
- package/dist/{audio-transcription-runner-C_DRSo6Z.js → audio-transcription-runner-BnmmtXUh.js} +1 -1
- package/dist/{audio-transcription-runner-C9Ld3zXw.js → audio-transcription-runner-CRxHRlMX.js} +1 -1
- package/dist/{audio-transcription-runner-BeC-knyy.js → audio-transcription-runner-DZa96tEn.js} +26 -26
- package/dist/{audio-transcription-runner-9GXPmTBK.js → audio-transcription-runner-DsqwKJ49.js} +1 -1
- package/dist/{audit-CmZAI3_9.js → audit-Dk69ufby.js} +6 -6
- package/dist/{audit-CH1D3iBG.js → audit-DkY9yUsn.js} +6 -6
- package/dist/{auth-choice-dWGUA_8g.js → auth-choice-BkWEr-Pe.js} +2 -2
- package/dist/{auth-choice-CEOnAk7f.js → auth-choice-kkL-bZp9.js} +2 -2
- package/dist/{banner-DWHiEk1H.js → banner-DOesQn79.js} +1 -1
- package/dist/{browser-cli-CfoUYSxy.js → browser-cli-Cy6LJQhv.js} +3 -3
- package/dist/{browser-cli-P7SKIutx.js → browser-cli-Mbn8pYZZ.js} +3 -3
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +60 -60
- package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
- package/dist/bundled/command-logger/handler.js +2 -2
- package/dist/bundled/session-journal/handler.js +60 -60
- package/dist/bundled/session-memory/handler.js +60 -60
- package/dist/{call-xB0MOQUF.js → call-B1surxJJ.js} +3 -1
- package/dist/{call-CUY8VoHh.js → call-CsmPnXmY.js} +3 -1
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-activity-DoBHFita.js → channel-activity-Kn1_ykXE.js} +3 -3
- package/dist/{channel-options-DCKEbe7Z.js → channel-options-Am9ZvwKB.js} +1 -1
- package/dist/{channel-options-DfjYj7oi.js → channel-options-TBxP7o5K.js} +1 -1
- package/dist/{channels-cli-DrcS29Pk.js → channels-cli-3ihKjjtq.js} +33 -33
- package/dist/{channels-cli-DHvavLcJ.js → channels-cli-CGWblqhQ.js} +32 -32
- package/dist/{chat-content-hesA0q3j.js → chat-content-B_nVIplC.js} +4 -4
- package/dist/{chat-content-BZeW5ciD.js → chat-content-C7_U4hJq.js} +34 -34
- package/dist/{chrome-DZ6ejAmp.js → chrome-Bukcguhv.js} +23 -23
- package/dist/{chrome-C2xK35m5.js → chrome-DNh94Pjx.js} +8 -8
- package/dist/{chunk-DOckmOyp.js → chunk-CEygNI3g.js} +3 -3
- package/dist/{clawbot-cli-CLz6KuWz.js → clawbot-cli-BRicu1s1.js} +5 -5
- package/dist/{clawbot-cli-CzDwX-gU.js → clawbot-cli-Be313PY0.js} +5 -5
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-D2tBPn1z.js → cli-BFoMFw-E.js} +28 -28
- package/dist/{cli-DBqTAu56.js → cli-BcIWokUA.js} +29 -29
- package/dist/{client-CIDXfGgo.js → client-DA6hPHoC.js} +4 -1
- package/dist/{client-BCYzc-y7.js → client-MNdGt1bC.js} +4 -1
- package/dist/{client-profiles-BaJqyqVb.js → client-profiles-BkQpgWwd.js} +1 -1
- package/dist/{client-profiles-DGW7rrdk.js → client-profiles-CZqoxT_J.js} +1 -1
- package/dist/{command-queue-uNIrlK4C.js → command-queue-BiT79iw_.js} +1 -1
- package/dist/{command-queue-3hrr088f.js → command-queue-C4uOOl0Z.js} +1 -1
- package/dist/{command-queue-D360YW1L.js → command-queue-Cd0AajLX.js} +1 -1
- package/dist/{command-queue-D2t-RCzv.js → command-queue-DnPEEtOJ.js} +1 -1
- package/dist/{command-registry-DuGYq06B.js → command-registry-CKhdmVgi.js} +13 -13
- package/dist/{command-secret-targets-DAtwJ6C7.js → command-secret-targets-9z88Sdd9.js} +2 -2
- package/dist/{command-secret-targets-j8KBmpix.js → command-secret-targets-r25GrCux.js} +2 -2
- package/dist/{commands-registry-CZGO6Zk0.js → commands-registry-Cof4HjvY.js} +2 -2
- package/dist/{completion-cli-BmLGd23K.js → completion-cli-DCm06gIy.js} +2 -2
- package/dist/{completion-cli-DuJJOsOD.js → completion-cli-DPC7jSts.js} +1 -1
- package/dist/{config-cli-DmPS8dHv.js → config-cli-DSSYHC1h.js} +1 -1
- package/dist/{config-cli-D7Km0W0t.js → config-cli-DzKCSgly.js} +1 -1
- package/dist/{configure-Cv8WHggj.js → configure-c7eXMXPC.js} +6 -6
- package/dist/{configure-Dp_BDe0p.js → configure-ev80kp3h.js} +6 -6
- package/dist/contracts/gateway-protocol.schema.json +23 -0
- package/dist/control-ui/assets/{dreams-5cpOLdgU.js → dreams-CFX8_iO7.js} +2 -2
- package/dist/control-ui/assets/{dreams-5cpOLdgU.js.map → dreams-CFX8_iO7.js.map} +1 -1
- package/dist/control-ui/assets/{index-D6XwnS7I.js → index-CambJeDO.js} +4 -4
- package/dist/control-ui/assets/{index-D6XwnS7I.js.map → index-CambJeDO.js.map} +1 -1
- package/dist/control-ui/assets/{learning-BORaiTQ4.js → learning-XJj58fEK.js} +2 -2
- package/dist/control-ui/assets/{learning-BORaiTQ4.js.map → learning-XJj58fEK.js.map} +1 -1
- package/dist/control-ui/assets/{view-chat-ByDyhnLw.js → view-chat-DCakYJRB.js} +3 -3
- package/dist/control-ui/assets/{view-chat-ByDyhnLw.js.map → view-chat-DCakYJRB.js.map} +1 -1
- package/dist/control-ui/index.html +1 -1
- package/dist/{cron-cli-DcatymNM.js → cron-cli-B7av_Qj-.js} +3 -3
- package/dist/{cron-cli-Bxd1ztzh.js → cron-cli-D-MXQLbx.js} +3 -3
- package/dist/{daemon-cli-P_665VBl.js → daemon-cli-C0X7BA3B.js} +2 -2
- package/dist/{daemon-cli-sdDY3Rkr.js → daemon-cli-D-zUFs16.js} +2 -2
- package/dist/daemon-cli.js +5 -0
- package/dist/{deliver-BGZedjpd.js → deliver-CD-qJ08p.js} +7 -5
- package/dist/{deliver-C0DKFL-c.js → deliver-CpY1AlyA.js} +29 -29
- package/dist/{deliver-Lga2gynK.js → deliver-Czj8jts5.js} +5 -5
- package/dist/{deliver-6pCupDgE.js → deliver-D3zKg0i3.js} +4 -4
- package/dist/{devices-cli-5NqagsuD.js → devices-cli-Bx1kF97H.js} +2 -2
- package/dist/{devices-cli-D6FG7yBy.js → devices-cli-D55ggw6F.js} +2 -2
- package/dist/{diagnostic-DBospa-B.js → diagnostic-Bu6Kxc66.js} +1 -1
- package/dist/{diagnostic-CdJb6i0b.js → diagnostic-BzGocbak.js} +1 -1
- package/dist/{diagnostic-uYRm3RAs.js → diagnostic-CKFgwhkU.js} +5 -5
- package/dist/{diagnostic-BP20aK6Y.js → diagnostic-CWdhJ9KR.js} +1 -1
- package/dist/{dm-policy-shared-C8iB_a-f.js → dm-policy-shared-JZebmiY8.js} +1 -1
- package/dist/{doctor-completion-BtJqYgVS.js → doctor-completion-Bx2Vu53y.js} +1 -1
- package/dist/{doctor-completion-Br2pHonN.js → doctor-completion-C1c_Fm0b.js} +1 -1
- package/dist/entry.js +2 -2
- package/dist/{errors-83K08uTq.js → errors-COs_vQr3.js} +1 -1
- package/dist/{exec-approvals-cli-DzJlH70p.js → exec-approvals-cli-RX2L6dhB.js} +4 -4
- package/dist/{exec-approvals-cli-D61d8hgT.js → exec-approvals-cli-U1avv2dD.js} +4 -4
- package/dist/extensionAPI.js +16 -16
- package/dist/{fetch-fObya4WR.js → fetch-B1ohBh6A.js} +8 -8
- package/dist/{fetch-guard-BucfWGi8.js → fetch-guard-BXzVwvnJ.js} +3 -3
- package/dist/{frontmatter-IfoWyoLV.js → frontmatter-Cw_6jMAR.js} +5 -5
- package/dist/{fs-safe-joAzTKB9.js → fs-safe-BK5ALzKD.js} +26 -26
- package/dist/{gateway-cli-BZFHtE2A.js → gateway-cli-CrFsVy3G.js} +53 -50
- package/dist/{gateway-cli-CzrTOBz5.js → gateway-cli-rJFjYA1c.js} +54 -51
- package/dist/{gateway-rpc-D36kXOsx.js → gateway-rpc-BArMTxJU.js} +1 -1
- package/dist/{gateway-rpc-hfUfa0T-.js → gateway-rpc-k1CUY-d7.js} +1 -1
- package/dist/github-copilot-token-DYYKoDuV.js +106 -0
- package/dist/{health-CVUuZRpQ.js → health-DjlQU_Tv.js} +4 -4
- package/dist/{health-K3ylOag4.js → health-jZPF8weC.js} +4 -4
- package/dist/{hooks-cli-CNlH_Ckf.js → hooks-cli-CVygK2yq.js} +30 -30
- package/dist/{hooks-cli-BTxvzxSG.js → hooks-cli-b4k2GboY.js} +29 -29
- package/dist/{image-ops-DlAa1zGf.js → image-ops-C-5VgbLB.js} +1 -1
- package/dist/index.js +32 -32
- package/dist/{ir-Cs9qeaeL.js → ir-DioI2VyB.js} +5 -5
- package/dist/{legacy-names-Dh4RlQMQ.js → legacy-names-CghFcfry.js} +1 -1
- package/dist/llm-slug-generator.js +60 -60
- package/dist/{logger-vVASmiVr.js → logger-J4xjy-6D.js} +1 -1
- package/dist/{logs-cli-ZXfvpQn5.js → logs-cli-BeLB-Xck.js} +3 -3
- package/dist/{logs-cli-DwpuZXwp.js → logs-cli-CvF3EIE2.js} +3 -3
- package/dist/{manager-CTeCpzGz.js → manager-D728Thsn.js} +18 -18
- package/dist/{manager-CsTeZuhu.js → manager-DCXdygsq.js} +1 -1
- package/dist/{manager-d_jLZwIa.js → manager-gw84UdyQ.js} +1 -1
- package/dist/{markdown-tables-BQLg3bjX.js → markdown-tables-DfLMw9ti.js} +2 -2
- package/dist/{memory-cli-C6IsfNdf.js → memory-cli-BcjjHcwL.js} +2 -2
- package/dist/{memory-cli-Dm4vpHAU.js → memory-cli-H4nCh_8v.js} +2 -2
- package/dist/{model-selection-UX4A5pdj.js → model-selection-BHGpQSa9.js} +87 -87
- package/dist/{models-FSASF0m5.js → models-BBZ_Tvpf.js} +3 -3
- package/dist/{models-cli-CqhUy9E-.js → models-cli-7V9N158Z.js} +30 -30
- package/dist/{models-cli-BIWkA9C9.js → models-cli-BJK0d_IM.js} +28 -28
- package/dist/{models-config-CNw9rdH1.js → models-config-CJUMccZW.js} +2 -2
- package/dist/{node-cli-BsB2z4rN.js → node-cli-BUV9i73l.js} +4 -4
- package/dist/{node-cli-DFxjiUT-.js → node-cli-DEVZws2K.js} +4 -4
- package/dist/{node-command-policy-BG0trkgo.js → node-command-policy-C0OmboTh.js} +1 -1
- package/dist/{node-command-policy-CVGtgIFJ.js → node-command-policy-Dbm2r7IP.js} +1 -1
- package/dist/{nodes-cli-BbRJxfod.js → nodes-cli-CYpc3Yvq.js} +3 -3
- package/dist/{nodes-cli-Cos0b-Pr.js → nodes-cli-Chp9WqRe.js} +3 -3
- package/dist/{npm-resolution-CwoZ0zIw.js → npm-resolution-BNpY_aOs.js} +1 -1
- package/dist/{npm-resolution-BKhZg_qE.js → npm-resolution-DaXE7ULy.js} +1 -1
- package/dist/{onboard-Bhpqg04u.js → onboard-BOhVuXUR.js} +3 -3
- package/dist/{onboard-qzS9Ex3E.js → onboard-C-KqZZqX.js} +3 -3
- package/dist/{onboard-channels-CdETO6vp.js → onboard-channels-B89jrN2Y.js} +2 -2
- package/dist/{onboard-channels-DqqM-gZ4.js → onboard-channels-DmJGOEPI.js} +2 -2
- package/dist/{onboard-helpers-CyLVkn7p.js → onboard-helpers-BHTSdqFW.js} +1 -1
- package/dist/{onboard-helpers-BjlBFVLF.js → onboard-helpers-DFWV67fv.js} +1 -1
- package/dist/{onboard-remote-BoobabMS.js → onboard-remote-BL2_Vzie.js} +1 -1
- package/dist/{onboard-remote-CGfCa4Gn.js → onboard-remote-aFlQukcN.js} +1 -1
- package/dist/{onboard-skills-qXATWBbv.js → onboard-skills-DBsUD_Fs.js} +1 -1
- package/dist/{onboard-skills-CA3vVftf.js → onboard-skills-fb0X7sb5.js} +1 -1
- package/dist/{onboarding-9F7Zrfos.js → onboarding-C6Xs7G9Y.js} +7 -7
- package/dist/{onboarding-B0tWDl2D.js → onboarding-DjYLPv7p.js} +7 -7
- package/dist/{onboarding.finalize-D-GEVbwy.js → onboarding.finalize-BzPTRheS.js} +35 -35
- package/dist/{onboarding.finalize-DZaf33cl.js → onboarding.finalize-Sx0H879S.js} +33 -33
- package/dist/{onboarding.gateway-config-D2JKnTD-.js → onboarding.gateway-config-CkoaBZS4.js} +5 -5
- package/dist/{onboarding.gateway-config-BjNFm5qL.js → onboarding.gateway-config-DFk1lZ7k.js} +5 -5
- package/dist/{operator-commands-Cak1KHXQ.js → operator-commands-CMLC3NdV.js} +2 -2
- package/dist/{operator-commands-QumqWQQg.js → operator-commands-DWyDwJ5E.js} +2 -2
- package/dist/{outbound-attachment-CFHAAdf4.js → outbound-attachment-DtVXUXnX.js} +2 -2
- package/dist/{outbound-message-hooks-DD51nZnK.js → outbound-message-hooks-8LGAoYF_.js} +1 -1
- package/dist/{outbound-message-hooks-ZPwBUN_R.js → outbound-message-hooks-CsYq3_vL.js} +1 -1
- package/dist/{outbound-message-hooks-WWLXsRwc.js → outbound-message-hooks-DUHpZ2aL.js} +5 -5
- package/dist/{outbound-message-hooks-DC75UHT4.js → outbound-message-hooks-tjGZZOYq.js} +1 -1
- package/dist/{path-alias-guards-BzCkdlOk.js → path-alias-guards-E9ntDORB.js} +1 -1
- package/dist/paths-BIDPYPVC.js +233 -0
- package/dist/{pi-embedded-BSXEJok2.js → pi-embedded--18wTN8q.js} +279 -272
- package/dist/{pi-embedded-helpers-D7uD-CgK.js → pi-embedded-helpers-Brv2iTWi.js} +2 -2
- package/dist/{pi-embedded-helpers-StwgdB31.js → pi-embedded-helpers-ClJpdsSV.js} +2 -2
- package/dist/{pi-embedded-recovery-adapter-D7px7ESy.js → pi-embedded-recovery-adapter-BEKLsxLt.js} +10 -10
- package/dist/{pi-embedded-recovery-adapter-CfgLn9QF.js → pi-embedded-recovery-adapter-dQZ-gtY4.js} +10 -10
- package/dist/{pi-embedded-utils-DjVnTKKi.js → pi-embedded-utils-C-FQE63E.js} +1 -1
- package/dist/{pi-embedded-utils-BjqdCUkA.js → pi-embedded-utils-C7ErjdjF.js} +3 -3
- package/dist/{pi-embedded-utils-B8Raycd6.js → pi-embedded-utils-CKxA8dqZ.js} +1 -1
- package/dist/{pi-embedded-utils-CR3tST8r.js → pi-embedded-utils-D7vaAoE6.js} +1 -1
- package/dist/{pi-embedded-BhsFkp5Y.js → pi-embedded-vIZchQTO.js} +42 -35
- package/dist/{pi-model-discovery-CQdUMRm4.js → pi-model-discovery-BaH_6win.js} +7 -7
- package/dist/{pi-tools.policy-DXLQHQAj.js → pi-tools.policy-BSgFR5ag.js} +1 -1
- package/dist/{plugin-registry-DH7Hnw6l.js → plugin-registry-CDj1s2Qo.js} +1 -1
- package/dist/{plugin-registry-DgIkh9ii.js → plugin-registry-CmiGMpCp.js} +1 -1
- package/dist/plugin-sdk/{agent-turn-execute-CW7LtXMC.js → agent-turn-execute-DRGUpyj_.js} +15 -15
- package/dist/plugin-sdk/{agent-turn-execute-BxdAt_ht.js → agent-turn-execute-vNMPaEsb.js} +15 -15
- package/dist/plugin-sdk/{agent-turn-runner-orbrCxRO.js → agent-turn-runner-B48Ac2Mq.js} +5 -5
- package/dist/plugin-sdk/{agent-turn-runner-sOn9sAG9.js → agent-turn-runner-CJ061NAh.js} +4 -4
- package/dist/plugin-sdk/{agent-turn-runner-CRaNFFTm.js → agent-turn-runner-xP1KK6u-.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CBBGdhe1.js → audio-preflight-BDZ7cLko.js} +5 -5
- package/dist/plugin-sdk/{audio-preflight-BZXIHlnM.js → audio-preflight-COb5kXAH.js} +6 -6
- package/dist/plugin-sdk/{audio-preflight-CNU5kpWj.js → audio-preflight-DpIgQPUE.js} +1 -1
- package/dist/plugin-sdk/{audio-transcription-runner-D5dYI82C.js → audio-transcription-runner-DqbgqKuA.js} +1 -1
- package/dist/plugin-sdk/{audio-transcription-runner-D8y2D8k8.js → audio-transcription-runner-tMxFDdPy.js} +1 -1
- package/dist/plugin-sdk/{chat-content-DB5Wz2lG.js → chat-content-B4kExRGx.js} +1 -1
- package/dist/plugin-sdk/{chat-content-aOAkouil.js → chat-content-CmG6uniC.js} +1 -1
- package/dist/plugin-sdk/{command-detection-AlAuh3r9.js → command-detection-Cx5GspTs.js} +37 -30
- package/dist/plugin-sdk/{command-queue-JvIhb__x.js → command-queue-BrpT-5Sy.js} +1 -1
- package/dist/plugin-sdk/{command-queue-J8WWtdem.js → command-queue-mdn12mZN.js} +2 -2
- package/dist/plugin-sdk/{command-queue-DMJXMFU-.js → command-queue-uRF0EuVO.js} +1 -1
- package/dist/plugin-sdk/{deliver-D77qfyGv.js → deliver-CckI3OJ8.js} +4 -4
- package/dist/plugin-sdk/{deliver-46BXvvk5.js → deliver-D3X61EfY.js} +4 -4
- package/dist/plugin-sdk/{deliver-tcGRRL8s.js → deliver-DOj7WTIw.js} +5 -5
- package/dist/plugin-sdk/{deliver-BOyf6UPp.js → deliver-qMYtKe1O.js} +5 -5
- package/dist/plugin-sdk/{diagnostic-DVk1j05H.js → diagnostic-BQhPQdFK.js} +1 -1
- package/dist/plugin-sdk/{diagnostic-C-BgFx1S.js → diagnostic-CcNUspD1.js} +1 -1
- package/dist/plugin-sdk/{diagnostic-CLyicI69.js → diagnostic-I0XYqjlG.js} +1 -1
- package/dist/plugin-sdk/index.js +16 -16
- package/dist/plugin-sdk/{monitor-D9AzoNHs.js → monitor-CjGR673h.js} +36 -29
- package/dist/plugin-sdk/{pi-embedded-utils-Bj86frFf.js → pi-embedded-utils-BeDAZIRN.js} +1 -1
- package/dist/plugin-sdk/{pi-embedded-utils-gWjx_FJu.js → pi-embedded-utils-CXRILg4X.js} +1 -1
- package/dist/plugin-sdk/{provider-dispatcher-BkgqrySb.js → provider-dispatcher-CaEeja4a.js} +15 -15
- package/dist/plugin-sdk/{provider-dispatcher-RG1EJhMg.js → provider-dispatcher-CwOOkcSh.js} +15 -15
- package/dist/plugin-sdk/{provider-image-CK8PByo3.js → provider-image-1--b__Rf.js} +1 -1
- package/dist/plugin-sdk/{provider-image-BRuhIUH4.js → provider-image-CWR1baFo.js} +4 -4
- package/dist/plugin-sdk/{provider-image-BsvAEUj7.js → provider-image-D3L7uRQL.js} +4 -4
- package/dist/plugin-sdk/{provider-image-BRiO1hJO.js → provider-image-DfMOZvCj.js} +1 -1
- package/dist/plugin-sdk/{replies-CNJcNn1X.js → replies-Bvgbr4Gl.js} +2 -2
- package/dist/plugin-sdk/{replies-CmfWsSdE.js → replies-DpAL4lju.js} +2 -2
- package/dist/plugin-sdk/{replies-Diq1jozB.js → replies-K0SP92k3.js} +3 -3
- package/dist/plugin-sdk/{replies-3-6UUC2y.js → replies-S7-hIwEu.js} +3 -3
- package/dist/plugin-sdk/{reply-directives-C_nV536z.js → reply-directives-3w5Sb0-K.js} +1 -1
- package/dist/plugin-sdk/{reply-directives--THCb2vc.js → reply-directives-CCmYO5TU.js} +1 -1
- package/dist/plugin-sdk/{runs-CmbFSwOD.js → runs-Bh-TSTul.js} +6 -6
- package/dist/plugin-sdk/{runs-nP6hONs2.js → runs-Ciq2OtzT.js} +5 -5
- package/dist/plugin-sdk/{runs-Cu-M6Lh7.js → runs-DgLRRHnl.js} +6 -6
- package/dist/plugin-sdk/{runs-BU1Eppml.js → runs-lzwgSAQQ.js} +5 -5
- package/dist/plugin-sdk/{send-LkmFhgsK.js → send-4L6l04nt.js} +2 -2
- package/dist/plugin-sdk/{send-D7UktRfh.js → send-DKVsq9M4.js} +1 -1
- package/dist/plugin-sdk/{send-C2QGhDII.js → send-RnIEnr9s.js} +2 -2
- package/dist/plugin-sdk/{send-aiyKj-5V.js → send-T7FFZ4GT.js} +1 -1
- package/dist/plugin-sdk/{session-context-DLi5r0L8.js → session-context-Ct8StxcQ.js} +1 -1
- package/dist/plugin-sdk/{session-context-D79uWb-f.js → session-context-DLVW1kjd.js} +1 -1
- package/dist/plugin-sdk/{session-meta-DwqjC-No.js → session-meta-CjpVFrUg.js} +1 -1
- package/dist/plugin-sdk/{sessions-D9WFZu21.js → sessions-55u1Rz4h.js} +1 -0
- package/dist/plugin-sdk/{sessions-CmLCbwdv.js → sessions-DgJUTr39.js} +1 -0
- package/dist/plugin-sdk/src/agents/tool-display-common.d.ts +10 -0
- package/dist/plugin-sdk/src/gateway/protocol/index.d.ts +3 -0
- package/dist/plugin-sdk/src/gateway/protocol/schema/protocol-schemas.d.ts +6 -0
- package/dist/plugin-sdk/src/gateway/protocol/schema/sessions.d.ts +6 -0
- package/dist/plugin-sdk/src/gateway/protocol/schema/types.d.ts +2 -0
- package/dist/plugin-sdk/src/gateway/session-utils.types.d.ts +2 -0
- package/dist/plugin-sdk/src/shared/session-visibility.d.ts +1 -1
- package/dist/plugin-sdk/src/tts/tts.d.ts +2 -0
- package/dist/plugin-sdk/{subagent-registry-D-9HI-_X.js → subagent-registry-CfMU3EOY.js} +15 -15
- package/dist/plugin-sdk/{subagent-registry-CuACJDRa.js → subagent-registry-n7onkQYC.js} +15 -15
- package/dist/plugin-sdk/testing.js +15 -15
- package/dist/{plugins-cli-D2epBFli.js → plugins-cli-BfVyfDVB.js} +30 -30
- package/dist/{plugins-cli-YMB3dwun.js → plugins-cli-RYPupoUU.js} +29 -29
- package/dist/{program-context-C0OAcdai.js → program-context-Bd6intne.js} +37 -37
- package/dist/{program-DhncJMbr.js → program-vHNIwjM_.js} +35 -35
- package/dist/{prompt-select-styled-pBLBu3w7.js → prompt-select-styled-BwIQiRks.js} +11 -11
- package/dist/{prompt-select-styled-B0HZWrVy.js → prompt-select-styled-CvmUNFDK.js} +11 -11
- package/dist/{provider-image-CApPjEsW.js → provider-image-BvBYtGGJ.js} +1 -1
- package/dist/{provider-image-D2FrDW-X.js → provider-image-DVTuOv92.js} +6 -6
- package/dist/{provider-image-CAWS0JMV.js → provider-image-KmAZWQje.js} +1 -1
- package/dist/{provider-image-B-KFl1me.js → provider-image-n0L8CIDm.js} +1 -1
- package/dist/{proxy-CPi-EHQf.js → proxy-CrSpy5Aw.js} +1 -1
- package/dist/{proxy-env-1eta-137.js → proxy-env-BxR4m86L.js} +1 -1
- package/dist/{proxy-fetch-SAeVJOzX.js → proxy-fetch-g109vqdt.js} +1 -1
- package/dist/{push-apns-BAZsfMOy.js → push-apns--0fj47Qj.js} +2 -2
- package/dist/{push-apns-PAONdNH4.js → push-apns-Cb0sjE90.js} +2 -2
- package/dist/{pw-ai-DtPiMDW2.js → pw-ai-BJiiE3V8.js} +1 -1
- package/dist/{pw-ai-Czj8Ud3z.js → pw-ai-CC8qsp4R.js} +1 -1
- package/dist/{pw-ai-D9Y__zb9.js → pw-ai-CNTt9O_x.js} +14 -14
- package/dist/{pw-ai-BZjpW2LJ.js → pw-ai-DMPGyJxJ.js} +1 -1
- package/dist/{qmd-manager-C0SNPJNQ.js → qmd-manager-CU9iEql0.js} +12 -12
- package/dist/{qr-cli-DAghVVtT.js → qr-cli-B1vszJrL.js} +3 -3
- package/dist/{qr-cli-C8WFS-12.js → qr-cli-BZy4AXuc.js} +3 -3
- package/dist/{query-expansion-lPFsJzxE.js → query-expansion-B_2rETEo.js} +13 -13
- package/dist/{recorder-Dtl7MFGH.js → recorder-Clg9Kbqu.js} +2 -2
- package/dist/{recovery-adapter-CZUNVpQO.js → recovery-adapter-D3YllPfB.js} +2 -2
- package/dist/{recovery-adapter-CRSPS8I2.js → recovery-adapter-Dyk72MfJ.js} +2 -2
- package/dist/{recovery-adapter-BSdwo2OS.js → recovery-adapter-Hdhf6HDW.js} +1 -1
- package/dist/{recovery-adapter-BpJ8BscF.js → recovery-adapter-y0rKMaw8.js} +1 -1
- package/dist/{redact-Da2jd8m8.js → redact-DpE5Tg36.js} +1 -1
- package/dist/{register.agent-FDTmtEUr.js → register.agent-CgPP5ADX.js} +31 -31
- package/dist/{register.agent-C4f6rhJo.js → register.agent-DfScK2hV.js} +33 -33
- package/dist/{register.configure-Dv5O2Xb5.js → register.configure-C8uYH0Yy.js} +35 -35
- package/dist/{register.configure-Hw_sXK-z.js → register.configure-dflFJ7N_.js} +34 -34
- package/dist/{register.maintenance-D8jjjhHB.js → register.maintenance-DYrx2td9.js} +35 -35
- package/dist/{register.maintenance-DK1PJ9oQ.js → register.maintenance-DplgYMC9.js} +37 -37
- package/dist/{register.message-D2APO70t.js → register.message-BBQ6Wdt9.js} +29 -29
- package/dist/{register.message-GNpuxvGM.js → register.message-jvrIPxVV.js} +30 -30
- package/dist/{register.onboard-0G3JduCW.js → register.onboard-eC1JSQFQ.js} +6 -6
- package/dist/{register.onboard-DONtll3f.js → register.onboard-mi8eEWxH.js} +6 -6
- package/dist/{register.setup-Ru94mK0C.js → register.setup-DZYxFj5L.js} +6 -6
- package/dist/{register.setup-BhN2hAJ-.js → register.setup-F0XMwrOq.js} +6 -6
- package/dist/{register.status-health-sessions-cUGfN2jZ.js → register.status-health-sessions-B-IdUdif.js} +33 -33
- package/dist/{register.status-health-sessions-BugOGdEq.js → register.status-health-sessions-DbjCFLPT.js} +35 -35
- package/dist/{register.subclis-BXGoL8Qv.js → register.subclis-Dobk1vvB.js} +25 -25
- package/dist/{replies-qljs_NZI.js → replies-B7XXdKjN.js} +2 -2
- package/dist/{replies-DS1VGy4W.js → replies-BKdOqGC9.js} +5 -5
- package/dist/{replies-CHagfAgN.js → replies-DrGGa5se.js} +2 -2
- package/dist/{replies-BuO733xx.js → replies-gGgLXY8D.js} +2 -2
- package/dist/{reply-CqYQeNjd.js → reply-BSMDupOw.js} +38 -36
- package/dist/{reply-directives-CJoSirgd.js → reply-directives-Bz18fvJe.js} +1 -1
- package/dist/{reply-directives-DBZR0dTg.js → reply-directives-CtSqkSzr.js} +2 -2
- package/dist/{reply-directives-B9hX-LBz.js → reply-directives-bPMJNW1Q.js} +1 -1
- package/dist/{reply-directives-GcBlocvi.js → reply-directives-tE0PyBK-.js} +1 -1
- package/dist/{reply-prefix-DfeMrD4g.js → reply-prefix-C-DjHvQK.js} +1 -1
- package/dist/{resolve-route-CAuL1p_4.js → resolve-route-DKZiteo6.js} +5 -5
- package/dist/{rpc-DJ9VPO9A.js → rpc-BZtZb4-6.js} +1 -1
- package/dist/{rpc-BoZa3Ve8.js → rpc-Ft_DUdSG.js} +1 -1
- package/dist/{run-main-08KWAl9e.js → run-main-BJFVebkS.js} +44 -44
- package/dist/{runs-DRxbDl12.js → runs-BIt97Q-K.js} +9 -9
- package/dist/{runs-CoWBHyeo.js → runs-BUywHXga.js} +4 -4
- package/dist/{runs-vCw_F2ZO.js → runs-TPOj4wqX.js} +4 -4
- package/dist/{runs-yIaQUPae.js → runs-wDxw0TX4.js} +5 -5
- package/dist/{sandbox-BijP-jd2.js → sandbox-389fAlDt.js} +2 -2
- package/dist/{sandbox-Cf0p0qcn.js → sandbox-CEDb7iCz.js} +2 -2
- package/dist/{sandbox-cli-DFLg4dmY.js → sandbox-cli-BJ4Z1CEE.js} +6 -6
- package/dist/{sandbox-cli-B0TGsg0B.js → sandbox-cli-kfxS44rH.js} +6 -6
- package/dist/{secrets-cli-BoYG9Zi_.js → secrets-cli-CgpBwEA_.js} +3 -3
- package/dist/{secrets-cli-CL3R38dk.js → secrets-cli-DFuIPeQ8.js} +3 -3
- package/dist/{security-cli-BuOut78W.js → security-cli-bxcpjEyc.js} +8 -8
- package/dist/{security-cli-DFTi9A0s.js → security-cli-zcQ5Hc8L.js} +8 -8
- package/dist/{send-Bmp8wi9T.js → send-Bf4geLyV.js} +8 -8
- package/dist/{send-DRJrureq.js → send-Ch1ruPj9.js} +1 -1
- package/dist/{send-DFasc8l1.js → send-CsDSBjFo.js} +6 -6
- package/dist/{send-CtSLexxo.js → send-DBqe2mPq.js} +30 -30
- package/dist/{send-DFAmNsWX.js → send-DQvfLvpJ.js} +6 -6
- package/dist/{send-DSRl6F0O.js → send-bwKTbNlJ.js} +7 -7
- package/dist/{send-DxkjyjYg.js → send-cRef_6f-.js} +1 -1
- package/dist/{send-7pf6IvCv.js → send-xXKNMsLi.js} +1 -1
- package/dist/{server-CRI0-vWV.js → server-CggrpKmd.js} +4 -4
- package/dist/{server-ks1TmG7W.js → server-D7EeBwPd.js} +4 -4
- package/dist/{server-context-DgKj77jj.js → server-context-CV1udh3Y.js} +2 -2
- package/dist/{server-context-BIoSfzI_.js → server-context-Dv15RG_H.js} +2 -2
- package/dist/{server-lifecycle-fJG-u89x.js → server-lifecycle-BIH58Hoe.js} +1 -1
- package/dist/{server-lifecycle-Cd0b010a.js → server-lifecycle-D8mfFIYf.js} +1 -1
- package/dist/{server-node-events-Ba1YD79n.js → server-node-events-C_xoK9Xb.js} +29 -29
- package/dist/{server-node-events-CqQhTT1T.js → server-node-events-mxzClNCx.js} +30 -30
- package/dist/{session-meta-BlSJMcbU.js → session-meta-5XI6vLtM.js} +1 -1
- package/dist/{session-storage-B-ES9i1k.js → session-storage-269JGGQ0.js} +1 -1
- package/dist/{session-storage-7x9X6Db3.js → session-storage-BbpL12Su.js} +1 -1
- package/dist/{session-storage-owner-DLQ3vsAz.js → session-storage-owner-ClZPCWep.js} +2 -2
- package/dist/{session-storage-owner-1-cQlOCZ.js → session-storage-owner-M7vbUIWw.js} +2 -2
- package/dist/{session-utils-BeYzkx__.js → session-utils-Be7zx7oZ.js} +4 -2
- package/dist/{sessions-BIgPumZV.js → sessions-BV1UJJsg.js} +37 -11
- package/dist/{sessions-rMRfoN3f.js → sessions-CIWeBs1M.js} +1 -0
- package/dist/{sessions-9SvxsXWP.js → sessions-CLcDtAGY.js} +1 -0
- package/dist/{sessions-bZHjdfaW.js → sessions-C_dBu7XC.js} +6 -5
- package/dist/{sessions-CLXwtR8F.js → sessions-CpqHo_Lm.js} +37 -11
- package/dist/{sessions-B03PIf-m.js → sessions-D4geZIf4.js} +1 -0
- package/dist/{sessions-DvCgCqqN.js → sessions-DR_ebiSs.js} +2 -2
- package/dist/{sessions-claims-status-DMdo7H9e.js → sessions-claims-status-CCWxZ_uS.js} +2 -2
- package/dist/{sessions-claims-status-CJ4Z16C-.js → sessions-claims-status-DcgKqzSM.js} +2 -2
- package/dist/{skill-commands-RBvFNztU.js → skill-commands-CAOvM2sb.js} +8 -8
- package/dist/{skills-Dj2sTIvh.js → skills-VN1CJK6W.js} +21 -21
- package/dist/{status-D_sJaQfK.js → status-B8Al6FzI.js} +18 -18
- package/dist/{status-Ccz-BtS_.js → status-Cuo3rz1n.js} +18 -18
- package/dist/{store-WpdMrmch.js → store-HgGweM4u.js} +7 -7
- package/dist/{subsystem-D_zHSy02.js → subsystem-BZy3aWdW.js} +71 -71
- package/dist/{system-cli-BGa0j96s.js → system-cli-Ba9jGCiM.js} +3 -3
- package/dist/{system-cli-CnsRY21W.js → system-cli-DcjUJVa8.js} +3 -3
- package/dist/{tables--lm0TIoo.js → tables-DkwNUhx1.js} +1 -1
- package/dist/{task-pipeline-boot-BMwRQ8Fe.js → task-pipeline-boot-C1v58b1_.js} +30 -30
- package/dist/{task-pipeline-boot-D5tuNVHj.js → task-pipeline-boot-Kxi1hpUn.js} +29 -29
- package/dist/{task-runlog-retention-D0XabfJk.js → task-runlog-retention-BdLkqRCi.js} +3 -3
- package/dist/{task-runlog-retention-vP8bhD14.js → task-runlog-retention-CJeUxN8v.js} +3 -3
- package/dist/{tasks-DEye0RYH.js → tasks-BIqKTj4l.js} +2 -2
- package/dist/{tasks-DIa6KmEw.js → tasks-nrh4KjHH.js} +2 -2
- package/dist/{tokens-B3OPeQh5.js → tokens-PMai9bNL.js} +1 -1
- package/dist/{tool-loop-detection-ST5jhih3.js → tool-loop-detection-BqyMjpvr.js} +2 -2
- package/dist/{tui-YpVnb92B.js → tui-DC-J_38B.js} +3 -3
- package/dist/{tui-DvN9w3dz.js → tui-DrLsIQv0.js} +3 -3
- package/dist/{tui-cli-B9yDRbjk.js → tui-cli-CAtLTzIA.js} +7 -7
- package/dist/{tui-cli-DoocDTJG.js → tui-cli-De9rMj3R.js} +7 -7
- package/dist/{update-cli-CUltMNat.js → update-cli-BEm9qrlV.js} +38 -38
- package/dist/{update-cli-DzokCnPQ.js → update-cli-CGSSTKTT.js} +36 -36
- package/dist/{update-runner-BOwq67Zr.js → update-runner-BMCWrif2.js} +1 -1
- package/dist/{update-runner-B2S-ijWA.js → update-runner-BUO6D2tP.js} +1 -1
- package/dist/{user-run-recording--_IhK-gN.js → user-run-recording-B1HujJiT.js} +2 -2
- package/dist/{validation-cli-C3tmcqKI.js → validation-cli-DHwddKWw.js} +29 -29
- package/dist/{validation-cli-BVO3QQdD.js → validation-cli-IGbMryvI.js} +30 -30
- package/dist/{with-timeout-BWtea6IA.js → with-timeout-BBKlU1es.js} +2 -2
- package/dist/{with-timeout-i0aj653V.js → with-timeout-CkVVKMZ5.js} +2 -2
- package/dist/{workspace-rViTESnr.js → workspace-Bj1Jegt-.js} +27 -27
- package/extensions/acpx/package.json +1 -1
- package/extensions/anthropic/package.json +1 -1
- package/extensions/bifrost/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/deepgram/package.json +1 -1
- package/extensions/deepinfra/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diffs/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/dream-cycle/package.json +1 -1
- package/extensions/elevenlabs/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/gemini-search/package.json +1 -1
- package/extensions/google/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/grok-search/package.json +1 -1
- package/extensions/groq/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/kimi-search/package.json +1 -1
- package/extensions/learning-core/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +1 -1
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/mistral/package.json +1 -1
- package/extensions/moonshot/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +1 -1
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +1 -1
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/openai/package.json +1 -1
- package/extensions/openai-realtime/package.json +1 -1
- package/extensions/openrouter/package.json +1 -1
- package/extensions/perplexity-search/package.json +1 -1
- package/extensions/searxng-search/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +1 -1
- package/extensions/twitch/package.json +1 -1
- package/extensions/ui-surfaces/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +1 -1
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zai/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +1 -1
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +1 -1
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dreams-5cpOLdgU.js","names":[],"sources":["../../../ui/src/ui/views/dreams.ts"],"sourcesContent":["import { html, nothing, svg, type TemplateResult } from \"lit\";\nimport { t } from \"../../i18n/index.ts\";\nimport {\n isDryRun,\n measurementLabel,\n metricsEvent,\n outcomeEvents,\n phaseEvents,\n type DreamsBudgetWindow,\n type DreamsTaskRun,\n type DreamsViewState,\n type PanelError,\n type PanelStatus,\n type ProjectedMetricsEvent,\n type ProjectedPhaseEvent,\n type ProjectedRunEvent,\n type QualityPoint,\n} from \"../controllers/dreams.ts\";\n\nexport type DreamsProps = {\n state: DreamsViewState;\n nowMs: number;\n learningHref: string;\n onSelectRun: (taskRunId: string | null) => void;\n onRefresh: () => void;\n onOpenLearning: () => void;\n};\n\nfunction formatTime(value: string | number | null | undefined): string {\n if (value === null || value === undefined) {\n return \"—\";\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? \"—\" : date.toLocaleString();\n}\n\nfunction formatMs(value: number | undefined): string {\n if (value === undefined || !Number.isFinite(value)) {\n return \"—\";\n }\n return value >= 1000 ? `${(value / 1000).toFixed(value >= 10_000 ? 0 : 1)} s` : `${value} ms`;\n}\n\nfunction formatCount(value: number, truncated: boolean | undefined): string {\n return truncated ? `≥ ${value}` : String(value);\n}\n\nfunction renderPanelNotice(\n status: PanelStatus,\n error: PanelError | null,\n testId: string,\n): TemplateResult | typeof nothing {\n if (status === \"disabled\") {\n return html`<div\n class=\"dreams-state dreams-state--disabled\"\n data-test-id=${`${testId}-disabled`}\n data-state=\"disabled\"\n >\n ${t(\"dreams.state.disabled\")}\n </div>`;\n }\n if (status === \"degraded\") {\n return html`<div\n class=\"dreams-state dreams-state--degraded\"\n role=\"alert\"\n data-test-id=${`${testId}-degraded`}\n data-state=\"degraded\"\n >\n <strong>${t(\"dreams.state.degraded\")}</strong>\n ${error ? html`<span class=\"mono\">${error.code ? `${error.code}: ` : \"\"}${error.message}</span>` : nothing}\n </div>`;\n }\n if (status === \"loading\" || status === \"idle\") {\n return html`<div class=\"dreams-state dreams-state--loading\" data-test-id=${`${testId}-loading`}>\n ${t(\"dreams.state.loading\")}\n </div>`;\n }\n return nothing;\n}\n\nfunction renderBudgetWindow(window: DreamsBudgetWindow | null): TemplateResult {\n if (!window) {\n return html`<div class=\"dreams-budget\" data-test-id=\"dreams-budget\">\n <div class=\"dreams-state dreams-state--empty\">${t(\"dreams.budget.none\")}</div>\n </div>`;\n }\n return html`\n <div class=\"dreams-budget\" data-test-id=\"dreams-budget\">\n <div class=\"dreams-budget__title\">${t(\"dreams.budget.title\")}</div>\n <div class=\"dreams-budget__units-note\" data-test-id=\"dreams-budget-units-note\">\n ${t(\"dreams.budget.unitsNote\")}\n </div>\n ${\n window.available\n ? html`\n <div class=\"dreams-kv\">\n <span>${t(\"dreams.budget.used\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-budget-usage\"\n >${window.windowUsageUnits} / ${window.cap ?? \"∞\"} ${t(\"dreams.budget.unitsSuffix\")}</span\n >\n <span>${t(\"dreams.budget.window\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-budget-window-hours\"\n >${window.windowHours === null ? \"—\" : `${window.windowHours} h`}</span\n >\n <span>${t(\"dreams.budget.windowStart\")}</span>\n <span class=\"mono\">${formatTime(window.windowStartTs)}</span>\n <span>${t(\"dreams.budget.ceiling\")}</span>\n <span class=\"mono\">${window.ceilingCap ?? \"—\"}</span>\n <span>${t(\"dreams.budget.denied\")}</span>\n <span class=\"mono\">${window.totalDenied}</span>\n </div>\n `\n : html`<div\n class=\"dreams-state dreams-state--degraded\"\n data-test-id=\"dreams-budget-unavailable\"\n >\n ${t(\"dreams.budget.unavailable\")}\n ${window.error ? html`<span class=\"mono\">${window.error}</span>` : nothing}\n </div>`\n }\n </div>\n `;\n}\n\nfunction measurementChip(label: string): TemplateResult {\n return html`<span\n class=\"chip dreams-chip dreams-chip--${label}\"\n data-test-id=\"dreams-measurement-label\"\n data-measurement=${label}\n >${t(`dreams.measurement.${label}`)}</span\n >`;\n}\n\nfunction runCost(metrics: ProjectedMetricsEvent | null): string {\n if (!metrics) {\n return \"—\";\n }\n if (metrics.costUsd === null) {\n return metrics.costSource === \"unpriced\" ? t(\"dreams.cost.unpriced\") : \"—\";\n }\n return `$${metrics.costUsd.toFixed(4)}`;\n}\n\nfunction renderRunsTable(props: DreamsProps): TemplateResult {\n const panel = props.state.runs;\n const notice = renderPanelNotice(panel.status, panel.error, \"dreams-runs\");\n if (panel.status !== \"ok\") {\n return html`<section class=\"dreams-panel dreams-runs\" data-test-id=\"dreams-runs\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.runs.title\")}</h3>\n ${notice}\n </section>`;\n }\n let body: TemplateResult;\n if (!panel.runsAvailable) {\n body = html`<div\n class=\"dreams-state dreams-state--degraded\"\n data-test-id=\"dreams-runs-unavailable\"\n data-state=\"unavailable\"\n >\n ${t(\"dreams.runs.unavailable\")}\n ${panel.runsError ? html`<span class=\"mono\">${panel.runsError}</span>` : nothing}\n </div>`;\n } else if (panel.runs.length === 0) {\n body = html`<div\n class=\"dreams-state dreams-state--empty\"\n data-test-id=\"dreams-runs-empty\"\n data-state=\"empty\"\n >\n ${t(\"dreams.runs.empty\")}\n </div>`;\n } else {\n body = html`\n ${\n panel.eventsStatus === \"degraded\" || panel.eventsStatus === \"disabled\"\n ? renderPanelNotice(panel.eventsStatus, panel.eventsError, \"dreams-run-events\")\n : nothing\n }\n <div class=\"dreams-table-wrap\">\n <table class=\"dreams-table\" data-test-id=\"dreams-runs-table\">\n <thead>\n <tr>\n <th>${t(\"dreams.runs.task\")}</th>\n <th>${t(\"dreams.runs.status\")}</th>\n <th>${t(\"dreams.runs.started\")}</th>\n <th>${t(\"dreams.runs.duration\")}</th>\n <th>${t(\"dreams.runs.measurement\")}</th>\n <th>${t(\"dreams.runs.cost\")}</th>\n </tr>\n </thead>\n <tbody>\n ${panel.runs.map((run) => {\n const events =\n panel.eventsStatus === \"ok\" ? (panel.events[run.taskRunId] ?? []) : undefined;\n const label = measurementLabel(\n run,\n events,\n panel.retentionDays,\n props.nowMs,\n panel.truncated[run.taskRunId] !== undefined,\n );\n const selected = props.state.selectedRunId === run.taskRunId;\n return html`\n <tr\n class=\"dreams-run-row ${selected ? \"dreams-run-row--selected\" : \"\"}\"\n data-test-id=\"dreams-run-row\"\n data-run-id=${run.taskRunId}\n tabindex=\"0\"\n role=\"button\"\n aria-pressed=${selected ? \"true\" : \"false\"}\n @click=${() => props.onSelectRun(run.taskRunId)}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onSelectRun(run.taskRunId);\n }\n }}\n >\n <td class=\"mono\">${run.taskId}</td>\n <td>\n <span class=\"chip\">${run.status}</span>\n ${\n isDryRun(run, events)\n ? html`<span class=\"chip dreams-chip dreams-chip--dry-run\" data-test-id=\"dreams-dry-run\"\n >${t(\"dreams.labels.dryRun\")}</span\n >`\n : nothing\n }\n </td>\n <td>${formatTime(run.startedAt ?? run.updatedAt)}</td>\n <td class=\"mono\">${formatMs(run.durationMs)}</td>\n <td>${measurementChip(label)}</td>\n <td class=\"mono\">${runCost(metricsEvent(events))}</td>\n </tr>\n `;\n })}\n </tbody>\n </table>\n </div>\n `;\n }\n return html`\n <section class=\"dreams-panel dreams-runs\" data-test-id=\"dreams-runs\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.runs.title\")}</h3>\n ${renderBudgetWindow(panel.budgetWindow)} ${body}\n </section>\n `;\n}\n\nconst WATERFALL_WIDTH = 560;\nconst WATERFALL_LABEL = 110;\nconst WATERFALL_ROW = 20;\n\nfunction renderWaterfall(phases: ProjectedPhaseEvent[], elapsedMs: number | undefined) {\n if (phases.length === 0) {\n return html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-waterfall-empty\">\n ${t(\"dreams.drawer.noPhases\")}\n </div>`;\n }\n const end = Math.max(\n elapsedMs ?? 0,\n ...phases.map((phase) => phase.offsetMs + phase.durationMs),\n 1,\n );\n const plot = WATERFALL_WIDTH - WATERFALL_LABEL - 60;\n const height = phases.length * WATERFALL_ROW + 8;\n return html`\n <svg\n class=\"dreams-waterfall\"\n data-test-id=\"dreams-waterfall\"\n viewBox=\"0 0 ${WATERFALL_WIDTH} ${height}\"\n width=\"100%\"\n role=\"img\"\n aria-label=${t(\"dreams.drawer.waterfall\")}\n >\n ${phases.map((phase, index) => {\n const y = 4 + index * WATERFALL_ROW;\n const x = WATERFALL_LABEL + (phase.offsetMs / end) * plot;\n const width = Math.max(2, (phase.durationMs / end) * plot);\n return svg`\n <g data-test-id=\"dreams-waterfall-phase\" data-phase=${phase.name}>\n <text x=\"0\" y=${y + 13} class=\"dreams-waterfall__label\">${phase.name}</text>\n <rect x=${x} y=${y + 2} width=${width} height=${WATERFALL_ROW - 6} rx=\"2\"\n class=\"dreams-waterfall__bar dreams-waterfall__bar--${phase.status}\">\n <title>${phase.name}: +${phase.offsetMs} ms, ${phase.durationMs} ms (${phase.status})</title>\n </rect>\n <text x=${x + width + 4} y=${y + 13} class=\"dreams-waterfall__value\">${formatMs(phase.durationMs)}</text>\n </g>\n `;\n })}\n </svg>\n `;\n}\n\nfunction tokenCell(value: number | null | undefined): string {\n return value === null || value === undefined ? \"—\" : String(value);\n}\n\nfunction renderTokens(metrics: ProjectedMetricsEvent): TemplateResult {\n const tokens = metrics.tokens ?? metrics.knownTokens ?? null;\n const partial = metrics.tokens === null && metrics.knownTokens !== undefined;\n if (!tokens) {\n return html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-tokens\">\n ${t(\"dreams.drawer.tokensUnknown\")}\n </div>`;\n }\n return html`\n <div class=\"dreams-kv\" data-test-id=\"dreams-tokens\">\n ${partial ? html`<span class=\"dreams-kv__note\">${t(\"dreams.drawer.knownSoFar\")}</span><span></span>` : nothing}\n <span>${t(\"dreams.tokens.input\")}</span><span class=\"mono\">${tokenCell(tokens.input)}</span>\n <span>${t(\"dreams.tokens.output\")}</span><span class=\"mono\">${tokenCell(tokens.output)}</span>\n <span>${t(\"dreams.tokens.cacheRead\")}</span><span class=\"mono\">${tokenCell(tokens.cacheRead)}</span>\n <span>${t(\"dreams.tokens.cacheWrite\")}</span><span class=\"mono\">${tokenCell(tokens.cacheWrite)}</span>\n <span>${t(\"dreams.tokens.reasoning\")}</span><span class=\"mono\">${tokenCell(tokens.reasoning)}</span>\n <span>${t(\"dreams.tokens.total\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-tokens-total\">${tokenCell(tokens.total)}</span>\n </div>\n `;\n}\n\nfunction renderMetrics(metrics: ProjectedMetricsEvent): TemplateResult {\n const items = Object.entries(metrics.items ?? {});\n const stoppedEarly = metrics.items?.stoppedEarly;\n return html`\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.tokens\")}</h4>\n ${renderTokens(metrics)}\n </div>\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.cost\")}</h4>\n <div class=\"dreams-kv\" data-test-id=\"dreams-cost\">\n <span>${t(\"dreams.drawer.modelCost\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-cost-usd\"\n >${\n metrics.costUsd === null\n ? metrics.knownCostUsd !== undefined\n ? `≥ $${metrics.knownCostUsd.toFixed(4)}`\n : \"—\"\n : `$${metrics.costUsd.toFixed(4)}`\n }</span\n >\n <span>${t(\"dreams.drawer.costSource\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-cost-source\">${metrics.costSource}</span>\n <span>${t(\"dreams.drawer.modelCalls\")}</span>\n <span class=\"mono\">${metrics.modelCalls}</span>\n <span>${t(\"dreams.drawer.usageUnavailableCalls\")}</span>\n <span class=\"mono\">${metrics.usageUnavailableCalls}</span>\n <span>${t(\"dreams.drawer.elapsed\")}</span>\n <span class=\"mono\">${formatMs(metrics.elapsedMs)}</span>\n ${\n metrics.qualityScore !== undefined\n ? html`<span>${t(\"dreams.drawer.qualityScore\")}</span\n ><span class=\"mono\">${metrics.qualityScore.toFixed(2)}</span>`\n : nothing\n }\n ${\n metrics.authoring\n ? html`<span>${t(\"dreams.drawer.authoring\")}</span\n ><span class=\"mono\">${metrics.authoring}</span>`\n : nothing\n }\n ${\n metrics.skipped\n ? html`<span>${t(\"dreams.drawer.skipped\")}</span\n ><span class=\"mono\">${metrics.skipped}</span>`\n : nothing\n }\n </div>\n </div>\n ${\n (stoppedEarly !== undefined && stoppedEarly !== null) || metrics.selectionTruncated\n ? html`<div class=\"dreams-drawer__flags\">\n ${\n stoppedEarly !== undefined && stoppedEarly !== null\n ? html`<span class=\"chip dreams-chip dreams-chip--warn\" data-test-id=\"dreams-stopped-early\"\n >${t(\"dreams.drawer.stoppedEarly\")}: ${String(stoppedEarly)}</span\n >`\n : nothing\n }\n ${\n metrics.selectionTruncated\n ? html`<span\n class=\"chip dreams-chip dreams-chip--warn\"\n data-test-id=\"dreams-selection-truncated\"\n >${t(\"dreams.drawer.selectionTruncated\")}</span\n >`\n : nothing\n }\n </div>`\n : nothing\n }\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.items\")}</h4>\n ${\n items.length === 0\n ? html`<div class=\"dreams-state dreams-state--empty\">${t(\"dreams.drawer.noItems\")}</div>`\n : html`<div class=\"dreams-kv\" data-test-id=\"dreams-items\">\n ${items.map(\n ([key, value]) => html`<span>${key}</span\n ><span class=\"mono\" data-test-id=\"dreams-item\" data-item=${key}\n >${value === null ? \"—\" : String(value)}</span\n >`,\n )}\n </div>`\n }\n </div>\n `;\n}\n\nfunction renderLifecycle(run: DreamsTaskRun, events: ProjectedRunEvent[]): TemplateResult {\n const outcomes = outcomeEvents(events);\n const denial = outcomes.find((event) => event.denial)?.denial;\n const preemption = outcomes.findLast((event) => event.preemption)?.preemption;\n const recovered = outcomes.some((event) => event.recovered);\n return html`\n <div class=\"dreams-kv\" data-test-id=\"dreams-lifecycle\">\n <span>${t(\"dreams.drawer.status\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-run-status\">${run.status}</span>\n <span>${t(\"dreams.drawer.attempts\")}</span><span class=\"mono\">${run.attempts}</span>\n <span>${t(\"dreams.drawer.started\")}</span><span>${formatTime(run.startedAt)}</span>\n <span>${t(\"dreams.drawer.completed\")}</span><span>${formatTime(run.completedAt)}</span>\n <span>${t(\"dreams.drawer.trigger\")}</span><span class=\"mono\">${run.triggerSource}</span>\n <span>${t(\"dreams.drawer.preemptionCount\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-preemption-count\">${run.preemptionCount}</span>\n ${\n preemption\n ? html`<span>${t(\"dreams.drawer.preemptionReason\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-preemption-reason\"\n >${t(`dreams.preemption.${preemption.reason}`)}</span\n >`\n : nothing\n }\n ${\n denial\n ? html`<span>${t(\"dreams.drawer.denialReason\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-denial-reason\" data-reason=${denial.reason}\n >${t(`dreams.denial.${denial.reason}`)}${denial.scope ? ` (${denial.scope})` : \"\"}${\n denial.usage !== undefined && denial.cap !== undefined\n ? ` ${denial.usage}/${denial.cap} ${t(\"dreams.budget.unitsSuffix\")}`\n : \"\"\n }</span\n >`\n : nothing\n }\n ${\n recovered\n ? html`<span>${t(\"dreams.drawer.recovered\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-recovered\">${t(\"dreams.drawer.recoveredValue\")}</span>`\n : nothing\n }\n ${\n run.lastError\n ? html`<span>${t(\"dreams.drawer.lastError\")}</span><span class=\"mono\">${run.lastError}</span>`\n : nothing\n }\n </div>\n `;\n}\n\nfunction renderDrawer(props: DreamsProps): TemplateResult | typeof nothing {\n const panel = props.state.runs;\n const run = panel.runs.find((entry) => entry.taskRunId === props.state.selectedRunId);\n if (!run) {\n return nothing;\n }\n const events = panel.eventsStatus === \"ok\" ? (panel.events[run.taskRunId] ?? []) : undefined;\n const label = measurementLabel(\n run,\n events,\n panel.retentionDays,\n props.nowMs,\n panel.truncated[run.taskRunId] !== undefined,\n );\n const metrics = metricsEvent(events);\n const dryRun = isDryRun(run, events);\n return html`\n <aside class=\"dreams-drawer\" data-test-id=\"dreams-drawer\" aria-label=${t(\"dreams.drawer.title\")}>\n <header class=\"dreams-drawer__header\">\n <div>\n <div class=\"dreams-drawer__title mono\">${run.taskId}</div>\n <div class=\"dreams-drawer__sub mono\">${run.taskRunId}</div>\n </div>\n <button type=\"button\" class=\"btn\" data-test-id=\"dreams-drawer-close\" @click=${() => props.onSelectRun(null)}>\n ${t(\"dreams.drawer.close\")}\n </button>\n </header>\n <div class=\"dreams-drawer__flags\">\n ${measurementChip(label)}\n ${\n dryRun\n ? html`<span class=\"chip dreams-chip dreams-chip--dry-run\" data-test-id=\"dreams-drawer-dry-run\"\n >${t(\"dreams.labels.dryRun\")}</span\n >`\n : nothing\n }\n </div>\n ${\n dryRun\n ? html`<div class=\"dreams-drawer__note\" data-test-id=\"dreams-dry-run-note\">\n ${t(\"dreams.drawer.dryRunNote\")}\n </div>`\n : nothing\n }\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.lifecycle\")}</h4>\n ${renderLifecycle(run, events ?? [])}\n </div>\n ${\n label === \"pruned\"\n ? html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-pruned-note\">\n ${t(\"dreams.drawer.prunedNote\", { days: String(panel.retentionDays ?? \"\") })}\n </div>`\n : nothing\n }\n ${\n label === \"missing\" || label === \"unavailable\"\n ? html`<div class=\"dreams-state dreams-state--degraded\" data-test-id=\"dreams-measurement-missing\">\n ${t(\"dreams.drawer.measurementMissing\")}\n </div>`\n : nothing\n }\n ${\n label === \"truncated\"\n ? html`<div class=\"dreams-state dreams-state--degraded\" data-test-id=\"dreams-measurement-truncated\">\n ${t(\"dreams.drawer.measurementTruncated\")}\n </div>`\n : nothing\n }\n ${\n label === \"not_loaded\"\n ? html`<div class=\"dreams-state dreams-state--empty\">${t(\"dreams.drawer.eventsNotLoaded\")}</div>`\n : nothing\n }\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.waterfall\")}</h4>\n ${renderWaterfall(phaseEvents(events), metrics?.elapsedMs)}\n </div>\n ${metrics ? renderMetrics(metrics) : nothing}\n </aside>\n `;\n}\n\nfunction renderDreamState(props: DreamsProps): TemplateResult {\n const panel = props.state.dream;\n const result = panel.result;\n return html`\n <section class=\"dreams-panel dreams-dream-state\" data-test-id=\"dreams-dream-state\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.dream.title\")}</h3>\n ${renderPanelNotice(panel.status, panel.error, \"dreams-dream-state\")}\n ${\n panel.status === \"ok\" && result\n ? html`\n <div class=\"dreams-kv\">\n <span>${t(\"dreams.dream.enabled\")}</span>\n <span class=\"mono\">${result.enabled ? t(\"dreams.dream.yes\") : t(\"dreams.dream.no\")}</span>\n <span>${t(\"dreams.dream.currentStage\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-current-stage\"\n >${\n result.activeCycles && result.activeCycles.length > 0\n ? result.activeCycles[0].currentStage || \"—\"\n : t(\"dreams.dream.noActiveCycle\")\n }</span\n >\n <span>${t(\"dreams.dream.candidateCount\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-candidate-count\"\n >${formatCount(result.candidateCount, result.candidateCountTruncated)}</span\n >\n <span>${t(\"dreams.dream.questionCount\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-question-count\"\n >${formatCount(result.questionCount, result.questionCountTruncated)}</span\n >\n </div>\n ${\n result.activeCycles && result.activeCycles.length > 0\n ? html`<table class=\"dreams-table\" data-test-id=\"dreams-active-cycles\">\n <thead>\n <tr>\n <th>${t(\"dreams.dream.cycle\")}</th>\n <th>${t(\"dreams.dream.stage\")}</th>\n <th>${t(\"dreams.dream.pending\")}</th>\n <th>${t(\"dreams.dream.failedStages\")}</th>\n <th>${t(\"dreams.dream.created\")}</th>\n </tr>\n </thead>\n <tbody>\n ${result.activeCycles.map(\n (cycle) => html`<tr>\n <td class=\"mono\">${cycle.cycleKey}</td>\n <td class=\"mono\">${cycle.currentStage}</td>\n <td class=\"mono\">${cycle.pendingPassCount}</td>\n <td class=\"mono\">${cycle.failedStages.join(\", \") || \"—\"}</td>\n <td>${formatTime(cycle.createdAt)}</td>\n </tr>`,\n )}\n </tbody>\n </table>`\n : nothing\n }\n <h4>${t(\"dreams.dream.stages\")}</h4>\n <table class=\"dreams-table\" data-test-id=\"dreams-stages\">\n <thead>\n <tr>\n <th>${t(\"dreams.dream.stage\")}</th>\n <th>${t(\"dreams.dream.lastCompleted\")}</th>\n </tr>\n </thead>\n <tbody>\n ${result.stages.map(\n (stage) => html`<tr data-test-id=\"dreams-stage-row\">\n <td class=\"mono\">${stage.name}</td>\n <td>${formatTime(stage.lastCompleted)}</td>\n </tr>`,\n )}\n </tbody>\n </table>\n `\n : nothing\n }\n <h4>${t(\"dreams.dream.weights\")}</h4>\n ${renderPanelNotice(panel.weightsStatus, panel.weightsError, \"dreams-weights\")}\n ${\n panel.weightsStatus === \"ok\"\n ? panel.weights.length === 0\n ? html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-weights-empty\">\n ${t(\"dreams.dream.noWeights\")}\n </div>`\n : html`<table class=\"dreams-table\" data-test-id=\"dreams-weights\">\n <thead>\n <tr>\n <th>${t(\"dreams.dream.agent\")}</th>\n <th>${t(\"dreams.dream.successRate\")}</th>\n <th>${t(\"dreams.dream.completedFailed\")}</th>\n <th>${t(\"dreams.dream.updated\")}</th>\n </tr>\n </thead>\n <tbody>\n ${panel.weights.map(\n (weight) => html`<tr data-test-id=\"dreams-weight-row\">\n <td class=\"mono\">${weight.agentId}</td>\n <td class=\"mono\">${Math.round(weight.successRate * 100)}%</td>\n <td class=\"mono\">${weight.totals.completed} / ${weight.totals.failed}</td>\n <td>${formatTime(weight.updatedAt)}</td>\n </tr>`,\n )}\n </tbody>\n </table>\n ${\n panel.weightsTruncated\n ? html`<div class=\"dreams-kv__note\" data-test-id=\"dreams-weights-truncated\">\n ${t(\"dreams.dream.weightsTruncated\", { count: String(panel.weights.length) })}\n </div>`\n : nothing\n }`\n : nothing\n }\n <h4>${t(\"dreams.dream.recentCandidates\")}</h4>\n ${renderPanelNotice(panel.candidatesStatus, panel.candidatesError, \"dreams-candidates\")}\n ${\n panel.candidatesStatus === \"ok\"\n ? panel.candidates.length === 0\n ? html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-candidates-empty\">\n ${t(\"dreams.dream.noCandidates\")}\n </div>`\n : html`<ul class=\"dreams-list\" data-test-id=\"dreams-candidates\">\n ${panel.candidates.map(\n (candidate) => html`<li>\n <span class=\"mono\">${candidate.taskId ?? \"—\"}</span>\n <span>${formatTime(candidate.firstSeenAt)}</span>\n </li>`,\n )}\n </ul>`\n : nothing\n }\n </section>\n `;\n}\n\nfunction renderQualityTrend(points: QualityPoint[]): TemplateResult {\n if (points.length === 0) {\n return html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-quality-empty\">\n ${t(\"dreams.health.noQuality\")}\n </div>`;\n }\n const width = 240;\n const height = 48;\n const step = points.length > 1 ? (width - 8) / (points.length - 1) : 0;\n const coords = points.map((point, index) => {\n const x = 4 + index * step;\n const y = 4 + (1 - Math.min(1, Math.max(0, point.qualityScore))) * (height - 8);\n return { x, y, point };\n });\n const latest = points[points.length - 1];\n return html`\n <div class=\"dreams-quality\" data-test-id=\"dreams-quality\">\n <svg\n class=\"dreams-sparkline\"\n data-test-id=\"dreams-quality-sparkline\"\n viewBox=\"0 0 ${width} ${height}\"\n width=${width}\n height=${height}\n role=\"img\"\n aria-label=${t(\"dreams.health.qualityTrend\")}\n >\n ${svg`<polyline class=\"dreams-sparkline__line\" fill=\"none\" points=${coords.map((c) => `${c.x},${c.y}`).join(\" \")}></polyline>`}\n ${coords.map(\n (c) =>\n svg`<circle class=\"dreams-sparkline__dot\" cx=${c.x} cy=${c.y} r=\"2.5\" data-test-id=\"dreams-quality-point\"><title>${c.point.qualityScore.toFixed(2)} · ${c.point.taskId}</title></circle>`,\n )}\n </svg>\n <span class=\"mono\" data-test-id=\"dreams-quality-latest\"\n >${t(\"dreams.health.latest\")}: ${latest.qualityScore.toFixed(2)} (${points.length})</span\n >\n </div>\n `;\n}\n\nfunction renderHealth(props: DreamsProps): TemplateResult {\n const panel = props.state.health;\n const overview = panel.overview;\n const share = panel.preemption;\n return html`\n <section class=\"dreams-panel dreams-health\" data-test-id=\"dreams-health\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.health.title\")}</h3>\n ${renderPanelNotice(panel.overviewStatus, panel.overviewError, \"dreams-overview\")}\n ${\n panel.overviewStatus === \"ok\" && overview\n ? html`<div class=\"dreams-kv\" data-test-id=\"dreams-overview\">\n <span>${t(\"dreams.health.activeLessons\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-active-lessons\"\n >${formatCount(overview.lessons, overview.truncated)}</span\n >\n <span>${t(\"dreams.health.pendingProposals\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-pending-proposals\"\n >${formatCount(overview.proposals.pending, overview.truncated)}</span\n >\n <span>${t(\"dreams.health.appliedProposals\")}</span>\n <span class=\"mono\">${formatCount(overview.proposals.applied, overview.truncated)}</span>\n </div>\n ${\n overview.truncated\n ? html`<div class=\"dreams-kv__note\" data-test-id=\"dreams-overview-truncated\">\n ${t(\"dreams.health.lowerBound\")}\n </div>`\n : nothing\n }`\n : nothing\n }\n <h4>${t(\"dreams.health.qualityTrend\")}</h4>\n ${renderPanelNotice(panel.runsStatus, panel.runsError, \"dreams-consolidation\")}\n ${\n panel.runsStatus === \"ok\"\n ? html`\n ${renderQualityTrend(panel.quality)}\n <div class=\"dreams-kv\">\n <span>${t(\"dreams.health.preemptionShare\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-preemption-share\"\n >${\n share.total === 0\n ? t(\"dreams.health.noRuns\")\n : `${share.preempted} / ${share.total} (${Math.round((share.preempted / share.total) * 100)}%)`\n }</span\n >\n ${\n panel.unclassifiedRecovered > 0\n ? html`<span>${t(\"dreams.health.unclassified\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-unclassified\"\n >${panel.unclassifiedRecovered}</span\n >`\n : nothing\n }\n </div>\n <div class=\"dreams-kv__note\">${t(\"dreams.health.shutdownExcluded\")}</div>\n `\n : nothing\n }\n <h4>${t(\"dreams.health.distill\")}</h4>\n ${renderPanelNotice(panel.distillStatus, panel.distillError, \"dreams-distill\")}\n ${\n panel.distillStatus === \"ok\"\n ? html`<div class=\"dreams-kv\">\n <span>${t(\"dreams.health.authoringPath\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-authoring\"\n >${\n panel.authoring\n ? `${panel.authoring.authoring} · ${formatTime(panel.authoring.at)}`\n : t(\"dreams.health.noAuthoring\")\n }</span\n >\n </div>`\n : nothing\n }\n <a\n class=\"dreams-link\"\n data-test-id=\"dreams-learning-link\"\n href=${props.learningHref}\n @click=${(event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey) {\n return;\n }\n event.preventDefault();\n props.onOpenLearning();\n }}\n >${t(\"dreams.health.openLearning\")}</a\n >\n </section>\n `;\n}\n\nexport function renderDreams(props: DreamsProps): TemplateResult {\n return html`\n <div class=\"dreams-view\" data-test-id=\"dreams-view\">\n <div class=\"dreams-toolbar\">\n <button type=\"button\" class=\"btn\" data-test-id=\"dreams-refresh\" @click=${() => props.onRefresh()}>\n ${t(\"dreams.refresh\")}\n </button>\n ${\n props.state.runs.loadedAt\n ? html`<span class=\"dreams-toolbar__meta\"\n >${t(\"dreams.loadedAt\", { time: formatTime(props.state.runs.loadedAt) })}</span\n >`\n : nothing\n }\n </div>\n <div class=\"dreams-layout\">\n <div class=\"dreams-main\">${renderDrawer(props)} ${renderRunsTable(props)}</div>\n <div class=\"dreams-side\">${renderDreamState(props)} ${renderHealth(props)}</div>\n </div>\n </div>\n `;\n}\n"],"mappings":"4KA4BA,SAAS,EAAW,EAAmD,CACrE,GAAI,GAAU,KACZ,MAAO,IAET,IAAM,EAAO,IAAI,KAAK,CAAK,EAC3B,OAAO,OAAO,MAAM,EAAK,QAAQ,CAAC,EAAI,IAAM,EAAK,eAAe,CAClE,CAEA,SAAS,EAAS,EAAmC,CAInD,OAHI,IAAU,IAAA,IAAa,CAAC,OAAO,SAAS,CAAK,EACxC,IAEF,GAAS,IAAO,IAAI,EAAQ,IAAA,CAAM,QAAQ,GAAS,IAAS,EAAI,CAAC,EAAE,IAAM,GAAG,EAAM,IAC3F,CAEA,SAAS,EAAY,EAAe,EAAwC,CAC1E,OAAO,EAAY,KAAK,IAAU,OAAO,CAAK,CAChD,CAEA,SAAS,EACP,EACA,EACA,EACiC,CA0BjC,OAzBI,IAAW,WACN,CAAI;;qBAEM,GAAG,EAAO,WAAW;;;QAGlC,EAAE,uBAAuB,EAAE;YAG7B,IAAW,WACN,CAAI;;;qBAGM,GAAG,EAAO,WAAW;;;gBAG1B,EAAE,uBAAuB,EAAE;QACnC,EAAQ,CAAI,sBAAsB,EAAM,KAAO,GAAG,EAAM,KAAK,IAAM,KAAK,EAAM,QAAQ,SAAW,EAAQ;YAG3G,IAAW,WAAa,IAAW,OAC9B,CAAI,gEAAgE,GAAG,EAAO,UAAU;QAC3F,EAAE,sBAAsB,EAAE;YAGzB,CACT,CAEA,SAAS,EAAmB,EAAmD,CAM7E,OALK,EAKE,CAAI;;0CAE6B,EAAE,qBAAqB,EAAE;;UAEzD,EAAE,yBAAyB,EAAE;;QAG/B,EAAO,UACH,CAAI;;wBAEQ,EAAE,oBAAoB,EAAE;;qBAE3B,EAAO,iBAAiB,KAAK,EAAO,KAAO,IAAI,GAAG,EAAE,2BAA2B,EAAE;;wBAE9E,EAAE,sBAAsB,EAAE;;qBAE7B,EAAO,cAAgB,KAAO,IAAM,GAAG,EAAO,YAAY,IAAI;;wBAE3D,EAAE,2BAA2B,EAAE;qCAClB,EAAW,EAAO,aAAa,EAAE;wBAC9C,EAAE,uBAAuB,EAAE;qCACd,EAAO,YAAc,IAAI;wBACtC,EAAE,sBAAsB,EAAE;qCACb,EAAO,YAAY;;cAG5C,CAAI;;;;gBAIA,EAAE,2BAA2B,EAAE;gBAC/B,EAAO,MAAQ,CAAI,sBAAsB,EAAO,MAAM,SAAW,EAAQ;oBAElF;;IArCI,CAAI;sDACuC,EAAE,oBAAoB,EAAE;WAuC9E,CAEA,SAAS,EAAgB,EAA+B,CACtD,MAAO,EAAI;2CAC8B,EAAM;;uBAE1B,EAAM;OACtB,EAAE,sBAAsB,GAAO,EAAE;IAExC,CAEA,SAAS,EAAQ,EAA+C,CAO9D,OANK,EAGD,EAAQ,UAAY,KACf,EAAQ,aAAe,WAAa,EAAE,sBAAsB,EAAI,IAElE,IAAI,EAAQ,QAAQ,QAAQ,CAAC,IAL3B,GAMX,CAEA,SAAS,EAAgB,EAAoC,CAC3D,IAAM,EAAQ,EAAM,MAAM,KACpB,EAAS,EAAkB,EAAM,OAAQ,EAAM,MAAO,aAAa,EACzE,GAAI,EAAM,SAAW,KACnB,MAAO,EAAI;wCACyB,EAAE,mBAAmB,EAAE;QACvD,EAAO;gBAGb,IAAI,EAwFJ,MAvFA,CACE,EADG,EAAM,cASA,EAAM,KAAK,SAAW,EACxB,CAAI;;;;;QAKP,EAAE,mBAAmB,EAAE;YAGpB,CAAI;QAEP,EAAM,eAAiB,YAAc,EAAM,eAAiB,WACxD,EAAkB,EAAM,aAAc,EAAM,YAAa,mBAAmB,EAC5E,EACL;;;;;kBAKW,EAAE,kBAAkB,EAAE;kBACtB,EAAE,oBAAoB,EAAE;kBACxB,EAAE,qBAAqB,EAAE;kBACzB,EAAE,sBAAsB,EAAE;kBAC1B,EAAE,yBAAyB,EAAE;kBAC7B,EAAE,kBAAkB,EAAE;;;;YAI5B,EAAM,KAAK,IAAK,GAAQ,CACxB,IAAM,EACJ,EAAM,eAAiB,KAAQ,EAAM,OAAO,EAAI,YAAc,CAAC,EAAK,IAAA,GAChE,EAAQ,EACZ,EACA,EACA,EAAM,cACN,EAAM,MACN,EAAM,UAAU,EAAI,aAAe,IAAA,EACrC,EACM,EAAW,EAAM,MAAM,gBAAkB,EAAI,UACnD,MAAO,EAAI;;wCAEiB,EAAW,2BAA6B,GAAG;;8BAErD,EAAI,UAAU;;;+BAGb,EAAW,OAAS,QAAQ;6BAC5B,EAAM,YAAY,EAAI,SAAS,EAAE;2BACpC,GAAyB,EAC/B,EAAM,MAAQ,SAAW,EAAM,MAAQ,OACzC,EAAM,eAAe,EACrB,EAAM,YAAY,EAAI,SAAS,EAEnC,EAAE;;mCAEiB,EAAI,OAAO;;uCAEP,EAAI,OAAO;oBAE9B,EAAS,EAAK,CAAM,EAChB,CAAI;6BACC,EAAE,sBAAsB,EAAE;2BAE/B,EACL;;sBAEG,EAAW,EAAI,WAAa,EAAI,SAAS,EAAE;mCAC9B,EAAS,EAAI,UAAU,EAAE;sBACtC,EAAgB,CAAK,EAAE;mCACV,EAAQ,EAAa,CAAM,CAAC,EAAE;;aAGvD,CAAC,EAAE;;;;MAhFF,CAAI;;;;;QAKP,EAAE,yBAAyB,EAAE;QAC7B,EAAM,UAAY,CAAI,sBAAsB,EAAM,UAAU,SAAW,EAAQ;YAgF9E,CAAI;;wCAE2B,EAAE,mBAAmB,EAAE;QACvD,EAAmB,EAAM,YAAY,EAAE,GAAG,EAAK;;GAGvD,CAEA,IAAM,EAAkB,IAClB,EAAkB,IAClB,EAAgB,GAEtB,SAAS,EAAgB,EAA+B,EAA+B,CACrF,GAAI,EAAO,SAAW,EACpB,MAAO,EAAI;QACP,EAAE,wBAAwB,EAAE;YAGlC,IAAM,EAAM,KAAK,IACf,GAAa,EACb,GAAG,EAAO,IAAK,GAAU,EAAM,SAAW,EAAM,UAAU,EAC1D,CACF,EACM,EAAO,EAAkB,EAAkB,GAEjD,MAAO,EAAI;;;;qBAIQ,EAAgB,GALpB,EAAO,OAAS,EAAgB,EAKF;;;mBAG5B,EAAE,yBAAyB,EAAE;;QAExC,EAAO,KAAK,EAAO,IAAU,CAC7B,IAAM,EAAI,EAAI,EAAQ,EAChB,EAAI,EAAmB,EAAM,SAAW,EAAO,EAC/C,EAAQ,KAAK,IAAI,EAAI,EAAM,WAAa,EAAO,CAAI,EACzD,MAAO,EAAG;gEAC8C,EAAM,KAAK;4BAC/C,EAAI,GAAG,mCAAmC,EAAM,KAAK;sBAC3D,EAAE,KAAK,EAAI,EAAE,SAAS,EAAM,UAAU,EAAgB,EAAE;oEACV,EAAM,OAAO;uBAC1D,EAAM,KAAK,KAAK,EAAM,SAAS,OAAO,EAAM,WAAW,OAAO,EAAM,OAAO;;sBAE5E,EAAI,EAAQ,EAAE,KAAK,EAAI,GAAG,mCAAmC,EAAS,EAAM,UAAU,EAAE;;SAGxG,CAAC,EAAE;;GAGT,CAEA,SAAS,EAAU,EAA0C,CAC3D,OAAO,GAAU,KAA8B,IAAM,OAAO,CAAK,CACnE,CAEA,SAAS,EAAa,EAAgD,CACpE,IAAM,EAAS,EAAQ,QAAU,EAAQ,aAAe,KAClD,EAAU,EAAQ,SAAW,MAAQ,EAAQ,cAAgB,IAAA,GAMnE,OALK,EAKE,CAAI;;QAEL,EAAU,CAAI,iCAAiC,EAAE,0BAA0B,EAAE,sBAAwB,EAAQ;cACvG,EAAE,qBAAqB,EAAE,4BAA4B,EAAU,EAAO,KAAK,EAAE;cAC7E,EAAE,sBAAsB,EAAE,4BAA4B,EAAU,EAAO,MAAM,EAAE;cAC/E,EAAE,yBAAyB,EAAE,4BAA4B,EAAU,EAAO,SAAS,EAAE;cACrF,EAAE,0BAA0B,EAAE,4BAA4B,EAAU,EAAO,UAAU,EAAE;cACvF,EAAE,yBAAyB,EAAE,4BAA4B,EAAU,EAAO,SAAS,EAAE;cACrF,EAAE,qBAAqB,EAAE;+DACwB,EAAU,EAAO,KAAK,EAAE;;IAb5E,CAAI;QACP,EAAE,6BAA6B,EAAE;WAezC,CAEA,SAAS,EAAc,EAAgD,CACrE,IAAM,EAAQ,OAAO,QAAQ,EAAQ,OAAS,CAAC,CAAC,EAC1C,EAAe,EAAQ,OAAO,aACpC,MAAO,EAAI;;YAED,EAAE,sBAAsB,EAAE;QAC9B,EAAa,CAAO,EAAE;;;YAGlB,EAAE,oBAAoB,EAAE;;gBAEpB,EAAE,yBAAyB,EAAE;;aAGjC,EAAQ,UAAY,KAChB,EAAQ,eAAiB,IAAA,GAEvB,IADA,MAAM,EAAQ,aAAa,QAAQ,CAAC,IAEtC,IAAI,EAAQ,QAAQ,QAAQ,CAAC,IAClC;;gBAEK,EAAE,0BAA0B,EAAE;+DACiB,EAAQ,WAAW;gBAClE,EAAE,0BAA0B,EAAE;6BACjB,EAAQ,WAAW;gBAChC,EAAE,qCAAqC,EAAE;6BAC5B,EAAQ,sBAAsB;gBAC3C,EAAE,uBAAuB,EAAE;6BACd,EAAS,EAAQ,SAAS,EAAE;UAE/C,EAAQ,eAAiB,IAAA,GAGrB,EAFA,CAAI,SAAS,EAAE,4BAA4B,EAAE;sCACrB,EAAQ,aAAa,QAAQ,CAAC,EAAE,SAE7D;UAEC,EAAQ,UACJ,CAAI,SAAS,EAAE,yBAAyB,EAAE;sCAClB,EAAQ,UAAU,SAC1C,EACL;UAEC,EAAQ,QACJ,CAAI,SAAS,EAAE,uBAAuB,EAAE;sCAChB,EAAQ,QAAQ,SACxC,EACL;;;MAIF,GAA+C,MAAS,EAAQ,mBAC7D,CAAI;cAEA,GAA+C,KAI3C,EAHA,CAAI;uBACC,EAAE,4BAA4B,EAAE,IAAI,OAAO,CAAY,EAAE;qBAGnE;cAEC,EAAQ,mBACJ,CAAI;;;uBAGC,EAAE,kCAAkC,EAAE;qBAE3C,EACL;kBAEH,EACL;;YAEO,EAAE,qBAAqB,EAAE;QAE7B,EAAM,SAAW,EACb,CAAI,iDAAiD,EAAE,uBAAuB,EAAE,QAChF,CAAI;gBACA,EAAM,KACL,CAAC,EAAK,KAAW,CAAI,SAAS,EAAI;6EAC0B,EAAI;uBAC1D,IAAU,KAAO,IAAM,OAAO,CAAK,EAAE;oBAE9C,EAAE;oBAET;;GAGP,CAEA,SAAS,EAAgB,EAAoB,EAA6C,CACxF,IAAM,EAAW,EAAc,CAAM,EAC/B,EAAS,EAAS,KAAM,GAAU,EAAM,MAAM,CAAC,EAAE,OACjD,EAAa,EAAS,SAAU,GAAU,EAAM,UAAU,CAAC,EAAE,WAC7D,EAAY,EAAS,KAAM,GAAU,EAAM,SAAS,EAC1D,MAAO,EAAI;;cAEC,EAAE,sBAAsB,EAAE;4DACoB,EAAI,OAAO;cACzD,EAAE,wBAAwB,EAAE,4BAA4B,EAAI,SAAS;cACrE,EAAE,uBAAuB,EAAE,eAAe,EAAW,EAAI,SAAS,EAAE;cACpE,EAAE,yBAAyB,EAAE,eAAe,EAAW,EAAI,WAAW,EAAE;cACxE,EAAE,uBAAuB,EAAE,4BAA4B,EAAI,cAAc;cACzE,EAAE,+BAA+B,EAAE;kEACiB,EAAI,gBAAgB;QAE9E,EACI,CAAI,SAAS,EAAE,gCAAgC,EAAE;;mBAE1C,EAAE,qBAAqB,EAAW,QAAQ,EAAE;iBAEnD,EACL;QAEC,EACI,CAAI,SAAS,EAAE,4BAA4B,EAAE;oFAC2B,EAAO,OAAO;mBAC/E,EAAE,iBAAiB,EAAO,QAAQ,IAAI,EAAO,MAAQ,KAAK,EAAO,MAAM,GAAK,KAC7E,EAAO,QAAU,IAAA,IAAa,EAAO,MAAQ,IAAA,GACzC,IAAI,EAAO,MAAM,GAAG,EAAO,IAAI,GAAG,EAAE,2BAA2B,IAC/D,GACL;iBAEL,EACL;QAEC,EACI,CAAI,SAAS,EAAE,yBAAyB,EAAE;oEACc,EAAE,8BAA8B,EAAE,SAC1F,EACL;QAEC,EAAI,UACA,CAAI,SAAS,EAAE,yBAAyB,EAAE,4BAA4B,EAAI,UAAU,SACpF,EACL;;GAGP,CAEA,SAAS,EAAa,EAAqD,CACzE,IAAM,EAAQ,EAAM,MAAM,KACpB,EAAM,EAAM,KAAK,KAAM,GAAU,EAAM,YAAc,EAAM,MAAM,aAAa,EACpF,GAAI,CAAC,EACH,OAAO,EAET,IAAM,EAAS,EAAM,eAAiB,KAAQ,EAAM,OAAO,EAAI,YAAc,CAAC,EAAK,IAAA,GAC7E,EAAQ,EACZ,EACA,EACA,EAAM,cACN,EAAM,MACN,EAAM,UAAU,EAAI,aAAe,IAAA,EACrC,EACM,EAAU,EAAa,CAAM,EAC7B,EAAS,EAAS,EAAK,CAAM,EACnC,MAAO,EAAI;2EAC8D,EAAE,qBAAqB,EAAE;;;mDAGjD,EAAI,OAAO;iDACb,EAAI,UAAU;;0FAE6B,EAAM,YAAY,IAAI,EAAE;YACxG,EAAE,qBAAqB,EAAE;;;;UAI3B,EAAgB,CAAK,EAAE;UAEvB,EACI,CAAI;mBACC,EAAE,sBAAsB,EAAE;iBAE/B,EACL;;QAGD,EACI,CAAI;gBACA,EAAE,0BAA0B,EAAE;oBAElC,EACL;;cAEO,EAAE,yBAAyB,EAAE;UACjC,EAAgB,EAAK,GAAU,CAAC,CAAC,EAAE;;QAGrC,IAAU,SACN,CAAI;gBACA,EAAE,2BAA4B,CAAE,KAAM,OAAO,EAAM,eAAiB,EAAE,CAAE,CAAC,EAAE;oBAE/E,EACL;QAEC,IAAU,WAAa,IAAU,cAC7B,CAAI;gBACA,EAAE,kCAAkC,EAAE;oBAE1C,EACL;QAEC,IAAU,YACN,CAAI;gBACA,EAAE,oCAAoC,EAAE;oBAE5C,EACL;QAEC,IAAU,aACN,CAAI,iDAAiD,EAAE,+BAA+B,EAAE,QACxF,EACL;;cAEO,EAAE,yBAAyB,EAAE;UACjC,EAAgB,EAAY,CAAM,EAAG,GAAS,SAAS,EAAE;;QAE3D,EAAU,EAAc,CAAO,EAAI,EAAQ;;GAGnD,CAEA,SAAS,EAAiB,EAAoC,CAC5D,IAAM,EAAQ,EAAM,MAAM,MACpB,EAAS,EAAM,OACrB,MAAO,EAAI;;wCAE2B,EAAE,oBAAoB,EAAE;QACxD,EAAkB,EAAM,OAAQ,EAAM,MAAO,oBAAoB,EAAE;QAEnE,EAAM,SAAW,MAAQ,EACrB,CAAI;;wBAEQ,EAAE,sBAAsB,EAAE;qCACb,EAAO,QAAU,EAAE,kBAAkB,EAAI,EAAE,iBAAiB,EAAE;wBAC3E,EAAE,2BAA2B,EAAE;;qBAGnC,EAAO,cAAgB,EAAO,aAAa,OAAS,EAChD,EAAO,aAAa,EAAE,CAAC,cAAgB,IACvC,EAAE,4BAA4B,EACnC;;wBAEK,EAAE,6BAA6B,EAAE;;qBAEpC,EAAY,EAAO,eAAgB,EAAO,uBAAuB,EAAE;;wBAEhE,EAAE,4BAA4B,EAAE;;qBAEnC,EAAY,EAAO,cAAe,EAAO,sBAAsB,EAAE;;;gBAItE,EAAO,cAAgB,EAAO,aAAa,OAAS,EAChD,CAAI;;;gCAGQ,EAAE,oBAAoB,EAAE;gCACxB,EAAE,oBAAoB,EAAE;gCACxB,EAAE,sBAAsB,EAAE;gCAC1B,EAAE,2BAA2B,EAAE;gCAC/B,EAAE,sBAAsB,EAAE;;;;0BAIhC,EAAO,aAAa,IACnB,GAAU,CAAI;+CACM,EAAM,SAAS;+CACf,EAAM,aAAa;+CACnB,EAAM,iBAAiB;+CACvB,EAAM,aAAa,KAAK,IAAI,GAAK,IAAI;kCAClD,EAAW,EAAM,SAAS,EAAE;gCAEtC,EAAE;;8BAGN,EACL;oBACK,EAAE,qBAAqB,EAAE;;;;0BAInB,EAAE,oBAAoB,EAAE;0BACxB,EAAE,4BAA4B,EAAE;;;;oBAItC,EAAO,OAAO,IACb,GAAU,CAAI;yCACM,EAAM,KAAK;4BACxB,EAAW,EAAM,aAAa,EAAE;0BAE1C,EAAE;;;cAIR,EACL;YACK,EAAE,sBAAsB,EAAE;QAC9B,EAAkB,EAAM,cAAe,EAAM,aAAc,gBAAgB,EAAE;QAE7E,EAAM,gBAAkB,KACpB,EAAM,QAAQ,SAAW,EACvB,CAAI;kBACA,EAAE,wBAAwB,EAAE;sBAEhC,CAAI;;;0BAGQ,EAAE,oBAAoB,EAAE;0BACxB,EAAE,0BAA0B,EAAE;0BAC9B,EAAE,8BAA8B,EAAE;0BAClC,EAAE,sBAAsB,EAAE;;;;oBAIhC,EAAM,QAAQ,IACb,GAAW,CAAI;yCACK,EAAO,QAAQ;yCACf,KAAK,MAAM,EAAO,YAAc,GAAG,EAAE;yCACrC,EAAO,OAAO,UAAU,KAAK,EAAO,OAAO,OAAO;4BAC/D,EAAW,EAAO,SAAS,EAAE;0BAEvC,EAAE;;;gBAIJ,EAAM,iBACF,CAAI;wBACA,EAAE,gCAAiC,CAAE,MAAO,OAAO,EAAM,QAAQ,MAAM,CAAE,CAAC,EAAE;4BAEhF,IAER,EACL;YACK,EAAE,+BAA+B,EAAE;QACvC,EAAkB,EAAM,iBAAkB,EAAM,gBAAiB,mBAAmB,EAAE;QAEtF,EAAM,mBAAqB,KACvB,EAAM,WAAW,SAAW,EAC1B,CAAI;kBACA,EAAE,2BAA2B,EAAE;sBAEnC,CAAI;kBACA,EAAM,WAAW,IAChB,GAAc,CAAI;yCACI,EAAU,QAAU,IAAI;4BACrC,EAAW,EAAU,WAAW,EAAE;wBAE9C,EAAE;qBAEN,EACL;;GAGP,CAEA,SAAS,EAAmB,EAAwC,CAClE,GAAI,EAAO,SAAW,EACpB,MAAO,EAAI;QACP,EAAE,yBAAyB,EAAE;YAGnC,IAEM,EAAO,EAAO,OAAS,EAAK,KAAc,EAAO,OAAS,GAAK,EAC/D,EAAS,EAAO,KAAK,EAAO,KAGzB,CAAE,EAFC,EAAI,EAAQ,EAEV,EADF,GAAK,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,EAAM,YAAY,CAAC,GAAM,GACrD,OAAM,EACtB,EACK,EAAS,EAAO,EAAO,OAAS,GACtC,MAAO,EAAI;;;;;uBAKU,IAAM,GAAG,GAAO;gBACvB,IAAM;iBACL,GAAO;;qBAEH,EAAE,4BAA4B,EAAE;;UAE3C,CAAG,+DAA+D,EAAO,IAAK,GAAM,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,cAAc;UAC7H,EAAO,IACN,GACC,CAAG,4CAA4C,EAAE,EAAE,MAAM,EAAE,EAAE,sDAAsD,EAAE,MAAM,aAAa,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,OAAO,kBAC3K,EAAE;;;WAGC,EAAE,sBAAsB,EAAE,IAAI,EAAO,aAAa,QAAQ,CAAC,EAAE,IAAI,EAAO,OAAO;;;GAI1F,CAEA,SAAS,EAAa,EAAoC,CACxD,IAAM,EAAQ,EAAM,MAAM,OACpB,EAAW,EAAM,SACjB,EAAQ,EAAM,WACpB,MAAO,EAAI;;wCAE2B,EAAE,qBAAqB,EAAE;QACzD,EAAkB,EAAM,eAAgB,EAAM,cAAe,iBAAiB,EAAE;QAEhF,EAAM,iBAAmB,MAAQ,EAC7B,CAAI;sBACM,EAAE,6BAA6B,EAAE;;mBAEpC,EAAY,EAAS,QAAS,EAAS,SAAS,EAAE;;sBAE/C,EAAE,gCAAgC,EAAE;;mBAEvC,EAAY,EAAS,UAAU,QAAS,EAAS,SAAS,EAAE;;sBAEzD,EAAE,gCAAgC,EAAE;mCACvB,EAAY,EAAS,UAAU,QAAS,EAAS,SAAS,EAAE;;cAGjF,EAAS,UACL,CAAI;sBACA,EAAE,0BAA0B,EAAE;0BAElC,IAEN,EACL;YACK,EAAE,4BAA4B,EAAE;QACpC,EAAkB,EAAM,WAAY,EAAM,UAAW,sBAAsB,EAAE;QAE7E,EAAM,aAAe,KACjB,CAAI;gBACA,EAAmB,EAAM,OAAO,EAAE;;wBAE1B,EAAE,+BAA+B,EAAE;;qBAGvC,EAAM,QAAU,EACZ,EAAE,sBAAsB,EACxB,GAAG,EAAM,UAAU,KAAK,EAAM,MAAM,IAAI,KAAK,MAAO,EAAM,UAAY,EAAM,MAAS,GAAG,EAAE,IAC/F;;kBAGD,EAAM,sBAAwB,EAC1B,CAAI,SAAS,EAAE,4BAA4B,EAAE;;6BAEtC,EAAM,sBAAsB;2BAEnC,EACL;;6CAE4B,EAAE,gCAAgC,EAAE;cAErE,EACL;YACK,EAAE,uBAAuB,EAAE;QAC/B,EAAkB,EAAM,cAAe,EAAM,aAAc,gBAAgB,EAAE;QAE7E,EAAM,gBAAkB,KACpB,CAAI;sBACM,EAAE,6BAA6B,EAAE;;mBAGrC,EAAM,UACF,GAAG,EAAM,UAAU,UAAU,KAAK,EAAW,EAAM,UAAU,EAAE,IAC/D,EAAE,2BAA2B,EAClC;;oBAGL,EACL;;;;eAIQ,EAAM,aAAa;iBAChB,GAAsB,CAC1B,EAAM,kBAAoB,EAAM,SAAW,GAAK,EAAM,SAAW,EAAM,UAG3E,EAAM,eAAe,EACrB,EAAM,eAAe,EACvB,EAAE;WACC,EAAE,4BAA4B,EAAE;;;GAI3C,CAEA,SAAgB,EAAa,EAAoC,CAC/D,MAAO,EAAI;;;qFAG0E,EAAM,UAAU,EAAE;YAC7F,EAAE,gBAAgB,EAAE;;UAGtB,EAAM,MAAM,KAAK,SACb,CAAI;mBACC,EAAE,kBAAmB,CAAE,KAAM,EAAW,EAAM,MAAM,KAAK,QAAQ,CAAE,CAAC,EAAE;iBAE3E,EACL;;;mCAG0B,EAAa,CAAK,EAAE,GAAG,EAAgB,CAAK,EAAE;mCAC9C,EAAiB,CAAK,EAAE,GAAG,EAAa,CAAK,EAAE;;;GAIlF"}
|
|
1
|
+
{"version":3,"file":"dreams-CFX8_iO7.js","names":[],"sources":["../../../ui/src/ui/views/dreams.ts"],"sourcesContent":["import { html, nothing, svg, type TemplateResult } from \"lit\";\nimport { t } from \"../../i18n/index.ts\";\nimport {\n isDryRun,\n measurementLabel,\n metricsEvent,\n outcomeEvents,\n phaseEvents,\n type DreamsBudgetWindow,\n type DreamsTaskRun,\n type DreamsViewState,\n type PanelError,\n type PanelStatus,\n type ProjectedMetricsEvent,\n type ProjectedPhaseEvent,\n type ProjectedRunEvent,\n type QualityPoint,\n} from \"../controllers/dreams.ts\";\n\nexport type DreamsProps = {\n state: DreamsViewState;\n nowMs: number;\n learningHref: string;\n onSelectRun: (taskRunId: string | null) => void;\n onRefresh: () => void;\n onOpenLearning: () => void;\n};\n\nfunction formatTime(value: string | number | null | undefined): string {\n if (value === null || value === undefined) {\n return \"—\";\n }\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? \"—\" : date.toLocaleString();\n}\n\nfunction formatMs(value: number | undefined): string {\n if (value === undefined || !Number.isFinite(value)) {\n return \"—\";\n }\n return value >= 1000 ? `${(value / 1000).toFixed(value >= 10_000 ? 0 : 1)} s` : `${value} ms`;\n}\n\nfunction formatCount(value: number, truncated: boolean | undefined): string {\n return truncated ? `≥ ${value}` : String(value);\n}\n\nfunction renderPanelNotice(\n status: PanelStatus,\n error: PanelError | null,\n testId: string,\n): TemplateResult | typeof nothing {\n if (status === \"disabled\") {\n return html`<div\n class=\"dreams-state dreams-state--disabled\"\n data-test-id=${`${testId}-disabled`}\n data-state=\"disabled\"\n >\n ${t(\"dreams.state.disabled\")}\n </div>`;\n }\n if (status === \"degraded\") {\n return html`<div\n class=\"dreams-state dreams-state--degraded\"\n role=\"alert\"\n data-test-id=${`${testId}-degraded`}\n data-state=\"degraded\"\n >\n <strong>${t(\"dreams.state.degraded\")}</strong>\n ${error ? html`<span class=\"mono\">${error.code ? `${error.code}: ` : \"\"}${error.message}</span>` : nothing}\n </div>`;\n }\n if (status === \"loading\" || status === \"idle\") {\n return html`<div class=\"dreams-state dreams-state--loading\" data-test-id=${`${testId}-loading`}>\n ${t(\"dreams.state.loading\")}\n </div>`;\n }\n return nothing;\n}\n\nfunction renderBudgetWindow(window: DreamsBudgetWindow | null): TemplateResult {\n if (!window) {\n return html`<div class=\"dreams-budget\" data-test-id=\"dreams-budget\">\n <div class=\"dreams-state dreams-state--empty\">${t(\"dreams.budget.none\")}</div>\n </div>`;\n }\n return html`\n <div class=\"dreams-budget\" data-test-id=\"dreams-budget\">\n <div class=\"dreams-budget__title\">${t(\"dreams.budget.title\")}</div>\n <div class=\"dreams-budget__units-note\" data-test-id=\"dreams-budget-units-note\">\n ${t(\"dreams.budget.unitsNote\")}\n </div>\n ${\n window.available\n ? html`\n <div class=\"dreams-kv\">\n <span>${t(\"dreams.budget.used\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-budget-usage\"\n >${window.windowUsageUnits} / ${window.cap ?? \"∞\"} ${t(\"dreams.budget.unitsSuffix\")}</span\n >\n <span>${t(\"dreams.budget.window\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-budget-window-hours\"\n >${window.windowHours === null ? \"—\" : `${window.windowHours} h`}</span\n >\n <span>${t(\"dreams.budget.windowStart\")}</span>\n <span class=\"mono\">${formatTime(window.windowStartTs)}</span>\n <span>${t(\"dreams.budget.ceiling\")}</span>\n <span class=\"mono\">${window.ceilingCap ?? \"—\"}</span>\n <span>${t(\"dreams.budget.denied\")}</span>\n <span class=\"mono\">${window.totalDenied}</span>\n </div>\n `\n : html`<div\n class=\"dreams-state dreams-state--degraded\"\n data-test-id=\"dreams-budget-unavailable\"\n >\n ${t(\"dreams.budget.unavailable\")}\n ${window.error ? html`<span class=\"mono\">${window.error}</span>` : nothing}\n </div>`\n }\n </div>\n `;\n}\n\nfunction measurementChip(label: string): TemplateResult {\n return html`<span\n class=\"chip dreams-chip dreams-chip--${label}\"\n data-test-id=\"dreams-measurement-label\"\n data-measurement=${label}\n >${t(`dreams.measurement.${label}`)}</span\n >`;\n}\n\nfunction runCost(metrics: ProjectedMetricsEvent | null): string {\n if (!metrics) {\n return \"—\";\n }\n if (metrics.costUsd === null) {\n return metrics.costSource === \"unpriced\" ? t(\"dreams.cost.unpriced\") : \"—\";\n }\n return `$${metrics.costUsd.toFixed(4)}`;\n}\n\nfunction renderRunsTable(props: DreamsProps): TemplateResult {\n const panel = props.state.runs;\n const notice = renderPanelNotice(panel.status, panel.error, \"dreams-runs\");\n if (panel.status !== \"ok\") {\n return html`<section class=\"dreams-panel dreams-runs\" data-test-id=\"dreams-runs\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.runs.title\")}</h3>\n ${notice}\n </section>`;\n }\n let body: TemplateResult;\n if (!panel.runsAvailable) {\n body = html`<div\n class=\"dreams-state dreams-state--degraded\"\n data-test-id=\"dreams-runs-unavailable\"\n data-state=\"unavailable\"\n >\n ${t(\"dreams.runs.unavailable\")}\n ${panel.runsError ? html`<span class=\"mono\">${panel.runsError}</span>` : nothing}\n </div>`;\n } else if (panel.runs.length === 0) {\n body = html`<div\n class=\"dreams-state dreams-state--empty\"\n data-test-id=\"dreams-runs-empty\"\n data-state=\"empty\"\n >\n ${t(\"dreams.runs.empty\")}\n </div>`;\n } else {\n body = html`\n ${\n panel.eventsStatus === \"degraded\" || panel.eventsStatus === \"disabled\"\n ? renderPanelNotice(panel.eventsStatus, panel.eventsError, \"dreams-run-events\")\n : nothing\n }\n <div class=\"dreams-table-wrap\">\n <table class=\"dreams-table\" data-test-id=\"dreams-runs-table\">\n <thead>\n <tr>\n <th>${t(\"dreams.runs.task\")}</th>\n <th>${t(\"dreams.runs.status\")}</th>\n <th>${t(\"dreams.runs.started\")}</th>\n <th>${t(\"dreams.runs.duration\")}</th>\n <th>${t(\"dreams.runs.measurement\")}</th>\n <th>${t(\"dreams.runs.cost\")}</th>\n </tr>\n </thead>\n <tbody>\n ${panel.runs.map((run) => {\n const events =\n panel.eventsStatus === \"ok\" ? (panel.events[run.taskRunId] ?? []) : undefined;\n const label = measurementLabel(\n run,\n events,\n panel.retentionDays,\n props.nowMs,\n panel.truncated[run.taskRunId] !== undefined,\n );\n const selected = props.state.selectedRunId === run.taskRunId;\n return html`\n <tr\n class=\"dreams-run-row ${selected ? \"dreams-run-row--selected\" : \"\"}\"\n data-test-id=\"dreams-run-row\"\n data-run-id=${run.taskRunId}\n tabindex=\"0\"\n role=\"button\"\n aria-pressed=${selected ? \"true\" : \"false\"}\n @click=${() => props.onSelectRun(run.taskRunId)}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onSelectRun(run.taskRunId);\n }\n }}\n >\n <td class=\"mono\">${run.taskId}</td>\n <td>\n <span class=\"chip\">${run.status}</span>\n ${\n isDryRun(run, events)\n ? html`<span class=\"chip dreams-chip dreams-chip--dry-run\" data-test-id=\"dreams-dry-run\"\n >${t(\"dreams.labels.dryRun\")}</span\n >`\n : nothing\n }\n </td>\n <td>${formatTime(run.startedAt ?? run.updatedAt)}</td>\n <td class=\"mono\">${formatMs(run.durationMs)}</td>\n <td>${measurementChip(label)}</td>\n <td class=\"mono\">${runCost(metricsEvent(events))}</td>\n </tr>\n `;\n })}\n </tbody>\n </table>\n </div>\n `;\n }\n return html`\n <section class=\"dreams-panel dreams-runs\" data-test-id=\"dreams-runs\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.runs.title\")}</h3>\n ${renderBudgetWindow(panel.budgetWindow)} ${body}\n </section>\n `;\n}\n\nconst WATERFALL_WIDTH = 560;\nconst WATERFALL_LABEL = 110;\nconst WATERFALL_ROW = 20;\n\nfunction renderWaterfall(phases: ProjectedPhaseEvent[], elapsedMs: number | undefined) {\n if (phases.length === 0) {\n return html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-waterfall-empty\">\n ${t(\"dreams.drawer.noPhases\")}\n </div>`;\n }\n const end = Math.max(\n elapsedMs ?? 0,\n ...phases.map((phase) => phase.offsetMs + phase.durationMs),\n 1,\n );\n const plot = WATERFALL_WIDTH - WATERFALL_LABEL - 60;\n const height = phases.length * WATERFALL_ROW + 8;\n return html`\n <svg\n class=\"dreams-waterfall\"\n data-test-id=\"dreams-waterfall\"\n viewBox=\"0 0 ${WATERFALL_WIDTH} ${height}\"\n width=\"100%\"\n role=\"img\"\n aria-label=${t(\"dreams.drawer.waterfall\")}\n >\n ${phases.map((phase, index) => {\n const y = 4 + index * WATERFALL_ROW;\n const x = WATERFALL_LABEL + (phase.offsetMs / end) * plot;\n const width = Math.max(2, (phase.durationMs / end) * plot);\n return svg`\n <g data-test-id=\"dreams-waterfall-phase\" data-phase=${phase.name}>\n <text x=\"0\" y=${y + 13} class=\"dreams-waterfall__label\">${phase.name}</text>\n <rect x=${x} y=${y + 2} width=${width} height=${WATERFALL_ROW - 6} rx=\"2\"\n class=\"dreams-waterfall__bar dreams-waterfall__bar--${phase.status}\">\n <title>${phase.name}: +${phase.offsetMs} ms, ${phase.durationMs} ms (${phase.status})</title>\n </rect>\n <text x=${x + width + 4} y=${y + 13} class=\"dreams-waterfall__value\">${formatMs(phase.durationMs)}</text>\n </g>\n `;\n })}\n </svg>\n `;\n}\n\nfunction tokenCell(value: number | null | undefined): string {\n return value === null || value === undefined ? \"—\" : String(value);\n}\n\nfunction renderTokens(metrics: ProjectedMetricsEvent): TemplateResult {\n const tokens = metrics.tokens ?? metrics.knownTokens ?? null;\n const partial = metrics.tokens === null && metrics.knownTokens !== undefined;\n if (!tokens) {\n return html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-tokens\">\n ${t(\"dreams.drawer.tokensUnknown\")}\n </div>`;\n }\n return html`\n <div class=\"dreams-kv\" data-test-id=\"dreams-tokens\">\n ${partial ? html`<span class=\"dreams-kv__note\">${t(\"dreams.drawer.knownSoFar\")}</span><span></span>` : nothing}\n <span>${t(\"dreams.tokens.input\")}</span><span class=\"mono\">${tokenCell(tokens.input)}</span>\n <span>${t(\"dreams.tokens.output\")}</span><span class=\"mono\">${tokenCell(tokens.output)}</span>\n <span>${t(\"dreams.tokens.cacheRead\")}</span><span class=\"mono\">${tokenCell(tokens.cacheRead)}</span>\n <span>${t(\"dreams.tokens.cacheWrite\")}</span><span class=\"mono\">${tokenCell(tokens.cacheWrite)}</span>\n <span>${t(\"dreams.tokens.reasoning\")}</span><span class=\"mono\">${tokenCell(tokens.reasoning)}</span>\n <span>${t(\"dreams.tokens.total\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-tokens-total\">${tokenCell(tokens.total)}</span>\n </div>\n `;\n}\n\nfunction renderMetrics(metrics: ProjectedMetricsEvent): TemplateResult {\n const items = Object.entries(metrics.items ?? {});\n const stoppedEarly = metrics.items?.stoppedEarly;\n return html`\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.tokens\")}</h4>\n ${renderTokens(metrics)}\n </div>\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.cost\")}</h4>\n <div class=\"dreams-kv\" data-test-id=\"dreams-cost\">\n <span>${t(\"dreams.drawer.modelCost\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-cost-usd\"\n >${\n metrics.costUsd === null\n ? metrics.knownCostUsd !== undefined\n ? `≥ $${metrics.knownCostUsd.toFixed(4)}`\n : \"—\"\n : `$${metrics.costUsd.toFixed(4)}`\n }</span\n >\n <span>${t(\"dreams.drawer.costSource\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-cost-source\">${metrics.costSource}</span>\n <span>${t(\"dreams.drawer.modelCalls\")}</span>\n <span class=\"mono\">${metrics.modelCalls}</span>\n <span>${t(\"dreams.drawer.usageUnavailableCalls\")}</span>\n <span class=\"mono\">${metrics.usageUnavailableCalls}</span>\n <span>${t(\"dreams.drawer.elapsed\")}</span>\n <span class=\"mono\">${formatMs(metrics.elapsedMs)}</span>\n ${\n metrics.qualityScore !== undefined\n ? html`<span>${t(\"dreams.drawer.qualityScore\")}</span\n ><span class=\"mono\">${metrics.qualityScore.toFixed(2)}</span>`\n : nothing\n }\n ${\n metrics.authoring\n ? html`<span>${t(\"dreams.drawer.authoring\")}</span\n ><span class=\"mono\">${metrics.authoring}</span>`\n : nothing\n }\n ${\n metrics.skipped\n ? html`<span>${t(\"dreams.drawer.skipped\")}</span\n ><span class=\"mono\">${metrics.skipped}</span>`\n : nothing\n }\n </div>\n </div>\n ${\n (stoppedEarly !== undefined && stoppedEarly !== null) || metrics.selectionTruncated\n ? html`<div class=\"dreams-drawer__flags\">\n ${\n stoppedEarly !== undefined && stoppedEarly !== null\n ? html`<span class=\"chip dreams-chip dreams-chip--warn\" data-test-id=\"dreams-stopped-early\"\n >${t(\"dreams.drawer.stoppedEarly\")}: ${String(stoppedEarly)}</span\n >`\n : nothing\n }\n ${\n metrics.selectionTruncated\n ? html`<span\n class=\"chip dreams-chip dreams-chip--warn\"\n data-test-id=\"dreams-selection-truncated\"\n >${t(\"dreams.drawer.selectionTruncated\")}</span\n >`\n : nothing\n }\n </div>`\n : nothing\n }\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.items\")}</h4>\n ${\n items.length === 0\n ? html`<div class=\"dreams-state dreams-state--empty\">${t(\"dreams.drawer.noItems\")}</div>`\n : html`<div class=\"dreams-kv\" data-test-id=\"dreams-items\">\n ${items.map(\n ([key, value]) => html`<span>${key}</span\n ><span class=\"mono\" data-test-id=\"dreams-item\" data-item=${key}\n >${value === null ? \"—\" : String(value)}</span\n >`,\n )}\n </div>`\n }\n </div>\n `;\n}\n\nfunction renderLifecycle(run: DreamsTaskRun, events: ProjectedRunEvent[]): TemplateResult {\n const outcomes = outcomeEvents(events);\n const denial = outcomes.find((event) => event.denial)?.denial;\n const preemption = outcomes.findLast((event) => event.preemption)?.preemption;\n const recovered = outcomes.some((event) => event.recovered);\n return html`\n <div class=\"dreams-kv\" data-test-id=\"dreams-lifecycle\">\n <span>${t(\"dreams.drawer.status\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-run-status\">${run.status}</span>\n <span>${t(\"dreams.drawer.attempts\")}</span><span class=\"mono\">${run.attempts}</span>\n <span>${t(\"dreams.drawer.started\")}</span><span>${formatTime(run.startedAt)}</span>\n <span>${t(\"dreams.drawer.completed\")}</span><span>${formatTime(run.completedAt)}</span>\n <span>${t(\"dreams.drawer.trigger\")}</span><span class=\"mono\">${run.triggerSource}</span>\n <span>${t(\"dreams.drawer.preemptionCount\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-preemption-count\">${run.preemptionCount}</span>\n ${\n preemption\n ? html`<span>${t(\"dreams.drawer.preemptionReason\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-preemption-reason\"\n >${t(`dreams.preemption.${preemption.reason}`)}</span\n >`\n : nothing\n }\n ${\n denial\n ? html`<span>${t(\"dreams.drawer.denialReason\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-denial-reason\" data-reason=${denial.reason}\n >${t(`dreams.denial.${denial.reason}`)}${denial.scope ? ` (${denial.scope})` : \"\"}${\n denial.usage !== undefined && denial.cap !== undefined\n ? ` ${denial.usage}/${denial.cap} ${t(\"dreams.budget.unitsSuffix\")}`\n : \"\"\n }</span\n >`\n : nothing\n }\n ${\n recovered\n ? html`<span>${t(\"dreams.drawer.recovered\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-recovered\">${t(\"dreams.drawer.recoveredValue\")}</span>`\n : nothing\n }\n ${\n run.lastError\n ? html`<span>${t(\"dreams.drawer.lastError\")}</span><span class=\"mono\">${run.lastError}</span>`\n : nothing\n }\n </div>\n `;\n}\n\nfunction renderDrawer(props: DreamsProps): TemplateResult | typeof nothing {\n const panel = props.state.runs;\n const run = panel.runs.find((entry) => entry.taskRunId === props.state.selectedRunId);\n if (!run) {\n return nothing;\n }\n const events = panel.eventsStatus === \"ok\" ? (panel.events[run.taskRunId] ?? []) : undefined;\n const label = measurementLabel(\n run,\n events,\n panel.retentionDays,\n props.nowMs,\n panel.truncated[run.taskRunId] !== undefined,\n );\n const metrics = metricsEvent(events);\n const dryRun = isDryRun(run, events);\n return html`\n <aside class=\"dreams-drawer\" data-test-id=\"dreams-drawer\" aria-label=${t(\"dreams.drawer.title\")}>\n <header class=\"dreams-drawer__header\">\n <div>\n <div class=\"dreams-drawer__title mono\">${run.taskId}</div>\n <div class=\"dreams-drawer__sub mono\">${run.taskRunId}</div>\n </div>\n <button type=\"button\" class=\"btn\" data-test-id=\"dreams-drawer-close\" @click=${() => props.onSelectRun(null)}>\n ${t(\"dreams.drawer.close\")}\n </button>\n </header>\n <div class=\"dreams-drawer__flags\">\n ${measurementChip(label)}\n ${\n dryRun\n ? html`<span class=\"chip dreams-chip dreams-chip--dry-run\" data-test-id=\"dreams-drawer-dry-run\"\n >${t(\"dreams.labels.dryRun\")}</span\n >`\n : nothing\n }\n </div>\n ${\n dryRun\n ? html`<div class=\"dreams-drawer__note\" data-test-id=\"dreams-dry-run-note\">\n ${t(\"dreams.drawer.dryRunNote\")}\n </div>`\n : nothing\n }\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.lifecycle\")}</h4>\n ${renderLifecycle(run, events ?? [])}\n </div>\n ${\n label === \"pruned\"\n ? html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-pruned-note\">\n ${t(\"dreams.drawer.prunedNote\", { days: String(panel.retentionDays ?? \"\") })}\n </div>`\n : nothing\n }\n ${\n label === \"missing\" || label === \"unavailable\"\n ? html`<div class=\"dreams-state dreams-state--degraded\" data-test-id=\"dreams-measurement-missing\">\n ${t(\"dreams.drawer.measurementMissing\")}\n </div>`\n : nothing\n }\n ${\n label === \"truncated\"\n ? html`<div class=\"dreams-state dreams-state--degraded\" data-test-id=\"dreams-measurement-truncated\">\n ${t(\"dreams.drawer.measurementTruncated\")}\n </div>`\n : nothing\n }\n ${\n label === \"not_loaded\"\n ? html`<div class=\"dreams-state dreams-state--empty\">${t(\"dreams.drawer.eventsNotLoaded\")}</div>`\n : nothing\n }\n <div class=\"dreams-drawer__section\">\n <h4>${t(\"dreams.drawer.waterfall\")}</h4>\n ${renderWaterfall(phaseEvents(events), metrics?.elapsedMs)}\n </div>\n ${metrics ? renderMetrics(metrics) : nothing}\n </aside>\n `;\n}\n\nfunction renderDreamState(props: DreamsProps): TemplateResult {\n const panel = props.state.dream;\n const result = panel.result;\n return html`\n <section class=\"dreams-panel dreams-dream-state\" data-test-id=\"dreams-dream-state\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.dream.title\")}</h3>\n ${renderPanelNotice(panel.status, panel.error, \"dreams-dream-state\")}\n ${\n panel.status === \"ok\" && result\n ? html`\n <div class=\"dreams-kv\">\n <span>${t(\"dreams.dream.enabled\")}</span>\n <span class=\"mono\">${result.enabled ? t(\"dreams.dream.yes\") : t(\"dreams.dream.no\")}</span>\n <span>${t(\"dreams.dream.currentStage\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-current-stage\"\n >${\n result.activeCycles && result.activeCycles.length > 0\n ? result.activeCycles[0].currentStage || \"—\"\n : t(\"dreams.dream.noActiveCycle\")\n }</span\n >\n <span>${t(\"dreams.dream.candidateCount\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-candidate-count\"\n >${formatCount(result.candidateCount, result.candidateCountTruncated)}</span\n >\n <span>${t(\"dreams.dream.questionCount\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-question-count\"\n >${formatCount(result.questionCount, result.questionCountTruncated)}</span\n >\n </div>\n ${\n result.activeCycles && result.activeCycles.length > 0\n ? html`<table class=\"dreams-table\" data-test-id=\"dreams-active-cycles\">\n <thead>\n <tr>\n <th>${t(\"dreams.dream.cycle\")}</th>\n <th>${t(\"dreams.dream.stage\")}</th>\n <th>${t(\"dreams.dream.pending\")}</th>\n <th>${t(\"dreams.dream.failedStages\")}</th>\n <th>${t(\"dreams.dream.created\")}</th>\n </tr>\n </thead>\n <tbody>\n ${result.activeCycles.map(\n (cycle) => html`<tr>\n <td class=\"mono\">${cycle.cycleKey}</td>\n <td class=\"mono\">${cycle.currentStage}</td>\n <td class=\"mono\">${cycle.pendingPassCount}</td>\n <td class=\"mono\">${cycle.failedStages.join(\", \") || \"—\"}</td>\n <td>${formatTime(cycle.createdAt)}</td>\n </tr>`,\n )}\n </tbody>\n </table>`\n : nothing\n }\n <h4>${t(\"dreams.dream.stages\")}</h4>\n <table class=\"dreams-table\" data-test-id=\"dreams-stages\">\n <thead>\n <tr>\n <th>${t(\"dreams.dream.stage\")}</th>\n <th>${t(\"dreams.dream.lastCompleted\")}</th>\n </tr>\n </thead>\n <tbody>\n ${result.stages.map(\n (stage) => html`<tr data-test-id=\"dreams-stage-row\">\n <td class=\"mono\">${stage.name}</td>\n <td>${formatTime(stage.lastCompleted)}</td>\n </tr>`,\n )}\n </tbody>\n </table>\n `\n : nothing\n }\n <h4>${t(\"dreams.dream.weights\")}</h4>\n ${renderPanelNotice(panel.weightsStatus, panel.weightsError, \"dreams-weights\")}\n ${\n panel.weightsStatus === \"ok\"\n ? panel.weights.length === 0\n ? html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-weights-empty\">\n ${t(\"dreams.dream.noWeights\")}\n </div>`\n : html`<table class=\"dreams-table\" data-test-id=\"dreams-weights\">\n <thead>\n <tr>\n <th>${t(\"dreams.dream.agent\")}</th>\n <th>${t(\"dreams.dream.successRate\")}</th>\n <th>${t(\"dreams.dream.completedFailed\")}</th>\n <th>${t(\"dreams.dream.updated\")}</th>\n </tr>\n </thead>\n <tbody>\n ${panel.weights.map(\n (weight) => html`<tr data-test-id=\"dreams-weight-row\">\n <td class=\"mono\">${weight.agentId}</td>\n <td class=\"mono\">${Math.round(weight.successRate * 100)}%</td>\n <td class=\"mono\">${weight.totals.completed} / ${weight.totals.failed}</td>\n <td>${formatTime(weight.updatedAt)}</td>\n </tr>`,\n )}\n </tbody>\n </table>\n ${\n panel.weightsTruncated\n ? html`<div class=\"dreams-kv__note\" data-test-id=\"dreams-weights-truncated\">\n ${t(\"dreams.dream.weightsTruncated\", { count: String(panel.weights.length) })}\n </div>`\n : nothing\n }`\n : nothing\n }\n <h4>${t(\"dreams.dream.recentCandidates\")}</h4>\n ${renderPanelNotice(panel.candidatesStatus, panel.candidatesError, \"dreams-candidates\")}\n ${\n panel.candidatesStatus === \"ok\"\n ? panel.candidates.length === 0\n ? html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-candidates-empty\">\n ${t(\"dreams.dream.noCandidates\")}\n </div>`\n : html`<ul class=\"dreams-list\" data-test-id=\"dreams-candidates\">\n ${panel.candidates.map(\n (candidate) => html`<li>\n <span class=\"mono\">${candidate.taskId ?? \"—\"}</span>\n <span>${formatTime(candidate.firstSeenAt)}</span>\n </li>`,\n )}\n </ul>`\n : nothing\n }\n </section>\n `;\n}\n\nfunction renderQualityTrend(points: QualityPoint[]): TemplateResult {\n if (points.length === 0) {\n return html`<div class=\"dreams-state dreams-state--empty\" data-test-id=\"dreams-quality-empty\">\n ${t(\"dreams.health.noQuality\")}\n </div>`;\n }\n const width = 240;\n const height = 48;\n const step = points.length > 1 ? (width - 8) / (points.length - 1) : 0;\n const coords = points.map((point, index) => {\n const x = 4 + index * step;\n const y = 4 + (1 - Math.min(1, Math.max(0, point.qualityScore))) * (height - 8);\n return { x, y, point };\n });\n const latest = points[points.length - 1];\n return html`\n <div class=\"dreams-quality\" data-test-id=\"dreams-quality\">\n <svg\n class=\"dreams-sparkline\"\n data-test-id=\"dreams-quality-sparkline\"\n viewBox=\"0 0 ${width} ${height}\"\n width=${width}\n height=${height}\n role=\"img\"\n aria-label=${t(\"dreams.health.qualityTrend\")}\n >\n ${svg`<polyline class=\"dreams-sparkline__line\" fill=\"none\" points=${coords.map((c) => `${c.x},${c.y}`).join(\" \")}></polyline>`}\n ${coords.map(\n (c) =>\n svg`<circle class=\"dreams-sparkline__dot\" cx=${c.x} cy=${c.y} r=\"2.5\" data-test-id=\"dreams-quality-point\"><title>${c.point.qualityScore.toFixed(2)} · ${c.point.taskId}</title></circle>`,\n )}\n </svg>\n <span class=\"mono\" data-test-id=\"dreams-quality-latest\"\n >${t(\"dreams.health.latest\")}: ${latest.qualityScore.toFixed(2)} (${points.length})</span\n >\n </div>\n `;\n}\n\nfunction renderHealth(props: DreamsProps): TemplateResult {\n const panel = props.state.health;\n const overview = panel.overview;\n const share = panel.preemption;\n return html`\n <section class=\"dreams-panel dreams-health\" data-test-id=\"dreams-health\">\n <h3 class=\"dreams-panel__title\">${t(\"dreams.health.title\")}</h3>\n ${renderPanelNotice(panel.overviewStatus, panel.overviewError, \"dreams-overview\")}\n ${\n panel.overviewStatus === \"ok\" && overview\n ? html`<div class=\"dreams-kv\" data-test-id=\"dreams-overview\">\n <span>${t(\"dreams.health.activeLessons\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-active-lessons\"\n >${formatCount(overview.lessons, overview.truncated)}</span\n >\n <span>${t(\"dreams.health.pendingProposals\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-pending-proposals\"\n >${formatCount(overview.proposals.pending, overview.truncated)}</span\n >\n <span>${t(\"dreams.health.appliedProposals\")}</span>\n <span class=\"mono\">${formatCount(overview.proposals.applied, overview.truncated)}</span>\n </div>\n ${\n overview.truncated\n ? html`<div class=\"dreams-kv__note\" data-test-id=\"dreams-overview-truncated\">\n ${t(\"dreams.health.lowerBound\")}\n </div>`\n : nothing\n }`\n : nothing\n }\n <h4>${t(\"dreams.health.qualityTrend\")}</h4>\n ${renderPanelNotice(panel.runsStatus, panel.runsError, \"dreams-consolidation\")}\n ${\n panel.runsStatus === \"ok\"\n ? html`\n ${renderQualityTrend(panel.quality)}\n <div class=\"dreams-kv\">\n <span>${t(\"dreams.health.preemptionShare\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-preemption-share\"\n >${\n share.total === 0\n ? t(\"dreams.health.noRuns\")\n : `${share.preempted} / ${share.total} (${Math.round((share.preempted / share.total) * 100)}%)`\n }</span\n >\n ${\n panel.unclassifiedRecovered > 0\n ? html`<span>${t(\"dreams.health.unclassified\")}</span\n ><span class=\"mono\" data-test-id=\"dreams-unclassified\"\n >${panel.unclassifiedRecovered}</span\n >`\n : nothing\n }\n </div>\n <div class=\"dreams-kv__note\">${t(\"dreams.health.shutdownExcluded\")}</div>\n `\n : nothing\n }\n <h4>${t(\"dreams.health.distill\")}</h4>\n ${renderPanelNotice(panel.distillStatus, panel.distillError, \"dreams-distill\")}\n ${\n panel.distillStatus === \"ok\"\n ? html`<div class=\"dreams-kv\">\n <span>${t(\"dreams.health.authoringPath\")}</span>\n <span class=\"mono\" data-test-id=\"dreams-authoring\"\n >${\n panel.authoring\n ? `${panel.authoring.authoring} · ${formatTime(panel.authoring.at)}`\n : t(\"dreams.health.noAuthoring\")\n }</span\n >\n </div>`\n : nothing\n }\n <a\n class=\"dreams-link\"\n data-test-id=\"dreams-learning-link\"\n href=${props.learningHref}\n @click=${(event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey) {\n return;\n }\n event.preventDefault();\n props.onOpenLearning();\n }}\n >${t(\"dreams.health.openLearning\")}</a\n >\n </section>\n `;\n}\n\nexport function renderDreams(props: DreamsProps): TemplateResult {\n return html`\n <div class=\"dreams-view\" data-test-id=\"dreams-view\">\n <div class=\"dreams-toolbar\">\n <button type=\"button\" class=\"btn\" data-test-id=\"dreams-refresh\" @click=${() => props.onRefresh()}>\n ${t(\"dreams.refresh\")}\n </button>\n ${\n props.state.runs.loadedAt\n ? html`<span class=\"dreams-toolbar__meta\"\n >${t(\"dreams.loadedAt\", { time: formatTime(props.state.runs.loadedAt) })}</span\n >`\n : nothing\n }\n </div>\n <div class=\"dreams-layout\">\n <div class=\"dreams-main\">${renderDrawer(props)} ${renderRunsTable(props)}</div>\n <div class=\"dreams-side\">${renderDreamState(props)} ${renderHealth(props)}</div>\n </div>\n </div>\n `;\n}\n"],"mappings":"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"}
|