@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,126 +0,0 @@
1
- // src/web/components/agents/CommunicationLog.tsx — inter-agent message bus trace.
2
- //
3
- // v6.4.0 — F-036 (Goal Planner UI). Subscribes to ws.ts for any
4
- // event whose type starts with `agent:` and renders the last 200
5
- // messages with color coding by type. Bounded virtual-list window
6
- // so a runaway stream can't blow up the page.
7
- import { useEffect, useState } from 'react';
8
- import { MessageSquare, ArrowRight } from 'lucide-react';
9
- import { Ws } from '../../lib/ws';
10
- import { Card, CardTitle, CardMeta } from '../Card';
11
- import { Tag } from '../Tag';
12
-
13
- const MAX_ROWS = 200;
14
-
15
- type Entry = {
16
- id: string;
17
- ts: number;
18
- from: string;
19
- to: string;
20
- message: string;
21
- kind: 'info' | 'request' | 'success' | 'warning' | 'error' | 'status' | 'restarted' | 'stuck' | 'message';
22
- raw: unknown;
23
- };
24
-
25
- function classify(t: string): Entry['kind'] {
26
- if (t === 'agent:status') return 'status';
27
- if (t === 'agent:restarted') return 'restarted';
28
- if (t === 'agent:stuck') return 'stuck';
29
- if (t === 'agent:message') return 'message';
30
- return 'info';
31
- }
32
-
33
- function deriveEntry(t: string, payload: Record<string, unknown> | undefined, ts: number): Entry {
34
- const kind = classify(t);
35
- const id = `${ts}-${Math.random().toString(36).slice(2, 7)}`;
36
- if (t === 'agent:message') {
37
- const m = (payload?.message || payload) as Record<string, unknown>;
38
- return {
39
- id,
40
- ts,
41
- from: String(m?.from || 'unknown'),
42
- to: String(m?.to || 'unknown'),
43
- message: String(m?.text || m?.message || JSON.stringify(m).slice(0, 160)),
44
- kind,
45
- raw: payload,
46
- };
47
- }
48
- const agent = (payload?.agent || payload) as Record<string, unknown>;
49
- const name = String(agent?.name || 'agent');
50
- return {
51
- id,
52
- ts,
53
- from: name,
54
- to: kind === 'stuck' ? 'orchestrator' : 'broadcast',
55
- message: `${t} ${agent?.status ? `→ ${agent.status}` : ''}`.trim(),
56
- kind,
57
- raw: payload,
58
- };
59
- }
60
-
61
- interface Props {
62
- /** Override the max row count (default 200). */
63
- maxRows?: number;
64
- }
65
-
66
- export function CommunicationLog({ maxRows = MAX_ROWS }: Props) {
67
- const [rows, setRows] = useState<Entry[]>([]);
68
-
69
- useEffect(() => {
70
- const ws = new Ws();
71
- const off = ws.on((msg) => {
72
- const t = (msg as { type?: string }).type;
73
- if (!t || !t.startsWith('agent:')) return;
74
- const m = msg as { type: string; ts?: number } & Record<string, unknown>;
75
- const ts = Number(m.ts) || Date.now();
76
- setRows((prev) => {
77
- const next = [...prev, deriveEntry(t, m as Record<string, unknown>, ts)];
78
- return next.length > maxRows ? next.slice(next.length - maxRows) : next;
79
- });
80
- });
81
- return () => {
82
- off();
83
- ws.close();
84
- };
85
- }, [maxRows]);
86
-
87
- return (
88
- <Card className="comm-log" data-testid="communication-log">
89
- <div className="comm-log-header">
90
- <CardTitle>
91
- <MessageSquare size={14} aria-hidden /> Communication log
92
- </CardTitle>
93
- <Tag variant="neutral" data-testid="communication-log-count">{rows.length}</Tag>
94
- </div>
95
- <CardMeta>Inter-agent message bus trace · bounded to {maxRows} rows</CardMeta>
96
- <ul className="comm-log-list" data-testid="communication-log-list">
97
- {rows.length === 0 && (
98
- <li className="comm-log-empty" data-testid="communication-log-empty">
99
- No agent messages yet. Stream will appear here live.
100
- </li>
101
- )}
102
- {rows.slice().reverse().map((row) => (
103
- <li
104
- key={row.id}
105
- className={`comm-log-row is-${row.kind}`}
106
- data-testid="communication-log-row"
107
- data-kind={row.kind}
108
- >
109
- <div className="comm-log-row-meta">
110
- <span className="comm-log-from">{row.from}</span>
111
- <ArrowRight size={12} aria-hidden />
112
- <span className="comm-log-to">{row.to}</span>
113
- <Tag variant="neutral" className={`comm-log-kind is-${row.kind}`}>{row.kind}</Tag>
114
- <time className="comm-log-time" dateTime={new Date(row.ts).toISOString()}>
115
- {new Date(row.ts).toLocaleTimeString()}
116
- </time>
117
- </div>
118
- <div className="comm-log-message">{row.message}</div>
119
- </li>
120
- ))}
121
- </ul>
122
- </Card>
123
- );
124
- }
125
-
126
- export default CommunicationLog;
@@ -1,163 +0,0 @@
1
- // src/web/components/agents/DependencyGraph.tsx — DAG of plan step dependencies.
2
- //
3
- // v6.4.0 — F-036 (Goal Planner UI). Uses @xyflow/react (already in
4
- // Bizar deps) to render the plan's step graph. Falls back to a
5
- // hand-rolled table when no plan is supplied.
6
- import { useMemo } from 'react';
7
- import {
8
- ReactFlow,
9
- Background,
10
- Controls,
11
- MiniMap,
12
- type Node,
13
- type Edge,
14
- type NodeProps,
15
- Handle,
16
- Position,
17
- } from '@xyflow/react';
18
- import '@xyflow/react/dist/style.css';
19
- import { GitBranch } from 'lucide-react';
20
- import { Card, CardTitle, CardMeta } from '../Card';
21
- import { Tag } from '../Tag';
22
- import type { Plan } from '../../lib/goapPlanner';
23
-
24
- interface Props {
25
- plan: Plan | null;
26
- }
27
-
28
- function StepNode({ data }: NodeProps<Node<{ label: string; action: string; agent: string }>>) {
29
- return (
30
- <div className={`dep-node is-${(data as { action?: string }).action || 'research'}`}>
31
- <Handle type="target" position={Position.Left} className="dep-handle" />
32
- <div className="dep-node-action">{(data as { action?: string }).action}</div>
33
- <div className="dep-node-label">{(data as { label?: string }).label}</div>
34
- <div className="dep-node-agent">@{(data as { agent?: string }).agent}</div>
35
- <Handle type="source" position={Position.Right} className="dep-handle" />
36
- </div>
37
- );
38
- }
39
-
40
- const nodeTypes = { step: StepNode };
41
-
42
- export function DependencyGraph({ plan }: Props) {
43
- const nodes: Node[] = useMemo(() => {
44
- if (!plan) return [];
45
- const n = plan.steps.length;
46
- // Lay out nodes in a horizontal flow based on dep depth.
47
- const depths = new Map<string, number>();
48
- const computeDepth = (id: string, stack = new Set<string>()): number => {
49
- const cached = depths.get(id);
50
- if (cached !== undefined) return cached;
51
- if (stack.has(id)) return 0;
52
- stack.add(id);
53
- const step = plan.steps.find((s) => s.id === id);
54
- if (!step || step.deps.length === 0) {
55
- depths.set(id, 0);
56
- stack.delete(id);
57
- return 0;
58
- }
59
- let max = 0;
60
- for (const dep of step.deps) {
61
- const d = computeDepth(dep, stack);
62
- if (d > max) max = d;
63
- }
64
- depths.set(id, max + 1);
65
- stack.delete(id);
66
- return max + 1;
67
- };
68
- for (const s of plan.steps) computeDepth(s.id);
69
-
70
- const byDepth = new Map<number, string[]>();
71
- for (const s of plan.steps) {
72
- const d = depths.get(s.id) ?? 0;
73
- const arr = byDepth.get(d) || [];
74
- arr.push(s.id);
75
- byDepth.set(d, arr);
76
- }
77
- const nodesOut: Node[] = [];
78
- for (const [depth, ids] of byDepth) {
79
- const total = ids.length;
80
- ids.forEach((id, i) => {
81
- const step = plan.steps.find((s) => s.id === id);
82
- if (!step) return;
83
- const xOffset = 60 + depth * 220;
84
- const yOffset = 40 + (i - (total - 1) / 2) * 90;
85
- nodesOut.push({
86
- id: step.id,
87
- type: 'step',
88
- position: { x: xOffset, y: yOffset },
89
- data: {
90
- label: step.title,
91
- action: step.action,
92
- agent: step.agent,
93
- },
94
- });
95
- });
96
- }
97
- void n;
98
- return nodesOut;
99
- }, [plan]);
100
-
101
- const edges: Edge[] = useMemo(() => {
102
- if (!plan) return [];
103
- return plan.steps.flatMap((step) =>
104
- step.deps.map((dep) => ({
105
- id: `${dep}->${step.id}`,
106
- source: dep,
107
- target: step.id,
108
- animated: true,
109
- })),
110
- );
111
- }, [plan]);
112
-
113
- if (!plan) {
114
- return (
115
- <Card className="dep-graph" data-testid="dep-graph">
116
- <CardTitle>
117
- <GitBranch size={14} aria-hidden /> Dependency graph
118
- </CardTitle>
119
- <CardMeta>Submit a goal to render the dependency DAG.</CardMeta>
120
- </Card>
121
- );
122
- }
123
-
124
- if (plan.steps.length === 0) {
125
- return (
126
- <Card className="dep-graph" data-testid="dep-graph">
127
- <CardTitle>
128
- <GitBranch size={14} aria-hidden /> Dependency graph
129
- </CardTitle>
130
- <CardMeta>Empty plan — nothing to render.</CardMeta>
131
- </Card>
132
- );
133
- }
134
-
135
- return (
136
- <Card className="dep-graph" data-testid="dep-graph">
137
- <div className="dep-graph-header">
138
- <CardTitle>
139
- <GitBranch size={14} aria-hidden /> Dependency graph
140
- </CardTitle>
141
- <Tag variant="info">{plan.steps.length} nodes</Tag>
142
- <Tag variant="accent">{edges.length} edges</Tag>
143
- </div>
144
- <CardMeta>Plan step DAG · {plan.goal.slice(0, 80)}</CardMeta>
145
- <div className="dep-graph-canvas" data-testid="dep-graph-canvas">
146
- <ReactFlow
147
- nodes={nodes}
148
- edges={edges}
149
- nodeTypes={nodeTypes}
150
- fitView
151
- fitViewOptions={{ padding: 0.15 }}
152
- proOptions={{ hideAttribution: true }}
153
- >
154
- <Background gap={16} size={1} />
155
- <Controls showInteractive={false} />
156
- <MiniMap pannable zoomable />
157
- </ReactFlow>
158
- </div>
159
- </Card>
160
- );
161
- }
162
-
163
- export default DependencyGraph;
@@ -1,123 +0,0 @@
1
- // src/web/components/agents/QualityGates.tsx — pass/fail rubric display.
2
- //
3
- // v6.4.0 — F-036 (Goal Planner UI). Scores the four L09 rubric
4
- // dimensions (Correctness / Arch compliance / Test coverage /
5
- // Verification evidence) against the live plan. Each gate turns
6
- // green when the supplied metric meets the threshold documented in
7
- // `templates/evaluator-rubric.md`.
8
- import { Shield, CheckCircle2, XCircle, AlertTriangle } from 'lucide-react';
9
- import { Card, CardTitle, CardMeta } from '../Card';
10
- import { Tag } from '../Tag';
11
- import type { Plan } from '../../lib/goapPlanner';
12
-
13
- interface Metrics {
14
- /** 0 or 1 — whether `make check` is green. */
15
- compileCheck: boolean;
16
- /** Percentage of touched tests passing. */
17
- testCoverage: number;
18
- /** Percentage of arch-rules passing. */
19
- archScore: number;
20
- /** Verification evidence (commit hash or test output) present. */
21
- evidencePresent: boolean;
22
- }
23
-
24
- interface GateRow {
25
- name: string;
26
- status: 'passed' | 'warning' | 'failed';
27
- value?: number | boolean;
28
- threshold?: number | boolean;
29
- detail: string;
30
- }
31
-
32
- interface Props {
33
- plan: Plan | null;
34
- metrics: Metrics;
35
- }
36
-
37
- function evaluate(metrics: Metrics): GateRow[] {
38
- const compile: GateRow = metrics.compileCheck
39
- ? { name: 'Compile check', status: 'passed', value: true, threshold: true, detail: 'make check is green.' }
40
- : { name: 'Compile check', status: 'failed', value: false, threshold: true, detail: 'Typecheck error — fix before marking passing.' };
41
-
42
- const coverage: GateRow = metrics.testCoverage >= 80
43
- ? { name: 'Test coverage', status: 'passed', value: metrics.testCoverage, threshold: 80, detail: 'Coverage meets the B-grade threshold.' }
44
- : metrics.testCoverage >= 60
45
- ? { name: 'Test coverage', status: 'warning', value: metrics.testCoverage, threshold: 80, detail: 'Coverage is below the B-grade threshold.' }
46
- : { name: 'Test coverage', status: 'failed', value: metrics.testCoverage, threshold: 80, detail: 'Coverage is critical.' };
47
-
48
- const arch: GateRow = metrics.archScore >= 90
49
- ? { name: 'Arch compliance', status: 'passed', value: metrics.archScore, threshold: 90, detail: 'All non-trivial arch-rules satisfied.' }
50
- : metrics.archScore >= 70
51
- ? { name: 'Arch compliance', status: 'warning', value: metrics.archScore, threshold: 90, detail: 'Minor arch-rule violations.' }
52
- : { name: 'Arch compliance', status: 'failed', value: metrics.archScore, threshold: 90, detail: 'Multiple arch-rule violations.' };
53
-
54
- const evidence: GateRow = metrics.evidencePresent
55
- ? { name: 'Verification evidence', status: 'passed', value: true, threshold: true, detail: 'Test output + commit hash captured.' }
56
- : { name: 'Verification evidence', status: 'failed', value: false, threshold: true, detail: 'No evidence recorded yet.' };
57
-
58
- return [compile, coverage, arch, evidence];
59
- }
60
-
61
- function GateIcon({ status }: { status: GateRow['status'] }) {
62
- if (status === 'passed') return <CheckCircle2 size={14} className="qg-icon is-pass" />;
63
- if (status === 'warning') return <AlertTriangle size={14} className="qg-icon is-warn" />;
64
- return <XCircle size={14} className="qg-icon is-fail" />;
65
- }
66
-
67
- function GateTag({ status }: { status: GateRow['status'] }) {
68
- if (status === 'passed') return <Tag variant="success">passed</Tag>;
69
- if (status === 'warning') return <Tag variant="warning">warning</Tag>;
70
- return <Tag variant="error">failed</Tag>;
71
- }
72
-
73
- export function QualityGates({ plan, metrics }: Props) {
74
- const gates = evaluate(metrics);
75
- const passing = gates.filter((g) => g.status === 'passed').length;
76
- return (
77
- <Card className="qg-panel" data-testid="quality-gates">
78
- <div className="qg-header">
79
- <CardTitle>
80
- <Shield size={14} aria-hidden /> Quality gates
81
- </CardTitle>
82
- <Tag variant={passing === gates.length ? 'success' : passing > 0 ? 'warning' : 'error'}>
83
- {passing}/{gates.length} passing
84
- </Tag>
85
- </div>
86
- <CardMeta>
87
- L09 rubric (Correctness / Arch compliance / Test coverage / Verification evidence) —{' '}
88
- {plan ? `evaluating against plan with ${plan.steps.length} steps.` : 'awaiting plan.'}
89
- </CardMeta>
90
- <ul className="qg-list" data-testid="quality-gates-list">
91
- {gates.map((gate) => (
92
- <li
93
- key={gate.name}
94
- className={`qg-row is-${gate.status}`}
95
- data-testid="quality-gates-row"
96
- data-status={gate.status}
97
- >
98
- <div className="qg-row-head">
99
- <GateIcon status={gate.status} />
100
- <span className="qg-name">{gate.name}</span>
101
- <GateTag status={gate.status} />
102
- </div>
103
- <div className="qg-row-body">
104
- <span className="qg-detail">{gate.detail}</span>
105
- {typeof gate.value === 'number' && (
106
- <span className="qg-threshold">
107
- current: {gate.value}% · threshold: {gate.threshold}%
108
- </span>
109
- )}
110
- {typeof gate.value === 'boolean' && (
111
- <span className="qg-threshold">
112
- current: {String(gate.value)} · threshold: {String(gate.threshold)}
113
- </span>
114
- )}
115
- </div>
116
- </li>
117
- ))}
118
- </ul>
119
- </Card>
120
- );
121
- }
122
-
123
- export default QualityGates;
@@ -1,127 +0,0 @@
1
- // src/web/components/agents/RealTimeEventLog.tsx — streaming event ticker.
2
- //
3
- // v6.4.0 — F-036 (Goal Planner UI). Subscribes to ws.ts for ALL
4
- // events and renders a color-coded ticker. Bounded ring buffer so
5
- // a runaway server can't fill memory.
6
- import { useEffect, useMemo, useState } from 'react';
7
- import { Activity } from 'lucide-react';
8
- import { Ws } from '../../lib/ws';
9
- import { Card, CardTitle, CardMeta } from '../Card';
10
- import { Tag } from '../Tag';
11
-
12
- const MAX_ROWS = 500;
13
-
14
- type EventRow = {
15
- id: string;
16
- ts: number;
17
- type: string;
18
- severity: 'info' | 'success' | 'warning' | 'error' | 'control';
19
- preview: string;
20
- };
21
-
22
- function severityFor(type: string): EventRow['severity'] {
23
- if (type.startsWith('goal:')) return 'success';
24
- if (type.startsWith('task:')) return 'info';
25
- if (type.includes('error') || type.includes('fail')) return 'error';
26
- if (type.includes('stuck') || type.includes('blocked') || type.includes('warn')) return 'warning';
27
- if (type === 'ping' || type === 'pong' || type === 'refresh') return 'control';
28
- return 'info';
29
- }
30
-
31
- function previewOf(type: string, payload: Record<string, unknown> | undefined): string {
32
- if (!payload) return type;
33
- const keys = Object.keys(payload).slice(0, 3);
34
- return keys.map((k) => `${k}=${shortVal(payload[k])}`).join(' ') || type;
35
- }
36
-
37
- function shortVal(v: unknown): string {
38
- if (v == null) return 'null';
39
- if (typeof v === 'string') return v.length > 20 ? `"${v.slice(0, 20)}…"` : `"${v}"`;
40
- if (typeof v === 'number' || typeof v === 'boolean') return String(v);
41
- if (Array.isArray(v)) return `[${v.length}]`;
42
- if (typeof v === 'object') return `{${Object.keys(v).length}}`;
43
- return String(v);
44
- }
45
-
46
- export function RealTimeEventLog() {
47
- const [rows, setRows] = useState<EventRow[]>([]);
48
-
49
- useEffect(() => {
50
- const ws = new Ws();
51
- const off = ws.on((msg) => {
52
- const m = msg as { type?: string; ts?: number } & Record<string, unknown>;
53
- const t = m.type;
54
- if (!t) return;
55
- const ts = Number(m.ts) || Date.now();
56
- const row: EventRow = {
57
- id: `${ts}-${Math.random().toString(36).slice(2, 7)}`,
58
- ts,
59
- type: t,
60
- severity: severityFor(t),
61
- preview: previewOf(t, m as Record<string, unknown>),
62
- };
63
- setRows((prev) => {
64
- const next = [...prev, row];
65
- return next.length > MAX_ROWS ? next.slice(next.length - MAX_ROWS) : next;
66
- });
67
- });
68
- return () => {
69
- off();
70
- ws.close();
71
- };
72
- }, []);
73
-
74
- const summary = useMemo(() => {
75
- const counts: Record<EventRow['severity'], number> = {
76
- info: 0,
77
- success: 0,
78
- warning: 0,
79
- error: 0,
80
- control: 0,
81
- };
82
- for (const r of rows) counts[r.severity] += 1;
83
- return counts;
84
- }, [rows]);
85
-
86
- return (
87
- <Card className="event-log" data-testid="event-log">
88
- <div className="event-log-header">
89
- <CardTitle>
90
- <Activity size={14} aria-hidden /> Real-time events
91
- </CardTitle>
92
- <Tag variant="neutral" data-testid="event-log-count">{rows.length}</Tag>
93
- </div>
94
- <CardMeta>Live WebSocket event ticker · bounded to {MAX_ROWS} rows</CardMeta>
95
- <div className="event-log-summary" data-testid="event-log-summary">
96
- <Tag variant="info">info {summary.info}</Tag>
97
- <Tag variant="success">success {summary.success}</Tag>
98
- <Tag variant="warning">warning {summary.warning}</Tag>
99
- <Tag variant="error">error {summary.error}</Tag>
100
- <Tag variant="neutral">control {summary.control}</Tag>
101
- </div>
102
- <ul className="event-log-list" data-testid="event-log-list">
103
- {rows.length === 0 && (
104
- <li className="event-log-empty" data-testid="event-log-empty">
105
- No events yet. Events will stream here as the server emits them.
106
- </li>
107
- )}
108
- {rows.slice().reverse().map((row) => (
109
- <li
110
- key={row.id}
111
- className={`event-log-row is-${row.severity}`}
112
- data-testid="event-log-row"
113
- data-severity={row.severity}
114
- >
115
- <time className="event-log-time" dateTime={new Date(row.ts).toISOString()}>
116
- {new Date(row.ts).toLocaleTimeString()}
117
- </time>
118
- <code className="event-log-type">{row.type}</code>
119
- <span className="event-log-preview">{row.preview}</span>
120
- </li>
121
- ))}
122
- </ul>
123
- </Card>
124
- );
125
- }
126
-
127
- export default RealTimeEventLog;
@@ -1,148 +0,0 @@
1
- /**
2
- * src/web/components/agents/RoutingDecisions.test.tsx
3
- *
4
- * F-035 — vitest tests for the routing-decisions panel.
5
- * 3 tests required by the F-035 layers[] spec:
6
- * 1. renders the empty state when no decisions have been emitted
7
- * 2. renders a single decision via the `initial` prop
8
- * 3. renders multiple decisions via the WS subscription path
9
- *
10
- * The `subscribe` prop receives a `(msg: WsMessage) => void` handler
11
- * and returns an unsubscribe function. We capture the handler and
12
- * drive it directly — no real WebSocket needed.
13
- */
14
-
15
- import { describe, it, expect, vi } from 'vitest';
16
- import { render, screen, fireEvent, act, waitFor } from '@testing-library/react';
17
- import React from 'react';
18
- import { RoutingDecisions } from './RoutingDecisions';
19
- import type { RoutingDecision, WsMessage } from '../../lib/types';
20
-
21
- const dec = (id: string, tier: RoutingDecision['tier'], model: string, extras: Partial<RoutingDecision> = {}): RoutingDecision => ({
22
- id,
23
- ts: 1_700_000_000_000 + Number(id.replace(/\D/g, '') || 0) * 1000,
24
- tier,
25
- model,
26
- task: `task-${id}`,
27
- costUsd: tier === 'CODEMOD' ? 0 : 0.01,
28
- latencyMs: 250,
29
- ...extras,
30
- });
31
-
32
- describe('RoutingDecisions', () => {
33
- it('renders the empty state when no decisions have been emitted', () => {
34
- render(<RoutingDecisions />);
35
- const empty = screen.getByTestId('routing-decisions-empty');
36
- expect(empty).toBeTruthy();
37
- expect(empty.textContent).toMatch(/No routing decisions yet/i);
38
- // Confirm table is NOT rendered in empty state.
39
- expect(screen.queryByRole('table')).toBeNull();
40
- });
41
-
42
- it('renders a single decision via the initial prop', () => {
43
- const one = dec('1', 'CODEMOD', 'codemod:var-to-const');
44
- render(<RoutingDecisions initial={[one]} />);
45
-
46
- // Tier badge with the right class
47
- const row = screen.getByTestId(`routing-row-${one.id}`);
48
- expect(row).toBeTruthy();
49
- const badge = row.querySelector('.routing-tier-codemod');
50
- expect(badge).toBeTruthy();
51
- expect(badge?.textContent).toBe('CODEMOD');
52
-
53
- // Model + task + cost columns
54
- expect(row.querySelector('.routing-model')?.textContent).toBe('codemod:var-to-const');
55
- expect(row.querySelector('.routing-task')?.textContent).toBe('task-1');
56
- expect(row.querySelector('.routing-cost')?.textContent).toBe('$0');
57
- // latency = 250ms → "250ms"
58
- expect(row.querySelector('.routing-latency')?.textContent).toBe('250ms');
59
- });
60
-
61
- it('renders multiple decisions and filters by tier', () => {
62
- const list: RoutingDecision[] = [
63
- dec('1', 'CODEMOD', 'codemod:remove-console', { costUsd: 0 }),
64
- dec('2', 'TIER1', 'haiku', { costUsd: 0.0008 }),
65
- dec('3', 'TIER2', 'sonnet', { costUsd: 0.012 }),
66
- dec('4', 'TIER3', 'opus', { costUsd: 0.05 }),
67
- ];
68
-
69
- const { rerender } = render(<RoutingDecisions initial={list} />);
70
- // All four rows present
71
- for (const d of list) {
72
- expect(screen.getByTestId(`routing-row-${d.id}`)).toBeTruthy();
73
- }
74
-
75
- // Tier filter — only TIER2 row survives
76
- rerender(<RoutingDecisions initial={list} filterTier="TIER2" />);
77
- expect(screen.getByTestId('routing-row-3')).toBeTruthy();
78
- expect(screen.queryByTestId('routing-row-1')).toBeNull();
79
- expect(screen.queryByTestId('routing-row-2')).toBeNull();
80
- expect(screen.queryByTestId('routing-row-4')).toBeNull();
81
-
82
- // Subscribed WS append test — drive a `routing:decision` through
83
- // the captured handler.
84
- let capturedHandler: ((msg: WsMessage) => void) | null = null;
85
- const subscribe = (handler: (msg: WsMessage) => void) => {
86
- capturedHandler = handler;
87
- return () => { capturedHandler = null; };
88
- };
89
- const appended: RoutingDecision[] = [];
90
- const onAppend = (d: RoutingDecision) => appended.push(d);
91
-
92
- rerender(
93
- <RoutingDecisions
94
- initial={list}
95
- subscribe={subscribe}
96
- onAppend={onAppend}
97
- filterTier="ALL"
98
- />,
99
- );
100
- expect(capturedHandler).toBeTruthy();
101
- const fresh = dec('5', 'TIER3', 'opus-2', { costUsd: 0.07, latencyMs: 1200 });
102
- // Drive the handler inside act() so React commits the setDecisions.
103
- act(() => {
104
- capturedHandler!({ type: 'routing:decision', decision: fresh });
105
- });
106
- expect(screen.getByTestId('routing-row-5')).toBeTruthy();
107
- expect(appended).toHaveLength(1);
108
- expect(appended[0].id).toBe('5');
109
-
110
- // Malformed message should be ignored (no `routing:decision` type).
111
- capturedHandler!({ type: 'tasks:change', task: {} as never });
112
- expect(screen.queryByTestId('routing-row-')).toBeNull();
113
-
114
- // Empty filterTier = 'ALL' shows everything
115
- rerender(<RoutingDecisions initial={list} filterTier="ALL" />);
116
- for (const d of list) {
117
- expect(screen.getByTestId(`routing-row-${d.id}`)).toBeTruthy();
118
- }
119
- });
120
-
121
- it('respects maxRows by pruning oldest decisions', () => {
122
- // The component treats `initial` as most-recent-first (same
123
- // convention as the WS stream). Build the list newest-first so
124
- // maxRows=3 keeps the last 3 items from the array (the newest).
125
- const list: RoutingDecision[] = [
126
- dec('5', 'TIER1', 'haiku'),
127
- dec('4', 'TIER1', 'haiku'),
128
- dec('3', 'TIER1', 'haiku'),
129
- dec('2', 'TIER1', 'haiku'),
130
- dec('1', 'TIER1', 'haiku'),
131
- ];
132
- render(<RoutingDecisions initial={list} maxRows={3} />);
133
- // Only 3 of 5 should be visible (most-recent first)
134
- expect(screen.getByTestId('routing-row-5')).toBeTruthy();
135
- expect(screen.getByTestId('routing-row-4')).toBeTruthy();
136
- expect(screen.getByTestId('routing-row-3')).toBeTruthy();
137
- expect(screen.queryByTestId('routing-row-2')).toBeNull();
138
- expect(screen.queryByTestId('routing-row-1')).toBeNull();
139
- });
140
-
141
- it('compact prop toggles a different class', () => {
142
- const one = dec('1', 'CODEMOD', 'codemod:add-logging');
143
- const { container, rerender } = render(<RoutingDecisions initial={[one]} />);
144
- expect(container.querySelector('.routing-decisions-compact')).toBeNull();
145
- rerender(<RoutingDecisions initial={[one]} compact />);
146
- expect(container.querySelector('.routing-decisions-compact')).toBeTruthy();
147
- });
148
- });