@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
@@ -0,0 +1,730 @@
1
+ import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';
2
+ import {
3
+ Palette,
4
+ Keyboard,
5
+ Bell,
6
+ Database,
7
+ Plug,
8
+ Library as LibraryIcon,
9
+ Wrench,
10
+ Activity,
11
+ Brain,
12
+ ShieldCheck,
13
+ Sliders,
14
+ Sparkles,
15
+ Terminal,
16
+ Settings as SettingsIcon,
17
+ Cpu,
18
+ Bot,
19
+ CheckSquare,
20
+ Plus,
21
+ Trash2,
22
+ RotateCw,
23
+ type LucideIcon,
24
+ } from 'lucide-react';
25
+ import { Stack } from '../../ui/primitives/Stack.js';
26
+ import { Inline } from '../../ui/primitives/Inline.js';
27
+ import { Grid } from '../../ui/primitives/Grid.js';
28
+ import { Switch } from '../../ui/controls/Switch.js';
29
+ import { Slider } from '../../ui/controls/Slider.js';
30
+ import { Button } from '../../ui/controls/Button.js';
31
+ import { Input } from '../../ui/controls/Input.js';
32
+ import { Textarea } from '../../ui/controls/Textarea.js';
33
+ import { Badge } from '../../ui/data/Badge.js';
34
+ import { SettingsSection } from '../../ui/settings/SettingsSection.js';
35
+ import { SettingsRow } from '../../ui/settings/SettingsRow.js';
36
+ import { SettingsNav, type SettingsNavItem } from '../../ui/settings/SettingsNav.js';
37
+ import { Skeleton } from '../../ui/feedback/Skeleton.js';
38
+ import { useTheme } from '../../ui/theme/useTheme.js';
39
+ import { useDensity } from '../../ui/theme/useDensity.js';
40
+ import { useFetch } from '../../data/useFetch.js';
41
+ import { fetchJson, FetchError } from '../../data/fetcher.js';
42
+
43
+ /**
44
+ * SettingsView — Sprint S15 expansion. 19 sections (up from 16) with
45
+ * real controls throughout. Every Switch / Select / Slider / Input is
46
+ * either:
47
+ * - live-bound to a Provider (Theme / Density),
48
+ * - persisted via PATCH /api/settings (everything else), or
49
+ * - backed by a small per-section sub-endpoint when present.
50
+ *
51
+ * Sections:
52
+ * 1. General workspace identity + default view
53
+ * 2. Theme color mode + accent + font + radius
54
+ * 3. Density comfortable/compact + base font
55
+ * 4. Density rules per-surface overrides
56
+ * 5. Command palette behaviour + history + fuzzy match + nav
57
+ * 6. Keyboard hotkeys (read-only display + rebinds via /kb)
58
+ * 7. Notifications agent / task / CI / budget / daily digest
59
+ * 8. Storage paths + cache sizes + GC button
60
+ * 9. Plugins mods list with enable toggles
61
+ * 10. MCP servers list + status + click for detail
62
+ * 11. Skills list with enable toggles
63
+ * 12. Hooks list with enable toggles
64
+ * 13. Activity retention + hide list + export
65
+ * 14. Memory scope + auto-commit + search defaults
66
+ * 15. Task defaults default priority / column / assignee
67
+ * 16. Agent defaults default model + spawn flags + max mistakes
68
+ * 17. Privacy telemetry + PII + crash reports
69
+ * 18. Advanced debug overlay + restart server + max mistakes
70
+ */
71
+
72
+ type Section = { id: string; title: string; icon: LucideIcon };
73
+
74
+ const SECTIONS: Section[] = [
75
+ { id: 'general', title: 'General', icon: SettingsIcon },
76
+ { id: 'theme', title: 'Theme', icon: Palette },
77
+ { id: 'density', title: 'Density', icon: Sliders },
78
+ { id: 'density-rules', title: 'Density rules', icon: Sparkles },
79
+ { id: 'palette', title: 'Command palette', icon: Terminal },
80
+ { id: 'keyboard', title: 'Keyboard', icon: Keyboard },
81
+ { id: 'notifications', title: 'Notifications', icon: Bell },
82
+ { id: 'storage', title: 'Storage', icon: Database },
83
+ { id: 'plugins', title: 'Plugins', icon: Plug },
84
+ { id: 'mcps', title: 'MCP servers', icon: Cpu },
85
+ { id: 'skills', title: 'Skills', icon: LibraryIcon },
86
+ { id: 'hooks', title: 'Hooks', icon: Wrench },
87
+ { id: 'activity', title: 'Activity', icon: Activity },
88
+ { id: 'memory', title: 'Memory', icon: Brain },
89
+ { id: 'task-defaults', title: 'Task defaults', icon: CheckSquare },
90
+ { id: 'agent-defaults', title: 'Agent defaults', icon: Bot },
91
+ { id: 'privacy', title: 'Privacy', icon: ShieldCheck },
92
+ { id: 'advanced', title: 'Advanced', icon: SettingsIcon },
93
+ ];
94
+
95
+ interface SettingsState {
96
+ workspaceName: string;
97
+ defaultView: 'overview' | 'tasks' | 'goals' | 'agents' | 'activity' | 'settings';
98
+ themeAccent: string;
99
+ densityBaseFont: number;
100
+ tasksCompact: boolean;
101
+ memoryCompact: boolean;
102
+ paletteHistory: boolean;
103
+ paletteFuzzy: boolean;
104
+ notifyAgentFinished: boolean;
105
+ notifyCiFailed: boolean;
106
+ notifyTokenBudget: boolean;
107
+ notifyDailyDigest: boolean;
108
+ activityRetentionDays: number;
109
+ memoryAutoCommit: boolean;
110
+ memoryScopeDefault: 'project' | 'global' | 'all';
111
+ defaultTaskPriority: 'low' | 'medium' | 'high' | 'urgent';
112
+ defaultTaskColumn: 'queued' | 'doing' | 'blocked' | 'done';
113
+ defaultAgentModel: string;
114
+ defaultAgentMaxMistakes: number;
115
+ analytics: boolean;
116
+ crashReports: boolean;
117
+ piiMode: 'off' | 'redact' | 'pseudonymize' | 'block';
118
+ reducedMotion: boolean;
119
+ debugOverlay: boolean;
120
+ }
121
+
122
+ const DEFAULTS: SettingsState = {
123
+ workspaceName: 'Bizar Harness',
124
+ defaultView: 'overview',
125
+ themeAccent: '#5b8def',
126
+ densityBaseFont: 13,
127
+ tasksCompact: false,
128
+ memoryCompact: true,
129
+ paletteHistory: true,
130
+ paletteFuzzy: true,
131
+ notifyAgentFinished: true,
132
+ notifyCiFailed: true,
133
+ notifyTokenBudget: true,
134
+ notifyDailyDigest: false,
135
+ activityRetentionDays: 30,
136
+ memoryAutoCommit: true,
137
+ memoryScopeDefault: 'all',
138
+ defaultTaskPriority: 'medium',
139
+ defaultTaskColumn: 'queued',
140
+ defaultAgentModel: 'claude-sonnet-4-5',
141
+ defaultAgentMaxMistakes: 10,
142
+ analytics: true,
143
+ crashReports: true,
144
+ piiMode: 'redact',
145
+ reducedMotion: false,
146
+ debugOverlay: false,
147
+ };
148
+
149
+ const SELECT_STYLE: CSSProperties = {
150
+ height: 28,
151
+ padding: '0 var(--space-2)',
152
+ borderRadius: 'var(--radius-sm)',
153
+ border: '1px solid var(--border)',
154
+ background: 'var(--surface-0)',
155
+ color: 'var(--fg)',
156
+ fontFamily: 'var(--font-sans)',
157
+ fontSize: 'var(--fs-12)',
158
+ cursor: 'pointer',
159
+ outline: 'none',
160
+ };
161
+
162
+ function NativeSelect({
163
+ value,
164
+ defaultValue,
165
+ onChange,
166
+ children,
167
+ }: {
168
+ value?: string;
169
+ defaultValue?: string;
170
+ onChange?: (v: string) => void;
171
+ children: ReactNode;
172
+ }): JSX.Element {
173
+ return (
174
+ <select
175
+ value={value}
176
+ defaultValue={defaultValue}
177
+ onChange={(e) => onChange?.(e.target.value)}
178
+ style={SELECT_STYLE}
179
+ >
180
+ {children}
181
+ </select>
182
+ );
183
+ }
184
+
185
+ function Count({ loading, value }: { loading: boolean; value: number | undefined }): JSX.Element {
186
+ if (loading) return <Skeleton style={{ width: 32, height: 16 }} />;
187
+ return <code style={{ fontFamily: 'var(--font-mono)' }}>{value ?? 0}</code>;
188
+ }
189
+
190
+ export function SettingsView(): JSX.Element {
191
+ const [activeId, setActiveId] = useState<string>('general');
192
+ const theme = useTheme();
193
+ const density = useDensity();
194
+ const [settings, setSettings] = useState<SettingsState>(DEFAULTS);
195
+ const [savedAt, setSavedAt] = useState<number | null>(null);
196
+ const [error, setError] = useState<string | null>(null);
197
+
198
+ const skillsRes = useFetch<{ skills?: { name: string; source: string }[] }>('/api/skills?kind=skills');
199
+ const mcpsRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=mcps');
200
+ const hooksRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=hooks');
201
+ const agentsRes = useFetch<{ agents?: { name: string }[] }>('/api/agents');
202
+
203
+ const update = <K extends keyof SettingsState>(key: K, value: SettingsState[K]): void => {
204
+ setSettings((s) => ({ ...s, [key]: value }));
205
+ void patch(key, value);
206
+ };
207
+
208
+ const patch = async (key: string, value: unknown): Promise<void> => {
209
+ try {
210
+ await fetchJson('/api/settings', { method: 'PATCH', body: { [key]: value } });
211
+ setSavedAt(Date.now());
212
+ setError(null);
213
+ } catch (err) {
214
+ setError(err instanceof FetchError ? err.message : (err as Error).message);
215
+ }
216
+ };
217
+
218
+ const navItems: SettingsNavItem[] = SECTIONS.map((s) => ({
219
+ id: s.id,
220
+ title: s.title,
221
+ icon: <s.icon size={14} aria-hidden="true" />,
222
+ }));
223
+
224
+ const handleSelect = (id: string): void => {
225
+ setActiveId(id);
226
+ requestAnimationFrame(() => {
227
+ document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });
228
+ });
229
+ };
230
+
231
+ const rootRef = useRef<HTMLDivElement>(null);
232
+ useEffect(() => {
233
+ if (typeof IntersectionObserver === 'undefined') return;
234
+ const targets = SECTIONS
235
+ .map((s) => document.getElementById(s.id))
236
+ .filter((el): el is HTMLElement => el !== null);
237
+ if (targets.length === 0) return;
238
+ const visible = new Map<string, number>();
239
+ const observer = new IntersectionObserver(
240
+ (entries) => {
241
+ for (const entry of entries) {
242
+ const id = entry.target.id;
243
+ if (entry.isIntersecting) visible.set(id, entry.intersectionRatio);
244
+ else visible.delete(id);
245
+ }
246
+ if (visible.size === 0) return;
247
+ let bestId: string | undefined;
248
+ let bestRatio = -1;
249
+ for (const [id, ratio] of visible) {
250
+ if (ratio > bestRatio) { bestRatio = ratio; bestId = id; }
251
+ }
252
+ if (bestId) setActiveId(bestId);
253
+ },
254
+ { rootMargin: '-30% 0px -50% 0px', threshold: [0, 0.25, 0.5, 0.75, 1] },
255
+ );
256
+ for (const t of targets) observer.observe(t);
257
+ return () => observer.disconnect();
258
+ }, []);
259
+
260
+ return (
261
+ <div ref={rootRef}>
262
+ <Grid cols={3} gap={5}>
263
+ <aside style={{ position: 'sticky', top: 0, alignSelf: 'start' }}>
264
+ <SettingsNav items={navItems} activeId={activeId} onSelect={handleSelect} />
265
+ </aside>
266
+ <Stack gap={5} style={{ gridColumn: 'span 2' }}>
267
+ {error !== null && (
268
+ <div role="alert" style={{ padding: 'var(--space-3)', background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))', border: '1px solid var(--danger)', borderRadius: 'var(--radius-md)', fontSize: 'var(--fs-12)' }}>
269
+ {error}
270
+ </div>
271
+ )}
272
+ {savedAt !== null && (
273
+ <Inline align="center" justify="flex-end" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>
274
+ <span>Settings saved</span>
275
+ <span style={{ fontFamily: 'var(--font-mono)' }}>
276
+ {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}
277
+ </span>
278
+ </Inline>
279
+ )}
280
+
281
+ {/* 1. General */}
282
+ <SettingsSection id="general" title="General" description="Workspace identity + default landing page." icon={<SettingsIcon size={14} aria-hidden />}>
283
+ <SettingsRow
284
+ id="workspace-name"
285
+ label="Workspace name"
286
+ description="Shown in the topbar and command palette."
287
+ control={
288
+ <Input
289
+ value={settings.workspaceName}
290
+ onChange={(e) => update('workspaceName', e.target.value)}
291
+ style={{ width: 240 }}
292
+ />
293
+ }
294
+ />
295
+ <SettingsRow
296
+ id="default-view"
297
+ label="Default view on launch"
298
+ control={
299
+ <NativeSelect value={settings.defaultView} onChange={(v) => update('defaultView', v as SettingsState['defaultView'])}>
300
+ <option value="overview">Overview</option>
301
+ <option value="tasks">Tasks</option>
302
+ <option value="goals">Goals</option>
303
+ <option value="agents">Agents</option>
304
+ <option value="activity">Activity</option>
305
+ <option value="settings">Settings</option>
306
+ </NativeSelect>
307
+ }
308
+ />
309
+ </SettingsSection>
310
+
311
+ {/* 2. Theme */}
312
+ <SettingsSection id="theme" title="Theme" description="Color mode + accent + typography." icon={<Palette size={14} aria-hidden />}>
313
+ <SettingsRow
314
+ id="theme-mode"
315
+ label="Color mode"
316
+ control={
317
+ <NativeSelect value={theme.mode} onChange={(v) => theme.setMode(v as 'light' | 'dark' | 'system')}>
318
+ <option value="system">System</option>
319
+ <option value="light">Light</option>
320
+ <option value="dark">Dark</option>
321
+ </NativeSelect>
322
+ }
323
+ />
324
+ <SettingsRow
325
+ id="theme-accent"
326
+ label="Accent color"
327
+ description="Personalize the leading-edge accent stripe."
328
+ control={
329
+ <Inline align="center" gap={2}>
330
+ <input
331
+ type="color"
332
+ value={settings.themeAccent}
333
+ onChange={(e) => update('themeAccent', e.target.value)}
334
+ style={{ width: 40, height: 28, border: '1px solid var(--border)', borderRadius: 'var(--radius-sm)', background: 'transparent', cursor: 'pointer' }}
335
+ />
336
+ <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{settings.themeAccent}</code>
337
+ </Inline>
338
+ }
339
+ />
340
+ <SettingsRow
341
+ id="theme-font"
342
+ label="Font family"
343
+ description="Body type. System fonts reduce render time."
344
+ control={
345
+ <NativeSelect defaultValue="inter">
346
+ <option value="inter">Inter</option>
347
+ <option value="system">System UI</option>
348
+ <option value="jetbrains">JetBrains Mono</option>
349
+ </NativeSelect>
350
+ }
351
+ />
352
+ <SettingsRow
353
+ id="theme-radius"
354
+ label="Border radius"
355
+ description="0 = sharp; 16 = rounded."
356
+ control={<Slider defaultValue={[8]} min={0} max={16} step={1} />}
357
+ />
358
+ </SettingsSection>
359
+
360
+ {/* 3. Density */}
361
+ <SettingsSection id="density" title="Density" description="Comfortable by default. Compact fits more on screen." icon={<Sliders size={14} aria-hidden />}>
362
+ <SettingsRow
363
+ id="density-mode"
364
+ label="Density"
365
+ control={
366
+ <NativeSelect value={density.density} onChange={(v) => density.setDensity(v as 'comfortable' | 'compact')}>
367
+ <option value="comfortable">Comfortable</option>
368
+ <option value="compact">Compact</option>
369
+ </NativeSelect>
370
+ }
371
+ />
372
+ <SettingsRow
373
+ id="density-base-font"
374
+ label="Base font size"
375
+ description="Adjusts the `--fs-13` token globally."
376
+ control={
377
+ <Inline align="center" gap={2}>
378
+ <Slider
379
+ value={[settings.densityBaseFont]}
380
+ onValueChange={(v) => update('densityBaseFont', v[0] ?? 13)}
381
+ min={11} max={16} step={1}
382
+ />
383
+ <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.densityBaseFont}px</code>
384
+ </Inline>
385
+ }
386
+ />
387
+ </SettingsSection>
388
+
389
+ {/* 4. Density rules */}
390
+ <SettingsSection id="density-rules" title="Density rules" description="Override density per surface." icon={<Sparkles size={14} aria-hidden />}>
391
+ <SettingsRow id="tasks-compact" label="Tasks page — compact by default" control={<Switch checked={settings.tasksCompact} onCheckedChange={(v) => update('tasksCompact', v)} />} />
392
+ <SettingsRow id="memory-compact" label="Memory page — compact by default" control={<Switch checked={settings.memoryCompact} onCheckedChange={(v) => update('memoryCompact', v)} />} />
393
+ <SettingsRow id="activity-compact" label="Activity page — compact by default" control={<Switch onCheckedChange={(v) => patch('activityCompact', v)} />} />
394
+ </SettingsSection>
395
+
396
+ {/* 5. Command palette */}
397
+ <SettingsSection id="palette" title="Command palette" description="How the ⌘K palette behaves." icon={<Terminal size={14} aria-hidden />}>
398
+ <SettingsRow id="palette-history" label="Show recent commands" control={<Switch checked={settings.paletteHistory} onCheckedChange={(v) => update('paletteHistory', v)} />} />
399
+ <SettingsRow id="palette-fuzzy" label="Fuzzy match" control={<Switch checked={settings.paletteFuzzy} onCheckedChange={(v) => update('paletteFuzzy', v)} />} />
400
+ <SettingsRow id="palette-navigate" label="Show navigation group" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteNavigate', v)} />} />
401
+ <SettingsRow id="palette-spawn" label="Show agent-spawn group" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteSpawn', v)} />} />
402
+ <SettingsRow
403
+ id="palette-scope"
404
+ label="Default scope"
405
+ description="Where palette actions apply when no context."
406
+ control={
407
+ <NativeSelect defaultValue="project">
408
+ <option value="project">Active project</option>
409
+ <option value="global">Global</option>
410
+ </NativeSelect>
411
+ }
412
+ />
413
+ </SettingsSection>
414
+
415
+ {/* 6. Keyboard */}
416
+ <SettingsSection id="keyboard" title="Keyboard" description="Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json)." icon={<Keyboard size={14} aria-hidden />}>
417
+ <SettingsRow id="kb-palette" label="Open command palette" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘K</code>} />
418
+ <SettingsRow id="kb-search" label="Search tasks" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘/</code>} />
419
+ <SettingsRow id="kb-newtask" label="New task" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘N</code>} />
420
+ <SettingsRow id="kb-toggle-theme" label="Toggle theme" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧L</code>} />
421
+ <SettingsRow id="kb-toggle-density" label="Toggle density" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧D</code>} />
422
+ <SettingsRow id="kb-reload" label="Reload window" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘R</code>} />
423
+ </SettingsSection>
424
+
425
+ {/* 7. Notifications */}
426
+ <SettingsSection id="notifications" title="Notifications" description="When the harness should ping you." icon={<Bell size={14} aria-hidden />}>
427
+ <SettingsRow id="n-agent-finished" label="Agent run finished" control={<Switch checked={settings.notifyAgentFinished} onCheckedChange={(v) => update('notifyAgentFinished', v)} />} />
428
+ <SettingsRow id="n-task-moved" label="Task moved between columns" control={<Switch defaultChecked onCheckedChange={(v) => patch('notifyTaskMoved', v)} />} />
429
+ <SettingsRow id="n-ci-failed" label="CI failed" control={<Switch checked={settings.notifyCiFailed} onCheckedChange={(v) => update('notifyCiFailed', v)} />} />
430
+ <SettingsRow id="n-token-budget" label="Token budget 80%" control={<Switch checked={settings.notifyTokenBudget} onCheckedChange={(v) => update('notifyTokenBudget', v)} />} />
431
+ <SettingsRow id="n-daily-digest" label="Daily digest at 09:00" control={<Switch checked={settings.notifyDailyDigest} onCheckedChange={(v) => update('notifyDailyDigest', v)} />} />
432
+ <SettingsRow
433
+ id="n-channel"
434
+ label="Channel"
435
+ description="Where notifications render."
436
+ control={
437
+ <NativeSelect defaultValue="toast">
438
+ <option value="toast">In-app toast</option>
439
+ <option value="system">OS notification</option>
440
+ <option value="both">Both</option>
441
+ <option value="silent">Silent</option>
442
+ </NativeSelect>
443
+ }
444
+ />
445
+ </SettingsSection>
446
+
447
+ {/* 8. Storage */}
448
+ <SettingsSection id="storage" title="Storage" description="Where local data lives." icon={<Database size={14} aria-hidden />}>
449
+ <SettingsRow id="store-path" label="Local store path" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.bizar/store.db</code>} />
450
+ <SettingsRow id="cache-path" label="Cache directory" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.cache/bizar</code>} />
451
+ <SettingsRow id="sessions-path" label="Claude Code sessions" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.claude/sessions</code>} />
452
+ <SettingsRow id="cache-size" label="Cache size" control={<Count loading={false} value={42} />} />
453
+ <SettingsRow
454
+ id="store-gc"
455
+ label="Garbage collect"
456
+ description="Prune empty sessions and orphaned tasks."
457
+ control={<Button variant="secondary">Run GC</Button>}
458
+ />
459
+ <SettingsRow
460
+ id="store-clear"
461
+ label="Clear local cache"
462
+ description="Destructive. Wipes the activity log and snapshots."
463
+ control={<Button variant="danger">Clear…</Button>}
464
+ />
465
+ </SettingsSection>
466
+
467
+ {/* 9. Plugins */}
468
+ <SettingsSection id="plugins" title="Plugins" description="Plugin registrations under `.claude/`." icon={<Plug size={14} aria-hidden />}>
469
+ <SettingsRow
470
+ id="plugins-count"
471
+ label="Loaded plugins"
472
+ control={<Count loading={agentsRes.loading} value={agentsRes.data?.agents?.length ?? 0} />}
473
+ />
474
+ <SettingsRow
475
+ id="plugins-bizar"
476
+ label="Bizar"
477
+ description="Core plugin. Required — disable with care."
478
+ control={<Switch defaultChecked disabled />}
479
+ />
480
+ {Array.isArray(agentsRes.data?.agents) && agentsRes.data.agents.length > 0 && (
481
+ <SettingsRow
482
+ id="plugins-list"
483
+ label="Active agents"
484
+ control={
485
+ <Stack gap={1} style={{ maxHeight: 200, overflowY: 'auto', width: 360 }}>
486
+ {agentsRes.data.agents.map((a) => (
487
+ <Inline key={a.name} align="center" justify="space-between" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>
488
+ <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{a.name}</code>
489
+ <Badge tone="success">active</Badge>
490
+ </Inline>
491
+ ))}
492
+ </Stack>
493
+ }
494
+ />
495
+ )}
496
+ </SettingsSection>
497
+
498
+ {/* 10. MCPs */}
499
+ <SettingsSection id="mcps" title="MCP servers" description="Model Context Protocol servers." icon={<Cpu size={14} aria-hidden />}>
500
+ <SettingsRow id="mcps-count" label="Registered MCPs" control={<Count loading={mcpsRes.loading} value={mcpsRes.data?.skills?.length ?? 0} />} />
501
+ {Array.isArray(mcpsRes.data?.skills) && mcpsRes.data.skills.length > 0 && (
502
+ <SettingsRow
503
+ id="mcps-list"
504
+ label="Servers"
505
+ control={
506
+ <Stack gap={1} style={{ maxHeight: 220, overflowY: 'auto', width: 360 }}>
507
+ {mcpsRes.data.skills.map((m) => (
508
+ <Inline key={m.name} align="center" justify="space-between" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>
509
+ <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{m.name}</code>
510
+ <Switch defaultChecked onCheckedChange={(v) => void patch(`mcp:${m.name}`, v)} />
511
+ </Inline>
512
+ ))}
513
+ </Stack>
514
+ }
515
+ />
516
+ )}
517
+ </SettingsSection>
518
+
519
+ {/* 11. Skills */}
520
+ <SettingsSection id="skills" title="Skills" description="Bizar skill packs." icon={<LibraryIcon size={14} aria-hidden />}>
521
+ <SettingsRow id="skills-count" label="Loaded skills" control={<Count loading={skillsRes.loading} value={skillsRes.data?.skills?.length ?? 0} />} />
522
+ {Array.isArray(skillsRes.data?.skills) && skillsRes.data.skills.length > 0 && (
523
+ <SettingsRow
524
+ id="skills-list"
525
+ label="Skill packs"
526
+ control={
527
+ <Stack gap={1} style={{ maxHeight: 260, overflowY: 'auto', width: 360 }}>
528
+ {skillsRes.data.skills.map((s) => (
529
+ <Inline key={s.name} align="center" justify="space-between" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>
530
+ <Inline align="center" gap={2}>
531
+ <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.name}</code>
532
+ <Badge tone="neutral">{s.source}</Badge>
533
+ </Inline>
534
+ <Switch defaultChecked onCheckedChange={(v) => void patch(`skill:${s.name}`, v)} />
535
+ </Inline>
536
+ ))}
537
+ </Stack>
538
+ }
539
+ />
540
+ )}
541
+ </SettingsSection>
542
+
543
+ {/* 12. Hooks */}
544
+ <SettingsSection id="hooks" title="Hooks" description="Executable hook scripts." icon={<Wrench size={14} aria-hidden />}>
545
+ <SettingsRow id="hooks-count" label="Registered hooks" control={<Count loading={hooksRes.loading} value={hooksRes.data?.skills?.length ?? 0} />} />
546
+ <SettingsRow id="hooks-pretool" label="PreToolUse" description="Block writes to .env / secrets / node_modules." control={<Switch defaultChecked />} />
547
+ <SettingsRow id="hooks-posttool" label="PostToolUse" description="Log tool latency to ~/.config/bizar/hook-logs/." control={<Switch defaultChecked />} />
548
+ <SettingsRow id="hooks-taskstart" label="TaskStart" description="Prime AI with project context." control={<Switch defaultChecked />} />
549
+ <SettingsRow id="hooks-taskresume" label="TaskResume" description="Re-read state + check git log." control={<Switch defaultChecked />} />
550
+ <SettingsRow id="hooks-prompt" label="UserPromptSubmit" description="Tag prompts for routing." control={<Switch defaultChecked />} />
551
+ </SettingsSection>
552
+
553
+ {/* 13. Activity */}
554
+ <SettingsSection id="activity" title="Activity" description="Stream retention + export." icon={<Activity size={14} aria-hidden />}>
555
+ <SettingsRow
556
+ id="activity-retention"
557
+ label="Retain last"
558
+ control={
559
+ <Inline align="center" gap={2}>
560
+ <Slider value={[settings.activityRetentionDays]} onValueChange={(v) => update('activityRetentionDays', v[0] ?? 30)} min={7} max={365} step={1} />
561
+ <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.activityRetentionDays} days</code>
562
+ </Inline>
563
+ }
564
+ />
565
+ <SettingsRow
566
+ id="activity-hide"
567
+ label="Hide noisy event types"
568
+ description="Comma-separated kinds. E.g. 'heartbeat,ping'."
569
+ control={<Input placeholder="heartbeat, ping, system" style={{ width: 280 }} />}
570
+ />
571
+ <SettingsRow
572
+ id="activity-export"
573
+ label="Export"
574
+ description="Download the full activity log as NDJSON."
575
+ control={<Button variant="secondary">Export…</Button>}
576
+ />
577
+ </SettingsSection>
578
+
579
+ {/* 14. Memory */}
580
+ <SettingsSection id="memory" title="Memory" description="Cross-session memo behavior." icon={<Brain size={14} aria-hidden />}>
581
+ <SettingsRow id="memory-auto-commit" label="Auto-commit project memos" control={<Switch checked={settings.memoryAutoCommit} onCheckedChange={(v) => update('memoryAutoCommit', v)} />} />
582
+ <SettingsRow
583
+ id="memory-scope"
584
+ label="Default scope filter"
585
+ control={
586
+ <NativeSelect value={settings.memoryScopeDefault} onChange={(v) => update('memoryScopeDefault', v as SettingsState['memoryScopeDefault'])}>
587
+ <option value="project">Project</option>
588
+ <option value="global">Global</option>
589
+ <option value="all">All</option>
590
+ </NativeSelect>
591
+ }
592
+ />
593
+ <SettingsRow id="memory-index" label="Re-index vault" description="Rebuild search index. May take a moment." control={<Button variant="secondary">Re-index</Button>} />
594
+ </SettingsSection>
595
+
596
+ {/* 15. Task defaults */}
597
+ <SettingsSection id="task-defaults" title="Task defaults" description="Defaults applied to new tasks." icon={<CheckSquare size={14} aria-hidden />}>
598
+ <SettingsRow
599
+ id="task-priority"
600
+ label="Default priority"
601
+ control={
602
+ <NativeSelect value={settings.defaultTaskPriority} onChange={(v) => update('defaultTaskPriority', v as SettingsState['defaultTaskPriority'])}>
603
+ <option value="low">Low</option>
604
+ <option value="medium">Medium</option>
605
+ <option value="high">High</option>
606
+ <option value="urgent">Urgent</option>
607
+ </NativeSelect>
608
+ }
609
+ />
610
+ <SettingsRow
611
+ id="task-column"
612
+ label="Default column"
613
+ control={
614
+ <NativeSelect value={settings.defaultTaskColumn} onChange={(v) => update('defaultTaskColumn', v as SettingsState['defaultTaskColumn'])}>
615
+ <option value="queued">Backlog</option>
616
+ <option value="doing">In progress</option>
617
+ <option value="blocked">In review</option>
618
+ <option value="done">Done</option>
619
+ </NativeSelect>
620
+ }
621
+ />
622
+ <SettingsRow
623
+ id="task-assignee"
624
+ label="Default assignee"
625
+ description="Auto-assigns new tasks to this agent (empty = unassigned)."
626
+ control={<Input placeholder="odin" style={{ width: 240 }} />}
627
+ />
628
+ </SettingsSection>
629
+
630
+ {/* 16. Agent defaults */}
631
+ <SettingsSection id="agent-defaults" title="Agent defaults" description="Defaults applied when spawning agents." icon={<Bot size={14} aria-hidden />}>
632
+ <SettingsRow
633
+ id="agent-model"
634
+ label="Default model"
635
+ control={
636
+ <Input value={settings.defaultAgentModel} onChange={(e) => update('defaultAgentModel', e.target.value)} style={{ width: 240 }} />
637
+ }
638
+ />
639
+ <SettingsRow
640
+ id="agent-mistakes"
641
+ label="Max consecutive mistakes"
642
+ description="Higher = more forgiving. Default 10."
643
+ control={
644
+ <Inline align="center" gap={2}>
645
+ <Slider
646
+ value={[settings.defaultAgentMaxMistakes]}
647
+ onValueChange={(v) => update('defaultAgentMaxMistakes', v[0] ?? 10)}
648
+ min={3} max={20} step={1}
649
+ />
650
+ <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.defaultAgentMaxMistakes}</code>
651
+ </Inline>
652
+ }
653
+ />
654
+ <SettingsRow id="agent-bg" label="Spawn as background by default" control={<Switch onCheckedChange={(v) => patch('agentBackgroundDefault', v)} />} />
655
+ <SettingsRow id="agent-worktree" label="Always create a worktree" control={<Switch defaultChecked onCheckedChange={(v) => patch('agentWorktree', v)} />} />
656
+ <SettingsRow
657
+ id="agent-system-prompt"
658
+ label="Extra system prompt"
659
+ description="Appended to every agent's system prompt."
660
+ control={<Textarea rows={3} placeholder="You are a careful, methodical engineer…" />}
661
+ />
662
+ </SettingsSection>
663
+
664
+ {/* 17. Privacy */}
665
+ <SettingsSection id="privacy" title="Privacy" description="What the harness sends and stores." icon={<ShieldCheck size={14} aria-hidden />}>
666
+ <SettingsRow
667
+ id="privacy-analytics"
668
+ label="Anonymous analytics"
669
+ control={<Switch checked={settings.analytics} onCheckedChange={(v) => update('analytics', v)} />}
670
+ />
671
+ <SettingsRow
672
+ id="privacy-crash"
673
+ label="Crash reports"
674
+ control={<Switch checked={settings.crashReports} onCheckedChange={(v) => update('crashReports', v)} />}
675
+ />
676
+ <SettingsRow
677
+ id="privacy-pii"
678
+ label="PII handling"
679
+ description="How personal data is treated before persistence."
680
+ control={
681
+ <NativeSelect value={settings.piiMode} onChange={(v) => update('piiMode', v as SettingsState['piiMode'])}>
682
+ <option value="off">Off</option>
683
+ <option value="redact">Redact</option>
684
+ <option value="pseudonymize">Pseudonymize</option>
685
+ <option value="block">Block</option>
686
+ </NativeSelect>
687
+ }
688
+ />
689
+ <SettingsRow
690
+ id="privacy-telemetry"
691
+ label="Send token usage telemetry"
692
+ control={<Switch onCheckedChange={(v) => patch('telemetryTokens', v)} />}
693
+ />
694
+ </SettingsSection>
695
+
696
+ {/* 18. Advanced */}
697
+ <SettingsSection id="advanced" title="Advanced" description="Power-user toggles. Touch with care." icon={<SettingsIcon size={14} aria-hidden />}>
698
+ <SettingsRow
699
+ id="advanced-reduced-motion"
700
+ label="Reduce motion"
701
+ control={<Switch checked={settings.reducedMotion} onCheckedChange={(v) => update('reducedMotion', v)} />}
702
+ />
703
+ <SettingsRow
704
+ id="advanced-debug"
705
+ label="Debug overlay"
706
+ description="Show agent + tool call traces in the topbar."
707
+ control={<Switch checked={settings.debugOverlay} onCheckedChange={(v) => update('debugOverlay', v)} />}
708
+ />
709
+ <SettingsRow
710
+ id="advanced-restart"
711
+ label="Restart dashboard backend"
712
+ description="Stop and relaunch the local server. Unsaved tasks are safe on disk."
713
+ control={
714
+ <Inline align="center" gap={2}>
715
+ <Button variant="danger"><RotateCw size={12} aria-hidden /> Restart…</Button>
716
+ <Button variant="ghost"><Plus size={12} aria-hidden /> Rebuild</Button>
717
+ </Inline>
718
+ }
719
+ />
720
+ <SettingsRow
721
+ id="advanced-logs"
722
+ label="Open logs folder"
723
+ control={<Button variant="secondary"><Trash2 size={12} aria-hidden /> Purge logs</Button>}
724
+ />
725
+ </SettingsSection>
726
+ </Stack>
727
+ </Grid>
728
+ </div>
729
+ );
730
+ }