@polderlabs/bizar 7.0.4 → 8.1.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.
Files changed (627) hide show
  1. package/.claude/agents/agent-browser.md +1 -1
  2. package/.claude/agents/baldr.md +1 -1
  3. package/.claude/agents/forseti.md +1 -1
  4. package/.claude/agents/frigg.md +1 -1
  5. package/.claude/agents/heimdall.md +1 -1
  6. package/.claude/agents/hermod.md +1 -1
  7. package/.claude/agents/mimir.md +1 -1
  8. package/.claude/agents/odin.md +1 -1
  9. package/.claude/agents/quick.md +1 -1
  10. package/.claude/agents/semble-search.md +1 -1
  11. package/.claude/agents/thor.md +1 -1
  12. package/.claude/agents/tyr.md +1 -1
  13. package/.claude/agents/vidarr.md +1 -1
  14. package/.claude/agents/vor.md +1 -1
  15. package/.claude/commands/goal.md +98 -0
  16. package/.claude/settings.local.json +7 -0
  17. package/bizar-dash/DESIGN.md +729 -969
  18. package/bizar-dash/GLYPH.md +418 -0
  19. package/bizar-dash/PLAN.md +1135 -0
  20. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js +6 -0
  21. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js.map +1 -0
  22. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js +1 -0
  23. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js.map +1 -0
  24. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js +28 -0
  25. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js.map +1 -0
  26. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js +1 -0
  27. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js.map +1 -0
  28. package/bizar-dash/dist/assets/Button-RmN1RKhE.js +6 -0
  29. package/bizar-dash/dist/assets/Button-RmN1RKhE.js.map +1 -0
  30. package/bizar-dash/dist/assets/Card-BzJeYR2D.js +1 -0
  31. package/bizar-dash/dist/assets/Card-BzJeYR2D.js.map +1 -0
  32. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js +1 -0
  33. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js.map +1 -0
  34. package/bizar-dash/dist/assets/EmptyState-DEiBv4-r.js +1 -0
  35. package/bizar-dash/dist/assets/EmptyState-DEiBv4-r.js.map +1 -0
  36. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js +6 -0
  37. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js.map +1 -0
  38. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js +21 -0
  39. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js.map +1 -0
  40. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js +67 -0
  41. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js.map +1 -0
  42. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js +13 -0
  43. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js.map +1 -0
  44. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js +1 -0
  45. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js.map +1 -0
  46. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js +16 -0
  47. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js.map +1 -0
  48. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js +10 -0
  49. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js.map +1 -0
  50. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js +43 -0
  51. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js.map +1 -0
  52. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js +1 -0
  53. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js.map +1 -0
  54. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js +1 -0
  55. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js.map +1 -0
  56. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js +16 -0
  57. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js.map +1 -0
  58. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js +1 -0
  59. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js.map +1 -0
  60. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js +1 -0
  61. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js.map +1 -0
  62. package/bizar-dash/dist/assets/ViewHeader-dPd4zAyj.js +6 -0
  63. package/bizar-dash/dist/assets/ViewHeader-dPd4zAyj.js.map +1 -0
  64. package/bizar-dash/dist/assets/brain-BajPVibR.js +6 -0
  65. package/bizar-dash/dist/assets/brain-BajPVibR.js.map +1 -0
  66. package/bizar-dash/dist/assets/calendar-CaP_Bbgc.js +6 -0
  67. package/bizar-dash/dist/assets/calendar-CaP_Bbgc.js.map +1 -0
  68. package/bizar-dash/dist/assets/cmdk-BLWIhKrV.js +80 -0
  69. package/bizar-dash/dist/assets/cmdk-BLWIhKrV.js.map +1 -0
  70. package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js +5 -0
  71. package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js.map +1 -0
  72. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js +11 -0
  73. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js.map +1 -0
  74. package/bizar-dash/dist/assets/index-AL3OLUfz.js +1 -0
  75. package/bizar-dash/dist/assets/index-AL3OLUfz.js.map +1 -0
  76. package/bizar-dash/dist/assets/main-CcQfRfIJ.css +1 -0
  77. package/bizar-dash/dist/assets/main-LxX9zTRk.js +109 -0
  78. package/bizar-dash/dist/assets/main-LxX9zTRk.js.map +1 -0
  79. package/bizar-dash/dist/assets/plus-CVH1JB04.js +6 -0
  80. package/bizar-dash/dist/assets/plus-CVH1JB04.js.map +1 -0
  81. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js +11 -0
  82. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js.map +1 -0
  83. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js +6 -0
  84. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js.map +1 -0
  85. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js +6 -0
  86. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js.map +1 -0
  87. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js +1 -0
  88. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js.map +1 -0
  89. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js +1 -0
  90. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js.map +1 -0
  91. package/bizar-dash/dist/assets/wrench-B7go551L.js +6 -0
  92. package/bizar-dash/dist/assets/wrench-B7go551L.js.map +1 -0
  93. package/bizar-dash/dist/{mobile.html → v8.html} +6 -9
  94. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  95. package/bizar-dash/src/server/api.mjs +10 -0
  96. package/bizar-dash/src/server/bg-poller.mjs +81 -1
  97. package/bizar-dash/src/server/bg-poller.test.mjs +28 -0
  98. package/bizar-dash/src/server/progress-parser.mjs +221 -0
  99. package/bizar-dash/src/server/progress-parser.test.mjs +105 -0
  100. package/bizar-dash/src/server/routes/agents-cc.mjs +381 -0
  101. package/bizar-dash/src/server/routes/agents-cc.test.mjs +35 -0
  102. package/bizar-dash/src/server/routes/goals.mjs +307 -0
  103. package/bizar-dash/src/server/routes/tasks.mjs +11 -0
  104. package/bizar-dash/src/server/server.mjs +1 -57
  105. package/bizar-dash/src/web/v8/App.tsx +188 -0
  106. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +102 -0
  107. package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +79 -0
  108. package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +12 -0
  109. package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +84 -0
  110. package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +95 -0
  111. package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +63 -0
  112. package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +90 -0
  113. package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +104 -0
  114. package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +135 -0
  115. package/bizar-dash/src/web/v8/__tests__/cx.test.ts +25 -0
  116. package/bizar-dash/src/web/v8/__tests__/data.test.tsx +293 -0
  117. package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +213 -0
  118. package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +105 -0
  119. package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +176 -0
  120. package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +70 -0
  121. package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +60 -0
  122. package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +137 -0
  123. package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +104 -0
  124. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +98 -0
  125. package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +92 -0
  126. package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +87 -0
  127. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +182 -0
  128. package/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
  129. package/bizar-dash/src/web/v8/data/types.ts +154 -0
  130. package/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
  131. package/bizar-dash/src/web/v8/data/useWebSocket.ts +153 -0
  132. package/bizar-dash/src/web/v8/main.tsx +28 -0
  133. package/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
  134. package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
  135. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
  136. package/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
  137. package/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
  138. package/bizar-dash/src/web/v8/shell/index.ts +15 -0
  139. package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
  140. package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
  141. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
  142. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +252 -0
  143. package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +371 -0
  144. package/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
  145. package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
  146. package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
  147. package/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
  148. package/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
  149. package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
  150. package/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
  151. package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
  152. package/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
  153. package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
  154. package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
  155. package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
  156. package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
  157. package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
  158. package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
  159. package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
  160. package/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
  161. package/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
  162. package/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
  163. package/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
  164. package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
  165. package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
  166. package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
  167. package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
  168. package/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
  169. package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
  170. package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
  171. package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
  172. package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
  173. package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
  174. package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
  175. package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
  176. package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
  177. package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
  178. package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
  179. package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
  180. package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
  181. package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
  182. package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
  183. package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
  184. package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
  185. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +245 -0
  186. package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
  187. package/bizar-dash/src/web/v8/ui/index.ts +322 -0
  188. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +83 -0
  189. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +247 -0
  190. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +186 -0
  191. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +122 -0
  192. package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
  193. package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
  194. package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
  195. package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
  196. package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
  197. package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
  198. package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
  199. package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
  200. package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +79 -0
  201. package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
  202. package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
  203. package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
  204. package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
  205. package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
  206. package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
  207. package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
  208. package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
  209. package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
  210. package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
  211. package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
  212. package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
  213. package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
  214. package/bizar-dash/src/web/v8/ui/styles/globals.css +225 -0
  215. package/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
  216. package/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
  217. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +74 -0
  218. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
  219. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +86 -0
  220. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
  221. package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
  222. package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
  223. package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
  224. package/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
  225. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +71 -0
  226. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +172 -0
  227. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +142 -0
  228. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +247 -0
  229. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +193 -0
  230. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +108 -0
  231. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +77 -0
  232. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +152 -0
  233. package/bizar-dash/src/web/v8/views/Router.tsx +72 -0
  234. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +730 -0
  235. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
  236. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +62 -0
  237. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +165 -0
  238. package/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
  239. package/bizar-dash/src/web/{mobile.html → v8.html} +4 -7
  240. package/bizar-dash/tests/components/Button.test.tsx +51 -14
  241. package/bizar-dash/tests/components/Card.test.tsx +37 -20
  242. package/bizar-dash/tests/components/Dialog.test.tsx +80 -0
  243. package/bizar-dash/tests/components/Toast.test.tsx +48 -95
  244. package/bizar-dash/tests/goals-decompose.test.mjs +177 -0
  245. package/bizar-dash/tests/setup.ts +47 -0
  246. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +30 -15
  247. package/bizar-dash/vite.config.ts +41 -2
  248. package/bizar-dash/vitest.config.ts +9 -4
  249. package/cli/bin.mjs +32 -0
  250. package/cli/install.mjs +26 -1
  251. package/cli/provision-claude.mjs +86 -0
  252. package/package.json +36 -3
  253. package/scripts/run-dev.mjs +84 -0
  254. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js +0 -114
  255. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js.map +0 -1
  256. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js +0 -1
  257. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js.map +0 -1
  258. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js +0 -1
  259. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js.map +0 -1
  260. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js +0 -26
  261. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js.map +0 -1
  262. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
  263. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js.map +0 -1
  264. package/bizar-dash/dist/assets/main-CJAtrosO.css +0 -1
  265. package/bizar-dash/dist/assets/main-DKKj9dsq.js +0 -430
  266. package/bizar-dash/dist/assets/main-DKKj9dsq.js.map +0 -1
  267. package/bizar-dash/dist/assets/mobile-C_naUN91.js +0 -1
  268. package/bizar-dash/dist/assets/mobile-C_naUN91.js.map +0 -1
  269. package/bizar-dash/dist/assets/mobile-layout-BWLtwtfQ.css +0 -1
  270. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js +0 -211
  271. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js.map +0 -1
  272. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js +0 -65
  273. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js.map +0 -1
  274. package/bizar-dash/dist/index.html +0 -43
  275. package/bizar-dash/src/web/App.tsx +0 -915
  276. package/bizar-dash/src/web/MobileApp.tsx +0 -414
  277. package/bizar-dash/src/web/components/ArtifactCreateDialog.tsx +0 -95
  278. package/bizar-dash/src/web/components/ArtifactListDialog.tsx +0 -55
  279. package/bizar-dash/src/web/components/ArtifactViewer.tsx +0 -144
  280. package/bizar-dash/src/web/components/AuditDialog.tsx +0 -79
  281. package/bizar-dash/src/web/components/AutosaveField.tsx +0 -50
  282. package/bizar-dash/src/web/components/BackupRestore.tsx +0 -330
  283. package/bizar-dash/src/web/components/BgStatusBadge.tsx +0 -32
  284. package/bizar-dash/src/web/components/Button.tsx +0 -56
  285. package/bizar-dash/src/web/components/CanvasContextMenu.tsx +0 -68
  286. package/bizar-dash/src/web/components/Card.tsx +0 -40
  287. package/bizar-dash/src/web/components/CollapsibleSection.tsx +0 -72
  288. package/bizar-dash/src/web/components/CommandDialog.tsx +0 -66
  289. package/bizar-dash/src/web/components/DoctorPanel.tsx +0 -160
  290. package/bizar-dash/src/web/components/EmptyState.tsx +0 -30
  291. package/bizar-dash/src/web/components/EnvVarManager.tsx +0 -430
  292. package/bizar-dash/src/web/components/EvalDiff.tsx +0 -157
  293. package/bizar-dash/src/web/components/EvalExportButton.tsx +0 -27
  294. package/bizar-dash/src/web/components/EvalRunCard.tsx +0 -78
  295. package/bizar-dash/src/web/components/FileBrowser.tsx +0 -633
  296. package/bizar-dash/src/web/components/HeadroomSettings.tsx +0 -418
  297. package/bizar-dash/src/web/components/HeadroomStatus.tsx +0 -158
  298. package/bizar-dash/src/web/components/HelpDialog.tsx +0 -55
  299. package/bizar-dash/src/web/components/InviteDialog.tsx +0 -205
  300. package/bizar-dash/src/web/components/KillConfirmDialog.tsx +0 -88
  301. package/bizar-dash/src/web/components/MobileBottomNav.tsx +0 -38
  302. package/bizar-dash/src/web/components/MobileDrawer.tsx +0 -68
  303. package/bizar-dash/src/web/components/MobileHeader.tsx +0 -50
  304. package/bizar-dash/src/web/components/MobileLayout.tsx +0 -63
  305. package/bizar-dash/src/web/components/Modal.tsx +0 -215
  306. package/bizar-dash/src/web/components/Notifications.tsx +0 -242
  307. package/bizar-dash/src/web/components/ScheduleTemplateCard.tsx +0 -72
  308. package/bizar-dash/src/web/components/ScreenshotCapture.tsx +0 -138
  309. package/bizar-dash/src/web/components/ScreenshotOCR.tsx +0 -42
  310. package/bizar-dash/src/web/components/SearchModal.tsx +0 -227
  311. package/bizar-dash/src/web/components/SettingsNav.tsx +0 -117
  312. package/bizar-dash/src/web/components/SettingsSearch.tsx +0 -328
  313. package/bizar-dash/src/web/components/Sidebar.tsx +0 -89
  314. package/bizar-dash/src/web/components/Spinner.tsx +0 -19
  315. package/bizar-dash/src/web/components/StatusBadge.tsx +0 -56
  316. package/bizar-dash/src/web/components/Tag.tsx +0 -41
  317. package/bizar-dash/src/web/components/TailscaleSettings.tsx +0 -161
  318. package/bizar-dash/src/web/components/TaskCard.tsx +0 -69
  319. package/bizar-dash/src/web/components/TaskCreateSheet.tsx +0 -76
  320. package/bizar-dash/src/web/components/Toast.tsx +0 -150
  321. package/bizar-dash/src/web/components/Toggle.tsx +0 -31
  322. package/bizar-dash/src/web/components/Topbar.tsx +0 -455
  323. package/bizar-dash/src/web/components/UsageChart.tsx +0 -250
  324. package/bizar-dash/src/web/components/UsageTable.tsx +0 -90
  325. package/bizar-dash/src/web/components/VirtualList.tsx +0 -53
  326. package/bizar-dash/src/web/components/VisualPlanDialog.tsx +0 -58
  327. package/bizar-dash/src/web/components/VoiceNotesPanel.tsx +0 -211
  328. package/bizar-dash/src/web/components/VoiceRecorder.tsx +0 -105
  329. package/bizar-dash/src/web/components/WorkspaceSelector.tsx +0 -158
  330. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +0 -126
  331. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +0 -163
  332. package/bizar-dash/src/web/components/agents/QualityGates.tsx +0 -123
  333. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +0 -127
  334. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +0 -148
  335. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +0 -160
  336. package/bizar-dash/src/web/components/background/AttachButton.tsx +0 -96
  337. package/bizar-dash/src/web/components/background/TmuxAttachCard.tsx +0 -122
  338. package/bizar-dash/src/web/components/chat/AgentChip.tsx +0 -68
  339. package/bizar-dash/src/web/components/chat/AgentNode.tsx +0 -127
  340. package/bizar-dash/src/web/components/chat/AgentTree.tsx +0 -80
  341. package/bizar-dash/src/web/components/chat/ChatBubble.tsx +0 -60
  342. package/bizar-dash/src/web/components/chat/ChatComposer.tsx +0 -72
  343. package/bizar-dash/src/web/components/chat/ChatInfoPanel.tsx +0 -370
  344. package/bizar-dash/src/web/components/chat/ChatRail.tsx +0 -387
  345. package/bizar-dash/src/web/components/chat/ChatThread.tsx +0 -127
  346. package/bizar-dash/src/web/components/chat/ChatTopBar.tsx +0 -50
  347. package/bizar-dash/src/web/components/chat/Composer.tsx +0 -166
  348. package/bizar-dash/src/web/components/chat/ConfirmModal.tsx +0 -54
  349. package/bizar-dash/src/web/components/chat/EmptyState.tsx +0 -21
  350. package/bizar-dash/src/web/components/chat/FirstRunGreeting.tsx +0 -18
  351. package/bizar-dash/src/web/components/chat/FloatingComposer.tsx +0 -38
  352. package/bizar-dash/src/web/components/chat/InfoPanel.tsx +0 -184
  353. package/bizar-dash/src/web/components/chat/JumpToLatest.tsx +0 -58
  354. package/bizar-dash/src/web/components/chat/LoadingSkeleton.tsx +0 -19
  355. package/bizar-dash/src/web/components/chat/MessageBlock.tsx +0 -260
  356. package/bizar-dash/src/web/components/chat/MessageBubble.tsx +0 -60
  357. package/bizar-dash/src/web/components/chat/SessionList.tsx +0 -163
  358. package/bizar-dash/src/web/components/chat/SessionRowMenu.tsx +0 -206
  359. package/bizar-dash/src/web/components/chat/StreamingIndicator.tsx +0 -37
  360. package/bizar-dash/src/web/components/chat/SuggestionCards.tsx +0 -55
  361. package/bizar-dash/src/web/components/chat/WelcomeScreen.tsx +0 -36
  362. package/bizar-dash/src/web/components/chat/_legacy.ts +0 -30
  363. package/bizar-dash/src/web/components/chat/index.ts +0 -31
  364. package/bizar-dash/src/web/components/chat/useAutoGrowTextarea.ts +0 -18
  365. package/bizar-dash/src/web/components/chat/useChat.ts +0 -1190
  366. package/bizar-dash/src/web/components/chat/useSlashCommands.ts +0 -47
  367. package/bizar-dash/src/web/components/goals/GoalInput.tsx +0 -86
  368. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +0 -111
  369. package/bizar-dash/src/web/components/tasks/BacklogPanel.css +0 -109
  370. package/bizar-dash/src/web/components/tasks/BacklogPanel.tsx +0 -209
  371. package/bizar-dash/src/web/hooks/useAutosave.ts +0 -107
  372. package/bizar-dash/src/web/hooks/useI18n.ts +0 -13
  373. package/bizar-dash/src/web/index.html +0 -37
  374. package/bizar-dash/src/web/lib/api.ts +0 -237
  375. package/bizar-dash/src/web/lib/goapPlanner.ts +0 -614
  376. package/bizar-dash/src/web/lib/i18n.ts +0 -25
  377. package/bizar-dash/src/web/lib/logger.ts +0 -30
  378. package/bizar-dash/src/web/lib/markdown.tsx +0 -59
  379. package/bizar-dash/src/web/lib/search.ts +0 -115
  380. package/bizar-dash/src/web/lib/types.ts +0 -894
  381. package/bizar-dash/src/web/lib/utils.ts +0 -114
  382. package/bizar-dash/src/web/lib/ws.ts +0 -177
  383. package/bizar-dash/src/web/locales/en.json +0 -52
  384. package/bizar-dash/src/web/main.tsx +0 -43
  385. package/bizar-dash/src/web/mobile/MobileApp.tsx +0 -309
  386. package/bizar-dash/src/web/mobile/MobileBottomNav.tsx +0 -38
  387. package/bizar-dash/src/web/mobile/MobileChat.tsx +0 -138
  388. package/bizar-dash/src/web/mobile/MobileDoctor.tsx +0 -80
  389. package/bizar-dash/src/web/mobile/MobileEval.tsx +0 -167
  390. package/bizar-dash/src/web/mobile/MobileMemory.tsx +0 -108
  391. package/bizar-dash/src/web/mobile/MobileOverview.tsx +0 -213
  392. package/bizar-dash/src/web/mobile/MobileSettings.tsx +0 -251
  393. package/bizar-dash/src/web/mobile/MobileTasks.tsx +0 -94
  394. package/bizar-dash/src/web/mobile/MobileTopbar.tsx +0 -115
  395. package/bizar-dash/src/web/mobile/components/MobileBottomSheet.tsx +0 -182
  396. package/bizar-dash/src/web/mobile/components/MobileListItem.tsx +0 -64
  397. package/bizar-dash/src/web/mobile/components/MobileModal.tsx +0 -123
  398. package/bizar-dash/src/web/mobile/views/MobileActivity.tsx +0 -273
  399. package/bizar-dash/src/web/mobile/views/MobileAgents.tsx +0 -374
  400. package/bizar-dash/src/web/mobile/views/MobileArtifactCanvas.tsx +0 -439
  401. package/bizar-dash/src/web/mobile/views/MobileArtifacts.tsx +0 -143
  402. package/bizar-dash/src/web/mobile/views/MobileChat.tsx +0 -257
  403. package/bizar-dash/src/web/mobile/views/MobileConfig.tsx +0 -175
  404. package/bizar-dash/src/web/mobile/views/MobileHistory.tsx +0 -191
  405. package/bizar-dash/src/web/mobile/views/MobileMods.tsx +0 -149
  406. package/bizar-dash/src/web/mobile/views/MobileMore.tsx +0 -121
  407. package/bizar-dash/src/web/mobile/views/MobileNotifications.tsx +0 -137
  408. package/bizar-dash/src/web/mobile/views/MobilePlans.tsx +0 -26
  409. package/bizar-dash/src/web/mobile/views/MobileSchedules.tsx +0 -685
  410. package/bizar-dash/src/web/mobile/views/MobileSearchModal.tsx +0 -172
  411. package/bizar-dash/src/web/mobile/views/MobileSettings.tsx +0 -363
  412. package/bizar-dash/src/web/mobile/views/MobileSkills.tsx +0 -153
  413. package/bizar-dash/src/web/mobile/views/MobileTasks.tsx +0 -564
  414. package/bizar-dash/src/web/mobile/views/QrCodePanel.tsx +0 -69
  415. package/bizar-dash/src/web/mobile.tsx +0 -14
  416. package/bizar-dash/src/web/styles/agents-redesign.css +0 -311
  417. package/bizar-dash/src/web/styles/chat.css +0 -1740
  418. package/bizar-dash/src/web/styles/glyphs.css +0 -960
  419. package/bizar-dash/src/web/styles/main.css +0 -10389
  420. package/bizar-dash/src/web/styles/memory.css +0 -1177
  421. package/bizar-dash/src/web/styles/minimax-usage.css +0 -842
  422. package/bizar-dash/src/web/styles/mobile-chat.css +0 -5
  423. package/bizar-dash/src/web/styles/mobile-layout.css +0 -233
  424. package/bizar-dash/src/web/styles/mobile.css +0 -2181
  425. package/bizar-dash/src/web/styles/settings.css +0 -775
  426. package/bizar-dash/src/web/styles/skills.css +0 -302
  427. package/bizar-dash/src/web/styles/tasks-redesign.css +0 -253
  428. package/bizar-dash/src/web/styles/tasks.css +0 -605
  429. package/bizar-dash/src/web/ui/controls/Button.tsx +0 -77
  430. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +0 -95
  431. package/bizar-dash/src/web/ui/controls/IconButton.tsx +0 -66
  432. package/bizar-dash/src/web/ui/controls/Kbd.tsx +0 -24
  433. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +0 -77
  434. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +0 -109
  435. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +0 -91
  436. package/bizar-dash/src/web/ui/controls/Select.tsx +0 -92
  437. package/bizar-dash/src/web/ui/controls/Slider.tsx +0 -70
  438. package/bizar-dash/src/web/ui/controls/TextInput.tsx +0 -67
  439. package/bizar-dash/src/web/ui/controls/Textarea.tsx +0 -56
  440. package/bizar-dash/src/web/ui/controls/Toggle.tsx +0 -79
  441. package/bizar-dash/src/web/ui/controls/controls.css +0 -476
  442. package/bizar-dash/src/web/ui/controls/index.ts +0 -35
  443. package/bizar-dash/src/web/ui/data/BarChart.tsx +0 -60
  444. package/bizar-dash/src/web/ui/data/DataTable.tsx +0 -216
  445. package/bizar-dash/src/web/ui/data/EmptyState.tsx +0 -60
  446. package/bizar-dash/src/web/ui/data/ErrorState.tsx +0 -56
  447. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +0 -106
  448. package/bizar-dash/src/web/ui/data/LoadingState.tsx +0 -65
  449. package/bizar-dash/src/web/ui/data/Sparkline.tsx +0 -87
  450. package/bizar-dash/src/web/ui/data/StatTile.tsx +0 -87
  451. package/bizar-dash/src/web/ui/data/data.css +0 -540
  452. package/bizar-dash/src/web/ui/data/index.ts +0 -31
  453. package/bizar-dash/src/web/ui/feedback/Badge.tsx +0 -49
  454. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +0 -209
  455. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +0 -69
  456. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +0 -50
  457. package/bizar-dash/src/web/ui/feedback/Toast.tsx +0 -200
  458. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +0 -126
  459. package/bizar-dash/src/web/ui/feedback/feedback.css +0 -314
  460. package/bizar-dash/src/web/ui/feedback/index.ts +0 -43
  461. package/bizar-dash/src/web/ui/index.ts +0 -57
  462. package/bizar-dash/src/web/ui/layout/AppShell.tsx +0 -51
  463. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +0 -97
  464. package/bizar-dash/src/web/ui/layout/Panel.tsx +0 -73
  465. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +0 -39
  466. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +0 -131
  467. package/bizar-dash/src/web/ui/layout/Tabs.tsx +0 -133
  468. package/bizar-dash/src/web/ui/layout/Topbar.tsx +0 -42
  469. package/bizar-dash/src/web/ui/layout/ViewHeader.tsx +0 -48
  470. package/bizar-dash/src/web/ui/layout/index.ts +0 -34
  471. package/bizar-dash/src/web/ui/layout/layout.css +0 -464
  472. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +0 -199
  473. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +0 -95
  474. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +0 -93
  475. package/bizar-dash/src/web/ui/navigation/index.ts +0 -17
  476. package/bizar-dash/src/web/ui/navigation/navigation.css +0 -343
  477. package/bizar-dash/src/web/ui/primitives/Box.tsx +0 -91
  478. package/bizar-dash/src/web/ui/primitives/Grid.tsx +0 -49
  479. package/bizar-dash/src/web/ui/primitives/Inline.tsx +0 -55
  480. package/bizar-dash/src/web/ui/primitives/Separator.tsx +0 -46
  481. package/bizar-dash/src/web/ui/primitives/Stack.tsx +0 -54
  482. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +0 -26
  483. package/bizar-dash/src/web/ui/primitives/index.ts +0 -23
  484. package/bizar-dash/src/web/ui/primitives/primitives.css +0 -183
  485. package/bizar-dash/src/web/ui/styles/globals.css +0 -86
  486. package/bizar-dash/src/web/ui/styles/reset.css +0 -125
  487. package/bizar-dash/src/web/ui/styles/tokens.css +0 -208
  488. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +0 -142
  489. package/bizar-dash/src/web/ui/theme/tokens.ts +0 -131
  490. package/bizar-dash/src/web/ui/theme/useTheme.ts +0 -22
  491. package/bizar-dash/src/web/ui/utils/cx.ts +0 -42
  492. package/bizar-dash/src/web/views/Activity.tsx +0 -1221
  493. package/bizar-dash/src/web/views/Agents.tsx +0 -964
  494. package/bizar-dash/src/web/views/Artifacts.tsx +0 -1494
  495. package/bizar-dash/src/web/views/BackgroundAgents.tsx +0 -822
  496. package/bizar-dash/src/web/views/Chat.tsx +0 -532
  497. package/bizar-dash/src/web/views/Config.tsx +0 -3
  498. package/bizar-dash/src/web/views/Doctor.tsx +0 -317
  499. package/bizar-dash/src/web/views/Eval.tsx +0 -372
  500. package/bizar-dash/src/web/views/EvalReport.tsx +0 -353
  501. package/bizar-dash/src/web/views/GoalPlanner.tsx +0 -158
  502. package/bizar-dash/src/web/views/Harness.tsx +0 -306
  503. package/bizar-dash/src/web/views/History.tsx +0 -353
  504. package/bizar-dash/src/web/views/Memory.tsx +0 -193
  505. package/bizar-dash/src/web/views/MiniMaxUsage.tsx +0 -942
  506. package/bizar-dash/src/web/views/ModView.tsx +0 -207
  507. package/bizar-dash/src/web/views/Mods.tsx +0 -706
  508. package/bizar-dash/src/web/views/Overview.tsx +0 -1343
  509. package/bizar-dash/src/web/views/Providers.tsx +0 -302
  510. package/bizar-dash/src/web/views/Schedules.tsx +0 -902
  511. package/bizar-dash/src/web/views/Settings.tsx +0 -308
  512. package/bizar-dash/src/web/views/Skills.tsx +0 -383
  513. package/bizar-dash/src/web/views/SpawnAgentModal.tsx +0 -221
  514. package/bizar-dash/src/web/views/Tasks.tsx +0 -789
  515. package/bizar-dash/src/web/views/Workspace.tsx +0 -294
  516. package/bizar-dash/src/web/views/glyphs/GlyphRenderer.tsx +0 -844
  517. package/bizar-dash/src/web/views/glyphs/components.tsx +0 -1098
  518. package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +0 -426
  519. package/bizar-dash/src/web/views/memory/FromScreenshotPanel.tsx +0 -23
  520. package/bizar-dash/src/web/views/memory/GitSyncPanel.tsx +0 -220
  521. package/bizar-dash/src/web/views/memory/LightragPanel.tsx +0 -310
  522. package/bizar-dash/src/web/views/memory/MemoryGraphLegend.tsx +0 -29
  523. package/bizar-dash/src/web/views/memory/MemoryGraphPanel.tsx +0 -192
  524. package/bizar-dash/src/web/views/memory/MemoryGraphView.tsx +0 -336
  525. package/bizar-dash/src/web/views/memory/MemoryOverview.tsx +0 -367
  526. package/bizar-dash/src/web/views/memory/MemoryStatusCard.tsx +0 -160
  527. package/bizar-dash/src/web/views/memory/ObsidianPanel.tsx +0 -650
  528. package/bizar-dash/src/web/views/memory/SemanticSearchPanel.tsx +0 -197
  529. package/bizar-dash/src/web/views/memory/VaultFromClipboardPanel.tsx +0 -101
  530. package/bizar-dash/src/web/views/settings/ActivitySection.tsx +0 -205
  531. package/bizar-dash/src/web/views/settings/AgentSection.tsx +0 -305
  532. package/bizar-dash/src/web/views/settings/AuthSection.tsx +0 -159
  533. package/bizar-dash/src/web/views/settings/EnvVarsSection.tsx +0 -15
  534. package/bizar-dash/src/web/views/settings/GeneralSection.tsx +0 -128
  535. package/bizar-dash/src/web/views/settings/HeadroomSection.tsx +0 -39
  536. package/bizar-dash/src/web/views/settings/MemorySection.tsx +0 -154
  537. package/bizar-dash/src/web/views/settings/NetworkSection.tsx +0 -87
  538. package/bizar-dash/src/web/views/settings/NotificationsSection.tsx +0 -34
  539. package/bizar-dash/src/web/views/settings/SystemLlmSection.tsx +0 -81
  540. package/bizar-dash/src/web/views/settings/ThemeSection.tsx +0 -168
  541. package/bizar-dash/src/web/views/settings/UpdatesSection.tsx +0 -256
  542. package/bizar-dash/src/web/views/settings/WorkspacesSection.tsx +0 -189
  543. package/packages/sdk/.harness/agents.json +0 -17
  544. package/packages/sdk/.harness/topology.json +0 -4
  545. /package/bizar-dash/tests/{BackgroundAgents.test.tsx → v7-archive/BackgroundAgents.test.tsx} +0 -0
  546. /package/bizar-dash/tests/{a11y → v7-archive/a11y}/forms.test.tsx +0 -0
  547. /package/bizar-dash/tests/{a11y.test.tsx → v7-archive/a11y.test.tsx} +0 -0
  548. /package/bizar-dash/tests/{autosave.test.tsx → v7-archive/autosave.test.tsx} +0 -0
  549. /package/bizar-dash/tests/{backup-restore.test.tsx → v7-archive/backup-restore.test.tsx} +0 -0
  550. /package/bizar-dash/tests/{chat-composer.test.tsx → v7-archive/chat-composer.test.tsx} +0 -0
  551. /package/bizar-dash/tests/{communication-log.test.tsx → v7-archive/communication-log.test.tsx} +0 -0
  552. /package/bizar-dash/tests/{components → v7-archive/components}/Modal.test.tsx +0 -0
  553. /package/bizar-dash/tests/{components → v7-archive/components}/Spinner.test.tsx +0 -0
  554. /package/bizar-dash/tests/{components → v7-archive/components}/StatusBadge.test.tsx +0 -0
  555. /package/bizar-dash/tests/{components → v7-archive/components}/doctor-panel.test.tsx +0 -0
  556. /package/bizar-dash/tests/{components → v7-archive/components}/screenshot-ocr.test.tsx +0 -0
  557. /package/bizar-dash/tests/{components → v7-archive/components}/settings-search.test.tsx +0 -0
  558. /package/bizar-dash/tests/{components → v7-archive/components}/workspace-selector.test.tsx +0 -0
  559. /package/bizar-dash/tests/{ui → v7-archive}/controls/Button.test.tsx +0 -0
  560. /package/bizar-dash/tests/{ui → v7-archive}/controls/Checkbox.test.tsx +0 -0
  561. /package/bizar-dash/tests/{ui → v7-archive}/controls/IconButton.test.tsx +0 -0
  562. /package/bizar-dash/tests/{ui → v7-archive}/controls/Kbd.test.tsx +0 -0
  563. /package/bizar-dash/tests/{ui → v7-archive}/controls/NumberInput.test.tsx +0 -0
  564. /package/bizar-dash/tests/{ui → v7-archive}/controls/RadioGroup.test.tsx +0 -0
  565. /package/bizar-dash/tests/{ui → v7-archive}/controls/SearchInput.test.tsx +0 -0
  566. /package/bizar-dash/tests/{ui → v7-archive}/controls/Select.test.tsx +0 -0
  567. /package/bizar-dash/tests/{ui → v7-archive}/controls/Slider.test.tsx +0 -0
  568. /package/bizar-dash/tests/{ui → v7-archive}/controls/TextInput.test.tsx +0 -0
  569. /package/bizar-dash/tests/{ui → v7-archive}/controls/Textarea.test.tsx +0 -0
  570. /package/bizar-dash/tests/{ui → v7-archive}/controls/Toggle.test.tsx +0 -0
  571. /package/bizar-dash/tests/{ui → v7-archive}/data/BarChart.test.tsx +0 -0
  572. /package/bizar-dash/tests/{ui → v7-archive}/data/DataTable.test.tsx +0 -0
  573. /package/bizar-dash/tests/{ui → v7-archive}/data/EmptyState.test.tsx +0 -0
  574. /package/bizar-dash/tests/{ui → v7-archive}/data/ErrorState.test.tsx +0 -0
  575. /package/bizar-dash/tests/{ui → v7-archive}/data/KeyValueList.test.tsx +0 -0
  576. /package/bizar-dash/tests/{ui → v7-archive}/data/LoadingState.test.tsx +0 -0
  577. /package/bizar-dash/tests/{ui → v7-archive}/data/Sparkline.test.tsx +0 -0
  578. /package/bizar-dash/tests/{ui → v7-archive}/data/StatTile.test.tsx +0 -0
  579. /package/bizar-dash/tests/{dep-graph.test.tsx → v7-archive/dep-graph.test.tsx} +0 -0
  580. /package/bizar-dash/tests/{eval-web-ui.test.tsx → v7-archive/eval-web-ui.test.tsx} +0 -0
  581. /package/bizar-dash/tests/{event-log.test.tsx → v7-archive/event-log.test.tsx} +0 -0
  582. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Badge.test.tsx +0 -0
  583. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Dialog.test.tsx +0 -0
  584. /package/bizar-dash/tests/{ui → v7-archive}/feedback/ProgressBar.test.tsx +0 -0
  585. /package/bizar-dash/tests/{ui → v7-archive}/feedback/StatusDot.test.tsx +0 -0
  586. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Toast.test.tsx +0 -0
  587. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Tooltip.test.tsx +0 -0
  588. /package/bizar-dash/tests/{goal-input.test.tsx → v7-archive/goal-input.test.tsx} +0 -0
  589. /package/bizar-dash/tests/{goap-planner.test.ts → v7-archive/goap-planner.test.ts} +0 -0
  590. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useModal.test.tsx +0 -0
  591. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useToast.test.tsx +0 -0
  592. /package/bizar-dash/tests/{ui → v7-archive}/layout/AppShell.test.tsx +0 -0
  593. /package/bizar-dash/tests/{ui → v7-archive}/layout/Breadcrumbs.test.tsx +0 -0
  594. /package/bizar-dash/tests/{ui → v7-archive}/layout/Panel.test.tsx +0 -0
  595. /package/bizar-dash/tests/{ui → v7-archive}/layout/PanelHeader.test.tsx +0 -0
  596. /package/bizar-dash/tests/{ui → v7-archive}/layout/Sidebar.test.tsx +0 -0
  597. /package/bizar-dash/tests/{ui → v7-archive}/layout/Tabs.test.tsx +0 -0
  598. /package/bizar-dash/tests/{ui → v7-archive}/layout/Topbar.test.tsx +0 -0
  599. /package/bizar-dash/tests/{ui → v7-archive}/layout/ViewHeader.test.tsx +0 -0
  600. /package/bizar-dash/tests/{lib → v7-archive/lib}/i18n.test.ts +0 -0
  601. /package/bizar-dash/tests/{lib → v7-archive/lib}/search-fuzzy.test.ts +0 -0
  602. /package/bizar-dash/tests/{lib → v7-archive/lib}/utils.test.ts +0 -0
  603. /package/bizar-dash/tests/{memory-graph-view.test.tsx → v7-archive/memory-graph-view.test.tsx} +0 -0
  604. /package/bizar-dash/tests/{mobile-chat.test.tsx → v7-archive/mobile-chat.test.tsx} +0 -0
  605. /package/bizar-dash/tests/{mobile-layout.test.tsx → v7-archive/mobile-layout.test.tsx} +0 -0
  606. /package/bizar-dash/tests/{mobile-overview.test.tsx → v7-archive/mobile-overview.test.tsx} +0 -0
  607. /package/bizar-dash/tests/{mobile-settings.test.tsx → v7-archive/mobile-settings.test.tsx} +0 -0
  608. /package/bizar-dash/tests/{mobile-tasks.test.tsx → v7-archive/mobile-tasks.test.tsx} +0 -0
  609. /package/bizar-dash/tests/{ui → v7-archive}/navigation/CommandPalette.test.tsx +0 -0
  610. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavGroup.test.tsx +0 -0
  611. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavLink.test.tsx +0 -0
  612. /package/bizar-dash/tests/{quality-gates.test.tsx → v7-archive/quality-gates.test.tsx} +0 -0
  613. /package/bizar-dash/tests/{settings-layout.test.tsx → v7-archive/settings-layout.test.tsx} +0 -0
  614. /package/bizar-dash/tests/{settings-mode-wiring.test.tsx → v7-archive/settings-mode-wiring.test.tsx} +0 -0
  615. /package/bizar-dash/tests/{settings-nav.test.tsx → v7-archive/settings-nav.test.tsx} +0 -0
  616. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Box.test.tsx +0 -0
  617. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Grid.test.tsx +0 -0
  618. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Inline.test.tsx +0 -0
  619. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Separator.test.tsx +0 -0
  620. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Stack.test.tsx +0 -0
  621. /package/bizar-dash/tests/{views → v7-archive/views}/Agents.test.tsx +0 -0
  622. /package/bizar-dash/tests/{views → v7-archive/views}/Memory.test.tsx +0 -0
  623. /package/bizar-dash/tests/{views → v7-archive/views}/Overview.test.tsx +0 -0
  624. /package/bizar-dash/tests/{views → v7-archive/views}/Tasks.test.tsx +0 -0
  625. /package/bizar-dash/tests/{views → v7-archive/views}/sidebar.test.tsx +0 -0
  626. /package/bizar-dash/tests/{views → v7-archive/views}/topbar.test.tsx +0 -0
  627. /package/bizar-dash/tests/{voice-recorder.test.tsx → v7-archive/voice-recorder.test.tsx} +0 -0
@@ -1,108 +1,61 @@
1
- import { render, screen, act, fireEvent } from '@testing-library/react';
2
- import userEvent from '@testing-library/user-event';
3
- import { describe, it, expect, vi } from 'vitest';
4
- import { ToastContainer, ToastProvider, useToast } from '../../src/web/components/Toast';
5
-
6
- function ToastHarness() {
7
- const toast = useToast();
8
- return (
9
- <div>
10
- <button onClick={() => toast.show('Info message')}>Show Info</button>
11
- <button onClick={() => toast.success('Success!')}>Show Success</button>
12
- <button onClick={() => toast.error('Error!')}>Show Error</button>
13
- </div>
14
- );
15
- }
16
-
17
- describe('ToastContainer', () => {
18
- it('renders toast with message', () => {
19
- render(
20
- <ToastContainer
21
- toasts={[{ id: 1, kind: 'info', message: 'Test toast' }]}
22
- onDismiss={() => {}}
23
- />,
24
- );
25
- expect(screen.getByText('Test toast')).toBeInTheDocument();
1
+ /**
2
+ * tests/components/Toast.test.tsx
3
+ *
4
+ * v8 migration Toast test rewritten against the v8 Toaster / toast API.
5
+ *
6
+ * v7 used a `<ToastProvider>` context with imperative `toast()` calls.
7
+ * v8 uses Sonner directly: render `<Toaster />` once at the app root and
8
+ * call `toast.success(...)` / `toast.error(...)` from anywhere.
9
+ *
10
+ * Sonner renders toasts asynchronously into a portal — assertions use
11
+ * `findBy*` / `waitFor` rather than synchronous `getBy*`.
12
+ */
13
+ import { describe, it, expect, afterEach } from 'vitest';
14
+ import { render, screen, waitFor } from '@testing-library/react';
15
+ import { Toaster, toast } from '../../src/web/v8/ui/index.js';
16
+
17
+ describe('Toaster (v8)', () => {
18
+ afterEach(() => {
19
+ // Sonner keeps toasts in state across tests unless we explicitly dismiss.
20
+ toast.dismiss();
26
21
  });
27
22
 
28
- it('has role="alert" and aria-live="assertive"', () => {
29
- render(
30
- <ToastContainer
31
- toasts={[{ id: 1, kind: 'info', message: 'Accessible toast' }]}
32
- onDismiss={() => {}}
33
- />,
34
- );
35
- const toast = screen.getByRole('alert');
36
- expect(toast).toBeInTheDocument();
37
- expect(toast).toHaveAttribute('aria-live', 'assertive');
23
+ it('renders the Sonner Toaster container', () => {
24
+ render(<Toaster />);
25
+ // Sonner exposes an `aria-label="Notifications"` region for SR users.
26
+ const region = screen.getByLabelText(/notifications/i);
27
+ expect(region).toBeInTheDocument();
38
28
  });
39
- });
40
29
 
41
- describe('ToastProvider + useToast', () => {
42
- afterEach(() => {
43
- vi.useRealTimers();
30
+ it('exposes the imperative toast surface', () => {
31
+ expect(typeof toast.success).toBe('function');
32
+ expect(typeof toast.error).toBe('function');
33
+ expect(typeof toast.info).toBe('function');
34
+ expect(typeof toast.warning).toBe('function');
35
+ expect(typeof toast.message).toBe('function');
36
+ expect(typeof toast.dismiss).toBe('function');
44
37
  });
45
38
 
46
- it('displays a toast when show is called', async () => {
47
- const user = userEvent.setup();
48
- render(
49
- <ToastProvider>
50
- <ToastHarness />
51
- </ToastProvider>,
52
- );
53
-
54
- await user.click(screen.getByText('Show Info'));
55
- expect(screen.getByText('Info message')).toBeInTheDocument();
39
+ it('toast.success emits a toast with the message text', async () => {
40
+ render(<Toaster />);
41
+ toast.success('Saved!');
42
+ expect(await screen.findByText('Saved!')).toBeInTheDocument();
56
43
  });
57
44
 
58
- it('displays multiple toasts stacked', async () => {
59
- const user = userEvent.setup();
60
- render(
61
- <ToastProvider>
62
- <ToastHarness />
63
- </ToastProvider>,
64
- );
65
-
66
- await user.click(screen.getByText('Show Success'));
67
- await user.click(screen.getByText('Show Error'));
68
-
69
- expect(screen.getByText('Success!')).toBeInTheDocument();
70
- expect(screen.getByText('Error!')).toBeInTheDocument();
45
+ it('toast.error emits a toast with the error message text', async () => {
46
+ render(<Toaster />);
47
+ toast.error('Boom');
48
+ expect(await screen.findByText('Boom')).toBeInTheDocument();
71
49
  });
72
50
 
73
- it('auto-dismisses after the default timeout', () => {
74
- // Use fireEvent (synchronous) instead of userEvent to avoid
75
- // timer conflicts with vi.useFakeTimers
76
- vi.useFakeTimers();
77
-
78
- render(
79
- <ToastProvider>
80
- <ToastHarness />
81
- </ToastProvider>,
82
- );
83
-
84
- fireEvent.click(screen.getByText('Show Info'));
85
- expect(screen.getByText('Info message')).toBeInTheDocument();
86
-
87
- act(() => {
88
- vi.advanceTimersByTime(4000);
51
+ it('toast.dismiss removes a previously shown toast', async () => {
52
+ render(<Toaster />);
53
+ toast.warning('Heads up');
54
+ const node = await screen.findByText('Heads up');
55
+ expect(node).toBeInTheDocument();
56
+ toast.dismiss();
57
+ await waitFor(() => {
58
+ expect(screen.queryByText('Heads up')).not.toBeInTheDocument();
89
59
  });
90
-
91
- expect(screen.queryByText('Info message')).not.toBeInTheDocument();
92
- });
93
-
94
- it('dismisses a toast when dismiss button is clicked', async () => {
95
- const user = userEvent.setup();
96
- render(
97
- <ToastProvider>
98
- <ToastHarness />
99
- </ToastProvider>,
100
- );
101
-
102
- await user.click(screen.getByText('Show Info'));
103
- expect(screen.getByText('Info message')).toBeInTheDocument();
104
-
105
- await user.click(screen.getByLabelText('Dismiss'));
106
- expect(screen.queryByText('Info message')).not.toBeInTheDocument();
107
60
  });
108
61
  });
@@ -0,0 +1,177 @@
1
+ /**
2
+ * goals-decompose.test.mjs — tests for goal → task auto-decomposition
3
+ * (Sprint S18). Covers:
4
+ *
5
+ * - POST /api/goals/:id/decompose creates one queued task per KR.
6
+ * - PATCH /api/tasks/:id/status (done) flows back to mark KR done
7
+ * and recomputes goal.progress%.
8
+ * - Re-decomposing a goal leaves existing taskIds intact.
9
+ *
10
+ * Run with: node --test bizar-dash/tests/goals-decompose.test.mjs
11
+ */
12
+ import { describe, it, before, after, beforeEach } from 'node:test';
13
+ import assert from 'node:assert/strict';
14
+ import express from 'express';
15
+ import { mkdtempSync, rmSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';
16
+ import { join, resolve } from 'node:path';
17
+ import { tmpdir } from 'node:os';
18
+
19
+ const REPO = resolve(import.meta.dirname, '..', '..');
20
+
21
+ let SANDBOX_HOME;
22
+ let ORIGINAL_HOME;
23
+ let app;
24
+ let progressPath;
25
+
26
+ before(async () => {
27
+ SANDBOX_HOME = mkdtempSync(join(tmpdir(), `bizar-goals-test-${Date.now()}-`));
28
+ ORIGINAL_HOME = process.env.HOME;
29
+ process.env.HOME = SANDBOX_HOME;
30
+ mkdirSync(join(SANDBOX_HOME, '.bizar'), { recursive: true });
31
+ progressPath = join(SANDBOX_HOME, '.bizar', 'PROGRESS.md');
32
+
33
+ // Seed PROGRESS.md with one goal + three key results.
34
+ writeFileSync(progressPath, [
35
+ '# PROGRESS',
36
+ '',
37
+ '## Ship the v8 dashboard',
38
+ '',
39
+ 'status: at-risk',
40
+ 'progress: 0',
41
+ 'due: 2026-09-30',
42
+ 'owner: sam',
43
+ '',
44
+ '- [ ] Wire backend SSE ← kr-1',
45
+ '- [ ] Wire command palette ← kr-2',
46
+ '- [ ] Wire settings ← kr-3',
47
+ '',
48
+ ].join('\n'), 'utf8');
49
+
50
+ const { createGoalsRouter } = await import('../src/server/routes/goals.mjs');
51
+ const { createTasksRouter } = await import('../src/server/routes/tasks.mjs');
52
+ // tasks-store writes to ~/.config/cline/projects/<id>/tasks.json
53
+ mkdirSync(join(SANDBOX_HOME, '.config', 'cline', 'projects', 'default'), { recursive: true });
54
+
55
+ app = express();
56
+ app.use(express.json());
57
+ app.use('/api', createGoalsRouter({ broadcast: () => {} }));
58
+ app.use('/api', createTasksRouter({ state: {}, broadcast: () => {}, projectRoot: SANDBOX_HOME }));
59
+ });
60
+
61
+ after(async () => {
62
+ process.env.HOME = ORIGINAL_HOME;
63
+ rmSync(SANDBOX_HOME, { recursive: true, force: true });
64
+ });
65
+
66
+ beforeEach(() => {
67
+ // Reset PROGRESS.md between tests so seed state is reproducible.
68
+ writeFileSync(progressPath, [
69
+ '# PROGRESS',
70
+ '',
71
+ '## Ship the v8 dashboard',
72
+ '',
73
+ 'status: at-risk',
74
+ 'progress: 0',
75
+ 'due: 2026-09-30',
76
+ 'owner: sam',
77
+ '',
78
+ '- [ ] Wire backend SSE ← kr-1',
79
+ '- [ ] Wire command palette ← kr-2',
80
+ '- [ ] Wire settings ← kr-3',
81
+ '',
82
+ ].join('\n'), 'utf8');
83
+ });
84
+
85
+ async function http(method, path, body) {
86
+ return new Promise((resolve, reject) => {
87
+ const server = app.listen(0, '127.0.0.1', async () => {
88
+ try {
89
+ const port = server.address().port;
90
+ const res = await fetch(`http://127.0.0.1:${port}${path}`, {
91
+ method,
92
+ headers: { 'content-type': 'application/json' },
93
+ body: body ? JSON.stringify(body) : undefined,
94
+ });
95
+ const text = await res.text();
96
+ let json;
97
+ try { json = text ? JSON.parse(text) : null; } catch { json = text; }
98
+ server.close();
99
+ resolve({ status: res.status, body: json });
100
+ } catch (err) { server.close(); reject(err); }
101
+ });
102
+ });
103
+ }
104
+
105
+ describe('Goals → Tasks auto-decomposition', () => {
106
+ it('decomposes a goal into one task per key result', async () => {
107
+ const goalsList = await http('GET', '/api/goals');
108
+ assert.equal(goalsList.status, 200);
109
+ const goal = goalsList.body.goals[0];
110
+ assert.ok(Array.isArray(goal.keyResults) && goal.keyResults.length === 3);
111
+
112
+ const decomp = await http('POST', `/api/goals/${goal.id}/decompose`);
113
+ assert.equal(decomp.status, 201);
114
+ assert.equal(decomp.body.created.length, 3);
115
+ for (const c of decomp.body.created) {
116
+ assert.ok(typeof c.task === 'string' && c.task.length > 0);
117
+ assert.ok(typeof c.kr === 'string' && c.kr.length > 0);
118
+ }
119
+
120
+ // Each KR should now carry a taskId.
121
+ const after = await http('GET', `/api/goals/${goal.id}`);
122
+ assert.equal(after.status, 200);
123
+ assert.ok(after.body.keyResults.every((kr) => Boolean(kr.taskId)));
124
+ });
125
+
126
+ it('rejects decomposition for a goal with no key results', async () => {
127
+ // Patch the goal to clear its KRs.
128
+ writeFileSync(progressPath, [
129
+ '# PROGRESS',
130
+ '',
131
+ '## Empty goal',
132
+ '',
133
+ 'status: active',
134
+ 'progress: 0',
135
+ '',
136
+ ].join('\n'), 'utf8');
137
+
138
+ const r = await http('POST', '/api/goals/G-empty/decompose');
139
+ // 404 because the goal id 'G-empty' isn't in the parsed list — fine.
140
+ assert.ok(r.status === 404 || r.status === 400);
141
+ });
142
+
143
+ it('reverse-sync marks KR done and recomputes progress when task moves to done', async () => {
144
+ // Decompose first.
145
+ const goalsList = await http('GET', '/api/goals');
146
+ const goal = goalsList.body.goals[0];
147
+ const decomp = await http('POST', `/api/goals/${goal.id}/decompose`);
148
+ assert.equal(decomp.status, 201);
149
+ const { task: taskId, kr: krId } = decomp.body.created[0];
150
+
151
+ // Mark the task done.
152
+ const moved = await http('PATCH', `/api/tasks/${taskId}/status`, { status: 'done' });
153
+ assert.equal(moved.status, 200);
154
+ assert.equal(moved.body.status, 'done');
155
+
156
+ // Goal KR should now be done; progress% should be 1/3.
157
+ const after = await http('GET', `/api/goals/${goal.id}`);
158
+ assert.equal(after.status, 200);
159
+ const kr = after.body.keyResults.find((k) => k.id === krId);
160
+ assert.equal(kr.done, true);
161
+ assert.ok(Math.abs(after.body.progress - 1 / 3) < 1e-6);
162
+
163
+ // And the PROGRESS.md on disk should reflect the change.
164
+ const onDisk = readFileSync(progressPath, 'utf8');
165
+ assert.ok(/progress: 0\.33/.test(onDisk), 'PROGRESS.md progress should be ~0.33');
166
+ });
167
+
168
+ it('does not duplicate tasks on a second decompose call', async () => {
169
+ const goalsList = await http('GET', '/api/goals');
170
+ const goal = goalsList.body.goals[0];
171
+ const first = await http('POST', `/api/goals/${goal.id}/decompose`);
172
+ assert.equal(first.body.created.length, 3);
173
+ const second = await http('POST', `/api/goals/${goal.id}/decompose`);
174
+ // Already-decomposed KRs are skipped, so 0 new tasks.
175
+ assert.equal(second.body.created.length, 0);
176
+ });
177
+ });
@@ -13,6 +13,23 @@ if (typeof globalThis.ResizeObserver === 'undefined') {
13
13
  } as unknown as typeof ResizeObserver;
14
14
  }
15
15
 
16
+ // jsdom doesn't ship IntersectionObserver either; SettingsView uses it
17
+ // to sync the left-rail highlight with scroll position. Stub so the
18
+ // effect's `new IntersectionObserver(...)` doesn't throw.
19
+ if (typeof globalThis.IntersectionObserver === 'undefined') {
20
+ globalThis.IntersectionObserver = class {
21
+ readonly root: Element | null = null;
22
+ readonly rootMargin = '';
23
+ readonly thresholds: ReadonlyArray<number> = [];
24
+ observe(): void {}
25
+ unobserve(): void {}
26
+ disconnect(): void {}
27
+ takeRecords(): IntersectionObserverEntry[] {
28
+ return [];
29
+ }
30
+ } as unknown as typeof IntersectionObserver;
31
+ }
32
+
16
33
  // Similarly for matchMedia — used by some component libs that the
17
34
  // dashboard pulls in. jsdom ships an empty stub but it lacks the
18
35
  // addEventListener/removeEventListener pair that React 18 expects.
@@ -32,6 +49,36 @@ if (typeof window !== 'undefined' && !window.matchMedia) {
32
49
  });
33
50
  }
34
51
 
52
+ // jsdom does not implement Element#scrollIntoView, but `cmdk` calls it on
53
+ // the highlighted item during keyboard navigation. Stub a no-op so tests
54
+ // that mount <Dialog><CommandPalette/></Dialog> don't throw.
55
+ if (typeof Element !== 'undefined' && !Element.prototype.scrollIntoView) {
56
+ Element.prototype.scrollIntoView = function scrollIntoView(): void {
57
+ /* noop */
58
+ };
59
+ }
60
+
61
+ // jsdom doesn't ship EventSource. AgentStreamPanel (Sprint S11) opens
62
+ // an SSE connection on mount, so we stub a no-op stand-in that lets the
63
+ // component subscribe without throwing. Tests that exercise the stream
64
+ // replace globalThis.EventSource with a mock before render.
65
+ if (typeof globalThis.EventSource === 'undefined') {
66
+ class StubEventSource {
67
+ static CONNECTING = 0;
68
+ static OPEN = 1;
69
+ static CLOSED = 2;
70
+ readyState = 0;
71
+ onopen: ((this: EventSource, ev: Event) => unknown) | null = null;
72
+ onerror: ((this: EventSource, ev: Event) => unknown) | null = null;
73
+ onmessage: ((this: EventSource, ev: MessageEvent) => unknown) | null = null;
74
+ addEventListener(): void {}
75
+ removeEventListener(): void {}
76
+ close(): void { this.readyState = 2; }
77
+ dispatchEvent(): boolean { return true; }
78
+ }
79
+ globalThis.EventSource = StubEventSource as unknown as typeof EventSource;
80
+ }
81
+
35
82
  afterEach(() => {
36
83
  cleanup();
37
84
  });
@@ -1,27 +1,42 @@
1
+ /**
2
+ * tests/ui/primitives/VisuallyHidden.test.tsx
3
+ *
4
+ * v8 migration — VisuallyHidden test rewritten against the v8 component.
5
+ *
6
+ * v7 used class `vh`; v8 uses `v8-visually-hidden`. v8 also exposes
7
+ * `as` (ElementType) and `forceVisible` props that v7 didn't have.
8
+ */
1
9
  import { describe, it, expect } from 'vitest';
2
10
  import { render, screen } from '@testing-library/react';
3
- import { VisuallyHidden } from '../../../src/web/ui/primitives/VisuallyHidden';
11
+ import { VisuallyHidden } from '../../../src/web/v8/ui/index.js';
4
12
 
5
- describe('VisuallyHidden', () => {
6
- it('renders its children inside a span', () => {
13
+ describe('VisuallyHidden (v8)', () => {
14
+ it('renders its children inside a span by default', () => {
7
15
  render(<VisuallyHidden>hidden text</VisuallyHidden>);
8
16
  const el = screen.getByText('hidden text');
9
17
  expect(el.tagName).toBe('SPAN');
10
18
  });
11
19
 
12
- it('applies the vh class for SR-only styling', () => {
20
+ it('applies the v8 visually-hidden class for SR-only styling', () => {
13
21
  render(<VisuallyHidden>sr-only</VisuallyHidden>);
14
- expect(screen.getByText('sr-only')).toHaveClass('vh');
22
+ expect(screen.getByText('sr-only')).toHaveClass('v8-visually-hidden');
15
23
  });
16
24
 
17
- it('passes additional attributes through to the span', () => {
18
- render(
19
- <VisuallyHidden id="vh-1" data-testid="vh">
20
- x
21
- </VisuallyHidden>,
22
- );
23
- const el = screen.getByTestId('vh');
24
- expect(el.id).toBe('vh-1');
25
- expect(el).toHaveClass('vh');
25
+ it('renders as a different element when `as` is provided', () => {
26
+ render(<VisuallyHidden as="div">label</VisuallyHidden>);
27
+ expect(screen.getByText('label').tagName).toBe('DIV');
26
28
  });
27
- });
29
+
30
+ it('does NOT apply the visually-hidden class when forceVisible is true', () => {
31
+ render(<VisuallyHidden forceVisible>debug</VisuallyHidden>);
32
+ const el = screen.getByText('debug');
33
+ expect(el).not.toHaveClass('v8-visually-hidden');
34
+ });
35
+
36
+ it('appends the user-provided className alongside the v8 class', () => {
37
+ render(<VisuallyHidden className="extra">label</VisuallyHidden>);
38
+ const el = screen.getByText('label');
39
+ expect(el).toHaveClass('v8-visually-hidden');
40
+ expect(el).toHaveClass('extra');
41
+ });
42
+ });
@@ -14,14 +14,53 @@ export default defineConfig({
14
14
  emptyOutDir: true,
15
15
  sourcemap: true,
16
16
  rollupOptions: {
17
+ // Single dashboard entry — v8. The legacy v7 (index.html) and v7
18
+ // mobile (mobile.html) entries were removed in the v8 cutover.
17
19
  input: {
18
- main: resolve(__dirname, 'src/web/index.html'),
19
- mobile: resolve(__dirname, 'src/web/mobile.html'),
20
+ main: resolve(__dirname, 'src/web/v8.html'),
21
+ },
22
+ // Code-split views so the initial bundle only ships what the
23
+ // Overview needs. Manual chunks are safe in v8 (no shared
24
+ // legacy state).
25
+ output: {
26
+ manualChunks(id) {
27
+ if (id.includes('/v8/views/')) return 'v8-views';
28
+ if (id.includes('node_modules/@dnd-kit')) return 'dnd-kit';
29
+ if (id.includes('node_modules/recharts')) return 'recharts';
30
+ if (id.includes('node_modules/cmdk')) return 'cmdk';
31
+ return undefined;
32
+ },
20
33
  },
21
34
  },
35
+ // Lift the chunk-size ceiling for code-split views: a single
36
+ // kanban view with dnd-kit + recharts is bigger than 500 kB
37
+ // unminified, but gzip shrinks it well under the warning line.
38
+ chunkSizeWarningLimit: 800,
39
+ },
40
+ define: {
41
+ // Surfaced via `import.meta.env.VITE_BUILD_SHA` so the sidebar
42
+ // footer can render the real git SHA instead of "build placeholder".
43
+ 'import.meta.env.VITE_BUILD_SHA': JSON.stringify(
44
+ process.env['BIZAR_BUILD_SHA'] ?? 'dev',
45
+ ),
22
46
  },
23
47
  server: {
24
48
  port: 5174,
25
49
  strictPort: false,
50
+ // v8 dashboard calls /api/* and /ws over the browser's same origin
51
+ // (port 5174). In dev we proxy those to the backend on PORT (4098
52
+ // by default) so the React app talks to the running server. In prod
53
+ // the backend serves /api/* itself.
54
+ proxy: {
55
+ '/api': {
56
+ target: process.env.VITE_BACKEND_URL || `http://127.0.0.1:${process.env.PORT || '4098'}`,
57
+ changeOrigin: true,
58
+ },
59
+ '/ws': {
60
+ target: process.env.VITE_BACKEND_URL || `http://127.0.0.1:${process.env.PORT || '4098'}`,
61
+ ws: true,
62
+ changeOrigin: true,
63
+ },
64
+ },
26
65
  },
27
66
  });
@@ -7,9 +7,14 @@ export default defineConfig({
7
7
  environment: 'jsdom',
8
8
  globals: true,
9
9
  setupFiles: ['./tests/setup.ts'],
10
- // tests/ is the canonical location; src/web/components/agents/ covers
11
- // feature-scoped component tests (e.g. F-035 RoutingDecisions.test.tsx).
12
- include: ['tests/**/*.test.{ts,tsx}', 'src/web/components/agents/**/*.test.{ts,tsx}'],
13
- exclude: ['tests/**/*.test.mjs'],
10
+ // The v8 dashboard is the only test surface that ships.
11
+ include: [
12
+ 'tests/**/*.test.{ts,tsx}',
13
+ 'src/web/v8/**/*.test.{ts,tsx}',
14
+ ],
15
+ exclude: [
16
+ 'tests/**/*.test.mjs',
17
+ 'tests/v7-archive/**',
18
+ ],
14
19
  },
15
20
  });
package/cli/bin.mjs CHANGED
@@ -75,6 +75,38 @@ if (
75
75
  await ensureSetup({ silent: true });
76
76
  }
77
77
 
78
+ // ── Build guard (v8.0.2) ─────────────────────────────────────────────────────
79
+ // The dashboard imports `packages/sdk/dist/memory/index.js` and the
80
+ // plugin loader expects `plugins/bizar/dist/index.js`. On a fresh npm
81
+ // install these directories are missing because the tarball ships only
82
+ // TS source. Build them once on entry so `bizar dash start` (and any
83
+ // other subcommand that touches the dashboard) never crashes with
84
+ // `Cannot find module .../packages/sdk/dist/memory/index.js` or
85
+ // `Plugin source not found at .../plugins/bizar`. Both builders are
86
+ // idempotent and skip when dist/ already exists.
87
+ if (
88
+ !isHelpRequest &&
89
+ !isVersionRequest &&
90
+ !process.env.BIZAR_SKIP_BUILD
91
+ ) {
92
+ try {
93
+ const { buildSdk, buildPlugin } = await import('./provision-claude.mjs');
94
+ const sdkRes = await buildSdk();
95
+ if (sdkRes.ok && !sdkRes.skipped) {
96
+ console.error(chalk.dim(` → ${sdkRes.message}`));
97
+ }
98
+ const plugRes = await buildPlugin();
99
+ if (plugRes.ok && !plugRes.skipped) {
100
+ console.error(chalk.dim(` → ${plugRes.message}`));
101
+ }
102
+ } catch (err) {
103
+ // Best-effort: never abort the user command on a build hiccup.
104
+ if (process.env.BIZAR_DEBUG) {
105
+ console.error(chalk.dim(` [build-guard] ${err.message}`));
106
+ }
107
+ }
108
+ }
109
+
78
110
  // ── Banner ─────────────────────────────────────────────────────────────────────
79
111
 
80
112
  function showBanner() {
package/cli/install.mjs CHANGED
@@ -1,5 +1,4 @@
1
1
  import chalk from 'chalk';
2
- import boxen from 'boxen';
3
2
  import { existsSync, lstatSync, rmSync } from 'node:fs';
4
3
  import { join, dirname } from 'node:path';
5
4
  import { fileURLToPath } from 'node:url';
@@ -114,6 +113,32 @@ export async function installPluginFromGlobal(opts = {}) {
114
113
  return false;
115
114
  }
116
115
 
116
+ // ── Auto-build: if src exists but dist/ does not, run the tsc build ──
117
+ // v8.0.2 — fresh npm installs ship only `plugins/bizar/index.ts` and no
118
+ // compiled entry. The plugin loader previously bailed here with the
119
+ // misleading "Plugin source not found" message even though the directory
120
+ // was present; the real blocker was the missing compiled output. Try to
121
+ // build once before giving up. Best-effort: build failures keep the old
122
+ // error path (still false return) so the user gets a clear next step.
123
+ const distEntry = join(pluginPath, 'dist', 'index.js');
124
+ if (!existsSync(distEntry)) {
125
+ try {
126
+ const { buildPlugin } = await import('./provision-claude.mjs');
127
+ const buildRes = await buildPlugin();
128
+ if (buildRes.ok && !buildRes.skipped) {
129
+ console.log(chalk.dim(` auto-built plugin (${buildRes.message})`));
130
+ } else if (!buildRes.ok) {
131
+ console.log(chalk.yellow(` ⚠ Plugin auto-build failed: ${buildRes.message}`));
132
+ console.log(chalk.dim(' Run `bizar install` from a checkout, or:'));
133
+ console.log(chalk.dim(' npx tsc -p plugins/bizar/tsconfig.json'));
134
+ return false;
135
+ }
136
+ } catch (err) {
137
+ console.log(chalk.yellow(` ⚠ Plugin auto-build threw: ${err.message}`));
138
+ return false;
139
+ }
140
+ }
141
+
117
142
  await mkdir(destDir, { recursive: true });
118
143
 
119
144
  async function copyRecursive(srcDir, dstDir) {