@polderlabs/bizar 10.1.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 -10
- package/bizar-dash/CONTROL_SURFACES.md +0 -1
- package/bizar-dash/dist/assets/{ActivityFeed-Da-JCrE6.js → ActivityFeed-xXiUCZLB.js} +1 -1
- package/bizar-dash/dist/assets/{ActivityFeed-Da-JCrE6.js.map → ActivityFeed-xXiUCZLB.js.map} +1 -1
- package/bizar-dash/dist/assets/{ActivityView-nIRsSETb.js → ActivityView-nOYhCp3h.js} +1 -1
- package/bizar-dash/dist/assets/{ActivityView-nIRsSETb.js.map → ActivityView-nOYhCp3h.js.map} +1 -1
- package/bizar-dash/dist/assets/{AdminView-DP1NMxmG.js → AdminView-Coi4V3sq.js} +1 -1
- package/bizar-dash/dist/assets/{AdminView-DP1NMxmG.js.map → AdminView-Coi4V3sq.js.map} +1 -1
- package/bizar-dash/dist/assets/{AgentActivity-lSPkOr-O.js → AgentActivity-nEri4lbx.js} +1 -1
- package/bizar-dash/dist/assets/{AgentActivity-lSPkOr-O.js.map → AgentActivity-nEri4lbx.js.map} +1 -1
- package/bizar-dash/dist/assets/{AgentsView-BIWGkz7w.js → AgentsView-ByiIJ0ej.js} +3 -3
- package/bizar-dash/dist/assets/{AgentsView-BIWGkz7w.js.map → AgentsView-ByiIJ0ej.js.map} +1 -1
- package/bizar-dash/dist/assets/{Alert-DN0UysMg.js → Alert-Dg_Vwxh5.js} +1 -1
- package/bizar-dash/dist/assets/{Alert-DN0UysMg.js.map → Alert-Dg_Vwxh5.js.map} +1 -1
- package/bizar-dash/dist/assets/ArtifactsView-CGclRNnz.js +21 -0
- package/bizar-dash/dist/assets/ArtifactsView-CGclRNnz.js.map +1 -0
- package/bizar-dash/dist/assets/{AuthView-DW5cs7ma.js → AuthView-utVm6M3D.js} +1 -1
- package/bizar-dash/dist/assets/{AuthView-DW5cs7ma.js.map → AuthView-utVm6M3D.js.map} +1 -1
- package/bizar-dash/dist/assets/{Avatar-DZPv9pvd.js → Avatar-CXDZdKy4.js} +1 -1
- package/bizar-dash/dist/assets/{Avatar-DZPv9pvd.js.map → Avatar-CXDZdKy4.js.map} +1 -1
- package/bizar-dash/dist/assets/{BackgroundJobsView-D8O-EyMD.js → BackgroundJobsView-j603pz6o.js} +1 -1
- package/bizar-dash/dist/assets/{BackgroundJobsView-D8O-EyMD.js.map → BackgroundJobsView-j603pz6o.js.map} +1 -1
- package/bizar-dash/dist/assets/{BackupView-uwXkhxOV.js → BackupView-DgvnntTE.js} +1 -1
- package/bizar-dash/dist/assets/{BackupView-uwXkhxOV.js.map → BackupView-DgvnntTE.js.map} +1 -1
- package/bizar-dash/dist/assets/{Card-Tyboihu7.js → Card-D9019JOD.js} +1 -1
- package/bizar-dash/dist/assets/{Card-Tyboihu7.js.map → Card-D9019JOD.js.map} +1 -1
- package/bizar-dash/dist/assets/{ChatView-DRBHzgay.js → ChatView-C0cTgj5d.js} +1 -1
- package/bizar-dash/dist/assets/{ChatView-DRBHzgay.js.map → ChatView-C0cTgj5d.js.map} +1 -1
- package/bizar-dash/dist/assets/{Chip-BrXIlR9w.js → Chip-DQtalZ4y.js} +1 -1
- package/bizar-dash/dist/assets/{Chip-BrXIlR9w.js.map → Chip-DQtalZ4y.js.map} +1 -1
- package/bizar-dash/dist/assets/{ClaudeSessionsView-Ck62jaOr.js → ClaudeSessionsView-H3Bqjo6b.js} +1 -1
- package/bizar-dash/dist/assets/{ClaudeSessionsView-Ck62jaOr.js.map → ClaudeSessionsView-H3Bqjo6b.js.map} +1 -1
- package/bizar-dash/dist/assets/{ClipboardView-DfND6xL6.js → ClipboardView-BAguaKbx.js} +1 -1
- package/bizar-dash/dist/assets/{ClipboardView-DfND6xL6.js.map → ClipboardView-BAguaKbx.js.map} +1 -1
- package/bizar-dash/dist/assets/{ConfigView-DjJmSrOJ.js → ConfigView-DWHJgoe8.js} +1 -1
- package/bizar-dash/dist/assets/{ConfigView-DjJmSrOJ.js.map → ConfigView-DWHJgoe8.js.map} +1 -1
- package/bizar-dash/dist/assets/{DiagnosticsView-CKgItf0J.js → DiagnosticsView-oCT624hk.js} +1 -1
- package/bizar-dash/dist/assets/{DiagnosticsView-CKgItf0J.js.map → DiagnosticsView-oCT624hk.js.map} +1 -1
- package/bizar-dash/dist/assets/{DialogsView-DHYF8dE1.js → DialogsView-CqHNals_.js} +1 -1
- package/bizar-dash/dist/assets/{DialogsView-DHYF8dE1.js.map → DialogsView-CqHNals_.js.map} +1 -1
- package/bizar-dash/dist/assets/{DoctorView-DDLHrSKk.js → DoctorView-6kfQq_Mx.js} +1 -1
- package/bizar-dash/dist/assets/{DoctorView-DDLHrSKk.js.map → DoctorView-6kfQq_Mx.js.map} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-DZ2ouKwd.js → EmptyState-DLmtBX_6.js} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-DZ2ouKwd.js.map → EmptyState-DLmtBX_6.js.map} +1 -1
- package/bizar-dash/dist/assets/{EnvVarsView-D1cx83mB.js → EnvVarsView-DySOXlP1.js} +2 -2
- package/bizar-dash/dist/assets/{EnvVarsView-D1cx83mB.js.map → EnvVarsView-DySOXlP1.js.map} +1 -1
- package/bizar-dash/dist/assets/{ErrorState-DwwJ2-Jq.js → ErrorState-Bump8diE.js} +1 -1
- package/bizar-dash/dist/assets/{ErrorState-DwwJ2-Jq.js.map → ErrorState-Bump8diE.js.map} +1 -1
- package/bizar-dash/dist/assets/{EvalView-C9aYixXW.js → EvalView-FnZ5d93z.js} +1 -1
- package/bizar-dash/dist/assets/{EvalView-C9aYixXW.js.map → EvalView-FnZ5d93z.js.map} +1 -1
- package/bizar-dash/dist/assets/{GoalsView-DZa_mGmh.js → GoalsView-C4m1WnVv.js} +1 -1
- package/bizar-dash/dist/assets/{GoalsView-DZa_mGmh.js.map → GoalsView-C4m1WnVv.js.map} +1 -1
- package/bizar-dash/dist/assets/{Grid-CiRyhAgR.js → Grid-dEnoGGws.js} +1 -1
- package/bizar-dash/dist/assets/{Grid-CiRyhAgR.js.map → Grid-dEnoGGws.js.map} +1 -1
- package/bizar-dash/dist/assets/{HistoryView-Dv7aPxJE.js → HistoryView-xdRybjZ2.js} +1 -1
- package/bizar-dash/dist/assets/{HistoryView-Dv7aPxJE.js.map → HistoryView-xdRybjZ2.js.map} +1 -1
- package/bizar-dash/dist/assets/{Input-BbFUDQnS.js → Input-BSa3lh_-.js} +1 -1
- package/bizar-dash/dist/assets/{Input-BbFUDQnS.js.map → Input-BSa3lh_-.js.map} +1 -1
- package/bizar-dash/dist/assets/{LibrariesView-DBQ83TNa.js → LibrariesView-1zR04Eci.js} +1 -1
- package/bizar-dash/dist/assets/{LibrariesView-DBQ83TNa.js.map → LibrariesView-1zR04Eci.js.map} +1 -1
- package/bizar-dash/dist/assets/{LightRAGView-JYpE5u9p.js → LightRAGView-PubmA9oL.js} +1 -1
- package/bizar-dash/dist/assets/{LightRAGView-JYpE5u9p.js.map → LightRAGView-PubmA9oL.js.map} +1 -1
- package/bizar-dash/dist/assets/{ListHeader-BGjm11Z0.js → ListHeader-Ak9WJd39.js} +1 -1
- package/bizar-dash/dist/assets/{ListHeader-BGjm11Z0.js.map → ListHeader-Ak9WJd39.js.map} +1 -1
- package/bizar-dash/dist/assets/{MemoryView-CnOP2MvM.js → MemoryView-DBGpuETw.js} +1 -1
- package/bizar-dash/dist/assets/{MemoryView-CnOP2MvM.js.map → MemoryView-DBGpuETw.js.map} +1 -1
- package/bizar-dash/dist/assets/MiscView-DufqBHkX.js +1 -0
- package/bizar-dash/dist/assets/{MiscView-BBcpUbZZ.js.map → MiscView-DufqBHkX.js.map} +1 -1
- package/bizar-dash/dist/assets/{ModsView-CU4cAmIz.js → ModsView-DcX6eVU2.js} +2 -2
- package/bizar-dash/dist/assets/{ModsView-CU4cAmIz.js.map → ModsView-DcX6eVU2.js.map} +1 -1
- package/bizar-dash/dist/assets/{NotificationsView-BYffvthq.js → NotificationsView-B8IhHRQC.js} +1 -1
- package/bizar-dash/dist/assets/{NotificationsView-BYffvthq.js.map → NotificationsView-B8IhHRQC.js.map} +1 -1
- package/bizar-dash/dist/assets/ObsidianView-DEuk65zS.js +1 -0
- package/bizar-dash/dist/assets/{ObsidianView-D3bI0row.js.map → ObsidianView-DEuk65zS.js.map} +1 -1
- package/bizar-dash/dist/assets/{OverviewView-0tq8f-Y0.js → OverviewView-CTI2spTd.js} +1 -1
- package/bizar-dash/dist/assets/{OverviewView-0tq8f-Y0.js.map → OverviewView-CTI2spTd.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProgressBar-B-h60LKA.js → ProgressBar-D3lkz42E.js} +1 -1
- package/bizar-dash/dist/assets/{ProgressBar-B-h60LKA.js.map → ProgressBar-D3lkz42E.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProjectsView-DhX5lzHS.js → ProjectsView-Du0LzE7A.js} +1 -1
- package/bizar-dash/dist/assets/{ProjectsView-DhX5lzHS.js.map → ProjectsView-Du0LzE7A.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProvidersView-CJMX7jm9.js → ProvidersView-5bCgXwBo.js} +1 -1
- package/bizar-dash/dist/assets/{ProvidersView-CJMX7jm9.js.map → ProvidersView-5bCgXwBo.js.map} +1 -1
- package/bizar-dash/dist/assets/{SchedulesView-CcwDQ9Nm.js → SchedulesView-DFHdIz5P.js} +1 -1
- package/bizar-dash/dist/assets/{SchedulesView-CcwDQ9Nm.js.map → SchedulesView-DFHdIz5P.js.map} +1 -1
- package/bizar-dash/dist/assets/{Select-Cw7Qtz2M.js → Select-C8EJj4NM.js} +1 -1
- package/bizar-dash/dist/assets/{Select-Cw7Qtz2M.js.map → Select-C8EJj4NM.js.map} +1 -1
- package/bizar-dash/dist/assets/{SettingsRow-DgsgbPSI.js → SettingsRow-BdOOmYMD.js} +1 -1
- package/bizar-dash/dist/assets/{SettingsRow-DgsgbPSI.js.map → SettingsRow-BdOOmYMD.js.map} +1 -1
- package/bizar-dash/dist/assets/{SettingsView-DTAFdKyK.js → SettingsView-CqwQ6Knv.js} +1 -1
- package/bizar-dash/dist/assets/{SettingsView-DTAFdKyK.js.map → SettingsView-CqwQ6Knv.js.map} +1 -1
- package/bizar-dash/dist/assets/{Sheet-DH-WNJ3Y.js → Sheet-Cztsvgse.js} +1 -1
- package/bizar-dash/dist/assets/{Sheet-DH-WNJ3Y.js.map → Sheet-Cztsvgse.js.map} +1 -1
- package/bizar-dash/dist/assets/{Slider-DXbJuQ7y.js → Slider-BexNfF6K.js} +1 -1
- package/bizar-dash/dist/assets/{Slider-DXbJuQ7y.js.map → Slider-BexNfF6K.js.map} +1 -1
- package/bizar-dash/dist/assets/{Sparkline-CYtAn82j.js → Sparkline-CLZBtvsN.js} +1 -1
- package/bizar-dash/dist/assets/{Sparkline-CYtAn82j.js.map → Sparkline-CLZBtvsN.js.map} +1 -1
- package/bizar-dash/dist/assets/{Switch-BItGrPqr.js → Switch-B1tiRwNK.js} +1 -1
- package/bizar-dash/dist/assets/{Switch-BItGrPqr.js.map → Switch-B1tiRwNK.js.map} +1 -1
- package/bizar-dash/dist/assets/{TasksView-i5tm6CkX.js → TasksView-CT0fPlos.js} +1 -1
- package/bizar-dash/dist/assets/{TasksView-i5tm6CkX.js.map → TasksView-CT0fPlos.js.map} +1 -1
- package/bizar-dash/dist/assets/{Textarea-qYDf3yds.js → Textarea-D_TPpVMy.js} +1 -1
- package/bizar-dash/dist/assets/{Textarea-qYDf3yds.js.map → Textarea-D_TPpVMy.js.map} +1 -1
- package/bizar-dash/dist/assets/{UpdateView-Xln-ej26.js → UpdateView-tD2q2OhW.js} +1 -1
- package/bizar-dash/dist/assets/{UpdateView-Xln-ej26.js.map → UpdateView-tD2q2OhW.js.map} +1 -1
- package/bizar-dash/dist/assets/{UsageView-BGuZSUZ6.js → UsageView-B4BuAFKA.js} +1 -1
- package/bizar-dash/dist/assets/{UsageView-BGuZSUZ6.js.map → UsageView-B4BuAFKA.js.map} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-BqIPVKuG.js → ViewHeader-V_SzbUpw.js} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-BqIPVKuG.js.map → ViewHeader-V_SzbUpw.js.map} +1 -1
- package/bizar-dash/dist/assets/{VoiceView-CWUOCQs_.js → VoiceView-D3vb5OM2.js} +1 -1
- package/bizar-dash/dist/assets/{VoiceView-CWUOCQs_.js.map → VoiceView-D3vb5OM2.js.map} +1 -1
- package/bizar-dash/dist/assets/{brain-fsBSDl2g.js → brain-BmfWcitQ.js} +1 -1
- package/bizar-dash/dist/assets/{brain-fsBSDl2g.js.map → brain-BmfWcitQ.js.map} +1 -1
- package/bizar-dash/dist/assets/{calendar-DsHTZoCU.js → calendar-VntJUzFB.js} +1 -1
- package/bizar-dash/dist/assets/{calendar-DsHTZoCU.js.map → calendar-VntJUzFB.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-CqSxqqeJ.js → circle-KrQQySeK.js} +1 -1
- package/bizar-dash/dist/assets/{circle-CqSxqqeJ.js.map → circle-KrQQySeK.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-alert-BsLl001l.js → circle-alert-CQ9MLygI.js} +1 -1
- package/bizar-dash/dist/assets/{circle-alert-BsLl001l.js.map → circle-alert-CQ9MLygI.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-check-rVKMQmZp.js → circle-check-COtVgsWw.js} +1 -1
- package/bizar-dash/dist/assets/{circle-check-rVKMQmZp.js.map → circle-check-COtVgsWw.js.map} +1 -1
- package/bizar-dash/dist/assets/{clock-OuficfgH.js → clock-C0GlM4qp.js} +1 -1
- package/bizar-dash/dist/assets/{clock-OuficfgH.js.map → clock-C0GlM4qp.js.map} +1 -1
- package/bizar-dash/dist/assets/{download-BdHlstUY.js → download-CW4DmtRe.js} +1 -1
- package/bizar-dash/dist/assets/{download-BdHlstUY.js.map → download-CW4DmtRe.js.map} +1 -1
- package/bizar-dash/dist/assets/{external-link-DA3_VGm-.js → external-link-CAOnh_DH.js} +1 -1
- package/bizar-dash/dist/assets/{external-link-DA3_VGm-.js.map → external-link-CAOnh_DH.js.map} +1 -1
- package/bizar-dash/dist/assets/{file-text-B-g8H227.js → file-text-CS1jB_oV.js} +1 -1
- package/bizar-dash/dist/assets/{file-text-B-g8H227.js.map → file-text-CS1jB_oV.js.map} +1 -1
- package/bizar-dash/dist/assets/{filter-D9B8s5CG.js → filter-DyQbml3L.js} +1 -1
- package/bizar-dash/dist/assets/{filter-D9B8s5CG.js.map → filter-DyQbml3L.js.map} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-ByH0YuVz.js → git-pull-request-Co6gYfba.js} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-ByH0YuVz.js.map → git-pull-request-Co6gYfba.js.map} +1 -1
- package/bizar-dash/dist/assets/{main-CdOm1Pj9.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-C9hgd8wX.js → pause-CKYjSTGX.js} +1 -1
- package/bizar-dash/dist/assets/{pause-C9hgd8wX.js.map → pause-CKYjSTGX.js.map} +1 -1
- package/bizar-dash/dist/assets/{pencil-BanqaMw7.js → pencil-BUJ2DpWs.js} +1 -1
- package/bizar-dash/dist/assets/{pencil-BanqaMw7.js.map → pencil-BUJ2DpWs.js.map} +1 -1
- package/bizar-dash/dist/assets/{play-CawUZ02_.js → play-CGxZWqtW.js} +1 -1
- package/bizar-dash/dist/assets/{play-CawUZ02_.js.map → play-CGxZWqtW.js.map} +1 -1
- package/bizar-dash/dist/assets/{plug-Cmv0-T_e.js → plug-CQYGgGSy.js} +1 -1
- package/bizar-dash/dist/assets/{plug-Cmv0-T_e.js.map → plug-CQYGgGSy.js.map} +1 -1
- package/bizar-dash/dist/assets/{plus-M6LYiKX8.js → plus-fFxt-8z5.js} +1 -1
- package/bizar-dash/dist/assets/{plus-M6LYiKX8.js.map → plus-fFxt-8z5.js.map} +1 -1
- package/bizar-dash/dist/assets/{power-DP5x_SRF.js → power-Cjgy2KsI.js} +1 -1
- package/bizar-dash/dist/assets/{power-DP5x_SRF.js.map → power-Cjgy2KsI.js.map} +1 -1
- package/bizar-dash/dist/assets/{power-off-NOJRLAIs.js → power-off-B81hLRah.js} +1 -1
- package/bizar-dash/dist/assets/{power-off-NOJRLAIs.js.map → power-off-B81hLRah.js.map} +1 -1
- package/bizar-dash/dist/assets/{refresh-ccw-CHMprsm5.js → refresh-ccw-BCXx86xp.js} +1 -1
- package/bizar-dash/dist/assets/{refresh-ccw-CHMprsm5.js.map → refresh-ccw-BCXx86xp.js.map} +1 -1
- package/bizar-dash/dist/assets/{refresh-cw-1RBqDKgJ.js → refresh-cw-COTg1nZo.js} +1 -1
- package/bizar-dash/dist/assets/{refresh-cw-1RBqDKgJ.js.map → refresh-cw-COTg1nZo.js.map} +1 -1
- package/bizar-dash/dist/assets/{rotate-ccw-DJRekBbi.js → rotate-ccw-BZrEVc0Z.js} +1 -1
- package/bizar-dash/dist/assets/{rotate-ccw-DJRekBbi.js.map → rotate-ccw-BZrEVc0Z.js.map} +1 -1
- package/bizar-dash/dist/assets/{rotate-cw-DHooc0Tx.js → rotate-cw-CsTtaLV2.js} +1 -1
- package/bizar-dash/dist/assets/{rotate-cw-DHooc0Tx.js.map → rotate-cw-CsTtaLV2.js.map} +1 -1
- package/bizar-dash/dist/assets/{save-DQKCKyZK.js → save-DtMTge1F.js} +1 -1
- package/bizar-dash/dist/assets/{save-DQKCKyZK.js.map → save-DtMTge1F.js.map} +1 -1
- package/bizar-dash/dist/assets/{send-xgy3RAi7.js → send-DyBhyk8t.js} +1 -1
- package/bizar-dash/dist/assets/{send-xgy3RAi7.js.map → send-DyBhyk8t.js.map} +1 -1
- package/bizar-dash/dist/assets/{shield-alert-CWV2F5ab.js → shield-alert-BPGJlRF8.js} +1 -1
- package/bizar-dash/dist/assets/{shield-alert-CWV2F5ab.js.map → shield-alert-BPGJlRF8.js.map} +1 -1
- package/bizar-dash/dist/assets/{trash-2-CL4khSRv.js → trash-2-2NsyTU8c.js} +1 -1
- package/bizar-dash/dist/assets/{trash-2-CL4khSRv.js.map → trash-2-2NsyTU8c.js.map} +1 -1
- package/bizar-dash/dist/assets/{trending-up-CSJJhWTS.js → trending-up-BXwP23VK.js} +1 -1
- package/bizar-dash/dist/assets/{trending-up-CSJJhWTS.js.map → trending-up-BXwP23VK.js.map} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-BPLb7uLt.js → triangle-alert-DFmQ_RXN.js} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-BPLb7uLt.js.map → triangle-alert-DFmQ_RXN.js.map} +1 -1
- package/bizar-dash/dist/assets/{upload-Cww6MvFq.js → upload-Cj-HYRYV.js} +1 -1
- package/bizar-dash/dist/assets/{upload-Cww6MvFq.js.map → upload-Cj-HYRYV.js.map} +1 -1
- package/bizar-dash/dist/assets/{zap-DmhVUzRA.js → zap-BaOiybcl.js} +1 -1
- package/bizar-dash/dist/assets/{zap-DmhVUzRA.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/api.mjs +11 -0
- package/bizar-dash/src/server/artifacts-store.mjs +120 -14
- package/bizar-dash/src/server/claude-artifacts.mjs +281 -0
- package/bizar-dash/src/server/routes/artifacts.mjs +42 -6
- package/bizar-dash/src/server/routes/audit.mjs +78 -0
- package/bizar-dash/src/server/routes/decisions.mjs +78 -0
- package/bizar-dash/src/server/routes/model-router.mjs +55 -0
- package/bizar-dash/src/server/routes/model-router.test.mjs +28 -0
- package/bizar-dash/src/server/routes/sessions.mjs +80 -0
- package/bizar-dash/src/server/routes/update.mjs +48 -21
- package/bizar-dash/src/server/sprint.test.mjs +163 -0
- 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/Artifacts/ArtifactsView.tsx +232 -21
- package/bizar-dash/src/web/v8/views/Artifacts/ClaudeArtifactView.tsx +179 -0
- 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/dist/agent/cron.d.ts +44 -0
- package/packages/sdk/dist/agent/cron.js +79 -0
- package/packages/sdk/dist/agent/heartbeat.d.ts +43 -0
- package/packages/sdk/dist/agent/heartbeat.js +116 -0
- package/packages/sdk/dist/index.d.ts +3 -0
- package/packages/sdk/dist/index.js +5 -0
- package/packages/sdk/dist/learning/decisions.d.ts +46 -0
- package/packages/sdk/dist/learning/decisions.js +132 -0
- package/packages/sdk/dist/learning/index.d.ts +8 -0
- package/packages/sdk/dist/learning/index.js +8 -0
- package/packages/sdk/dist/learning/instincts.d.ts +38 -0
- package/packages/sdk/dist/learning/instincts.js +139 -0
- package/packages/sdk/dist/mcp/server.js +119 -1
- package/packages/sdk/dist/router/agent-model-registry.d.ts +89 -0
- package/packages/sdk/dist/router/agent-model-registry.js +144 -0
- package/packages/sdk/dist/router/index.d.ts +1 -0
- package/packages/sdk/dist/router/index.js +1 -0
- package/packages/sdk/package.json +3 -2
- package/scripts/audit.mjs +388 -0
- package/scripts/audit.test.mjs +149 -0
- package/scripts/eval-gate.mjs +134 -0
- package/scripts/eval-gate.test.mjs +138 -0
- package/scripts/feature-state-machine.mjs +178 -0
- package/scripts/feature-state-machine.test.mjs +135 -0
- package/scripts/install-curl.sh +17 -0
- package/scripts/spec-dedup.test.mjs +124 -0
- package/scripts/sprint.mjs +213 -0
- package/scripts/worktree-setup.sh +79 -0
- package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js +0 -6
- package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js.map +0 -1
- package/bizar-dash/dist/assets/HeadroomView-CNc-TI7u.js +0 -11
- package/bizar-dash/dist/assets/HeadroomView-CNc-TI7u.js.map +0 -1
- package/bizar-dash/dist/assets/MiscView-BBcpUbZZ.js +0 -1
- package/bizar-dash/dist/assets/ObsidianView-D3bI0row.js +0 -1
- package/bizar-dash/dist/assets/main-CdOm1Pj9.js.map +0 -1
- 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/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/provision-claude.mjs +0 -1176
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* tests/views/Overview.test.tsx
|
|
3
|
-
*
|
|
4
|
-
* Wave 3 — Overview redesign smoke tests. Covers:
|
|
5
|
-
* - The new Overview mounts without crashing given a populated snapshot.
|
|
6
|
-
* - The five stat tiles render the correct labelled values.
|
|
7
|
-
* - The activity stream renders rows from the snapshot seed.
|
|
8
|
-
* - Per-row hide toggle POSTs to /activity/hide with the correct key.
|
|
9
|
-
* - "Hide all" calls POST /activity/hide with the full list of keys.
|
|
10
|
-
* - The SSE subscription is established (mock EventSource) but never actually fires.
|
|
11
|
-
* - Clicking the submit button calls /tasks/submit.
|
|
12
|
-
*
|
|
13
|
-
* Notes:
|
|
14
|
-
* - EventSource is mocked globally (no listener fires in jsdom).
|
|
15
|
-
* - api is mocked so no network is attempted.
|
|
16
|
-
* - ThemeProvider + ToastProvider + ModalProvider wrap the view so the
|
|
17
|
-
* helpers the Overview calls (useToast / useModal) get a real context.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
21
|
-
import { render, screen, waitFor, within } from '@testing-library/react';
|
|
22
|
-
import userEvent from '@testing-library/user-event';
|
|
23
|
-
import React from 'react';
|
|
24
|
-
|
|
25
|
-
import { Overview } from '../../src/web/views/Overview';
|
|
26
|
-
import { ToastProvider } from '../../src/web/components/Toast';
|
|
27
|
-
import { ModalProvider } from '../../src/web/components/Modal';
|
|
28
|
-
|
|
29
|
-
import type {
|
|
30
|
-
ActivityItem,
|
|
31
|
-
Agent,
|
|
32
|
-
Artifact,
|
|
33
|
-
Mod,
|
|
34
|
-
Overview as OverviewData,
|
|
35
|
-
ProjectRecord,
|
|
36
|
-
Settings,
|
|
37
|
-
Snapshot,
|
|
38
|
-
Task,
|
|
39
|
-
} from '../../src/web/lib/types';
|
|
40
|
-
import { api } from '../../src/web/lib/api';
|
|
41
|
-
|
|
42
|
-
// ─── Mocks ──────────────────────────────────────────────────────────────────
|
|
43
|
-
|
|
44
|
-
class MockEventSource {
|
|
45
|
-
url: string;
|
|
46
|
-
readyState = 0;
|
|
47
|
-
listeners: Record<string, ((e: MessageEvent) => void)[]> = {};
|
|
48
|
-
onerror: ((e: Event) => void) | null = null;
|
|
49
|
-
constructor(url: string) {
|
|
50
|
-
this.url = url;
|
|
51
|
-
MockEventSource.instances.push(this);
|
|
52
|
-
}
|
|
53
|
-
addEventListener(name: string, cb: (e: MessageEvent) => void) {
|
|
54
|
-
(this.listeners[name] ||= []).push(cb);
|
|
55
|
-
}
|
|
56
|
-
removeEventListener() { /* noop for tests */ }
|
|
57
|
-
close() {
|
|
58
|
-
this.readyState = 2;
|
|
59
|
-
}
|
|
60
|
-
// Test helpers — manually dispatch like a real server would.
|
|
61
|
-
__dispatch(name: string, data: unknown) {
|
|
62
|
-
const ev = { data: JSON.stringify(data) } as MessageEvent;
|
|
63
|
-
this.listeners[name]?.forEach((cb) => cb(ev));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
(MockEventSource as unknown as { instances: MockEventSource[] }).instances = [];
|
|
67
|
-
|
|
68
|
-
vi.stubGlobal('EventSource', MockEventSource);
|
|
69
|
-
|
|
70
|
-
vi.mock('../../src/web/lib/api', () => {
|
|
71
|
-
return {
|
|
72
|
-
api: {
|
|
73
|
-
get: vi.fn(),
|
|
74
|
-
post: vi.fn(),
|
|
75
|
-
put: vi.fn(),
|
|
76
|
-
patch: vi.fn(),
|
|
77
|
-
del: vi.fn(),
|
|
78
|
-
getToken: vi.fn(() => ''),
|
|
79
|
-
setToken: vi.fn(),
|
|
80
|
-
probeAuthStatus: vi.fn(),
|
|
81
|
-
},
|
|
82
|
-
ApiError: class ApiError extends Error {
|
|
83
|
-
status: number;
|
|
84
|
-
constructor(status: number, message: string) {
|
|
85
|
-
super(message);
|
|
86
|
-
this.status = status;
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
const Harness: React.FC<{ children: React.ReactNode }> = ({ children }) => (
|
|
93
|
-
<ToastProvider>
|
|
94
|
-
<ModalProvider>{children}</ModalProvider>
|
|
95
|
-
</ToastProvider>
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
// ─── Fixtures ────────────────────────────────────────────────────────────────
|
|
99
|
-
|
|
100
|
-
function makeOverview(overrides: Partial<OverviewData> = {}): OverviewData {
|
|
101
|
-
return {
|
|
102
|
-
counts: {
|
|
103
|
-
agents: 7,
|
|
104
|
-
plans: 4,
|
|
105
|
-
projects: 3,
|
|
106
|
-
sessions: 2,
|
|
107
|
-
activeProject: 'p-1',
|
|
108
|
-
...(overrides.counts ?? {}),
|
|
109
|
-
},
|
|
110
|
-
recentActivity: overrides.recentActivity ?? [
|
|
111
|
-
{
|
|
112
|
-
ts: new Date().toISOString(),
|
|
113
|
-
kind: 'task.created',
|
|
114
|
-
title: 'Build settings page',
|
|
115
|
-
} as unknown as ActivityItem,
|
|
116
|
-
{
|
|
117
|
-
ts: new Date(Date.now() - 5 * 60_000).toISOString(),
|
|
118
|
-
kind: 'agent.delegated',
|
|
119
|
-
agent: 'thor',
|
|
120
|
-
} as unknown as ActivityItem,
|
|
121
|
-
],
|
|
122
|
-
versions: {
|
|
123
|
-
node: 'v20.10.0',
|
|
124
|
-
platform: 'linux',
|
|
125
|
-
projectRoot: '/srv/bizar',
|
|
126
|
-
bizarRoot: '/home/user/.bizar',
|
|
127
|
-
...(overrides.versions ?? {}),
|
|
128
|
-
},
|
|
129
|
-
generatedAt: new Date().toISOString(),
|
|
130
|
-
...overrides,
|
|
131
|
-
} as OverviewData;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function makeSnapshot(overrides: Partial<Snapshot> = {}): Snapshot {
|
|
135
|
-
return {
|
|
136
|
-
overview: makeOverview(),
|
|
137
|
-
agents: [] as Agent[],
|
|
138
|
-
artifacts: [] as Artifact[],
|
|
139
|
-
projects: [
|
|
140
|
-
{ id: 'p-1', name: 'Bizar', path: '/srv/bizar', status: 'active' },
|
|
141
|
-
{ id: 'p-2', name: 'Spar', path: '/srv/spar', status: 'inactive' },
|
|
142
|
-
] as ProjectRecord[],
|
|
143
|
-
activeProject: {
|
|
144
|
-
id: 'p-1',
|
|
145
|
-
name: 'Bizar',
|
|
146
|
-
path: '/srv/bizar',
|
|
147
|
-
status: 'active',
|
|
148
|
-
} as ProjectRecord,
|
|
149
|
-
config: { path: '', data: {}, raw: '', exists: true },
|
|
150
|
-
settings: { path: '', data: {} as Settings, exists: true },
|
|
151
|
-
tasks: [
|
|
152
|
-
{
|
|
153
|
-
id: 't-1',
|
|
154
|
-
title: 'Refactor parser',
|
|
155
|
-
description: '',
|
|
156
|
-
status: 'doing',
|
|
157
|
-
tags: [],
|
|
158
|
-
priority: 'normal',
|
|
159
|
-
assignee: 'thor',
|
|
160
|
-
createdAt: new Date().toISOString(),
|
|
161
|
-
updatedAt: new Date().toISOString(),
|
|
162
|
-
} as Task,
|
|
163
|
-
{
|
|
164
|
-
id: 't-2',
|
|
165
|
-
title: 'Add schema check',
|
|
166
|
-
description: '',
|
|
167
|
-
status: 'queued',
|
|
168
|
-
tags: [],
|
|
169
|
-
priority: 'normal',
|
|
170
|
-
assignee: 'heimdall',
|
|
171
|
-
createdAt: new Date(Date.now() - 2 * 24 * 3600_000).toISOString(),
|
|
172
|
-
updatedAt: new Date(Date.now() - 24 * 3600_000).toISOString(),
|
|
173
|
-
} as Task,
|
|
174
|
-
],
|
|
175
|
-
mods: [
|
|
176
|
-
{
|
|
177
|
-
id: 'm-1',
|
|
178
|
-
name: 'graphify',
|
|
179
|
-
version: '1.0.0',
|
|
180
|
-
author: 'bizar',
|
|
181
|
-
description: '',
|
|
182
|
-
bizar: '',
|
|
183
|
-
type: 'tool',
|
|
184
|
-
enabled: true,
|
|
185
|
-
permissions: [],
|
|
186
|
-
entry: {},
|
|
187
|
-
files: [],
|
|
188
|
-
path: '/mods/graphify',
|
|
189
|
-
installedAt: null,
|
|
190
|
-
} as Mod,
|
|
191
|
-
{
|
|
192
|
-
id: 'm-2',
|
|
193
|
-
name: 'headroom',
|
|
194
|
-
version: '0.4.0',
|
|
195
|
-
author: 'bizar',
|
|
196
|
-
description: '',
|
|
197
|
-
bizar: '',
|
|
198
|
-
type: 'service',
|
|
199
|
-
enabled: false,
|
|
200
|
-
permissions: [],
|
|
201
|
-
entry: {},
|
|
202
|
-
files: [],
|
|
203
|
-
path: '/mods/headroom',
|
|
204
|
-
installedAt: null,
|
|
205
|
-
} as Mod,
|
|
206
|
-
],
|
|
207
|
-
schedules: [],
|
|
208
|
-
providers: [],
|
|
209
|
-
mcps: [],
|
|
210
|
-
...overrides,
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
const baseSettings = {
|
|
215
|
-
theme: { mode: 'system' as const, accent: '', success: '', warning: '', error: '', info: '', fontFamily: '', fontSize: 13, compactMode: false, animations: true },
|
|
216
|
-
ui: { layout: 'both' as const, showHeader: true, showStatusBar: true, defaultTab: 'overview' },
|
|
217
|
-
defaultAgent: 'odin',
|
|
218
|
-
defaultModel: 'claude-opus-4',
|
|
219
|
-
notifications: { onAgentComplete: false, onPlanApproval: false },
|
|
220
|
-
dashboard: { autoLaunchWeb: false, projectsDirectory: '/srv' },
|
|
221
|
-
service: { enabled: false, autostart: false },
|
|
222
|
-
about: { version: 'v6.5.0', homepage: '', license: '' },
|
|
223
|
-
agents: { maxParallel: 3, stuckThresholdMs: 60_000, autoRestart: false },
|
|
224
|
-
personalization: { displayName: '', role: '', team: '', aboutMe: '', preferences: '' },
|
|
225
|
-
workflow: { artifactsEnabled: true, agentsDecideAutonomously: false, chatAutonomous: false },
|
|
226
|
-
} as unknown as Settings;
|
|
227
|
-
|
|
228
|
-
// ─── Tests ──────────────────────────────────────────────────────────────────
|
|
229
|
-
|
|
230
|
-
describe('Overview (Wave 3 redesign)', () => {
|
|
231
|
-
beforeEach(() => {
|
|
232
|
-
vi.clearAllMocks();
|
|
233
|
-
MockEventSource.instances.length = 0;
|
|
234
|
-
(api.get as ReturnType<typeof vi.fn>).mockImplementation((url: string) => {
|
|
235
|
-
if (url === '/activity/hidden') return Promise.resolve({ hidden: [] });
|
|
236
|
-
return Promise.resolve(null);
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
afterEach(() => {
|
|
241
|
-
vi.useRealTimers();
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
it('mounts without crashing and establishes the SSE subscription', async () => {
|
|
245
|
-
const snapshot = makeSnapshot();
|
|
246
|
-
render(
|
|
247
|
-
<Harness>
|
|
248
|
-
<Overview
|
|
249
|
-
snapshot={snapshot}
|
|
250
|
-
settings={baseSettings}
|
|
251
|
-
activeTab="overview"
|
|
252
|
-
setActiveTab={vi.fn()}
|
|
253
|
-
refreshSnapshot={vi.fn(async () => undefined)}
|
|
254
|
-
/>
|
|
255
|
-
</Harness>,
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
expect(await screen.findByTestId('overview-stat-row')).toBeInTheDocument();
|
|
259
|
-
expect(MockEventSource.instances).toHaveLength(1);
|
|
260
|
-
expect(MockEventSource.instances[0].url).toBe('/api/activity/stream');
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
it('renders all five stat tiles with the correct values', async () => {
|
|
264
|
-
const snapshot = makeSnapshot({
|
|
265
|
-
overview: makeOverview({
|
|
266
|
-
counts: { agents: 7, plans: 4, projects: 3, sessions: 2, activeProject: 'p-1' },
|
|
267
|
-
}),
|
|
268
|
-
});
|
|
269
|
-
render(
|
|
270
|
-
<Harness>
|
|
271
|
-
<Overview
|
|
272
|
-
snapshot={snapshot}
|
|
273
|
-
settings={baseSettings}
|
|
274
|
-
activeTab="overview"
|
|
275
|
-
setActiveTab={vi.fn()}
|
|
276
|
-
refreshSnapshot={vi.fn(async () => undefined)}
|
|
277
|
-
/>
|
|
278
|
-
</Harness>,
|
|
279
|
-
);
|
|
280
|
-
|
|
281
|
-
// StatTile doesn't forward data-testid; find tiles by their label
|
|
282
|
-
// text. Labels are sentence-cased in DOM, uppercase via CSS.
|
|
283
|
-
expect(await screen.findByText('Agents')).toBeInTheDocument();
|
|
284
|
-
expect(screen.getByText('Tasks')).toBeInTheDocument();
|
|
285
|
-
expect(screen.getByText('Projects')).toBeInTheDocument();
|
|
286
|
-
expect(screen.getByText('Mods')).toBeInTheDocument();
|
|
287
|
-
expect(screen.getByText('Background')).toBeInTheDocument();
|
|
288
|
-
|
|
289
|
-
// 7 agents, 2 tasks, 2 projects, 2 mods, 2 background
|
|
290
|
-
const row = await screen.findByTestId('overview-stat-row');
|
|
291
|
-
expect(within(row).getByText('7')).toBeInTheDocument();
|
|
292
|
-
// The number "2" appears multiple times (tasks, projects, mods, background)
|
|
293
|
-
const twos = within(row).getAllByText('2');
|
|
294
|
-
expect(twos.length).toBeGreaterThanOrEqual(4);
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
it('renders activity rows from the snapshot seed', async () => {
|
|
298
|
-
const snapshot = makeSnapshot({
|
|
299
|
-
overview: makeOverview({
|
|
300
|
-
recentActivity: [
|
|
301
|
-
{ ts: new Date().toISOString(), kind: 'task.created', title: 'Build settings page' } as ActivityItem,
|
|
302
|
-
{ ts: new Date().toISOString(), kind: 'agent.delegated', agent: 'thor' } as ActivityItem,
|
|
303
|
-
],
|
|
304
|
-
}),
|
|
305
|
-
});
|
|
306
|
-
render(
|
|
307
|
-
<Harness>
|
|
308
|
-
<Overview
|
|
309
|
-
snapshot={snapshot}
|
|
310
|
-
settings={baseSettings}
|
|
311
|
-
activeTab="overview"
|
|
312
|
-
setActiveTab={vi.fn()}
|
|
313
|
-
refreshSnapshot={vi.fn(async () => undefined)}
|
|
314
|
-
/>
|
|
315
|
-
</Harness>,
|
|
316
|
-
);
|
|
317
|
-
|
|
318
|
-
const list = await screen.findByTestId('overview-activity-list');
|
|
319
|
-
expect(within(list).getByText(/Task created/i)).toBeInTheDocument();
|
|
320
|
-
expect(within(list).getByText(/Agent delegated/i)).toBeInTheDocument();
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
it('hides a single activity row when its icon button is clicked', async () => {
|
|
324
|
-
(api.post as ReturnType<typeof vi.fn>).mockResolvedValue({ ok: true });
|
|
325
|
-
const user = userEvent.setup();
|
|
326
|
-
const snapshot = makeSnapshot();
|
|
327
|
-
render(
|
|
328
|
-
<Harness>
|
|
329
|
-
<Overview
|
|
330
|
-
snapshot={snapshot}
|
|
331
|
-
settings={baseSettings}
|
|
332
|
-
activeTab="overview"
|
|
333
|
-
setActiveTab={vi.fn()}
|
|
334
|
-
refreshSnapshot={vi.fn(async () => undefined)}
|
|
335
|
-
/>
|
|
336
|
-
</Harness>,
|
|
337
|
-
);
|
|
338
|
-
|
|
339
|
-
const list = await screen.findByTestId('overview-activity-list');
|
|
340
|
-
const hideButtons = within(list).getAllByRole('button', { name: /hide from overview/i });
|
|
341
|
-
expect(hideButtons.length).toBeGreaterThan(0);
|
|
342
|
-
|
|
343
|
-
await user.click(hideButtons[0]);
|
|
344
|
-
|
|
345
|
-
await waitFor(() => {
|
|
346
|
-
expect(api.post).toHaveBeenCalledWith(
|
|
347
|
-
'/activity/hide',
|
|
348
|
-
expect.objectContaining({ keys: expect.any(Array) }),
|
|
349
|
-
);
|
|
350
|
-
});
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
it('posts the full list of keys when "Hide all" is clicked', async () => {
|
|
354
|
-
const confirmSpy = vi.spyOn(window, 'confirm').mockReturnValue(true);
|
|
355
|
-
(api.post as ReturnType<typeof vi.fn>).mockResolvedValue({ ok: true });
|
|
356
|
-
const user = userEvent.setup();
|
|
357
|
-
const snapshot = makeSnapshot();
|
|
358
|
-
render(
|
|
359
|
-
<Harness>
|
|
360
|
-
<Overview
|
|
361
|
-
snapshot={snapshot}
|
|
362
|
-
settings={baseSettings}
|
|
363
|
-
activeTab="overview"
|
|
364
|
-
setActiveTab={vi.fn()}
|
|
365
|
-
refreshSnapshot={vi.fn(async () => undefined)}
|
|
366
|
-
/>
|
|
367
|
-
</Harness>,
|
|
368
|
-
);
|
|
369
|
-
|
|
370
|
-
await user.click(await screen.findByTestId('overview-hide-all'));
|
|
371
|
-
|
|
372
|
-
await waitFor(() => {
|
|
373
|
-
const calls = (api.post as ReturnType<typeof vi.fn>).mock.calls;
|
|
374
|
-
const hideCall = calls.find(([url]: unknown[]) => url === '/activity/hide');
|
|
375
|
-
expect(hideCall).toBeDefined();
|
|
376
|
-
const body = hideCall?.[1] as { keys: string[] };
|
|
377
|
-
expect(Array.isArray(body.keys)).toBe(true);
|
|
378
|
-
expect(body.keys.length).toBeGreaterThan(0);
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
confirmSpy.mockRestore();
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
it('calls /tasks/submit when the "Submit to Odin" button is clicked', async () => {
|
|
385
|
-
(api.post as ReturnType<typeof vi.fn>).mockResolvedValue({ subtasks: [{}, {}] });
|
|
386
|
-
const user = userEvent.setup();
|
|
387
|
-
const refresh = vi.fn(async () => undefined);
|
|
388
|
-
const snapshot = makeSnapshot();
|
|
389
|
-
|
|
390
|
-
render(
|
|
391
|
-
<Harness>
|
|
392
|
-
<Overview
|
|
393
|
-
snapshot={snapshot}
|
|
394
|
-
settings={baseSettings}
|
|
395
|
-
activeTab="overview"
|
|
396
|
-
setActiveTab={vi.fn()}
|
|
397
|
-
refreshSnapshot={refresh}
|
|
398
|
-
/>
|
|
399
|
-
</Harness>,
|
|
400
|
-
);
|
|
401
|
-
|
|
402
|
-
const textarea = await screen.findByTestId('overview-prompt-input');
|
|
403
|
-
await user.type(textarea, 'Build a thing');
|
|
404
|
-
await user.click(screen.getByTestId('overview-submit'));
|
|
405
|
-
|
|
406
|
-
await waitFor(() => {
|
|
407
|
-
expect(api.post).toHaveBeenCalledWith(
|
|
408
|
-
'/tasks/submit',
|
|
409
|
-
expect.objectContaining({ title: expect.stringContaining('Build a thing') }),
|
|
410
|
-
);
|
|
411
|
-
});
|
|
412
|
-
});
|
|
413
|
-
});
|