@runfusion/fusion 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/bin.js +7431 -2240
- package/dist/client/.vite/manifest.json +1118 -331
- package/dist/client/assets/AgentDetailView-CgbB51Iw.css +1 -0
- package/dist/client/assets/AgentDetailView-D1cA9Bfj.js +18 -0
- package/dist/client/assets/{AgentPermissionPolicyEditor--YS4iMUY.js → AgentPermissionPolicyEditor-DE0wv8-L.js} +2 -2
- package/dist/client/assets/AgentsView-Bm_FA_1w.js +29 -0
- package/dist/client/assets/AgentsView-CzMa5Olf.css +1 -0
- package/dist/client/assets/ChatView-BtjkE0V7.css +1 -0
- package/dist/client/assets/ChatView-CHEkov6q.js +19 -0
- package/dist/client/assets/CommandCenter-Cfgek-dC.js +71 -0
- package/dist/client/assets/CommandCenter-DDjpYkPe.css +1 -0
- package/dist/client/assets/DevServerView-DgDksVH2.css +1 -0
- package/dist/client/assets/DevServerView-_or2KLVw.js +1 -0
- package/dist/client/assets/DirectoryPicker-etVwa-6X.js +1 -0
- package/dist/client/assets/DocumentsView-e8ZTdPIZ.js +1 -0
- package/dist/client/assets/EvalsView-CTbgPUne.css +1 -0
- package/dist/client/assets/EvalsView-CjDRQFMQ.js +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-DXR0OAsR.js +1 -0
- package/dist/client/assets/GoalsView-CUh8JBnJ.css +1 -0
- package/dist/client/assets/GoalsView-WWDKVslN.js +2 -0
- package/dist/client/assets/InsightsView-C7yRTMPn.css +1 -0
- package/dist/client/assets/InsightsView-DxIfxOzx.js +11 -0
- package/dist/client/assets/MemoryView-BVW2hkWf.js +2 -0
- package/dist/client/assets/MemoryView-CBDUr2Jy.css +1 -0
- package/dist/client/assets/PiExtensionsManager-CpSfMok2.js +11 -0
- package/dist/client/assets/PluginManager-CpBCy656.js +1 -0
- package/dist/client/assets/PullRequestView-BMspX1ga.js +6 -0
- package/dist/client/assets/PullRequestView-CpdE3Yo_.css +1 -0
- package/dist/client/assets/ResearchView--YEtcv_s.js +1 -0
- package/dist/client/assets/ResearchView-DIVNQF4_.css +1 -0
- package/dist/client/assets/SecretsView-CC6QDMWN.js +1 -0
- package/dist/client/assets/SecretsView-CvFioX7R.css +1 -0
- package/dist/client/assets/SessionTerminal-D4R3ScvQ.css +1 -0
- package/dist/client/assets/SessionTerminal-DJGtgIls.js +2 -0
- package/dist/client/assets/SettingsModal-4d_p8D7W.js +1 -0
- package/dist/client/assets/SettingsModal-BESN59Ao.css +1 -0
- package/dist/client/assets/SettingsModal-ino68pI2.css +1 -0
- package/dist/client/assets/SettingsModal-wABa7xmZ.js +21 -0
- package/dist/client/assets/SetupWizardModal-DHe2tXzx.js +2 -0
- package/dist/client/assets/ShadcnColorPicker-HX3j1v66.js +11 -0
- package/dist/client/assets/ShadcnColorPicker-pqVWCC5-.css +1 -0
- package/dist/client/assets/SkillsView-CJ8snrma.css +1 -0
- package/dist/client/assets/SkillsView-mdFVTX-r.js +1 -0
- package/dist/client/assets/TodoView-CIsL_uvQ.css +1 -0
- package/dist/client/assets/TodoView-DQVugDpW.js +6 -0
- package/dist/client/assets/WorkflowNodeEditor-CeERQHHu.js +8 -0
- package/dist/client/assets/WorkflowNodeEditor-f_XPV5Jd.css +1 -0
- package/dist/client/assets/{addon-fit-SnYDEvGm.js → addon-fit-C1WQXRvu.js} +1 -1
- package/dist/client/assets/{addon-unicode11-s5GoZCpi.js → addon-unicode11-BVmNDUBM.js} +1 -1
- package/dist/client/assets/{addon-web-links-jjt2f_oV.js → addon-web-links-CkVew5xs.js} +1 -1
- package/dist/client/assets/{addon-webgl-Icn-RnEx.js → addon-webgl-uLc0RKcC.js} +1 -1
- package/dist/client/assets/agentSkills-C2v1wbxh.js +1 -0
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-CZ_jbgep.css → agentSkills-bQJ4X1gH.css} +1 -1
- package/dist/client/assets/agentsOrgChartLayout-BMvyuaLA.js +1 -0
- package/dist/client/assets/app-BJGkp7Tt.js +13 -0
- package/dist/client/assets/app-BKLUvvm8.js +13 -0
- package/dist/client/assets/app-BaoNC9zg.js +13 -0
- package/dist/client/assets/app-CZQ_fFNf.js +13 -0
- package/dist/client/assets/app-DAu3AzsS.js +13 -0
- package/dist/client/assets/app-DgezOJub.js +13 -0
- package/dist/client/assets/arc-cxkkNsnK.js +1 -0
- package/dist/client/assets/architectureDiagram-3BPJPVTR-CGEhhgX_.js +36 -0
- package/dist/client/assets/band-CquvqAHh.js +1 -0
- package/dist/client/assets/blockDiagram-GPEHLZMM-D0DTo0HT.js +132 -0
- package/dist/client/assets/c4Diagram-AAUBKEIU-DNykNaRb.js +10 -0
- package/dist/client/assets/channel-Dwf1FoGU.js +1 -0
- package/dist/client/assets/chunk-2J33WTMH-5oQfAhmr.js +1 -0
- package/dist/client/assets/chunk-4BX2VUAB-BqLZXgFw.js +1 -0
- package/dist/client/assets/chunk-55IACEB6-C1oIjX3T.js +1 -0
- package/dist/client/assets/chunk-727SXJPM-BaovQTgk.js +206 -0
- package/dist/client/assets/chunk-AQP2D5EJ-B4ikBK42.js +231 -0
- package/dist/client/assets/chunk-FMBD7UC4-5zgtNnG2.js +15 -0
- package/dist/client/assets/chunk-ND2GUHAM-ByrypRna.js +1 -0
- package/dist/client/assets/chunk-QZHKN3VN-B7D1exsu.js +1 -0
- package/dist/client/assets/classDiagram-4FO5ZUOK-WqSUwcK_.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-WqSUwcK_.js +1 -0
- package/dist/client/assets/common-BDp2y6CF.js +1 -0
- package/dist/client/assets/common-BnEo5fLN.js +1 -0
- package/dist/client/assets/common-Bzr_Y8h4.js +1 -0
- package/dist/client/assets/common-CvwyFzfv.js +1 -0
- package/dist/client/assets/common-CztCXRkz.js +1 -0
- package/dist/client/assets/common-DPe2mbb7.js +1 -0
- package/dist/client/assets/cose-bilkent-S5V4N54A-CQmiNzGr.js +1 -0
- package/dist/client/assets/cytoscape.esm-OyMbaexL.js +331 -0
- package/dist/client/assets/dagre-BM42HDAG-BH8Uk0Up.js +4 -0
- package/dist/client/assets/{dashboard-view-B4LXCv5H.js → dashboard-view-CWJ-b59n.js} +1680 -1620
- package/dist/client/assets/dashboard-view-D3PWY2PH.js +1 -0
- package/dist/client/assets/dashboard-view-D_zsA-kz.css +1 -0
- package/dist/client/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/client/assets/diagram-2AECGRRQ-CDoHfkxY.js +43 -0
- package/dist/client/assets/diagram-5GNKFQAL-DARILCuD.js +10 -0
- package/dist/client/assets/diagram-KO2AKTUF-CNP-qi0y.js +3 -0
- package/dist/client/assets/diagram-LMA3HP47-SCiVmkcf.js +24 -0
- package/dist/client/assets/diagram-OG6HWLK6-iTJLXH61.js +24 -0
- package/dist/client/assets/erDiagram-TEJ5UH35-ByMpiPIa.js +85 -0
- package/dist/client/assets/flowDiagram-I6XJVG4X-DW3m3ZpM.js +162 -0
- package/dist/client/assets/{folder-open-33WGVnbp.js → folder-open-G-9vPAdv.js} +1 -1
- package/dist/client/assets/ganttDiagram-6RSMTGT7-BJeYH7Ol.js +292 -0
- package/dist/client/assets/gitGraphDiagram-PVQCEYII-CK_Chj4m.js +106 -0
- package/dist/client/assets/graph--OzhPTMs.js +1 -0
- package/dist/client/assets/index-BZBQ_KsL.css +1 -0
- package/dist/client/assets/index-ccFe_1av.js +1459 -0
- package/dist/client/assets/infoDiagram-5YYISTIA-D8Wg1IgN.js +2 -0
- package/dist/client/assets/init-Dmth1JHB.js +1 -0
- package/dist/client/assets/ishikawaDiagram-YF4QCWOH-DWROR2aX.js +70 -0
- package/dist/client/assets/journeyDiagram-JHISSGLW-Bns9774_.js +139 -0
- package/dist/client/assets/kanban-definition-UN3LZRKU-QtURfAoI.js +89 -0
- package/dist/client/assets/katex-HP8lGamR.js +257 -0
- package/dist/client/assets/layout-SsrduOYp.js +1 -0
- package/dist/client/assets/linear-dXivciGL.js +1 -0
- package/dist/client/assets/mermaid.core-DqgrgWWm.js +309 -0
- package/dist/client/assets/mindmap-definition-RKZ34NQL-jLaDb5_X.js +96 -0
- package/dist/client/assets/ordinal-DILIJJjt.js +1 -0
- package/dist/client/assets/pieDiagram-4H26LBE5-CjbHuIje.js +30 -0
- package/dist/client/assets/quadrantDiagram-W4KKPZXB-xgHbylQr.js +7 -0
- package/dist/client/assets/requirementDiagram-4Y6WPE33-CHdD7W41.js +84 -0
- package/dist/client/assets/sankeyDiagram-5OEKKPKP-C3me87g9.js +40 -0
- package/dist/client/assets/sequenceDiagram-3UESZ5HK-DSHfs1kU.js +162 -0
- package/dist/client/assets/{shield-alert-CqeGWBUK.js → shield-alert-DkGlhVjI.js} +1 -1
- package/dist/client/assets/stateDiagram-AJRCARHV-C08n7sMP.js +1 -0
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BosoAbfO.js +1 -0
- package/dist/client/assets/step-yuy0qJer.js +1 -0
- package/dist/client/assets/time-DoDTxsna.js +1 -0
- package/dist/client/assets/timeline-definition-PNZ67QCA-C21h9Zqh.js +120 -0
- package/dist/client/assets/{upload-C11J2diI.js → upload-B9B-tYt9.js} +1 -1
- package/dist/client/assets/{users-a-ELbyyZ.js → users-C_BA3C7E.js} +1 -1
- package/dist/client/assets/{vendor-i18n-DYlSUfot.js → vendor-i18n-GF3RlKbq.js} +2 -2
- package/dist/client/assets/{vendor-react-BTgM5bbZ.js → vendor-react-SZ_qB27O.js} +1 -1
- package/dist/client/assets/vendor-reactflow-Bg-Qjzh8.js +15 -0
- package/dist/client/assets/{vendor-xterm-ea7-K05z.js → vendor-xterm-BNq00GSj.js} +1 -1
- package/dist/client/assets/vennDiagram-CIIHVFJN-Bv3G0dwI.js +34 -0
- package/dist/client/assets/wardley-L42UT6IY-WX0hHKcN.js +173 -0
- package/dist/client/assets/wardleyDiagram-YWT4CUSO-CMwIPWm7.js +78 -0
- package/dist/client/assets/xychartDiagram-2RQKCTM6-CZvFdt6j.js +7 -0
- package/dist/client/assets/zoom-out-NWbVkreR.js +41 -0
- package/dist/client/index.html +30 -10
- package/dist/client/sw.js +1 -1
- package/dist/client/theme-data.css +3082 -206
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/index.ts +56 -40
- package/dist/droid-cli/package.json +1 -1
- package/dist/droid-cli/src/__tests__/index.test.ts +47 -21
- package/dist/droid-cli/src/__tests__/process-manager.test.ts +50 -33
- package/dist/extension.js +5405 -919
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +25 -0
- package/dist/pi-claude-cli/src/process-manager.ts +11 -1
- package/dist/plugin-sdk/index.d.ts +137 -4
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +68 -44
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +5 -11
- package/dist/plugins/fusion-plugin-roadmap/manifest.json +1 -11
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +3 -3
- package/skill/fusion/SKILL.md +1 -1
- package/skill/fusion/references/cli-commands.md +2 -1
- package/skill/fusion/references/extension-tools.md +10 -0
- package/skill/fusion/references/fusion-capabilities.md +3 -1
- package/dist/client/assets/AgentDetailView-CanIeYHg.css +0 -1
- package/dist/client/assets/AgentDetailView-DxV8pFHX.js +0 -18
- package/dist/client/assets/AgentsView-BVILQjdS.css +0 -1
- package/dist/client/assets/AgentsView-CTzbcvhK.js +0 -29
- package/dist/client/assets/ChatView-COygcnyk.js +0 -6
- package/dist/client/assets/ChatView-DwJAd5G1.css +0 -1
- package/dist/client/assets/CommandCenter-CTaopaC0.css +0 -1
- package/dist/client/assets/CommandCenter-DoKX2HWm.js +0 -56
- package/dist/client/assets/DevServerView-Cyevyvqx.js +0 -1
- package/dist/client/assets/DevServerView-VTQY28P7.css +0 -1
- package/dist/client/assets/DirectoryPicker-DBdyXEhR.js +0 -1
- package/dist/client/assets/DocumentsView-BzSMyrns.js +0 -1
- package/dist/client/assets/DocumentsView-WfVoTZt8.css +0 -1
- package/dist/client/assets/EvalsView-CUNJ1TLc.css +0 -1
- package/dist/client/assets/EvalsView-ikz00o9g.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-D-rzCCET.js +0 -499
- package/dist/client/assets/GoalsView-Bfu1Oy2-.js +0 -2
- package/dist/client/assets/GoalsView-rg9VSIza.css +0 -1
- package/dist/client/assets/InsightsView-Cgmf5nES.js +0 -11
- package/dist/client/assets/InsightsView-LMv1M1dU.css +0 -1
- package/dist/client/assets/MemoryView-DkEuDKQs.js +0 -2
- package/dist/client/assets/MemoryView-zaXewZzi.css +0 -1
- package/dist/client/assets/NodesView-7VInxyf_.css +0 -1
- package/dist/client/assets/NodesView-B_KYfS4o.js +0 -14
- package/dist/client/assets/PiExtensionsManager-Dz69kkKs.js +0 -11
- package/dist/client/assets/PluginManager-LHCVcduP.js +0 -1
- package/dist/client/assets/PullRequestView-3AdbS2a1.css +0 -1
- package/dist/client/assets/PullRequestView-DBJutLLl.js +0 -6
- package/dist/client/assets/ResearchView-DTh8FLUm.css +0 -1
- package/dist/client/assets/ResearchView-gpn1XcVy.js +0 -1
- package/dist/client/assets/SecretsView-B7YqIowt.js +0 -1
- package/dist/client/assets/SecretsView-Djo1rahi.css +0 -1
- package/dist/client/assets/SessionTerminal-9l4bdKcn.js +0 -2
- package/dist/client/assets/SessionTerminal-BNgtmXb3.css +0 -1
- package/dist/client/assets/SettingsModal-BGEK9_9A.js +0 -31
- package/dist/client/assets/SettingsModal-CKv0TJfM.css +0 -1
- package/dist/client/assets/SettingsModal-CXogw-Er.css +0 -1
- package/dist/client/assets/SettingsModal-DIIoHGUH.js +0 -1
- package/dist/client/assets/SetupWizardModal-BcVeMxeX.js +0 -1
- package/dist/client/assets/SetupWizardModal-CIqFbkrD.css +0 -1
- package/dist/client/assets/SkillsView-3bhGyWs1.css +0 -1
- package/dist/client/assets/SkillsView-BxSJ4PHL.js +0 -1
- package/dist/client/assets/StashRecoveryView-B_8WIQEo.css +0 -1
- package/dist/client/assets/StashRecoveryView-BhFQ2FsP.js +0 -1
- package/dist/client/assets/TodoView-7xIh-Fmi.css +0 -1
- package/dist/client/assets/TodoView-BZpewjy0.js +0 -6
- package/dist/client/assets/WorkflowNodeEditor-Yn1FRF2v.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-tWsgCdVt.js +0 -8
- package/dist/client/assets/app-BmGA0Hiz.js +0 -13
- package/dist/client/assets/app-CEVYlVuJ.js +0 -13
- package/dist/client/assets/app-CbBFax2C.js +0 -13
- package/dist/client/assets/app-DORKrGAz.js +0 -13
- package/dist/client/assets/app-DQibuQ9z.js +0 -13
- package/dist/client/assets/app-k76GrQP0.js +0 -13
- package/dist/client/assets/common-BRyX4VxB.js +0 -1
- package/dist/client/assets/common-CN9QPI2d.js +0 -1
- package/dist/client/assets/common-CNbjPELi.js +0 -1
- package/dist/client/assets/common-DFDqu_n0.js +0 -1
- package/dist/client/assets/common-DgWWKG8Z.js +0 -1
- package/dist/client/assets/common-X6PzBnVA.js +0 -1
- package/dist/client/assets/createLucideIcon-DmVITl5d.js +0 -21
- package/dist/client/assets/dashboard-view-BFoyhTYF.js +0 -3
- package/dist/client/assets/dashboard-view-Cxzm_eqc.js +0 -1
- package/dist/client/assets/dashboard-view-DdGlfuu-.css +0 -1
- package/dist/client/assets/dashboard-view-_8yfNwju.css +0 -1
- package/dist/client/assets/index-Bglw05rM.js +0 -791
- package/dist/client/assets/index-FYgnflWD.css +0 -1
- package/dist/client/assets/vendor-reactflow-ZasuEfF9.js +0 -15
- package/dist/client/assets/x-PItWc-wQ.js +0 -61
- package/dist/client/assets/zoom-out-CzlHv0Kj.js +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.cc-date-range{position:relative;display:inline-block}.cc-date-range-trigger{display:inline-flex;align-items:center;gap:var(--space-xs)}.cc-date-range-popover{position:absolute;top:calc(100% + var(--space-xs));right:0;z-index:20;min-width:16rem;padding:var(--space-md);background:var(--surface-1, #1c1c1c);border:1px solid var(--border-subtle, color-mix(in srgb, #7f7f7f 25%, transparent));border-radius:var(--radius-md, 8px);box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:var(--space-md)}.cc-date-range-presets{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.cc-date-range-custom{display:flex;flex-direction:column;gap:var(--space-sm)}.cc-date-range-field{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);font-size:.8125rem;color:var(--text-muted)}.cc-date-range-field input{background:var(--surface-2, color-mix(in srgb, #7f7f7f 12%, transparent));border:1px solid var(--border-subtle, color-mix(in srgb, #7f7f7f 25%, transparent));border-radius:var(--radius-sm, 4px);color:var(--text);padding:var(--space-xs) var(--space-sm)}.cc-bar-chart,.cc-stacked-bar,.cc-sparkline,.cc-token-series,.cc-token-series-plot,.cc-token-series-axis,.cc-line-chart,.cc-radial-gauge,.cc-funnel,.cc-funnel-stage{min-inline-size:0;max-inline-size:100%}.cc-bar-chart{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-bar-row{display:grid;grid-template-columns:minmax(calc(var(--space-2xl) * 2 + var(--space-lg)),32%) minmax(0,1fr) auto;align-items:center;gap:var(--space-sm)}.cc-bar-label{min-inline-size:0;font-size:.8125rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-bar-track{min-inline-size:0;position:relative;block-size:var(--space-md);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-bar-fill{block-size:100%;background:var(--accent);border-radius:var(--radius-sm);transition:width var(--transition-normal)}.cc-bar-row:nth-child(8n+1) .cc-bar-fill{background:var(--accent)}.cc-bar-row:nth-child(8n+2) .cc-bar-fill{background:var(--todo)}.cc-bar-row:nth-child(8n+3) .cc-bar-fill{background:var(--in-progress)}.cc-bar-row:nth-child(8n+4) .cc-bar-fill{background:var(--in-review)}.cc-bar-row:nth-child(8n+5) .cc-bar-fill{background:var(--triage)}.cc-bar-row:nth-child(8n+6) .cc-bar-fill{background:var(--color-success)}.cc-bar-row:nth-child(8n+7) .cc-bar-fill{background:var(--color-warning)}.cc-bar-row:nth-child(8n) .cc-bar-fill{background:var(--color-error)}.cc-bar-value{min-inline-size:0;font-size:.8125rem;font-variant-numeric:tabular-nums;color:var(--text);overflow-wrap:anywhere;text-align:end}.cc-stacked-bar{display:flex;flex-direction:column;gap:var(--space-sm)}.cc-stacked-track{display:flex;block-size:var(--space-md);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-stacked-segment{block-size:100%;background:var(--accent);transition:width var(--transition-normal)}.cc-stacked-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-md)}.cc-stacked-legend-item{min-inline-size:0;display:flex;align-items:center;gap:var(--space-xs);font-size:.8125rem;color:var(--text-muted);overflow-wrap:anywhere}.cc-stacked-swatch{inline-size:var(--space-sm);block-size:var(--space-sm);border-radius:var(--radius-sm);background:var(--accent);display:inline-block}.cc-stacked-segment:nth-child(8n+1),.cc-stacked-legend-item:nth-child(8n+1) .cc-stacked-swatch{background:var(--accent)}.cc-stacked-segment:nth-child(8n+2),.cc-stacked-legend-item:nth-child(8n+2) .cc-stacked-swatch{background:var(--todo)}.cc-stacked-segment:nth-child(8n+3),.cc-stacked-legend-item:nth-child(8n+3) .cc-stacked-swatch{background:var(--in-progress)}.cc-stacked-segment:nth-child(8n+4),.cc-stacked-legend-item:nth-child(8n+4) .cc-stacked-swatch{background:var(--in-review)}.cc-stacked-segment:nth-child(8n+5),.cc-stacked-legend-item:nth-child(8n+5) .cc-stacked-swatch{background:var(--triage)}.cc-stacked-segment:nth-child(8n+6),.cc-stacked-legend-item:nth-child(8n+6) .cc-stacked-swatch{background:var(--color-success)}.cc-stacked-segment:nth-child(8n+7),.cc-stacked-legend-item:nth-child(8n+7) .cc-stacked-swatch{background:var(--color-warning)}.cc-stacked-segment:nth-child(8n),.cc-stacked-legend-item:nth-child(8n) .cc-stacked-swatch{background:var(--color-error)}.cc-sparkline{display:flex;align-items:flex-end;gap:1px;block-size:var(--space-2xl)}.cc-sparkline-bar{flex:1 1 0;min-inline-size:1px;background:var(--accent);border-radius:1px;transition:height var(--transition-normal)}.cc-sparkline-bar:nth-child(8n+1){background:var(--accent)}.cc-sparkline-bar:nth-child(8n+2){background:var(--todo)}.cc-sparkline-bar:nth-child(8n+3){background:var(--in-progress)}.cc-sparkline-bar:nth-child(8n+4){background:var(--in-review)}.cc-sparkline-bar:nth-child(8n+5){background:var(--triage)}.cc-sparkline-bar:nth-child(8n+6){background:var(--color-success)}.cc-sparkline-bar:nth-child(8n+7){background:var(--color-warning)}.cc-sparkline-bar:nth-child(8n){background:var(--color-error)}.cc-token-series{display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0}.cc-token-series-plot{display:flex;align-items:flex-end;gap:var(--space-xs);block-size:clamp(calc(var(--space-2xl) * 2),24vw,calc(var(--space-2xl) * 5));padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 10%,transparent),transparent),var(--surface-1);overflow:hidden}.cc-token-series-bar{flex:1 1 0;min-inline-size:var(--space-xs);border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:linear-gradient(180deg,var(--accent),color-mix(in srgb,var(--accent) 45%,var(--surface-2)));box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 24%,transparent);transition:height var(--transition-normal);animation:cc-token-series-rise var(--duration-normal) ease-out both}.cc-token-series-empty{inline-size:100%;block-size:2px;align-self:flex-end;border-radius:var(--radius-pill);background:var(--border-subtle)}.cc-token-series-axis{display:flex;justify-content:space-between;gap:var(--space-sm);color:var(--text-muted);font-size:.75rem;font-variant-numeric:tabular-nums}.cc-token-series-axis span{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-token-series-axis span:last-child{text-align:end}@keyframes cc-token-series-rise{0%{transform:scaleY(.82);opacity:.72}to{transform:scaleY(1);opacity:1}}@media(prefers-reduced-motion:reduce){.cc-token-series-bar{transition:none;animation:none}}@media(max-width:768px){.cc-token-series-plot{block-size:clamp(calc(var(--space-2xl) + var(--space-xl)),38vw,calc(var(--space-2xl) * 4));padding:var(--space-sm)}}.cc-line-chart{display:block;inline-size:100%;block-size:clamp(calc(var(--space-2xl) * 2),22vw,calc(var(--space-2xl) * 5));aspect-ratio:5 / 2;color:var(--accent);overflow:hidden}.cc-line-chart-series{color:var(--accent)}.cc-line-chart-series:nth-child(2n){color:var(--color-success)}.cc-line-chart-series:nth-child(3n){color:var(--color-warning)}.cc-line-chart-path{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:100;stroke-dashoffset:100;animation:cc-line-chart-draw calc(var(--duration-slow) * 4) ease-out forwards}.cc-line-chart-point{fill:var(--surface-1);stroke:currentColor;stroke-width:2px}@keyframes cc-line-chart-draw{to{stroke-dashoffset:0}}@media(prefers-reduced-motion:reduce){.cc-line-chart-path{animation:none;stroke-dashoffset:0}}@media(max-width:768px){.cc-line-chart{block-size:clamp(calc(var(--space-2xl) * 2),44vw,calc(var(--space-2xl) * 4));aspect-ratio:auto}}.cc-recharts-chart,.cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-recharts-chart .recharts-wrapper{inline-size:100%!important;max-inline-size:100%}.cc-recharts-chart .recharts-legend-wrapper{inset-inline:0!important;inset-block-start:auto!important;inset-block-end:0!important;inline-size:100%!important;max-inline-size:100%;overflow:hidden}.cc-recharts-chart .recharts-default-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-xs) var(--space-sm);inline-size:100%;max-inline-size:100%;margin:0;padding:0}.cc-recharts-chart .recharts-legend-item{display:inline-flex!important;align-items:center;max-inline-size:min(100%,calc(var(--space-2xl) * 5));margin-inline-end:0!important;min-inline-size:0}.cc-recharts-chart .recharts-legend-item-text{display:inline-block;min-inline-size:0;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}@media(max-width:768px){.cc-recharts-chart,.cc-recharts-empty{block-size:calc(var(--space-2xl) * 8 + var(--space-md))}}.cc-radial-gauge{min-inline-size:0;display:grid;place-items:center;gap:var(--space-sm);color:var(--text)}.cc-radial-gauge-ring{position:relative;display:grid;place-items:center;inline-size:clamp(calc(var(--space-2xl) * 3),32vw,calc(var(--space-2xl) * 4 + var(--space-lg)));aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at center,var(--surface-1) 0 54%,transparent 55%),conic-gradient(var(--accent) var(--cc-radial-value),var(--surface-2) 0);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 35%,transparent);isolation:isolate;animation:cc-radial-gauge-pulse calc(var(--duration-slow) * 6) ease-in-out infinite}.cc-radial-gauge-ring:before{content:"";position:absolute;inset:var(--space-sm);border-radius:inherit;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);box-shadow:inset 0 0 var(--space-md) color-mix(in srgb,var(--accent) 22%,transparent);animation:cc-radial-gauge-sweep calc(var(--duration-slow) * 8) linear infinite}.cc-radial-gauge-core{position:relative;z-index:1;display:grid;place-items:center;inline-size:58%;aspect-ratio:1;background:var(--surface-1);border-radius:50%;box-shadow:inset 0 0 var(--space-md) var(--surface-2)}.cc-radial-gauge-value{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums}.cc-radial-gauge-label{max-inline-size:100%;color:var(--text-muted);font-size:.8125rem;overflow-wrap:anywhere;text-align:center}@keyframes cc-radial-gauge-pulse{0%,to{filter:saturate(1)}50%{filter:saturate(1.35)}}@keyframes cc-radial-gauge-sweep{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.cc-radial-gauge-ring,.cc-radial-gauge-ring:before{animation:none}}.cc-funnel{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-funnel-stage{display:flex;flex-direction:column;gap:var(--space-xs)}.cc-funnel-header{min-inline-size:0;display:flex;justify-content:space-between;gap:var(--space-sm);font-size:.8125rem;color:var(--text-muted)}.cc-funnel-label,.cc-funnel-conversion,.cc-funnel-value{min-inline-size:0;overflow-wrap:anywhere}.cc-funnel-conversion{flex:0 1 auto;text-align:end}.cc-funnel-conversion{font-variant-numeric:tabular-nums}.cc-funnel-track{block-size:var(--space-lg);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-funnel-fill{block-size:100%;background:var(--accent);border-radius:var(--radius-sm);transition:width var(--transition-normal)}.cc-funnel-stage:nth-child(8n+1) .cc-funnel-fill{background:var(--accent)}.cc-funnel-stage:nth-child(8n+2) .cc-funnel-fill{background:var(--todo)}.cc-funnel-stage:nth-child(8n+3) .cc-funnel-fill{background:var(--in-progress)}.cc-funnel-stage:nth-child(8n+4) .cc-funnel-fill{background:var(--in-review)}.cc-funnel-stage:nth-child(8n+5) .cc-funnel-fill{background:var(--triage)}.cc-funnel-stage:nth-child(8n+6) .cc-funnel-fill{background:var(--color-success)}.cc-funnel-stage:nth-child(8n+7) .cc-funnel-fill{background:var(--color-warning)}.cc-funnel-stage:nth-child(8n) .cc-funnel-fill{background:var(--color-error)}.cc-funnel-value{font-size:.8125rem;font-variant-numeric:tabular-nums;color:var(--text)}.cc-chart-skeleton{block-size:var(--space-md);border-radius:var(--radius-sm);background:var(--surface-2);animation:cc-chart-pulse var(--duration-slow) ease-in-out infinite}@keyframes cc-chart-pulse{0%,to{opacity:.4}50%{opacity:.9}}@media(max-width:768px){.cc-bar-row{grid-template-columns:minmax(0,1fr) minmax(calc(var(--space-2xl) + var(--space-lg)),2fr);align-items:start}.cc-bar-value{grid-column:1 / -1;justify-self:end;max-inline-size:100%}.cc-radial-gauge-ring{inline-size:clamp(calc(var(--space-2xl) * 2 + var(--space-lg)),44vw,calc(var(--space-2xl) * 4))}.cc-sparkline{block-size:clamp(var(--space-2xl),18vw,calc(var(--space-2xl) + var(--space-xl)))}}.cc-area{display:flex;flex-direction:column;gap:var(--space-lg);min-inline-size:0}.cc-area-section{display:flex;flex-direction:column;gap:var(--space-md);min-inline-size:0}.cc-area-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.cc-area-section-title{margin:0;font-size:.8125rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.cc-area .cc-recharts-chart,.cc-area .cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-area .cc-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr));gap:var(--space-md)}.cc-stat-sub{font-size:.75rem;color:var(--text-muted)}.cc-token-granularity{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--space-xs)}.cc-token-granularity .btn.active{border-color:var(--accent);color:var(--text);background:color-mix(in srgb,var(--accent) 14%,var(--surface-1))}@media(prefers-reduced-motion:reduce){.cc-token-count-live{animation:none}}@media(max-width:768px){.cc-area-section-header{align-items:flex-start;flex-direction:column}.cc-token-granularity{justify-content:flex-start;inline-size:100%}}.cc-table-wrap{max-inline-size:100%;border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);overflow-x:auto;overflow-y:hidden}.cc-table{inline-size:100%;border-collapse:collapse;font-size:.8125rem;font-variant-numeric:tabular-nums}.cc-table th,.cc-table td{padding:var(--space-sm) var(--space-md);text-align:right;border-bottom:1px solid var(--border-subtle);white-space:nowrap}.cc-table th:first-child,.cc-table td:first-child{text-align:left}.cc-table thead th{color:var(--text-muted);font-weight:600}.cc-table th.cc-sortable{cursor:pointer;user-select:none}.cc-table th.cc-sortable:hover{color:var(--text)}.cc-table tbody tr{cursor:pointer}.cc-table tbody tr.cc-row-selected{background:var(--surface-2)}.cc-table tbody tr.cc-row-selected td{color:var(--text)}.cc-sort-caret{margin-inline-start:var(--space-xs);font-size:.7em;color:var(--accent)}.cc-unavailable{color:var(--text-muted);cursor:help;border-bottom:1px dotted var(--border-subtle)}.cc-loading-inline{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-lg);color:var(--text-muted)}.cc-area-empty,.cc-area-error{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted);text-align:center}.cc-area-error{color:var(--color-error)}.cc-pricing-note{font-size:.75rem;color:var(--text-muted)}.cc-team-area{display:flex;flex-direction:column;gap:var(--space-lg);min-inline-size:0}.cc-team-ops-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-md);min-inline-size:0}.cc-team-ops-card{min-inline-size:0;padding:var(--space-md);border:thin solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-team-ops-card--org{grid-column:1 / -1}.cc-team-ops-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-block-end:var(--space-md)}.cc-team-ops-card-header h3{margin:0;color:var(--text);font-size:.9375rem}.cc-team-ops-card-header p,.cc-team-muted{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:.8125rem}.cc-team-error{margin:0;color:var(--color-error);font-size:.8125rem}.cc-team-status-pill{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--space-xs);color:var(--text-muted);font-size:.8125rem}.cc-team-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);margin:0 0 var(--space-md)}.cc-team-facts div{min-inline-size:0}.cc-team-facts dt{color:var(--text-muted);font-size:.75rem}.cc-team-facts dd{margin:var(--space-xs) 0 0;color:var(--text);font-size:.875rem;overflow-wrap:anywhere}.cc-team-action{gap:var(--space-xs)}.cc-team-ops-card--heartbeat{grid-column:1 / -1}.cc-team-heartbeat-multiplier{margin-block-start:var(--space-md)}.cc-team-heartbeat-multiplier .heartbeat-multiplier-controls{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md)}.cc-team-heartbeat-multiplier .heartbeat-multiplier-slider{flex:1 1 calc(var(--space-2xl) * 5);min-inline-size:calc(var(--space-2xl) * 4)}.cc-team-org-scroll{max-block-size:calc(var(--space-2xl) * 13);overflow:auto;overscroll-behavior:contain;cursor:grab}.cc-team-org-scroll.is-dragging{cursor:grabbing;user-select:none}.cc-team-org-roots,.cc-team-org-children{display:flex;gap:var(--space-sm);margin:0;padding:0;list-style:none}.cc-team-org-scroll[data-layout=vertical] .cc-team-org-roots,.cc-team-org-scroll[data-layout=vertical] .cc-team-org-children{flex-direction:column}.cc-team-org-scroll[data-layout=vertical] .cc-team-org-children{margin-block-start:var(--space-sm);margin-inline-start:var(--space-xl);padding-inline-start:var(--space-md);border-inline-start:thin solid var(--border-subtle)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-roots,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children{flex-direction:row;align-items:flex-start;justify-content:center;gap:var(--space-md)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children{position:relative;margin-block-start:var(--space-md);padding-block-start:var(--space-md)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:before,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:after,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children>.cc-team-org-item:before{position:absolute;content:"";pointer-events:none}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:before{inset-block-start:calc(var(--space-md) * -1);inset-inline-start:50%;block-size:var(--space-md);border-inline-start:thin solid var(--border-subtle)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children:after{inset-block-start:calc(var(--space-md) / 2);inset-inline:0;border-block-start:thin solid var(--border-subtle)}.cc-team-org-item{min-inline-size:max-content}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-item{position:relative;display:flex;flex-direction:column;align-items:center}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children>.cc-team-org-item:before{inset-block-start:calc(var(--space-md) * -1);inset-inline-start:50%;block-size:var(--space-md);border-inline-start:thin solid var(--border-subtle)}.cc-team-org-card{display:inline-flex;min-inline-size:calc(var(--space-2xl) * 5);max-inline-size:calc(var(--space-2xl) * 10);padding:var(--space-sm);border:thin solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-2);box-shadow:var(--shadow-sm)}.cc-team-org-card-header{display:flex;align-items:center;gap:var(--space-sm);min-inline-size:0}.cc-team-org-avatar{display:inline-flex;flex:0 0 auto}.cc-team-org-name{color:var(--text);font-size:.8125rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-team-org-badge{flex:0 0 auto;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--accent) 12%,var(--surface-1));color:var(--text-muted);font-size:.75rem;text-transform:capitalize}.cc-team-chart-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.cc-team-chart-panel{display:flex;flex-direction:column;gap:var(--space-md);min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);animation:cc-team-panel-reveal var(--duration-fast) ease-out both}.cc-team-spark-panel{grid-column:1 / -1}.cc-muted-hint,.cc-team-agent-role{color:var(--text-muted)}.cc-muted-hint{margin:0;font-size:.8125rem}.cc-team-agent-cell{display:inline-flex;align-items:center;gap:var(--space-sm);min-inline-size:0}.cc-team-agent-name,.cc-team-agent-role{display:block}.cc-team-agent-name{color:var(--text);font-weight:600}.cc-team-agent-role{font-size:.75rem;text-transform:capitalize}@keyframes cc-team-panel-reveal{0%{opacity:0;transform:translateY(var(--space-xs))}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.cc-team-chart-panel{animation:none}}@media(min-width:769px)and (max-width:1024px){.cc-area .cc-stat-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr))}.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-team-spark-panel{grid-column:auto}}@media(max-width:768px){.cc-team-ops-grid,.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-team-ops-card--org,.cc-team-ops-card--heartbeat,.cc-team-spark-panel{grid-column:auto}.cc-team-ops-card,.cc-team-chart-panel{padding:var(--space-sm)}.cc-team-ops-card-header{flex-direction:column}.cc-team-facts{grid-template-columns:minmax(0,1fr)}.cc-team-action{justify-content:center;inline-size:100%}.cc-team-org-scroll{max-block-size:calc(var(--space-2xl) * 10)}.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-roots,.cc-team-org-scroll[data-layout=horizontal] .cc-team-org-children{justify-content:flex-start;gap:var(--space-sm)}}.cc-system-refresh{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);color:var(--text-muted);font-size:.8125rem}.cc-system-refresh .btn-icon{flex:0 0 auto}.cc-system-node-selector{display:inline-flex;align-items:center;gap:var(--space-sm);color:var(--text)}.cc-system-node-selector .input{min-inline-size:10rem}.cc-system-gauges .cc-stat-card{min-block-size:100%}.cc-system-chart-grid{min-inline-size:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.cc-system-chart-grid .cc-stat-card{gap:var(--space-md)}.cc-system-section-title-with-icon{display:inline-flex;align-items:center;gap:var(--space-sm)}.cc-system-section-title-with-icon svg{color:var(--text-muted)}.cc-system-vitest-card{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-system-vitest-card .btn,.cc-system-toggle-row,.cc-system-threshold-row,.cc-system-threshold-controls{display:inline-flex;align-items:center;gap:var(--space-sm)}.cc-system-toggle-row,.cc-system-threshold-row{color:var(--text);font-size:.8125rem}.cc-system-threshold-controls input[type=range]{accent-color:var(--accent)}.cc-system-threshold-controls .input{inline-size:5rem}.cc-system-note{margin:0;color:var(--text-muted);font-size:.8125rem}.cc-system-note--error,.cc-system-value--critical{color:var(--color-error)}.cc-system-value--warning{color:var(--color-warning)}.cc-system-note--success{color:var(--color-success)}@media(max-width:768px){.cc-system-refresh{align-items:flex-start;justify-content:flex-start;flex-direction:column}.cc-system-chart-grid{grid-template-columns:minmax(0,1fr)}.cc-system-node-selector,.cc-system-vitest-card,.cc-system-toggle-row,.cc-system-threshold-row,.cc-system-threshold-controls{align-items:stretch;flex-direction:column;inline-size:100%}.cc-system-node-selector .input,.cc-system-vitest-card .btn,.cc-system-threshold-controls .input{inline-size:100%}}.cc-mission-control{display:flex;flex-direction:column;gap:var(--space-lg)}.cc-mc-columns{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-lg)}.cc-mc-section{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0}.cc-mc-muted{color:var(--text-muted);font-size:.85rem;margin:0}.cc-mc-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-xs)}.cc-mc-session,.cc-mc-node{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border-subtle, color-mix(in srgb, #ffffff 8%, transparent));border-radius:var(--radius-sm, 6px);background:var(--surface-1, color-mix(in srgb, #ffffff 2%, transparent));min-width:0}.cc-mc-node.inactive{opacity:.55}.cc-mc-session-purpose,.cc-mc-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cc-mc-session-meta,.cc-mc-node-meta{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}.cc-mc-badge{font-size:.7rem;text-transform:uppercase;letter-spacing:.03em;padding:2px 6px;border-radius:var(--radius-sm, 6px);background:var(--surface-2, color-mix(in srgb, #3b82f6 15%, transparent));color:var(--text)}.cc-mc-badge.inactive{background:var(--surface-2, color-mix(in srgb, #ffffff 6%, transparent));color:var(--text-muted)}.cc-mc-task,.cc-mc-node-count{font-size:.75rem;color:var(--text-muted)}@media(max-width:768px),(max-height:480px){.cc-mc-columns{grid-template-columns:1fr}}.theme-dropdown{position:relative;display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0}.theme-dropdown.open{z-index:10002}.theme-dropdown-trigger{justify-content:space-between;gap:var(--space-sm);inline-size:100%;min-inline-size:0}.theme-dropdown-trigger .theme-option-swatch,.theme-dropdown-option .theme-option-swatch{flex:0 0 auto}.theme-dropdown-trigger-label,.theme-dropdown-option-label{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.theme-dropdown-modes{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.theme-dropdown-mode-btn{gap:var(--space-xs)}.theme-dropdown-mode-btn.active{border-color:var(--accent);color:var(--accent)}.theme-dropdown-popover{position:absolute;z-index:10002;inset-block-start:calc(100% + var(--space-xs));inset-inline:0;padding:var(--space-sm);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);box-shadow:var(--shadow-lg)}.theme-dropdown-list{display:grid;gap:var(--space-xs);max-block-size:min(60vh,calc(var(--space-2xl) * 12));overflow-y:auto;overscroll-behavior:contain}.theme-dropdown-option{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);inline-size:100%;padding:var(--space-sm);border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text);cursor:pointer;text-align:start}.theme-dropdown-option:hover,.theme-dropdown-option:focus-visible,.theme-dropdown-option.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);outline:none}@media(max-width:768px){.theme-dropdown.open{z-index:auto}.theme-dropdown-popover{position:static;z-index:auto;margin-block-start:var(--space-xs)}.theme-dropdown-list{max-block-size:min(50vh,calc(var(--space-2xl) * 10))}}.cc-controls{min-inline-size:0}.cc-controls-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);align-items:stretch}.cc-controls-card{min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-controls-card--concurrency{grid-column:1 / -1}.cc-controls-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-block-end:var(--space-md)}.cc-controls-card-header h3{margin:0;color:var(--text);font-size:.9375rem}.cc-controls-card-header p,.cc-controls-muted{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:.8125rem}.cc-controls-error{margin:0;color:var(--color-error);font-size:.8125rem}.cc-controls-status-pill{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--space-xs);color:var(--text-muted);font-size:.8125rem}.cc-controls-action{gap:var(--space-xs)}.cc-controls-save-state{flex:0 0 auto;color:var(--text-muted);font-size:.8125rem}.cc-controls-save-state--saved{color:var(--color-success)}.cc-controls-save-state--error{color:var(--color-error)}.cc-controls-sliders{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-md)}.cc-controls-slider{display:flex;min-inline-size:0;flex-direction:column;gap:var(--space-sm);color:var(--text);font-size:.8125rem}.cc-controls-slider-label{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.cc-controls-slider-label strong{color:var(--accent);font-variant-numeric:tabular-nums}.cc-controls-slider input[type=range],.cc-controls-touch-slider{inline-size:100%;min-block-size:var(--space-xl);accent-color:var(--accent);touch-action:pan-y}@media(max-width:768px){.cc-controls-grid{grid-template-columns:minmax(0,1fr)}.cc-controls-card{padding:var(--space-sm)}.cc-controls-card-header{flex-direction:column}.cc-controls-sliders{grid-template-columns:minmax(0,1fr)}.cc-controls-slider input[type=range],.cc-controls-touch-slider{min-block-size:var(--space-2xl)}.cc-controls-slider input[type=range]::-webkit-slider-thumb,.cc-controls-touch-slider::-webkit-slider-thumb{inline-size:var(--space-xl);block-size:var(--space-xl)}.cc-controls-slider input[type=range]::-moz-range-thumb,.cc-controls-touch-slider::-moz-range-thumb{inline-size:var(--space-xl);block-size:var(--space-xl)}.cc-controls-action{justify-content:center;inline-size:100%}}.reliability-view{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-lg);height:100%;min-height:0;min-width:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.reliability-card{padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card)}.reliability-loading{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);height:100%;min-width:0;padding:var(--space-2xl);color:var(--text-muted)}.reliability-error{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);height:100%;min-width:0;padding:var(--space-2xl);text-align:center}.reliability-error p{color:var(--text-muted);margin:0}.reliability-headline-card{display:flex;flex-direction:column;gap:var(--space-sm)}.reliability-headline{font-size:1.75rem;font-weight:700}.reliability-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-lg)}.reliability-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.reliability-chart-section{display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0;margin-block-start:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.reliability-chart-section h4{margin:0;color:var(--text-muted);font-size:var(--font-size-xs);font-weight:600}.reliability-chart-section .cc-recharts-chart,.reliability-chart-section .cc-recharts-empty{block-size:clamp(calc(var(--space-2xl) * 4),34vh,calc(var(--space-2xl) * 7))}.reliability-table{width:100%;border-collapse:collapse;margin-top:var(--space-sm)}.reliability-table th,.reliability-table td{text-align:left;padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border)}.reliability-stat-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-xs) 0}.reliability-muted{color:var(--text-muted)}.reliability-details{margin-top:var(--space-sm)}.reliability-details summary{color:var(--text-muted);cursor:pointer}.reliability-details-content{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text-muted)}.reliability-histogram{list-style:none;margin:var(--space-sm) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.reliability-histogram li{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,6fr) minmax(0,1fr);align-items:center;gap:var(--space-sm)}.reliability-histogram-bar-wrap{width:100%;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-info) 15%,transparent);overflow:hidden}.reliability-histogram-bar{height:var(--space-md);background:var(--color-info)}@media(max-width:768px){.reliability-view,.reliability-loading,.reliability-error{padding-bottom:calc(var(--space-lg) + var(--mobile-nav-height) + env(safe-area-inset-bottom,0px) + var(--standalone-bottom-gap))}.reliability-grid{grid-template-columns:minmax(0,1fr)}.reliability-section-header{flex-direction:column;align-items:flex-start}.reliability-chart-section{padding:var(--space-sm)}.reliability-chart-section .cc-recharts-chart,.reliability-chart-section .cc-recharts-empty{block-size:clamp(calc(var(--space-2xl) * 3),46vh,calc(var(--space-2xl) * 6))}}.nodes-view{--nodes-view-spin-duration: calc(var(--duration-slow) * 4);--nodes-view-pulse-duration: calc(var(--duration-slow) * 5);display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-sm) var(--space-md) var(--space-xl)}.nodes-view-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-sm)}.nodes-view-title{display:flex;align-items:center;gap:var(--space-sm)}.nodes-view-title h2{margin:0;display:flex;align-items:center;gap:var(--space-sm)}.nodes-view-count{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) / 4)}.nodes-view-actions{display:flex;gap:var(--space-sm)}.nodes-view-close{margin-left:auto}.nodes-view-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(var(--space-xl) * 5.833),1fr));gap:var(--space-sm)}.nodes-view-stat{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md);display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.nodes-view-stat span{display:inline-flex;align-items:center;gap:var(--space-sm);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.nodes-view-stat strong{font-size:calc(var(--space-lg) + var(--space-xs) / 2)}.nodes-view-stat--online strong{color:var(--color-success)}.nodes-view-stat--offline strong{color:var(--color-error)}.nodes-view-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-lg) * 20),1fr));gap:var(--space-md)}.nodes-view-empty{padding:var(--space-xl);border:1px dashed var(--border);border-radius:var(--radius-md);text-align:center;color:var(--text-muted);display:flex;flex-direction:column;align-items:center;gap:var(--space-md)}.nodes-view-error{color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) / 4)}.node-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-md);cursor:pointer;transition:border-color var(--transition-fast),transform var(--transition-fast)}.node-card:hover{border-color:var(--accent);transform:translateY(calc(var(--space-xs) * -.25))}.node-card:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.node-card--loading{min-height:calc(var(--space-xl) * 9.167);opacity:.55;pointer-events:none}.node-card__header{display:flex;align-items:center;justify-content:space-between}.node-card__title-wrap{display:flex;align-items:center;gap:var(--space-sm)}.node-card__icon{width:calc(var(--space-lg) * 2.125);height:calc(var(--space-lg) * 2.125);border-radius:var(--radius-sm);display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}.node-card__name{margin:0;font-size:calc(var(--space-md) + var(--space-xs));line-height:1.25}.node-card__meta-row{margin-top:var(--space-xs);display:flex;align-items:center;gap:var(--space-xs)}.node-card__type-badge{border:1px solid var(--border);border-radius:var(--radius-pill);padding:var(--space-xs) var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.node-card__status{display:inline-flex;align-items:center;gap:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs) * .75);font-weight:600}.node-card__status-indicator{width:var(--space-sm);height:var(--space-sm);border-radius:50%}.node-card__status--online .node-card__status-indicator{background:var(--color-success)}.node-card__status--offline .node-card__status-indicator,.node-card__status--error .node-card__status-indicator{background:var(--color-error)}.node-card__status--connecting .node-card__status-indicator{background:var(--color-warning)}.node-card__auth-indicator{display:inline-flex;align-items:center;margin-left:var(--space-xs);vertical-align:middle}.node-card__url{font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted);word-break:break-all}.node-card__metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.node-card__metric{display:flex;flex-direction:column;gap:var(--space-xs)}.node-card__metric-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75);text-transform:uppercase;letter-spacing:.03em}.node-card__metric-value{font-size:calc(var(--space-md) + var(--space-xs));font-weight:600}.node-card__sync{display:flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.node-card__sync-dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%;flex-shrink:0}.node-card__sync-time{color:var(--text-muted)}.nodes-view-stat--synced strong{color:var(--color-success)}.node-card__actions{display:flex;gap:var(--space-xs);flex-wrap:wrap}.node-card__action{display:inline-flex;align-items:center;gap:var(--space-xs)}.node-card__action--remove{margin-left:auto}.node-card__action--remove:not(.btn-danger){color:var(--color-error);border-color:color-mix(in srgb,var(--color-error) 45%,var(--border))}.node-card__action--remove.is-armed{background:color-mix(in srgb,var(--color-error) 14%,transparent)}.node-card__docker-badge{display:inline-flex;align-items:center;gap:var(--space-xs);border-radius:var(--radius-pill);padding:var(--space-xs) var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs) * .75);background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.node-card__docker-meta{display:flex;gap:var(--space-sm);margin-top:var(--space-xs);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.node-card__docker-meta span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mesh-topology{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);min-height:calc(var(--space-2xl) * 6.25);padding:var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md)}.mesh-topology__svg{width:100%;max-width:calc(var(--space-2xl) * 12.5);height:auto;aspect-ratio:1}.mesh-topology__node{transition:filter var(--transition-fast)}.mesh-topology__node:hover{filter:brightness(1.1)}.mesh-topology__node-circle{stroke:var(--border);stroke-width:calc(var(--space-xs) / 2);transition:fill var(--transition-fast)}.mesh-topology__node-label{font-size:calc(var(--space-sm) + var(--space-xs) * .75);fill:var(--text);font-weight:500}.mesh-topology__node-type-badge{fill:color-mix(in srgb,var(--surface) 75%,var(--bg));stroke:var(--border);stroke-width:calc(var(--space-xs) / 4)}.mesh-topology__node-type-text{font-size:calc(var(--space-sm) + var(--space-xs) / 2);font-weight:700;fill:var(--text-muted);text-transform:uppercase;letter-spacing:.03em}.mesh-topology__link{stroke:var(--border);stroke-width:calc((var(--space-xs) * 3) / 8);stroke-dasharray:var(--space-xs),var(--space-xs);opacity:.6}.mesh-topology__legend{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.mesh-topology__legend-item{display:flex;align-items:center;gap:var(--space-sm)}.mesh-topology__notice{margin:var(--space-md) 0 0;text-align:center;color:var(--text-dim);font-size:calc(var(--space-sm) + var(--space-xs))}.mesh-topology__legend-dot{width:calc(var(--space-sm) + var(--space-xs) / 2);height:calc(var(--space-sm) + var(--space-xs) / 2);border-radius:50%;border:1px solid var(--border)}.mesh-topology--empty{justify-content:center}.mesh-topology__empty-state{text-align:center;color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) / 2)}.connect-node-modal{width:min(calc(var(--space-lg) * 30),calc(100vw - (var(--space-lg) * 2)))}.connect-node-form{display:flex;flex-direction:column;gap:var(--space-md)}.connect-node-form .form-group{padding:0;margin-top:0}.connect-node-form .form-group:last-of-type{margin-bottom:0}.connect-node-field{display:flex;flex-direction:column;gap:var(--space-xs)}.connect-node-field__input{width:100%}.connect-node-field__input[aria-invalid=true]{border-color:var(--color-error);background:color-mix(in srgb,var(--color-error) 5%,var(--surface))}.connect-node-field__input[aria-invalid=true]:focus-visible{border-color:var(--color-error);box-shadow:var(--glow-danger)}.connect-node-url-preview{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:color-mix(in srgb,var(--surface) 50%,var(--bg));border-radius:var(--radius-sm);border-left:var(--space-xs) solid var(--accent);font-size:calc(var(--space-sm) + var(--space-xs))}.connect-node-url-preview-label{color:var(--text-muted)}.connect-node-url-preview code{font-family:var(--font-mono);color:var(--text);font-size:calc(var(--space-sm) + var(--space-xs))}.connect-node-actions{display:flex;justify-content:flex-end;gap:var(--space-sm);padding:var(--modal-padding);border-top:1px solid var(--border)}.nodes-view-topology{margin-bottom:var(--space-md)}.nodes-view-section-title{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:600;color:var(--text);margin:0 0 var(--space-sm)}.nodes-view .node-status-indicator{display:inline-flex;align-items:center;gap:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs) * .625)}.nodes-view .node-status-indicator__label,.nodes-view .node-status-indicator--local{color:var(--text-muted)}.nodes-view .node-status-indicator--remote{color:var(--text)}.nodes-view .node-status-indicator__dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%;position:relative;display:inline-block}.nodes-view .node-status-indicator__dot--online{background:var(--color-success);box-shadow:var(--glow-success)}.nodes-view .node-status-indicator__dot--offline,.nodes-view .node-status-indicator__dot--error{background:var(--color-error)}.nodes-view .node-status-indicator__dot--connecting{background:var(--color-warning);animation:pulse-warning var(--nodes-view-pulse-duration) ease-in-out infinite}.nodes-view .node-status-indicator__spinner{position:absolute;inset:0;border:calc(var(--space-xs) / 2) solid transparent;border-top-color:currentColor;border-radius:50%;animation:spin var(--nodes-view-spin-duration) linear infinite}.nodes-view .node-status-indicator__name{font-weight:500}.nodes-view .node-status-indicator__details{font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}@keyframes pulse-warning{0%,to{opacity:1;box-shadow:var(--glow-warning)}50%{opacity:.6;box-shadow:var(--glow-warning)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation:spin var(--nodes-view-spin-duration) linear infinite}@media(max-width:768px){.nodes-view{padding-inline:var(--space-sm)}.nodes-view-grid,.node-card__metrics{grid-template-columns:1fr}.node-card__docker-badge,.node-card__docker-meta{gap:var(--space-xs)}.node-card__docker-meta span{max-width:calc(var(--space-2xl) * 4.5)}.connect-node-modal{width:calc(100vw - (var(--space-md) * 2))}.connect-node-field__input{min-height:calc(var(--space-2xl) + var(--space-md))}.nodes-view-header{flex-wrap:wrap;gap:var(--space-sm)}.nodes-view-title h2{font-size:calc(var(--space-md) + var(--space-xs))}.nodes-view-title h2 svg{flex-shrink:0}.nodes-view-count{font-size:calc(var(--space-sm) + var(--space-xs))}.nodes-view-actions{flex-wrap:wrap;gap:var(--space-sm);width:100%;justify-content:flex-end}.nodes-view-close{min-height:calc(var(--space-xl) + var(--space-md));min-width:calc(var(--space-xl) + var(--space-md))}.nodes-view-actions .btn{min-height:calc(var(--space-xl) + var(--space-md))}.nodes-view-stats{grid-template-columns:repeat(2,1fr);gap:var(--space-sm)}.nodes-view-stat{padding:var(--space-xs) var(--space-sm)}.nodes-view-stat span{font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.nodes-view-stat strong{font-size:calc(var(--space-md) + var(--space-xs) / 2)}.nodes-view-empty{padding:var(--space-xl) var(--space-md);text-align:center}.nodes-view-error{padding:var(--space-md);margin:var(--space-md) 0}.nodes-view-topology{padding:var(--space-sm) 0}.nodes-view-section-title{font-size:calc(var(--space-md) + var(--space-xs) / 4)}}.add-node-modal{width:min(calc(var(--space-lg) * 32.5),calc(100vw - (var(--space-lg) * 2)))}.add-node-modal__body{display:flex;flex-direction:column;gap:var(--space-md)}.add-node-modal__row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.add-node-modal__fieldset{border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__fieldset legend{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .625);padding:0 var(--space-xs)}.add-node-modal__storage-toggle{border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-sm)}.add-node-modal__advanced-btn{align-self:flex-start}.add-node-modal__advanced{border:1px dashed var(--border);border-radius:var(--radius-sm);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__textarea{min-height:calc(var(--space-2xl) * 2.25);resize:vertical;font-family:var(--font-mono)}.add-node-modal__description{font-size:calc(var(--space-sm) + var(--space-xs) * .625);color:var(--text-muted);margin-bottom:var(--space-sm);padding:0}.add-node-modal__field{display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__field>span{font-size:calc(var(--space-sm) + var(--space-xs) * .625);font-weight:600;color:var(--text-muted)}.add-node-modal__field .input{width:100%;padding:var(--space-sm) var(--space-md);font-size:calc(var(--space-md) + var(--space-xs) * .5)}.add-node-modal__field .input:focus-visible{border-color:var(--accent);box-shadow:var(--focus-ring-strong)}.add-node-modal__field .input[aria-invalid=true]{border-color:var(--color-error);background:color-mix(in srgb,var(--color-error) 5%,var(--surface))}.add-node-modal__field .input[aria-invalid=true]:focus{box-shadow:var(--glow-danger)}.add-node-modal__hint{font-size:calc(var(--space-sm) + var(--space-xs) * .375);color:var(--text-dim);margin-top:calc(var(--space-xs) / 2)}.add-node-modal__error{margin-top:calc(var(--space-xs) / 2)}.add-node-modal__type-toggle{display:flex;gap:0;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;background:var(--surface)}.add-node-modal__type-btn{flex:1;padding:calc(var(--space-sm) + var(--space-xs) / 2) var(--space-lg);border:none;background:transparent;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .625);font-weight:500;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.add-node-modal__type-btn:hover:not(:disabled){background:color-mix(in srgb,var(--bg) 50%,var(--surface))}.add-node-modal__type-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);z-index:1}.add-node-modal__type-btn.active{background:var(--accent);color:var(--bg)}.add-node-modal__type-btn:disabled{opacity:.6;cursor:not-allowed}.add-node-modal__remote-fields{display:grid;gap:var(--space-sm)}.add-node-modal__discovery-actions{display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__discovery-state{font-size:calc(var(--space-sm) + var(--space-xs) * .375);color:var(--color-success)}.add-node-modal__discovered-list{display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__discovered-card{padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.add-node-modal__discovered-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.add-node-modal__projects{display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__projects-title{margin:0;font-size:calc(var(--space-md) + var(--space-xs) * .5)}.add-node-modal__project-list{display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__project-card{padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.add-node-modal__project-toggle{margin:0}@media(max-width:768px){.add-node-modal{width:calc(100vw - (var(--space-md) * 2))}.add-node-modal__type-toggle{width:100%}.add-node-modal__type-btn{flex:1;padding:var(--space-md) var(--space-lg)}.add-node-modal__field input{min-height:calc(var(--space-2xl) + var(--space-md));font-size:calc(var(--space-md) + var(--space-xs) * .5)}.add-node-modal__row{grid-template-columns:1fr}.add-node-modal__project-card{padding:var(--space-md)}.add-node-modal__discovered-row{flex-direction:column;align-items:flex-start}}.docker-tls-config{display:flex;flex-direction:column;gap:var(--space-md)}.docker-tls-config__fields{display:grid;gap:var(--space-md)}.docker-tls-config__field{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-tls-config__field label{color:var(--text-muted)}@media(max-width:768px){.docker-tls-config .input{min-height:calc(var(--mobile-nav-height) - var(--space-sm))}}.docker-target-selector{display:flex;flex-direction:column;gap:var(--space-md)}.docker-target-selector__modes{display:flex;gap:var(--space-sm);flex-wrap:wrap}.docker-target-selector__mode-active{border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.docker-target-selector__panel{display:grid;gap:var(--space-md)}.docker-target-selector__field{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-target-selector__field label{color:var(--text-muted)}.docker-target-selector__context-row{display:grid;gap:var(--space-sm);grid-template-columns:minmax(0,1fr) auto;align-items:center}.docker-target-selector__status{color:var(--text-muted)}.docker-target-selector__success{color:var(--color-success)}.docker-target-selector__error{color:var(--color-error)}@media(max-width:768px){.docker-target-selector__modes .btn{min-height:calc(var(--mobile-nav-height) - var(--space-sm))}}.docker-onboarding{width:min(calc(var(--space-2xl) * 22.5),calc(100vw - (var(--space-lg) * 2)))}.docker-onboarding__body{display:flex;flex-direction:column;gap:var(--space-md)}.docker-onboarding__section{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.docker-onboarding__section-title{margin:0;display:flex;align-items:center;gap:var(--space-sm);font-size:calc(var(--space-md) + var(--space-xs) / 2)}.docker-onboarding__field{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-onboarding__inline-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.docker-onboarding__radio-group{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}.docker-onboarding__type-toggle{display:flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.docker-onboarding__type-btn{flex:1;border:none;background:var(--surface);color:var(--text);padding:var(--space-sm) var(--space-md);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.docker-onboarding__type-btn+.docker-onboarding__type-btn{border-left:1px solid var(--border)}.docker-onboarding__type-btn.is-active{background:var(--todo);color:var(--bg)}.docker-onboarding__type-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);position:relative;z-index:1}.docker-onboarding__checkbox-group{display:flex;flex-direction:column;gap:var(--space-xs)}.docker-onboarding__kv-list{display:flex;flex-direction:column;gap:var(--space-sm)}.docker-onboarding__kv-list h5{margin:0;font-size:calc(var(--space-sm) + var(--space-xs))}.docker-onboarding__kv-row{display:grid;gap:var(--space-sm);align-items:center}.docker-onboarding__kv-row--env{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto}.docker-onboarding__kv-row--mount{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto auto}.docker-onboarding__kv-add{align-self:flex-start}.docker-onboarding__advanced-toggle{border:none;background:none;color:var(--text);padding:var(--space-xs);margin:calc(var(--space-xs) * -1);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;font-size:calc(var(--space-md) + var(--space-xs) / 2);font-weight:600}.docker-onboarding__advanced-toggle:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.docker-onboarding__advanced-toggle svg{transition:transform var(--transition-fast)}.docker-onboarding__advanced-toggle.is-expanded svg{transform:rotate(180deg)}.docker-onboarding__advanced-content{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--transition-fast)}.docker-onboarding__advanced-content>div{overflow:hidden;display:flex;flex-direction:column;gap:var(--space-sm)}.docker-onboarding__advanced-content.is-expanded{grid-template-rows:1fr}.docker-onboarding__tls-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.docker-onboarding__tls-fields .docker-onboarding__field:first-child{grid-column:1 / -1}@media(max-width:768px){.docker-onboarding{width:calc(100vw - (var(--space-md) * 2))}.docker-onboarding__inline-fields,.docker-onboarding__tls-fields,.docker-onboarding__kv-row{grid-template-columns:1fr}.docker-onboarding .input,.docker-onboarding .select,.docker-onboarding .btn{min-height:calc(var(--space-2xl) + var(--space-md))}.docker-onboarding__advanced-content{transition:none}}.settings-sync-log{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-sync-log__header{display:flex;align-items:center;gap:var(--space-xs);cursor:pointer;padding:var(--space-xs) 0;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text);font:inherit;text-align:left;transition:background-color var(--transition-fast)}.settings-sync-log__header:hover{background:var(--surface-hover)}.settings-sync-log__header:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);background:var(--surface-hover)}.settings-sync-log__chevron{transform:rotate(0);transition:transform var(--transition-fast)}.settings-sync-log__chevron--expanded{transform:rotate(180deg)}.settings-sync-log__filters{display:flex;gap:var(--space-sm);align-items:center;flex-wrap:wrap}.settings-sync-log__filters label{display:flex;align-items:center;gap:var(--space-xs);font-size:12px;color:var(--text-muted)}.settings-sync-log__filters select{font-size:12px;padding:4px 8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text)}.settings-sync-log__filters select:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.settings-sync-log__list{display:flex;flex-direction:column}.settings-sync-log__entry{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs) 0;border-bottom:1px solid var(--border)}.settings-sync-log__entry:last-child{border-bottom:none}.settings-sync-log__entry-timestamp{font-size:12px;color:var(--text-muted);min-width:140px}.settings-sync-log__entry-direction{display:flex;align-items:center;color:var(--text-muted)}.settings-sync-log__entry-result{display:inline-flex;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:500}.settings-sync-log__badge--success{background:color-mix(in srgb,var(--color-success, #2da44e) 14%,transparent);color:var(--color-success, #2da44e)}.settings-sync-log__badge--conflict{background:color-mix(in srgb,var(--color-warning, #d29922) 14%,transparent);color:var(--color-warning, #d29922)}.settings-sync-log__badge--error{background:color-mix(in srgb,var(--color-error, #cf222e) 14%,transparent);color:var(--color-error, #cf222e)}.settings-sync-log__entry-node{font-weight:500;font-size:12px}.settings-sync-log__entry-details{font-size:12px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.settings-sync-log__empty{text-align:center;color:var(--text-muted);padding:var(--space-md);font-size:13px}.node-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,var(--accent) 14%,transparent);border:1px solid color-mix(in srgb,var(--accent) 36%,transparent);color:var(--text-muted);font-size:11px;width:fit-content;margin-top:4px}@media(max-width:768px){.settings-sync-conflict-modal__diff-panel{grid-template-columns:1fr}}.settings-sync-conflict-modal{max-width:860px;width:min(860px,calc(100vw - 32px))}.settings-sync-conflict-modal__conflict-list{display:flex;flex-direction:column;gap:var(--space-md);max-height:min(50vh,400px);overflow-y:auto}.settings-sync-conflict-modal__conflict-item{border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-md)}.settings-sync-conflict-modal__key{font-weight:600;font-family:monospace;margin-bottom:var(--space-sm)}.settings-sync-conflict-modal__diff-panel{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-sm)}.settings-sync-conflict-modal__diff-side{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.settings-sync-conflict-modal__diff-label{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding:4px 8px;border-bottom:1px solid var(--border);background:var(--surface)}.settings-sync-conflict-modal__diff-content{padding:var(--space-xs) var(--space-sm);white-space:pre;font-family:monospace;font-size:12px;line-height:1.5;overflow-x:auto}.settings-sync-conflict-modal__resolution{display:flex;gap:var(--space-md);align-items:center}.settings-sync-conflict-modal__resolution label{display:flex;align-items:center;gap:var(--space-xs);cursor:pointer}.settings-sync-conflict-modal__resolution input[type=radio]{cursor:pointer}.settings-sync-conflict-modal__manual-input{width:100%;font-family:monospace;font-size:12px;min-height:80px;margin-top:var(--space-xs);padding:var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);resize:vertical}.settings-sync-conflict-modal__manual-input:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.settings-sync-conflict-modal__bulk-actions{display:flex;gap:var(--space-xs);padding-top:var(--space-sm);border-top:1px solid var(--border)}.settings-sync-conflict-modal__footer{display:flex;justify-content:flex-end;gap:var(--space-xs)}.node-detail-modal{max-width:calc(var(--space-lg) * 53.75);width:min(calc(var(--space-lg) * 53.75),calc(100vw - (var(--space-lg) * 2)))}.node-detail-modal__body{display:flex;flex-direction:column;gap:var(--space-md);max-height:min(72vh,calc(var(--space-lg) * 42.5));overflow-y:auto}.node-detail-modal__section{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.node-detail-modal__section h4{margin:0 0 var(--space-sm) 0}.node-detail-modal__section-header{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.node-detail-modal__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.node-detail-modal__field{display:flex;flex-direction:column;gap:var(--space-xs)}.node-detail-modal__field--full{grid-column:span 2}.node-detail-modal__field span{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__edit-actions{margin-top:var(--space-sm);display:flex;gap:var(--space-xs)}.node-detail-modal__project-list{margin:0;padding-left:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}.node-detail-modal__project-item{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm)}.node-detail-modal__project-item code{color:var(--text-muted)}.node-detail-modal__empty{margin:0;color:var(--text-muted)}.node-detail-modal__health-row{display:flex;flex-wrap:wrap;gap:var(--space-md)}.node-detail-modal__actions{justify-content:space-between}.node-detail-modal__docker-config{display:flex;flex-direction:column;gap:var(--space-sm)}.node-detail-modal__docker-toggle{align-self:flex-start}.node-detail-modal__docker-toggle-icon--expanded{transform:rotate(180deg)}.node-detail-modal__docker-config-content{display:flex;flex-direction:column;gap:var(--space-sm)}.node-detail-modal__docker-list{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__docker-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--space-sm)}.node-detail-modal__docker-stack{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__checkbox{display:flex;align-items:center;gap:var(--space-sm);color:var(--text-muted)}.node-detail-modal__docker-meta{display:flex;flex-wrap:wrap;gap:var(--space-sm);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__docker-recreate{color:var(--color-warning)}.node-detail-modal__docker-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__textarea{min-height:calc(var(--space-2xl) * 2.25);resize:vertical;font-family:var(--font-mono)}.node-detail-modal__sync-status{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm);margin-bottom:var(--space-sm)}.node-detail-modal__sync-dot{width:calc(var(--space-sm) + var(--space-xs) / 2);height:calc(var(--space-sm) + var(--space-xs) / 2);border-radius:50%;flex-shrink:0}.node-detail-modal__sync-dot--synced{background:var(--color-success)}.node-detail-modal__sync-dot--diff,.node-detail-modal__sync-dot--pending{background:var(--color-warning)}.node-detail-modal__sync-dot--error{background:var(--color-error)}.node-detail-modal__sync-dot--never{background:var(--text-muted)}.node-detail-modal__sync-diff{color:var(--color-warning);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__sync-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-sm)}.node-detail-modal__sync-error{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-error) 30%,transparent);border-radius:var(--radius-sm);color:var(--color-error);font-size:calc(var(--space-sm) + var(--space-xs))}.node-detail-modal__sync-error-dismiss{background:transparent;border:none;color:var(--color-error);cursor:pointer;padding:calc(var(--space-xs) / 2);display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm)}.node-detail-modal__sync-error-dismiss:hover{background:color-mix(in srgb,var(--color-error) 20%,transparent)}.node-detail-modal__sync-error-dismiss:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);background:color-mix(in srgb,var(--color-error) 20%,transparent)}.docker-management{display:flex;flex-direction:column;gap:var(--space-md)}.docker-management__status-card{display:flex;flex-direction:column;gap:var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.docker-management__status-row{display:inline-flex;align-items:center;gap:var(--space-sm)}.docker-management__status-dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%}.docker-management__status-dot--success{background:var(--color-success)}.docker-management__status-dot--warning{background:var(--color-warning)}.docker-management__status-dot--error{background:var(--color-error)}.docker-management__status-meta{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));display:flex;gap:var(--space-md);flex-wrap:wrap}.docker-management__actions{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.docker-management__info-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.docker-management__log-viewer{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.docker-management__log-viewer-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.docker-management__log-viewer pre{margin:0;max-height:calc(var(--space-2xl) * 9.375);overflow-y:auto;font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text);white-space:pre-wrap}.docker-management__env-list{margin:var(--space-sm) 0 0}.docker-management__env-list div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:var(--space-sm);padding:var(--space-xs) 0}.docker-management__env-list dt{color:var(--text-muted);font-family:var(--font-mono)}.docker-management__env-list dd{margin:0;font-family:var(--font-mono);word-break:break-all}.docker-management__mounts-list{margin:var(--space-sm) 0 0;padding-left:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}.docker-management__mounts-list li{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}@media(max-width:768px){.node-detail-modal__grid,.node-detail-modal__docker-grid{grid-template-columns:1fr}.node-detail-modal__field--full{grid-column:span 1}.docker-management__actions{flex-direction:column}.docker-management__actions .btn{width:100%;justify-content:center}.docker-management__info-grid,.node-detail-modal__docker-row{grid-template-columns:1fr}.node-detail-modal__docker-toggle,.node-detail-modal__docker-config-content .btn{min-height:calc(var(--space-lg) * 2.25)}.docker-management__env-list div{grid-template-columns:1fr}.docker-management__mounts-list li{flex-direction:column;align-items:flex-start}.docker-management__log-viewer pre{max-height:calc(var(--space-2xl) * 6.25)}}.cc-area[data-testid=cc-area-funnel] .cc-area-section+.cc-area-section{margin-top:var(--space-lg)}.command-center{display:flex;flex:1;flex-direction:column;gap:0;min-height:0;inline-size:100%;padding:0}.cc-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:var(--space-md)}.cc-header{box-sizing:border-box;min-block-size:var(--view-header-min-height);padding:var(--space-lg) var(--space-xl);background:var(--surface)}@media(min-width:769px)and (min-height:481px){.cc-header{height:var(--view-header-min-height)}.cc-header>.cc-date-range{max-height:var(--view-header-content-row)}.cc-header>.cc-date-range .cc-date-range-trigger{min-height:0;max-height:var(--view-header-content-row);white-space:nowrap}}.cc-title{display:flex;align-items:center;gap:var(--space-sm);margin:0;font-size:1.125rem;font-weight:600;color:var(--text)}.cc-title svg{flex-shrink:0;color:var(--todo)}.cc-tablist{display:flex;flex-shrink:0;flex-wrap:wrap;gap:var(--space-xs);padding:var(--space-md) var(--space-xl) 0;border-bottom:1px solid var(--border-subtle)}.cc-tab{appearance:none;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);padding:var(--space-sm) var(--space-md);cursor:pointer;font-size:.8125rem;transition:color var(--transition-fast),border-color var(--transition-fast)}.cc-tab:hover{color:var(--text)}.cc-tab.active{color:var(--text);border-bottom-color:var(--accent)}.cc-tabpanel{flex:1;min-height:0;min-inline-size:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;outline:none;padding:var(--space-lg) var(--space-xl) var(--space-xl);-webkit-overflow-scrolling:touch}@media(max-width:768px){.cc-tabpanel{padding-bottom:calc(var(--space-lg) + env(safe-area-inset-bottom,0) + var(--standalone-bottom-gap))}}.cc-overview{min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-lg)}.cc-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr));gap:var(--space-md)}.cc-stat-card{container-type:inline-size;display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-stat-label{font-size:.8125rem;color:var(--text-muted)}.cc-stat-value{max-width:100%;min-width:0;overflow:hidden;white-space:nowrap;font-size:clamp(.95rem,16cqi,2.4rem);line-height:1.1;font-variant-numeric:tabular-nums;color:var(--text)}.cc-stat-card--gauge{align-items:center;text-align:center}.cc-github-backfill-actions,.cc-productivity-backfill-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}.cc-github-backfill-status,.cc-productivity-backfill-status{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text-muted);font-size:.75rem}.cc-github-backfill-status--error,.cc-productivity-backfill-status--error{color:var(--color-error)}.cc-github-backfill-status--warning,.cc-productivity-backfill-status--warning{color:var(--color-warning)}@media(max-width:768px){.cc-github-backfill-actions,.cc-productivity-backfill-actions{align-items:stretch;flex-direction:column}.cc-github-backfill-actions .btn,.cc-productivity-backfill-actions .btn{justify-content:center;inline-size:100%}}.cc-live-strip{position:relative;display:grid;grid-template-columns:minmax(calc(var(--space-2xl) * 5),1fr) minmax(calc(var(--space-2xl) * 8),2fr) minmax(calc(var(--space-2xl) * 5),1fr);align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 7%,transparent),transparent),var(--surface-1);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 9%,transparent);overflow:hidden;font-size:.8125rem}.cc-live-strip:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 10%,transparent),transparent);opacity:.25;transform:translate(-100%);animation:cc-live-signal-sweep calc(var(--duration-slow) * 8) linear infinite;pointer-events:none}.cc-live-strip-heading,.cc-live-strip-metrics,.cc-live-trend{min-inline-size:0;position:relative;z-index:1}.cc-live-strip-heading{display:flex;align-items:center;gap:var(--space-sm)}.cc-live-strip-label{color:var(--text);font-weight:600}.cc-live-strip-metrics{min-inline-size:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm)}.cc-live-metric{container-type:inline-size;min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--surface-2) 70%,transparent);animation:cc-live-signal-pulse calc(var(--duration-slow) * 6) ease-in-out infinite}.cc-live-metric-value{max-width:100%;min-width:0;overflow:hidden;white-space:nowrap;color:var(--text);font-size:clamp(.75rem,6cqi,1.125rem);font-weight:700;font-variant-numeric:tabular-nums}.cc-token-count-live{animation:cc-token-count-pop var(--duration-normal) ease-out both}@keyframes cc-token-count-pop{0%{transform:translateY(var(--space-xs));opacity:.7}to{transform:translateY(0);opacity:1}}.cc-live-metric-label,.cc-live-trend-label{color:var(--text-muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}.cc-live-trend{min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-live-trend .cc-sparkline{block-size:calc(var(--space-2xl) + var(--space-sm))}.cc-live-trend .cc-sparkline-bar{box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 28%,transparent);animation:cc-live-signal-pulse calc(var(--duration-slow) * 5) ease-in-out infinite}@keyframes cc-live-signal-sweep{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes cc-live-signal-pulse{0%,to{opacity:.78}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.cc-live-strip:before,.cc-live-metric,.cc-live-trend .cc-sparkline-bar,.cc-token-count-live{animation:none}}.cc-overview-charts{min-inline-size:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);align-items:stretch}.cc-overview-chart-card{min-inline-size:0;position:relative;display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 6%,transparent),transparent),var(--surface-1);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 7%,transparent);overflow:hidden;animation:cc-overview-chart-rise var(--duration-normal) ease-out both}.cc-overview-chart-card--trend{grid-column:1 / -1}.cc-overview-chart-card:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 8%,transparent),transparent);opacity:0;pointer-events:none;animation:cc-overview-chart-sheen calc(var(--duration-slow) * 7) ease-in-out infinite}.cc-overview-chart-header{position:relative;z-index:1;display:flex;flex-direction:column;gap:var(--space-xs)}.cc-overview-chart-header p{margin:0;color:var(--text-muted);font-size:.8125rem}.cc-overview-chart-card .cc-bar-chart,.cc-overview-chart-card .cc-sparkline,.cc-overview-chart-card .cc-recharts-chart,.cc-overview-chart-card .cc-recharts-empty{position:relative;z-index:1}.cc-overview-chart-card .cc-recharts-chart,.cc-overview-chart-card .cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-overview-chart-card .cc-sparkline{block-size:calc(var(--space-2xl) * 2)}.cc-overview-chart-card .cc-bar-fill,.cc-overview-chart-card .cc-sparkline-bar{box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 30%,transparent)}@keyframes cc-overview-chart-rise{0%{opacity:0;transform:translateY(var(--space-sm))}to{opacity:1;transform:translateY(0)}}@keyframes cc-overview-chart-sheen{0%{opacity:0;transform:translate(-100%)}45%,55%{opacity:.35}to{opacity:0;transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.cc-overview-chart-card,.cc-overview-chart-card:before{animation:none}}@media(min-width:769px)and (max-width:1024px){.command-center{flex:1;min-block-size:0;overflow:hidden}.cc-tabpanel{flex:1;min-block-size:0;overflow-x:hidden;overflow-y:auto}.cc-live-strip,.cc-overview-charts,.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-live-strip-metrics{min-inline-size:0;grid-template-columns:repeat(2,minmax(0,1fr))}.cc-overview-chart-card--trend,.cc-team-spark-panel{grid-column:auto}.cc-stat-grid,.cc-area .cc-stat-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr))}}@media(max-width:768px){.cc-live-strip{grid-template-columns:1fr}.cc-live-strip-metrics,.cc-overview-charts{min-inline-size:0;grid-template-columns:1fr}.cc-overview-chart-card--trend{grid-column:auto}}.cc-loading,.cc-error,.cc-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted);text-align:center}.cc-error{color:var(--color-error)}.cc-loading .cc-chart-skeleton{block-size:var(--space-lg);border-radius:var(--radius-sm);background:var(--surface-2);animation:cc-shell-pulse var(--duration-slow) ease-in-out infinite}@keyframes cc-shell-pulse{0%,to{opacity:.4}50%{opacity:.9}}.cc-overview-engine-panel{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-overview-engine-panel-header{display:flex;align-items:center;gap:var(--space-sm);color:var(--text)}.cc-overview-engine-panel-title{font-size:.9375rem;font-weight:600}.cc-overview-engine-panel-status{margin:0;font-size:.8125rem;color:var(--text-muted)}.cc-overview-engine-nav{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-lg)}.cc-overview-engine-nav-btn{flex:1 1 auto;justify-content:center}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.dev-server-view{display:flex;flex-direction:column;gap:var(--space-md);padding:0 var(--space-lg) var(--space-lg);min-height:0;height:100%;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}.right-dock__body .dev-server-view>.view-header,.right-dock-expand-modal__body .dev-server-view>.view-header{display:none}@media(max-width:768px){.right-dock__body .dev-server-view>.view-header,.right-dock-expand-modal__body .dev-server-view>.view-header{display:flex}}.dev-server-header-title{display:flex;align-items:center;gap:var(--space-sm)}.dev-server-header-actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm)}.dev-server-status-badge{display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--radius-pill);padding:var(--space-xs) var(--space-sm);font-family:var(--font-mono)}.dev-server-status-badge--stopped{color:var(--color-muted);background:color-mix(in srgb,var(--color-muted) 16%,transparent);border-color:color-mix(in srgb,var(--color-muted) 40%,transparent)}.dev-server-status-badge--starting{color:var(--color-warning);background:color-mix(in srgb,var(--color-warning) 16%,transparent);border-color:color-mix(in srgb,var(--color-warning) 40%,transparent)}.dev-server-status-badge--running{color:var(--color-success);background:color-mix(in srgb,var(--color-success) 16%,transparent);border-color:color-mix(in srgb,var(--color-success) 40%,transparent)}.dev-server-status-badge--failed{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 16%,transparent);border-color:color-mix(in srgb,var(--color-error) 40%,transparent)}.dev-server-panel{display:flex;flex-direction:column;gap:var(--space-md);min-height:0;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);cursor:default;user-select:text;touch-action:auto}.dev-server-config{flex:0 0 auto;min-height:0;max-height:min(52vh,calc(var(--space-2xl) * 16));overflow-y:auto;overscroll-behavior:contain}.dev-server-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.dev-server-section-header h3{margin:0}.dev-server-muted{color:var(--text-muted);font-family:var(--font-mono)}.dev-server-field-group{display:flex;flex-direction:column;gap:var(--space-xs)}.dev-server-label{color:var(--text-muted)}.dev-server-empty-state{margin:0;color:var(--text-muted)}.dev-server-empty-state code{font-family:var(--font-mono)}.dev-server-task-picker{width:100%;min-width:0}.dev-server-task-descriptor{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 84%,var(--text))}.dev-server-task-descriptor-header{display:flex;min-width:0}.dev-server-task-description{margin:0;max-height:calc(var(--space-2xl) * 4);overflow-y:auto;color:var(--text);line-height:1.5;white-space:pre-wrap}.dev-server-task-worktree{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.dev-server-task-worktree code{color:var(--text-muted);font-family:var(--font-mono);overflow-wrap:anywhere}.dev-server-section{display:flex;flex-direction:column;gap:var(--space-md);min-height:0;padding:var(--space-xl);max-width:calc(var(--space-2xl) * 25);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.dev-server-section h3{margin:0}.dev-server-candidates{display:flex;flex-direction:column;gap:var(--space-sm);min-height:0;max-height:min(36vh,calc(var(--space-2xl) * 9));overflow-y:auto;overscroll-behavior:contain}.dev-server-candidate{display:flex;align-items:center;gap:var(--space-md);width:100%;padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast)}.dev-server-candidate:hover{background:var(--card-hover)}.dev-server-candidate:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.dev-server-candidate--selected{border-left:calc(var(--btn-border-width) * 3) solid var(--todo);background:var(--status-todo-bg)}.dev-server-candidate-name{font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.dev-server-candidate-command{color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem;max-width:calc(var(--space-2xl) * 9 + var(--space-md));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dev-server-candidate-source{margin-left:auto;color:var(--text-dim);font-size:.6875rem}.dev-server-selected{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.dev-server-selected .btn{margin-left:0}.dev-server-preview-override{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-xl)}.dev-server-preview-override .input{flex:1}.dev-server-preview-hint{margin:0;color:var(--text-muted)}.dev-server-loading-state{display:flex;align-items:center;gap:var(--space-sm);color:var(--text-muted)}.dev-server-error-box{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--color-error) 10%,transparent);color:var(--color-error)}.dev-server-error-box p{margin:0}.dev-server-current-command{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.dev-server-current-command code{font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word}.dev-server-error{margin:0;padding:var(--space-sm);border-radius:var(--radius-sm);border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent);color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.dev-server-content{flex:1;min-height:0;display:flex;flex-direction:column}.dev-server-logs-panel,.dev-server-preview{min-height:0}.dev-server-logs-viewer{flex:1;min-height:0}.dev-server-logs{flex:1;min-height:clamp(calc(var(--space-2xl) * 3 + var(--space-xs)),28vh,calc(var(--space-2xl) * 5));max-height:clamp(calc(var(--space-2xl) * 8),55vh,calc(var(--space-2xl) * 14));padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);overflow-y:auto;font-family:var(--font-mono)}.dev-server-log-line{margin:0;white-space:pre-wrap;word-break:break-word}.devserver-preview-panel{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--surface)}.devserver-preview-header{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border)}.devserver-preview-title{display:flex;align-items:center;gap:var(--space-xs);font-size:.8125rem;font-weight:600;color:var(--text)}.devserver-preview-url-badge{flex:1 1 auto;min-width:0;max-width:calc(var(--space-2xl) * 9);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);font-family:var(--font-mono);font-size:.6875rem}.devserver-preview-url-badge--manual{color:var(--color-info);background:color-mix(in srgb,var(--color-info) 14%,transparent)}.devserver-preview-url-badge--auto{color:var(--text-muted);background:color-mix(in srgb,var(--surface) 70%,var(--text))}.devserver-preview-actions{display:flex;gap:var(--space-xs);margin-left:auto}.devserver-preview-container{position:relative;flex:1;min-height:clamp(calc(var(--space-2xl) * 4),42vh,calc(var(--space-2xl) * 9 + var(--space-sm)));max-height:clamp(calc(var(--space-2xl) * 10),72vh,calc(var(--space-2xl) * 18 + var(--space-lg)));overflow:hidden}.devserver-preview-iframe-shell{position:relative;width:100%;height:100%}.devserver-preview-iframe{width:100%;height:100%;border:none;background:var(--surface)}.devserver-preview-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);background:color-mix(in srgb,var(--bg) 85%,transparent);color:var(--text-muted)}.devserver-preview-blocked-panel,.devserver-preview-error-panel{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;gap:var(--space-md);padding:var(--space-xl);text-align:center;border-radius:var(--radius-lg)}.devserver-preview-blocked-panel{background:color-mix(in srgb,var(--color-warning) 8%,transparent);border:1px solid color-mix(in srgb,var(--color-warning) 20%,transparent)}.devserver-preview-error-panel{background:color-mix(in srgb,var(--color-error) 8%,transparent);border:1px solid color-mix(in srgb,var(--color-error) 20%,transparent)}.devserver-preview-blocked-icon{width:calc(var(--space-2xl) + var(--space-lg));height:calc(var(--space-2xl) + var(--space-lg));color:var(--color-warning)}.devserver-preview-error-panel .devserver-preview-blocked-icon{color:var(--color-error)}.devserver-preview-blocked-title{margin:0 0 var(--space-xs);font-size:1rem;font-weight:600;color:var(--text)}.devserver-preview-blocked-context{margin:0;font-size:.75rem;color:var(--text-muted);font-family:var(--font-mono);background:color-mix(in srgb,var(--bg) 80%,transparent);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm)}.devserver-preview-blocked-description{margin:0;color:var(--text-muted);font-size:.8125rem}.devserver-preview-blocked-actions{display:flex;gap:var(--space-sm);flex-wrap:wrap;justify-content:center}.devserver-preview-empty{margin:0;padding:var(--space-2xl);text-align:center;color:var(--text-dim);font-size:.8125rem}.devserver-preview-external-only{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);min-height:100%;padding:var(--space-lg);text-align:center;color:var(--text-muted);background:color-mix(in srgb,var(--surface) 80%,var(--text))}.devserver-preview-external-only p{margin:0}.dev-server-preview-fallback{border:1px solid color-mix(in srgb,var(--color-warning) 40%,transparent);background:color-mix(in srgb,var(--color-warning) 10%,transparent)}.dev-server-preview-external-only{border:1px solid var(--border);background:var(--surface)}.dev-server-spin{animation:dev-server-spin 1s linear infinite}@media(min-width:769px){.dev-server-view{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:auto auto 1fr}.dev-server-view>.view-header{grid-column:1 / -1}.dev-server-config{grid-column:1;grid-row:2;max-height:none}.dev-server-content{grid-column:1;grid-row:3}.devserver-preview-panel{grid-column:2;grid-row:2 / 4}.devserver-preview-container{min-height:0;max-height:none}}@media(max-width:768px){.dev-server-view{display:flex;flex-direction:column;padding:0 var(--space-md) var(--space-md)}.dev-server-header-title{flex-wrap:wrap}.dev-server-header-actions{width:100%}.dev-server-content{display:flex;flex-direction:column}.dev-server-section{padding:var(--space-md);max-width:none}.devserver-preview-header{flex-wrap:wrap}.devserver-preview-url-badge{order:2;flex:1 1 100%;min-width:0;max-width:100%}.devserver-preview-actions{order:3;width:100%;margin-left:0;justify-content:flex-end}.dev-server-preview-override{flex-direction:column;align-items:stretch}.dev-server-candidate,.dev-server-selected{flex-wrap:wrap}.dev-server-candidate-command{flex:1 1 100%;max-width:100%;white-space:normal;word-break:break-word}.dev-server-task-picker,.dev-server-task-descriptor{width:100%}.dev-server-task-description{max-height:calc(var(--space-2xl) * 3)}.dev-server-config{max-height:min(48vh,calc(var(--space-2xl) * 13))}.dev-server-candidates{max-height:min(32vh,calc(var(--space-2xl) * 7))}.dev-server-candidate-source{margin-left:0}.dev-server-header-actions .btn,.devserver-preview-actions .btn,.dev-server-preview-override .btn,.devserver-preview-external-only .btn,.devserver-preview-blocked-panel .btn,.devserver-preview-error-panel .btn,.devserver-log-viewer__load-more .btn{min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}.devserver-preview-actions .btn-icon{min-width:calc(var(--space-lg) + var(--space-lg) + var(--space-xs));min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}.devserver-log-viewer__toolbar{flex-wrap:wrap;padding:var(--space-xs) var(--space-sm)}.devserver-log-viewer__toolbar-actions{width:100%;justify-content:space-between}.devserver-log-viewer__search{flex:1}.devserver-log-viewer__search-input{min-width:0;width:100%}.devserver-log-viewer__content{padding:var(--space-xs);font-size:.6875rem}.devserver-log-viewer__new-logs-button{bottom:var(--space-lg);min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}.dev-server-logs,.devserver-preview-container,.devserver-preview-iframe{min-height:calc(var(--space-2xl) * 4 + var(--space-md))}.devserver-preview-blocked-panel,.devserver-preview-error-panel,.devserver-preview-external-only{word-break:break-word}.devserver-preview-blocked-panel,.devserver-preview-error-panel{padding:var(--space-md)}.devserver-preview-blocked-actions .btn{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-sm))}.chat-tool-calls-header,.chat-tool-call summary,.chat-tool-call-content,.chat-tool-call-preview,.chat-tool-call-value{font-size:.6875rem}.chat-tool-call summary{padding:var(--space-xs)}.chat-tool-call-content{margin:var(--space-xs);padding:var(--space-xs)}.chat-tool-call-status-text{font-size:.625rem}}@container right-dock-body (max-width: 768px){.dev-server-view{display:flex;flex:1;flex-direction:column;min-height:0;overflow-y:auto;padding:0 var(--space-md) var(--space-md)}.dev-server-view>.view-header{grid-column:auto}.dev-server-header-title{flex-wrap:wrap}.dev-server-header-actions{width:100%}.dev-server-config{grid-column:auto;grid-row:auto;max-height:min(48vh,calc(var(--space-2xl) * 13))}.dev-server-content{grid-column:auto;grid-row:auto;display:flex;flex-direction:column}.devserver-preview-panel{grid-column:auto;grid-row:auto}.dev-server-section{padding:var(--space-md);max-width:none}.devserver-preview-header{flex-wrap:wrap}.devserver-preview-url-badge{order:2;flex:1 1 100%;min-width:0;max-width:100%}.devserver-preview-actions{order:3;width:100%;margin-left:0;justify-content:flex-end}.dev-server-preview-override{flex-direction:column;align-items:stretch}.dev-server-candidate,.dev-server-selected{flex-wrap:wrap}.dev-server-candidate-command{flex:1 1 100%;max-width:100%;white-space:normal;word-break:break-word}.dev-server-candidate-source{margin-left:0}.dev-server-candidates{max-height:min(32vh,calc(var(--space-2xl) * 7))}.dev-server-task-picker,.dev-server-task-descriptor{width:100%}.dev-server-task-description{max-height:calc(var(--space-2xl) * 3)}.dev-server-logs,.devserver-preview-container,.devserver-preview-iframe{min-height:calc(var(--space-2xl) * 4 + var(--space-md));max-height:none}.devserver-preview-blocked-panel,.devserver-preview-error-panel,.devserver-preview-external-only{word-break:break-word}}.devserver-log-viewer{display:flex;flex-direction:column;height:100%;min-height:0;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.devserver-log-viewer--fullscreen{position:fixed;inset:0;z-index:120;border-radius:0}.devserver-log-viewer__toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border);background:var(--card)}.devserver-log-viewer__toolbar-meta{display:flex;align-items:baseline;gap:var(--space-sm)}.devserver-log-viewer__title{color:var(--text);font-weight:600}.devserver-log-viewer__count{color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem}.devserver-log-viewer__toolbar-actions{display:flex;align-items:center;gap:var(--space-sm)}.devserver-log-viewer__severity,.devserver-log-viewer__search{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--text-muted)}.devserver-log-viewer__severity-select{min-height:calc(var(--space-lg) + var(--space-md));min-width:calc(var(--space-2xl) * 3);font-size:.75rem}.devserver-log-viewer__search-input{min-height:calc(var(--space-lg) + var(--space-md));min-width:calc(var(--space-2xl) * 4);font-size:.75rem}.devserver-log-viewer__matches{color:var(--text-muted);font-family:var(--font-mono);font-size:.6875rem}.devserver-log-viewer__body{position:relative;display:flex;flex:1;flex-direction:column;min-height:0}.devserver-log-viewer__load-more{display:flex;justify-content:center;padding:var(--space-sm);border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 95%,var(--text))}.devserver-log-viewer__content{flex:1;min-height:0;overflow-y:auto;padding:var(--space-sm);font-family:var(--font-mono);font-size:.75rem;line-height:1.5;background:var(--surface)}.devserver-log-viewer__loading,.devserver-log-viewer__empty{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);min-height:calc(var(--space-2xl) * 4);margin:0;color:var(--text-muted)}.devserver-log-viewer__spinner{animation:dev-server-spin 1s linear infinite}.devserver-log-line{padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);white-space:pre-wrap;word-break:break-all}.devserver-log-line:nth-child(2n){background:color-mix(in srgb,var(--surface) 95%,var(--text))}.devserver-log-timestamp{margin-right:var(--space-sm);color:var(--text-dim);font-size:.6875rem}.devserver-log-stream-badge{margin-right:var(--space-sm);padding:0 var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error);font-size:.625rem;font-weight:600}.devserver-log-text{color:var(--text)}.devserver-log-text mark{border-radius:var(--radius-sm);background:color-mix(in srgb,var(--todo) 40%,transparent);color:var(--text)}.devserver-log-viewer__new-logs-button{position:absolute;left:50%;bottom:var(--space-xl);transform:translate(-50%);z-index:10;border-color:var(--border);background:var(--card);box-shadow:var(--shadow-md)}.devserver-log-viewer__new-logs-button:active{transform:translate(-50%) scale(.97)}@keyframes dev-server-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(max-width:480px){.devserver-preview-blocked-actions{width:100%;flex-direction:column}.devserver-preview-blocked-actions .btn{width:100%;min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as t,j as r}from"./vendor-react-SZ_qB27O.js";import{c$ as ze,d0 as be,d1 as cr,d2 as we,ah as Oe,d3 as Ee,d4 as Le,d5 as Re,d6 as De,d7 as dr,d8 as ue,d9 as vr,da as ur,db as mr,dc as pr,dd as fr,bT as Z,de as me,L as ie,aJ as hr,df as gr,dg as br,dh as wr,n as xr,b6 as Be,V as yr,c1 as Sr,ck as Nr,cm as kr,di as jr,D as Cr,ai as Er,R as Lr}from"./index-ccFe_1av.js";import{u as le}from"./vendor-i18n-GF3RlKbq.js";import{S as He}from"./shield-alert-DkGlhVjI.js";import"./vendor-reactflow-Bg-Qjzh8.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";const xe=500,Rr=3e3;function q(e){return e instanceof Error?e.message:String(e)}function Ve(e){return e.length<=xe?e:e.slice(-xe)}function pe(e,o){return Ve([...e,o])}function Q(e){try{return JSON.parse(e)}catch{return null}}function se(e){const o=e.text??"";return e.stream==="stderr"?`[stderr] ${o}`:o}function Dr(e){return e?.previewUrl??null}async function _e(e){return vr(e)}async function Te(e,o){return ur(e,o)}async function _r(e){return mr(e)}async function Tr(e){return pr(e)}async function Ue(e){return fr(e)}function I(e){try{return e()}catch{return null}}function fe(){return typeof I(()=>be)=="function"&&typeof I(()=>ze)=="function"}function Y(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(o=>({timestamp:new Date().toISOString(),stream:o.startsWith("[stderr]")?"stderr":"stdout",text:o.replace(/^\[stderr\]\s*/,"")}))}}function Ur(e){const{t:o}=le("app"),[f,s]=t.useState(null),[w,m]=t.useState([]),[S,v]=t.useState([]),[j,C]=t.useState([]),[$,E]=t.useState(!0),[k,u]=t.useState(null),l=t.useRef(0),[d,M]=t.useState(null),U=t.useCallback(a=>{if(s(a),a?.logHistory){const n=a.logHistory.slice(-xe).map(se);v(n)}},[]),_=t.useCallback(async()=>{const a=l.current;try{if(fe())if(d){const n=await ze(d,e);if(l.current!==a)return;U(n)}else{const n=await be(e);if(l.current!==a)return;m(n),n.length>0&&(M(n[0].config.id),U(n[0]))}else{const n=await _e(e);if(l.current!==a)return;const p=Y(n);m([p]),U(p)}u(null)}catch(n){if(l.current!==a)return;u(q(n))}},[U,e,d]);t.useEffect(()=>{l.current+=1;const a=l.current;s(null),m([]),v([]),C([]),E(!0),u(null),M(null),(async()=>{try{const[p,c]=await Promise.allSettled([fe()?be(e):_e(e).then(x=>[Y(x)]),typeof I(()=>ue)=="function"?ue(e):Ue(e).then(x=>x.map(L=>({name:L.name,command:L.command,cwd:L.cwd,scriptName:L.scriptName,packagePath:L.packagePath})))]);if(l.current!==a)return;let b=null;if(p.status==="fulfilled"){const x=p.value;if(m(x),x.length>0){const L=x[0];fe()&&M(L.config.id),U(L)}}else b=q(p.reason);c.status==="fulfilled"&&C(c.value),b&&u(b)}catch(p){if(l.current!==a)return;u(q(p))}finally{l.current===a&&E(!1)}})()},[U,e]),t.useEffect(()=>{const a=d?cr(d,e):typeof I(()=>we)=="function"?we(e):null;if(!a)return;const n=l.current,p=Oe(a,{events:{history:c=>{if(l.current!==n)return;const b=Q(c.data);if(b?.lines){const x=b.lines.map(se);v(Ve(x))}},log:c=>{if(l.current!==n)return;const b=Q(c.data);if(b){const x=typeof b.line=="string"?b.line:se(b);v(L=>pe(L,x))}},"dev-server:log":c=>{if(l.current!==n)return;const b=Q(c.data);if(b){const x=typeof b.line=="string"?b.line:se(b);v(L=>pe(L,x))}},"dev-server:output":c=>{if(l.current!==n)return;const b=Q(c.data);b?.line&&v(x=>pe(x,b.line))},status:c=>{if(l.current!==n)return;const b=Q(c.data),x=b?.status;x&&s(L=>L&&{...L,status:x,runtime:b.pid?{...L.runtime??{startedAt:new Date().toISOString()},pid:b.pid}:L.runtime})},"dev-server:status":c=>{if(l.current!==n)return;const b=Q(c.data);if(b?.status){const x=Y(b);s(x),m([x])}},stopped:()=>{l.current},failed:()=>{l.current}},onReconnect:()=>{l.current===n&&_()},onError:()=>{l.current===n&&u(c=>c??o("devserver.lostConnection","Lost log stream connection."))}});return()=>{p()}},[e,_,d]),t.useEffect(()=>{if(f?.status!=="running"&&f?.status!=="starting")return;const a=setInterval(()=>{_()},Rr);return()=>{clearInterval(a)}},[_,f?.status]);const T=t.useCallback(async(a,n)=>{l.current+=1;const p=l.current;try{let c;const b=typeof n=="string"&&n.length>0,x=f?.config?.cwd??".";if(!(b&&n!==x)&&d&&typeof I(()=>Ee)=="function")c=await Ee(d,e);else{const W=await Te({command:a,cwd:n},e);c=Y(W)}if(l.current!==p)return;s(c),u(null)}catch(c){if(l.current!==p)return;throw u(q(c)),c}},[e,f?.config?.cwd,d]),R=t.useCallback(async()=>{l.current+=1;const a=l.current;try{let n;if(d&&typeof I(()=>Le)=="function")n=await Le(d,e);else{const p=await _r(e);n=Y(p)}if(l.current!==a)return;s(n),u(null)}catch(n){if(l.current!==a)return;throw u(q(n)),n}},[e,d]),z=t.useCallback(async()=>{l.current+=1;const a=l.current;try{let n;if(d&&typeof I(()=>Re)=="function")n=await Re(d,e);else{const p=await Tr(e);n=Y(p)}if(l.current!==a)return;s(n),u(null)}catch(n){if(l.current!==a)return;throw u(q(n)),n}},[e,d]),A=t.useCallback(async a=>{l.current+=1;const n=l.current;try{let p;if(d&&typeof I(()=>De)=="function")p=await De(d,a,e);else{const c=await dr({url:a},e);p={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(l.current!==n)return;s(c=>c?{...c,previewUrl:p.url??void 0}:null),u(null)}catch(p){if(l.current!==n)return;throw u(q(p)),p}},[e,d]),O=t.useCallback(async()=>{l.current+=1;const a=l.current;try{let n;try{n=await ue(e)}catch{n=(await Ue(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(l.current!==a)return;C(n),u(null)}catch(n){if(l.current!==a)return;throw u(q(n)),n}},[e]),h=t.useCallback(async(a,n)=>{if(typeof a!="string"&&!d)try{const b=a,x=await Te({command:b.command,cwd:b.cwd,scriptName:b.scriptName,packagePath:b.packagePath??b.cwd},e),L=Y(x);s(L),m([L]),u(null);return}catch(b){throw u(q(b)),b}const p=typeof a=="string"?a:a.command,c=typeof a=="string"?n:a.cwd;await T(p,c)},[e,T,d]),g=t.useCallback(async()=>{await R()},[R]),D=t.useCallback(async()=>{await z()},[z]),B=t.useCallback(async a=>{await A(a)},[A]),P=t.useCallback(async()=>{await O()},[O]),V=t.useCallback(async()=>{await _()},[_]),N=Dr(f),y=f?{...f,pid:f.runtime?.pid}:null;return{session:f,sessions:w,logs:S,detectedCommands:j,previewUrl:N,isLoading:$,error:k,startServer:T,stopServer:R,restartServer:z,setPreviewUrl:A,detectCommands:O,refresh:_,candidates:j,serverState:y,loading:$,start:h,stop:g,restart:D,setManualUrl:B,detect:P,refreshStatus:V}}const Me=500,Ae=100;function We(e){return e.length>Me?e.slice(-Me):e}function qe(e){return e==="stderr"?"stderr":"stdout"}function ne(e){try{return JSON.parse(e.data)}catch{return null}}function ae(e,o){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:o,text:typeof e.text=="string"?e.text:"",stream:qe(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Mr(e,o){return{id:o,text:e,stream:"stdout",timestamp:""}}function he(e,o){if(o.length===0)return e;const f=[...e],s=new Set(e.map(w=>w.id));for(const w of o)s.has(w.id)||(s.add(w.id),f.push(w));return f.sort((w,m)=>w.id-m.id),We(f)}function Ar(e,o){const[f,s]=t.useState([]),[w,m]=t.useState(!1),[S,v]=t.useState(!1),[j,C]=t.useState(!1),[$,E]=t.useState(null),k=t.useRef(null),u=t.useRef(!1),l=t.useRef(0),d=t.useRef(0),M=t.useRef(e),U=t.useRef(o),_=t.useRef(0),T=t.useRef(1);(M.current!==e||U.current!==o)&&(M.current=e,U.current=o,l.current++,Z({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),u.current=!0,_.current=0,T.current=1,s([]),m(!1),v(!1),C(!1),E(null),k.current&&(k.current(),k.current=null)),t.useEffect(()=>{if(!o){k.current&&(k.current(),k.current=null);return}const h=l.current,g=++d.current;u.current=!1,m(!0);const D=(N,y)=>{const a=We(N);s(a),E(y),C(y!==null?y>a.length:!1);const n=a.length>0?a[a.length-1].id:0;_.current=n,T.current=n+1},B=N=>{if(u.current||l.current!==h||!N||typeof N!="object")return;const y=N.lines;if(!Array.isArray(y))return;if(y.length>0&&typeof y[0]=="string"){const n=y.filter(p=>typeof p=="string").map((p,c)=>Mr(p,c+1));D(n,n.length);return}const a=y.filter(n=>!!n&&typeof n=="object").map((n,p)=>ae(n,p+1));D(a,a.length)},P=N=>{if(u.current||l.current!==h)return;const y=typeof N.text=="string"?N.text:typeof N.line=="string"?N.line:null;if(!y)return;const a=T.current,n=typeof N.id=="number"&&Number.isFinite(N.id)?N.id:a,p={id:n,text:y,stream:qe(N.stream),timestamp:typeof N.timestamp=="string"?N.timestamp:""};_.current=Math.max(_.current,n),T.current=Math.max(T.current,n+1),s(c=>he(c,[p])),E(c=>c===null?c:Math.max(c+1,p.id))};async function V(){try{const y=await me({maxLines:Ae},e);if(u.current||l.current!==h||d.current!==g)return;const a=y.lines.map((n,p)=>ae(n,p+1));D(a,y.totalLines)}catch{if(u.current||l.current!==h||d.current!==g)return;D([],null)}finally{!u.current&&l.current===h&&d.current===g&&m(!1)}const N=we(e);k.current=Oe(N,{events:{"dev-server:log":y=>{const a=ne(y);a&&P(a)},log:y=>{const a=ne(y);a&&P(a)},history:y=>{const a=ne(y);B(a)},"dev-server:history":y=>{const a=ne(y);B(a)}},onReconnect:()=>{Z({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:_.current??null,sseChannel:N,reason:"history-replay"}),!(u.current||l.current!==h)&&me({lastEventId:_.current,maxLines:50},e).then(y=>{if(u.current||l.current!==h)return;const a=y.lines.map((n,p)=>ae(n,T.current+p));if(a.length>0){const n=a[a.length-1].id;_.current=Math.max(_.current,n),T.current=Math.max(T.current,n+1)}s(n=>he(n,a)),E(y.totalLines)}).catch(()=>{})}}),Z({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:N})}return V(),()=>{u.current=!0,k.current&&(k.current(),k.current=null)}},[o,e]);const z=t.useCallback(async()=>{if(!o||S)return;const h=l.current,g=f.length;v(!0);try{const D=await me({maxLines:Ae,offset:g},e);if(u.current||l.current!==h)return;const B=D.lines.map((P,V)=>ae(P,V+1));s(P=>he(B,P)),C(D.totalLines>g+B.length),E(D.totalLines)}catch{}finally{v(!1)}},[o,f.length,S,e]),A=t.useCallback(()=>{s([])},[]),O=k.current!==null&&!w&&!u.current;return{entries:f,loading:w,loadingMore:S,hasMore:j,total:$,loadMore:z,clear:A,logs:f,isStreaming:O,clearLogs:A}}const Pr="This preview appears to block iframe embedding. Open it in a new tab instead.",Fr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",$r="Preview is taking longer than expected and may block iframe embedding.";function zr(e){return e==="blocked"?Pr:e==="error"?Fr:null}function Or(e,o={}){const{loadTimeoutMs:f=1e4,detectionMethod:s=null}=o,w=t.useRef(null),m=t.useRef(null),[S,v]=t.useState("unknown"),[j,C]=t.useState(null),[$]=t.useState(s),E=t.useCallback(()=>{m.current!==null&&(window.clearTimeout(m.current),m.current=null)},[]),k=t.useCallback(R=>{v(R),C(zr(R))},[]),u=t.useCallback(()=>{v("blocked"),C($r)},[]);t.useEffect(()=>{if(E(),!e){v("unknown"),C(null);return}v("unknown"),C(null);let R=!1;return queueMicrotask(()=>{R||(v("loading"),C(null))}),()=>{R=!0,E()}},[E,e]),t.useEffect(()=>{if(S!=="loading"){E();return}const R=setTimeout(()=>{m.current=null,u()},f);return m.current=R,()=>{clearTimeout(R),m.current===R&&(m.current=null)}},[E,S,f,u]);const l=t.useCallback(()=>{const R=w.current;if(!R){k("embedded");return}try{if(R.contentWindow?.location?.href==="about:blank"&&R.src!=="about:blank"){k("blocked");return}}catch{}k("embedded")},[k]),d=t.useCallback(()=>{k("error")},[k]);t.useEffect(()=>{if(E(),!e){v("unknown"),C(null);return}v("unknown"),C(null)},[E]);const M=t.useCallback(()=>{E(),v("unknown"),C(null)},[E]),U=M,_=t.useMemo(()=>S==="embedded",[S]),T=t.useMemo(()=>S==="blocked"||S==="error",[S]);return{embedStatus:S,isEmbedded:_,isBlocked:T,blockReason:j,detectionMethod:$,iframeRef:w,resetEmbedStatus:M,setEmbedStatus:k,retry:U,embedContext:j,handleIframeLoad:l,handleIframeError:d}}const Br=/\x1b\[[0-9;]*m/g;function ye(e){return e.replace(Br,"")}function Hr(e){if(!e)return"";const o=new Date(e);return Number.isNaN(o.getTime())?"":o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function Vr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Wr(e){if(e.stream==="stderr")return"error";const o=ye(e.text).toLowerCase();return/\b(warn|warning)\b/.test(o)?"warn":/\b(error|fatal)\b/.test(o)?"error":"info"}function qr(e,o){if(!o)return e;const f=new RegExp(`(${Vr(o)})`,"ig"),s=e.split(f),w=o.toLowerCase();return r.jsx(r.Fragment,{children:s.map((m,S)=>m.toLowerCase()===w?r.jsx("mark",{children:m},`${m}-${S}`):r.jsx("span",{children:m},`${m}-${S}`))})}function Xr({entries:e,loading:o,loadingMore:f,hasMore:s,total:w,onLoadMore:m,isRunning:S}){const{t:v}=le("app"),j=t.useRef(null),C=t.useRef(e.length),$=t.useRef(S),[E,k]=t.useState(!1),[u,l]=t.useState(!1),[d,M]=t.useState(""),[U,_]=t.useState("all"),T=t.useMemo(()=>U==="all"?e:e.filter(h=>Wr(h)===U),[e,U]),R=t.useMemo(()=>{const h=d.trim().toLowerCase();return h?T.filter(g=>ye(g.text).toLowerCase().includes(h)):T},[T,d]),z=R.length,A=t.useCallback(()=>{const h=j.current;h&&(h.scrollTop=h.scrollHeight,l(!1))},[]);t.useEffect(()=>{const h=$.current,g=C.current,D=e.length>g;S&&(!h||!u&&D)&&A(),$.current=S,C.current=e.length},[e.length,S,u,A]);const O=t.useCallback(()=>{const h=j.current;if(!h)return;const D=h.scrollTop+h.clientHeight>=h.scrollHeight-50;l(!D)},[]);return t.useEffect(()=>{o||e.length===0||!u&&S&&A()},[e,S,u,o,A]),o&&e.length===0?r.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:r.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[r.jsx(ie,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:v("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${E?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[r.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[r.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[r.jsx("span",{className:"devserver-log-viewer__title",children:v("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[w!==null?`${e.length}/${w}`:`${e.length}`," ",v("devserver.lines","lines")]})]}),r.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[r.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[r.jsx("span",{className:"visually-hidden",children:v("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:U,onChange:h=>_(h.target.value),"data-testid":"devserver-log-severity-filter","aria-label":v("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:v("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:v("devserver.info","Info")}),r.jsx("option",{value:"warn",children:v("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:v("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:v("devserver.searchLogs","Search logs")}),r.jsx(hr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:d,onChange:h=>M(h.target.value),placeholder:v("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":v("devserver.searchLogs","Search logs")})]}),d.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:v("devserver.matchCount",{count:z,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>k(h=>!h),"data-testid":"devserver-log-fullscreen-toggle","aria-label":E?v("devserver.exitFullscreen","Exit fullscreen logs"):v("devserver.enterFullscreen","Enter fullscreen logs"),children:E?r.jsx(gr,{size:14}):r.jsx(br,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[s&&r.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:r.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:m,disabled:f,"data-testid":"devserver-log-load-more-button",children:f?r.jsxs(r.Fragment,{children:[r.jsx(ie,{size:14,className:"devserver-log-viewer__spinner"}),v("devserver.loadingOlderLogs","Loading older logs…")]}):v("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:j,className:"devserver-log-viewer__content",onScroll:O,"data-testid":"devserver-log-content",children:[!o&&R.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?v("devserver.noLogsYet","No logs yet. Start the dev server to see output."):T.length===0?v("devserver.noMatchesSeverity","No log lines match the selected severity."):v("devserver.noMatchesSearch","No log lines match your search.")}),R.map(h=>{const g=ye(h.text),D=Hr(h.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[D&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:D}),h.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:v("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:wr(qr(g,d.trim()))})]},h.id)})]}),u&&S&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:A,"data-testid":"devserver-log-jump-button",children:[r.jsx(xr,{size:14}),v("devserver.newLogs","New logs")]})]})]})}const Ir="devserver-preview-iframe";function Jr({url:e,embedStatus:o,onEmbedStatusChange:f,iframeRef:s,blockReason:w,onRetry:m,className:S=Ir,embedContext:v}){const{t:j}=le("app"),C=w??v??null,[$,E]=t.useState(0);t.useEffect(()=>{!e||o!=="unknown"||(E(d=>d+1),f("loading"))},[o,f,e]);const k=t.useCallback(()=>{const d=s.current;if(!d){f("embedded");return}try{if(d.contentWindow?.location?.href==="about:blank"&&d.src!=="about:blank"){f("blocked");return}}catch{}f("embedded")},[s,f]),u=t.useCallback(d=>{d.stopPropagation(),f("error")},[f]),l=t.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?r.jsxs("div",{className:"devserver-preview-iframe-shell",children:[r.jsx("iframe",{src:e,ref:s,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:S,title:"Dev server preview",onLoad:k,onError:u,onErrorCapture:u,"data-testid":"devserver-preview-iframe"},`${e}-${$}`),o==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(ie,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:j("preview.loading","Loading preview...")})]}),o==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(He,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:j("preview.blockedTitle","Preview cannot be embedded")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:j("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:l,children:j("preview.openInNewTab","Open in new tab")}),m&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,children:j("actions.retry","Retry")})]})]}),o==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[r.jsx(Be,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:j("preview.errorTitle","Unable to load preview")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:j("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:l,children:j("preview.openInNewTab","Open in new tab")}),m&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,children:j("actions.retry","Retry")})]})]})]}):null}function Yr(e){return{stopped:{className:"dev-server-status-badge--stopped",label:e("devserver.status.stopped","Stopped")},starting:{className:"dev-server-status-badge--starting",label:e("devserver.status.starting","Starting...")},running:{className:"dev-server-status-badge--running",label:e("devserver.status.running","Running")},stopping:{className:"dev-server-status-badge--starting",label:e("devserver.status.stopping","Stopping...")},failed:{className:"dev-server-status-badge--failed",label:e("devserver.status.failed","Failed")}}}let ge=!1;function Pe(e){return e instanceof Error?e.message:String(e)}function Xe(e){return e==="."?"root":e}function Fe(e){return e?e==="root"?".":e:null}function $e(e,o,f){return!o||e.scriptName!==o?!1:f?Xe(e.cwd)===f:!0}function Gr(e){return e.cwd==="."?"root":e.cwd}function Qr(e){return e.length<=60?e:`${e.slice(0,60)}…`}function at({addToast:e,projectId:o,tasks:f}){const{t:s}=le("app");t.useEffect(()=>(Z({view:"DevServerView",trigger:ge?"route-active":"remount",projectId:o,replayAttempted:!1}),ge=!1,()=>{ge=!0,Z({view:"DevServerView",trigger:"route-inactive",projectId:o,replayAttempted:!1})}),[o]);const{session:w,detectedCommands:m,previewUrl:S,isLoading:v,error:j,startServer:C,stopServer:$,restartServer:E,setPreviewUrl:k,detectCommands:u,refresh:l}=Ur(o),d=w?.status??"stopped",M=d==="running"||d==="starting",U=Yr(s),_=U[d]??U.stopped,{entries:T,loading:R,loadingMore:z,hasMore:A,total:O,loadMore:h}=Ar(o,!!o),g=S,D=w?.config?.cwd??null,[B,P]=t.useState(!0),[V,N]=t.useState(""),[y,a]=t.useState(""),[n,p]=t.useState(null),[c,b]=t.useState(null),[x,L]=t.useState(null),W=t.useMemo(()=>(f??[]).filter(i=>i.column==="in-progress"&&typeof i.worktree=="string"&&i.worktree.length>0),[f]),X=t.useMemo(()=>W.find(i=>i.id===c)??null,[W,c]);t.useEffect(()=>{c&&!W.some(i=>i.id===c)&&b(null)},[W,c]);const[K,Ie]=t.useState("embedded"),Je=K==="embedded"?g:null,{embedStatus:H,setEmbedStatus:Ye,resetEmbedStatus:ee,iframeRef:G,isEmbedded:Ge,isBlocked:oe,blockReason:ce,retry:Se}=Or(Je),[Ne,J]=t.useState(!1),ke=t.useRef(H);t.useEffect(()=>{const i=ke.current!==H;oe&&i&&J(!0),H==="embedded"&&J(!1),ke.current=H},[H,oe]),t.useEffect(()=>{J(!1)},[g]);const re=t.useMemo(()=>{if(!n)return null;const i=Fe(D);return m.find(F=>!(F.scriptName!==n||i&&F.cwd!==i||w?.config?.command&&F.command!==w.config.command))??m.find(F=>$e(F,n,D))??null},[m,w?.config?.command,n,D]);t.useEffect(()=>{typeof u=="function"&&u().catch(i=>{e(Pe(i),"error")})},[e,u]),t.useEffect(()=>{if(n){P(!1);return}P(!0)},[n]),t.useEffect(()=>{if(w?.status==="running"||w?.status==="starting"){w.config?.command?.trim().length>0&&N(w.config.command);return}if(re){N(re.command);return}m.length>0&&N(i=>i.trim().length>0?i:m[0]?.command??"")},[m,re,w?.config?.command,w?.status]),t.useEffect(()=>{a(g??"")},[g]);const de=t.useCallback(()=>{g&&window.open(g,"_blank","noopener,noreferrer")},[g]),je=t.useCallback(()=>{J(!1),Se()},[Se]),Qe=t.useCallback(()=>{try{const i=G.current;if(i?.contentWindow){i.contentWindow.location.reload(),J(!1),ee();return}}catch{}if(!(!g||!G.current))try{const i=new URL(g);i.searchParams.set("_t",Date.now().toString()),G.current.src=i.toString(),J(!1),ee()}catch{G.current.src=g,J(!1),ee()}},[g,G,ee]),te=t.useCallback(async(i,F,Ce)=>{L(i);try{await F(),e(Ce,"success")}catch(ve){e(Pe(ve),"error")}finally{L(null)}},[e]),Ke=t.useCallback(i=>{p(i.scriptName),P(!1),N(i.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:i.scriptName}),"success")},[e]),Ze=t.useCallback(()=>{p(null),P(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),er=t.useCallback(i=>{M&&i&&i!==c&&e(s("devserver.restartToApplyTask","Restart the dev server to apply the selected task's worktree."),"info"),b(i)},[e,M,c,s]),rr=()=>{const i=V.trim();if(i.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const F=Fe(D)??".",ve=X?.worktree??null??re?.cwd??F;te("start",()=>C(i,ve),s("devserver.toast.started","Dev server started."))},tr=()=>{te("stop",$,s("devserver.toast.stopped","Dev server stopped."))},sr=()=>{te("restart",E,s("devserver.toast.restarted","Dev server restarted."))},nr=()=>{const i=y.trim(),F=i.length>0?i:null;te("preview",()=>k(F),F?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},ar=t.useCallback(()=>{j&&l()},[j,l]),ir=d==="starting"||d==="running"||x!==null,lr=d==="stopped"||x!==null,or=d==="stopped"||d==="starting"||x!==null;return r.jsxs("div",{className:"dev-server-view","data-testid":"dev-server-view",children:[r.jsx(yr,{icon:Sr,title:s("devserver.title","Dev Server"),actions:r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"dev-server-header-title",children:r.jsx("span",{className:`dev-server-status-badge ${_.className}`,"data-testid":"dev-server-status-badge",children:_.label})}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:rr,disabled:ir,"data-testid":"dev-server-start-button",children:[r.jsx(Nr,{size:14}),r.jsx("span",{children:x==="start"?s("devserver.starting","Starting..."):s("devserver.start","Start")})]}),r.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:tr,disabled:lr,"data-testid":"dev-server-stop-button",children:[r.jsx(kr,{size:14}),r.jsx("span",{children:x==="stop"?s("devserver.stopping","Stopping..."):s("devserver.stop","Stop")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm",onClick:sr,disabled:or,"data-testid":"dev-server-restart-button",children:[r.jsx(jr,{size:14}),r.jsx("span",{children:x==="restart"?s("devserver.restarting","Restarting..."):s("devserver.restart","Restart")})]})]})]})}),r.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":s("devserver.configurationLabel","Dev server configuration"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),v&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),v&&!w&&m.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(ie,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),j&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:j}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:ar,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),n&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:n}),r.jsx("span",{className:"dev-server-candidate-source",children:D??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>P(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:Ze,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),B&&m.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:s("devserver.noScriptsDetected","No dev server scripts detected. Check that your project has a package.json with a dev, start, or similar script.")}),B&&m.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:m.map(i=>{const F=$e(i,n,D);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${F?"dev-server-candidate--selected":""}`,onClick:()=>Ke(i),"data-testid":`dev-server-candidate-${i.scriptName}-${Xe(i.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:i.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:Qr(i.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:Gr(i)})]},`${i.cwd}::${i.scriptName}::${i.command}`)})})]}),r.jsxs("div",{className:"dev-server-section dev-server-executing-task-section",children:[r.jsx("h3",{children:s("devserver.executingTask","Executing Task")}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-task-picker",className:"dev-server-label",children:s("devserver.executingTask","Executing Task")}),r.jsxs("select",{id:"dev-server-task-picker",className:"input dev-server-task-picker",value:c??"",onChange:i=>er(i.target.value.length>0?i.target.value:null),disabled:W.length===0,"aria-label":s("devserver.executingTask","Executing Task"),"data-testid":"dev-server-task-picker",children:[r.jsx("option",{value:"",children:s("devserver.projectRootNoTask","Project root (no task)")}),W.map(i=>r.jsx("option",{value:i.id,children:i.title?`${i.id} — ${i.title}`:i.id},i.id))]}),W.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-no-executing-tasks",children:s("devserver.noExecutingTasks","No executing tasks with a worktree available. Start a task to target its worktree.")}),X&&r.jsxs("div",{className:"dev-server-task-descriptor","data-testid":"dev-server-task-descriptor",children:[r.jsx("div",{className:"dev-server-task-descriptor-header",children:r.jsx("span",{className:"dev-server-candidate-name",children:X.title?`${X.id} — ${X.title}`:X.id})}),r.jsx("p",{className:"dev-server-task-description",children:X.description}),r.jsxs("div",{className:"dev-server-task-worktree",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.targetWorktree","Target worktree")}),r.jsx("code",{children:X.worktree})]})]})]})]}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:s("devserver.command","Command")}),r.jsx("input",{id:"dev-server-command",className:"input",value:V,onChange:i=>N(i.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:d==="running"||d==="starting"})]}),(d==="running"||d==="starting")&&w&&r.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.runningCommand","Running command")}),r.jsx("code",{children:w.config?.command??V})]}),r.jsxs("div",{className:"dev-server-preview-override",children:[r.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:s("devserver.previewUrlOverride","Preview URL Override")}),r.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:y,onChange:i=>a(i.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:nr,disabled:x==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),g&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:g})})]}),r.jsx("div",{className:"dev-server-content",children:r.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":s("devserver.logsLabel","Dev server logs"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.logs","Logs")}),r.jsx("span",{className:"dev-server-muted",children:s("devserver.lines","{{count}} lines",{count:O??T.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(Xr,{entries:T,loading:R,loadingMore:z,hasMore:A,total:O,onLoadMore:h,isRunning:M})})]})}),r.jsxs("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":s("devserver.previewLabel","Dev server preview"),children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Cr,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:g??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),g?` · ${g}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Ie(i=>i==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:K==="embedded"?s("devserver.externalOnly","External only"):s("devserver.embedded","Embedded")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.openInNewTab","Open in new tab"),onClick:de,disabled:!g,"data-testid":"devserver-preview-open-tab",children:r.jsx(Er,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:Qe,disabled:!g,"data-testid":"devserver-preview-refresh",children:r.jsx(Lr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":Ge?"true":"false",children:[!g&&!M&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!g&&M&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.noPreviewDetected","No preview URL detected. Start the dev server or set a manual URL to preview your app.")}),g&&K==="external"&&r.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[r.jsx("p",{children:s("devserver.embeddedPreviewDisabled","Embedded preview is disabled. Open your app in a separate browser tab.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:de,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),g&&K==="embedded"&&Ne&&oe&&r.jsxs("div",{className:H==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[H==="error"?r.jsx(Be,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(He,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:H==="error"?s("devserver.previewFailed","Preview failed"):s("devserver.previewBlocked","Preview blocked")}),ce&&r.jsx("p",{className:"devserver-preview-blocked-context",children:ce})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:s("devserver.openPreviewOrRetry","Open the preview in a new tab, or retry embedded mode after checking your server settings.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:de,"data-testid":"devserver-preview-fallback-open-tab",children:s("devserver.openPreviewInNewTab","Open preview in new tab")}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:je,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),g&&K==="embedded"&&!Ne&&r.jsx(Jr,{url:g,embedStatus:H,onEmbedStatusChange:Ye,iframeRef:G,blockReason:ce,onRetry:je})]})]})]})}export{at as DevServerView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as n,j as r}from"./vendor-react-SZ_qB27O.js";import{a8 as v,a9 as z,aa as D,ab as x,C as j,ac as B,B as S,D as T,P as A,L,p as w}from"./index-ccFe_1av.js";import{u as K}from"./vendor-i18n-GF3RlKbq.js";import{F as R}from"./folder-open-G-9vPAdv.js";function J({value:p,onChange:u,placeholder:f,onInputKeyDown:N,nodeId:b,localNodeId:k}){const{t:i}=K("app"),[e,s]=n.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1,createFolderOpen:!1,createFolderError:null}),[l,h]=n.useState(""),d=n.useCallback(async(t,c=!1)=>{s(o=>({...o,loading:!0,error:null}));try{const o=await v(t,c,b,k);s(a=>({...a,loading:!1,currentPath:o.currentPath,parentPath:o.parentPath,entries:o.entries}))}catch(o){s(a=>({...a,loading:!1,error:o instanceof Error?o.message:"Failed to browse directory"}))}},[b,k]),F=n.useCallback(()=>{s(t=>t.isOpen?{...t,isOpen:!1}:{...t,isOpen:!0})},[]);n.useEffect(()=>{e.isOpen&&!e.loading&&!e.currentPath&&!e.error&&d(p||void 0,e.showHidden)},[e.isOpen,e.loading,e.currentPath,e.error,p,e.showHidden,d,b,k]);const m=n.useCallback(t=>{d(t,e.showHidden)},[d,e.showHidden]),C=n.useCallback(()=>{u(e.currentPath),s(t=>({...t,isOpen:!1}))},[e.currentPath,u]),g=n.useCallback(()=>{s(t=>{const c=!t.showHidden;return{...t,showHidden:c}})},[]);n.useEffect(()=>{e.isOpen&&e.currentPath&&d(e.currentPath,e.showHidden)},[e.showHidden,d]);const P=n.useCallback(()=>{s(t=>({...t,createFolderOpen:!t.createFolderOpen,createFolderError:null})),h("")},[]),y=n.useCallback(async()=>{if(!l.trim()||!e.currentPath)return;const t=l.trim();if(t.includes("/")||t.includes("\\")||t.includes("..")){s(a=>({...a,createFolderError:i("dirPicker.createFolderError","Folder name cannot contain path separators or '..'")}));return}const c=e.currentPath.includes("\\")?"\\":"/",o=e.currentPath.endsWith(c)?e.currentPath+t:e.currentPath+c+t;s(a=>({...a,loading:!0,createFolderError:null}));try{await z(o),h(""),s(a=>({...a,createFolderOpen:!1})),await d(e.currentPath,e.showHidden)}catch(a){s(O=>({...O,loading:!1,createFolderError:a instanceof Error?a.message:"Failed to create folder"}))}},[l,e.currentPath,e.showHidden,d]),H=n.useCallback(t=>{t.key==="Enter"?(t.preventDefault(),y()):t.key==="Escape"&&(s(c=>({...c,createFolderOpen:!1,createFolderError:null})),h(""))},[y]),E=e.currentPath?D(e.currentPath):[];return r.jsxs("div",{className:"directory-picker",children:[r.jsxs("div",{className:"directory-picker-input-row",children:[r.jsx("input",{type:"text",className:"input directory-picker-input",value:p,onChange:t=>u(t.target.value),onKeyDown:N,placeholder:f||i("dirPicker.defaultPlaceholder","/path/to/your/project")}),r.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm directory-picker-browse-btn",onClick:F,"aria-label":e.isOpen?i("dirPicker.closeBrowser","Close directory browser"):i("dirPicker.openBrowser","Browse directories"),children:[e.isOpen?r.jsx(R,{size:16}):r.jsx(x,{size:16}),r.jsx("span",{children:i("dirPicker.browse","Browse")})]})]}),e.isOpen&&r.jsxs("div",{className:"directory-picker-browser",role:"tree","aria-label":i("dirPicker.ariaLabel","Directory browser"),children:[r.jsx("div",{className:"directory-picker-breadcrumbs",children:E.map((t,c)=>r.jsxs("span",{className:"directory-picker-breadcrumb-item",children:[c>0&&r.jsx(j,{size:12,className:"directory-picker-breadcrumb-sep"}),r.jsx("button",{type:"button",className:"directory-picker-breadcrumb",onClick:()=>m(t.path),title:t.path,children:t.label})]},t.path))}),r.jsxs("div",{className:"directory-picker-toolbar",children:[e.parentPath&&r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-up-btn",onClick:()=>m(e.parentPath),"aria-label":i("dirPicker.parentDir","Go to parent directory"),title:i("dirPicker.parentDirTitle","Parent directory"),children:[r.jsx(B,{size:14}),r.jsx("span",{children:i("dirPicker.up","Up")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-hidden-toggle",onClick:g,"aria-label":e.showHidden?i("dirPicker.hideHiddenAria","Hide hidden directories"):i("dirPicker.showHiddenAria","Show hidden directories"),title:e.showHidden?i("dirPicker.hideHiddenTitle","Hide hidden"):i("dirPicker.showHiddenTitle","Show hidden"),children:[e.showHidden?r.jsx(S,{size:14}):r.jsx(T,{size:14}),r.jsx("span",{children:e.showHidden?i("dirPicker.hideHidden","Hide hidden"):i("dirPicker.showHidden","Show hidden")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-create-folder-toggle",onClick:P,"aria-label":i("dirPicker.createFolderAria","Create new folder"),title:i("dirPicker.createFolderTitle","Create folder"),children:[r.jsx(A,{size:14}),r.jsx("span",{children:i("dirPicker.createFolder","New folder")})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(L,{size:20,className:"animate-spin"}),r.jsx("span",{children:i("dirPicker.loading","Loading…")})]}):e.error?r.jsxs("div",{className:"directory-picker-error",children:[r.jsx(w,{size:16}),r.jsx("span",{children:e.error})]}):r.jsx("div",{className:"directory-picker-entries",children:e.entries.length===0?r.jsx("div",{className:"directory-picker-empty",children:i("dirPicker.noSubdirs","No subdirectories")}):e.entries.map(t=>r.jsxs("button",{type:"button",className:"directory-picker-entry",onClick:()=>m(t.path),role:"treeitem",title:t.path,children:[r.jsx(x,{size:16,className:"directory-picker-entry-icon"}),r.jsx("span",{className:"directory-picker-entry-name",children:t.name}),t.hasChildren&&r.jsx(j,{size:14,className:"directory-picker-entry-arrow"})]},t.path))}),e.createFolderOpen&&r.jsxs("div",{className:"directory-picker-create-folder",children:[r.jsx("input",{type:"text",className:"input directory-picker-create-folder-input",value:l,onChange:t=>h(t.target.value),onKeyDown:H,placeholder:i("dirPicker.newFolderPlaceholder","Folder name"),autoFocus:!0}),r.jsxs("div",{className:"directory-picker-create-folder-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:y,disabled:!l.trim()||e.loading||!e.currentPath,children:i("dirPicker.createFolderConfirm","Create")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-secondary",onClick:P,children:i("dirPicker.cancel","Cancel")})]}),e.createFolderError&&r.jsxs("div",{className:"directory-picker-create-folder-error",children:[r.jsx(w,{size:14}),r.jsx("span",{children:e.createFolderError})]})]}),r.jsxs("div",{className:"directory-picker-actions",children:[r.jsx("span",{className:"directory-picker-selected-path",title:e.currentPath,children:e.currentPath}),r.jsx("button",{type:"button",className:"btn btn-primary directory-picker-select-btn",onClick:C,children:i("dirPicker.select","Select")})]})]})]})}export{J as D};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as a,j as e}from"./vendor-react-SZ_qB27O.js";import{ax as le,ay as ie,az as Oe,aA as qe,aB as he,aC as Ke,aD as de,aE as Qe,aF as ue,aG as _e,aH as Ve,V as Ge,aI as U,B as We,D as Xe,aJ as Ie,X as me,R as Je,ak as I,o as Ye,q as fe,s as pe,aK as J,aL as Ze,aM as et,n as xe,C as tt,ac as st}from"./index-ccFe_1av.js";import{u as B}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-Bg-Qjzh8.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";function at(t){const{projectId:i,searchQuery:h,includeProjectFiles:d=!0}=t??{},o=i?`${Oe.DOCUMENTS_PREFIX}${i}`:null,[s,c]=a.useState(()=>{if(!o)return[];const w=le(o,{maxAgeMs:ie});return Array.isArray(w)?w:[]}),[f,r]=a.useState([]),[p,u]=a.useState(()=>s.length===0),[j,b]=a.useState(null),k=a.useRef(null),g=a.useRef(s.length>0),x=a.useRef(null),P=a.useCallback(async()=>{k.current&&k.current.abort();const w=new AbortController;k.current=w;const z=!g.current;z&&u(!0),b(null);const E=qe(h?{q:h}:void 0,i),T=d?he(i):Promise.resolve({files:[]}),[v,S]=await Promise.allSettled([E,T]);if(w.signal.aborted)return;let M=null;if(v.status==="fulfilled"){if(c(v.value),o){const A=v.value.length>500?v.value.slice(0,500):v.value;Ke(o,A,{maxBytes:5e5})}g.current=!0}else M=v.reason instanceof Error?v.reason.message:String(v.reason);if(S.status==="fulfilled"){const A=S.value.files,R=h?.trim().toLowerCase(),F=R?A.filter(H=>H.name.toLowerCase().includes(R)||H.path.toLowerCase().includes(R)):A;r(F)}b(M),z&&u(!1)},[o,d,i,h]);return a.useEffect(()=>{if(!o){g.current=!1,c([]),u(!0);return}const w=le(o,{maxAgeMs:ie});Array.isArray(w)?(c(w),g.current=!0,u(!1)):(g.current=!1,c([]),u(!0))},[o]),a.useEffect(()=>(x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{P()},300),()=>{x.current&&clearTimeout(x.current)}),[P]),a.useEffect(()=>(P(),()=>{k.current&&k.current.abort()}),[]),{documents:s,projectFiles:f,loading:p,error:j,refresh:P}}function nt(t,i){const[h,d]=a.useState([]),[o,s]=a.useState(!0),[c,f]=a.useState(null),r=a.useRef(null),p=a.useRef(!1),u=i?.showHidden??!1,j=a.useCallback(async b=>{r.current&&r.current.abort();const k=new AbortController;r.current=k;const g=!p.current;g&&s(!0),f(null);try{const x=await he(t,{showHidden:b?.showHidden??u});if(k.signal.aborted)return;d(x.files),p.current=!0}catch(x){if(k.signal.aborted)return;f(x instanceof Error?x.message:String(x))}finally{!k.signal.aborted&&g&&s(!1)}},[t,u]);return a.useEffect(()=>(p.current=!1,j({showHidden:u}),()=>{r.current&&r.current.abort()}),[j,u]),{files:h,loading:o,error:c,refresh:j}}const ct=768;function Y(t){return t?new Date(t).toLocaleString():""}function je(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(t>=10*1024?0:1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function we(t,i=200){return t.length<=i?t:`${t.substring(0,i)}…`}function ot({document:t,renderMarkdown:i,onToggleMarkdown:h}){const{t:d}=B("app"),[o,s]=a.useState(!1),c=we(t.content),f=t.content.length>200;return e.jsxs("div",{className:"document-card",children:[e.jsxs("div",{className:"document-card-header",children:[e.jsxs("div",{className:"document-card-key",children:[e.jsx(U,{size:14}),e.jsx("span",{className:"document-card-key-text",children:t.key}),e.jsxs("span",{className:"document-card-revision-badge",children:["v",t.revision]})]}),e.jsx("div",{className:"document-card-actions",children:e.jsx("button",{className:"btn btn-sm document-card-expand-btn",onClick:()=>s(r=>!r),title:o?d("documents.collapse","Collapse"):d("documents.expand","Expand"),"aria-label":o?d("documents.collapseContent","Collapse content"):d("documents.expandContent","Expand content"),children:o?e.jsx(st,{size:14}):e.jsx(xe,{size:14})})})]}),e.jsxs("div",{className:"document-card-meta",children:[e.jsx("span",{className:"document-card-author",children:t.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:Y(t.updatedAt)})]}),e.jsxs("div",{className:`document-card-content${o?" document-card-content--expanded":""}`,children:[o?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"document-card-content-header",children:e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:h,"aria-label":i?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":i,title:i?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),children:i?d("documents.markdown","Markdown"):d("documents.plain","Plain")})}),i?e.jsx("div",{className:"document-card-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(fe,{remarkPlugins:[pe],children:t.content})})}):e.jsx("pre",{className:"document-card-content-text",children:t.content})]}):e.jsx("p",{className:"document-card-preview",children:c}),f&&!o&&e.jsx("p",{className:"document-card-preview-truncated",children:"…"})]})]})}function rt({taskId:t,taskTitle:i,documents:h,onOpenTask:d,renderMarkdownStates:o,onToggleMarkdown:s}){const{t:c}=B("app"),[f,r]=a.useState(!1);return e.jsxs("div",{className:"documents-group",children:[e.jsxs("div",{className:"documents-group-header",children:[e.jsxs("button",{className:"documents-group-toggle-btn",onClick:()=>r(p=>!p),"aria-expanded":f,"aria-label":`${f?c("documents.collapse","Collapse"):c("documents.expand","Expand")} documents for task ${t}`,children:[e.jsx("span",{className:"documents-group-toggle","aria-hidden":"true",children:f?e.jsx(xe,{size:16}):e.jsx(tt,{size:16})}),e.jsx("span",{className:"documents-group-task-id",children:t}),e.jsx("span",{className:"documents-group-task-title",children:i||c("documents.untitled","Untitled")})]}),e.jsx("span",{className:"documents-group-count",children:c("documents.docCount","{{count}} doc{{plural}}",{count:h.length,plural:h.length!==1?"s":""})}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>d(t),"aria-label":c("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:t,title:i||c("documents.untitled","Untitled")}),children:c("documents.openTask","Open task")})]}),f&&e.jsx("div",{className:"documents-group-content",children:h.map(p=>e.jsx(ot,{document:p,renderMarkdown:o.get(p.id)??!1,onToggleMarkdown:()=>s(p.id)},p.id))})]})}function lt({artifact:t,projectId:i,onOpenTask:h,onExpandMedia:d}){const{t:o}=B("app"),s=J(t.id,i),c=Ze(o,t.type),f=t.content?we(t.content,320):t.description,r=t.title||o("documents.untitledArtifact","Untitled artifact"),p=t.type==="image"||t.type==="video",u=a.useCallback(j=>{(j.key==="Enter"||j.key===" ")&&(j.preventDefault(),d(t))},[t,d]);return e.jsxs("article",{className:"document-card documents-artifact-card","aria-label":o("documents.artifactCardLabel","Artifact {{title}}",{title:r}),children:[p?e.jsxs("div",{className:"documents-artifact-preview documents-artifact-preview--expandable",role:"button",tabIndex:0,"aria-label":o("documents.expandArtifact","Expand {{title}}",{title:r}),onClick:()=>d(t),onKeyDown:u,children:[t.type==="image"?e.jsx("img",{className:"documents-artifact-media",src:s,alt:r,loading:"lazy"}):e.jsx("video",{className:"documents-artifact-media",src:s,muted:!0,preload:"metadata","aria-label":o("documents.artifactVideoLabel","Video artifact: {{title}}",{title:r})}),e.jsx("span",{className:"documents-artifact-expand-hint",children:o("documents.expandArtifactHint","Click to expand")})]}):e.jsx("div",{className:"documents-artifact-preview",children:e.jsx(et,{artifact:t,mediaUrl:s,title:r,preview:f,t:o})}),e.jsxs("div",{className:"documents-artifact-body",children:[e.jsxs("div",{className:"documents-artifact-header",children:[e.jsx("span",{className:"documents-artifact-type-badge",children:c}),e.jsx("span",{className:"documents-artifact-author",children:t.authorId})]}),e.jsx("h3",{className:"documents-artifact-title",children:r}),t.description&&e.jsx("p",{className:"documents-artifact-description",children:t.description}),e.jsxs("div",{className:"documents-artifact-meta",children:[e.jsx("span",{children:Y(t.createdAt)}),t.sizeBytes!==void 0&&e.jsx("span",{children:je(t.sizeBytes)})]}),t.taskId&&e.jsx("button",{className:"documents-group-task-link documents-artifact-task-link",onClick:()=>h(t.taskId),"aria-label":o("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:t.taskId,title:t.taskTitle||o("documents.untitled","Untitled")}),children:o("documents.openTask","Open task")})]})]})}function pt({projectId:t,addToast:i,onOpenDetail:h,onOpenArtifactTaskDetail:d,onSendSelectionToTask:o}){const{t:s}=B("app"),[c,f]=a.useState("project"),[r,p]=a.useState(""),[u,j]=a.useState(null),[b,k]=a.useState(!1),[g,x]=a.useState(null),[P,w]=a.useState(!1),[z,E]=a.useState(null),[T,v]=a.useState(!1),S=a.useRef(0),M=a.useRef(!1),A=a.useRef(null),R=a.useRef(null),[F,H]=a.useState(!1),[ke,Z]=a.useState(new Map),[y,O]=a.useState(null),ee=a.useRef(null),q=a.useRef(null),[te,be]=a.useState(!1),ge=de(A,{locked:te}),ve=de(R,{locked:te}),K=F?ge:ve,Ne=c==="tasks"?r.trim():"",ye=c==="artifacts"?r.trim():"",{documents:D,loading:Q,error:Ce,refresh:se}=at({projectId:t,searchQuery:Ne||void 0,includeProjectFiles:!1}),{files:C,loading:_,error:Se,refresh:ae}=nt(t,{showHidden:b}),{artifacts:L,loading:V,error:Fe,refresh:ne}=Qe({projectId:t,searchQuery:ye||void 0});a.useEffect(()=>{const n=()=>{v(window.innerWidth<=ct)};return n(),window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[]),a.useEffect(()=>{M.current=!1,f("project"),j(null),k(!1),x(null),E(null),w(!1),H(!1),Z(new Map),O(null)},[t]),a.useEffect(()=>{M.current||Q||_||V||(C.length>0?f("project"):D.length>0?f("tasks"):L.length>0&&f("artifacts"),M.current=!0)},[L.length,V,D.length,Q,C.length,_]);const G=a.useMemo(()=>{const n=new Map;for(const l of D){const m=n.get(l.taskId)||[];n.set(l.taskId,[...m,l])}return Array.from(n.entries()).map(([l,m])=>{const N=[...m].sort((Ue,Be)=>Be.updatedAt.localeCompare(Ue.updatedAt));return{taskId:l,taskTitle:N[0]?.taskTitle,documents:N,latestUpdated:N[0]?.updatedAt??""}}).sort((l,m)=>m.latestUpdated.localeCompare(l.latestUpdated))},[D]),W=a.useMemo(()=>{const n=r.trim().toLowerCase();return n?C.filter(l=>{const m=l.path.toLowerCase(),N=l.name.toLowerCase();return m.includes(n)||N.includes(n)}):C},[C,r]);a.useEffect(()=>{if(!u)return;C.some(l=>l.path===u.path)||(j(null),x(null),E(null),w(!1))},[C,u]);const Ee=a.useCallback(n=>{p(n.target.value)},[]),Te=a.useCallback(()=>{p("")},[]),X=a.useCallback(n=>{f(n)},[]),Ae=a.useCallback(async n=>{try{const l=await ue(n,t);h(l)}catch{i(`Failed to open task ${n}`,"error")}},[t,h,i]),Le=a.useCallback(async n=>{try{const l=await ue(n,t);(d??h)(l)}catch{i(`Failed to open task ${n}`,"error")}},[t,d,h,i]),Pe=a.useCallback(async n=>{j(n),w(!0),E(null),x(null);const l=S.current+1;S.current=l;try{const m=await _e("project",n.path,t);if(S.current!==l)return;x(m.content)}catch(m){if(S.current!==l)return;const N=m instanceof Error?m.message:`Failed to open ${n.path}`;E(N),i(N,"error")}finally{S.current===l&&w(!1)}},[t,i]),Me=a.useCallback(()=>{j(null),x(null),E(null),w(!1)},[]),Re=a.useCallback(n=>{Z(l=>{const m=new Map(l),N=m.get(n)??!1;return m.set(n,!N),m})},[]),De=a.useCallback(n=>{q.current=document.activeElement instanceof HTMLElement?document.activeElement:null,O(n)},[]),$=a.useCallback(()=>{O(null),q.current?.focus(),q.current=null},[]);a.useEffect(()=>{if(!y)return;const n=document.body.style.overflow;document.body.style.overflow="hidden",ee.current?.focus();const l=m=>{m.key==="Escape"&&(m.preventDefault(),$())};return document.addEventListener("keydown",l),()=>{document.body.style.overflow=n,document.removeEventListener("keydown",l)}},[$,y]);const ze=a.useCallback(n=>{n.target===n.currentTarget&&$()},[$]),ce=c==="project"?Se:c==="tasks"?Ce:Fe,He=a.useCallback(async()=>{if(c==="project"){await ae();return}if(c==="tasks"){await se();return}await ne()},[c,ne,ae,se]),oe=c==="project"?W.length:c==="tasks"?D.length:L.length,$e=u&&o&&K?e.jsx(Ve,{selectedText:K.selectedText,anchorRect:K.anchorRect,filePath:u.path,onSubmit:o,onOpenChange:be}):null,re=c==="project"?s("documents.searchProjectFiles","Search project markdown files…"):c==="tasks"?s("documents.searchTaskDocuments","Search task documents…"):s("documents.searchArtifacts","Search artifacts…");return e.jsxs("div",{className:"documents-view",children:[e.jsxs("div",{className:"documents-view-header",children:[e.jsx(Ge,{icon:U,title:s("documents.title","Artifacts"),actions:e.jsx("span",{className:"documents-view-count",children:s("documents.resultCount","{{count}} result{{plural}}",{count:oe,plural:oe!==1?"s":""})})}),e.jsxs("div",{className:"documents-controls-row",children:[e.jsxs("div",{className:"documents-tab-bar",role:"tablist","aria-label":s("documents.sectionsLabel","Documents sections"),children:[e.jsxs("button",{className:`btn documents-tab${c==="project"?" active":""}`,role:"tab","aria-selected":c==="project","aria-label":s("documents.showProjectFiles","Show project markdown files"),onClick:()=>X("project"),children:[s("documents.projectFilesTab","Project Files"),e.jsx("span",{className:"documents-tab-count",children:C.length})]}),e.jsxs("button",{className:`btn documents-tab${c==="tasks"?" active":""}`,role:"tab","aria-selected":c==="tasks","aria-label":s("documents.showTaskDocuments","Show task documents"),onClick:()=>X("tasks"),children:[s("documents.taskDocumentsTab","Task Documents"),e.jsx("span",{className:"documents-tab-count",children:G.length})]}),e.jsxs("button",{className:`btn documents-tab${c==="artifacts"?" active":""}`,role:"tab","aria-selected":c==="artifacts","aria-label":s("documents.showArtifacts","Show artifacts"),onClick:()=>X("artifacts"),children:[s("documents.artifactsTab","Artifacts"),e.jsx("span",{className:"documents-tab-count",children:L.length})]})]}),c==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>k(n=>!n),"aria-pressed":b,"aria-label":b?s("documents.hideHidden","Hide hidden project files"):s("documents.showHidden","Show hidden project files"),title:b?s("documents.hideHiddenFiles","Hide hidden files"):s("documents.showHiddenFiles","Show hidden files"),children:[b?e.jsx(We,{size:14}):e.jsx(Xe,{size:14}),b?s("documents.hideHiddenLabel","Hide Hidden"):s("documents.showHiddenLabel","Show Hidden")]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(Ie,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:re,value:r,onChange:Ee,"aria-label":re}),r&&e.jsx("button",{className:"documents-search-clear",onClick:Te,"aria-label":s("documents.clearSearch","Clear search"),children:e.jsx(me,{size:16})})]})]})]}),e.jsx("div",{className:"documents-view-content",children:ce?e.jsxs("div",{className:"documents-view-error",children:[e.jsx("p",{children:s("documents.failedToLoad","Failed to load {{type}}: {{error}}",{type:c==="project"?s("documents.projectFiles","project files"):c==="tasks"?s("documents.taskDocuments","task documents"):s("documents.artifacts","artifacts"),error:ce})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void He(),"aria-label":s("documents.retryLoading","Retry loading documents"),children:[e.jsx(Je,{size:16}),s("documents.retry","Retry")]})]}):c==="project"?_&&C.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(I,{label:s("documents.loadingProjectFiles","Loading project markdown files…")})})}):W.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchProject",'No project markdown files match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noMarkdownFiles","No Markdown files found in this project.")})]})}):e.jsxs("div",{className:`documents-project-layout${T?" documents-project-layout--mobile":""}`,children:[(!T||!u)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":s("documents.projectMarkdownFilesLabel","Project markdown files"),children:e.jsx("ul",{className:"markdown-file-list",children:W.map(n=>{const l=u?.path===n.path;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item${l?" markdown-file-item--selected":""}`,onClick:()=>void Pe(n),"aria-label":`Open ${n.path}`,"aria-current":l?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:n.name}),e.jsx("span",{className:"markdown-file-item-path",children:n.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[je(n.size)," · ",Y(n.mtime)]})]})},n.path)})})}),(!T||u)&&e.jsxs("section",{className:"documents-view-main","aria-label":s("documents.projectFilePreviewLabel","Project file content preview"),children:[T&&u&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:Me,"aria-label":s("documents.backToFilesList","Back to project files list"),children:[e.jsx(Ye,{size:14}),s("documents.backToFiles","Back to files")]}),u?e.jsxs("div",{className:"documents-content-viewer",children:[e.jsxs("div",{className:"documents-content-header",children:[e.jsx("p",{className:"documents-file-path-header",children:u.path}),e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>H(n=>!n),"aria-label":F?s("documents.switchToPlainText","Switch to plain text"):s("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":F,title:F?s("documents.switchToPlainText","Switch to plain text"):s("documents.switchToMarkdown","Switch to markdown"),children:F?s("documents.markdown","Markdown"):s("documents.plain","Plain")})]}),P?e.jsx("p",{className:"documents-content-state",children:e.jsx(I,{label:s("documents.loadingFileContent","Loading file content…")})}):z?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:z}):F?e.jsx("div",{ref:A,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(fe,{remarkPlugins:[pe],children:g??""})})}):e.jsx("pre",{ref:R,className:"document-card-content-text documents-content-viewer-text",children:g??""}),$e]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:s("documents.selectFile","Select a Markdown file to view its content.")})})]})]}):c==="artifacts"?V&&L.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:s("documents.loadingArtifacts","Loading artifacts…")})}):L.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchArtifacts",'No artifacts match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noArtifacts","No artifacts yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:s("documents.artifactsCreatedBy","Artifacts are created by agents, users, and system tools.")})]})}):e.jsx("div",{className:`documents-artifact-gallery${T?" documents-artifact-gallery--mobile":""}`,children:L.map(n=>e.jsx(lt,{artifact:n,projectId:t,onOpenTask:Le,onExpandMedia:De},n.id))}):Q&&D.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(I,{label:s("documents.loadingTaskDocuments","Loading task documents…")})})}):G.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchTask",'No task documents match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noTaskDocuments","No task documents yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:s("documents.documentsCreatedIn","Documents are created in task detail tabs.")})]})}):e.jsx("div",{className:"documents-task-list-wrap",children:e.jsx("div",{className:"documents-view-list",children:G.map(({taskId:n,taskTitle:l,documents:m})=>e.jsx(rt,{taskId:n,taskTitle:l,documents:m,onOpenTask:Ae,renderMarkdownStates:ke,onToggleMarkdown:Re},n))})})}),y&&e.jsx("div",{className:"modal-overlay open documents-artifact-lightbox-overlay",role:"dialog","aria-modal":"true","aria-label":s("documents.lightboxLabel","Artifact media preview"),onClick:ze,children:e.jsxs("div",{className:"documents-artifact-lightbox",onClick:n=>n.stopPropagation(),children:[e.jsxs("div",{className:"documents-artifact-lightbox-header",children:[e.jsx("h3",{className:"documents-artifact-lightbox-title",children:y.title||s("documents.untitledArtifact","Untitled artifact")}),e.jsx("button",{ref:ee,className:"modal-close",onClick:$,"aria-label":s("documents.closeLightbox","Close artifact preview"),children:e.jsx(me,{size:20})})]}),e.jsx("div",{className:"documents-artifact-lightbox-media-frame",children:y.type==="image"?e.jsx("img",{className:"documents-artifact-lightbox-media",src:J(y.id,t),alt:y.title||s("documents.untitledArtifact","Untitled artifact")}):e.jsx("video",{className:"documents-artifact-lightbox-media",src:J(y.id,t),controls:!0,autoPlay:!0,"aria-label":s("documents.artifactVideoLabel","Video artifact: {{title}}",{title:y.title||s("documents.untitledArtifact","Untitled artifact")})})})]})})]})}export{pt as DocumentsView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.evals-view{display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}.evals-view__body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-lg);padding:0 var(--space-lg) var(--space-lg);flex:1;min-height:0;overflow:auto}.evals-view__empty{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-lg);text-align:center}.evals-list,.evals-detail{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg)}.evals-toolbar{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) auto;gap:var(--space-sm);align-items:center}.evals-results,.evals-categories,.evals-links,.evals-follow-ups{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.evals-result{width:100%;text-align:left;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-xs)}.evals-result--active{border-color:var(--todo);box-shadow:var(--focus-ring)}.evals-result-title,.evals-detail-title,.evals-title{font-weight:600}.evals-result-meta,.evals-empty-copy,.evals-state{color:var(--text-muted)}.evals-state--error{color:var(--color-error)}.evals-external-link{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--text)}.evals-rationale{white-space:pre-wrap}@media(max-width:768px){.evals-view__body{grid-template-columns:1fr;padding:0 var(--space-md) var(--space-md)}.evals-toolbar{grid-template-columns:1fr}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as l,j as e}from"./vendor-react-SZ_qB27O.js";import{ax as P,ay as L,az as $,aN as Q,aO as Y,aC as D,aP as J,aQ as Z,V as H,T as B,a1 as ee,R as se,ak as ae,ai as te}from"./index-ccFe_1av.js";import{u as le}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-Bg-Qjzh8.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";const re=300,ne=15e3;function K(r){if(!r.trim())return;const s=Number(r);return Number.isFinite(s)?s:void 0}function k(...r){for(const s of r)if(Array.isArray(s))return s;return[]}function f(r){return typeof r=="object"&&r!==null?r:{}}function X(r){const s=f(r),m=f(s.taskSnapshot);return{id:String(s.id??s.evalId??""),runId:String(s.runId??s.batchId??""),taskId:String(s.taskId??m.taskId??""),taskTitle:String(m.title??s.taskTitle??s.title??"Untitled task"),createdAt:String(s.createdAt??s.timestamp??s.updatedAt??new Date(0).toISOString()),overallScore:typeof s.overallScore=="number"?s.overallScore:null,maxScore:typeof s.maxScore=="number"?s.maxScore:null,categoryScores:k(s.categoryScores,f(s.scores).categories)}}function ce(r){const s=f(r);return{...X(s),rationale:String(s.rationale??s.summary??""),evidence:k(s.evidence,f(s.details).evidence),followUps:k(s.followUps,f(s.recommendations).followUps)}}function ie(r){const s=r?.projectId,m=s??"",t=`${$.EVALS_RUNS_PREFIX}${m}`,h=`${$.EVALS_RESULTS_PREFIX}${m}`,p=P(t,{maxAgeMs:L}),v=P(h,{maxAgeMs:L}),S=l.useRef(Array.isArray(p)&&p.length>0||Array.isArray(v)&&v.length>0),[i,g]=l.useState({q:"",runId:"",scoreMin:"",scoreMax:""}),[A,w]=l.useState(()=>Array.isArray(p)?p:[]),[o,C]=l.useState(()=>Array.isArray(v)?v:[]),[u,R]=l.useState(null),[F,b]=l.useState(null),[a,d]=l.useState(0),[y,j]=l.useState(!S.current),[W,z]=l.useState(null),M=l.useRef(0),q=l.useRef(s),_=l.useRef(u);_.current=u;const I=l.useCallback(async()=>{const n=++M.current;S.current||j(!0),z(null);try{const[c,x]=await Promise.all([Q({q:i.q||void 0,runId:i.runId||void 0,scoreMin:K(i.scoreMin),scoreMax:K(i.scoreMax),limit:100,offset:0},s),Y(s)]);if(n!==M.current)return;const E=k(c.results,c.evals,c.items).map(X);C(E),D(h,E.length>500?E.slice(0,500):E,{maxBytes:5e5}),d(typeof c.count=="number"?c.count:E.length);const O=k(x.runs,x.items).map(U=>{const N=f(U),V=f(N.counts);return{id:String(N.id??""),createdAt:String(N.createdAt??""),completedAt:typeof N.completedAt=="string"?N.completedAt:void 0,status:String(N.status??"pending"),evaluatedTaskCount:typeof V.totalTasks=="number"?V.totalTasks:0}});w(O),D(t,O,{maxBytes:5e5}),S.current=!0,_.current&&!E.some(U=>U.id===_.current)&&(R(null),b(null))}catch(c){if(n!==M.current)return;z(c instanceof Error?c.message:"Failed to load evals")}finally{n===M.current&&j(!1)}},[i.q,i.runId,i.scoreMax,i.scoreMin,s,h,t]),T=l.useCallback(async n=>{const c=await J(n,s),x=c.result??c;b(ce(x))},[s]);l.useEffect(()=>{if(q.current===s)return;q.current=s;const n=P(t,{maxAgeMs:L}),c=P(h,{maxAgeMs:L}),x=Array.isArray(n)&&n.length>0||Array.isArray(c)&&c.length>0;w(Array.isArray(n)?n:[]),C(Array.isArray(c)?c:[]),j(!x),S.current=x},[s,h,t]),l.useEffect(()=>{const n=window.setTimeout(()=>{I()},re);return()=>window.clearTimeout(n)},[I]),l.useEffect(()=>{if(!u){b(null);return}T(u)},[T,u]),l.useEffect(()=>{const n=window.setInterval(()=>{I(),u&&T(u)},ne);return()=>window.clearInterval(n)},[T,I,u]);const G=l.useCallback(n=>{_.current=n,R(n)},[]);return{loading:y,error:W,results:o,count:a,runs:A,filters:i,setFilters:g,refresh:I,selectedEvalId:u,setSelectedEvalId:G,selectedEval:F}}function xe({projectId:r,onOpenSettings:s,onOpenTaskDetail:m}){const{t}=le("app"),{loading:h,error:p,results:v,runs:S,filters:i,setFilters:g,selectedEvalId:A,setSelectedEvalId:w,selectedEval:o,refresh:C}=ie({projectId:r}),[u,R]=l.useState(!0);l.useEffect(()=>{let a=!1;return Z(r).then(d=>{if(a)return;const y=d.evalSettings?.enabled;R(y??!1)}).catch(()=>{a||R(!1)}),()=>{a=!0}},[r]);const F=v.length>0,b=l.useMemo(()=>v.find(a=>a.id===A)??null,[v,A]);return u?e.jsxs("section",{className:"evals-view","data-testid":"evals-view",children:[e.jsx(H,{icon:B,title:t("evals.title","Evals")}),e.jsxs("div",{className:"evals-view__body",children:[e.jsxs("div",{className:"evals-list card",children:[e.jsxs("div",{className:"evals-toolbar",children:[e.jsx("input",{className:"input",placeholder:t("evals.searchPlaceholder","Search task or rationale"),value:i.q,onChange:a=>g(d=>({...d,q:a.target.value}))}),e.jsxs("select",{className:"select",value:i.runId,onChange:a=>g(d=>({...d,runId:a.target.value})),children:[e.jsx("option",{value:"",children:t("evals.allRuns","All runs")}),S.map(a=>e.jsx("option",{value:a.id,children:a.id},a.id))]}),e.jsx("input",{className:"input",placeholder:t("evals.minScorePlaceholder","Min score"),value:i.scoreMin,onChange:a=>g(d=>({...d,scoreMin:a.target.value}))}),e.jsx("input",{className:"input",placeholder:t("evals.maxScorePlaceholder","Max score"),value:i.scoreMax,onChange:a=>g(d=>({...d,scoreMax:a.target.value}))}),e.jsx("button",{className:"btn btn-icon",type:"button",onClick:()=>void C(),"aria-label":t("evals.refreshAria","Refresh evals"),children:e.jsx(se,{size:16})})]}),h&&e.jsx("p",{className:"evals-state","data-testid":"evals-loading",children:e.jsx(ae,{label:t("evals.loading","Loading evals…")})}),p&&e.jsx("p",{className:"evals-state evals-state--error",children:p}),!h&&!p&&!F&&e.jsx("p",{className:"evals-state",children:t("evals.empty","No evals yet. Scheduled evals review tasks completed since the last run.")}),e.jsx("ul",{className:"evals-results","data-testid":"evals-results",children:v.map(a=>e.jsx("li",{children:e.jsxs("button",{className:`evals-result ${a.id===A?"evals-result--active":""}`,type:"button",onClick:()=>w(a.id),children:[e.jsx("span",{className:"evals-result-title",children:a.taskTitle}),e.jsxs("span",{className:"evals-result-meta",children:[a.taskId," · ",a.runId," · ",a.overallScore??t("evals.naPlaceholder","n/a")]})]})},a.id))})]}),e.jsxs("div",{className:"evals-detail card","data-testid":"evals-detail",children:[!o&&e.jsx("p",{className:"evals-state",children:t("evals.selectPrompt","Select an evaluation to inspect scores, rationale, and evidence.")}),o&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"evals-detail-title",children:b?.taskTitle??o.taskTitle}),e.jsxs("p",{className:"evals-result-meta",children:[o.taskId," · ",o.runId]}),e.jsx("p",{className:"evals-score",children:t("evals.overallScore","Overall score: {{score}}",{score:o.overallScore??t("evals.naPlaceholder","n/a")})}),e.jsx("ul",{className:"evals-categories",children:o.categoryScores.map(a=>e.jsxs("li",{children:[a.category,": ",a.finalScore]},a.category))}),e.jsx("p",{className:"evals-rationale",children:o.rationale||t("evals.noRationale","No rationale recorded.")}),e.jsxs("div",{children:[e.jsx("h4",{children:t("evals.evidenceHeading","Evidence")}),e.jsx("ul",{className:"evals-links",children:o.evidence.map((a,d)=>{const y=typeof a.metadata?.taskId=="string"?a.metadata.taskId:void 0,j=typeof a.metadata?.url=="string"?a.metadata.url:void 0;return e.jsx("li",{children:y?e.jsx("button",{type:"button",className:"btn",onClick:()=>m?.(y),children:a.ref}):j?e.jsxs("a",{href:j,target:"_blank",rel:"noreferrer",className:"evals-external-link",children:[a.ref,e.jsx(te,{size:14})]}):e.jsx("span",{children:a.ref})},`${a.ref}-${d}`)})})]}),e.jsxs("div",{children:[e.jsx("h4",{children:t("evals.suggestedFollowupsHeading","Suggested follow-up tasks")}),e.jsxs("ul",{className:"evals-follow-ups",children:[o.followUps.length===0&&e.jsx("li",{children:t("evals.noFollowups","None")}),o.followUps.map(a=>e.jsxs("li",{children:[e.jsx("strong",{children:a.title}),e.jsx("p",{children:a.rationale})]},a.suggestionId))]})]})]})]})]})]}):e.jsxs("section",{className:"evals-view","data-testid":"evals-disabled",children:[e.jsx(H,{icon:B,title:t("evals.title","Evals")}),e.jsxs("div",{className:"evals-view__empty",children:[e.jsx("h2",{className:"evals-title",children:t("evals.disabledTitle","Scheduled evals are disabled")}),e.jsx("p",{className:"evals-empty-copy",children:t("evals.enablePrompt","Enable Scheduled Evals to review scored tasks, evidence, and follow-up recommendations.")}),e.jsxs("button",{className:"btn btn-primary",type:"button",onClick:()=>s?.("scheduled-evals"),children:[e.jsx(ee,{size:16}),t("evals.openSettings","Open Scheduled Evals Settings")]})]})]})}export{xe as EvalsView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.experimental-agent-onboarding-modal__textarea{min-height:calc(var(--space-2xl) * 4)}.experimental-agent-onboarding-modal__summary{display:flex;flex-direction:column;gap:var(--space-lg);padding:var(--space-lg)}.experimental-agent-onboarding-modal__summary-section{display:flex;flex-direction:column;gap:var(--space-sm)}.experimental-agent-onboarding-modal__summary-section h4{margin:0;color:var(--text);font-size:calc(var(--space-md) + var(--space-xs) * .25)}.experimental-agent-onboarding-modal__summary-intro{margin:var(--space-sm) 0;color:var(--text-muted)}.experimental-agent-onboarding-modal__summary-section p{margin:0;color:var(--text-muted)}.experimental-agent-onboarding-modal__summary-list{display:flex;flex-direction:column;gap:var(--space-sm);margin:0}.experimental-agent-onboarding-modal__summary-list>div{display:grid;gap:var(--space-sm);grid-template-columns:minmax(0,calc(var(--space-xl) * 5)) minmax(0,1fr)}.experimental-agent-onboarding-modal__summary-list dt{color:var(--text-muted)}.experimental-agent-onboarding-modal__summary-list dd{margin:0;color:var(--text)}.experimental-agent-onboarding-modal__summary-empty{color:var(--text-dim)}.experimental-agent-onboarding-modal__summary-block{white-space:pre-wrap}@media(max-width:768px){.experimental-agent-onboarding-modal__textarea{min-height:calc(var(--space-2xl) * 3)}.experimental-agent-onboarding-modal__summary{gap:var(--space-md);padding:var(--space-md)}.experimental-agent-onboarding-modal__summary-list>div{grid-template-columns:1fr;gap:var(--space-xs)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as s,j as n}from"./vendor-react-SZ_qB27O.js";import{A as F,J as V,K as W,N as G,O as J,Q as K}from"./index-ccFe_1av.js";import{u as U}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-Bg-Qjzh8.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";function en({isOpen:l,onClose:R,onUseDraft:M,projectId:x,existingAgents:P,mode:_="create",existingAgentConfig:L}){const{t:e}=U("app"),[m,d]=s.useState("initial"),[f,S]=s.useState(""),[c,k]=s.useState(null),[C,I]=s.useState(""),[w,A]=s.useState("answer"),[v,p]=s.useState(""),[t,T]=s.useState(null),[H,g]=s.useState(null),[E,y]=s.useState([]),b=_==="edit",o=s.useRef(l),N=s.useCallback(()=>{d("initial"),S(""),k(null),I(""),A("answer"),p(""),T(null),g(null),y([])},[]),Q=s.useMemo(()=>F.map(a=>({id:a.id,label:a.name,description:a.description})),[]);s.useEffect(()=>{if(o.current=l,!c)return;const a=V(c,x,{onThinking:i=>{o.current&&y($=>{const h=[...$],j=h[h.length-1];return j&&!j.question?(h[h.length-1]={...j,thinkingOutput:`${j.thinkingOutput??""}${i}`},h):[...h,{response:{},thinkingOutput:i}]})},onQuestion:i=>{o.current&&(I(i.question),A(i.id),d("question"))},onSummary:i=>{o.current&&(T(i),d("summary"))},onError:i=>{o.current&&(g(i),d("error"))}});return()=>{o.current=!1,a.close()}},[l,c,x]);const u=async()=>{o.current=!1;try{c&&await G(c,x)}catch{}finally{N(),R()}};if(s.useEffect(()=>{o.current=l,l||N()},[l,N]),!l)return null;const r=a=>a==null||a===""?n.jsx("em",{className:"experimental-agent-onboarding-modal__summary-empty",children:e("agents.onboarding.notSet","Not set")}):n.jsx("span",{children:a}),q=async()=>{d("loading"),g(null);try{const a=await J(f,{mode:_,existingAgentConfig:L,existingAgents:P.map(i=>({id:i.id,name:i.name,role:i.role})),templates:Q},x);if(!o.current)return;k(a.sessionId)}catch(a){if(!o.current)return;g(a.message),d("error")}},D=async()=>{if(c){d("loading"),g(null);try{const a={[w]:v};if(y(i=>[...i,{question:{id:w,type:"text",question:C},response:a}]),await K(c,a,x),!o.current)return;p("")}catch(a){if(!o.current)return;g(a.message),d("error")}}},O=async()=>{t&&(M(t),await u())};return n.jsx("div",{className:"modal-overlay open",role:"presentation",children:n.jsxs("div",{className:"modal modal-lg experimental-agent-onboarding-modal",role:"dialog","aria-modal":"true","aria-label":e("agents.onboarding.dialogLabel","AI Interview"),children:[n.jsxs("div",{className:"modal-header",children:[n.jsx("h3",{children:e("agents.onboarding.title","AI Interview")}),n.jsx("button",{className:"modal-close",onClick:()=>void u(),"aria-label":e("common.closeAriaLabel","Close"),children:"×"})]}),E.length>0&&n.jsx(W,{entries:E}),m==="initial"&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-intent",children:b?e("agents.onboarding.intentLabelEdit","What should this agent change or improve?"):e("agents.onboarding.intentLabelCreate","What should this new agent own?")}),n.jsx("textarea",{id:"agent-onboarding-intent",className:"input experimental-agent-onboarding-modal__textarea",value:f,onChange:a=>S(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:!f.trim(),onClick:()=>void q(),children:b?e("agents.onboarding.startInterview","Start interview"):e("agents.onboarding.startOnboarding","Start onboarding")})]})]}),(m==="loading"||m==="question")&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-answer",children:C||e("agents.onboarding.thinking","Thinking...")}),n.jsx("textarea",{id:"agent-onboarding-answer",className:"input experimental-agent-onboarding-modal__textarea",value:v,onChange:a=>p(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:m==="loading"||!v.trim(),onClick:()=>void D(),children:e("agents.onboarding.continue","Continue")})]})]}),m==="summary"&&t&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{children:b?e("agents.onboarding.updatedDraftReady","Updated draft ready for review"):e("agents.onboarding.draftReady","Draft ready for review")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-intro",children:e("agents.onboarding.draftIntro","Review this generated draft. Nothing is applied until you confirm.")}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary card",children:[n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionIdentity","Identity")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldName","Name")}),n.jsx("dd",{children:r(t.name)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRole","Role")}),n.jsx("dd",{children:r(t.role)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTitle","Title")}),n.jsx("dd",{children:r(t.title)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldIcon","Icon")}),n.jsx("dd",{children:r(t.icon)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldReportsTo","Reports To")}),n.jsx("dd",{children:r(t.reportsTo)})]})]})]}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionConfiguration","Configuration")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldInlineInstructions","Inline Instructions")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.instructionsText)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSoul","Soul")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.soul)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldAgentMemory","Agent Memory")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.memory)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSkills","Skills")}),n.jsx("dd",{children:r(t.skills?.join(", "))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldThinkingLevel","Thinking Level")}),n.jsx("dd",{children:r(t.thinkingLevel)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldMaxTurns","Max Turns")}),n.jsx("dd",{children:r(t.maxTurns)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTemplate","Template")}),n.jsx("dd",{children:r(t.templateId)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldPatternAgent","Pattern Agent")}),n.jsx("dd",{children:r(t.patternAgentId)})]})]})]}),(t.heartbeatProcedurePath||t.heartbeatIntervalMs||t.heartbeatEnabled!==void 0||t.modelHint||t.runtimeHint)&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRuntimeHints","Runtime Hints")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatPath","Heartbeat Procedure Path")}),n.jsx("dd",{children:r(t.heartbeatProcedurePath)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatInterval","Heartbeat Interval")}),n.jsx("dd",{children:r(t.heartbeatIntervalMs?`${t.heartbeatIntervalMs}ms`:void 0)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatEnabled","Heartbeat Enabled")}),n.jsx("dd",{children:r(t.heartbeatEnabled===void 0?void 0:t.heartbeatEnabled?e("agents.onboarding.yes","yes"):e("agents.onboarding.no","no"))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldModelHint","Model Hint")}),n.jsx("dd",{children:r(t.modelHint)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRuntimeHint","Runtime Hint")}),n.jsx("dd",{children:r(t.runtimeHint)})]})]})]}),t.rationale&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRationale","Rationale")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-block",children:t.rationale})]})]}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",onClick:()=>void O(),children:b?e("agents.onboarding.applyDraftSettings","Apply draft to settings form"):e("agents.onboarding.applyDraftAgent","Apply draft to agent form")})]})]}),m==="error"&&H&&n.jsxs("div",{className:"form-group",children:[n.jsx("div",{className:"form-error",children:H}),n.jsx("div",{className:"modal-actions",children:n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.close","Close")})})]})]})})}export{en as ExperimentalAgentOnboardingModal};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.goals-view{display:flex;flex:1 1 auto;flex-direction:column;height:100%;min-height:0;min-width:0;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}.goals-view__content{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-lg);min-width:0;min-height:0;padding:var(--space-xl) var(--space-xl) var(--space-xl)}.goals-count{margin:0;color:var(--text-muted)}.goals-add-button{display:inline-flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 2)}.goals-add-button:focus-visible,.goals-card:focus-visible,.goals-activate-button:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.goals-warning{margin:0;padding:var(--space-md);border-radius:var(--radius-md);border:calc(var(--space-xs) / 4) solid var(--color-warning);background:color-mix(in srgb,var(--color-warning) 10%,transparent);color:var(--color-warning)}.goals-error{margin:0}.goals-form{display:flex;flex-direction:column;gap:var(--space-sm)}.goals-form-label{color:var(--text-muted)}.goals-form-label-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.goals-form-draft-button{display:inline-flex;align-items:center;gap:var(--space-xs);align-self:flex-start}.goals-form textarea.input{min-height:calc(var(--space-2xl) * 2);resize:vertical}.goals-form-actions{display:flex;gap:var(--space-sm)}.goals-list{display:flex;flex-direction:column;gap:var(--space-md)}.goals-card{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);scroll-margin-top:var(--space-xl)}.goals-card--anchored{border-color:var(--color-warning);box-shadow:var(--focus-ring-strong)}.goals-card-archived{border-color:color-mix(in srgb,var(--text-muted) 25%,transparent)}.goals-card-main{flex:1;min-width:0}.goals-card-edit{display:flex;flex:1;flex-direction:column;gap:var(--space-sm)}.goals-card-title{margin:0;color:var(--text);font-size:calc(var(--space-md) + var(--space-xs))}.goals-card-description{margin:var(--space-xs) 0 0;color:var(--text-muted)}.goals-card-description>:first-child{margin-top:0}.goals-card-description>:last-child{margin-bottom:0}.goals-card-description-collapsed{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden;max-height:calc(var(--space-md) * 6)}.goals-card-description-toggle{margin-top:var(--space-xs);align-self:flex-start;color:var(--text-muted)}.goals-card-status{margin:var(--space-xs) 0 0;color:var(--text-muted)}.goals-card-actions{display:flex;align-self:flex-start;gap:var(--space-sm)}.goals-linked-missions{display:flex;flex:1;min-width:0;flex-direction:column;gap:var(--space-sm);padding-left:var(--space-md);border-left:calc(var(--space-xs) / 4) solid var(--border)}.goals-linked-missions-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);flex-wrap:wrap}.goals-linked-missions-title{margin:0;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600}.goals-linked-missions-count,.goals-linked-mission-status,.goals-linked-missions-empty{color:var(--text-muted)}.goals-linked-missions-controls{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.goals-linked-missions-picker{flex:1 1 calc(var(--space-xl) * 10);min-width:0}.goals-linked-missions-link-button,.goals-linked-mission-chip,.goals-linked-mission-link{display:inline-flex;align-items:center;gap:var(--space-xs)}.goals-linked-missions-list{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.goals-linked-mission-chip{gap:calc(var(--space-xs) / 2);padding:calc(var(--space-xs) / 2);border:calc(var(--space-xs) / 4) solid var(--border);border-radius:var(--radius-pill);background:var(--surface-1)}.goals-linked-mission-link{border-radius:var(--radius-pill)}.goals-linked-missions-empty{margin:0}.goals-activate-button{min-width:calc(var(--space-2xl) * 2)}.goals-empty{color:var(--text-muted)}@media(min-width:769px)and (max-width:1024px){.goals-card{flex-direction:column;align-items:stretch}.goals-card-actions{align-self:flex-start;flex-wrap:wrap}.goals-linked-missions{padding-left:0;padding-top:var(--space-md);border-left:0;border-top:calc(var(--space-xs) / 4) solid var(--border)}.goals-linked-missions-controls{align-items:stretch}.goals-linked-missions-link-button,.goals-linked-missions-picker{width:100%}}@media(max-width:768px){.goals-card{flex-direction:column;align-items:stretch}.goals-form-actions,.goals-card-actions,.goals-linked-missions-controls{flex-direction:column}.goals-linked-missions{padding-left:0;padding-top:var(--space-md);border-left:0;border-top:calc(var(--space-xs) / 4) solid var(--border)}.goals-linked-missions-link-button,.goals-linked-missions-picker{width:100%}.goals-card-description-collapsed{-webkit-line-clamp:3;max-height:calc(var(--space-md) * 5)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as n,j as t}from"./vendor-react-SZ_qB27O.js";import{V as vs,T as xs,P as js,S as ws,q as Ns,s as Es,v as Ss,X as Ms,w as $s,x as Cs}from"./index-ccFe_1av.js";import{u as Ts}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-Bg-Qjzh8.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";const As=5,Gs=3,Ls=280;function ts(r){return!!(r&&typeof r=="object"&&"code"in r&&r.code==="ACTIVE_GOAL_LIMIT_EXCEEDED")}function Os({initialGoals:r,anchorGoalId:m,onNavigateToMission:es}){const{t:a}=Ts("app"),[d,f]=n.useState(()=>r??[]),[is,v]=n.useState(null),g=n.useRef(null),[x,A]=n.useState(r===void 0),[G,l]=n.useState(null),[as,L]=n.useState(!1),[b,D]=n.useState(""),[P,j]=n.useState(""),[F,c]=n.useState(null),[U,R]=n.useState(!1),[k,w]=n.useState(!1),[N,I]=n.useState(null),[O,E]=n.useState(""),[_,S]=n.useState(""),[V,h]=n.useState(null),[q,B]=n.useState(!1),[ns,os]=n.useState(()=>new Set),[ls,rs]=n.useState([]),[y,M]=n.useState({}),[$,H]=n.useState({}),[C,W]=n.useState(null),[ds,z]=n.useState(null);n.useEffect(()=>{if(r!==void 0)return;let s=!0;return(async()=>{try{A(!0),l(null);const i=await fetch("/api/goals");if(!i.ok)throw new Error(`Failed to load goals (${i.status})`);const o=await i.json();if(!s)return;f(Array.isArray(o.goals)?o.goals:[])}catch{if(!s)return;l(a("goals.loadError","Unable to load goals right now. Please try again."))}finally{s&&A(!1)}})(),()=>{s=!1}},[r]),n.useEffect(()=>{let s=!0;return(async()=>{try{const i=await fetch("/api/missions");if(!i.ok)throw new Error(`Failed to load missions (${i.status})`);const o=await i.json(),u=Array.isArray(o)?o:Array.isArray(o.missions)?o.missions:[];s&&rs(u.map(p=>({id:p.id,title:p.title,status:p.status})))}catch{s&&l(a("goals.missionsLoadError","Unable to load missions right now. Please try again."))}})(),()=>{s=!1}},[a]);const K=async s=>{const e=await fetch(`/api/goals/${encodeURIComponent(s)}/missions`);if(!e.ok)throw new Error(`Failed to load linked missions (${e.status})`);const i=await e.json();return Array.isArray(i.missions)?i.missions:[]};n.useEffect(()=>{let s=!0;return(async()=>{if(d.length===0){M({});return}try{const i=await Promise.all(d.map(async o=>[o.id,await K(o.id)]));s&&M(Object.fromEntries(i))}catch{s&&l(a("goals.linkedMissionsLoadError","Unable to load linked missions right now. Please try again."))}})(),()=>{s=!1}},[d,a]);const T=n.useMemo(()=>d.filter(s=>s.status==="active").length,[d]),cs=T>=Gs&&T<=As;n.useEffect(()=>{if(!m){v(null);return}const s=document.getElementById(`goal-card-${m}`);if(s)return v(m),typeof s.scrollIntoView=="function"&&s.scrollIntoView({behavior:"smooth",block:"center"}),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{v(e=>e===m?null:e),g.current=null},1600),()=>{g.current&&(clearTimeout(g.current),g.current=null)}},[m,d]);function us(){l(null),c(null),L(!0)}function gs(s){I(s.id),E(s.title),S(s.description??""),h(null)}function X(){I(null),E(""),S(""),h(null)}function J(){L(!1),D(""),j(""),c(null),w(!1)}async function ms(){const s=b.trim();if(!s){c(a("goals.titleRequired","Title is required."));return}try{w(!0),c(null);const e=await $s(s);j(e)}catch(e){c(Cs(e))}finally{w(!1)}}async function hs(){const s=b.trim();if(!s){c(a("goals.titleRequired","Title is required."));return}try{R(!0),c(null),l(null);const e=await fetch("/api/goals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:s,description:P})});if(e.ok){const o=await e.json();f(u=>[...u,o]),J();return}let i=null;try{i=await e.json()}catch{i=null}if(e.status===409&&ts(i)){l(a("goals.capError","Cannot activate more than 5 goals. Resolve an active goal before activating another."));return}c(a("goals.createError","Unable to create goal right now. Please try again."))}catch{c(a("goals.createError","Unable to create goal right now. Please try again."))}finally{R(!1)}}async function ps(){if(!N)return;const s=O.trim();if(!s){h(a("goals.titleRequired","Title is required."));return}try{B(!0),h(null);const e=await fetch(`/api/goals/${N}`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({title:s,description:_})});if(!e.ok)throw new Error(`Failed to update goal (${e.status})`);const i=await e.json();f(o=>o.map(u=>u.id===i.id?i:u)),X()}catch{h(a("goals.saveError","Unable to save goal right now. Please try again."))}finally{B(!1)}}function fs(s){return s.length>Ls||s.includes(`
|
|
2
|
+
`)}function bs(s){os(e=>{const i=new Set(e);return i.has(s)?i.delete(s):i.add(s),i})}function Q(s){const e=new Set((y[s]??[]).map(i=>i.id));return ls.filter(i=>!e.has(i.id))}async function Y(s){const e=await K(s);M(i=>({...i,[s]:e})),H(i=>({...i,[s]:""}))}async function ks(s){const e=$[s];if(e)try{W(s),l(null);const i=await fetch(`/api/missions/${encodeURIComponent(e)}/goals/${encodeURIComponent(s)}`,{method:"POST"});if(!i.ok)throw new Error(`Failed to link mission (${i.status})`);await Y(s)}catch{l(a("goals.linkMissionError","Unable to link mission right now. Please try again."))}finally{W(null)}}async function ys(s,e){try{z(`${s}:${e}`),l(null);const i=await fetch(`/api/missions/${encodeURIComponent(e)}/goals/${encodeURIComponent(s)}`,{method:"DELETE"});if(!i.ok)throw new Error(`Failed to unlink mission (${i.status})`);await Y(s)}catch{l(a("goals.unlinkMissionError","Unable to unlink mission right now. Please try again."))}finally{z(null)}}async function Z(s){const e=s.status==="active"?`/api/goals/${s.id}/archive`:`/api/goals/${s.id}/unarchive`;try{l(null);const i=await fetch(e,{method:"POST"});if(i.ok){const u=await i.json();f(p=>p.map(ss=>ss.id===u.id?u:ss));return}let o=null;try{o=await i.json()}catch{o=null}if(i.status===409&&ts(o)){l(a("goals.capError","Cannot activate more than 5 goals. Resolve an active goal before activating another."));return}l(a("goals.updateError","Unable to update goal status right now. Please try again."))}catch{l(a("goals.updateError","Unable to update goal status right now. Please try again."))}}return t.jsxs("section",{className:"goals-view","data-testid":"goals-view",children:[t.jsx(vs,{icon:xs,title:a("goals.title","Goals"),actions:t.jsxs(t.Fragment,{children:[t.jsx("p",{className:"goals-count","data-testid":"goals-active-count",children:a("goals.activeCount","{{count}} active goals",{count:T})}),t.jsxs("button",{type:"button",className:"btn btn-primary goals-add-button",onClick:us,"data-testid":"goals-add-button",children:[t.jsx(js,{size:18,"aria-hidden":"true"}),a("goals.addGoal","Add Goal")]})]})}),t.jsxs("div",{className:"goals-view__content",children:[as?t.jsxs("div",{className:"card goals-form","data-testid":"goals-form",children:[t.jsx("label",{className:"goals-form-label",htmlFor:"goals-form-title",children:a("goals.labelTitle","Title")}),t.jsx("input",{id:"goals-form-title",className:"input",type:"text",value:b,maxLength:200,onChange:s=>D(s.target.value),"data-testid":"goals-form-title"}),t.jsxs("div",{className:"goals-form-label-row",children:[t.jsx("label",{className:"goals-form-label",htmlFor:"goals-form-description",children:a("goals.labelDescription","Description")}),t.jsxs("button",{type:"button",className:"btn goals-form-draft-button",onClick:()=>void ms(),disabled:!b.trim()||k,"data-testid":"goals-form-draft-ai",children:[t.jsx(ws,{"aria-hidden":"true"}),k?a("goals.drafting","Drafting…"):a("goals.draftWithAi","Draft with AI")]})]}),t.jsx("textarea",{id:"goals-form-description",className:"input",value:P,maxLength:5e3,onChange:s=>j(s.target.value),"data-testid":"goals-form-description"}),F?t.jsx("p",{className:"form-error goals-error",role:"alert",children:F}):null,t.jsxs("div",{className:"goals-form-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void hs(),disabled:U||k,"data-testid":"goals-form-submit",children:a("actions.save","Save")}),t.jsx("button",{type:"button",className:"btn",onClick:J,disabled:U||k,"data-testid":"goals-form-cancel",children:a("actions.cancel","Cancel")})]})]}):null,cs?t.jsx("p",{className:"goals-warning",role:"status",children:a("goals.capWarning","Approaching the 5-active goal cap. Keep active goals focused.")}):null,G?t.jsx("p",{className:"form-error goals-error",role:"alert","data-testid":"goals-error",children:G}):null,x?t.jsx("p",{className:"goals-loading",role:"status","data-testid":"goals-loading",children:a("goals.loading","Loading goals…")}):null,!x&&d.length===0?t.jsx("div",{className:"goals-empty card","data-testid":"goals-empty-state",children:a("goals.emptyState","No goals yet. Add one to begin tracking strategic outcomes.")}):null,!x&&d.length>0?t.jsx("div",{className:"goals-list","data-testid":"goals-list",children:d.map(s=>t.jsxs("article",{id:`goal-card-${s.id}`,className:`card goals-card ${s.status==="archived"?"goals-card-archived":""} ${is===s.id?"goals-card--anchored":""}`.trim(),"data-testid":`goal-card-${s.id}`,children:[N===s.id?t.jsxs("div",{className:"goals-card-main goals-card-edit",children:[t.jsx("label",{className:"goals-form-label",htmlFor:`goal-edit-title-${s.id}`,children:a("goals.labelTitle","Title")}),t.jsx("input",{id:`goal-edit-title-${s.id}`,className:"input",type:"text",value:O,maxLength:200,onChange:e=>E(e.target.value),"data-testid":`goal-edit-title-${s.id}`}),t.jsx("label",{className:"goals-form-label",htmlFor:`goal-edit-description-${s.id}`,children:a("goals.labelDescription","Description")}),t.jsx("textarea",{id:`goal-edit-description-${s.id}`,className:"input",value:_,maxLength:5e3,onChange:e=>S(e.target.value),"data-testid":`goal-edit-description-${s.id}`}),V?t.jsx("p",{className:"form-error goals-error",role:"alert",children:V}):null,t.jsxs("div",{className:"goals-card-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void ps(),disabled:q,"data-testid":`goal-edit-save-${s.id}`,children:a("actions.save","Save")}),t.jsx("button",{type:"button",className:"btn",onClick:X,disabled:q,"data-testid":`goal-edit-cancel-${s.id}`,children:a("actions.cancel","Cancel")})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"goals-card-main",children:[t.jsx("h3",{className:"goals-card-title",children:s.title}),s.description?(()=>{const e=fs(s.description),i=ns.has(s.id);return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:`markdown-body goals-card-description ${e&&!i?"goals-card-description-collapsed":""}`.trim(),children:t.jsx(Ns,{remarkPlugins:[Es],children:s.description})}),e?t.jsx("button",{type:"button",className:"btn goals-card-description-toggle","aria-expanded":i,"data-testid":`goal-description-toggle-${s.id}`,onClick:()=>bs(s.id),children:i?a("actions.showLess","Show less"):a("actions.showMore","Show more")}):null]})})():null,t.jsxs("p",{className:"goals-card-status",children:[a("goals.status","Status"),": ",s.status]})]}),t.jsxs("div",{className:"goals-card-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:()=>gs(s),"data-testid":`goal-edit-${s.id}`,children:a("actions.edit","Edit")}),s.status==="active"?t.jsx("button",{type:"button",className:"btn goals-activate-button",onClick:()=>void Z(s),"data-testid":`goal-archive-${s.id}`,children:a("goals.archive","Archive")}):t.jsx("button",{type:"button",className:"btn goals-activate-button",onClick:()=>void Z(s),"data-testid":`goal-unarchive-${s.id}`,children:a("goals.unarchive","Unarchive")})]})]}),t.jsxs("section",{className:"goals-linked-missions","aria-label":a("goals.linkedMissions","Linked missions"),children:[t.jsxs("div",{className:"goals-linked-missions-header",children:[t.jsx("h4",{className:"goals-linked-missions-title",children:a("goals.linkedMissionsTitle","Linked Missions")}),t.jsx("span",{className:"goals-linked-missions-count",children:a("goals.linkedMissionsCount",{count:y[s.id]?.length??0,defaultValue_one:"{{count}} linked",defaultValue_other:"{{count}} linked"})})]}),t.jsxs("div",{className:"goals-linked-missions-controls",children:[t.jsxs("select",{className:"input goals-linked-missions-picker","data-testid":`goal-mission-picker-${s.id}`,value:$[s.id]??"",onChange:e=>H(i=>({...i,[s.id]:e.target.value})),"aria-label":a("goals.missionPicker","Mission to link"),disabled:C===s.id||Q(s.id).length===0,children:[t.jsx("option",{value:"",children:a("goals.selectMission","Select a mission")}),Q(s.id).map(e=>t.jsx("option",{value:e.id,children:e.title},e.id))]}),t.jsxs("button",{type:"button",className:"btn btn-primary goals-linked-missions-link-button","data-testid":`goal-mission-link-button-${s.id}`,disabled:!$[s.id]||C===s.id,onClick:()=>void ks(s.id),children:[t.jsx(Ss,{size:16,"aria-hidden":"true"}),C===s.id?a("goals.linkingMission","Linking…"):a("goals.linkMission","Link mission")]})]}),(y[s.id]?.length??0)>0?t.jsx("div",{className:"goals-linked-missions-list",children:(y[s.id]??[]).map(e=>t.jsxs("div",{className:"goals-linked-mission-chip","data-testid":`goal-linked-mission-chip-${e.id}`,children:[t.jsx("button",{type:"button",className:"btn goals-linked-mission-link",onClick:()=>es?.(e.id),children:e.title}),t.jsx("span",{className:"goals-linked-mission-status",children:e.status}),t.jsx("button",{type:"button",className:"btn-icon goals-linked-mission-unlink","data-testid":`goal-linked-mission-unlink-${e.id}`,"aria-label":a("goals.unlinkMission","Unlink mission"),disabled:ds===`${s.id}:${e.id}`,onClick:()=>void ys(s.id,e.id),children:t.jsx(Ms,{size:16,"aria-hidden":"true"})})]},e.id))}):t.jsx("p",{className:"goals-linked-missions-empty",children:a("goals.noLinkedMissions","No linked missions.")})]})]},s.id))}):null]})]})}export{Os as GoalsView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.insights-view{--insights-divider-color: var(--chrome-divider-color, transparent);display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.insights-view-count{font-size:.8125rem;color:var(--text-muted);font-weight:400}.insights-model-config{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);border-bottom:var(--chrome-divider-width, 1px) solid var(--insights-divider-color);background:var(--surface-subtle)}.insights-model-label{font-size:.8125rem;color:var(--text-muted);white-space:nowrap;flex-shrink:0}.insights-model-config .model-combobox{max-width:320px}.insights-model-toggle{position:relative}.insights-model-indicator{position:absolute;top:2px;right:2px;width:6px;height:6px;border-radius:50%;background:var(--todo, #f59e0b)}.insights-view-close{color:var(--text-muted)}.insights-view-close:hover{color:var(--text)}.insights-refresh-btn{flex:0 0 auto}.insights-status-region{padding:var(--space-md) var(--space-lg);flex-shrink:0}.insights-status-region:empty{padding:0}.insights-status-message{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-size:.8125rem}.insights-status-message--success{background:color-mix(in srgb,var(--color-success) 10%,transparent);color:var(--color-success)}.insights-status-message--error{background:color-mix(in srgb,var(--color-error) 10%,transparent);color:var(--color-error)}.insights-status-message--info{background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent)}.insights-error-callout{display:flex;align-items:center;gap:var(--space-sm);margin:0 var(--space-lg) var(--space-md);padding:var(--space-md);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-error) 30%,transparent);border-radius:var(--radius-md);color:var(--color-error);font-size:.8125rem;flex-shrink:0}.insights-run-info{padding:0 var(--space-lg) var(--space-md);flex-shrink:0}.insights-run-status{font-size:.75rem;color:var(--text-muted)}.insights-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-2xl);color:var(--text-muted)}.insights-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-2xl);text-align:center}.insights-error p{color:var(--text-muted);margin:0}.insights-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:var(--space-2xl);text-align:center;flex:1}.insights-empty h3{margin:0;font-size:1.125rem;color:var(--text)}.insights-empty p{color:var(--text-muted);margin:0;max-width:calc(var(--space-2xl) * 12 + var(--space-lg))}.insights-body{flex:1;min-height:0;display:flex;overflow:hidden}.insights-sidebar{width:calc(var(--space-2xl) * 7 + var(--space-lg));flex-shrink:0;border-right:1px solid var(--border);background:var(--surface);overflow-y:auto;min-height:0}.insights-category-list{list-style:none;margin:0;padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.insights-category-item{width:100%;display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:transparent;border:1px solid transparent;border-radius:var(--radius-md);color:var(--text);font:inherit;font-size:.8125rem;text-align:left;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.insights-category-item:hover{background:var(--surface-1)}.insights-category-item--active{background:color-mix(in srgb,var(--accent) 12%,transparent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);color:var(--accent)}.insights-category-icon{flex-shrink:0;color:var(--accent)}.insights-category-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.insights-category-count{flex-shrink:0;font-size:.75rem;color:var(--text-muted);background:var(--surface-1);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);border:1px solid var(--border)}.insights-category-item--active .insights-category-count{background:var(--surface);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 30%,transparent)}.insights-detail{flex:1;min-width:0;min-height:0;overflow-y:auto;padding:var(--space-lg)}.insights-section{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.insights-section-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md) var(--space-lg);background:var(--surface);border-bottom:var(--chrome-divider-width, 1px) solid var(--insights-divider-color)}.insights-section-title{display:flex;align-items:center;gap:var(--space-sm)}.insights-section-title h3{margin:0;font-size:.9375rem;font-weight:600}.insights-section-icon{color:var(--accent)}.insights-section-count{font-size:.75rem;color:var(--text-muted);background:var(--surface-1);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);border:1px solid var(--border)}.insights-section-content{padding:var(--space-md)}.insights-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-md)}.insight-item{padding:var(--space-md);background:var(--surface);border:1px solid var(--border);border-left:var(--space-xs) solid var(--accent);border-radius:var(--radius-md);transition:border-color var(--transition-fast)}.insight-item:hover{border-color:var(--accent)}.insight-item-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}.insight-item-title{margin:0;font-size:.875rem;font-weight:600;color:var(--text);line-height:1.4}.insight-item-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.insight-item-action-btn{display:inline-flex;align-items:center;justify-content:center;width:calc(var(--space-lg) * 2);height:calc(var(--space-lg) * 2);padding:0;background:transparent;border:none;border-radius:var(--radius-md);color:var(--text-muted);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.insight-item-action-btn:hover:not(:disabled){background:var(--surface-1);color:var(--accent)}.insight-item-action-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.insight-item-action-btn:disabled{opacity:.5;cursor:not-allowed}.insight-item-content{margin:var(--space-sm) 0 0;font-size:.8125rem;color:var(--text-muted);line-height:1.5;white-space:pre-wrap;word-break:break-word}.insight-item-meta{display:flex;align-items:center;gap:var(--space-md);margin-top:var(--space-sm);font-size:.75rem;color:var(--text-muted)}.insight-item-status{padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);text-transform:capitalize;font-weight:500}.insight-item-status--generated{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.insight-item-status--confirmed{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.insight-item-status--stale{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.insight-item-status--dismissed,.insight-item-status--archived{background:color-mix(in srgb,var(--text-dim) 15%,transparent);color:var(--text-dim)}.insight-item--archived{opacity:.6;border-left-color:var(--text-dim)}.insight-item--archived .insight-item-title{text-decoration:line-through;color:var(--text-muted)}.insight-item--archived .insight-item-content{text-decoration:line-through}.insight-item-date{display:flex;align-items:center;gap:var(--space-xs)}@media(max-width:768px){.insights-body{flex-direction:column}.insights-sidebar{width:100%;border-right:none;border-bottom:var(--chrome-divider-width, 1px) solid var(--insights-divider-color);overflow-x:auto;overflow-y:hidden;flex-shrink:0}.insights-category-list{flex-direction:row;flex-wrap:nowrap;padding:var(--space-sm);gap:var(--space-xs)}.insights-category-list>li{flex-shrink:0}.insights-category-item{white-space:nowrap;padding:var(--space-xs) var(--space-sm)}.insights-category-label{overflow:visible;text-overflow:clip}.insights-detail{padding:var(--space-md)}.insights-section-header{padding:var(--space-sm) var(--space-md)}.insights-section-content,.insight-item{padding:var(--space-sm)}.insight-item-title{word-break:break-word}.insight-item-header{flex-direction:column;gap:var(--space-sm)}.insight-item-meta{flex-wrap:wrap;gap:var(--space-sm)}.insight-item-actions{align-self:flex-end}.insight-item-action-btn{width:calc(var(--space-2xl) + var(--space-sm));height:calc(var(--space-2xl) + var(--space-sm))}.view-header__actions .insights-view-actions-btn{min-height:calc(var(--space-2xl) + var(--space-xs))}.insights-show-archived-toggle{max-width:calc(var(--space-2xl) * 5 + var(--space-md));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.insights-view-close{min-height:calc(var(--space-2xl) + var(--space-xs));min-width:calc(var(--space-2xl) + var(--space-xs))}.insights-view-count{font-size:.75rem}.insights-model-config{padding:var(--space-xs) var(--space-md)}.insights-model-config .model-combobox{max-width:200px}}@media(min-width:769px)and (max-width:1024px){.insights-view{flex:1;inline-size:100%;min-inline-size:0;min-block-size:0;overflow:hidden}.insights-body{flex-direction:column;inline-size:100%;min-width:0;min-inline-size:0;min-block-size:0;overflow:hidden}.insights-sidebar{width:100%;min-width:0;min-inline-size:0;border-right:none;border-bottom:var(--chrome-divider-width, 1px) solid var(--insights-divider-color);overflow-x:auto;overflow-y:hidden}.insights-category-list{flex-direction:row;flex-wrap:nowrap}.insights-category-list>li{flex-shrink:0}.insights-category-item{white-space:nowrap}.insights-detail{flex:1 1 0;min-width:0;min-inline-size:0;min-block-size:0;overflow-y:auto}}
|