@polderlabs/bizar 7.0.2 → 8.0.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 (490) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/bizar-dash/DESIGN.md +729 -969
  3. package/bizar-dash/GLYPH.md +418 -0
  4. package/bizar-dash/PLAN.md +1135 -0
  5. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js +6 -0
  6. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js.map +1 -0
  7. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js +1 -0
  8. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js.map +1 -0
  9. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js +1 -0
  10. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js.map +1 -0
  11. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js +8 -0
  12. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js.map +1 -0
  13. package/bizar-dash/dist/assets/Badge-Cd61wsBa.js +1 -0
  14. package/bizar-dash/dist/assets/Badge-Cd61wsBa.js.map +1 -0
  15. package/bizar-dash/dist/assets/Card-C_bvqXdQ.js +1 -0
  16. package/bizar-dash/dist/assets/Card-C_bvqXdQ.js.map +1 -0
  17. package/bizar-dash/dist/assets/EmptyState-BWQuKnk9.js +1 -0
  18. package/bizar-dash/dist/assets/EmptyState-BWQuKnk9.js.map +1 -0
  19. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js +11 -0
  20. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js.map +1 -0
  21. package/bizar-dash/dist/assets/Grid-C62gCPqt.js +1 -0
  22. package/bizar-dash/dist/assets/Grid-C62gCPqt.js.map +1 -0
  23. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js +21 -0
  24. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js.map +1 -0
  25. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js +67 -0
  26. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js.map +1 -0
  27. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js +13 -0
  28. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js.map +1 -0
  29. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js +1 -0
  30. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js.map +1 -0
  31. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js +1 -0
  32. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js.map +1 -0
  33. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js +30 -0
  34. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js.map +1 -0
  35. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js +48 -0
  36. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js.map +1 -0
  37. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js +11 -0
  38. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js.map +1 -0
  39. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js +1 -0
  40. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js.map +1 -0
  41. package/bizar-dash/dist/assets/ViewHeader-D6c2cw1b.js +6 -0
  42. package/bizar-dash/dist/assets/ViewHeader-D6c2cw1b.js.map +1 -0
  43. package/bizar-dash/dist/assets/brain-DeoXNDE2.js +6 -0
  44. package/bizar-dash/dist/assets/brain-DeoXNDE2.js.map +1 -0
  45. package/bizar-dash/dist/assets/calendar-DRlQkGJc.js +6 -0
  46. package/bizar-dash/dist/assets/calendar-DRlQkGJc.js.map +1 -0
  47. package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js +6 -0
  48. package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js.map +1 -0
  49. package/bizar-dash/dist/assets/cmdk-BwN8hcKQ.js +80 -0
  50. package/bizar-dash/dist/assets/cmdk-BwN8hcKQ.js.map +1 -0
  51. package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js +5 -0
  52. package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js.map +1 -0
  53. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js +6 -0
  54. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js.map +1 -0
  55. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js +6 -0
  56. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js.map +1 -0
  57. package/bizar-dash/dist/assets/main-COdgjqbZ.css +1 -0
  58. package/bizar-dash/dist/assets/main-Cw6gybzS.js +109 -0
  59. package/bizar-dash/dist/assets/main-Cw6gybzS.js.map +1 -0
  60. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js +6 -0
  61. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js.map +1 -0
  62. package/bizar-dash/dist/assets/minus-CrStJTZ7.js +6 -0
  63. package/bizar-dash/dist/assets/minus-CrStJTZ7.js.map +1 -0
  64. package/bizar-dash/dist/assets/wrench-BJ1WIC4u.js +6 -0
  65. package/bizar-dash/dist/assets/wrench-BJ1WIC4u.js.map +1 -0
  66. package/bizar-dash/dist/{mobile.html → v8.html} +6 -9
  67. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  68. package/bizar-dash/src/server/server.mjs +1 -57
  69. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  70. package/bizar-dash/src/web/v8/App.tsx +188 -0
  71. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +102 -0
  72. package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +79 -0
  73. package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +12 -0
  74. package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +84 -0
  75. package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +95 -0
  76. package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +63 -0
  77. package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +90 -0
  78. package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +135 -0
  79. package/bizar-dash/src/web/v8/__tests__/cx.test.ts +25 -0
  80. package/bizar-dash/src/web/v8/__tests__/data.test.tsx +293 -0
  81. package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +213 -0
  82. package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +105 -0
  83. package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +176 -0
  84. package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +70 -0
  85. package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +60 -0
  86. package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +137 -0
  87. package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +104 -0
  88. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +98 -0
  89. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +112 -0
  90. package/bizar-dash/src/web/v8/main.tsx +28 -0
  91. package/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
  92. package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
  93. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
  94. package/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
  95. package/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
  96. package/bizar-dash/src/web/v8/shell/index.ts +15 -0
  97. package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
  98. package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
  99. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
  100. package/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
  101. package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
  102. package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
  103. package/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
  104. package/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
  105. package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
  106. package/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
  107. package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
  108. package/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
  109. package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
  110. package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
  111. package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
  112. package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
  113. package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
  114. package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
  115. package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
  116. package/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
  117. package/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
  118. package/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
  119. package/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
  120. package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
  121. package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
  122. package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
  123. package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
  124. package/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
  125. package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
  126. package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
  127. package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
  128. package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
  129. package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
  130. package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
  131. package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
  132. package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
  133. package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
  134. package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
  135. package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
  136. package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
  137. package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
  138. package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
  139. package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
  140. package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
  141. package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
  142. package/bizar-dash/src/web/v8/ui/index.ts +322 -0
  143. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +80 -0
  144. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +247 -0
  145. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +181 -0
  146. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +122 -0
  147. package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
  148. package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
  149. package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
  150. package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
  151. package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
  152. package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
  153. package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
  154. package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
  155. package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +79 -0
  156. package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
  157. package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
  158. package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
  159. package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
  160. package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
  161. package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
  162. package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
  163. package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
  164. package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
  165. package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
  166. package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
  167. package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
  168. package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
  169. package/bizar-dash/src/web/v8/ui/styles/globals.css +220 -0
  170. package/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
  171. package/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
  172. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +74 -0
  173. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
  174. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +86 -0
  175. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
  176. package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
  177. package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
  178. package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
  179. package/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
  180. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +33 -0
  181. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +108 -0
  182. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +142 -0
  183. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +144 -0
  184. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +84 -0
  185. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +41 -0
  186. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +61 -0
  187. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +92 -0
  188. package/bizar-dash/src/web/v8/views/Router.tsx +96 -0
  189. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +305 -0
  190. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
  191. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +62 -0
  192. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +74 -0
  193. package/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
  194. package/bizar-dash/src/web/{mobile.html → v8.html} +4 -7
  195. package/bizar-dash/tests/settings-layout.test.tsx +2 -2
  196. package/bizar-dash/tests/settings-nav.test.tsx +6 -6
  197. package/bizar-dash/tests/setup.ts +26 -0
  198. package/bizar-dash/vite.config.ts +26 -2
  199. package/bizar-dash/vitest.config.ts +5 -3
  200. package/cli/provision-claude.mjs +108 -5
  201. package/package.json +36 -3
  202. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js +0 -114
  203. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js.map +0 -1
  204. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js +0 -1
  205. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js.map +0 -1
  206. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js +0 -1
  207. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js.map +0 -1
  208. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js +0 -26
  209. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js.map +0 -1
  210. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
  211. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js.map +0 -1
  212. package/bizar-dash/dist/assets/main-306CZfn6.js +0 -430
  213. package/bizar-dash/dist/assets/main-306CZfn6.js.map +0 -1
  214. package/bizar-dash/dist/assets/main-G3bNDpY3.css +0 -1
  215. package/bizar-dash/dist/assets/mobile-C_naUN91.js +0 -1
  216. package/bizar-dash/dist/assets/mobile-C_naUN91.js.map +0 -1
  217. package/bizar-dash/dist/assets/mobile-layout-BWLtwtfQ.css +0 -1
  218. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js +0 -211
  219. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js.map +0 -1
  220. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js +0 -65
  221. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js.map +0 -1
  222. package/bizar-dash/dist/index.html +0 -43
  223. package/bizar-dash/src/web/App.tsx +0 -915
  224. package/bizar-dash/src/web/MobileApp.tsx +0 -414
  225. package/bizar-dash/src/web/components/ArtifactCreateDialog.tsx +0 -95
  226. package/bizar-dash/src/web/components/ArtifactListDialog.tsx +0 -55
  227. package/bizar-dash/src/web/components/ArtifactViewer.tsx +0 -144
  228. package/bizar-dash/src/web/components/AuditDialog.tsx +0 -79
  229. package/bizar-dash/src/web/components/AutosaveField.tsx +0 -50
  230. package/bizar-dash/src/web/components/BackupRestore.tsx +0 -330
  231. package/bizar-dash/src/web/components/BgStatusBadge.tsx +0 -32
  232. package/bizar-dash/src/web/components/Button.tsx +0 -56
  233. package/bizar-dash/src/web/components/CanvasContextMenu.tsx +0 -68
  234. package/bizar-dash/src/web/components/Card.tsx +0 -40
  235. package/bizar-dash/src/web/components/CollapsibleSection.tsx +0 -72
  236. package/bizar-dash/src/web/components/CommandDialog.tsx +0 -66
  237. package/bizar-dash/src/web/components/DoctorPanel.tsx +0 -160
  238. package/bizar-dash/src/web/components/EmptyState.tsx +0 -30
  239. package/bizar-dash/src/web/components/EnvVarManager.tsx +0 -430
  240. package/bizar-dash/src/web/components/EvalDiff.tsx +0 -157
  241. package/bizar-dash/src/web/components/EvalExportButton.tsx +0 -27
  242. package/bizar-dash/src/web/components/EvalRunCard.tsx +0 -78
  243. package/bizar-dash/src/web/components/FileBrowser.tsx +0 -633
  244. package/bizar-dash/src/web/components/HeadroomSettings.tsx +0 -418
  245. package/bizar-dash/src/web/components/HeadroomStatus.tsx +0 -158
  246. package/bizar-dash/src/web/components/HelpDialog.tsx +0 -55
  247. package/bizar-dash/src/web/components/InviteDialog.tsx +0 -205
  248. package/bizar-dash/src/web/components/KillConfirmDialog.tsx +0 -88
  249. package/bizar-dash/src/web/components/MobileBottomNav.tsx +0 -38
  250. package/bizar-dash/src/web/components/MobileDrawer.tsx +0 -68
  251. package/bizar-dash/src/web/components/MobileHeader.tsx +0 -50
  252. package/bizar-dash/src/web/components/MobileLayout.tsx +0 -63
  253. package/bizar-dash/src/web/components/Modal.tsx +0 -215
  254. package/bizar-dash/src/web/components/Notifications.tsx +0 -242
  255. package/bizar-dash/src/web/components/ScheduleTemplateCard.tsx +0 -72
  256. package/bizar-dash/src/web/components/ScreenshotCapture.tsx +0 -138
  257. package/bizar-dash/src/web/components/ScreenshotOCR.tsx +0 -42
  258. package/bizar-dash/src/web/components/SearchModal.tsx +0 -227
  259. package/bizar-dash/src/web/components/SettingsNav.tsx +0 -112
  260. package/bizar-dash/src/web/components/SettingsSearch.tsx +0 -328
  261. package/bizar-dash/src/web/components/Sidebar.tsx +0 -89
  262. package/bizar-dash/src/web/components/Spinner.tsx +0 -19
  263. package/bizar-dash/src/web/components/StatusBadge.tsx +0 -56
  264. package/bizar-dash/src/web/components/Tag.tsx +0 -41
  265. package/bizar-dash/src/web/components/TailscaleSettings.tsx +0 -161
  266. package/bizar-dash/src/web/components/TaskCard.tsx +0 -69
  267. package/bizar-dash/src/web/components/TaskCreateSheet.tsx +0 -76
  268. package/bizar-dash/src/web/components/Toast.tsx +0 -150
  269. package/bizar-dash/src/web/components/Toggle.tsx +0 -31
  270. package/bizar-dash/src/web/components/Topbar.tsx +0 -410
  271. package/bizar-dash/src/web/components/UsageChart.tsx +0 -250
  272. package/bizar-dash/src/web/components/UsageTable.tsx +0 -90
  273. package/bizar-dash/src/web/components/VirtualList.tsx +0 -53
  274. package/bizar-dash/src/web/components/VisualPlanDialog.tsx +0 -58
  275. package/bizar-dash/src/web/components/VoiceNotesPanel.tsx +0 -211
  276. package/bizar-dash/src/web/components/VoiceRecorder.tsx +0 -105
  277. package/bizar-dash/src/web/components/WorkspaceSelector.tsx +0 -158
  278. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +0 -126
  279. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +0 -163
  280. package/bizar-dash/src/web/components/agents/QualityGates.tsx +0 -123
  281. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +0 -127
  282. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +0 -148
  283. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +0 -160
  284. package/bizar-dash/src/web/components/background/AttachButton.tsx +0 -96
  285. package/bizar-dash/src/web/components/background/TmuxAttachCard.tsx +0 -122
  286. package/bizar-dash/src/web/components/chat/AgentChip.tsx +0 -68
  287. package/bizar-dash/src/web/components/chat/AgentNode.tsx +0 -127
  288. package/bizar-dash/src/web/components/chat/AgentTree.tsx +0 -80
  289. package/bizar-dash/src/web/components/chat/ChatBubble.tsx +0 -60
  290. package/bizar-dash/src/web/components/chat/ChatComposer.tsx +0 -72
  291. package/bizar-dash/src/web/components/chat/ChatInfoPanel.tsx +0 -370
  292. package/bizar-dash/src/web/components/chat/ChatRail.tsx +0 -387
  293. package/bizar-dash/src/web/components/chat/ChatThread.tsx +0 -127
  294. package/bizar-dash/src/web/components/chat/ChatTopBar.tsx +0 -50
  295. package/bizar-dash/src/web/components/chat/Composer.tsx +0 -166
  296. package/bizar-dash/src/web/components/chat/ConfirmModal.tsx +0 -54
  297. package/bizar-dash/src/web/components/chat/EmptyState.tsx +0 -21
  298. package/bizar-dash/src/web/components/chat/FirstRunGreeting.tsx +0 -18
  299. package/bizar-dash/src/web/components/chat/FloatingComposer.tsx +0 -38
  300. package/bizar-dash/src/web/components/chat/InfoPanel.tsx +0 -184
  301. package/bizar-dash/src/web/components/chat/JumpToLatest.tsx +0 -58
  302. package/bizar-dash/src/web/components/chat/LoadingSkeleton.tsx +0 -19
  303. package/bizar-dash/src/web/components/chat/MessageBlock.tsx +0 -260
  304. package/bizar-dash/src/web/components/chat/MessageBubble.tsx +0 -60
  305. package/bizar-dash/src/web/components/chat/SessionList.tsx +0 -163
  306. package/bizar-dash/src/web/components/chat/SessionRowMenu.tsx +0 -206
  307. package/bizar-dash/src/web/components/chat/StreamingIndicator.tsx +0 -37
  308. package/bizar-dash/src/web/components/chat/SuggestionCards.tsx +0 -55
  309. package/bizar-dash/src/web/components/chat/WelcomeScreen.tsx +0 -36
  310. package/bizar-dash/src/web/components/chat/_legacy.ts +0 -30
  311. package/bizar-dash/src/web/components/chat/index.ts +0 -31
  312. package/bizar-dash/src/web/components/chat/useAutoGrowTextarea.ts +0 -18
  313. package/bizar-dash/src/web/components/chat/useChat.ts +0 -1190
  314. package/bizar-dash/src/web/components/chat/useSlashCommands.ts +0 -47
  315. package/bizar-dash/src/web/components/goals/GoalInput.tsx +0 -86
  316. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +0 -111
  317. package/bizar-dash/src/web/components/tasks/BacklogPanel.css +0 -109
  318. package/bizar-dash/src/web/components/tasks/BacklogPanel.tsx +0 -209
  319. package/bizar-dash/src/web/hooks/useAutosave.ts +0 -107
  320. package/bizar-dash/src/web/hooks/useI18n.ts +0 -13
  321. package/bizar-dash/src/web/index.html +0 -37
  322. package/bizar-dash/src/web/lib/api.ts +0 -237
  323. package/bizar-dash/src/web/lib/goapPlanner.ts +0 -614
  324. package/bizar-dash/src/web/lib/i18n.ts +0 -25
  325. package/bizar-dash/src/web/lib/logger.ts +0 -30
  326. package/bizar-dash/src/web/lib/markdown.tsx +0 -59
  327. package/bizar-dash/src/web/lib/search.ts +0 -115
  328. package/bizar-dash/src/web/lib/types.ts +0 -894
  329. package/bizar-dash/src/web/lib/utils.ts +0 -114
  330. package/bizar-dash/src/web/lib/ws.ts +0 -177
  331. package/bizar-dash/src/web/locales/en.json +0 -52
  332. package/bizar-dash/src/web/main.tsx +0 -43
  333. package/bizar-dash/src/web/mobile/MobileApp.tsx +0 -309
  334. package/bizar-dash/src/web/mobile/MobileBottomNav.tsx +0 -38
  335. package/bizar-dash/src/web/mobile/MobileChat.tsx +0 -138
  336. package/bizar-dash/src/web/mobile/MobileDoctor.tsx +0 -80
  337. package/bizar-dash/src/web/mobile/MobileEval.tsx +0 -167
  338. package/bizar-dash/src/web/mobile/MobileMemory.tsx +0 -108
  339. package/bizar-dash/src/web/mobile/MobileOverview.tsx +0 -213
  340. package/bizar-dash/src/web/mobile/MobileSettings.tsx +0 -251
  341. package/bizar-dash/src/web/mobile/MobileTasks.tsx +0 -94
  342. package/bizar-dash/src/web/mobile/MobileTopbar.tsx +0 -115
  343. package/bizar-dash/src/web/mobile/components/MobileBottomSheet.tsx +0 -182
  344. package/bizar-dash/src/web/mobile/components/MobileListItem.tsx +0 -64
  345. package/bizar-dash/src/web/mobile/components/MobileModal.tsx +0 -123
  346. package/bizar-dash/src/web/mobile/views/MobileActivity.tsx +0 -273
  347. package/bizar-dash/src/web/mobile/views/MobileAgents.tsx +0 -374
  348. package/bizar-dash/src/web/mobile/views/MobileArtifactCanvas.tsx +0 -439
  349. package/bizar-dash/src/web/mobile/views/MobileArtifacts.tsx +0 -143
  350. package/bizar-dash/src/web/mobile/views/MobileChat.tsx +0 -257
  351. package/bizar-dash/src/web/mobile/views/MobileConfig.tsx +0 -175
  352. package/bizar-dash/src/web/mobile/views/MobileHistory.tsx +0 -191
  353. package/bizar-dash/src/web/mobile/views/MobileMods.tsx +0 -149
  354. package/bizar-dash/src/web/mobile/views/MobileMore.tsx +0 -121
  355. package/bizar-dash/src/web/mobile/views/MobileNotifications.tsx +0 -137
  356. package/bizar-dash/src/web/mobile/views/MobilePlans.tsx +0 -26
  357. package/bizar-dash/src/web/mobile/views/MobileSchedules.tsx +0 -685
  358. package/bizar-dash/src/web/mobile/views/MobileSearchModal.tsx +0 -172
  359. package/bizar-dash/src/web/mobile/views/MobileSettings.tsx +0 -363
  360. package/bizar-dash/src/web/mobile/views/MobileSkills.tsx +0 -153
  361. package/bizar-dash/src/web/mobile/views/MobileTasks.tsx +0 -564
  362. package/bizar-dash/src/web/mobile/views/QrCodePanel.tsx +0 -69
  363. package/bizar-dash/src/web/mobile.tsx +0 -14
  364. package/bizar-dash/src/web/styles/agents-redesign.css +0 -311
  365. package/bizar-dash/src/web/styles/chat.css +0 -1740
  366. package/bizar-dash/src/web/styles/glyphs.css +0 -960
  367. package/bizar-dash/src/web/styles/main.css +0 -10391
  368. package/bizar-dash/src/web/styles/memory.css +0 -1182
  369. package/bizar-dash/src/web/styles/minimax-usage.css +0 -842
  370. package/bizar-dash/src/web/styles/mobile-chat.css +0 -5
  371. package/bizar-dash/src/web/styles/mobile-layout.css +0 -233
  372. package/bizar-dash/src/web/styles/mobile.css +0 -2181
  373. package/bizar-dash/src/web/styles/settings.css +0 -795
  374. package/bizar-dash/src/web/styles/skills.css +0 -302
  375. package/bizar-dash/src/web/styles/tasks-redesign.css +0 -253
  376. package/bizar-dash/src/web/styles/tasks.css +0 -605
  377. package/bizar-dash/src/web/ui/controls/Button.tsx +0 -77
  378. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +0 -95
  379. package/bizar-dash/src/web/ui/controls/IconButton.tsx +0 -66
  380. package/bizar-dash/src/web/ui/controls/Kbd.tsx +0 -24
  381. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +0 -77
  382. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +0 -109
  383. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +0 -91
  384. package/bizar-dash/src/web/ui/controls/Select.tsx +0 -92
  385. package/bizar-dash/src/web/ui/controls/Slider.tsx +0 -70
  386. package/bizar-dash/src/web/ui/controls/TextInput.tsx +0 -67
  387. package/bizar-dash/src/web/ui/controls/Textarea.tsx +0 -56
  388. package/bizar-dash/src/web/ui/controls/Toggle.tsx +0 -79
  389. package/bizar-dash/src/web/ui/controls/controls.css +0 -476
  390. package/bizar-dash/src/web/ui/controls/index.ts +0 -35
  391. package/bizar-dash/src/web/ui/data/BarChart.tsx +0 -60
  392. package/bizar-dash/src/web/ui/data/DataTable.tsx +0 -216
  393. package/bizar-dash/src/web/ui/data/EmptyState.tsx +0 -60
  394. package/bizar-dash/src/web/ui/data/ErrorState.tsx +0 -56
  395. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +0 -106
  396. package/bizar-dash/src/web/ui/data/LoadingState.tsx +0 -65
  397. package/bizar-dash/src/web/ui/data/Sparkline.tsx +0 -87
  398. package/bizar-dash/src/web/ui/data/StatTile.tsx +0 -87
  399. package/bizar-dash/src/web/ui/data/data.css +0 -535
  400. package/bizar-dash/src/web/ui/data/index.ts +0 -31
  401. package/bizar-dash/src/web/ui/feedback/Badge.tsx +0 -49
  402. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +0 -209
  403. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +0 -69
  404. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +0 -50
  405. package/bizar-dash/src/web/ui/feedback/Toast.tsx +0 -200
  406. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +0 -126
  407. package/bizar-dash/src/web/ui/feedback/feedback.css +0 -314
  408. package/bizar-dash/src/web/ui/feedback/index.ts +0 -43
  409. package/bizar-dash/src/web/ui/index.ts +0 -56
  410. package/bizar-dash/src/web/ui/layout/AppShell.tsx +0 -51
  411. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +0 -97
  412. package/bizar-dash/src/web/ui/layout/Panel.tsx +0 -73
  413. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +0 -39
  414. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +0 -131
  415. package/bizar-dash/src/web/ui/layout/Tabs.tsx +0 -133
  416. package/bizar-dash/src/web/ui/layout/Topbar.tsx +0 -42
  417. package/bizar-dash/src/web/ui/layout/ViewHeader.tsx +0 -48
  418. package/bizar-dash/src/web/ui/layout/index.ts +0 -34
  419. package/bizar-dash/src/web/ui/layout/layout.css +0 -464
  420. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +0 -199
  421. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +0 -95
  422. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +0 -93
  423. package/bizar-dash/src/web/ui/navigation/index.ts +0 -17
  424. package/bizar-dash/src/web/ui/navigation/navigation.css +0 -343
  425. package/bizar-dash/src/web/ui/primitives/Box.tsx +0 -91
  426. package/bizar-dash/src/web/ui/primitives/Grid.tsx +0 -49
  427. package/bizar-dash/src/web/ui/primitives/Inline.tsx +0 -55
  428. package/bizar-dash/src/web/ui/primitives/Separator.tsx +0 -46
  429. package/bizar-dash/src/web/ui/primitives/Stack.tsx +0 -54
  430. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +0 -26
  431. package/bizar-dash/src/web/ui/primitives/index.ts +0 -23
  432. package/bizar-dash/src/web/ui/primitives/primitives.css +0 -183
  433. package/bizar-dash/src/web/ui/styles/globals.css +0 -86
  434. package/bizar-dash/src/web/ui/styles/reset.css +0 -125
  435. package/bizar-dash/src/web/ui/styles/tokens.css +0 -208
  436. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +0 -142
  437. package/bizar-dash/src/web/ui/theme/tokens.ts +0 -131
  438. package/bizar-dash/src/web/ui/theme/useTheme.ts +0 -22
  439. package/bizar-dash/src/web/ui/utils/cx.ts +0 -42
  440. package/bizar-dash/src/web/views/Activity.tsx +0 -1221
  441. package/bizar-dash/src/web/views/Agents.tsx +0 -964
  442. package/bizar-dash/src/web/views/Artifacts.tsx +0 -1494
  443. package/bizar-dash/src/web/views/BackgroundAgents.tsx +0 -822
  444. package/bizar-dash/src/web/views/Chat.tsx +0 -532
  445. package/bizar-dash/src/web/views/Config.tsx +0 -3
  446. package/bizar-dash/src/web/views/Doctor.tsx +0 -317
  447. package/bizar-dash/src/web/views/Eval.tsx +0 -372
  448. package/bizar-dash/src/web/views/EvalReport.tsx +0 -353
  449. package/bizar-dash/src/web/views/GoalPlanner.tsx +0 -158
  450. package/bizar-dash/src/web/views/Harness.tsx +0 -306
  451. package/bizar-dash/src/web/views/History.tsx +0 -353
  452. package/bizar-dash/src/web/views/Memory.tsx +0 -161
  453. package/bizar-dash/src/web/views/MiniMaxUsage.tsx +0 -942
  454. package/bizar-dash/src/web/views/ModView.tsx +0 -207
  455. package/bizar-dash/src/web/views/Mods.tsx +0 -706
  456. package/bizar-dash/src/web/views/Overview.tsx +0 -1364
  457. package/bizar-dash/src/web/views/Providers.tsx +0 -302
  458. package/bizar-dash/src/web/views/Schedules.tsx +0 -902
  459. package/bizar-dash/src/web/views/Settings.tsx +0 -308
  460. package/bizar-dash/src/web/views/Skills.tsx +0 -383
  461. package/bizar-dash/src/web/views/SpawnAgentModal.tsx +0 -221
  462. package/bizar-dash/src/web/views/Tasks.tsx +0 -789
  463. package/bizar-dash/src/web/views/Workspace.tsx +0 -294
  464. package/bizar-dash/src/web/views/glyphs/GlyphRenderer.tsx +0 -844
  465. package/bizar-dash/src/web/views/glyphs/components.tsx +0 -1098
  466. package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +0 -426
  467. package/bizar-dash/src/web/views/memory/FromScreenshotPanel.tsx +0 -23
  468. package/bizar-dash/src/web/views/memory/GitSyncPanel.tsx +0 -220
  469. package/bizar-dash/src/web/views/memory/LightragPanel.tsx +0 -310
  470. package/bizar-dash/src/web/views/memory/MemoryGraphLegend.tsx +0 -29
  471. package/bizar-dash/src/web/views/memory/MemoryGraphPanel.tsx +0 -192
  472. package/bizar-dash/src/web/views/memory/MemoryGraphView.tsx +0 -336
  473. package/bizar-dash/src/web/views/memory/MemoryOverview.tsx +0 -367
  474. package/bizar-dash/src/web/views/memory/MemoryStatusCard.tsx +0 -160
  475. package/bizar-dash/src/web/views/memory/ObsidianPanel.tsx +0 -650
  476. package/bizar-dash/src/web/views/memory/SemanticSearchPanel.tsx +0 -197
  477. package/bizar-dash/src/web/views/memory/VaultFromClipboardPanel.tsx +0 -101
  478. package/bizar-dash/src/web/views/settings/ActivitySection.tsx +0 -205
  479. package/bizar-dash/src/web/views/settings/AgentSection.tsx +0 -305
  480. package/bizar-dash/src/web/views/settings/AuthSection.tsx +0 -159
  481. package/bizar-dash/src/web/views/settings/EnvVarsSection.tsx +0 -15
  482. package/bizar-dash/src/web/views/settings/GeneralSection.tsx +0 -128
  483. package/bizar-dash/src/web/views/settings/HeadroomSection.tsx +0 -39
  484. package/bizar-dash/src/web/views/settings/MemorySection.tsx +0 -154
  485. package/bizar-dash/src/web/views/settings/NetworkSection.tsx +0 -87
  486. package/bizar-dash/src/web/views/settings/NotificationsSection.tsx +0 -34
  487. package/bizar-dash/src/web/views/settings/SystemLlmSection.tsx +0 -81
  488. package/bizar-dash/src/web/views/settings/ThemeSection.tsx +0 -168
  489. package/bizar-dash/src/web/views/settings/UpdatesSection.tsx +0 -256
  490. package/bizar-dash/src/web/views/settings/WorkspacesSection.tsx +0 -189
@@ -1,894 +0,0 @@
1
- // src/lib/types.ts — TypeScript types for the Bizar dashboard.
2
- // All shapes here mirror the JSON returned by src/server/api.mjs.
3
-
4
- /**
5
- * Dialog component types that can be rendered in the dashboard.
6
- * Aligned with `DialogComponent` in plugins/bizar/src/commands.ts.
7
- * If you add a new component here, mirror it there and in
8
- * dialog-store.mjs KNOWN_COMPONENTS.
9
- */
10
- export type DialogComponent = 'visual-artifact' | 'visual-plan' | 'plan-create' | 'plan-list' | 'artifact-create' | 'artifact-list' | 'help' | 'audit' | 'generic';
11
-
12
- /**
13
- * A modal dialog request emitted by the slash-command plugin and
14
- * delivered to the dashboard via the `dialog:show` WS message.
15
- * Thor's plugin code emits these; the desktop Chat view (sibling scope)
16
- * mounts a component keyed by `component` and seeds it with `data`.
17
- */
18
- export type DialogDescriptor = {
19
- id: string;
20
- title: string;
21
- /** Original slash command, e.g. "/visual-plan on". */
22
- command: string;
23
- /** Component key the Chat view mounts. One of: 'visual-plan' | 'plan-create' | 'plan-list' | 'help' | 'audit' | 'generic' */
24
- component: DialogComponent;
25
- /** Component-specific payload. Shape depends on `component`. */
26
- data?: Record<string, unknown>;
27
- };
28
-
29
- export type ThemeName = 'dark' | 'light' | 'system';
30
-
31
- export type ThemeSettings = {
32
- mode: ThemeName;
33
- accent: string;
34
- success: string;
35
- warning: string;
36
- error: string;
37
- info: string;
38
- fontFamily: string;
39
- fontSize: number;
40
- compactMode: boolean;
41
- animations: boolean;
42
- };
43
-
44
- export type UiSettings = {
45
- layout: 'topnav' | 'sidebar' | 'both';
46
- showHeader: boolean;
47
- showStatusBar: boolean;
48
- defaultTab: string;
49
- accentColor?: string;
50
- };
51
-
52
- export type Agent = {
53
- name: string;
54
- description: string;
55
- model: string;
56
- mode: string;
57
- file: string;
58
- path: string;
59
- mtime: number;
60
- tools?: string[];
61
- tags?: string[];
62
- category?: string;
63
- color?: string;
64
- prompt?: string;
65
- permissions?: unknown;
66
- // v3.1.0 — runtime status (server-attached)
67
- status?: 'idle' | 'working' | 'error' | 'stuck' | string;
68
- currentTaskId?: string | null;
69
- currentTaskStartedAt?: number;
70
- lastSeen?: number;
71
- heartbeat?: number;
72
- lastError?: { ts: number; message: string } | null;
73
- lastTask?: { id: string; finishedAt: number; status: string } | null;
74
- successRate?: number;
75
- tasksTotal?: number;
76
- tasksSucceeded?: number;
77
- tasksFailed?: number;
78
- isStuck?: boolean;
79
- // v3.2.0 — agent hierarchy (parent/level/role).
80
- level?: number;
81
- parent?: string | null;
82
- role?: string;
83
- };
84
-
85
- export type ProjectRecord = {
86
- id: string;
87
- name: string;
88
- path: string;
89
- lastAccessed?: string;
90
- status: 'active' | 'inactive' | 'error' | string;
91
- summary?: string;
92
- };
93
-
94
- export type ProjectsResponse = {
95
- projects: ProjectRecord[];
96
- active: string | null;
97
- };
98
-
99
- /** A single entry returned by GET /api/fs */
100
- export type DirectoryEntry = {
101
- name: string;
102
- path: string;
103
- isDir: boolean;
104
- isSymlink: boolean;
105
- };
106
-
107
- /** Response shape for GET /api/fs */
108
- export type DirectoryListing = {
109
- path: string;
110
- parent: string | null;
111
- entries: DirectoryEntry[];
112
- /** True when the directory had more than 500 entries (capped). */
113
- truncated?: boolean;
114
- /** Actual entry count when truncated. */
115
- totalEntries?: number;
116
- };
117
-
118
- /** Request shape for POST /api/fs/mkdir */
119
- export type MkdirRequest = { parent: string; name: string };
120
-
121
- /** Response shape for POST /api/fs/mkdir */
122
- export type MkdirResponse = { path: string; parent: string; name: string };
123
-
124
- /** Response shape for POST /api/projects/scan */
125
- export type ScanResult = {
126
- added: Array<{ id: string; path: string; name: string }>;
127
- skipped: number;
128
- scanned: number;
129
- error?: string;
130
- };
131
-
132
- // v3.19.0 — Artifact (formerly Plan). A user-facing proposal that an agent
133
- // creates to surface design choices, options, or implementation paths.
134
- // The user reviews it and either approves, rejects, or modifies.
135
- export type Artifact = {
136
- /** Unique slug — used in the file path (`plans/<slug>/`) and URL. */
137
- slug: string;
138
- /** Human-readable title shown in the artifacts list. */
139
- title: string;
140
- /** One-line summary shown under the title. */
141
- description: string;
142
- /** Lifecycle status. */
143
- status: 'draft' | 'pending-review' | 'approved' | 'rejected' | 'archived';
144
- /** What kind of artifact this is — drives the renderer. */
145
- kind: 'design' | 'plan' | 'spec' | 'mockup' | 'report' | 'freeform' | string;
146
- /** Agent or user that created this artifact. */
147
- author: string;
148
- /** User's decision on this artifact. */
149
- decision: 'pending' | 'approved' | 'rejected' | 'modified' | null;
150
- /** Optional user-supplied notes when approving/rejecting. */
151
- decisionNote: string | null;
152
- /** Filesystem source. */
153
- source: 'worktree' | 'global' | string;
154
- /** Element count (visual elements) — for plan-like artifacts. */
155
- elementCount: number | null;
156
- /** Comment count. */
157
- commentCount: number | null;
158
- /** Last-modified time. */
159
- mtime: number;
160
- /** Optional URL to the artifact's full view. */
161
- artifactUrl: string | null;
162
- /** Tags — free-form, used for filtering. */
163
- tags: string[];
164
- };
165
-
166
- export type CanvasElement = {
167
- id: string;
168
- type: string;
169
- title?: string;
170
- content?: string;
171
- x: number;
172
- y: number;
173
- width: number;
174
- height: number;
175
- status?: string;
176
- };
177
-
178
- export type CanvasConnection = {
179
- id: string;
180
- fromElementId?: string;
181
- from?: string;
182
- toElementId?: string;
183
- to?: string;
184
- label?: string;
185
- };
186
-
187
- export type CanvasComment = {
188
- id: string;
189
- elementId?: string;
190
- text: string;
191
- author: string;
192
- created: string;
193
- thread?: { author: string; text: string }[];
194
- };
195
-
196
- export type CanvasViewport = { x: number; y: number; zoom: number };
197
-
198
- export type Canvas = {
199
- schemaVersion?: number;
200
- title: string;
201
- elements: CanvasElement[];
202
- connections: CanvasConnection[];
203
- comments: CanvasComment[];
204
- viewport: CanvasViewport;
205
- };
206
-
207
- export type ConfigResponse = {
208
- path: string;
209
- data: unknown;
210
- raw: string;
211
- exists: boolean;
212
- };
213
-
214
- export interface SystemLlmConfig {
215
- enabled: boolean;
216
- provider: string; // e.g. "cline"
217
- model: string; // e.g. "cline/deepseek-v4-flash-free"
218
- // api key is read from auth.json for the provider, not stored here
219
- }
220
-
221
- export type Settings = {
222
- theme: ThemeSettings;
223
- ui: UiSettings;
224
- defaultAgent: string;
225
- defaultModel: string;
226
- notifications: {
227
- onAgentComplete: boolean;
228
- onPlanApproval: boolean;
229
- };
230
- dashboard: {
231
- autoLaunchWeb: boolean;
232
- projectsDirectory?: string;
233
- allowedRoots?: string[];
234
- };
235
- service: {
236
- enabled: boolean;
237
- autostart: boolean;
238
- };
239
- about: {
240
- version: string;
241
- homepage: string;
242
- license: string;
243
- };
244
- agents: {
245
- maxParallel: number;
246
- stuckThresholdMs: number;
247
- autoRestart: boolean;
248
- };
249
- // v3.19.0 — Personalization (free-form text shown to agents).
250
- personalization: {
251
- displayName: string;
252
- role: string;
253
- team: string;
254
- aboutMe: string;
255
- preferences: string;
256
- };
257
- // v3.19.0 — Workflow toggles.
258
- workflow: {
259
- /** Allow agents to create / mutate artifacts. */
260
- artifactsEnabled: boolean;
261
- /** When true, agents make decisions themselves instead of asking. */
262
- agentsDecideAutonomously: boolean;
263
- /** Per-tab override for autonomy (chat input). */
264
- chatAutonomous: boolean;
265
- };
266
- // v3.21.0 — System LLM calls (auto-title, enhance-prompt, summarization).
267
- systemLlm?: SystemLlmConfig;
268
- // v4.5.0 — MiniMax Token Plan integration. `apiKey` is the user's
269
- // Subscription Key (NOT a pay-as-you-go API key). `groupId` is usually
270
- // 'default' for an individual team. `baseUrl` is the Token Plan host
271
- // (the remains endpoint lives on www.*, not api.*). `chatBaseUrl` is
272
- // the chat-completions host (api.*/v1).
273
- minimax?: {
274
- enabled: boolean;
275
- apiKey: string;
276
- groupId: string;
277
- baseUrl: string;
278
- chatBaseUrl: string;
279
- };
280
- // v5.0.0 — Headroom context compression settings.
281
- headroom?: HeadroomSettings;
282
- };
283
-
284
- export type HeadroomSettings = {
285
- enabled: boolean;
286
- autoInstall: boolean;
287
- port: number;
288
- host: string;
289
- outputShaper: boolean;
290
- telemetry: boolean;
291
- budget: number;
292
- backend: string;
293
- autoStart: boolean;
294
- autoWrap: boolean;
295
- routeAllProviders: boolean;
296
- };
297
-
298
- export type SettingsResponse = {
299
- path: string;
300
- data: Settings;
301
- exists: boolean;
302
- };
303
-
304
- export type OverviewCounts = {
305
- agents: number;
306
- plans: number;
307
- projects: number;
308
- sessions: number;
309
- activeProject?: string | null;
310
- };
311
-
312
- export type OverviewVersions = {
313
- node: string;
314
- platform: string;
315
- projectRoot: string;
316
- bizarRoot: string;
317
- };
318
-
319
- export type ActivityItem = {
320
- ts: string;
321
- kind: string;
322
- [k: string]: unknown;
323
- };
324
-
325
- export type Overview = {
326
- counts: OverviewCounts;
327
- recentActivity: ActivityItem[];
328
- versions: OverviewVersions;
329
- generatedAt: string;
330
- };
331
-
332
- export type ChatMessage = {
333
- id?: string;
334
- role: 'user' | 'assistant' | 'system' | string;
335
- content?: string;
336
- message?: string;
337
- agent?: string;
338
- ts?: string | number;
339
- pinned?: boolean;
340
- };
341
-
342
- export type ChatSession = {
343
- id: string;
344
- file: string;
345
- mtime: number;
346
- size: number;
347
- /** 'bizar' sessions come from the per-project .jsonl store; 'cline' come from cline.db */
348
- source?: 'bizar' | 'cline';
349
- /** Filled when source === 'cline' — the URL to open that session in the cline web UI */
350
- clineUrl?: string;
351
- /** Display title; defaults to id when absent */
352
- title?: string;
353
- };
354
-
355
- export type ChatResponse = {
356
- messages: ChatMessage[];
357
- sessions: ChatSession[];
358
- };
359
-
360
- export type Task = {
361
- id: string;
362
- title: string;
363
- description: string;
364
- status: 'queued' | 'doing' | 'done' | 'blocked' | 'archived' | string;
365
- tags: string[];
366
- priority: 'low' | 'normal' | 'high' | string;
367
- assignee?: string | null;
368
- parent?: string | null;
369
- dependencies?: string[];
370
- timeSpent?: number;
371
- recurring?: { cron?: string; lastGenerated?: string; freq?: 'daily' | 'weekly' | 'monthly' | string } | null;
372
- attachments?: string[];
373
- comments?: { id: string; text: string; createdAt: string }[];
374
- activity?: { id: string; type: string; ts: string; data?: unknown }[];
375
- archived?: boolean;
376
- workedBy?: string | null;
377
- dueDate?: string | null;
378
- // v3.2.0 — main-task fields from the task delegator.
379
- subtasks?: string[];
380
- metadata?: Record<string, unknown> | null;
381
- // v3.3.0 — progress fields surfaced from metadata.
382
- progress?: number;
383
- currentStep?: string | null;
384
- progressAgent?: string | null;
385
- progressHistory?: { ts: string; progress: number; step: string | null; agent?: string | null }[];
386
- createdAt: string;
387
- updatedAt: string;
388
- completedAt?: string | null;
389
- _timerStart?: number;
390
- };
391
-
392
- export type Notification = {
393
- id: string;
394
- ts: string;
395
- severity: 'info' | 'success' | 'warning' | 'error';
396
- message: string;
397
- source: string;
398
- title?: string;
399
- link?: string | null;
400
- read?: boolean;
401
- meta?: Record<string, unknown> | null;
402
- };
403
-
404
- export type NotificationStats = {
405
- total: number;
406
- unread: number;
407
- lastTs: string | null;
408
- counts: Record<string, number>;
409
- };
410
-
411
- export type NotificationsResponse = {
412
- notifications: Notification[];
413
- stats: NotificationStats;
414
- };
415
-
416
- export type CustomTheme = {
417
- name: string;
418
- colors: Partial<ThemeSettings>;
419
- createdAt?: string | null;
420
- };
421
-
422
- export type BudgetCheck = {
423
- /** Skip the run if at least this many bg tasks are already running or pending. */
424
- maxConcurrent?: number;
425
- /** When true, the runner consults `maxConcurrent` and skips the run if the budget is exceeded. */
426
- skipIfBudgetLow?: boolean;
427
- };
428
-
429
- export type ScheduleAction = {
430
- type: 'command' | 'agent' | 'webhook';
431
- target: string;
432
- /** Free-form prompt for `agent` actions — the text the agent will work from. */
433
- prompt?: string;
434
- /** Optional webhook method override (defaults to POST). */
435
- method?: string;
436
- /** Webhook body. May also carry `prompt` for an agent dispatch. */
437
- body?: unknown;
438
- /** Title used when this action dispatches an agent task. */
439
- title?: string;
440
- /** Display name override when dispatching. */
441
- name?: string;
442
- };
443
-
444
- export type Schedule = {
445
- id: string;
446
- name: string;
447
- type: 'cron' | 'interval' | 'once';
448
- /** For `cron`: a 5-field cron expression. For `interval`: a "30m" / "2h" / "1d" string. For `once`: an ISO datetime. */
449
- schedule: string;
450
- /** IANA timezone for `cron` schedules. Defaults to "UTC" when absent. */
451
- timezone?: string;
452
- action: ScheduleAction;
453
- /** Optional budget pre-flight: skip the run when too many bg tasks are already in flight. */
454
- budgetCheck?: BudgetCheck;
455
- enabled: boolean;
456
- createdAt: string;
457
- updatedAt: string;
458
- lastRun: string | null;
459
- lastResult: 'success' | 'error' | 'skipped' | null;
460
- lastError: string | null;
461
- nextRun: string | null;
462
- history: { ts: string; result: string; error: string | null }[];
463
- };
464
-
465
- export type Mod = {
466
- id: string;
467
- name: string;
468
- version: string;
469
- author: string;
470
- description: string;
471
- bizar: string;
472
- type: string;
473
- enabled: boolean;
474
- permissions: string[];
475
- entry: Record<string, string>;
476
- files: { category: string; name: string; path: string }[];
477
- path: string;
478
- installedAt: string | null;
479
- };
480
-
481
- export type Provider = {
482
- id: string;
483
- name: string;
484
- baseURL: string;
485
- apiKey: string;
486
- models: string[];
487
- enabled: boolean;
488
- };
489
-
490
- export type McpServer = {
491
- id: string;
492
- type?: 'local' | 'remote';
493
- command: string;
494
- args: string[];
495
- env: Record<string, string>;
496
- url?: string;
497
- headers?: Record<string, string>;
498
- oauth?: boolean;
499
- enabled: boolean;
500
- };
501
-
502
- export type DiagnosticItem = {
503
- line: string;
504
- ts: string | null;
505
- };
506
-
507
- export type Diagnostics = {
508
- version: string;
509
- uptime: number;
510
- uptimeMs: number;
511
- nodeVersion: string;
512
- platform: string;
513
- memory: { rss: number; heapUsed: number; heapTotal: number };
514
- counts: {
515
- agents: number;
516
- plans: number;
517
- tasks: number;
518
- projects: number;
519
- activeProject: string | null;
520
- mods: number;
521
- schedules: number;
522
- providers: number;
523
- mcps: number;
524
- };
525
- errors: DiagnosticItem[];
526
- service: { running: boolean; pid?: number; error?: string };
527
- };
528
-
529
- export type TailscaleStatus = {
530
- installed: boolean;
531
- version: string | null;
532
- authenticated: boolean;
533
- backend: string;
534
- hostname: string;
535
- settings: { enabled: boolean; port: number; https: boolean; hostname: string };
536
- };
537
-
538
- // ────────────────────────────────────────────────────────────────────────
539
- // v6.0.0 — Doctor page types
540
- // ────────────────────────────────────────────────────────────────────────
541
-
542
- export type DoctorStatus = 'ok' | 'warn' | 'fail';
543
-
544
- export type DoctorCheck = {
545
- name: string;
546
- status: DoctorStatus;
547
- message: string;
548
- };
549
-
550
- export type DoctorChecks = {
551
- system: DoctorCheck[];
552
- config: DoctorCheck[];
553
- services: DoctorCheck[];
554
- };
555
-
556
- export type DoctorHealth = {
557
- ts: string;
558
- status: DoctorStatus;
559
- issues: DoctorCheck[];
560
- groups: DoctorChecks;
561
- };
562
-
563
- export type DoctorCounts = {
564
- tasks: number;
565
- schedules: number;
566
- mods: number;
567
- providers: number;
568
- mcps: number;
569
- agents: number;
570
- projects: number;
571
- activeProject: string | null;
572
- workspaces: number;
573
- voiceNotes: number;
574
- evalRuns: number;
575
- backups: number;
576
- };
577
-
578
- export type DoctorService = {
579
- running: boolean;
580
- port?: number;
581
- host?: string;
582
- pid?: number;
583
- uptime?: number;
584
- error?: string;
585
- baseUrl?: string | null;
586
- reachable?: boolean;
587
- path?: string | null;
588
- logPath?: string;
589
- logExists?: boolean;
590
- };
591
-
592
- export type DoctorServices = {
593
- dashboard: DoctorService;
594
- headroom: DoctorService;
595
- lightrag: DoctorService;
596
- cline: DoctorService;
597
- };
598
-
599
- export type DoctorRecentError = {
600
- line: string;
601
- ts: string | null;
602
- tsMs: number | null;
603
- };
604
-
605
- export type DoctorCline = {
606
- configExists: boolean;
607
- configPath: string;
608
- agentsDir: string;
609
- agentFiles: string[];
610
- dashboardConnected: boolean;
611
- };
612
-
613
- export type DoctorDisk = {
614
- path: string;
615
- exists: boolean;
616
- sizeBytes: number;
617
- };
618
-
619
- export type DoctorSnapshot = {
620
- timestamp: string;
621
- bizarVersion: string;
622
- nodeVersion: string;
623
- platform: string;
624
- arch: string;
625
- uptime: number;
626
- memory: NodeJS.MemoryUsage;
627
- disk: DoctorDisk;
628
- services: DoctorServices;
629
- counts: DoctorCounts;
630
- recentErrors: DoctorRecentError[];
631
- configHealth: DoctorCheck[];
632
- cline: DoctorCline;
633
- checks: DoctorChecks;
634
- health: { status: DoctorStatus; issues: DoctorCheck[] };
635
- };
636
-
637
- /**
638
- * The categories the Doctor page renders. Order is the render order.
639
- * Each maps 1:1 to either a `DoctorChecks` group or a derived slice.
640
- */
641
- export type DoctorCategory =
642
- | 'system'
643
- | 'services'
644
- | 'counts'
645
- | 'errors'
646
- | 'actions';
647
-
648
- export type DoctorCheckOrInfo =
649
- | DoctorCheck
650
- | { kind: 'count'; label: string; value: number | string };
651
-
652
- export type DoctorPanelProps = {
653
- category: DoctorCategory;
654
- /** Title shown in the card header. Optional — derived from category if omitted. */
655
- title?: string;
656
- /** Lucide icon for the header. Optional — derived from category if omitted. */
657
- icon?: React.ComponentType<{ size?: number; 'aria-hidden'?: boolean }>;
658
- /** Per-line entries. Each carries an implicit `ok | warn | fail` status pill. */
659
- checks: DoctorCheck[];
660
- /**
661
- * Plain key/value rows that aren't checks (e.g. counts). Rendered
662
- * as a compact two-column list below the check rows when present.
663
- */
664
- info?: Array<{ label: string; value: string | number }>;
665
- /** Meta line shown beneath the title. */
666
- meta?: string;
667
- /** Optional custom body — bypasses the default check-list render. */
668
- children?: React.ReactNode;
669
- className?: string;
670
- };
671
-
672
- export type SearchResult = {
673
- type: string;
674
- score: number;
675
- item: Record<string, unknown>;
676
- };
677
-
678
- /**
679
- * One background-agent instance. Mirrors the JSON shape returned by
680
- * GET /api/background (src/server/routes/background.mjs). Status values:
681
- * - 'pending' — accepted by the runner, dispatch not yet started
682
- * - 'running' — actively executing in a tmux session
683
- * - 'done' — finished with success
684
- * - 'failed' — terminated with an error
685
- * - 'killed' — user-requested kill
686
- * - 'timed_out' — exceeded plugin stall/dispatch timeout
687
- */
688
- export type BgInstance = {
689
- instanceId: string;
690
- status?:
691
- | 'pending'
692
- | 'running'
693
- | 'paused'
694
- | 'done'
695
- | 'failed'
696
- | 'killed'
697
- | 'timed_out'
698
- | 'steered'
699
- | string;
700
- agent?: string;
701
- prompt?: string;
702
- startedAt?: number;
703
- completedAt?: number;
704
- currentStep?: string | null;
705
- /** v5.x — Progress percentage (0..100; -1 = indeterminate). */
706
- progress?: number;
707
- /** v5.x — Free-form progress message. */
708
- progressMessage?: string;
709
- toolCallCount?: number;
710
- tmuxSession?: string;
711
- tmuxActive?: boolean;
712
- sessionId?: string;
713
- error?: string;
714
- // Optional fields the activity timeline tracks — not required for this view.
715
- parentAgent?: string;
716
- parentInstanceId?: string;
717
- promptPreview?: string;
718
- resultPreview?: string;
719
- lastEventAt?: number;
720
- taskId?: string;
721
- // v5.x — extended dashboard surface
722
- /** PID of the cline run subprocess (for pause/resume/steer). */
723
- processId?: number;
724
- /** Free-form runner state from the cline-runner. */
725
- runnerState?: string;
726
- /** Tags from spawn. */
727
- tags?: string[];
728
- /** Epoch ms when the subprocess was paused. */
729
- pausedAt?: number;
730
- /** When the instance was steered. */
731
- steeredAt?: number;
732
- };
733
-
734
- /**
735
- * v5.x — Per-tool-call history entry, surfaced by the
736
- * `bizar_status` tool and the `/api/background/:id/tool-calls` endpoint.
737
- */
738
- export type BgToolCall = {
739
- id: string;
740
- name: string;
741
- args?: string;
742
- status: 'running' | 'ok' | 'error';
743
- startedAt: number;
744
- endedAt?: number;
745
- result?: string;
746
- error?: string;
747
- };
748
-
749
- export type BackgroundListResponse = {
750
- instances: BgInstance[];
751
- status: { dir: string; exists: boolean; count: number };
752
- };
753
-
754
- export type BackgroundOutputResponse = {
755
- /** Captured stdout/stderr text (tail). */
756
- output?: string;
757
- /** True when the underlying log file is gone (e.g. after cleanup). */
758
- available?: boolean;
759
- /** Total captured bytes — useful for the modal header. */
760
- bytes?: number;
761
- /** Truncation flag set by the server when output was capped. */
762
- truncated?: boolean;
763
- };
764
-
765
- export type BackgroundTmuxResponse = {
766
- /** Computed tmux session name (e.g. "bg-r2u9q8"). */
767
- session?: string;
768
- /** Local command the user can paste to attach. */
769
- attachCommand?: string;
770
- /** Whether the session exists in tmux right now. */
771
- exists?: boolean;
772
- /** Optional reason when exists === false. */
773
- reason?: string;
774
- };
775
-
776
- export type Snapshot = {
777
- overview: Overview;
778
- agents: Agent[];
779
- artifacts: Artifact[];
780
- projects: ProjectRecord[];
781
- activeProject: ProjectRecord | null;
782
- config: ConfigResponse;
783
- settings: SettingsResponse;
784
- tasks: Task[];
785
- mods: Mod[];
786
- schedules: Schedule[];
787
- providers: Provider[];
788
- mcps: McpServer[];
789
- };
790
-
791
- export type WsStatus = 'connecting' | 'connected' | 'disconnected';
792
-
793
- /**
794
- * F-035 (MetaHarness) — 3-tier model routing transparency.
795
- * Emitted by the SDK when a request is dispatched to a model or
796
- * short-circuited by a Tier-1 codemod intent (per ruflo's
797
- * `[CODEMOD_AVAILABLE]` / `[TASK_MODEL_RECOMMENDATION]` convention).
798
- */
799
- export type RoutingTier = 'CODEMOD' | 'TIER1' | 'TIER2' | 'TIER3';
800
-
801
- export type RoutingDecision = {
802
- id: string;
803
- ts: number;
804
- tier: RoutingTier;
805
- /** Model used when tier != CODEMOD. May be 'codemod:<intent>' otherwise. */
806
- model: string;
807
- /** Optional task or agent name for context. */
808
- task?: string;
809
- /** Optional cost estimate (USD) for non-codemod tiers. */
810
- costUsd?: number;
811
- /** Optional latency (ms) — populated post-call. */
812
- latencyMs?: number;
813
- /** Optional human-readable note (e.g. codemod intent description). */
814
- note?: string;
815
- };
816
-
817
- export type WsMessage =
818
- | { type: 'snapshot'; ts: number; data: Snapshot }
819
- | { type: 'change'; event: string; path: string; ts: number }
820
- | { type: 'tasks:change'; task: Task }
821
- | { type: 'tasks:delete'; id: string }
822
- | { type: 'task:progress'; taskId: string; progress?: number; step?: string | null; agent?: string | null }
823
- | { type: 'settings:change'; settings: Settings }
824
- | { type: 'agents:change' }
825
- | { type: 'background:change'; action?: string; id?: string; sessionId?: string }
826
- | { type: 'background:cleanup'; deleted?: number }
827
- | { type: 'agent:status'; agent: Agent }
828
- | { type: 'agent:restarted'; agent: Agent }
829
- | { type: 'agent:stuck'; agents: { name: string }[] }
830
- | { type: 'artifact:change'; slug: string; deleted?: boolean }
831
- | { type: 'schedules:change' }
832
- | { type: 'project:change'; project?: ProjectRecord }
833
- | { type: 'chat:message'; message: ChatMessage }
834
- | { type: 'notification:new'; notification: Notification }
835
- | { type: 'notifications:change' }
836
- | { type: 'dialog:show'; dialog: DialogDescriptor }
837
- | { type: 'routing:decision'; decision: RoutingDecision }
838
- | { type: 'pong'; ts: number }
839
- | { type: 'ping' }
840
- | { type: 'refresh' };
841
-
842
- /** Resolve a theme to the actual key applied to <html data-theme="..."> */
843
- export function applyTheme(themeName: ThemeName | ThemeSettings): 'dark' | 'light' {
844
- const mode = typeof themeName === 'string' ? themeName : themeName.mode;
845
- const resolved: 'dark' | 'light' =
846
- mode === 'system'
847
- ? typeof window !== 'undefined' &&
848
- window.matchMedia('(prefers-color-scheme: light)').matches
849
- ? 'light'
850
- : 'dark'
851
- : mode === 'light'
852
- ? 'light'
853
- : 'dark';
854
- if (typeof document !== 'undefined') {
855
- if (resolved === 'light') {
856
- document.documentElement.setAttribute('data-theme', 'light');
857
- } else {
858
- document.documentElement.removeAttribute('data-theme');
859
- }
860
- }
861
- return resolved;
862
- }
863
-
864
- /** Apply the full theme object — sets CSS variables. */
865
- export function applyThemeTokens(theme: ThemeSettings) {
866
- if (typeof document === 'undefined') return;
867
- const root = document.documentElement;
868
- root.style.setProperty('--accent', theme.accent);
869
- root.style.setProperty('--success', theme.success);
870
- root.style.setProperty('--warning', theme.warning);
871
- root.style.setProperty('--error', theme.error);
872
- root.style.setProperty('--info', theme.info);
873
- // Derive accent-bg/border lightly
874
- root.style.setProperty('--accent-bg', hexToRgba(theme.accent, 0.12));
875
- root.style.setProperty('--accent-border', hexToRgba(theme.accent, 0.4));
876
- if (theme.fontFamily) {
877
- root.style.setProperty('--font-sans', `'${theme.fontFamily}', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif`);
878
- }
879
- if (theme.fontSize) {
880
- root.style.setProperty('--base-font-size', `${theme.fontSize}px`);
881
- }
882
- root.dataset.compactMode = theme.compactMode ? 'true' : 'false';
883
- root.dataset.animations = theme.animations ? 'true' : 'false';
884
- }
885
-
886
- function hexToRgba(hex: string, alpha: number) {
887
- const m = /^#?([0-9a-f]{6})$/i.exec(hex || '');
888
- if (!m) return `rgba(139, 92, 246, ${alpha})`;
889
- const n = parseInt(m[1], 16);
890
- const r = (n >> 16) & 255;
891
- const g = (n >> 8) & 255;
892
- const b = n & 255;
893
- return `rgba(${r}, ${g}, ${b}, ${alpha})`;
894
- }