@polderlabs/bizar 8.0.0 → 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 (267) 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 +1 -2
  17. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js +6 -0
  18. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js.map +1 -0
  19. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js +1 -0
  20. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js.map +1 -0
  21. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js +28 -0
  22. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js.map +1 -0
  23. package/bizar-dash/dist/assets/{Badge-Cd61wsBa.js → Badge-BH4C3aUF.js} +1 -1
  24. package/bizar-dash/dist/assets/{Badge-Cd61wsBa.js.map → Badge-BH4C3aUF.js.map} +1 -1
  25. package/bizar-dash/dist/assets/Button-RmN1RKhE.js +6 -0
  26. package/bizar-dash/dist/assets/Button-RmN1RKhE.js.map +1 -0
  27. package/bizar-dash/dist/assets/{Card-C_bvqXdQ.js → Card-BzJeYR2D.js} +1 -1
  28. package/bizar-dash/dist/assets/{Card-C_bvqXdQ.js.map → Card-BzJeYR2D.js.map} +1 -1
  29. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js +1 -0
  30. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js.map +1 -0
  31. package/bizar-dash/dist/assets/{EmptyState-BWQuKnk9.js → EmptyState-DEiBv4-r.js} +1 -1
  32. package/bizar-dash/dist/assets/{EmptyState-BWQuKnk9.js.map → EmptyState-DEiBv4-r.js.map} +1 -1
  33. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js +6 -0
  34. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js.map +1 -0
  35. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js +21 -0
  36. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js.map +1 -0
  37. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js +67 -0
  38. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js.map +1 -0
  39. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js +13 -0
  40. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js.map +1 -0
  41. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js +1 -0
  42. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js.map +1 -0
  43. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js +16 -0
  44. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js.map +1 -0
  45. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js +10 -0
  46. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js.map +1 -0
  47. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js +43 -0
  48. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js.map +1 -0
  49. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js +1 -0
  50. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js.map +1 -0
  51. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js +1 -0
  52. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js.map +1 -0
  53. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js +16 -0
  54. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js.map +1 -0
  55. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js +1 -0
  56. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js.map +1 -0
  57. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js +1 -0
  58. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js.map +1 -0
  59. package/bizar-dash/dist/assets/{ViewHeader-D6c2cw1b.js → ViewHeader-dPd4zAyj.js} +1 -1
  60. package/bizar-dash/dist/assets/{ViewHeader-D6c2cw1b.js.map → ViewHeader-dPd4zAyj.js.map} +1 -1
  61. package/bizar-dash/dist/assets/{brain-DeoXNDE2.js → brain-BajPVibR.js} +1 -1
  62. package/bizar-dash/dist/assets/{brain-DeoXNDE2.js.map → brain-BajPVibR.js.map} +1 -1
  63. package/bizar-dash/dist/assets/{calendar-DRlQkGJc.js → calendar-CaP_Bbgc.js} +2 -2
  64. package/bizar-dash/dist/assets/{calendar-DRlQkGJc.js.map → calendar-CaP_Bbgc.js.map} +1 -1
  65. package/bizar-dash/dist/assets/{cmdk-BwN8hcKQ.js → cmdk-BLWIhKrV.js} +1 -1
  66. package/bizar-dash/dist/assets/{cmdk-BwN8hcKQ.js.map → cmdk-BLWIhKrV.js.map} +1 -1
  67. package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js +5 -0
  68. package/bizar-dash/dist/assets/{dnd-kit-DR2Qzzxk.js.map → dnd-kit-DU8GZk7s.js.map} +1 -1
  69. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js +11 -0
  70. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js.map +1 -0
  71. package/bizar-dash/dist/assets/index-AL3OLUfz.js +1 -0
  72. package/bizar-dash/dist/assets/index-AL3OLUfz.js.map +1 -0
  73. package/bizar-dash/dist/assets/{main-COdgjqbZ.css → main-CcQfRfIJ.css} +1 -1
  74. package/bizar-dash/dist/assets/main-LxX9zTRk.js +109 -0
  75. package/bizar-dash/dist/assets/main-LxX9zTRk.js.map +1 -0
  76. package/bizar-dash/dist/assets/{minus-CrStJTZ7.js → plus-CVH1JB04.js} +2 -2
  77. package/bizar-dash/dist/assets/plus-CVH1JB04.js.map +1 -0
  78. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js +11 -0
  79. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js.map +1 -0
  80. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js +6 -0
  81. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js.map +1 -0
  82. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js +6 -0
  83. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js.map +1 -0
  84. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js +1 -0
  85. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js.map +1 -0
  86. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js +1 -0
  87. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js.map +1 -0
  88. package/bizar-dash/dist/assets/{wrench-BJ1WIC4u.js → wrench-B7go551L.js} +1 -1
  89. package/bizar-dash/dist/assets/{wrench-BJ1WIC4u.js.map → wrench-B7go551L.js.map} +1 -1
  90. package/bizar-dash/dist/v8.html +3 -3
  91. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  92. package/bizar-dash/src/server/api.mjs +10 -0
  93. package/bizar-dash/src/server/bg-poller.mjs +81 -1
  94. package/bizar-dash/src/server/bg-poller.test.mjs +28 -0
  95. package/bizar-dash/src/server/progress-parser.mjs +221 -0
  96. package/bizar-dash/src/server/progress-parser.test.mjs +105 -0
  97. package/bizar-dash/src/server/routes/agents-cc.mjs +381 -0
  98. package/bizar-dash/src/server/routes/agents-cc.test.mjs +35 -0
  99. package/bizar-dash/src/server/routes/goals.mjs +307 -0
  100. package/bizar-dash/src/server/routes/tasks.mjs +11 -0
  101. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +2 -2
  102. package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +104 -0
  103. package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +92 -0
  104. package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +87 -0
  105. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +110 -40
  106. package/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
  107. package/bizar-dash/src/web/v8/data/types.ts +154 -0
  108. package/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
  109. package/bizar-dash/src/web/v8/data/useWebSocket.ts +153 -0
  110. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +252 -0
  111. package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +371 -0
  112. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +245 -0
  113. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +6 -3
  114. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +3 -3
  115. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +10 -5
  116. package/bizar-dash/src/web/v8/ui/styles/globals.css +5 -0
  117. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +53 -15
  118. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +151 -87
  119. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +1 -1
  120. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +133 -30
  121. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +176 -67
  122. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +78 -11
  123. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +58 -42
  124. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +112 -52
  125. package/bizar-dash/src/web/v8/views/Router.tsx +13 -37
  126. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +635 -210
  127. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +140 -49
  128. package/bizar-dash/tests/components/Button.test.tsx +51 -14
  129. package/bizar-dash/tests/components/Card.test.tsx +37 -20
  130. package/bizar-dash/tests/components/Dialog.test.tsx +80 -0
  131. package/bizar-dash/tests/components/Toast.test.tsx +48 -95
  132. package/bizar-dash/tests/goals-decompose.test.mjs +177 -0
  133. package/bizar-dash/tests/setup.ts +21 -0
  134. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +30 -15
  135. package/bizar-dash/vite.config.ts +15 -0
  136. package/bizar-dash/vitest.config.ts +4 -1
  137. package/cli/bin.mjs +32 -0
  138. package/cli/install.mjs +26 -1
  139. package/cli/provision-claude.mjs +86 -0
  140. package/package.json +1 -1
  141. package/scripts/run-dev.mjs +84 -0
  142. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js +0 -6
  143. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js.map +0 -1
  144. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js +0 -1
  145. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js.map +0 -1
  146. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js +0 -1
  147. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js.map +0 -1
  148. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js +0 -8
  149. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js.map +0 -1
  150. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js +0 -11
  151. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js.map +0 -1
  152. package/bizar-dash/dist/assets/Grid-C62gCPqt.js +0 -1
  153. package/bizar-dash/dist/assets/Grid-C62gCPqt.js.map +0 -1
  154. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js +0 -21
  155. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js.map +0 -1
  156. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js +0 -67
  157. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js.map +0 -1
  158. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js +0 -13
  159. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js.map +0 -1
  160. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js +0 -1
  161. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js.map +0 -1
  162. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js +0 -1
  163. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js.map +0 -1
  164. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js +0 -30
  165. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js.map +0 -1
  166. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js +0 -48
  167. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js.map +0 -1
  168. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js +0 -11
  169. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js.map +0 -1
  170. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js +0 -1
  171. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js.map +0 -1
  172. package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js +0 -6
  173. package/bizar-dash/dist/assets/circle-check-DmYQ3vGp.js.map +0 -1
  174. package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js +0 -5
  175. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js +0 -6
  176. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js.map +0 -1
  177. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js +0 -6
  178. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js.map +0 -1
  179. package/bizar-dash/dist/assets/main-Cw6gybzS.js +0 -109
  180. package/bizar-dash/dist/assets/main-Cw6gybzS.js.map +0 -1
  181. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js +0 -6
  182. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js.map +0 -1
  183. package/bizar-dash/dist/assets/minus-CrStJTZ7.js.map +0 -1
  184. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  185. /package/bizar-dash/tests/{BackgroundAgents.test.tsx → v7-archive/BackgroundAgents.test.tsx} +0 -0
  186. /package/bizar-dash/tests/{a11y → v7-archive/a11y}/forms.test.tsx +0 -0
  187. /package/bizar-dash/tests/{a11y.test.tsx → v7-archive/a11y.test.tsx} +0 -0
  188. /package/bizar-dash/tests/{autosave.test.tsx → v7-archive/autosave.test.tsx} +0 -0
  189. /package/bizar-dash/tests/{backup-restore.test.tsx → v7-archive/backup-restore.test.tsx} +0 -0
  190. /package/bizar-dash/tests/{chat-composer.test.tsx → v7-archive/chat-composer.test.tsx} +0 -0
  191. /package/bizar-dash/tests/{communication-log.test.tsx → v7-archive/communication-log.test.tsx} +0 -0
  192. /package/bizar-dash/tests/{components → v7-archive/components}/Modal.test.tsx +0 -0
  193. /package/bizar-dash/tests/{components → v7-archive/components}/Spinner.test.tsx +0 -0
  194. /package/bizar-dash/tests/{components → v7-archive/components}/StatusBadge.test.tsx +0 -0
  195. /package/bizar-dash/tests/{components → v7-archive/components}/doctor-panel.test.tsx +0 -0
  196. /package/bizar-dash/tests/{components → v7-archive/components}/screenshot-ocr.test.tsx +0 -0
  197. /package/bizar-dash/tests/{components → v7-archive/components}/settings-search.test.tsx +0 -0
  198. /package/bizar-dash/tests/{components → v7-archive/components}/workspace-selector.test.tsx +0 -0
  199. /package/bizar-dash/tests/{ui → v7-archive}/controls/Button.test.tsx +0 -0
  200. /package/bizar-dash/tests/{ui → v7-archive}/controls/Checkbox.test.tsx +0 -0
  201. /package/bizar-dash/tests/{ui → v7-archive}/controls/IconButton.test.tsx +0 -0
  202. /package/bizar-dash/tests/{ui → v7-archive}/controls/Kbd.test.tsx +0 -0
  203. /package/bizar-dash/tests/{ui → v7-archive}/controls/NumberInput.test.tsx +0 -0
  204. /package/bizar-dash/tests/{ui → v7-archive}/controls/RadioGroup.test.tsx +0 -0
  205. /package/bizar-dash/tests/{ui → v7-archive}/controls/SearchInput.test.tsx +0 -0
  206. /package/bizar-dash/tests/{ui → v7-archive}/controls/Select.test.tsx +0 -0
  207. /package/bizar-dash/tests/{ui → v7-archive}/controls/Slider.test.tsx +0 -0
  208. /package/bizar-dash/tests/{ui → v7-archive}/controls/TextInput.test.tsx +0 -0
  209. /package/bizar-dash/tests/{ui → v7-archive}/controls/Textarea.test.tsx +0 -0
  210. /package/bizar-dash/tests/{ui → v7-archive}/controls/Toggle.test.tsx +0 -0
  211. /package/bizar-dash/tests/{ui → v7-archive}/data/BarChart.test.tsx +0 -0
  212. /package/bizar-dash/tests/{ui → v7-archive}/data/DataTable.test.tsx +0 -0
  213. /package/bizar-dash/tests/{ui → v7-archive}/data/EmptyState.test.tsx +0 -0
  214. /package/bizar-dash/tests/{ui → v7-archive}/data/ErrorState.test.tsx +0 -0
  215. /package/bizar-dash/tests/{ui → v7-archive}/data/KeyValueList.test.tsx +0 -0
  216. /package/bizar-dash/tests/{ui → v7-archive}/data/LoadingState.test.tsx +0 -0
  217. /package/bizar-dash/tests/{ui → v7-archive}/data/Sparkline.test.tsx +0 -0
  218. /package/bizar-dash/tests/{ui → v7-archive}/data/StatTile.test.tsx +0 -0
  219. /package/bizar-dash/tests/{dep-graph.test.tsx → v7-archive/dep-graph.test.tsx} +0 -0
  220. /package/bizar-dash/tests/{eval-web-ui.test.tsx → v7-archive/eval-web-ui.test.tsx} +0 -0
  221. /package/bizar-dash/tests/{event-log.test.tsx → v7-archive/event-log.test.tsx} +0 -0
  222. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Badge.test.tsx +0 -0
  223. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Dialog.test.tsx +0 -0
  224. /package/bizar-dash/tests/{ui → v7-archive}/feedback/ProgressBar.test.tsx +0 -0
  225. /package/bizar-dash/tests/{ui → v7-archive}/feedback/StatusDot.test.tsx +0 -0
  226. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Toast.test.tsx +0 -0
  227. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Tooltip.test.tsx +0 -0
  228. /package/bizar-dash/tests/{goal-input.test.tsx → v7-archive/goal-input.test.tsx} +0 -0
  229. /package/bizar-dash/tests/{goap-planner.test.ts → v7-archive/goap-planner.test.ts} +0 -0
  230. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useModal.test.tsx +0 -0
  231. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useToast.test.tsx +0 -0
  232. /package/bizar-dash/tests/{ui → v7-archive}/layout/AppShell.test.tsx +0 -0
  233. /package/bizar-dash/tests/{ui → v7-archive}/layout/Breadcrumbs.test.tsx +0 -0
  234. /package/bizar-dash/tests/{ui → v7-archive}/layout/Panel.test.tsx +0 -0
  235. /package/bizar-dash/tests/{ui → v7-archive}/layout/PanelHeader.test.tsx +0 -0
  236. /package/bizar-dash/tests/{ui → v7-archive}/layout/Sidebar.test.tsx +0 -0
  237. /package/bizar-dash/tests/{ui → v7-archive}/layout/Tabs.test.tsx +0 -0
  238. /package/bizar-dash/tests/{ui → v7-archive}/layout/Topbar.test.tsx +0 -0
  239. /package/bizar-dash/tests/{ui → v7-archive}/layout/ViewHeader.test.tsx +0 -0
  240. /package/bizar-dash/tests/{lib → v7-archive/lib}/i18n.test.ts +0 -0
  241. /package/bizar-dash/tests/{lib → v7-archive/lib}/search-fuzzy.test.ts +0 -0
  242. /package/bizar-dash/tests/{lib → v7-archive/lib}/utils.test.ts +0 -0
  243. /package/bizar-dash/tests/{memory-graph-view.test.tsx → v7-archive/memory-graph-view.test.tsx} +0 -0
  244. /package/bizar-dash/tests/{mobile-chat.test.tsx → v7-archive/mobile-chat.test.tsx} +0 -0
  245. /package/bizar-dash/tests/{mobile-layout.test.tsx → v7-archive/mobile-layout.test.tsx} +0 -0
  246. /package/bizar-dash/tests/{mobile-overview.test.tsx → v7-archive/mobile-overview.test.tsx} +0 -0
  247. /package/bizar-dash/tests/{mobile-settings.test.tsx → v7-archive/mobile-settings.test.tsx} +0 -0
  248. /package/bizar-dash/tests/{mobile-tasks.test.tsx → v7-archive/mobile-tasks.test.tsx} +0 -0
  249. /package/bizar-dash/tests/{ui → v7-archive}/navigation/CommandPalette.test.tsx +0 -0
  250. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavGroup.test.tsx +0 -0
  251. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavLink.test.tsx +0 -0
  252. /package/bizar-dash/tests/{quality-gates.test.tsx → v7-archive/quality-gates.test.tsx} +0 -0
  253. /package/bizar-dash/tests/{settings-layout.test.tsx → v7-archive/settings-layout.test.tsx} +0 -0
  254. /package/bizar-dash/tests/{settings-mode-wiring.test.tsx → v7-archive/settings-mode-wiring.test.tsx} +0 -0
  255. /package/bizar-dash/tests/{settings-nav.test.tsx → v7-archive/settings-nav.test.tsx} +0 -0
  256. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Box.test.tsx +0 -0
  257. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Grid.test.tsx +0 -0
  258. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Inline.test.tsx +0 -0
  259. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Separator.test.tsx +0 -0
  260. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Stack.test.tsx +0 -0
  261. /package/bizar-dash/tests/{views → v7-archive/views}/Agents.test.tsx +0 -0
  262. /package/bizar-dash/tests/{views → v7-archive/views}/Memory.test.tsx +0 -0
  263. /package/bizar-dash/tests/{views → v7-archive/views}/Overview.test.tsx +0 -0
  264. /package/bizar-dash/tests/{views → v7-archive/views}/Tasks.test.tsx +0 -0
  265. /package/bizar-dash/tests/{views → v7-archive/views}/sidebar.test.tsx +0 -0
  266. /package/bizar-dash/tests/{views → v7-archive/views}/topbar.test.tsx +0 -0
  267. /package/bizar-dash/tests/{voice-recorder.test.tsx → v7-archive/voice-recorder.test.tsx} +0 -0
@@ -0,0 +1,10 @@
1
+ import{r as u,j as i,h as k,u as Z,i as E,k as I,l as ee}from"./cmdk-BLWIhKrV.js";import{u as te,a as re,c as Ae,b as Ve,d as ne}from"./index-AL3OLUfz.js";import{c as L}from"./main-LxX9zTRk.js";var z="Switch",[He]=ee(z),[Ke,G]=He(z);function Fe(e){const{__scopeSwitch:t,checked:r,children:s,defaultChecked:n,disabled:o,form:c,name:a,onCheckedChange:f,required:d,value:m="on",internal_do_not_use_render:l}=e,[h,b]=Z({prop:r,defaultProp:n??!1,onChange:f,caller:z}),[g,v]=u.useState(null),[S,p]=u.useState(null),x=u.useRef(!1),y=g?!!c||!!g.closest("form"):!0,R={checked:h,setChecked:b,disabled:o,control:g,setControl:v,name:a,form:c,value:m,hasConsumerStoppedPropagationRef:x,required:d,defaultChecked:n,isFormControl:y,bubbleInput:S,setBubbleInput:p};return i.jsx(Ke,{scope:t,...R,children:Le(l)?l(R):s})}var oe="SwitchTrigger",se=u.forwardRef(({__scopeSwitch:e,onClick:t,...r},s)=>{const{control:n,form:o,value:c,disabled:a,checked:f,required:d,setControl:m,setChecked:l,hasConsumerStoppedPropagationRef:h,isFormControl:b,bubbleInput:g}=G(oe,e),v=E(s,m),S=u.useRef(f);return u.useEffect(()=>{const p=o?n==null?void 0:n.ownerDocument.getElementById(o):n==null?void 0:n.form;if(p instanceof HTMLFormElement){const x=()=>l(S.current);return p.addEventListener("reset",x),()=>p.removeEventListener("reset",x)}},[n,o,l]),i.jsx(k.button,{type:"button",role:"switch","aria-checked":f,"aria-required":d,"data-state":ue(f),"data-disabled":a?"":void 0,disabled:a,value:c,...r,ref:v,onClick:I(t,p=>{l(x=>!x),g&&b&&(h.current=p.isPropagationStopped(),h.current||p.stopPropagation())})})});se.displayName=oe;var ae=u.forwardRef((e,t)=>{const{__scopeSwitch:r,name:s,checked:n,defaultChecked:o,required:c,disabled:a,value:f,onCheckedChange:d,form:m,...l}=e;return i.jsx(Fe,{__scopeSwitch:r,checked:n,defaultChecked:o,disabled:a,required:c,onCheckedChange:d,name:s,form:m,value:f,internal_do_not_use_render:({isFormControl:h})=>i.jsxs(i.Fragment,{children:[i.jsx(se,{...l,ref:t,__scopeSwitch:r}),h&&i.jsx(de,{__scopeSwitch:r})]})})});ae.displayName=z;var ie="SwitchThumb",ce=u.forwardRef((e,t)=>{const{__scopeSwitch:r,...s}=e,n=G(ie,r);return i.jsx(k.span,{"data-state":ue(n.checked),"data-disabled":n.disabled?"":void 0,...s,ref:t})});ce.displayName=ie;var le="SwitchBubbleInput",de=u.forwardRef(({__scopeSwitch:e,...t},r)=>{const{control:s,hasConsumerStoppedPropagationRef:n,checked:o,defaultChecked:c,required:a,disabled:f,name:d,value:m,form:l,bubbleInput:h,setBubbleInput:b}=G(le,e),g=E(r,b),v=te(o),S=re(s);u.useEffect(()=>{const x=h;if(!x)return;const y=window.HTMLInputElement.prototype,C=Object.getOwnPropertyDescriptor(y,"checked").set,H=!n.current;if(v!==o&&C){const D=new Event("click",{bubbles:H});C.call(x,o),x.dispatchEvent(D)}},[h,v,o,n]);const p=u.useRef(o);return i.jsx(k.input,{type:"checkbox","aria-hidden":!0,defaultChecked:c??p.current,required:a,disabled:f,name:d,value:m,form:l,...t,tabIndex:-1,ref:g,style:{...t.style,...S,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});de.displayName=le;function Le(e){return typeof e=="function"}function ue(e){return e?"checked":"unchecked"}const st=u.forwardRef(function(t,r){const{className:s,...n}=t;return i.jsxs(ae,{ref:r,className:L("v8-switch",s),style:{width:32,height:18,background:"var(--surface-2)",borderRadius:"var(--radius-pill)",position:"relative",border:"1px solid var(--border)",cursor:"pointer",transition:"background var(--motion-fast) var(--ease-out)"},...n,children:[i.jsx(ce,{style:{display:"block",width:12,height:12,background:"var(--fg)",borderRadius:"var(--radius-pill)",transform:"translateX(2px)",transition:"transform var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out)",willChange:"transform"}}),i.jsx("style",{children:`
2
+ .v8-switch[data-state='checked'] {
3
+ background: var(--accent);
4
+ border-color: var(--accent);
5
+ }
6
+ .v8-switch[data-state='checked'] > span {
7
+ transform: translateX(16px);
8
+ background: var(--fg-on-accent);
9
+ }
10
+ `})]})});var fe=["PageUp","PageDown"],he=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],me={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},N="Slider",[$,ze,Oe]=Ae(N),[X]=ee(N,[Oe]),[Ue,V]=X(N),pe=u.forwardRef((e,t)=>{const{name:r,min:s=0,max:n=100,step:o=1,orientation:c="horizontal",disabled:a=!1,minStepsBetweenThumbs:f=0,defaultValue:d=[s],value:m,onValueChange:l=()=>{},onValueCommit:h=()=>{},inverted:b=!1,form:g,...v}=e,S=u.useRef(new Set),p=u.useRef(0),x=u.useRef(!1),R=c==="horizontal"?$e:We,[C,H]=u.useState(null),D=E(t,H),[_=[],O]=Z({prop:m,defaultProp:d,onChange:w=>{var M;(M=[...S.current][p.current])==null||M.focus({preventScroll:!0,focusVisible:x.current}),x.current=!1,l(w)}}),q=u.useRef(_),Te=u.useRef(_);u.useEffect(()=>{const w=g?C==null?void 0:C.ownerDocument.getElementById(g):C==null?void 0:C.closest("form");if(w instanceof HTMLFormElement){const P=()=>O(Te.current);return w.addEventListener("reset",P),()=>w.removeEventListener("reset",P)}},[C,g,O]);function Ne(w){const P=qe(_,w);B(w,P)}function De(w){B(w,p.current)}function Be(){const w=q.current[p.current];_[p.current]!==w&&h(_)}function B(w,P,{commit:M}={commit:!1}){const J=Me(o),U=F(Math.round((w-s)/o)*o+s,J),A=ne(U,[s,n]);O((T=[])=>{const j=Xe(T,A,P);if(Ze(j,f*o)){p.current=j.indexOf(A);const Q=String(j)!==String(T);return Q&&M&&h(j),Q?j:T}else return T})}return i.jsx(Ue,{scope:e.__scopeSlider,name:r,disabled:a,min:s,max:n,valueIndexToChangeRef:p,thumbs:S.current,values:_,orientation:c,form:g,children:i.jsx($.Provider,{scope:e.__scopeSlider,children:i.jsx($.Slot,{scope:e.__scopeSlider,children:i.jsx(R,{"aria-disabled":a,"data-disabled":a?"":void 0,...v,ref:D,onPointerDown:I(v.onPointerDown,()=>{a||(q.current=_,x.current=!1)}),min:s,max:n,inverted:b,onSlideStart:a?void 0:Ne,onSlideMove:a?void 0:De,onSlideEnd:a?void 0:Be,onHomeKeyDown:()=>{a||(x.current=!0,B(s,0,{commit:!0}))},onEndKeyDown:()=>{a||(x.current=!0,B(n,_.length-1,{commit:!0}))},onStepKeyDown:({event:w,direction:P})=>{if(!a){x.current=!0;const U=fe.includes(w.key)||w.shiftKey&&he.includes(w.key)?10:1,A=p.current,T=_[A],j=et(T,{min:s,step:o,direction:P,multiplier:U});B(j,A,{commit:!0})}}})})})})});pe.displayName=N;var[ve,ge]=X(N,{startEdge:"left",endEdge:"right",size:"width",direction:1}),$e=u.forwardRef((e,t)=>{const{min:r,max:s,dir:n,inverted:o,onSlideStart:c,onSlideMove:a,onSlideEnd:f,onStepKeyDown:d,...m}=e,[l,h]=u.useState(null),b=E(t,h),g=u.useRef(void 0),v=Ve(n),S=v==="ltr",p=S&&!o||!S&&o;function x(y){const R=g.current||l.getBoundingClientRect(),C=[0,R.width],D=Y(C,p?[r,s]:[s,r]);return g.current=R,D(y-R.left)}return i.jsx(ve,{scope:e.__scopeSlider,startEdge:p?"left":"right",endEdge:p?"right":"left",direction:p?1:-1,size:"width",children:i.jsx(be,{dir:v,"data-orientation":"horizontal",...m,ref:b,style:{...m.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:y=>{const R=x(y.clientX);c==null||c(R)},onSlideMove:y=>{const R=x(y.clientX);a==null||a(R)},onSlideEnd:()=>{g.current=void 0,f==null||f()},onStepKeyDown:y=>{const C=me[p?"from-left":"from-right"].includes(y.key);d==null||d({event:y,direction:C?-1:1})}})})}),We=u.forwardRef((e,t)=>{const{min:r,max:s,inverted:n,onSlideStart:o,onSlideMove:c,onSlideEnd:a,onStepKeyDown:f,...d}=e,m=u.useRef(null),l=E(t,m),h=u.useRef(void 0),b=!n;function g(v){const S=h.current||m.current.getBoundingClientRect(),p=[0,S.height],y=Y(p,b?[s,r]:[r,s]);return h.current=S,y(v-S.top)}return i.jsx(ve,{scope:e.__scopeSlider,startEdge:b?"bottom":"top",endEdge:b?"top":"bottom",size:"height",direction:b?1:-1,children:i.jsx(be,{"data-orientation":"vertical",...d,ref:l,style:{...d.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:v=>{const S=g(v.clientY);o==null||o(S)},onSlideMove:v=>{const S=g(v.clientY);c==null||c(S)},onSlideEnd:()=>{h.current=void 0,a==null||a()},onStepKeyDown:v=>{const p=me[b?"from-bottom":"from-top"].includes(v.key);f==null||f({event:v,direction:p?-1:1})}})})}),be=u.forwardRef((e,t)=>{const{__scopeSlider:r,onSlideStart:s,onSlideMove:n,onSlideEnd:o,onHomeKeyDown:c,onEndKeyDown:a,onStepKeyDown:f,...d}=e,m=V(N,r);return i.jsx(k.span,{...d,ref:t,onKeyDown:I(e.onKeyDown,l=>{l.key==="Home"?(c(l),l.preventDefault()):l.key==="End"?(a(l),l.preventDefault()):fe.concat(he).includes(l.key)&&(f(l),l.preventDefault())}),onPointerDown:I(e.onPointerDown,l=>{const h=l.target;h.setPointerCapture(l.pointerId),l.preventDefault(),m.thumbs.has(h)?h.focus({preventScroll:!0,focusVisible:!1}):s(l)}),onPointerMove:I(e.onPointerMove,l=>{l.target.hasPointerCapture(l.pointerId)&&n(l)}),onPointerUp:I(e.onPointerUp,l=>{const h=l.target;h.hasPointerCapture(l.pointerId)&&(h.releasePointerCapture(l.pointerId),o(l))})})}),Se="SliderTrack",xe=u.forwardRef((e,t)=>{const{__scopeSlider:r,...s}=e,n=V(Se,r);return i.jsx(k.span,{"data-disabled":n.disabled?"":void 0,"data-orientation":n.orientation,...s,ref:t})});xe.displayName=Se;var W="SliderRange",we=u.forwardRef((e,t)=>{const{__scopeSlider:r,...s}=e,n=V(W,r),o=ge(W,r),c=u.useRef(null),a=E(t,c),f=n.values.length,d=n.values.map(h=>Ie(h,n.min,n.max)),m=f>1?Math.min(...d):0,l=100-Math.max(...d);return i.jsx(k.span,{"data-orientation":n.orientation,"data-disabled":n.disabled?"":void 0,...s,ref:a,style:{...e.style,[o.startEdge]:m+"%",[o.endEdge]:l+"%"}})});we.displayName=W;var ye="SliderThumb",[Ge,Re]=X(ye),Ce="SliderThumbProvider";function Pe(e){const{__scopeSlider:t,name:r,children:s,internal_do_not_use_render:n}=e,o=V(Ce,t),c=ze(t),[a,f]=u.useState(null),d=u.useMemo(()=>a?c().findIndex(S=>S.ref.current===a):-1,[c,a]),m=re(a),l=a?!!o.form||!!a.closest("form"):!0,h=o.values[d],b=r??(o.name?o.name+(o.values.length>1?"[]":""):void 0),g=h===void 0?0:Ie(h,o.min,o.max);u.useEffect(()=>{if(a)return o.thumbs.add(a),()=>{o.thumbs.delete(a)}},[a,o.thumbs]);const v={value:h,name:b,form:o.form,isFormControl:l,index:d,thumb:a,onThumbChange:f,percent:g,size:m};return i.jsx(Ge,{scope:t,...v,children:tt(n)?n(v):s})}Pe.displayName=Ce;var K="SliderThumbTrigger",_e=u.forwardRef((e,t)=>{const{__scopeSlider:r,...s}=e,n=V(K,r),o=ge(K,r),{index:c,value:a,percent:f,size:d,onThumbChange:m}=Re(K,r),l=E(t,m),h=Ye(c,n.values.length),b=d==null?void 0:d[o.size],g=b?Je(b,f,o.direction):0;return i.jsx("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[o.startEdge]:`calc(${f}% + ${g}px)`},children:i.jsx($.ItemSlot,{scope:r,children:i.jsx(k.span,{role:"slider","aria-label":e["aria-label"]||h,"aria-valuemin":n.min,"aria-valuenow":a,"aria-valuemax":n.max,"aria-orientation":n.orientation,"data-orientation":n.orientation,"data-disabled":n.disabled?"":void 0,tabIndex:n.disabled?void 0:0,...s,ref:l,style:a===void 0?{display:"none"}:e.style,onFocus:I(e.onFocus,()=>{n.valueIndexToChangeRef.current=c})})})})});_e.displayName=K;var ke=u.forwardRef((e,t)=>{const{__scopeSlider:r,name:s,...n}=e;return i.jsx(Pe,{__scopeSlider:r,name:s,internal_do_not_use_render:({index:o,isFormControl:c})=>i.jsxs(i.Fragment,{children:[i.jsx(_e,{...n,ref:t,__scopeSlider:r}),c?i.jsx(je,{__scopeSlider:r},o):null]})})});ke.displayName=ye;var Ee="SliderBubbleInput",je=u.forwardRef(({__scopeSlider:e,...t},r)=>{const{value:s,name:n,form:o}=Re(Ee,e),c=u.useRef(null),a=E(c,r),f=te(s);return u.useEffect(()=>{const d=c.current;if(!d)return;const m=window.HTMLInputElement.prototype,h=Object.getOwnPropertyDescriptor(m,"value").set;if(f!==s&&h){const b=new Event("input",{bubbles:!0});h.call(d,s),d.dispatchEvent(b)}},[f,s]),i.jsx(k.input,{style:{display:"none"},name:n,form:o,...t,ref:a,defaultValue:s})});je.displayName=Ee;function Xe(e=[],t,r){const s=[...e];return s[r]=t,s.sort((n,o)=>n-o)}function Ie(e,t,r){const o=100/(r-t)*(e-t);return ne(o,[0,100])}function Ye(e,t){return t>2?`Value ${e+1} of ${t}`:t===2?["Minimum","Maximum"][e]:void 0}function qe(e,t){if(e.length===1)return 0;const r=e.map(n=>Math.abs(n-t)),s=Math.min(...r);return r.indexOf(s)}function Je(e,t,r){const s=e/2,o=Y([0,50],[0,s]);return(s-o(t)*r)*r}function Qe(e){return e.slice(0,-1).map((t,r)=>e[r+1]-t)}function Ze(e,t){if(t>0){const r=Qe(e);return Math.min(...r)>=t}return!0}function Y(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const s=(t[1]-t[0])/(e[1]-e[0]);return t[0]+s*(r-e[0])}}function Me(e){if(!Number.isFinite(e))return 0;const t=e.toString();if(t.includes("e")){const[s,n]=t.split("e"),o=s.split(".")[1]||"",c=Number(n);return Math.max(0,o.length-c)}const r=t.split(".")[1];return r?r.length:0}function F(e,t){const r=Math.pow(10,t);return Math.round(e*r)/r}function et(e,{min:t,step:r,direction:s,multiplier:n}){const o=Me(r),c=(e-t)/r,a=Math.round(c),f=F(a*r+t,o)===F(e,o);let d;return f?d=a+n*s:s>0?d=Math.ceil(c):d=Math.floor(c),F(d*r+t,o)}function tt(e){return typeof e=="function"}const at=u.forwardRef(function(t,r){const{className:s,...n}=t;return i.jsxs(pe,{ref:r,className:L("v8-slider",s),style:{position:"relative",display:"flex",alignItems:"center",userSelect:"none",touchAction:"none",width:"100%",height:20},...n,children:[i.jsx(xe,{style:{background:"var(--surface-2)",position:"relative",flexGrow:1,borderRadius:"var(--radius-pill)",height:4},children:i.jsx(we,{style:{position:"absolute",background:"var(--accent)",borderRadius:"var(--radius-pill)",height:"100%"}})}),(Array.isArray(t.value??t.defaultValue)?t.value??t.defaultValue??[]:[t.value??t.defaultValue??0]).map((o,c)=>i.jsx(ke,{"aria-label":t["aria-label"]??`Thumb ${c+1}`,style:{display:"block",width:14,height:14,background:"var(--fg)",border:"2px solid var(--accent)",borderRadius:"var(--radius-pill)",cursor:"grab",boxShadow:"var(--shadow-1)"}},c))]})}),it=u.forwardRef(function(t,r){const{id:s,title:n,description:o,icon:c,children:a,headerActions:f,className:d,...m}=t;return i.jsxs("section",{ref:r,id:s,"aria-labelledby":`${s}-title`,className:L("v8-settings-section",d),style:{padding:"var(--space-5) var(--space-6)",background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-lg)"},...m,children:[i.jsxs("header",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-3)",marginBottom:"var(--space-4)"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"var(--space-3)",minWidth:0},children:[c!==void 0&&i.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"var(--radius-sm)",background:"color-mix(in oklch, var(--accent) 14%, transparent)",color:"var(--accent)",flexShrink:0},children:c}),i.jsxs("div",{style:{minWidth:0},children:[i.jsx("h2",{id:`${s}-title`,style:{fontSize:"var(--fs-15)",fontWeight:600,color:"var(--fg)",lineHeight:"var(--lh-snug)",margin:0},children:n}),o!==void 0&&i.jsx("p",{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:o})]})]}),f!==void 0&&i.jsx("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-2)",flexShrink:0},children:f})]}),i.jsx("div",{className:"v8-settings-section__body",children:a})]})}),ct=u.forwardRef(function(t,r){const{id:s,label:n,description:o,control:c,disabled:a=!1,className:f,...d}=t,m=`${s}-label`;return i.jsxs("div",{ref:r,"data-disabled":a||void 0,"aria-disabled":a||void 0,className:L("v8-settings-row",f),style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-4)",padding:"var(--space-3) 0",borderBottom:"1px solid var(--border)",opacity:a?.5:1},...d,children:[i.jsxs("div",{id:m,style:{flex:1,minWidth:0},children:[i.jsx("span",{style:{display:"block",fontSize:"var(--fs-13)",fontWeight:500,color:"var(--fg)",cursor:a?"not-allowed":"default",lineHeight:"var(--lh-snug)"},children:n}),o!==void 0&&i.jsx("p",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:o})]}),i.jsx("div",{role:"group","aria-labelledby":m,style:{flexShrink:0,alignSelf:"center"},children:c})]})});export{it as S,ct as a,at as b,st as c};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsRow-CppSgkT_.js","sources":["../../../node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/web/v8/ui/controls/Switch.tsx","../../../node_modules/@radix-ui/react-slider/dist/index.mjs","../../src/web/v8/ui/controls/Slider.tsx","../../src/web/v8/ui/settings/SettingsSection.tsx","../../src/web/v8/ui/settings/SettingsRow.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n control,\n form,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSwitch from '@radix-ui/react-switch';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Switch — boolean toggle (vs Checkbox which selects).\n *\n * Use for: enable/disable settings, on/off toggles.\n * Built on Radix Switch for a11y.\n */\n\nexport type SwitchProps = ComponentPropsWithoutRef<typeof RxSwitch.Root>;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSwitch.Root\n ref={ref}\n className={cx('v8-switch', className)}\n style={{\n width: 32,\n height: 18,\n background: 'var(--surface-2)',\n borderRadius: 'var(--radius-pill)',\n position: 'relative',\n border: '1px solid var(--border)',\n cursor: 'pointer',\n transition: 'background var(--motion-fast) var(--ease-out)',\n }}\n {...rest}\n >\n <RxSwitch.Thumb\n style={{\n display: 'block',\n width: 12,\n height: 12,\n background: 'var(--fg)',\n borderRadius: 'var(--radius-pill)',\n transform: 'translateX(2px)',\n transition: 'transform var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out)',\n willChange: 'transform',\n }}\n />\n <style>{`\n .v8-switch[data-state='checked'] {\n background: var(--accent);\n border-color: var(--accent);\n }\n .v8-switch[data-state='checked'] > span {\n transform: translateX(16px);\n background: var(--fg-on-accent);\n }\n `}</style>\n </RxSwitch.Root>\n );\n});","\"use client\";\n\n// src/slider.tsx\nimport * as React from \"react\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PAGE_KEYS = [\"PageUp\", \"PageDown\"];\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar BACK_KEYS = {\n \"from-left\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-right\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowRight\"],\n \"from-bottom\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-top\": [\"Home\", \"PageDown\", \"ArrowUp\", \"ArrowLeft\"]\n};\nvar SLIDER_NAME = \"Slider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SLIDER_NAME);\nvar [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope\n]);\nvar [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\nvar Slider = React.forwardRef(\n (props, forwardedRef) => {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = \"horizontal\",\n disabled = false,\n minStepsBetweenThumbs = 0,\n defaultValue = [min],\n value,\n onValueChange = () => {\n },\n onValueCommit = () => {\n },\n inverted = false,\n form,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(/* @__PURE__ */ new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isKeyboardInteractionRef = React.useRef(false);\n const isHorizontal = orientation === \"horizontal\";\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n const [control, setControl] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: (value2) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus({\n preventScroll: true,\n focusVisible: isKeyboardInteractionRef.current\n });\n isKeyboardInteractionRef.current = false;\n onValueChange(value2);\n }\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n const initialValuesRef = React.useRef(values);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.closest(\"form\");\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setValues(initialValuesRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setValues]);\n function handleSlideStart(value2) {\n const closestIndex = getClosestValueIndex(values, value2);\n updateValues(value2, closestIndex);\n }\n function handleSlideMove(value2) {\n updateValues(value2, valueIndexToChangeRef.current);\n }\n function handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n const nextValue = values[valueIndexToChangeRef.current];\n const hasChanged = nextValue !== prevValue;\n if (hasChanged) onValueCommit(values);\n }\n function updateValues(value2, atIndex, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value2 - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n setValues((prevValues = []) => {\n const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n return /* @__PURE__ */ jsx(\n SliderProvider,\n {\n scope: props.__scopeSlider,\n name,\n disabled,\n min,\n max,\n valueIndexToChangeRef,\n thumbs: thumbRefs.current,\n values,\n orientation,\n form,\n children: /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(\n SliderOrientation,\n {\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...sliderProps,\n ref: composedRefs,\n onPointerDown: composeEventHandlers(sliderProps.onPointerDown, () => {\n if (!disabled) {\n valuesBeforeSlideStartRef.current = values;\n isKeyboardInteractionRef.current = false;\n }\n }),\n min,\n max,\n inverted,\n onSlideStart: disabled ? void 0 : handleSlideStart,\n onSlideMove: disabled ? void 0 : handleSlideMove,\n onSlideEnd: disabled ? void 0 : handleSlideEnd,\n onHomeKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(min, 0, { commit: true });\n }\n },\n onEndKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(max, values.length - 1, { commit: true });\n }\n },\n onStepKeyDown: ({ event, direction: stepDirection }) => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || event.shiftKey && ARROW_KEYS.includes(event.key);\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value2 = values[atIndex];\n const nextValue = getNextStepValue(value2, {\n min,\n step,\n direction: stepDirection,\n multiplier\n });\n updateValues(nextValue, atIndex, { commit: true });\n }\n }\n }\n ) }) })\n }\n );\n }\n);\nSlider.displayName = SLIDER_NAME;\nvar [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext(SLIDER_NAME, {\n startEdge: \"left\",\n endEdge: \"right\",\n size: \"width\",\n direction: 1\n});\nvar SliderHorizontal = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setSlider);\n const rectRef = React.useRef(void 0);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const isSlidingFromLeft = isDirectionLTR && !inverted || !isDirectionLTR && inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || slider.getBoundingClientRect();\n const input = [0, rect.width];\n const output = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromLeft ? \"left\" : \"right\",\n endEdge: isSlidingFromLeft ? \"right\" : \"left\",\n direction: isSlidingFromLeft ? 1 : -1,\n size: \"width\",\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n dir: direction,\n \"data-orientation\": \"horizontal\",\n ...sliderProps,\n ref: composedRefs,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateX(-50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromLeft ? \"from-left\" : \"from-right\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderVertical = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef(void 0);\n const isSlidingFromBottom = !inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || sliderRef.current.getBoundingClientRect();\n const input = [0, rect.height];\n const output = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromBottom ? \"bottom\" : \"top\",\n endEdge: isSlidingFromBottom ? \"top\" : \"bottom\",\n size: \"height\",\n direction: isSlidingFromBottom ? 1 : -1,\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n \"data-orientation\": \"vertical\",\n ...sliderProps,\n ref,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateY(50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromBottom ? \"from-bottom\" : \"from-top\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...sliderProps,\n ref: forwardedRef,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Home\") {\n onHomeKeyDown(event);\n event.preventDefault();\n } else if (event.key === \"End\") {\n onEndKeyDown(event);\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n event.preventDefault();\n }\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target;\n target.setPointerCapture(event.pointerId);\n event.preventDefault();\n if (context.thumbs.has(target)) {\n target.focus({ preventScroll: true, focusVisible: false });\n } else {\n onSlideStart(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })\n }\n );\n }\n);\nvar TRACK_NAME = \"SliderTrack\";\nvar SliderTrack = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-disabled\": context.disabled ? \"\" : void 0,\n \"data-orientation\": context.orientation,\n ...trackProps,\n ref: forwardedRef\n }\n );\n }\n);\nSliderTrack.displayName = TRACK_NAME;\nvar RANGE_NAME = \"SliderRange\";\nvar SliderRange = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map(\n (value) => convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...rangeProps,\n ref: composedRefs,\n style: {\n ...props.style,\n [orientation.startEdge]: offsetStart + \"%\",\n [orientation.endEdge]: offsetEnd + \"%\"\n }\n }\n );\n }\n);\nSliderRange.displayName = RANGE_NAME;\nvar THUMB_NAME = \"SliderThumb\";\nvar [SliderThumbContextProvider, useSliderThumbContext] = createSliderContext(THUMB_NAME);\nvar THUMB_PROVIDER_NAME = \"SliderThumbProvider\";\nfunction SliderThumbProvider(props) {\n const {\n __scopeSlider,\n name,\n children,\n // @ts-expect-error internal render prop\n internal_do_not_use_render\n } = props;\n const context = useSliderContext(THUMB_PROVIDER_NAME, __scopeSlider);\n const getItems = useCollection(__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const index = React.useMemo(\n () => thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1,\n [getItems, thumb]\n );\n const size = useSize(thumb);\n const isFormControl = thumb ? !!context.form || !!thumb.closest(\"form\") : true;\n const value = context.values[index];\n const resolvedName = name ?? (context.name ? context.name + (context.values.length > 1 ? \"[]\" : \"\") : void 0);\n const percent = value === void 0 ? 0 : convertValueToPercentage(value, context.min, context.max);\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n const thumbContext = {\n value,\n name: resolvedName,\n form: context.form,\n isFormControl,\n index,\n thumb,\n onThumbChange: setThumb,\n percent,\n size\n };\n return /* @__PURE__ */ jsx(SliderThumbContextProvider, { scope: __scopeSlider, ...thumbContext, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(thumbContext) : children });\n}\nSliderThumbProvider.displayName = THUMB_PROVIDER_NAME;\nvar THUMB_TRIGGER_NAME = \"SliderThumbTrigger\";\nvar SliderThumbTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...thumbProps } = props;\n const context = useSliderContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const { index, value, percent, size, onThumbChange } = useSliderThumbContext(\n THUMB_TRIGGER_NAME,\n __scopeSlider\n );\n const composedRefs = useComposedRefs(forwardedRef, onThumbChange);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction) : 0;\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n style: {\n transform: \"var(--radix-slider-thumb-transform)\",\n position: \"absolute\",\n [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`\n },\n children: /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeSlider, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n role: \"slider\",\n \"aria-label\": props[\"aria-label\"] || label,\n \"aria-valuemin\": context.min,\n \"aria-valuenow\": value,\n \"aria-valuemax\": context.max,\n \"aria-orientation\": context.orientation,\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n tabIndex: context.disabled ? void 0 : 0,\n ...thumbProps,\n ref: composedRefs,\n style: value === void 0 ? { display: \"none\" } : props.style,\n onFocus: composeEventHandlers(props.onFocus, () => {\n context.valueIndexToChangeRef.current = index;\n })\n }\n ) })\n }\n );\n }\n);\nSliderThumbTrigger.displayName = THUMB_TRIGGER_NAME;\nvar SliderThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, name, ...thumbProps } = props;\n return /* @__PURE__ */ jsx(\n SliderThumbProvider,\n {\n __scopeSlider,\n name,\n internal_do_not_use_render: ({ index, isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SliderThumbTrigger,\n {\n ...thumbProps,\n ref: forwardedRef,\n __scopeSlider\n }\n ),\n isFormControl ? /* @__PURE__ */ jsx(\n SliderBubbleInput,\n {\n __scopeSlider\n },\n index\n ) : null\n ] })\n }\n );\n }\n);\nSliderThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SliderBubbleInput\";\nvar SliderBubbleInput = React.forwardRef(\n ({ __scopeSlider, ...props }, forwardedRef) => {\n const { value, name, form } = useSliderThumbContext(BUBBLE_INPUT_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"value\");\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"input\", { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n style: { display: \"none\" },\n name,\n form,\n ...props,\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSliderBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getNextSortedValues(prevValues = [], nextValue, atIndex) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\nfunction convertValueToPercentage(value, min, max) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\nfunction getLabel(index, totalValues) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return [\"Minimum\", \"Maximum\"][index];\n } else {\n return void 0;\n }\n}\nfunction getClosestValueIndex(values, nextValue) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\nfunction getThumbInBoundsOffset(width, left, direction) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\nfunction getStepsBetweenValues(values) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\nfunction hasMinStepsBetweenValues(values, minStepsBetweenValues) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction getDecimalCount(value) {\n if (!Number.isFinite(value)) return 0;\n const str = value.toString();\n if (str.includes(\"e\")) {\n const [coefficient, exponent] = str.split(\"e\");\n const decimalPart2 = coefficient.split(\".\")[1] || \"\";\n const exponentNum = Number(exponent);\n return Math.max(0, decimalPart2.length - exponentNum);\n }\n const decimalPart = str.split(\".\")[1];\n return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValue(value, decimalCount) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\nfunction getNextStepValue(value, {\n min,\n step,\n direction,\n multiplier\n}) {\n const decimalCount = getDecimalCount(step);\n const stepsFromMin = (value - min) / step;\n const nearestSteps = Math.round(stepsFromMin);\n const isAligned = roundValue(nearestSteps * step + min, decimalCount) === roundValue(value, decimalCount);\n let nextSteps;\n if (isAligned) {\n nextSteps = nearestSteps + multiplier * direction;\n } else if (direction > 0) {\n nextSteps = Math.ceil(stepsFromMin);\n } else {\n nextSteps = Math.floor(stepsFromMin);\n }\n return roundValue(nextSteps * step + min, decimalCount);\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nexport {\n SliderRange as Range,\n Slider as Root,\n Slider,\n SliderRange,\n SliderThumb,\n SliderTrack,\n SliderThumb as Thumb,\n SliderTrack as Track,\n createSliderScope,\n SliderBubbleInput as unstable_BubbleInput,\n SliderBubbleInput as unstable_SliderBubbleInput,\n SliderThumbProvider as unstable_SliderThumbProvider,\n SliderThumbTrigger as unstable_SliderThumbTrigger,\n SliderThumbProvider as unstable_ThumbProvider,\n SliderThumbTrigger as unstable_ThumbTrigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSlider from '@radix-ui/react-slider';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Slider — single or range numeric input.\n *\n * Built on Radix Slider for keyboard arrow + home/end handling.\n */\nexport type SliderProps = ComponentPropsWithoutRef<typeof RxSlider.Root>;\n\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(function Slider(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSlider.Root\n ref={ref}\n className={cx('v8-slider', className)}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n width: '100%',\n height: 20,\n }}\n {...rest}\n >\n <RxSlider.Track\n style={{\n background: 'var(--surface-2)',\n position: 'relative',\n flexGrow: 1,\n borderRadius: 'var(--radius-pill)',\n height: 4,\n }}\n >\n <RxSlider.Range\n style={{\n position: 'absolute',\n background: 'var(--accent)',\n borderRadius: 'var(--radius-pill)',\n height: '100%',\n }}\n />\n </RxSlider.Track>\n {(Array.isArray(props.value ?? props.defaultValue)\n ? (props.value ?? props.defaultValue ?? [])\n : [props.value ?? props.defaultValue ?? 0]\n ).map((_, i) => (\n <RxSlider.Thumb\n key={i}\n aria-label={props['aria-label'] ?? `Thumb ${i + 1}`}\n style={{\n display: 'block',\n width: 14,\n height: 14,\n background: 'var(--fg)',\n border: '2px solid var(--accent)',\n borderRadius: 'var(--radius-pill)',\n cursor: 'grab',\n boxShadow: 'var(--shadow-1)',\n }}\n />\n ))}\n </RxSlider.Root>\n );\n});","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsSection — a titled, optionally-described section of the Settings\n * page.\n *\n * PLAN.md §Settings declares 16 sections; SettingsSection is the shell\n * they all use. The body is a free slot so each section composes its own\n * option rows (SettingsRow) and sub-sections.\n */\n\nexport interface SettingsSectionProps extends HTMLAttributes<HTMLElement> {\n id: string;\n title: string;\n /** One-sentence summary of what this section controls. */\n description?: string;\n /** Optional icon (lucide). */\n icon?: ReactNode;\n /** Section body — SettingsRow, sub-sections, etc. */\n children?: ReactNode;\n /** Right-aligned header slot (e.g. \"Restore defaults\" button). */\n headerActions?: ReactNode;\n}\n\nexport const SettingsSection = forwardRef<HTMLElement, SettingsSectionProps>(function SettingsSection(\n props,\n ref,\n) {\n const { id, title, description, icon, children, headerActions, className, ...rest } = props;\n return (\n <section\n ref={ref}\n id={id}\n aria-labelledby={`${id}-title`}\n className={cx('v8-settings-section', className)}\n style={{\n padding: 'var(--space-5) var(--space-6)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n }}\n {...rest}\n >\n <header\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 'var(--space-3)',\n marginBottom: 'var(--space-4)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 'var(--space-3)', minWidth: 0 }}>\n {icon !== undefined && (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n background: 'color-mix(in oklch, var(--accent) 14%, transparent)',\n color: 'var(--accent)',\n flexShrink: 0,\n }}\n >\n {icon}\n </span>\n )}\n <div style={{ minWidth: 0 }}>\n <h2\n id={`${id}-title`}\n style={{\n fontSize: 'var(--fs-15)',\n fontWeight: 600,\n color: 'var(--fg)',\n lineHeight: 'var(--lh-snug)',\n margin: 0,\n }}\n >\n {title}\n </h2>\n {description !== undefined && (\n <p\n style={{\n fontSize: 'var(--fs-13)',\n color: 'var(--fg-muted)',\n margin: '4px 0 0 0',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n {headerActions !== undefined && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-2)', flexShrink: 0 }}>\n {headerActions}\n </div>\n )}\n </header>\n <div className=\"v8-settings-section__body\">{children}</div>\n </section>\n );\n});","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsRow — one labelled option inside a SettingsSection.\n *\n * Three-column layout:\n * ┌─ label + description ──────────── control ─┐\n * The label column is required; the control slot\n * hosts the actual interactive (Switch, Select, Slider, custom button, etc.).\n */\n\nexport interface SettingsRowProps extends HTMLAttributes<HTMLDivElement> {\n id: string;\n /** The control label (left column). */\n label: ReactNode;\n /** Optional one-line description (left column, below label). */\n description?: ReactNode;\n /** Right column — the interactive control. */\n control: ReactNode;\n /** Mark the row as disabled (visual + aria). */\n disabled?: boolean;\n}\n\nexport const SettingsRow = forwardRef<HTMLDivElement, SettingsRowProps>(function SettingsRow(\n props,\n ref,\n) {\n const { id, label, description, control, disabled = false, className, ...rest } = props;\n // The label is announced via `aria-labelledby` rather than `<label\n // htmlFor>` because the control is generic — its DOM id is set by the\n // consumer (Switch, Select, custom input), and we'd otherwise need to\n // thread it through the props chain. `aria-labelledby` is the WAI-ARIA\n // sanctioned way to label a region without owning a native `<label>`.\n const labelId = `${id}-label`;\n return (\n <div\n ref={ref}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n className={cx('v8-settings-row', className)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 'var(--space-4)',\n padding: 'var(--space-3) 0',\n borderBottom: '1px solid var(--border)',\n opacity: disabled ? 0.5 : 1,\n }}\n {...rest}\n >\n <div id={labelId} style={{ flex: 1, minWidth: 0 }}>\n <span\n style={{\n display: 'block',\n fontSize: 'var(--fs-13)',\n fontWeight: 500,\n color: 'var(--fg)',\n cursor: disabled ? 'not-allowed' : 'default',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {label}\n </span>\n {description !== undefined && (\n <p\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n margin: '4px 0 0 0',\n lineHeight: 'var(--lh-snug)',\n }}\n >\n {description}\n </p>\n )}\n </div>\n <div\n role=\"group\"\n aria-labelledby={labelId}\n style={{ flexShrink: 0, alignSelf: 'center' }}\n >\n {control}\n </div>\n </div>\n );\n});"],"names":["SWITCH_NAME","createSwitchContext","createContextScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","props","__scopeSwitch","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","value","internal_do_not_use_render","checked","setChecked","useControllableState","control","setControl","React.useState","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","React.useRef","isFormControl","context","jsx","isFunction","TRIGGER_NAME","SwitchTrigger","React.forwardRef","onClick","switchProps","forwardedRef","composedRefs","useComposedRefs","initialCheckedStateRef","React.useEffect","associatedForm","reset","Primitive","getState","composeEventHandlers","event","prevChecked","Switch","jsxs","Fragment","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","usePrevious","controlSize","useSize","input","inputProto","bubbles","defaultCheckedRef","forwardRef","ref","className","rest","RxSwitch.Root","cx","RxSwitch.Thumb","PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","Collection","useCollection","createCollectionScope","createCollection","createSliderContext","SliderProvider","useSliderContext","Slider","min","max","step","orientation","minStepsBetweenThumbs","defaultValue","onValueChange","onValueCommit","inverted","sliderProps","thumbRefs","valueIndexToChangeRef","isKeyboardInteractionRef","SliderOrientation","SliderHorizontal","SliderVertical","values","setValues","value2","_a","valuesBeforeSlideStartRef","initialValuesRef","handleSlideStart","closestIndex","getClosestValueIndex","updateValues","handleSlideMove","handleSlideEnd","prevValue","atIndex","commit","decimalCount","getDecimalCount","snapToStep","roundValue","nextValue","clamp","prevValues","nextValues","getNextSortedValues","hasMinStepsBetweenValues","hasChanged","stepDirection","multiplier","getNextStepValue","SliderOrientationProvider","useSliderOrientationContext","dir","onSlideStart","onSlideMove","onSlideEnd","onStepKeyDown","slider","setSlider","rectRef","direction","useDirection","isDirectionLTR","isSlidingFromLeft","getValueFromPointer","pointerPosition","rect","linearScale","SliderImpl","isBackKey","sliderRef","isSlidingFromBottom","__scopeSlider","onHomeKeyDown","onEndKeyDown","target","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","SliderThumbContextProvider","useSliderThumbContext","THUMB_PROVIDER_NAME","SliderThumbProvider","getItems","thumb","setThumb","index","React.useMemo","item","size","resolvedName","percent","thumbContext","THUMB_TRIGGER_NAME","SliderThumbTrigger","onThumbChange","label","getLabel","orientationSize","thumbInBoundsOffset","getThumbInBoundsOffset","SliderThumb","SliderBubbleInput","setValue","a","b","percentage","totalValues","distances","closestDistance","width","left","halfWidth","offset","getStepsBetweenValues","minStepsBetweenValues","stepsBetweenValues","output","ratio","str","coefficient","exponent","decimalPart2","exponentNum","decimalPart","rounder","stepsFromMin","nearestSteps","isAligned","nextSteps","RxSlider.Root","RxSlider.Track","RxSlider.Range","_","i","RxSlider.Thumb","SettingsSection","id","title","description","icon","headerActions","SettingsRow","labelId"],"mappings":"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","x_google_ignoreList":[0,2]}
@@ -0,0 +1,43 @@
1
+ import{j as e,r as k}from"./cmdk-BLWIhKrV.js";import{b as m,c as me,u as je,h as fe,i as F,C as Z,L as Q,A as X,j as ee,B as te,S as M,I as d,f as ve,F as ke,a as be}from"./main-LxX9zTRk.js";import{G as Ce,B as v}from"./Button-RmN1RKhE.js";import{S as n,a as i,b as D,c as s}from"./SettingsRow-CppSgkT_.js";import{I as R}from"./index-AL3OLUfz.js";import{T as we}from"./Textarea-Dk97nmjO.js";import{B as _}from"./Badge-BH4C3aUF.js";import{u as T}from"./useFetch-CoVWwbml.js";import{T as ie,R as Se}from"./terminal-B2sSd5t7.js";import{W as ae}from"./wrench-B7go551L.js";import{B as se}from"./brain-BajPVibR.js";import{P as ze}from"./plus-CVH1JB04.js";import{T as Ae}from"./trash-2-JtYRQ79q.js";/**
2
+ * @license lucide-react v0.460.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const oe=m("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/**
7
+ * @license lucide-react v0.460.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const ne=m("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/**
12
+ * @license lucide-react v0.460.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const le=m("Keyboard",[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]]);/**
17
+ * @license lucide-react v0.460.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const re=m("Palette",[["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z",key:"12rzf8"}]]);/**
22
+ * @license lucide-react v0.460.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */const de=m("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/**
27
+ * @license lucide-react v0.460.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */const ce=m("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
32
+ * @license lucide-react v0.460.0 - ISC
33
+ *
34
+ * This source code is licensed under the ISC license.
35
+ * See the LICENSE file in the root directory of this source tree.
36
+ */const he=m("SlidersVertical",[["line",{x1:"4",x2:"4",y1:"21",y2:"14",key:"1p332r"}],["line",{x1:"4",x2:"4",y1:"10",y2:"3",key:"gb41h5"}],["line",{x1:"12",x2:"12",y1:"21",y2:"12",key:"hf2csr"}],["line",{x1:"12",x2:"12",y1:"8",y2:"3",key:"1kfi7u"}],["line",{x1:"20",x2:"20",y1:"21",y2:"16",key:"1lhrwl"}],["line",{x1:"20",x2:"20",y1:"12",y2:"3",key:"16vvfq"}],["line",{x1:"2",x2:"6",y1:"14",y2:"14",key:"1uebub"}],["line",{x1:"10",x2:"14",y1:"8",y2:"8",key:"1yglbp"}],["line",{x1:"18",x2:"22",y1:"16",y2:"16",key:"1jxqpz"}]]);/**
37
+ * @license lucide-react v0.460.0 - ISC
38
+ *
39
+ * This source code is licensed under the ISC license.
40
+ * See the LICENSE file in the root directory of this source tree.
41
+ */const ue=m("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);function Me(j){const{items:h,activeId:u,onSelect:p,className:a}=j;return e.jsxs("nav",{"aria-label":"Settings sections",className:me("v8-settings-nav",a),children:[e.jsx("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2},children:h.map(x=>{const y=u===x.id;return e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>p==null?void 0:p(x.id),"aria-current":y?"true":void 0,style:{display:"flex",alignItems:"center",gap:"var(--space-2)",width:"100%",padding:"var(--space-2) var(--space-3)",background:y?"var(--surface-2)":"transparent",border:0,borderRadius:"var(--radius-sm)",color:y?"var(--fg)":"var(--fg-muted)",font:"inherit",fontSize:"var(--fs-13)",fontWeight:y?500:400,cursor:"pointer",textAlign:"left"},children:[x.icon!==void 0&&e.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",color:y?"var(--accent)":"var(--fg-subtle)",flexShrink:0},children:x.icon}),e.jsx("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:x.title})]})},x.id)})}),e.jsx("style",{children:`
42
+ .v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }
43
+ `})]})}const $=[{id:"general",title:"General",icon:F},{id:"theme",title:"Theme",icon:re},{id:"density",title:"Density",icon:he},{id:"density-rules",title:"Density rules",icon:ue},{id:"palette",title:"Command palette",icon:ie},{id:"keyboard",title:"Keyboard",icon:le},{id:"notifications",title:"Notifications",icon:oe},{id:"storage",title:"Storage",icon:ne},{id:"plugins",title:"Plugins",icon:de},{id:"mcps",title:"MCP servers",icon:Z},{id:"skills",title:"Skills",icon:Q},{id:"hooks",title:"Hooks",icon:ae},{id:"activity",title:"Activity",icon:X},{id:"memory",title:"Memory",icon:se},{id:"task-defaults",title:"Task defaults",icon:ee},{id:"agent-defaults",title:"Agent defaults",icon:te},{id:"privacy",title:"Privacy",icon:ce},{id:"advanced",title:"Advanced",icon:F}],De={workspaceName:"Bizar Harness",defaultView:"overview",themeAccent:"#5b8def",densityBaseFont:13,tasksCompact:!1,memoryCompact:!0,paletteHistory:!0,paletteFuzzy:!0,notifyAgentFinished:!0,notifyCiFailed:!0,notifyTokenBudget:!0,notifyDailyDigest:!1,activityRetentionDays:30,memoryAutoCommit:!0,memoryScopeDefault:"all",defaultTaskPriority:"medium",defaultTaskColumn:"queued",defaultAgentModel:"claude-sonnet-4-5",defaultAgentMaxMistakes:10,analytics:!0,crashReports:!0,piiMode:"redact",reducedMotion:!1,debugOverlay:!1},Re={height:28,padding:"0 var(--space-2)",borderRadius:"var(--radius-sm)",border:"1px solid var(--border)",background:"var(--surface-0)",color:"var(--fg)",fontFamily:"var(--font-sans)",fontSize:"var(--fs-12)",cursor:"pointer",outline:"none"};function c({value:j,defaultValue:h,onChange:u,children:p}){return e.jsx("select",{value:j,defaultValue:h,onChange:a=>u==null?void 0:u(a.target.value),style:Re,children:p})}function A({loading:j,value:h}){return j?e.jsx(be,{style:{width:32,height:16}}):e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:h??0})}function Ge(){var H,E,L,N,O,W,q,G,U,K,Y;const[j,h]=k.useState("general"),u=je(),p=fe(),[a,x]=k.useState(De),[y,pe]=k.useState(null),[P,I]=k.useState(null),b=T("/api/skills?kind=skills"),C=T("/api/skills?kind=mcps"),V=T("/api/skills?kind=hooks"),w=T("/api/agents"),o=(t,l)=>{x(g=>({...g,[t]:l})),r(t,l)},r=async(t,l)=>{try{await ve("/api/settings",{method:"PATCH",body:{[t]:l}}),pe(Date.now()),I(null)}catch(g){I((g instanceof ke,g.message))}},xe=$.map(t=>({id:t.id,title:t.title,icon:e.jsx(t.icon,{size:14,"aria-hidden":"true"})})),ye=t=>{h(t),requestAnimationFrame(()=>{var l;(l=document.getElementById(t))==null||l.scrollIntoView({behavior:"smooth",block:"start"})})},ge=k.useRef(null);return k.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const t=$.map(f=>document.getElementById(f.id)).filter(f=>f!==null);if(t.length===0)return;const l=new Map,g=new IntersectionObserver(f=>{for(const S of f){const z=S.target.id;S.isIntersecting?l.set(z,S.intersectionRatio):l.delete(z)}if(l.size===0)return;let B,J=-1;for(const[S,z]of l)z>J&&(J=z,B=S);B&&h(B)},{rootMargin:"-30% 0px -50% 0px",threshold:[0,.25,.5,.75,1]});for(const f of t)g.observe(f);return()=>g.disconnect()},[]),e.jsx("div",{ref:ge,children:e.jsxs(Ce,{cols:3,gap:5,children:[e.jsx("aside",{style:{position:"sticky",top:0,alignSelf:"start"},children:e.jsx(Me,{items:xe,activeId:j,onSelect:ye})}),e.jsxs(M,{gap:5,style:{gridColumn:"span 2"},children:[P!==null&&e.jsx("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)"},children:P}),y!==null&&e.jsxs(d,{align:"center",justify:"flex-end",gap:2,style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:[e.jsx("span",{children:"Settings saved"}),e.jsx("span",{style:{fontFamily:"var(--font-mono)"},children:new Date(y).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})})]}),e.jsxs(n,{id:"general",title:"General",description:"Workspace identity + default landing page.",icon:e.jsx(F,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"workspace-name",label:"Workspace name",description:"Shown in the topbar and command palette.",control:e.jsx(R,{value:a.workspaceName,onChange:t=>o("workspaceName",t.target.value),style:{width:240}})}),e.jsx(i,{id:"default-view",label:"Default view on launch",control:e.jsxs(c,{value:a.defaultView,onChange:t=>o("defaultView",t),children:[e.jsx("option",{value:"overview",children:"Overview"}),e.jsx("option",{value:"tasks",children:"Tasks"}),e.jsx("option",{value:"goals",children:"Goals"}),e.jsx("option",{value:"agents",children:"Agents"}),e.jsx("option",{value:"activity",children:"Activity"}),e.jsx("option",{value:"settings",children:"Settings"})]})})]}),e.jsxs(n,{id:"theme",title:"Theme",description:"Color mode + accent + typography.",icon:e.jsx(re,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"theme-mode",label:"Color mode",control:e.jsxs(c,{value:u.mode,onChange:t=>u.setMode(t),children:[e.jsx("option",{value:"system",children:"System"}),e.jsx("option",{value:"light",children:"Light"}),e.jsx("option",{value:"dark",children:"Dark"})]})}),e.jsx(i,{id:"theme-accent",label:"Accent color",description:"Personalize the leading-edge accent stripe.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx("input",{type:"color",value:a.themeAccent,onChange:t=>o("themeAccent",t.target.value),style:{width:40,height:28,border:"1px solid var(--border)",borderRadius:"var(--radius-sm)",background:"transparent",cursor:"pointer"}}),e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:a.themeAccent})]})}),e.jsx(i,{id:"theme-font",label:"Font family",description:"Body type. System fonts reduce render time.",control:e.jsxs(c,{defaultValue:"inter",children:[e.jsx("option",{value:"inter",children:"Inter"}),e.jsx("option",{value:"system",children:"System UI"}),e.jsx("option",{value:"jetbrains",children:"JetBrains Mono"})]})}),e.jsx(i,{id:"theme-radius",label:"Border radius",description:"0 = sharp; 16 = rounded.",control:e.jsx(D,{defaultValue:[8],min:0,max:16,step:1})})]}),e.jsxs(n,{id:"density",title:"Density",description:"Comfortable by default. Compact fits more on screen.",icon:e.jsx(he,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"density-mode",label:"Density",control:e.jsxs(c,{value:p.density,onChange:t=>p.setDensity(t),children:[e.jsx("option",{value:"comfortable",children:"Comfortable"}),e.jsx("option",{value:"compact",children:"Compact"})]})}),e.jsx(i,{id:"density-base-font",label:"Base font size",description:"Adjusts the `--fs-13` token globally.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx(D,{value:[a.densityBaseFont],onValueChange:t=>o("densityBaseFont",t[0]??13),min:11,max:16,step:1}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.densityBaseFont,"px"]})]})})]}),e.jsxs(n,{id:"density-rules",title:"Density rules",description:"Override density per surface.",icon:e.jsx(ue,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"tasks-compact",label:"Tasks page — compact by default",control:e.jsx(s,{checked:a.tasksCompact,onCheckedChange:t=>o("tasksCompact",t)})}),e.jsx(i,{id:"memory-compact",label:"Memory page — compact by default",control:e.jsx(s,{checked:a.memoryCompact,onCheckedChange:t=>o("memoryCompact",t)})}),e.jsx(i,{id:"activity-compact",label:"Activity page — compact by default",control:e.jsx(s,{onCheckedChange:t=>r("activityCompact",t)})})]}),e.jsxs(n,{id:"palette",title:"Command palette",description:"How the ⌘K palette behaves.",icon:e.jsx(ie,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"palette-history",label:"Show recent commands",control:e.jsx(s,{checked:a.paletteHistory,onCheckedChange:t=>o("paletteHistory",t)})}),e.jsx(i,{id:"palette-fuzzy",label:"Fuzzy match",control:e.jsx(s,{checked:a.paletteFuzzy,onCheckedChange:t=>o("paletteFuzzy",t)})}),e.jsx(i,{id:"palette-navigate",label:"Show navigation group",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("paletteNavigate",t)})}),e.jsx(i,{id:"palette-spawn",label:"Show agent-spawn group",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("paletteSpawn",t)})}),e.jsx(i,{id:"palette-scope",label:"Default scope",description:"Where palette actions apply when no context.",control:e.jsxs(c,{defaultValue:"project",children:[e.jsx("option",{value:"project",children:"Active project"}),e.jsx("option",{value:"global",children:"Global"})]})})]}),e.jsxs(n,{id:"keyboard",title:"Keyboard",description:"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).",icon:e.jsx(le,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"kb-palette",label:"Open command palette",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘K"})}),e.jsx(i,{id:"kb-search",label:"Search tasks",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘/"})}),e.jsx(i,{id:"kb-newtask",label:"New task",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘N"})}),e.jsx(i,{id:"kb-toggle-theme",label:"Toggle theme",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘⇧L"})}),e.jsx(i,{id:"kb-toggle-density",label:"Toggle density",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘⇧D"})}),e.jsx(i,{id:"kb-reload",label:"Reload window",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"⌘R"})})]}),e.jsxs(n,{id:"notifications",title:"Notifications",description:"When the harness should ping you.",icon:e.jsx(oe,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"n-agent-finished",label:"Agent run finished",control:e.jsx(s,{checked:a.notifyAgentFinished,onCheckedChange:t=>o("notifyAgentFinished",t)})}),e.jsx(i,{id:"n-task-moved",label:"Task moved between columns",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("notifyTaskMoved",t)})}),e.jsx(i,{id:"n-ci-failed",label:"CI failed",control:e.jsx(s,{checked:a.notifyCiFailed,onCheckedChange:t=>o("notifyCiFailed",t)})}),e.jsx(i,{id:"n-token-budget",label:"Token budget 80%",control:e.jsx(s,{checked:a.notifyTokenBudget,onCheckedChange:t=>o("notifyTokenBudget",t)})}),e.jsx(i,{id:"n-daily-digest",label:"Daily digest at 09:00",control:e.jsx(s,{checked:a.notifyDailyDigest,onCheckedChange:t=>o("notifyDailyDigest",t)})}),e.jsx(i,{id:"n-channel",label:"Channel",description:"Where notifications render.",control:e.jsxs(c,{defaultValue:"toast",children:[e.jsx("option",{value:"toast",children:"In-app toast"}),e.jsx("option",{value:"system",children:"OS notification"}),e.jsx("option",{value:"both",children:"Both"}),e.jsx("option",{value:"silent",children:"Silent"})]})})]}),e.jsxs(n,{id:"storage",title:"Storage",description:"Where local data lives.",icon:e.jsx(ne,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"store-path",label:"Local store path",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"~/.bizar/store.db"})}),e.jsx(i,{id:"cache-path",label:"Cache directory",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"~/.cache/bizar"})}),e.jsx(i,{id:"sessions-path",label:"Claude Code sessions",control:e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"~/.claude/sessions"})}),e.jsx(i,{id:"cache-size",label:"Cache size",control:e.jsx(A,{loading:!1,value:42})}),e.jsx(i,{id:"store-gc",label:"Garbage collect",description:"Prune empty sessions and orphaned tasks.",control:e.jsx(v,{variant:"secondary",children:"Run GC"})}),e.jsx(i,{id:"store-clear",label:"Clear local cache",description:"Destructive. Wipes the activity log and snapshots.",control:e.jsx(v,{variant:"danger",children:"Clear…"})})]}),e.jsxs(n,{id:"plugins",title:"Plugins",description:"Plugin registrations under `.claude/`.",icon:e.jsx(de,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"plugins-count",label:"Loaded plugins",control:e.jsx(A,{loading:w.loading,value:((E=(H=w.data)==null?void 0:H.agents)==null?void 0:E.length)??0})}),e.jsx(i,{id:"plugins-bizar",label:"Bizar",description:"Core plugin. Required — disable with care.",control:e.jsx(s,{defaultChecked:!0,disabled:!0})}),Array.isArray((L=w.data)==null?void 0:L.agents)&&w.data.agents.length>0&&e.jsx(i,{id:"plugins-list",label:"Active agents",control:e.jsx(M,{gap:1,style:{maxHeight:200,overflowY:"auto",width:360},children:w.data.agents.map(t=>e.jsxs(d,{align:"center",justify:"space-between",style:{padding:"4px 8px",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(_,{tone:"success",children:"active"})]},t.name))})})]}),e.jsxs(n,{id:"mcps",title:"MCP servers",description:"Model Context Protocol servers.",icon:e.jsx(Z,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"mcps-count",label:"Registered MCPs",control:e.jsx(A,{loading:C.loading,value:((O=(N=C.data)==null?void 0:N.skills)==null?void 0:O.length)??0})}),Array.isArray((W=C.data)==null?void 0:W.skills)&&C.data.skills.length>0&&e.jsx(i,{id:"mcps-list",label:"Servers",control:e.jsx(M,{gap:1,style:{maxHeight:220,overflowY:"auto",width:360},children:C.data.skills.map(t=>e.jsxs(d,{align:"center",justify:"space-between",style:{padding:"4px 8px",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(s,{defaultChecked:!0,onCheckedChange:l=>void r(`mcp:${t.name}`,l)})]},t.name))})})]}),e.jsxs(n,{id:"skills",title:"Skills",description:"Bizar skill packs.",icon:e.jsx(Q,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"skills-count",label:"Loaded skills",control:e.jsx(A,{loading:b.loading,value:((G=(q=b.data)==null?void 0:q.skills)==null?void 0:G.length)??0})}),Array.isArray((U=b.data)==null?void 0:U.skills)&&b.data.skills.length>0&&e.jsx(i,{id:"skills-list",label:"Skill packs",control:e.jsx(M,{gap:1,style:{maxHeight:260,overflowY:"auto",width:360},children:b.data.skills.map(t=>e.jsxs(d,{align:"center",justify:"space-between",style:{padding:"4px 8px",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsxs(d,{align:"center",gap:2,children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(_,{tone:"neutral",children:t.source})]}),e.jsx(s,{defaultChecked:!0,onCheckedChange:l=>void r(`skill:${t.name}`,l)})]},t.name))})})]}),e.jsxs(n,{id:"hooks",title:"Hooks",description:"Executable hook scripts.",icon:e.jsx(ae,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"hooks-count",label:"Registered hooks",control:e.jsx(A,{loading:V.loading,value:((Y=(K=V.data)==null?void 0:K.skills)==null?void 0:Y.length)??0})}),e.jsx(i,{id:"hooks-pretool",label:"PreToolUse",description:"Block writes to .env / secrets / node_modules.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-posttool",label:"PostToolUse",description:"Log tool latency to ~/.config/bizar/hook-logs/.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-taskstart",label:"TaskStart",description:"Prime AI with project context.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-taskresume",label:"TaskResume",description:"Re-read state + check git log.",control:e.jsx(s,{defaultChecked:!0})}),e.jsx(i,{id:"hooks-prompt",label:"UserPromptSubmit",description:"Tag prompts for routing.",control:e.jsx(s,{defaultChecked:!0})})]}),e.jsxs(n,{id:"activity",title:"Activity",description:"Stream retention + export.",icon:e.jsx(X,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"activity-retention",label:"Retain last",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx(D,{value:[a.activityRetentionDays],onValueChange:t=>o("activityRetentionDays",t[0]??30),min:7,max:365,step:1}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.activityRetentionDays," days"]})]})}),e.jsx(i,{id:"activity-hide",label:"Hide noisy event types",description:"Comma-separated kinds. E.g. 'heartbeat,ping'.",control:e.jsx(R,{placeholder:"heartbeat, ping, system",style:{width:280}})}),e.jsx(i,{id:"activity-export",label:"Export",description:"Download the full activity log as NDJSON.",control:e.jsx(v,{variant:"secondary",children:"Export…"})})]}),e.jsxs(n,{id:"memory",title:"Memory",description:"Cross-session memo behavior.",icon:e.jsx(se,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"memory-auto-commit",label:"Auto-commit project memos",control:e.jsx(s,{checked:a.memoryAutoCommit,onCheckedChange:t=>o("memoryAutoCommit",t)})}),e.jsx(i,{id:"memory-scope",label:"Default scope filter",control:e.jsxs(c,{value:a.memoryScopeDefault,onChange:t=>o("memoryScopeDefault",t),children:[e.jsx("option",{value:"project",children:"Project"}),e.jsx("option",{value:"global",children:"Global"}),e.jsx("option",{value:"all",children:"All"})]})}),e.jsx(i,{id:"memory-index",label:"Re-index vault",description:"Rebuild search index. May take a moment.",control:e.jsx(v,{variant:"secondary",children:"Re-index"})})]}),e.jsxs(n,{id:"task-defaults",title:"Task defaults",description:"Defaults applied to new tasks.",icon:e.jsx(ee,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"task-priority",label:"Default priority",control:e.jsxs(c,{value:a.defaultTaskPriority,onChange:t=>o("defaultTaskPriority",t),children:[e.jsx("option",{value:"low",children:"Low"}),e.jsx("option",{value:"medium",children:"Medium"}),e.jsx("option",{value:"high",children:"High"}),e.jsx("option",{value:"urgent",children:"Urgent"})]})}),e.jsx(i,{id:"task-column",label:"Default column",control:e.jsxs(c,{value:a.defaultTaskColumn,onChange:t=>o("defaultTaskColumn",t),children:[e.jsx("option",{value:"queued",children:"Backlog"}),e.jsx("option",{value:"doing",children:"In progress"}),e.jsx("option",{value:"blocked",children:"In review"}),e.jsx("option",{value:"done",children:"Done"})]})}),e.jsx(i,{id:"task-assignee",label:"Default assignee",description:"Auto-assigns new tasks to this agent (empty = unassigned).",control:e.jsx(R,{placeholder:"odin",style:{width:240}})})]}),e.jsxs(n,{id:"agent-defaults",title:"Agent defaults",description:"Defaults applied when spawning agents.",icon:e.jsx(te,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"agent-model",label:"Default model",control:e.jsx(R,{value:a.defaultAgentModel,onChange:t=>o("defaultAgentModel",t.target.value),style:{width:240}})}),e.jsx(i,{id:"agent-mistakes",label:"Max consecutive mistakes",description:"Higher = more forgiving. Default 10.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsx(D,{value:[a.defaultAgentMaxMistakes],onValueChange:t=>o("defaultAgentMaxMistakes",t[0]??10),min:3,max:20,step:1}),e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:a.defaultAgentMaxMistakes})]})}),e.jsx(i,{id:"agent-bg",label:"Spawn as background by default",control:e.jsx(s,{onCheckedChange:t=>r("agentBackgroundDefault",t)})}),e.jsx(i,{id:"agent-worktree",label:"Always create a worktree",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>r("agentWorktree",t)})}),e.jsx(i,{id:"agent-system-prompt",label:"Extra system prompt",description:"Appended to every agent's system prompt.",control:e.jsx(we,{rows:3,placeholder:"You are a careful, methodical engineer…"})})]}),e.jsxs(n,{id:"privacy",title:"Privacy",description:"What the harness sends and stores.",icon:e.jsx(ce,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"privacy-analytics",label:"Anonymous analytics",control:e.jsx(s,{checked:a.analytics,onCheckedChange:t=>o("analytics",t)})}),e.jsx(i,{id:"privacy-crash",label:"Crash reports",control:e.jsx(s,{checked:a.crashReports,onCheckedChange:t=>o("crashReports",t)})}),e.jsx(i,{id:"privacy-pii",label:"PII handling",description:"How personal data is treated before persistence.",control:e.jsxs(c,{value:a.piiMode,onChange:t=>o("piiMode",t),children:[e.jsx("option",{value:"off",children:"Off"}),e.jsx("option",{value:"redact",children:"Redact"}),e.jsx("option",{value:"pseudonymize",children:"Pseudonymize"}),e.jsx("option",{value:"block",children:"Block"})]})}),e.jsx(i,{id:"privacy-telemetry",label:"Send token usage telemetry",control:e.jsx(s,{onCheckedChange:t=>r("telemetryTokens",t)})})]}),e.jsxs(n,{id:"advanced",title:"Advanced",description:"Power-user toggles. Touch with care.",icon:e.jsx(F,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"advanced-reduced-motion",label:"Reduce motion",control:e.jsx(s,{checked:a.reducedMotion,onCheckedChange:t=>o("reducedMotion",t)})}),e.jsx(i,{id:"advanced-debug",label:"Debug overlay",description:"Show agent + tool call traces in the topbar.",control:e.jsx(s,{checked:a.debugOverlay,onCheckedChange:t=>o("debugOverlay",t)})}),e.jsx(i,{id:"advanced-restart",label:"Restart dashboard backend",description:"Stop and relaunch the local server. Unsaved tasks are safe on disk.",control:e.jsxs(d,{align:"center",gap:2,children:[e.jsxs(v,{variant:"danger",children:[e.jsx(Se,{size:12,"aria-hidden":!0})," Restart…"]}),e.jsxs(v,{variant:"ghost",children:[e.jsx(ze,{size:12,"aria-hidden":!0})," Rebuild"]})]})}),e.jsx(i,{id:"advanced-logs",label:"Open logs folder",control:e.jsxs(v,{variant:"secondary",children:[e.jsx(Ae,{size:12,"aria-hidden":!0})," Purge logs"]})})]})]})]})})}export{Ge as SettingsView};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsView-DUc2meHV.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/bell.js","../../../node_modules/lucide-react/dist/esm/icons/database.js","../../../node_modules/lucide-react/dist/esm/icons/keyboard.js","../../../node_modules/lucide-react/dist/esm/icons/palette.js","../../../node_modules/lucide-react/dist/esm/icons/plug.js","../../../node_modules/lucide-react/dist/esm/icons/shield-check.js","../../../node_modules/lucide-react/dist/esm/icons/sliders-vertical.js","../../../node_modules/lucide-react/dist/esm/icons/sparkles.js","../../src/web/v8/ui/settings/SettingsNav.tsx","../../src/web/v8/views/Settings/SettingsView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Bell = createLucideIcon(\"Bell\", [\n [\"path\", { d: \"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\", key: \"1qo2s2\" }],\n [\"path\", { d: \"M10.3 21a1.94 1.94 0 0 0 3.4 0\", key: \"qgo35s\" }]\n]);\n\nexport { Bell as default };\n//# sourceMappingURL=bell.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Database = createLucideIcon(\"Database\", [\n [\"ellipse\", { cx: \"12\", cy: \"5\", rx: \"9\", ry: \"3\", key: \"msslwz\" }],\n [\"path\", { d: \"M3 5V19A9 3 0 0 0 21 19V5\", key: \"1wlel7\" }],\n [\"path\", { d: \"M3 12A9 3 0 0 0 21 12\", key: \"mv7ke4\" }]\n]);\n\nexport { Database as default };\n//# sourceMappingURL=database.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Keyboard = createLucideIcon(\"Keyboard\", [\n [\"path\", { d: \"M10 8h.01\", key: \"1r9ogq\" }],\n [\"path\", { d: \"M12 12h.01\", key: \"1mp3jc\" }],\n [\"path\", { d: \"M14 8h.01\", key: \"1primd\" }],\n [\"path\", { d: \"M16 12h.01\", key: \"1l6xoz\" }],\n [\"path\", { d: \"M18 8h.01\", key: \"emo2bl\" }],\n [\"path\", { d: \"M6 8h.01\", key: \"x9i8wu\" }],\n [\"path\", { d: \"M7 16h10\", key: \"wp8him\" }],\n [\"path\", { d: \"M8 12h.01\", key: \"czm47f\" }],\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }]\n]);\n\nexport { Keyboard as default };\n//# sourceMappingURL=keyboard.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Palette = createLucideIcon(\"Palette\", [\n [\"circle\", { cx: \"13.5\", cy: \"6.5\", r: \".5\", fill: \"currentColor\", key: \"1okk4w\" }],\n [\"circle\", { cx: \"17.5\", cy: \"10.5\", r: \".5\", fill: \"currentColor\", key: \"f64h9f\" }],\n [\"circle\", { cx: \"8.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"fotxhn\" }],\n [\"circle\", { cx: \"6.5\", cy: \"12.5\", r: \".5\", fill: \"currentColor\", key: \"qy21gx\" }],\n [\n \"path\",\n {\n d: \"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z\",\n key: \"12rzf8\"\n }\n ]\n]);\n\nexport { Palette as default };\n//# sourceMappingURL=palette.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Plug = createLucideIcon(\"Plug\", [\n [\"path\", { d: \"M12 22v-5\", key: \"1ega77\" }],\n [\"path\", { d: \"M9 8V2\", key: \"14iosj\" }],\n [\"path\", { d: \"M15 8V2\", key: \"18g5xt\" }],\n [\"path\", { d: \"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\", key: \"osxo6l\" }]\n]);\n\nexport { Plug as default };\n//# sourceMappingURL=plug.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldCheck = createLucideIcon(\"ShieldCheck\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SlidersVertical = createLucideIcon(\"SlidersVertical\", [\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"21\", y2: \"14\", key: \"1p332r\" }],\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"10\", y2: \"3\", key: \"gb41h5\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"21\", y2: \"12\", key: \"hf2csr\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"3\", key: \"1kfi7u\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"21\", y2: \"16\", key: \"1lhrwl\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"12\", y2: \"3\", key: \"16vvfq\" }],\n [\"line\", { x1: \"2\", x2: \"6\", y1: \"14\", y2: \"14\", key: \"1uebub\" }],\n [\"line\", { x1: \"10\", x2: \"14\", y1: \"8\", y2: \"8\", key: \"1yglbp\" }],\n [\"line\", { x1: \"18\", x2: \"22\", y1: \"16\", y2: \"16\", key: \"1jxqpz\" }]\n]);\n\nexport { SlidersVertical as default };\n//# sourceMappingURL=sliders-vertical.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Sparkles = createLucideIcon(\"Sparkles\", [\n [\n \"path\",\n {\n d: \"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\",\n key: \"4pj2yx\"\n }\n ],\n [\"path\", { d: \"M20 3v4\", key: \"1olli1\" }],\n [\"path\", { d: \"M22 5h-4\", key: \"1gvqau\" }],\n [\"path\", { d: \"M4 17v2\", key: \"vumght\" }],\n [\"path\", { d: \"M5 18H3\", key: \"zchphs\" }]\n]);\n\nexport { Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","import { type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsNav — left rail inside the Settings page.\n *\n * Lists each section so the user can jump (or scroll) to it. The active\n * section is highlighted. The nav is a vertical list with section ids\n * as the anchor target; no JS router needed.\n */\n\nexport interface SettingsNavItem {\n id: string;\n title: string;\n icon?: ReactNode;\n}\n\nexport interface SettingsNavProps {\n items: readonly SettingsNavItem[];\n /** The id of the currently-visible section. */\n activeId?: string;\n /** Click handler — usually `() => document.getElementById(id)?.scrollIntoView()`. */\n onSelect?: (id: string) => void;\n className?: string;\n}\n\nexport function SettingsNav(props: SettingsNavProps) {\n const { items, activeId, onSelect, className } = props;\n return (\n <nav aria-label=\"Settings sections\" className={cx('v8-settings-nav', className)}>\n <ul\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n }}\n >\n {items.map((item) => {\n const isActive = activeId === item.id;\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect?.(item.id)}\n aria-current={isActive ? 'true' : undefined}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n width: '100%',\n padding: 'var(--space-2) var(--space-3)',\n background: isActive ? 'var(--surface-2)' : 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: isActive ? 'var(--fg)' : 'var(--fg-muted)',\n font: 'inherit',\n fontSize: 'var(--fs-13)',\n fontWeight: isActive ? 500 : 400,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n {item.icon !== undefined && (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n color: isActive ? 'var(--accent)' : 'var(--fg-subtle)',\n flexShrink: 0,\n }}\n >\n {item.icon}\n </span>\n )}\n <span style={{ minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {item.title}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <style>{`\n .v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }\n `}</style>\n </nav>\n );\n}","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport {\n Palette,\n Keyboard,\n Bell,\n Database,\n Plug,\n Library as LibraryIcon,\n Wrench,\n Activity,\n Brain,\n ShieldCheck,\n Sliders,\n Sparkles,\n Terminal,\n Settings as SettingsIcon,\n Cpu,\n Bot,\n CheckSquare,\n Plus,\n Trash2,\n RotateCw,\n type LucideIcon,\n} from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Grid } from '../../ui/primitives/Grid.js';\nimport { Switch } from '../../ui/controls/Switch.js';\nimport { Slider } from '../../ui/controls/Slider.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { Textarea } from '../../ui/controls/Textarea.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { SettingsSection } from '../../ui/settings/SettingsSection.js';\nimport { SettingsRow } from '../../ui/settings/SettingsRow.js';\nimport { SettingsNav, type SettingsNavItem } from '../../ui/settings/SettingsNav.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { useTheme } from '../../ui/theme/useTheme.js';\nimport { useDensity } from '../../ui/theme/useDensity.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\n\n/**\n * SettingsView — Sprint S15 expansion. 19 sections (up from 16) with\n * real controls throughout. Every Switch / Select / Slider / Input is\n * either:\n * - live-bound to a Provider (Theme / Density),\n * - persisted via PATCH /api/settings (everything else), or\n * - backed by a small per-section sub-endpoint when present.\n *\n * Sections:\n * 1. General workspace identity + default view\n * 2. Theme color mode + accent + font + radius\n * 3. Density comfortable/compact + base font\n * 4. Density rules per-surface overrides\n * 5. Command palette behaviour + history + fuzzy match + nav\n * 6. Keyboard hotkeys (read-only display + rebinds via /kb)\n * 7. Notifications agent / task / CI / budget / daily digest\n * 8. Storage paths + cache sizes + GC button\n * 9. Plugins mods list with enable toggles\n * 10. MCP servers list + status + click for detail\n * 11. Skills list with enable toggles\n * 12. Hooks list with enable toggles\n * 13. Activity retention + hide list + export\n * 14. Memory scope + auto-commit + search defaults\n * 15. Task defaults default priority / column / assignee\n * 16. Agent defaults default model + spawn flags + max mistakes\n * 17. Privacy telemetry + PII + crash reports\n * 18. Advanced debug overlay + restart server + max mistakes\n */\n\ntype Section = { id: string; title: string; icon: LucideIcon };\n\nconst SECTIONS: Section[] = [\n { id: 'general', title: 'General', icon: SettingsIcon },\n { id: 'theme', title: 'Theme', icon: Palette },\n { id: 'density', title: 'Density', icon: Sliders },\n { id: 'density-rules', title: 'Density rules', icon: Sparkles },\n { id: 'palette', title: 'Command palette', icon: Terminal },\n { id: 'keyboard', title: 'Keyboard', icon: Keyboard },\n { id: 'notifications', title: 'Notifications', icon: Bell },\n { id: 'storage', title: 'Storage', icon: Database },\n { id: 'plugins', title: 'Plugins', icon: Plug },\n { id: 'mcps', title: 'MCP servers', icon: Cpu },\n { id: 'skills', title: 'Skills', icon: LibraryIcon },\n { id: 'hooks', title: 'Hooks', icon: Wrench },\n { id: 'activity', title: 'Activity', icon: Activity },\n { id: 'memory', title: 'Memory', icon: Brain },\n { id: 'task-defaults', title: 'Task defaults', icon: CheckSquare },\n { id: 'agent-defaults', title: 'Agent defaults', icon: Bot },\n { id: 'privacy', title: 'Privacy', icon: ShieldCheck },\n { id: 'advanced', title: 'Advanced', icon: SettingsIcon },\n];\n\ninterface SettingsState {\n workspaceName: string;\n defaultView: 'overview' | 'tasks' | 'goals' | 'agents' | 'activity' | 'settings';\n themeAccent: string;\n densityBaseFont: number;\n tasksCompact: boolean;\n memoryCompact: boolean;\n paletteHistory: boolean;\n paletteFuzzy: boolean;\n notifyAgentFinished: boolean;\n notifyCiFailed: boolean;\n notifyTokenBudget: boolean;\n notifyDailyDigest: boolean;\n activityRetentionDays: number;\n memoryAutoCommit: boolean;\n memoryScopeDefault: 'project' | 'global' | 'all';\n defaultTaskPriority: 'low' | 'medium' | 'high' | 'urgent';\n defaultTaskColumn: 'queued' | 'doing' | 'blocked' | 'done';\n defaultAgentModel: string;\n defaultAgentMaxMistakes: number;\n analytics: boolean;\n crashReports: boolean;\n piiMode: 'off' | 'redact' | 'pseudonymize' | 'block';\n reducedMotion: boolean;\n debugOverlay: boolean;\n}\n\nconst DEFAULTS: SettingsState = {\n workspaceName: 'Bizar Harness',\n defaultView: 'overview',\n themeAccent: '#5b8def',\n densityBaseFont: 13,\n tasksCompact: false,\n memoryCompact: true,\n paletteHistory: true,\n paletteFuzzy: true,\n notifyAgentFinished: true,\n notifyCiFailed: true,\n notifyTokenBudget: true,\n notifyDailyDigest: false,\n activityRetentionDays: 30,\n memoryAutoCommit: true,\n memoryScopeDefault: 'all',\n defaultTaskPriority: 'medium',\n defaultTaskColumn: 'queued',\n defaultAgentModel: 'claude-sonnet-4-5',\n defaultAgentMaxMistakes: 10,\n analytics: true,\n crashReports: true,\n piiMode: 'redact',\n reducedMotion: false,\n debugOverlay: false,\n};\n\nconst SELECT_STYLE: CSSProperties = {\n height: 28,\n padding: '0 var(--space-2)',\n borderRadius: 'var(--radius-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-0)',\n color: 'var(--fg)',\n fontFamily: 'var(--font-sans)',\n fontSize: 'var(--fs-12)',\n cursor: 'pointer',\n outline: 'none',\n};\n\nfunction NativeSelect({\n value,\n defaultValue,\n onChange,\n children,\n}: {\n value?: string;\n defaultValue?: string;\n onChange?: (v: string) => void;\n children: ReactNode;\n}): JSX.Element {\n return (\n <select\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => onChange?.(e.target.value)}\n style={SELECT_STYLE}\n >\n {children}\n </select>\n );\n}\n\nfunction Count({ loading, value }: { loading: boolean; value: number | undefined }): JSX.Element {\n if (loading) return <Skeleton style={{ width: 32, height: 16 }} />;\n return <code style={{ fontFamily: 'var(--font-mono)' }}>{value ?? 0}</code>;\n}\n\nexport function SettingsView(): JSX.Element {\n const [activeId, setActiveId] = useState<string>('general');\n const theme = useTheme();\n const density = useDensity();\n const [settings, setSettings] = useState<SettingsState>(DEFAULTS);\n const [savedAt, setSavedAt] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const skillsRes = useFetch<{ skills?: { name: string; source: string }[] }>('/api/skills?kind=skills');\n const mcpsRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=mcps');\n const hooksRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=hooks');\n const agentsRes = useFetch<{ agents?: { name: string }[] }>('/api/agents');\n\n const update = <K extends keyof SettingsState>(key: K, value: SettingsState[K]): void => {\n setSettings((s) => ({ ...s, [key]: value }));\n void patch(key, value);\n };\n\n const patch = async (key: string, value: unknown): Promise<void> => {\n try {\n await fetchJson('/api/settings', { method: 'PATCH', body: { [key]: value } });\n setSavedAt(Date.now());\n setError(null);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const navItems: SettingsNavItem[] = SECTIONS.map((s) => ({\n id: s.id,\n title: s.title,\n icon: <s.icon size={14} aria-hidden=\"true\" />,\n }));\n\n const handleSelect = (id: string): void => {\n setActiveId(id);\n requestAnimationFrame(() => {\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n });\n };\n\n const rootRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (typeof IntersectionObserver === 'undefined') return;\n const targets = SECTIONS\n .map((s) => document.getElementById(s.id))\n .filter((el): el is HTMLElement => el !== null);\n if (targets.length === 0) return;\n const visible = new Map<string, number>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const id = entry.target.id;\n if (entry.isIntersecting) visible.set(id, entry.intersectionRatio);\n else visible.delete(id);\n }\n if (visible.size === 0) return;\n let bestId: string | undefined;\n let bestRatio = -1;\n for (const [id, ratio] of visible) {\n if (ratio > bestRatio) { bestRatio = ratio; bestId = id; }\n }\n if (bestId) setActiveId(bestId);\n },\n { rootMargin: '-30% 0px -50% 0px', threshold: [0, 0.25, 0.5, 0.75, 1] },\n );\n for (const t of targets) observer.observe(t);\n return () => observer.disconnect();\n }, []);\n\n return (\n <div ref={rootRef}>\n <Grid cols={3} gap={5}>\n <aside style={{ position: 'sticky', top: 0, alignSelf: 'start' }}>\n <SettingsNav items={navItems} activeId={activeId} onSelect={handleSelect} />\n </aside>\n <Stack gap={5} style={{ gridColumn: 'span 2' }}>\n {error !== null && (\n <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)' }}>\n {error}\n </div>\n )}\n {savedAt !== null && (\n <Inline align=\"center\" justify=\"flex-end\" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n <span>Settings saved</span>\n <span style={{ fontFamily: 'var(--font-mono)' }}>\n {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}\n </span>\n </Inline>\n )}\n\n {/* 1. General */}\n <SettingsSection id=\"general\" title=\"General\" description=\"Workspace identity + default landing page.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"workspace-name\"\n label=\"Workspace name\"\n description=\"Shown in the topbar and command palette.\"\n control={\n <Input\n value={settings.workspaceName}\n onChange={(e) => update('workspaceName', e.target.value)}\n style={{ width: 240 }}\n />\n }\n />\n <SettingsRow\n id=\"default-view\"\n label=\"Default view on launch\"\n control={\n <NativeSelect value={settings.defaultView} onChange={(v) => update('defaultView', v as SettingsState['defaultView'])}>\n <option value=\"overview\">Overview</option>\n <option value=\"tasks\">Tasks</option>\n <option value=\"goals\">Goals</option>\n <option value=\"agents\">Agents</option>\n <option value=\"activity\">Activity</option>\n <option value=\"settings\">Settings</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 2. Theme */}\n <SettingsSection id=\"theme\" title=\"Theme\" description=\"Color mode + accent + typography.\" icon={<Palette size={14} aria-hidden />}>\n <SettingsRow\n id=\"theme-mode\"\n label=\"Color mode\"\n control={\n <NativeSelect value={theme.mode} onChange={(v) => theme.setMode(v as 'light' | 'dark' | 'system')}>\n <option value=\"system\">System</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-accent\"\n label=\"Accent color\"\n description=\"Personalize the leading-edge accent stripe.\"\n control={\n <Inline align=\"center\" gap={2}>\n <input\n type=\"color\"\n value={settings.themeAccent}\n onChange={(e) => update('themeAccent', e.target.value)}\n style={{ width: 40, height: 28, border: '1px solid var(--border)', borderRadius: 'var(--radius-sm)', background: 'transparent', cursor: 'pointer' }}\n />\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{settings.themeAccent}</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"theme-font\"\n label=\"Font family\"\n description=\"Body type. System fonts reduce render time.\"\n control={\n <NativeSelect defaultValue=\"inter\">\n <option value=\"inter\">Inter</option>\n <option value=\"system\">System UI</option>\n <option value=\"jetbrains\">JetBrains Mono</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-radius\"\n label=\"Border radius\"\n description=\"0 = sharp; 16 = rounded.\"\n control={<Slider defaultValue={[8]} min={0} max={16} step={1} />}\n />\n </SettingsSection>\n\n {/* 3. Density */}\n <SettingsSection id=\"density\" title=\"Density\" description=\"Comfortable by default. Compact fits more on screen.\" icon={<Sliders size={14} aria-hidden />}>\n <SettingsRow\n id=\"density-mode\"\n label=\"Density\"\n control={\n <NativeSelect value={density.density} onChange={(v) => density.setDensity(v as 'comfortable' | 'compact')}>\n <option value=\"comfortable\">Comfortable</option>\n <option value=\"compact\">Compact</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"density-base-font\"\n label=\"Base font size\"\n description=\"Adjusts the `--fs-13` token globally.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.densityBaseFont]}\n onValueChange={(v) => update('densityBaseFont', v[0] ?? 13)}\n min={11} max={16} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.densityBaseFont}px</code>\n </Inline>\n }\n />\n </SettingsSection>\n\n {/* 4. Density rules */}\n <SettingsSection id=\"density-rules\" title=\"Density rules\" description=\"Override density per surface.\" icon={<Sparkles size={14} aria-hidden />}>\n <SettingsRow id=\"tasks-compact\" label=\"Tasks page — compact by default\" control={<Switch checked={settings.tasksCompact} onCheckedChange={(v) => update('tasksCompact', v)} />} />\n <SettingsRow id=\"memory-compact\" label=\"Memory page — compact by default\" control={<Switch checked={settings.memoryCompact} onCheckedChange={(v) => update('memoryCompact', v)} />} />\n <SettingsRow id=\"activity-compact\" label=\"Activity page — compact by default\" control={<Switch onCheckedChange={(v) => patch('activityCompact', v)} />} />\n </SettingsSection>\n\n {/* 5. Command palette */}\n <SettingsSection id=\"palette\" title=\"Command palette\" description=\"How the ⌘K palette behaves.\" icon={<Terminal size={14} aria-hidden />}>\n <SettingsRow id=\"palette-history\" label=\"Show recent commands\" control={<Switch checked={settings.paletteHistory} onCheckedChange={(v) => update('paletteHistory', v)} />} />\n <SettingsRow id=\"palette-fuzzy\" label=\"Fuzzy match\" control={<Switch checked={settings.paletteFuzzy} onCheckedChange={(v) => update('paletteFuzzy', v)} />} />\n <SettingsRow id=\"palette-navigate\" label=\"Show navigation group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteNavigate', v)} />} />\n <SettingsRow id=\"palette-spawn\" label=\"Show agent-spawn group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteSpawn', v)} />} />\n <SettingsRow\n id=\"palette-scope\"\n label=\"Default scope\"\n description=\"Where palette actions apply when no context.\"\n control={\n <NativeSelect defaultValue=\"project\">\n <option value=\"project\">Active project</option>\n <option value=\"global\">Global</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 6. Keyboard */}\n <SettingsSection id=\"keyboard\" title=\"Keyboard\" description=\"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).\" icon={<Keyboard size={14} aria-hidden />}>\n <SettingsRow id=\"kb-palette\" label=\"Open command palette\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘K</code>} />\n <SettingsRow id=\"kb-search\" label=\"Search tasks\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘/</code>} />\n <SettingsRow id=\"kb-newtask\" label=\"New task\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘N</code>} />\n <SettingsRow id=\"kb-toggle-theme\" label=\"Toggle theme\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧L</code>} />\n <SettingsRow id=\"kb-toggle-density\" label=\"Toggle density\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧D</code>} />\n <SettingsRow id=\"kb-reload\" label=\"Reload window\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘R</code>} />\n </SettingsSection>\n\n {/* 7. Notifications */}\n <SettingsSection id=\"notifications\" title=\"Notifications\" description=\"When the harness should ping you.\" icon={<Bell size={14} aria-hidden />}>\n <SettingsRow id=\"n-agent-finished\" label=\"Agent run finished\" control={<Switch checked={settings.notifyAgentFinished} onCheckedChange={(v) => update('notifyAgentFinished', v)} />} />\n <SettingsRow id=\"n-task-moved\" label=\"Task moved between columns\" control={<Switch defaultChecked onCheckedChange={(v) => patch('notifyTaskMoved', v)} />} />\n <SettingsRow id=\"n-ci-failed\" label=\"CI failed\" control={<Switch checked={settings.notifyCiFailed} onCheckedChange={(v) => update('notifyCiFailed', v)} />} />\n <SettingsRow id=\"n-token-budget\" label=\"Token budget 80%\" control={<Switch checked={settings.notifyTokenBudget} onCheckedChange={(v) => update('notifyTokenBudget', v)} />} />\n <SettingsRow id=\"n-daily-digest\" label=\"Daily digest at 09:00\" control={<Switch checked={settings.notifyDailyDigest} onCheckedChange={(v) => update('notifyDailyDigest', v)} />} />\n <SettingsRow\n id=\"n-channel\"\n label=\"Channel\"\n description=\"Where notifications render.\"\n control={\n <NativeSelect defaultValue=\"toast\">\n <option value=\"toast\">In-app toast</option>\n <option value=\"system\">OS notification</option>\n <option value=\"both\">Both</option>\n <option value=\"silent\">Silent</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 8. Storage */}\n <SettingsSection id=\"storage\" title=\"Storage\" description=\"Where local data lives.\" icon={<Database size={14} aria-hidden />}>\n <SettingsRow id=\"store-path\" label=\"Local store path\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.bizar/store.db</code>} />\n <SettingsRow id=\"cache-path\" label=\"Cache directory\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.cache/bizar</code>} />\n <SettingsRow id=\"sessions-path\" label=\"Claude Code sessions\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>~/.claude/sessions</code>} />\n <SettingsRow id=\"cache-size\" label=\"Cache size\" control={<Count loading={false} value={42} />} />\n <SettingsRow\n id=\"store-gc\"\n label=\"Garbage collect\"\n description=\"Prune empty sessions and orphaned tasks.\"\n control={<Button variant=\"secondary\">Run GC</Button>}\n />\n <SettingsRow\n id=\"store-clear\"\n label=\"Clear local cache\"\n description=\"Destructive. Wipes the activity log and snapshots.\"\n control={<Button variant=\"danger\">Clear…</Button>}\n />\n </SettingsSection>\n\n {/* 9. Plugins */}\n <SettingsSection id=\"plugins\" title=\"Plugins\" description=\"Plugin registrations under `.claude/`.\" icon={<Plug size={14} aria-hidden />}>\n <SettingsRow\n id=\"plugins-count\"\n label=\"Loaded plugins\"\n control={<Count loading={agentsRes.loading} value={agentsRes.data?.agents?.length ?? 0} />}\n />\n <SettingsRow\n id=\"plugins-bizar\"\n label=\"Bizar\"\n description=\"Core plugin. Required — disable with care.\"\n control={<Switch defaultChecked disabled />}\n />\n {Array.isArray(agentsRes.data?.agents) && agentsRes.data.agents.length > 0 && (\n <SettingsRow\n id=\"plugins-list\"\n label=\"Active agents\"\n control={\n <Stack gap={1} style={{ maxHeight: 200, overflowY: 'auto', width: 360 }}>\n {agentsRes.data.agents.map((a) => (\n <Inline key={a.name} align=\"center\" justify=\"space-between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{a.name}</code>\n <Badge tone=\"success\">active</Badge>\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 10. MCPs */}\n <SettingsSection id=\"mcps\" title=\"MCP servers\" description=\"Model Context Protocol servers.\" icon={<Cpu size={14} aria-hidden />}>\n <SettingsRow id=\"mcps-count\" label=\"Registered MCPs\" control={<Count loading={mcpsRes.loading} value={mcpsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(mcpsRes.data?.skills) && mcpsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"mcps-list\"\n label=\"Servers\"\n control={\n <Stack gap={1} style={{ maxHeight: 220, overflowY: 'auto', width: 360 }}>\n {mcpsRes.data.skills.map((m) => (\n <Inline key={m.name} align=\"center\" justify=\"space-between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{m.name}</code>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`mcp:${m.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 11. Skills */}\n <SettingsSection id=\"skills\" title=\"Skills\" description=\"Bizar skill packs.\" icon={<LibraryIcon size={14} aria-hidden />}>\n <SettingsRow id=\"skills-count\" label=\"Loaded skills\" control={<Count loading={skillsRes.loading} value={skillsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(skillsRes.data?.skills) && skillsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"skills-list\"\n label=\"Skill packs\"\n control={\n <Stack gap={1} style={{ maxHeight: 260, overflowY: 'auto', width: 360 }}>\n {skillsRes.data.skills.map((s) => (\n <Inline key={s.name} align=\"center\" justify=\"space-between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <Inline align=\"center\" gap={2}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.name}</code>\n <Badge tone=\"neutral\">{s.source}</Badge>\n </Inline>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`skill:${s.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 12. Hooks */}\n <SettingsSection id=\"hooks\" title=\"Hooks\" description=\"Executable hook scripts.\" icon={<Wrench size={14} aria-hidden />}>\n <SettingsRow id=\"hooks-count\" label=\"Registered hooks\" control={<Count loading={hooksRes.loading} value={hooksRes.data?.skills?.length ?? 0} />} />\n <SettingsRow id=\"hooks-pretool\" label=\"PreToolUse\" description=\"Block writes to .env / secrets / node_modules.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-posttool\" label=\"PostToolUse\" description=\"Log tool latency to ~/.config/bizar/hook-logs/.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-taskstart\" label=\"TaskStart\" description=\"Prime AI with project context.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-taskresume\" label=\"TaskResume\" description=\"Re-read state + check git log.\" control={<Switch defaultChecked />} />\n <SettingsRow id=\"hooks-prompt\" label=\"UserPromptSubmit\" description=\"Tag prompts for routing.\" control={<Switch defaultChecked />} />\n </SettingsSection>\n\n {/* 13. Activity */}\n <SettingsSection id=\"activity\" title=\"Activity\" description=\"Stream retention + export.\" icon={<Activity size={14} aria-hidden />}>\n <SettingsRow\n id=\"activity-retention\"\n label=\"Retain last\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider value={[settings.activityRetentionDays]} onValueChange={(v) => update('activityRetentionDays', v[0] ?? 30)} min={7} max={365} step={1} />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.activityRetentionDays} days</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"activity-hide\"\n label=\"Hide noisy event types\"\n description=\"Comma-separated kinds. E.g. 'heartbeat,ping'.\"\n control={<Input placeholder=\"heartbeat, ping, system\" style={{ width: 280 }} />}\n />\n <SettingsRow\n id=\"activity-export\"\n label=\"Export\"\n description=\"Download the full activity log as NDJSON.\"\n control={<Button variant=\"secondary\">Export…</Button>}\n />\n </SettingsSection>\n\n {/* 14. Memory */}\n <SettingsSection id=\"memory\" title=\"Memory\" description=\"Cross-session memo behavior.\" icon={<Brain size={14} aria-hidden />}>\n <SettingsRow id=\"memory-auto-commit\" label=\"Auto-commit project memos\" control={<Switch checked={settings.memoryAutoCommit} onCheckedChange={(v) => update('memoryAutoCommit', v)} />} />\n <SettingsRow\n id=\"memory-scope\"\n label=\"Default scope filter\"\n control={\n <NativeSelect value={settings.memoryScopeDefault} onChange={(v) => update('memoryScopeDefault', v as SettingsState['memoryScopeDefault'])}>\n <option value=\"project\">Project</option>\n <option value=\"global\">Global</option>\n <option value=\"all\">All</option>\n </NativeSelect>\n }\n />\n <SettingsRow id=\"memory-index\" label=\"Re-index vault\" description=\"Rebuild search index. May take a moment.\" control={<Button variant=\"secondary\">Re-index</Button>} />\n </SettingsSection>\n\n {/* 15. Task defaults */}\n <SettingsSection id=\"task-defaults\" title=\"Task defaults\" description=\"Defaults applied to new tasks.\" icon={<CheckSquare size={14} aria-hidden />}>\n <SettingsRow\n id=\"task-priority\"\n label=\"Default priority\"\n control={\n <NativeSelect value={settings.defaultTaskPriority} onChange={(v) => update('defaultTaskPriority', v as SettingsState['defaultTaskPriority'])}>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"urgent\">Urgent</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-column\"\n label=\"Default column\"\n control={\n <NativeSelect value={settings.defaultTaskColumn} onChange={(v) => update('defaultTaskColumn', v as SettingsState['defaultTaskColumn'])}>\n <option value=\"queued\">Backlog</option>\n <option value=\"doing\">In progress</option>\n <option value=\"blocked\">In review</option>\n <option value=\"done\">Done</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-assignee\"\n label=\"Default assignee\"\n description=\"Auto-assigns new tasks to this agent (empty = unassigned).\"\n control={<Input placeholder=\"odin\" style={{ width: 240 }} />}\n />\n </SettingsSection>\n\n {/* 16. Agent defaults */}\n <SettingsSection id=\"agent-defaults\" title=\"Agent defaults\" description=\"Defaults applied when spawning agents.\" icon={<Bot size={14} aria-hidden />}>\n <SettingsRow\n id=\"agent-model\"\n label=\"Default model\"\n control={\n <Input value={settings.defaultAgentModel} onChange={(e) => update('defaultAgentModel', e.target.value)} style={{ width: 240 }} />\n }\n />\n <SettingsRow\n id=\"agent-mistakes\"\n label=\"Max consecutive mistakes\"\n description=\"Higher = more forgiving. Default 10.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.defaultAgentMaxMistakes]}\n onValueChange={(v) => update('defaultAgentMaxMistakes', v[0] ?? 10)}\n min={3} max={20} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.defaultAgentMaxMistakes}</code>\n </Inline>\n }\n />\n <SettingsRow id=\"agent-bg\" label=\"Spawn as background by default\" control={<Switch onCheckedChange={(v) => patch('agentBackgroundDefault', v)} />} />\n <SettingsRow id=\"agent-worktree\" label=\"Always create a worktree\" control={<Switch defaultChecked onCheckedChange={(v) => patch('agentWorktree', v)} />} />\n <SettingsRow\n id=\"agent-system-prompt\"\n label=\"Extra system prompt\"\n description=\"Appended to every agent's system prompt.\"\n control={<Textarea rows={3} placeholder=\"You are a careful, methodical engineer…\" />}\n />\n </SettingsSection>\n\n {/* 17. Privacy */}\n <SettingsSection id=\"privacy\" title=\"Privacy\" description=\"What the harness sends and stores.\" icon={<ShieldCheck size={14} aria-hidden />}>\n <SettingsRow\n id=\"privacy-analytics\"\n label=\"Anonymous analytics\"\n control={<Switch checked={settings.analytics} onCheckedChange={(v) => update('analytics', v)} />}\n />\n <SettingsRow\n id=\"privacy-crash\"\n label=\"Crash reports\"\n control={<Switch checked={settings.crashReports} onCheckedChange={(v) => update('crashReports', v)} />}\n />\n <SettingsRow\n id=\"privacy-pii\"\n label=\"PII handling\"\n description=\"How personal data is treated before persistence.\"\n control={\n <NativeSelect value={settings.piiMode} onChange={(v) => update('piiMode', v as SettingsState['piiMode'])}>\n <option value=\"off\">Off</option>\n <option value=\"redact\">Redact</option>\n <option value=\"pseudonymize\">Pseudonymize</option>\n <option value=\"block\">Block</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"privacy-telemetry\"\n label=\"Send token usage telemetry\"\n control={<Switch onCheckedChange={(v) => patch('telemetryTokens', v)} />}\n />\n </SettingsSection>\n\n {/* 18. Advanced */}\n <SettingsSection id=\"advanced\" title=\"Advanced\" description=\"Power-user toggles. Touch with care.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"advanced-reduced-motion\"\n label=\"Reduce motion\"\n control={<Switch checked={settings.reducedMotion} onCheckedChange={(v) => update('reducedMotion', v)} />}\n />\n <SettingsRow\n id=\"advanced-debug\"\n label=\"Debug overlay\"\n description=\"Show agent + tool call traces in the topbar.\"\n control={<Switch checked={settings.debugOverlay} onCheckedChange={(v) => update('debugOverlay', v)} />}\n />\n <SettingsRow\n id=\"advanced-restart\"\n label=\"Restart dashboard backend\"\n description=\"Stop and relaunch the local server. Unsaved tasks are safe on disk.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Button variant=\"danger\"><RotateCw size={12} aria-hidden /> Restart…</Button>\n <Button variant=\"ghost\"><Plus size={12} aria-hidden /> Rebuild</Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"advanced-logs\"\n label=\"Open logs folder\"\n control={<Button variant=\"secondary\"><Trash2 size={12} aria-hidden /> Purge logs</Button>}\n />\n </SettingsSection>\n </Stack>\n </Grid>\n </div>\n );\n}"],"names":["Bell","createLucideIcon","Database","Keyboard","Palette","Plug","ShieldCheck","SlidersVertical","Sparkles","SettingsNav","props","items","activeId","onSelect","className","jsxs","cx","jsx","item","isActive","SECTIONS","SettingsIcon","Sliders","Terminal","Cpu","LibraryIcon","Wrench","Activity","Brain","CheckSquare","Bot","DEFAULTS","SELECT_STYLE","NativeSelect","value","defaultValue","onChange","children","e","Count","loading","Skeleton","SettingsView","setActiveId","useState","theme","useTheme","density","useDensity","settings","setSettings","savedAt","setSavedAt","error","setError","skillsRes","useFetch","mcpsRes","hooksRes","agentsRes","update","key","s","patch","fetchJson","err","FetchError","navItems","handleSelect","id","_a","rootRef","useRef","useEffect","targets","el","visible","observer","entries","entry","bestId","bestRatio","ratio","t","Grid","Stack","Inline","SettingsSection","SettingsRow","Input","v","Slider","Switch","Button","_b","_c","a","Badge","_e","_d","_f","m","_h","_g","_i","_k","_j","Textarea","RotateCw","Plus","Trash2"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
@@ -0,0 +1 @@
1
+ import{j as e,g as c,r as h,D as g,b as p,c as v,d as x,e as f,f as m}from"./cmdk-BLWIhKrV.js";import{X as b,c as u}from"./main-LxX9zTRk.js";const D=({children:t,...r})=>e.jsx(c,{...r,children:t}),j={top:{top:0,left:0,right:0,height:"60vh",borderBottom:"1px solid var(--border)",borderRadius:"0 0 var(--radius-lg) var(--radius-lg)"},right:{top:0,right:0,bottom:0,width:"min(560px, 100vw)",borderLeft:"1px solid var(--border)"},bottom:{bottom:0,left:0,right:0,height:"60vh",borderTop:"1px solid var(--border)",borderRadius:"var(--radius-lg) var(--radius-lg) 0 0"},left:{top:0,left:0,bottom:0,width:"min(560px, 100vw)",borderRight:"1px solid var(--border)"}},S=h.forwardRef(function(r,s){const{className:i,side:o="right",title:d,description:a,children:l,...n}=r;return e.jsxs(g,{children:[e.jsx(p,{style:{position:"fixed",inset:0,background:"oklch(0 0 0 / 0.4)",zIndex:"var(--z-modal)"}}),e.jsxs(v,{ref:s,"data-side":o,className:u("v8-sheet",i),style:{position:"fixed",background:"var(--surface-popover)",padding:"var(--space-6)",overflow:"auto",boxShadow:"var(--shadow-4)",zIndex:"calc(var(--z-modal) + 1)",...j[o]},...n,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"var(--space-4)"},children:[e.jsxs("div",{children:[e.jsx(x,{style:{fontSize:"var(--fs-18)",fontWeight:600},children:d}),a!==void 0&&e.jsx(f,{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",marginTop:"var(--space-1)"},children:a})]}),e.jsx(m,{"aria-label":"Close",style:{width:28,height:28,display:"inline-flex",alignItems:"center",justifyContent:"center",background:"transparent",border:0,borderRadius:"var(--radius-sm)",color:"var(--fg-muted)",cursor:"pointer"},children:e.jsx(b,{size:16,"aria-hidden":"true"})})]}),l]})]})});export{D as S,S as a};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sheet-C_sIEw35.js","sources":["../../src/web/v8/ui/feedback/Sheet.tsx"],"sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport * as RxDialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Sheet — a side-anchored panel.\n *\n * Use for: task detail, agent detail, settings panels (mobile), kanban card\n * expanded. Use a Dialog when the content is best presented centered.\n */\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface SheetProps extends Omit<ComponentPropsWithoutRef<typeof RxDialog.Root>, 'children'> {\n children: ReactNode;\n}\n\nexport const Sheet = ({ children, ...rest }: SheetProps) => (\n <RxDialog.Root {...rest}>{children}</RxDialog.Root>\n);\n\nexport const SheetTrigger = RxDialog.Trigger;\nexport const SheetClose = RxDialog.Close;\n\nexport interface SheetContentProps extends ComponentPropsWithoutRef<typeof RxDialog.Content> {\n side?: SheetSide;\n title: string;\n description?: string;\n children: ReactNode;\n}\n\nconst SIDE_STYLE: Record<SheetSide, React.CSSProperties> = {\n top: { top: 0, left: 0, right: 0, height: '60vh', borderBottom: '1px solid var(--border)', borderRadius: '0 0 var(--radius-lg) var(--radius-lg)' },\n right: { top: 0, right: 0, bottom: 0, width: 'min(560px, 100vw)', borderLeft: '1px solid var(--border)' },\n bottom: { bottom: 0, left: 0, right: 0, height: '60vh', borderTop: '1px solid var(--border)', borderRadius: 'var(--radius-lg) var(--radius-lg) 0 0' },\n left: { top: 0, left: 0, bottom: 0, width: 'min(560px, 100vw)', borderRight: '1px solid var(--border)' },\n};\n\nexport const SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(function SheetContent(\n props,\n ref,\n) {\n const { className, side = 'right', title, description, children, ...rest } = props;\n return (\n <RxDialog.Portal>\n <RxDialog.Overlay\n style={{\n position: 'fixed',\n inset: 0,\n background: 'oklch(0 0 0 / 0.4)',\n zIndex: 'var(--z-modal)',\n }}\n />\n <RxDialog.Content\n ref={ref}\n data-side={side}\n className={cx('v8-sheet', className)}\n style={{\n position: 'fixed',\n background: 'var(--surface-popover)',\n padding: 'var(--space-6)',\n overflow: 'auto',\n boxShadow: 'var(--shadow-4)',\n zIndex: 'calc(var(--z-modal) + 1)',\n ...SIDE_STYLE[side],\n }}\n {...rest}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 'var(--space-4)' }}>\n <div>\n <RxDialog.Title style={{ fontSize: 'var(--fs-18)', fontWeight: 600 }}>{title}</RxDialog.Title>\n {description !== undefined && (\n <RxDialog.Description\n style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)', marginTop: 'var(--space-1)' }}\n >\n {description}\n </RxDialog.Description>\n )}\n </div>\n <RxDialog.Close\n aria-label=\"Close\"\n style={{\n width: 28,\n height: 28,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: 'var(--fg-muted)',\n cursor: 'pointer',\n }}\n >\n <X size={16} aria-hidden=\"true\" />\n </RxDialog.Close>\n </div>\n {children}\n </RxDialog.Content>\n </RxDialog.Portal>\n );\n});"],"names":["Sheet","children","rest","jsx","RxDialog.Root","SIDE_STYLE","SheetContent","forwardRef","props","ref","className","side","title","description","jsxs","RxDialog.Portal","RxDialog.Overlay","RxDialog.Content","cx","RxDialog.Title","RxDialog.Description","RxDialog.Close","X"],"mappings":"6IAkBO,MAAMA,EAAQ,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,IACnCC,EAAAA,IAACC,EAAA,CAAe,GAAGF,EAAO,SAAAD,CAAA,CAAS,EAa/BI,EAAqD,CACzD,IAAK,CAAE,IAAK,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,aAAc,0BAA2B,aAAc,uCAAA,EACzG,MAAO,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,MAAO,oBAAqB,WAAY,yBAAA,EAC9E,OAAQ,CAAE,OAAQ,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,UAAW,0BAA2B,aAAc,uCAAA,EAC5G,KAAM,CAAE,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,MAAO,oBAAqB,YAAa,yBAAA,CAC/E,EAEaC,EAAeC,EAAAA,WAA8C,SACxEC,EACAC,EACA,CACA,KAAM,CAAE,UAAAC,EAAW,KAAAC,EAAO,QAAS,MAAAC,EAAO,YAAAC,EAAa,SAAAZ,EAAU,GAAGC,CAAA,EAASM,EAC7E,OACEM,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAZ,EAAAA,IAACa,EAAA,CACC,MAAO,CACL,SAAU,QACV,MAAO,EACP,WAAY,qBACZ,OAAQ,gBAAA,CACV,CAAA,EAEFF,EAAAA,KAACG,EAAA,CACC,IAAAR,EACA,YAAWE,EACX,UAAWO,EAAG,WAAYR,CAAS,EACnC,MAAO,CACL,SAAU,QACV,WAAY,yBACZ,QAAS,iBACT,SAAU,OACV,UAAW,kBACX,OAAQ,2BACR,GAAGL,EAAWM,CAAI,CAAA,EAEnB,GAAGT,EAEJ,SAAA,CAAAY,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,aAAc,gBAAA,EAClG,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAX,EAAAA,IAACgB,EAAA,CAAe,MAAO,CAAE,SAAU,eAAgB,WAAY,GAAA,EAAQ,SAAAP,CAAA,CAAM,EAC5EC,IAAgB,QACfV,EAAAA,IAACiB,EAAA,CACC,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,UAAW,gBAAA,EAEvE,SAAAP,CAAA,CAAA,CACH,EAEJ,EACAV,EAAAA,IAACkB,EAAA,CACC,aAAW,QACX,MAAO,CACL,MAAO,GACP,OAAQ,GACR,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,WAAY,cACZ,OAAQ,EACR,aAAc,mBACd,MAAO,kBACP,OAAQ,SAAA,EAGV,SAAAlB,EAAAA,IAACmB,EAAA,CAAE,KAAM,GAAI,cAAY,MAAA,CAAO,CAAA,CAAA,CAClC,EACF,EACCrB,CAAA,CAAA,CAAA,CACH,EACF,CAEJ,CAAC"}
@@ -0,0 +1 @@
1
+ import{r as j,j as n}from"./cmdk-BLWIhKrV.js";import{c as g}from"./main-LxX9zTRk.js";const A={xs:20,sm:24,md:32,lg:40,xl:56},C={xs:"var(--fs-12)",sm:"var(--fs-12)",md:"var(--fs-13)",lg:"var(--fs-14)",xl:"var(--fs-18)"},E={online:"var(--success)",offline:"var(--fg-subtle)",busy:"var(--danger)",away:"var(--warning)"};function I(o){var a,s;const t=o.trim().split(/\s+/);if(t.length===0||t[0]===void 0)return"?";if(t.length===1)return(t[0]??"").slice(0,2).toUpperCase();const r=((a=t[0])==null?void 0:a[0])??"",e=((s=t[t.length-1])==null?void 0:s[0])??"";return`${r}${e}`.toUpperCase()}function B(o){let t=0;for(let r=0;r<o.length;r++)t=t*31+o.charCodeAt(r)|0;return Math.abs(t)}const S=["oklch(0.65 0.15 240)","oklch(0.65 0.15 30)","oklch(0.65 0.15 140)","oklch(0.65 0.15 320)","oklch(0.65 0.15 80)","oklch(0.65 0.15 200)"],U=j.forwardRef(function(t,r){const{name:e,src:a,size:s="md",initials:l,status:d,className:f,style:x,...u}=t,c=A[s],p=l??I(e),h=S[B(e)%S.length];return n.jsxs("span",{ref:r,className:g("v8-avatar",`v8-avatar--${s}`,f),style:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:c,height:c,borderRadius:"var(--radius-pill)",overflow:"hidden",background:h,color:"white",fontSize:C[s],fontWeight:600,flexShrink:0,userSelect:"none",...x},"aria-label":e,...u,children:[a!==void 0?n.jsx("img",{src:a,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}}):p,d!==void 0&&n.jsx("span",{"aria-hidden":"true",style:{position:"absolute",bottom:0,right:0,width:Math.max(6,Math.floor(c*.28)),height:Math.max(6,Math.floor(c*.28)),borderRadius:"var(--radius-pill)",background:E[d],border:"2px solid var(--surface-0)"}})]})});j.forwardRef(function(t,r){const{children:e,size:a="sm",className:s,style:l,...d}=t;return n.jsx("div",{ref:r,className:g("v8-avatar-stack",s),style:{display:"inline-flex",alignItems:"center",...l},...d,children:n.jsx(P,{size:a,children:e})})});function P({children:o,size:t}){const r=A[t];return n.jsx(n.Fragment,{children:Array.isArray(o)?o.map((e,a)=>n.jsx("span",{style:{marginLeft:a===0?0:-Math.floor(r*.3),border:"2px solid var(--surface-0)",borderRadius:"var(--radius-pill)",display:"inline-flex"},children:e},a)):n.jsx("span",{style:{border:"2px solid var(--surface-0)",borderRadius:"var(--radius-pill)"},children:o})})}const W=j.forwardRef(function(t,r){var $,w;const{data:e,width:a=120,height:s=32,stroke:l="var(--accent)",fill:d,area:f=!0,goal:x,className:u,style:c,...p}=t;if(e.length<2)return n.jsx("svg",{ref:r,width:a,height:s,viewBox:`0 0 ${a} ${s}`,className:g("v8-sparkline",u),style:c,"aria-hidden":"true",...p});const h=Math.min(...e),k=Math.max(...e)-h||1,i=2,F=(a-i*2)/(e.length-1),v=e.map((m,y)=>{const N=i+F*y,R=i+(s-i*2)*(1-(m-h)/k);return{x:N,y:R}}),b=v.map((m,y)=>`${y===0?"M":"L"}${m.x.toFixed(1)},${m.y.toFixed(1)}`).join(" "),L=f?`${b} L${(($=v[v.length-1])==null?void 0:$.x.toFixed(1))??"0"},${(s-i).toFixed(1)} L${((w=v[0])==null?void 0:w.x.toFixed(1))??"0"},${(s-i).toFixed(1)} Z`:"",M=d??`color-mix(in oklch, ${l} 14%, transparent)`;return n.jsxs("svg",{ref:r,width:a,height:s,viewBox:`0 0 ${a} ${s}`,className:g("v8-sparkline",u),style:c,"aria-hidden":"true",...p,children:[f===!0&&n.jsx("path",{d:L,fill:M,stroke:"none"}),n.jsx("path",{d:b,fill:"none",stroke:l,strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}),x!==void 0&&n.jsx("line",{x1:i,x2:a-i,y1:i+(s-i*2)*(1-(x-h)/k),y2:i+(s-i*2)*(1-(x-h)/k),stroke:"var(--fg-subtle)",strokeWidth:1,strokeDasharray:"2 2"})]})});export{U as A,W as S};