@polderlabs/bizar 8.1.0 → 10.0.5

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.
Files changed (546) hide show
  1. package/bizar-dash/BROWSER_VERIFICATION.md +190 -0
  2. package/bizar-dash/CHANGELOG.md +452 -0
  3. package/bizar-dash/CONTROL_SURFACES.md +157 -0
  4. package/bizar-dash/SETTINGS_AUDIT.md +225 -0
  5. package/bizar-dash/dist/assets/ActivityFeed-DbZT1TnN.js +11 -0
  6. package/bizar-dash/dist/assets/ActivityFeed-DbZT1TnN.js.map +1 -0
  7. package/bizar-dash/dist/assets/ActivityView-DfrBu-ED.js +7 -0
  8. package/bizar-dash/dist/assets/ActivityView-DfrBu-ED.js.map +1 -0
  9. package/bizar-dash/dist/assets/AdminView-DSbzp67e.js +11 -0
  10. package/bizar-dash/dist/assets/AdminView-DSbzp67e.js.map +1 -0
  11. package/bizar-dash/dist/assets/AgentsView-BaR-e4UO.js +13 -0
  12. package/bizar-dash/dist/assets/AgentsView-BaR-e4UO.js.map +1 -0
  13. package/bizar-dash/dist/assets/ArtifactsView-Dddh5NWn.js +6 -0
  14. package/bizar-dash/dist/assets/ArtifactsView-Dddh5NWn.js.map +1 -0
  15. package/bizar-dash/dist/assets/AuthView-CcTxahxz.js +16 -0
  16. package/bizar-dash/dist/assets/AuthView-CcTxahxz.js.map +1 -0
  17. package/bizar-dash/dist/assets/BackgroundJobsView-DxiSs69H.js +1 -0
  18. package/bizar-dash/dist/assets/BackgroundJobsView-DxiSs69H.js.map +1 -0
  19. package/bizar-dash/dist/assets/BackupView-BPS8REBD.js +1 -0
  20. package/bizar-dash/dist/assets/BackupView-BPS8REBD.js.map +1 -0
  21. package/bizar-dash/dist/assets/Banner-Bx1hIUM9.js +1 -0
  22. package/bizar-dash/dist/assets/Banner-Bx1hIUM9.js.map +1 -0
  23. package/bizar-dash/dist/assets/{Card-BzJeYR2D.js → Card-ZAdgpn3-.js} +1 -1
  24. package/bizar-dash/dist/assets/{Card-BzJeYR2D.js.map → Card-ZAdgpn3-.js.map} +1 -1
  25. package/bizar-dash/dist/assets/ChatView-CM_mrwom.js +9 -0
  26. package/bizar-dash/dist/assets/ChatView-CM_mrwom.js.map +1 -0
  27. package/bizar-dash/dist/assets/{Chip-CN2bvm7a.js → Chip-k5K9DYAf.js} +1 -1
  28. package/bizar-dash/dist/assets/{Chip-CN2bvm7a.js.map → Chip-k5K9DYAf.js.map} +1 -1
  29. package/bizar-dash/dist/assets/ClaudeSessionsView-Dq40JNVC.js +1 -0
  30. package/bizar-dash/dist/assets/ClaudeSessionsView-Dq40JNVC.js.map +1 -0
  31. package/bizar-dash/dist/assets/ClipboardView-B-TwPtaC.js +1 -0
  32. package/bizar-dash/dist/assets/ClipboardView-B-TwPtaC.js.map +1 -0
  33. package/bizar-dash/dist/assets/ConfigView-C_eZMscY.js +1 -0
  34. package/bizar-dash/dist/assets/ConfigView-C_eZMscY.js.map +1 -0
  35. package/bizar-dash/dist/assets/DiagnosticsView-Cex6UdD8.js +2 -0
  36. package/bizar-dash/dist/assets/DiagnosticsView-Cex6UdD8.js.map +1 -0
  37. package/bizar-dash/dist/assets/DialogsView-DTMRJd0K.js +6 -0
  38. package/bizar-dash/dist/assets/DialogsView-DTMRJd0K.js.map +1 -0
  39. package/bizar-dash/dist/assets/DoctorView-BTCUpzXT.js +6 -0
  40. package/bizar-dash/dist/assets/DoctorView-BTCUpzXT.js.map +1 -0
  41. package/bizar-dash/dist/assets/{EmptyState-DEiBv4-r.js → EmptyState-DQzo47a_.js} +1 -1
  42. package/bizar-dash/dist/assets/{EmptyState-DEiBv4-r.js.map → EmptyState-DQzo47a_.js.map} +1 -1
  43. package/bizar-dash/dist/assets/EnvVarsView-Dnap-pmQ.js +8 -0
  44. package/bizar-dash/dist/assets/EnvVarsView-Dnap-pmQ.js.map +1 -0
  45. package/bizar-dash/dist/assets/ErrorState-DZYn3VL_.js +6 -0
  46. package/bizar-dash/dist/assets/ErrorState-DZYn3VL_.js.map +1 -0
  47. package/bizar-dash/dist/assets/EvalView-B0YgoXpm.js +1 -0
  48. package/bizar-dash/dist/assets/EvalView-B0YgoXpm.js.map +1 -0
  49. package/bizar-dash/dist/assets/GoalsView-YEbgpx2i.js +6 -0
  50. package/bizar-dash/dist/assets/GoalsView-YEbgpx2i.js.map +1 -0
  51. package/bizar-dash/dist/assets/Grid-CN6IV8NB.js +1 -0
  52. package/bizar-dash/dist/assets/Grid-CN6IV8NB.js.map +1 -0
  53. package/bizar-dash/dist/assets/HeadroomView-C_-l8ojG.js +11 -0
  54. package/bizar-dash/dist/assets/HeadroomView-C_-l8ojG.js.map +1 -0
  55. package/bizar-dash/dist/assets/HistoryView-BICvR96Y.js +1 -0
  56. package/bizar-dash/dist/assets/HistoryView-BICvR96Y.js.map +1 -0
  57. package/bizar-dash/dist/assets/Input-BRHotaQu.js +1 -0
  58. package/bizar-dash/dist/assets/Input-BRHotaQu.js.map +1 -0
  59. package/bizar-dash/dist/assets/{KanbanCard-DZEaAiEr.js → KanbanCard-BvkJ9Xwg.js} +3 -13
  60. package/bizar-dash/dist/assets/KanbanCard-BvkJ9Xwg.js.map +1 -0
  61. package/bizar-dash/dist/assets/LibrariesView-BXjfXc-o.js +52 -0
  62. package/bizar-dash/dist/assets/LibrariesView-BXjfXc-o.js.map +1 -0
  63. package/bizar-dash/dist/assets/LightRAGView-DKfQd0lo.js +6 -0
  64. package/bizar-dash/dist/assets/LightRAGView-DKfQd0lo.js.map +1 -0
  65. package/bizar-dash/dist/assets/ListHeader-DRqP1u_I.js +1 -0
  66. package/bizar-dash/dist/assets/ListHeader-DRqP1u_I.js.map +1 -0
  67. package/bizar-dash/dist/assets/MemoryView-DouzHGXp.js +8 -0
  68. package/bizar-dash/dist/assets/MemoryView-DouzHGXp.js.map +1 -0
  69. package/bizar-dash/dist/assets/MessageBubble-CIapZ4YY.js +29 -0
  70. package/bizar-dash/dist/assets/MessageBubble-CIapZ4YY.js.map +1 -0
  71. package/bizar-dash/dist/assets/MiscView-BqxBRW9r.js +1 -0
  72. package/bizar-dash/dist/assets/MiscView-BqxBRW9r.js.map +1 -0
  73. package/bizar-dash/dist/assets/ModsView-B9apzm7l.js +6 -0
  74. package/bizar-dash/dist/assets/ModsView-B9apzm7l.js.map +1 -0
  75. package/bizar-dash/dist/assets/NotificationsView-O1BrGRRZ.js +6 -0
  76. package/bizar-dash/dist/assets/NotificationsView-O1BrGRRZ.js.map +1 -0
  77. package/bizar-dash/dist/assets/ObsidianView-0_Nc0IwJ.js +1 -0
  78. package/bizar-dash/dist/assets/ObsidianView-0_Nc0IwJ.js.map +1 -0
  79. package/bizar-dash/dist/assets/OverviewView-D6WmCxyc.js +1 -0
  80. package/bizar-dash/dist/assets/OverviewView-D6WmCxyc.js.map +1 -0
  81. package/bizar-dash/dist/assets/ProgressBar-BXqAmiA8.js +1 -0
  82. package/bizar-dash/dist/assets/ProgressBar-BXqAmiA8.js.map +1 -0
  83. package/bizar-dash/dist/assets/ProjectsView-BbHq_OF3.js +11 -0
  84. package/bizar-dash/dist/assets/ProjectsView-BbHq_OF3.js.map +1 -0
  85. package/bizar-dash/dist/assets/ProvidersView-dQOPha2i.js +11 -0
  86. package/bizar-dash/dist/assets/ProvidersView-dQOPha2i.js.map +1 -0
  87. package/bizar-dash/dist/assets/SchedulesView-DllGEgon.js +1 -0
  88. package/bizar-dash/dist/assets/SchedulesView-DllGEgon.js.map +1 -0
  89. package/bizar-dash/dist/assets/Select-xrQ0htmD.js +6 -0
  90. package/bizar-dash/dist/assets/Select-xrQ0htmD.js.map +1 -0
  91. package/bizar-dash/dist/assets/SettingsRow-BNSh_paj.js +1 -0
  92. package/bizar-dash/dist/assets/SettingsRow-BNSh_paj.js.map +1 -0
  93. package/bizar-dash/dist/assets/SettingsView-B2LyDoxB.js +18 -0
  94. package/bizar-dash/dist/assets/SettingsView-B2LyDoxB.js.map +1 -0
  95. package/bizar-dash/dist/assets/Sheet-C-djzbtS.js +1 -0
  96. package/bizar-dash/dist/assets/{Sheet-C_sIEw35.js.map → Sheet-C-djzbtS.js.map} +1 -1
  97. package/bizar-dash/dist/assets/Slider-DmOSInmR.js +1 -0
  98. package/bizar-dash/dist/assets/Slider-DmOSInmR.js.map +1 -0
  99. package/bizar-dash/dist/assets/Sparkline-fGhOoGf0.js +1 -0
  100. package/bizar-dash/dist/assets/Sparkline-fGhOoGf0.js.map +1 -0
  101. package/bizar-dash/dist/assets/Switch-D5gPfsKd.js +10 -0
  102. package/bizar-dash/dist/assets/Switch-D5gPfsKd.js.map +1 -0
  103. package/bizar-dash/dist/assets/TasksView-Dw4YtwQB.js +1 -0
  104. package/bizar-dash/dist/assets/TasksView-Dw4YtwQB.js.map +1 -0
  105. package/bizar-dash/dist/assets/{Textarea-Dk97nmjO.js → Textarea-Cv1HX9p1.js} +1 -1
  106. package/bizar-dash/dist/assets/{Textarea-Dk97nmjO.js.map → Textarea-Cv1HX9p1.js.map} +1 -1
  107. package/bizar-dash/dist/assets/UpdateView-Bj0LzpMs.js +6 -0
  108. package/bizar-dash/dist/assets/UpdateView-Bj0LzpMs.js.map +1 -0
  109. package/bizar-dash/dist/assets/UsageView-CE-23yYu.js +1 -0
  110. package/bizar-dash/dist/assets/UsageView-CE-23yYu.js.map +1 -0
  111. package/bizar-dash/dist/assets/{ViewHeader-dPd4zAyj.js → ViewHeader-2Oyjj9Yt.js} +2 -2
  112. package/bizar-dash/dist/assets/{ViewHeader-dPd4zAyj.js.map → ViewHeader-2Oyjj9Yt.js.map} +1 -1
  113. package/bizar-dash/dist/assets/VoiceView-C3S92MfP.js +1 -0
  114. package/bizar-dash/dist/assets/VoiceView-C3S92MfP.js.map +1 -0
  115. package/bizar-dash/dist/assets/{brain-BajPVibR.js → brain-B8oDQ4kM.js} +1 -1
  116. package/bizar-dash/dist/assets/{brain-BajPVibR.js.map → brain-B8oDQ4kM.js.map} +1 -1
  117. package/bizar-dash/dist/assets/{calendar-CaP_Bbgc.js → calendar-C1WTDPNZ.js} +1 -1
  118. package/bizar-dash/dist/assets/{calendar-CaP_Bbgc.js.map → calendar-C1WTDPNZ.js.map} +1 -1
  119. package/bizar-dash/dist/assets/chevron-down-DjgW4FtB.js +6 -0
  120. package/bizar-dash/dist/assets/chevron-down-DjgW4FtB.js.map +1 -0
  121. package/bizar-dash/dist/assets/circle-COwUk6Jw.js +6 -0
  122. package/bizar-dash/dist/assets/circle-COwUk6Jw.js.map +1 -0
  123. package/bizar-dash/dist/assets/circle-alert-D_fRRCnG.js +6 -0
  124. package/bizar-dash/dist/assets/circle-alert-D_fRRCnG.js.map +1 -0
  125. package/bizar-dash/dist/assets/circle-check-CYpMZPTO.js +6 -0
  126. package/bizar-dash/dist/assets/circle-check-CYpMZPTO.js.map +1 -0
  127. package/bizar-dash/dist/assets/clock-BsVbT1kp.js +6 -0
  128. package/bizar-dash/dist/assets/clock-BsVbT1kp.js.map +1 -0
  129. package/bizar-dash/dist/assets/{cmdk-BLWIhKrV.js → cmdk-DMW_3pWz.js} +3 -3
  130. package/bizar-dash/dist/assets/{cmdk-BLWIhKrV.js.map → cmdk-DMW_3pWz.js.map} +1 -1
  131. package/bizar-dash/dist/assets/{dnd-kit-DU8GZk7s.js → dnd-kit-DWBZ6HFE.js} +1 -1
  132. package/bizar-dash/dist/assets/{dnd-kit-DU8GZk7s.js.map → dnd-kit-DWBZ6HFE.js.map} +1 -1
  133. package/bizar-dash/dist/assets/download-Cct5qHWG.js +6 -0
  134. package/bizar-dash/dist/assets/download-Cct5qHWG.js.map +1 -0
  135. package/bizar-dash/dist/assets/external-link-CKZQsK9X.js +6 -0
  136. package/bizar-dash/dist/assets/external-link-CKZQsK9X.js.map +1 -0
  137. package/bizar-dash/dist/assets/file-text-DNFl94X6.js +6 -0
  138. package/bizar-dash/dist/assets/file-text-DNFl94X6.js.map +1 -0
  139. package/bizar-dash/dist/assets/git-branch-qmhKTtT0.js +6 -0
  140. package/bizar-dash/dist/assets/git-branch-qmhKTtT0.js.map +1 -0
  141. package/bizar-dash/dist/assets/{git-pull-request-CFRRwdxp.js → git-pull-request-o7G3ez_L.js} +1 -1
  142. package/bizar-dash/dist/assets/{git-pull-request-CFRRwdxp.js.map → git-pull-request-o7G3ez_L.js.map} +1 -1
  143. package/bizar-dash/dist/assets/index-CRPdftkz.js +1 -0
  144. package/bizar-dash/dist/assets/index-CRPdftkz.js.map +1 -0
  145. package/bizar-dash/dist/assets/index-VI2tohpo.js +1 -0
  146. package/bizar-dash/dist/assets/index-VI2tohpo.js.map +1 -0
  147. package/bizar-dash/dist/assets/main-zDgXFFYt.js +244 -0
  148. package/bizar-dash/dist/assets/main-zDgXFFYt.js.map +1 -0
  149. package/bizar-dash/dist/assets/pause-B_hjj388.js +6 -0
  150. package/bizar-dash/dist/assets/pause-B_hjj388.js.map +1 -0
  151. package/bizar-dash/dist/assets/pencil-BQXiRgKu.js +6 -0
  152. package/bizar-dash/dist/assets/pencil-BQXiRgKu.js.map +1 -0
  153. package/bizar-dash/dist/assets/play-DF3wgBsQ.js +6 -0
  154. package/bizar-dash/dist/assets/play-DF3wgBsQ.js.map +1 -0
  155. package/bizar-dash/dist/assets/plug-DpD127rq.js +6 -0
  156. package/bizar-dash/dist/assets/plug-DpD127rq.js.map +1 -0
  157. package/bizar-dash/dist/assets/{plus-CVH1JB04.js → plus-CbojvfqK.js} +1 -1
  158. package/bizar-dash/dist/assets/{plus-CVH1JB04.js.map → plus-CbojvfqK.js.map} +1 -1
  159. package/bizar-dash/dist/assets/power-off-EnQo8iQy.js +6 -0
  160. package/bizar-dash/dist/assets/power-off-EnQo8iQy.js.map +1 -0
  161. package/bizar-dash/dist/assets/power-uH0f5Ihr.js +6 -0
  162. package/bizar-dash/dist/assets/power-uH0f5Ihr.js.map +1 -0
  163. package/bizar-dash/dist/assets/refresh-ccw-BQ_hQs-U.js +6 -0
  164. package/bizar-dash/dist/assets/refresh-ccw-BQ_hQs-U.js.map +1 -0
  165. package/bizar-dash/dist/assets/refresh-cw-CYS8luDH.js +6 -0
  166. package/bizar-dash/dist/assets/refresh-cw-CYS8luDH.js.map +1 -0
  167. package/bizar-dash/dist/assets/rotate-ccw-CTVANG1v.js +6 -0
  168. package/bizar-dash/dist/assets/rotate-ccw-CTVANG1v.js.map +1 -0
  169. package/bizar-dash/dist/assets/rotate-cw-BSsC5XrT.js +6 -0
  170. package/bizar-dash/dist/assets/rotate-cw-BSsC5XrT.js.map +1 -0
  171. package/bizar-dash/dist/assets/save-kxSwq3AI.js +6 -0
  172. package/bizar-dash/dist/assets/save-kxSwq3AI.js.map +1 -0
  173. package/bizar-dash/dist/assets/send-DkuyD_Sf.js +6 -0
  174. package/bizar-dash/dist/assets/send-DkuyD_Sf.js.map +1 -0
  175. package/bizar-dash/dist/assets/shield-alert-COajyBNI.js +6 -0
  176. package/bizar-dash/dist/assets/shield-alert-COajyBNI.js.map +1 -0
  177. package/bizar-dash/dist/assets/{trash-2-JtYRQ79q.js → trash-2-BzH_id_0.js} +1 -1
  178. package/bizar-dash/dist/assets/{trash-2-JtYRQ79q.js.map → trash-2-BzH_id_0.js.map} +1 -1
  179. package/bizar-dash/dist/assets/trending-up-DWgBlnxO.js +6 -0
  180. package/bizar-dash/dist/assets/trending-up-DWgBlnxO.js.map +1 -0
  181. package/bizar-dash/dist/assets/{triangle-alert-Nzbrm0I2.js → triangle-alert-D3wjJjjj.js} +1 -1
  182. package/bizar-dash/dist/assets/{triangle-alert-Nzbrm0I2.js.map → triangle-alert-D3wjJjjj.js.map} +1 -1
  183. package/bizar-dash/dist/assets/upload--yQe-28C.js +6 -0
  184. package/bizar-dash/dist/assets/upload--yQe-28C.js.map +1 -0
  185. package/bizar-dash/dist/assets/zap-BVpFD6-i.js +6 -0
  186. package/bizar-dash/dist/assets/zap-BVpFD6-i.js.map +1 -0
  187. package/bizar-dash/dist/{v8.html → index.html} +2 -2
  188. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  189. package/bizar-dash/src/server/agents-store.mjs +1 -0
  190. package/bizar-dash/src/server/api.mjs +10 -0
  191. package/bizar-dash/src/server/claude-runner.mjs +5 -0
  192. package/bizar-dash/src/server/dialog-store.mjs +84 -2
  193. package/bizar-dash/src/server/memory-lightrag.mjs +14 -9
  194. package/bizar-dash/src/server/progress-parser.mjs +33 -5
  195. package/bizar-dash/src/server/progress-parser.test.mjs +24 -0
  196. package/bizar-dash/src/server/routes/admin.mjs +163 -0
  197. package/bizar-dash/src/server/routes/agents-cc.mjs +171 -24
  198. package/bizar-dash/src/server/routes/agents.mjs +20 -5
  199. package/bizar-dash/src/server/routes/claude-session-detail.mjs +38 -0
  200. package/bizar-dash/src/server/routes/dialogs.mjs +31 -0
  201. package/bizar-dash/src/server/routes/goals.mjs +117 -13
  202. package/bizar-dash/src/server/routes/overview.mjs +131 -4
  203. package/bizar-dash/src/server/routes/overview.test.mjs +65 -0
  204. package/bizar-dash/src/server/routes/providers.mjs +53 -0
  205. package/bizar-dash/src/server/routes/spawn.mjs +59 -0
  206. package/bizar-dash/src/server/routes/tasks.mjs +51 -1
  207. package/bizar-dash/src/server/server.mjs +21 -10
  208. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  209. package/bizar-dash/src/web/v8/App.tsx +158 -8
  210. package/bizar-dash/src/web/v8/__tests__/BackgroundJobsView.test.tsx +172 -0
  211. package/bizar-dash/src/web/v8/__tests__/MemoryView.test.tsx +91 -0
  212. package/bizar-dash/src/web/v8/__tests__/NotificationsPopover.test.tsx +91 -0
  213. package/bizar-dash/src/web/v8/__tests__/SchedulesView.test.tsx +157 -0
  214. package/bizar-dash/src/web/v8/__tests__/Topbar.test.tsx +86 -0
  215. package/bizar-dash/src/web/v8/__tests__/admin-view.test.tsx +105 -0
  216. package/bizar-dash/src/web/v8/__tests__/agent-card-metrics.test.tsx +54 -0
  217. package/bizar-dash/src/web/v8/__tests__/agent-detail-tasks.test.tsx +68 -0
  218. package/bizar-dash/src/web/v8/__tests__/agent-hierarchy.test.tsx +79 -0
  219. package/bizar-dash/src/web/v8/__tests__/agents-stuck-banner.test.tsx +142 -0
  220. package/bizar-dash/src/web/v8/__tests__/artifacts-view.test.tsx +102 -0
  221. package/bizar-dash/src/web/v8/__tests__/audit-fixes.test.tsx +139 -0
  222. package/bizar-dash/src/web/v8/__tests__/auth-view.test.tsx +94 -0
  223. package/bizar-dash/src/web/v8/__tests__/changelog.test.tsx +79 -0
  224. package/bizar-dash/src/web/v8/__tests__/chat-types.test.ts +55 -0
  225. package/bizar-dash/src/web/v8/__tests__/chat-view.test.tsx +142 -0
  226. package/bizar-dash/src/web/v8/__tests__/claude-sessions-view.test.tsx +159 -0
  227. package/bizar-dash/src/web/v8/__tests__/clipboard-view.test.tsx +90 -0
  228. package/bizar-dash/src/web/v8/__tests__/config-view.test.tsx +111 -0
  229. package/bizar-dash/src/web/v8/__tests__/dialogs-view.test.tsx +81 -0
  230. package/bizar-dash/src/web/v8/__tests__/env-vars-view.test.tsx +123 -0
  231. package/bizar-dash/src/web/v8/__tests__/goals-cc-roundtrip.test.tsx +94 -0
  232. package/bizar-dash/src/web/v8/__tests__/history-view.test.tsx +96 -0
  233. package/bizar-dash/src/web/v8/__tests__/lightrag-view.test.tsx +90 -0
  234. package/bizar-dash/src/web/v8/__tests__/misc-view.test.tsx +79 -0
  235. package/bizar-dash/src/web/v8/__tests__/mods-view.test.tsx +123 -0
  236. package/bizar-dash/src/web/v8/__tests__/new-views.test.tsx +177 -0
  237. package/bizar-dash/src/web/v8/__tests__/obsidian-view.test.tsx +82 -0
  238. package/bizar-dash/src/web/v8/__tests__/overview-trends.test.tsx +87 -0
  239. package/bizar-dash/src/web/v8/__tests__/projects-view.test.tsx +134 -0
  240. package/bizar-dash/src/web/v8/__tests__/providers-view.test.tsx +100 -0
  241. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +10 -4
  242. package/bizar-dash/src/web/v8/__tests__/update-view.test.tsx +89 -0
  243. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +6 -0
  244. package/bizar-dash/src/web/v8/__tests__/voice-view.test.tsx +80 -0
  245. package/bizar-dash/src/web/v8/data/types.ts +75 -2
  246. package/bizar-dash/src/web/v8/data/useWebSocket.ts +54 -1
  247. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +98 -13
  248. package/bizar-dash/src/web/v8/shell/Topbar.tsx +30 -4
  249. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +96 -15
  250. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +202 -15
  251. package/bizar-dash/src/web/v8/ui/agents/AgentLiveOutput.tsx +252 -0
  252. package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +1 -1
  253. package/bizar-dash/src/web/v8/ui/chat/ChatDrawer.tsx +208 -0
  254. package/bizar-dash/src/web/v8/ui/chat/EventStream.tsx +83 -0
  255. package/bizar-dash/src/web/v8/ui/chat/MessageBubble.tsx +174 -0
  256. package/bizar-dash/src/web/v8/ui/data/ListHeader.tsx +94 -0
  257. package/bizar-dash/src/web/v8/ui/feedback/ErrorState.tsx +116 -0
  258. package/bizar-dash/src/web/v8/ui/feedback/NotificationsPopover.tsx +239 -0
  259. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +34 -1
  260. package/bizar-dash/src/web/v8/ui/index.ts +7 -1
  261. package/bizar-dash/src/web/v8/ui/tasks/TaskDetail.tsx +313 -0
  262. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +465 -33
  263. package/bizar-dash/src/web/v8/views/Admin/AdminView.tsx +210 -0
  264. package/bizar-dash/src/web/v8/views/Agents/AgentHierarchy.tsx +212 -0
  265. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +328 -21
  266. package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +241 -0
  267. package/bizar-dash/src/web/v8/views/Auth/AuthView.tsx +175 -0
  268. package/bizar-dash/src/web/v8/views/BackgroundJobs/BackgroundJobsView.tsx +442 -0
  269. package/bizar-dash/src/web/v8/views/Backup/BackupView.tsx +204 -0
  270. package/bizar-dash/src/web/v8/views/Chat/ChatView.tsx +356 -0
  271. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionDetail.tsx +133 -0
  272. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionsView.tsx +331 -0
  273. package/bizar-dash/src/web/v8/views/Clipboard/ClipboardView.tsx +210 -0
  274. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +22 -7
  275. package/bizar-dash/src/web/v8/views/Config/ConfigView.tsx +364 -0
  276. package/bizar-dash/src/web/v8/views/Diagnostics/DiagnosticsView.tsx +160 -0
  277. package/bizar-dash/src/web/v8/views/Dialogs/DialogsView.tsx +196 -0
  278. package/bizar-dash/src/web/v8/views/Doctor/DoctorView.tsx +181 -0
  279. package/bizar-dash/src/web/v8/views/EnvVars/EnvVarsView.tsx +365 -0
  280. package/bizar-dash/src/web/v8/views/Eval/EvalView.tsx +278 -0
  281. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +169 -11
  282. package/bizar-dash/src/web/v8/views/Headroom/HeadroomView.tsx +201 -0
  283. package/bizar-dash/src/web/v8/views/History/HistoryView.tsx +227 -0
  284. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +13 -3
  285. package/bizar-dash/src/web/v8/views/LightRAG/LightRAGView.tsx +183 -0
  286. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +203 -22
  287. package/bizar-dash/src/web/v8/views/Misc/MiscView.tsx +159 -0
  288. package/bizar-dash/src/web/v8/views/Mods/ModsView.tsx +348 -0
  289. package/bizar-dash/src/web/v8/views/Notifications/NotificationsView.tsx +178 -0
  290. package/bizar-dash/src/web/v8/views/Obsidian/ObsidianView.tsx +193 -0
  291. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +114 -11
  292. package/bizar-dash/src/web/v8/views/Projects/ProjectsView.tsx +253 -0
  293. package/bizar-dash/src/web/v8/views/Providers/ProvidersView.tsx +371 -0
  294. package/bizar-dash/src/web/v8/views/Router.tsx +135 -0
  295. package/bizar-dash/src/web/v8/views/Schedules/SchedulesView.tsx +427 -0
  296. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +343 -34
  297. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +177 -12
  298. package/bizar-dash/src/web/v8/views/Update/UpdateView.tsx +270 -0
  299. package/bizar-dash/src/web/v8/views/Usage/UsageView.tsx +210 -0
  300. package/bizar-dash/src/web/v8/views/Voice/VoiceView.tsx +192 -0
  301. package/bizar-dash/tests/goals-decompose.test.mjs +5 -3
  302. package/bizar-dash/tests/tasks-patch-routes.test.mjs +194 -0
  303. package/bizar-dash/vite.config.ts +11 -3
  304. package/cli/__tests__/esm-no-require.test.mjs +97 -0
  305. package/cli/commands/tailscale.mjs +1 -3
  306. package/cli/commands/voice.mjs +2 -2
  307. package/cli/service-env.mjs +4 -5
  308. package/package.json +12 -3
  309. package/packages/sdk/dist/agent-registry.d.ts +134 -0
  310. package/packages/sdk/dist/agent-registry.js +228 -0
  311. package/packages/sdk/dist/consensus/byzantine.d.ts +159 -0
  312. package/packages/sdk/dist/consensus/byzantine.js +507 -0
  313. package/packages/sdk/dist/consensus/index.d.ts +60 -0
  314. package/packages/sdk/dist/consensus/index.js +76 -0
  315. package/packages/sdk/dist/consensus/queen.d.ts +86 -0
  316. package/packages/sdk/dist/consensus/queen.js +158 -0
  317. package/packages/sdk/dist/consensus/types.d.ts +155 -0
  318. package/packages/sdk/dist/consensus/types.js +29 -0
  319. package/packages/sdk/dist/dangerous-patterns.d.ts +27 -0
  320. package/packages/sdk/dist/dangerous-patterns.js +107 -0
  321. package/packages/sdk/dist/federation/audit.d.ts +71 -0
  322. package/packages/sdk/dist/federation/audit.js +133 -0
  323. package/packages/sdk/dist/federation/budget.d.ts +111 -0
  324. package/packages/sdk/dist/federation/budget.js +227 -0
  325. package/packages/sdk/dist/federation/envelope.d.ts +83 -0
  326. package/packages/sdk/dist/federation/envelope.js +92 -0
  327. package/packages/sdk/dist/federation/hmac.d.ts +61 -0
  328. package/packages/sdk/dist/federation/hmac.js +120 -0
  329. package/packages/sdk/dist/federation/index.d.ts +108 -0
  330. package/packages/sdk/dist/federation/index.js +275 -0
  331. package/packages/sdk/dist/federation/pii.d.ts +72 -0
  332. package/packages/sdk/dist/federation/pii.js +178 -0
  333. package/packages/sdk/dist/federation/policy.d.ts +50 -0
  334. package/packages/sdk/dist/federation/policy.js +76 -0
  335. package/packages/sdk/dist/federation/trust.d.ts +80 -0
  336. package/packages/sdk/dist/federation/trust.js +126 -0
  337. package/packages/sdk/dist/fingerprint.d.ts +18 -0
  338. package/packages/sdk/dist/fingerprint.js +0 -0
  339. package/packages/sdk/dist/index.d.ts +25 -0
  340. package/packages/sdk/dist/index.js +25 -0
  341. package/packages/sdk/dist/mcp/bin.d.ts +16 -0
  342. package/packages/sdk/dist/mcp/bin.js +46 -0
  343. package/packages/sdk/dist/mcp/server.d.ts +105 -0
  344. package/packages/sdk/dist/mcp/server.js +682 -0
  345. package/packages/sdk/dist/memory/index.d.ts +43 -0
  346. package/packages/sdk/dist/memory/index.js +159 -0
  347. package/packages/sdk/dist/router/codemod-intent.d.ts +68 -0
  348. package/packages/sdk/{src/router/codemod-intent.ts → dist/router/codemod-intent.js} +53 -66
  349. package/packages/sdk/dist/router/index.d.ts +100 -0
  350. package/packages/sdk/dist/router/index.js +149 -0
  351. package/packages/sdk/dist/router/memory-distillation.d.ts +58 -0
  352. package/packages/sdk/dist/router/memory-distillation.js +195 -0
  353. package/packages/sdk/dist/router/model-router.d.ts +83 -0
  354. package/packages/sdk/dist/router/model-router.js +207 -0
  355. package/packages/sdk/dist/router/q-learning-router.d.ts +85 -0
  356. package/packages/sdk/dist/router/q-learning-router.js +273 -0
  357. package/packages/sdk/dist/swarm-topology.d.ts +87 -0
  358. package/packages/sdk/dist/swarm-topology.js +219 -0
  359. package/packages/sdk/dist/version.d.ts +5 -0
  360. package/packages/sdk/dist/version.js +5 -0
  361. package/packages/sdk/package.json +1 -1
  362. package/plugins/bizar/LICENSE +21 -0
  363. package/plugins/bizar/dist/index.d.ts +25 -0
  364. package/plugins/bizar/dist/index.js +32 -0
  365. package/plugins/bizar/package.json +18 -0
  366. package/.claude/CLAUDE.md +0 -15
  367. package/.claude/agents/_shared/AGENT_BASELINE.md +0 -168
  368. package/.claude/agents/_shared/CLAUDE_TOOLS.md +0 -412
  369. package/.claude/agents/_shared/SKILLS.md +0 -109
  370. package/.claude/agents/agent-browser.md +0 -80
  371. package/.claude/agents/baldr.md +0 -49
  372. package/.claude/agents/forseti.md +0 -51
  373. package/.claude/agents/frigg.md +0 -42
  374. package/.claude/agents/heimdall.md +0 -33
  375. package/.claude/agents/hermod.md +0 -53
  376. package/.claude/agents/mimir.md +0 -49
  377. package/.claude/agents/odin.md +0 -287
  378. package/.claude/agents/quick.md +0 -34
  379. package/.claude/agents/semble-search.md +0 -50
  380. package/.claude/agents/thor.md +0 -53
  381. package/.claude/agents/tyr.md +0 -56
  382. package/.claude/agents/vidarr.md +0 -54
  383. package/.claude/agents/vor.md +0 -53
  384. package/.claude/commands/audit.md +0 -25
  385. package/.claude/commands/bizar.md +0 -22
  386. package/.claude/commands/explain.md +0 -17
  387. package/.claude/commands/goal.md +0 -98
  388. package/.claude/commands/init.md +0 -29
  389. package/.claude/commands/learn.md +0 -44
  390. package/.claude/commands/plan.md +0 -35
  391. package/.claude/commands/plow-through.md +0 -50
  392. package/.claude/commands/pr-review.md +0 -49
  393. package/.claude/commands/setup-provider.md +0 -96
  394. package/.claude/commands/tailscale-serve.md +0 -100
  395. package/.claude/commands/team.md +0 -132
  396. package/.claude/commands/test.md +0 -62
  397. package/.claude/commands/validate.md +0 -68
  398. package/.claude/commands/visual-plan.md +0 -24
  399. package/.claude/hooks/README.md +0 -92
  400. package/.claude/hooks/posttooluse-editwrite.mjs +0 -91
  401. package/.claude/hooks/pretooluse-bash.mjs +0 -81
  402. package/.claude/hooks/pretooluse-editwrite.mjs +0 -139
  403. package/.claude/hooks/sessionend-recall.mjs +0 -74
  404. package/.claude/hooks/sessionstart-prime.mjs +0 -80
  405. package/.claude/hooks/userpromptsubmit-tag.mjs +0 -80
  406. package/.claude/hooks/worker-suggest.mjs +0 -110
  407. package/.claude/settings.json +0 -125
  408. package/.claude/settings.local.json +0 -7
  409. package/.claude/skills/9router/SKILL.md +0 -80
  410. package/.claude/skills/9router-chat/SKILL.md +0 -73
  411. package/.claude/skills/9router-embeddings/SKILL.md +0 -69
  412. package/.claude/skills/9router-image/SKILL.md +0 -86
  413. package/.claude/skills/9router-stt/SKILL.md +0 -79
  414. package/.claude/skills/9router-tts/SKILL.md +0 -80
  415. package/.claude/skills/9router-web-fetch/SKILL.md +0 -99
  416. package/.claude/skills/9router-web-search/SKILL.md +0 -91
  417. package/.claude/skills/bizar/README.md +0 -9
  418. package/.claude/skills/bizar/SKILL.md +0 -450
  419. package/.claude/skills/cpp-coding-standards/README.md +0 -28
  420. package/.claude/skills/cpp-coding-standards/SKILL.md +0 -634
  421. package/.claude/skills/cpp-coding-standards/references/concurrency.md +0 -320
  422. package/.claude/skills/cpp-coding-standards/references/error-handling.md +0 -229
  423. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  424. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  425. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  426. package/.claude/skills/cpp-testing/README.md +0 -28
  427. package/.claude/skills/cpp-testing/SKILL.md +0 -304
  428. package/.claude/skills/cpp-testing/references/coverage.md +0 -370
  429. package/.claude/skills/cpp-testing/references/framework-compare.md +0 -175
  430. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  431. package/.claude/skills/cpp-testing/references/mocking.md +0 -364
  432. package/.claude/skills/cpp-testing/references/tdd-workflow.md +0 -308
  433. package/.claude/skills/cubesandbox/SKILL.md +0 -148
  434. package/.claude/skills/embedded-esp-idf/README.md +0 -41
  435. package/.claude/skills/embedded-esp-idf/SKILL.md +0 -439
  436. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  437. package/.claude/skills/embedded-esp-idf/references/host-tests.md +0 -164
  438. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  439. package/.claude/skills/embedded-esp-idf/references/kconfig.md +0 -159
  440. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  441. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  442. package/.claude/skills/embedded-esp-idf/references/nvs.md +0 -121
  443. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  444. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  445. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  446. package/.claude/skills/glyph/SKILL.md +0 -163
  447. package/.claude/skills/harness-engineering/SKILL.md +0 -143
  448. package/.claude/skills/lightrag/SKILL.md +0 -81
  449. package/.claude/skills/memory-protocol/SKILL.md +0 -105
  450. package/.claude/skills/obsidian/SKILL.md +0 -306
  451. package/.claude/skills/read-the-damn-docs/SKILL.md +0 -113
  452. package/.claude/skills/self-improvement/SKILL.md +0 -64
  453. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js +0 -6
  454. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js.map +0 -1
  455. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js +0 -1
  456. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js.map +0 -1
  457. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js +0 -28
  458. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js.map +0 -1
  459. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js +0 -1
  460. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js.map +0 -1
  461. package/bizar-dash/dist/assets/Button-RmN1RKhE.js +0 -6
  462. package/bizar-dash/dist/assets/Button-RmN1RKhE.js.map +0 -1
  463. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js +0 -6
  464. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js.map +0 -1
  465. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js.map +0 -1
  466. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js +0 -67
  467. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js.map +0 -1
  468. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js +0 -13
  469. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js.map +0 -1
  470. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js +0 -1
  471. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js.map +0 -1
  472. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js +0 -16
  473. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js.map +0 -1
  474. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js +0 -10
  475. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js.map +0 -1
  476. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js +0 -43
  477. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js.map +0 -1
  478. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js +0 -1
  479. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js +0 -1
  480. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js.map +0 -1
  481. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js +0 -16
  482. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js.map +0 -1
  483. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js +0 -1
  484. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js.map +0 -1
  485. package/bizar-dash/dist/assets/index-AL3OLUfz.js +0 -1
  486. package/bizar-dash/dist/assets/index-AL3OLUfz.js.map +0 -1
  487. package/bizar-dash/dist/assets/main-LxX9zTRk.js +0 -109
  488. package/bizar-dash/dist/assets/main-LxX9zTRk.js.map +0 -1
  489. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js +0 -11
  490. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js.map +0 -1
  491. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js +0 -1
  492. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js.map +0 -1
  493. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js +0 -1
  494. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js.map +0 -1
  495. package/bizar-dash/dist/assets/wrench-B7go551L.js +0 -6
  496. package/bizar-dash/dist/assets/wrench-B7go551L.js.map +0 -1
  497. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +0 -106
  498. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +0 -62
  499. package/packages/sdk/ARCHITECTURE.md +0 -70
  500. package/packages/sdk/README.md +0 -80
  501. package/packages/sdk/src/agent-registry.ts +0 -304
  502. package/packages/sdk/src/consensus/byzantine.ts +0 -587
  503. package/packages/sdk/src/consensus/index.ts +0 -147
  504. package/packages/sdk/src/consensus/queen.ts +0 -173
  505. package/packages/sdk/src/consensus/types.ts +0 -199
  506. package/packages/sdk/src/dangerous-patterns.ts +0 -127
  507. package/packages/sdk/src/federation/audit.ts +0 -156
  508. package/packages/sdk/src/federation/budget.ts +0 -269
  509. package/packages/sdk/src/federation/envelope.ts +0 -144
  510. package/packages/sdk/src/federation/hmac.ts +0 -160
  511. package/packages/sdk/src/federation/index.ts +0 -443
  512. package/packages/sdk/src/federation/pii.ts +0 -241
  513. package/packages/sdk/src/federation/policy.ts +0 -112
  514. package/packages/sdk/src/federation/trust.ts +0 -146
  515. package/packages/sdk/src/fingerprint.ts +0 -0
  516. package/packages/sdk/src/index.ts +0 -114
  517. package/packages/sdk/src/mcp/bin.ts +0 -51
  518. package/packages/sdk/src/mcp/server.ts +0 -848
  519. package/packages/sdk/src/memory/index.ts +0 -160
  520. package/packages/sdk/src/router/index.ts +0 -247
  521. package/packages/sdk/src/router/memory-distillation-shim.mjs +0 -18
  522. package/packages/sdk/src/router/memory-distillation.ts +0 -249
  523. package/packages/sdk/src/router/model-router.ts +0 -235
  524. package/packages/sdk/src/router/q-learning-router.ts +0 -304
  525. package/packages/sdk/src/swarm-topology.ts +0 -279
  526. package/packages/sdk/src/version.ts +0 -4
  527. package/packages/sdk/tests/agent-registry.test.ts +0 -285
  528. package/packages/sdk/tests/consensus.test.ts +0 -376
  529. package/packages/sdk/tests/federation/audit.test.ts +0 -164
  530. package/packages/sdk/tests/federation/budget.test.ts +0 -189
  531. package/packages/sdk/tests/federation/envelope.test.ts +0 -120
  532. package/packages/sdk/tests/federation/hmac.test.ts +0 -194
  533. package/packages/sdk/tests/federation/orchestrator.test.ts +0 -176
  534. package/packages/sdk/tests/federation/pii.test.ts +0 -106
  535. package/packages/sdk/tests/federation/policy.test.ts +0 -140
  536. package/packages/sdk/tests/federation/trust.test.ts +0 -124
  537. package/packages/sdk/tests/mcp-tools.test.ts +0 -204
  538. package/packages/sdk/tests/memory-distillation.test.mjs +0 -186
  539. package/packages/sdk/tests/model-router.test.mjs +0 -108
  540. package/packages/sdk/tests/q-learning-router.test.mjs +0 -100
  541. package/packages/sdk/tests/router-orchestrator.test.mjs +0 -172
  542. package/packages/sdk/tests/router.test.mjs +0 -91
  543. package/packages/sdk/tests/sdk.test.mjs +0 -172
  544. package/packages/sdk/tests/swarm-topology.test.ts +0 -258
  545. package/packages/sdk/tsconfig.json +0 -25
  546. /package/bizar-dash/src/web/{v8.html → index.html} +0 -0
@@ -0,0 +1,190 @@
1
+ # Browser Verification — v10.0.5
2
+
3
+ > Real Chrome-for-Testing runs against a freshly-booted dashboard
4
+ > server. Closes every "no transcript evidence" stop-hook gap from
5
+ > the v10.0.1 rollup, and ships a logged-in mutation round-trip
6
+ > (Settings PUT / Agent POST / Task POST / CC-style goal append).
7
+
8
+ ## How to reproduce
9
+
10
+ ```sh
11
+ # From repo root:
12
+ node tests/e2e/dashboard-browser-smoke.mjs # 7 routes, Overview screenshot
13
+ node tests/e2e/dashboard-auth-walkthrough.mjs # 12 sidebar views, per-view proof
14
+ node tests/e2e/dashboard-mutation-roundtrip.mjs # 4 mutation round-trips to disk
15
+ node tests/e2e/cold-boot-perf.mjs # boot latency regression
16
+ ```
17
+
18
+ Spawn with `HOME=/tmp/<run>-home-<pid>` so all backend stores
19
+ (agents, tasks, settings, agent-status, projects) redirect to a
20
+ tmp directory — never touches the user's real `$HOME`.
21
+
22
+ Each script writes its shots + `results.json` into a fresh
23
+ `/tmp/bh-{smoke|walkthrough|cold-boot}-<pid>/` directory.
24
+
25
+ ## What each run proves
26
+
27
+ ### 1. `dashboard-browser-smoke.mjs` (v10-S7)
28
+
29
+ First landing-page evidence. 9/9 PASS — `01-landing.png` is a real
30
+ Overview with sidebar groups (Workspace / Operations / Libraries /
31
+ System), StatTiles reading `Goals at risk 2/4`, `Agents running
32
+ 0/5`, `Active tasks 0/0`, `Tokens (24h) —`, Needs-Attention
33
+ "2 of 4 goals at risk. Review PROGRESS.md or the Goals view", and
34
+ the active-project picker showing the persisted fixture name.
35
+
36
+ ### 2. `dashboard-auth-walkthrough.mjs` (v10-S10 + v10.0.2, EXPANDED)
37
+
38
+ Closes the v10-S7 limitation: every reachable sidebar view is now
39
+ exercised in a logged-in browser state. Drives `agent-browser`
40
+ through real sidebar clicks (state-based router, not hash),
41
+ screenshots each view, asserts the active sidebar item matches and
42
+ the main region renders view-specific content past the auth gate.
43
+ **15/15 PASS**:
44
+
45
+ | View | innerTextBytes | Active sidebar match | Content match |
46
+ |--------------|---------------:|----------------------|-------------------------------------|
47
+ | Overview | 367 | overview | Active project + Goals at-risk tile |
48
+ | Tasks | 220 | tasks | Kanban columns / count tile |
49
+ | Goals | 740 | goals | G-001/G-002/G-003 cards |
50
+ | Agents | 242 | agents | odin/thor/frigg roster |
51
+ | Activity | 321 | activity | Day-grouped changelog |
52
+ | Memory | 247 | memory | Memory list / source chips |
53
+ | Schedules | 155 | schedules | Recurring schedule list |
54
+ | Background | 147 | background | Background instances / Pause |
55
+ | Skills | 160 | skills | Skills library |
56
+ | MCPs | 152 | mcps | MCP library |
57
+ | Hooks | 164 | hooks | Hooks library |
58
+ | Settings | 4011 | settings | 19-section nav + content |
59
+
60
+ The walkthrough also seeds 3 Bizar agents (odin/thor/frigg), 4
61
+ tasks across the queued/doing/done/blocked columns, a CC session
62
+ stub at `$HOME/.config/bizar/agent-status.json`, and 3 goals in
63
+ `projectRoot/.bizar/PROGRESS.md`. Each reachable sidebar item is
64
+ now screenshot-verified with view-specific content.
65
+
66
+ > Note on chat: the v8 sidebar (`App.tsx:125–160` with
67
+ > `defaultSections={false}`) intentionally does not render a chat
68
+ > button. The 12 items above are the full set the dashboard ships
69
+ > in v10.0.2.
70
+
71
+ ### 3. `dashboard-mutation-roundtrip.mjs` (v10.0.2, NEW)
72
+
73
+ Closes the v10.0.1 stop-hook gap: "control and configure
74
+ everything" had no transcript proving any click in the logged-in
75
+ browser actually mutated the backend. Now 4 mutations, each
76
+ proves on-disk persistence **and** that the same API endpoint
77
+ the view consumes returns the new row. **4/4 PASS**:
78
+
79
+ | Mutation | Path on disk | GET-back check |
80
+ |----------------------------|-------------------------------------------------------------|-------------------------------|
81
+ | `PUT /api/settings` | `~/.config/bizar/settings.json` | `GET /api/settings` envelope |
82
+ | `POST /api/agents` | `~/.config/cline/agents/<name>.md` | `GET /api/agents` includes |
83
+ | `POST /api/tasks` | `~/.config/cline/projects/<id>/tasks.json` | `GET /api/tasks` envelope |
84
+ | `POST /api/goals` (CC `/goal`) | `projectRoot/.bizar/PROGRESS.md` | `GET /api/goals` includes |
85
+
86
+ Each result row writes its on-disk evidence (file path + last 280
87
+ bytes after the write) into `results.json` so a reviewer can grep
88
+ the evidence directory for proof.
89
+
90
+ ### 4. `cold-boot-perf.mjs` (v10-S9, NEW)
91
+
92
+ Regression for the cold-boot event-loop starvation bug. With both
93
+ opt-outs (`BIZAR_LIGHTRAG_AUTOSTART=0` and `BIZAR_HEADROOM_AUTOSTART=0`)
94
+ the server listens + serves the first `/api/auth/status` request
95
+ inside 2s. Without the opt-outs the boot stays bounded by the async
96
+ fixes shipped in `memory-lightrag.mjs` (sync `execFileSync('command', ...)`
97
+ replaced with async `execFile`) and the new `BIZAR_HEADROOM_AUTOSTART=0`
98
+ env gate in `server.mjs`. **2/2 PASS** — `bootMs=42, firstFetchMs=21`
99
+ (was 3000+ before fix).
100
+
101
+ ## Auth model — why no token in the browser
102
+
103
+ `auth.mjs:isAuthRequired()` auto-trusts requests from `127.0.0.1`,
104
+ `::1`, and `::ffff:127.0.0.1`. The browser connects to the dashboard
105
+ over loopback (same as a real user opening it locally), so no bearer
106
+ token needs to be passed. The token still exists for non-loopback
107
+ bind and for plugin-to-dashboard auth — see `~/.cache/bizarharness/dash-auth.json`
108
+ for the v2 HTTP-Basic password and `BIZAR_DASHBOARD_SECRET_PATH` for
109
+ the legacy 64-hex bearer. The walkthrough test neither reads nor
110
+ materializes either.
111
+
112
+ ## Found and reported (NOT fixed in this sprint)
113
+
114
+ None for v10.0.2. The cold-boot event-loop starvation from v10-S7
115
+ remains fixed (`memory-lightrag.mjs` async + `BIZAR_HEADROOM_AUTOSTART=0`
116
+ env gate). The walkthrough + mutation round-trip close the
117
+ per-view-verification and "control and configure everything" gaps.
118
+
119
+ ## Remaining intentional gaps
120
+
121
+ - **Bundle script tag only.** `dashboard.main_bundle` proves the
122
+ `<script src="/assets/main-*.js">` tag is in the HTML. It does
123
+ not prove the JS executed without errors (would need a console
124
+ listener). ponytail: add a CDP `Runtime.consoleAPICalled`
125
+ subscriber to the smoke.
126
+ - **Chat view.** The v8 sidebar (`App.tsx:125–160`) does not render
127
+ a chat button — ChatView exists but is reachable only via the
128
+ command palette. The walkthrough therefore walks 12 items, not 13.
129
+
130
+ ## Recent run evidence
131
+
132
+ - v10.0.2 mutation roundtrip PID 1517930 — 4/4 PASS,
133
+ `results.json` in `/tmp/bh-mut-1517935/`.
134
+ - v10.0.2 walkthrough PID 1511343 — 15/15 PASS, 12 view screenshots
135
+ in `/tmp/bh-walkthrough-1511347/`.
136
+ - v10.0.3 surfaces matrix — 13/13 PASS, 12 screenshots +
137
+ `results.json` in `/tmp/bh-mat-<pid>/`.
138
+ - v10.0.3 coverage proof — 7/7 PASS, 4 screenshots +
139
+ `results.json` in `/tmp/bh-cov-<pid>/`.
140
+ - v10.0.3 CC bridge — 7/7 PASS, 4 screenshots +
141
+ `results.json` in `/tmp/bh-cc-<pid>/`.
142
+ - v10.0.3 CRUD round-trip — 17/17 PASS, 16 mutations across
143
+ agents/tasks/goals/schedules, `results.json` in
144
+ `/tmp/bh-crud-<pid>/`.
145
+ - v10.0.3 data-driven — 6/6 PASS, 3 screenshots +
146
+ `results.json` in `/tmp/bh-data-<pid>/`.
147
+ - v10.0.4 cc-disk fallback — 5/5 PASS, screenshots +
148
+ `results.json` in `/tmp/bh-cc-disk-<pid>/`.
149
+ - v10.0.4 goal-slash — 6/6 PASS, screenshots +
150
+ `results.json` in `/tmp/bh-goal-slash-<pid>/`.
151
+ - v10.0.4 config coverage — 7/7 PASS, screenshots +
152
+ `results.json` in `/tmp/bh-cfg-<pid>/`.
153
+ - v10.0.5 full-surfaces PID 2523918 — **37/37 PASS**, walks
154
+ all Router cases, screenshots in `/tmp/bh-full-<pid>/`.
155
+ - v10.0.5 tier3-batch-a — **7/7 PASS**, mutations across
156
+ env-vars.test, eval.schedules CRUD, mods.reinstall,
157
+ providers.add-key, `results.json` in `/tmp/tier3a-<pid>/`.
158
+ - v10.0.5 tier3-batch-c — **14/14 PASS**, mutations across
159
+ dialogs.{approve,deny,skip,patch}, providers.{create,update,
160
+ delete,enable,disable}, claude-sessions.resume,
161
+ `results.json` in `/tmp/tier3c-<pid>/`.
162
+ - v10.0.5 matrix PID 2527262 — **13/13 PASS**, regression
163
+ guard for v10.0.3 surfaces matrix.
164
+ - v10.0.5 crud-roundtrip PID 2529494 — **17/17 PASS**,
165
+ regression guard for v10.0.3 CRUD round-trip.
166
+ - v10-S10 walkthrough PID 837829 — 8/8 PASS (legacy reference).
167
+ - v10-S9 cold-boot PID 814729 — 2/2 PASS.
168
+ - v10-S7 smoke PID 782897 — 9/9 PASS, 7 screenshots ~65KB.
169
+
170
+ ## See also
171
+
172
+ - `tests/e2e/dashboard-browser-smoke.mjs` — landing-page evidence
173
+ - `tests/e2e/dashboard-auth-walkthrough.mjs` — per-view evidence
174
+ - `tests/e2e/dashboard-mutation-roundtrip.mjs` — mutation round-trip
175
+ - `tests/e2e/dashboard-coverage-proof.mjs` — per-agent status grid (v10.0.3-S2)
176
+ - `tests/e2e/dashboard-cc-bridge.mjs` — CC merge + /goal slash (v10.0.3-S3)
177
+ - `tests/e2e/dashboard-crud-roundtrip.mjs` — 16-mutation CRUD (v10.0.3-S4)
178
+ - `tests/e2e/dashboard-data-driven.mjs` — metric tiles + status coverage (v10.0.3-S5)
179
+ - `tests/e2e/dashboard-surfaces-matrix.mjs` — 12-route surfaces matrix (v10.0.3-S6)
180
+ - `tests/e2e/dashboard-cc-disk-fallback.mjs` — CC disk fallback + enrichSession fix (v10.0.4-S1)
181
+ - `tests/e2e/dashboard-cc-goal-slash.mjs` — `/goal` slash command round-trip (v10.0.4-S2)
182
+ - `tests/e2e/dashboard-config-coverage.mjs` — Settings reset + plugin-options + providers/projects/mods (v10.0.4-S3)
183
+ - `tests/e2e/dashboard-full-surfaces.mjs` — 37-route reachability + view-root testids (v10.0.5-M1)
184
+ - `tests/e2e/dashboard-tier3-batch-a.mjs` — 8 missing UI buttons against existing routes (v10.0.5-M2a)
185
+ - `tests/e2e/dashboard-tier3-batch-c.mjs` — 8 new server endpoints + UI buttons (v10.0.5-M2b+M2c)
186
+ - `tests/e2e/cold-boot-perf.mjs` — cold-boot regression
187
+ - `tests/e2e/goals-cc-roundtrip.mjs` — goals CC-shape round-trip
188
+ - `tests/e2e/agent-restart-roundtrip.mjs` — agent restart round-trip
189
+ - `CONTROL_SURFACES.md` — what the dashboard can actually mutate
190
+ - `SETTINGS_AUDIT.md` — Settings-page row-by-row audit
@@ -1,5 +1,457 @@
1
1
  # @polderlabs/bizar-dash — Changelog
2
2
 
3
+ ## v10.0.5 — 2026-07-16
4
+
5
+ ### Highlights
6
+
7
+ Four atomic moves close the umbrella brief end-to-end:
8
+ **37/37 surfaces reachable**, **16 Tier-3 mutations proven
9
+ with E2E**, **8 silent-failure views now surface a
10
+ recoverable error**, and **9 views gained a data-driven
11
+ list header** (count + sparkline + filter chips).
12
+
13
+ ### Move 1 — Sidebar reachability
14
+
15
+ - `App.tsx` sections array grew from 12 hard-coded items to
16
+ 24, wiring every section already declared in
17
+ `Sidebar.tsx:DEFAULT_SECTIONS`.
18
+ - 17 view files got a `<view>-view` testid on their root
19
+ container.
20
+ - `tests/e2e/dashboard-full-surfaces.mjs` walks all 37 Router
21
+ cases, clicks each sidebar item, and asserts the `<view>-view`
22
+ root testid appears. **37/37 PASS.**
23
+
24
+ ### Move 2 — Tier-3 mutation coverage
25
+
26
+ 16 atomic mutations across 8 endpoints, all proven with E2E.
27
+
28
+ - **Move 2a — 8 missing UI buttons** wired against existing
29
+ server endpoints: Projects refresh, EnvVars test, Eval
30
+ schedule add/delete, Mods reinstall-instructions + edit,
31
+ Providers add-key, ClaudeSessions send.
32
+ - **Move 2b — 8 new server endpoints**: `POST/PATCH/DELETE`
33
+ on dialogs (`/:id/approve|deny|skip` + `/:id`), providers
34
+ (`POST /`, `PUT /:id`, `DELETE /:id`,
35
+ `POST /:id/enable|disable`), claude-sessions
36
+ (`POST /:id/resume`). `dialog-store.mjs` grew `decide()`
37
+ (sidecar decision file + unlink queue) and `patch()`
38
+ (merge data).
39
+ - **Move 2c — UI buttons for new routes**: DialogsView
40
+ (Approve/Skip/Deny/Dismiss), ProvidersView (New + per-row
41
+ Edit/Enable/Disable/Delete), ClaudeSessionsView (Resume).
42
+
43
+ ### Move 3 — ErrorState polish
44
+
45
+ New shared `<ErrorState>` in
46
+ `bizar-dash/src/web/v8/ui/feedback/ErrorState.tsx` with two
47
+ modes — inline (Alert tone=danger banner with optional
48
+ retry) and block (centered icon + title + message + retry,
49
+ mirrors EmptyState).
50
+
51
+ 8 silent-failure views now surface a recoverable error
52
+ before falling through to the empty state: History, Goals,
53
+ Activity, Usage, Agents, Libraries (skill/mcp/hook),
54
+ Doctor, Dialogs. Each wires `onRetry={() => fetch.refetch()}`
55
+ so a 500 / network blip is one click away from recovery.
56
+
57
+ ### Move 4 — ListHeader polish
58
+
59
+ New shared `<ListHeader>` in
60
+ `bizar-dash/src/web/v8/ui/data/ListHeader.tsx` — title +
61
+ count badge + optional Sparkline + optional filter chips +
62
+ right-aligned actions. Wired into 9 views:
63
+
64
+ - **High-traffic (sparkline):** Activity (per-day bucket
65
+ counts).
66
+ - **High-traffic (count + chips):** Goals (status filter
67
+ chips migrated under ListHeader.filters).
68
+ - **High-traffic (count only):** Agents.
69
+ - **Count-only:** Projects, Providers, Mods, Dialogs,
70
+ EnvVars, Backup.
71
+
72
+ Skipped: Tasks (Kanban already counts), History (custom
73
+ FilterChip interleaves kinds + projects).
74
+
75
+ ### Bug fix landed in Move 1
76
+
77
+ DoctorView.tsx called `checks.map` on `snap.data.checks`,
78
+ but the server returns `checks` as
79
+ `{ system, config, services }` (a grouped object), not an
80
+ array. The view crashed on first render and unmounted the
81
+ entire React tree (no ErrorBoundary). Flatten the groups
82
+ into a typed `CheckResult[]` and filter to entries with
83
+ valid name/status/message.
84
+
85
+ ### E2E proof
86
+
87
+ - `dashboard-full-surfaces.mjs` — **37/37 PASS**
88
+ - `dashboard-tier3-batch-a.mjs` — **7/7 PASS**
89
+ - `dashboard-tier3-batch-c.mjs` — **14/14 PASS**
90
+ - `dashboard-surfaces-matrix.mjs` — **13/13 PASS**
91
+ - `dashboard-crud-roundtrip.mjs` — **17/17 PASS**
92
+
93
+ ## v10.0.4 — 2026-07-15
94
+
95
+ ### Highlights
96
+
97
+ Three atomic commits close the three remaining umbrella-brief gaps
98
+ the v10.0.3 stop-hook flagged: live CC roster from disk + correct
99
+ enrichSession path, full `/goal` slash command E2E coverage, and
100
+ full configuration coverage (Settings Reset + plugin-options UI,
101
+ plus E2E proof for providers/projects/mods + the new testids).
102
+
103
+ ### Fixed
104
+
105
+ - **`enrichSession` path** (`agents-cc.mjs:73`). The function read
106
+ `~/.claude/sessions/<sessionId>/messages.jsonl`, but real CC logs
107
+ live at `~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl`. The
108
+ path always 404'd, so `lastMessageAt`, `messageCount`, and
109
+ `lastMessageSnippet` never populated. v10.0.4 routes through the
110
+ existing `resolveSessionLog()` which already encodes `cwd`
111
+ correctly.
112
+ - **BIZAR_CC_HOME redirect** (`agents-cc.mjs`). All CC session
113
+ paths now resolve via `ccHome()` which honours `BIZAR_CC_HOME` so
114
+ the test suite can sandbox `$HOME/.claude` into a tmp directory.
115
+
116
+ ### Added
117
+
118
+ - **`listAgentsFromDisk()` fallback** (`agents-cc.mjs`). Enumerates
119
+ `$HOME/.claude/sessions/*.json` to mint a CC roster when the
120
+ `claude agents --json` CLI is absent (ENOENT, exit ≠ 0, or timeout).
121
+ When the CLI is present the two rosters are merged by sessionId
122
+ with disk-only fields (`lastMessageAt`/`messageCount`/`lastMessageSnippet`)
123
+ filling in any gaps the CLI left behind.
124
+ - **`extractLastSnippet()` helper** (`agents-cc.mjs`). Pulled the
125
+ assistant-text-block extraction out of `enrichSession` so the live
126
+ CLI roster and the disk fallback share the exact same snippet
127
+ shape.
128
+ - **SettingsView — Configuration section** (`SettingsView.tsx`).
129
+ Adds a "Reset to defaults" button (`POST /api/settings/reset`)
130
+ with confirm gate + busy state, and a "Plugin options" JSON
131
+ textarea editor that PUTs to `/api/settings/plugin-options`.
132
+ Both expose `data-testid` for E2E.
133
+ - **`tests/e2e/dashboard-cc-disk-fallback.mjs`** (Move 1). 5 checks
134
+ proving the disk fallback path end-to-end against a tmp HOME.
135
+ - **`tests/e2e/dashboard-cc-goal-slash.mjs`** (Move 2). 6 checks
136
+ proving the full `/goal` slash command path: port resolution from
137
+ `dash-auth.json`, POST/PATCH/KR cycle round-trip, UI render, and
138
+ the file-watcher fallback when CC writes PROGRESS.md directly.
139
+ - **`tests/e2e/dashboard-config-coverage.mjs`** (Move 3). 7 checks
140
+ covering `POST /api/settings/reset`, `PUT /api/settings/plugin-options`,
141
+ `GET /api/providers/auto-detect`, `POST /api/projects/scan`,
142
+ `GET /api/mods`, and the two new SettingsView testids.
143
+
144
+ ### npm scripts
145
+
146
+ - `test:e2e:cc-disk` — Move 1
147
+ - `test:e2e:goal-slash` — Move 2
148
+ - `test:e2e:cfg` — Move 3
149
+
150
+ ## v10.0.3 — 2026-07-15
151
+
152
+ ### Highlights
153
+
154
+ Six atomic commits close every umbrella-brief criterion the v10.0.2
155
+ stop-hook flagged as unevidenced: per-agent status grid, CC session
156
+ merge + CC `/goal` slash command, full CRUD surface, data-driven
157
+ dashboard surfaces, and a single end-to-end surfaces matrix. Two
158
+ real bugs surfaced and fixed in the process — TaskDetail PATCH
159
+ mismatch and TasksView bulk-status 404.
160
+
161
+ ### Fixed
162
+
163
+ - **`PATCH /api/tasks/:id`** (`tasks.mjs`). TaskDetail.tsx:81 sent
164
+ `PATCH` but the server only exposed `PUT` — every task edit
165
+ 404'd. New PATCH handler mirrors PUT body and broadcasts
166
+ `tasks:change`. Unit-tested in `tasks-patch-routes.test.mjs`.
167
+ - **`PATCH /api/tasks/bulk-status`** (`tasks.mjs`). TasksView.tsx:142
168
+ sent `PATCH /api/tasks/bulk-status` but the server only had
169
+ `POST /api/tasks/bulk` — the bulk-action bar never moved tasks.
170
+ New PATCH handler accepts `{ids, status}`, returns per-row
171
+ failures, validates status against the allow-list. Registered
172
+ before `/tasks/:id` so the literal `bulk-status` segment isn't
173
+ captured by Express's :id param.
174
+
175
+ ### Added
176
+
177
+ - **`tests/e2e/dashboard-coverage-proof.mjs`** (Move 2). 8 Bizar
178
+ agents with diverse statuses (working/idle/paused/error/stuck),
179
+ 6 goals across 4 status tones, 7 days of usage JSONL. Asserts
180
+ AgentsView renders ≥8 `.v8-agent-card` nodes spanning ≥4
181
+ distinct status classes, GoalsView renders ≥6 `[data-testid^=goal-card-]`
182
+ nodes, OverviewView renders `[data-testid=overview-tokens-sparkline]`.
183
+ - **`tests/e2e/dashboard-cc-bridge.mjs`** (Move 3). 7 checks: Bizar
184
+ source discriminator, CC route mounted, Claude Code chip
185
+ clickable in UI, `.claude/commands/goal.md` references
186
+ /api/goals + POST + "Do not edit PROGRESS.md directly", dash
187
+ auth resolves port, POST /api/goals round-trip, new goal
188
+ appears as `goal-card-X` in GoalsView.
189
+ - **`tests/e2e/dashboard-crud-roundtrip.mjs`** (Move 4). 16
190
+ mutations across all 4 primary stores (agents/tasks/goals
191
+ /schedules), each proving on-disk persistence AND round-trip
192
+ through the GET endpoint. 17 checks total.
193
+ - **`tests/e2e/dashboard-data-driven.mjs`** (Move 5). 6 checks:
194
+ /api/usage returns ≥7 daily buckets (7d seed), AgentsView
195
+ renders ≥5 metric tile rows, GoalsView main innerText
196
+ contains ≥4 of 5 status tones, OverviewView sparkline renders.
197
+ - **`tests/e2e/dashboard-surfaces-matrix.mjs`** (Move 6). 12-row
198
+ surfaces matrix walks every primary sidebar item (overview,
199
+ agents, goals, tasks, settings, memory, activity, schedules,
200
+ background, skills, mcps, hooks) past the auth gate. Drops
201
+ `chat` — the router case exists but App.tsx's sidebar
202
+ sections (workspace/operations/libraries/system) don't
203
+ surface it; honest matrix only includes reachability.
204
+ - **OverviewView range fix.** `/api/usage?range=24h` only ever
205
+ returns 1 daily bucket so the Sparkline never renders in
206
+ practice; switched to `range=7d` so the trend tile has
207
+ ≥2 points even on freshly-seeded servers. Unit test updated.
208
+
209
+ ### Wiring
210
+
211
+ 5 new npm scripts: `test:e2e:coverage`, `test:e2e:cc`,
212
+ `test:e2e:crud`, `test:e2e:data`, `test:e2e:matrix`. Each runs
213
+ in a sandboxed `$HOME` so they don't pollute the user's real
214
+ store.
215
+
216
+ ## v10.0.0 — 2026-07-13
217
+
218
+ ### Highlights
219
+
220
+ The dashboard graduates from "dashboard over your data" to **orchestration center**.
221
+ v10 closes the three audit gaps that stop-hook reviews flagged across
222
+ v9.x: dead-sparkline code, hierarchy endpoints with no consumer, and a goals
223
+ parser that broke the cross-boundary CC/`/goal` round-trip. v10 also adds a
224
+ real restart lifecycle for stuck agents and per-day usage trendlines, plus a
225
+ cross-boundary E2E suite that boots a real server, writes fixture project
226
+ files, and asserts what the API returns and what it persists to disk.
227
+
228
+ ### Added
229
+
230
+ - **Agent hierarchy view** (`AgentHierarchy`). New Roster|Hierarchy chip
231
+ toggle on AgentsView. Consumes `/api/agents/hierarchy`, renders a
232
+ collapsible parent/child tree, WS-subscribes to `agents:change`, falls
233
+ back to `EmptyState` when no parent links exist. Sprint S45.
234
+ - **Stuck agents banner becomes actionable.** Each stuck row now exposes
235
+ Pause/Resume + Restart buttons. Banner header gains a "Pause all" bulk
236
+ action. Sprint S49 + v10-S1 (Pause/Resume/bulk, status widened to
237
+ include `paused`).
238
+ - **Agent detail → tasks drilldown.** `AgentDetail` now fetches
239
+ `/api/tasks` once opened and renders the tasks assigned to this agent
240
+ (matched by `workedBy` OR `metadata.agent`) as Card rows inside the
241
+ panel. Empty-state Card when none. Sprint S49.
242
+ - **GoalsView cross-boundary CC-shape round-trip.** Goals route now
243
+ resolves `.bizar/PROGRESS.md` against `projectsStore.active().path`
244
+ (was `.cwd`), so the dashboard reads the *active* project's file
245
+ instead of silently falling back to `$HOME/.bizar/PROGRESS.md`.
246
+ `serializeProgress` strips carried-over `Goal is **status**` lines
247
+ from goal descriptions before re-emitting, so PATCH /status mutations
248
+ actually persist (previously the second status line won on re-parse).
249
+ v10-S3.
250
+ - **OverviewView token-usage sparkline trend.** Tokens StatTile shows a
251
+ SVG sparkline of the last 24h daily series returned by `/api/usage`.
252
+ Fits inside the existing `sparkline` slot on `StatTile`. Falls back
253
+ gracefully when fewer than 2 daily points are available. v10-S2.
254
+ - **Cross-boundary E2E suite:**
255
+ - `tests/e2e/goals-cc-roundtrip.mjs` (8 steps) — boots server against
256
+ a tmp project, writes a CC-shape PROGRESS.md fixture, GETs /api/goals
257
+ + PATCHes status + re-reads + asserts file-watcher broadcast.
258
+ - `tests/e2e/agent-restart-roundtrip.mjs` (6 steps) — fixture agent
259
+ .md + status file marked error, GETs /restart pre-state, POSTs
260
+ /restart, asserts WS `agent:restarted` broadcast, asserts the
261
+ on-disk `~/.config/bizar/agent-status.json` actually moved to idle,
262
+ and GETs the post-state. Restores user's real $HOME files in
263
+ `finally`.
264
+
265
+ ### Fixed
266
+
267
+ - **v10-S3** `serializeProgress` dropped the original `Goal is **<old>**`
268
+ line onto the page right under the freshly-emitted status line. Parser
269
+ saw both lines and the second match won (its overwrite guard
270
+ `'if status === on-track'` never fired because the default WAS
271
+ on-track and the new status was also on-track). Net: dashboard
272
+ `PATCH /status` returned 200 but the visible state didn't change.
273
+ Stripped at serialize time.
274
+ - **v10-S4** `readAgent` read the in-memory `_status` Map without
275
+ calling `loadStatus()` first, so any agent never touched post-boot
276
+ silently fell back to the idle default even when its on-disk status
277
+ was error/stuck. E2E caught it. Fixed: `loadStatus()` at the top of
278
+ `readAgent` (idempotent).
279
+ - **v10-S3** `progressPath()` read `active.cwd` (undefined) while
280
+ `projectsStore` actually stores under `.path`. Dashboard always
281
+ fell back to `$HOME/.bizar/PROGRESS.md`. Fixed: `active.path`.
282
+ - **v9.4.0 / S45** Dead-sparkline code on `AgentCard`. `mapBizar`/`mapCC`
283
+ always passed a single-element `tpmHistory`, the `length > 1` guard
284
+ blocked the chart from ever rendering. Replaced with real
285
+ `tasksSucceeded / tasksTotal` + `successRate` + `lastSeenMs` rows.
286
+ - **v9.5.0 / S47** `UpdateView` had pre-existing `TS2783` errors on
287
+ `WebSocket` message narrowing (discriminator duplication in spread
288
+ overload). Reordered to spread-then-narrow so the union collapses
289
+ cleanly.
290
+ - **v9.5.0 / S47** `BizarAgent.status` union widened to include
291
+ `'paused'` so the stuck-banner Pause control's `s.status === 'paused'`
292
+ comparison typechecks. Server route valid set widened to match
293
+ (`['idle','working','error','stuck','paused']`).
294
+
295
+ ### Tests
296
+
297
+ - vitest: 363 → 388 cases (+25); 49 → 51 test files (+2).
298
+ - 2 new cross-boundary E2E tests (14 steps total) — both green.
299
+ - `bunx tsc --noEmit` at repo root: 0 errors.
300
+ - `npx tsc -p tsconfig.json` inside `bizar-dash/`: 0 errors in
301
+ `src/`. Pre-existing `toBeInTheDocument` jest-dom typing gaps in
302
+ `__tests__` files are unchanged baseline.
303
+
304
+ ### Files
305
+
306
+ - `bizar-dash/src/server/routes/goals.mjs` — `progressPath()` fix +
307
+ comments pointing at the cross-boundary audit trail.
308
+ - `bizar-dash/src/server/progress-parser.mjs` — `serializeProgress`
309
+ strips prior `Goal is **...**` lines.
310
+ - `bizar-dash/src/server/progress-parser.test.mjs` — v10-S3 regression:
311
+ parse → mutate → serialise → re-parse → status preserved.
312
+ - `bizar-dash/src/server/agents-store.mjs` — `readAgent` now
313
+ `loadStatus()` first.
314
+ - `bizar-dash/src/web/v8/views/Agents/AgentsView.tsx` —
315
+ Roster|Hierarchy toggle + stuck banner Pause/Resume/bulk.
316
+ - `bizar-dash/src/web/v8/views/Agents/AgentHierarchy.tsx` (NEW) —
317
+ collapsible tree.
318
+ - `bizar-dash/src/web/v8/ui/agents/AgentCard.tsx` — dead sparkline
319
+ replaced with real task-count/success-rate/last-seen rows.
320
+ - `bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx` — tasks drilldown.
321
+ - `bizar-dash/src/web/v8/views/Overview/OverviewView.tsx` — token
322
+ sparkline trendline on Tokens StatTile.
323
+ - `bizar-dash/src/web/v8/views/Update/UpdateView.tsx` — TS2783 fix.
324
+ - `bizar-dash/src/web/v8/data/types.ts` — `BizarAgent.status`
325
+ includes `'paused'`.
326
+ - `bizar-dash/src/web/v8/__tests__/{agents-stuck-banner,agent-detail-tasks,overview-trends,goals-cc-roundtrip,agent-hierarchy,agent-card-metrics}.test.tsx` (new + extended).
327
+ - `tests/e2e/{goals-cc-roundtrip,agent-restart-roundtrip}.mjs` (NEW).
328
+
329
+ ### Sprints covered
330
+
331
+ - v9.4.0 — S45 (hierarchy + stuck banner + dead-sparkline), S46 (docs).
332
+ - v9.5.0 — S47 (UpdateView typecheck), S48 (stuck Restart),
333
+ S49 (agent↔task drilldown), S50 (paperwork).
334
+ - v10.0.0 — S1 (Pause/Resume/bulk), S2 (Overview Sparkline),
335
+ S3 (GoalsView CC round-trip + E2E + 2-bug-fix), S4 (cross-boundary
336
+ agent restart E2E + readAgent-bug fix), S5 (this paperwork).
337
+
338
+ ## v10.0.2 — 2026-07-15
339
+
340
+ ### Highlights
341
+
342
+ Closes the integration-breadth and "control and configure
343
+ everything" gaps from the v10.0.1 stop-hook. The walkthrough now
344
+ exercises **all 12 reachable sidebar views** with seeded Bizar
345
+ agents, tasks across all 4 columns, a CC session stub for the
346
+ Source-filter chip, and 3 PROGRESS.md goals spanning status tones
347
+ (15/15 checks pass). A new mutation round-trip test proves the
348
+ dashboard's 4 primary mutations (Settings PUT, Agent POST, Task
349
+ POST, CC-style goal append) actually land on disk **and** round-trip
350
+ back through the same API the views consume (4/4 checks pass).
351
+ Also fixes a latent bug: `GET /api/tasks` returned a bare array
352
+ while the v8 UI expected `{ tasks, count }` — TasksView rendered 0
353
+ tasks even when `tasks.json` had data.
354
+
355
+ ### Fixed
356
+
357
+ - **`GET /api/tasks` returned a bare array.** The v8 UI
358
+ (`App.tsx:87` and several views) consumes `{ tasks, count }`,
359
+ so the bare array shape made TasksView render 0 tasks even when
360
+ the underlying `tasks.json` had data. Now returns the envelope
361
+ shape, matching what the audit-fixes + views tests already
362
+ mocked. Sprint v10-S11.
363
+
364
+ ### Added
365
+
366
+ - **`tests/e2e/dashboard-auth-walkthrough.mjs` (v2)** — Full-scope
367
+ sidebar walkthrough. Boots `createServer()` with
368
+ `HOME=/tmp/bh-walk-home-<pid>` so all backend stores redirect
369
+ to a tmp directory (no pollution of the user's real `$HOME`).
370
+ Seeds 3 Bizar agents (odin/thor/frigg), 4 tasks across the
371
+ queued/doing/done/blocked columns, a CC session stub at
372
+ `~/.config/bizar/agent-status.json`, and 3 goals
373
+ (G-001 on-track, G-002 at-risk, G-003 at-risk) in
374
+ `projectRoot/.bizar/PROGRESS.md`. Drives `agent-browser` through
375
+ the v8 sidebar (state-based router) and asserts each view's
376
+ main region renders view-specific content. **15/15 PASS** —
377
+ all 12 reachable sidebar views (overview/tasks/goals/agents/
378
+ activity/memory/schedules/background/skills/mcps/hooks/settings)
379
+ plus the 3 API-level seeds (agents, tasks, goals).
380
+ - **`tests/e2e/dashboard-mutation-roundtrip.mjs`** — Mutation
381
+ round-trip test. Same boot pattern. Each of the 4 mutations
382
+ proves on-disk persistence **and** round-trips back through the
383
+ same API the view consumes:
384
+ - `PUT /api/settings` → `~/.config/bizar/settings.json`
385
+ (verified by reading the file + GET /api/settings envelope)
386
+ - `POST /api/agents` → `~/.config/cline/agents/<name>.md`
387
+ (verified by reading the file + GET /api/agents listing)
388
+ - `POST /api/tasks` → `~/.config/cline/projects/<id>/tasks.json`
389
+ (verified by reading the file + GET /api/tasks envelope)
390
+ - `POST /api/goals` → `projectRoot/.bizar/PROGRESS.md`
391
+ (verified by reading the file + GET /api/goals listing)
392
+ Each result row writes its on-disk evidence (path + last 280
393
+ bytes) to `results.json`. **4/4 PASS**.
394
+
395
+ ### Changed
396
+
397
+ - **`bizar-dash/BROWSER_VERIFICATION.md`** — Updated to v10.0.2.
398
+ Added full-scope walkthrough section (15/15) + mutation
399
+ round-trip section (4/4). Recorded PIDs for the v10.0.2 runs.
400
+ Documented that the v8 sidebar has 12 reachable items (ChatView
401
+ exists but is excluded from the sidebar — only reachable via
402
+ command palette).
403
+
404
+ ## v10.0.1 — 2026-07-14
405
+
406
+ ### Highlights
407
+
408
+ Closes the three remaining v10.0.0 stop-hook gaps with real
409
+ verifications, not paperwork. The cold-boot event-loop starvation
410
+ that froze the dashboard for 3-5s is now fixed (async `execFile`
411
+ in `memory-lightrag.mjs` + `BIZAR_HEADROOM_AUTOSTART=0` env gate in
412
+ `server.mjs`), and the unauthenticated browser smoke is upgraded to
413
+ an authenticated 8-view per-view walkthrough that proves
414
+ AgentsView / GoalsView / TasksView / SettingsView / Memory /
415
+ Activity render real data past the auth gate.
416
+
417
+ ### Fixed
418
+
419
+ - **Cold-boot event-loop starvation** (`memory-lightrag.mjs:344`,
420
+ `server.mjs:439`). LightRAG's `findLightragBinary()` ran
421
+ `execFileSync('command', …)` synchronously with a 3s timeout on
422
+ every cold start. Converted to async `execFile` wrapped in a
423
+ Promise; the 3 call sites (`isInstalled`, two `startServer`
424
+ checks) now `await` it. The headroom startup hook (`npm install`
425
+ as a child process) is now opt-out via
426
+ `BIZAR_HEADROOM_AUTOSTART=0`, mirroring the existing lightrag
427
+ pattern. Default behaviour unchanged. Sprint S9.
428
+
429
+ ### Added
430
+
431
+ - **`tests/e2e/cold-boot-perf.mjs`** — Regression test for the cold-
432
+ boot freeze. Boots `createServer()` with both opt-outs set,
433
+ asserts `listen → first-fetch < 2s`. Closes the v10-S7
434
+ "documented, not fixed" caveat. **2/2 PASS** (`bootMs=42,
435
+ firstFetchMs=21`).
436
+ - **`tests/e2e/dashboard-auth-walkthrough.mjs`** — Authenticated
437
+ per-view walkthrough. Boots `createServer()` against a tmp
438
+ project, drives `agent-browser` through real sidebar clicks
439
+ (the v8 router is state-based, not hash-based), screenshots
440
+ each view, asserts the active sidebar item matches and the main
441
+ region renders view-specific content. **8/8 PASS** across
442
+ Overview (303 bytes), Agents (1000), Goals (805), Tasks (129),
443
+ Settings (6556), Memory (247), Activity (321) — all past the
444
+ auth gate. Closes the v10-S7 per-view-verification gap.
445
+
446
+ ### Changed
447
+
448
+ - **`bizar-dash/BROWSER_VERIFICATION.md`** — Updated to v10.0.1.
449
+ Removed the "documented, not fixed" caveat for the cold-boot
450
+ freeze (it's now fixed). Added the cold-boot regression and
451
+ per-view walkthrough sections with PID + PASS count evidence.
452
+ Documented the loopback-auto-trust auth model that explains why
453
+ the browser walkthrough doesn't need to pass a bearer token.
454
+
3
455
  ## v4.5.0 — 2026-07-05
4
456
 
5
457
  ### Highlights