@polderlabs/bizar 9.0.0 → 10.0.7

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 (1306) hide show
  1. package/bizar-dash/BROWSER_VERIFICATION.md +190 -0
  2. package/bizar-dash/CHANGELOG.md +572 -0
  3. package/bizar-dash/CONTROL_SURFACES.md +157 -0
  4. package/bizar-dash/SETTINGS_AUDIT.md +225 -0
  5. package/bizar-dash/dist/assets/ActivityFeed-Da-JCrE6.js +11 -0
  6. package/bizar-dash/dist/assets/ActivityFeed-Da-JCrE6.js.map +1 -0
  7. package/bizar-dash/dist/assets/ActivityView-nIRsSETb.js +2 -0
  8. package/bizar-dash/dist/assets/ActivityView-nIRsSETb.js.map +1 -0
  9. package/bizar-dash/dist/assets/AdminView-DP1NMxmG.js +11 -0
  10. package/bizar-dash/dist/assets/AdminView-DP1NMxmG.js.map +1 -0
  11. package/bizar-dash/dist/assets/AgentActivity-lSPkOr-O.js +67 -0
  12. package/bizar-dash/dist/assets/AgentActivity-lSPkOr-O.js.map +1 -0
  13. package/bizar-dash/dist/assets/AgentsView-BIWGkz7w.js +13 -0
  14. package/bizar-dash/dist/assets/AgentsView-BIWGkz7w.js.map +1 -0
  15. package/bizar-dash/dist/assets/Alert-DN0UysMg.js +6 -0
  16. package/bizar-dash/dist/assets/Alert-DN0UysMg.js.map +1 -0
  17. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js +6 -0
  18. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js.map +1 -0
  19. package/bizar-dash/dist/assets/AuthView-DW5cs7ma.js +16 -0
  20. package/bizar-dash/dist/assets/AuthView-DW5cs7ma.js.map +1 -0
  21. package/bizar-dash/dist/assets/Avatar-DZPv9pvd.js +6 -0
  22. package/bizar-dash/dist/assets/Avatar-DZPv9pvd.js.map +1 -0
  23. package/bizar-dash/dist/assets/BackgroundJobsView-D8O-EyMD.js +1 -0
  24. package/bizar-dash/dist/assets/BackgroundJobsView-D8O-EyMD.js.map +1 -0
  25. package/bizar-dash/dist/assets/BackupView-uwXkhxOV.js +1 -0
  26. package/bizar-dash/dist/assets/BackupView-uwXkhxOV.js.map +1 -0
  27. package/bizar-dash/dist/assets/Card-Tyboihu7.js +1 -0
  28. package/bizar-dash/dist/assets/Card-Tyboihu7.js.map +1 -0
  29. package/bizar-dash/dist/assets/ChatView-DRBHzgay.js +9 -0
  30. package/bizar-dash/dist/assets/ChatView-DRBHzgay.js.map +1 -0
  31. package/bizar-dash/dist/assets/Chip-BrXIlR9w.js +1 -0
  32. package/bizar-dash/dist/assets/Chip-BrXIlR9w.js.map +1 -0
  33. package/bizar-dash/dist/assets/ClaudeSessionsView-Ck62jaOr.js +1 -0
  34. package/bizar-dash/dist/assets/ClaudeSessionsView-Ck62jaOr.js.map +1 -0
  35. package/bizar-dash/dist/assets/ClipboardView-DfND6xL6.js +1 -0
  36. package/bizar-dash/dist/assets/ClipboardView-DfND6xL6.js.map +1 -0
  37. package/bizar-dash/dist/assets/ConfigView-DjJmSrOJ.js +1 -0
  38. package/bizar-dash/dist/assets/ConfigView-DjJmSrOJ.js.map +1 -0
  39. package/bizar-dash/dist/assets/DiagnosticsView-CKgItf0J.js +2 -0
  40. package/bizar-dash/dist/assets/DiagnosticsView-CKgItf0J.js.map +1 -0
  41. package/bizar-dash/dist/assets/DialogsView-DHYF8dE1.js +6 -0
  42. package/bizar-dash/dist/assets/DialogsView-DHYF8dE1.js.map +1 -0
  43. package/bizar-dash/dist/assets/DoctorView-DDLHrSKk.js +6 -0
  44. package/bizar-dash/dist/assets/DoctorView-DDLHrSKk.js.map +1 -0
  45. package/bizar-dash/dist/assets/EmptyState-DZ2ouKwd.js +1 -0
  46. package/bizar-dash/dist/assets/EmptyState-DZ2ouKwd.js.map +1 -0
  47. package/bizar-dash/dist/assets/EnvVarsView-D1cx83mB.js +8 -0
  48. package/bizar-dash/dist/assets/EnvVarsView-D1cx83mB.js.map +1 -0
  49. package/bizar-dash/dist/assets/ErrorState-DwwJ2-Jq.js +1 -0
  50. package/bizar-dash/dist/assets/ErrorState-DwwJ2-Jq.js.map +1 -0
  51. package/bizar-dash/dist/assets/EvalView-C9aYixXW.js +1 -0
  52. package/bizar-dash/dist/assets/EvalView-C9aYixXW.js.map +1 -0
  53. package/bizar-dash/dist/assets/GoalsView-DZa_mGmh.js +6 -0
  54. package/bizar-dash/dist/assets/GoalsView-DZa_mGmh.js.map +1 -0
  55. package/bizar-dash/dist/assets/Grid-CiRyhAgR.js +1 -0
  56. package/bizar-dash/dist/assets/Grid-CiRyhAgR.js.map +1 -0
  57. package/bizar-dash/dist/assets/HeadroomView-CNc-TI7u.js +11 -0
  58. package/bizar-dash/dist/assets/HeadroomView-CNc-TI7u.js.map +1 -0
  59. package/bizar-dash/dist/assets/HistoryView-Dv7aPxJE.js +1 -0
  60. package/bizar-dash/dist/assets/HistoryView-Dv7aPxJE.js.map +1 -0
  61. package/bizar-dash/dist/assets/Input-BbFUDQnS.js +1 -0
  62. package/bizar-dash/dist/assets/Input-BbFUDQnS.js.map +1 -0
  63. package/bizar-dash/dist/assets/LibrariesView-DBQ83TNa.js +6 -0
  64. package/bizar-dash/dist/assets/LibrariesView-DBQ83TNa.js.map +1 -0
  65. package/bizar-dash/dist/assets/LightRAGView-JYpE5u9p.js +6 -0
  66. package/bizar-dash/dist/assets/LightRAGView-JYpE5u9p.js.map +1 -0
  67. package/bizar-dash/dist/assets/ListHeader-BGjm11Z0.js +1 -0
  68. package/bizar-dash/dist/assets/ListHeader-BGjm11Z0.js.map +1 -0
  69. package/bizar-dash/dist/assets/MemoryView-CnOP2MvM.js +8 -0
  70. package/bizar-dash/dist/assets/MemoryView-CnOP2MvM.js.map +1 -0
  71. package/bizar-dash/dist/assets/MessageBubble-5vUAquDx.js +29 -0
  72. package/bizar-dash/dist/assets/MessageBubble-5vUAquDx.js.map +1 -0
  73. package/bizar-dash/dist/assets/MiscView-BBcpUbZZ.js +1 -0
  74. package/bizar-dash/dist/assets/MiscView-BBcpUbZZ.js.map +1 -0
  75. package/bizar-dash/dist/assets/ModsView-CU4cAmIz.js +6 -0
  76. package/bizar-dash/dist/assets/ModsView-CU4cAmIz.js.map +1 -0
  77. package/bizar-dash/dist/assets/NotificationsView-BYffvthq.js +6 -0
  78. package/bizar-dash/dist/assets/NotificationsView-BYffvthq.js.map +1 -0
  79. package/bizar-dash/dist/assets/ObsidianView-D3bI0row.js +1 -0
  80. package/bizar-dash/dist/assets/ObsidianView-D3bI0row.js.map +1 -0
  81. package/bizar-dash/dist/assets/OverviewView-0tq8f-Y0.js +1 -0
  82. package/bizar-dash/dist/assets/OverviewView-0tq8f-Y0.js.map +1 -0
  83. package/bizar-dash/dist/assets/ProgressBar-B-h60LKA.js +1 -0
  84. package/bizar-dash/dist/assets/ProgressBar-B-h60LKA.js.map +1 -0
  85. package/bizar-dash/dist/assets/ProjectsView-DhX5lzHS.js +11 -0
  86. package/bizar-dash/dist/assets/ProjectsView-DhX5lzHS.js.map +1 -0
  87. package/bizar-dash/dist/assets/ProvidersView-CJMX7jm9.js +11 -0
  88. package/bizar-dash/dist/assets/ProvidersView-CJMX7jm9.js.map +1 -0
  89. package/bizar-dash/dist/assets/SchedulesView-CcwDQ9Nm.js +1 -0
  90. package/bizar-dash/dist/assets/SchedulesView-CcwDQ9Nm.js.map +1 -0
  91. package/bizar-dash/dist/assets/Select-Cw7Qtz2M.js +6 -0
  92. package/bizar-dash/dist/assets/Select-Cw7Qtz2M.js.map +1 -0
  93. package/bizar-dash/dist/assets/SettingsRow-DgsgbPSI.js +1 -0
  94. package/bizar-dash/dist/assets/SettingsRow-DgsgbPSI.js.map +1 -0
  95. package/bizar-dash/dist/assets/SettingsView-DTAFdKyK.js +18 -0
  96. package/bizar-dash/dist/assets/SettingsView-DTAFdKyK.js.map +1 -0
  97. package/bizar-dash/dist/assets/Sheet-DH-WNJ3Y.js +1 -0
  98. package/bizar-dash/dist/assets/Sheet-DH-WNJ3Y.js.map +1 -0
  99. package/bizar-dash/dist/assets/Slider-DXbJuQ7y.js +1 -0
  100. package/bizar-dash/dist/assets/Slider-DXbJuQ7y.js.map +1 -0
  101. package/bizar-dash/dist/assets/Sparkline-CYtAn82j.js +1 -0
  102. package/bizar-dash/dist/assets/Sparkline-CYtAn82j.js.map +1 -0
  103. package/bizar-dash/dist/assets/Switch-BItGrPqr.js +10 -0
  104. package/bizar-dash/dist/assets/Switch-BItGrPqr.js.map +1 -0
  105. package/bizar-dash/dist/assets/TasksView-i5tm6CkX.js +6 -0
  106. package/bizar-dash/dist/assets/TasksView-i5tm6CkX.js.map +1 -0
  107. package/bizar-dash/dist/assets/Textarea-qYDf3yds.js +1 -0
  108. package/bizar-dash/dist/assets/Textarea-qYDf3yds.js.map +1 -0
  109. package/bizar-dash/dist/assets/UpdateView-Xln-ej26.js +6 -0
  110. package/bizar-dash/dist/assets/UpdateView-Xln-ej26.js.map +1 -0
  111. package/bizar-dash/dist/assets/UsageView-BGuZSUZ6.js +1 -0
  112. package/bizar-dash/dist/assets/UsageView-BGuZSUZ6.js.map +1 -0
  113. package/bizar-dash/dist/assets/ViewHeader-BqIPVKuG.js +6 -0
  114. package/bizar-dash/dist/assets/ViewHeader-BqIPVKuG.js.map +1 -0
  115. package/bizar-dash/dist/assets/VoiceView-CWUOCQs_.js +1 -0
  116. package/bizar-dash/dist/assets/VoiceView-CWUOCQs_.js.map +1 -0
  117. package/bizar-dash/dist/assets/brain-fsBSDl2g.js +6 -0
  118. package/bizar-dash/dist/assets/brain-fsBSDl2g.js.map +1 -0
  119. package/bizar-dash/dist/assets/calendar-DsHTZoCU.js +6 -0
  120. package/bizar-dash/dist/assets/calendar-DsHTZoCU.js.map +1 -0
  121. package/bizar-dash/dist/assets/circle-CqSxqqeJ.js +6 -0
  122. package/bizar-dash/dist/assets/circle-CqSxqqeJ.js.map +1 -0
  123. package/bizar-dash/dist/assets/circle-alert-BsLl001l.js +6 -0
  124. package/bizar-dash/dist/assets/circle-alert-BsLl001l.js.map +1 -0
  125. package/bizar-dash/dist/assets/circle-check-rVKMQmZp.js +6 -0
  126. package/bizar-dash/dist/assets/circle-check-rVKMQmZp.js.map +1 -0
  127. package/bizar-dash/dist/assets/clock-OuficfgH.js +6 -0
  128. package/bizar-dash/dist/assets/clock-OuficfgH.js.map +1 -0
  129. package/bizar-dash/dist/assets/cmdk-DVxytz9i.js +80 -0
  130. package/bizar-dash/dist/assets/cmdk-DVxytz9i.js.map +1 -0
  131. package/bizar-dash/dist/assets/dnd-kit-DrHErSkw.js +5 -0
  132. package/bizar-dash/dist/assets/dnd-kit-DrHErSkw.js.map +1 -0
  133. package/bizar-dash/dist/assets/download-BdHlstUY.js +6 -0
  134. package/bizar-dash/dist/assets/download-BdHlstUY.js.map +1 -0
  135. package/bizar-dash/dist/assets/external-link-DA3_VGm-.js +6 -0
  136. package/bizar-dash/dist/assets/external-link-DA3_VGm-.js.map +1 -0
  137. package/bizar-dash/dist/assets/file-text-B-g8H227.js +6 -0
  138. package/bizar-dash/dist/assets/file-text-B-g8H227.js.map +1 -0
  139. package/bizar-dash/dist/assets/filter-D9B8s5CG.js +6 -0
  140. package/bizar-dash/dist/assets/filter-D9B8s5CG.js.map +1 -0
  141. package/bizar-dash/dist/assets/git-pull-request-ByH0YuVz.js +11 -0
  142. package/bizar-dash/dist/assets/git-pull-request-ByH0YuVz.js.map +1 -0
  143. package/bizar-dash/dist/assets/index-C4Vq_2LM.js +1 -0
  144. package/bizar-dash/dist/assets/index-C4Vq_2LM.js.map +1 -0
  145. package/bizar-dash/dist/assets/index-CASP1n-5.js +1 -0
  146. package/bizar-dash/dist/assets/index-CASP1n-5.js.map +1 -0
  147. package/bizar-dash/dist/assets/main-CdOm1Pj9.js +249 -0
  148. package/bizar-dash/dist/assets/main-CdOm1Pj9.js.map +1 -0
  149. package/bizar-dash/dist/assets/pause-C9hgd8wX.js +6 -0
  150. package/bizar-dash/dist/assets/pause-C9hgd8wX.js.map +1 -0
  151. package/bizar-dash/dist/assets/pencil-BanqaMw7.js +6 -0
  152. package/bizar-dash/dist/assets/pencil-BanqaMw7.js.map +1 -0
  153. package/bizar-dash/dist/assets/play-CawUZ02_.js +6 -0
  154. package/bizar-dash/dist/assets/play-CawUZ02_.js.map +1 -0
  155. package/bizar-dash/dist/assets/plug-Cmv0-T_e.js +6 -0
  156. package/bizar-dash/dist/assets/plug-Cmv0-T_e.js.map +1 -0
  157. package/bizar-dash/dist/assets/plus-M6LYiKX8.js +6 -0
  158. package/bizar-dash/dist/assets/plus-M6LYiKX8.js.map +1 -0
  159. package/bizar-dash/dist/assets/power-DP5x_SRF.js +6 -0
  160. package/bizar-dash/dist/assets/power-DP5x_SRF.js.map +1 -0
  161. package/bizar-dash/dist/assets/power-off-NOJRLAIs.js +6 -0
  162. package/bizar-dash/dist/assets/power-off-NOJRLAIs.js.map +1 -0
  163. package/bizar-dash/dist/assets/refresh-ccw-CHMprsm5.js +6 -0
  164. package/bizar-dash/dist/assets/refresh-ccw-CHMprsm5.js.map +1 -0
  165. package/bizar-dash/dist/assets/refresh-cw-1RBqDKgJ.js +6 -0
  166. package/bizar-dash/dist/assets/refresh-cw-1RBqDKgJ.js.map +1 -0
  167. package/bizar-dash/dist/assets/rotate-ccw-DJRekBbi.js +6 -0
  168. package/bizar-dash/dist/assets/rotate-ccw-DJRekBbi.js.map +1 -0
  169. package/bizar-dash/dist/assets/rotate-cw-DHooc0Tx.js +6 -0
  170. package/bizar-dash/dist/assets/rotate-cw-DHooc0Tx.js.map +1 -0
  171. package/bizar-dash/dist/assets/save-DQKCKyZK.js +6 -0
  172. package/bizar-dash/dist/assets/save-DQKCKyZK.js.map +1 -0
  173. package/bizar-dash/dist/assets/send-xgy3RAi7.js +6 -0
  174. package/bizar-dash/dist/assets/send-xgy3RAi7.js.map +1 -0
  175. package/bizar-dash/dist/assets/shield-alert-CWV2F5ab.js +6 -0
  176. package/bizar-dash/dist/assets/shield-alert-CWV2F5ab.js.map +1 -0
  177. package/bizar-dash/dist/assets/trash-2-CL4khSRv.js +6 -0
  178. package/bizar-dash/dist/assets/trash-2-CL4khSRv.js.map +1 -0
  179. package/bizar-dash/dist/assets/trending-up-CSJJhWTS.js +6 -0
  180. package/bizar-dash/dist/assets/trending-up-CSJJhWTS.js.map +1 -0
  181. package/bizar-dash/dist/assets/triangle-alert-BPLb7uLt.js +6 -0
  182. package/bizar-dash/dist/assets/triangle-alert-BPLb7uLt.js.map +1 -0
  183. package/bizar-dash/dist/assets/upload-Cww6MvFq.js +6 -0
  184. package/bizar-dash/dist/assets/upload-Cww6MvFq.js.map +1 -0
  185. package/bizar-dash/dist/assets/zap-DmhVUzRA.js +6 -0
  186. package/bizar-dash/dist/assets/zap-DmhVUzRA.js.map +1 -0
  187. package/bizar-dash/dist/index.html +19 -0
  188. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  189. package/bizar-dash/src/server/agents-store.mjs +1 -0
  190. package/bizar-dash/src/server/api.mjs +7 -2
  191. package/bizar-dash/src/server/artifact-mint.mjs +69 -0
  192. package/bizar-dash/src/server/claude-runner.mjs +5 -0
  193. package/bizar-dash/src/server/dialog-store.mjs +84 -2
  194. package/bizar-dash/src/server/memory-lightrag.mjs +14 -9
  195. package/bizar-dash/src/server/progress-parser.mjs +13 -1
  196. package/bizar-dash/src/server/progress-parser.test.mjs +24 -0
  197. package/bizar-dash/src/server/routes/activity.mjs +22 -2
  198. package/bizar-dash/src/server/routes/admin.mjs +163 -0
  199. package/bizar-dash/src/server/routes/agents-cc.mjs +196 -26
  200. package/bizar-dash/src/server/routes/agents.mjs +20 -5
  201. package/bizar-dash/src/server/routes/claude-session-detail.mjs +38 -0
  202. package/bizar-dash/src/server/routes/dialogs.mjs +49 -1
  203. package/bizar-dash/src/server/routes/goals.mjs +125 -4
  204. package/bizar-dash/src/server/routes/overview.mjs +131 -4
  205. package/bizar-dash/src/server/routes/overview.test.mjs +65 -0
  206. package/bizar-dash/src/server/routes/providers.mjs +53 -0
  207. package/bizar-dash/src/server/routes/skills.mjs +6 -1
  208. package/bizar-dash/src/server/routes/tasks.mjs +51 -1
  209. package/bizar-dash/src/server/server.mjs +20 -9
  210. package/bizar-dash/src/server/skills-store.mjs +2 -0
  211. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  212. package/bizar-dash/src/web/v8/App.tsx +113 -1
  213. package/bizar-dash/src/web/v8/__tests__/admin-view.test.tsx +105 -0
  214. package/bizar-dash/src/web/v8/__tests__/agent-card-metrics.test.tsx +54 -0
  215. package/bizar-dash/src/web/v8/__tests__/agent-detail-tasks.test.tsx +68 -0
  216. package/bizar-dash/src/web/v8/__tests__/agent-hierarchy.test.tsx +79 -0
  217. package/bizar-dash/src/web/v8/__tests__/agents-stuck-banner.test.tsx +142 -0
  218. package/bizar-dash/src/web/v8/__tests__/artifacts-view.test.tsx +102 -0
  219. package/bizar-dash/src/web/v8/__tests__/audit-fixes.test.tsx +139 -0
  220. package/bizar-dash/src/web/v8/__tests__/auth-view.test.tsx +94 -0
  221. package/bizar-dash/src/web/v8/__tests__/chat-types.test.ts +55 -0
  222. package/bizar-dash/src/web/v8/__tests__/chat-view.test.tsx +142 -0
  223. package/bizar-dash/src/web/v8/__tests__/claude-sessions-view.test.tsx +159 -0
  224. package/bizar-dash/src/web/v8/__tests__/clipboard-view.test.tsx +90 -0
  225. package/bizar-dash/src/web/v8/__tests__/config-view.test.tsx +111 -0
  226. package/bizar-dash/src/web/v8/__tests__/dialogs-view.test.tsx +81 -0
  227. package/bizar-dash/src/web/v8/__tests__/env-vars-view.test.tsx +123 -0
  228. package/bizar-dash/src/web/v8/__tests__/goals-cc-roundtrip.test.tsx +94 -0
  229. package/bizar-dash/src/web/v8/__tests__/history-view.test.tsx +96 -0
  230. package/bizar-dash/src/web/v8/__tests__/lightrag-view.test.tsx +90 -0
  231. package/bizar-dash/src/web/v8/__tests__/misc-view.test.tsx +79 -0
  232. package/bizar-dash/src/web/v8/__tests__/mods-view.test.tsx +123 -0
  233. package/bizar-dash/src/web/v8/__tests__/new-views.test.tsx +177 -0
  234. package/bizar-dash/src/web/v8/__tests__/obsidian-view.test.tsx +82 -0
  235. package/bizar-dash/src/web/v8/__tests__/overview-trends.test.tsx +87 -0
  236. package/bizar-dash/src/web/v8/__tests__/projects-view.test.tsx +134 -0
  237. package/bizar-dash/src/web/v8/__tests__/providers-view.test.tsx +100 -0
  238. package/bizar-dash/src/web/v8/__tests__/update-view.test.tsx +89 -0
  239. package/bizar-dash/src/web/v8/__tests__/voice-view.test.tsx +80 -0
  240. package/bizar-dash/src/web/v8/data/types.ts +86 -3
  241. package/bizar-dash/src/web/v8/data/useViewNavigate.ts +54 -0
  242. package/bizar-dash/src/web/v8/data/useWebSocket.ts +45 -0
  243. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +111 -14
  244. package/bizar-dash/src/web/v8/shell/Topbar.tsx +100 -8
  245. package/bizar-dash/src/web/v8/ui/activity/ActivityLane.tsx +315 -0
  246. package/bizar-dash/src/web/v8/ui/activity/ActivityLanes.tsx +51 -0
  247. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +96 -15
  248. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +168 -12
  249. package/bizar-dash/src/web/v8/ui/agents/AgentLiveOutput.tsx +252 -0
  250. package/bizar-dash/src/web/v8/ui/chat/ChatDrawer.tsx +208 -0
  251. package/bizar-dash/src/web/v8/ui/chat/EventStream.tsx +83 -0
  252. package/bizar-dash/src/web/v8/ui/chat/MessageBubble.tsx +174 -0
  253. package/bizar-dash/src/web/v8/ui/data/ListHeader.tsx +94 -0
  254. package/bizar-dash/src/web/v8/ui/feedback/ErrorState.tsx +116 -0
  255. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +27 -0
  256. package/bizar-dash/src/web/v8/ui/index.ts +49 -2
  257. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +61 -27
  258. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +156 -12
  259. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +5 -10
  260. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +4 -0
  261. package/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +638 -0
  262. package/bizar-dash/src/web/v8/ui/tasks/TaskDetail.tsx +313 -0
  263. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +203 -178
  264. package/bizar-dash/src/web/v8/views/Admin/AdminView.tsx +210 -0
  265. package/bizar-dash/src/web/v8/views/Agents/AgentHierarchy.tsx +212 -0
  266. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +328 -21
  267. package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +241 -0
  268. package/bizar-dash/src/web/v8/views/Auth/AuthView.tsx +175 -0
  269. package/bizar-dash/src/web/v8/views/BackgroundJobs/BackgroundJobsView.tsx +1 -1
  270. package/bizar-dash/src/web/v8/views/Backup/BackupView.tsx +204 -0
  271. package/bizar-dash/src/web/v8/views/Chat/ChatView.tsx +356 -0
  272. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionDetail.tsx +133 -0
  273. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionsView.tsx +331 -0
  274. package/bizar-dash/src/web/v8/views/Clipboard/ClipboardView.tsx +210 -0
  275. package/bizar-dash/src/web/v8/views/Config/ConfigView.tsx +364 -0
  276. package/bizar-dash/src/web/v8/views/Diagnostics/DiagnosticsView.tsx +160 -0
  277. package/bizar-dash/src/web/v8/views/Dialogs/DialogsView.tsx +196 -0
  278. package/bizar-dash/src/web/v8/views/Doctor/DoctorView.tsx +181 -0
  279. package/bizar-dash/src/web/v8/views/EnvVars/EnvVarsView.tsx +365 -0
  280. package/bizar-dash/src/web/v8/views/Eval/EvalView.tsx +278 -0
  281. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +168 -10
  282. package/bizar-dash/src/web/v8/views/Headroom/HeadroomView.tsx +201 -0
  283. package/bizar-dash/src/web/v8/views/History/HistoryView.tsx +227 -0
  284. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +13 -3
  285. package/bizar-dash/src/web/v8/views/LightRAG/LightRAGView.tsx +183 -0
  286. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +30 -3
  287. package/bizar-dash/src/web/v8/views/Misc/MiscView.tsx +159 -0
  288. package/bizar-dash/src/web/v8/views/Mods/ModsView.tsx +348 -0
  289. package/bizar-dash/src/web/v8/views/Notifications/NotificationsView.tsx +178 -0
  290. package/bizar-dash/src/web/v8/views/Obsidian/ObsidianView.tsx +193 -0
  291. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +114 -11
  292. package/bizar-dash/src/web/v8/views/Projects/ProjectsView.tsx +253 -0
  293. package/bizar-dash/src/web/v8/views/Providers/ProvidersView.tsx +371 -0
  294. package/bizar-dash/src/web/v8/views/Router.tsx +125 -0
  295. package/bizar-dash/src/web/v8/views/Schedules/SchedulesView.tsx +46 -14
  296. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +322 -29
  297. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +229 -10
  298. package/bizar-dash/src/web/v8/views/Update/UpdateView.tsx +270 -0
  299. package/bizar-dash/src/web/v8/views/Usage/UsageView.tsx +210 -0
  300. package/bizar-dash/src/web/v8/views/Voice/VoiceView.tsx +192 -0
  301. package/bizar-dash/tests/tasks-patch-routes.test.mjs +194 -0
  302. package/bizar-dash/vite.config.ts +11 -3
  303. package/cli/__tests__/esm-no-require.test.mjs +97 -0
  304. package/cli/commands/tailscale.mjs +1 -3
  305. package/cli/commands/voice.mjs +2 -2
  306. package/cli/service-env.mjs +4 -5
  307. package/package.json +13 -3
  308. package/packages/sdk/dist/agent-registry.d.ts +134 -0
  309. package/packages/sdk/dist/agent-registry.js +228 -0
  310. package/packages/sdk/dist/consensus/byzantine.d.ts +159 -0
  311. package/packages/sdk/dist/consensus/byzantine.js +507 -0
  312. package/packages/sdk/dist/consensus/index.d.ts +60 -0
  313. package/packages/sdk/dist/consensus/index.js +76 -0
  314. package/packages/sdk/dist/consensus/queen.d.ts +86 -0
  315. package/packages/sdk/dist/consensus/queen.js +158 -0
  316. package/packages/sdk/dist/consensus/types.d.ts +155 -0
  317. package/packages/sdk/dist/consensus/types.js +29 -0
  318. package/packages/sdk/dist/dangerous-patterns.d.ts +27 -0
  319. package/packages/sdk/dist/dangerous-patterns.js +107 -0
  320. package/packages/sdk/dist/federation/audit.d.ts +71 -0
  321. package/packages/sdk/dist/federation/audit.js +133 -0
  322. package/packages/sdk/dist/federation/budget.d.ts +111 -0
  323. package/packages/sdk/dist/federation/budget.js +227 -0
  324. package/packages/sdk/dist/federation/envelope.d.ts +83 -0
  325. package/packages/sdk/dist/federation/envelope.js +92 -0
  326. package/packages/sdk/dist/federation/hmac.d.ts +61 -0
  327. package/packages/sdk/dist/federation/hmac.js +120 -0
  328. package/packages/sdk/dist/federation/index.d.ts +108 -0
  329. package/packages/sdk/dist/federation/index.js +275 -0
  330. package/packages/sdk/dist/federation/pii.d.ts +72 -0
  331. package/packages/sdk/dist/federation/pii.js +178 -0
  332. package/packages/sdk/dist/federation/policy.d.ts +50 -0
  333. package/packages/sdk/dist/federation/policy.js +76 -0
  334. package/packages/sdk/dist/federation/trust.d.ts +80 -0
  335. package/packages/sdk/dist/federation/trust.js +126 -0
  336. package/packages/sdk/dist/fingerprint.d.ts +18 -0
  337. package/packages/sdk/dist/fingerprint.js +0 -0
  338. package/packages/sdk/dist/index.d.ts +25 -0
  339. package/packages/sdk/dist/index.js +25 -0
  340. package/packages/sdk/dist/mcp/bin.d.ts +16 -0
  341. package/packages/sdk/dist/mcp/bin.js +46 -0
  342. package/packages/sdk/dist/mcp/server.d.ts +105 -0
  343. package/packages/sdk/dist/mcp/server.js +682 -0
  344. package/packages/sdk/dist/memory/index.d.ts +43 -0
  345. package/packages/sdk/dist/memory/index.js +159 -0
  346. package/packages/sdk/dist/router/codemod-intent.d.ts +68 -0
  347. package/packages/sdk/dist/router/codemod-intent.js +112 -0
  348. package/packages/sdk/dist/router/index.d.ts +100 -0
  349. package/packages/sdk/dist/router/index.js +149 -0
  350. package/packages/sdk/dist/router/memory-distillation.d.ts +58 -0
  351. package/packages/sdk/dist/router/memory-distillation.js +195 -0
  352. package/packages/sdk/dist/router/model-router.d.ts +83 -0
  353. package/packages/sdk/dist/router/model-router.js +207 -0
  354. package/packages/sdk/dist/router/q-learning-router.d.ts +85 -0
  355. package/packages/sdk/dist/router/q-learning-router.js +273 -0
  356. package/packages/sdk/dist/swarm-topology.d.ts +87 -0
  357. package/packages/sdk/dist/swarm-topology.js +219 -0
  358. package/packages/sdk/dist/version.d.ts +5 -0
  359. package/packages/sdk/dist/version.js +5 -0
  360. package/packages/sdk/package.json +1 -1
  361. package/plugins/bizar/dist/index.d.ts +25 -0
  362. package/plugins/bizar/dist/index.js +32 -0
  363. package/plugins/bizar/package.json +18 -0
  364. package/.claude/CLAUDE.md +0 -15
  365. package/.claude/agents/_shared/AGENT_BASELINE.md +0 -168
  366. package/.claude/agents/_shared/CLAUDE_TOOLS.md +0 -412
  367. package/.claude/agents/_shared/SKILLS.md +0 -109
  368. package/.claude/agents/agent-browser.md +0 -80
  369. package/.claude/agents/baldr.md +0 -49
  370. package/.claude/agents/forseti.md +0 -51
  371. package/.claude/agents/frigg.md +0 -42
  372. package/.claude/agents/heimdall.md +0 -33
  373. package/.claude/agents/hermod.md +0 -53
  374. package/.claude/agents/mimir.md +0 -49
  375. package/.claude/agents/odin.md +0 -287
  376. package/.claude/agents/quick.md +0 -34
  377. package/.claude/agents/semble-search.md +0 -50
  378. package/.claude/agents/thor.md +0 -53
  379. package/.claude/agents/tyr.md +0 -56
  380. package/.claude/agents/vidarr.md +0 -54
  381. package/.claude/agents/vor.md +0 -53
  382. package/.claude/commands/audit.md +0 -25
  383. package/.claude/commands/bizar.md +0 -22
  384. package/.claude/commands/explain.md +0 -17
  385. package/.claude/commands/goal.md +0 -98
  386. package/.claude/commands/init.md +0 -29
  387. package/.claude/commands/learn.md +0 -44
  388. package/.claude/commands/plan.md +0 -35
  389. package/.claude/commands/plow-through.md +0 -50
  390. package/.claude/commands/pr-review.md +0 -49
  391. package/.claude/commands/setup-provider.md +0 -96
  392. package/.claude/commands/tailscale-serve.md +0 -100
  393. package/.claude/commands/team.md +0 -132
  394. package/.claude/commands/test.md +0 -62
  395. package/.claude/commands/validate.md +0 -68
  396. package/.claude/commands/visual-plan.md +0 -24
  397. package/.claude/hooks/README.md +0 -92
  398. package/.claude/hooks/posttooluse-editwrite.mjs +0 -91
  399. package/.claude/hooks/pretooluse-bash.mjs +0 -81
  400. package/.claude/hooks/pretooluse-editwrite.mjs +0 -139
  401. package/.claude/hooks/sessionend-recall.mjs +0 -74
  402. package/.claude/hooks/sessionstart-prime.mjs +0 -80
  403. package/.claude/hooks/userpromptsubmit-tag.mjs +0 -80
  404. package/.claude/hooks/worker-suggest.mjs +0 -110
  405. package/.claude/settings.json +0 -125
  406. package/.claude/settings.local.json +0 -7
  407. package/.claude/skills/9router/SKILL.md +0 -80
  408. package/.claude/skills/9router-chat/SKILL.md +0 -73
  409. package/.claude/skills/9router-embeddings/SKILL.md +0 -69
  410. package/.claude/skills/9router-image/SKILL.md +0 -86
  411. package/.claude/skills/9router-stt/SKILL.md +0 -79
  412. package/.claude/skills/9router-tts/SKILL.md +0 -80
  413. package/.claude/skills/9router-web-fetch/SKILL.md +0 -99
  414. package/.claude/skills/9router-web-search/SKILL.md +0 -91
  415. package/.claude/skills/bizar/README.md +0 -9
  416. package/.claude/skills/bizar/SKILL.md +0 -450
  417. package/.claude/skills/cpp-coding-standards/README.md +0 -28
  418. package/.claude/skills/cpp-coding-standards/SKILL.md +0 -634
  419. package/.claude/skills/cpp-coding-standards/references/concurrency.md +0 -320
  420. package/.claude/skills/cpp-coding-standards/references/error-handling.md +0 -229
  421. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  422. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  423. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  424. package/.claude/skills/cpp-testing/README.md +0 -28
  425. package/.claude/skills/cpp-testing/SKILL.md +0 -304
  426. package/.claude/skills/cpp-testing/references/coverage.md +0 -370
  427. package/.claude/skills/cpp-testing/references/framework-compare.md +0 -175
  428. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  429. package/.claude/skills/cpp-testing/references/mocking.md +0 -364
  430. package/.claude/skills/cpp-testing/references/tdd-workflow.md +0 -308
  431. package/.claude/skills/cubesandbox/SKILL.md +0 -148
  432. package/.claude/skills/embedded-esp-idf/README.md +0 -41
  433. package/.claude/skills/embedded-esp-idf/SKILL.md +0 -439
  434. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  435. package/.claude/skills/embedded-esp-idf/references/host-tests.md +0 -164
  436. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  437. package/.claude/skills/embedded-esp-idf/references/kconfig.md +0 -159
  438. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  439. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  440. package/.claude/skills/embedded-esp-idf/references/nvs.md +0 -121
  441. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  442. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  443. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  444. package/.claude/skills/glyph/SKILL.md +0 -163
  445. package/.claude/skills/harness-engineering/SKILL.md +0 -143
  446. package/.claude/skills/lightrag/SKILL.md +0 -81
  447. package/.claude/skills/memory-protocol/SKILL.md +0 -105
  448. package/.claude/skills/obsidian/SKILL.md +0 -306
  449. package/.claude/skills/read-the-damn-docs/SKILL.md +0 -113
  450. package/.claude/skills/self-improvement/SKILL.md +0 -64
  451. package/.claude/worktrees/kanban-overhaul/.claude/CLAUDE.md +0 -15
  452. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/AGENT_BASELINE.md +0 -168
  453. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/CLAUDE_TOOLS.md +0 -412
  454. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/SKILLS.md +0 -109
  455. package/.claude/worktrees/kanban-overhaul/.claude/agents/agent-browser.md +0 -80
  456. package/.claude/worktrees/kanban-overhaul/.claude/agents/baldr.md +0 -49
  457. package/.claude/worktrees/kanban-overhaul/.claude/agents/forseti.md +0 -51
  458. package/.claude/worktrees/kanban-overhaul/.claude/agents/frigg.md +0 -42
  459. package/.claude/worktrees/kanban-overhaul/.claude/agents/heimdall.md +0 -33
  460. package/.claude/worktrees/kanban-overhaul/.claude/agents/hermod.md +0 -53
  461. package/.claude/worktrees/kanban-overhaul/.claude/agents/mimir.md +0 -49
  462. package/.claude/worktrees/kanban-overhaul/.claude/agents/odin.md +0 -287
  463. package/.claude/worktrees/kanban-overhaul/.claude/agents/quick.md +0 -34
  464. package/.claude/worktrees/kanban-overhaul/.claude/agents/semble-search.md +0 -50
  465. package/.claude/worktrees/kanban-overhaul/.claude/agents/thor.md +0 -53
  466. package/.claude/worktrees/kanban-overhaul/.claude/agents/tyr.md +0 -56
  467. package/.claude/worktrees/kanban-overhaul/.claude/agents/vidarr.md +0 -54
  468. package/.claude/worktrees/kanban-overhaul/.claude/agents/vor.md +0 -53
  469. package/.claude/worktrees/kanban-overhaul/.claude/commands/audit.md +0 -25
  470. package/.claude/worktrees/kanban-overhaul/.claude/commands/bizar.md +0 -22
  471. package/.claude/worktrees/kanban-overhaul/.claude/commands/explain.md +0 -17
  472. package/.claude/worktrees/kanban-overhaul/.claude/commands/init.md +0 -29
  473. package/.claude/worktrees/kanban-overhaul/.claude/commands/learn.md +0 -44
  474. package/.claude/worktrees/kanban-overhaul/.claude/commands/plan.md +0 -35
  475. package/.claude/worktrees/kanban-overhaul/.claude/commands/plow-through.md +0 -50
  476. package/.claude/worktrees/kanban-overhaul/.claude/commands/pr-review.md +0 -49
  477. package/.claude/worktrees/kanban-overhaul/.claude/commands/setup-provider.md +0 -96
  478. package/.claude/worktrees/kanban-overhaul/.claude/commands/tailscale-serve.md +0 -100
  479. package/.claude/worktrees/kanban-overhaul/.claude/commands/team.md +0 -132
  480. package/.claude/worktrees/kanban-overhaul/.claude/commands/test.md +0 -62
  481. package/.claude/worktrees/kanban-overhaul/.claude/commands/validate.md +0 -68
  482. package/.claude/worktrees/kanban-overhaul/.claude/commands/visual-plan.md +0 -24
  483. package/.claude/worktrees/kanban-overhaul/.claude/hooks/README.md +0 -92
  484. package/.claude/worktrees/kanban-overhaul/.claude/hooks/posttooluse-editwrite.mjs +0 -91
  485. package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-bash.mjs +0 -81
  486. package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-editwrite.mjs +0 -139
  487. package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionend-recall.mjs +0 -74
  488. package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionstart-prime.mjs +0 -80
  489. package/.claude/worktrees/kanban-overhaul/.claude/hooks/userpromptsubmit-tag.mjs +0 -80
  490. package/.claude/worktrees/kanban-overhaul/.claude/hooks/worker-suggest.mjs +0 -110
  491. package/.claude/worktrees/kanban-overhaul/.claude/settings.json +0 -125
  492. package/.claude/worktrees/kanban-overhaul/.claude/settings.local.json +0 -8
  493. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router/SKILL.md +0 -80
  494. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-chat/SKILL.md +0 -73
  495. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-embeddings/SKILL.md +0 -69
  496. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-image/SKILL.md +0 -86
  497. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-stt/SKILL.md +0 -79
  498. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-tts/SKILL.md +0 -80
  499. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-fetch/SKILL.md +0 -99
  500. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-search/SKILL.md +0 -91
  501. package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/README.md +0 -9
  502. package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/SKILL.md +0 -450
  503. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/README.md +0 -28
  504. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/SKILL.md +0 -634
  505. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/concurrency.md +0 -320
  506. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/error-handling.md +0 -229
  507. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  508. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  509. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  510. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/README.md +0 -28
  511. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/SKILL.md +0 -304
  512. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/coverage.md +0 -370
  513. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/framework-compare.md +0 -175
  514. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  515. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/mocking.md +0 -364
  516. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/tdd-workflow.md +0 -308
  517. package/.claude/worktrees/kanban-overhaul/.claude/skills/cubesandbox/SKILL.md +0 -148
  518. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/README.md +0 -41
  519. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/SKILL.md +0 -439
  520. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  521. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/host-tests.md +0 -164
  522. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  523. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/kconfig.md +0 -159
  524. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  525. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  526. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/nvs.md +0 -121
  527. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  528. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  529. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  530. package/.claude/worktrees/kanban-overhaul/.claude/skills/glyph/SKILL.md +0 -163
  531. package/.claude/worktrees/kanban-overhaul/.claude/skills/harness-engineering/SKILL.md +0 -143
  532. package/.claude/worktrees/kanban-overhaul/.claude/skills/lightrag/SKILL.md +0 -81
  533. package/.claude/worktrees/kanban-overhaul/.claude/skills/memory-protocol/SKILL.md +0 -105
  534. package/.claude/worktrees/kanban-overhaul/.claude/skills/obsidian/SKILL.md +0 -306
  535. package/.claude/worktrees/kanban-overhaul/.claude/skills/read-the-damn-docs/SKILL.md +0 -113
  536. package/.claude/worktrees/kanban-overhaul/.claude/skills/self-improvement/SKILL.md +0 -64
  537. package/.claude/worktrees/kanban-overhaul/.dockerignore +0 -31
  538. package/.claude/worktrees/kanban-overhaul/.gitattributes +0 -27
  539. package/.claude/worktrees/kanban-overhaul/.harness/agents.json +0 -17
  540. package/.claude/worktrees/kanban-overhaul/.harness/arch-rules.json +0 -69
  541. package/.claude/worktrees/kanban-overhaul/.harness/topology.json +0 -4
  542. package/.claude/worktrees/kanban-overhaul/.nvmrc +0 -1
  543. package/.claude/worktrees/kanban-overhaul/.serena/project.yml +0 -159
  544. package/.claude/worktrees/kanban-overhaul/AGENTS.md +0 -250
  545. package/.claude/worktrees/kanban-overhaul/CHANGELOG.md +0 -5410
  546. package/.claude/worktrees/kanban-overhaul/CLAUDE.md +0 -260
  547. package/.claude/worktrees/kanban-overhaul/CURRENT_ISSUES_ AND_NEW_FEATURES.md +0 -18
  548. package/.claude/worktrees/kanban-overhaul/DECISIONS.md +0 -66
  549. package/.claude/worktrees/kanban-overhaul/Dockerfile +0 -48
  550. package/.claude/worktrees/kanban-overhaul/FINAL_GOAL.md +0 -397
  551. package/.claude/worktrees/kanban-overhaul/IMPLEMENTATION_PLAN.md +0 -250
  552. package/.claude/worktrees/kanban-overhaul/MILESTONES.md +0 -257
  553. package/.claude/worktrees/kanban-overhaul/Makefile +0 -93
  554. package/.claude/worktrees/kanban-overhaul/PROGRESS.md +0 -1406
  555. package/.claude/worktrees/kanban-overhaul/README.md +0 -483
  556. package/.claude/worktrees/kanban-overhaul/ROADMAP.md +0 -609
  557. package/.claude/worktrees/kanban-overhaul/bizar-dash/.graphifyignore +0 -40
  558. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/README.md +0 -14
  559. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/daily/2026-06-25.md +0 -9
  560. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/vault.json +0 -7
  561. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/SKILL.md +0 -103
  562. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/assets/template.html +0 -338
  563. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/example.html +0 -81
  564. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/open-design.json +0 -172
  565. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/checklist.md +0 -44
  566. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/layouts.md +0 -247
  567. package/.claude/worktrees/kanban-overhaul/bizar-dash/ARCHITECTURE.md +0 -197
  568. package/.claude/worktrees/kanban-overhaul/bizar-dash/CHANGELOG.md +0 -235
  569. package/.claude/worktrees/kanban-overhaul/bizar-dash/DESIGN.md +0 -912
  570. package/.claude/worktrees/kanban-overhaul/bizar-dash/GLYPH.md +0 -418
  571. package/.claude/worktrees/kanban-overhaul/bizar-dash/PLAN.md +0 -1135
  572. package/.claude/worktrees/kanban-overhaul/bizar-dash/critique.json +0 -26
  573. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/comments.json +0 -1
  574. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/meta.json +0 -10
  575. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/plan.json +0 -174
  576. package/.claude/worktrees/kanban-overhaul/bizar-dash/scripts/smoke-bg-retry.mjs +0 -246
  577. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-baseline/SKILL.md +0 -80
  578. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-browser/SKILL.md +0 -181
  579. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/bizar/SKILL.md +0 -116
  580. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/chat/SKILL.md +0 -74
  581. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/eval/SKILL.md +0 -237
  582. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/headroom/SKILL.md +0 -94
  583. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/lightrag/SKILL.md +0 -86
  584. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/minimax/SKILL.md +0 -80
  585. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/obsidian/SKILL.md +0 -68
  586. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/providers/SKILL.md +0 -75
  587. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/publishing/SKILL.md +0 -146
  588. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/sdk/SKILL.md +0 -138
  589. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/self-improvement/SKILL.md +0 -53
  590. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/skills-cli/SKILL.md +0 -94
  591. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/usage/SKILL.md +0 -62
  592. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli/dashboard-ports.mjs +0 -488
  593. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli.mjs +0 -537
  594. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/activity-log.mjs +0 -174
  595. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/agents-store.mjs +0 -465
  596. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/api.mjs +0 -223
  597. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifact-template.html +0 -810
  598. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifacts-store.mjs +0 -733
  599. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/auth.mjs +0 -548
  600. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/background-store.mjs +0 -446
  601. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/backup-store.mjs +0 -530
  602. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-poller.mjs +0 -375
  603. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-retry.mjs +0 -446
  604. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-spawner.mjs +0 -390
  605. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/browser.mjs +0 -40
  606. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-bg-spawner.mjs +0 -390
  607. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-info.mjs +0 -412
  608. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-runner.mjs +0 -284
  609. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-sdk.mjs +0 -191
  610. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/diagnostics-store.mjs +0 -598
  611. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-poller.mjs +0 -105
  612. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-store.mjs +0 -177
  613. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/digest-store.mjs +0 -558
  614. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval-store.mjs +0 -281
  615. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval.mjs +0 -500
  616. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/glyphs/mdx-compiler.mjs +0 -596
  617. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/headroom.mjs +0 -649
  618. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/path-safe.mjs +0 -283
  619. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/rate-limit.mjs +0 -122
  620. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/logger.mjs +0 -71
  621. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-consolidator.mjs +0 -225
  622. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-distillation.mjs +0 -296
  623. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-git.mjs +0 -473
  624. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-lightrag.mjs +0 -1478
  625. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-obsidian.mjs +0 -230
  626. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-schema.mjs +0 -145
  627. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-secrets.mjs +0 -84
  628. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-store.mjs +0 -1093
  629. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/metrics.mjs +0 -268
  630. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax-usage-store.mjs +0 -372
  631. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax.mjs +0 -683
  632. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mod-security.mjs +0 -398
  633. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mods-loader.mjs +0 -1243
  634. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/notifications-store.mjs +0 -243
  635. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/obsidian-store.mjs +0 -318
  636. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/ocr.mjs +0 -55
  637. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/otel.mjs +0 -260
  638. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/pair-store.mjs +0 -138
  639. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/progress-parser.mjs +0 -221
  640. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/projects-store.mjs +0 -364
  641. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/providers-store.mjs +0 -1801
  642. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/_shared.mjs +0 -447
  643. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/activity.mjs +0 -195
  644. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents-cc.mjs +0 -194
  645. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents.mjs +0 -134
  646. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/artifacts.mjs +0 -279
  647. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/auth.mjs +0 -69
  648. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/background.mjs +0 -422
  649. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/backup.mjs +0 -112
  650. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/chat.mjs +0 -727
  651. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-session-detail.mjs +0 -329
  652. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-sessions.mjs +0 -259
  653. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/clipboard.mjs +0 -173
  654. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/config.mjs +0 -180
  655. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/diagnostics.mjs +0 -50
  656. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/dialogs.mjs +0 -86
  657. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/digests.mjs +0 -82
  658. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/distill.mjs +0 -129
  659. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/doctor.mjs +0 -71
  660. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/env-vars.mjs +0 -231
  661. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/eval.mjs +0 -187
  662. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/fs.mjs +0 -429
  663. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goal-planner.mjs +0 -236
  664. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goals.mjs +0 -212
  665. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/headroom.mjs +0 -126
  666. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/history.mjs +0 -78
  667. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/lightrag.mjs +0 -169
  668. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/memory.mjs +0 -1524
  669. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/minimax.mjs +0 -133
  670. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/misc.mjs +0 -90
  671. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/mods.mjs +0 -359
  672. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/notifications.mjs +0 -54
  673. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/obsidian.mjs +0 -239
  674. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/ocr.mjs +0 -182
  675. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/overview.mjs +0 -92
  676. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/pair.mjs +0 -67
  677. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/projects.mjs +0 -175
  678. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/providers.mjs +0 -308
  679. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/schedules.mjs +0 -159
  680. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/settings.mjs +0 -51
  681. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/skills.mjs +0 -65
  682. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tailscale.mjs +0 -46
  683. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tasks.mjs +0 -518
  684. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/themes.mjs +0 -51
  685. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/update.mjs +0 -340
  686. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/usage.mjs +0 -136
  687. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/users.mjs +0 -102
  688. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/voice.mjs +0 -167
  689. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/workspaces.mjs +0 -299
  690. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/auth.mjs +0 -59
  691. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/events.mjs +0 -121
  692. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/health.mjs +0 -21
  693. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/index.mjs +0 -90
  694. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/sessions.mjs +0 -111
  695. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-runner.mjs +0 -556
  696. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-store.mjs +0 -268
  697. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/search-store.mjs +0 -220
  698. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/serve-info.mjs +0 -1110
  699. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/server.mjs +0 -966
  700. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/settings-store.mjs +0 -45
  701. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/skills-store.mjs +0 -190
  702. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/state.mjs +0 -437
  703. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tailscale-store.mjs +0 -113
  704. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/task-delegator.mjs +0 -969
  705. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tasks-store.mjs +0 -556
  706. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tui.mjs +0 -923
  707. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/update-store.mjs +0 -168
  708. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-auth-file.mjs +0 -99
  709. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-event-bus.mjs +0 -128
  710. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-store.mjs +0 -229
  711. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-transcribe.mjs +0 -72
  712. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/watcher.mjs +0 -81
  713. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workers/transcription-worker.mjs +0 -213
  714. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workspaces.mjs +0 -626
  715. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/yaml.mjs +0 -238
  716. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/App.tsx +0 -200
  717. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/fetcher.ts +0 -59
  718. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/types.ts +0 -168
  719. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useFetch.ts +0 -62
  720. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useWebSocket.ts +0 -153
  721. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/main.tsx +0 -28
  722. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/AppShell.tsx +0 -90
  723. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +0 -29
  724. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Sidebar.tsx +0 -361
  725. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/StatusBar.tsx +0 -63
  726. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Topbar.tsx +0 -113
  727. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/index.ts +0 -15
  728. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +0 -137
  729. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +0 -101
  730. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +0 -158
  731. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +0 -232
  732. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Button.tsx +0 -141
  733. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +0 -32
  734. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +0 -49
  735. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Field.tsx +0 -78
  736. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Form.tsx +0 -23
  737. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +0 -112
  738. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Input.tsx +0 -94
  739. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +0 -74
  740. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Select.tsx +0 -171
  741. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Slider.tsx +0 -68
  742. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Switch.tsx +0 -56
  743. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +0 -64
  744. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +0 -36
  745. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +0 -85
  746. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Accordion.tsx +0 -134
  747. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Avatar.tsx +0 -175
  748. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Badge.tsx +0 -93
  749. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/BarList.tsx +0 -101
  750. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Card.tsx +0 -140
  751. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Chip.tsx +0 -96
  752. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Kbd.tsx +0 -42
  753. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +0 -93
  754. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +0 -98
  755. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/StatTile.tsx +0 -150
  756. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Table.tsx +0 -170
  757. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Timeline.tsx +0 -130
  758. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +0 -122
  759. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +0 -95
  760. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +0 -39
  761. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +0 -143
  762. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +0 -149
  763. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +0 -8
  764. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +0 -231
  765. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +0 -48
  766. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +0 -56
  767. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +0 -103
  768. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +0 -67
  769. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +0 -30
  770. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +0 -66
  771. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +0 -89
  772. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +0 -176
  773. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +0 -245
  774. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +0 -115
  775. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/index.ts +0 -349
  776. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +0 -115
  777. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +0 -391
  778. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +0 -181
  779. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +0 -126
  780. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +0 -638
  781. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +0 -141
  782. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +0 -30
  783. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +0 -161
  784. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +0 -144
  785. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +0 -224
  786. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +0 -81
  787. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +0 -164
  788. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +0 -128
  789. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Box.tsx +0 -144
  790. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Center.tsx +0 -40
  791. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +0 -67
  792. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +0 -104
  793. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +0 -77
  794. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +0 -33
  795. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +0 -62
  796. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +0 -42
  797. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +0 -73
  798. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +0 -49
  799. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +0 -91
  800. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +0 -88
  801. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +0 -109
  802. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/globals.css +0 -220
  803. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/reset.css +0 -57
  804. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/tokens.css +0 -217
  805. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +0 -66
  806. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +0 -94
  807. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +0 -88
  808. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useDensity.ts +0 -15
  809. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useTheme.ts +0 -16
  810. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/utils/cx.ts +0 -19
  811. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +0 -71
  812. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +0 -172
  813. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +0 -247
  814. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +0 -137
  815. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +0 -108
  816. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +0 -77
  817. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +0 -152
  818. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Router.tsx +0 -72
  819. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +0 -330
  820. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +0 -106
  821. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +0 -792
  822. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/vite-env.d.ts +0 -15
  823. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/FORMAT.md +0 -76
  824. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/README.md +0 -19
  825. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/agents/greeter.md +0 -8
  826. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/commands/hello.md +0 -6
  827. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/mod.json +0 -20
  828. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/routes/ping.mjs +0 -9
  829. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/views/HelloView.tsx +0 -10
  830. package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/setup.ts +0 -63
  831. package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/smoke-v2.mjs +0 -212
  832. package/.claude/worktrees/kanban-overhaul/bizar-dash/tsconfig.json +0 -23
  833. package/.claude/worktrees/kanban-overhaul/bizar-dash/vite.config.ts +0 -66
  834. package/.claude/worktrees/kanban-overhaul/bizar-dash/vitest.config.ts +0 -20
  835. package/.claude/worktrees/kanban-overhaul/bizar-plugins/registry.json +0 -62
  836. package/.claude/worktrees/kanban-overhaul/bookmarklet/bizar-clipper.js +0 -48
  837. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/README.md +0 -43
  838. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/background.js +0 -95
  839. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/content.js +0 -170
  840. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-128.png +0 -0
  841. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-16.png +0 -0
  842. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-48.png +0 -0
  843. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon.svg +0 -4
  844. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/manifest.json +0 -32
  845. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.html +0 -66
  846. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.js +0 -110
  847. package/.claude/worktrees/kanban-overhaul/bun.lock +0 -1558
  848. package/.claude/worktrees/kanban-overhaul/cli/agent-browser-up.sh +0 -152
  849. package/.claude/worktrees/kanban-overhaul/cli/agent-browser-update.mjs +0 -322
  850. package/.claude/worktrees/kanban-overhaul/cli/artifact-cli.mjs +0 -605
  851. package/.claude/worktrees/kanban-overhaul/cli/artifact-render.mjs +0 -621
  852. package/.claude/worktrees/kanban-overhaul/cli/artifact-server.mjs +0 -847
  853. package/.claude/worktrees/kanban-overhaul/cli/artifact-templates.mjs +0 -523
  854. package/.claude/worktrees/kanban-overhaul/cli/artifact.mjs +0 -63
  855. package/.claude/worktrees/kanban-overhaul/cli/atomic.mjs +0 -73
  856. package/.claude/worktrees/kanban-overhaul/cli/audit.mjs +0 -141
  857. package/.claude/worktrees/kanban-overhaul/cli/banner.mjs +0 -41
  858. package/.claude/worktrees/kanban-overhaul/cli/bg.mjs +0 -471
  859. package/.claude/worktrees/kanban-overhaul/cli/bin.mjs +0 -698
  860. package/.claude/worktrees/kanban-overhaul/cli/bootstrap.mjs +0 -77
  861. package/.claude/worktrees/kanban-overhaul/cli/commands/artifact.mjs +0 -20
  862. package/.claude/worktrees/kanban-overhaul/cli/commands/claim.mjs +0 -282
  863. package/.claude/worktrees/kanban-overhaul/cli/commands/claude-cmd.mjs +0 -348
  864. package/.claude/worktrees/kanban-overhaul/cli/commands/clip.mjs +0 -163
  865. package/.claude/worktrees/kanban-overhaul/cli/commands/cost.mjs +0 -279
  866. package/.claude/worktrees/kanban-overhaul/cli/commands/dash.mjs +0 -193
  867. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/cloudflare.mjs +0 -250
  868. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/docker.mjs +0 -222
  869. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/fly.mjs +0 -161
  870. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/vercel.mjs +0 -225
  871. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy.mjs +0 -240
  872. package/.claude/worktrees/kanban-overhaul/cli/commands/eval.mjs +0 -396
  873. package/.claude/worktrees/kanban-overhaul/cli/commands/headroom.mjs +0 -204
  874. package/.claude/worktrees/kanban-overhaul/cli/commands/install.mjs +0 -170
  875. package/.claude/worktrees/kanban-overhaul/cli/commands/lightrag.mjs +0 -170
  876. package/.claude/worktrees/kanban-overhaul/cli/commands/marketplace.mjs +0 -64
  877. package/.claude/worktrees/kanban-overhaul/cli/commands/memory.mjs +0 -25
  878. package/.claude/worktrees/kanban-overhaul/cli/commands/minimax.mjs +0 -288
  879. package/.claude/worktrees/kanban-overhaul/cli/commands/mod.mjs +0 -185
  880. package/.claude/worktrees/kanban-overhaul/cli/commands/ocr.mjs +0 -182
  881. package/.claude/worktrees/kanban-overhaul/cli/commands/plugin.mjs +0 -358
  882. package/.claude/worktrees/kanban-overhaul/cli/commands/rca.mjs +0 -198
  883. package/.claude/worktrees/kanban-overhaul/cli/commands/sandbox.mjs +0 -220
  884. package/.claude/worktrees/kanban-overhaul/cli/commands/service.mjs +0 -79
  885. package/.claude/worktrees/kanban-overhaul/cli/commands/setup-provider.mjs +0 -466
  886. package/.claude/worktrees/kanban-overhaul/cli/commands/tailscale.mjs +0 -258
  887. package/.claude/worktrees/kanban-overhaul/cli/commands/usage.mjs +0 -113
  888. package/.claude/worktrees/kanban-overhaul/cli/commands/util.mjs +0 -577
  889. package/.claude/worktrees/kanban-overhaul/cli/commands/validate.mjs +0 -541
  890. package/.claude/worktrees/kanban-overhaul/cli/commands/voice.mjs +0 -211
  891. package/.claude/worktrees/kanban-overhaul/cli/commands/workspace.mjs +0 -247
  892. package/.claude/worktrees/kanban-overhaul/cli/copy.mjs +0 -586
  893. package/.claude/worktrees/kanban-overhaul/cli/cost-gate.mjs +0 -501
  894. package/.claude/worktrees/kanban-overhaul/cli/dev-link.mjs +0 -191
  895. package/.claude/worktrees/kanban-overhaul/cli/digest.mjs +0 -149
  896. package/.claude/worktrees/kanban-overhaul/cli/doctor.mjs +0 -217
  897. package/.claude/worktrees/kanban-overhaul/cli/export.mjs +0 -95
  898. package/.claude/worktrees/kanban-overhaul/cli/feature-list-bridge.mjs +0 -400
  899. package/.claude/worktrees/kanban-overhaul/cli/heads-up.mjs +0 -295
  900. package/.claude/worktrees/kanban-overhaul/cli/init.mjs +0 -368
  901. package/.claude/worktrees/kanban-overhaul/cli/install.mjs +0 -640
  902. package/.claude/worktrees/kanban-overhaul/cli/memory-constants.mjs +0 -76
  903. package/.claude/worktrees/kanban-overhaul/cli/memory.mjs +0 -1850
  904. package/.claude/worktrees/kanban-overhaul/cli/plugin-runtime-deps.mjs +0 -250
  905. package/.claude/worktrees/kanban-overhaul/cli/post-install-smoke.mjs +0 -256
  906. package/.claude/worktrees/kanban-overhaul/cli/prompts.mjs +0 -168
  907. package/.claude/worktrees/kanban-overhaul/cli/providers-detect.mjs +0 -233
  908. package/.claude/worktrees/kanban-overhaul/cli/provision-claude.mjs +0 -1176
  909. package/.claude/worktrees/kanban-overhaul/cli/provision.mjs +0 -2233
  910. package/.claude/worktrees/kanban-overhaul/cli/repair.mjs +0 -209
  911. package/.claude/worktrees/kanban-overhaul/cli/service-controller.mjs +0 -927
  912. package/.claude/worktrees/kanban-overhaul/cli/service-env.mjs +0 -139
  913. package/.claude/worktrees/kanban-overhaul/cli/service.mjs +0 -492
  914. package/.claude/worktrees/kanban-overhaul/cli/update.mjs +0 -29
  915. package/.claude/worktrees/kanban-overhaul/cli/utils.mjs +0 -221
  916. package/.claude/worktrees/kanban-overhaul/cli/worker-dispatcher.mjs +0 -259
  917. package/.claude/worktrees/kanban-overhaul/config/AGENTS.md +0 -595
  918. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/AGENT_BASELINE.md +0 -155
  919. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/CLINE_TOOLS.md +0 -398
  920. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/SKILLS.md +0 -109
  921. package/.claude/worktrees/kanban-overhaul/config/agents/agent-browser.md +0 -90
  922. package/.claude/worktrees/kanban-overhaul/config/agents/baldr.md +0 -60
  923. package/.claude/worktrees/kanban-overhaul/config/agents/forseti.md +0 -60
  924. package/.claude/worktrees/kanban-overhaul/config/agents/frigg.md +0 -52
  925. package/.claude/worktrees/kanban-overhaul/config/agents/heimdall.md +0 -44
  926. package/.claude/worktrees/kanban-overhaul/config/agents/hermod.md +0 -64
  927. package/.claude/worktrees/kanban-overhaul/config/agents/mimir.md +0 -60
  928. package/.claude/worktrees/kanban-overhaul/config/agents/odin.md +0 -310
  929. package/.claude/worktrees/kanban-overhaul/config/agents/quick.md +0 -47
  930. package/.claude/worktrees/kanban-overhaul/config/agents/semble-search.md +0 -59
  931. package/.claude/worktrees/kanban-overhaul/config/agents/thor.md +0 -64
  932. package/.claude/worktrees/kanban-overhaul/config/agents/tyr.md +0 -67
  933. package/.claude/worktrees/kanban-overhaul/config/agents/vidarr.md +0 -65
  934. package/.claude/worktrees/kanban-overhaul/config/agents/vor.md +0 -62
  935. package/.claude/worktrees/kanban-overhaul/config/commands/audit.md +0 -5
  936. package/.claude/worktrees/kanban-overhaul/config/commands/bizar.md +0 -22
  937. package/.claude/worktrees/kanban-overhaul/config/commands/explain.md +0 -5
  938. package/.claude/worktrees/kanban-overhaul/config/commands/init.md +0 -26
  939. package/.claude/worktrees/kanban-overhaul/config/commands/learn.md +0 -5
  940. package/.claude/worktrees/kanban-overhaul/config/commands/plan.md +0 -30
  941. package/.claude/worktrees/kanban-overhaul/config/commands/plow-through.md +0 -47
  942. package/.claude/worktrees/kanban-overhaul/config/commands/pr-review.md +0 -5
  943. package/.claude/worktrees/kanban-overhaul/config/commands/setup-provider.md +0 -95
  944. package/.claude/worktrees/kanban-overhaul/config/commands/tailscale-serve.md +0 -97
  945. package/.claude/worktrees/kanban-overhaul/config/commands/team.md +0 -124
  946. package/.claude/worktrees/kanban-overhaul/config/commands/test.md +0 -60
  947. package/.claude/worktrees/kanban-overhaul/config/commands/validate.md +0 -66
  948. package/.claude/worktrees/kanban-overhaul/config/commands/visual-plan.md +0 -19
  949. package/.claude/worktrees/kanban-overhaul/config/hooks/PostToolUse +0 -66
  950. package/.claude/worktrees/kanban-overhaul/config/hooks/PreToolUse +0 -82
  951. package/.claude/worktrees/kanban-overhaul/config/hooks/README.md +0 -68
  952. package/.claude/worktrees/kanban-overhaul/config/hooks/TaskResume +0 -48
  953. package/.claude/worktrees/kanban-overhaul/config/hooks/TaskStart +0 -47
  954. package/.claude/worktrees/kanban-overhaul/config/hooks/UserPromptSubmit +0 -55
  955. package/.claude/worktrees/kanban-overhaul/config/rules/general.md +0 -9
  956. package/.claude/worktrees/kanban-overhaul/config/rules/git.md +0 -11
  957. package/.claude/worktrees/kanban-overhaul/config/rules/javascript.md +0 -10
  958. package/.claude/worktrees/kanban-overhaul/config/rules/python.md +0 -10
  959. package/.claude/worktrees/kanban-overhaul/config/rules/testing.md +0 -10
  960. package/.claude/worktrees/kanban-overhaul/config/rules/thinking.md +0 -56
  961. package/.claude/worktrees/kanban-overhaul/config/rules/uncertainty.md +0 -70
  962. package/.claude/worktrees/kanban-overhaul/config/skills/9router/SKILL.md +0 -80
  963. package/.claude/worktrees/kanban-overhaul/config/skills/9router-chat/SKILL.md +0 -73
  964. package/.claude/worktrees/kanban-overhaul/config/skills/9router-embeddings/SKILL.md +0 -69
  965. package/.claude/worktrees/kanban-overhaul/config/skills/9router-image/SKILL.md +0 -86
  966. package/.claude/worktrees/kanban-overhaul/config/skills/9router-stt/SKILL.md +0 -79
  967. package/.claude/worktrees/kanban-overhaul/config/skills/9router-tts/SKILL.md +0 -80
  968. package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-fetch/SKILL.md +0 -99
  969. package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-search/SKILL.md +0 -91
  970. package/.claude/worktrees/kanban-overhaul/config/skills/bizar/README.md +0 -9
  971. package/.claude/worktrees/kanban-overhaul/config/skills/bizar/SKILL.md +0 -447
  972. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/README.md +0 -28
  973. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/SKILL.md +0 -634
  974. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/agents/openai.yaml +0 -4
  975. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/concurrency.md +0 -320
  976. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/error-handling.md +0 -229
  977. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  978. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  979. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  980. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/README.md +0 -28
  981. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/SKILL.md +0 -304
  982. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/agents/openai.yaml +0 -4
  983. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/coverage.md +0 -370
  984. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/framework-compare.md +0 -175
  985. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  986. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/mocking.md +0 -364
  987. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/tdd-workflow.md +0 -308
  988. package/.claude/worktrees/kanban-overhaul/config/skills/cubesandbox/SKILL.md +0 -148
  989. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/README.md +0 -41
  990. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/SKILL.md +0 -439
  991. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/agents/openai.yaml +0 -4
  992. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  993. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/host-tests.md +0 -164
  994. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  995. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/kconfig.md +0 -159
  996. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  997. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  998. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/nvs.md +0 -121
  999. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  1000. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  1001. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  1002. package/.claude/worktrees/kanban-overhaul/config/skills/glyph/SKILL.md +0 -163
  1003. package/.claude/worktrees/kanban-overhaul/config/skills/harness-engineering/SKILL.md +0 -142
  1004. package/.claude/worktrees/kanban-overhaul/config/skills/lightrag/SKILL.md +0 -81
  1005. package/.claude/worktrees/kanban-overhaul/config/skills/memory-protocol/SKILL.md +0 -105
  1006. package/.claude/worktrees/kanban-overhaul/config/skills/obsidian/SKILL.md +0 -306
  1007. package/.claude/worktrees/kanban-overhaul/config/skills/read-the-damn-docs/SKILL.md +0 -113
  1008. package/.claude/worktrees/kanban-overhaul/config/skills/self-improvement/SKILL.md +0 -64
  1009. package/.claude/worktrees/kanban-overhaul/config/trigger-patterns.json +0 -186
  1010. package/.claude/worktrees/kanban-overhaul/docker-compose.yml +0 -50
  1011. package/.claude/worktrees/kanban-overhaul/docs/A11Y.md +0 -81
  1012. package/.claude/worktrees/kanban-overhaul/docs/DEPLOY.md +0 -360
  1013. package/.claude/worktrees/kanban-overhaul/docs/DOCKER.md +0 -250
  1014. package/.claude/worktrees/kanban-overhaul/docs/INDEX.md +0 -223
  1015. package/.claude/worktrees/kanban-overhaul/docs/PLUGIN_REGISTRY.md +0 -107
  1016. package/.claude/worktrees/kanban-overhaul/docs/RELEASING.md +0 -693
  1017. package/.claude/worktrees/kanban-overhaul/docs/architecture.md +0 -317
  1018. package/.claude/worktrees/kanban-overhaul/docs/code-review.md +0 -242
  1019. package/.claude/worktrees/kanban-overhaul/docs/curator.md +0 -144
  1020. package/.claude/worktrees/kanban-overhaul/docs/dashboard-ui-migration.md +0 -807
  1021. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-001-cline-rewrite.md +0 -114
  1022. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-002-in-process-clinecore.md +0 -139
  1023. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-003-in-process-memory-vault.md +0 -101
  1024. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-004-cline-agent-teams.md +0 -112
  1025. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-005-bg-agents-via-dashboard.md +0 -77
  1026. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-006-kanban-board.md +0 -69
  1027. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-007-tool-approval-gate.md +0 -147
  1028. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-008-skill-curator.md +0 -100
  1029. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-009-pre-compaction-flush.md +0 -106
  1030. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-010-knowledge-graph-tools.md +0 -95
  1031. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-011-claude-code-migration.md +0 -172
  1032. package/.claude/worktrees/kanban-overhaul/docs/graph-tools.md +0 -130
  1033. package/.claude/worktrees/kanban-overhaul/docs/migration-guide.md +0 -471
  1034. package/.claude/worktrees/kanban-overhaul/docs/migrations/cline-replacement.md +0 -118
  1035. package/.claude/worktrees/kanban-overhaul/docs/postmortems/2026-06-18-plugin-state-deadlock.md +0 -250
  1036. package/.claude/worktrees/kanban-overhaul/docs/quality-document.md +0 -74
  1037. package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.2.md +0 -66
  1038. package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.4.md +0 -85
  1039. package/.claude/worktrees/kanban-overhaul/docs/releases/v2.3.0.md +0 -96
  1040. package/.claude/worktrees/kanban-overhaul/docs/releases/v3.24.0.md +0 -155
  1041. package/.claude/worktrees/kanban-overhaul/docs/releases/v4.0.0.md +0 -123
  1042. package/.claude/worktrees/kanban-overhaul/docs/releases/v7.0.0.md +0 -173
  1043. package/.claude/worktrees/kanban-overhaul/docs/safety.md +0 -216
  1044. package/.claude/worktrees/kanban-overhaul/feature_list.json +0 -1297
  1045. package/.claude/worktrees/kanban-overhaul/init.sh +0 -211
  1046. package/.claude/worktrees/kanban-overhaul/install.sh +0 -498
  1047. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/INSTRUCTIONS.md +0 -82
  1048. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/mod.json +0 -37
  1049. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/route.mjs +0 -136
  1050. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/web/index.html +0 -180
  1051. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/INSTRUCTIONS.md +0 -81
  1052. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/mod.json +0 -61
  1053. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/route.mjs +0 -461
  1054. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/web/index.html +0 -263
  1055. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/INSTRUCTIONS.md +0 -87
  1056. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/agents/thor.md +0 -64
  1057. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/mod.json +0 -36
  1058. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/route.mjs +0 -98
  1059. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/web/index.html +0 -126
  1060. package/.claude/worktrees/kanban-overhaul/package.json +0 -154
  1061. package/.claude/worktrees/kanban-overhaul/packages/sdk/ARCHITECTURE.md +0 -70
  1062. package/.claude/worktrees/kanban-overhaul/packages/sdk/LICENSE +0 -21
  1063. package/.claude/worktrees/kanban-overhaul/packages/sdk/README.md +0 -80
  1064. package/.claude/worktrees/kanban-overhaul/packages/sdk/package.json +0 -30
  1065. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/agent-registry.ts +0 -304
  1066. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/byzantine.ts +0 -587
  1067. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/index.ts +0 -147
  1068. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/queen.ts +0 -173
  1069. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/types.ts +0 -199
  1070. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/dangerous-patterns.ts +0 -127
  1071. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/audit.ts +0 -156
  1072. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/budget.ts +0 -269
  1073. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/envelope.ts +0 -144
  1074. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/hmac.ts +0 -160
  1075. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/index.ts +0 -443
  1076. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/pii.ts +0 -241
  1077. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/policy.ts +0 -112
  1078. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/trust.ts +0 -146
  1079. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/fingerprint.ts +0 -0
  1080. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/index.ts +0 -114
  1081. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/bin.ts +0 -51
  1082. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/server.ts +0 -848
  1083. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/memory/index.ts +0 -160
  1084. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/codemod-intent.ts +0 -125
  1085. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/index.ts +0 -247
  1086. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation-shim.mjs +0 -18
  1087. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation.ts +0 -249
  1088. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/model-router.ts +0 -235
  1089. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/q-learning-router.ts +0 -304
  1090. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/swarm-topology.ts +0 -279
  1091. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/version.ts +0 -4
  1092. package/.claude/worktrees/kanban-overhaul/packages/sdk/tsconfig.json +0 -25
  1093. package/.claude/worktrees/kanban-overhaul/packages/sdk/vitest.config.ts +0 -9
  1094. package/.claude/worktrees/kanban-overhaul/plugins/bizar/ARCHITECTURE.md +0 -72
  1095. package/.claude/worktrees/kanban-overhaul/plugins/bizar/CONSTRAINTS.md +0 -62
  1096. package/.claude/worktrees/kanban-overhaul/plugins/bizar/LICENSE +0 -21
  1097. package/.claude/worktrees/kanban-overhaul/plugins/bizar/README.md +0 -46
  1098. package/.claude/worktrees/kanban-overhaul/plugins/bizar/index.ts +0 -50
  1099. package/.claude/worktrees/kanban-overhaul/plugins/bizar/package.json +0 -18
  1100. package/.claude/worktrees/kanban-overhaul/plugins/bizar/tsconfig.json +0 -29
  1101. package/.claude/worktrees/kanban-overhaul/scripts/bh-full-e2e.mjs +0 -298
  1102. package/.claude/worktrees/kanban-overhaul/scripts/check-agents.mjs +0 -73
  1103. package/.claude/worktrees/kanban-overhaul/scripts/check-arch.sh +0 -80
  1104. package/.claude/worktrees/kanban-overhaul/scripts/check-deps.mjs +0 -492
  1105. package/.claude/worktrees/kanban-overhaul/scripts/clean-state-check.sh +0 -81
  1106. package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-commit +0 -59
  1107. package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-push +0 -54
  1108. package/.claude/worktrees/kanban-overhaul/scripts/install-hooks.sh +0 -29
  1109. package/.claude/worktrees/kanban-overhaul/scripts/install-service.mjs +0 -190
  1110. package/.claude/worktrees/kanban-overhaul/scripts/mirror-claude-md.sh +0 -78
  1111. package/.claude/worktrees/kanban-overhaul/scripts/session-trace.sh +0 -52
  1112. package/.claude/worktrees/kanban-overhaul/scripts/test-in-container.sh +0 -157
  1113. package/.claude/worktrees/kanban-overhaul/scripts/verify-feature.sh +0 -102
  1114. package/.claude/worktrees/kanban-overhaul/skills-lock.json +0 -11
  1115. package/.claude/worktrees/kanban-overhaul/templates/clean-state-checklist.md +0 -55
  1116. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/README.md +0 -32
  1117. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/functions-index.template.js +0 -15
  1118. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/wrangler.toml.template +0 -9
  1119. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/.env.template +0 -16
  1120. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/README.md +0 -58
  1121. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/docker-compose.template.yml +0 -23
  1122. package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/README.md +0 -35
  1123. package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/fly.toml.template +0 -28
  1124. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/README.md +0 -29
  1125. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/api-index.template.js +0 -18
  1126. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/vercel.json.template +0 -16
  1127. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/README.md +0 -58
  1128. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/citation.json +0 -16
  1129. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-review.json +0 -16
  1130. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-search-basic.json +0 -28
  1131. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/concise-output.json +0 -16
  1132. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/context-window.json +0 -16
  1133. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/error-recovery.json +0 -16
  1134. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/json-output.json +0 -20
  1135. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/latency-bounds.json +0 -16
  1136. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/multi-language.json +0 -16
  1137. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/regression-suite.json +0 -79
  1138. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/response-format.json +0 -30
  1139. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/safe-paths.json +0 -16
  1140. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-correctness.json +0 -24
  1141. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-multi-step.json +0 -18
  1142. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/unicode-handling.json +0 -16
  1143. package/.claude/worktrees/kanban-overhaul/templates/evaluator-rubric.md +0 -50
  1144. package/.claude/worktrees/kanban-overhaul/templates/plan/htmx.min.js +0 -1
  1145. package/.claude/worktrees/kanban-overhaul/templates/plan/library/bug-investigation.mdx +0 -79
  1146. package/.claude/worktrees/kanban-overhaul/templates/plan/library/decision-record.mdx +0 -71
  1147. package/.claude/worktrees/kanban-overhaul/templates/plan/library/feature-design.mdx +0 -92
  1148. package/.claude/worktrees/kanban-overhaul/templates/plan/meta.json.template +0 -8
  1149. package/.claude/worktrees/kanban-overhaul/templates/plan/plan.mdx.template +0 -46
  1150. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/README.md +0 -121
  1151. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/index.js +0 -66
  1152. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/plugin.json +0 -42
  1153. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/tests/plugin.test.js +0 -83
  1154. package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-backup.json +0 -12
  1155. package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-cleanup.json +0 -12
  1156. package/.claude/worktrees/kanban-overhaul/templates/schedules/hourly-health-check.json +0 -12
  1157. package/.claude/worktrees/kanban-overhaul/templates/schedules/webhook-on-push.json +0 -13
  1158. package/.claude/worktrees/kanban-overhaul/templates/schedules/weekly-digest.json +0 -13
  1159. package/.claude/worktrees/kanban-overhaul/templates/sprint-contract.md +0 -47
  1160. package/.claude/worktrees/kanban-overhaul/tsconfig.json +0 -44
  1161. package/.claude/worktrees/kanban-overhaul/vite.config.ts +0 -51
  1162. package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js +0 -16
  1163. package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js.map +0 -1
  1164. package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js +0 -12
  1165. package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js.map +0 -1
  1166. package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js +0 -23
  1167. package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js.map +0 -1
  1168. package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js +0 -6
  1169. package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js.map +0 -1
  1170. package/bizar-dash/dist/assets/Card-CeZsWlcP.js +0 -1
  1171. package/bizar-dash/dist/assets/Card-CeZsWlcP.js.map +0 -1
  1172. package/bizar-dash/dist/assets/Chip-OPjSKl2I.js +0 -1
  1173. package/bizar-dash/dist/assets/Chip-OPjSKl2I.js.map +0 -1
  1174. package/bizar-dash/dist/assets/EmptyState-BrLA8mbE.js +0 -1
  1175. package/bizar-dash/dist/assets/EmptyState-BrLA8mbE.js.map +0 -1
  1176. package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js +0 -11
  1177. package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js.map +0 -1
  1178. package/bizar-dash/dist/assets/Grid-B7NgNtff.js +0 -1
  1179. package/bizar-dash/dist/assets/Grid-B7NgNtff.js.map +0 -1
  1180. package/bizar-dash/dist/assets/Input-BW_5Sl6N.js +0 -1
  1181. package/bizar-dash/dist/assets/Input-BW_5Sl6N.js.map +0 -1
  1182. package/bizar-dash/dist/assets/KanbanCard-B-NOSfMN.js +0 -21
  1183. package/bizar-dash/dist/assets/KanbanCard-B-NOSfMN.js.map +0 -1
  1184. package/bizar-dash/dist/assets/LibrariesView-D6eB7B2A.js +0 -67
  1185. package/bizar-dash/dist/assets/LibrariesView-D6eB7B2A.js.map +0 -1
  1186. package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js +0 -13
  1187. package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js.map +0 -1
  1188. package/bizar-dash/dist/assets/OverviewView-CHavfYBa.js +0 -1
  1189. package/bizar-dash/dist/assets/OverviewView-CHavfYBa.js.map +0 -1
  1190. package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js +0 -1
  1191. package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js.map +0 -1
  1192. package/bizar-dash/dist/assets/Select-B6Ho36Tq.js +0 -11
  1193. package/bizar-dash/dist/assets/Select-B6Ho36Tq.js.map +0 -1
  1194. package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js +0 -1
  1195. package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js.map +0 -1
  1196. package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js +0 -38
  1197. package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js.map +0 -1
  1198. package/bizar-dash/dist/assets/Sheet-Cmu_4Zea.js +0 -1
  1199. package/bizar-dash/dist/assets/Sheet-Cmu_4Zea.js.map +0 -1
  1200. package/bizar-dash/dist/assets/Slider-B_jPr-SR.js +0 -1
  1201. package/bizar-dash/dist/assets/Slider-B_jPr-SR.js.map +0 -1
  1202. package/bizar-dash/dist/assets/Sparkline-Cmqw0N39.js +0 -1
  1203. package/bizar-dash/dist/assets/Sparkline-Cmqw0N39.js.map +0 -1
  1204. package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js +0 -10
  1205. package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js.map +0 -1
  1206. package/bizar-dash/dist/assets/TasksView-BXADmjgb.js +0 -1
  1207. package/bizar-dash/dist/assets/TasksView-BXADmjgb.js.map +0 -1
  1208. package/bizar-dash/dist/assets/Textarea-KIN98DVH.js +0 -1
  1209. package/bizar-dash/dist/assets/Textarea-KIN98DVH.js.map +0 -1
  1210. package/bizar-dash/dist/assets/ViewHeader-CPbqI-w8.js +0 -6
  1211. package/bizar-dash/dist/assets/ViewHeader-CPbqI-w8.js.map +0 -1
  1212. package/bizar-dash/dist/assets/brain-jN_ldx3U.js +0 -6
  1213. package/bizar-dash/dist/assets/brain-jN_ldx3U.js.map +0 -1
  1214. package/bizar-dash/dist/assets/calendar-DZGgPP2_.js +0 -6
  1215. package/bizar-dash/dist/assets/calendar-DZGgPP2_.js.map +0 -1
  1216. package/bizar-dash/dist/assets/circle-check-XhUtiACZ.js +0 -6
  1217. package/bizar-dash/dist/assets/circle-check-XhUtiACZ.js.map +0 -1
  1218. package/bizar-dash/dist/assets/clock-BXBnSbox.js +0 -6
  1219. package/bizar-dash/dist/assets/clock-BXBnSbox.js.map +0 -1
  1220. package/bizar-dash/dist/assets/cmdk-D15rXxc5.js +0 -80
  1221. package/bizar-dash/dist/assets/cmdk-D15rXxc5.js.map +0 -1
  1222. package/bizar-dash/dist/assets/dnd-kit-Bormfg7j.js +0 -5
  1223. package/bizar-dash/dist/assets/dnd-kit-Bormfg7j.js.map +0 -1
  1224. package/bizar-dash/dist/assets/git-pull-request-BCt0CEjc.js +0 -11
  1225. package/bizar-dash/dist/assets/git-pull-request-BCt0CEjc.js.map +0 -1
  1226. package/bizar-dash/dist/assets/index-C0JBGB5M.js +0 -1
  1227. package/bizar-dash/dist/assets/index-C0JBGB5M.js.map +0 -1
  1228. package/bizar-dash/dist/assets/index-CrWI7sQR.js +0 -1
  1229. package/bizar-dash/dist/assets/index-CrWI7sQR.js.map +0 -1
  1230. package/bizar-dash/dist/assets/main-CCimEcWH.js +0 -134
  1231. package/bizar-dash/dist/assets/main-CCimEcWH.js.map +0 -1
  1232. package/bizar-dash/dist/assets/play-B0rTjpSg.js +0 -6
  1233. package/bizar-dash/dist/assets/play-B0rTjpSg.js.map +0 -1
  1234. package/bizar-dash/dist/assets/plus-BaTQsS9G.js +0 -6
  1235. package/bizar-dash/dist/assets/plus-BaTQsS9G.js.map +0 -1
  1236. package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js +0 -6
  1237. package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js.map +0 -1
  1238. package/bizar-dash/dist/assets/terminal-k-1HFHcN.js +0 -11
  1239. package/bizar-dash/dist/assets/terminal-k-1HFHcN.js.map +0 -1
  1240. package/bizar-dash/dist/assets/trash-2-DtpKnAn2.js +0 -6
  1241. package/bizar-dash/dist/assets/trash-2-DtpKnAn2.js.map +0 -1
  1242. package/bizar-dash/dist/assets/triangle-alert-FHSs_e5b.js +0 -6
  1243. package/bizar-dash/dist/assets/triangle-alert-FHSs_e5b.js.map +0 -1
  1244. package/bizar-dash/dist/assets/wrench-CbBE0oQ0.js +0 -6
  1245. package/bizar-dash/dist/assets/wrench-CbBE0oQ0.js.map +0 -1
  1246. package/bizar-dash/dist/v8.html +0 -19
  1247. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +0 -106
  1248. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +0 -62
  1249. package/bizar-dash/src/web/v8.html +0 -17
  1250. package/packages/sdk/.harness/agents.json +0 -17
  1251. package/packages/sdk/.harness/topology.json +0 -4
  1252. package/packages/sdk/ARCHITECTURE.md +0 -70
  1253. package/packages/sdk/README.md +0 -80
  1254. package/packages/sdk/src/agent-registry.ts +0 -304
  1255. package/packages/sdk/src/consensus/byzantine.ts +0 -587
  1256. package/packages/sdk/src/consensus/index.ts +0 -147
  1257. package/packages/sdk/src/consensus/queen.ts +0 -173
  1258. package/packages/sdk/src/consensus/types.ts +0 -199
  1259. package/packages/sdk/src/dangerous-patterns.ts +0 -127
  1260. package/packages/sdk/src/federation/audit.ts +0 -156
  1261. package/packages/sdk/src/federation/budget.ts +0 -269
  1262. package/packages/sdk/src/federation/envelope.ts +0 -144
  1263. package/packages/sdk/src/federation/hmac.ts +0 -160
  1264. package/packages/sdk/src/federation/index.ts +0 -443
  1265. package/packages/sdk/src/federation/pii.ts +0 -241
  1266. package/packages/sdk/src/federation/policy.ts +0 -112
  1267. package/packages/sdk/src/federation/trust.ts +0 -146
  1268. package/packages/sdk/src/fingerprint.ts +0 -0
  1269. package/packages/sdk/src/index.ts +0 -114
  1270. package/packages/sdk/src/mcp/bin.ts +0 -51
  1271. package/packages/sdk/src/mcp/server.ts +0 -848
  1272. package/packages/sdk/src/memory/index.ts +0 -160
  1273. package/packages/sdk/src/router/codemod-intent.ts +0 -125
  1274. package/packages/sdk/src/router/index.ts +0 -247
  1275. package/packages/sdk/src/router/memory-distillation-shim.mjs +0 -18
  1276. package/packages/sdk/src/router/memory-distillation.ts +0 -249
  1277. package/packages/sdk/src/router/model-router.ts +0 -235
  1278. package/packages/sdk/src/router/q-learning-router.ts +0 -304
  1279. package/packages/sdk/src/swarm-topology.ts +0 -279
  1280. package/packages/sdk/src/version.ts +0 -4
  1281. package/packages/sdk/tests/agent-registry.test.ts +0 -285
  1282. package/packages/sdk/tests/consensus.test.ts +0 -376
  1283. package/packages/sdk/tests/federation/audit.test.ts +0 -164
  1284. package/packages/sdk/tests/federation/budget.test.ts +0 -189
  1285. package/packages/sdk/tests/federation/envelope.test.ts +0 -120
  1286. package/packages/sdk/tests/federation/hmac.test.ts +0 -194
  1287. package/packages/sdk/tests/federation/orchestrator.test.ts +0 -176
  1288. package/packages/sdk/tests/federation/pii.test.ts +0 -106
  1289. package/packages/sdk/tests/federation/policy.test.ts +0 -140
  1290. package/packages/sdk/tests/federation/trust.test.ts +0 -124
  1291. package/packages/sdk/tests/mcp-tools.test.ts +0 -204
  1292. package/packages/sdk/tests/memory-distillation.test.mjs +0 -186
  1293. package/packages/sdk/tests/model-router.test.mjs +0 -108
  1294. package/packages/sdk/tests/q-learning-router.test.mjs +0 -100
  1295. package/packages/sdk/tests/router-orchestrator.test.mjs +0 -172
  1296. package/packages/sdk/tests/router.test.mjs +0 -91
  1297. package/packages/sdk/tests/sdk.test.mjs +0 -172
  1298. package/packages/sdk/tests/swarm-topology.test.ts +0 -258
  1299. package/packages/sdk/tsconfig.json +0 -25
  1300. /package/{.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8.html → bizar-dash/src/web/index.html} +0 -0
  1301. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanCardBadges.tsx +0 -0
  1302. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanEmptyColumn.tsx +0 -0
  1303. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanProgress.tsx +0 -0
  1304. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanToolbar.tsx +0 -0
  1305. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/useKanbanSelection.ts +0 -0
  1306. /package/{.claude/worktrees/kanban-overhaul → plugins/bizar}/LICENSE +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchedulesView-CcwDQ9Nm.js","sources":["../../src/web/v8/views/Schedules/SchedulesView.tsx"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport { Plus, Play, Power, Trash2, RefreshCw, Clock, type LucideIcon } 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 { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { Card, CardBody } from '../../ui/data/Card.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Switch } from '../../ui/controls/Switch.js';\nimport { Textarea } from '../../ui/controls/Textarea.js';\nimport { Sheet, SheetContent } from '../../ui/feedback/Sheet.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\n\n/**\n * SchedulesView — recurring / one-time job management.\n *\n * Renders `/api/schedules` (list), lets users toggle enabled, run on\n * demand, create new schedules (interval / cron / once), and delete.\n */\n\ntype ScheduleType = 'interval' | 'cron' | 'once';\n\ninterface ScheduleAction {\n type: string;\n prompt?: string;\n agent?: string;\n command?: string;\n [key: string]: unknown;\n}\n\ninterface Schedule {\n id: string;\n name: string;\n type: ScheduleType;\n schedule: string;\n timezone: string;\n enabled: boolean;\n createdAt: string;\n updatedAt: string;\n lastRun: string | null;\n lastResult: unknown;\n lastError: unknown;\n nextRun: string | null;\n action: ScheduleAction;\n budgetCheck?: { maxConcurrent: number; skipIfBudgetLow: boolean };\n}\n\ninterface SchedulesResponse extends Array<Schedule> {}\n\ninterface CreateDraft {\n id?: string;\n name: string;\n type: ScheduleType;\n schedule: string;\n timezone: string;\n actionType: string;\n prompt: string;\n}\n\nconst TYPE_LABEL: Record<ScheduleType, string> = {\n interval: 'Interval',\n cron: 'Cron',\n once: 'One-time',\n};\n\nconst TYPE_ICON: Record<ScheduleType, LucideIcon> = {\n interval: RefreshCw,\n cron: Clock,\n once: Play,\n};\n\nfunction StatusBadge({ sched }: { sched: Schedule }): JSX.Element {\n if (!sched.enabled) return <Badge tone=\"neutral\">disabled</Badge>;\n if (sched.lastError) return <Badge tone=\"danger\">error</Badge>;\n if (sched.lastRun === null) return <Badge tone=\"info\">never run</Badge>;\n return <Badge tone=\"success\">active</Badge>;\n}\n\nfunction Box(props: { children?: React.ReactNode; style?: React.CSSProperties }): JSX.Element {\n return <div style={props.style}>{props.children}</div>;\n}\n\nexport function SchedulesView(): JSX.Element {\n const res = useFetch<SchedulesResponse>('/api/schedules');\n const [live, setLive] = useState<Schedule[]>([]);\n const [draft, setDraft] = useState<CreateDraft | null>(null);\n const [busy, setBusy] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n\n useWsMessage('schedules:change', useCallback(() => { void res.refetch(); }, [res]));\n\n const schedules = useMemo<Schedule[]>(() => [...live, ...(res.data || [])], [live, res.data]);\n\n const refresh = (): void => { void res.refetch(); };\n\n const toggleEnabled = async (s: Schedule): Promise<void> => {\n setActionError(null);\n try {\n await fetchJson(`/api/schedules/${encodeURIComponent(s.id)}`, {\n method: 'PATCH',\n body: { enabled: !s.enabled },\n });\n refresh();\n } catch (err) {\n setActionError(err instanceof FetchError ? err.message : String(err));\n }\n };\n\n const runNow = async (s: Schedule): Promise<void> => {\n setActionError(null);\n setBusy(true);\n try {\n await fetchJson(`/api/schedules/${encodeURIComponent(s.id)}/run`, { method: 'POST' });\n refresh();\n } catch (err) {\n setActionError(err instanceof FetchError ? err.message : String(err));\n } finally {\n setBusy(false);\n }\n };\n\n const deleteSchedule = async (id: string): Promise<void> => {\n setActionError(null);\n setBusy(true);\n try {\n await fetchJson(`/api/schedules/${encodeURIComponent(id)}`, { method: 'DELETE' });\n refresh();\n } catch (err) {\n setActionError(err instanceof FetchError ? err.message : String(err));\n } finally {\n setBusy(false);\n }\n };\n\n const createSchedule = async (): Promise<void> => {\n if (!draft || !draft.name.trim() || !draft.schedule.trim()) return;\n setBusy(true);\n setError(null);\n try {\n const action: ScheduleAction = { type: draft.actionType };\n if (draft.actionType === 'agent') action.prompt = draft.prompt;\n if (draft.actionType === 'command') action.command = draft.prompt;\n if (draft.id) {\n // Edit path — PATCH the existing schedule.\n await fetchJson(`/api/schedules/${encodeURIComponent(draft.id)}`, {\n method: 'PATCH',\n body: {\n name: draft.name,\n type: draft.type,\n schedule: draft.schedule,\n timezone: draft.timezone || 'UTC',\n action,\n },\n });\n } else {\n await fetchJson('/api/schedules', {\n method: 'POST',\n body: {\n name: draft.name,\n type: draft.type,\n schedule: draft.schedule,\n timezone: draft.timezone || 'UTC',\n action,\n enabled: true,\n },\n });\n }\n setDraft(null);\n refresh();\n } catch (err) {\n setError(err instanceof FetchError ? err.message : String(err));\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Stack gap={5} data-testid=\"schedules-view\">\n <ViewHeader\n title=\"Schedules\"\n description=\"Recurring and one-time jobs. Toggle enabled, run on demand, or create new.\"\n actions={\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={() => setDraft({ name: '', type: 'interval', schedule: '1h', timezone: 'UTC', actionType: 'agent', prompt: '' })}\n data-testid=\"schedules-new\"\n >\n <Plus size={14} aria-hidden /> New schedule\n </Button>\n }\n />\n\n {actionError !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-2) 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)', color: 'var(--danger)' }}>\n {actionError}\n </div>\n )}\n\n {res.loading && schedules.length === 0 ? (\n <Skeleton style={{ height: 240 }} />\n ) : schedules.length === 0 ? (\n <Card>\n <CardBody>\n <Stack gap={1} align=\"center\">\n <Clock size={32} aria-hidden style={{ color: 'var(--fg-muted)' }} />\n <strong>No schedules yet</strong>\n <span style={{ color: 'var(--fg-muted)', fontSize: 'var(--fs-13)' }}>\n Create one with the button above.\n </span>\n </Stack>\n </CardBody>\n </Card>\n ) : (\n <Stack gap={3}>\n {schedules.map((s) => {\n const TypeIcon = TYPE_ICON[s.type] ?? Clock;\n return (\n <Card key={s.id} data-testid={`schedule-${s.id}`}>\n <CardBody>\n <Grid cols={4} gap={3} style={{ alignItems: 'center' }}>\n <Stack gap={1}>\n <Inline align=\"center\" gap={2}>\n <TypeIcon size={12} aria-hidden style={{ color: 'var(--fg-muted)' }} />\n <strong style={{ fontSize: 'var(--fs-14)' }}>{s.name}</strong>\n </Inline>\n <Inline gap={2}>\n <Badge tone=\"neutral\">{TYPE_LABEL[s.type]}</Badge>\n <StatusBadge sched={s} />\n </Inline>\n </Stack>\n\n <Stack gap={1}>\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Schedule</span>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.schedule}</code>\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>{s.timezone}</span>\n </Stack>\n\n <Stack gap={1}>\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Next run</span>\n {s.nextRun ? (\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>\n {new Date(s.nextRun).toLocaleString()}\n </code>\n ) : (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>—</span>\n )}\n {s.lastRun && (\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n Last: {new Date(s.lastRun).toLocaleDateString()}\n </span>\n )}\n </Stack>\n\n <Inline align=\"center\" gap={2} justify=\"end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setDraft({\n id: s.id,\n name: s.name,\n type: s.type,\n schedule: s.schedule,\n timezone: s.timezone || 'UTC',\n actionType: 'agent',\n prompt: (s.action && (s.action as { prompt?: string }).prompt) || '',\n })}\n data-testid={`schedule-edit-${s.id}`}\n title=\"Edit\"\n >\n Edit\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => { void runNow(s); }}\n disabled={busy}\n data-testid={`schedule-run-${s.id}`}\n title=\"Run now\"\n >\n <Play size={12} aria-hidden />\n </Button>\n <Switch\n checked={s.enabled}\n onCheckedChange={() => { void toggleEnabled(s); }}\n aria-label={`Toggle ${s.name} enabled`}\n />\n <Button\n variant=\"danger\"\n size=\"sm\"\n onClick={() => { void deleteSchedule(s.id); }}\n disabled={busy}\n data-testid={`schedule-delete-${s.id}`}\n title=\"Delete\"\n >\n <Trash2 size={12} aria-hidden />\n </Button>\n </Inline>\n </Grid>\n </CardBody>\n </Card>\n );\n })}\n </Stack>\n )}\n\n <Sheet open={draft !== null} onOpenChange={(o) => { if (!o) setDraft(null); }}>\n <SheetContent side=\"right\" title={draft?.id ? 'Edit schedule' : 'New schedule'}>\n {draft !== null && (\n <Stack gap={4} style={{ padding: 'var(--space-4)' }}>\n <Stack gap={2}>\n <label htmlFor=\"sched-name\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Name</label>\n <Input\n id=\"sched-name\"\n value={draft.name}\n onChange={(e) => setDraft({ ...draft, name: e.target.value })}\n placeholder=\"Daily digest\"\n disabled={busy}\n />\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-type\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Type</label>\n <Inline gap={2}>\n {(['interval', 'cron', 'once'] as const).map((t) => (\n <Button\n key={t}\n variant={draft.type === t ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setDraft({ ...draft, type: t })}\n >\n {TYPE_LABEL[t]}\n </Button>\n ))}\n </Inline>\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-expr\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {draft.type === 'interval' ? 'Interval (e.g. 1h, 30m)' : draft.type === 'cron' ? 'Cron expr' : 'ISO timestamp'}\n </label>\n <Input\n id=\"sched-expr\"\n value={draft.schedule}\n onChange={(e) => setDraft({ ...draft, schedule: e.target.value })}\n placeholder={draft.type === 'interval' ? '1h' : draft.type === 'cron' ? '0 9 * * *' : '2026-07-14T09:00:00Z'}\n disabled={busy}\n data-testid=\"sched-expr\"\n />\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-tz\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Timezone</label>\n <Input\n id=\"sched-tz\"\n value={draft.timezone}\n onChange={(e) => setDraft({ ...draft, timezone: e.target.value })}\n placeholder=\"UTC\"\n disabled={busy}\n />\n </Stack>\n\n <Stack gap={2}>\n <label style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Action type</label>\n <Inline gap={2}>\n <Button\n variant={draft.actionType === 'agent' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setDraft({ ...draft, actionType: 'agent' })}\n >\n Agent prompt\n </Button>\n <Button\n variant={draft.actionType === 'command' ? 'primary' : 'ghost'}\n size=\"sm\"\n onClick={() => setDraft({ ...draft, actionType: 'command' })}\n >\n Shell command\n </Button>\n </Inline>\n </Stack>\n\n <Stack gap={2}>\n <label htmlFor=\"sched-prompt\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {draft.actionType === 'agent' ? 'Agent prompt' : 'Command'}\n </label>\n <Textarea\n id=\"sched-prompt\"\n value={draft.prompt}\n onChange={(e) => setDraft({ ...draft, prompt: e.target.value })}\n placeholder={draft.actionType === 'agent' ? 'Run the daily digest report…' : 'echo \"hello from cron\"'}\n rows={4}\n disabled={busy}\n />\n </Stack>\n\n {error !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-2)', background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))', border: '1px solid var(--danger)', borderRadius: 'var(--radius-sm)', fontSize: 'var(--fs-12)', color: 'var(--danger)' }}>\n {error}\n </div>\n )}\n\n <Inline gap={2}>\n <Button\n variant=\"primary\"\n onClick={() => { void createSchedule(); }}\n disabled={busy || !draft.name.trim() || !draft.schedule.trim()}\n >\n {draft?.id ? 'Save' : 'Create'}\n </Button>\n <Button variant=\"ghost\" onClick={() => setDraft(null)} disabled={busy}>\n Cancel\n </Button>\n </Inline>\n </Stack>\n )}\n </SheetContent>\n </Sheet>\n </Stack>\n );\n}\n"],"names":["TYPE_LABEL","TYPE_ICON","RefreshCw","Clock","Play","StatusBadge","sched","Badge","jsx","SchedulesView","res","useFetch","live","setLive","useState","draft","setDraft","busy","setBusy","error","setError","actionError","setActionError","useWsMessage","useCallback","schedules","useMemo","refresh","toggleEnabled","s","fetchJson","err","FetchError","runNow","deleteSchedule","id","createSchedule","action","jsxs","Stack","ViewHeader","Button","Plus","Skeleton","Card","CardBody","TypeIcon","Grid","Inline","Switch","Trash2","Sheet","o","SheetContent","Input","e","Textarea"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import{r as t,j as r,P as N,b as B,i as E,u as Y,f as it,e as dt,d as Ce,n as Ie,a as Ee,m as be,h as ut,l as pt,g as ft,F as ht,D as mt,c as vt,k as gt}from"./cmdk-DVxytz9i.js";import{u as St,c as xt,a as _e}from"./index-C4Vq_2LM.js";import{c as wt,n as yt,R as Ct,p as Ne,q as It,o as Tt,C as je,g as Te,l as Pt}from"./main-CdOm1Pj9.js";import{u as Rt}from"./index-CASP1n-5.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 bt=wt("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);var Me=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),_t="VisuallyHidden",Oe=t.forwardRef((o,s)=>r.jsx(N.span,{...o,ref:s,style:{...Me,...o.style}}));Oe.displayName=_t;var ro=Oe,Et=[" ","Enter","ArrowUp","ArrowDown"],Nt=[" ","Enter"],ne="Select",[ue,pe,jt]=xt(ne),[re]=vt(ne,[jt,Ne]),fe=Ne(),[Mt,$]=re(ne),[Ot,At]=re(ne),Dt="SelectProvider";function Ae(o){const{__scopeSelect:s,children:e,open:l,defaultOpen:n,onOpenChange:p,value:a,defaultValue:i,onValueChange:c,dir:f,name:S,autoComplete:w,disabled:I,required:b,form:C,internal_do_not_use_render:d}=o,g=fe(s),[v,h]=t.useState(null),[u,R]=t.useState(null),[_,Z]=t.useState(!1),O=St(f),[L,se]=be({prop:l,defaultProp:n??!1,onChange:p,caller:ne}),[J,A]=be({prop:a,defaultProp:i,onChange:c,caller:ne}),F=t.useRef(null),Q=t.useRef(J);t.useEffect(()=>{const j=C?v==null?void 0:v.ownerDocument.getElementById(C):v==null?void 0:v.form;if(j instanceof HTMLFormElement){const H=()=>A(Q.current);return j.addEventListener("reset",H),()=>j.removeEventListener("reset",H)}},[C,v,A]);const K=v?!!C||!!v.closest("form"):!0,[k,W]=t.useState(new Set),z=Ie(),G=Array.from(k).map(j=>j.props.value).join(";"),V=t.useCallback(j=>{W(H=>new Set(H).add(j))},[]),le=t.useCallback(j=>{W(H=>{const U=new Set(H);return U.delete(j),U})},[]),ee={required:b,trigger:v,onTriggerChange:h,valueNode:u,onValueNodeChange:R,valueNodeHasChildren:_,onValueNodeHasChildrenChange:Z,contentId:z,value:J,onValueChange:A,open:L,onOpenChange:se,dir:O,triggerPointerDownPosRef:F,disabled:I,name:S,autoComplete:w,form:C,nativeOptions:k,nativeSelectKey:G,isFormControl:K};return r.jsx(Ct,{...g,children:r.jsx(Mt,{scope:s,...ee,children:r.jsx(ue.Provider,{scope:s,children:r.jsx(Ot,{scope:s,onNativeOptionAdd:V,onNativeOptionRemove:le,children:Jt(d)?d(ee):e})})})})}Ae.displayName=Dt;var De=o=>{const{__scopeSelect:s,children:e,...l}=o;return r.jsx(Ae,{__scopeSelect:s,...l,internal_do_not_use_render:({isFormControl:n})=>r.jsxs(r.Fragment,{children:[e,n?r.jsx(lt,{__scopeSelect:s}):null]})})};De.displayName=ne;var Le="SelectTrigger",Pe=t.forwardRef((o,s)=>{const{__scopeSelect:e,disabled:l=!1,...n}=o,p=fe(e),a=$(Le,e),i=a.disabled||l,c=B(s,a.onTriggerChange),f=pe(e),S=t.useRef("touch"),[w,I,b]=at(d=>{const g=f().filter(u=>!u.disabled),v=g.find(u=>u.value===a.value),h=ct(g,d,v);h!==void 0&&a.onValueChange(h.value)}),C=d=>{i||(a.onOpenChange(!0),b()),d&&(a.triggerPointerDownPosRef.current={x:Math.round(d.pageX),y:Math.round(d.pageY)})};return r.jsx(yt,{asChild:!0,...p,children:r.jsx(N.button,{type:"button",role:"combobox","aria-controls":a.open?a.contentId:void 0,"aria-expanded":a.open,"aria-required":a.required,"aria-autocomplete":"none",dir:a.dir,"data-state":a.open?"open":"closed",disabled:i,"data-disabled":i?"":void 0,"data-placeholder":he(a.value)?"":void 0,...n,ref:c,onClick:E(n.onClick,d=>{d.currentTarget.focus(),S.current!=="mouse"&&C(d)}),onPointerDown:E(n.onPointerDown,d=>{S.current=d.pointerType;const g=d.target;g.hasPointerCapture(d.pointerId)&&g.releasePointerCapture(d.pointerId),d.button===0&&d.ctrlKey===!1&&d.pointerType==="mouse"&&(C(d),d.preventDefault())}),onKeyDown:E(n.onKeyDown,d=>{const g=w.current!=="";!(d.ctrlKey||d.altKey||d.metaKey)&&d.key.length===1&&I(d.key),!(g&&d.key===" ")&&Et.includes(d.key)&&(C(),d.preventDefault())})})})});Pe.displayName=Le;var ke="SelectValue",Ve=t.forwardRef((o,s)=>{const{__scopeSelect:e,className:l,style:n,children:p,placeholder:a="",...i}=o,c=$(ke,e),{onValueNodeHasChildrenChange:f}=c,S=p!==void 0,w=B(s,c.onValueNodeChange);Y(()=>{f(S)},[f,S]);const I=he(c.value);return r.jsx(N.span,{...i,asChild:I?!1:i.asChild,ref:w,style:{pointerEvents:"none"},children:r.jsx(t.Fragment,{children:I?a:p},I?"placeholder":"value")})});Ve.displayName=ke;var Lt="SelectIcon",He=t.forwardRef((o,s)=>{const{__scopeSelect:e,children:l,...n}=o;return r.jsx(N.span,{"aria-hidden":!0,...n,ref:s,children:l||"▼"})});He.displayName=Lt;var Be="SelectPortal",[kt,Vt]=re(Be,{forceMount:void 0}),Fe=o=>{const{__scopeSelect:s,forceMount:e,...l}=o;return r.jsx(kt,{scope:o.__scopeSelect,forceMount:e,children:r.jsx(it,{asChild:!0,...l})})};Fe.displayName=Be;var q="SelectContent",We=t.forwardRef((o,s)=>{const e=Vt(q,o.__scopeSelect),{forceMount:l=e.forceMount,...n}=o,p=$(q,o.__scopeSelect),[a,i]=t.useState();return Y(()=>{i(new DocumentFragment)},[]),r.jsx(dt,{present:l||p.open,children:({present:c})=>c?r.jsx(ze,{...n,ref:s}):r.jsx(Ue,{...n,fragment:a})})});We.displayName=q;var Ue=t.forwardRef((o,s)=>{const{__scopeSelect:e,children:l,fragment:n}=o;return n?Ee.createPortal(r.jsx(Ke,{scope:e,children:r.jsx(ue.Slot,{scope:e,children:r.jsx("div",{ref:s,children:l})})}),n):null});Ue.displayName="SelectContentFragment";var D=10,[Ke,X]=re(q),Ht="SelectContentImpl",Bt=gt("SelectContent.RemoveScroll"),ze=t.forwardRef((o,s)=>{const{__scopeSelect:e}=o,{position:l="item-aligned",onCloseAutoFocus:n,onEscapeKeyDown:p,onPointerDownOutside:a,side:i,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:I,collisionPadding:b,sticky:C,hideWhenDetached:d,avoidCollisions:g,...v}=o,h=$(q,e),[u,R]=t.useState(null),[_,Z]=t.useState(null),O=B(s,R),[L,se]=t.useState(null),[J,A]=t.useState(null),F=pe(e),[Q,K]=t.useState(!1),k=t.useRef(!1);t.useEffect(()=>{if(u)return ut(u)},[u]),pt();const W=t.useCallback(m=>{const[P,...M]=F().map(y=>y.ref.current),[T]=M.slice(-1),x=document.activeElement;for(const y of m)if(y===x||(y==null||y.scrollIntoView({block:"nearest"}),y===P&&_&&(_.scrollTop=0),y===T&&_&&(_.scrollTop=_.scrollHeight),y==null||y.focus(),document.activeElement!==x))return},[F,_]),z=t.useCallback(()=>W([L,u]),[W,L,u]);t.useEffect(()=>{Q&&z()},[Q,z]);const{onOpenChange:G,triggerPointerDownPosRef:V}=h;t.useEffect(()=>{if(u){let m={x:0,y:0};const P=T=>{var x,y;m={x:Math.abs(Math.round(T.pageX)-(((x=V.current)==null?void 0:x.x)??0)),y:Math.abs(Math.round(T.pageY)-(((y=V.current)==null?void 0:y.y)??0))}},M=T=>{m.x<=10&&m.y<=10?T.preventDefault():T.composedPath().includes(u)||G(!1),document.removeEventListener("pointermove",P),V.current=null};return V.current!==null&&(document.addEventListener("pointermove",P),document.addEventListener("pointerup",M,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",P),document.removeEventListener("pointerup",M,{capture:!0})}}},[u,G,V]),t.useEffect(()=>{const m=()=>G(!1);return window.addEventListener("blur",m),window.addEventListener("resize",m),()=>{window.removeEventListener("blur",m),window.removeEventListener("resize",m)}},[G]);const[le,ee]=at(m=>{const P=F().filter(x=>!x.disabled),M=P.find(x=>x.ref.current===document.activeElement),T=ct(P,m,M);T&&setTimeout(()=>{var x;return(x=T.ref.current)==null?void 0:x.focus()})}),j=t.useCallback((m,P,M)=>{const T=!k.current&&!M;(h.value!==void 0&&h.value===P||T)&&(se(m),T&&(k.current=!0))},[h.value]),H=t.useCallback(()=>u==null?void 0:u.focus(),[u]),U=t.useCallback((m,P,M)=>{const T=!k.current&&!M;(h.value!==void 0&&h.value===P||T)&&A(m)},[h.value]),ie=l==="popper"?Se:Ge,ae=ie===Se?{side:i,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:I,collisionPadding:b,sticky:C,hideWhenDetached:d,avoidCollisions:g}:{};return r.jsx(Ke,{scope:e,content:u,viewport:_,onViewportChange:Z,itemRefCallback:j,selectedItem:L,onItemLeave:H,itemTextRefCallback:U,focusSelectedItem:z,selectedItemText:J,position:l,isPositioned:Q,searchRef:le,children:r.jsx(ft,{as:Bt,allowPinchZoom:!0,children:r.jsx(ht,{asChild:!0,trapped:h.open,onMountAutoFocus:m=>{m.preventDefault()},onUnmountAutoFocus:E(n,m=>{var P;(P=h.trigger)==null||P.focus({preventScroll:!0}),m.preventDefault()}),children:r.jsx(mt,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:p,onPointerDownOutside:a,onFocusOutside:m=>m.preventDefault(),onDismiss:()=>h.onOpenChange(!1),children:r.jsx(ie,{role:"listbox",id:h.contentId,"data-state":h.open?"open":"closed",dir:h.dir,onContextMenu:m=>m.preventDefault(),...v,...ae,onPlaced:()=>K(!0),ref:O,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:E(v.onKeyDown,m=>{const P=m.ctrlKey||m.altKey||m.metaKey;if(m.key==="Tab"&&m.preventDefault(),!P&&m.key.length===1&&ee(m.key),["ArrowUp","ArrowDown","Home","End"].includes(m.key)){let T=F().filter(x=>!x.disabled).map(x=>x.ref.current);if(["ArrowUp","End"].includes(m.key)&&(T=T.slice().reverse()),["ArrowUp","ArrowDown"].includes(m.key)){const x=m.target,y=T.indexOf(x);T=T.slice(y+1)}setTimeout(()=>W(T)),m.preventDefault()}})})})})})})});ze.displayName=Ht;var Ft="SelectItemAlignedPosition",Ge=t.forwardRef((o,s)=>{const{__scopeSelect:e,onPlaced:l,...n}=o,p=$(q,e),a=X(q,e),[i,c]=t.useState(null),[f,S]=t.useState(null),w=B(s,S),I=pe(e),b=t.useRef(!1),C=t.useRef(!0),{viewport:d,selectedItem:g,selectedItemText:v,focusSelectedItem:h}=a,u=t.useCallback(()=>{if(p.trigger&&p.valueNode&&i&&f&&d&&g&&v){const O=p.trigger.getBoundingClientRect(),L=f.getBoundingClientRect(),se=p.valueNode.getBoundingClientRect(),J=v.getBoundingClientRect();if(p.dir!=="rtl"){const x=J.left-L.left,y=se.left-x,te=O.left-y,oe=O.width+te,me=Math.max(oe,L.width),ve=window.innerWidth-D,ge=_e(y,[D,Math.max(D,ve-me)]);i.style.minWidth=oe+"px",i.style.left=ge+"px"}else{const x=L.right-J.right,y=window.innerWidth-se.right-x,te=window.innerWidth-O.right-y,oe=O.width+te,me=Math.max(oe,L.width),ve=window.innerWidth-D,ge=_e(y,[D,Math.max(D,ve-me)]);i.style.minWidth=oe+"px",i.style.right=ge+"px"}const A=I(),F=window.innerHeight-D*2,Q=d.scrollHeight,K=window.getComputedStyle(f),k=parseInt(K.borderTopWidth,10),W=parseInt(K.paddingTop,10),z=parseInt(K.borderBottomWidth,10),G=parseInt(K.paddingBottom,10),V=k+W+Q+G+z,le=Math.min(g.offsetHeight*5,V),ee=window.getComputedStyle(d),j=parseInt(ee.paddingTop,10),H=parseInt(ee.paddingBottom,10),U=O.top+O.height/2-D,ie=F-U,ae=g.offsetHeight/2,m=g.offsetTop+ae,P=k+W+m,M=V-P;if(P<=U){const x=A.length>0&&g===A[A.length-1].ref.current;i.style.bottom="0px";const y=f.clientHeight-d.offsetTop-d.offsetHeight,te=Math.max(ie,ae+(x?H:0)+y+z),oe=P+te;i.style.height=oe+"px"}else{const x=A.length>0&&g===A[0].ref.current;i.style.top="0px";const te=Math.max(U,k+d.offsetTop+(x?j:0)+ae)+M;i.style.height=te+"px",d.scrollTop=P-U+d.offsetTop}i.style.margin=`${D}px 0`,i.style.minHeight=le+"px",i.style.maxHeight=F+"px",l==null||l(),requestAnimationFrame(()=>b.current=!0)}},[I,p.trigger,p.valueNode,i,f,d,g,v,p.dir,l]);Y(()=>u(),[u]);const[R,_]=t.useState();Y(()=>{f&&_(window.getComputedStyle(f).zIndex)},[f]);const Z=t.useCallback(O=>{O&&C.current===!0&&(u(),h==null||h(),C.current=!1)},[u,h]);return r.jsx(Ut,{scope:e,contentWrapper:i,shouldExpandOnScrollRef:b,onScrollButtonChange:Z,children:r.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:R},children:r.jsx(N.div,{...n,ref:w,style:{boxSizing:"border-box",maxHeight:"100%",...n.style}})})})});Ge.displayName=Ft;var Wt="SelectPopperPosition",Se=t.forwardRef((o,s)=>{const{__scopeSelect:e,align:l="start",collisionPadding:n=D,...p}=o,a=fe(e);return r.jsx(It,{...a,...p,ref:s,align:l,collisionPadding:n,style:{boxSizing:"border-box",...p.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Se.displayName=Wt;var[Ut,Re]=re(q,{}),xe="SelectViewport",Ye=t.forwardRef((o,s)=>{const{__scopeSelect:e,nonce:l,...n}=o,p=X(xe,e),a=Re(xe,e),i=B(s,p.onViewportChange),c=t.useRef(0);return r.jsxs(r.Fragment,{children:[r.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:l}),r.jsx(ue.Slot,{scope:e,children:r.jsx(N.div,{"data-radix-select-viewport":"",role:"presentation",...n,ref:i,style:{position:"relative",flex:1,overflow:"hidden auto",...n.style},onScroll:E(n.onScroll,f=>{const S=f.currentTarget,{contentWrapper:w,shouldExpandOnScrollRef:I}=a;if(I!=null&&I.current&&w){const b=Math.abs(c.current-S.scrollTop);if(b>0){const C=window.innerHeight-D*2,d=parseFloat(w.style.minHeight),g=parseFloat(w.style.height),v=Math.max(d,g);if(v<C){const h=v+b,u=Math.min(C,h),R=h-u;w.style.height=u+"px",w.style.bottom==="0px"&&(S.scrollTop=R>0?R:0,w.style.justifyContent="flex-end")}}}c.current=S.scrollTop})})})]})});Ye.displayName=xe;var qe="SelectGroup",[Kt,zt]=re(qe),Gt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o,n=Ie();return r.jsx(Kt,{scope:e,id:n,children:r.jsx(N.div,{role:"group","aria-labelledby":n,...l,ref:s})})});Gt.displayName=qe;var $e="SelectLabel",Yt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o,n=zt($e,e);return r.jsx(N.div,{id:n.id,...l,ref:s})});Yt.displayName=$e;var de="SelectItem",[qt,Xe]=re(de),Ze=t.forwardRef((o,s)=>{const{__scopeSelect:e,value:l,disabled:n=!1,textValue:p,...a}=o,i=$(de,e),c=X(de,e),f=i.value===l,[S,w]=t.useState(p??""),[I,b]=t.useState(!1),C=Ce(u=>{var R;return(R=c.itemRefCallback)==null?void 0:R.call(c,u,l,n)}),d=B(s,C),g=Ie(),v=t.useRef("touch"),h=()=>{n||(i.onValueChange(l),i.onOpenChange(!1))};return r.jsx(qt,{scope:e,value:l,disabled:n,textId:g,isSelected:f,onItemTextChange:t.useCallback(u=>{w(R=>R||((u==null?void 0:u.textContent)??"").trim())},[]),children:r.jsx(ue.ItemSlot,{scope:e,value:l,disabled:n,textValue:S,children:r.jsx(N.div,{role:"option","aria-labelledby":g,"data-highlighted":I?"":void 0,"aria-selected":f&&I,"data-state":f?"checked":"unchecked","aria-disabled":n||void 0,"data-disabled":n?"":void 0,tabIndex:n?void 0:-1,...a,ref:d,onFocus:E(a.onFocus,()=>b(!0)),onBlur:E(a.onBlur,()=>b(!1)),onClick:E(a.onClick,()=>{v.current!=="mouse"&&h()}),onPointerUp:E(a.onPointerUp,()=>{v.current==="mouse"&&h()}),onPointerDown:E(a.onPointerDown,u=>{v.current=u.pointerType}),onPointerMove:E(a.onPointerMove,u=>{var R;v.current=u.pointerType,n?(R=c.onItemLeave)==null||R.call(c):v.current==="mouse"&&u.currentTarget.focus({preventScroll:!0})}),onPointerLeave:E(a.onPointerLeave,u=>{var R;u.currentTarget===document.activeElement&&((R=c.onItemLeave)==null||R.call(c))}),onKeyDown:E(a.onKeyDown,u=>{var _;n||u.target!==u.currentTarget||((_=c.searchRef)==null?void 0:_.current)!==""&&u.key===" "||(Nt.includes(u.key)&&h(),u.key===" "&&u.preventDefault())})})})})});Ze.displayName=de;var ce="SelectItemText",Je=t.forwardRef((o,s)=>{const{__scopeSelect:e,className:l,style:n,...p}=o,a=$(ce,e),i=X(ce,e),c=Xe(ce,e),f=At(ce,e),[S,w]=t.useState(null),I=Ce(h=>{var u;return(u=i.itemTextRefCallback)==null?void 0:u.call(i,h,c.value,c.disabled)}),b=B(s,w,c.onItemTextChange,I),C=S==null?void 0:S.textContent,d=t.useMemo(()=>r.jsx("option",{value:c.value,disabled:c.disabled,children:C},c.value),[c.disabled,c.value,C]),{onNativeOptionAdd:g,onNativeOptionRemove:v}=f;return Y(()=>(g(d),()=>v(d)),[g,v,d]),r.jsxs(r.Fragment,{children:[r.jsx(N.span,{id:c.textId,...p,ref:b}),c.isSelected&&a.valueNode&&!a.valueNodeHasChildren&&!he(a.value)?Ee.createPortal(p.children,a.valueNode):null]})});Je.displayName=ce;var Qe="SelectItemIndicator",et=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o;return Xe(Qe,e).isSelected?r.jsx(N.span,{"aria-hidden":!0,...l,ref:s}):null});et.displayName=Qe;var we="SelectScrollUpButton",tt=t.forwardRef((o,s)=>{const e=X(we,o.__scopeSelect),l=Re(we,o.__scopeSelect),[n,p]=t.useState(!1),a=B(s,l.onScrollButtonChange);return Y(()=>{if(e.viewport&&e.isPositioned){let i=function(){const f=c.scrollTop>0;p(f)};const c=e.viewport;return i(),c.addEventListener("scroll",i),()=>c.removeEventListener("scroll",i)}},[e.viewport,e.isPositioned]),n?r.jsx(nt,{...o,ref:a,onAutoScroll:()=>{const{viewport:i,selectedItem:c}=e;i&&c&&(i.scrollTop=i.scrollTop-c.offsetHeight)}}):null});tt.displayName=we;var ye="SelectScrollDownButton",ot=t.forwardRef((o,s)=>{const e=X(ye,o.__scopeSelect),l=Re(ye,o.__scopeSelect),[n,p]=t.useState(!1),a=B(s,l.onScrollButtonChange);return Y(()=>{if(e.viewport&&e.isPositioned){let i=function(){const f=c.scrollHeight-c.clientHeight,S=Math.ceil(c.scrollTop)<f;p(S)};const c=e.viewport;return i(),c.addEventListener("scroll",i),()=>c.removeEventListener("scroll",i)}},[e.viewport,e.isPositioned]),n?r.jsx(nt,{...o,ref:a,onAutoScroll:()=>{const{viewport:i,selectedItem:c}=e;i&&c&&(i.scrollTop=i.scrollTop+c.offsetHeight)}}):null});ot.displayName=ye;var nt=t.forwardRef((o,s)=>{const{__scopeSelect:e,onAutoScroll:l,...n}=o,p=X("SelectScrollButton",e),a=t.useRef(null),i=pe(e),c=t.useCallback(()=>{a.current!==null&&(window.clearInterval(a.current),a.current=null)},[]);return t.useEffect(()=>()=>c(),[c]),Y(()=>{var S;const f=i().find(w=>w.ref.current===document.activeElement);(S=f==null?void 0:f.ref.current)==null||S.scrollIntoView({block:"nearest"})},[i]),r.jsx(N.div,{"aria-hidden":!0,...n,ref:s,style:{flexShrink:0,...n.style},onPointerDown:E(n.onPointerDown,()=>{a.current===null&&(a.current=window.setInterval(l,50))}),onPointerMove:E(n.onPointerMove,()=>{var f;(f=p.onItemLeave)==null||f.call(p),a.current===null&&(a.current=window.setInterval(l,50))}),onPointerLeave:E(n.onPointerLeave,()=>{c()})})}),$t="SelectSeparator",Xt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o;return r.jsx(N.div,{"aria-hidden":!0,...l,ref:s})});Xt.displayName=$t;var rt="SelectArrow",Zt=t.forwardRef((o,s)=>{const{__scopeSelect:e,...l}=o,n=fe(e);return X(rt,e).position==="popper"?r.jsx(Tt,{...n,...l,ref:s}):null});Zt.displayName=rt;var st="SelectBubbleInput",lt=t.forwardRef(({__scopeSelect:o,...s},e)=>{const l=$(st,o),{value:n,onValueChange:p,required:a,disabled:i,name:c,autoComplete:f,form:S}=l,{nativeOptions:w,nativeSelectKey:I}=l,b=t.useRef(null),C=B(e,b),d=n??"",g=Rt(d),v=Array.from(w).some(h=>(h.props.value??"")==="");return t.useEffect(()=>{const h=b.current;if(!h)return;const u=window.HTMLSelectElement.prototype,_=Object.getOwnPropertyDescriptor(u,"value").set;if(g!==d&&_){const Z=new Event("change",{bubbles:!0});_.call(h,d),h.dispatchEvent(Z)}},[g,d]),r.jsxs(N.select,{"aria-hidden":!0,required:a,tabIndex:-1,name:c,autoComplete:f,disabled:i,form:S,onChange:h=>p(h.target.value),...s,style:{...Me,...s.style},ref:C,defaultValue:d,children:[he(n)&&!v?r.jsx("option",{value:""}):null,Array.from(w)]},I)});lt.displayName=st;function Jt(o){return typeof o=="function"}function he(o){return o===""||o===void 0}function at(o){const s=Ce(o),e=t.useRef(""),l=t.useRef(0),n=t.useCallback(a=>{const i=e.current+a;s(i),function c(f){e.current=f,window.clearTimeout(l.current),f!==""&&(l.current=window.setTimeout(()=>c(""),1e3))}(i)},[s]),p=t.useCallback(()=>{e.current="",window.clearTimeout(l.current)},[]);return t.useEffect(()=>()=>window.clearTimeout(l.current),[]),[e,n,p]}function ct(o,s,e){const n=s.length>1&&Array.from(s).every(f=>f===s[0])?s[0]:s,p=e?o.indexOf(e):-1;let a=Qt(o,Math.max(p,0));n.length===1&&(a=a.filter(f=>f!==e));const c=a.find(f=>f.textValue.toLowerCase().startsWith(n.toLowerCase()));return c!==e?c:void 0}function Qt(o,s){return o.map((e,l)=>o[(s+l)%o.length])}const so=t.forwardRef(function(s,e){const{children:l,...n}=s;return r.jsxs(De,{...n,children:[l,r.jsx("span",{hidden:!0,children:r.jsx(Pe,{ref:e})})]})}),lo=t.forwardRef(function(s,e){const{className:l,placeholder:n,size:p="md",children:a,...i}=s;return r.jsxs(Pe,{ref:e,className:Te("v8-select__trigger",l),style:{display:"inline-flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-2)",minWidth:120,height:p==="sm"?28:32,padding:"0 var(--space-3)",background:"var(--input-bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-sm)",fontSize:"var(--fs-13)",color:"var(--fg)",cursor:"pointer"},...i,children:[r.jsx(Ve,{placeholder:n}),r.jsx(He,{children:r.jsx(je,{size:14,"aria-hidden":"true",style:{color:"var(--fg-muted)"}})}),a]})}),ao=t.forwardRef(function(s,e){const{className:l,children:n,position:p="popper",...a}=s;return r.jsx(Fe,{children:r.jsxs(We,{ref:e,position:p,sideOffset:4,className:Te("v8-select__content",l),style:{background:"var(--surface-popover)",border:"1px solid var(--border)",borderRadius:"var(--radius)",boxShadow:"var(--shadow-3)",padding:"var(--space-1)",minWidth:"var(--radix-select-trigger-width)",maxHeight:"var(--radix-select-content-available-height, 320px)",overflow:"hidden",zIndex:"var(--z-popover)"},...a,children:[r.jsx(tt,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:20,color:"var(--fg-muted)"},children:r.jsx(bt,{size:14,"aria-hidden":"true"})}),r.jsx(Ye,{children:n}),r.jsx(ot,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:20,color:"var(--fg-muted)"},children:r.jsx(je,{size:14,"aria-hidden":"true"})})]})})}),co=t.forwardRef(function(s,e){const{className:l,children:n,...p}=s;return r.jsxs(Ze,{ref:e,className:Te("v8-select__item",l),style:{display:"flex",alignItems:"center",gap:"var(--space-2)",height:28,padding:"0 var(--space-3) 0 var(--space-6)",borderRadius:"var(--radius-sm)",fontSize:"var(--fs-13)",color:"var(--fg)",cursor:"pointer",outline:0,userSelect:"none",position:"relative"},...p,children:[r.jsx(et,{style:{position:"absolute",left:6,display:"inline-flex",alignItems:"center",color:"var(--accent)"},children:r.jsx(Pt,{size:14,"aria-hidden":"true"})}),r.jsx(Je,{children:n})]})});export{ro as R,so as S,lo as a,ao as b,co as c};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select-Cw7Qtz2M.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/chevron-up.js","../../../node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../node_modules/@radix-ui/react-select/dist/index.mjs","../../src/web/v8/ui/controls/Select.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 ChevronUp = createLucideIcon(\"ChevronUp\", [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...props,\n ref: forwardedRef,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n }\n );\n }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n Root,\n VISUALLY_HIDDEN_STYLES,\n VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment as Fragment2, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProviderImpl, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar PROVIDER_NAME = \"SelectProvider\";\nfunction SelectProvider(props) {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form,\n // @ts-expect-error internal render prop used by `Select` to compose its default parts\n internal_do_not_use_render\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SELECT_NAME\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n caller: SELECT_NAME\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const initialValueRef = React.useRef(value);\n React.useEffect(() => {\n const associatedForm = form ? trigger?.ownerDocument.getElementById(form) : trigger?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setValue(initialValueRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [form, trigger, setValue]);\n const isFormControl = trigger ? !!form || !!trigger.closest(\"form\") : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const contentId = useId();\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n const handleNativeOptionAdd = React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []);\n const handleNativeOptionRemove = React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []);\n const context = {\n required,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId,\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n name,\n autoComplete,\n form,\n nativeOptions: nativeOptionsSet,\n nativeSelectKey,\n isFormControl\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(SelectProviderImpl, { scope: __scopeSelect, ...context, children: /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: __scopeSelect,\n onNativeOptionAdd: handleNativeOptionAdd,\n onNativeOptionRemove: handleNativeOptionRemove,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n ) }) }) });\n}\nSelectProvider.displayName = PROVIDER_NAME;\nvar Select = (props) => {\n const { __scopeSelect, children, ...providerProps } = props;\n return /* @__PURE__ */ jsx(\n SelectProvider,\n {\n __scopeSelect,\n ...providerProps,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment2, { children: [\n children,\n isFormControl ? /* @__PURE__ */ jsx(\n SelectBubbleInput,\n {\n __scopeSelect\n }\n ) : null\n ] })\n }\n );\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef(\"touch\");\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = (pointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY)\n };\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n if (pointerTypeRef.current !== \"mouse\") {\n handleOpen(event);\n }\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n handleOpen(event);\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n const showPlaceholder = shouldShowPlaceholder(context.value);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n asChild: showPlaceholder ? false : valueProps.asChild,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: /* @__PURE__ */ jsx(React.Fragment, { children: showPlaceholder ? placeholder : children }, showPlaceholder ? \"placeholder\" : \"value\")\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar [PortalProvider, usePortalContext] = createSelectContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar SelectPortal = (props) => {\n const { __scopeSelect, forceMount, ...portalProps } = props;\n return /* @__PURE__ */ jsx(PortalProvider, { scope: props.__scopeSelect, forceMount, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...portalProps }) });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeSelect);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => present ? /* @__PURE__ */ jsx(SelectContentImpl, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(SelectContentFragment, { ...contentProps, fragment }) });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar SelectContentFragment = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, children, fragment } = props;\n if (!fragment) return null;\n return ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { ref: forwardedRef, children }) }) }),\n fragment\n );\n});\nSelectContentFragment.displayName = \"SelectContentFragment\";\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect } = props;\n const {\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setContent);\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!event.composedPath().includes(content)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current?.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setContent);\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: \"hidden auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const handleItemRefCallback = useCallbackRef(\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const composedRefs = useComposedRefs(forwardedRef, handleItemRefCallback);\n const textId = useId();\n const pointerTypeRef = React.useRef(\"touch\");\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onClick: composeEventHandlers(itemProps.onClick, () => {\n if (pointerTypeRef.current !== \"mouse\") handleSelect();\n }),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n if (pointerTypeRef.current === \"mouse\") handleSelect();\n }),\n onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n }),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === \"mouse\") {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n if (disabled || event.target !== event.currentTarget) {\n return;\n }\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") {\n return;\n }\n if (SELECTION_KEYS.includes(event.key)) {\n handleSelect();\n }\n if (event.key === \" \") {\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const handleItemTextRefCallback = useCallbackRef(\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const composedRefs = useComposedRefs(\n forwardedRef,\n setItemTextNode,\n itemContext.onItemTextChange,\n handleItemTextRefCallback\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren && !shouldShowPlaceholder(context.value) ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n ({ __scopeSelect, ...props }, forwardedRef) => {\n const context = useSelectContext(BUBBLE_INPUT_NAME, __scopeSelect);\n const { value, onValueChange, required, disabled, name, autoComplete, form } = context;\n const { nativeOptions, nativeSelectKey } = context;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const selectValue = value ?? \"\";\n const prevValue = usePrevious(selectValue);\n const hasEmptyValueOption = Array.from(nativeOptions).some(\n (option) => (option.props.value ?? \"\") === \"\"\n );\n React.useEffect(() => {\n const select = ref.current;\n if (!select) return;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== selectValue && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, selectValue);\n select.dispatchEvent(event);\n }\n }, [prevValue, selectValue]);\n return /* @__PURE__ */ jsxs(\n Primitive.select,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n disabled,\n form,\n onChange: (event) => onValueChange(event.target.value),\n ...props,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n ref: composedRefs,\n defaultValue: selectValue,\n children: [\n shouldShowPlaceholder(value) && !hasEmptyValueOption ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptions)\n ]\n },\n nativeSelectKey\n );\n }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nexport {\n SelectArrow as Arrow,\n SelectContent as Content,\n SelectGroup as Group,\n SelectIcon as Icon,\n SelectItem as Item,\n SelectItemIndicator as ItemIndicator,\n SelectItemText as ItemText,\n SelectLabel as Label,\n SelectPortal as Portal,\n Select as Root,\n SelectScrollDownButton as ScrollDownButton,\n SelectScrollUpButton as ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n SelectSeparator as Separator,\n SelectTrigger as Trigger,\n SelectValue as Value,\n SelectViewport as Viewport,\n createSelectScope,\n SelectBubbleInput as unstable_BubbleInput,\n SelectProvider as unstable_Provider,\n SelectBubbleInput as unstable_SelectBubbleInput,\n SelectProvider as unstable_SelectProvider\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport * as RxSelect from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Select — native-feeling dropdown.\n *\n * Built on Radix Select for a11y (keyboard navigation, type-ahead, ARIA).\n *\n * Use cases: settings pickers, kanban filter dropdowns, table column filters.\n * For autocomplete use Combobox (S3). For chips use MultiSelect (S3).\n */\n\nexport type SelectProps = ComponentPropsWithoutRef<typeof RxSelect.Root>;\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(props, ref) {\n const { children, ...rest } = props;\n return (\n <RxSelect.Root {...rest}>\n {children}\n {/* Trigger is rendered separately by the consumer via SelectTrigger. */}\n <span hidden>\n <RxSelect.Trigger ref={ref} />\n </span>\n </RxSelect.Root>\n );\n});\n\nexport interface SelectTriggerProps extends ComponentPropsWithoutRef<typeof RxSelect.Trigger> {\n placeholder?: string;\n size?: 'sm' | 'md';\n}\n\nexport const SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(function SelectTrigger(\n props,\n ref,\n) {\n const { className, placeholder, size = 'md', children, ...rest } = props;\n return (\n <RxSelect.Trigger\n ref={ref}\n className={cx('v8-select__trigger', className)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 'var(--space-2)',\n minWidth: 120,\n height: size === 'sm' ? 28 : 32,\n padding: '0 var(--space-3)',\n background: 'var(--input-bg)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n fontSize: 'var(--fs-13)',\n color: 'var(--fg)',\n cursor: 'pointer',\n }}\n {...rest}\n >\n <RxSelect.Value placeholder={placeholder} />\n <RxSelect.Icon>\n <ChevronDown size={14} aria-hidden=\"true\" style={{ color: 'var(--fg-muted)' }} />\n </RxSelect.Icon>\n {children}\n </RxSelect.Trigger>\n );\n});\n\nexport interface SelectContentProps extends ComponentPropsWithoutRef<typeof RxSelect.Content> {\n children: ReactNode;\n}\n\nexport const SelectContent = forwardRef<HTMLDivElement, SelectContentProps>(function SelectContent(\n props,\n ref,\n) {\n const { className, children, position = 'popper', ...rest } = props;\n return (\n <RxSelect.Portal>\n <RxSelect.Content\n ref={ref}\n position={position}\n sideOffset={4}\n className={cx('v8-select__content', className)}\n style={{\n background: 'var(--surface-popover)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n boxShadow: 'var(--shadow-3)',\n padding: 'var(--space-1)',\n minWidth: 'var(--radix-select-trigger-width)',\n maxHeight: 'var(--radix-select-content-available-height, 320px)',\n overflow: 'hidden',\n zIndex: 'var(--z-popover)',\n }}\n {...rest}\n >\n <RxSelect.ScrollUpButton\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 20,\n color: 'var(--fg-muted)',\n }}\n >\n <ChevronUp size={14} aria-hidden=\"true\" />\n </RxSelect.ScrollUpButton>\n <RxSelect.Viewport>{children}</RxSelect.Viewport>\n <RxSelect.ScrollDownButton\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 20,\n color: 'var(--fg-muted)',\n }}\n >\n <ChevronDown size={14} aria-hidden=\"true\" />\n </RxSelect.ScrollDownButton>\n </RxSelect.Content>\n </RxSelect.Portal>\n );\n});\n\nexport interface SelectItemProps extends ComponentPropsWithoutRef<typeof RxSelect.Item> {\n children: ReactNode;\n}\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(function SelectItem(props, ref) {\n const { className, children, ...rest } = props;\n return (\n <RxSelect.Item\n ref={ref}\n className={cx('v8-select__item', className)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n height: 28,\n padding: '0 var(--space-3) 0 var(--space-6)',\n borderRadius: 'var(--radius-sm)',\n fontSize: 'var(--fs-13)',\n color: 'var(--fg)',\n cursor: 'pointer',\n outline: 0,\n userSelect: 'none',\n position: 'relative',\n }}\n {...rest}\n >\n <RxSelect.ItemIndicator\n style={{\n position: 'absolute',\n left: 6,\n display: 'inline-flex',\n alignItems: 'center',\n color: 'var(--accent)',\n }}\n >\n <Check size={14} aria-hidden=\"true\" />\n </RxSelect.ItemIndicator>\n <RxSelect.ItemText>{children}</RxSelect.ItemText>\n </RxSelect.Item>\n );\n});\n\nexport const SelectGroup = RxSelect.Group;\nexport const SelectLabel = RxSelect.Label;\nexport const SelectSeparator = RxSelect.Separator;"],"names":["ChevronUp","createLucideIcon","VISUALLY_HIDDEN_STYLES","NAME","VisuallyHidden","React.forwardRef","props","forwardedRef","jsx","Primitive","Root","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","useCollection","createCollectionScope","createCollection","createSelectContext","createContextScope","createPopperScope","usePopperScope","SelectProviderImpl","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","PROVIDER_NAME","SelectProvider","__scopeSelect","children","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","dir","name","autoComplete","disabled","required","form","internal_do_not_use_render","popperScope","trigger","setTrigger","React.useState","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","direction","useDirection","open","setOpen","useControllableState","value","setValue","triggerPointerDownPosRef","React.useRef","initialValueRef","React.useEffect","associatedForm","reset","isFormControl","nativeOptionsSet","setNativeOptionsSet","contentId","useId","nativeSelectKey","option","handleNativeOptionAdd","React.useCallback","prev","handleNativeOptionRemove","optionsSet","context","PopperPrimitive.Root","isFunction","Select","providerProps","jsxs","Fragment2","SelectBubbleInput","TRIGGER_NAME","SelectTrigger","triggerProps","isDisabled","composedRefs","useComposedRefs","getItems","pointerTypeRef","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","item","currentItem","nextItem","findNextItem","handleOpen","pointerEvent","PopperPrimitive.Anchor","shouldShowPlaceholder","composeEventHandlers","event","target","isTypingAhead","VALUE_NAME","SelectValue","className","style","placeholder","valueProps","onValueNodeHasChildrenChange","hasChildren","useLayoutEffect","showPlaceholder","React.Fragment","ICON_NAME","SelectIcon","iconProps","PORTAL_NAME","PortalProvider","usePortalContext","SelectPortal","forceMount","portalProps","PortalPrimitive","CONTENT_NAME","SelectContent","portalContext","contentProps","fragment","setFragment","Presence","present","SelectContentImpl","SelectContentFragment","ReactDOM.createPortal","SelectContentProvider","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","Slot","createSlot","position","onCloseAutoFocus","onEscapeKeyDown","onPointerDownOutside","side","sideOffset","align","alignOffset","arrowPadding","collisionBoundary","collisionPadding","sticky","hideWhenDetached","avoidCollisions","content","setContent","viewport","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","isPositioned","setIsPositioned","firstValidItemFoundRef","hideOthers","useFocusGuards","focusFirst","candidates","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","candidate","focusSelectedItem","pointerMoveDelta","handlePointerMove","_a","_b","handlePointerUp","close","itemRefCallback","node","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","RemoveScroll","FocusScope","DismissableLayer","isModifierKey","candidateNodes","currentElement","currentIndex","ITEM_ALIGNED_POSITION_NAME","onPlaced","popperProps","contentContext","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","left","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","clamp","right","rightDelta","leftEdge","clampedRight","items","availableHeight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","height","isFirstItem","contentZIndex","setContentZIndex","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","PopperPrimitive.Content","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","nonce","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","itemProps","isSelected","textValue","setTextValue","isFocused","setIsFocused","handleItemRefCallback","useCallbackRef","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","handleItemTextRefCallback","textContent","nativeOption","React.useMemo","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","activeItem","SEPARATOR_NAME","SelectSeparator","separatorProps","ARROW_NAME","SelectArrow","arrowProps","PopperPrimitive.Arrow","BUBBLE_INPUT_NAME","nativeOptions","ref","selectValue","prevValue","usePrevious","hasEmptyValueOption","select","selectProto","onSearchChange","handleSearchChange","timerRef","key","updateSearch","normalizedSearch","char","currentItemIndex","wrappedItems","wrapArray","v","array","startIndex","_","index","forwardRef","rest","RxSelect.Root","RxSelect.Trigger","size","cx","RxSelect.Value","RxSelect.Icon","ChevronDown","RxSelect.Portal","RxSelect.Content","RxSelect.ScrollUpButton","RxSelect.Viewport","RxSelect.ScrollDownButton","RxSelect.Item","RxSelect.ItemIndicator","Check","RxSelect.ItemText"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -0,0 +1 @@
1
+ import{r as g,j as e}from"./cmdk-DVxytz9i.js";import{g as v}from"./main-CdOm1Pj9.js";const x=g.forwardRef(function(n,d){const{id:i,title:o,description:a,icon:t,children:s,headerActions:r,className:c,...l}=n;return e.jsxs("section",{ref:d,id:i,"aria-labelledby":`${i}-title`,className:v("v8-settings-section",c),style:{padding:"var(--space-5) var(--space-6)",background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-lg)"},...l,children:[e.jsxs("header",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-3)",marginBottom:"var(--space-4)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"var(--space-3)",minWidth:0},children:[t!==void 0&&e.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:t}),e.jsxs("div",{style:{minWidth:0},children:[e.jsx("h2",{id:`${i}-title`,style:{fontSize:"var(--fs-15)",fontWeight:600,color:"var(--fg)",lineHeight:"var(--lh-snug)",margin:0},children:o}),a!==void 0&&e.jsx("p",{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:a})]})]}),r!==void 0&&e.jsx("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-2)",flexShrink:0},children:r})]}),e.jsx("div",{className:"v8-settings-section__body",children:s})]})}),m=g.forwardRef(function(n,d){const{id:i,label:o,description:a,control:t,disabled:s=!1,className:r,...c}=n,l=`${i}-label`;return e.jsxs("div",{ref:d,"data-disabled":s||void 0,"aria-disabled":s||void 0,className:v("v8-settings-row",r),style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-4)",padding:"var(--space-3) 0",borderBottom:"1px solid var(--border)",opacity:s?.5:1},...c,children:[e.jsxs("div",{id:l,style:{flex:1,minWidth:0},children:[e.jsx("span",{style:{display:"block",fontSize:"var(--fs-13)",fontWeight:500,color:"var(--fg)",cursor:s?"not-allowed":"default",lineHeight:"var(--lh-snug)"},children:o}),a!==void 0&&e.jsx("p",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",margin:"4px 0 0 0",lineHeight:"var(--lh-snug)"},children:a})]}),e.jsx("div",{role:"group","aria-labelledby":l,style:{flexShrink:0,alignSelf:"center"},children:t})]})});export{x as S,m as a};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsRow-DgsgbPSI.js","sources":["../../src/web/v8/ui/settings/SettingsSection.tsx","../../src/web/v8/ui/settings/SettingsRow.tsx"],"sourcesContent":["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":["SettingsSection","forwardRef","props","ref","id","title","description","icon","children","headerActions","className","rest","jsxs","cx","jsx","SettingsRow","label","control","disabled","labelId"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import{j as e,r as g}from"./cmdk-DVxytz9i.js";import{c as H,g as ze,t as Pe,v as Re,u as M,k as E,w as re,x as de,y as ce,D as he,j as ue,z as pe,W as ge,A as me,E as xe,b as ye,G as fe,S as B,I as u,d as b,B as oe,i as I,F as O,h as De}from"./main-CdOm1Pj9.js";import{G as Me}from"./Grid-CiRyhAgR.js";import{S as s}from"./Switch-BItGrPqr.js";import{S as F}from"./Slider-DXbJuQ7y.js";import{I as S}from"./Input-BbFUDQnS.js";import{T as Fe}from"./Textarea-qYDf3yds.js";import{S as d,a as i}from"./SettingsRow-DgsgbPSI.js";import{P as ve}from"./plug-Cmv0-T_e.js";import{B as je}from"./brain-fsBSDl2g.js";import{R as se}from"./rotate-cw-DHooc0Tx.js";import{P as Be}from"./plus-M6LYiKX8.js";import{T as Ee}from"./trash-2-CL4khSRv.js";import"./index-CASP1n-5.js";import"./index-C4Vq_2LM.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 ke=H("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"}]]);/**
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 be=H("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"}]]);/**
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 Ce=H("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"}]]);function Ie(j){const{items:m,activeId:x,onSelect:y,className:a}=j;return e.jsxs("nav",{"aria-label":"Settings sections",className:ze("v8-settings-nav",a),children:[e.jsx("ul",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:2},children:m.map(p=>{const f=x===p.id;return e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>y==null?void 0:y(p.id),"aria-current":f?"true":void 0,style:{display:"flex",alignItems:"center",gap:"var(--space-2)",width:"100%",padding:"var(--space-2) var(--space-3)",background:f?"var(--surface-2)":"transparent",border:0,borderRadius:"var(--radius-sm)",color:f?"var(--fg)":"var(--fg-muted)",font:"inherit",fontSize:"var(--fs-13)",fontWeight:f?500:400,cursor:"pointer",textAlign:"left"},children:[p.icon!==void 0&&e.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",color:f?"var(--accent)":"var(--fg-subtle)",flexShrink:0},children:p.icon}),e.jsx("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:p.title})]})},p.id)})}),e.jsx("style",{children:`
17
+ .v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }
18
+ `})]})}const Oe=["UTC","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Sao_Paulo","Europe/London","Europe/Berlin","Europe/Amsterdam","Europe/Paris","Europe/Madrid","Europe/Stockholm","Europe/Istanbul","Asia/Dubai","Asia/Kolkata","Asia/Singapore","Asia/Tokyo","Asia/Seoul","Asia/Shanghai","Australia/Sydney","Pacific/Auckland"],ne=[{id:"general",title:"General",icon:E},{id:"theme",title:"Theme",icon:be},{id:"density",title:"Density",icon:Ce},{id:"density-rules",title:"Density rules",icon:re},{id:"palette",title:"Command palette",icon:de},{id:"keyboard",title:"Keyboard",icon:ke},{id:"notifications",title:"Notifications",icon:ce},{id:"storage",title:"Storage",icon:he},{id:"plugins",title:"Plugins",icon:ve},{id:"mcps",title:"MCP servers",icon:ue},{id:"skills",title:"Skills",icon:pe},{id:"hooks",title:"Hooks",icon:ge},{id:"activity",title:"Activity",icon:me},{id:"memory",title:"Memory",icon:je},{id:"task-defaults",title:"Task defaults",icon:xe},{id:"agent-defaults",title:"Agent defaults",icon:ye},{id:"privacy",title:"Privacy",icon:fe},{id:"advanced",title:"Advanced",icon:E}],le={workspaceName:"Bizar Harness",workspaceTimezone:typeof Intl<"u"?Intl.DateTimeFormat().resolvedOptions().timeZone:"UTC",defaultView:"overview",themeAccent:"#5b8def",densityBaseFont:13,tasksCompact:!1,memoryCompact:!0,activityCompact:!1,paletteHistory:!0,paletteFuzzy:!0,notifyAgentFinished:!0,notifyCiFailed:!0,notifyTokenBudget:!0,notifyDailyDigest:!1,notifyChannel:"toast",storagePath:"~/.bizar/store.db",cachePath:"~/.cache/bizar",sessionsPath:"~/.claude/sessions",cacheSizeMb:256,hookPreToolUse:!0,hookPostToolUse:!0,hookTaskStart:!0,hookTaskResume:!0,hookUserPromptSubmit:!0,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},Ue={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 v({value:j,defaultValue:m,onChange:x,children:y,id_attr:a}){return e.jsx("select",{id:a,value:j,defaultValue:m,onChange:p=>x==null?void 0:x(p.target.value),style:Ue,children:y})}function N({loading:j,value:m}){return j?e.jsx(De,{style:{width:32,height:16}}):e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:m??0})}function tt(){var _,J,K,Y,$,Z,Q,X,ee,te,ie;const[j,m]=g.useState("general"),x=Pe(),y=Re(),[a,p]=g.useState(le),[f,w]=g.useState(null),[U,c]=g.useState(null),[n,L]=g.useState(null),[W,G]=g.useState(null),T=async(t,l,r,k)=>{if(!(typeof window<"u"&&typeof window.confirm=="function"&&!window.confirm(k))){L(t),c(null);try{await I(r,{method:l}),G(`${t} @ ${new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`)}catch(C){c((C instanceof O,C.message))}finally{L(null)}}},Se=(t,l)=>{if(typeof window>"u")return;const r=document.createElement("a");r.href=t,r.download=l,r.rel="noopener",document.body.appendChild(r),r.click(),r.remove()},A=M("/api/skills?kind=skills"),z=M("/api/skills?kind=mcps"),q=M("/api/skills?kind=hooks"),P=M("/api/agents"),V=M("/api/settings");g.useEffect(()=>{V.data&&p(t=>({...t,...V.data}))},[V.data]);const o=(t,l)=>{p(r=>({...r,[t]:l})),h(t,l)},h=async(t,l)=>{try{const r={...a,[t]:l};await I("/api/settings",{method:"PUT",body:r}),w(Date.now()),c(null)}catch(r){c((r instanceof O,r.message))}},we=ne.map(t=>({id:t.id,title:t.title,icon:e.jsx(t.icon,{size:14,"aria-hidden":"true"})})),Te=t=>{m(t),requestAnimationFrame(()=>{var l;(l=document.getElementById(t))==null||l.scrollIntoView({behavior:"smooth",block:"start"})})},Ae=g.useRef(null);return g.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const t=ne.map(k=>document.getElementById(k.id)).filter(k=>k!==null);if(t.length===0)return;const l=new Map,r=new IntersectionObserver(k=>{for(const R of k){const D=R.target.id;R.isIntersecting?l.set(D,R.intersectionRatio):l.delete(D)}if(l.size===0)return;let C,ae=-1;for(const[R,D]of l)D>ae&&(ae=D,C=R);C&&m(C)},{rootMargin:"-30% 0px -50% 0px",threshold:[0,.25,.5,.75,1]});for(const k of t)r.observe(k);return()=>r.disconnect()},[]),e.jsx("div",{ref:Ae,"data-testid":"settings-view",children:e.jsxs(Me,{cols:3,gap:5,children:[e.jsx("aside",{style:{position:"sticky",top:0,alignSelf:"start"},children:e.jsx(Ie,{items:we,activeId:j,onSelect:Te})}),e.jsxs(B,{gap:5,style:{gridColumn:"span 2"},children:[U!==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:U}),f!==null&&e.jsxs(u,{align:"center",justify:"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(f).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})})]}),W!==null&&e.jsxs(u,{align:"center",justify:"end",gap:2,style:{fontSize:"var(--fs-12)",color:"var(--success)"},children:[e.jsx("span",{children:"Last action:"})," ",e.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:W})]}),e.jsxs(d,{id:"general",title:"General",description:"Workspace identity + default landing page.",icon:e.jsx(E,{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(S,{value:a.workspaceName,onChange:t=>o("workspaceName",t.target.value),style:{width:240}})}),e.jsx(i,{id:"workspace-timezone",label:"Timezone",description:"Used for activity timestamps + digests.",control:e.jsx(v,{value:a.workspaceTimezone,onChange:t=>o("workspaceTimezone",t),id_attr:"workspace-timezone-select",children:Oe.map(t=>e.jsx("option",{value:t,children:t},t))})}),e.jsx(i,{id:"default-view",label:"Default view on launch",control:e.jsxs(v,{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(d,{id:"theme",title:"Theme",description:"Color mode + accent + typography.",icon:e.jsx(be,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"theme-mode",label:"Color mode",control:e.jsxs(v,{value:x.mode,onChange:t=>x.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(u,{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(v,{defaultValue:"inter",onChange:t=>void h("themeFont",t),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.jsxs(u,{align:"center",gap:2,children:[e.jsx(F,{defaultValue:[8],min:0,max:16,step:1,onValueChange:t=>void h("themeRadius",t[0]??8)}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.themeRadius??8,"px"]})]})})]}),e.jsxs(d,{id:"density",title:"Density",description:"Comfortable by default. Compact fits more on screen.",icon:e.jsx(Ce,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"density-mode",label:"Density",control:e.jsxs(v,{value:y.density,onChange:t=>y.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(u,{align:"center",gap:2,children:[e.jsx(F,{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(d,{id:"density-rules",title:"Density rules",description:"Override density per surface.",icon:e.jsx(re,{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,{checked:a.activityCompact,onCheckedChange:t=>o("activityCompact",t)})})]}),e.jsxs(d,{id:"palette",title:"Command palette",description:"How the ⌘K palette behaves.",icon:e.jsx(de,{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=>h("paletteNavigate",t)})}),e.jsx(i,{id:"palette-spawn",label:"Show agent-spawn group",control:e.jsx(s,{defaultChecked:!0,onCheckedChange:t=>h("paletteSpawn",t)})}),e.jsx(i,{id:"palette-scope",label:"Default scope",description:"Where palette actions apply when no context.",control:e.jsxs(v,{defaultValue:"project",onChange:t=>void h("paletteScope",t),children:[e.jsx("option",{value:"project",children:"Active project"}),e.jsx("option",{value:"global",children:"Global"})]})})]}),e.jsxs(d,{id:"keyboard",title:"Keyboard",description:"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).",icon:e.jsx(ke,{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(d,{id:"notifications",title:"Notifications",description:"When the harness should ping you.",icon:e.jsx(ce,{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=>void h("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(v,{value:a.notifyChannel,onChange:t=>o("notifyChannel",t),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(d,{id:"storage",title:"Storage",description:"Where local data lives.",icon:e.jsx(he,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"store-path",label:"Local store path",control:e.jsx(S,{value:a.storagePath,onChange:t=>o("storagePath",t.target.value),style:{width:280,fontFamily:"var(--font-mono)"}})}),e.jsx(i,{id:"cache-path",label:"Cache directory",control:e.jsx(S,{value:a.cachePath,onChange:t=>o("cachePath",t.target.value),style:{width:280,fontFamily:"var(--font-mono)"}})}),e.jsx(i,{id:"sessions-path",label:"Claude Code sessions",control:e.jsx(S,{value:a.sessionsPath,onChange:t=>o("sessionsPath",t.target.value),style:{width:280,fontFamily:"var(--font-mono)"}})}),e.jsx(i,{id:"cache-size",label:"Cache budget",description:"Soft cap (MB) before LRU eviction.",control:e.jsxs(u,{align:"center",gap:2,children:[e.jsx(F,{value:[a.cacheSizeMb],onValueChange:t=>o("cacheSizeMb",t[0]??256),min:64,max:4096,step:32}),e.jsxs("code",{style:{fontFamily:"var(--font-mono)"},children:[a.cacheSizeMb," MB"]})]})}),e.jsx(i,{id:"store-gc",label:"Garbage collect",description:"Prune empty sessions and orphaned tasks.",control:e.jsx(b,{variant:"secondary",disabled:n==="gc",onClick:()=>void T("gc","POST","/api/admin/gc","Run garbage collect?"),children:n==="gc"?"Running…":"Run GC"})}),e.jsx(i,{id:"store-clear",label:"Clear local cache",description:"Destructive. Wipes the activity log and snapshots.",control:e.jsx(b,{variant:"danger",disabled:n==="clear",onClick:()=>void T("cache/clear","POST","/api/admin/cache/clear","Clear dashboard cache? This is reversible but will log you out briefly."),children:n==="clear"?"Clearing…":"Clear…"})})]}),e.jsxs(d,{id:"plugins",title:"Plugins",description:"Plugin registrations under `.claude/`.",icon:e.jsx(ve,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"plugins-count",label:"Loaded plugins",control:e.jsx(N,{loading:P.loading,value:((J=(_=P.data)==null?void 0:_.agents)==null?void 0:J.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((K=P.data)==null?void 0:K.agents)&&P.data.agents.length>0&&e.jsx(i,{id:"plugins-list",label:"Active agents",control:e.jsx(B,{gap:1,style:{maxHeight:200,overflowY:"auto",width:360},children:P.data.agents.map(t=>e.jsxs(u,{align:"center",justify:"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(oe,{tone:"success",children:"active"})]},t.name))})})]}),e.jsxs(d,{id:"mcps",title:"MCP servers",description:"Model Context Protocol servers.",icon:e.jsx(ue,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"mcps-count",label:"Registered MCPs",control:e.jsx(N,{loading:z.loading,value:(($=(Y=z.data)==null?void 0:Y.skills)==null?void 0:$.length)??0})}),Array.isArray((Z=z.data)==null?void 0:Z.skills)&&z.data.skills.length>0&&e.jsx(i,{id:"mcps-list",label:"Servers",control:e.jsx(B,{gap:1,style:{maxHeight:220,overflowY:"auto",width:360},children:z.data.skills.map(t=>e.jsxs(u,{align:"center",justify:"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 h(`mcp:${t.name}`,l)})]},t.name))})})]}),e.jsxs(d,{id:"skills",title:"Skills",description:"Bizar skill packs.",icon:e.jsx(pe,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"skills-count",label:"Loaded skills",control:e.jsx(N,{loading:A.loading,value:((X=(Q=A.data)==null?void 0:Q.skills)==null?void 0:X.length)??0})}),Array.isArray((ee=A.data)==null?void 0:ee.skills)&&A.data.skills.length>0&&e.jsx(i,{id:"skills-list",label:"Skill packs",control:e.jsx(B,{gap:1,style:{maxHeight:260,overflowY:"auto",width:360},children:A.data.skills.map(t=>e.jsxs(u,{align:"center",justify:"between",style:{padding:"4px 8px",background:"var(--surface-1)",borderRadius:"var(--radius-sm)"},children:[e.jsxs(u,{align:"center",gap:2,children:[e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:t.name}),e.jsx(oe,{tone:"neutral",children:t.source})]}),e.jsx(s,{defaultChecked:!0,onCheckedChange:l=>void h(`skill:${t.name}`,l)})]},t.name))})})]}),e.jsxs(d,{id:"hooks",title:"Hooks",description:"Executable hook scripts.",icon:e.jsx(ge,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"hooks-count",label:"Registered hooks",control:e.jsx(N,{loading:q.loading,value:((ie=(te=q.data)==null?void 0:te.skills)==null?void 0:ie.length)??0})}),e.jsx(i,{id:"hooks-pretool",label:"PreToolUse",description:"Block writes to .env / secrets / node_modules.",control:e.jsx(s,{checked:a.hookPreToolUse,onCheckedChange:t=>o("hookPreToolUse",t)})}),e.jsx(i,{id:"hooks-posttool",label:"PostToolUse",description:"Log tool latency to ~/.config/bizar/hook-logs/.",control:e.jsx(s,{checked:a.hookPostToolUse,onCheckedChange:t=>o("hookPostToolUse",t)})}),e.jsx(i,{id:"hooks-taskstart",label:"TaskStart",description:"Prime AI with project context.",control:e.jsx(s,{checked:a.hookTaskStart,onCheckedChange:t=>o("hookTaskStart",t)})}),e.jsx(i,{id:"hooks-taskresume",label:"TaskResume",description:"Re-read state + check git log.",control:e.jsx(s,{checked:a.hookTaskResume,onCheckedChange:t=>o("hookTaskResume",t)})}),e.jsx(i,{id:"hooks-prompt",label:"UserPromptSubmit",description:"Tag prompts for routing.",control:e.jsx(s,{checked:a.hookUserPromptSubmit,onCheckedChange:t=>o("hookUserPromptSubmit",t)})})]}),e.jsxs(d,{id:"activity",title:"Activity",description:"Stream retention + export.",icon:e.jsx(me,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"activity-retention",label:"Retain last",control:e.jsxs(u,{align:"center",gap:2,children:[e.jsx(F,{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(S,{placeholder:"heartbeat, ping, system",defaultValue:String(a.activityHide??""),onBlur:t=>void h("activityHide",t.target.value),style:{width:280}})}),e.jsx(i,{id:"activity-export",label:"Export",description:"Download the full activity log as NDJSON.",control:e.jsx(b,{variant:"secondary",onClick:()=>Se("/api/admin/activity/export","activity.ndjson"),children:"Export…"})})]}),e.jsxs(d,{id:"memory",title:"Memory",description:"Cross-session memo behavior.",icon:e.jsx(je,{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(v,{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(b,{variant:"secondary",disabled:n==="reindex",onClick:()=>void T("memory/reindex","POST","/api/admin/memory/reindex","Rebuild the memory vault search index?"),children:n==="reindex"?"Re-indexing…":"Re-index"})})]}),e.jsxs(d,{id:"task-defaults",title:"Task defaults",description:"Defaults applied to new tasks.",icon:e.jsx(xe,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"task-priority",label:"Default priority",control:e.jsxs(v,{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(v,{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(S,{placeholder:"odin",defaultValue:String(a.defaultTaskAssignee??""),onBlur:t=>void h("defaultTaskAssignee",t.target.value),style:{width:240}})})]}),e.jsxs(d,{id:"agent-defaults",title:"Agent defaults",description:"Defaults applied when spawning agents.",icon:e.jsx(ye,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"agent-model",label:"Default model",control:e.jsx(S,{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(u,{align:"center",gap:2,children:[e.jsx(F,{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,{defaultChecked:!!a.agentBackgroundDefault,onCheckedChange:t=>void h("agentBackgroundDefault",t)})}),e.jsx(i,{id:"agent-worktree",label:"Always create a worktree",control:e.jsx(s,{defaultChecked:!!(a.agentWorktree??!0),onCheckedChange:t=>void h("agentWorktree",t)})}),e.jsx(i,{id:"agent-system-prompt",label:"Extra system prompt",description:"Appended to every agent's system prompt.",control:e.jsx(Fe,{rows:3,placeholder:"You are a careful, methodical engineer…",defaultValue:String(a.agentSystemPrompt??""),onBlur:t=>void h("agentSystemPrompt",t.target.value)})})]}),e.jsxs(d,{id:"privacy",title:"Privacy",description:"What the harness sends and stores.",icon:e.jsx(fe,{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(v,{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,{defaultChecked:!!a.telemetryTokens,onCheckedChange:t=>void h("telemetryTokens",t)})})]}),e.jsxs(d,{id:"advanced",title:"Advanced",description:"Power-user toggles. Touch with care.",icon:e.jsx(E,{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(u,{align:"center",gap:2,children:[e.jsxs(b,{variant:"danger",disabled:n==="restart",onClick:()=>void T("restart","POST","/api/admin/restart","Restart the dashboard backend? You may need to relaunch the CLI if it does not come back."),children:[e.jsx(se,{size:12,"aria-hidden":!0})," ",n==="restart"?"Restarting…":"Restart…"]}),e.jsxs(b,{variant:"ghost",disabled:n==="rebuild",onClick:()=>void T("rebuild","POST","/api/admin/rebuild","Rebuild the dashboard package? This runs `npm run build`."),children:[e.jsx(Be,{size:12,"aria-hidden":!0})," ",n==="rebuild"?"Rebuilding…":"Rebuild"]})]})}),e.jsx(i,{id:"advanced-logs",label:"Open logs folder",control:e.jsxs(b,{variant:"secondary",disabled:n==="purge-logs",onClick:()=>void T("logs/purge","POST","/api/admin/logs/purge","Delete log files older than 14 days?"),children:[e.jsx(Ee,{size:12,"aria-hidden":!0})," ",n==="purge-logs"?"Purging…":"Purge logs"]})})]}),e.jsxs(d,{id:"configuration",title:"Configuration",description:"Reset to defaults, and edit the plugin-options sidecar.",icon:e.jsx(E,{size:14,"aria-hidden":!0}),children:[e.jsx(i,{id:"config-reset",label:"Reset settings to defaults",description:"Calls POST /api/settings/reset. Restores every key to its DEFAULT_SETTINGS value.",control:e.jsx(u,{align:"center",gap:2,children:e.jsxs(b,{variant:"danger",disabled:n==="settings-reset","data-testid":"settings-reset",onClick:()=>{typeof window<"u"&&typeof window.confirm=="function"&&!window.confirm("Reset every settings key to its default?")||(L("settings-reset"),c(null),(async()=>{try{const t=await I("/api/settings/reset",{method:"POST"});t!=null&&t.data&&p({...le,...t.data}),G(`reset @ ${new Date().toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`)}catch(t){c((t instanceof O,t.message))}finally{L(null)}})())},children:[e.jsx(se,{size:12,"aria-hidden":!0})," ",n==="settings-reset"?"Resetting…":"Reset to defaults"]})})}),e.jsx(i,{id:"config-plugin-options",label:"Plugin options",description:"JSON sidecar at ~/.config/bizar/plugin-options.json. Persisted via PUT /api/settings/plugin-options.",control:e.jsx(Le,{})})]})]})]})})}function Le(){const[j,m]=g.useState("{}"),[x,y]=g.useState(!1),[a,p]=g.useState(null),[f,w]=g.useState(null);g.useEffect(()=>{let c=!1;return(async()=>{try{const n=await I("/api/settings/plugin-options");c||m(JSON.stringify(n??{},null,2))}catch(n){c||w((n instanceof O,n.message))}})(),()=>{c=!0}},[]);const U=async()=>{let c;try{c=JSON.parse(j)}catch(n){w(`Invalid JSON: ${n.message}`);return}y(!0),w(null);try{await I("/api/settings/plugin-options",{method:"PUT",body:c}),p(Date.now())}catch(n){w((n instanceof O,n.message))}finally{y(!1)}};return e.jsxs(B,{gap:2,style:{width:"100%"},children:[e.jsx("textarea",{"data-testid":"plugin-options-form",value:j,onChange:c=>m(c.target.value),rows:6,spellCheck:!1,style:{width:"100%",fontFamily:"var(--font-mono)",fontSize:12,padding:"8px",background:"var(--surface-1)",color:"var(--text-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-1)"}}),e.jsxs(u,{align:"center",gap:2,children:[e.jsx(b,{variant:"primary",disabled:x,onClick:()=>void U(),children:x?"Saving…":"Save plugin options"}),a!==null&&e.jsxs("span",{style:{fontSize:11,color:"var(--text-2)"},children:["saved ",new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})]}),f&&e.jsx("span",{style:{fontSize:11,color:"var(--danger)"},children:f})]})]})}export{tt as SettingsView};