wednesdayai 0.4.12-dev.1174 → 0.4.12-dev.1175
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/{agent-scope-ez_yCRWW.js → agent-scope-DaYoimRo.js} +2 -2
- package/dist/{agent-turn-enqueue-D1nv4YZT.js → agent-turn-enqueue-D3OacNZ7.js} +5 -5
- package/dist/{agent-turn-enqueue-CGR6KnRF.js → agent-turn-enqueue-DlijraxI.js} +5 -5
- package/dist/{agent-turn-execute-DG-XBEzo.js → agent-turn-execute-D9y1nb9j.js} +25 -25
- package/dist/{agent-turn-recovery-adapter-BmYuc2HR.js → agent-turn-recovery-adapter-C1sYrukh.js} +1 -1
- package/dist/{agent-turn-recovery-adapter-CWfaZiYO.js → agent-turn-recovery-adapter-CRwMOJ0y.js} +1 -1
- package/dist/{agent-turn-runner-9UOoR8nB.js → agent-turn-runner-BkvAWgm5.js} +1 -1
- package/dist/{agent-turn-runner-B7l__Cn7.js → agent-turn-runner-CZilDjoa.js} +4 -4
- package/dist/{agent-turn-runner-BCA-hN8_.js → agent-turn-runner-D17nO0vK.js} +6 -6
- package/dist/{agent-turn-runner-DYpDj75r.js → agent-turn-runner-R4hdi0oG.js} +1 -1
- package/dist/{agents-CeISpt9i.js → agents-DUg4W-SG.js} +4 -4
- package/dist/{agents.config-1rfTU-i6.js → agents.config-D3XyRezX.js} +1 -1
- package/dist/{agents.config-DoubFhjD.js → agents.config-Swbya-Pq.js} +1 -1
- package/dist/{api-key-rotation-BTtiZLSZ.js → api-key-rotation-CFBqEjJo.js} +2 -2
- package/dist/{audio-preflight-CX77fr7Q.js → audio-preflight-BG_idLWC.js} +7 -7
- package/dist/{audio-preflight-BrScMi8D.js → audio-preflight-CyoX7lif.js} +3 -3
- package/dist/{audio-preflight-N8z3s_Gh.js → audio-preflight-IAvClu-y.js} +27 -27
- package/dist/{audio-preflight-BFnhZTiN.js → audio-preflight-L_bozm5I.js} +7 -7
- package/dist/{audio-transcription-runner-CXFOJH46.js → audio-transcription-runner-6owLZL6w.js} +1 -1
- package/dist/{audio-transcription-runner-CMZ73qnQ.js → audio-transcription-runner-BZ0WMm-A.js} +1 -1
- package/dist/{audio-transcription-runner-Dge9gicn.js → audio-transcription-runner-DO37G4ea.js} +12 -12
- package/dist/{audio-transcription-runner-CjXlkLIZ.js → audio-transcription-runner-bFGf0wS2.js} +1 -1
- package/dist/{audit-DX4_NbKs.js → audit-DFnuH0dg.js} +3 -3
- package/dist/{audit-D9fNwx9g.js → audit-DalWx_VS.js} +3 -3
- package/dist/{auth-choice-D0-qF7g3.js → auth-choice-Fycq8-Jh.js} +1 -1
- package/dist/{auth-choice-CMGPsiAV.js → auth-choice-mbH2rH0a.js} +1 -1
- package/dist/{banner-Ce8Alexq.js → banner-BL_UFbyh.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +58 -58
- package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
- package/dist/bundled/command-logger/handler.js +1 -1
- package/dist/bundled/session-journal/handler.js +58 -58
- package/dist/bundled/session-memory/handler.js +58 -58
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-activity-B_m-yRgD.js → channel-activity-osbmoIZV.js} +3 -3
- package/dist/{channel-options-D2zssWbx.js → channel-options-BJeMNZ2z.js} +1 -1
- package/dist/{channel-options-BL4-_Nb6.js → channel-options-PGV2u3V8.js} +1 -1
- package/dist/{channels-cli-WyPIpdB3.js → channels-cli-B9GKYvOB.js} +23 -23
- package/dist/{channels-cli-92tVTFkA.js → channels-cli-D3UU8fh7.js} +23 -23
- package/dist/{chat-content-NmNmcdgz.js → chat-content-D9t717tu.js} +15 -15
- package/dist/{plugin-sdk/chrome-6h5M_drY.js → chrome-Cb_eHwXe.js} +6 -6
- package/dist/{chunk-D4RJ_uMT.js → chunk-BGAIfwvG.js} +3 -3
- package/dist/{cli-UrpPMNLJ.js → cli-7ScLvN1y.js} +19 -19
- package/dist/{cli-BvsRRobB.js → cli-BE5Lpp_L.js} +19 -19
- package/dist/{command-queue-BjD14OVw.js → command-queue-BliAnsWZ.js} +1 -1
- package/dist/{command-queue-Udie2QZL.js → command-queue-Blj57uZh.js} +1 -1
- package/dist/{command-queue-BaBGQ6Tk.js → command-queue-BruTLOuq.js} +1 -1
- package/dist/{command-queue-19xosMJv.js → command-queue-arMRWvX5.js} +1 -1
- package/dist/{command-registry-CL4p9rtn.js → command-registry-BrjTTVbD.js} +9 -9
- package/dist/{commands-registry-Db991DqO.js → commands-registry-CHyanyMK.js} +2 -2
- package/dist/{completion-cli-CkO04yTw.js → completion-cli-DtYdt-iy.js} +2 -2
- package/dist/{completion-cli-BqDaTiFn.js → completion-cli-ieBlszFx.js} +1 -1
- package/dist/{config-cli-BEVbYqLv.js → config-cli-CIV8QVm5.js} +1 -1
- package/dist/{config-cli-D71FhE4k.js → config-cli-Cvn6fRPi.js} +1 -1
- package/dist/{configure-Dp1JprEc.js → configure-BnhcZRaY.js} +3 -3
- package/dist/{configure-c_Lnp1Uq.js → configure-DgjBIUlf.js} +3 -3
- package/dist/contracts/fixtures/exec-allowlist-glob-parity.json +1900 -0
- package/dist/contracts/fixtures/exec-allowlist-shell-parser-parity.json +82 -0
- package/dist/contracts/fixtures/exec-wrapper-resolution-parity.json +39 -0
- package/dist/contracts/fixtures/system-run-approval-binding-contract.json +115 -0
- package/dist/contracts/fixtures/system-run-approval-mismatch-contract.json +67 -0
- package/dist/contracts/fixtures/system-run-command-contract.json +75 -0
- package/dist/contracts/gateway-protocol.schema.json +11201 -0
- package/dist/contracts/host-env-security-policy.json +23 -0
- package/dist/contracts/tool-display.json +209 -0
- package/dist/control-ui/assets/{dreams-DyJGnA3V.js → dreams-BeGc2kwu.js} +2 -2
- package/dist/control-ui/assets/{dreams-DyJGnA3V.js.map → dreams-BeGc2kwu.js.map} +1 -1
- package/dist/control-ui/assets/{index-BWhuyic4.js → index-BksXaS0u.js} +4 -4
- package/dist/control-ui/assets/{index-BWhuyic4.js.map → index-BksXaS0u.js.map} +1 -1
- package/dist/control-ui/assets/{learning-gaEy5zTj.js → learning-BORaiTQ4.js} +2 -2
- package/dist/control-ui/assets/{learning-gaEy5zTj.js.map → learning-BORaiTQ4.js.map} +1 -1
- package/dist/control-ui/assets/{view-chat-DnpkK2I4.js → view-chat-ByDyhnLw.js} +3 -3
- package/dist/control-ui/assets/view-chat-ByDyhnLw.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/{deliver-DAI1adKs.js → deliver-B1z53DPr.js} +15 -15
- package/dist/{deliver-fMeD54AN.js → deliver-B8pV5x4F.js} +1 -1
- package/dist/{deliver-vQgJXP3a.js → deliver-Bsa8j_b2.js} +1 -1
- package/dist/{diagnostic-DcoTwECF.js → diagnostic-C5HIkG1L.js} +1 -1
- package/dist/{diagnostic-BkeVFvxm.js → diagnostic-C6bNcgBl.js} +1 -1
- package/dist/{diagnostic-C_RvUjQr.js → diagnostic-DHSjiKQ1.js} +5 -5
- package/dist/{diagnostic-BrdaDAl1.js → diagnostic-f8CKHXWb.js} +1 -1
- package/dist/{dm-policy-shared-mzjs7x7B.js → dm-policy-shared-BPje-Gef.js} +1 -1
- package/dist/{doctor-completion-D_S3gRPw.js → doctor-completion-CDYnb5Li.js} +1 -1
- package/dist/{doctor-completion-C7v-vtOs.js → doctor-completion-D8S1Gcv_.js} +1 -1
- package/dist/entry.js +2 -2
- package/dist/{plugin-sdk/errors-CJaXhYu_.js → errors-CCOle-CH.js} +1 -1
- package/dist/extensionAPI.js +9 -9
- package/dist/{fetch-tnHh82H6.js → fetch-CJta9EH3.js} +7 -7
- package/dist/{fetch-guard-dN5KnF8S.js → fetch-guard-CnaMeBGo.js} +3 -3
- package/dist/{frontmatter-Cw_6jMAR.js → frontmatter-DlRD-Jnx.js} +3 -3
- package/dist/{fs-safe-BK5ALzKD.js → fs-safe-DpdLT3fB.js} +3 -3
- package/dist/{gateway-cli-Dxb4Gwqw.js → gateway-cli-Czm__nCw.js} +36 -36
- package/dist/{gateway-cli-ChAJ5p3l.js → gateway-cli-DFkGKHPz.js} +36 -36
- package/dist/{health-CBvZJPs-.js → health-C4nj3qDh.js} +2 -2
- package/dist/{health-CZOplUoN.js → health-CsmwdVjS.js} +2 -2
- package/dist/{hooks-cli-bOAZo5-T.js → hooks-cli-BxKP7DWo.js} +20 -20
- package/dist/{hooks-cli-JNEqk2N5.js → hooks-cli-CBA8b6Jx.js} +20 -20
- package/dist/{image-ops-CuPvFH5f.js → image-ops-YU6OONEl.js} +1 -1
- package/dist/index.js +23 -23
- package/dist/{ir-DOH31kN0.js → ir-BdHn6F6Y.js} +5 -5
- package/dist/{legacy-names-CghFcfry.js → legacy-names-me5dD9PP.js} +1 -1
- package/dist/llm-slug-generator.js +58 -58
- package/dist/{logger-J4xjy-6D.js → logger-BrQxLcMY.js} +1 -1
- package/dist/{manager-CIZ0QuW4.js → manager-CZtmiXmJ.js} +1 -1
- package/dist/{manager-C11jMqdP.js → manager-DHjF2k7q.js} +1 -1
- package/dist/{manager-IxqSjOcT.js → manager-xwMosvyt.js} +7 -7
- package/dist/{markdown-tables-DEH9aHSk.js → markdown-tables-BVgH365V.js} +2 -2
- package/dist/{model-selection-B6rLSrkD.js → model-selection-CYypdqr8.js} +8 -8
- package/dist/{models-BZTi0-Av.js → models-C11KMgT3.js} +1 -1
- package/dist/{models-cli-C6pcyGP0.js → models-cli-CS5xlygz.js} +19 -19
- package/dist/{models-cli-CHJdg1GH.js → models-cli-CgzMzfqd.js} +20 -20
- package/dist/{models-config-Df_i5tBU.js → models-config-D7vsT5RL.js} +2 -2
- package/dist/{node-cli-B1KRe4Re.js → node-cli-BBPVlqRt.js} +3 -3
- package/dist/{node-cli-B4wiZvXi.js → node-cli-COviNlfz.js} +3 -3
- package/dist/{npm-resolution-BeDz0VXP.js → npm-resolution-BAWPPxLj.js} +1 -1
- package/dist/{npm-resolution-CRPU_qG0.js → npm-resolution-DL9wKF5C.js} +1 -1
- package/dist/{onboard-D7q9o-kX.js → onboard-Cdnr5pbQ.js} +2 -2
- package/dist/{onboard-GbkABVzs.js → onboard-CzGG7bBK.js} +2 -2
- package/dist/{onboard-channels-4euYqK_2.js → onboard-channels-DmtDypI4.js} +1 -1
- package/dist/{onboard-channels-CBMg79WQ.js → onboard-channels-WOq5lCir.js} +1 -1
- package/dist/{onboarding-B6S8wiFp.js → onboarding-Cbrb9jSx.js} +3 -3
- package/dist/{onboarding-njkAuIOt.js → onboarding-CbwGAlGd.js} +3 -3
- package/dist/{onboarding.finalize-BXrmNNec.js → onboarding.finalize-B6I_Y9qX.js} +25 -25
- package/dist/{onboarding.finalize-7ydpZuiQ.js → onboarding.finalize-CJ3dB3I0.js} +24 -24
- package/dist/{operator-commands-CXUDftkm.js → operator-commands-C4Gcuhg-.js} +2 -2
- package/dist/{operator-commands-AI_6qsLV.js → operator-commands-CngQsW9K.js} +2 -2
- package/dist/{outbound-attachment-DrRWLp4N.js → outbound-attachment-C_QOYkXN.js} +2 -2
- package/dist/{outbound-message-hooks-BOFfMSWB.js → outbound-message-hooks-BYTh0d2Q.js} +5 -5
- package/dist/{path-alias-guards-E9ntDORB.js → path-alias-guards-BdGLz9X0.js} +1 -1
- package/dist/{pi-embedded-DF56GWP4.js → pi-embedded-BtqsPDuE.js} +93 -93
- package/dist/{pi-embedded-Dq-8v_vv.js → pi-embedded-cc9FvjV6.js} +13 -13
- package/dist/{pi-embedded-helpers-DWuNGG5B.js → pi-embedded-helpers-CeARdxZ4.js} +1 -1
- package/dist/{pi-embedded-helpers-D3LTDPt-.js → pi-embedded-helpers-c6iwL0n8.js} +1 -1
- package/dist/{pi-embedded-recovery-adapter-C9mqXAE4.js → pi-embedded-recovery-adapter-DAAP7Ng_.js} +8 -8
- package/dist/{pi-embedded-recovery-adapter-Dre9XcLC.js → pi-embedded-recovery-adapter-DLjgUR_v.js} +8 -8
- package/dist/{pi-embedded-utils-D4NJagYx.js → pi-embedded-utils-BDLhcc6D.js} +2 -2
- package/dist/{pi-embedded-utils-DDN2WVHB.js → pi-embedded-utils-C-iiawNt.js} +774 -774
- package/dist/{pi-embedded-utils-C6H8K_cB.js → pi-embedded-utils-CRBOXmug.js} +2 -2
- package/dist/{pi-embedded-utils-PDR8tE9V.js → pi-embedded-utils-DKfjTsdf.js} +771 -771
- package/dist/{pi-model-discovery-Q3FR2RL1.js → pi-model-discovery-fTAJjO1L.js} +1 -1
- package/dist/{pi-tools.policy-BfrO_apc.js → pi-tools.policy-C9f_wjtC.js} +1 -1
- package/dist/{plugin-registry-DtnX7b5x.js → plugin-registry-BECIMVHq.js} +1 -1
- package/dist/{plugin-registry-CqCTO-kS.js → plugin-registry-CFC70oKP.js} +1 -1
- package/dist/plugin-sdk/{agent-scope-DwEowelt.js → agent-scope-CmUceI3o.js} +2 -2
- package/dist/plugin-sdk/agent-turn-execute-C_3Brt73.js +64 -0
- package/dist/plugin-sdk/{agent-turn-execute-CKVBhvuo.js → agent-turn-execute-onUUd_KD.js} +9 -9
- package/dist/plugin-sdk/{agent-turn-runner-axy9sTny.js → agent-turn-runner-C930JKZP.js} +7 -7
- package/dist/plugin-sdk/{agent-turn-runner-D2Xr338Q.js → agent-turn-runner-CEj9Tjm7.js} +1 -1
- package/dist/plugin-sdk/{agent-turn-runner-Bg8CXi4k.js → agent-turn-runner-DXlm3lec.js} +5 -5
- package/dist/plugin-sdk/{api-key-rotation-3YQyVYAQ.js → api-key-rotation-Blcbk26b.js} +2 -2
- package/dist/plugin-sdk/{audio-preflight-9SX0UOe_.js → audio-preflight-CuFzia3L.js} +24 -24
- package/dist/plugin-sdk/{audio-preflight-Cs6EigEw.js → audio-preflight-D9IYdErG.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bcrf-bW6.js → audio-preflight-vTFe6q-M.js} +4 -4
- package/dist/plugin-sdk/{audio-transcription-runner-CLADOHlh.js → audio-transcription-runner-DnMuGAf7.js} +12 -12
- package/dist/plugin-sdk/{audio-transcription-runner-B9MfMCVk.js → audio-transcription-runner-DyH5GOod.js} +1 -1
- package/dist/plugin-sdk/{auth-profiles-KcyRCyRL.js → auth-profiles-DvGaIYBp.js} +4 -4
- package/dist/plugin-sdk/{channel-activity-QWsFdGMF.js → channel-activity-BNntj0sz.js} +3 -3
- package/dist/{chrome-BfmRwZxF.js → plugin-sdk/chrome-DAcffzTv.js} +6 -6
- package/dist/plugin-sdk/{chunk-BPGs9hLM.js → chunk-CB29xLjR.js} +4 -4
- package/dist/plugin-sdk/{command-detection-_1QhGGDZ.js → command-detection-CjmqWw-8.js} +17 -17
- package/dist/plugin-sdk/{command-queue-CMyCOfkf.js → command-queue-7xFpkFB4.js} +1 -1
- package/dist/plugin-sdk/{command-queue-BeK7Bnsy.js → command-queue-Bqd6dM-B.js} +2 -2
- package/dist/plugin-sdk/{command-queue-CYztAHyV.js → command-queue-Dpyshmne.js} +2 -2
- package/dist/plugin-sdk/{commands-registry-B5q9mz7p.js → commands-registry-BZTehR7c.js} +3 -3
- package/dist/plugin-sdk/{deliver-C9GFYFwr.js → deliver-BmSCC8Nm.js} +14 -14
- package/dist/plugin-sdk/deliver-CnjfNTO5.js +35 -0
- package/dist/plugin-sdk/{diagnostic-Bm0F_zC6.js → diagnostic-BcenGjZ8.js} +7 -7
- package/dist/plugin-sdk/{diagnostic-CBMpEaKc.js → diagnostic-CZpVJpZB.js} +1 -1
- package/dist/plugin-sdk/{diagnostic-DVSBbYft.js → diagnostic-CdCSstlW.js} +1 -1
- package/dist/plugin-sdk/{diagnostic-session-state-Cg64nmPa.js → diagnostic-session-state-dyqcrTJE.js} +1 -1
- package/dist/{errors-uYqFFTaE.js → plugin-sdk/errors-EN4sbefW.js} +1 -1
- package/dist/plugin-sdk/{fetch-CmfHUeho.js → fetch-DDl2SO8L.js} +7 -7
- package/dist/plugin-sdk/{fetch-CapPbb6b.js → fetch-DvjOi3Bg.js} +1 -1
- package/dist/plugin-sdk/{fetch-guard-DNDzAy-f.js → fetch-guard-BUwz-C-T.js} +4 -4
- package/dist/plugin-sdk/{fetch-timeout-CQvBE4GN.js → fetch-timeout-CDvdvjfF.js} +1 -1
- package/dist/plugin-sdk/{fs-safe-B5q3Ro0t.js → fs-safe-BhD_zSpP.js} +3 -3
- package/dist/plugin-sdk/{image-ops-lNv6k6vi.js → image-ops-oGMLXQr2.js} +1 -1
- package/dist/plugin-sdk/{inbound-context-DlgSXWxE.js → inbound-context-CDZUuUm4.js} +1 -1
- package/dist/plugin-sdk/index.js +10 -10
- package/dist/plugin-sdk/{ir-CIRTCy8w.js → ir-C_MOC-vU.js} +5 -5
- package/dist/plugin-sdk/{logger-DyKgSZpY.js → logger-D3WPxGxp.js} +1 -1
- package/dist/plugin-sdk/{manager-DezDkdCy.js → manager-Bs-09War.js} +7 -7
- package/dist/plugin-sdk/manager-xQmOf1Pz.js +16 -0
- package/dist/plugin-sdk/{markdown-tables-C17EKYDj.js → markdown-tables-RlKAskrC.js} +3 -3
- package/dist/plugin-sdk/{models-config-bevplTXy.js → models-config-wfxyfUFC.js} +2 -2
- package/dist/plugin-sdk/{outbound-attachment-BTZBl0BQ.js → outbound-attachment-CQUbh_6X.js} +2 -2
- package/dist/plugin-sdk/{outbound-message-hooks-BiHoftNO.js → outbound-message-hooks-CoMngdyX.js} +4 -4
- package/dist/plugin-sdk/{path-alias-guards-BCIRwyTT.js → path-alias-guards-DXmARbM6.js} +1 -1
- package/dist/plugin-sdk/{pi-embedded-helpers-D5vYvfne.js → pi-embedded-helpers-XjTbpDko.js} +13 -13
- package/dist/plugin-sdk/{pi-embedded-utils-BIgpx_Sh.js → pi-embedded-utils-BrlKlUXp.js} +774 -774
- package/dist/plugin-sdk/{pi-embedded-utils-e-q8-JFO.js → pi-embedded-utils-_riPl28d.js} +771 -771
- package/dist/plugin-sdk/{pi-model-discovery-BauIBkM-.js → pi-model-discovery-BgyO4v3b.js} +2 -2
- package/dist/plugin-sdk/provider-dispatcher-jGfaQgV0.js +64 -0
- package/dist/plugin-sdk/{provider-dispatcher-8XbARSbn.js → provider-dispatcher-vpQA65Tf.js} +9 -9
- package/dist/plugin-sdk/provider-image-BAbdpevG.js +25 -0
- package/dist/plugin-sdk/{provider-image-84Twf1oC.js → provider-image-BkyM8Zjc.js} +2 -2
- package/dist/plugin-sdk/{provider-image-CGUNh9dU.js → provider-image-D14lkjIZ.js} +6 -6
- package/dist/plugin-sdk/{provider-image-DbhnBOnk.js → provider-image-DogfVTJ8.js} +1 -1
- package/dist/plugin-sdk/provider-media-understanding.js +635 -635
- package/dist/plugin-sdk/{proxy-We8Qk8es.js → proxy-DE-LalZN.js} +2 -2
- package/dist/plugin-sdk/{proxy-env-DazXaKjU.js → proxy-env-Ba9DYbzf.js} +1 -1
- package/dist/{proxy-fetch-g109vqdt.js → plugin-sdk/proxy-fetch-COwQOlkE.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-DMALp-EA.js → pw-ai-DcuiP3bX.js} +10 -10
- package/dist/plugin-sdk/{qmd-manager-CeD3efQC.js → qmd-manager-JFgckZ9C.js} +8 -8
- package/dist/plugin-sdk/{query-expansion-DNxL2kIG.js → query-expansion-BMOkTgUN.js} +2 -2
- package/dist/plugin-sdk/{recorder-aLKvue8c.js → recorder-B6DJORsj.js} +2 -2
- package/dist/{redact-BuV55JkU.js → plugin-sdk/redact-DHoeX993.js} +1 -1
- package/dist/plugin-sdk/{registry-CNxKf-6l.js → registry-D46Eo_gR.js} +6 -6
- package/dist/plugin-sdk/replies-CxnVssGn.js +27 -0
- package/dist/plugin-sdk/{replies-Bn2KjHze.js → replies-SaiHUB2a.js} +5 -5
- package/dist/plugin-sdk/{reply-directives-Dhb6LX3H.js → reply-directives-CzL86-wn.js} +2 -2
- package/dist/plugin-sdk/{reply-prefix-Dtmltov4.js → reply-prefix-Dq2Dc3lQ.js} +2 -2
- package/dist/plugin-sdk/{resolve-route-Da2G3VJp.js → resolve-route-C76hE7K6.js} +5 -5
- package/dist/plugin-sdk/{runs-QDbpaInY.js → runs-C_S0Rg2x.js} +2 -2
- package/dist/plugin-sdk/{runs-CKGX5Ci-.js → runs-DVgO4heP.js} +3 -3
- package/dist/plugin-sdk/{runs-BUqaDFBv.js → runs-dzOkVO1r.js} +9 -9
- package/dist/plugin-sdk/runs-hhkT-Pu0.js +27 -0
- package/dist/plugin-sdk/send-75sbzivz.js +25 -0
- package/dist/plugin-sdk/{send-Cvfh_nG7.js → send-B7zV4PSu.js} +1 -1
- package/dist/plugin-sdk/{send-Db5LNxYs.js → send-BI5IMfB5.js} +6 -6
- package/dist/plugin-sdk/{send-BVzWcBy5.js → send-C7OqiGNp.js} +9 -9
- package/dist/plugin-sdk/{send-B1ypiz3E.js → send-COZJjnPC.js} +8 -8
- package/dist/plugin-sdk/{send-B_I3QAOo.js → send-Cp0gA4Zx.js} +2 -2
- package/dist/plugin-sdk/send-DCoWZ-wD.js +24 -0
- package/dist/plugin-sdk/{send-DFhnhE3E.js → send-DaE7rS6w.js} +15 -15
- package/dist/plugin-sdk/send-DoSJiyl0.js +28 -0
- package/dist/plugin-sdk/{send-DsyNNw-J.js → send-DoeYN0mC.js} +7 -7
- package/dist/plugin-sdk/send-eyv7E0iM.js +23 -0
- package/dist/plugin-sdk/{send-BK4rIfoM.js → send-ylWqbS33.js} +20 -20
- package/dist/plugin-sdk/{session-meta-BboAJH-H.js → session-meta-hJUj4uSt.js} +2 -2
- package/dist/plugin-sdk/{sessions-CFMEF10g.js → sessions-BjzSL3zz.js} +4 -4
- package/dist/plugin-sdk/{skill-commands-CUnQmtx_.js → skill-commands-BL6wIWPZ.js} +5 -5
- package/dist/plugin-sdk/{skills-CmNwG5iX.js → skills-C-DXtUSu.js} +6 -6
- package/dist/plugin-sdk/src/compat/legacy-names.d.ts +0 -2
- package/dist/plugin-sdk/{store-BEgp7Nmc.js → store-BoQjejeB.js} +2 -2
- package/dist/plugin-sdk/{subagent-registry-CA10R0tL.js → subagent-registry-CXLib8ms.js} +9 -9
- package/dist/plugin-sdk/subagent-registry-DuwmHKYB.js +64 -0
- package/dist/plugin-sdk/{subsystem-C4zZI3bH.js → subsystem-P3MeMKnQ.js} +4 -4
- package/dist/plugin-sdk/{tables-3_j0k1TJ.js → tables-C_tnkpn8.js} +1 -1
- package/dist/plugin-sdk/testing.js +57 -57
- package/dist/plugin-sdk/{tokens-C7h_latl.js → tokens-CaPkWfh4.js} +1 -1
- package/dist/plugin-sdk/{tool-loop-detection-D71m0Vho.js → tool-loop-detection-Cl-kndb5.js} +1 -1
- package/dist/plugin-sdk/{tools-luXJzZk9.js → tools-Dm2qtHJb.js} +103 -103
- package/dist/plugin-sdk/{user-run-recording-WSU2BYNz.js → user-run-recording-DDem6310.js} +3 -3
- package/dist/{plugins-cli-D_NyzZW9.js → plugins-cli-CHAMuJiy.js} +20 -20
- package/dist/{plugins-cli-Dxbk35Pf.js → plugins-cli-uLyWiyfa.js} +20 -20
- package/dist/{program-HEyVqD3B.js → program-DocIX_WP.js} +25 -25
- package/dist/{program-context-B3a2W_At.js → program-context-ghNGm6SO.js} +22 -22
- package/dist/{prompt-select-styled-ppIYbe0d.js → prompt-select-styled-CVA15SCA.js} +7 -7
- package/dist/{prompt-select-styled-DxJ_77zX.js → prompt-select-styled-Jj__DnBz.js} +7 -7
- package/dist/{provider-image-D2hzUTN-.js → provider-image-BZgdxPq1.js} +1 -1
- package/dist/{provider-image-W-EYGKal.js → provider-image-CO8Im1dF.js} +1 -1
- package/dist/{provider-image-BQo_C53r.js → provider-image-DEcMOAkN.js} +6 -6
- package/dist/{provider-image-C5oNU-mN.js → provider-image-DHrkLyp5.js} +1 -1
- package/dist/{proxy-CrSpy5Aw.js → proxy-DaAwoyLn.js} +1 -1
- package/dist/{proxy-env-CkmgXJsh.js → proxy-env-DbK61KfJ.js} +1 -1
- package/dist/{plugin-sdk/proxy-fetch-BU0BahZR.js → proxy-fetch-DfICXirF.js} +1 -1
- package/dist/{push-apns-0_fkHAov.js → push-apns-DqtlZlll.js} +2 -2
- package/dist/{push-apns-Q_O_wdrq.js → push-apns-yvl7zEo_.js} +2 -2
- package/dist/{pw-ai-BPQOM9d3.js → pw-ai-BPTONp50.js} +12 -12
- package/dist/{pw-ai-g0HGDwyD.js → pw-ai-C882FHgv.js} +1 -1
- package/dist/{pw-ai-CQb0ItA6.js → pw-ai-CMCRUmcp.js} +1 -1
- package/dist/{qmd-manager-DSh3OKQh.js → qmd-manager-BwE9yS9R.js} +10 -10
- package/dist/{query-expansion-DRXSu_5k.js → query-expansion-D98bVcfg.js} +2 -2
- package/dist/{recorder-B2sCWV53.js → recorder-DsunFllM.js} +2 -2
- package/dist/{recovery-adapter-DSbvfwKK.js → recovery-adapter-B-DNoAV7.js} +2 -2
- package/dist/{recovery-adapter-DzYVoKTi.js → recovery-adapter-BdkQZ5xP.js} +1 -1
- package/dist/{recovery-adapter-D2B0pdqt.js → recovery-adapter-Cw1aphPL.js} +1 -1
- package/dist/{recovery-adapter-Dbqn5-Ld.js → recovery-adapter-b0A2gCDb.js} +2 -2
- package/dist/{plugin-sdk/redact-D8RbIpnX.js → redact-CO0RqVMz.js} +1 -1
- package/dist/{register.agent-Dvyk092H.js → register.agent-BCtQaeAD.js} +23 -23
- package/dist/{register.agent-CIkPzPIt.js → register.agent-DiJrH1EW.js} +22 -22
- package/dist/{register.configure-VjupqY_R.js → register.configure-CKJuc-FW.js} +23 -23
- package/dist/{register.configure-Dxh-ApMg.js → register.configure-CnYaSpsS.js} +23 -23
- package/dist/{register.maintenance-C1KbQnjw.js → register.maintenance-BKzga0qj.js} +25 -25
- package/dist/{register.maintenance-C1FvEYFo.js → register.maintenance-DEvh6R2o.js} +26 -26
- package/dist/{register.message-DuawBdND.js → register.message-D8fkEFVf.js} +20 -20
- package/dist/{register.message-CjifjFu6.js → register.message-DGTEL1Tg.js} +20 -20
- package/dist/{register.onboard-CnJKqb2s.js → register.onboard-DO_YKp1H.js} +2 -2
- package/dist/{register.onboard-DfdNM6nf.js → register.onboard-s6AEVhmF.js} +2 -2
- package/dist/{register.setup-7alWtjkk.js → register.setup-CycXBQ5H.js} +2 -2
- package/dist/{register.setup-C260nghY.js → register.setup-RxsGp9kI.js} +2 -2
- package/dist/{register.status-health-sessions-Czz7gqp8.js → register.status-health-sessions-C28EqpUJ.js} +22 -22
- package/dist/{register.status-health-sessions-BIEvR55M.js → register.status-health-sessions-Dy5cWRyV.js} +22 -22
- package/dist/{register.subclis-DN08tV-5.js → register.subclis-DZTKquk1.js} +14 -14
- package/dist/{replies-BoFYf1NE.js → replies-pB9HCyld.js} +5 -5
- package/dist/{reply-1aF-zc2T.js → reply-BHMxE3FN.js} +25 -25
- package/dist/{reply-directives-n4Mln5AE.js → reply-directives-mulrKdb0.js} +2 -2
- package/dist/{reply-prefix-V5rU-Ogg.js → reply-prefix-JmOFNTVH.js} +1 -1
- package/dist/{resolve-route-BngsdZ6k.js → resolve-route-5h1UlQhK.js} +5 -5
- package/dist/{run-main-BsZAEVZ5.js → run-main-NacHjhY5.js} +32 -32
- package/dist/{runs-oIgi8P4h.js → runs-CYEm5TJX.js} +8 -8
- package/dist/{runs-C3-u7s1g.js → runs-D8DE3b2G.js} +3 -3
- package/dist/{runs-in5L_R4G.js → runs-DQRmuc7m.js} +3 -3
- package/dist/{runs-ofBpkveN.js → runs-Dar4NRlC.js} +2 -2
- package/dist/{sandbox-CcBc35AL.js → sandbox-DImUNfT6.js} +1 -1
- package/dist/{sandbox-3ud815rQ.js → sandbox-IQVarb3R.js} +1 -1
- package/dist/{sandbox-cli-CV303sXF.js → sandbox-cli-jux3JAUv.js} +2 -2
- package/dist/{sandbox-cli-y1YLmtIG.js → sandbox-cli-vK_IbZ7g.js} +2 -2
- package/dist/{security-cli-C5ohfdvr.js → security-cli-CgNKpzFC.js} +4 -4
- package/dist/{security-cli-D3yFlQil.js → security-cli-lO9CX8Q7.js} +4 -4
- package/dist/{send-DilOCNDN.js → send-Bcmcrt2M.js} +6 -6
- package/dist/{send-DdEIcwHx.js → send-CaxLshmb.js} +6 -6
- package/dist/{send-D2tQPHO7.js → send-LdGFidPd.js} +8 -8
- package/dist/{send-D-tKRd8o.js → send-Mi8tGyhy.js} +1 -1
- package/dist/{send-C97GBhca.js → send-i_w4A0N2.js} +7 -7
- package/dist/{send-DoQpIePE.js → send-mGol3d2c.js} +14 -14
- package/dist/{send-BEE1BnRA.js → send-sMH1V3Sw.js} +1 -1
- package/dist/{send-BOcxolws.js → send-tEYUiTsj.js} +1 -1
- package/dist/{server-Cr0QDgYg.js → server-Dh1QTQlN.js} +4 -4
- package/dist/{server-CbDmKru3.js → server-Dxfm7PDB.js} +4 -4
- package/dist/{server-context-x_Yc_cB-.js → server-context-BjhpRV63.js} +2 -2
- package/dist/{server-context-D3IMy5Rv.js → server-context-CZ63266A.js} +2 -2
- package/dist/{server-lifecycle-Dzud4-7r.js → server-lifecycle-AqEdJ1wp.js} +1 -1
- package/dist/{server-lifecycle-5fAZqcCy.js → server-lifecycle-DDZU3yQb.js} +1 -1
- package/dist/{server-node-events-BRy30ma1.js → server-node-events-A-ituIx7.js} +20 -20
- package/dist/{server-node-events-GH1Awj_Q.js → server-node-events-BS4V5O0S.js} +20 -20
- package/dist/{session-meta-BLOPTIxD.js → session-meta-CmQ6a7H5.js} +1 -1
- package/dist/{sessions-C5DXJtST.js → sessions-O_3lxXA0.js} +5 -5
- package/dist/{sessions-CEQobvUe.js → sessions-ZdGPevHF.js} +4 -4
- package/dist/{sessions-gabXodxw.js → sessions-hUEeaw8A.js} +6 -6
- package/dist/{skill-commands-ChNj_H99.js → skill-commands-XRDXSro6.js} +4 -4
- package/dist/{skills-CmbQ0fIv.js → skills-CXVcffYI.js} +6 -6
- package/dist/{status-C9t6NXa3.js → status-CwC6LEvw.js} +12 -12
- package/dist/{status-Cgv7sNQU.js → status-OoTZ_mew.js} +11 -11
- package/dist/{store-DG0uKhvC.js → store-CYs-lya8.js} +2 -2
- package/dist/{subsystem-BZy3aWdW.js → subsystem-Bv4j-uIg.js} +4 -4
- package/dist/{tables-DBO90jPO.js → tables-BbGV4Ys1.js} +1 -1
- package/dist/{task-pipeline-boot-D_Q-Z3Tk.js → task-pipeline-boot-DEe8WVFc.js} +20 -20
- package/dist/{task-pipeline-boot-BNJRr9SO.js → task-pipeline-boot-XjghdkEd.js} +20 -20
- package/dist/{task-runlog-retention-BPvb24QJ.js → task-runlog-retention-BKyctiVN.js} +2 -2
- package/dist/{task-runlog-retention-DrtczU4J.js → task-runlog-retention-Bv-px28-.js} +2 -2
- package/dist/{tokens-PMai9bNL.js → tokens-BdntrBR4.js} +1 -1
- package/dist/{tool-display-O8K8tb6x.js → tool-display-Be5WKjsE.js} +771 -771
- package/dist/{tool-display-Dk3JW0Ct.js → tool-display-DxbucAuJ.js} +771 -771
- package/dist/{tool-loop-detection-BqyMjpvr.js → tool-loop-detection-CdZfb_CR.js} +1 -1
- package/dist/{tui-CdAIxcTX.js → tui-BiGaEWBY.js} +2 -2
- package/dist/{tui-YI4hws2d.js → tui-Cu_G2qk6.js} +2 -2
- package/dist/{tui-cli-Dotp4yT2.js → tui-cli-Djttqsgd.js} +5 -5
- package/dist/{tui-cli-CNMgnji6.js → tui-cli-DzqGmVJQ.js} +5 -5
- package/dist/{update-cli-BONiUAKL.js → update-cli-7dDrlmba.js} +25 -25
- package/dist/{update-cli-ZC-mfH25.js → update-cli-BQGqU6zr.js} +26 -26
- package/dist/{update-runner-6S-MXY8y.js → update-runner-CRC7Pxtt.js} +1 -1
- package/dist/{update-runner-C4LHSUFx.js → update-runner-cWr2HWPJ.js} +1 -1
- package/dist/{user-run-recording-Ca_Bvent.js → user-run-recording-Dr98Mjnd.js} +2 -2
- package/dist/{validation-cli-DRizSViW.js → validation-cli-BDe3W7c8.js} +20 -20
- package/dist/{validation-cli-B6el9VI8.js → validation-cli-DeB3Uixv.js} +20 -20
- package/dist/{with-timeout-ak8zsXdP.js → with-timeout-CmaTPlEB.js} +2 -2
- package/dist/{with-timeout-CJdMNAfe.js → with-timeout-DX2PSy5q.js} +2 -2
- package/dist/{workspace-BDA8ECad.js → workspace-yHh5Lf7Z.js} +2 -2
- 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/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 +8 -27
- package/dist/control-ui/assets/view-chat-DnpkK2I4.js.map +0 -1
- package/dist/plugin-sdk/agent-turn-execute-DSwfm-5A.js +0 -64
- package/dist/plugin-sdk/deliver-DPfI8dVE.js +0 -35
- package/dist/plugin-sdk/manager-kaQT8tJ5.js +0 -16
- package/dist/plugin-sdk/provider-dispatcher-KIIUM3C0.js +0 -64
- package/dist/plugin-sdk/provider-image-C27j179m.js +0 -25
- package/dist/plugin-sdk/replies-DwzpmAcj.js +0 -27
- package/dist/plugin-sdk/runs-Bmc10baa.js +0 -27
- package/dist/plugin-sdk/send-BIBwmNzL.js +0 -24
- package/dist/plugin-sdk/send-BT778N_7.js +0 -23
- package/dist/plugin-sdk/send-CjyyJFep.js +0 -25
- package/dist/plugin-sdk/send-DfPCoIXV.js +0 -28
- package/dist/plugin-sdk/subagent-registry-C2UoQKQd.js +0 -64
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"blockedKeys": [
|
|
3
|
+
"NODE_OPTIONS",
|
|
4
|
+
"NODE_PATH",
|
|
5
|
+
"PYTHONHOME",
|
|
6
|
+
"PYTHONPATH",
|
|
7
|
+
"PERL5LIB",
|
|
8
|
+
"PERL5OPT",
|
|
9
|
+
"RUBYLIB",
|
|
10
|
+
"RUBYOPT",
|
|
11
|
+
"BASH_ENV",
|
|
12
|
+
"ENV",
|
|
13
|
+
"GIT_EXTERNAL_DIFF",
|
|
14
|
+
"SHELL",
|
|
15
|
+
"SHELLOPTS",
|
|
16
|
+
"PS4",
|
|
17
|
+
"GCONV_PATH",
|
|
18
|
+
"IFS",
|
|
19
|
+
"SSLKEYLOGFILE"
|
|
20
|
+
],
|
|
21
|
+
"blockedOverrideKeys": ["HOME", "ZDOTDIR"],
|
|
22
|
+
"blockedPrefixes": ["DYLD_", "LD_", "BASH_FUNC_"]
|
|
23
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"fallback": {
|
|
4
|
+
"emoji": "🧩",
|
|
5
|
+
"detailKeys": [
|
|
6
|
+
"command",
|
|
7
|
+
"path",
|
|
8
|
+
"url",
|
|
9
|
+
"targetUrl",
|
|
10
|
+
"targetId",
|
|
11
|
+
"ref",
|
|
12
|
+
"element",
|
|
13
|
+
"node",
|
|
14
|
+
"nodeId",
|
|
15
|
+
"id",
|
|
16
|
+
"requestId",
|
|
17
|
+
"to",
|
|
18
|
+
"channelId",
|
|
19
|
+
"guildId",
|
|
20
|
+
"userId",
|
|
21
|
+
"name",
|
|
22
|
+
"query",
|
|
23
|
+
"pattern",
|
|
24
|
+
"messageId"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"tools": {
|
|
28
|
+
"bash": {
|
|
29
|
+
"emoji": "🛠️",
|
|
30
|
+
"title": "Bash",
|
|
31
|
+
"detailKeys": ["command"]
|
|
32
|
+
},
|
|
33
|
+
"process": {
|
|
34
|
+
"emoji": "🧰",
|
|
35
|
+
"title": "Process",
|
|
36
|
+
"detailKeys": ["sessionId"]
|
|
37
|
+
},
|
|
38
|
+
"read": {
|
|
39
|
+
"emoji": "📖",
|
|
40
|
+
"title": "Read",
|
|
41
|
+
"detailKeys": ["path"]
|
|
42
|
+
},
|
|
43
|
+
"write": {
|
|
44
|
+
"emoji": "✍️",
|
|
45
|
+
"title": "Write",
|
|
46
|
+
"detailKeys": ["path"]
|
|
47
|
+
},
|
|
48
|
+
"edit": {
|
|
49
|
+
"emoji": "📝",
|
|
50
|
+
"title": "Edit",
|
|
51
|
+
"detailKeys": ["path"]
|
|
52
|
+
},
|
|
53
|
+
"attach": {
|
|
54
|
+
"emoji": "📎",
|
|
55
|
+
"title": "Attach",
|
|
56
|
+
"detailKeys": ["path", "url", "fileName"]
|
|
57
|
+
},
|
|
58
|
+
"browser": {
|
|
59
|
+
"emoji": "🌐",
|
|
60
|
+
"title": "Browser",
|
|
61
|
+
"actions": {
|
|
62
|
+
"status": { "label": "status" },
|
|
63
|
+
"start": { "label": "start" },
|
|
64
|
+
"stop": { "label": "stop" },
|
|
65
|
+
"tabs": { "label": "tabs" },
|
|
66
|
+
"open": { "label": "open", "detailKeys": ["targetUrl"] },
|
|
67
|
+
"focus": { "label": "focus", "detailKeys": ["targetId"] },
|
|
68
|
+
"close": { "label": "close", "detailKeys": ["targetId"] },
|
|
69
|
+
"snapshot": {
|
|
70
|
+
"label": "snapshot",
|
|
71
|
+
"detailKeys": ["targetUrl", "targetId", "ref", "element", "format"]
|
|
72
|
+
},
|
|
73
|
+
"screenshot": {
|
|
74
|
+
"label": "screenshot",
|
|
75
|
+
"detailKeys": ["targetUrl", "targetId", "ref", "element"]
|
|
76
|
+
},
|
|
77
|
+
"navigate": {
|
|
78
|
+
"label": "navigate",
|
|
79
|
+
"detailKeys": ["targetUrl", "targetId"]
|
|
80
|
+
},
|
|
81
|
+
"console": { "label": "console", "detailKeys": ["level", "targetId"] },
|
|
82
|
+
"pdf": { "label": "pdf", "detailKeys": ["targetId"] },
|
|
83
|
+
"upload": {
|
|
84
|
+
"label": "upload",
|
|
85
|
+
"detailKeys": ["paths", "ref", "inputRef", "element", "targetId"]
|
|
86
|
+
},
|
|
87
|
+
"dialog": {
|
|
88
|
+
"label": "dialog",
|
|
89
|
+
"detailKeys": ["accept", "promptText", "targetId"]
|
|
90
|
+
},
|
|
91
|
+
"act": {
|
|
92
|
+
"label": "act",
|
|
93
|
+
"detailKeys": [
|
|
94
|
+
"request.kind",
|
|
95
|
+
"request.ref",
|
|
96
|
+
"request.selector",
|
|
97
|
+
"request.text",
|
|
98
|
+
"request.value"
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"canvas": {
|
|
104
|
+
"emoji": "🖼️",
|
|
105
|
+
"title": "Canvas",
|
|
106
|
+
"actions": {
|
|
107
|
+
"present": { "label": "present", "detailKeys": ["target", "node", "nodeId"] },
|
|
108
|
+
"hide": { "label": "hide", "detailKeys": ["node", "nodeId"] },
|
|
109
|
+
"navigate": { "label": "navigate", "detailKeys": ["url", "node", "nodeId"] },
|
|
110
|
+
"eval": { "label": "eval", "detailKeys": ["javaScript", "node", "nodeId"] },
|
|
111
|
+
"snapshot": { "label": "snapshot", "detailKeys": ["format", "node", "nodeId"] },
|
|
112
|
+
"a2ui_push": { "label": "A2UI push", "detailKeys": ["jsonlPath", "node", "nodeId"] },
|
|
113
|
+
"a2ui_reset": { "label": "A2UI reset", "detailKeys": ["node", "nodeId"] }
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"nodes": {
|
|
117
|
+
"emoji": "📱",
|
|
118
|
+
"title": "Nodes",
|
|
119
|
+
"actions": {
|
|
120
|
+
"status": { "label": "status" },
|
|
121
|
+
"describe": { "label": "describe", "detailKeys": ["node", "nodeId"] },
|
|
122
|
+
"pending": { "label": "pending" },
|
|
123
|
+
"approve": { "label": "approve", "detailKeys": ["requestId"] },
|
|
124
|
+
"reject": { "label": "reject", "detailKeys": ["requestId"] },
|
|
125
|
+
"notify": { "label": "notify", "detailKeys": ["node", "nodeId", "title", "body"] },
|
|
126
|
+
"camera_snap": {
|
|
127
|
+
"label": "camera snap",
|
|
128
|
+
"detailKeys": ["node", "nodeId", "facing", "deviceId"]
|
|
129
|
+
},
|
|
130
|
+
"camera_list": { "label": "camera list", "detailKeys": ["node", "nodeId"] },
|
|
131
|
+
"camera_clip": {
|
|
132
|
+
"label": "camera clip",
|
|
133
|
+
"detailKeys": ["node", "nodeId", "facing", "duration", "durationMs"]
|
|
134
|
+
},
|
|
135
|
+
"screen_record": {
|
|
136
|
+
"label": "screen record",
|
|
137
|
+
"detailKeys": ["node", "nodeId", "duration", "durationMs", "fps", "screenIndex"]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"cron": {
|
|
142
|
+
"emoji": "⏰",
|
|
143
|
+
"title": "Cron",
|
|
144
|
+
"actions": {
|
|
145
|
+
"status": { "label": "status" },
|
|
146
|
+
"list": { "label": "list" },
|
|
147
|
+
"add": {
|
|
148
|
+
"label": "add",
|
|
149
|
+
"detailKeys": ["job.name", "job.id", "job.schedule", "job.cron"]
|
|
150
|
+
},
|
|
151
|
+
"update": { "label": "update", "detailKeys": ["id"] },
|
|
152
|
+
"remove": { "label": "remove", "detailKeys": ["id"] },
|
|
153
|
+
"run": { "label": "run", "detailKeys": ["id"] },
|
|
154
|
+
"runs": { "label": "runs", "detailKeys": ["id"] },
|
|
155
|
+
"wake": { "label": "wake", "detailKeys": ["text", "mode"] }
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"gateway": {
|
|
159
|
+
"emoji": "🔌",
|
|
160
|
+
"title": "Gateway",
|
|
161
|
+
"actions": {
|
|
162
|
+
"restart": { "label": "restart", "detailKeys": ["reason", "delayMs"] }
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"whatsapp_login": {
|
|
166
|
+
"emoji": "🟢",
|
|
167
|
+
"title": "WhatsApp Login",
|
|
168
|
+
"actions": {
|
|
169
|
+
"start": { "label": "start" },
|
|
170
|
+
"wait": { "label": "wait" }
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"discord": {
|
|
174
|
+
"emoji": "💬",
|
|
175
|
+
"title": "Discord",
|
|
176
|
+
"actions": {
|
|
177
|
+
"react": { "label": "react", "detailKeys": ["channelId", "messageId", "emoji"] },
|
|
178
|
+
"reactions": { "label": "reactions", "detailKeys": ["channelId", "messageId"] },
|
|
179
|
+
"sticker": { "label": "sticker", "detailKeys": ["to", "stickerIds"] },
|
|
180
|
+
"poll": { "label": "poll", "detailKeys": ["question", "to"] },
|
|
181
|
+
"permissions": { "label": "permissions", "detailKeys": ["channelId"] },
|
|
182
|
+
"readMessages": { "label": "read messages", "detailKeys": ["channelId", "limit"] },
|
|
183
|
+
"sendMessage": { "label": "send", "detailKeys": ["to", "content"] },
|
|
184
|
+
"editMessage": { "label": "edit", "detailKeys": ["channelId", "messageId"] },
|
|
185
|
+
"deleteMessage": { "label": "delete", "detailKeys": ["channelId", "messageId"] },
|
|
186
|
+
"threadCreate": { "label": "thread create", "detailKeys": ["channelId", "name"] },
|
|
187
|
+
"threadList": { "label": "thread list", "detailKeys": ["guildId", "channelId"] },
|
|
188
|
+
"threadReply": { "label": "thread reply", "detailKeys": ["channelId", "content"] },
|
|
189
|
+
"pinMessage": { "label": "pin", "detailKeys": ["channelId", "messageId"] },
|
|
190
|
+
"unpinMessage": { "label": "unpin", "detailKeys": ["channelId", "messageId"] },
|
|
191
|
+
"listPins": { "label": "list pins", "detailKeys": ["channelId"] },
|
|
192
|
+
"searchMessages": { "label": "search", "detailKeys": ["guildId", "content"] },
|
|
193
|
+
"memberInfo": { "label": "member", "detailKeys": ["guildId", "userId"] },
|
|
194
|
+
"roleInfo": { "label": "roles", "detailKeys": ["guildId"] },
|
|
195
|
+
"emojiList": { "label": "emoji list", "detailKeys": ["guildId"] },
|
|
196
|
+
"roleAdd": { "label": "role add", "detailKeys": ["guildId", "userId", "roleId"] },
|
|
197
|
+
"roleRemove": { "label": "role remove", "detailKeys": ["guildId", "userId", "roleId"] },
|
|
198
|
+
"channelInfo": { "label": "channel", "detailKeys": ["channelId"] },
|
|
199
|
+
"channelList": { "label": "channels", "detailKeys": ["guildId"] },
|
|
200
|
+
"voiceStatus": { "label": "voice", "detailKeys": ["guildId", "userId"] },
|
|
201
|
+
"eventList": { "label": "events", "detailKeys": ["guildId"] },
|
|
202
|
+
"eventCreate": { "label": "event create", "detailKeys": ["guildId", "name"] },
|
|
203
|
+
"timeout": { "label": "timeout", "detailKeys": ["guildId", "userId"] },
|
|
204
|
+
"kick": { "label": "kick", "detailKeys": ["guildId", "userId"] },
|
|
205
|
+
"ban": { "label": "ban", "detailKeys": ["guildId", "userId"] }
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{D as e,j as t,k as n}from"./view-agents-DNhyzEgf.js";import{I as r}from"./view-cron-BOjGaH8V.js";import{a as i,i as a,n as o,r as s,t as c}from"./index-
|
|
1
|
+
import{D as e,j as t,k as n}from"./view-agents-DNhyzEgf.js";import{I as r}from"./view-cron-BOjGaH8V.js";import{a as i,i as a,n as o,r as s,t as c}from"./index-BksXaS0u.js";function l(e){if(e==null)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString()}function u(e){return e===void 0||!Number.isFinite(e)?`—`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)} s`:`${e} ms`}function d(e,t){return t?`≥ ${e}`:String(e)}function f(t,i,a){return t===`disabled`?n`<div
|
|
2
2
|
class="dreams-state dreams-state--disabled"
|
|
3
3
|
data-test-id=${`${a}-disabled`}
|
|
4
4
|
data-state="disabled"
|
|
@@ -439,4 +439,4 @@ import{D as e,j as t,k as n}from"./view-agents-DNhyzEgf.js";import{I as r}from".
|
|
|
439
439
|
</div>
|
|
440
440
|
</div>
|
|
441
441
|
`}export{k as renderDreams};
|
|
442
|
-
//# sourceMappingURL=dreams-
|
|
442
|
+
//# sourceMappingURL=dreams-BeGc2kwu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dreams-DyJGnA3V.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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"}
|
|
1
|
+
{"version":3,"file":"dreams-BeGc2kwu.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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"}
|