@polderlabs/bizar 10.2.0 → 10.3.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 +31 -8
- package/bizar-dash/CONTROL_SURFACES.md +0 -1
- package/bizar-dash/dist/assets/{ActivityFeed-JjmOY2AQ.js → ActivityFeed-xXiUCZLB.js} +1 -1
- package/bizar-dash/dist/assets/{ActivityFeed-JjmOY2AQ.js.map → ActivityFeed-xXiUCZLB.js.map} +1 -1
- package/bizar-dash/dist/assets/{ActivityView-BIIMvGWo.js → ActivityView-nOYhCp3h.js} +1 -1
- package/bizar-dash/dist/assets/{ActivityView-BIIMvGWo.js.map → ActivityView-nOYhCp3h.js.map} +1 -1
- package/bizar-dash/dist/assets/{AdminView-DRidJtkq.js → AdminView-Coi4V3sq.js} +1 -1
- package/bizar-dash/dist/assets/{AdminView-DRidJtkq.js.map → AdminView-Coi4V3sq.js.map} +1 -1
- package/bizar-dash/dist/assets/{AgentActivity-79l4SBMC.js → AgentActivity-nEri4lbx.js} +1 -1
- package/bizar-dash/dist/assets/{AgentActivity-79l4SBMC.js.map → AgentActivity-nEri4lbx.js.map} +1 -1
- package/bizar-dash/dist/assets/{AgentsView-0vT4uPSc.js → AgentsView-ByiIJ0ej.js} +3 -3
- package/bizar-dash/dist/assets/{AgentsView-0vT4uPSc.js.map → AgentsView-ByiIJ0ej.js.map} +1 -1
- package/bizar-dash/dist/assets/{Alert-CG5q_s75.js → Alert-Dg_Vwxh5.js} +1 -1
- package/bizar-dash/dist/assets/{Alert-CG5q_s75.js.map → Alert-Dg_Vwxh5.js.map} +1 -1
- package/bizar-dash/dist/assets/{ArtifactsView-DM8ZmpR9.js → ArtifactsView-CGclRNnz.js} +1 -1
- package/bizar-dash/dist/assets/{ArtifactsView-DM8ZmpR9.js.map → ArtifactsView-CGclRNnz.js.map} +1 -1
- package/bizar-dash/dist/assets/{AuthView-BveN94MC.js → AuthView-utVm6M3D.js} +1 -1
- package/bizar-dash/dist/assets/{AuthView-BveN94MC.js.map → AuthView-utVm6M3D.js.map} +1 -1
- package/bizar-dash/dist/assets/{Avatar-ulUPIYTd.js → Avatar-CXDZdKy4.js} +1 -1
- package/bizar-dash/dist/assets/{Avatar-ulUPIYTd.js.map → Avatar-CXDZdKy4.js.map} +1 -1
- package/bizar-dash/dist/assets/{BackgroundJobsView-BWErhqFo.js → BackgroundJobsView-j603pz6o.js} +1 -1
- package/bizar-dash/dist/assets/{BackgroundJobsView-BWErhqFo.js.map → BackgroundJobsView-j603pz6o.js.map} +1 -1
- package/bizar-dash/dist/assets/{BackupView-CnBjzG9N.js → BackupView-DgvnntTE.js} +1 -1
- package/bizar-dash/dist/assets/{BackupView-CnBjzG9N.js.map → BackupView-DgvnntTE.js.map} +1 -1
- package/bizar-dash/dist/assets/{Card-B0imhxMk.js → Card-D9019JOD.js} +1 -1
- package/bizar-dash/dist/assets/{Card-B0imhxMk.js.map → Card-D9019JOD.js.map} +1 -1
- package/bizar-dash/dist/assets/{ChatView-D6zGytzx.js → ChatView-C0cTgj5d.js} +1 -1
- package/bizar-dash/dist/assets/{ChatView-D6zGytzx.js.map → ChatView-C0cTgj5d.js.map} +1 -1
- package/bizar-dash/dist/assets/{Chip-wwZSGwLE.js → Chip-DQtalZ4y.js} +1 -1
- package/bizar-dash/dist/assets/{Chip-wwZSGwLE.js.map → Chip-DQtalZ4y.js.map} +1 -1
- package/bizar-dash/dist/assets/{ClaudeSessionsView-DK1sOLhi.js → ClaudeSessionsView-H3Bqjo6b.js} +1 -1
- package/bizar-dash/dist/assets/{ClaudeSessionsView-DK1sOLhi.js.map → ClaudeSessionsView-H3Bqjo6b.js.map} +1 -1
- package/bizar-dash/dist/assets/{ClipboardView-CZ2lYPr0.js → ClipboardView-BAguaKbx.js} +1 -1
- package/bizar-dash/dist/assets/{ClipboardView-CZ2lYPr0.js.map → ClipboardView-BAguaKbx.js.map} +1 -1
- package/bizar-dash/dist/assets/{ConfigView-D-zT9eNA.js → ConfigView-DWHJgoe8.js} +1 -1
- package/bizar-dash/dist/assets/{ConfigView-D-zT9eNA.js.map → ConfigView-DWHJgoe8.js.map} +1 -1
- package/bizar-dash/dist/assets/{DiagnosticsView-BocV68Lb.js → DiagnosticsView-oCT624hk.js} +1 -1
- package/bizar-dash/dist/assets/{DiagnosticsView-BocV68Lb.js.map → DiagnosticsView-oCT624hk.js.map} +1 -1
- package/bizar-dash/dist/assets/{DialogsView-BVjPI5x7.js → DialogsView-CqHNals_.js} +1 -1
- package/bizar-dash/dist/assets/{DialogsView-BVjPI5x7.js.map → DialogsView-CqHNals_.js.map} +1 -1
- package/bizar-dash/dist/assets/{DoctorView-84gJcZwM.js → DoctorView-6kfQq_Mx.js} +1 -1
- package/bizar-dash/dist/assets/{DoctorView-84gJcZwM.js.map → DoctorView-6kfQq_Mx.js.map} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-BjgVOrcO.js → EmptyState-DLmtBX_6.js} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-BjgVOrcO.js.map → EmptyState-DLmtBX_6.js.map} +1 -1
- package/bizar-dash/dist/assets/{EnvVarsView-BJ2TEzF7.js → EnvVarsView-DySOXlP1.js} +2 -2
- package/bizar-dash/dist/assets/{EnvVarsView-BJ2TEzF7.js.map → EnvVarsView-DySOXlP1.js.map} +1 -1
- package/bizar-dash/dist/assets/{ErrorState-BE3WBFqF.js → ErrorState-Bump8diE.js} +1 -1
- package/bizar-dash/dist/assets/{ErrorState-BE3WBFqF.js.map → ErrorState-Bump8diE.js.map} +1 -1
- package/bizar-dash/dist/assets/{EvalView-BJJ2P-kK.js → EvalView-FnZ5d93z.js} +1 -1
- package/bizar-dash/dist/assets/{EvalView-BJJ2P-kK.js.map → EvalView-FnZ5d93z.js.map} +1 -1
- package/bizar-dash/dist/assets/{GoalsView-pwROHApi.js → GoalsView-C4m1WnVv.js} +1 -1
- package/bizar-dash/dist/assets/{GoalsView-pwROHApi.js.map → GoalsView-C4m1WnVv.js.map} +1 -1
- package/bizar-dash/dist/assets/{Grid-qcvbhx6e.js → Grid-dEnoGGws.js} +1 -1
- package/bizar-dash/dist/assets/{Grid-qcvbhx6e.js.map → Grid-dEnoGGws.js.map} +1 -1
- package/bizar-dash/dist/assets/{HistoryView-C7SSOLJA.js → HistoryView-xdRybjZ2.js} +1 -1
- package/bizar-dash/dist/assets/{HistoryView-C7SSOLJA.js.map → HistoryView-xdRybjZ2.js.map} +1 -1
- package/bizar-dash/dist/assets/{Input-Bgzxf_Hu.js → Input-BSa3lh_-.js} +1 -1
- package/bizar-dash/dist/assets/{Input-Bgzxf_Hu.js.map → Input-BSa3lh_-.js.map} +1 -1
- package/bizar-dash/dist/assets/{LibrariesView-CbFFksox.js → LibrariesView-1zR04Eci.js} +1 -1
- package/bizar-dash/dist/assets/{LibrariesView-CbFFksox.js.map → LibrariesView-1zR04Eci.js.map} +1 -1
- package/bizar-dash/dist/assets/{LightRAGView-BqDrJbRq.js → LightRAGView-PubmA9oL.js} +1 -1
- package/bizar-dash/dist/assets/{LightRAGView-BqDrJbRq.js.map → LightRAGView-PubmA9oL.js.map} +1 -1
- package/bizar-dash/dist/assets/{ListHeader-TjPJrUfY.js → ListHeader-Ak9WJd39.js} +1 -1
- package/bizar-dash/dist/assets/{ListHeader-TjPJrUfY.js.map → ListHeader-Ak9WJd39.js.map} +1 -1
- package/bizar-dash/dist/assets/{MemoryView-BlTeHLhX.js → MemoryView-DBGpuETw.js} +1 -1
- package/bizar-dash/dist/assets/{MemoryView-BlTeHLhX.js.map → MemoryView-DBGpuETw.js.map} +1 -1
- package/bizar-dash/dist/assets/MiscView-DufqBHkX.js +1 -0
- package/bizar-dash/dist/assets/{MiscView-B8QY82Pm.js.map → MiscView-DufqBHkX.js.map} +1 -1
- package/bizar-dash/dist/assets/{ModsView-CvW1OWts.js → ModsView-DcX6eVU2.js} +2 -2
- package/bizar-dash/dist/assets/{ModsView-CvW1OWts.js.map → ModsView-DcX6eVU2.js.map} +1 -1
- package/bizar-dash/dist/assets/{NotificationsView-CsBt5U7x.js → NotificationsView-B8IhHRQC.js} +1 -1
- package/bizar-dash/dist/assets/{NotificationsView-CsBt5U7x.js.map → NotificationsView-B8IhHRQC.js.map} +1 -1
- package/bizar-dash/dist/assets/ObsidianView-DEuk65zS.js +1 -0
- package/bizar-dash/dist/assets/{ObsidianView-BCTejEj2.js.map → ObsidianView-DEuk65zS.js.map} +1 -1
- package/bizar-dash/dist/assets/{OverviewView-BsuPxwnB.js → OverviewView-CTI2spTd.js} +1 -1
- package/bizar-dash/dist/assets/{OverviewView-BsuPxwnB.js.map → OverviewView-CTI2spTd.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProgressBar-DlZTETEn.js → ProgressBar-D3lkz42E.js} +1 -1
- package/bizar-dash/dist/assets/{ProgressBar-DlZTETEn.js.map → ProgressBar-D3lkz42E.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProjectsView-Soxtmpet.js → ProjectsView-Du0LzE7A.js} +1 -1
- package/bizar-dash/dist/assets/{ProjectsView-Soxtmpet.js.map → ProjectsView-Du0LzE7A.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProvidersView-DaCEV9pM.js → ProvidersView-5bCgXwBo.js} +1 -1
- package/bizar-dash/dist/assets/{ProvidersView-DaCEV9pM.js.map → ProvidersView-5bCgXwBo.js.map} +1 -1
- package/bizar-dash/dist/assets/{SchedulesView-DY2ByBj_.js → SchedulesView-DFHdIz5P.js} +1 -1
- package/bizar-dash/dist/assets/{SchedulesView-DY2ByBj_.js.map → SchedulesView-DFHdIz5P.js.map} +1 -1
- package/bizar-dash/dist/assets/{Select-Dbd88_n8.js → Select-C8EJj4NM.js} +1 -1
- package/bizar-dash/dist/assets/{Select-Dbd88_n8.js.map → Select-C8EJj4NM.js.map} +1 -1
- package/bizar-dash/dist/assets/{SettingsRow-CLMNd434.js → SettingsRow-BdOOmYMD.js} +1 -1
- package/bizar-dash/dist/assets/{SettingsRow-CLMNd434.js.map → SettingsRow-BdOOmYMD.js.map} +1 -1
- package/bizar-dash/dist/assets/{SettingsView-b24oFq9x.js → SettingsView-CqwQ6Knv.js} +1 -1
- package/bizar-dash/dist/assets/{SettingsView-b24oFq9x.js.map → SettingsView-CqwQ6Knv.js.map} +1 -1
- package/bizar-dash/dist/assets/{Sheet-DnDid58j.js → Sheet-Cztsvgse.js} +1 -1
- package/bizar-dash/dist/assets/{Sheet-DnDid58j.js.map → Sheet-Cztsvgse.js.map} +1 -1
- package/bizar-dash/dist/assets/{Slider-BJCvKI1I.js → Slider-BexNfF6K.js} +1 -1
- package/bizar-dash/dist/assets/{Slider-BJCvKI1I.js.map → Slider-BexNfF6K.js.map} +1 -1
- package/bizar-dash/dist/assets/{Sparkline-ktqQLdyb.js → Sparkline-CLZBtvsN.js} +1 -1
- package/bizar-dash/dist/assets/{Sparkline-ktqQLdyb.js.map → Sparkline-CLZBtvsN.js.map} +1 -1
- package/bizar-dash/dist/assets/{Switch-CwXfsDii.js → Switch-B1tiRwNK.js} +1 -1
- package/bizar-dash/dist/assets/{Switch-CwXfsDii.js.map → Switch-B1tiRwNK.js.map} +1 -1
- package/bizar-dash/dist/assets/{TasksView-BHmpzFCf.js → TasksView-CT0fPlos.js} +1 -1
- package/bizar-dash/dist/assets/{TasksView-BHmpzFCf.js.map → TasksView-CT0fPlos.js.map} +1 -1
- package/bizar-dash/dist/assets/{Textarea-BzIAwSlp.js → Textarea-D_TPpVMy.js} +1 -1
- package/bizar-dash/dist/assets/{Textarea-BzIAwSlp.js.map → Textarea-D_TPpVMy.js.map} +1 -1
- package/bizar-dash/dist/assets/{UpdateView-CSmX9NN0.js → UpdateView-tD2q2OhW.js} +1 -1
- package/bizar-dash/dist/assets/{UpdateView-CSmX9NN0.js.map → UpdateView-tD2q2OhW.js.map} +1 -1
- package/bizar-dash/dist/assets/{UsageView-COyr_Gfi.js → UsageView-B4BuAFKA.js} +1 -1
- package/bizar-dash/dist/assets/{UsageView-COyr_Gfi.js.map → UsageView-B4BuAFKA.js.map} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-BzYZ3m-e.js → ViewHeader-V_SzbUpw.js} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-BzYZ3m-e.js.map → ViewHeader-V_SzbUpw.js.map} +1 -1
- package/bizar-dash/dist/assets/{VoiceView-D33_xG5t.js → VoiceView-D3vb5OM2.js} +1 -1
- package/bizar-dash/dist/assets/{VoiceView-D33_xG5t.js.map → VoiceView-D3vb5OM2.js.map} +1 -1
- package/bizar-dash/dist/assets/{brain-CM-Vls8r.js → brain-BmfWcitQ.js} +1 -1
- package/bizar-dash/dist/assets/{brain-CM-Vls8r.js.map → brain-BmfWcitQ.js.map} +1 -1
- package/bizar-dash/dist/assets/{calendar-C0lgZk69.js → calendar-VntJUzFB.js} +1 -1
- package/bizar-dash/dist/assets/{calendar-C0lgZk69.js.map → calendar-VntJUzFB.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-Bx_hQEBC.js → circle-KrQQySeK.js} +1 -1
- package/bizar-dash/dist/assets/{circle-Bx_hQEBC.js.map → circle-KrQQySeK.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-alert-DHvsqpw5.js → circle-alert-CQ9MLygI.js} +1 -1
- package/bizar-dash/dist/assets/{circle-alert-DHvsqpw5.js.map → circle-alert-CQ9MLygI.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-check-Bx8wmXR9.js → circle-check-COtVgsWw.js} +1 -1
- package/bizar-dash/dist/assets/{circle-check-Bx8wmXR9.js.map → circle-check-COtVgsWw.js.map} +1 -1
- package/bizar-dash/dist/assets/{clock-CejGoecX.js → clock-C0GlM4qp.js} +1 -1
- package/bizar-dash/dist/assets/{clock-CejGoecX.js.map → clock-C0GlM4qp.js.map} +1 -1
- package/bizar-dash/dist/assets/{download-4cEUWue1.js → download-CW4DmtRe.js} +1 -1
- package/bizar-dash/dist/assets/{download-4cEUWue1.js.map → download-CW4DmtRe.js.map} +1 -1
- package/bizar-dash/dist/assets/{external-link-0NqUhI4i.js → external-link-CAOnh_DH.js} +1 -1
- package/bizar-dash/dist/assets/{external-link-0NqUhI4i.js.map → external-link-CAOnh_DH.js.map} +1 -1
- package/bizar-dash/dist/assets/{file-text-yEMkrSoZ.js → file-text-CS1jB_oV.js} +1 -1
- package/bizar-dash/dist/assets/{file-text-yEMkrSoZ.js.map → file-text-CS1jB_oV.js.map} +1 -1
- package/bizar-dash/dist/assets/{filter-BXt60zAS.js → filter-DyQbml3L.js} +1 -1
- package/bizar-dash/dist/assets/{filter-BXt60zAS.js.map → filter-DyQbml3L.js.map} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-BjG5lNtR.js → git-pull-request-Co6gYfba.js} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-BjG5lNtR.js.map → git-pull-request-Co6gYfba.js.map} +1 -1
- package/bizar-dash/dist/assets/{main-CokHAXWM.js → main-CyAIirBB.js} +28 -33
- package/bizar-dash/dist/assets/main-CyAIirBB.js.map +1 -0
- package/bizar-dash/dist/assets/network-CDn43Gsj.js +6 -0
- package/bizar-dash/dist/assets/network-CDn43Gsj.js.map +1 -0
- package/bizar-dash/dist/assets/{pause-CAmulU0F.js → pause-CKYjSTGX.js} +1 -1
- package/bizar-dash/dist/assets/{pause-CAmulU0F.js.map → pause-CKYjSTGX.js.map} +1 -1
- package/bizar-dash/dist/assets/{pencil-eq5IqBmU.js → pencil-BUJ2DpWs.js} +1 -1
- package/bizar-dash/dist/assets/{pencil-eq5IqBmU.js.map → pencil-BUJ2DpWs.js.map} +1 -1
- package/bizar-dash/dist/assets/{play-BoLrrcBA.js → play-CGxZWqtW.js} +1 -1
- package/bizar-dash/dist/assets/{play-BoLrrcBA.js.map → play-CGxZWqtW.js.map} +1 -1
- package/bizar-dash/dist/assets/{plug-DBrVM9lK.js → plug-CQYGgGSy.js} +1 -1
- package/bizar-dash/dist/assets/{plug-DBrVM9lK.js.map → plug-CQYGgGSy.js.map} +1 -1
- package/bizar-dash/dist/assets/{plus-DENm0hqV.js → plus-fFxt-8z5.js} +1 -1
- package/bizar-dash/dist/assets/{plus-DENm0hqV.js.map → plus-fFxt-8z5.js.map} +1 -1
- package/bizar-dash/dist/assets/{power-DLjXF7zE.js → power-Cjgy2KsI.js} +1 -1
- package/bizar-dash/dist/assets/{power-DLjXF7zE.js.map → power-Cjgy2KsI.js.map} +1 -1
- package/bizar-dash/dist/assets/{power-off-D47cOnG_.js → power-off-B81hLRah.js} +1 -1
- package/bizar-dash/dist/assets/{power-off-D47cOnG_.js.map → power-off-B81hLRah.js.map} +1 -1
- package/bizar-dash/dist/assets/{refresh-ccw-DNrXX9gB.js → refresh-ccw-BCXx86xp.js} +1 -1
- package/bizar-dash/dist/assets/{refresh-ccw-DNrXX9gB.js.map → refresh-ccw-BCXx86xp.js.map} +1 -1
- package/bizar-dash/dist/assets/{refresh-cw-CoAHDpeS.js → refresh-cw-COTg1nZo.js} +1 -1
- package/bizar-dash/dist/assets/{refresh-cw-CoAHDpeS.js.map → refresh-cw-COTg1nZo.js.map} +1 -1
- package/bizar-dash/dist/assets/{rotate-ccw-ObX5awaG.js → rotate-ccw-BZrEVc0Z.js} +1 -1
- package/bizar-dash/dist/assets/{rotate-ccw-ObX5awaG.js.map → rotate-ccw-BZrEVc0Z.js.map} +1 -1
- package/bizar-dash/dist/assets/{rotate-cw-xpPJw9LP.js → rotate-cw-CsTtaLV2.js} +1 -1
- package/bizar-dash/dist/assets/{rotate-cw-xpPJw9LP.js.map → rotate-cw-CsTtaLV2.js.map} +1 -1
- package/bizar-dash/dist/assets/{save-D1iKiJJl.js → save-DtMTge1F.js} +1 -1
- package/bizar-dash/dist/assets/{save-D1iKiJJl.js.map → save-DtMTge1F.js.map} +1 -1
- package/bizar-dash/dist/assets/{send-BRcAhZUm.js → send-DyBhyk8t.js} +1 -1
- package/bizar-dash/dist/assets/{send-BRcAhZUm.js.map → send-DyBhyk8t.js.map} +1 -1
- package/bizar-dash/dist/assets/{shield-alert-C6vEcK-g.js → shield-alert-BPGJlRF8.js} +1 -1
- package/bizar-dash/dist/assets/{shield-alert-C6vEcK-g.js.map → shield-alert-BPGJlRF8.js.map} +1 -1
- package/bizar-dash/dist/assets/{trash-2-DZDjEnNh.js → trash-2-2NsyTU8c.js} +1 -1
- package/bizar-dash/dist/assets/{trash-2-DZDjEnNh.js.map → trash-2-2NsyTU8c.js.map} +1 -1
- package/bizar-dash/dist/assets/{trending-up-DMj-AJVf.js → trending-up-BXwP23VK.js} +1 -1
- package/bizar-dash/dist/assets/{trending-up-DMj-AJVf.js.map → trending-up-BXwP23VK.js.map} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-_2xe_tl4.js → triangle-alert-DFmQ_RXN.js} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-_2xe_tl4.js.map → triangle-alert-DFmQ_RXN.js.map} +1 -1
- package/bizar-dash/dist/assets/{upload-DdDljAeV.js → upload-Cj-HYRYV.js} +1 -1
- package/bizar-dash/dist/assets/{upload-DdDljAeV.js.map → upload-Cj-HYRYV.js.map} +1 -1
- package/bizar-dash/dist/assets/{zap-mHsgh0FP.js → zap-BaOiybcl.js} +1 -1
- package/bizar-dash/dist/assets/{zap-mHsgh0FP.js.map → zap-BaOiybcl.js.map} +1 -1
- package/bizar-dash/dist/index.html +1 -1
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/routes/update.mjs +48 -21
- package/bizar-dash/src/web/v8/App.tsx +0 -4
- package/bizar-dash/src/web/v8/__tests__/new-views.test.tsx +0 -17
- package/bizar-dash/src/web/v8/shell/Sidebar.tsx +0 -1
- package/bizar-dash/src/web/v8/views/Router.tsx +0 -5
- package/bizar-dash/tests/_update-test-helpers.mjs +13 -0
- package/bizar-dash/tests/update-check.test.mjs +18 -13
- package/bizar-dash/tests/update-packages.test.mjs +154 -0
- package/bizar-dash/tests/update-run.test.mjs +17 -80
- package/cli/banner.mjs +1 -1
- package/cli/bin.mjs +8 -1
- package/cli/bootstrap.mjs +1 -1
- package/cli/commands/claude-cmd.mjs +1 -1
- package/cli/commands/deploy/docker.mjs +0 -3
- package/cli/install/banner.mjs +67 -0
- package/cli/install/banner.test.mjs +39 -0
- package/cli/install/index.mjs +32 -0
- package/cli/install/index.test.mjs +61 -0
- package/cli/install/paths.mjs +80 -0
- package/cli/install/paths.test.mjs +77 -0
- package/cli/install/plugin.mjs +161 -0
- package/cli/install/postinstall.mjs +111 -0
- package/cli/install.mjs +13 -600
- package/cli/migrate.mjs +157 -0
- package/cli/migrate.test.mjs +85 -0
- package/cli/provision.mjs +615 -1918
- package/cli/provision.test.mjs +1 -1
- package/cli/service-controller.test.mjs +0 -1
- package/cli/service-env.mjs +0 -1
- package/cli/utils.mjs +0 -1
- package/install.sh +54 -466
- package/package.json +1 -1
- package/packages/sdk/package.json +1 -1
- package/scripts/install-curl.sh +17 -0
- package/bizar-dash/dist/assets/HeadroomView-D1UiTYbt.js +0 -11
- package/bizar-dash/dist/assets/HeadroomView-D1UiTYbt.js.map +0 -1
- package/bizar-dash/dist/assets/MiscView-B8QY82Pm.js +0 -1
- package/bizar-dash/dist/assets/ObsidianView-BCTejEj2.js +0 -1
- package/bizar-dash/dist/assets/main-CokHAXWM.js.map +0 -1
- package/bizar-dash/skills/headroom/SKILL.md +0 -94
- package/bizar-dash/src/server/headroom.mjs +0 -649
- package/bizar-dash/src/server/routes/headroom.mjs +0 -126
- package/bizar-dash/src/web/v8/views/Headroom/HeadroomView.tsx +0 -201
- package/bizar-dash/tests/graphify-mod-spawn.node.test.mjs +0 -90
- package/bizar-dash/tests/headroom-install.test.mjs +0 -173
- package/bizar-dash/tests/headroom-settings.test.mjs +0 -126
- package/bizar-dash/tests/headroom-status.test.mjs +0 -117
- package/bizar-dash/tests/v7-archive/mobile-overview.test.tsx +0 -214
- package/bizar-dash/tests/v7-archive/mobile-settings.test.tsx +0 -181
- package/bizar-dash/tests/v7-archive/navigation/CommandPalette.test.tsx +0 -105
- package/bizar-dash/tests/v7-archive/settings-nav.test.tsx +0 -128
- package/bizar-dash/tests/v7-archive/views/Overview.test.tsx +0 -413
- package/cli/commands/headroom.mjs +0 -204
- package/cli/provision-claude.mjs +0 -1176
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentsView-0vT4uPSc.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/clipboard-copy.js","../../../node_modules/lucide-react/dist/esm/icons/octagon.js","../../src/web/v8/ui/agents/AgentCard.tsx","../../src/web/v8/ui/agents/AgentLiveOutput.tsx","../../src/web/v8/ui/agents/AgentDetail.tsx","../../src/web/v8/views/Agents/AgentHierarchy.tsx","../../src/web/v8/views/Agents/AgentsView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ClipboardCopy = createLucideIcon(\"ClipboardCopy\", [\n [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n [\"path\", { d: \"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\", key: \"4jdomd\" }],\n [\"path\", { d: \"M16 4h2a2 2 0 0 1 2 2v4\", key: \"3hqy98\" }],\n [\"path\", { d: \"M21 14H11\", key: \"1bme5i\" }],\n [\"path\", { d: \"m15 10-4 4 4 4\", key: \"5dvupr\" }]\n]);\n\nexport { ClipboardCopy as default };\n//# sourceMappingURL=clipboard-copy.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Octagon = createLucideIcon(\"Octagon\", [\n [\n \"path\",\n {\n d: \"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z\",\n key: \"2d38gg\"\n }\n ]\n]);\n\nexport { Octagon as default };\n//# sourceMappingURL=octagon.js.map\n","import { type ReactNode } from 'react';\nimport { Activity, Zap } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\nimport { Avatar } from '../data/Avatar.js';\nimport { Badge } from '../data/Badge.js';\nimport { ProgressBar } from '../data/ProgressBar.js';\n\n/**\n * AgentCard — agent tile for the Agents roster.\n *\n * Per PLAN.md, agents are the orchestrator's running entities. Each card\n * shows: name, status (idle/busy/error), role, last activity, and a\n * three-row metrics strip (tasks succeeded/total, success rate, lastSeen).\n *\n * v9.4.0 S45 — replaced the dead single-point sparkline (line 140\n * guarded `tpmHistory.length > 1`, never true) with a data-driven\n * metric strip that always renders when the fields are supplied.\n */\n\nexport type AgentStatus = 'idle' | 'busy' | 'error' | 'paused';\n\nexport interface AgentCardProps {\n id: string;\n name: string;\n role: string;\n status: AgentStatus;\n /** Last activity label (\"2m ago\", \"Just now\"). */\n lastActivity?: string;\n /** Current task the agent is working on. */\n currentTask?: string;\n /** Number of tasks completed in the last 24h. */\n tasksToday?: number;\n /** Tasks succeeded (numerator of the ProgressBar). */\n tasksSucceeded?: number;\n /** Tasks total (denominator of the ProgressBar). */\n tasksTotal?: number;\n /** Success rate as 0..1. Tones the badge: >=0.8 success, >=0.5 warning, else danger. */\n successRate?: number;\n /** Last-seen timestamp in ms-since-epoch. Rendered as relative duration. */\n lastSeenMs?: number;\n /** Click handler — opens agent detail. */\n onOpen?: () => void;\n /** Custom badges row (model, owner). */\n badges?: ReactNode;\n className?: string;\n}\n\nconst STATUS_LABEL: Record<AgentStatus, string> = {\n idle: 'Idle',\n busy: 'Busy',\n error: 'Error',\n paused: 'Paused',\n};\n\nconst STATUS_TONE: Record<AgentStatus, 'success' | 'info' | 'danger' | 'neutral'> = {\n idle: 'neutral',\n busy: 'info',\n error: 'danger',\n paused: 'neutral',\n};\n\nconst STATUS_FG: Record<AgentStatus, string> = {\n idle: 'var(--fg-subtle)',\n busy: 'var(--info)',\n error: 'var(--danger)',\n paused: 'var(--warning)',\n};\n\n/** relativeTime — \"12s\", \"3m\", \"2h\", \"5d\". Returns \"—\" for missing / future timestamps. */\nfunction relativeTime(ms: number | undefined): string {\n if (typeof ms !== 'number' || !Number.isFinite(ms) || ms <= 0) return '—';\n const delta = Math.max(0, Date.now() - ms);\n const sec = Math.floor(delta / 1000);\n if (sec < 60) return `${sec}s ago`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ago`;\n const day = Math.floor(hr / 24);\n return `${day}d ago`;\n}\n\nfunction successTone(rate: number): 'success' | 'warning' | 'danger' {\n if (rate >= 0.8) return 'success';\n if (rate >= 0.5) return 'warning';\n return 'danger';\n}\n\nfunction lastSeenTone(ms: number | undefined): 'neutral' | 'danger' {\n if (typeof ms !== 'number' || !Number.isFinite(ms) || ms <= 0) return 'neutral';\n const days = (Date.now() - ms) / 86_400_000;\n return days > 1 ? 'danger' : 'neutral';\n}\n\nexport function AgentCard(props: AgentCardProps): JSX.Element {\n const {\n name,\n role,\n status,\n lastActivity,\n currentTask,\n tasksToday,\n tasksSucceeded,\n tasksTotal,\n successRate,\n lastSeenMs,\n onOpen,\n badges,\n className,\n } = props;\n\n const showMetrics =\n (typeof tasksSucceeded === 'number' && typeof tasksTotal === 'number') ||\n typeof successRate === 'number' ||\n typeof lastSeenMs === 'number';\n\n return (\n <button\n type=\"button\"\n onClick={onOpen}\n className={cx('v8-agent-card', `v8-agent-card--${status}`, className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--space-3)',\n width: '100%',\n padding: 'var(--space-4)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n textAlign: 'left',\n cursor: 'pointer',\n font: 'inherit',\n color: 'inherit',\n transition: 'border-color var(--motion-fast) var(--ease-out)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-3)' }}>\n <Avatar name={name} status={status === 'busy' ? 'busy' : status === 'error' ? 'busy' : status === 'idle' ? 'online' : 'away'} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 'var(--fs-14)', fontWeight: 600, color: 'var(--fg)', lineHeight: 'var(--lh-snug)' }}>\n {name}\n </div>\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', marginTop: 2 }}>\n {role}\n </div>\n </div>\n <Badge tone={STATUS_TONE[status]} dot>\n {STATUS_LABEL[status]}\n </Badge>\n </div>\n {currentTask !== undefined && (\n <div\n style={{\n fontSize: 'var(--fs-13)',\n color: 'var(--fg)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n padding: 'var(--space-2) var(--space-3)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={currentTask}\n >\n {currentTask}\n </div>\n )}\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-3)', fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {lastActivity !== undefined && (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4 }}>\n <Activity size={12} aria-hidden=\"true\" style={{ color: STATUS_FG[status] }} />\n {lastActivity}\n </span>\n )}\n {tasksToday !== undefined && (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4 }}>\n <Zap size={12} aria-hidden=\"true\" />\n {tasksToday} today\n </span>\n )}\n </div>\n {showMetrics && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--space-2)' }}>\n {typeof tasksSucceeded === 'number' && typeof tasksTotal === 'number' && tasksTotal > 0 && (\n <div data-testid=\"agent-card-tasks\" style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'space-between',\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n }}\n >\n <span style={{ textTransform: 'uppercase', letterSpacing: '0.04em' }}>tasks</span>\n <code style={{ fontFamily: 'var(--font-mono)', color: 'var(--fg)' }}>\n {tasksSucceeded} / {tasksTotal}\n </code>\n </div>\n <ProgressBar value={tasksSucceeded} max={tasksTotal} tone=\"accent\" height={4} />\n </div>\n )}\n {typeof successRate === 'number' && (\n <div\n data-testid=\"agent-card-success\"\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}\n >\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', textTransform: 'uppercase', letterSpacing: '0.04em' }}>\n success\n </span>\n <Badge data-testid=\"agent-card-success-badge\" tone={successTone(successRate)}>\n {Math.round(successRate * 100)}% success\n </Badge>\n </div>\n )}\n {typeof lastSeenMs === 'number' && (\n <div\n data-testid=\"agent-card-lastseen\"\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}\n >\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', textTransform: 'uppercase', letterSpacing: '0.04em' }}>\n last seen\n </span>\n <Badge data-testid=\"agent-card-lastseen-badge\" tone={lastSeenTone(lastSeenMs)}>{relativeTime(lastSeenMs)}</Badge>\n </div>\n )}\n </div>\n )}\n {badges !== undefined && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>{badges}</div>\n )}\n <style>{`\n .v8-agent-card:hover { border-color: var(--accent); }\n `}</style>\n </button>\n );\n}","import { useEffect, useRef, useState } from 'react';\nimport { Pause, Play, RefreshCw } from 'lucide-react';\nimport { Stack } from '../primitives/Stack.js';\nimport { Inline } from '../primitives/Inline.js';\nimport { Button } from '../controls/Button.js';\n\n/**\n * AgentLiveOutput — Sprint S17. Live SSE tail of a CC agent's session\n * JSONL. Subscribes to `/api/agent-stream/live?sessionId=...` and\n * appends events as they arrive. Pause freezes the buffer (connection\n * stays open). Clear wipes the buffer.\n */\n\ninterface StreamEvent {\n type?: string;\n role?: string;\n content?: string;\n name?: string;\n input?: unknown;\n tool?: { name?: string; input?: unknown };\n result?: unknown;\n ts?: number;\n message?: string;\n}\n\nexport interface AgentLiveOutputProps {\n sessionId: string;\n /** When true the parent wants us to stop connecting (e.g. agent was killed). */\n paused?: boolean;\n}\n\nconst MAX_EVENTS = 500;\n\nexport function AgentLiveOutput(props: AgentLiveOutputProps): JSX.Element {\n const { sessionId, paused } = props;\n const [events, setEvents] = useState<StreamEvent[]>([]);\n const [status, setStatus] = useState<'connecting' | 'live' | 'paused' | 'error' | 'closed'>('connecting');\n const [error, setError] = useState<string | null>(null);\n const [pausedLocal, setPausedLocal] = useState<boolean>(false);\n const [autoScroll, setAutoScroll] = useState<boolean>(true);\n const containerRef = useRef<HTMLDivElement>(null);\n const sourceRef = useRef<EventSource | null>(null);\n\n useEffect(() => {\n if (paused || pausedLocal) {\n if (sourceRef.current) {\n sourceRef.current.close();\n sourceRef.current = null;\n }\n setStatus('paused');\n return;\n }\n if (typeof window === 'undefined' || typeof EventSource === 'undefined') {\n setStatus('error');\n setError('EventSource not available in this environment.');\n return;\n }\n setStatus('connecting');\n setError(null);\n const url = `/api/agent-stream/live?sessionId=${encodeURIComponent(sessionId)}`;\n const src = new EventSource(url);\n sourceRef.current = src;\n\n const onSnapshot = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as { events?: StreamEvent[] };\n if (Array.isArray(data.events)) setEvents(data.events.slice(-MAX_EVENTS));\n setStatus('live');\n } catch { /* malformed */ }\n };\n const onEvent = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as StreamEvent;\n setEvents((prev) => {\n const next = prev.length >= MAX_EVENTS ? prev.slice(prev.length - MAX_EVENTS + 1) : prev.slice();\n next.push(data);\n return next;\n });\n setStatus('live');\n } catch { /* malformed */ }\n };\n const onEnd = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as { reason?: string };\n setStatus('closed');\n setError(data.reason ? `Stream ended: ${data.reason}` : null);\n } catch { /* */ }\n };\n const onErrEv = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as { error?: string };\n setStatus('error');\n setError(data.error || 'stream error');\n } catch { /* */ }\n };\n src.addEventListener('snapshot', onSnapshot);\n src.addEventListener('event', onEvent);\n src.addEventListener('agent:event', onEvent);\n src.addEventListener('end', onEnd);\n src.addEventListener('error', onErrEv);\n src.onerror = () => {\n setStatus('error');\n setError('Connection dropped. Click Retry to reconnect.');\n };\n return () => {\n src.close();\n sourceRef.current = null;\n };\n }, [sessionId, paused, pausedLocal]);\n\n useEffect(() => {\n if (!autoScroll || !containerRef.current) return;\n const el = containerRef.current;\n el.scrollTop = el.scrollHeight;\n }, [events, autoScroll]);\n\n const renderEvent = (ev: StreamEvent, idx: number): JSX.Element => {\n const tone =\n ev.role === 'user' ? 'user' :\n ev.role === 'assistant' ? 'assistant' :\n ev.tool?.name ? 'tool' :\n 'system';\n const label =\n ev.tool?.name ? `${ev.tool.name}` :\n ev.role ? ev.role : (ev.type || 'event');\n const text =\n typeof ev.content === 'string' ? ev.content :\n ev.tool?.input ? JSON.stringify(ev.tool.input).slice(0, 240) :\n typeof ev.message === 'string' ? ev.message :\n ev.result ? JSON.stringify(ev.result).slice(0, 240) :\n JSON.stringify(ev).slice(0, 240);\n return (\n <div\n key={idx}\n style={{\n padding: '4px 8px',\n borderRadius: 'var(--radius-sm)',\n background:\n tone === 'user' ? 'color-mix(in oklch, var(--accent) 8%, var(--surface-0))' :\n tone === 'tool' ? 'color-mix(in oklch, var(--warning) 8%, var(--surface-0))' :\n tone === 'system' ? 'var(--surface-1)' :\n 'var(--surface-0)',\n fontFamily: 'var(--font-mono)',\n fontSize: 'var(--fs-12)',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n <span style={{ color: 'var(--fg-muted)' }}>{label}: </span>\n <span style={{ color: 'var(--fg)' }}>{text}</span>\n </div>\n );\n };\n\n return (\n <Stack gap={2}>\n <Inline align=\"center\" justify=\"between\">\n <Inline align=\"center\" gap={2}>\n <span\n aria-hidden\n style={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n background:\n status === 'live' ? 'var(--success)' :\n status === 'connecting' ? 'var(--warning)' :\n status === 'paused' ? 'var(--fg-muted)' :\n status === 'closed' ? 'var(--fg-muted)' :\n 'var(--danger)',\n }}\n />\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {status === 'live' ? 'Live' :\n status === 'connecting' ? 'Connecting…' :\n status === 'paused' ? 'Paused' :\n status === 'closed' ? 'Closed' :\n 'Error'}\n {' · '}{events.length} events\n </span>\n </Inline>\n <Inline align=\"center\" gap={1}>\n <Button\n variant=\"ghost\"\n onClick={() => setPausedLocal((p) => !p)}\n title={pausedLocal ? 'Resume stream' : 'Pause stream'}\n aria-label={pausedLocal ? 'Resume stream' : 'Pause stream'}\n >\n {pausedLocal ? <Play size={12} aria-hidden /> : <Pause size={12} aria-hidden />}\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => setEvents([])}\n title=\"Clear buffer\"\n aria-label=\"Clear output\"\n >\n Clear\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => {\n setEvents([]);\n setPausedLocal(false);\n }}\n title=\"Reconnect\"\n aria-label=\"Reconnect stream\"\n >\n <RefreshCw size={12} aria-hidden /> Retry\n </Button>\n <label style={{ display: 'flex', alignItems: 'center', gap: 4, fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', cursor: 'pointer' }}>\n <input type=\"checkbox\" checked={autoScroll} onChange={(e) => setAutoScroll(e.target.checked)} />\n follow\n </label>\n </Inline>\n </Inline>\n {error !== null && (\n <div role=\"alert\" style={{ fontSize: 'var(--fs-12)', color: 'var(--danger)' }}>{error}</div>\n )}\n <div\n ref={containerRef}\n onScroll={(e) => {\n const el = e.currentTarget;\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 20;\n setAutoScroll(atBottom);\n }}\n style={{\n maxHeight: 280,\n minHeight: 120,\n overflowY: 'auto',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n padding: 'var(--space-2)',\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n background: 'var(--surface-1)',\n }}\n role=\"log\"\n aria-live=\"polite\"\n aria-label=\"Agent live output\"\n >\n {events.length === 0 ? (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {status === 'connecting' ? 'Connecting to agent stream…' : 'No events yet.'}\n </span>\n ) : (\n events.map(renderEvent)\n )}\n </div>\n </Stack>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport { Send, RotateCw, Octagon, ClipboardCopy, Activity as ActivityIcon } from 'lucide-react';\nimport { Avatar } from '../data/Avatar.js';\nimport { Badge } from '../data/Badge.js';\nimport { Button } from '../controls/Button.js';\nimport { Sheet, SheetContent } from '../feedback/Sheet.js';\nimport { Stack } from '../primitives/Stack.js';\nimport { Inline } from '../primitives/Inline.js';\nimport { Textarea } from '../controls/Textarea.js';\nimport { Skeleton } from '../feedback/Skeleton.js';\nimport { Card, CardBody } from '../data/Card.js';\nimport { AgentStreamPanel } from './AgentStreamPanel.js';\nimport { AgentLiveOutput } from './AgentLiveOutput.js';\nimport { fetchJson } from '../../data/fetcher.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport type { Task } from '../../data/types.js';\n\n/**\n * AgentDetail — Sprint S11. Right-side Drawer with live agent\n * detail and the control plane (Send prompt / Restart / Kill).\n *\n * Two flavors per `source`:\n * - `bizar:<name>` — hits `/api/agents/:name/invoke` and `/restart`.\n * - `cc:<sessionId>` — hits `/api/cc-agents/:id/send` and `/kill`.\n */\n\nexport type AgentSource = 'bizar' | 'claude-code';\n\nexport interface AgentDetailProps {\n /** Composite id from AgentsView (`bizar:<name>` or `cc:<sessionId>`). */\n agentId: string;\n name: string;\n role: string;\n status: 'idle' | 'busy' | 'error' | 'paused';\n currentTask?: string;\n startedAt?: number;\n messageCount?: number;\n lastMessageSnippet?: string;\n successRate?: number;\n tasksTotal?: number;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nfunction parseId(agentId: string): { source: AgentSource; key: string } {\n if (agentId.startsWith('bizar:')) return { source: 'bizar', key: agentId.slice('bizar:'.length) };\n if (agentId.startsWith('cc:')) return { source: 'claude-code', key: agentId.slice('cc:'.length) };\n return { source: 'bizar', key: agentId };\n}\n\nexport function AgentDetail(props: AgentDetailProps): JSX.Element {\n const {\n agentId, name, role, status, currentTask, open, onOpenChange,\n startedAt, messageCount, lastMessageSnippet, successRate, tasksTotal,\n } = props;\n const { source, key } = parseId(agentId);\n const [prompt, setPrompt] = useState<string>('');\n const [busy, setBusy] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [lastProcessId, setLastProcessId] = useState<string | null>(null);\n\n // v9.5.0 S49 — agent↔task drilldown. `useFetch` is gated on `open` so\n // we don't burn a request every time the Sheet is mounted-hidden. We\n // client-filter for the current agent's name across both `workedBy`\n // (Bizar task-store) and `metadata.agent` (task-store progress events).\n const tasksQuery = useFetch<{ tasks?: Task[] }>(open ? '/api/tasks' : null);\n const myTasks = useMemo<Task[]>(() => {\n if (!open) return [];\n const all = tasksQuery.data?.tasks ?? [];\n return all.filter((t) => {\n const md = (t.metadata ?? {}) as { agent?: unknown };\n return (\n (typeof (t as unknown as { workedBy?: unknown }).workedBy === 'string'\n && (t as unknown as { workedBy: string }).workedBy === key)\n || md.agent === key\n );\n });\n }, [open, tasksQuery.data, key]);\n\n useEffect(() => {\n if (open) { setPrompt(''); setMessage(null); setError(null); setLastProcessId(null); }\n }, [open, agentId]);\n\n const runAction = async (\n label: string,\n method: 'POST',\n endpoint: string,\n body?: Record<string, unknown>,\n ): Promise<void> => {\n setBusy(label);\n setMessage(null);\n setError(null);\n try {\n const res = await fetchJson<{ ok?: boolean; sessionId?: string; processId?: string; error?: string }>(\n endpoint,\n { method, body },\n );\n if (res.ok) {\n const sessionExtra = res.sessionId ? ` (session ${res.sessionId.slice(0, 8)})` : '';\n if (res.processId) setLastProcessId(res.processId);\n setMessage(`${label} succeeded${sessionExtra}`);\n } else {\n setError(res.error || `${label} failed`);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n };\n\n const sendPrompt = async (): Promise<void> => {\n if (!prompt.trim()) return;\n const trimmed = prompt.trim();\n setPrompt('');\n if (source === 'claude-code') {\n await runAction('Send prompt', 'POST', `/api/cc-agents/${encodeURIComponent(key)}/send`, { prompt: trimmed });\n } else {\n await runAction('Invoke agent', 'POST', `/api/agents/${encodeURIComponent(key)}/invoke`, { prompt: trimmed });\n }\n };\n\n const restart = async (): Promise<void> => {\n const ok = typeof window !== 'undefined' && typeof window.confirm === 'function'\n ? window.confirm(`Restart ${name}? The current session will be killed and a fresh one spawned.`)\n : true;\n if (!ok) return;\n if (source === 'claude-code') {\n // v9.0.5 — server now does kill+spawn in one shot, using the current\n // prompt as the new session's seed (fallback to \"continue\").\n const seed = prompt.trim() || 'continue from the last checkpoint';\n await runAction('Restart', 'POST', `/api/cc-agents/${encodeURIComponent(key)}/restart`, { prompt: seed });\n return;\n }\n await runAction('Restart', 'POST', `/api/agents/${encodeURIComponent(key)}/restart`);\n };\n\n const kill = async (): Promise<void> => {\n if (source === 'claude-code') {\n await runAction('Kill', 'POST', `/api/cc-agents/${encodeURIComponent(key)}/kill`);\n return;\n }\n // Confirm before destroying — DELETE is irreversible.\n const ok = typeof window !== 'undefined' && typeof window.confirm === 'function'\n ? window.confirm(`Delete Bizar agent \"${key}\"? This is irreversible.`)\n : true;\n if (!ok) return;\n setBusy('Kill');\n setMessage(null);\n setError(null);\n try {\n await fetchJson<{ ok?: boolean; error?: string }>(\n `/api/agents/${encodeURIComponent(key)}`,\n { method: 'DELETE' },\n );\n setMessage(`Killed ${name}`);\n // Server broadcasts agents:change; close the drawer so the user\n // sees the agent disappear from the grid.\n onOpenChange(false);\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n };\n\n const copyId = async (): Promise<void> => {\n try {\n await navigator.clipboard.writeText(key);\n setMessage(`Copied \"${key}\"`);\n } catch {\n setError('Clipboard unavailable');\n }\n };\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent side=\"right\" title={name}>\n <Stack gap={4} style={{ padding: 'var(--space-4)' }}>\n <Inline gap={3} align=\"center\">\n <Avatar name={name} status={status === 'busy' ? 'busy' : status === 'error' ? 'busy' : 'online'} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)' }}>{role}</div>\n <Inline gap={2} style={{ marginTop: 4 }} wrap>\n <Badge tone={status === 'busy' ? 'info' : status === 'error' ? 'danger' : 'neutral'} dot>\n {status}\n </Badge>\n <Badge tone=\"accent\">{source === 'bizar' ? 'Bizar agent' : 'Claude Code'}</Badge>\n {startedAt !== undefined && (\n <Badge tone=\"neutral\" title={new Date(startedAt).toLocaleString()}>\n up {formatDuration(Date.now() - startedAt)}\n </Badge>\n )}\n {typeof messageCount === 'number' && (\n <Badge tone=\"neutral\">{messageCount} msg</Badge>\n )}\n {typeof tasksTotal === 'number' && (\n <Badge tone=\"neutral\">{tasksTotal} tasks</Badge>\n )}\n {typeof successRate === 'number' && (\n <Badge tone={successRate >= 0.8 ? 'success' : successRate >= 0.5 ? 'warning' : 'danger'}>\n {Math.round(successRate * 100)}% success\n </Badge>\n )}\n </Inline>\n </div>\n </Inline>\n\n {typeof lastMessageSnippet === 'string' && lastMessageSnippet.length > 0 && (\n <div\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n fontStyle: 'italic',\n }}\n title={lastMessageSnippet}\n >\n “{lastMessageSnippet.length > 240 ? `${lastMessageSnippet.slice(0, 240)}…` : lastMessageSnippet}”\n </div>\n )}\n\n {currentTask !== undefined && (\n <div\n style={{\n padding: 'var(--space-3)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-13)',\n }}\n >\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', marginBottom: 4 }}>\n <ActivityIcon size={12} aria-hidden style={{ verticalAlign: 'middle', marginRight: 4 }} />\n Current task\n </div>\n {currentTask}\n </div>\n )}\n\n <Stack gap={2}>\n <label\n htmlFor={`agent-prompt-${agentId}`}\n style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}\n >\n Send a prompt\n </label>\n <Textarea\n id={`agent-prompt-${agentId}`}\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder={source === 'claude-code' ? 'Type a follow-up for this background agent…' : 'Invoke this Bizar agent with…'}\n rows={3}\n disabled={busy !== null}\n />\n <Inline gap={2}>\n <Button\n variant=\"primary\"\n onClick={() => { void sendPrompt(); }}\n disabled={!prompt.trim() || busy !== null}\n >\n <Send size={14} aria-hidden /> {busy === 'Send prompt' || busy === 'Invoke agent' ? <Skeleton style={{ width: 60, height: 14 }} /> : 'Send'}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => { void restart(); }}\n disabled={busy !== null || source === 'claude-code'}\n title={source === 'claude-code' ? 'Use command palette to spawn a fresh agent' : undefined}\n >\n <RotateCw size={14} aria-hidden /> Restart\n </Button>\n <Button\n variant=\"danger\"\n onClick={() => { void kill(); }}\n disabled={busy !== null}\n title={source === 'claude-code' ? 'Kill the CC background session' : `Delete Bizar agent \"${key}\"`}\n >\n <Octagon size={14} aria-hidden /> Kill\n </Button>\n <Button variant=\"ghost\" onClick={() => { void copyId(); }}>\n <ClipboardCopy size={14} aria-hidden /> Copy id\n </Button>\n </Inline>\n </Stack>\n\n {message !== null && (\n <div\n role=\"status\"\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'color-mix(in oklch, var(--success) 12%, var(--surface-0))',\n border: '1px solid color-mix(in oklch, var(--success) 40%, var(--border))',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--success)',\n }}\n >\n {message}\n </div>\n )}\n {lastProcessId !== null && (\n <div\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n }}\n >\n <span style={{ textTransform: 'uppercase', letterSpacing: '0.04em' }}>PID</span>\n <code\n data-testid=\"agent-process-id\"\n style={{\n fontFamily: 'var(--font-mono)',\n color: 'var(--fg)',\n background: 'var(--surface-1)',\n padding: '2px 6px',\n borderRadius: 'var(--radius-sm)',\n }}\n >\n {lastProcessId}\n </code>\n </div>\n )}\n {error !== null && (\n <div\n role=\"alert\"\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))',\n border: '1px solid color-mix(in oklch, var(--danger) 40%, var(--border))',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--danger)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Live stream — only meaningful for Claude Code sessions (they have\n a backing JSONL log). Bizar agents have no equivalent surface. */}\n {/* v9.5.0 S49 — agent↔task drilldown. Renders the tasks this agent\n is currently working on (filtered by workedBy / metadata.agent),\n so the user can see \"what is my orchestrator doing right now\"\n without bouncing between this Sheet and the Tasks board. */}\n <Stack gap={2}>\n <div\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n Assigned tasks ({myTasks.length})\n </div>\n {tasksQuery.loading && myTasks.length === 0 ? (\n <Skeleton style={{ height: 48 }} />\n ) : myTasks.length === 0 ? (\n <Card variant=\"outlined\">\n <CardBody>\n <span data-testid=\"agent-tasks-empty\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n No tasks assigned to this agent.\n </span>\n </CardBody>\n </Card>\n ) : (\n <Stack gap={1}>\n {myTasks.map((t) => (\n <div\n key={t.id}\n data-testid={`agent-tasks-${t.id}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n padding: 'var(--space-2) var(--space-3)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n fontSize: 'var(--fs-13)',\n }}\n >\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>{t.id}</code>\n <span style={{ flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {t.title}\n </span>\n <Badge tone={t.status === 'doing' ? 'info' : t.status === 'blocked' ? 'danger' : 'neutral'}>\n {t.status ?? 'queued'}\n </Badge>\n </div>\n ))}\n </Stack>\n )}\n </Stack>\n {source === 'claude-code' && (\n <Stack gap={2}>\n <div\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n <ActivityIcon size={12} aria-hidden style={{ verticalAlign: 'middle', marginRight: 4 }} />\n Live output\n </div>\n <AgentLiveOutput sessionId={key} paused={busy === 'Kill'} />\n </Stack>\n )}\n </Stack>\n </SheetContent>\n </Sheet>\n );\n}\n\n/** formatDuration — human-readable \"3m 12s\" / \"1h 4m\" / \"2d 5h\". */\nfunction formatDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return '—';\n const sec = Math.floor(ms / 1000);\n if (sec < 60) return `${sec}s`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ${sec % 60}s`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ${min % 60}m`;\n const day = Math.floor(hr / 24);\n return `${day}d ${hr % 24}h`;\n}","import { useCallback, useMemo, useState } from 'react';\nimport { ChevronDown, ChevronRight, GitBranch, Network } from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Card, CardBody } from '../../ui/data/Card.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { EmptyState } from '../../ui/feedback/EmptyState.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\nimport type { BizarAgent } from '../../data/types.js';\n\n/**\n * AgentHierarchy — v9.4.0 S45.\n *\n * Reads `/api/agents/hierarchy` (returns `{ roots: Array<{ name, agent,\n * children }>, all: BizarAgent[] }` from `agents-store.mjs:230-251`).\n * Renders a collapsible tree where each node is a Bizar agent. Children\n * render indented beneath their parent. Live updates via `agents:change`\n * WS event triggers refetch.\n */\n\nexport interface HierarchyNode {\n name: string;\n agent: BizarAgent | null;\n children: HierarchyNode[];\n}\n\ninterface HierarchyResponse {\n roots?: HierarchyNode[];\n all?: BizarAgent[];\n}\n\nfunction statusToTone(status: string | undefined): 'neutral' | 'info' | 'success' | 'warning' | 'danger' {\n const s = (status || '').toLowerCase();\n if (s === 'busy' || s === 'working') return 'info';\n if (s === 'idle') return 'neutral';\n if (s === 'error' || s === 'stuck') return 'danger';\n if (s === 'paused') return 'warning';\n return 'neutral';\n}\n\nfunction statusLabel(status: string | undefined): string {\n const s = (status || '').toLowerCase();\n if (s === 'working') return 'working';\n if (!s) return 'idle';\n return s;\n}\n\nfunction relativeMs(ms: number | undefined | null): string {\n if (typeof ms !== 'number' || !Number.isFinite(ms) || ms <= 0) return '—';\n const delta = Math.max(0, Date.now() - ms);\n const sec = Math.floor(delta / 1000);\n if (sec < 60) return `${sec}s ago`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ago`;\n return `${Math.floor(hr / 24)}d ago`;\n}\n\ninterface NodeRowProps {\n node: HierarchyNode;\n depth: number;\n expanded: Set<string>;\n onToggle: (name: string) => void;\n}\n\nfunction NodeRow({ node, depth, expanded, onToggle }: NodeRowProps): JSX.Element {\n const hasChildren = node.children.length > 0;\n const isOpen = expanded.has(node.name);\n const agent = node.agent;\n const tone = statusToTone(agent?.status);\n const status = statusLabel(agent?.status);\n return (\n <>\n <div\n data-testid={`agent-hierarchy-node-${node.name}`}\n style={{\n display: 'grid',\n gridTemplateColumns: 'auto 1fr auto auto',\n alignItems: 'center',\n gap: 'var(--space-3)',\n padding: 'var(--space-2) var(--space-3)',\n paddingLeft: `calc(var(--space-3) + ${depth * 24}px)`,\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n background: 'var(--surface-1)',\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n data-testid={`agent-hierarchy-toggle-${node.name}`}\n aria-label={isOpen ? 'Collapse' : 'Expand'}\n onClick={() => onToggle(node.name)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 22,\n height: 22,\n borderRadius: 'var(--radius-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-0)',\n color: 'var(--fg-muted)',\n cursor: 'pointer',\n padding: 0,\n }}\n >\n {isOpen ? <ChevronDown size={12} aria-hidden /> : <ChevronRight size={12} aria-hidden />}\n </button>\n ) : (\n <span aria-hidden style={{ width: 22, height: 22, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', color: 'var(--fg-subtle)' }}>\n <GitBranch size={12} />\n </span>\n )}\n <div style={{ minWidth: 0 }}>\n <div style={{ fontSize: 'var(--fs-13)', fontWeight: 600, color: 'var(--fg)' }}>{node.name}</div>\n {agent && (\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {agent.role || agent.category || agent.mode || 'agent'}\n {agent.parent && agent.parent !== node.name && (\n <> · parent <code style={{ fontFamily: 'var(--font-mono)' }}>{agent.parent}</code></>\n )}\n </div>\n )}\n </div>\n {typeof agent?.lastSeen === 'number' && agent.lastSeen > 0 && (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', fontFamily: 'var(--font-mono)' }}>\n {relativeMs(agent.lastSeen)}\n </span>\n )}\n <Badge tone={tone} dot>{status}</Badge>\n </div>\n {hasChildren && isOpen && node.children.map((child) => (\n <NodeRow key={child.name} node={child} depth={depth + 1} expanded={expanded} onToggle={onToggle} />\n ))}\n </>\n );\n}\n\nexport function AgentHierarchy(): JSX.Element {\n const data = useFetch<HierarchyResponse>('/api/agents/hierarchy');\n const [expanded, setExpanded] = useState<Set<string>>(() => new Set());\n // Track which root names we auto-expanded on first load so subsequent\n // user toggles of those roots are honored.\n const [autoRoots, setAutoRoots] = useState<Set<string>>(() => new Set());\n\n const seenRoots = useMemo(() => data.data?.roots?.map((n) => n.name) ?? [], [data.data]);\n\n // On first successful load, auto-expand every root and remember the set so\n // a future toggle of a root is a real state change (no longer masked by\n // the auto-expand).\n if (autoRoots.size === 0 && seenRoots.length > 0) {\n setAutoRoots(new Set(seenRoots));\n setExpanded(new Set(seenRoots));\n }\n\n const onAgentsChange = useCallback(() => data.refetch(), [data]);\n useWsMessage('agents:change', onAgentsChange);\n\n const toggle = useCallback((name: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(name)) next.delete(name);\n else next.add(name);\n return next;\n });\n }, []);\n\n if (data.loading && !data.data) {\n return (\n <Stack gap={3}>\n <Skeleton style={{ height: 48 }} />\n <Skeleton style={{ height: 48 }} />\n <Skeleton style={{ height: 48 }} />\n </Stack>\n );\n }\n\n const roots = data.data?.roots ?? [];\n if (roots.length === 0) {\n return (\n <Card>\n <CardBody>\n <EmptyState\n icon={<Network size={32} aria-hidden />}\n title=\"No hierarchy yet\"\n description=\"Agents have no parent links in their frontmatter. Add `parent:` to an agent's .md frontmatter to nest it beneath another agent.\"\n data-testid=\"agent-hierarchy-empty\"\n />\n </CardBody>\n </Card>\n );\n }\n\n return (\n <Stack gap={2}>\n <Inline align=\"center\" justify=\"between\">\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {roots.length} root agent{roots.length === 1 ? '' : 's'} · {data.data?.all?.length ?? 0} total\n </span>\n </Inline>\n <Stack gap={2}>\n {roots.map((root) => (\n <NodeRow key={root.name} node={root} depth={0} expanded={expanded} onToggle={toggle} />\n ))}\n </Stack>\n </Stack>\n );\n}","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Grid } from '../../ui/primitives/Grid.js';\nimport { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { ListHeader } from '../../ui/data/ListHeader.js';\nimport { AgentCard, type AgentCardProps, type AgentStatus } from '../../ui/agents/AgentCard.js';\nimport { AgentDetail } from '../../ui/agents/AgentDetail.js';\nimport { Chip } from '../../ui/data/Chip.js';\nimport { Banner } from '../../ui/feedback/Banner.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { ErrorState } from '../../ui/feedback/ErrorState.js';\nimport { Sheet, SheetContent } from '../../ui/feedback/Sheet.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\nimport type { BizarAgent, CCAgent, WsMessage } from '../../data/types.js';\nimport { AlertTriangle, Bot, Cpu, Pause, Play, Plus, RotateCw } from 'lucide-react';\nimport { AgentHierarchy } from './AgentHierarchy.js';\n\nconst SOURCE_STORAGE_KEY = 'bizar.agents.sourceFilter';\nconst SOURCE_LABELS = {\n all: 'All',\n bizar: 'Bizar',\n 'claude-code': 'Claude Code',\n} as const;\ntype SourceFilter = keyof typeof SOURCE_LABELS;\nconst VALID_SOURCES = Object.keys(SOURCE_LABELS) as SourceFilter[];\n\nfunction readPersistedSource(): SourceFilter {\n if (typeof localStorage === 'undefined') return 'all';\n const v = localStorage.getItem(SOURCE_STORAGE_KEY);\n return VALID_SOURCES.includes(v as SourceFilter) ? (v as SourceFilter) : 'all';\n}\n\n/** relativeTimeMs — \"12s\", \"3m\", \"2h\", \"5d\". Returns \"—\" for missing/future timestamps. */\nfunction relativeTimeMs(ms: number): string {\n if (!Number.isFinite(ms) || ms <= 0) return '—';\n const delta = Math.max(0, Date.now() - ms);\n const sec = Math.floor(delta / 1000);\n if (sec < 60) return `${sec}s ago`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ago`;\n return `${Math.floor(hr / 24)}d ago`;\n}\n\n/**\n * AgentsView — Sprint S10. Unified Bizar + Claude Code agents.\n *\n * Two REST calls (Bizar agents from `/api/agents`, CC from\n * `/api/cc-agents`) merged into a single grid. A `source` filter\n * chip switches between `bizar | claude-code | all`. Live updates\n * via `agents:change` and `agent:status` WS events.\n */\n\nfunction mapBizar(a: BizarAgent): AgentCardProps {\n const raw = (a.status || 'idle').toLowerCase();\n const status: AgentStatus =\n raw === 'busy' || raw === 'working' ? 'busy' :\n raw === 'error' || raw === 'stuck' ? 'error' :\n raw === 'paused' ? 'paused' : 'idle';\n return {\n id: `bizar:${a.name}`,\n name: a.name,\n role: a.role || a.category || a.mode || 'agent',\n status,\n currentTask: a.currentTaskId ? `Task ${a.currentTaskId}` : undefined,\n lastActivity: a.lastSeen ? new Date(a.lastSeen).toLocaleTimeString() : undefined,\n tasksToday: a.tasksTotal || 0,\n // v9.4.0 — pass real metrics for the new AgentCard strip. The old\n // `tpmHistory` field was dead because AgentCard only renders the\n // sparkline when `length > 1` and we always passed a single point.\n tasksSucceeded: typeof a.tasksSucceeded === 'number' ? a.tasksSucceeded : undefined,\n tasksTotal: typeof a.tasksTotal === 'number' ? a.tasksTotal : undefined,\n successRate: typeof a.successRate === 'number' ? a.successRate : undefined,\n lastSeenMs: typeof a.lastSeen === 'number' && a.lastSeen > 0 ? a.lastSeen : undefined,\n badges: a.tags || [],\n };\n}\n\nfunction mapCC(a: CCAgent): AgentCardProps {\n const raw = (a.status || a.state || 'idle').toLowerCase();\n const status: AgentStatus =\n raw === 'busy' || raw === 'working' ? 'busy' :\n raw === 'error' ? 'error' :\n raw === 'paused' ? 'paused' : 'idle';\n return {\n id: `cc:${a.sessionId || a.id}`,\n name: a.name || a.sessionId?.slice(0, 8) || 'unknown',\n role: a.kind === 'background' ? 'CC background' : 'CC interactive',\n status,\n currentTask: a.lastMessageSnippet || undefined,\n lastActivity: a.lastMessageAt ? new Date(a.lastMessageAt).toLocaleTimeString() : (a.startedAt ? new Date(a.startedAt).toLocaleTimeString() : undefined),\n tasksToday: a.messageCount || 0,\n // CC agents don't expose successRate/tasksSucceeded — only messageCount.\n // Skip the metric strip for them; the badge + lastActivity carry the\n // signal.\n badges: [a.cwd?.split('/').slice(-2).join('/') || ''].filter(Boolean),\n };\n}\n\nexport function AgentsView(): JSX.Element {\n const bizar = useFetch<{ agents?: BizarAgent[] }>('/api/agents');\n const cc = useFetch<{ agents?: CCAgent[]; error?: string }>('/api/cc-agents');\n const stuck = useFetch<{ stuck?: BizarAgent[] }>('/api/agents/stuck');\n const [source, setSource] = useState<SourceFilter>(readPersistedSource);\n const [mode, setMode] = useState<'roster' | 'hierarchy'>('roster');\n useEffect(() => {\n if (typeof localStorage !== 'undefined') localStorage.setItem(SOURCE_STORAGE_KEY, source);\n }, [source]);\n const [bizarList, setBizarList] = useState<BizarAgent[]>([]);\n const [ccList, setCCList] = useState<CCAgent[]>([]);\n const [initialized, setInitialized] = useState(false);\n const [openId, setOpenId] = useState<string | null>(null);\n const [createDraft, setCreateDraft] = useState<{ name: string; role: string } | null>(null);\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n const [restartingNames, setRestartingNames] = useState<Set<string>>(() => new Set());\n\n const saveCreate = async (): Promise<void> => {\n if (createDraft === null || !createDraft.name.trim()) return;\n setCreating(true);\n setCreateError(null);\n try {\n await fetchJson('/api/agents', { method: 'POST', body: { name: createDraft.name.trim(), role: createDraft.role.trim() || 'agent' } });\n setCreateDraft(null);\n bizar.refetch();\n } catch (err) {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n // v9.5.0 S48 — inline Restart from the stuck banner. One-click recovery\n // without forcing the user to drill into the per-agent Sheet. The\n // server broadcasts agents:change on success so the banner refreshes.\n const restartStuck = async (name: string): Promise<void> => {\n setRestartingNames((prev) => new Set(prev).add(name));\n try {\n await fetchJson(`/api/agents/${encodeURIComponent(name)}/restart`, { method: 'POST' });\n stuck.refetch();\n bizar.refetch();\n } catch (err) {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setRestartingNames((prev) => {\n const next = new Set(prev);\n next.delete(name);\n return next;\n });\n }\n };\n\n // v10-S1 — inline Pause/Resume on the stuck banner. Pause stops\n // heartbeat drain (status='paused'); Resume re-enables\n // (status='idle' so Odin picks the agent up again on the next\n // spawn). Uses the same in-flight Set pattern as restartStuck so\n // all three actions disable each other per-row while pending.\n const [busyStuckNames, setBusyStuckNames] = useState<Set<string>>(() => new Set());\n const setStuckActionStatus = async (name: string, status: 'paused' | 'idle'): Promise<void> => {\n setBusyStuckNames((prev) => new Set(prev).add(name));\n try {\n await fetchJson(`/api/agents/${encodeURIComponent(name)}/status`, {\n method: 'POST',\n body: { status },\n });\n stuck.refetch();\n bizar.refetch();\n } catch (err) {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusyStuckNames((prev) => {\n const next = new Set(prev);\n next.delete(name);\n return next;\n });\n }\n };\n\n // v10-S1 — bulk Pause-all-stuck. Fires status='paused' for every\n // agent currently in /api/agents/stuck. Used when a wedged cluster\n // needs to be drained before restart. Per-row actions are still\n // available for selective triage.\n const [bulkBusy, setBulkBusy] = useState<boolean>(false);\n const bulkPauseStuck = async (): Promise<void> => {\n const list = stuck.data?.stuck ?? [];\n if (list.length === 0) return;\n setBulkBusy(true);\n try {\n await Promise.all(list.map((a) =>\n fetchJson(`/api/agents/${encodeURIComponent(a.name)}/status`, {\n method: 'POST',\n body: { status: 'paused' },\n }).catch((err) => {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n return null;\n }),\n ));\n stuck.refetch();\n bizar.refetch();\n } finally {\n setBulkBusy(false);\n }\n };\n\n useEffect(() => {\n if (!initialized && bizar.data?.agents !== undefined && cc.data?.agents !== undefined) {\n setInitialized(true);\n setBizarList(bizar.data.agents);\n setCCList(cc.data.agents);\n }\n }, [bizar.data, cc.data, initialized]);\n\n const onAgentsChange = useCallback(() => {\n // Bust both caches; the next mount will re-fetch (cheap because\n // the dashboard views are lazy-mounted).\n bizar.refetch();\n cc.refetch();\n }, [bizar, cc]);\n useWsMessage('agents:change', onAgentsChange);\n\n const onAgentStatus = useCallback((msg: WsMessage) => {\n if (msg.type !== 'agent:status') return;\n const a = (msg as Extract<WsMessage, { type: 'agent:status' }>).agent;\n if (!a || !a.name) return;\n setBizarList((prev) => {\n const idx = prev.findIndex((x) => x.name === a.name);\n if (idx === -1) return [...prev, a];\n const copy = prev.slice();\n copy[idx] = { ...copy[idx], ...a };\n return copy;\n });\n }, []);\n useWsMessage('agent:status', onAgentStatus);\n\n const cards = useMemo(() => {\n const out: Array<AgentCardProps & { source: 'bizar' | 'claude-code' }> = [];\n if (source !== 'claude-code') {\n for (const a of bizarList) out.push({ ...mapBizar(a), source: 'bizar' });\n }\n if (source !== 'bizar') {\n for (const a of ccList) out.push({ ...mapCC(a), source: 'claude-code' });\n }\n return out;\n }, [bizarList, ccList, source]);\n\n return (\n <Stack gap={5} data-testid=\"agents-view\">\n <ViewHeader\n title=\"Agents\"\n description=\"Bizar agents (frontmatter-driven) and Claude Code background agents.\"\n actions={\n <Button variant=\"primary\" onClick={() => setCreateDraft({ name: '', role: '' })} data-testid=\"agent-create-open\">\n <Plus size={14} aria-hidden /> New agent\n </Button>\n }\n />\n <ListHeader\n title=\"Roster\"\n count={cards.length}\n description={stuck.data?.stuck && stuck.data.stuck.length > 0 ? `${stuck.data.stuck.length} stuck` : undefined}\n testid=\"agents-list-header\"\n />\n {(stuck.data?.stuck ?? []).length > 0 && (\n <Banner\n tone=\"warning\"\n data-testid=\"agents-stuck-banner\"\n action={\n <Inline gap={2}>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => { void bulkPauseStuck(); }}\n disabled={bulkBusy}\n data-testid=\"agents-stuck-bulk-pause\"\n title=\"Pause every stuck agent at once\"\n >\n <Pause size={12} aria-hidden /> {bulkBusy ? 'Pausing…' : 'Pause all'}\n </Button>\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setMode('hierarchy')}>\n View details\n </Button>\n </Inline>\n }\n >\n <Stack gap={2}>\n <Inline align=\"center\" gap={2}>\n <AlertTriangle size={14} aria-hidden style={{ color: 'var(--warning)' }} />\n <span>\n {(stuck.data?.stuck ?? []).length} agent{stuck.data && stuck.data.stuck && stuck.data.stuck.length === 1 ? '' : 's'} stuck (no heartbeat >5m)\n </span>\n </Inline>\n <Stack gap={1}>\n {(stuck.data?.stuck ?? []).map((s) => {\n const restarting = restartingNames.has(s.name);\n const paused = s.status === 'paused';\n const busy = restarting || busyStuckNames.has(s.name);\n return (\n <Inline key={s.name} align=\"center\" justify=\"between\" gap={2} data-testid={`agents-stuck-row-${s.name}`}>\n <Inline gap={2} align=\"center\">\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.name}</code>\n <Badge tone={paused ? 'warning' : 'danger'}>{paused ? 'paused' : (s.status || 'stuck')}</Badge>\n {typeof s.lastSeen === 'number' && s.lastSeen > 0 && (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n last seen {relativeTimeMs(s.lastSeen)}\n </span>\n )}\n </Inline>\n <Inline gap={1}>\n {paused ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={busy}\n onClick={() => { void setStuckActionStatus(s.name, 'idle'); }}\n data-testid={`agents-stuck-resume-${s.name}`}\n >\n <Play size={12} aria-hidden /> Resume\n </Button>\n ) : (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={busy}\n onClick={() => { void setStuckActionStatus(s.name, 'paused'); }}\n data-testid={`agents-stuck-pause-${s.name}`}\n >\n <Pause size={12} aria-hidden /> Pause\n </Button>\n )}\n <Button\n variant=\"primary\"\n size=\"sm\"\n disabled={busy}\n onClick={() => { void restartStuck(s.name); }}\n data-testid={`agents-stuck-restart-${s.name}`}\n >\n <RotateCw size={12} aria-hidden /> {restarting ? 'Restarting…' : 'Restart'}\n </Button>\n </Inline>\n </Inline>\n );\n })}\n </Stack>\n </Stack>\n </Banner>\n )}\n <Inline align=\"center\" justify=\"between\" wrap gap={2}>\n <Inline gap={2}>\n {(['all', 'bizar', 'claude-code'] as SourceFilter[]).map((id) => (\n <Chip\n key={id}\n selected={source === id}\n onClick={() => setSource(id)}\n >\n {id === 'bizar' ? <Bot size={12} aria-hidden /> : id === 'claude-code' ? <Cpu size={12} aria-hidden /> : null}{' '}\n {SOURCE_LABELS[id]}\n </Chip>\n ))}\n </Inline>\n <Inline gap={2}>\n <Chip\n data-testid=\"agents-mode-roster\"\n selected={mode === 'roster'}\n onClick={() => setMode('roster')}\n >\n Roster\n </Chip>\n <Chip\n data-testid=\"agents-mode-hierarchy\"\n selected={mode === 'hierarchy'}\n onClick={() => setMode('hierarchy')}\n >\n Hierarchy\n </Chip>\n </Inline>\n </Inline>\n {mode === 'hierarchy' ? (\n <AgentHierarchy />\n ) : cards.length === 0 && (bizar.loading || cc.loading) ? (\n <Grid cols={3}>\n <Skeleton style={{ height: 140 }} />\n <Skeleton style={{ height: 140 }} />\n <Skeleton style={{ height: 140 }} />\n </Grid>\n ) : cards.length === 0 && (bizar.error || cc.error) ? (\n <ErrorState\n block\n title=\"Couldn't load agents\"\n description=\"Both bizar and CC roster endpoints failed. Retry to refetch.\"\n error={bizar.error ?? cc.error}\n onRetry={() => { void bizar.refetch(); void cc.refetch(); }}\n testid=\"agents-error\"\n />\n ) : cards.length === 0 ? (\n <span style={{ color: 'var(--fg-muted)' }}>\n No agents yet. Run <code>/loop</code> or spawn one via the command palette.\n </span>\n ) : (\n <Grid cols={3}>\n {cards.map((c) => (\n <AgentCard key={c.id} {...c} onOpen={() => setOpenId(c.id)} />\n ))}\n </Grid>\n )}\n\n {openId !== null && (() => {\n const sel = cards.find((c) => c.id === openId);\n if (!sel) return null;\n const ccSource = sel.source === 'claude-code' ? ccList.find((a) => sel.id === `cc:${a.sessionId || a.id}`) : undefined;\n const bzSource = sel.source === 'bizar' ? bizarList.find((a) => sel.id === `bizar:${a.name}`) : undefined;\n return (\n <AgentDetail\n agentId={sel.id}\n name={sel.name}\n role={sel.role}\n status={sel.status}\n currentTask={sel.currentTask}\n startedAt={ccSource?.startedAt ?? bzSource?.lastSeen}\n messageCount={ccSource?.messageCount}\n lastMessageSnippet={ccSource?.lastMessageSnippet}\n successRate={bzSource?.successRate}\n tasksTotal={bzSource?.tasksTotal}\n open={openId !== null}\n onOpenChange={(o) => { if (!o) setOpenId(null); }}\n />\n );\n })()}\n\n {/* v9.2.0 — create-agent Sheet. Closes the audit-flagged \"no way\n to add a new agent\" HIGH gap. */}\n <Sheet open={createDraft !== null} onOpenChange={(o) => { if (!o) setCreateDraft(null); }}>\n <SheetContent side=\"right\" title=\"New agent\">\n {createDraft !== null && (\n <Stack gap={4} style={{ padding: 'var(--space-4)' }}>\n <Stack gap={2}>\n <label htmlFor=\"agent-create-name\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Name</label>\n <Input\n id=\"agent-create-name\"\n value={createDraft.name}\n onChange={(e) => setCreateDraft({ ...createDraft, name: e.target.value })}\n placeholder=\"e.g. frigg\"\n disabled={creating}\n data-testid=\"agent-create-name\"\n />\n </Stack>\n <Stack gap={2}>\n <label htmlFor=\"agent-create-role\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Role (optional)</label>\n <Input\n id=\"agent-create-role\"\n value={createDraft.role}\n onChange={(e) => setCreateDraft({ ...createDraft, role: e.target.value })}\n placeholder=\"e.g. code-review\"\n disabled={creating}\n data-testid=\"agent-create-role\"\n />\n </Stack>\n {createError !== null && <span role=\"alert\" style={{ color: 'var(--danger)', fontSize: 'var(--fs-12)' }}>{createError}</span>}\n <Inline gap={2}>\n <Button variant=\"primary\" onClick={() => { void saveCreate(); }} disabled={creating || !createDraft.name.trim()} data-testid=\"agent-create-submit\">\n Create agent\n </Button>\n <Button variant=\"ghost\" onClick={() => setCreateDraft(null)} disabled={creating}>\n Cancel\n </Button>\n </Inline>\n </Stack>\n )}\n </SheetContent>\n </Sheet>\n </Stack>\n );\n}"],"names":["ClipboardCopy","createLucideIcon","Octagon","STATUS_LABEL","STATUS_TONE","STATUS_FG","relativeTime","ms","delta","sec","min","hr","successTone","rate","lastSeenTone","AgentCard","props","name","role","status","lastActivity","currentTask","tasksToday","tasksSucceeded","tasksTotal","successRate","lastSeenMs","onOpen","badges","className","showMetrics","jsxs","cx","jsx","Avatar","Badge","Activity","Zap","ProgressBar","MAX_EVENTS","AgentLiveOutput","sessionId","paused","events","setEvents","useState","setStatus","error","setError","pausedLocal","setPausedLocal","autoScroll","setAutoScroll","containerRef","useRef","sourceRef","useEffect","url","src","onSnapshot","ev","data","onEvent","prev","next","onEnd","onErrEv","el","renderEvent","idx","tone","_a","label","_b","text","_c","Stack","Inline","Button","p","Play","Pause","RefreshCw","e","atBottom","parseId","agentId","AgentDetail","open","onOpenChange","startedAt","messageCount","lastMessageSnippet","source","key","prompt","setPrompt","busy","setBusy","message","setMessage","lastProcessId","setLastProcessId","tasksQuery","useFetch","myTasks","useMemo","t","md","runAction","method","endpoint","body","res","fetchJson","sessionExtra","err","sendPrompt","trimmed","restart","seed","kill","copyId","Sheet","SheetContent","formatDuration","ActivityIcon","Textarea","Send","Skeleton","RotateCw","Card","CardBody","statusToTone","s","statusLabel","relativeMs","NodeRow","node","depth","expanded","onToggle","hasChildren","isOpen","agent","Fragment","ChevronDown","ChevronRight","GitBranch","child","AgentHierarchy","setExpanded","autoRoots","setAutoRoots","seenRoots","n","onAgentsChange","useCallback","useWsMessage","toggle","roots","EmptyState","Network","root","SOURCE_STORAGE_KEY","SOURCE_LABELS","VALID_SOURCES","readPersistedSource","v","relativeTimeMs","mapBizar","a","raw","mapCC","AgentsView","bizar","cc","stuck","setSource","mode","setMode","bizarList","setBizarList","ccList","setCCList","initialized","setInitialized","openId","setOpenId","createDraft","setCreateDraft","creating","setCreating","createError","setCreateError","restartingNames","setRestartingNames","saveCreate","FetchError","restartStuck","busyStuckNames","setBusyStuckNames","setStuckActionStatus","bulkBusy","setBulkBusy","bulkPauseStuck","list","onAgentStatus","msg","x","copy","cards","out","ViewHeader","Plus","ListHeader","Banner","AlertTriangle","_d","restarting","id","Chip","Bot","Cpu","Grid","ErrorState","c","sel","ccSource","bzSource","o","Input"],"mappings":"6sCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAgBC,GAAiB,gBAAiB,CACtD,CAAC,OAAQ,CAAE,MAAO,IAAK,OAAQ,IAAK,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,SAAU,EACrF,CAAC,OAAQ,CAAE,EAAG,4DAA6D,IAAK,QAAQ,CAAE,EAC1F,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,CAAC,ECfD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMC,GAAUD,GAAiB,UAAW,CAC1C,CACE,OACA,CACE,EAAG,6OACH,IAAK,QACX,CACA,CACA,CAAC,EC8BKE,GAA4C,CAChD,KAAM,OACN,KAAM,OACN,MAAO,QACP,OAAQ,QACV,EAEMC,GAA8E,CAClF,KAAM,UACN,KAAM,OACN,MAAO,SACP,OAAQ,SACV,EAEMC,GAAyC,CAC7C,KAAM,mBACN,KAAM,cACN,MAAO,gBACP,OAAQ,gBACV,EAGA,SAASC,GAAaC,EAAgC,CACpD,GAAI,OAAOA,GAAO,UAAY,CAAC,OAAO,SAASA,CAAE,GAAKA,GAAM,EAAG,MAAO,IACtE,MAAMC,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAA,EAAQD,CAAE,EACnCE,EAAM,KAAK,MAAMD,EAAQ,GAAI,EACnC,GAAIC,EAAM,GAAI,MAAO,GAAGA,CAAG,QAC3B,MAAMC,EAAM,KAAK,MAAMD,EAAM,EAAE,EAC/B,GAAIC,EAAM,GAAI,MAAO,GAAGA,CAAG,QAC3B,MAAMC,EAAK,KAAK,MAAMD,EAAM,EAAE,EAC9B,OAAIC,EAAK,GAAW,GAAGA,CAAE,QAElB,GADK,KAAK,MAAMA,EAAK,EAAE,CACjB,OACf,CAEA,SAASC,GAAYC,EAAgD,CACnE,OAAIA,GAAQ,GAAY,UACpBA,GAAQ,GAAY,UACjB,QACT,CAEA,SAASC,GAAaP,EAA8C,CAClE,OAAI,OAAOA,GAAO,UAAY,CAAC,OAAO,SAASA,CAAE,GAAKA,GAAM,EAAU,WACxD,KAAK,IAAA,EAAQA,GAAM,MACnB,EAAI,SAAW,SAC/B,CAEO,SAASQ,GAAUC,EAAoC,CAC5D,KAAM,CACJ,KAAAC,EACA,KAAAC,EACA,OAAAC,EACA,aAAAC,EACA,YAAAC,EACA,WAAAC,EACA,eAAAC,EACA,WAAAC,EACA,YAAAC,EACA,WAAAC,EACA,OAAAC,EACA,OAAAC,EACA,UAAAC,CAAA,EACEb,EAEEc,EACH,OAAOP,GAAmB,UAAY,OAAOC,GAAe,UAC7D,OAAOC,GAAgB,UACvB,OAAOC,GAAe,SAExB,OACEK,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,QAASJ,EACT,UAAWK,GAAG,gBAAiB,kBAAkBb,CAAM,GAAIU,CAAS,EACpE,MAAO,CACL,QAAS,OACT,cAAe,SACf,IAAK,iBACL,MAAO,OACP,QAAS,iBACT,WAAY,mBACZ,OAAQ,0BACR,aAAc,mBACd,UAAW,OACX,OAAQ,UACR,KAAM,UACN,MAAO,UACP,WAAY,iDAAA,EAGd,SAAA,CAAAE,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,gBAAA,EACxD,SAAA,CAAAE,EAAAA,IAACC,GAAA,CAAO,KAAAjB,EAAY,OAAQE,IAAW,QAAkBA,IAAW,QAApB,OAAuCA,IAAW,OAAS,SAAW,OAAQ,EAC9HY,OAAC,OAAI,MAAO,CAAE,KAAM,EAAG,SAAU,GAC/B,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,WAAY,IAAK,MAAO,YAAa,WAAY,gBAAA,EACtF,SAAAhB,EACH,EACAgB,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,UAAW,GAC1E,SAAAf,CAAA,CACH,CAAA,EACF,EACAe,EAAAA,IAACE,EAAA,CAAM,KAAM/B,GAAYe,CAAM,EAAG,IAAG,GAClC,SAAAhB,GAAagB,CAAM,CAAA,CACtB,CAAA,EACF,EACCE,IAAgB,QACfY,EAAAA,IAAC,MAAA,CACC,MAAO,CACL,SAAU,eACV,MAAO,YACP,WAAY,mBACZ,OAAQ,0BACR,aAAc,mBACd,QAAS,gCACT,WAAY,SACZ,SAAU,SACV,aAAc,UAAA,EAEhB,MAAOZ,EAEN,SAAAA,CAAA,CAAA,EAGLU,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,iBAAkB,SAAU,eAAgB,MAAO,mBAC1G,SAAA,CAAAX,IAAiB,QAChBW,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,QAAS,cAAe,WAAY,SAAU,IAAK,CAAA,EAChE,SAAA,CAAAE,EAAAA,IAACG,GAAA,CAAS,KAAM,GAAI,cAAY,OAAO,MAAO,CAAE,MAAO/B,GAAUc,CAAM,CAAA,CAAE,CAAG,EAC3EC,CAAA,EACH,EAEDE,IAAe,QACdS,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,QAAS,cAAe,WAAY,SAAU,IAAK,CAAA,EAChE,SAAA,CAAAE,EAAAA,IAACI,GAAA,CAAI,KAAM,GAAI,cAAY,OAAO,EACjCf,EAAW,QAAA,CAAA,CACd,CAAA,EAEJ,EACCQ,GACCC,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,gBAAA,EAC1D,SAAA,CAAA,OAAOR,GAAmB,UAAY,OAAOC,GAAe,UAAYA,EAAa,GACpFO,OAAC,MAAA,CAAI,cAAY,mBAAmB,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAC1F,SAAA,CAAAA,EAAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,WACZ,eAAgB,gBAChB,SAAU,eACV,MAAO,iBAAA,EAGT,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,cAAe,YAAa,cAAe,QAAA,EAAY,SAAA,OAAA,CAAK,EAC3EF,OAAC,QAAK,MAAO,CAAE,WAAY,mBAAoB,MAAO,aACnD,SAAA,CAAAR,EAAe,MAAIC,CAAA,CAAA,CACtB,CAAA,CAAA,CAAA,EAEFS,EAAAA,IAACK,IAAY,MAAOf,EAAgB,IAAKC,EAAY,KAAK,SAAS,OAAQ,CAAA,CAAG,CAAA,EAChF,EAED,OAAOC,GAAgB,UACtBM,EAAAA,KAAC,MAAA,CACC,cAAY,qBACZ,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,IAAK,CAAA,EAEtF,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,cAAe,YAAa,cAAe,QAAA,EAAY,SAAA,UAE1H,SACCE,EAAA,CAAM,cAAY,2BAA2B,KAAMvB,GAAYa,CAAW,EACxE,SAAA,CAAA,KAAK,MAAMA,EAAc,GAAG,EAAE,WAAA,CAAA,CACjC,CAAA,CAAA,CAAA,EAGH,OAAOC,GAAe,UACrBK,EAAAA,KAAC,MAAA,CACC,cAAY,sBACZ,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,IAAK,CAAA,EAEtF,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,cAAe,YAAa,cAAe,QAAA,EAAY,SAAA,YAE1H,EACAA,EAAAA,IAACE,EAAA,CAAM,cAAY,4BAA4B,KAAMrB,GAAaY,CAAU,EAAI,SAAApB,GAAaoB,CAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAC3G,EAEJ,EAEDE,IAAW,QACVK,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAA,EAAM,SAAAL,EAAO,QAEpE,QAAA,CAAO,SAAA;AAAA;AAAA,OAAA,CAEN,CAAA,CAAA,CAAA,CAGR,CC/MA,MAAMW,GAAa,IAEZ,SAASC,GAAgBxB,EAA0C,CACxE,KAAM,CAAE,UAAAyB,EAAW,OAAAC,CAAA,EAAW1B,EACxB,CAAC2B,EAAQC,CAAS,EAAIC,EAAAA,SAAwB,CAAA,CAAE,EAChD,CAAC1B,EAAQ2B,CAAS,EAAID,EAAAA,SAAgE,YAAY,EAClG,CAACE,EAAOC,CAAQ,EAAIH,EAAAA,SAAwB,IAAI,EAChD,CAACI,EAAaC,CAAc,EAAIL,EAAAA,SAAkB,EAAK,EACvD,CAACM,EAAYC,CAAa,EAAIP,EAAAA,SAAkB,EAAI,EACpDQ,EAAeC,EAAAA,OAAuB,IAAI,EAC1CC,EAAYD,EAAAA,OAA2B,IAAI,EAEjDE,EAAAA,UAAU,IAAM,CACd,GAAId,GAAUO,EAAa,CACrBM,EAAU,UACZA,EAAU,QAAQ,MAAA,EAClBA,EAAU,QAAU,MAEtBT,EAAU,QAAQ,EAClB,MACF,CACA,GAAI,OAAO,OAAW,KAAe,OAAO,YAAgB,IAAa,CACvEA,EAAU,OAAO,EACjBE,EAAS,gDAAgD,EACzD,MACF,CACAF,EAAU,YAAY,EACtBE,EAAS,IAAI,EACb,MAAMS,EAAM,oCAAoC,mBAAmBhB,CAAS,CAAC,GACvEiB,EAAM,IAAI,YAAYD,CAAG,EAC/BF,EAAU,QAAUG,EAEpB,MAAMC,EAAcC,GAA2B,CAC7C,GAAI,CACF,MAAMC,EAAO,KAAK,MAAMD,EAAG,IAAI,EAC3B,MAAM,QAAQC,EAAK,MAAM,GAAGjB,EAAUiB,EAAK,OAAO,MAAM,CAACtB,EAAU,CAAC,EACxEO,EAAU,MAAM,CAClB,MAAQ,CAAkB,CAC5B,EACMgB,EAAWF,GAA2B,CAC1C,GAAI,CACF,MAAMC,EAAO,KAAK,MAAMD,EAAG,IAAI,EAC/BhB,EAAWmB,GAAS,CAClB,MAAMC,EAAOD,EAAK,QAAUxB,GAAawB,EAAK,MAAMA,EAAK,OAASxB,GAAa,CAAC,EAAIwB,EAAK,MAAA,EACzF,OAAAC,EAAK,KAAKH,CAAI,EACPG,CACT,CAAC,EACDlB,EAAU,MAAM,CAClB,MAAQ,CAAkB,CAC5B,EACMmB,EAASL,GAA2B,CACxC,GAAI,CACF,MAAMC,EAAO,KAAK,MAAMD,EAAG,IAAI,EAC/Bd,EAAU,QAAQ,EAClBE,EAASa,EAAK,OAAS,iBAAiBA,EAAK,MAAM,GAAK,IAAI,CAC9D,MAAQ,CAAQ,CAClB,EACMK,EAAWN,GAA2B,CAC1C,GAAI,CACF,MAAMC,EAAO,KAAK,MAAMD,EAAG,IAAI,EAC/Bd,EAAU,OAAO,EACjBE,EAASa,EAAK,OAAS,cAAc,CACvC,MAAQ,CAAQ,CAClB,EACA,OAAAH,EAAI,iBAAiB,WAAYC,CAAU,EAC3CD,EAAI,iBAAiB,QAASI,CAAO,EACrCJ,EAAI,iBAAiB,cAAeI,CAAO,EAC3CJ,EAAI,iBAAiB,MAAOO,CAAK,EACjCP,EAAI,iBAAiB,QAASQ,CAAO,EACrCR,EAAI,QAAU,IAAM,CAClBZ,EAAU,OAAO,EACjBE,EAAS,+CAA+C,CAC1D,EACO,IAAM,CACXU,EAAI,MAAA,EACJH,EAAU,QAAU,IACtB,CACF,EAAG,CAACd,EAAWC,EAAQO,CAAW,CAAC,EAEnCO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACL,GAAc,CAACE,EAAa,QAAS,OAC1C,MAAMc,EAAKd,EAAa,QACxBc,EAAG,UAAYA,EAAG,YACpB,EAAG,CAACxB,EAAQQ,CAAU,CAAC,EAEvB,MAAMiB,EAAc,CAACR,EAAiBS,IAA6B,WACjE,MAAMC,EACJV,EAAG,OAAS,OAAS,OACrBA,EAAG,OAAS,YAAc,aAC1BW,EAAAX,EAAG,OAAH,MAAAW,EAAS,KAAO,OAChB,SACIC,GACJC,EAAAb,EAAG,OAAH,MAAAa,EAAS,KAAO,GAAGb,EAAG,KAAK,IAAI,GAC/BA,EAAG,KAAOA,EAAG,KAAQA,EAAG,MAAQ,QAC5Bc,EACJ,OAAOd,EAAG,SAAY,SAAWA,EAAG,SACpCe,EAAAf,EAAG,OAAH,MAAAe,EAAS,MAAQ,KAAK,UAAUf,EAAG,KAAK,KAAK,EAAE,MAAM,EAAG,GAAG,EAC3D,OAAOA,EAAG,SAAY,SAAWA,EAAG,QACpCA,EAAG,OAAS,KAAK,UAAUA,EAAG,MAAM,EAAE,MAAM,EAAG,GAAG,EAClD,KAAK,UAAUA,CAAE,EAAE,MAAM,EAAG,GAAG,EACjC,OACE7B,EAAAA,KAAC,MAAA,CAEC,MAAO,CACL,QAAS,UACT,aAAc,mBACd,WACEuC,IAAS,OAAS,0DAClBA,IAAS,OAAS,2DAClBA,IAAS,SAAW,mBACpB,mBACF,WAAY,mBACZ,SAAU,eACV,WAAY,WACZ,UAAW,YAAA,EAGb,SAAA,CAAAvC,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,MAAO,mBAAsB,SAAA,CAAAyC,EAAM,IAAA,EAAE,QACnD,OAAA,CAAK,MAAO,CAAE,MAAO,WAAA,EAAgB,SAAAE,CAAA,CAAK,CAAA,CAAA,EAhBtCL,CAAA,CAmBX,EAEA,OACEtC,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA7C,EAAAA,KAAC8C,EAAA,CAAO,MAAM,SAAS,QAAQ,UAC7B,SAAA,CAAA9C,EAAAA,KAAC8C,EAAA,CAAO,MAAM,SAAS,IAAK,EAC1B,SAAA,CAAA5C,EAAAA,IAAC,OAAA,CACC,cAAW,GACX,MAAO,CACL,MAAO,EACP,OAAQ,EACR,aAAc,MACd,WACEd,IAAW,OAAS,iBACpBA,IAAW,aAAe,iBAC1BA,IAAW,UACXA,IAAW,SADW,kBAEtB,eAAA,CACJ,CAAA,EAEFY,OAAC,QAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,mBAC7C,SAAA,CAAAZ,IAAW,OAAS,OACpBA,IAAW,aAAe,cAC1BA,IAAW,SAAW,SACtBA,IAAW,SAAW,SACtB,QACA,MAAOwB,EAAO,OAAO,SAAA,CAAA,CACxB,CAAA,EACF,EACAZ,EAAAA,KAAC8C,EAAA,CAAO,MAAM,SAAS,IAAK,EAC1B,SAAA,CAAA5C,EAAAA,IAAC6C,EAAA,CACC,QAAQ,QACR,QAAS,IAAM5B,EAAgB6B,GAAM,CAACA,CAAC,EACvC,MAAO9B,EAAc,gBAAkB,eACvC,aAAYA,EAAc,gBAAkB,eAE3C,SAAAA,EAAchB,EAAAA,IAAC+C,GAAA,CAAK,KAAM,GAAI,cAAW,EAAA,CAAC,EAAK/C,EAAAA,IAACgD,GAAA,CAAM,KAAM,GAAI,cAAW,EAAA,CAAC,CAAA,CAAA,EAE/EhD,EAAAA,IAAC6C,EAAA,CACC,QAAQ,QACR,QAAS,IAAMlC,EAAU,EAAE,EAC3B,MAAM,eACN,aAAW,eACZ,SAAA,OAAA,CAAA,EAGDb,EAAAA,KAAC+C,EAAA,CACC,QAAQ,QACR,QAAS,IAAM,CACblC,EAAU,CAAA,CAAE,EACZM,EAAe,EAAK,CACtB,EACA,MAAM,YACN,aAAW,mBAEX,SAAA,CAAAjB,EAAAA,IAACiD,GAAA,CAAU,KAAM,GAAI,cAAW,GAAC,EAAE,QAAA,CAAA,CAAA,SAEpC,QAAA,CAAM,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,SAAU,eAAgB,MAAO,kBAAmB,OAAQ,WACzH,SAAA,CAAAjD,EAAAA,IAAC,QAAA,CAAM,KAAK,WAAW,QAASkB,EAAY,SAAWgC,GAAM/B,EAAc+B,EAAE,OAAO,OAAO,CAAA,CAAG,EAAE,QAAA,CAAA,CAElG,CAAA,CAAA,CACF,CAAA,EACF,EACCpC,IAAU,MACTd,EAAAA,IAAC,MAAA,CAAI,KAAK,QAAQ,MAAO,CAAE,SAAU,eAAgB,MAAO,eAAA,EAAoB,SAAAc,EAAM,EAExFd,EAAAA,IAAC,MAAA,CACC,IAAKoB,EACL,SAAW8B,GAAM,CACf,MAAMhB,EAAKgB,EAAE,cACPC,EAAWjB,EAAG,aAAeA,EAAG,UAAYA,EAAG,aAAe,GACpEf,EAAcgC,CAAQ,CACxB,EACA,MAAO,CACL,UAAW,IACX,UAAW,IACX,UAAW,OACX,OAAQ,0BACR,aAAc,mBACd,QAAS,iBACT,QAAS,OACT,cAAe,SACf,IAAK,EACL,WAAY,kBAAA,EAEd,KAAK,MACL,YAAU,SACV,aAAW,oBAEV,WAAO,SAAW,QAChB,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAC7C,aAAW,aAAe,8BAAgC,iBAC7D,EAEAzC,EAAO,IAAIyB,CAAW,CAAA,CAAA,CAE1B,EACF,CAEJ,CC/MA,SAASiB,GAAQC,EAAuD,CACtE,OAAIA,EAAQ,WAAW,QAAQ,EAAU,CAAE,OAAQ,QAAS,IAAKA,EAAQ,MAAM,CAAe,CAAA,EAC1FA,EAAQ,WAAW,KAAK,EAAU,CAAE,OAAQ,cAAe,IAAKA,EAAQ,MAAM,CAAY,CAAA,EACvF,CAAE,OAAQ,QAAS,IAAKA,CAAA,CACjC,CAEO,SAASC,GAAYvE,EAAsC,CAChE,KAAM,CACJ,QAAAsE,EAAS,KAAArE,EAAM,KAAAC,EAAM,OAAAC,EAAQ,YAAAE,EAAa,KAAAmE,EAAM,aAAAC,EAChD,UAAAC,EAAW,aAAAC,EAAc,mBAAAC,EAAoB,YAAAnE,EAAa,WAAAD,CAAA,EACxDR,EACE,CAAE,OAAA6E,EAAQ,IAAAC,GAAQT,GAAQC,CAAO,EACjC,CAACS,EAAQC,CAAS,EAAInD,EAAAA,SAAiB,EAAE,EACzC,CAACoD,EAAMC,CAAO,EAAIrD,EAAAA,SAAwB,IAAI,EAC9C,CAACsD,EAASC,CAAU,EAAIvD,EAAAA,SAAwB,IAAI,EACpD,CAACE,EAAOC,CAAQ,EAAIH,EAAAA,SAAwB,IAAI,EAChD,CAACwD,EAAeC,CAAgB,EAAIzD,EAAAA,SAAwB,IAAI,EAMhE0D,EAAaC,EAA6BhB,EAAO,aAAe,IAAI,EACpEiB,EAAUC,EAAAA,QAAgB,IAAM,OACpC,OAAKlB,KACOjB,EAAAgC,EAAW,OAAX,YAAAhC,EAAiB,QAAS,CAAA,GAC3B,OAAQoC,GAAM,CACvB,MAAMC,EAAMD,EAAE,UAAY,CAAA,EAC1B,OACG,OAAQA,EAAwC,UAAa,UACxDA,EAAsC,WAAab,GACtDc,EAAG,QAAUd,CAEpB,CAAC,EATiB,CAAA,CAUpB,EAAG,CAACN,EAAMe,EAAW,KAAMT,CAAG,CAAC,EAE/BtC,EAAAA,UAAU,IAAM,CACVgC,IAAQQ,EAAU,EAAE,EAAGI,EAAW,IAAI,EAAGpD,EAAS,IAAI,EAAGsD,EAAiB,IAAI,EACpF,EAAG,CAACd,EAAMF,CAAO,CAAC,EAElB,MAAMuB,EAAY,MAChBrC,EACAsC,EACAC,EACAC,IACkB,CAClBd,EAAQ1B,CAAK,EACb4B,EAAW,IAAI,EACfpD,EAAS,IAAI,EACb,GAAI,CACF,MAAMiE,EAAM,MAAMC,EAChBH,EACA,CAAE,OAAAD,EAAQ,KAAAE,CAAA,CAAK,EAEjB,GAAIC,EAAI,GAAI,CACV,MAAME,EAAeF,EAAI,UAAY,aAAaA,EAAI,UAAU,MAAM,EAAG,CAAC,CAAC,IAAM,GAC7EA,EAAI,WAAWX,EAAiBW,EAAI,SAAS,EACjDb,EAAW,GAAG5B,CAAK,aAAa2C,CAAY,EAAE,CAChD,MACEnE,EAASiE,EAAI,OAAS,GAAGzC,CAAK,SAAS,CAE3C,OAAS4C,EAAK,CACZpE,EAASoE,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAC,CAC3D,QAAA,CACElB,EAAQ,IAAI,CACd,CACF,EAEMmB,EAAa,SAA2B,CAC5C,GAAI,CAACtB,EAAO,OAAQ,OACpB,MAAMuB,EAAUvB,EAAO,KAAA,EACvBC,EAAU,EAAE,EACRH,IAAW,cACb,MAAMgB,EAAU,cAAe,OAAQ,kBAAkB,mBAAmBf,CAAG,CAAC,QAAS,CAAE,OAAQwB,CAAA,CAAS,EAE5G,MAAMT,EAAU,eAAgB,OAAQ,eAAe,mBAAmBf,CAAG,CAAC,UAAW,CAAE,OAAQwB,CAAA,CAAS,CAEhH,EAEMC,EAAU,SAA2B,CAIzC,GAHW,SAAO,OAAW,KAAe,OAAO,OAAO,SAAY,aAClE,OAAO,QAAQ,WAAWtG,CAAI,+DAA+D,EAGjG,IAAI4E,IAAW,cAAe,CAG5B,MAAM2B,EAAOzB,EAAO,KAAA,GAAU,oCAC9B,MAAMc,EAAU,UAAW,OAAQ,kBAAkB,mBAAmBf,CAAG,CAAC,WAAY,CAAE,OAAQ0B,CAAA,CAAM,EACxG,MACF,CACA,MAAMX,EAAU,UAAW,OAAQ,eAAe,mBAAmBf,CAAG,CAAC,UAAU,EACrF,EAEM2B,EAAO,SAA2B,CACtC,GAAI5B,IAAW,cAAe,CAC5B,MAAMgB,EAAU,OAAQ,OAAQ,kBAAkB,mBAAmBf,CAAG,CAAC,OAAO,EAChF,MACF,CAKA,GAHW,SAAO,OAAW,KAAe,OAAO,OAAO,SAAY,aAClE,OAAO,QAAQ,uBAAuBA,CAAG,0BAA0B,EAGvE,CAAAI,EAAQ,MAAM,EACdE,EAAW,IAAI,EACfpD,EAAS,IAAI,EACb,GAAI,CACF,MAAMkE,EACJ,eAAe,mBAAmBpB,CAAG,CAAC,GACtC,CAAE,OAAQ,QAAA,CAAS,EAErBM,EAAW,UAAUnF,CAAI,EAAE,EAG3BwE,EAAa,EAAK,CACpB,OAAS2B,EAAK,CACZpE,EAASoE,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAC,CAC3D,QAAA,CACElB,EAAQ,IAAI,CACd,EACF,EAEMwB,EAAS,SAA2B,CACxC,GAAI,CACF,MAAM,UAAU,UAAU,UAAU5B,CAAG,EACvCM,EAAW,WAAWN,CAAG,GAAG,CAC9B,MAAQ,CACN9C,EAAS,uBAAuB,CAClC,CACF,EAEA,aACG2E,GAAA,CAAM,KAAAnC,EAAY,aAAAC,EACjB,SAAAxD,EAAAA,IAAC2F,GAAA,CAAa,KAAK,QAAQ,MAAO3G,EAClC,SAAAc,EAAAA,KAAC6C,GAAM,IAAK,EAAG,MAAO,CAAE,QAAS,kBAC/B,SAAA,CAAA7C,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EAAG,MAAM,SACpB,SAAA,CAAA5C,EAAAA,IAACC,GAAA,CAAO,KAAAjB,EAAY,OAAQE,IAAW,QAAkBA,IAAW,QAApB,OAAuC,QAAA,CAAU,EACjGY,OAAC,OAAI,MAAO,CAAE,KAAM,EAAG,SAAU,GAC/B,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAAsB,SAAAf,CAAA,CAAK,EAC1Ea,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EAAG,MAAO,CAAE,UAAW,CAAA,EAAK,KAAI,GAC3C,SAAA,CAAA5C,EAAAA,IAACE,EAAA,CAAM,KAAMhB,IAAW,OAAS,OAASA,IAAW,QAAU,SAAW,UAAW,IAAG,GACrF,SAAAA,EACH,QACCgB,EAAA,CAAM,KAAK,SAAU,SAAA0D,IAAW,QAAU,cAAgB,cAAc,EACxEH,IAAc,QACb3D,EAAAA,KAACI,EAAA,CAAM,KAAK,UAAU,MAAO,IAAI,KAAKuD,CAAS,EAAE,eAAA,EAAkB,SAAA,CAAA,MAC7DmC,GAAe,KAAK,IAAA,EAAQnC,CAAS,CAAA,EAC3C,EAED,OAAOC,GAAiB,UACvB5D,EAAAA,KAACI,EAAA,CAAM,KAAK,UAAW,SAAA,CAAAwD,EAAa,MAAA,EAAI,EAEzC,OAAOnE,GAAe,UACrBO,EAAAA,KAACI,EAAA,CAAM,KAAK,UAAW,SAAA,CAAAX,EAAW,QAAA,EAAM,EAEzC,OAAOC,GAAgB,UACtBM,EAAAA,KAACI,EAAA,CAAM,KAAMV,GAAe,GAAM,UAAYA,GAAe,GAAM,UAAY,SAC5E,SAAA,CAAA,KAAK,MAAMA,EAAc,GAAG,EAAE,WAAA,CAAA,CACjC,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,EACF,EAEC,OAAOmE,GAAuB,UAAYA,EAAmB,OAAS,GACrE7D,EAAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,gCACT,WAAY,mBACZ,OAAQ,0BACR,aAAc,mBACd,SAAU,eACV,MAAO,kBACP,UAAW,QAAA,EAEb,MAAO6D,EACR,SAAA,CAAA,IACGA,EAAmB,OAAS,IAAM,GAAGA,EAAmB,MAAM,EAAG,GAAG,CAAC,IAAMA,EAAmB,GAAA,CAAA,CAAA,EAInGvE,IAAgB,QACfU,EAAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,iBACT,WAAY,mBACZ,OAAQ,0BACR,aAAc,mBACd,SAAU,cAAA,EAGZ,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,aAAc,CAAA,EAC9E,SAAA,CAAAE,EAAAA,IAAC6F,GAAA,CAAa,KAAM,GAAI,cAAW,GAAC,MAAO,CAAE,cAAe,SAAU,YAAa,CAAA,CAAE,CAAG,EAAE,cAAA,EAE5F,EACCzG,CAAA,CAAA,CAAA,EAILU,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA3C,EAAAA,IAAC,QAAA,CACC,QAAS,gBAAgBqD,CAAO,GAChC,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAC3C,SAAA,eAAA,CAAA,EAGDrD,EAAAA,IAAC8F,GAAA,CACC,GAAI,gBAAgBzC,CAAO,GAC3B,MAAOS,EACP,SAAWZ,GAAMa,EAAUb,EAAE,OAAO,KAAK,EACzC,YAAaU,IAAW,cAAgB,8CAAgD,gCACxF,KAAM,EACN,SAAUI,IAAS,IAAA,CAAA,EAErBlE,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EACX,SAAA,CAAA9C,EAAAA,KAAC+C,EAAA,CACC,QAAQ,UACR,QAAS,IAAM,CAAOuC,EAAA,CAAc,EACpC,SAAU,CAACtB,EAAO,KAAA,GAAUE,IAAS,KAErC,SAAA,CAAAhE,EAAAA,IAAC+F,GAAA,CAAK,KAAM,GAAI,cAAW,GAAC,EAAE,IAAE/B,IAAS,eAAiBA,IAAS,eAAiBhE,EAAAA,IAACgG,EAAA,CAAS,MAAO,CAAE,MAAO,GAAI,OAAQ,EAAA,EAAM,EAAK,MAAA,CAAA,CAAA,EAEvIlG,EAAAA,KAAC+C,EAAA,CACC,QAAQ,YACR,QAAS,IAAM,CAAOyC,EAAA,CAAW,EACjC,SAAUtB,IAAS,MAAQJ,IAAW,cACtC,MAAOA,IAAW,cAAgB,6CAA+C,OAEjF,SAAA,CAAA5D,EAAAA,IAACiG,GAAA,CAAS,KAAM,GAAI,cAAW,GAAC,EAAE,UAAA,CAAA,CAAA,EAEpCnG,EAAAA,KAAC+C,EAAA,CACC,QAAQ,SACR,QAAS,IAAM,CAAO2C,EAAA,CAAQ,EAC9B,SAAUxB,IAAS,KACnB,MAAOJ,IAAW,cAAgB,iCAAmC,uBAAuBC,CAAG,IAE/F,SAAA,CAAA7D,EAAAA,IAAC/B,GAAA,CAAQ,KAAM,GAAI,cAAW,GAAC,EAAE,OAAA,CAAA,CAAA,EAEnC6B,EAAAA,KAAC+C,EAAA,CAAO,QAAQ,QAAQ,QAAS,IAAM,CAAO4C,EAAA,CAAU,EACtD,SAAA,CAAAzF,EAAAA,IAACjC,GAAA,CAAc,KAAM,GAAI,cAAW,GAAC,EAAE,UAAA,CAAA,CACzC,CAAA,CAAA,CACF,CAAA,EACF,EAECmG,IAAY,MACXlE,EAAAA,IAAC,MAAA,CACC,KAAK,SACL,MAAO,CACL,QAAS,gCACT,WAAY,4DACZ,OAAQ,mEACR,aAAc,mBACd,SAAU,eACV,MAAO,gBAAA,EAGR,SAAAkE,CAAA,CAAA,EAGJE,IAAkB,MACjBtE,EAAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,gCACT,WAAY,mBACZ,OAAQ,0BACR,aAAc,mBACd,SAAU,eACV,MAAO,kBACP,QAAS,OACT,WAAY,SACZ,IAAK,gBAAA,EAGP,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,cAAe,YAAa,cAAe,QAAA,EAAY,SAAA,KAAA,CAAG,EACzEA,EAAAA,IAAC,OAAA,CACC,cAAY,mBACZ,MAAO,CACL,WAAY,mBACZ,MAAO,YACP,WAAY,mBACZ,QAAS,UACT,aAAc,kBAAA,EAGf,SAAAoE,CAAA,CAAA,CACH,CAAA,CAAA,EAGHtD,IAAU,MACTd,EAAAA,IAAC,MAAA,CACC,KAAK,QACL,MAAO,CACL,QAAS,gCACT,WAAY,2DACZ,OAAQ,kEACR,aAAc,mBACd,SAAU,eACV,MAAO,eAAA,EAGR,SAAAc,CAAA,CAAA,EAULhB,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA7C,EAAAA,KAAC,MAAA,CACC,MAAO,CACL,SAAU,eACV,MAAO,kBACP,cAAe,YACf,cAAe,QAAA,EAElB,SAAA,CAAA,mBACkB0E,EAAQ,OAAO,GAAA,CAAA,CAAA,EAEjCF,EAAW,SAAWE,EAAQ,SAAW,EACxCxE,MAACgG,EAAA,CAAS,MAAO,CAAE,OAAQ,GAAG,CAAG,EAC/BxB,EAAQ,SAAW,QACpB0B,GAAA,CAAK,QAAQ,WACZ,SAAAlG,MAACmG,GAAA,CACC,eAAC,OAAA,CAAK,cAAY,oBAAoB,MAAO,CAAE,SAAU,eAAgB,MAAO,mBAAqB,SAAA,kCAAA,CAErG,EACF,EACF,QAECxD,EAAA,CAAM,IAAK,EACT,SAAA6B,EAAQ,IAAKE,GACZ5E,EAAAA,KAAC,MAAA,CAEC,cAAa,eAAe4E,EAAE,EAAE,GAChC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAK,iBACL,QAAS,gCACT,WAAY,mBACZ,OAAQ,0BACR,aAAc,mBACd,SAAU,cAAA,EAGZ,SAAA,CAAA1E,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,WAAY,mBAAoB,SAAU,eAAgB,MAAO,iBAAA,EAAsB,SAAA0E,EAAE,EAAA,CAAG,QAC1G,OAAA,CAAK,MAAO,CAAE,KAAM,EAAG,SAAU,EAAG,SAAU,SAAU,aAAc,WAAY,WAAY,QAAA,EAC5F,WAAE,MACL,EACA1E,EAAAA,IAACE,EAAA,CAAM,KAAMwE,EAAE,SAAW,QAAU,OAASA,EAAE,SAAW,UAAY,SAAW,UAC9E,SAAAA,EAAE,QAAU,QAAA,CACf,CAAA,CAAA,EAnBKA,EAAE,EAAA,CAqBV,CAAA,CACH,CAAA,EAEJ,EACCd,IAAW,eACV9D,OAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA7C,EAAAA,KAAC,MAAA,CACC,MAAO,CACL,SAAU,eACV,MAAO,kBACP,cAAe,YACf,cAAe,QAAA,EAGjB,SAAA,CAAAE,EAAAA,IAAC6F,GAAA,CAAa,KAAM,GAAI,cAAW,GAAC,MAAO,CAAE,cAAe,SAAU,YAAa,CAAA,CAAE,CAAG,EAAE,aAAA,CAAA,CAAA,QAG3FtF,GAAA,CAAgB,UAAWsD,EAAK,OAAQG,IAAS,MAAA,CAAQ,CAAA,CAAA,CAC5D,CAAA,CAAA,CAEJ,EACF,EACA,CAEJ,CAGA,SAAS4B,GAAetH,EAAoB,CAC1C,GAAI,CAAC,OAAO,SAASA,CAAE,GAAKA,EAAK,EAAG,MAAO,IAC3C,MAAME,EAAM,KAAK,MAAMF,EAAK,GAAI,EAChC,GAAIE,EAAM,GAAI,MAAO,GAAGA,CAAG,IAC3B,MAAMC,EAAM,KAAK,MAAMD,EAAM,EAAE,EAC/B,GAAIC,EAAM,GAAI,MAAO,GAAGA,CAAG,KAAKD,EAAM,EAAE,IACxC,MAAME,EAAK,KAAK,MAAMD,EAAM,EAAE,EAC9B,OAAIC,EAAK,GAAW,GAAGA,CAAE,KAAKD,EAAM,EAAE,IAE/B,GADK,KAAK,MAAMC,EAAK,EAAE,CACjB,KAAKA,EAAK,EAAE,GAC3B,CCrZA,SAAS0H,GAAalH,EAAmF,CACvG,MAAMmH,GAAKnH,GAAU,IAAI,YAAA,EACzB,OAAImH,IAAM,QAAUA,IAAM,UAAkB,OACxCA,IAAM,OAAe,UACrBA,IAAM,SAAWA,IAAM,QAAgB,SACvCA,IAAM,SAAiB,UACpB,SACT,CAEA,SAASC,GAAYpH,EAAoC,CACvD,MAAMmH,GAAKnH,GAAU,IAAI,YAAA,EACzB,OAAImH,IAAM,UAAkB,UACvBA,GAAU,MAEjB,CAEA,SAASE,GAAWjI,EAAuC,CACzD,GAAI,OAAOA,GAAO,UAAY,CAAC,OAAO,SAASA,CAAE,GAAKA,GAAM,EAAG,MAAO,IACtE,MAAMC,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAA,EAAQD,CAAE,EACnCE,EAAM,KAAK,MAAMD,EAAQ,GAAI,EACnC,GAAIC,EAAM,GAAI,MAAO,GAAGA,CAAG,QAC3B,MAAMC,EAAM,KAAK,MAAMD,EAAM,EAAE,EAC/B,GAAIC,EAAM,GAAI,MAAO,GAAGA,CAAG,QAC3B,MAAMC,EAAK,KAAK,MAAMD,EAAM,EAAE,EAC9B,OAAIC,EAAK,GAAW,GAAGA,CAAE,QAClB,GAAG,KAAK,MAAMA,EAAK,EAAE,CAAC,OAC/B,CASA,SAAS8H,GAAQ,CAAE,KAAAC,EAAM,MAAAC,EAAO,SAAAC,EAAU,SAAAC,GAAuC,CAC/E,MAAMC,EAAcJ,EAAK,SAAS,OAAS,EACrCK,EAASH,EAAS,IAAIF,EAAK,IAAI,EAC/BM,EAAQN,EAAK,MACbpE,EAAO+D,GAAaW,GAAA,YAAAA,EAAO,MAAM,EACjC7H,EAASoH,GAAYS,GAAA,YAAAA,EAAO,MAAM,EACxC,OACEjH,EAAAA,KAAAkH,WAAA,CACE,SAAA,CAAAlH,EAAAA,KAAC,MAAA,CACC,cAAa,wBAAwB2G,EAAK,IAAI,GAC9C,MAAO,CACL,QAAS,OACT,oBAAqB,qBACrB,WAAY,SACZ,IAAK,iBACL,QAAS,gCACT,YAAa,yBAAyBC,EAAQ,EAAE,MAChD,OAAQ,0BACR,aAAc,mBACd,WAAY,kBAAA,EAGb,SAAA,CAAAG,EACC7G,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,cAAa,0BAA0ByG,EAAK,IAAI,GAChD,aAAYK,EAAS,WAAa,SAClC,QAAS,IAAMF,EAASH,EAAK,IAAI,EACjC,MAAO,CACL,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,MAAO,GACP,OAAQ,GACR,aAAc,mBACd,OAAQ,0BACR,WAAY,mBACZ,MAAO,kBACP,OAAQ,UACR,QAAS,CAAA,EAGV,SAAAK,EAAS9G,EAAAA,IAACiH,GAAA,CAAY,KAAM,GAAI,cAAW,EAAA,CAAC,EAAKjH,EAAAA,IAACkH,GAAA,CAAa,KAAM,GAAI,cAAW,EAAA,CAAC,CAAA,CAAA,EAGxFlH,MAAC,OAAA,CAAK,cAAW,GAAC,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,cAAe,WAAY,SAAU,eAAgB,SAAU,MAAO,kBAAA,EAC/H,SAAAA,EAAAA,IAACmH,GAAA,CAAU,KAAM,EAAA,CAAI,CAAA,CACvB,SAED,MAAA,CAAI,MAAO,CAAE,SAAU,GACtB,SAAA,CAAAnH,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,WAAY,IAAK,MAAO,WAAA,EAAgB,SAAAyG,EAAK,IAAA,CAAK,EACzFM,UACE,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAC5C,SAAA,CAAAA,EAAM,MAAQA,EAAM,UAAYA,EAAM,MAAQ,QAC9CA,EAAM,QAAUA,EAAM,SAAWN,EAAK,MACrC3G,EAAAA,KAAAkH,WAAA,CAAE,SAAA,CAAA,aAAUhH,MAAC,QAAK,MAAO,CAAE,WAAY,oBAAuB,WAAM,MAAA,CAAO,CAAA,CAAA,CAAO,CAAA,CAAA,CAEtF,CAAA,EAEJ,EACC,OAAO+G,GAAA,YAAAA,EAAO,WAAa,UAAYA,EAAM,SAAW,SACtD,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,WAAY,oBAC5E,SAAAR,GAAWQ,EAAM,QAAQ,EAC5B,EAEF/G,EAAAA,IAACE,EAAA,CAAM,KAAAmC,EAAY,IAAG,GAAE,SAAAnD,CAAA,CAAO,CAAA,CAAA,CAAA,EAEhC2H,GAAeC,GAAUL,EAAK,SAAS,IAAKW,GAC3CpH,EAAAA,IAACwG,GAAA,CAAyB,KAAMY,EAAO,MAAOV,EAAQ,EAAG,SAAAC,EAAoB,SAAAC,CAAA,EAA/DQ,EAAM,IAA6E,CAClG,CAAA,EACH,CAEJ,CAEO,SAASC,IAA8B,WAC5C,MAAMzF,EAAO2C,EAA4B,uBAAuB,EAC1D,CAACoC,EAAUW,CAAW,EAAI1G,EAAAA,SAAsB,IAAM,IAAI,GAAK,EAG/D,CAAC2G,EAAWC,CAAY,EAAI5G,EAAAA,SAAsB,IAAM,IAAI,GAAK,EAEjE6G,EAAYhD,EAAAA,QAAQ,IAAA,SAAM,QAAAjC,GAAAF,EAAAV,EAAK,OAAL,YAAAU,EAAW,QAAX,YAAAE,EAAkB,IAAKkF,GAAMA,EAAE,QAAS,CAAA,GAAI,CAAC9F,EAAK,IAAI,CAAC,EAKnF2F,EAAU,OAAS,GAAKE,EAAU,OAAS,IAC7CD,EAAa,IAAI,IAAIC,CAAS,CAAC,EAC/BH,EAAY,IAAI,IAAIG,CAAS,CAAC,GAGhC,MAAME,EAAiBC,EAAAA,YAAY,IAAMhG,EAAK,UAAW,CAACA,CAAI,CAAC,EAC/DiG,GAAa,gBAAiBF,CAAc,EAE5C,MAAMG,EAASF,cAAa5I,GAAiB,CAC3CsI,EAAaxF,GAAS,CACpB,MAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAIC,EAAK,IAAI/C,CAAI,EAAG+C,EAAK,OAAO/C,CAAI,EAC/B+C,EAAK,IAAI/C,CAAI,EACX+C,CACT,CAAC,CACH,EAAG,CAAA,CAAE,EAEL,GAAIH,EAAK,SAAW,CAACA,EAAK,KACxB,OACE9B,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA3C,EAAAA,IAACgG,EAAA,CAAS,MAAO,CAAE,OAAQ,IAAM,QAChCA,EAAA,CAAS,MAAO,CAAE,OAAQ,IAAM,QAChCA,EAAA,CAAS,MAAO,CAAE,OAAQ,GAAG,CAAG,CAAA,EACnC,EAIJ,MAAM+B,IAAQzF,EAAAV,EAAK,OAAL,YAAAU,EAAW,QAAS,CAAA,EAClC,OAAIyF,EAAM,SAAW,EAEjB/H,EAAAA,IAACkG,GAAA,CACC,SAAAlG,EAAAA,IAACmG,GAAA,CACC,SAAAnG,EAAAA,IAACgI,GAAA,CACC,KAAMhI,EAAAA,IAACiI,GAAA,CAAQ,KAAM,GAAI,cAAW,GAAC,EACrC,MAAM,mBACN,YAAY,kIACZ,cAAY,uBAAA,CAAA,EAEhB,CAAA,CACF,EAKFnI,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA3C,EAAAA,IAAC4C,EAAA,CAAO,MAAM,SAAS,QAAQ,UAC7B,SAAA9C,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,mBAC7C,SAAA,CAAAiI,EAAM,OAAO,cAAYA,EAAM,SAAW,EAAI,GAAK,IAAI,QAAIrF,GAAAF,EAAAZ,EAAK,OAAL,YAAAY,EAAW,MAAX,YAAAE,EAAgB,SAAU,EAAE,QAAA,CAAA,CAC1F,CAAA,CACF,EACA1C,MAAC2C,GAAM,IAAK,EACT,WAAM,IAAKuF,GACVlI,MAACwG,GAAA,CAAwB,KAAM0B,EAAM,MAAO,EAAG,SAAAvB,EAAoB,SAAUmB,GAA/DI,EAAK,IAAkE,CACtF,CAAA,CACH,CAAA,EACF,CAEJ,CC5LA,MAAMC,GAAqB,4BACrBC,GAAgB,CACpB,IAAK,MACL,MAAO,QACP,cAAe,aACjB,EAEMC,GAAgB,OAAO,KAAKD,EAAa,EAE/C,SAASE,IAAoC,CAC3C,GAAI,OAAO,aAAiB,IAAa,MAAO,MAChD,MAAMC,EAAI,aAAa,QAAQJ,EAAkB,EACjD,OAAOE,GAAc,SAASE,CAAiB,EAAKA,EAAqB,KAC3E,CAGA,SAASC,GAAelK,EAAoB,CAC1C,GAAI,CAAC,OAAO,SAASA,CAAE,GAAKA,GAAM,EAAG,MAAO,IAC5C,MAAMC,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAA,EAAQD,CAAE,EACnCE,EAAM,KAAK,MAAMD,EAAQ,GAAI,EACnC,GAAIC,EAAM,GAAI,MAAO,GAAGA,CAAG,QAC3B,MAAMC,EAAM,KAAK,MAAMD,EAAM,EAAE,EAC/B,GAAIC,EAAM,GAAI,MAAO,GAAGA,CAAG,QAC3B,MAAMC,EAAK,KAAK,MAAMD,EAAM,EAAE,EAC9B,OAAIC,EAAK,GAAW,GAAGA,CAAE,QAClB,GAAG,KAAK,MAAMA,EAAK,EAAE,CAAC,OAC/B,CAWA,SAAS+J,GAASC,EAA+B,CAC/C,MAAMC,GAAOD,EAAE,QAAU,QAAQ,YAAA,EAC3BxJ,EACJyJ,IAAQ,QAAUA,IAAQ,UAAY,OACtCA,IAAQ,SAAWA,IAAQ,QAAU,QACrCA,IAAQ,SAAW,SAAW,OAChC,MAAO,CACL,GAAI,SAASD,EAAE,IAAI,GACnB,KAAMA,EAAE,KACR,KAAMA,EAAE,MAAQA,EAAE,UAAYA,EAAE,MAAQ,QACxC,OAAAxJ,EACA,YAAawJ,EAAE,cAAgB,QAAQA,EAAE,aAAa,GAAK,OAC3D,aAAcA,EAAE,SAAW,IAAI,KAAKA,EAAE,QAAQ,EAAE,mBAAA,EAAuB,OACvE,WAAYA,EAAE,YAAc,EAI5B,eAAgB,OAAOA,EAAE,gBAAmB,SAAWA,EAAE,eAAiB,OAC1E,WAAY,OAAOA,EAAE,YAAe,SAAWA,EAAE,WAAa,OAC9D,YAAa,OAAOA,EAAE,aAAgB,SAAWA,EAAE,YAAc,OACjE,WAAY,OAAOA,EAAE,UAAa,UAAYA,EAAE,SAAW,EAAIA,EAAE,SAAW,OAC5E,OAAQA,EAAE,MAAQ,CAAA,CAAC,CAEvB,CAEA,SAASE,GAAMF,EAA4B,SACzC,MAAMC,GAAOD,EAAE,QAAUA,EAAE,OAAS,QAAQ,YAAA,EACtCxJ,EACJyJ,IAAQ,QAAUA,IAAQ,UAAY,OACtCA,IAAQ,QAAU,QAClBA,IAAQ,SAAW,SAAW,OAChC,MAAO,CACL,GAAI,MAAMD,EAAE,WAAaA,EAAE,EAAE,GAC7B,KAAMA,EAAE,QAAQpG,EAAAoG,EAAE,YAAF,YAAApG,EAAa,MAAM,EAAG,KAAM,UAC5C,KAAMoG,EAAE,OAAS,aAAe,gBAAkB,iBAClD,OAAAxJ,EACA,YAAawJ,EAAE,oBAAsB,OACrC,aAAcA,EAAE,cAAgB,IAAI,KAAKA,EAAE,aAAa,EAAE,mBAAA,EAAwBA,EAAE,UAAY,IAAI,KAAKA,EAAE,SAAS,EAAE,qBAAuB,OAC7I,WAAYA,EAAE,cAAgB,EAI9B,OAAQ,GAAClG,EAAAkG,EAAE,MAAF,YAAAlG,EAAO,MAAM,KAAK,MAAM,IAAI,KAAK,OAAQ,EAAE,EAAE,OAAO,OAAO,CAAA,CAExE,CAEO,SAASqG,IAA0B,aACxC,MAAMC,EAAQvE,EAAoC,aAAa,EACzDwE,EAAKxE,EAAiD,gBAAgB,EACtEyE,EAAQzE,EAAmC,mBAAmB,EAC9D,CAACX,EAAQqF,CAAS,EAAIrI,EAAAA,SAAuB0H,EAAmB,EAChE,CAACY,EAAMC,CAAO,EAAIvI,EAAAA,SAAiC,QAAQ,EACjEW,EAAAA,UAAU,IAAM,CACV,OAAO,aAAiB,KAAa,aAAa,QAAQ4G,GAAoBvE,CAAM,CAC1F,EAAG,CAACA,CAAM,CAAC,EACX,KAAM,CAACwF,EAAWC,CAAY,EAAIzI,EAAAA,SAAuB,CAAA,CAAE,EACrD,CAAC0I,EAAQC,CAAS,EAAI3I,EAAAA,SAAoB,CAAA,CAAE,EAC5C,CAAC4I,EAAaC,CAAc,EAAI7I,EAAAA,SAAS,EAAK,EAC9C,CAAC8I,EAAQC,CAAS,EAAI/I,EAAAA,SAAwB,IAAI,EAClD,CAACgJ,EAAaC,CAAc,EAAIjJ,EAAAA,SAAgD,IAAI,EACpF,CAACkJ,EAAUC,CAAW,EAAInJ,EAAAA,SAAS,EAAK,EACxC,CAACoJ,EAAaC,CAAc,EAAIrJ,EAAAA,SAAwB,IAAI,EAC5D,CAACsJ,EAAiBC,CAAkB,EAAIvJ,EAAAA,SAAsB,IAAM,IAAI,GAAK,EAE7EwJ,EAAa,SAA2B,CAC5C,GAAI,EAAAR,IAAgB,MAAQ,CAACA,EAAY,KAAK,QAC9C,CAAAG,EAAY,EAAI,EAChBE,EAAe,IAAI,EACnB,GAAI,CACF,MAAMhF,EAAU,cAAe,CAAE,OAAQ,OAAQ,KAAM,CAAE,KAAM2E,EAAY,KAAK,KAAA,EAAQ,KAAMA,EAAY,KAAK,QAAU,OAAA,EAAW,EACpIC,EAAe,IAAI,EACnBf,EAAM,QAAA,CACR,OAAS3D,EAAK,CACZ8E,GAAe9E,aAAekF,EAAalF,EAAI,QAAgC,CACjF,QAAA,CACE4E,EAAY,EAAK,CACnB,EACF,EAKMO,EAAe,MAAOtL,GAAgC,CAC1DmL,EAAoBrI,GAAS,IAAI,IAAIA,CAAI,EAAE,IAAI9C,CAAI,CAAC,EACpD,GAAI,CACF,MAAMiG,EAAU,eAAe,mBAAmBjG,CAAI,CAAC,WAAY,CAAE,OAAQ,OAAQ,EACrFgK,EAAM,QAAA,EACNF,EAAM,QAAA,CACR,OAAS3D,EAAK,CACZ8E,GAAe9E,aAAekF,EAAalF,EAAI,QAAgC,CACjF,QAAA,CACEgF,EAAoBrI,GAAS,CAC3B,MAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,OAAO/C,CAAI,EACT+C,CACT,CAAC,CACH,CACF,EAOM,CAACwI,EAAgBC,CAAiB,EAAI5J,EAAAA,SAAsB,IAAM,IAAI,GAAK,EAC3E6J,EAAuB,MAAOzL,EAAcE,IAA6C,CAC7FsL,EAAmB1I,GAAS,IAAI,IAAIA,CAAI,EAAE,IAAI9C,CAAI,CAAC,EACnD,GAAI,CACF,MAAMiG,EAAU,eAAe,mBAAmBjG,CAAI,CAAC,UAAW,CAChE,OAAQ,OACR,KAAM,CAAE,OAAAE,CAAA,CAAO,CAChB,EACD8J,EAAM,QAAA,EACNF,EAAM,QAAA,CACR,OAAS3D,EAAK,CACZ8E,GAAe9E,aAAekF,EAAalF,EAAI,QAAgC,CACjF,QAAA,CACEqF,EAAmB1I,GAAS,CAC1B,MAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,OAAO/C,CAAI,EACT+C,CACT,CAAC,CACH,CACF,EAMM,CAAC2I,EAAUC,CAAW,EAAI/J,EAAAA,SAAkB,EAAK,EACjDgK,EAAiB,SAA2B,OAChD,MAAMC,IAAOvI,EAAA0G,EAAM,OAAN,YAAA1G,EAAY,QAAS,CAAA,EAClC,GAAIuI,EAAK,SAAW,EACpB,CAAAF,EAAY,EAAI,EAChB,GAAI,CACF,MAAM,QAAQ,IAAIE,EAAK,IAAKnC,GAC1BzD,EAAU,eAAe,mBAAmByD,EAAE,IAAI,CAAC,UAAW,CAC5D,OAAQ,OACR,KAAM,CAAE,OAAQ,QAAA,CAAS,CAC1B,EAAE,MAAOvD,IACR8E,GAAe9E,aAAekF,EAAalF,EAAI,QAAgC,EACxE,KACR,CAAA,CACF,EACD6D,EAAM,QAAA,EACNF,EAAM,QAAA,CACR,QAAA,CACE6B,EAAY,EAAK,CACnB,EACF,EAEApJ,EAAAA,UAAU,IAAM,SACV,CAACiI,KAAelH,EAAAwG,EAAM,OAAN,YAAAxG,EAAY,UAAW,UAAaE,EAAAuG,EAAG,OAAH,YAAAvG,EAAS,UAAW,SAC1EiH,EAAe,EAAI,EACnBJ,EAAaP,EAAM,KAAK,MAAM,EAC9BS,EAAUR,EAAG,KAAK,MAAM,EAE5B,EAAG,CAACD,EAAM,KAAMC,EAAG,KAAMS,CAAW,CAAC,EAErC,MAAM7B,EAAiBC,EAAAA,YAAY,IAAM,CAGvCkB,EAAM,QAAA,EACNC,EAAG,QAAA,CACL,EAAG,CAACD,EAAOC,CAAE,CAAC,EACdlB,GAAa,gBAAiBF,CAAc,EAE5C,MAAMmD,EAAgBlD,cAAamD,GAAmB,CACpD,GAAIA,EAAI,OAAS,eAAgB,OACjC,MAAMrC,EAAKqC,EAAqD,MAC5D,CAACrC,GAAK,CAACA,EAAE,MACbW,EAAcvH,GAAS,CACrB,MAAMM,EAAMN,EAAK,UAAWkJ,IAAMA,GAAE,OAAStC,EAAE,IAAI,EACnD,GAAItG,IAAQ,GAAI,MAAO,CAAC,GAAGN,EAAM4G,CAAC,EAClC,MAAMuC,EAAOnJ,EAAK,MAAA,EAClB,OAAAmJ,EAAK7I,CAAG,EAAI,CAAE,GAAG6I,EAAK7I,CAAG,EAAG,GAAGsG,CAAA,EACxBuC,CACT,CAAC,CACH,EAAG,CAAA,CAAE,EACLpD,GAAa,eAAgBiD,CAAa,EAE1C,MAAMI,EAAQzG,EAAAA,QAAQ,IAAM,CAC1B,MAAM0G,EAAmE,CAAA,EACzE,GAAIvH,IAAW,cACb,UAAW8E,KAAKU,EAAW+B,EAAI,KAAK,CAAE,GAAG1C,GAASC,CAAC,EAAG,OAAQ,OAAA,CAAS,EAEzE,GAAI9E,IAAW,QACb,UAAW8E,KAAKY,EAAQ6B,EAAI,KAAK,CAAE,GAAGvC,GAAMF,CAAC,EAAG,OAAQ,aAAA,CAAe,EAEzE,OAAOyC,CACT,EAAG,CAAC/B,EAAWE,EAAQ1F,CAAM,CAAC,EAE9B,OACE9D,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EAAG,cAAY,cACzB,SAAA,CAAA3C,EAAAA,IAACoL,GAAA,CACC,MAAM,SACN,YAAY,uEACZ,QACEtL,EAAAA,KAAC+C,EAAA,CAAO,QAAQ,UAAU,QAAS,IAAMgH,EAAe,CAAE,KAAM,GAAI,KAAM,EAAA,CAAI,EAAG,cAAY,oBAC3F,SAAA,CAAA7J,EAAAA,IAACqL,GAAA,CAAK,KAAM,GAAI,cAAW,GAAC,EAAE,YAAA,CAAA,CAChC,CAAA,CAAA,EAGJrL,EAAAA,IAACsL,GAAA,CACC,MAAM,SACN,MAAOJ,EAAM,OACb,aAAa5I,EAAA0G,EAAM,OAAN,MAAA1G,EAAY,OAAS0G,EAAM,KAAK,MAAM,OAAS,EAAI,GAAGA,EAAM,KAAK,MAAM,MAAM,SAAW,OACrG,OAAO,oBAAA,CAAA,KAEPxG,EAAAwG,EAAM,OAAN,YAAAxG,EAAY,QAAS,CAAA,GAAI,OAAS,GAClCxC,EAAAA,IAACuL,GAAA,CACC,KAAK,UACL,cAAY,sBACZ,OACEzL,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EACX,SAAA,CAAA9C,EAAAA,KAAC+C,EAAA,CACC,QAAQ,YACR,KAAK,KACL,QAAS,IAAM,CAAO+H,EAAA,CAAkB,EACxC,SAAUF,EACV,cAAY,0BACZ,MAAM,kCAEN,SAAA,CAAA1K,EAAAA,IAACgD,GAAA,CAAM,KAAM,GAAI,cAAW,GAAC,EAAE,IAAE0H,EAAW,WAAa,WAAA,CAAA,CAAA,EAE3D1K,EAAAA,IAAC6C,EAAA,CAAO,QAAQ,YAAY,KAAK,KAAK,QAAS,IAAMsG,EAAQ,WAAW,EAAG,SAAA,cAAA,CAE3E,CAAA,EACF,EAGF,SAAArJ,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA7C,EAAAA,KAAC8C,EAAA,CAAO,MAAM,SAAS,IAAK,EAC1B,SAAA,CAAA5C,EAAAA,IAACwL,GAAA,CAAc,KAAM,GAAI,cAAW,GAAC,MAAO,CAAE,MAAO,gBAAA,CAAiB,CAAG,SACxE,OAAA,CACG,SAAA,IAAA9I,EAAAsG,EAAM,OAAN,YAAAtG,EAAY,QAAS,CAAA,GAAI,OAAO,SAAOsG,EAAM,MAAQA,EAAM,KAAK,OAASA,EAAM,KAAK,MAAM,SAAW,EAAI,GAAK,IAAI,2BAAA,CAAA,CACtH,CAAA,EACF,EACAhJ,EAAAA,IAAC2C,EAAA,CAAM,IAAK,EACR,YAAA8I,EAAAzC,EAAM,OAAN,YAAAyC,EAAY,QAAS,CAAA,GAAI,IAAK,GAAM,CACpC,MAAMC,EAAaxB,EAAgB,IAAI,EAAE,IAAI,EACvCzJ,EAAS,EAAE,SAAW,SACtBuD,EAAO0H,GAAcnB,EAAe,IAAI,EAAE,IAAI,EACpD,OACEzK,EAAAA,KAAC8C,EAAA,CAAoB,MAAM,SAAS,QAAQ,UAAU,IAAK,EAAG,cAAa,oBAAoB,EAAE,IAAI,GACnG,SAAA,CAAA9C,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EAAG,MAAM,SACpB,SAAA,CAAA5C,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,WAAY,mBAAoB,SAAU,cAAA,EAAmB,SAAA,EAAE,IAAA,CAAK,EACnFA,EAAAA,IAACE,EAAA,CAAM,KAAMO,EAAS,UAAY,SAAW,SAAAA,EAAS,SAAY,EAAE,QAAU,OAAA,CAAS,EACtF,OAAO,EAAE,UAAa,UAAY,EAAE,SAAW,GAC9CX,EAAAA,KAAC,OAAA,CAAK,MAAO,CAAE,SAAU,eAAgB,MAAO,mBAAqB,SAAA,CAAA,aACxD0I,GAAe,EAAE,QAAQ,CAAA,CAAA,CACtC,CAAA,EAEJ,EACA1I,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EACV,SAAA,CAAAnC,EACCX,EAAAA,KAAC+C,EAAA,CACC,QAAQ,QACR,KAAK,KACL,SAAUmB,EACV,QAAS,IAAM,CAAOyG,EAAqB,EAAE,KAAM,MAAM,CAAG,EAC5D,cAAa,uBAAuB,EAAE,IAAI,GAE1C,SAAA,CAAAzK,EAAAA,IAAC+C,GAAA,CAAK,KAAM,GAAI,cAAW,GAAC,EAAE,SAAA,CAAA,CAAA,EAGhCjD,EAAAA,KAAC+C,EAAA,CACC,QAAQ,YACR,KAAK,KACL,SAAUmB,EACV,QAAS,IAAM,CAAOyG,EAAqB,EAAE,KAAM,QAAQ,CAAG,EAC9D,cAAa,sBAAsB,EAAE,IAAI,GAEzC,SAAA,CAAAzK,EAAAA,IAACgD,GAAA,CAAM,KAAM,GAAI,cAAW,GAAC,EAAE,QAAA,CAAA,CAAA,EAGnClD,EAAAA,KAAC+C,EAAA,CACC,QAAQ,UACR,KAAK,KACL,SAAUmB,EACV,QAAS,IAAM,CAAOsG,EAAa,EAAE,IAAI,CAAG,EAC5C,cAAa,wBAAwB,EAAE,IAAI,GAE3C,SAAA,CAAAtK,EAAAA,IAACiG,GAAA,CAAS,KAAM,GAAI,cAAW,GAAC,EAAE,IAAEyF,EAAa,cAAgB,SAAA,CAAA,CAAA,CACnE,CAAA,CACF,CAAA,CAAA,EAzCW,EAAE,IA0Cf,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,EAGJ5L,EAAAA,KAAC8C,GAAO,MAAM,SAAS,QAAQ,UAAU,KAAI,GAAC,IAAK,EACjD,SAAA,CAAA5C,EAAAA,IAAC4C,EAAA,CAAO,IAAK,EACT,SAAA,CAAC,MAAO,QAAS,aAAa,EAAqB,IAAK+I,GACxD7L,EAAAA,KAAC8L,EAAA,CAEC,SAAUhI,IAAW+H,EACrB,QAAS,IAAM1C,EAAU0C,CAAE,EAE1B,SAAA,CAAAA,IAAO,QAAU3L,EAAAA,IAAC6L,GAAA,CAAI,KAAM,GAAI,cAAW,GAAC,EAAKF,IAAO,oBAAiBG,GAAA,CAAI,KAAM,GAAI,cAAW,GAAC,EAAK,KAAM,IAC9G1D,GAAcuD,CAAE,CAAA,CAAA,EALZA,CAAA,CAOR,EACH,EACA7L,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EACX,SAAA,CAAA5C,EAAAA,IAAC4L,EAAA,CACC,cAAY,qBACZ,SAAU1C,IAAS,SACnB,QAAS,IAAMC,EAAQ,QAAQ,EAChC,SAAA,QAAA,CAAA,EAGDnJ,EAAAA,IAAC4L,EAAA,CACC,cAAY,wBACZ,SAAU1C,IAAS,YACnB,QAAS,IAAMC,EAAQ,WAAW,EACnC,SAAA,WAAA,CAAA,CAED,CAAA,CACF,CAAA,EACF,EACCD,IAAS,YACRlJ,EAAAA,IAACqH,GAAA,CAAA,CAAe,EACd6D,EAAM,SAAW,IAAMpC,EAAM,SAAWC,EAAG,SAC7CjJ,EAAAA,KAACiM,GAAA,CAAK,KAAM,EACV,SAAA,CAAA/L,EAAAA,IAACgG,EAAA,CAAS,MAAO,CAAE,OAAQ,KAAO,QACjCA,EAAA,CAAS,MAAO,CAAE,OAAQ,KAAO,QACjCA,EAAA,CAAS,MAAO,CAAE,OAAQ,IAAI,CAAG,CAAA,EACpC,EACEkF,EAAM,SAAW,IAAMpC,EAAM,OAASC,EAAG,OAC3C/I,EAAAA,IAACgM,GAAA,CACC,MAAK,GACL,MAAM,uBACN,YAAY,+DACZ,MAAOlD,EAAM,OAASC,EAAG,MACzB,QAAS,IAAM,CAAOD,EAAM,QAAA,EAAgBC,EAAG,QAAA,CAAW,EAC1D,OAAO,cAAA,CAAA,EAEPmC,EAAM,SAAW,EACnBpL,OAAC,QAAK,MAAO,CAAE,MAAO,iBAAA,EAAqB,SAAA,CAAA,sBACtBE,EAAAA,IAAC,QAAK,SAAA,OAAA,CAAK,EAAO,wCAAA,CAAA,CACvC,QAEC+L,GAAA,CAAK,KAAM,EACT,SAAAb,EAAM,IAAKe,GACVjM,EAAAA,IAAClB,GAAA,CAAsB,GAAGmN,EAAG,OAAQ,IAAMtC,EAAUsC,EAAE,EAAE,GAAzCA,EAAE,EAA0C,CAC7D,CAAA,CACH,EAGDvC,IAAW,OAAS,IAAM,CACzB,MAAMwC,EAAMhB,EAAM,KAAMe,GAAMA,EAAE,KAAOvC,CAAM,EAC7C,GAAI,CAACwC,EAAK,OAAO,KACjB,MAAMC,EAAWD,EAAI,SAAW,cAAgB5C,EAAO,KAAMZ,GAAMwD,EAAI,KAAO,MAAMxD,EAAE,WAAaA,EAAE,EAAE,EAAE,EAAI,OACvG0D,EAAWF,EAAI,SAAW,QAAU9C,EAAU,KAAMV,GAAMwD,EAAI,KAAO,SAASxD,EAAE,IAAI,EAAE,EAAI,OAChG,OACE1I,EAAAA,IAACsD,GAAA,CACC,QAAS4I,EAAI,GACb,KAAMA,EAAI,KACV,KAAMA,EAAI,KACV,OAAQA,EAAI,OACZ,YAAaA,EAAI,YACjB,WAAWC,GAAA,YAAAA,EAAU,aAAaC,GAAA,YAAAA,EAAU,UAC5C,aAAcD,GAAA,YAAAA,EAAU,aACxB,mBAAoBA,GAAA,YAAAA,EAAU,mBAC9B,YAAaC,GAAA,YAAAA,EAAU,YACvB,WAAYA,GAAA,YAAAA,EAAU,WACtB,KAAM1C,IAAW,KACjB,aAAe2C,GAAM,CAAOA,GAAG1C,EAAU,IAAI,CAAG,CAAA,CAAA,CAGtD,GAAA,QAICjE,GAAA,CAAM,KAAMkE,IAAgB,KAAM,aAAeyC,GAAM,CAAOA,GAAGxC,EAAe,IAAI,CAAG,EACtF,SAAA7J,EAAAA,IAAC2F,GAAA,CAAa,KAAK,QAAQ,MAAM,YAC9B,SAAAiE,IAAgB,MACf9J,EAAAA,KAAC6C,GAAM,IAAK,EAAG,MAAO,CAAE,QAAS,kBAC/B,SAAA,CAAA7C,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA3C,EAAAA,IAAC,QAAA,CAAM,QAAQ,oBAAoB,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAAqB,SAAA,MAAA,CAAI,EACtGA,EAAAA,IAACsM,GAAA,CACC,GAAG,oBACH,MAAO1C,EAAY,KACnB,SAAW1G,GAAM2G,EAAe,CAAE,GAAGD,EAAa,KAAM1G,EAAE,OAAO,MAAO,EACxE,YAAY,aACZ,SAAU4G,EACV,cAAY,mBAAA,CAAA,CACd,EACF,EACAhK,EAAAA,KAAC6C,EAAA,CAAM,IAAK,EACV,SAAA,CAAA3C,EAAAA,IAAC,QAAA,CAAM,QAAQ,oBAAoB,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAAqB,SAAA,iBAAA,CAAe,EACjHA,EAAAA,IAACsM,GAAA,CACC,GAAG,oBACH,MAAO1C,EAAY,KACnB,SAAW1G,GAAM2G,EAAe,CAAE,GAAGD,EAAa,KAAM1G,EAAE,OAAO,MAAO,EACxE,YAAY,mBACZ,SAAU4G,EACV,cAAY,mBAAA,CAAA,CACd,EACF,EACCE,IAAgB,MAAQhK,EAAAA,IAAC,OAAA,CAAK,KAAK,QAAQ,MAAO,CAAE,MAAO,gBAAiB,SAAU,cAAA,EAAmB,SAAAgK,EAAY,EACtHlK,EAAAA,KAAC8C,EAAA,CAAO,IAAK,EACX,SAAA,CAAA5C,EAAAA,IAAC6C,EAAA,CAAO,QAAQ,UAAU,QAAS,IAAM,CAAOuH,EAAA,CAAc,EAAG,SAAUN,GAAY,CAACF,EAAY,KAAK,KAAA,EAAQ,cAAY,sBAAsB,SAAA,cAAA,CAEnJ,EACA5J,EAAAA,IAAC6C,EAAA,CAAO,QAAQ,QAAQ,QAAS,IAAMgH,EAAe,IAAI,EAAG,SAAUC,EAAU,SAAA,QAAA,CAEjF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAEJ,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"AgentsView-ByiIJ0ej.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/clipboard-copy.js","../../../node_modules/lucide-react/dist/esm/icons/octagon.js","../../src/web/v8/ui/agents/AgentCard.tsx","../../src/web/v8/ui/agents/AgentLiveOutput.tsx","../../src/web/v8/ui/agents/AgentDetail.tsx","../../src/web/v8/views/Agents/AgentHierarchy.tsx","../../src/web/v8/views/Agents/AgentsView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ClipboardCopy = createLucideIcon(\"ClipboardCopy\", [\n [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n [\"path\", { d: \"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\", key: \"4jdomd\" }],\n [\"path\", { d: \"M16 4h2a2 2 0 0 1 2 2v4\", key: \"3hqy98\" }],\n [\"path\", { d: \"M21 14H11\", key: \"1bme5i\" }],\n [\"path\", { d: \"m15 10-4 4 4 4\", key: \"5dvupr\" }]\n]);\n\nexport { ClipboardCopy as default };\n//# sourceMappingURL=clipboard-copy.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Octagon = createLucideIcon(\"Octagon\", [\n [\n \"path\",\n {\n d: \"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z\",\n key: \"2d38gg\"\n }\n ]\n]);\n\nexport { Octagon as default };\n//# sourceMappingURL=octagon.js.map\n","import { type ReactNode } from 'react';\nimport { Activity, Zap } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\nimport { Avatar } from '../data/Avatar.js';\nimport { Badge } from '../data/Badge.js';\nimport { ProgressBar } from '../data/ProgressBar.js';\n\n/**\n * AgentCard — agent tile for the Agents roster.\n *\n * Per PLAN.md, agents are the orchestrator's running entities. Each card\n * shows: name, status (idle/busy/error), role, last activity, and a\n * three-row metrics strip (tasks succeeded/total, success rate, lastSeen).\n *\n * v9.4.0 S45 — replaced the dead single-point sparkline (line 140\n * guarded `tpmHistory.length > 1`, never true) with a data-driven\n * metric strip that always renders when the fields are supplied.\n */\n\nexport type AgentStatus = 'idle' | 'busy' | 'error' | 'paused';\n\nexport interface AgentCardProps {\n id: string;\n name: string;\n role: string;\n status: AgentStatus;\n /** Last activity label (\"2m ago\", \"Just now\"). */\n lastActivity?: string;\n /** Current task the agent is working on. */\n currentTask?: string;\n /** Number of tasks completed in the last 24h. */\n tasksToday?: number;\n /** Tasks succeeded (numerator of the ProgressBar). */\n tasksSucceeded?: number;\n /** Tasks total (denominator of the ProgressBar). */\n tasksTotal?: number;\n /** Success rate as 0..1. Tones the badge: >=0.8 success, >=0.5 warning, else danger. */\n successRate?: number;\n /** Last-seen timestamp in ms-since-epoch. Rendered as relative duration. */\n lastSeenMs?: number;\n /** Click handler — opens agent detail. */\n onOpen?: () => void;\n /** Custom badges row (model, owner). */\n badges?: ReactNode;\n className?: string;\n}\n\nconst STATUS_LABEL: Record<AgentStatus, string> = {\n idle: 'Idle',\n busy: 'Busy',\n error: 'Error',\n paused: 'Paused',\n};\n\nconst STATUS_TONE: Record<AgentStatus, 'success' | 'info' | 'danger' | 'neutral'> = {\n idle: 'neutral',\n busy: 'info',\n error: 'danger',\n paused: 'neutral',\n};\n\nconst STATUS_FG: Record<AgentStatus, string> = {\n idle: 'var(--fg-subtle)',\n busy: 'var(--info)',\n error: 'var(--danger)',\n paused: 'var(--warning)',\n};\n\n/** relativeTime — \"12s\", \"3m\", \"2h\", \"5d\". Returns \"—\" for missing / future timestamps. */\nfunction relativeTime(ms: number | undefined): string {\n if (typeof ms !== 'number' || !Number.isFinite(ms) || ms <= 0) return '—';\n const delta = Math.max(0, Date.now() - ms);\n const sec = Math.floor(delta / 1000);\n if (sec < 60) return `${sec}s ago`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ago`;\n const day = Math.floor(hr / 24);\n return `${day}d ago`;\n}\n\nfunction successTone(rate: number): 'success' | 'warning' | 'danger' {\n if (rate >= 0.8) return 'success';\n if (rate >= 0.5) return 'warning';\n return 'danger';\n}\n\nfunction lastSeenTone(ms: number | undefined): 'neutral' | 'danger' {\n if (typeof ms !== 'number' || !Number.isFinite(ms) || ms <= 0) return 'neutral';\n const days = (Date.now() - ms) / 86_400_000;\n return days > 1 ? 'danger' : 'neutral';\n}\n\nexport function AgentCard(props: AgentCardProps): JSX.Element {\n const {\n name,\n role,\n status,\n lastActivity,\n currentTask,\n tasksToday,\n tasksSucceeded,\n tasksTotal,\n successRate,\n lastSeenMs,\n onOpen,\n badges,\n className,\n } = props;\n\n const showMetrics =\n (typeof tasksSucceeded === 'number' && typeof tasksTotal === 'number') ||\n typeof successRate === 'number' ||\n typeof lastSeenMs === 'number';\n\n return (\n <button\n type=\"button\"\n onClick={onOpen}\n className={cx('v8-agent-card', `v8-agent-card--${status}`, className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--space-3)',\n width: '100%',\n padding: 'var(--space-4)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n textAlign: 'left',\n cursor: 'pointer',\n font: 'inherit',\n color: 'inherit',\n transition: 'border-color var(--motion-fast) var(--ease-out)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-3)' }}>\n <Avatar name={name} status={status === 'busy' ? 'busy' : status === 'error' ? 'busy' : status === 'idle' ? 'online' : 'away'} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 'var(--fs-14)', fontWeight: 600, color: 'var(--fg)', lineHeight: 'var(--lh-snug)' }}>\n {name}\n </div>\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', marginTop: 2 }}>\n {role}\n </div>\n </div>\n <Badge tone={STATUS_TONE[status]} dot>\n {STATUS_LABEL[status]}\n </Badge>\n </div>\n {currentTask !== undefined && (\n <div\n style={{\n fontSize: 'var(--fs-13)',\n color: 'var(--fg)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n padding: 'var(--space-2) var(--space-3)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={currentTask}\n >\n {currentTask}\n </div>\n )}\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-3)', fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {lastActivity !== undefined && (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4 }}>\n <Activity size={12} aria-hidden=\"true\" style={{ color: STATUS_FG[status] }} />\n {lastActivity}\n </span>\n )}\n {tasksToday !== undefined && (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4 }}>\n <Zap size={12} aria-hidden=\"true\" />\n {tasksToday} today\n </span>\n )}\n </div>\n {showMetrics && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--space-2)' }}>\n {typeof tasksSucceeded === 'number' && typeof tasksTotal === 'number' && tasksTotal > 0 && (\n <div data-testid=\"agent-card-tasks\" style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'space-between',\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n }}\n >\n <span style={{ textTransform: 'uppercase', letterSpacing: '0.04em' }}>tasks</span>\n <code style={{ fontFamily: 'var(--font-mono)', color: 'var(--fg)' }}>\n {tasksSucceeded} / {tasksTotal}\n </code>\n </div>\n <ProgressBar value={tasksSucceeded} max={tasksTotal} tone=\"accent\" height={4} />\n </div>\n )}\n {typeof successRate === 'number' && (\n <div\n data-testid=\"agent-card-success\"\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}\n >\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', textTransform: 'uppercase', letterSpacing: '0.04em' }}>\n success\n </span>\n <Badge data-testid=\"agent-card-success-badge\" tone={successTone(successRate)}>\n {Math.round(successRate * 100)}% success\n </Badge>\n </div>\n )}\n {typeof lastSeenMs === 'number' && (\n <div\n data-testid=\"agent-card-lastseen\"\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}\n >\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', textTransform: 'uppercase', letterSpacing: '0.04em' }}>\n last seen\n </span>\n <Badge data-testid=\"agent-card-lastseen-badge\" tone={lastSeenTone(lastSeenMs)}>{relativeTime(lastSeenMs)}</Badge>\n </div>\n )}\n </div>\n )}\n {badges !== undefined && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>{badges}</div>\n )}\n <style>{`\n .v8-agent-card:hover { border-color: var(--accent); }\n `}</style>\n </button>\n );\n}","import { useEffect, useRef, useState } from 'react';\nimport { Pause, Play, RefreshCw } from 'lucide-react';\nimport { Stack } from '../primitives/Stack.js';\nimport { Inline } from '../primitives/Inline.js';\nimport { Button } from '../controls/Button.js';\n\n/**\n * AgentLiveOutput — Sprint S17. Live SSE tail of a CC agent's session\n * JSONL. Subscribes to `/api/agent-stream/live?sessionId=...` and\n * appends events as they arrive. Pause freezes the buffer (connection\n * stays open). Clear wipes the buffer.\n */\n\ninterface StreamEvent {\n type?: string;\n role?: string;\n content?: string;\n name?: string;\n input?: unknown;\n tool?: { name?: string; input?: unknown };\n result?: unknown;\n ts?: number;\n message?: string;\n}\n\nexport interface AgentLiveOutputProps {\n sessionId: string;\n /** When true the parent wants us to stop connecting (e.g. agent was killed). */\n paused?: boolean;\n}\n\nconst MAX_EVENTS = 500;\n\nexport function AgentLiveOutput(props: AgentLiveOutputProps): JSX.Element {\n const { sessionId, paused } = props;\n const [events, setEvents] = useState<StreamEvent[]>([]);\n const [status, setStatus] = useState<'connecting' | 'live' | 'paused' | 'error' | 'closed'>('connecting');\n const [error, setError] = useState<string | null>(null);\n const [pausedLocal, setPausedLocal] = useState<boolean>(false);\n const [autoScroll, setAutoScroll] = useState<boolean>(true);\n const containerRef = useRef<HTMLDivElement>(null);\n const sourceRef = useRef<EventSource | null>(null);\n\n useEffect(() => {\n if (paused || pausedLocal) {\n if (sourceRef.current) {\n sourceRef.current.close();\n sourceRef.current = null;\n }\n setStatus('paused');\n return;\n }\n if (typeof window === 'undefined' || typeof EventSource === 'undefined') {\n setStatus('error');\n setError('EventSource not available in this environment.');\n return;\n }\n setStatus('connecting');\n setError(null);\n const url = `/api/agent-stream/live?sessionId=${encodeURIComponent(sessionId)}`;\n const src = new EventSource(url);\n sourceRef.current = src;\n\n const onSnapshot = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as { events?: StreamEvent[] };\n if (Array.isArray(data.events)) setEvents(data.events.slice(-MAX_EVENTS));\n setStatus('live');\n } catch { /* malformed */ }\n };\n const onEvent = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as StreamEvent;\n setEvents((prev) => {\n const next = prev.length >= MAX_EVENTS ? prev.slice(prev.length - MAX_EVENTS + 1) : prev.slice();\n next.push(data);\n return next;\n });\n setStatus('live');\n } catch { /* malformed */ }\n };\n const onEnd = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as { reason?: string };\n setStatus('closed');\n setError(data.reason ? `Stream ended: ${data.reason}` : null);\n } catch { /* */ }\n };\n const onErrEv = (ev: MessageEvent): void => {\n try {\n const data = JSON.parse(ev.data) as { error?: string };\n setStatus('error');\n setError(data.error || 'stream error');\n } catch { /* */ }\n };\n src.addEventListener('snapshot', onSnapshot);\n src.addEventListener('event', onEvent);\n src.addEventListener('agent:event', onEvent);\n src.addEventListener('end', onEnd);\n src.addEventListener('error', onErrEv);\n src.onerror = () => {\n setStatus('error');\n setError('Connection dropped. Click Retry to reconnect.');\n };\n return () => {\n src.close();\n sourceRef.current = null;\n };\n }, [sessionId, paused, pausedLocal]);\n\n useEffect(() => {\n if (!autoScroll || !containerRef.current) return;\n const el = containerRef.current;\n el.scrollTop = el.scrollHeight;\n }, [events, autoScroll]);\n\n const renderEvent = (ev: StreamEvent, idx: number): JSX.Element => {\n const tone =\n ev.role === 'user' ? 'user' :\n ev.role === 'assistant' ? 'assistant' :\n ev.tool?.name ? 'tool' :\n 'system';\n const label =\n ev.tool?.name ? `${ev.tool.name}` :\n ev.role ? ev.role : (ev.type || 'event');\n const text =\n typeof ev.content === 'string' ? ev.content :\n ev.tool?.input ? JSON.stringify(ev.tool.input).slice(0, 240) :\n typeof ev.message === 'string' ? ev.message :\n ev.result ? JSON.stringify(ev.result).slice(0, 240) :\n JSON.stringify(ev).slice(0, 240);\n return (\n <div\n key={idx}\n style={{\n padding: '4px 8px',\n borderRadius: 'var(--radius-sm)',\n background:\n tone === 'user' ? 'color-mix(in oklch, var(--accent) 8%, var(--surface-0))' :\n tone === 'tool' ? 'color-mix(in oklch, var(--warning) 8%, var(--surface-0))' :\n tone === 'system' ? 'var(--surface-1)' :\n 'var(--surface-0)',\n fontFamily: 'var(--font-mono)',\n fontSize: 'var(--fs-12)',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n <span style={{ color: 'var(--fg-muted)' }}>{label}: </span>\n <span style={{ color: 'var(--fg)' }}>{text}</span>\n </div>\n );\n };\n\n return (\n <Stack gap={2}>\n <Inline align=\"center\" justify=\"between\">\n <Inline align=\"center\" gap={2}>\n <span\n aria-hidden\n style={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n background:\n status === 'live' ? 'var(--success)' :\n status === 'connecting' ? 'var(--warning)' :\n status === 'paused' ? 'var(--fg-muted)' :\n status === 'closed' ? 'var(--fg-muted)' :\n 'var(--danger)',\n }}\n />\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {status === 'live' ? 'Live' :\n status === 'connecting' ? 'Connecting…' :\n status === 'paused' ? 'Paused' :\n status === 'closed' ? 'Closed' :\n 'Error'}\n {' · '}{events.length} events\n </span>\n </Inline>\n <Inline align=\"center\" gap={1}>\n <Button\n variant=\"ghost\"\n onClick={() => setPausedLocal((p) => !p)}\n title={pausedLocal ? 'Resume stream' : 'Pause stream'}\n aria-label={pausedLocal ? 'Resume stream' : 'Pause stream'}\n >\n {pausedLocal ? <Play size={12} aria-hidden /> : <Pause size={12} aria-hidden />}\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => setEvents([])}\n title=\"Clear buffer\"\n aria-label=\"Clear output\"\n >\n Clear\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => {\n setEvents([]);\n setPausedLocal(false);\n }}\n title=\"Reconnect\"\n aria-label=\"Reconnect stream\"\n >\n <RefreshCw size={12} aria-hidden /> Retry\n </Button>\n <label style={{ display: 'flex', alignItems: 'center', gap: 4, fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', cursor: 'pointer' }}>\n <input type=\"checkbox\" checked={autoScroll} onChange={(e) => setAutoScroll(e.target.checked)} />\n follow\n </label>\n </Inline>\n </Inline>\n {error !== null && (\n <div role=\"alert\" style={{ fontSize: 'var(--fs-12)', color: 'var(--danger)' }}>{error}</div>\n )}\n <div\n ref={containerRef}\n onScroll={(e) => {\n const el = e.currentTarget;\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 20;\n setAutoScroll(atBottom);\n }}\n style={{\n maxHeight: 280,\n minHeight: 120,\n overflowY: 'auto',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n padding: 'var(--space-2)',\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n background: 'var(--surface-1)',\n }}\n role=\"log\"\n aria-live=\"polite\"\n aria-label=\"Agent live output\"\n >\n {events.length === 0 ? (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {status === 'connecting' ? 'Connecting to agent stream…' : 'No events yet.'}\n </span>\n ) : (\n events.map(renderEvent)\n )}\n </div>\n </Stack>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport { Send, RotateCw, Octagon, ClipboardCopy, Activity as ActivityIcon } from 'lucide-react';\nimport { Avatar } from '../data/Avatar.js';\nimport { Badge } from '../data/Badge.js';\nimport { Button } from '../controls/Button.js';\nimport { Sheet, SheetContent } from '../feedback/Sheet.js';\nimport { Stack } from '../primitives/Stack.js';\nimport { Inline } from '../primitives/Inline.js';\nimport { Textarea } from '../controls/Textarea.js';\nimport { Skeleton } from '../feedback/Skeleton.js';\nimport { Card, CardBody } from '../data/Card.js';\nimport { AgentStreamPanel } from './AgentStreamPanel.js';\nimport { AgentLiveOutput } from './AgentLiveOutput.js';\nimport { fetchJson } from '../../data/fetcher.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport type { Task } from '../../data/types.js';\n\n/**\n * AgentDetail — Sprint S11. Right-side Drawer with live agent\n * detail and the control plane (Send prompt / Restart / Kill).\n *\n * Two flavors per `source`:\n * - `bizar:<name>` — hits `/api/agents/:name/invoke` and `/restart`.\n * - `cc:<sessionId>` — hits `/api/cc-agents/:id/send` and `/kill`.\n */\n\nexport type AgentSource = 'bizar' | 'claude-code';\n\nexport interface AgentDetailProps {\n /** Composite id from AgentsView (`bizar:<name>` or `cc:<sessionId>`). */\n agentId: string;\n name: string;\n role: string;\n status: 'idle' | 'busy' | 'error' | 'paused';\n currentTask?: string;\n startedAt?: number;\n messageCount?: number;\n lastMessageSnippet?: string;\n successRate?: number;\n tasksTotal?: number;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nfunction parseId(agentId: string): { source: AgentSource; key: string } {\n if (agentId.startsWith('bizar:')) return { source: 'bizar', key: agentId.slice('bizar:'.length) };\n if (agentId.startsWith('cc:')) return { source: 'claude-code', key: agentId.slice('cc:'.length) };\n return { source: 'bizar', key: agentId };\n}\n\nexport function AgentDetail(props: AgentDetailProps): JSX.Element {\n const {\n agentId, name, role, status, currentTask, open, onOpenChange,\n startedAt, messageCount, lastMessageSnippet, successRate, tasksTotal,\n } = props;\n const { source, key } = parseId(agentId);\n const [prompt, setPrompt] = useState<string>('');\n const [busy, setBusy] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [lastProcessId, setLastProcessId] = useState<string | null>(null);\n\n // v9.5.0 S49 — agent↔task drilldown. `useFetch` is gated on `open` so\n // we don't burn a request every time the Sheet is mounted-hidden. We\n // client-filter for the current agent's name across both `workedBy`\n // (Bizar task-store) and `metadata.agent` (task-store progress events).\n const tasksQuery = useFetch<{ tasks?: Task[] }>(open ? '/api/tasks' : null);\n const myTasks = useMemo<Task[]>(() => {\n if (!open) return [];\n const all = tasksQuery.data?.tasks ?? [];\n return all.filter((t) => {\n const md = (t.metadata ?? {}) as { agent?: unknown };\n return (\n (typeof (t as unknown as { workedBy?: unknown }).workedBy === 'string'\n && (t as unknown as { workedBy: string }).workedBy === key)\n || md.agent === key\n );\n });\n }, [open, tasksQuery.data, key]);\n\n useEffect(() => {\n if (open) { setPrompt(''); setMessage(null); setError(null); setLastProcessId(null); }\n }, [open, agentId]);\n\n const runAction = async (\n label: string,\n method: 'POST',\n endpoint: string,\n body?: Record<string, unknown>,\n ): Promise<void> => {\n setBusy(label);\n setMessage(null);\n setError(null);\n try {\n const res = await fetchJson<{ ok?: boolean; sessionId?: string; processId?: string; error?: string }>(\n endpoint,\n { method, body },\n );\n if (res.ok) {\n const sessionExtra = res.sessionId ? ` (session ${res.sessionId.slice(0, 8)})` : '';\n if (res.processId) setLastProcessId(res.processId);\n setMessage(`${label} succeeded${sessionExtra}`);\n } else {\n setError(res.error || `${label} failed`);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n };\n\n const sendPrompt = async (): Promise<void> => {\n if (!prompt.trim()) return;\n const trimmed = prompt.trim();\n setPrompt('');\n if (source === 'claude-code') {\n await runAction('Send prompt', 'POST', `/api/cc-agents/${encodeURIComponent(key)}/send`, { prompt: trimmed });\n } else {\n await runAction('Invoke agent', 'POST', `/api/agents/${encodeURIComponent(key)}/invoke`, { prompt: trimmed });\n }\n };\n\n const restart = async (): Promise<void> => {\n const ok = typeof window !== 'undefined' && typeof window.confirm === 'function'\n ? window.confirm(`Restart ${name}? The current session will be killed and a fresh one spawned.`)\n : true;\n if (!ok) return;\n if (source === 'claude-code') {\n // v9.0.5 — server now does kill+spawn in one shot, using the current\n // prompt as the new session's seed (fallback to \"continue\").\n const seed = prompt.trim() || 'continue from the last checkpoint';\n await runAction('Restart', 'POST', `/api/cc-agents/${encodeURIComponent(key)}/restart`, { prompt: seed });\n return;\n }\n await runAction('Restart', 'POST', `/api/agents/${encodeURIComponent(key)}/restart`);\n };\n\n const kill = async (): Promise<void> => {\n if (source === 'claude-code') {\n await runAction('Kill', 'POST', `/api/cc-agents/${encodeURIComponent(key)}/kill`);\n return;\n }\n // Confirm before destroying — DELETE is irreversible.\n const ok = typeof window !== 'undefined' && typeof window.confirm === 'function'\n ? window.confirm(`Delete Bizar agent \"${key}\"? This is irreversible.`)\n : true;\n if (!ok) return;\n setBusy('Kill');\n setMessage(null);\n setError(null);\n try {\n await fetchJson<{ ok?: boolean; error?: string }>(\n `/api/agents/${encodeURIComponent(key)}`,\n { method: 'DELETE' },\n );\n setMessage(`Killed ${name}`);\n // Server broadcasts agents:change; close the drawer so the user\n // sees the agent disappear from the grid.\n onOpenChange(false);\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n };\n\n const copyId = async (): Promise<void> => {\n try {\n await navigator.clipboard.writeText(key);\n setMessage(`Copied \"${key}\"`);\n } catch {\n setError('Clipboard unavailable');\n }\n };\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent side=\"right\" title={name}>\n <Stack gap={4} style={{ padding: 'var(--space-4)' }}>\n <Inline gap={3} align=\"center\">\n <Avatar name={name} status={status === 'busy' ? 'busy' : status === 'error' ? 'busy' : 'online'} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)' }}>{role}</div>\n <Inline gap={2} style={{ marginTop: 4 }} wrap>\n <Badge tone={status === 'busy' ? 'info' : status === 'error' ? 'danger' : 'neutral'} dot>\n {status}\n </Badge>\n <Badge tone=\"accent\">{source === 'bizar' ? 'Bizar agent' : 'Claude Code'}</Badge>\n {startedAt !== undefined && (\n <Badge tone=\"neutral\" title={new Date(startedAt).toLocaleString()}>\n up {formatDuration(Date.now() - startedAt)}\n </Badge>\n )}\n {typeof messageCount === 'number' && (\n <Badge tone=\"neutral\">{messageCount} msg</Badge>\n )}\n {typeof tasksTotal === 'number' && (\n <Badge tone=\"neutral\">{tasksTotal} tasks</Badge>\n )}\n {typeof successRate === 'number' && (\n <Badge tone={successRate >= 0.8 ? 'success' : successRate >= 0.5 ? 'warning' : 'danger'}>\n {Math.round(successRate * 100)}% success\n </Badge>\n )}\n </Inline>\n </div>\n </Inline>\n\n {typeof lastMessageSnippet === 'string' && lastMessageSnippet.length > 0 && (\n <div\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n fontStyle: 'italic',\n }}\n title={lastMessageSnippet}\n >\n “{lastMessageSnippet.length > 240 ? `${lastMessageSnippet.slice(0, 240)}…` : lastMessageSnippet}”\n </div>\n )}\n\n {currentTask !== undefined && (\n <div\n style={{\n padding: 'var(--space-3)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-13)',\n }}\n >\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', marginBottom: 4 }}>\n <ActivityIcon size={12} aria-hidden style={{ verticalAlign: 'middle', marginRight: 4 }} />\n Current task\n </div>\n {currentTask}\n </div>\n )}\n\n <Stack gap={2}>\n <label\n htmlFor={`agent-prompt-${agentId}`}\n style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}\n >\n Send a prompt\n </label>\n <Textarea\n id={`agent-prompt-${agentId}`}\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder={source === 'claude-code' ? 'Type a follow-up for this background agent…' : 'Invoke this Bizar agent with…'}\n rows={3}\n disabled={busy !== null}\n />\n <Inline gap={2}>\n <Button\n variant=\"primary\"\n onClick={() => { void sendPrompt(); }}\n disabled={!prompt.trim() || busy !== null}\n >\n <Send size={14} aria-hidden /> {busy === 'Send prompt' || busy === 'Invoke agent' ? <Skeleton style={{ width: 60, height: 14 }} /> : 'Send'}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => { void restart(); }}\n disabled={busy !== null || source === 'claude-code'}\n title={source === 'claude-code' ? 'Use command palette to spawn a fresh agent' : undefined}\n >\n <RotateCw size={14} aria-hidden /> Restart\n </Button>\n <Button\n variant=\"danger\"\n onClick={() => { void kill(); }}\n disabled={busy !== null}\n title={source === 'claude-code' ? 'Kill the CC background session' : `Delete Bizar agent \"${key}\"`}\n >\n <Octagon size={14} aria-hidden /> Kill\n </Button>\n <Button variant=\"ghost\" onClick={() => { void copyId(); }}>\n <ClipboardCopy size={14} aria-hidden /> Copy id\n </Button>\n </Inline>\n </Stack>\n\n {message !== null && (\n <div\n role=\"status\"\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'color-mix(in oklch, var(--success) 12%, var(--surface-0))',\n border: '1px solid color-mix(in oklch, var(--success) 40%, var(--border))',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--success)',\n }}\n >\n {message}\n </div>\n )}\n {lastProcessId !== null && (\n <div\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n }}\n >\n <span style={{ textTransform: 'uppercase', letterSpacing: '0.04em' }}>PID</span>\n <code\n data-testid=\"agent-process-id\"\n style={{\n fontFamily: 'var(--font-mono)',\n color: 'var(--fg)',\n background: 'var(--surface-1)',\n padding: '2px 6px',\n borderRadius: 'var(--radius-sm)',\n }}\n >\n {lastProcessId}\n </code>\n </div>\n )}\n {error !== null && (\n <div\n role=\"alert\"\n style={{\n padding: 'var(--space-2) var(--space-3)',\n background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))',\n border: '1px solid color-mix(in oklch, var(--danger) 40%, var(--border))',\n borderRadius: 'var(--radius-md)',\n fontSize: 'var(--fs-12)',\n color: 'var(--danger)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Live stream — only meaningful for Claude Code sessions (they have\n a backing JSONL log). Bizar agents have no equivalent surface. */}\n {/* v9.5.0 S49 — agent↔task drilldown. Renders the tasks this agent\n is currently working on (filtered by workedBy / metadata.agent),\n so the user can see \"what is my orchestrator doing right now\"\n without bouncing between this Sheet and the Tasks board. */}\n <Stack gap={2}>\n <div\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n Assigned tasks ({myTasks.length})\n </div>\n {tasksQuery.loading && myTasks.length === 0 ? (\n <Skeleton style={{ height: 48 }} />\n ) : myTasks.length === 0 ? (\n <Card variant=\"outlined\">\n <CardBody>\n <span data-testid=\"agent-tasks-empty\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n No tasks assigned to this agent.\n </span>\n </CardBody>\n </Card>\n ) : (\n <Stack gap={1}>\n {myTasks.map((t) => (\n <div\n key={t.id}\n data-testid={`agent-tasks-${t.id}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n padding: 'var(--space-2) var(--space-3)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n fontSize: 'var(--fs-13)',\n }}\n >\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>{t.id}</code>\n <span style={{ flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {t.title}\n </span>\n <Badge tone={t.status === 'doing' ? 'info' : t.status === 'blocked' ? 'danger' : 'neutral'}>\n {t.status ?? 'queued'}\n </Badge>\n </div>\n ))}\n </Stack>\n )}\n </Stack>\n {source === 'claude-code' && (\n <Stack gap={2}>\n <div\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n <ActivityIcon size={12} aria-hidden style={{ verticalAlign: 'middle', marginRight: 4 }} />\n Live output\n </div>\n <AgentLiveOutput sessionId={key} paused={busy === 'Kill'} />\n </Stack>\n )}\n </Stack>\n </SheetContent>\n </Sheet>\n );\n}\n\n/** formatDuration — human-readable \"3m 12s\" / \"1h 4m\" / \"2d 5h\". */\nfunction formatDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return '—';\n const sec = Math.floor(ms / 1000);\n if (sec < 60) return `${sec}s`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ${sec % 60}s`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ${min % 60}m`;\n const day = Math.floor(hr / 24);\n return `${day}d ${hr % 24}h`;\n}","import { useCallback, useMemo, useState } from 'react';\nimport { ChevronDown, ChevronRight, GitBranch, Network } from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Card, CardBody } from '../../ui/data/Card.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { EmptyState } from '../../ui/feedback/EmptyState.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\nimport type { BizarAgent } from '../../data/types.js';\n\n/**\n * AgentHierarchy — v9.4.0 S45.\n *\n * Reads `/api/agents/hierarchy` (returns `{ roots: Array<{ name, agent,\n * children }>, all: BizarAgent[] }` from `agents-store.mjs:230-251`).\n * Renders a collapsible tree where each node is a Bizar agent. Children\n * render indented beneath their parent. Live updates via `agents:change`\n * WS event triggers refetch.\n */\n\nexport interface HierarchyNode {\n name: string;\n agent: BizarAgent | null;\n children: HierarchyNode[];\n}\n\ninterface HierarchyResponse {\n roots?: HierarchyNode[];\n all?: BizarAgent[];\n}\n\nfunction statusToTone(status: string | undefined): 'neutral' | 'info' | 'success' | 'warning' | 'danger' {\n const s = (status || '').toLowerCase();\n if (s === 'busy' || s === 'working') return 'info';\n if (s === 'idle') return 'neutral';\n if (s === 'error' || s === 'stuck') return 'danger';\n if (s === 'paused') return 'warning';\n return 'neutral';\n}\n\nfunction statusLabel(status: string | undefined): string {\n const s = (status || '').toLowerCase();\n if (s === 'working') return 'working';\n if (!s) return 'idle';\n return s;\n}\n\nfunction relativeMs(ms: number | undefined | null): string {\n if (typeof ms !== 'number' || !Number.isFinite(ms) || ms <= 0) return '—';\n const delta = Math.max(0, Date.now() - ms);\n const sec = Math.floor(delta / 1000);\n if (sec < 60) return `${sec}s ago`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ago`;\n return `${Math.floor(hr / 24)}d ago`;\n}\n\ninterface NodeRowProps {\n node: HierarchyNode;\n depth: number;\n expanded: Set<string>;\n onToggle: (name: string) => void;\n}\n\nfunction NodeRow({ node, depth, expanded, onToggle }: NodeRowProps): JSX.Element {\n const hasChildren = node.children.length > 0;\n const isOpen = expanded.has(node.name);\n const agent = node.agent;\n const tone = statusToTone(agent?.status);\n const status = statusLabel(agent?.status);\n return (\n <>\n <div\n data-testid={`agent-hierarchy-node-${node.name}`}\n style={{\n display: 'grid',\n gridTemplateColumns: 'auto 1fr auto auto',\n alignItems: 'center',\n gap: 'var(--space-3)',\n padding: 'var(--space-2) var(--space-3)',\n paddingLeft: `calc(var(--space-3) + ${depth * 24}px)`,\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n background: 'var(--surface-1)',\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n data-testid={`agent-hierarchy-toggle-${node.name}`}\n aria-label={isOpen ? 'Collapse' : 'Expand'}\n onClick={() => onToggle(node.name)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 22,\n height: 22,\n borderRadius: 'var(--radius-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-0)',\n color: 'var(--fg-muted)',\n cursor: 'pointer',\n padding: 0,\n }}\n >\n {isOpen ? <ChevronDown size={12} aria-hidden /> : <ChevronRight size={12} aria-hidden />}\n </button>\n ) : (\n <span aria-hidden style={{ width: 22, height: 22, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', color: 'var(--fg-subtle)' }}>\n <GitBranch size={12} />\n </span>\n )}\n <div style={{ minWidth: 0 }}>\n <div style={{ fontSize: 'var(--fs-13)', fontWeight: 600, color: 'var(--fg)' }}>{node.name}</div>\n {agent && (\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {agent.role || agent.category || agent.mode || 'agent'}\n {agent.parent && agent.parent !== node.name && (\n <> · parent <code style={{ fontFamily: 'var(--font-mono)' }}>{agent.parent}</code></>\n )}\n </div>\n )}\n </div>\n {typeof agent?.lastSeen === 'number' && agent.lastSeen > 0 && (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)', fontFamily: 'var(--font-mono)' }}>\n {relativeMs(agent.lastSeen)}\n </span>\n )}\n <Badge tone={tone} dot>{status}</Badge>\n </div>\n {hasChildren && isOpen && node.children.map((child) => (\n <NodeRow key={child.name} node={child} depth={depth + 1} expanded={expanded} onToggle={onToggle} />\n ))}\n </>\n );\n}\n\nexport function AgentHierarchy(): JSX.Element {\n const data = useFetch<HierarchyResponse>('/api/agents/hierarchy');\n const [expanded, setExpanded] = useState<Set<string>>(() => new Set());\n // Track which root names we auto-expanded on first load so subsequent\n // user toggles of those roots are honored.\n const [autoRoots, setAutoRoots] = useState<Set<string>>(() => new Set());\n\n const seenRoots = useMemo(() => data.data?.roots?.map((n) => n.name) ?? [], [data.data]);\n\n // On first successful load, auto-expand every root and remember the set so\n // a future toggle of a root is a real state change (no longer masked by\n // the auto-expand).\n if (autoRoots.size === 0 && seenRoots.length > 0) {\n setAutoRoots(new Set(seenRoots));\n setExpanded(new Set(seenRoots));\n }\n\n const onAgentsChange = useCallback(() => data.refetch(), [data]);\n useWsMessage('agents:change', onAgentsChange);\n\n const toggle = useCallback((name: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(name)) next.delete(name);\n else next.add(name);\n return next;\n });\n }, []);\n\n if (data.loading && !data.data) {\n return (\n <Stack gap={3}>\n <Skeleton style={{ height: 48 }} />\n <Skeleton style={{ height: 48 }} />\n <Skeleton style={{ height: 48 }} />\n </Stack>\n );\n }\n\n const roots = data.data?.roots ?? [];\n if (roots.length === 0) {\n return (\n <Card>\n <CardBody>\n <EmptyState\n icon={<Network size={32} aria-hidden />}\n title=\"No hierarchy yet\"\n description=\"Agents have no parent links in their frontmatter. Add `parent:` to an agent's .md frontmatter to nest it beneath another agent.\"\n data-testid=\"agent-hierarchy-empty\"\n />\n </CardBody>\n </Card>\n );\n }\n\n return (\n <Stack gap={2}>\n <Inline align=\"center\" justify=\"between\">\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {roots.length} root agent{roots.length === 1 ? '' : 's'} · {data.data?.all?.length ?? 0} total\n </span>\n </Inline>\n <Stack gap={2}>\n {roots.map((root) => (\n <NodeRow key={root.name} node={root} depth={0} expanded={expanded} onToggle={toggle} />\n ))}\n </Stack>\n </Stack>\n );\n}","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Grid } from '../../ui/primitives/Grid.js';\nimport { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { ListHeader } from '../../ui/data/ListHeader.js';\nimport { AgentCard, type AgentCardProps, type AgentStatus } from '../../ui/agents/AgentCard.js';\nimport { AgentDetail } from '../../ui/agents/AgentDetail.js';\nimport { Chip } from '../../ui/data/Chip.js';\nimport { Banner } from '../../ui/feedback/Banner.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { ErrorState } from '../../ui/feedback/ErrorState.js';\nimport { Sheet, SheetContent } from '../../ui/feedback/Sheet.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\nimport type { BizarAgent, CCAgent, WsMessage } from '../../data/types.js';\nimport { AlertTriangle, Bot, Cpu, Pause, Play, Plus, RotateCw } from 'lucide-react';\nimport { AgentHierarchy } from './AgentHierarchy.js';\n\nconst SOURCE_STORAGE_KEY = 'bizar.agents.sourceFilter';\nconst SOURCE_LABELS = {\n all: 'All',\n bizar: 'Bizar',\n 'claude-code': 'Claude Code',\n} as const;\ntype SourceFilter = keyof typeof SOURCE_LABELS;\nconst VALID_SOURCES = Object.keys(SOURCE_LABELS) as SourceFilter[];\n\nfunction readPersistedSource(): SourceFilter {\n if (typeof localStorage === 'undefined') return 'all';\n const v = localStorage.getItem(SOURCE_STORAGE_KEY);\n return VALID_SOURCES.includes(v as SourceFilter) ? (v as SourceFilter) : 'all';\n}\n\n/** relativeTimeMs — \"12s\", \"3m\", \"2h\", \"5d\". Returns \"—\" for missing/future timestamps. */\nfunction relativeTimeMs(ms: number): string {\n if (!Number.isFinite(ms) || ms <= 0) return '—';\n const delta = Math.max(0, Date.now() - ms);\n const sec = Math.floor(delta / 1000);\n if (sec < 60) return `${sec}s ago`;\n const min = Math.floor(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.floor(min / 60);\n if (hr < 24) return `${hr}h ago`;\n return `${Math.floor(hr / 24)}d ago`;\n}\n\n/**\n * AgentsView — Sprint S10. Unified Bizar + Claude Code agents.\n *\n * Two REST calls (Bizar agents from `/api/agents`, CC from\n * `/api/cc-agents`) merged into a single grid. A `source` filter\n * chip switches between `bizar | claude-code | all`. Live updates\n * via `agents:change` and `agent:status` WS events.\n */\n\nfunction mapBizar(a: BizarAgent): AgentCardProps {\n const raw = (a.status || 'idle').toLowerCase();\n const status: AgentStatus =\n raw === 'busy' || raw === 'working' ? 'busy' :\n raw === 'error' || raw === 'stuck' ? 'error' :\n raw === 'paused' ? 'paused' : 'idle';\n return {\n id: `bizar:${a.name}`,\n name: a.name,\n role: a.role || a.category || a.mode || 'agent',\n status,\n currentTask: a.currentTaskId ? `Task ${a.currentTaskId}` : undefined,\n lastActivity: a.lastSeen ? new Date(a.lastSeen).toLocaleTimeString() : undefined,\n tasksToday: a.tasksTotal || 0,\n // v9.4.0 — pass real metrics for the new AgentCard strip. The old\n // `tpmHistory` field was dead because AgentCard only renders the\n // sparkline when `length > 1` and we always passed a single point.\n tasksSucceeded: typeof a.tasksSucceeded === 'number' ? a.tasksSucceeded : undefined,\n tasksTotal: typeof a.tasksTotal === 'number' ? a.tasksTotal : undefined,\n successRate: typeof a.successRate === 'number' ? a.successRate : undefined,\n lastSeenMs: typeof a.lastSeen === 'number' && a.lastSeen > 0 ? a.lastSeen : undefined,\n badges: a.tags || [],\n };\n}\n\nfunction mapCC(a: CCAgent): AgentCardProps {\n const raw = (a.status || a.state || 'idle').toLowerCase();\n const status: AgentStatus =\n raw === 'busy' || raw === 'working' ? 'busy' :\n raw === 'error' ? 'error' :\n raw === 'paused' ? 'paused' : 'idle';\n return {\n id: `cc:${a.sessionId || a.id}`,\n name: a.name || a.sessionId?.slice(0, 8) || 'unknown',\n role: a.kind === 'background' ? 'CC background' : 'CC interactive',\n status,\n currentTask: a.lastMessageSnippet || undefined,\n lastActivity: a.lastMessageAt ? new Date(a.lastMessageAt).toLocaleTimeString() : (a.startedAt ? new Date(a.startedAt).toLocaleTimeString() : undefined),\n tasksToday: a.messageCount || 0,\n // CC agents don't expose successRate/tasksSucceeded — only messageCount.\n // Skip the metric strip for them; the badge + lastActivity carry the\n // signal.\n badges: [a.cwd?.split('/').slice(-2).join('/') || ''].filter(Boolean),\n };\n}\n\nexport function AgentsView(): JSX.Element {\n const bizar = useFetch<{ agents?: BizarAgent[] }>('/api/agents');\n const cc = useFetch<{ agents?: CCAgent[]; error?: string }>('/api/cc-agents');\n const stuck = useFetch<{ stuck?: BizarAgent[] }>('/api/agents/stuck');\n const [source, setSource] = useState<SourceFilter>(readPersistedSource);\n const [mode, setMode] = useState<'roster' | 'hierarchy'>('roster');\n useEffect(() => {\n if (typeof localStorage !== 'undefined') localStorage.setItem(SOURCE_STORAGE_KEY, source);\n }, [source]);\n const [bizarList, setBizarList] = useState<BizarAgent[]>([]);\n const [ccList, setCCList] = useState<CCAgent[]>([]);\n const [initialized, setInitialized] = useState(false);\n const [openId, setOpenId] = useState<string | null>(null);\n const [createDraft, setCreateDraft] = useState<{ name: string; role: string } | null>(null);\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n const [restartingNames, setRestartingNames] = useState<Set<string>>(() => new Set());\n\n const saveCreate = async (): Promise<void> => {\n if (createDraft === null || !createDraft.name.trim()) return;\n setCreating(true);\n setCreateError(null);\n try {\n await fetchJson('/api/agents', { method: 'POST', body: { name: createDraft.name.trim(), role: createDraft.role.trim() || 'agent' } });\n setCreateDraft(null);\n bizar.refetch();\n } catch (err) {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n // v9.5.0 S48 — inline Restart from the stuck banner. One-click recovery\n // without forcing the user to drill into the per-agent Sheet. The\n // server broadcasts agents:change on success so the banner refreshes.\n const restartStuck = async (name: string): Promise<void> => {\n setRestartingNames((prev) => new Set(prev).add(name));\n try {\n await fetchJson(`/api/agents/${encodeURIComponent(name)}/restart`, { method: 'POST' });\n stuck.refetch();\n bizar.refetch();\n } catch (err) {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setRestartingNames((prev) => {\n const next = new Set(prev);\n next.delete(name);\n return next;\n });\n }\n };\n\n // v10-S1 — inline Pause/Resume on the stuck banner. Pause stops\n // heartbeat drain (status='paused'); Resume re-enables\n // (status='idle' so Odin picks the agent up again on the next\n // spawn). Uses the same in-flight Set pattern as restartStuck so\n // all three actions disable each other per-row while pending.\n const [busyStuckNames, setBusyStuckNames] = useState<Set<string>>(() => new Set());\n const setStuckActionStatus = async (name: string, status: 'paused' | 'idle'): Promise<void> => {\n setBusyStuckNames((prev) => new Set(prev).add(name));\n try {\n await fetchJson(`/api/agents/${encodeURIComponent(name)}/status`, {\n method: 'POST',\n body: { status },\n });\n stuck.refetch();\n bizar.refetch();\n } catch (err) {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusyStuckNames((prev) => {\n const next = new Set(prev);\n next.delete(name);\n return next;\n });\n }\n };\n\n // v10-S1 — bulk Pause-all-stuck. Fires status='paused' for every\n // agent currently in /api/agents/stuck. Used when a wedged cluster\n // needs to be drained before restart. Per-row actions are still\n // available for selective triage.\n const [bulkBusy, setBulkBusy] = useState<boolean>(false);\n const bulkPauseStuck = async (): Promise<void> => {\n const list = stuck.data?.stuck ?? [];\n if (list.length === 0) return;\n setBulkBusy(true);\n try {\n await Promise.all(list.map((a) =>\n fetchJson(`/api/agents/${encodeURIComponent(a.name)}/status`, {\n method: 'POST',\n body: { status: 'paused' },\n }).catch((err) => {\n setCreateError(err instanceof FetchError ? err.message : (err as Error).message);\n return null;\n }),\n ));\n stuck.refetch();\n bizar.refetch();\n } finally {\n setBulkBusy(false);\n }\n };\n\n useEffect(() => {\n if (!initialized && bizar.data?.agents !== undefined && cc.data?.agents !== undefined) {\n setInitialized(true);\n setBizarList(bizar.data.agents);\n setCCList(cc.data.agents);\n }\n }, [bizar.data, cc.data, initialized]);\n\n const onAgentsChange = useCallback(() => {\n // Bust both caches; the next mount will re-fetch (cheap because\n // the dashboard views are lazy-mounted).\n bizar.refetch();\n cc.refetch();\n }, [bizar, cc]);\n useWsMessage('agents:change', onAgentsChange);\n\n const onAgentStatus = useCallback((msg: WsMessage) => {\n if (msg.type !== 'agent:status') return;\n const a = (msg as Extract<WsMessage, { type: 'agent:status' }>).agent;\n if (!a || !a.name) return;\n setBizarList((prev) => {\n const idx = prev.findIndex((x) => x.name === a.name);\n if (idx === -1) return [...prev, a];\n const copy = prev.slice();\n copy[idx] = { ...copy[idx], ...a };\n return copy;\n });\n }, []);\n useWsMessage('agent:status', onAgentStatus);\n\n const cards = useMemo(() => {\n const out: Array<AgentCardProps & { source: 'bizar' | 'claude-code' }> = [];\n if (source !== 'claude-code') {\n for (const a of bizarList) out.push({ ...mapBizar(a), source: 'bizar' });\n }\n if (source !== 'bizar') {\n for (const a of ccList) out.push({ ...mapCC(a), source: 'claude-code' });\n }\n return out;\n }, [bizarList, ccList, source]);\n\n return (\n <Stack gap={5} data-testid=\"agents-view\">\n <ViewHeader\n title=\"Agents\"\n description=\"Bizar agents (frontmatter-driven) and Claude Code background agents.\"\n actions={\n <Button variant=\"primary\" onClick={() => setCreateDraft({ name: '', role: '' })} data-testid=\"agent-create-open\">\n <Plus size={14} aria-hidden /> New agent\n </Button>\n }\n />\n <ListHeader\n title=\"Roster\"\n count={cards.length}\n description={stuck.data?.stuck && stuck.data.stuck.length > 0 ? `${stuck.data.stuck.length} stuck` : undefined}\n testid=\"agents-list-header\"\n />\n {(stuck.data?.stuck ?? []).length > 0 && (\n <Banner\n tone=\"warning\"\n data-testid=\"agents-stuck-banner\"\n action={\n <Inline gap={2}>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => { void bulkPauseStuck(); }}\n disabled={bulkBusy}\n data-testid=\"agents-stuck-bulk-pause\"\n title=\"Pause every stuck agent at once\"\n >\n <Pause size={12} aria-hidden /> {bulkBusy ? 'Pausing…' : 'Pause all'}\n </Button>\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setMode('hierarchy')}>\n View details\n </Button>\n </Inline>\n }\n >\n <Stack gap={2}>\n <Inline align=\"center\" gap={2}>\n <AlertTriangle size={14} aria-hidden style={{ color: 'var(--warning)' }} />\n <span>\n {(stuck.data?.stuck ?? []).length} agent{stuck.data && stuck.data.stuck && stuck.data.stuck.length === 1 ? '' : 's'} stuck (no heartbeat >5m)\n </span>\n </Inline>\n <Stack gap={1}>\n {(stuck.data?.stuck ?? []).map((s) => {\n const restarting = restartingNames.has(s.name);\n const paused = s.status === 'paused';\n const busy = restarting || busyStuckNames.has(s.name);\n return (\n <Inline key={s.name} align=\"center\" justify=\"between\" gap={2} data-testid={`agents-stuck-row-${s.name}`}>\n <Inline gap={2} align=\"center\">\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.name}</code>\n <Badge tone={paused ? 'warning' : 'danger'}>{paused ? 'paused' : (s.status || 'stuck')}</Badge>\n {typeof s.lastSeen === 'number' && s.lastSeen > 0 && (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n last seen {relativeTimeMs(s.lastSeen)}\n </span>\n )}\n </Inline>\n <Inline gap={1}>\n {paused ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={busy}\n onClick={() => { void setStuckActionStatus(s.name, 'idle'); }}\n data-testid={`agents-stuck-resume-${s.name}`}\n >\n <Play size={12} aria-hidden /> Resume\n </Button>\n ) : (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={busy}\n onClick={() => { void setStuckActionStatus(s.name, 'paused'); }}\n data-testid={`agents-stuck-pause-${s.name}`}\n >\n <Pause size={12} aria-hidden /> Pause\n </Button>\n )}\n <Button\n variant=\"primary\"\n size=\"sm\"\n disabled={busy}\n onClick={() => { void restartStuck(s.name); }}\n data-testid={`agents-stuck-restart-${s.name}`}\n >\n <RotateCw size={12} aria-hidden /> {restarting ? 'Restarting…' : 'Restart'}\n </Button>\n </Inline>\n </Inline>\n );\n })}\n </Stack>\n </Stack>\n </Banner>\n )}\n <Inline align=\"center\" justify=\"between\" wrap gap={2}>\n <Inline gap={2}>\n {(['all', 'bizar', 'claude-code'] as SourceFilter[]).map((id) => (\n <Chip\n key={id}\n selected={source === id}\n onClick={() => setSource(id)}\n >\n {id === 'bizar' ? <Bot size={12} aria-hidden /> : id === 'claude-code' ? <Cpu size={12} aria-hidden /> : null}{' '}\n {SOURCE_LABELS[id]}\n </Chip>\n ))}\n </Inline>\n <Inline gap={2}>\n <Chip\n data-testid=\"agents-mode-roster\"\n selected={mode === 'roster'}\n onClick={() => setMode('roster')}\n >\n Roster\n </Chip>\n <Chip\n data-testid=\"agents-mode-hierarchy\"\n selected={mode === 'hierarchy'}\n onClick={() => setMode('hierarchy')}\n >\n Hierarchy\n </Chip>\n </Inline>\n </Inline>\n {mode === 'hierarchy' ? (\n <AgentHierarchy />\n ) : cards.length === 0 && (bizar.loading || cc.loading) ? (\n <Grid cols={3}>\n <Skeleton style={{ height: 140 }} />\n <Skeleton style={{ height: 140 }} />\n <Skeleton style={{ height: 140 }} />\n </Grid>\n ) : cards.length === 0 && (bizar.error || cc.error) ? (\n <ErrorState\n block\n title=\"Couldn't load agents\"\n description=\"Both bizar and CC roster endpoints failed. Retry to refetch.\"\n error={bizar.error ?? cc.error}\n onRetry={() => { void bizar.refetch(); void cc.refetch(); }}\n testid=\"agents-error\"\n />\n ) : cards.length === 0 ? (\n <span style={{ color: 'var(--fg-muted)' }}>\n No agents yet. Run <code>/loop</code> or spawn one via the command palette.\n </span>\n ) : (\n <Grid cols={3}>\n {cards.map((c) => (\n <AgentCard key={c.id} {...c} onOpen={() => setOpenId(c.id)} />\n ))}\n </Grid>\n )}\n\n {openId !== null && (() => {\n const sel = cards.find((c) => c.id === openId);\n if (!sel) return null;\n const ccSource = sel.source === 'claude-code' ? ccList.find((a) => sel.id === `cc:${a.sessionId || a.id}`) : undefined;\n const bzSource = sel.source === 'bizar' ? bizarList.find((a) => sel.id === `bizar:${a.name}`) : undefined;\n return (\n <AgentDetail\n agentId={sel.id}\n name={sel.name}\n role={sel.role}\n status={sel.status}\n currentTask={sel.currentTask}\n startedAt={ccSource?.startedAt ?? bzSource?.lastSeen}\n messageCount={ccSource?.messageCount}\n lastMessageSnippet={ccSource?.lastMessageSnippet}\n successRate={bzSource?.successRate}\n tasksTotal={bzSource?.tasksTotal}\n open={openId !== null}\n onOpenChange={(o) => { if (!o) setOpenId(null); }}\n />\n );\n })()}\n\n {/* v9.2.0 — create-agent Sheet. Closes the audit-flagged \"no way\n to add a new agent\" HIGH gap. */}\n <Sheet open={createDraft !== null} onOpenChange={(o) => { if (!o) setCreateDraft(null); }}>\n <SheetContent side=\"right\" title=\"New agent\">\n {createDraft !== null && (\n <Stack gap={4} style={{ padding: 'var(--space-4)' }}>\n <Stack gap={2}>\n <label htmlFor=\"agent-create-name\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Name</label>\n <Input\n id=\"agent-create-name\"\n value={createDraft.name}\n onChange={(e) => setCreateDraft({ ...createDraft, name: e.target.value })}\n placeholder=\"e.g. frigg\"\n disabled={creating}\n data-testid=\"agent-create-name\"\n />\n </Stack>\n <Stack gap={2}>\n <label htmlFor=\"agent-create-role\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Role (optional)</label>\n <Input\n id=\"agent-create-role\"\n value={createDraft.role}\n onChange={(e) => setCreateDraft({ ...createDraft, role: e.target.value })}\n placeholder=\"e.g. code-review\"\n disabled={creating}\n data-testid=\"agent-create-role\"\n />\n </Stack>\n {createError !== null && <span role=\"alert\" style={{ color: 'var(--danger)', fontSize: 'var(--fs-12)' }}>{createError}</span>}\n <Inline gap={2}>\n <Button variant=\"primary\" onClick={() => { void saveCreate(); }} disabled={creating || !createDraft.name.trim()} data-testid=\"agent-create-submit\">\n Create agent\n </Button>\n <Button variant=\"ghost\" onClick={() => setCreateDraft(null)} disabled={creating}>\n Cancel\n </Button>\n </Inline>\n </Stack>\n )}\n </SheetContent>\n </Sheet>\n </Stack>\n );\n}"],"names":["ClipboardCopy","createLucideIcon","Octagon","STATUS_LABEL","STATUS_TONE","STATUS_FG","relativeTime","ms","delta","sec","min","hr","successTone","rate","lastSeenTone","AgentCard","props","name","role","status","lastActivity","currentTask","tasksToday","tasksSucceeded","tasksTotal","successRate","lastSeenMs","onOpen","badges","className","showMetrics","jsxs","cx","jsx","Avatar","Badge","Activity","Zap","ProgressBar","MAX_EVENTS","AgentLiveOutput","sessionId","paused","events","setEvents","useState","setStatus","error","setError","pausedLocal","setPausedLocal","autoScroll","setAutoScroll","containerRef","useRef","sourceRef","useEffect","url","src","onSnapshot","ev","data","onEvent","prev","next","onEnd","onErrEv","el","renderEvent","idx","tone","_a","label","_b","text","_c","Stack","Inline","Button","p","Play","Pause","RefreshCw","e","atBottom","parseId","agentId","AgentDetail","open","onOpenChange","startedAt","messageCount","lastMessageSnippet","source","key","prompt","setPrompt","busy","setBusy","message","setMessage","lastProcessId","setLastProcessId","tasksQuery","useFetch","myTasks","useMemo","t","md","runAction","method","endpoint","body","res","fetchJson","sessionExtra","err","sendPrompt","trimmed","restart","seed","kill","copyId","Sheet","SheetContent","formatDuration","ActivityIcon","Textarea","Send","Skeleton","RotateCw","Card","CardBody","statusToTone","s","statusLabel","relativeMs","NodeRow","node","depth","expanded","onToggle","hasChildren","isOpen","agent","Fragment","ChevronDown","ChevronRight","GitBranch","child","AgentHierarchy","setExpanded","autoRoots","setAutoRoots","seenRoots","n","onAgentsChange","useCallback","useWsMessage","toggle","roots","EmptyState","Network","root","SOURCE_STORAGE_KEY","SOURCE_LABELS","VALID_SOURCES","readPersistedSource","v","relativeTimeMs","mapBizar","a","raw","mapCC","AgentsView","bizar","cc","stuck","setSource","mode","setMode","bizarList","setBizarList","ccList","setCCList","initialized","setInitialized","openId","setOpenId","createDraft","setCreateDraft","creating","setCreating","createError","setCreateError","restartingNames","setRestartingNames","saveCreate","FetchError","restartStuck","busyStuckNames","setBusyStuckNames","setStuckActionStatus","bulkBusy","setBulkBusy","bulkPauseStuck","list","onAgentStatus","msg","x","copy","cards","out","ViewHeader","Plus","ListHeader","Banner","AlertTriangle","_d","restarting","id","Chip","Bot","Cpu","Grid","ErrorState","c","sel","ccSource","bzSource","o","Input"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as v,R as x,j as e}from"./cmdk-DVxytz9i.js";import{c as g,g as m}from"./main-
|
|
1
|
+
import{r as v,R as x,j as e}from"./cmdk-DVxytz9i.js";import{c as g,g as m}from"./main-CyAIirBB.js";import{C as u}from"./circle-alert-CQ9MLygI.js";import{T as h}from"./triangle-alert-DFmQ_RXN.js";import{C as p}from"./circle-check-COtVgsWw.js";/**
|
|
2
2
|
* @license lucide-react v0.460.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert-
|
|
1
|
+
{"version":3,"file":"Alert-Dg_Vwxh5.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/info.js","../../src/web/v8/ui/feedback/Alert.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Info = createLucideIcon(\"Info\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n]);\n\nexport { Info as default };\n//# sourceMappingURL=info.js.map\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport React from 'react';\nimport { AlertCircle, AlertTriangle, CheckCircle2, Info } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Alert — inline contextual message.\n *\n * Tones: info | success | warning | danger.\n *\n * Use cases: empty states, inline help text, error banners inside forms.\n * For status pulses (topbar live indicator) use a small dot, not an Alert.\n */\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger';\n\nconst ICON = {\n info: Info,\n success: CheckCircle2,\n warning: AlertTriangle,\n danger: AlertCircle,\n} as const;\n\nconst TONE_BG = {\n info: 'color-mix(in oklch, var(--info) 12%, var(--surface-1))',\n success: 'color-mix(in oklch, var(--success) 12%, var(--surface-1))',\n warning: 'color-mix(in oklch, var(--warning) 12%, var(--surface-1))',\n danger: 'color-mix(in oklch, var(--danger) 12%, var(--surface-1))',\n} as const;\n\nconst TONE_FG = {\n info: 'var(--info)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n danger: 'var(--danger)',\n} as const;\n\nconst TONE_BORDER = {\n info: 'color-mix(in oklch, var(--info) 30%, var(--border))',\n success: 'color-mix(in oklch, var(--success) 30%, var(--border))',\n warning: 'color-mix(in oklch, var(--warning) 30%, var(--border))',\n danger: 'color-mix(in oklch, var(--danger) 30%, var(--border))',\n} as const;\n\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> {\n tone?: AlertTone;\n title?: ReactNode;\n children?: ReactNode;\n /** Optional right-aligned action (button). */\n action?: ReactNode;\n /** Override the leading icon. Pass `false` to hide. */\n icon?: ReactNode | false;\n}\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(props, ref) {\n const { tone = 'info', title, children, action, icon, className, ...rest } = props;\n const showIcon = icon !== false;\n const IconNode = icon === false ? null : (icon ?? React.createElement(ICON[tone], { size: 16, 'aria-hidden': true }));\n return (\n <div\n ref={ref}\n role={tone === 'danger' || tone === 'warning' ? 'alert' : 'status'}\n className={cx('v8-alert', `v8-alert--${tone}`, className)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 'var(--space-3)',\n padding: 'var(--space-3) var(--space-4)',\n background: TONE_BG[tone],\n border: '1px solid',\n borderColor: TONE_BORDER[tone],\n borderRadius: 'var(--radius)',\n color: 'var(--fg)',\n }}\n {...rest}\n >\n {showIcon && IconNode !== null && (\n <span style={{ color: TONE_FG[tone], flexShrink: 0, marginTop: 1, display: 'inline-flex' }}>\n {IconNode}\n </span>\n )}\n <div style={{ flex: 1, minWidth: 0, display: 'flex', flexDirection: 'column', gap: 'var(--space-1)' }}>\n {title !== undefined && (\n <div style={{ fontSize: 'var(--fs-13)', fontWeight: 600 }}>{title}</div>\n )}\n {children !== undefined && (\n <div style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)' }}>{children}</div>\n )}\n </div>\n {action !== undefined && (\n <div style={{ flexShrink: 0, display: 'flex', alignItems: 'center' }}>{action}</div>\n )}\n </div>\n );\n});"],"names":["Info","createLucideIcon","ICON","CheckCircle2","AlertTriangle","AlertCircle","TONE_BG","TONE_FG","TONE_BORDER","Alert","forwardRef","props","ref","tone","title","children","action","icon","className","rest","showIcon","IconNode","React","jsxs","cx","jsx"],"mappings":"kPAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAOC,EAAiB,OAAQ,CACpC,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,CAC5C,CAAC,ECGKC,EAAO,CACX,KAAMF,EACN,QAASG,EACT,QAASC,EACT,OAAQC,CACV,EAEMC,EAAU,CACd,KAAM,yDACN,QAAS,4DACT,QAAS,4DACT,OAAQ,0DACV,EAEMC,EAAU,CACd,KAAM,cACN,QAAS,iBACT,QAAS,iBACT,OAAQ,eACV,EAEMC,EAAc,CAClB,KAAM,sDACN,QAAS,yDACT,QAAS,yDACT,OAAQ,uDACV,EAYaC,EAAQC,EAAAA,WAAuC,SAAeC,EAAOC,EAAK,CACrF,KAAM,CAAE,KAAAC,EAAO,OAAQ,MAAAC,EAAO,SAAAC,EAAU,OAAAC,EAAQ,KAAAC,EAAM,UAAAC,EAAW,GAAGC,CAAA,EAASR,EACvES,EAAWH,IAAS,GACpBI,EAAWJ,IAAS,GAAQ,KAAQA,GAAQK,EAAM,cAAcpB,EAAKW,CAAI,EAAG,CAAE,KAAM,GAAI,cAAe,GAAM,EACnH,OACEU,EAAAA,KAAC,MAAA,CACC,IAAAX,EACA,KAAMC,IAAS,UAAYA,IAAS,UAAY,QAAU,SAC1D,UAAWW,EAAG,WAAY,aAAaX,CAAI,GAAIK,CAAS,EACxD,MAAO,CACL,QAAS,OACT,WAAY,aACZ,IAAK,iBACL,QAAS,gCACT,WAAYZ,EAAQO,CAAI,EACxB,OAAQ,YACR,YAAaL,EAAYK,CAAI,EAC7B,aAAc,gBACd,MAAO,WAAA,EAER,GAAGM,EAEH,SAAA,CAAAC,GAAYC,IAAa,MACxBI,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,MAAOlB,EAAQM,CAAI,EAAG,WAAY,EAAG,UAAW,EAAG,QAAS,aAAA,EACxE,SAAAQ,EACH,EAEFE,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,KAAM,EAAG,SAAU,EAAG,QAAS,OAAQ,cAAe,SAAU,IAAK,kBAChF,SAAA,CAAAT,IAAU,QACTW,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,WAAY,GAAA,EAAQ,SAAAX,CAAA,CAAM,EAEnEC,IAAa,QACZU,MAAC,MAAA,CAAI,MAAO,CAAE,SAAU,eAAgB,MAAO,iBAAA,EAAsB,SAAAV,CAAA,CAAS,CAAA,EAElF,EACCC,IAAW,QACVS,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,WAAY,EAAG,QAAS,OAAQ,WAAY,QAAA,EAAa,SAAAT,CAAA,CAAO,CAAA,CAAA,CAAA,CAItF,CAAC","x_google_ignoreList":[0]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as l,j as e}from"./cmdk-DVxytz9i.js";import{c as F,I as f,G as H,S as m,d as x,u as w,h as k,L as O,i as z,F as M}from"./main-
|
|
1
|
+
import{r as l,j as e}from"./cmdk-DVxytz9i.js";import{c as F,I as f,G as H,S as m,d as x,u as w,h as k,L as O,i as z,F as M}from"./main-CyAIirBB.js";import{V as P}from"./ViewHeader-V_SzbUpw.js";import{C as $,b as D}from"./Card-D9019JOD.js";import{I as C}from"./Input-BSa3lh_-.js";import{T as R}from"./Textarea-D_TPpVMy.js";import{S as E,a as A}from"./Sheet-Cztsvgse.js";import{E as V}from"./EmptyState-DLmtBX_6.js";import{T as X}from"./triangle-alert-DFmQ_RXN.js";import{E as L}from"./external-link-CAOnh_DH.js";import{R as I}from"./refresh-ccw-BCXx86xp.js";import{P as K}from"./plus-fFxt-8z5.js";import{T as N}from"./trash-2-2NsyTU8c.js";/**
|
|
2
2
|
* @license lucide-react v0.460.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|