@polderlabs/bizar 10.7.2 → 10.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1202) hide show
  1. package/.claude/agents/_shared/AGENT_BASELINE.md +48 -243
  2. package/.claude/agents/_shared/CLAUDE_TOOLS.md +4 -2
  3. package/.claude/agents/_shared/SKILLS.md +18 -95
  4. package/.claude/agents/brand-designer.md +7 -5
  5. package/.claude/agents/debug-specialist.md +68 -0
  6. package/.claude/agents/exec-assistant.md +2 -1
  7. package/.claude/agents/help-desk.md +3 -3
  8. package/.claude/agents/it-lead.md +5 -5
  9. package/.claude/agents/knowledge-manager.md +2 -2
  10. package/.claude/agents/office-coordinator.md +3 -4
  11. package/.claude/agents/office-greeter.md +5 -5
  12. package/.claude/agents/office-manager.md +127 -42
  13. package/.claude/agents/planner.md +120 -0
  14. package/.claude/agents/principal-engineer.md +6 -5
  15. package/.claude/agents/qa-reviewer.md +4 -4
  16. package/.claude/agents/research-analyst.md +13 -43
  17. package/.claude/agents/senior-engineer.md +5 -4
  18. package/.claude/agents/support-tech.md +21 -73
  19. package/.claude/agents/ui-designer.md +89 -0
  20. package/.claude/commands/bizar.md +9 -16
  21. package/.claude/commands/cron.md +7 -3
  22. package/.claude/commands/learn.md +4 -2
  23. package/.claude/commands/plan.md +14 -28
  24. package/.claude/commands/plow-through.md +19 -38
  25. package/.claude/commands/pr-review.md +2 -3
  26. package/.claude/commands/setup-provider.md +15 -88
  27. package/.claude/commands/sprint.md +3 -3
  28. package/.claude/commands/tailscale-serve.md +9 -95
  29. package/.claude/commands/team.md +26 -122
  30. package/.claude/commands/test.md +3 -3
  31. package/.claude/commands/use-default.md +53 -0
  32. package/.claude/commands/use-premium.md +74 -0
  33. package/.claude/commands/validate.md +13 -61
  34. package/.claude/hooks/README.md +24 -108
  35. package/.claude/hooks/advisor-context.mjs +42 -0
  36. package/.claude/hooks/agent-grounding.mjs +41 -0
  37. package/.claude/hooks/content-style-guard.mjs +73 -0
  38. package/.claude/hooks/control-inbox.mjs +48 -0
  39. package/.claude/hooks/git-workflow-guard.mjs +104 -0
  40. package/.claude/hooks/learning-extract.mjs +0 -0
  41. package/.claude/hooks/path-ownership-guard.mjs +89 -0
  42. package/.claude/hooks/precompact-priorities.sh +11 -0
  43. package/.claude/hooks/pretooluse-bash.mjs +4 -11
  44. package/.claude/hooks/sessionend-recall.mjs +0 -0
  45. package/.claude/hooks/sessionstart-prime.mjs +10 -4
  46. package/.claude/hooks/simplify-guard.mjs +51 -0
  47. package/.claude/hooks/telemetry.mjs +69 -0
  48. package/.claude/hooks/thinking-route.mjs +7 -9
  49. package/.claude/hooks/worker-suggest.mjs +21 -13
  50. package/.claude/hooks/worktree-bootstrap.mjs +64 -0
  51. package/.claude/model-router.json +57 -0
  52. package/.claude/settings.json +92 -140
  53. package/AGENTS.md +95 -0
  54. package/README.md +76 -472
  55. package/cli/agent-browser-update.mjs +87 -274
  56. package/cli/atomic.mjs +1 -1
  57. package/cli/audit.mjs +31 -121
  58. package/cli/banner.mjs +3 -14
  59. package/cli/bin.mjs +83 -331
  60. package/cli/bootstrap.mjs +9 -12
  61. package/cli/commands/claude-cmd.mjs +45 -309
  62. package/cli/commands/control.mjs +102 -0
  63. package/cli/commands/install.mjs +9 -56
  64. package/cli/commands/rca.mjs +63 -165
  65. package/cli/commands/sandbox.mjs +89 -183
  66. package/cli/commands/setup-provider.mjs +65 -423
  67. package/cli/commands/task.mjs +249 -0
  68. package/cli/commands/util.mjs +37 -197
  69. package/cli/commands/validate.mjs +45 -75
  70. package/cli/control-store.mjs +312 -0
  71. package/{bizar-dash/src/server → cli/core}/backup-store.mjs +7 -17
  72. package/cli/doctor.mjs +8 -13
  73. package/cli/export.mjs +3 -7
  74. package/cli/init.mjs +1 -135
  75. package/cli/install/banner.mjs +4 -14
  76. package/cli/install/paths.mjs +3 -8
  77. package/cli/install.mjs +2 -7
  78. package/cli/migrate.mjs +24 -24
  79. package/{bizar-dash/src/server → cli}/progress-parser.mjs +7 -5
  80. package/cli/provision.mjs +140 -165
  81. package/cli/task-ledger.mjs +842 -0
  82. package/cli/update.mjs +2 -2
  83. package/cli/utils.mjs +1 -38
  84. package/config/AGENTS.md +14 -591
  85. package/config/rules/general.md +1 -1
  86. package/config/rules/uncertainty.md +2 -2
  87. package/config/skills/9router/SKILL.md +3 -3
  88. package/config/skills/9router-tts/SKILL.md +1 -1
  89. package/config/skills/agent-browser/SKILL.md +53 -0
  90. package/config/skills/bizar/README.md +3 -3
  91. package/config/skills/bizar/SKILL.md +31 -431
  92. package/config/skills/clean-gone-branches/SKILL.md +8 -0
  93. package/config/skills/commit-staged/SKILL.md +15 -0
  94. package/config/skills/cpp-coding-standards/README.md +3 -3
  95. package/config/skills/cpp-testing/README.md +2 -2
  96. package/config/skills/create-pr/SKILL.md +16 -0
  97. package/config/skills/cubesandbox/SKILL.md +33 -128
  98. package/config/skills/embedded-esp-idf/README.md +3 -3
  99. package/config/skills/harness-engineering/SKILL.md +37 -126
  100. package/config/skills/read-the-damn-docs/SKILL.md +2 -2
  101. package/config/skills/resolve-pr-comments/SKILL.md +14 -0
  102. package/config/skills/review-pr/SKILL.md +10 -0
  103. package/config/skills/self-improvement/SKILL.md +19 -54
  104. package/config/skills/simplify/SKILL.md +15 -0
  105. package/config/skills/update-pr-summary/SKILL.md +8 -0
  106. package/config/trigger-patterns.json +11 -25
  107. package/package.json +28 -102
  108. package/packages/sdk/dist/agent-registry.d.ts +2 -2
  109. package/packages/sdk/dist/agent-registry.js +2 -2
  110. package/packages/sdk/dist/consensus/index.d.ts +4 -4
  111. package/packages/sdk/dist/consensus/index.js +5 -5
  112. package/packages/sdk/dist/federation/envelope.d.ts +1 -1
  113. package/packages/sdk/dist/federation/envelope.js +2 -2
  114. package/packages/sdk/dist/index.d.ts +1 -4
  115. package/packages/sdk/dist/index.js +1 -4
  116. package/packages/sdk/dist/mcp/server.d.ts +8 -13
  117. package/packages/sdk/dist/mcp/server.js +15 -77
  118. package/packages/sdk/dist/router/index.d.ts +2 -2
  119. package/packages/sdk/dist/router/index.js +2 -2
  120. package/packages/sdk/dist/version.d.ts +2 -2
  121. package/packages/sdk/dist/version.js +2 -2
  122. package/packages/sdk/package.json +1 -2
  123. package/scripts/git-hooks/pre-commit +2 -2
  124. package/scripts/git-hooks/pre-push +3 -3
  125. package/scripts/install-hooks.sh +2 -2
  126. package/.claude/agents/vp-engineering.md +0 -54
  127. package/.claude/commands/goal.md +0 -99
  128. package/.claude/commands/visual-plan.md +0 -24
  129. package/.claude/hooks/__tests__/pretooluse-editwrite.test.mjs +0 -146
  130. package/.claude/hooks/__tests__/sessionend-recall.test.mjs +0 -256
  131. package/.claude/hooks/__tests__/sessionstart-prime.test.mjs +0 -325
  132. package/.claude/hooks/__tests__/thinking-route.test.mjs +0 -319
  133. package/.claude/hooks/post-merge-audit.sh +0 -93
  134. package/.claude/skills/9router/SKILL.md +0 -80
  135. package/.claude/skills/9router-chat/SKILL.md +0 -73
  136. package/.claude/skills/9router-embeddings/SKILL.md +0 -69
  137. package/.claude/skills/9router-image/SKILL.md +0 -86
  138. package/.claude/skills/9router-stt/SKILL.md +0 -79
  139. package/.claude/skills/9router-tts/SKILL.md +0 -80
  140. package/.claude/skills/9router-web-fetch/SKILL.md +0 -99
  141. package/.claude/skills/9router-web-search/SKILL.md +0 -91
  142. package/.claude/skills/agent-browser/SKILL.md +0 -64
  143. package/.claude/skills/bizar/README.md +0 -9
  144. package/.claude/skills/bizar/SKILL.md +0 -447
  145. package/.claude/skills/cpp-coding-standards/README.md +0 -28
  146. package/.claude/skills/cpp-coding-standards/SKILL.md +0 -634
  147. package/.claude/skills/cpp-coding-standards/references/concurrency.md +0 -320
  148. package/.claude/skills/cpp-coding-standards/references/error-handling.md +0 -229
  149. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  150. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  151. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  152. package/.claude/skills/cpp-testing/README.md +0 -28
  153. package/.claude/skills/cpp-testing/SKILL.md +0 -304
  154. package/.claude/skills/cpp-testing/references/coverage.md +0 -370
  155. package/.claude/skills/cpp-testing/references/framework-compare.md +0 -175
  156. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  157. package/.claude/skills/cpp-testing/references/mocking.md +0 -364
  158. package/.claude/skills/cpp-testing/references/tdd-workflow.md +0 -308
  159. package/.claude/skills/cubesandbox/SKILL.md +0 -148
  160. package/.claude/skills/de-sloppify/cleanup.mjs +0 -253
  161. package/.claude/skills/de-sloppify/cleanup.test.mjs +0 -189
  162. package/.claude/skills/embedded-esp-idf/README.md +0 -41
  163. package/.claude/skills/embedded-esp-idf/SKILL.md +0 -439
  164. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  165. package/.claude/skills/embedded-esp-idf/references/host-tests.md +0 -164
  166. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  167. package/.claude/skills/embedded-esp-idf/references/kconfig.md +0 -159
  168. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  169. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  170. package/.claude/skills/embedded-esp-idf/references/nvs.md +0 -121
  171. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  172. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  173. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  174. package/.claude/skills/glyph/SKILL.md +0 -163
  175. package/.claude/skills/harness-engineering/SKILL.md +0 -142
  176. package/.claude/skills/lightrag/SKILL.md +0 -81
  177. package/.claude/skills/memory-protocol/SKILL.md +0 -105
  178. package/.claude/skills/obsidian/SKILL.md +0 -306
  179. package/.claude/skills/read-the-damn-docs/SKILL.md +0 -113
  180. package/.claude/skills/self-improvement/SKILL.md +0 -64
  181. package/.claude/skills/skillopt/SKILL.md +0 -129
  182. package/.claude/skills/thinking-archetypes/SKILL.md +0 -90
  183. package/.claude/skills/thinking-bayesian/SKILL.md +0 -267
  184. package/.claude/skills/thinking-bounded-rationality/SKILL.md +0 -406
  185. package/.claude/skills/thinking-circle-of-competence/SKILL.md +0 -216
  186. package/.claude/skills/thinking-cynefin/SKILL.md +0 -70
  187. package/.claude/skills/thinking-debiasing/SKILL.md +0 -192
  188. package/.claude/skills/thinking-dual-process/SKILL.md +0 -282
  189. package/.claude/skills/thinking-effectuation/SKILL.md +0 -366
  190. package/.claude/skills/thinking-feedback-loops/SKILL.md +0 -464
  191. package/.claude/skills/thinking-fermi-estimation/SKILL.md +0 -263
  192. package/.claude/skills/thinking-first-principles/SKILL.md +0 -167
  193. package/.claude/skills/thinking-five-whys-plus/SKILL.md +0 -139
  194. package/.claude/skills/thinking-inversion/SKILL.md +0 -195
  195. package/.claude/skills/thinking-jobs-to-be-done/SKILL.md +0 -363
  196. package/.claude/skills/thinking-kepner-tregoe/SKILL.md +0 -154
  197. package/.claude/skills/thinking-leverage-points/SKILL.md +0 -390
  198. package/.claude/skills/thinking-lindy-effect/SKILL.md +0 -331
  199. package/.claude/skills/thinking-map-territory/SKILL.md +0 -111
  200. package/.claude/skills/thinking-margin-of-safety/SKILL.md +0 -330
  201. package/.claude/skills/thinking-model-combination/SKILL.md +0 -406
  202. package/.claude/skills/thinking-model-router/SKILL.md +0 -360
  203. package/.claude/skills/thinking-model-selection/SKILL.md +0 -341
  204. package/.claude/skills/thinking-occams-razor/SKILL.md +0 -129
  205. package/.claude/skills/thinking-ooda/SKILL.md +0 -127
  206. package/.claude/skills/thinking-opportunity-cost/SKILL.md +0 -360
  207. package/.claude/skills/thinking-pre-mortem/SKILL.md +0 -170
  208. package/.claude/skills/thinking-probabilistic/SKILL.md +0 -324
  209. package/.claude/skills/thinking-red-team/SKILL.md +0 -142
  210. package/.claude/skills/thinking-regret-minimization/SKILL.md +0 -335
  211. package/.claude/skills/thinking-reversibility/SKILL.md +0 -326
  212. package/.claude/skills/thinking-scientific-method/SKILL.md +0 -162
  213. package/.claude/skills/thinking-second-order/SKILL.md +0 -184
  214. package/.claude/skills/thinking-socratic/SKILL.md +0 -198
  215. package/.claude/skills/thinking-steel-manning/SKILL.md +0 -332
  216. package/.claude/skills/thinking-systems/SKILL.md +0 -238
  217. package/.claude/skills/thinking-theory-of-constraints/SKILL.md +0 -338
  218. package/.claude/skills/thinking-thought-experiment/SKILL.md +0 -354
  219. package/.claude/skills/thinking-triz/SKILL.md +0 -171
  220. package/.claude/skills/thinking-via-negativa/SKILL.md +0 -358
  221. package/bizar-dash/.bizar/graph/.graphify_analysis.json +0 -1540
  222. package/bizar-dash/.bizar/graph/.graphify_labels.json +0 -1
  223. package/bizar-dash/.bizar/graph/GRAPH_REPORT.md +0 -404
  224. package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/0661b816358db84dfdb7f10443db8a61152fd20b3fee950caf8fbf32920a1790.json +0 -1
  225. package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/16da06d774142a6e5d74829ad982531286a6193ef798de8f593db029e123ec32.json +0 -1
  226. package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/27e5697c01254c69c64c5a33896669073b40afb5ba88375102ae77fa5404136d.json +0 -1
  227. package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/532997898027254aa4c0932243dc71d2f55888181232b65974961934997dc85b.json +0 -1
  228. package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/84e3451a64c7f99f0cd6a88b0748d7426780486f53ab4935b7476b28c08f8293.json +0 -1
  229. package/bizar-dash/.bizar/graph/cache/ast/v0.8.46/88e5ea5f3e78fa69353fe9e6a8d1a05391d54605e25600cb125531eb5a6432ff.json +0 -1
  230. package/bizar-dash/.bizar/graph/cache/stat-index.json +0 -1
  231. package/bizar-dash/.bizar/graph/graph.html +0 -307
  232. package/bizar-dash/.bizar/graph/graph.json +0 -40267
  233. package/bizar-dash/.bizar/graph/manifest.json +0 -762
  234. package/bizar-dash/.graphifyignore +0 -40
  235. package/bizar-dash/.obsidian/README.md +0 -14
  236. package/bizar-dash/.obsidian/daily/2026-06-25.md +0 -9
  237. package/bizar-dash/.obsidian/vault.json +0 -7
  238. package/bizar-dash/.od-skills/web-prototype-e1429c1737/SKILL.md +0 -103
  239. package/bizar-dash/.od-skills/web-prototype-e1429c1737/assets/template.html +0 -338
  240. package/bizar-dash/.od-skills/web-prototype-e1429c1737/example.html +0 -81
  241. package/bizar-dash/.od-skills/web-prototype-e1429c1737/open-design.json +0 -172
  242. package/bizar-dash/.od-skills/web-prototype-e1429c1737/references/checklist.md +0 -44
  243. package/bizar-dash/.od-skills/web-prototype-e1429c1737/references/layouts.md +0 -247
  244. package/bizar-dash/ARCHITECTURE.md +0 -197
  245. package/bizar-dash/BROWSER_VERIFICATION.md +0 -190
  246. package/bizar-dash/CHANGELOG.md +0 -807
  247. package/bizar-dash/CONTROL_SURFACES.md +0 -156
  248. package/bizar-dash/DESIGN.md +0 -912
  249. package/bizar-dash/GLYPH.md +0 -418
  250. package/bizar-dash/PLAN.md +0 -1135
  251. package/bizar-dash/SETTINGS_AUDIT.md +0 -225
  252. package/bizar-dash/critique.json +0 -26
  253. package/bizar-dash/dist/assets/ActivityFeed-Bw4Cai7r.js +0 -11
  254. package/bizar-dash/dist/assets/ActivityFeed-Bw4Cai7r.js.map +0 -1
  255. package/bizar-dash/dist/assets/ActivityView-BC0QQ_j9.js +0 -2
  256. package/bizar-dash/dist/assets/ActivityView-BC0QQ_j9.js.map +0 -1
  257. package/bizar-dash/dist/assets/AdminView-CLTNKFL4.js +0 -11
  258. package/bizar-dash/dist/assets/AdminView-CLTNKFL4.js.map +0 -1
  259. package/bizar-dash/dist/assets/AgentActivity-DBWDByjk.js +0 -67
  260. package/bizar-dash/dist/assets/AgentActivity-DBWDByjk.js.map +0 -1
  261. package/bizar-dash/dist/assets/AgentsView-DD6bCIbA.js +0 -15
  262. package/bizar-dash/dist/assets/AgentsView-DD6bCIbA.js.map +0 -1
  263. package/bizar-dash/dist/assets/Alert-pzFISNtS.js +0 -6
  264. package/bizar-dash/dist/assets/Alert-pzFISNtS.js.map +0 -1
  265. package/bizar-dash/dist/assets/ArtifactsView-BVU5lfo7.js +0 -21
  266. package/bizar-dash/dist/assets/ArtifactsView-BVU5lfo7.js.map +0 -1
  267. package/bizar-dash/dist/assets/AuthView-BZ-bPIOM.js +0 -16
  268. package/bizar-dash/dist/assets/AuthView-BZ-bPIOM.js.map +0 -1
  269. package/bizar-dash/dist/assets/Avatar-CRW81ewE.js +0 -6
  270. package/bizar-dash/dist/assets/Avatar-CRW81ewE.js.map +0 -1
  271. package/bizar-dash/dist/assets/BackgroundJobsView-w8OZtXyI.js +0 -1
  272. package/bizar-dash/dist/assets/BackgroundJobsView-w8OZtXyI.js.map +0 -1
  273. package/bizar-dash/dist/assets/BackupView-u_O3j0TG.js +0 -1
  274. package/bizar-dash/dist/assets/BackupView-u_O3j0TG.js.map +0 -1
  275. package/bizar-dash/dist/assets/Banner-Du-3l05O.js +0 -1
  276. package/bizar-dash/dist/assets/Banner-Du-3l05O.js.map +0 -1
  277. package/bizar-dash/dist/assets/Card-Clkvh43Q.js +0 -1
  278. package/bizar-dash/dist/assets/Card-Clkvh43Q.js.map +0 -1
  279. package/bizar-dash/dist/assets/ChatView-BTjb3mIh.js +0 -9
  280. package/bizar-dash/dist/assets/ChatView-BTjb3mIh.js.map +0 -1
  281. package/bizar-dash/dist/assets/Chip-B7ovcm01.js +0 -1
  282. package/bizar-dash/dist/assets/Chip-B7ovcm01.js.map +0 -1
  283. package/bizar-dash/dist/assets/ClaudeSessionsView-BoZS5ldi.js +0 -1
  284. package/bizar-dash/dist/assets/ClaudeSessionsView-BoZS5ldi.js.map +0 -1
  285. package/bizar-dash/dist/assets/ClipboardView-Cb6XgYZI.js +0 -1
  286. package/bizar-dash/dist/assets/ClipboardView-Cb6XgYZI.js.map +0 -1
  287. package/bizar-dash/dist/assets/ConfigView-DfTJk1uL.js +0 -1
  288. package/bizar-dash/dist/assets/ConfigView-DfTJk1uL.js.map +0 -1
  289. package/bizar-dash/dist/assets/DiagnosticsView-D5Wy9xlJ.js +0 -2
  290. package/bizar-dash/dist/assets/DiagnosticsView-D5Wy9xlJ.js.map +0 -1
  291. package/bizar-dash/dist/assets/DialogsView-HVyfrXpq.js +0 -6
  292. package/bizar-dash/dist/assets/DialogsView-HVyfrXpq.js.map +0 -1
  293. package/bizar-dash/dist/assets/DoctorView-Dm94WI2z.js +0 -6
  294. package/bizar-dash/dist/assets/DoctorView-Dm94WI2z.js.map +0 -1
  295. package/bizar-dash/dist/assets/EmptyState-ccT__JZG.js +0 -1
  296. package/bizar-dash/dist/assets/EmptyState-ccT__JZG.js.map +0 -1
  297. package/bizar-dash/dist/assets/EnvVarsView-BhcIuJ6V.js +0 -8
  298. package/bizar-dash/dist/assets/EnvVarsView-BhcIuJ6V.js.map +0 -1
  299. package/bizar-dash/dist/assets/ErrorState-BSqf65ka.js +0 -1
  300. package/bizar-dash/dist/assets/ErrorState-BSqf65ka.js.map +0 -1
  301. package/bizar-dash/dist/assets/EvalView-2cbWVBUA.js +0 -1
  302. package/bizar-dash/dist/assets/EvalView-2cbWVBUA.js.map +0 -1
  303. package/bizar-dash/dist/assets/GoalsView-C3QG5p7T.js +0 -6
  304. package/bizar-dash/dist/assets/GoalsView-C3QG5p7T.js.map +0 -1
  305. package/bizar-dash/dist/assets/Grid-Bojq8Sg7.js +0 -1
  306. package/bizar-dash/dist/assets/Grid-Bojq8Sg7.js.map +0 -1
  307. package/bizar-dash/dist/assets/HistoryView-Bum2TMMw.js +0 -1
  308. package/bizar-dash/dist/assets/HistoryView-Bum2TMMw.js.map +0 -1
  309. package/bizar-dash/dist/assets/Input-DV-vdaV8.js +0 -1
  310. package/bizar-dash/dist/assets/Input-DV-vdaV8.js.map +0 -1
  311. package/bizar-dash/dist/assets/LibrariesView-DH2E2uNb.js +0 -6
  312. package/bizar-dash/dist/assets/LibrariesView-DH2E2uNb.js.map +0 -1
  313. package/bizar-dash/dist/assets/LightRAGView-BFCcj7Tl.js +0 -6
  314. package/bizar-dash/dist/assets/LightRAGView-BFCcj7Tl.js.map +0 -1
  315. package/bizar-dash/dist/assets/ListHeader-CCD_nIHb.js +0 -1
  316. package/bizar-dash/dist/assets/ListHeader-CCD_nIHb.js.map +0 -1
  317. package/bizar-dash/dist/assets/MemoryView-Cr-obIQY.js +0 -8
  318. package/bizar-dash/dist/assets/MemoryView-Cr-obIQY.js.map +0 -1
  319. package/bizar-dash/dist/assets/MessageBubble-CrCJ0SYG.js +0 -29
  320. package/bizar-dash/dist/assets/MessageBubble-CrCJ0SYG.js.map +0 -1
  321. package/bizar-dash/dist/assets/MiscView-CDUQpYuV.js +0 -1
  322. package/bizar-dash/dist/assets/MiscView-CDUQpYuV.js.map +0 -1
  323. package/bizar-dash/dist/assets/ModsView-B6OR-a4B.js +0 -6
  324. package/bizar-dash/dist/assets/ModsView-B6OR-a4B.js.map +0 -1
  325. package/bizar-dash/dist/assets/NotificationsView-CIqtY6D0.js +0 -6
  326. package/bizar-dash/dist/assets/NotificationsView-CIqtY6D0.js.map +0 -1
  327. package/bizar-dash/dist/assets/ObsidianView-Nahah8QC.js +0 -1
  328. package/bizar-dash/dist/assets/ObsidianView-Nahah8QC.js.map +0 -1
  329. package/bizar-dash/dist/assets/OverviewView-B6L_wa4M.js +0 -1
  330. package/bizar-dash/dist/assets/OverviewView-B6L_wa4M.js.map +0 -1
  331. package/bizar-dash/dist/assets/ProgressBar-KC4VXsl_.js +0 -1
  332. package/bizar-dash/dist/assets/ProgressBar-KC4VXsl_.js.map +0 -1
  333. package/bizar-dash/dist/assets/ProjectsView-DgxWiqHb.js +0 -11
  334. package/bizar-dash/dist/assets/ProjectsView-DgxWiqHb.js.map +0 -1
  335. package/bizar-dash/dist/assets/ProvidersView-BOqN9omv.js +0 -11
  336. package/bizar-dash/dist/assets/ProvidersView-BOqN9omv.js.map +0 -1
  337. package/bizar-dash/dist/assets/SchedulesView-yMaG3Dtd.js +0 -1
  338. package/bizar-dash/dist/assets/SchedulesView-yMaG3Dtd.js.map +0 -1
  339. package/bizar-dash/dist/assets/Select-Bf_P0S6H.js +0 -6
  340. package/bizar-dash/dist/assets/Select-Bf_P0S6H.js.map +0 -1
  341. package/bizar-dash/dist/assets/SettingsRow-CJb-F94Y.js +0 -1
  342. package/bizar-dash/dist/assets/SettingsRow-CJb-F94Y.js.map +0 -1
  343. package/bizar-dash/dist/assets/SettingsView-BvOGcgMS.js +0 -18
  344. package/bizar-dash/dist/assets/SettingsView-BvOGcgMS.js.map +0 -1
  345. package/bizar-dash/dist/assets/Sheet-BwMVGN-8.js +0 -1
  346. package/bizar-dash/dist/assets/Sheet-BwMVGN-8.js.map +0 -1
  347. package/bizar-dash/dist/assets/Slider-AjjzqI-5.js +0 -1
  348. package/bizar-dash/dist/assets/Slider-AjjzqI-5.js.map +0 -1
  349. package/bizar-dash/dist/assets/Sparkline-Z4y0YUZS.js +0 -1
  350. package/bizar-dash/dist/assets/Sparkline-Z4y0YUZS.js.map +0 -1
  351. package/bizar-dash/dist/assets/Switch-B79a2t-G.js +0 -10
  352. package/bizar-dash/dist/assets/Switch-B79a2t-G.js.map +0 -1
  353. package/bizar-dash/dist/assets/TasksView-G-s_pwwr.js +0 -6
  354. package/bizar-dash/dist/assets/TasksView-G-s_pwwr.js.map +0 -1
  355. package/bizar-dash/dist/assets/Textarea-BfXGMXQ7.js +0 -1
  356. package/bizar-dash/dist/assets/Textarea-BfXGMXQ7.js.map +0 -1
  357. package/bizar-dash/dist/assets/UpdateView-BKx3u9X8.js +0 -1
  358. package/bizar-dash/dist/assets/UpdateView-BKx3u9X8.js.map +0 -1
  359. package/bizar-dash/dist/assets/UsageView-M01G6bZQ.js +0 -1
  360. package/bizar-dash/dist/assets/UsageView-M01G6bZQ.js.map +0 -1
  361. package/bizar-dash/dist/assets/ViewHeader-BsnaspKw.js +0 -6
  362. package/bizar-dash/dist/assets/ViewHeader-BsnaspKw.js.map +0 -1
  363. package/bizar-dash/dist/assets/VoiceView-rWE8vziD.js +0 -1
  364. package/bizar-dash/dist/assets/VoiceView-rWE8vziD.js.map +0 -1
  365. package/bizar-dash/dist/assets/brain-D7k5s8vH.js +0 -6
  366. package/bizar-dash/dist/assets/brain-D7k5s8vH.js.map +0 -1
  367. package/bizar-dash/dist/assets/calendar-CAZoDd-l.js +0 -6
  368. package/bizar-dash/dist/assets/calendar-CAZoDd-l.js.map +0 -1
  369. package/bizar-dash/dist/assets/circle-D99cZJBr.js +0 -6
  370. package/bizar-dash/dist/assets/circle-D99cZJBr.js.map +0 -1
  371. package/bizar-dash/dist/assets/circle-alert-QQTU4Quz.js +0 -6
  372. package/bizar-dash/dist/assets/circle-alert-QQTU4Quz.js.map +0 -1
  373. package/bizar-dash/dist/assets/circle-check-BMbe7Kkr.js +0 -6
  374. package/bizar-dash/dist/assets/circle-check-BMbe7Kkr.js.map +0 -1
  375. package/bizar-dash/dist/assets/clock-OtT5mvF3.js +0 -6
  376. package/bizar-dash/dist/assets/clock-OtT5mvF3.js.map +0 -1
  377. package/bizar-dash/dist/assets/cmdk-C3F6LD6N.js +0 -80
  378. package/bizar-dash/dist/assets/cmdk-C3F6LD6N.js.map +0 -1
  379. package/bizar-dash/dist/assets/dnd-kit-BAOLODOI.js +0 -5
  380. package/bizar-dash/dist/assets/dnd-kit-BAOLODOI.js.map +0 -1
  381. package/bizar-dash/dist/assets/download-B-mPX5P_.js +0 -6
  382. package/bizar-dash/dist/assets/download-B-mPX5P_.js.map +0 -1
  383. package/bizar-dash/dist/assets/external-link-DPDQM1YO.js +0 -6
  384. package/bizar-dash/dist/assets/external-link-DPDQM1YO.js.map +0 -1
  385. package/bizar-dash/dist/assets/file-text-BsCrv5aP.js +0 -6
  386. package/bizar-dash/dist/assets/file-text-BsCrv5aP.js.map +0 -1
  387. package/bizar-dash/dist/assets/filter-Do63x17E.js +0 -6
  388. package/bizar-dash/dist/assets/filter-Do63x17E.js.map +0 -1
  389. package/bizar-dash/dist/assets/git-pull-request-CpRAmERC.js +0 -11
  390. package/bizar-dash/dist/assets/git-pull-request-CpRAmERC.js.map +0 -1
  391. package/bizar-dash/dist/assets/index-B1OIS316.js +0 -1
  392. package/bizar-dash/dist/assets/index-B1OIS316.js.map +0 -1
  393. package/bizar-dash/dist/assets/index-CR0TeJmc.js +0 -1
  394. package/bizar-dash/dist/assets/index-CR0TeJmc.js.map +0 -1
  395. package/bizar-dash/dist/assets/main-BRmJZcHt.js +0 -277
  396. package/bizar-dash/dist/assets/main-BRmJZcHt.js.map +0 -1
  397. package/bizar-dash/dist/assets/main-D0TY0myE.css +0 -1
  398. package/bizar-dash/dist/assets/network-DJnHwHX3.js +0 -6
  399. package/bizar-dash/dist/assets/network-DJnHwHX3.js.map +0 -1
  400. package/bizar-dash/dist/assets/pause-HitDUnk_.js +0 -6
  401. package/bizar-dash/dist/assets/pause-HitDUnk_.js.map +0 -1
  402. package/bizar-dash/dist/assets/pencil-Dkks7eIC.js +0 -6
  403. package/bizar-dash/dist/assets/pencil-Dkks7eIC.js.map +0 -1
  404. package/bizar-dash/dist/assets/play-blqh0msT.js +0 -6
  405. package/bizar-dash/dist/assets/play-blqh0msT.js.map +0 -1
  406. package/bizar-dash/dist/assets/plug-DVvSSe40.js +0 -6
  407. package/bizar-dash/dist/assets/plug-DVvSSe40.js.map +0 -1
  408. package/bizar-dash/dist/assets/plus-Cps-8lcG.js +0 -6
  409. package/bizar-dash/dist/assets/plus-Cps-8lcG.js.map +0 -1
  410. package/bizar-dash/dist/assets/power-DEX4_Xoa.js +0 -6
  411. package/bizar-dash/dist/assets/power-DEX4_Xoa.js.map +0 -1
  412. package/bizar-dash/dist/assets/power-off-upZ4xjaG.js +0 -6
  413. package/bizar-dash/dist/assets/power-off-upZ4xjaG.js.map +0 -1
  414. package/bizar-dash/dist/assets/refresh-ccw-DN_zCB1h.js +0 -6
  415. package/bizar-dash/dist/assets/refresh-ccw-DN_zCB1h.js.map +0 -1
  416. package/bizar-dash/dist/assets/refresh-cw-KGm5eQgv.js +0 -6
  417. package/bizar-dash/dist/assets/refresh-cw-KGm5eQgv.js.map +0 -1
  418. package/bizar-dash/dist/assets/rotate-ccw-D5fkDRgk.js +0 -6
  419. package/bizar-dash/dist/assets/rotate-ccw-D5fkDRgk.js.map +0 -1
  420. package/bizar-dash/dist/assets/rotate-cw-CClSVUaX.js +0 -6
  421. package/bizar-dash/dist/assets/rotate-cw-CClSVUaX.js.map +0 -1
  422. package/bizar-dash/dist/assets/save-BY4ViPku.js +0 -6
  423. package/bizar-dash/dist/assets/save-BY4ViPku.js.map +0 -1
  424. package/bizar-dash/dist/assets/send-CaOL1yQD.js +0 -6
  425. package/bizar-dash/dist/assets/send-CaOL1yQD.js.map +0 -1
  426. package/bizar-dash/dist/assets/shield-alert-DA9K6uZO.js +0 -6
  427. package/bizar-dash/dist/assets/shield-alert-DA9K6uZO.js.map +0 -1
  428. package/bizar-dash/dist/assets/trash-2-B_Y6HrfN.js +0 -6
  429. package/bizar-dash/dist/assets/trash-2-B_Y6HrfN.js.map +0 -1
  430. package/bizar-dash/dist/assets/trending-up-qKTUQKIT.js +0 -6
  431. package/bizar-dash/dist/assets/trending-up-qKTUQKIT.js.map +0 -1
  432. package/bizar-dash/dist/assets/triangle-alert-BeY8LAv6.js +0 -6
  433. package/bizar-dash/dist/assets/triangle-alert-BeY8LAv6.js.map +0 -1
  434. package/bizar-dash/dist/assets/upload-BZCtmqIh.js +0 -6
  435. package/bizar-dash/dist/assets/upload-BZCtmqIh.js.map +0 -1
  436. package/bizar-dash/dist/assets/zap-Bz1Z8y1Q.js +0 -6
  437. package/bizar-dash/dist/assets/zap-Bz1Z8y1Q.js.map +0 -1
  438. package/bizar-dash/dist/index.html +0 -19
  439. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  440. package/bizar-dash/plans/debug-plan/comments.json +0 -1
  441. package/bizar-dash/plans/debug-plan/meta.json +0 -10
  442. package/bizar-dash/plans/debug-plan/plan.json +0 -174
  443. package/bizar-dash/scripts/smoke-bg-retry.mjs +0 -246
  444. package/bizar-dash/skills/agent-baseline/SKILL.md +0 -80
  445. package/bizar-dash/skills/agent-browser/SKILL.md +0 -181
  446. package/bizar-dash/skills/bizar/SKILL.md +0 -116
  447. package/bizar-dash/skills/chat/SKILL.md +0 -74
  448. package/bizar-dash/skills/eval/SKILL.md +0 -237
  449. package/bizar-dash/skills/lightrag/SKILL.md +0 -86
  450. package/bizar-dash/skills/minimax/SKILL.md +0 -80
  451. package/bizar-dash/skills/obsidian/SKILL.md +0 -68
  452. package/bizar-dash/skills/providers/SKILL.md +0 -75
  453. package/bizar-dash/skills/publishing/SKILL.md +0 -147
  454. package/bizar-dash/skills/sdk/SKILL.md +0 -138
  455. package/bizar-dash/skills/self-improvement/SKILL.md +0 -53
  456. package/bizar-dash/skills/skills-cli/SKILL.md +0 -94
  457. package/bizar-dash/skills/usage/SKILL.md +0 -62
  458. package/bizar-dash/src/cli/dashboard-ports.mjs +0 -488
  459. package/bizar-dash/src/cli.mjs +0 -537
  460. package/bizar-dash/src/server/activity-log.mjs +0 -174
  461. package/bizar-dash/src/server/agent-bus.mjs +0 -485
  462. package/bizar-dash/src/server/agents-store.mjs +0 -466
  463. package/bizar-dash/src/server/api.mjs +0 -246
  464. package/bizar-dash/src/server/artifact-mint.mjs +0 -69
  465. package/bizar-dash/src/server/artifact-template.html +0 -810
  466. package/bizar-dash/src/server/artifacts-store.mjs +0 -839
  467. package/bizar-dash/src/server/auth.mjs +0 -548
  468. package/bizar-dash/src/server/background-store.mjs +0 -446
  469. package/bizar-dash/src/server/bg-poller.mjs +0 -375
  470. package/bizar-dash/src/server/bg-poller.test.mjs +0 -28
  471. package/bizar-dash/src/server/bg-retry.mjs +0 -446
  472. package/bizar-dash/src/server/bg-spawner.mjs +0 -390
  473. package/bizar-dash/src/server/browser.mjs +0 -40
  474. package/bizar-dash/src/server/claude-artifacts.mjs +0 -281
  475. package/bizar-dash/src/server/claude-bg-spawner.mjs +0 -390
  476. package/bizar-dash/src/server/claude-info.mjs +0 -412
  477. package/bizar-dash/src/server/claude-runner.mjs +0 -289
  478. package/bizar-dash/src/server/claude-sdk.mjs +0 -191
  479. package/bizar-dash/src/server/diagnostics-store.mjs +0 -568
  480. package/bizar-dash/src/server/dialog-poller.mjs +0 -105
  481. package/bizar-dash/src/server/dialog-store.mjs +0 -259
  482. package/bizar-dash/src/server/digest-store.mjs +0 -558
  483. package/bizar-dash/src/server/eval-store.mjs +0 -281
  484. package/bizar-dash/src/server/eval.mjs +0 -500
  485. package/bizar-dash/src/server/glyphs/mdx-compiler.mjs +0 -596
  486. package/bizar-dash/src/server/lib/path-safe.mjs +0 -283
  487. package/bizar-dash/src/server/lib/rate-limit.mjs +0 -122
  488. package/bizar-dash/src/server/logger.mjs +0 -71
  489. package/bizar-dash/src/server/loop-runtime.mjs +0 -429
  490. package/bizar-dash/src/server/memory-consolidator.mjs +0 -225
  491. package/bizar-dash/src/server/memory-distillation.mjs +0 -296
  492. package/bizar-dash/src/server/memory-git.mjs +0 -473
  493. package/bizar-dash/src/server/memory-lightrag.mjs +0 -1483
  494. package/bizar-dash/src/server/memory-obsidian.mjs +0 -230
  495. package/bizar-dash/src/server/memory-schema.mjs +0 -145
  496. package/bizar-dash/src/server/memory-secrets.mjs +0 -84
  497. package/bizar-dash/src/server/memory-store.mjs +0 -1093
  498. package/bizar-dash/src/server/metrics.mjs +0 -268
  499. package/bizar-dash/src/server/minimax-usage-store.mjs +0 -372
  500. package/bizar-dash/src/server/minimax.mjs +0 -683
  501. package/bizar-dash/src/server/mod-security.mjs +0 -397
  502. package/bizar-dash/src/server/mods-loader.mjs +0 -1243
  503. package/bizar-dash/src/server/notifications-store.mjs +0 -243
  504. package/bizar-dash/src/server/obsidian-store.mjs +0 -318
  505. package/bizar-dash/src/server/ocr.mjs +0 -55
  506. package/bizar-dash/src/server/otel.mjs +0 -260
  507. package/bizar-dash/src/server/pair-store.mjs +0 -138
  508. package/bizar-dash/src/server/progress-parser.test.mjs +0 -129
  509. package/bizar-dash/src/server/projects-store.mjs +0 -364
  510. package/bizar-dash/src/server/providers-store.mjs +0 -1801
  511. package/bizar-dash/src/server/routes/_shared.mjs +0 -430
  512. package/bizar-dash/src/server/routes/activity.mjs +0 -215
  513. package/bizar-dash/src/server/routes/admin.mjs +0 -163
  514. package/bizar-dash/src/server/routes/agent-bus.mjs +0 -185
  515. package/bizar-dash/src/server/routes/agents-cc.mjs +0 -551
  516. package/bizar-dash/src/server/routes/agents-cc.test.mjs +0 -35
  517. package/bizar-dash/src/server/routes/agents.mjs +0 -149
  518. package/bizar-dash/src/server/routes/artifacts.mjs +0 -315
  519. package/bizar-dash/src/server/routes/audit.mjs +0 -79
  520. package/bizar-dash/src/server/routes/auth.mjs +0 -69
  521. package/bizar-dash/src/server/routes/background.mjs +0 -422
  522. package/bizar-dash/src/server/routes/backup.mjs +0 -112
  523. package/bizar-dash/src/server/routes/chat.mjs +0 -727
  524. package/bizar-dash/src/server/routes/claude-session-detail.mjs +0 -367
  525. package/bizar-dash/src/server/routes/claude-sessions.mjs +0 -259
  526. package/bizar-dash/src/server/routes/clipboard.mjs +0 -173
  527. package/bizar-dash/src/server/routes/config.mjs +0 -180
  528. package/bizar-dash/src/server/routes/decisions.mjs +0 -78
  529. package/bizar-dash/src/server/routes/diagnostics.mjs +0 -50
  530. package/bizar-dash/src/server/routes/dialogs.mjs +0 -134
  531. package/bizar-dash/src/server/routes/digests.mjs +0 -82
  532. package/bizar-dash/src/server/routes/distill.mjs +0 -129
  533. package/bizar-dash/src/server/routes/doctor.mjs +0 -71
  534. package/bizar-dash/src/server/routes/env-vars.mjs +0 -231
  535. package/bizar-dash/src/server/routes/eval.mjs +0 -187
  536. package/bizar-dash/src/server/routes/fs.mjs +0 -429
  537. package/bizar-dash/src/server/routes/goal-planner.mjs +0 -236
  538. package/bizar-dash/src/server/routes/goals.mjs +0 -428
  539. package/bizar-dash/src/server/routes/history.mjs +0 -78
  540. package/bizar-dash/src/server/routes/lightrag.mjs +0 -169
  541. package/bizar-dash/src/server/routes/loops.mjs +0 -138
  542. package/bizar-dash/src/server/routes/memory.mjs +0 -1524
  543. package/bizar-dash/src/server/routes/minimax.mjs +0 -133
  544. package/bizar-dash/src/server/routes/misc.mjs +0 -90
  545. package/bizar-dash/src/server/routes/model-router.mjs +0 -158
  546. package/bizar-dash/src/server/routes/model-router.test.mjs +0 -104
  547. package/bizar-dash/src/server/routes/mods.mjs +0 -359
  548. package/bizar-dash/src/server/routes/notifications.mjs +0 -54
  549. package/bizar-dash/src/server/routes/obsidian.mjs +0 -239
  550. package/bizar-dash/src/server/routes/ocr.mjs +0 -182
  551. package/bizar-dash/src/server/routes/overview.mjs +0 -219
  552. package/bizar-dash/src/server/routes/overview.test.mjs +0 -65
  553. package/bizar-dash/src/server/routes/pair.mjs +0 -67
  554. package/bizar-dash/src/server/routes/projects.mjs +0 -175
  555. package/bizar-dash/src/server/routes/providers.mjs +0 -361
  556. package/bizar-dash/src/server/routes/schedules.mjs +0 -159
  557. package/bizar-dash/src/server/routes/sessions.mjs +0 -80
  558. package/bizar-dash/src/server/routes/settings.mjs +0 -51
  559. package/bizar-dash/src/server/routes/skills.mjs +0 -70
  560. package/bizar-dash/src/server/routes/spawn.mjs +0 -59
  561. package/bizar-dash/src/server/routes/tailscale.mjs +0 -46
  562. package/bizar-dash/src/server/routes/tasks.mjs +0 -579
  563. package/bizar-dash/src/server/routes/themes.mjs +0 -51
  564. package/bizar-dash/src/server/routes/update.mjs +0 -367
  565. package/bizar-dash/src/server/routes/usage.mjs +0 -136
  566. package/bizar-dash/src/server/routes/users.mjs +0 -102
  567. package/bizar-dash/src/server/routes/voice.mjs +0 -167
  568. package/bizar-dash/src/server/routes/workspaces.mjs +0 -299
  569. package/bizar-dash/src/server/routes-v2/auth.mjs +0 -59
  570. package/bizar-dash/src/server/routes-v2/events.mjs +0 -121
  571. package/bizar-dash/src/server/routes-v2/health.mjs +0 -21
  572. package/bizar-dash/src/server/routes-v2/index.mjs +0 -90
  573. package/bizar-dash/src/server/routes-v2/sessions.mjs +0 -111
  574. package/bizar-dash/src/server/schedules-runner.mjs +0 -556
  575. package/bizar-dash/src/server/schedules-store.mjs +0 -268
  576. package/bizar-dash/src/server/search-store.mjs +0 -220
  577. package/bizar-dash/src/server/serve-info.mjs +0 -1110
  578. package/bizar-dash/src/server/server.mjs +0 -951
  579. package/bizar-dash/src/server/settings-store.mjs +0 -45
  580. package/bizar-dash/src/server/skills-store.mjs +0 -192
  581. package/bizar-dash/src/server/sprint.test.mjs +0 -163
  582. package/bizar-dash/src/server/state.mjs +0 -437
  583. package/bizar-dash/src/server/tailscale-store.mjs +0 -113
  584. package/bizar-dash/src/server/task-delegator.mjs +0 -969
  585. package/bizar-dash/src/server/task-splitter.mjs +0 -241
  586. package/bizar-dash/src/server/tasks-store.mjs +0 -556
  587. package/bizar-dash/src/server/tui.mjs +0 -923
  588. package/bizar-dash/src/server/update-store.mjs +0 -168
  589. package/bizar-dash/src/server/v2-auth-file.mjs +0 -99
  590. package/bizar-dash/src/server/v2-event-bus.mjs +0 -128
  591. package/bizar-dash/src/server/voice-store.mjs +0 -229
  592. package/bizar-dash/src/server/voice-transcribe.mjs +0 -72
  593. package/bizar-dash/src/server/watcher.mjs +0 -81
  594. package/bizar-dash/src/server/workers/transcription-worker.mjs +0 -213
  595. package/bizar-dash/src/server/workspaces.mjs +0 -626
  596. package/bizar-dash/src/server/yaml.mjs +0 -238
  597. package/bizar-dash/src/web/index.html +0 -17
  598. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  599. package/bizar-dash/src/web/v8/App.tsx +0 -426
  600. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +0 -102
  601. package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +0 -79
  602. package/bizar-dash/src/web/v8/__tests__/BackgroundJobsView.test.tsx +0 -172
  603. package/bizar-dash/src/web/v8/__tests__/MemoryView.test.tsx +0 -91
  604. package/bizar-dash/src/web/v8/__tests__/NotificationsPopover.test.tsx +0 -91
  605. package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +0 -12
  606. package/bizar-dash/src/web/v8/__tests__/SchedulesView.test.tsx +0 -157
  607. package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +0 -84
  608. package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +0 -95
  609. package/bizar-dash/src/web/v8/__tests__/Topbar.test.tsx +0 -86
  610. package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +0 -63
  611. package/bizar-dash/src/web/v8/__tests__/admin-view.test.tsx +0 -105
  612. package/bizar-dash/src/web/v8/__tests__/agent-card-metrics.test.tsx +0 -54
  613. package/bizar-dash/src/web/v8/__tests__/agent-detail-tasks.test.tsx +0 -68
  614. package/bizar-dash/src/web/v8/__tests__/agent-hierarchy.test.tsx +0 -79
  615. package/bizar-dash/src/web/v8/__tests__/agents-stuck-banner.test.tsx +0 -142
  616. package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +0 -90
  617. package/bizar-dash/src/web/v8/__tests__/artifacts-view.test.tsx +0 -102
  618. package/bizar-dash/src/web/v8/__tests__/audit-fixes.test.tsx +0 -139
  619. package/bizar-dash/src/web/v8/__tests__/auth-view.test.tsx +0 -94
  620. package/bizar-dash/src/web/v8/__tests__/changelog.test.tsx +0 -79
  621. package/bizar-dash/src/web/v8/__tests__/chat-types.test.ts +0 -55
  622. package/bizar-dash/src/web/v8/__tests__/chat-view.test.tsx +0 -142
  623. package/bizar-dash/src/web/v8/__tests__/claude-sessions-view.test.tsx +0 -159
  624. package/bizar-dash/src/web/v8/__tests__/clipboard-view.test.tsx +0 -90
  625. package/bizar-dash/src/web/v8/__tests__/config-view.test.tsx +0 -111
  626. package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +0 -104
  627. package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +0 -135
  628. package/bizar-dash/src/web/v8/__tests__/cx.test.ts +0 -25
  629. package/bizar-dash/src/web/v8/__tests__/data.test.tsx +0 -293
  630. package/bizar-dash/src/web/v8/__tests__/dialogs-view.test.tsx +0 -81
  631. package/bizar-dash/src/web/v8/__tests__/env-vars-view.test.tsx +0 -123
  632. package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +0 -213
  633. package/bizar-dash/src/web/v8/__tests__/goals-cc-roundtrip.test.tsx +0 -94
  634. package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +0 -105
  635. package/bizar-dash/src/web/v8/__tests__/history-view.test.tsx +0 -96
  636. package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +0 -176
  637. package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +0 -70
  638. package/bizar-dash/src/web/v8/__tests__/lightrag-view.test.tsx +0 -90
  639. package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +0 -60
  640. package/bizar-dash/src/web/v8/__tests__/misc-view.test.tsx +0 -79
  641. package/bizar-dash/src/web/v8/__tests__/mods-view.test.tsx +0 -123
  642. package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +0 -137
  643. package/bizar-dash/src/web/v8/__tests__/new-views.test.tsx +0 -160
  644. package/bizar-dash/src/web/v8/__tests__/obsidian-view.test.tsx +0 -82
  645. package/bizar-dash/src/web/v8/__tests__/overview-trends.test.tsx +0 -87
  646. package/bizar-dash/src/web/v8/__tests__/projects-view.test.tsx +0 -134
  647. package/bizar-dash/src/web/v8/__tests__/providers-view.test.tsx +0 -100
  648. package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +0 -104
  649. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +0 -104
  650. package/bizar-dash/src/web/v8/__tests__/update-view.test.tsx +0 -89
  651. package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +0 -92
  652. package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +0 -87
  653. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +0 -188
  654. package/bizar-dash/src/web/v8/__tests__/voice-view.test.tsx +0 -80
  655. package/bizar-dash/src/web/v8/data/fetcher.ts +0 -59
  656. package/bizar-dash/src/web/v8/data/types.ts +0 -239
  657. package/bizar-dash/src/web/v8/data/useFetch.ts +0 -62
  658. package/bizar-dash/src/web/v8/data/useViewNavigate.ts +0 -54
  659. package/bizar-dash/src/web/v8/data/useWebSocket.ts +0 -206
  660. package/bizar-dash/src/web/v8/main.tsx +0 -28
  661. package/bizar-dash/src/web/v8/shell/AppShell.tsx +0 -126
  662. package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +0 -29
  663. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +0 -515
  664. package/bizar-dash/src/web/v8/shell/StatusBar.tsx +0 -63
  665. package/bizar-dash/src/web/v8/shell/Topbar.tsx +0 -330
  666. package/bizar-dash/src/web/v8/shell/index.ts +0 -15
  667. package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +0 -137
  668. package/bizar-dash/src/web/v8/ui/activity/ActivityLane.tsx +0 -315
  669. package/bizar-dash/src/web/v8/ui/activity/ActivityLanes.tsx +0 -51
  670. package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +0 -101
  671. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +0 -239
  672. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +0 -439
  673. package/bizar-dash/src/web/v8/ui/agents/AgentLiveOutput.tsx +0 -252
  674. package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +0 -371
  675. package/bizar-dash/src/web/v8/ui/chat/ChatDrawer.tsx +0 -208
  676. package/bizar-dash/src/web/v8/ui/chat/EventStream.tsx +0 -83
  677. package/bizar-dash/src/web/v8/ui/chat/MessageBubble.tsx +0 -174
  678. package/bizar-dash/src/web/v8/ui/controls/Button.tsx +0 -141
  679. package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +0 -32
  680. package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +0 -49
  681. package/bizar-dash/src/web/v8/ui/controls/Field.tsx +0 -78
  682. package/bizar-dash/src/web/v8/ui/controls/Form.tsx +0 -23
  683. package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +0 -112
  684. package/bizar-dash/src/web/v8/ui/controls/Input.tsx +0 -94
  685. package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +0 -74
  686. package/bizar-dash/src/web/v8/ui/controls/Select.tsx +0 -171
  687. package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +0 -68
  688. package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +0 -56
  689. package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +0 -64
  690. package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +0 -36
  691. package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +0 -85
  692. package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +0 -134
  693. package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +0 -175
  694. package/bizar-dash/src/web/v8/ui/data/Badge.tsx +0 -93
  695. package/bizar-dash/src/web/v8/ui/data/BarList.tsx +0 -101
  696. package/bizar-dash/src/web/v8/ui/data/Card.tsx +0 -140
  697. package/bizar-dash/src/web/v8/ui/data/Chip.tsx +0 -96
  698. package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +0 -42
  699. package/bizar-dash/src/web/v8/ui/data/ListHeader.tsx +0 -94
  700. package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +0 -93
  701. package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +0 -98
  702. package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +0 -150
  703. package/bizar-dash/src/web/v8/ui/data/Table.tsx +0 -170
  704. package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +0 -130
  705. package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +0 -122
  706. package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +0 -95
  707. package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +0 -39
  708. package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +0 -143
  709. package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +0 -149
  710. package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +0 -8
  711. package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +0 -231
  712. package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +0 -48
  713. package/bizar-dash/src/web/v8/ui/feedback/ErrorState.tsx +0 -116
  714. package/bizar-dash/src/web/v8/ui/feedback/NotificationsPopover.tsx +0 -242
  715. package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +0 -56
  716. package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +0 -103
  717. package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +0 -67
  718. package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +0 -30
  719. package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +0 -66
  720. package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +0 -89
  721. package/bizar-dash/src/web/v8/ui/feedback/useFocusTrap.ts +0 -58
  722. package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +0 -176
  723. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +0 -278
  724. package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +0 -115
  725. package/bizar-dash/src/web/v8/ui/index.ts +0 -369
  726. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +0 -117
  727. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +0 -391
  728. package/bizar-dash/src/web/v8/ui/kanban/KanbanCardBadges.tsx +0 -111
  729. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +0 -181
  730. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +0 -126
  731. package/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +0 -638
  732. package/bizar-dash/src/web/v8/ui/kanban/KanbanEmptyColumn.tsx +0 -43
  733. package/bizar-dash/src/web/v8/ui/kanban/KanbanProgress.tsx +0 -130
  734. package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +0 -141
  735. package/bizar-dash/src/web/v8/ui/kanban/KanbanToolbar.tsx +0 -291
  736. package/bizar-dash/src/web/v8/ui/kanban/useKanbanSelection.ts +0 -90
  737. package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +0 -30
  738. package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +0 -161
  739. package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +0 -144
  740. package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +0 -225
  741. package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +0 -81
  742. package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +0 -164
  743. package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +0 -128
  744. package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +0 -79
  745. package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +0 -144
  746. package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +0 -40
  747. package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +0 -67
  748. package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +0 -104
  749. package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +0 -77
  750. package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +0 -33
  751. package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +0 -62
  752. package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +0 -42
  753. package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +0 -73
  754. package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +0 -49
  755. package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +0 -91
  756. package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +0 -88
  757. package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +0 -109
  758. package/bizar-dash/src/web/v8/ui/styles/globals.css +0 -265
  759. package/bizar-dash/src/web/v8/ui/styles/reset.css +0 -57
  760. package/bizar-dash/src/web/v8/ui/styles/tokens.css +0 -238
  761. package/bizar-dash/src/web/v8/ui/tasks/TaskDetail.tsx +0 -313
  762. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +0 -74
  763. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +0 -66
  764. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +0 -86
  765. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +0 -94
  766. package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +0 -93
  767. package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +0 -15
  768. package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +0 -16
  769. package/bizar-dash/src/web/v8/ui/utils/cx.ts +0 -19
  770. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +0 -457
  771. package/bizar-dash/src/web/v8/views/Admin/AdminView.tsx +0 -237
  772. package/bizar-dash/src/web/v8/views/Agents/AgentHierarchy.tsx +0 -212
  773. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +0 -511
  774. package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +0 -452
  775. package/bizar-dash/src/web/v8/views/Artifacts/ClaudeArtifactView.tsx +0 -179
  776. package/bizar-dash/src/web/v8/views/Auth/AuthView.tsx +0 -179
  777. package/bizar-dash/src/web/v8/views/BackgroundJobs/BackgroundJobsView.tsx +0 -467
  778. package/bizar-dash/src/web/v8/views/Backup/BackupView.tsx +0 -204
  779. package/bizar-dash/src/web/v8/views/Chat/ChatView.tsx +0 -368
  780. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionDetail.tsx +0 -144
  781. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionsView.tsx +0 -331
  782. package/bizar-dash/src/web/v8/views/ClaudeSessions/NewSessionModal.tsx +0 -136
  783. package/bizar-dash/src/web/v8/views/Clipboard/ClipboardView.tsx +0 -210
  784. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +0 -142
  785. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +0 -272
  786. package/bizar-dash/src/web/v8/views/Config/ConfigView.tsx +0 -364
  787. package/bizar-dash/src/web/v8/views/Diagnostics/DiagnosticsView.tsx +0 -203
  788. package/bizar-dash/src/web/v8/views/Dialogs/DialogsView.tsx +0 -196
  789. package/bizar-dash/src/web/v8/views/Doctor/DoctorView.tsx +0 -181
  790. package/bizar-dash/src/web/v8/views/EnvVars/EnvVarsView.tsx +0 -365
  791. package/bizar-dash/src/web/v8/views/Eval/EvalView.tsx +0 -278
  792. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +0 -351
  793. package/bizar-dash/src/web/v8/views/History/HistoryView.tsx +0 -227
  794. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +0 -123
  795. package/bizar-dash/src/web/v8/views/LightRAG/LightRAGView.tsx +0 -204
  796. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +0 -258
  797. package/bizar-dash/src/web/v8/views/Misc/MiscView.tsx +0 -159
  798. package/bizar-dash/src/web/v8/views/Mods/ModsView.tsx +0 -348
  799. package/bizar-dash/src/web/v8/views/Notifications/NotificationsView.tsx +0 -247
  800. package/bizar-dash/src/web/v8/views/Obsidian/ObsidianView.tsx +0 -193
  801. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +0 -274
  802. package/bizar-dash/src/web/v8/views/Projects/ProjectsView.tsx +0 -273
  803. package/bizar-dash/src/web/v8/views/Providers/ProvidersView.tsx +0 -371
  804. package/bizar-dash/src/web/v8/views/Router.tsx +0 -202
  805. package/bizar-dash/src/web/v8/views/Schedules/SchedulesView.tsx +0 -462
  806. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +0 -1039
  807. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +0 -386
  808. package/bizar-dash/src/web/v8/views/Update/UpdateView.tsx +0 -270
  809. package/bizar-dash/src/web/v8/views/Usage/UsageView.tsx +0 -210
  810. package/bizar-dash/src/web/v8/views/Voice/VoiceView.tsx +0 -192
  811. package/bizar-dash/src/web/v8/vite-env.d.ts +0 -15
  812. package/bizar-dash/templates/mod/FORMAT.md +0 -76
  813. package/bizar-dash/templates/mod/hello-mod/README.md +0 -19
  814. package/bizar-dash/templates/mod/hello-mod/agents/greeter.md +0 -8
  815. package/bizar-dash/templates/mod/hello-mod/commands/hello.md +0 -6
  816. package/bizar-dash/templates/mod/hello-mod/mod.json +0 -20
  817. package/bizar-dash/templates/mod/hello-mod/routes/ping.mjs +0 -9
  818. package/bizar-dash/templates/mod/hello-mod/views/HelloView.tsx +0 -10
  819. package/bizar-dash/tests/_update-test-helpers.mjs +0 -13
  820. package/bizar-dash/tests/admin-labels.test.mjs +0 -42
  821. package/bizar-dash/tests/admin-run-grouping.test.mjs +0 -42
  822. package/bizar-dash/tests/agent-bus.test.mjs +0 -289
  823. package/bizar-dash/tests/agents-preview-truncate.test.mjs +0 -35
  824. package/bizar-dash/tests/agents-summary-sanitize.test.ts +0 -51
  825. package/bizar-dash/tests/auth-inputs-labels.test.mjs +0 -45
  826. package/bizar-dash/tests/background-jobs-action-labels.test.mjs +0 -41
  827. package/bizar-dash/tests/background-jobs-states.test.mjs +0 -80
  828. package/bizar-dash/tests/background-pause-resume.test.mjs +0 -46
  829. package/bizar-dash/tests/background-sdk-session.test.mjs +0 -94
  830. package/bizar-dash/tests/background-session-events.test.mjs +0 -74
  831. package/bizar-dash/tests/background-spawn-from-ui.test.mjs +0 -36
  832. package/bizar-dash/tests/background-steer-sdk.test.mjs +0 -71
  833. package/bizar-dash/tests/background-steer.test.mjs +0 -60
  834. package/bizar-dash/tests/backup-restore.test.mjs +0 -217
  835. package/bizar-dash/tests/backup-store.test.mjs +0 -300
  836. package/bizar-dash/tests/banner-tones.test.mjs +0 -50
  837. package/bizar-dash/tests/bundle-analysis.test.mjs +0 -74
  838. package/bizar-dash/tests/callout-tokens.test.mjs +0 -30
  839. package/bizar-dash/tests/chat-new-session.test.mjs +0 -63
  840. package/bizar-dash/tests/claude-session-detail-states.test.mjs +0 -67
  841. package/bizar-dash/tests/cli-bugfixes.test.mjs +0 -151
  842. package/bizar-dash/tests/cli-error-visibility.test.mjs +0 -153
  843. package/bizar-dash/tests/cli-refactor.test.mjs +0 -183
  844. package/bizar-dash/tests/cli-tailscale.test.mjs +0 -113
  845. package/bizar-dash/tests/clipboard.test.mjs +0 -147
  846. package/bizar-dash/tests/components/BackgroundJobsSkeleton.test.tsx +0 -38
  847. package/bizar-dash/tests/components/Button.test.tsx +0 -78
  848. package/bizar-dash/tests/components/Card.test.tsx +0 -59
  849. package/bizar-dash/tests/components/Dialog.test.tsx +0 -80
  850. package/bizar-dash/tests/components/Toast.test.tsx +0 -61
  851. package/bizar-dash/tests/dash-cli-load.test.mjs +0 -44
  852. package/bizar-dash/tests/dashboard-ports.test.mjs +0 -138
  853. package/bizar-dash/tests/density-tokens.test.mjs +0 -46
  854. package/bizar-dash/tests/deploy-templates.test.mjs +0 -100
  855. package/bizar-dash/tests/diagnostics-store.test.mjs +0 -205
  856. package/bizar-dash/tests/digest-generation.test.mjs +0 -191
  857. package/bizar-dash/tests/digest-store.test.mjs +0 -264
  858. package/bizar-dash/tests/docker-build.test.mjs +0 -96
  859. package/bizar-dash/tests/doctor-route-shape.test.mjs +0 -67
  860. package/bizar-dash/tests/empty-state-docs.test.mjs +0 -55
  861. package/bizar-dash/tests/env-vars-extended.test.mjs +0 -190
  862. package/bizar-dash/tests/env-vars-store.test.mjs +0 -216
  863. package/bizar-dash/tests/errorstate-retry.test.mjs +0 -42
  864. package/bizar-dash/tests/eval/fixtures-extra.test.mjs +0 -285
  865. package/bizar-dash/tests/eval/fixtures.test.mjs +0 -141
  866. package/bizar-dash/tests/eval/report.test.mjs +0 -284
  867. package/bizar-dash/tests/eval/runner.test.mjs +0 -471
  868. package/bizar-dash/tests/eval-csv.test.mjs +0 -67
  869. package/bizar-dash/tests/eval-scheduled.test.mjs +0 -84
  870. package/bizar-dash/tests/focus-visible.test.mjs +0 -30
  871. package/bizar-dash/tests/frontend-bugfixes.test.mjs +0 -151
  872. package/bizar-dash/tests/goals-decompose.test.mjs +0 -179
  873. package/bizar-dash/tests/kanban-empty-column.test.mjs +0 -56
  874. package/bizar-dash/tests/layout-spacing.test.mjs +0 -101
  875. package/bizar-dash/tests/library-dedupe.test.mjs +0 -62
  876. package/bizar-dash/tests/lightrag-defaults.node.test.mjs +0 -118
  877. package/bizar-dash/tests/lightrag-skeleton.test.mjs +0 -31
  878. package/bizar-dash/tests/lightrag-startup-hook.test.mjs +0 -238
  879. package/bizar-dash/tests/lightrag-states.test.mjs +0 -60
  880. package/bizar-dash/tests/logger.test.mjs +0 -207
  881. package/bizar-dash/tests/loop-runtime.test.mjs +0 -312
  882. package/bizar-dash/tests/loops-agent-bus-routes.test.mjs +0 -293
  883. package/bizar-dash/tests/memory-auto-reindex.test.mjs +0 -196
  884. package/bizar-dash/tests/memory-cli-readlistdelete.test.mjs +0 -405
  885. package/bizar-dash/tests/memory-cli-setup.test.mjs +0 -382
  886. package/bizar-dash/tests/memory-cli.test.mjs +0 -596
  887. package/bizar-dash/tests/memory-config.test.mjs +0 -422
  888. package/bizar-dash/tests/memory-conflicts.test.mjs +0 -229
  889. package/bizar-dash/tests/memory-default-vault.test.mjs +0 -185
  890. package/bizar-dash/tests/memory-git.test.mjs +0 -264
  891. package/bizar-dash/tests/memory-graph.test.mjs +0 -95
  892. package/bizar-dash/tests/memory-install-bootstrap.test.mjs +0 -129
  893. package/bizar-dash/tests/memory-lightrag-extended.test.mjs +0 -293
  894. package/bizar-dash/tests/memory-lightrag.test.mjs +0 -153
  895. package/bizar-dash/tests/memory-link.test.mjs +0 -134
  896. package/bizar-dash/tests/memory-namespace.test.mjs +0 -404
  897. package/bizar-dash/tests/memory-obsidian.test.mjs +0 -269
  898. package/bizar-dash/tests/memory-path-safety.test.mjs +0 -427
  899. package/bizar-dash/tests/memory-protocol-drift.test.mjs +0 -52
  900. package/bizar-dash/tests/memory-roundtrip.test.mjs +0 -219
  901. package/bizar-dash/tests/memory-schema.test.mjs +0 -198
  902. package/bizar-dash/tests/memory-secrets.test.mjs +0 -121
  903. package/bizar-dash/tests/memory-status-root.test.mjs +0 -144
  904. package/bizar-dash/tests/memory-store.test.mjs +0 -493
  905. package/bizar-dash/tests/memory-sync.test.mjs +0 -141
  906. package/bizar-dash/tests/memory-tab.test.mjs +0 -322
  907. package/bizar-dash/tests/memory-vault-config-endpoint.test.mjs +0 -173
  908. package/bizar-dash/tests/metrics.test.mjs +0 -183
  909. package/bizar-dash/tests/minimax-bar.test.tsx +0 -113
  910. package/bizar-dash/tests/minimax-chat-usage.test.mjs +0 -253
  911. package/bizar-dash/tests/minimax-models.test.mjs +0 -123
  912. package/bizar-dash/tests/minimax-usage-store.node.test.mjs +0 -293
  913. package/bizar-dash/tests/mod-instructions.node.test.mjs +0 -188
  914. package/bizar-dash/tests/mod-security.test.mjs +0 -273
  915. package/bizar-dash/tests/mod-upgrade.node.test.mjs +0 -357
  916. package/bizar-dash/tests/modal-focus-trap.test.mjs +0 -114
  917. package/bizar-dash/tests/no-browser-harness.node.test.mjs +0 -98
  918. package/bizar-dash/tests/notifications-dismiss-restore.test.mjs +0 -85
  919. package/bizar-dash/tests/obsidian-back-compat.test.mjs +0 -199
  920. package/bizar-dash/tests/ocr.test.mjs +0 -87
  921. package/bizar-dash/tests/orphan-tests-audit.test.mjs +0 -80
  922. package/bizar-dash/tests/otel-spans.test.mjs +0 -253
  923. package/bizar-dash/tests/otel.test.mjs +0 -188
  924. package/bizar-dash/tests/palette-keyboard-nav.test.mjs +0 -123
  925. package/bizar-dash/tests/palette-shortcut-hint.test.mjs +0 -58
  926. package/bizar-dash/tests/path-safe.test.mjs +0 -108
  927. package/bizar-dash/tests/projects-filter.test.mjs +0 -48
  928. package/bizar-dash/tests/providers-store-backup-keys.node.test.mjs +0 -809
  929. package/bizar-dash/tests/providers-store-search.node.test.mjs +0 -166
  930. package/bizar-dash/tests/rate-limit.test.mjs +0 -298
  931. package/bizar-dash/tests/routes-doctor.test.mjs +0 -159
  932. package/bizar-dash/tests/schedules-skeleton.test.mjs +0 -25
  933. package/bizar-dash/tests/schedules-states.test.mjs +0 -67
  934. package/bizar-dash/tests/schedules-templates.test.mjs +0 -144
  935. package/bizar-dash/tests/server-bugfixes.test.mjs +0 -318
  936. package/bizar-dash/tests/settings-labels.test.mjs +0 -80
  937. package/bizar-dash/tests/setup.ts +0 -84
  938. package/bizar-dash/tests/sidebar-collapse-animation.test.mjs +0 -37
  939. package/bizar-dash/tests/sidebar-distinct-icons.test.mjs +0 -28
  940. package/bizar-dash/tests/sidebar-responsive.test.tsx +0 -48
  941. package/bizar-dash/tests/sidebar-section-styles.test.mjs +0 -55
  942. package/bizar-dash/tests/sidebar-section-toggle.test.tsx +0 -63
  943. package/bizar-dash/tests/skeleton-height.test.mjs +0 -47
  944. package/bizar-dash/tests/skills-list.test.mjs +0 -232
  945. package/bizar-dash/tests/skills-search.test.mjs +0 -222
  946. package/bizar-dash/tests/smoke-v2.mjs +0 -212
  947. package/bizar-dash/tests/space-tokens.test.mjs +0 -36
  948. package/bizar-dash/tests/stattile-loading.test.mjs +0 -28
  949. package/bizar-dash/tests/strip-thinking.test.mjs +0 -175
  950. package/bizar-dash/tests/submit-feedback.test.mjs +0 -353
  951. package/bizar-dash/tests/task-splitter.test.mjs +0 -268
  952. package/bizar-dash/tests/tasks-create.test.mjs +0 -187
  953. package/bizar-dash/tests/tasks-patch-routes.test.mjs +0 -194
  954. package/bizar-dash/tests/theme-toggle-icon.test.mjs +0 -28
  955. package/bizar-dash/tests/tmux-wrap.test.mjs +0 -145
  956. package/bizar-dash/tests/topbar-design-system.test.mjs +0 -56
  957. package/bizar-dash/tests/topbar-popover-styles.test.mjs +0 -53
  958. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +0 -42
  959. package/bizar-dash/tests/update-channels.test.mjs +0 -67
  960. package/bizar-dash/tests/update-check.test.mjs +0 -132
  961. package/bizar-dash/tests/update-packages.test.mjs +0 -154
  962. package/bizar-dash/tests/update-run.test.mjs +0 -203
  963. package/bizar-dash/tests/users.test.mjs +0 -108
  964. package/bizar-dash/tests/v7-archive/BackgroundAgents.test.tsx +0 -160
  965. package/bizar-dash/tests/v7-archive/a11y/forms.test.tsx +0 -191
  966. package/bizar-dash/tests/v7-archive/a11y.test.tsx +0 -206
  967. package/bizar-dash/tests/v7-archive/autosave.test.tsx +0 -276
  968. package/bizar-dash/tests/v7-archive/backup-restore.test.tsx +0 -141
  969. package/bizar-dash/tests/v7-archive/chat-composer.test.tsx +0 -140
  970. package/bizar-dash/tests/v7-archive/communication-log.test.tsx +0 -67
  971. package/bizar-dash/tests/v7-archive/components/Modal.test.tsx +0 -104
  972. package/bizar-dash/tests/v7-archive/components/Spinner.test.tsx +0 -32
  973. package/bizar-dash/tests/v7-archive/components/StatusBadge.test.tsx +0 -35
  974. package/bizar-dash/tests/v7-archive/components/doctor-panel.test.tsx +0 -105
  975. package/bizar-dash/tests/v7-archive/components/screenshot-ocr.test.tsx +0 -75
  976. package/bizar-dash/tests/v7-archive/components/settings-search.test.tsx +0 -180
  977. package/bizar-dash/tests/v7-archive/components/workspace-selector.test.tsx +0 -73
  978. package/bizar-dash/tests/v7-archive/controls/Button.test.tsx +0 -50
  979. package/bizar-dash/tests/v7-archive/controls/Checkbox.test.tsx +0 -44
  980. package/bizar-dash/tests/v7-archive/controls/IconButton.test.tsx +0 -37
  981. package/bizar-dash/tests/v7-archive/controls/Kbd.test.tsx +0 -39
  982. package/bizar-dash/tests/v7-archive/controls/NumberInput.test.tsx +0 -56
  983. package/bizar-dash/tests/v7-archive/controls/RadioGroup.test.tsx +0 -58
  984. package/bizar-dash/tests/v7-archive/controls/SearchInput.test.tsx +0 -52
  985. package/bizar-dash/tests/v7-archive/controls/Select.test.tsx +0 -66
  986. package/bizar-dash/tests/v7-archive/controls/Slider.test.tsx +0 -41
  987. package/bizar-dash/tests/v7-archive/controls/TextInput.test.tsx +0 -44
  988. package/bizar-dash/tests/v7-archive/controls/Textarea.test.tsx +0 -56
  989. package/bizar-dash/tests/v7-archive/controls/Toggle.test.tsx +0 -39
  990. package/bizar-dash/tests/v7-archive/data/BarChart.test.tsx +0 -55
  991. package/bizar-dash/tests/v7-archive/data/DataTable.test.tsx +0 -112
  992. package/bizar-dash/tests/v7-archive/data/EmptyState.test.tsx +0 -57
  993. package/bizar-dash/tests/v7-archive/data/ErrorState.test.tsx +0 -47
  994. package/bizar-dash/tests/v7-archive/data/KeyValueList.test.tsx +0 -59
  995. package/bizar-dash/tests/v7-archive/data/LoadingState.test.tsx +0 -37
  996. package/bizar-dash/tests/v7-archive/data/Sparkline.test.tsx +0 -56
  997. package/bizar-dash/tests/v7-archive/data/StatTile.test.tsx +0 -69
  998. package/bizar-dash/tests/v7-archive/dep-graph.test.tsx +0 -40
  999. package/bizar-dash/tests/v7-archive/eval-web-ui.test.tsx +0 -220
  1000. package/bizar-dash/tests/v7-archive/event-log.test.tsx +0 -61
  1001. package/bizar-dash/tests/v7-archive/feedback/Badge.test.tsx +0 -41
  1002. package/bizar-dash/tests/v7-archive/feedback/Dialog.test.tsx +0 -99
  1003. package/bizar-dash/tests/v7-archive/feedback/ProgressBar.test.tsx +0 -66
  1004. package/bizar-dash/tests/v7-archive/feedback/StatusDot.test.tsx +0 -41
  1005. package/bizar-dash/tests/v7-archive/feedback/Toast.test.tsx +0 -124
  1006. package/bizar-dash/tests/v7-archive/feedback/Tooltip.test.tsx +0 -102
  1007. package/bizar-dash/tests/v7-archive/goal-input.test.tsx +0 -72
  1008. package/bizar-dash/tests/v7-archive/goap-planner.test.ts +0 -68
  1009. package/bizar-dash/tests/v7-archive/hooks/useModal.test.tsx +0 -84
  1010. package/bizar-dash/tests/v7-archive/hooks/useToast.test.tsx +0 -50
  1011. package/bizar-dash/tests/v7-archive/layout/AppShell.test.tsx +0 -50
  1012. package/bizar-dash/tests/v7-archive/layout/Breadcrumbs.test.tsx +0 -85
  1013. package/bizar-dash/tests/v7-archive/layout/Panel.test.tsx +0 -52
  1014. package/bizar-dash/tests/v7-archive/layout/PanelHeader.test.tsx +0 -32
  1015. package/bizar-dash/tests/v7-archive/layout/Sidebar.test.tsx +0 -95
  1016. package/bizar-dash/tests/v7-archive/layout/Tabs.test.tsx +0 -87
  1017. package/bizar-dash/tests/v7-archive/layout/Topbar.test.tsx +0 -41
  1018. package/bizar-dash/tests/v7-archive/layout/ViewHeader.test.tsx +0 -47
  1019. package/bizar-dash/tests/v7-archive/lib/i18n.test.ts +0 -46
  1020. package/bizar-dash/tests/v7-archive/lib/search-fuzzy.test.ts +0 -149
  1021. package/bizar-dash/tests/v7-archive/lib/utils.test.ts +0 -194
  1022. package/bizar-dash/tests/v7-archive/memory-graph-view.test.tsx +0 -69
  1023. package/bizar-dash/tests/v7-archive/mobile-chat.test.tsx +0 -82
  1024. package/bizar-dash/tests/v7-archive/mobile-layout.test.tsx +0 -332
  1025. package/bizar-dash/tests/v7-archive/mobile-tasks.test.tsx +0 -162
  1026. package/bizar-dash/tests/v7-archive/navigation/NavGroup.test.tsx +0 -55
  1027. package/bizar-dash/tests/v7-archive/navigation/NavLink.test.tsx +0 -61
  1028. package/bizar-dash/tests/v7-archive/quality-gates.test.tsx +0 -59
  1029. package/bizar-dash/tests/v7-archive/settings-layout.test.tsx +0 -129
  1030. package/bizar-dash/tests/v7-archive/settings-mode-wiring.test.tsx +0 -151
  1031. package/bizar-dash/tests/v7-archive/ui/primitives/Box.test.tsx +0 -49
  1032. package/bizar-dash/tests/v7-archive/ui/primitives/Grid.test.tsx +0 -37
  1033. package/bizar-dash/tests/v7-archive/ui/primitives/Inline.test.tsx +0 -33
  1034. package/bizar-dash/tests/v7-archive/ui/primitives/Separator.test.tsx +0 -34
  1035. package/bizar-dash/tests/v7-archive/ui/primitives/Stack.test.tsx +0 -45
  1036. package/bizar-dash/tests/v7-archive/views/Agents.test.tsx +0 -359
  1037. package/bizar-dash/tests/v7-archive/views/Memory.test.tsx +0 -274
  1038. package/bizar-dash/tests/v7-archive/views/Tasks.test.tsx +0 -250
  1039. package/bizar-dash/tests/v7-archive/views/sidebar.test.tsx +0 -116
  1040. package/bizar-dash/tests/v7-archive/views/topbar.test.tsx +0 -87
  1041. package/bizar-dash/tests/v7-archive/voice-recorder.test.tsx +0 -95
  1042. package/bizar-dash/tests/voice-store.test.mjs +0 -148
  1043. package/bizar-dash/tests/voice-transcribe-worker.test.mjs +0 -343
  1044. package/bizar-dash/tests/voice-transcribe.test.mjs +0 -87
  1045. package/bizar-dash/tests/workspaces.test.mjs +0 -527
  1046. package/bizar-dash/tests/yaml.test.mjs +0 -128
  1047. package/bizar-dash/tsconfig.json +0 -23
  1048. package/bizar-dash/vite.config.ts +0 -82
  1049. package/bizar-dash/vitest.config.ts +0 -20
  1050. package/cli/__tests__/cost-gate.test.mjs +0 -301
  1051. package/cli/__tests__/esm-no-require.test.mjs +0 -97
  1052. package/cli/__tests__/feature-list-bridge.test.mjs +0 -371
  1053. package/cli/agent-browser-up.sh +0 -152
  1054. package/cli/agent-browser-update.test.mjs +0 -86
  1055. package/cli/artifact-cli.mjs +0 -605
  1056. package/cli/artifact-render.mjs +0 -621
  1057. package/cli/artifact-server.mjs +0 -847
  1058. package/cli/artifact-templates.mjs +0 -523
  1059. package/cli/artifact.mjs +0 -63
  1060. package/cli/artifact.test.mjs +0 -2331
  1061. package/cli/bg.mjs +0 -471
  1062. package/cli/cli-commands-validation.test.mjs +0 -106
  1063. package/cli/commands/artifact.mjs +0 -20
  1064. package/cli/commands/clip.mjs +0 -163
  1065. package/cli/commands/dash.mjs +0 -193
  1066. package/cli/commands/deploy/cloudflare.mjs +0 -250
  1067. package/cli/commands/deploy/docker.mjs +0 -219
  1068. package/cli/commands/deploy/fly.mjs +0 -161
  1069. package/cli/commands/deploy/vercel.mjs +0 -225
  1070. package/cli/commands/deploy.mjs +0 -240
  1071. package/cli/commands/eval.mjs +0 -396
  1072. package/cli/commands/lightrag.mjs +0 -170
  1073. package/cli/commands/marketplace.mjs +0 -64
  1074. package/cli/commands/memory.mjs +0 -25
  1075. package/cli/commands/minimax.mjs +0 -288
  1076. package/cli/commands/mod.mjs +0 -185
  1077. package/cli/commands/ocr.mjs +0 -182
  1078. package/cli/commands/plugin.mjs +0 -358
  1079. package/cli/commands/rca.test.mjs +0 -99
  1080. package/cli/commands/service.mjs +0 -79
  1081. package/cli/commands/setup-provider.test.mjs +0 -311
  1082. package/cli/commands/tailscale.mjs +0 -256
  1083. package/cli/commands/usage.mjs +0 -113
  1084. package/cli/commands/voice.mjs +0 -211
  1085. package/cli/commands/workspace.mjs +0 -247
  1086. package/cli/copy.mjs +0 -540
  1087. package/cli/dev-link.mjs +0 -191
  1088. package/cli/dev-link.test.mjs +0 -310
  1089. package/cli/digest.mjs +0 -149
  1090. package/cli/install/banner.test.mjs +0 -39
  1091. package/cli/install/index.test.mjs +0 -61
  1092. package/cli/install/paths.test.mjs +0 -77
  1093. package/cli/install/plugin.mjs +0 -161
  1094. package/cli/install/postinstall.mjs +0 -137
  1095. package/cli/install/postinstall.test.mjs +0 -98
  1096. package/cli/install.test.mjs +0 -272
  1097. package/cli/memory-constants.mjs +0 -76
  1098. package/cli/memory.mjs +0 -1850
  1099. package/cli/migrate.test.mjs +0 -85
  1100. package/cli/plow-through.test.mjs +0 -56
  1101. package/cli/plugin-runtime-deps.mjs +0 -250
  1102. package/cli/plugin-runtime-deps.test.mjs +0 -378
  1103. package/cli/post-install-smoke.mjs +0 -256
  1104. package/cli/post-install-smoke.test.mjs +0 -72
  1105. package/cli/prompts.mjs +0 -168
  1106. package/cli/providers-detect.mjs +0 -233
  1107. package/cli/provision.test.mjs +0 -324
  1108. package/cli/service-controller.mjs +0 -735
  1109. package/cli/service-controller.test.mjs +0 -191
  1110. package/cli/service-env.mjs +0 -130
  1111. package/cli/service.mjs +0 -492
  1112. package/cli/tests/minimax-cli.test.mjs +0 -79
  1113. package/cli/worker-dispatcher.test.mjs +0 -204
  1114. package/config/skills/glyph/SKILL.md +0 -163
  1115. package/config/skills/lightrag/SKILL.md +0 -81
  1116. package/config/skills/memory-protocol/SKILL.md +0 -105
  1117. package/config/skills/obsidian/SKILL.md +0 -306
  1118. package/packages/sdk/${HOME}/.bizar_home/memory/projects/sdk/sessions/2026-07-16-e16c2f59.md +0 -14
  1119. package/packages/sdk/.bizar/learning/instincts.jsonl +0 -5
  1120. package/packages/sdk/LICENSE +0 -21
  1121. package/packages/sdk/dist/memory/index.d.ts +0 -43
  1122. package/packages/sdk/dist/memory/index.js +0 -159
  1123. package/packages/sdk/dist/router/memory-distillation.d.ts +0 -58
  1124. package/packages/sdk/dist/router/memory-distillation.js +0 -195
  1125. package/packages/sdk/vitest.config.ts +0 -9
  1126. package/plugins/bizar/LICENSE +0 -21
  1127. package/plugins/bizar/dist/index.d.ts +0 -25
  1128. package/plugins/bizar/dist/index.js +0 -32
  1129. package/plugins/bizar/package.json +0 -18
  1130. package/scripts/audit.mjs +0 -388
  1131. package/scripts/audit.test.mjs +0 -149
  1132. package/scripts/bh-full-e2e.mjs +0 -300
  1133. package/scripts/check-agents.mjs +0 -76
  1134. package/scripts/check-arch.sh +0 -80
  1135. package/scripts/check-deps.mjs +0 -468
  1136. package/scripts/clean-state-check.sh +0 -81
  1137. package/scripts/eval-gate.mjs +0 -134
  1138. package/scripts/eval-gate.test.mjs +0 -138
  1139. package/scripts/feature-state-machine.mjs +0 -178
  1140. package/scripts/feature-state-machine.test.mjs +0 -135
  1141. package/scripts/git-hooks/__tests__/commit-msg.test.mjs +0 -61
  1142. package/scripts/install-curl.sh +0 -17
  1143. package/scripts/install-service.mjs +0 -190
  1144. package/scripts/loop-log.txt +0 -29
  1145. package/scripts/loop-tasks.md +0 -79
  1146. package/scripts/mirror-claude-md.sh +0 -78
  1147. package/scripts/overnight-loop.mjs +0 -60
  1148. package/scripts/run-dev.mjs +0 -84
  1149. package/scripts/session-trace.sh +0 -52
  1150. package/scripts/spec-dedup.test.mjs +0 -124
  1151. package/scripts/sprint.mjs +0 -213
  1152. package/scripts/sync-skills-mirror.mjs +0 -113
  1153. package/scripts/test-in-container.sh +0 -157
  1154. package/scripts/verify-feature.sh +0 -102
  1155. package/scripts/verify-thinking-skills.mjs +0 -135
  1156. package/scripts/worktree-setup.sh +0 -79
  1157. package/templates/clean-state-checklist.md +0 -55
  1158. package/templates/deploy/cloudflare/README.md +0 -32
  1159. package/templates/deploy/cloudflare/functions-index.template.js +0 -15
  1160. package/templates/deploy/cloudflare/wrangler.toml.template +0 -9
  1161. package/templates/deploy/docker/.env.template +0 -16
  1162. package/templates/deploy/docker/README.md +0 -58
  1163. package/templates/deploy/docker/docker-compose.template.yml +0 -23
  1164. package/templates/deploy/fly/README.md +0 -35
  1165. package/templates/deploy/fly/fly.toml.template +0 -28
  1166. package/templates/deploy/vercel/README.md +0 -29
  1167. package/templates/deploy/vercel/api-index.template.js +0 -18
  1168. package/templates/deploy/vercel/vercel.json.template +0 -16
  1169. package/templates/eval-fixtures/README.md +0 -58
  1170. package/templates/eval-fixtures/citation.json +0 -16
  1171. package/templates/eval-fixtures/code-review.json +0 -16
  1172. package/templates/eval-fixtures/code-search-basic.json +0 -28
  1173. package/templates/eval-fixtures/concise-output.json +0 -16
  1174. package/templates/eval-fixtures/context-window.json +0 -16
  1175. package/templates/eval-fixtures/error-recovery.json +0 -16
  1176. package/templates/eval-fixtures/json-output.json +0 -20
  1177. package/templates/eval-fixtures/latency-bounds.json +0 -16
  1178. package/templates/eval-fixtures/multi-language.json +0 -16
  1179. package/templates/eval-fixtures/regression-suite.json +0 -79
  1180. package/templates/eval-fixtures/response-format.json +0 -30
  1181. package/templates/eval-fixtures/safe-paths.json +0 -16
  1182. package/templates/eval-fixtures/tool-call-correctness.json +0 -24
  1183. package/templates/eval-fixtures/tool-call-multi-step.json +0 -18
  1184. package/templates/eval-fixtures/unicode-handling.json +0 -16
  1185. package/templates/evaluator-rubric.md +0 -50
  1186. package/templates/plan/htmx.min.js +0 -1
  1187. package/templates/plan/library/bug-investigation.mdx +0 -79
  1188. package/templates/plan/library/decision-record.mdx +0 -71
  1189. package/templates/plan/library/feature-design.mdx +0 -92
  1190. package/templates/plan/meta.json.template +0 -8
  1191. package/templates/plan/plan.mdx.template +0 -46
  1192. package/templates/plugin-template/README.md +0 -121
  1193. package/templates/plugin-template/index.js +0 -66
  1194. package/templates/plugin-template/plugin.json +0 -42
  1195. package/templates/plugin-template/tests/plugin.test.js +0 -83
  1196. package/templates/schedules/daily-backup.json +0 -12
  1197. package/templates/schedules/daily-cleanup.json +0 -12
  1198. package/templates/schedules/hourly-health-check.json +0 -12
  1199. package/templates/schedules/webhook-on-push.json +0 -13
  1200. package/templates/schedules/weekly-digest.json +0 -13
  1201. package/templates/sprint-contract.md +0 -47
  1202. /package/{.claude → config}/skills/de-sloppify/SKILL.md +0 -0
@@ -1,225 +0,0 @@
1
- # Settings Audit — v10.0.0
2
-
3
- > Maps every row in `SettingsView.tsx` to its backing endpoint and the
4
- > on-disk file the value lives in. Verifies the "control and configure
5
- > everything" claim for the Settings page.
6
- >
7
- > Source of truth: `bizar-dash/src/web/v8/views/Settings/SettingsView.tsx`
8
- > (19 sections) + `bizar-dash/src/server/routes/_shared.mjs` (`DEFAULT_SETTINGS`)
9
- > + `bizar-dash/src/server/routes/settings.mjs`.
10
-
11
- ## Backing store map
12
-
13
- | Where it lives | Path | Owner |
14
- |---|---|---|
15
- | Server-side settings (most rows) | `~/.config/bizar/settings.json` | `PUT /api/settings` |
16
- | Browser-local theme | `localStorage["bizar.theme.mode"]` | `useTheme().setMode()` |
17
- | Provider keys (real) | `~/.config/bizar/env.json` (mode 0600) | `PUT /api/env-vars` |
18
- | Usage / LightRAG / Memory (separate) | per-feature config files | per-feature endpoints |
19
- | Activity log (read-only here) | append-only NDJSON in `~/.local/share/bizar/activity.ndjson` | streamed |
20
- | Claude sessions path | `~/.claude/sessions` (env) | read-only display |
21
-
22
- ## Section-by-section audit
23
-
24
- Legend:
25
- - ✅ mutates → persists to a backing store
26
- - 👁 read-only → renders a value from a fetch but no UI control mutates it
27
- - ⚠️ mixed → some rows mutate, others are read-only
28
-
29
- ### 1. General (✅)
30
- | Row id | Mutates via | Persisted to |
31
- |---|---|---|
32
- | `workspace-name` | `update('workspaceName')` | `settings.json.workspaceName` |
33
- | `workspace-timezone` | `update('workspaceTimezone')` | `settings.json.workspaceTimezone` |
34
- | `default-view` | `update('defaultView')` | `settings.json.defaultView` |
35
-
36
- ### 2. Theme (⚠️ — split storage)
37
- | Row id | Mutates via | Persisted to |
38
- |---|---|---|
39
- | `theme-mode` | `theme.setMode()` | `localStorage["bizar.theme.mode"]` (NOT settings.json) |
40
- | `theme-accent` | `update('themeAccent')` | `settings.json.themeAccent` |
41
- | `theme-font` | `patch('themeFont')` | `settings.json.themeFont` |
42
- | `theme-radius` | `patch('themeRadius')` | `settings.json.themeRadius` |
43
-
44
- **Finding:** `theme-mode` is the only theme control that lives in localStorage,
45
- not `settings.json`. Acceptable because mode is a per-browser preference and
46
- the rest of the theme syncs across devices — but the split is non-obvious.
47
- ponytail: persist theme.mode via `/api/settings` when server-side sync is
48
- ever needed (multi-device or headless dashboard).
49
-
50
- ### 3. Density (✅)
51
- | Row id | Mutates via | Persisted to |
52
- |---|---|---|
53
- | `density-mode` | `density.setDensity()` | localStorage (similar hybrid as theme — `useDensity` hook) |
54
- | `density-base-font` | `update('densityBaseFont')` | `settings.json.densityBaseFont` |
55
-
56
- ### 4. Density rules (✅)
57
- | Row id | Mutates via | Persisted to |
58
- |---|---|---|
59
- | `tasks-compact` | `update('tasksCompact')` | `settings.json.tasksCompact` |
60
- | `memory-compact` | `update('memoryCompact')` | `settings.json.memoryCompact` |
61
- | `activity-compact` | `update('activityCompact')` | `settings.json.activityCompact` |
62
-
63
- ### 5. Command palette (✅)
64
- | Row id | Mutates via | Persisted to |
65
- |---|---|---|
66
- | `palette-history` | `update('paletteHistory')` | `settings.json.paletteHistory` |
67
- | `palette-fuzzy` | `update('paletteFuzzy')` | `settings.json.paletteFuzzy` |
68
- | `palette-navigate` | `patch('paletteNavigate')` | `settings.json.paletteNavigate` |
69
- | `palette-spawn` | `patch('paletteSpawn')` | `settings.json.paletteSpawn` |
70
- | `palette-scope` | `update('paletteScope')` | `settings.json.paletteScope` |
71
-
72
- ### 6. Keyboard (👁)
73
- All `kb-*` rows are read-only. SettingsView documents the binding in
74
- `~/.claude/keybindings.json`. Mutations live in the CLI/TUI flow,
75
- not the dashboard.
76
-
77
- ### 7. Notifications (✅)
78
- | Row id | Mutates via | Persisted to |
79
- |---|---|---|
80
- | `n-agent-finished` | `update('notifyAgentFinished')` | `settings.json.notifyAgentFinished` |
81
- | `n-task-moved` | `patch('notifyTaskMoved')` | `settings.json.notifyTaskMoved` |
82
- | `n-ci-failed` | `update('notifyCiFailed')` | `settings.json.notifyCiFailed` |
83
- | `n-token-budget` | `update('notifyTokenBudget')` | `settings.json.notifyTokenBudget` |
84
- | `n-daily-digest` | `update('notifyDailyDigest')` | `settings.json.notifyDailyDigest` |
85
- | `n-channel` | `update('notifyChannel')` | `settings.json.notifyChannel` |
86
-
87
- ### 8. Storage (⚠️)
88
- | Row id | Mutates via | Persisted to |
89
- |---|---|---|
90
- | `store-path` | `update('storagePath')` | `settings.json.storagePath` |
91
- | `cache-path` | `update('cachePath')` | `settings.json.cachePath` |
92
- | `sessions-path` | `update('sessionsPath')` | `settings.json.sessionsPath` |
93
- | `cache-size` | `update('cacheSizeMb')` | `settings.json.cacheSizeMb` |
94
- | `store-gc` | `POST /api/admin/gc` | runs server-side GC |
95
- | `store-clear` | `POST /api/admin/cache/clear` | wipes cache + activity log |
96
-
97
- **Finding:** the path fields write to settings.json but the server
98
- doesn't appear to *consume* them at runtime (the actual storage paths
99
- are constants in each store module). Persisted state vs effective state
100
- drift. ponytail: either (a) wire these to the store modules' root
101
- constants at boot, or (b) drop the rows and document that paths are
102
- env-configured only. Recommended: (a) — single source of truth.
103
-
104
- ### 9. Plugins (👁)
105
- `plugins-count`, `plugins-bizar`, `plugins-list` all sourced from
106
- `useFetch('/api/agents')` and `useFetch('/api/skills?kind=skills')`.
107
- Read-only count + summary. Mutations to plugin registration live in
108
- the filesystem (`.claude/`), not the dashboard.
109
-
110
- ### 10. MCP servers (👁)
111
- `mcps-count`, `mcps-list` from `useFetch('/api/skills?kind=mcps')`.
112
- Read-only summary; mutations live in `.claude/mcp.json`.
113
-
114
- ### 11. Skills (👁)
115
- Sourced from `useFetch('/api/skills?kind=skills')`. Read-only count +
116
- breakdown by source. Mutations live in `bizar-dash/skills/<name>/`.
117
-
118
- ### 12. Hooks (👁)
119
- Sourced from `useFetch('/api/skills?kind=hooks')`. Read-only summary;
120
- mutations live in `.claude/hooks/`.
121
-
122
- ### 13. Activity (⚠️)
123
- | Row id | Mutates via | Persisted to |
124
- |---|---|---|
125
- | `activity-retention` | `update('activityRetentionDays')` | `settings.json.activityRetentionDays` |
126
- | `activity-hide` | `patch('activityHide')` (onBlur) | `settings.json.activityHide` |
127
- | `activity-export` | `GET /api/admin/activity/export` | downloads `activity.ndjson` |
128
-
129
- **Finding:** `activity-export` is a download endpoint, not a mutation
130
- button — correct behaviour. But the matching "Clear activity log"
131
- destructive button lives in Storage → `store-clear` rather than here,
132
- which is non-obvious. Acceptable but a discoverability gap.
133
-
134
- ### 14. Memory (⚠️)
135
- | Row id | Mutates via | Persisted to |
136
- |---|---|---|
137
- | `memory-auto-commit` | `update('memoryAutoCommit')` | `settings.json.memoryAutoCommit` |
138
- | `memory-scope` | `update('memoryScopeDefault')` | `settings.json.memoryScopeDefault` |
139
- | `memory-index` | `POST /api/admin/memory/reindex` | rebuilds search index |
140
-
141
- **Finding:** Memory also has its own Settings page (MemoryView) with
142
- LightRAG URL, Obsidian vault path, git repo config — those live
143
- under a separate `~/.config/bizar/memory-config.json` and
144
- `/api/memory/config/global`. Two settings surfaces for one feature is
145
- non-obvious. ponytail: consolidate into the Settings → Memory section
146
- when the time comes.
147
-
148
- ### 15. Task defaults (✅)
149
- | Row id | Mutates via | Persisted to |
150
- |---|---|---|
151
- | `task-priority` | `update('defaultTaskPriority')` | `settings.json.defaultTaskPriority` |
152
- | `task-column` | `update('defaultTaskColumn')` | `settings.json.defaultTaskColumn` |
153
- | `task-assignee` | `patch('defaultTaskAssignee')` (onBlur) | `settings.json.defaultTaskAssignee` |
154
-
155
- ### 16. Agent defaults (✅)
156
- | Row id | Mutates via | Persisted to |
157
- |---|---|---|
158
- | `agent-model` | `update('defaultAgentModel')` | `settings.json.defaultAgentModel` |
159
- | `agent-mistakes` | `update('defaultAgentMaxMistakes')` | `settings.json.defaultAgentMaxMistakes` |
160
- | `agent-bg` | `patch('agentBackgroundDefault')` | `settings.json.agentBackgroundDefault` |
161
- | `agent-worktree` | `patch('agentWorktree')` | `settings.json.agentWorktree` |
162
- | `agent-system-prompt` | `patch('agentSystemPrompt')` (onBlur) | `settings.json.agentSystemPrompt` |
163
-
164
- ### 17. Privacy (✅)
165
- | Row id | Mutates via | Persisted to |
166
- |---|---|---|
167
- | `privacy-analytics` | `update('analytics')` | `settings.json.analytics` |
168
- | `privacy-crash` | `update('crashReports')` | `settings.json.crashReports` |
169
- | `privacy-pii` | `update('piiMode')` | `settings.json.piiMode` |
170
-
171
- ### 18. Advanced (✅)
172
- | Row id | Mutates via | Persisted to |
173
- |---|---|---|
174
- | `adv-reduced-motion` | `update('reducedMotion')` | `settings.json.reducedMotion` |
175
- | `adv-debug-overlay` | `update('debugOverlay')` | `settings.json.debugOverlay` |
176
- | `adv-reset` | `POST /api/settings/reset` | wipes back to `DEFAULT_SETTINGS` |
177
-
178
- ## Rollup
179
-
180
- - 19 sections, 60 rows total.
181
- - **47 ✅** — fully mutate to settings.json + (where relevant) broadcast.
182
- - **6 👁** — read-only count/list rows (Plugins, MCPs, Skills, Hooks,
183
- Keyboard). Mutations are filesystem-only.
184
- - **6 ⚠️** — split storage or discoverability gaps:
185
- - Theme: mode in localStorage, rest in settings.json.
186
- - Density: mode in localStorage, rest in settings.json.
187
- - Storage: paths persist but aren't consumed at runtime.
188
- - Activity: destructive "clear log" lives in Storage not Activity.
189
- - Memory: split between Settings → Memory (this section) and the
190
- separate MemoryView.
191
-
192
- ## Audit verdict
193
-
194
- "Control and configure everything from the dashboard" holds for the
195
- **Settings page** specifically: every UI control that says "this changes
196
- a setting" actually persists it via `/api/settings` (with the two
197
- localStorage hybrids for browser-local prefs, which is a defensible
198
- split). The non-mutating rows are correctly marked as summary rows.
199
-
200
- Gaps that warrant follow-up work (not v10-blocking):
201
-
202
- 1. **Storage paths persist but aren't consumed.** Either wire them in
203
- or drop the rows.
204
- 2. **Memory settings split across two pages.** Consolidate into Settings
205
- → Memory.
206
- 3. **Theme mode hybrid storage** is defensible but non-obvious. Worth
207
- documenting in a tooltip.
208
-
209
- ## Tests
210
-
211
- - `/api/settings` (GET/PUT/POST reset) is exercised by the dashboard
212
- via `useFetch` + `patch()` (unit-tested implicitly via SettingsView
213
- smoke tests, no dedicated route test yet). ponytail: add
214
- `tests/server/settings-route.test.mjs` for the round-trip.
215
- - localStorage theme/density mutations are not directly testable
216
- from the server; covered by component tests.
217
-
218
- ## See also
219
-
220
- - `bizar-dash/src/web/v8/views/Settings/SettingsView.tsx`
221
- - `bizar-dash/src/server/routes/settings.mjs`
222
- - `bizar-dash/src/server/routes/_shared.mjs` (DEFAULT_SETTINGS)
223
- - `bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx`
224
- - `CONTROL_SURFACES.md` — the broader "what can you mutate from the
225
- dashboard" map across all v8 views (companion doc).
@@ -1,26 +0,0 @@
1
- {
2
- "kind": "critique-panel",
3
- "score": 5,
4
- "axes": {
5
- "clarity": {
6
- "score": 5,
7
- "notes": "The launcher now explains the package in a clear operator sequence, and the canvas surfaces the right command decisions without reading like a generic file list."
8
- },
9
- "hierarchy": {
10
- "score": 5,
11
- "notes": "The redesigned hero, signal strip, command panel, and dense row structures create stronger primary and secondary reading paths across the package entry pages."
12
- },
13
- "typography": {
14
- "score": 4,
15
- "notes": "The scale is tighter and more technical, with clearer display versus mono support roles, while staying compact enough for operator tooling."
16
- },
17
- "motion": {
18
- "score": 4,
19
- "notes": "The package keeps restrained interaction behavior through hover, segmented controls, and persistent sidebar state without adding distracting motion."
20
- },
21
- "brand": {
22
- "score": 5,
23
- "notes": "The cooler cyan-forward palette, denser shell treatment, single-accent discipline, and no-left-stripe state language now read as a more professional technical system."
24
- }
25
- }
26
- }
@@ -1,11 +0,0 @@
1
- import{r as f,j as e}from"./cmdk-C3F6LD6N.js";import{d as g,g as v}from"./main-BRmJZcHt.js";import{T as j}from"./trending-up-qKTUQKIT.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 b=g("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/**
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 w=g("TrendingDown",[["polyline",{points:"22 17 13.5 8.5 8.5 13.5 2 7",key:"1r2t7k"}],["polyline",{points:"16 17 22 17 22 11",key:"11uiuu"}]]),S={up:"var(--success)",down:"var(--danger)",flat:"var(--fg-muted)"},T={up:j,down:w,flat:b},R=f.forwardRef(function(l,o){const{label:t,value:i,delta:n,trend:r,hint:a,icon:s,sparkline:d,loading:x,className:m,style:h,...y}=l,c=r!==void 0?T[r]:null;return e.jsxs("div",{ref:o,className:v("v8-stat-tile",m),style:{display:"flex",flexDirection:"column",gap:"var(--space-2)",padding:"var(--space-5)",background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-lg)",...h},...y,children:[e.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-2)"},children:[e.jsx("div",{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",fontWeight:500},children:t}),s!==void 0&&e.jsx("span",{style:{color:"var(--fg-subtle)",display:"inline-flex"},children:s})]}),e.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"var(--space-2)"},children:[e.jsx("div",{style:{fontSize:"var(--fs-24)",fontWeight:600,color:"var(--fg)",fontVariantNumeric:"tabular-nums",lineHeight:"var(--lh-tight)"},children:x===!0?"—":i}),(n!==void 0||c!==null)&&e.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:2,fontSize:"var(--fs-12)",fontWeight:500,color:r!==void 0?S[r]:"var(--fg-muted)",fontVariantNumeric:"tabular-nums"},children:[c!==null&&e.jsx(c,{size:12,"aria-hidden":"true"}),n]})]}),a!==void 0&&e.jsx("div",{style:{fontSize:"var(--fs-12)",color:"var(--fg-subtle)"},children:a}),d!==void 0&&e.jsx("div",{style:{marginTop:"var(--space-1)"},children:d})]})}),z=f.forwardRef(function(l,o){const{children:t,cols:i,minWidth:n=200,className:r,style:a,...s}=l,d=i!==void 0?`repeat(${i}, minmax(0, 1fr))`:`repeat(auto-fit, minmax(${n}px, 1fr))`;return e.jsx("div",{ref:o,className:v("v8-stat-grid",r),style:{display:"grid",gridTemplateColumns:d,gap:"var(--space-3)",...a},...s,children:t})}),u={neutral:"var(--fg-subtle)",info:"var(--info)",success:"var(--success)",warning:"var(--warning)",danger:"var(--danger)"},W=f.forwardRef(function(l,o){const{items:t,empty:i,className:n,...r}=l;return t.length===0&&i!==void 0?e.jsx(e.Fragment,{children:i}):e.jsx("ol",{ref:o,className:v("v8-activity-feed",n),style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:"var(--space-2)"},...r,children:t.map(a=>{const s=a.tone??"neutral";return e.jsxs("li",{style:{display:"flex",alignItems:"flex-start",gap:"var(--space-3)",padding:"var(--space-3)",background:"var(--surface-0)",border:"1px solid var(--border)",borderRadius:"var(--radius)"},children:[e.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:24,height:24,borderRadius:"var(--radius-sm)",background:`color-mix(in oklch, ${u[s]} 14%, transparent)`,color:u[s],flexShrink:0},children:a.icon}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"var(--space-2)"},children:[e.jsx("div",{style:{fontSize:"var(--fs-13)",fontWeight:500,color:"var(--fg)",minWidth:0},children:a.title}),a.meta!==void 0&&e.jsx("div",{style:{fontSize:"var(--fs-12)",color:"var(--fg-subtle)",flexShrink:0,fontVariantNumeric:"tabular-nums"},children:a.meta})]}),a.description!==void 0&&e.jsx("div",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",marginTop:2,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:a.description})]})]},a.id)})})});export{W as A,b as M,z as S,R as a};
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActivityFeed-Bw4Cai7r.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/minus.js","../../../node_modules/lucide-react/dist/esm/icons/trending-down.js","../../src/web/v8/ui/data/StatTile.tsx","../../src/web/v8/ui/activity/ActivityFeed.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 Minus = createLucideIcon(\"Minus\", [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]]);\n\nexport { Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TrendingDown = createLucideIcon(\"TrendingDown\", [\n [\"polyline\", { points: \"22 17 13.5 8.5 8.5 13.5 2 7\", key: \"1r2t7k\" }],\n [\"polyline\", { points: \"16 17 22 17 22 11\", key: \"11uiuu\" }]\n]);\n\nexport { TrendingDown as default };\n//# sourceMappingURL=trending-down.js.map\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { TrendingDown, TrendingUp, Minus } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * StatTile — a single KPI tile for the overview.\n *\n * Pattern: `[label] [trend-icon delta]`\n * `[BIG value]`\n * `[sparkline?]`\n *\n * Use cases: Overview dashboard, agent detail, goal detail.\n */\nexport type StatTrend = 'up' | 'down' | 'flat';\n\nexport interface StatTileProps extends HTMLAttributes<HTMLDivElement> {\n label: ReactNode;\n value: ReactNode;\n /** Optional delta with trend direction (e.g. \"+12%\" vs last week). */\n delta?: ReactNode;\n trend?: StatTrend;\n /** Optional helper text under the value. */\n hint?: ReactNode;\n /** Optional icon for the top-right corner. */\n icon?: ReactNode;\n /** Inline sparkline rendered beneath the value (use the Sparkline component). */\n sparkline?: ReactNode;\n /** Loading state — replaces value with skeleton. */\n loading?: boolean;\n}\n\nconst TREND_FG: Record<StatTrend, string> = {\n up: 'var(--success)',\n down: 'var(--danger)',\n flat: 'var(--fg-muted)',\n};\n\nconst TREND_ICON: Record<StatTrend, typeof TrendingUp> = {\n up: TrendingUp,\n down: TrendingDown,\n flat: Minus,\n};\n\nexport const StatTile = forwardRef<HTMLDivElement, StatTileProps>(function StatTile(props, ref) {\n const {\n label,\n value,\n delta,\n trend,\n hint,\n icon,\n sparkline,\n loading,\n className,\n style,\n ...rest\n } = props;\n const TrendIcon = trend !== undefined ? TREND_ICON[trend] : null;\n return (\n <div\n ref={ref}\n className={cx('v8-stat-tile', className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--space-2)',\n padding: 'var(--space-5)',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-lg)',\n ...style,\n }}\n {...rest}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between', gap: 'var(--space-2)' }}>\n <div style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)', fontWeight: 500 }}>\n {label}\n </div>\n {icon !== undefined && (\n <span style={{ color: 'var(--fg-subtle)', display: 'inline-flex' }}>{icon}</span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: 'var(--space-2)' }}>\n <div\n style={{\n fontSize: 'var(--fs-24)',\n fontWeight: 600,\n color: 'var(--fg)',\n fontVariantNumeric: 'tabular-nums',\n lineHeight: 'var(--lh-tight)',\n }}\n >\n {loading === true ? '—' : value}\n </div>\n {(delta !== undefined || TrendIcon !== null) && (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 2,\n fontSize: 'var(--fs-12)',\n fontWeight: 500,\n color: trend !== undefined ? TREND_FG[trend] : 'var(--fg-muted)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {TrendIcon !== null && <TrendIcon size={12} aria-hidden=\"true\" />}\n {delta}\n </div>\n )}\n </div>\n {hint !== undefined && (\n <div style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-subtle)' }}>{hint}</div>\n )}\n {sparkline !== undefined && <div style={{ marginTop: 'var(--space-1)' }}>{sparkline}</div>}\n </div>\n );\n});\n\n/**\n * StatGrid — responsive grid for StatTiles. Auto-fits 1..4 columns.\n */\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Min tile width (default 200px). */\n minWidth?: number;\n cols?: 2 | 3 | 4;\n}\n\nexport const StatGrid = forwardRef<HTMLDivElement, StatGridProps>(function StatGrid(props, ref) {\n const { children, cols, minWidth = 200, className, style, ...rest } = props;\n const gridTemplate = cols !== undefined\n ? `repeat(${cols}, minmax(0, 1fr))`\n : `repeat(auto-fit, minmax(${minWidth}px, 1fr))`;\n return (\n <div\n ref={ref}\n className={cx('v8-stat-grid', className)}\n style={{\n display: 'grid',\n gridTemplateColumns: gridTemplate,\n gap: 'var(--space-3)',\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n );\n});","import { forwardRef, type OlHTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * ActivityFeed — vertical feed of recent events (the home/dashboard view).\n *\n * Each item: icon + title + optional description + meta (relative time).\n * Tone colors the leading icon chip (mirrors the tone vocabulary used in\n * the rest of the v8 library).\n *\n * Renders as `<ol>` so screen readers announce item count.\n */\n\nexport type ActivityTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\n\nexport interface ActivityItem {\n id: string;\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n meta?: ReactNode;\n tone?: ActivityTone;\n}\n\nexport interface ActivityFeedProps extends OlHTMLAttributes<HTMLOListElement> {\n items: readonly ActivityItem[];\n /** Optional empty-state node when `items` is empty. */\n empty?: ReactNode;\n}\n\nconst TONE_BG: Record<ActivityTone, string> = {\n neutral: 'var(--fg-subtle)',\n info: 'var(--info)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n danger: 'var(--danger)',\n};\n\nexport const ActivityFeed = forwardRef<HTMLOListElement, ActivityFeedProps>(function ActivityFeed(\n props,\n ref,\n) {\n const { items, empty, className, ...rest } = props;\n if (items.length === 0 && empty !== undefined) {\n return <>{empty}</>;\n }\n return (\n <ol\n ref={ref}\n className={cx('v8-activity-feed', className)}\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--space-2)',\n }}\n {...rest}\n >\n {items.map((item) => {\n const tone = item.tone ?? 'neutral';\n return (\n <li\n key={item.id}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 'var(--space-3)',\n padding: 'var(--space-3)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 24,\n height: 24,\n borderRadius: 'var(--radius-sm)',\n background: `color-mix(in oklch, ${TONE_BG[tone]} 14%, transparent)`,\n color: TONE_BG[tone],\n flexShrink: 0,\n }}\n >\n {item.icon}\n </span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'space-between',\n gap: 'var(--space-2)',\n }}\n >\n <div style={{ fontSize: 'var(--fs-13)', fontWeight: 500, color: 'var(--fg)', minWidth: 0 }}>\n {item.title}\n </div>\n {item.meta !== undefined && (\n <div\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-subtle)',\n flexShrink: 0,\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {item.meta}\n </div>\n )}\n </div>\n {item.description !== undefined && (\n <div\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n marginTop: 2,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {item.description}\n </div>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n});"],"names":["Minus","createLucideIcon","TrendingDown","TREND_FG","TREND_ICON","TrendingUp","StatTile","forwardRef","props","ref","label","value","delta","trend","hint","icon","sparkline","loading","className","style","rest","TrendIcon","jsxs","cx","jsx","StatGrid","children","cols","minWidth","gridTemplate","TONE_BG","ActivityFeed","items","empty","item","tone"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,2 +0,0 @@
1
- import{j as t,r as d}from"./cmdk-C3F6LD6N.js";import{I as h,S as m,g as it,u as ot,a as lt,j as Q,B as U,A as O,k as Z,T as N,c as tt,L as V,h as ct,b as dt,W as ut,i as gt,F as ft}from"./main-BRmJZcHt.js";import{V as pt}from"./ViewHeader-BsnaspKw.js";import{L as ht}from"./ListHeader-CCD_nIHb.js";import{S as vt}from"./Sparkline-Z4y0YUZS.js";import{C as D,b as F}from"./Card-Clkvh43Q.js";import{E as mt}from"./ErrorState-BSqf65ka.js";import{S as K}from"./Switch-B79a2t-G.js";import{S as yt}from"./Slider-AjjzqI-5.js";import{C as xt}from"./circle-D99cZJBr.js";import{F as jt}from"./filter-Do63x17E.js";import{G as et,a as bt}from"./git-pull-request-CpRAmERC.js";import{C as kt}from"./clock-OtT5mvF3.js";import{T as I}from"./triangle-alert-BeY8LAv6.js";import{C as St}from"./circle-check-BMbe7Kkr.js";import"./Alert-pzFISNtS.js";import"./circle-alert-QQTU4Quz.js";import"./refresh-ccw-DN_zCB1h.js";import"./index-B1OIS316.js";import"./index-CR0TeJmc.js";const _={neutral:"var(--fg-muted)",info:"var(--info)",success:"var(--success)",warning:"var(--warning)",danger:"var(--danger)"};function wt(r){const a=new Date(r);return Number.isNaN(a.getTime())?"—":a.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}function Ct(r){const a=Date.now()-r;return a<6e4?"just now":a<36e5?`${Math.floor(a/6e4)}m ago`:a<864e5?`${Math.floor(a/36e5)}h ago`:`${Math.floor(a/864e5)}d ago`}function $t(r){const{laneId:a,label:o,icon:l,events:u,loading:g=!1,onEventClick:f,collapsible:j=!1,trailing:M,width:b="320px",className:T}=r,z={width:b,minWidth:b,maxWidth:b,background:"var(--surface-1)",border:"1px solid var(--border)",borderRadius:"var(--radius-md)",display:"flex",flexDirection:"column",overflow:"hidden"},L={padding:"var(--space-2) var(--space-3)",borderBottom:"1px solid var(--border)",background:"color-mix(in oklch, var(--surface-0) 70%, transparent)",backdropFilter:"blur(6px)"};return t.jsxs("section",{"aria-label":`${o} activity`,"data-lane-id":a,"data-testid":`activity-lane-${a}`,className:it("v8-activity-lane",T),style:z,children:[t.jsx("header",{style:L,children:t.jsxs(h,{align:"center",justify:"between",gap:2,wrap:!0,children:[t.jsxs(h,{align:"center",gap:2,children:[l&&t.jsx(l,{size:14,"aria-hidden":!0,style:{color:"var(--accent)"}}),t.jsx("strong",{style:{fontSize:"var(--fs-13)",color:"var(--fg)"},children:o})]}),t.jsxs(h,{align:"center",gap:1,children:[M,t.jsx("span",{"aria-label":`${u.length} events`,style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",fontVariantNumeric:"tabular-nums"},children:u.length})]})]})}),t.jsx(m,{role:"list","aria-label":`${o} events`,gap:1,style:{padding:"var(--space-2)",overflow:"auto",flex:1,minHeight:0},"data-testid":`activity-lane-list-${a}`,children:g&&u.length===0?t.jsx(zt,{}):u.length===0?t.jsx("span",{style:{color:"var(--fg-muted)",fontSize:"var(--fs-12)",padding:"var(--space-2)"},children:j?"":"No events yet."}):u.map(s=>{const R=s.tone??"neutral",S=s.icon,w=typeof f=="function",y={display:"grid",gridTemplateColumns:"auto 1fr auto",alignItems:"flex-start",gap:"var(--space-2)",padding:"6px 8px",borderRadius:"var(--radius-sm)",border:"1px solid transparent",background:w?"var(--surface-0)":"transparent",cursor:w?"pointer":"default",transition:"border-color 120ms ease, background 120ms ease",textAlign:"left"},C=t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-hidden":!0,style:{width:22,height:22,display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:"var(--radius-pill)",background:`color-mix(in oklch, ${_[R]} 18%, transparent)`,color:_[R],flexShrink:0},children:S?t.jsx(S,{size:12,"aria-hidden":!0}):null}),t.jsxs(m,{gap:0,style:{minWidth:0},children:[t.jsx("span",{title:s.title,style:{fontSize:"var(--fs-12)",fontWeight:500,color:"var(--fg)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s.title}),s.description&&t.jsx("span",{title:s.description,style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s.description})]}),t.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",fontVariantNumeric:"tabular-nums",flexShrink:0,textAlign:"right"},title:new Date(s.ts).toISOString(),children:wt(s.ts)})]});return w?t.jsx("button",{type:"button",role:"listitem","data-activity-event-id":s.id,"data-activity-kind":s.kind??"","data-activity-slug":s.slug??"","data-activity-href":s.href??"","data-testid":`activity-event-${s.id}`,onClick:()=>f==null?void 0:f(s),onKeyDown:k=>{(k.key==="Enter"||k.key===" ")&&(k.preventDefault(),f==null||f(s))},style:y,"aria-label":`Open ${s.title}`,children:C},s.id):t.jsx("div",{role:"listitem","data-activity-event-id":s.id,"data-activity-kind":s.kind??"","data-activity-slug":s.slug??"",style:y,children:C},s.id)})}),!g&&u.length>0&&t.jsxs("footer",{style:{padding:"4px var(--space-3)",borderTop:"1px solid var(--border)",fontSize:"var(--fs-12)",color:"var(--fg-muted)",display:"flex",justifyContent:"space-between"},children:[t.jsxs("span",{children:["latest ",Ct(u[0].ts)]}),t.jsx("span",{children:u.length===1?"1 event":`${u.length} events`})]})]})}function zt(){return t.jsx(m,{gap:1,children:[0,1,2].map(r=>t.jsx("div",{"aria-hidden":!0,style:{height:36,borderRadius:"var(--radius-sm)",background:"color-mix(in oklch, var(--fg-muted) 8%, transparent)"}},r))})}function Lt(r){const{children:a,gap:o=12,minHeight:l=480,fade:u=!0,className:g,style:f}=r,j={display:"flex",flexDirection:"row",gap:o,overflowX:"auto",overflowY:"hidden",padding:"var(--space-1) var(--space-1) var(--space-2)",minHeight:l,WebkitOverflowScrolling:"touch",scrollSnapType:"x proximity",maskImage:u?"linear-gradient(to right, transparent 0, black 24px, black calc(100% - 24px), transparent 100%)":void 0,...f};return t.jsx(m,{role:"region","aria-label":"Activity lanes","data-testid":"activity-lanes",className:g,style:j,children:a})}function Rt(){return d.useCallback(r=>{typeof window>"u"||window.dispatchEvent(new CustomEvent("bizar:navigate",{detail:r}))},[])}function J(r,a){const o=(r||"").toLowerCase(),l=a||"";return o.startsWith("task")?{id:"tasks",entity:l}:o.startsWith("goal")?{id:"goals",entity:l}:o.startsWith("agent")?{id:"agents",entity:l}:o==="artifact.new"||o.startsWith("artifact")?{id:"artifacts",entity:l}:o.startsWith("git")?{id:"git",entity:l}:null}const q={task:{label:"Tasks",icon:V,tone:"neutral"},agent:{label:"Agents",icon:tt,tone:"info"},goal:{label:"Goals",icon:N,tone:"accent"},settings:{label:"Settings",icon:Z,tone:"neutral"},system:{label:"System",icon:Q,tone:"warning"},git:{label:"Git",icon:et,tone:"neutral"}},Y={"git.merge":{icon:et,tone:"success",source:"git"},"git.pull-request":{icon:bt,tone:"info",source:"git"},"task.completed":{icon:St,tone:"success",source:"task"},"task.failed":{icon:I,tone:"danger",source:"task"},"task.created":{icon:V,tone:"info",source:"task"},"task.moved":{icon:V,tone:"neutral",source:"task"},"agent.run":{icon:tt,tone:"info",source:"agent"},"agent.tool":{icon:ut,tone:"neutral",source:"agent"},"agent.killed":{icon:I,tone:"warning",source:"agent"},"agent.message":{icon:O,tone:"info",source:"agent"},"goal.created":{icon:N,tone:"info",source:"goal"},"goal.status":{icon:N,tone:"info",source:"goal"},"goal.decomposed":{icon:N,tone:"success",source:"goal"},"settings.changed":{icon:Z,tone:"neutral",source:"settings"},"system.error":{icon:I,tone:"danger",source:"system"},"system.note":{icon:O,tone:"neutral",source:"system"}};function B(r){const a=(r.kind||r.iconKey||"").toLowerCase();return a.startsWith("task")?"task":a.startsWith("agent")?"agent":a.startsWith("goal")?"goal":a.startsWith("settings")?"settings":a.startsWith("git")?"git":a.startsWith("system")?"system":r.title&&/goal/i.test(r.title)?"goal":r.title&&/(agent|claude|cc)/i.test(r.title)?"agent":"system"}function Wt(r){const a=Y[r.kind||r.iconKey||""]||Y["system.note"],o=B(r);return{icon:a.icon,tone:a.tone,source:o}}function Et(r){return r.agent||r.actor||r.slug||"system"}function Nt(r){return r==="system"?"System":r}function Zt(){const r=ot("/api/activity?limit=200"),[a,o]=d.useState([]),[l,u]=d.useState("all"),[g,f]=d.useState(!0),[j,M]=d.useState(!1),[b,T]=d.useState(14),[z,L]=d.useState(null),[s,R]=d.useState(""),S=Rt(),w=d.useCallback(e=>{if(!g)return;const i=e.event;i&&o(n=>[i,...n].slice(0,500))},[g]);lt("activity:new",w);const y=d.useMemo(()=>{var e;return[...a,...((e=r.data)==null?void 0:e.items)||[]]},[a,r.data]),C=d.useMemo(()=>{let e=l==="all"?y:y.filter(i=>B(i)===l);if(s.trim()){const i=s.trim().toLowerCase();e=e.filter(n=>[n.title||"",n.description||"",n.kind||"",n.agent||"",n.actor||""].join(" ").toLowerCase().includes(i))}return e},[y,l,s]),k=Date.now()-b*864e5,x=d.useMemo(()=>C.filter(e=>(e.ts||0)>=k||e.ts===void 0),[C,k]),$=d.useMemo(()=>{const e={all:0,task:0,agent:0,goal:0,settings:0,system:0,git:0};for(const i of y){const n=B(i);e.all+=1,e[n]+=1}return e},[y]),H=d.useMemo(()=>{const e=new Map;for(const i of x){if(!i.ts)continue;const n=new Date(i.ts),c=`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,"0")}-${String(n.getDate()).padStart(2,"0")}T${String(n.getHours()).padStart(2,"0")}`;e.set(c,(e.get(c)??0)+1)}return[...e.entries()].sort(([i],[n])=>i<n?-1:1).map(([,i])=>i).slice(-24)},[x]),W=d.useMemo(()=>{const e=new Map,i=[];for(const n of x){const c=Wt(n),p=n.ts||Date.now(),v=Et(n),A=n.id||`${v}-${p}-${Math.random().toString(36).slice(2,6)}`;e.has(v)||(e.set(v,[]),i.push(v));const E=J(n.kind,n.slug);e.get(v).push({id:A,title:n.title||n.description||n.kind||"event",description:n.description&&n.description!==n.title?n.description:void 0,ts:p,tone:c.tone,icon:c.icon,href:void 0,kind:n.kind,agent:n.agent,actor:n.actor,slug:n.slug,raw:n})}for(const n of e.values())n.sort((c,p)=>p.ts-c.ts);return i.map(n=>{var E;const c=e.get(n),p=((E=c[0])==null?void 0:E.icon)||Q,v={danger:4,warning:3,success:2,info:1,neutral:0},A=c.reduce((G,P)=>{const at=v[P.tone??"neutral"],st=v[G??"neutral"];return at>st?P.tone??"neutral":G},"neutral");return{key:n,label:Nt(n),events:c,icon:p,tone:A}}).sort((n,c)=>c.events.length-n.events.length)},[x]),nt=d.useCallback(e=>{const i=J(e.kind,e.slug);if(i){S(i);return}},[S]),rt=async()=>{L(null);try{const i=((await gt("/api/activity?limit=10000")).items||[]).map(v=>JSON.stringify(v)).join(`
2
- `),n=new Blob([i],{type:"application/x-ndjson"}),c=URL.createObjectURL(n),p=document.createElement("a");p.href=c,p.download=`bizar-activity-${new Date().toISOString().slice(0,10)}.ndjson`,document.body.appendChild(p),p.click(),p.remove(),URL.revokeObjectURL(c)}catch(e){L((e instanceof ft,e.message))}};return t.jsxs(m,{gap:5,"data-testid":"activity-view",children:[t.jsx(pt,{title:"Activity",description:"Live event lanes grouped by agent, system, and goal.",actions:t.jsxs(h,{align:"center",gap:2,children:[t.jsx("input",{type:"search",placeholder:"Search…",value:s,onChange:e=>R(e.target.value),"aria-label":"Search activity",style:{height:28,padding:"0 var(--space-2)",border:"1px solid var(--border)",borderRadius:"var(--radius-sm)",background:"var(--surface-0)",color:"var(--fg)",fontFamily:"var(--font-sans)",fontSize:"var(--fs-12)",width:200,outline:"none"}}),t.jsxs(h,{align:"center",gap:1,children:[t.jsx(xt,{size:8,"aria-hidden":!0,style:{color:g?"var(--success)":"var(--fg-muted)"},fill:"currentColor"}),t.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:g?"Live":"Paused"}),t.jsx(U,{variant:"ghost",onClick:()=>f(e=>!e),"aria-label":g?"Pause stream":"Resume stream",children:g?"Pause":"Resume"})]}),t.jsxs(U,{variant:"secondary",onClick:()=>{rt()},children:[t.jsx(jt,{size:12,"aria-hidden":!0})," Export NDJSON"]})]})}),t.jsx(ht,{title:"Lanes",count:x.length,sparkline:H.length>=2?t.jsx(vt,{data:H,width:120,height:28}):void 0,description:`${W.length} lane${W.length===1?"":"s"} · ${$.task} task · ${$.agent} agent · ${$.goal} goal`,testid:"activity-list-header"}),z!==null&&t.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:z}),t.jsxs(h,{align:"center",gap:2,wrap:!0,children:[t.jsx(X,{label:`All (${$.all})`,active:l==="all",onClick:()=>u("all"),icon:t.jsx(O,{size:12,"aria-hidden":!0})}),Object.keys(q).map(e=>{const i=q[e],n=i.icon;return t.jsx(X,{label:`${i.label} (${$[e]})`,active:l===e,onClick:()=>u(e),icon:t.jsx(n,{size:12,"aria-hidden":!0})},e)})]}),t.jsx(D,{children:t.jsx(F,{children:t.jsxs(h,{align:"center",gap:6,wrap:!0,children:[t.jsxs(m,{gap:1,children:[t.jsx("label",{htmlFor:"cl-auto",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Live tail"}),t.jsxs(h,{align:"center",gap:2,children:[t.jsx(K,{id:"cl-auto",checked:g,onCheckedChange:f}),t.jsx("span",{style:{fontSize:"var(--fs-12)",color:g?"var(--success)":"var(--fg-muted)"},children:g?"on":"paused"})]})]}),t.jsxs(m,{gap:1,children:[t.jsx("label",{htmlFor:"cl-compact",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Compact rows"}),t.jsxs(h,{align:"center",gap:2,children:[t.jsx(K,{id:"cl-compact",checked:j,onCheckedChange:M}),t.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:j?"compact":"comfortable"})]})]}),t.jsxs(m,{gap:1,children:[t.jsx("label",{htmlFor:"cl-days",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Look back"}),t.jsxs(h,{align:"center",gap:2,children:[t.jsx(yt,{id:"cl-days",value:[b],onValueChange:e=>T(e[0]??14),min:1,max:90,step:1}),t.jsxs("code",{style:{fontFamily:"var(--font-mono)",fontSize:"var(--fs-12)"},children:[b,"d"]})]})]}),t.jsxs(h,{align:"center",gap:1,children:[t.jsx(kt,{size:12,"aria-hidden":!0,style:{color:"var(--fg-muted)"}}),t.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"click any event row to jump to its source"})]})]})})}),!r.loading&&x.length===0&&t.jsx(D,{children:t.jsx(F,{children:t.jsxs(m,{gap:1,children:[t.jsx("strong",{children:"No activity matching filters."}),t.jsx("span",{style:{color:"var(--fg-muted)",fontSize:"var(--fs-13)"},children:"Clear the source filter or extend the look-back window."})]})})}),r.loading&&x.length===0?t.jsx(ct,{style:{height:480}}):r.error&&x.length===0?t.jsx(mt,{block:!0,title:"Couldn't load activity",description:"The activity feed failed to fetch. Retry to refetch.",error:r.error,onRetry:()=>void r.refetch(),testid:"activity-error"}):W.length===0?t.jsx(D,{children:t.jsx(F,{children:t.jsx("span",{style:{color:"var(--fg-muted)"},children:"No lanes yet — events will appear here as agents run."})})}):t.jsx(Lt,{minHeight:j?320:480,children:W.map(e=>t.jsx($t,{laneId:e.key,label:e.label,icon:e.icon,events:e.events,loading:r.loading&&e.events.length===0,onEventClick:nt,trailing:t.jsx(dt,{tone:e.tone==="danger"?"danger":e.tone==="warning"?"warning":e.tone==="success"?"success":e.tone==="info"?"info":"neutral",children:e.tone})},e.key))})]})}function X({label:r,active:a,onClick:o,icon:l}){return t.jsxs("button",{type:"button",onClick:o,"aria-pressed":a,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"4px 10px",borderRadius:"var(--radius-pill)",border:`1px solid ${a?"var(--accent)":"var(--border)"}`,background:a?"color-mix(in oklch, var(--accent) 14%, var(--surface-1))":"var(--surface-1)",color:a?"var(--accent)":"var(--fg)",fontSize:"var(--fs-12)",cursor:"pointer",fontWeight:a?600:500},children:[l,r]})}export{Zt as ActivityView};
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActivityView-BC0QQ_j9.js","sources":["../../src/web/v8/ui/activity/ActivityLane.tsx","../../src/web/v8/ui/activity/ActivityLanes.tsx","../../src/web/v8/data/useViewNavigate.ts","../../src/web/v8/views/Activity/ActivityView.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from 'react';\nimport { Stack } from '../primitives/Stack.js';\nimport { Inline } from '../primitives/Inline.js';\nimport { cx } from '../utils/cx.js';\nimport type { LucideIcon } from 'lucide-react';\n\n/**\n * ActivityLane — vertical swimlane of activity events keyed to a single\n * actor (agent / system / user). Layout: sticky header + scrollable list.\n *\n * Used by `ActivityView` (inspired by patoles/agent-flow) to render one\n * column per actor. Width is fixed by the parent (default 320px) so lanes\n * read as discrete swimlanes.\n *\n * Visual conventions:\n * - First 3 events keep `tone` icon + chip; overflow collapses into a\n * inline `<details>` so the lane doesn't dominate the viewport.\n * - Header tone chip uses `tone` for at-a-glance activity health.\n *\n * Event rows are fully clickable when `onEventClick` is set; the parent\n * owns the routing logic.\n */\nexport interface ActivityLaneEvent {\n id: string;\n title: string;\n description?: string;\n ts: number;\n tone?: 'info' | 'success' | 'warning' | 'danger' | 'neutral';\n icon?: LucideIcon;\n href?: string;\n kind?: string;\n agent?: string;\n actor?: string;\n slug?: string;\n raw?: unknown;\n}\n\nexport interface ActivityLaneProps {\n /** Stable id for this lane — used as React key + DOM data-lane. */\n laneId: string;\n /** Display label (agent name, \"system\", etc). */\n label: string;\n /** Optional icon rendered next to the label in the header. */\n icon?: LucideIcon;\n /** Events belonging to this lane (newest first). */\n events: readonly ActivityLaneEvent[];\n /** When true the lane shows a skeleton in place of events. */\n loading?: boolean;\n /** Click-through handler; row becomes a real button when set. */\n onEventClick?: (event: ActivityLaneEvent) => void;\n /** Hide lanes whose events array is empty. */\n collapsible?: boolean;\n /** Optional right-side header content (count chip, tone, status). */\n trailing?: ReactNode;\n /** Lane width in CSS units (default `'320px'`). */\n width?: string | number;\n className?: string;\n}\n\nconst TONE_VAR: Record<NonNullable<ActivityLaneEvent['tone']>, string> = {\n neutral: 'var(--fg-muted)',\n info: 'var(--info)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n danger: 'var(--danger)',\n};\n\nfunction timeShort(ts: number): string {\n const d = new Date(ts);\n if (Number.isNaN(d.getTime())) return '—';\n return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n}\n\nfunction relTime(ts: number): string {\n const diff = Date.now() - ts;\n if (diff < 60_000) return 'just now';\n if (diff < 3_600_000) return `${Math.floor(diff / 60_000)}m ago`;\n if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)}h ago`;\n return `${Math.floor(diff / 86_400_000)}d ago`;\n}\n\nexport function ActivityLane(props: ActivityLaneProps): JSX.Element {\n const {\n laneId,\n label,\n icon: Icon,\n events,\n loading = false,\n onEventClick,\n collapsible = false,\n trailing,\n width = '320px',\n className,\n } = props;\n\n const style: CSSProperties = {\n width,\n minWidth: width,\n maxWidth: width,\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-md)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n };\n\n const headerStyle: CSSProperties = {\n padding: 'var(--space-2) var(--space-3)',\n borderBottom: '1px solid var(--border)',\n background: 'color-mix(in oklch, var(--surface-0) 70%, transparent)',\n backdropFilter: 'blur(6px)',\n };\n\n return (\n <section\n aria-label={`${label} activity`}\n data-lane-id={laneId}\n data-testid={`activity-lane-${laneId}`}\n className={cx('v8-activity-lane', className)}\n style={style}\n >\n <header style={headerStyle}>\n <Inline align=\"center\" justify=\"between\" gap={2} wrap>\n <Inline align=\"center\" gap={2}>\n {Icon && <Icon size={14} aria-hidden style={{ color: 'var(--accent)' }} />}\n <strong style={{ fontSize: 'var(--fs-13)', color: 'var(--fg)' }}>{label}</strong>\n </Inline>\n <Inline align=\"center\" gap={1}>\n {trailing}\n <span\n aria-label={`${events.length} events`}\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {events.length}\n </span>\n </Inline>\n </Inline>\n </header>\n\n <Stack\n role=\"list\"\n aria-label={`${label} events`}\n gap={1}\n style={{\n padding: 'var(--space-2)',\n overflow: 'auto',\n flex: 1,\n minHeight: 0,\n }}\n data-testid={`activity-lane-list-${laneId}`}\n >\n {loading && events.length === 0 ? (\n <LaneSkeleton />\n ) : events.length === 0 ? (\n <span style={{ color: 'var(--fg-muted)', fontSize: 'var(--fs-12)', padding: 'var(--space-2)' }}>\n {collapsible ? '' : 'No events yet.'}\n </span>\n ) : (\n events.map((e) => {\n const tone = e.tone ?? 'neutral';\n const EventIcon = e.icon;\n const interactive = typeof onEventClick === 'function';\n const rowStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr auto',\n alignItems: 'flex-start',\n gap: 'var(--space-2)',\n padding: '6px 8px',\n borderRadius: 'var(--radius-sm)',\n border: '1px solid transparent',\n background: interactive ? 'var(--surface-0)' : 'transparent',\n cursor: interactive ? 'pointer' : 'default',\n transition: 'border-color 120ms ease, background 120ms ease',\n textAlign: 'left',\n };\n const inner = (\n <>\n <span\n aria-hidden\n style={{\n width: 22,\n height: 22,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 'var(--radius-pill)',\n background: `color-mix(in oklch, ${TONE_VAR[tone]} 18%, transparent)`,\n color: TONE_VAR[tone],\n flexShrink: 0,\n }}\n >\n {EventIcon ? <EventIcon size={12} aria-hidden /> : null}\n </span>\n <Stack gap={0} style={{ minWidth: 0 }}>\n <span\n title={e.title}\n style={{\n fontSize: 'var(--fs-12)',\n fontWeight: 500,\n color: 'var(--fg)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {e.title}\n </span>\n {e.description && (\n <span\n title={e.description}\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {e.description}\n </span>\n )}\n </Stack>\n <span\n style={{\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n fontVariantNumeric: 'tabular-nums',\n flexShrink: 0,\n textAlign: 'right',\n }}\n title={new Date(e.ts).toISOString()}\n >\n {timeShort(e.ts)}\n </span>\n </>\n );\n return interactive ? (\n <button\n type=\"button\"\n key={e.id}\n role=\"listitem\"\n data-activity-event-id={e.id}\n data-activity-kind={e.kind ?? ''}\n data-activity-slug={e.slug ?? ''}\n data-activity-href={e.href ?? ''}\n data-testid={`activity-event-${e.id}`}\n onClick={() => onEventClick?.(e)}\n onKeyDown={(ev) => {\n if (ev.key === 'Enter' || ev.key === ' ') {\n ev.preventDefault();\n onEventClick?.(e);\n }\n }}\n style={rowStyle}\n aria-label={`Open ${e.title}`}\n >\n {inner}\n </button>\n ) : (\n <div\n key={e.id}\n role=\"listitem\"\n data-activity-event-id={e.id}\n data-activity-kind={e.kind ?? ''}\n data-activity-slug={e.slug ?? ''}\n style={rowStyle}\n >\n {inner}\n </div>\n );\n })\n )}\n </Stack>\n\n {!loading && events.length > 0 && (\n <footer\n style={{\n padding: '4px var(--space-3)',\n borderTop: '1px solid var(--border)',\n fontSize: 'var(--fs-12)',\n color: 'var(--fg-muted)',\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n <span>latest {relTime(events[0].ts)}</span>\n <span>{events.length === 1 ? '1 event' : `${events.length} events`}</span>\n </footer>\n )}\n </section>\n );\n}\n\nfunction LaneSkeleton(): JSX.Element {\n return (\n <Stack gap={1}>\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n aria-hidden\n style={{\n height: 36,\n borderRadius: 'var(--radius-sm)',\n background: 'color-mix(in oklch, var(--fg-muted) 8%, transparent)',\n }}\n />\n ))}\n </Stack>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport { Stack } from '../primitives/Stack.js';\n\n/**\n * ActivityLanes — horizontal scroller holding a row of `ActivityLane`s.\n *\n * Each lane owns its own width (default 320px). The container scrolls\n * horizontally on overflow. A right-edge fade hint can be enabled via\n * `fade` when lanes are clipped on smaller viewports.\n */\nexport interface ActivityLanesProps {\n children: ReactNode;\n /** Gap between lanes in px (default 12). */\n gap?: number;\n /** Minimum height for the row; lanes fill the available height. */\n minHeight?: string | number;\n /** When true the rightmost lane fades into a scroll hint. */\n fade?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ActivityLanes(props: ActivityLanesProps): JSX.Element {\n const { children, gap = 12, minHeight = 480, fade = true, className, style } = props;\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap,\n overflowX: 'auto',\n overflowY: 'hidden',\n padding: 'var(--space-1) var(--space-1) var(--space-2)',\n minHeight,\n WebkitOverflowScrolling: 'touch',\n scrollSnapType: 'x proximity',\n maskImage: fade\n ? 'linear-gradient(to right, transparent 0, black 24px, black calc(100% - 24px), transparent 100%)'\n : undefined,\n ...style,\n };\n return (\n <Stack\n role=\"region\"\n aria-label=\"Activity lanes\"\n data-testid=\"activity-lanes\"\n className={className}\n style={containerStyle}\n >\n {children}\n </Stack>\n );\n}\n","import { useCallback } from 'react';\n\n/**\n * useViewNavigate — fire-and-forget view router navigation.\n *\n * The v8 dashboard owns `activeId` state inside `App.tsx`. Components deep\n * in the tree (e.g. `ActivityLane` rows inside `ActivityView`) need to\n * switch the active view without prop-drilling. This hook dispatches a\n * `bizar:navigate` `CustomEvent` on `window` that `App.tsx` listens for\n * and forwards to its `setActiveId` setter.\n *\n * Event shape:\n * { id: string; detail?: { entity?: string; slug?: string } }\n *\n * The receiving view may read `entity`/`slug` from `useLocation().hash` or\n * its own props — the event itself is intentionally minimal.\n */\n\ndeclare global {\n interface WindowEventMap {\n 'bizar:navigate': CustomEvent<{ id: string; entity?: string; slug?: string }>;\n }\n}\n\nexport interface ViewNavigateDetail {\n id: string;\n entity?: string;\n slug?: string;\n}\n\nexport function useViewNavigate(): (detail: ViewNavigateDetail) => void {\n return useCallback((detail: ViewNavigateDetail) => {\n if (typeof window === 'undefined') return;\n window.dispatchEvent(new CustomEvent('bizar:navigate', { detail }));\n }, []);\n}\n\n/**\n * Map an `ActivityEvent` (kind + slug) to a target view id + entity scope.\n *\n * Returns `null` when no specific target is known — the caller should\n * still dispatch the event so the user lands somewhere useful, but\n * `null` means \"no specific deep-link scope\".\n */\nexport function activityTarget(kind: string | undefined, slug: string | undefined): ViewNavigateDetail | null {\n const k = (kind || '').toLowerCase();\n const s = slug || '';\n if (k.startsWith('task')) return { id: 'tasks', entity: s };\n if (k.startsWith('goal')) return { id: 'goals', entity: s };\n if (k.startsWith('agent')) return { id: 'agents', entity: s };\n if (k === 'artifact.new' || k.startsWith('artifact')) return { id: 'artifacts', entity: s };\n if (k.startsWith('git')) return { id: 'git', entity: s };\n return null;\n}\n","import { useCallback, useMemo, useState } from 'react';\nimport {\n GitMerge,\n GitPullRequest,\n AlertTriangle,\n CheckCircle2,\n Bot,\n Wrench,\n Activity as ActivityIcon,\n Layers,\n Target,\n Settings as SettingsIcon,\n Cpu,\n Filter,\n Clock,\n Circle,\n type LucideIcon,\n} from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { ListHeader } from '../../ui/data/ListHeader.js';\nimport { Sparkline } from '../../ui/data/Sparkline.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { Card, CardBody } from '../../ui/data/Card.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { ErrorState } from '../../ui/feedback/ErrorState.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Switch } from '../../ui/controls/Switch.js';\nimport { Slider } from '../../ui/controls/Slider.js';\nimport { ActivityLane, type ActivityLaneEvent } from '../../ui/activity/ActivityLane.js';\nimport { ActivityLanes } from '../../ui/activity/ActivityLanes.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { useWsMessage } from '../../data/useWebSocket.js';\nimport { useViewNavigate, activityTarget } from '../../data/useViewNavigate.js';\nimport type { ActivityEvent } from '../../data/types.js';\n\n/**\n * ActivityView — Sprint S40 visual changelog.\n *\n * Inspired by patoles/agent-flow: vertical swimlanes per actor\n * (agent/system/user) with newest-first events, click-through to the\n * source entity (task / goal / agent / artifact), and multi-select\n * source filters.\n *\n * Layout: sticky header (search + live toggle + export) → counts row\n * with per-source badges → preferences card (live / compact / look-back)\n * → horizontal scroller of `ActivityLane`s.\n */\n\ntype Source = 'task' | 'agent' | 'goal' | 'settings' | 'system' | 'git' | 'all';\n\nconst SOURCE_META: Record<Exclude<Source, 'all'>, { label: string; icon: LucideIcon; tone: 'neutral' | 'info' | 'accent' | 'success' | 'warning' | 'danger' }> = {\n task: { label: 'Tasks', icon: Layers, tone: 'neutral' },\n agent: { label: 'Agents', icon: Bot, tone: 'info' },\n goal: { label: 'Goals', icon: Target, tone: 'accent' },\n settings: { label: 'Settings', icon: SettingsIcon, tone: 'neutral' },\n system: { label: 'System', icon: Cpu, tone: 'warning' },\n git: { label: 'Git', icon: GitMerge, tone: 'neutral' },\n};\n\nconst EVENT_TONE_MAP: Record<string, { icon: LucideIcon; tone: ActivityLaneEvent['tone']; source: Source }> = {\n 'git.merge': { icon: GitMerge, tone: 'success', source: 'git' },\n 'git.pull-request': { icon: GitPullRequest, tone: 'info', source: 'git' },\n 'task.completed': { icon: CheckCircle2, tone: 'success', source: 'task' },\n 'task.failed': { icon: AlertTriangle, tone: 'danger', source: 'task' },\n 'task.created': { icon: Layers, tone: 'info', source: 'task' },\n 'task.moved': { icon: Layers, tone: 'neutral', source: 'task' },\n 'agent.run': { icon: Bot, tone: 'info', source: 'agent' },\n 'agent.tool': { icon: Wrench, tone: 'neutral', source: 'agent' },\n 'agent.killed': { icon: AlertTriangle, tone: 'warning', source: 'agent' },\n 'agent.message': { icon: ActivityIcon, tone: 'info', source: 'agent' },\n 'goal.created': { icon: Target, tone: 'info', source: 'goal' },\n 'goal.status': { icon: Target, tone: 'info', source: 'goal' },\n 'goal.decomposed': { icon: Target, tone: 'success', source: 'goal' },\n 'settings.changed': { icon: SettingsIcon, tone: 'neutral', source: 'settings' },\n 'system.error': { icon: AlertTriangle, tone: 'danger', source: 'system' },\n 'system.note': { icon: ActivityIcon, tone: 'neutral', source: 'system' },\n};\n\nfunction inferSource(e: ActivityEvent): Source {\n const hint = (e.kind || e.iconKey || '').toLowerCase();\n if (hint.startsWith('task')) return 'task';\n if (hint.startsWith('agent')) return 'agent';\n if (hint.startsWith('goal')) return 'goal';\n if (hint.startsWith('settings')) return 'settings';\n if (hint.startsWith('git')) return 'git';\n if (hint.startsWith('system')) return 'system';\n if (e.title && /goal/i.test(e.title)) return 'goal';\n if (e.title && /(agent|claude|cc)/i.test(e.title)) return 'agent';\n return 'system';\n}\n\nfunction eventVisual(e: ActivityEvent): { icon: LucideIcon; tone: ActivityLaneEvent['tone']; source: Source } {\n const m = EVENT_TONE_MAP[e.kind || e.iconKey || ''] || EVENT_TONE_MAP['system.note'];\n const inferred = inferSource(e);\n return { icon: m.icon, tone: m.tone, source: inferred };\n}\n\nfunction laneKey(e: ActivityEvent): string {\n return e.agent || e.actor || e.slug || 'system';\n}\n\nfunction laneLabel(key: string): string {\n if (key === 'system') return 'System';\n return key;\n}\n\ninterface ExtendedEvent extends ActivityEvent {\n __source?: Source;\n __key?: string;\n}\n\nexport function ActivityView(): JSX.Element {\n const events = useFetch<{ items?: ActivityEvent[]; total?: number; limit?: number; since?: string | null }>('/api/activity?limit=200');\n const [live, setLive] = useState<ActivityEvent[]>([]);\n // Active source filter (single source — clicking a chip narrows to one).\n const [source, setSource] = useState<Source>('all');\n const [autoRefresh, setAutoRefresh] = useState<boolean>(true);\n const [compact, setCompact] = useState<boolean>(false);\n const [maxDays, setMaxDays] = useState<number>(14);\n const [exportError, setExportError] = useState<string | null>(null);\n const [search, setSearch] = useState<string>('');\n const navigate = useViewNavigate();\n\n const onEvent = useCallback((msg: { event?: ActivityEvent } & Record<string, unknown>) => {\n if (!autoRefresh) return;\n const ev = msg.event;\n if (!ev) return;\n setLive((prev) => [ev, ...prev].slice(0, 500));\n }, [autoRefresh]);\n useWsMessage('activity:new', onEvent);\n\n const merged = useMemo<ExtendedEvent[]>(() => {\n return [...live, ...(events.data?.items || [])];\n }, [live, events.data]);\n\n const filtered = useMemo<ExtendedEvent[]>(() => {\n let list = source === 'all' ? merged : merged.filter((e) => inferSource(e) === source);\n if (search.trim()) {\n const needle = search.trim().toLowerCase();\n list = list.filter((e) => {\n const hay = [\n e.title || '',\n e.description || '',\n e.kind || '',\n e.agent || '',\n e.actor || '',\n ].join(' ').toLowerCase();\n return hay.includes(needle);\n });\n }\n return list;\n }, [merged, source, search]);\n\n // Time-windowed set (older events clipped).\n const cutoff = Date.now() - maxDays * 86_400_000;\n const windowed = useMemo<ExtendedEvent[]>(\n () => filtered.filter((e) => (e.ts || 0) >= cutoff || e.ts === undefined),\n [filtered, cutoff],\n );\n\n const counts = useMemo(() => {\n const acc: Record<Source, number> = { all: 0, task: 0, agent: 0, goal: 0, settings: 0, system: 0, git: 0 };\n for (const e of merged) {\n const s = inferSource(e);\n acc.all += 1;\n acc[s] += 1;\n }\n return acc;\n }, [merged]);\n\n const sparklineData = useMemo<number[]>(() => {\n // Group by hour bucket for sparkline.\n const buckets = new Map<string, number>();\n for (const e of windowed) {\n if (!e.ts) continue;\n const d = new Date(e.ts);\n const k = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}T${String(d.getHours()).padStart(2, '0')}`;\n buckets.set(k, (buckets.get(k) ?? 0) + 1);\n }\n return [...buckets.entries()].sort(([a], [b]) => (a < b ? -1 : 1)).map(([, v]) => v).slice(-24);\n }, [windowed]);\n\n // Group events into lanes (one per actor).\n const lanes = useMemo<{ key: string; label: string; events: ActivityLaneEvent[]; icon: LucideIcon; tone: ActivityLaneEvent['tone'] }[]>(() => {\n const map = new Map<string, ActivityLaneEvent[]>();\n const order: string[] = [];\n for (const e of windowed) {\n const v = eventVisual(e);\n const ts = e.ts || Date.now();\n const k = laneKey(e);\n const id = e.id || `${k}-${ts}-${Math.random().toString(36).slice(2, 6)}`;\n if (!map.has(k)) { map.set(k, []); order.push(k); }\n const target = activityTarget(e.kind, e.slug);\n map.get(k)!.push({\n id,\n title: e.title || e.description || e.kind || 'event',\n description: e.description && e.description !== e.title ? e.description : undefined,\n ts,\n tone: v.tone,\n icon: v.icon,\n href: target ? undefined : undefined,\n kind: e.kind,\n agent: e.agent,\n actor: e.actor,\n slug: e.slug,\n raw: e,\n });\n }\n // Sort each lane newest-first; ensure consistent order.\n for (const arr of map.values()) arr.sort((a, b) => b.ts - a.ts);\n return order.map((k) => {\n const events = map.get(k)!;\n // Lane icon picks the most recent event's icon (visual hint).\n const Icon = (events[0]?.icon as LucideIcon) || Cpu;\n // Lane tone picks the worst recent tone (danger > warning > success > info > neutral).\n const severity: Record<NonNullable<ActivityLaneEvent['tone']>, number> = { danger: 4, warning: 3, success: 2, info: 1, neutral: 0 };\n const worst = events.reduce<ActivityLaneEvent['tone']>((acc, e) => {\n const cur = severity[e.tone ?? 'neutral'];\n const best = severity[acc ?? 'neutral'];\n return cur > best ? (e.tone ?? 'neutral') : acc;\n }, 'neutral');\n return { key: k, label: laneLabel(k), events, icon: Icon, tone: worst };\n }).sort((a, b) => b.events.length - a.events.length);\n }, [windowed]);\n\n const onLaneClick = useCallback((ev: ActivityLaneEvent) => {\n const target = activityTarget(ev.kind, ev.slug);\n if (target) {\n navigate(target);\n return;\n }\n // Fallback: navigate to activity's own view (no-op) but focus the row.\n }, [navigate]);\n\n const exportNdjson = async (): Promise<void> => {\n setExportError(null);\n try {\n const res = await fetchJson<{ items?: ActivityEvent[] }>('/api/activity?limit=10000');\n const text = (res.items || []).map((e) => JSON.stringify(e)).join('\\n');\n const blob = new Blob([text], { type: 'application/x-ndjson' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `bizar-activity-${new Date().toISOString().slice(0, 10)}.ndjson`;\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n } catch (err) {\n setExportError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n return (\n <Stack gap={5} data-testid=\"activity-view\">\n <ViewHeader\n title=\"Activity\"\n description=\"Live event lanes grouped by agent, system, and goal.\"\n actions={\n <Inline align=\"center\" gap={2}>\n <input\n type=\"search\"\n placeholder=\"Search…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n aria-label=\"Search activity\"\n style={{\n height: 28,\n padding: '0 var(--space-2)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-sm)',\n background: 'var(--surface-0)',\n color: 'var(--fg)',\n fontFamily: 'var(--font-sans)',\n fontSize: 'var(--fs-12)',\n width: 200,\n outline: 'none',\n }}\n />\n <Inline align=\"center\" gap={1}>\n <Circle\n size={8}\n aria-hidden\n style={{ color: autoRefresh ? 'var(--success)' : 'var(--fg-muted)' }}\n fill=\"currentColor\"\n />\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n {autoRefresh ? 'Live' : 'Paused'}\n </span>\n <Button variant=\"ghost\" onClick={() => setAutoRefresh((v) => !v)} aria-label={autoRefresh ? 'Pause stream' : 'Resume stream'}>\n {autoRefresh ? 'Pause' : 'Resume'}\n </Button>\n </Inline>\n <Button variant=\"secondary\" onClick={() => { void exportNdjson(); }}>\n <Filter size={12} aria-hidden /> Export NDJSON\n </Button>\n </Inline>\n }\n />\n <ListHeader\n title=\"Lanes\"\n count={windowed.length}\n sparkline={sparklineData.length >= 2 ? <Sparkline data={sparklineData} width={120} height={28} /> : undefined}\n description={`${lanes.length} lane${lanes.length === 1 ? '' : 's'} · ${counts.task} task · ${counts.agent} agent · ${counts.goal} goal`}\n testid=\"activity-list-header\"\n />\n\n {exportError !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-3)', background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))', border: '1px solid var(--danger)', borderRadius: 'var(--radius-md)', fontSize: 'var(--fs-12)' }}>\n {exportError}\n </div>\n )}\n\n {/* Source filter chips */}\n <Inline align=\"center\" gap={2} wrap>\n <FilterChip label={`All (${counts.all})`} active={source === 'all'} onClick={() => setSource('all')} icon={<ActivityIcon size={12} aria-hidden />} />\n {(Object.keys(SOURCE_META) as Array<Exclude<Source, 'all'>>).map((s) => {\n const meta = SOURCE_META[s];\n const Icon = meta.icon;\n return (\n <FilterChip\n key={s}\n label={`${meta.label} (${counts[s]})`}\n active={source === s}\n onClick={() => setSource(s)}\n icon={<Icon size={12} aria-hidden />}\n />\n );\n })}\n </Inline>\n\n {/* Display prefs */}\n <Card>\n <CardBody>\n <Inline align=\"center\" gap={6} wrap>\n <Stack gap={1}>\n <label htmlFor=\"cl-auto\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Live tail</label>\n <Inline align=\"center\" gap={2}>\n <Switch id=\"cl-auto\" checked={autoRefresh} onCheckedChange={setAutoRefresh} />\n <span style={{ fontSize: 'var(--fs-12)', color: autoRefresh ? 'var(--success)' : 'var(--fg-muted)' }}>\n {autoRefresh ? 'on' : 'paused'}\n </span>\n </Inline>\n </Stack>\n <Stack gap={1}>\n <label htmlFor=\"cl-compact\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Compact rows</label>\n <Inline align=\"center\" gap={2}>\n <Switch id=\"cl-compact\" checked={compact} onCheckedChange={setCompact} />\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>{compact ? 'compact' : 'comfortable'}</span>\n </Inline>\n </Stack>\n <Stack gap={1}>\n <label htmlFor=\"cl-days\" style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>Look back</label>\n <Inline align=\"center\" gap={2}>\n <Slider id=\"cl-days\" value={[maxDays]} onValueChange={(v) => setMaxDays(v[0] ?? 14)} min={1} max={90} step={1} />\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{maxDays}d</code>\n </Inline>\n </Stack>\n <Inline align=\"center\" gap={1}>\n <Clock size={12} aria-hidden style={{ color: 'var(--fg-muted)' }} />\n <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n click any event row to jump to its source\n </span>\n </Inline>\n </Inline>\n </CardBody>\n </Card>\n\n {/* Empty state */}\n {!events.loading && windowed.length === 0 && (\n <Card>\n <CardBody>\n <Stack gap={1}>\n <strong>No activity matching filters.</strong>\n <span style={{ color: 'var(--fg-muted)', fontSize: 'var(--fs-13)' }}>\n Clear the source filter or extend the look-back window.\n </span>\n </Stack>\n </CardBody>\n </Card>\n )}\n\n {events.loading && windowed.length === 0 ? (\n <Skeleton style={{ height: 480 }} />\n ) : events.error && windowed.length === 0 ? (\n <ErrorState\n block\n title=\"Couldn't load activity\"\n description=\"The activity feed failed to fetch. Retry to refetch.\"\n error={events.error}\n onRetry={() => void events.refetch()}\n testid=\"activity-error\"\n />\n ) : lanes.length === 0 ? (\n <Card>\n <CardBody>\n <span style={{ color: 'var(--fg-muted)' }}>No lanes yet — events will appear here as agents run.</span>\n </CardBody>\n </Card>\n ) : (\n <ActivityLanes minHeight={compact ? 320 : 480}>\n {lanes.map((lane) => (\n <ActivityLane\n key={lane.key}\n laneId={lane.key}\n label={lane.label}\n icon={lane.icon}\n events={lane.events}\n loading={events.loading && lane.events.length === 0}\n onEventClick={onLaneClick}\n trailing={\n <Badge tone={\n lane.tone === 'danger' ? 'danger'\n : lane.tone === 'warning' ? 'warning'\n : lane.tone === 'success' ? 'success'\n : lane.tone === 'info' ? 'info'\n : 'neutral'\n }>\n {lane.tone}\n </Badge>\n }\n />\n ))}\n </ActivityLanes>\n )}\n </Stack>\n );\n}\n\nfunction FilterChip({ label, active, onClick, icon }: { label: string; active: boolean; onClick: () => void; icon?: React.ReactNode }): JSX.Element {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-pressed={active}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 10px',\n borderRadius: 'var(--radius-pill)',\n border: `1px solid ${active ? 'var(--accent)' : 'var(--border)'}`,\n background: active ? 'color-mix(in oklch, var(--accent) 14%, var(--surface-1))' : 'var(--surface-1)',\n color: active ? 'var(--accent)' : 'var(--fg)',\n fontSize: 'var(--fs-12)',\n cursor: 'pointer',\n fontWeight: active ? 600 : 500,\n }}\n >\n {icon}\n {label}\n </button>\n );\n}\n"],"names":["TONE_VAR","timeShort","ts","d","relTime","diff","ActivityLane","props","laneId","label","Icon","events","loading","onEventClick","collapsible","trailing","width","className","style","headerStyle","jsxs","cx","jsx","Inline","Stack","LaneSkeleton","e","tone","EventIcon","interactive","rowStyle","inner","Fragment","ev","i","ActivityLanes","children","gap","minHeight","fade","containerStyle","useViewNavigate","useCallback","detail","activityTarget","kind","slug","k","s","SOURCE_META","Layers","Bot","Target","SettingsIcon","Cpu","GitMerge","EVENT_TONE_MAP","GitPullRequest","CheckCircle2","AlertTriangle","Wrench","ActivityIcon","inferSource","hint","eventVisual","m","inferred","laneKey","laneLabel","key","ActivityView","useFetch","live","setLive","useState","source","setSource","autoRefresh","setAutoRefresh","compact","setCompact","maxDays","setMaxDays","exportError","setExportError","search","setSearch","navigate","onEvent","msg","prev","useWsMessage","merged","useMemo","_a","filtered","list","needle","cutoff","windowed","counts","acc","sparklineData","buckets","a","b","v","lanes","map","order","id","target","arr","severity","worst","cur","best","onLaneClick","exportNdjson","text","fetchJson","blob","url","err","FetchError","ViewHeader","Circle","Button","Filter","ListHeader","Sparkline","FilterChip","meta","Card","CardBody","Switch","Slider","Clock","Skeleton","ErrorState","lane","Badge","active","onClick","icon"],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import{j as e,r as s}from"./cmdk-C3F6LD6N.js";import{d as f,S as d,D as y,I as h,B as l,i as S,F as j}from"./main-BRmJZcHt.js";import{V as b}from"./ViewHeader-BsnaspKw.js";import{C as k,b as T}from"./Card-Clkvh43Q.js";import{G as w}from"./Grid-Bojq8Sg7.js";import{T as C}from"./trash-2-B_Y6HrfN.js";import{B as D}from"./brain-D7k5s8vH.js";import{P as z}from"./power-off-upZ4xjaG.js";import{D as R}from"./download-B-mPX5P_.js";import{S as P}from"./shield-alert-DA9K6uZO.js";import{R as O}from"./refresh-cw-KGm5eQgv.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 A=f("Hammer",[["path",{d:"m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9",key:"eefl8a"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172V7l-2.26-2.26a6 6 0 0 0-4.202-1.756L9 2.96l.92.82A6.18 6.18 0 0 1 12 8.4V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"b7pghm"}]]);/**
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 $=f("ScrollText",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]),E=[{id:"gc",title:"Garbage collect",description:"Prune empty session files + orphaned task rows from the cache.",icon:C,endpoint:"/api/admin/gc",method:"POST",destructive:!1,group:"data"},{id:"cache-clear",title:"Clear cache",description:"Wipe the dashboard cache directory. Rebuilds on next access.",icon:y,endpoint:"/api/admin/cache/clear",method:"POST",destructive:!0,group:"data"},{id:"memory-reindex",title:"Reindex memory",description:"Rebuild the vault search index.",icon:D,endpoint:"/api/admin/memory/reindex",method:"POST",destructive:!1,group:"data"},{id:"logs-purge",title:"Purge old logs",description:"Delete log files older than 14 days from ~/.config/bizar/logs.",icon:$,endpoint:"/api/admin/logs/purge",method:"POST",destructive:!0,group:"logs"},{id:"restart",title:"Restart dashboard",description:"Signal the server to shut down. The CLI launcher restarts it.",icon:z,endpoint:"/api/admin/restart",method:"POST",destructive:!0,group:"service"},{id:"rebuild",title:"Rebuild",description:"Re-run the installer build step.",icon:A,endpoint:"/api/admin/rebuild",method:"POST",destructive:!0,group:"service"},{id:"export-activity",title:"Export activity",description:"Download the full activity log as NDJSON.",icon:R,endpoint:"/api/admin/activity/export",method:"GET",destructive:!1,group:"logs"}],L=[{id:"data",title:"Data & cache"},{id:"service",title:"Service"},{id:"logs",title:"Logs"}];function _(){return e.jsxs(d,{gap:4,"data-testid":"admin-view",children:[e.jsx(b,{title:"Admin",description:"Maintenance actions. Destructive actions require an inline confirm."}),e.jsx(d,{gap:4,"data-testid":"admin-groups",children:L.map(t=>{const r=E.filter(a=>a.group===t.id);return r.length===0?null:e.jsxs(d,{gap:2,"data-testid":`admin-group-${t.id}`,children:[e.jsx("h3",{style:{margin:0,fontSize:"var(--fs-12)",textTransform:"uppercase",letterSpacing:"var(--tracking-wide)",color:"var(--fg-muted)"},children:t.title}),e.jsx(w,{cols:{base:1,md:2,lg:3},gap:3,children:r.map(a=>e.jsx(V,{action:a},a.id))})]},t.id)})})]})}function V({action:t}){const[r,a]=s.useState(!1),[g,n]=s.useState(!1),[c,o]=s.useState(null),[m,p]=s.useState(null),v=t.icon,u=async()=>{a(!0),p(null),o(null);try{if(t.method==="GET")window.open(t.endpoint,"_blank"),o("Download started");else{const i=await S(t.endpoint,{method:t.method,body:{}}),x=i.note?i.note:i.files!==void 0?`${i.files} file(s) removed (${i.bytes??0} bytes)`:(i.ok,"Done");o(x)}n(!1)}catch(i){p((i instanceof j,i.message))}finally{a(!1)}};return e.jsx(k,{variant:"default",children:e.jsx(T,{children:e.jsxs(d,{gap:2,children:[e.jsxs(h,{align:"center",gap:2,children:[e.jsx(v,{size:18,"aria-hidden":!0}),e.jsx("strong",{style:{fontSize:"var(--fs-13)"},children:t.title}),t.destructive&&e.jsxs("span",{style:{marginLeft:"auto",color:"var(--danger)",fontSize:"var(--fs-11)"},"aria-label":"Destructive",children:[e.jsx(P,{size:14,"aria-hidden":!0,style:{verticalAlign:"middle"}})," destructive"]})]}),e.jsx("p",{style:{color:"var(--fg-muted)",fontSize:"var(--fs-12)",margin:0},children:t.description}),c!==null&&e.jsx("span",{"data-testid":`admin-result-${t.id}`,style:{fontSize:"var(--fs-12)",color:"var(--success)"},children:c}),m!==null&&e.jsx("span",{role:"alert","data-testid":`admin-error-${t.id}`,style:{fontSize:"var(--fs-12)",color:"var(--danger)"},children:m}),g?e.jsxs(h,{gap:1,children:[e.jsx(l,{variant:"danger",onClick:()=>void u(),disabled:r,"data-testid":`admin-confirm-${t.id}`,children:"Confirm"}),e.jsx(l,{variant:"ghost",onClick:()=>n(!1),disabled:r,"data-testid":`admin-cancel-${t.id}`,children:"Cancel"})]}):e.jsxs(l,{variant:t.destructive?"danger":"primary",onClick:()=>t.destructive?n(!0):void u(),disabled:r,"data-testid":`admin-run-${t.id}`,children:[e.jsx(O,{size:14,"aria-hidden":!0})," ",r?"Working…":"Run"]})]})})})}export{_ as AdminView};
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminView-CLTNKFL4.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/hammer.js","../../../node_modules/lucide-react/dist/esm/icons/scroll-text.js","../../src/web/v8/views/Admin/AdminView.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 Hammer = createLucideIcon(\"Hammer\", [\n [\"path\", { d: \"m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9\", key: \"eefl8a\" }],\n [\"path\", { d: \"m18 15 4-4\", key: \"16gjal\" }],\n [\n \"path\",\n {\n d: \"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172V7l-2.26-2.26a6 6 0 0 0-4.202-1.756L9 2.96l.92.82A6.18 6.18 0 0 1 12 8.4V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5\",\n key: \"b7pghm\"\n }\n ]\n]);\n\nexport { Hammer as default };\n//# sourceMappingURL=hammer.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ScrollText = createLucideIcon(\"ScrollText\", [\n [\"path\", { d: \"M15 12h-5\", key: \"r7krc0\" }],\n [\"path\", { d: \"M15 8h-5\", key: \"1khuty\" }],\n [\"path\", { d: \"M19 17V5a2 2 0 0 0-2-2H4\", key: \"zz82l3\" }],\n [\n \"path\",\n {\n d: \"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3\",\n key: \"1ph1d7\"\n }\n ]\n]);\n\nexport { ScrollText as default };\n//# sourceMappingURL=scroll-text.js.map\n","/**\n * v8/views/Admin/AdminView.tsx — Sprint S40, v9.3.0.\n *\n * Card grid of admin / maintenance actions. Each tile posts to its\n * /api/admin/* endpoint, shows a spinner while busy, surfaces the\n * result inline (or the error message), and uses the inline-confirm\n * pattern for destructive actions (cache clear, log purge, restart,\n * rebuild).\n */\n\nimport { useState } from 'react';\nimport {\n RefreshCw,\n Trash2,\n Database,\n Brain,\n PowerOff,\n Hammer,\n ScrollText,\n Download,\n ShieldAlert,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { ViewHeader } from '../../ui/data/ViewHeader.js';\nimport { Card, CardBody } from '../../ui/data/Card.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Grid } from '../../ui/primitives/Grid.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\n\ninterface AdminAction {\n id: string;\n title: string;\n description: string;\n icon: LucideIcon;\n endpoint: string;\n method: 'POST' | 'GET';\n destructive: boolean;\n group: 'data' | 'service' | 'logs';\n}\n\nconst ACTIONS: AdminAction[] = [\n {\n id: 'gc',\n title: 'Garbage collect',\n description: 'Prune empty session files + orphaned task rows from the cache.',\n icon: Trash2,\n endpoint: '/api/admin/gc',\n method: 'POST',\n destructive: false,\n group: 'data',\n },\n {\n id: 'cache-clear',\n title: 'Clear cache',\n description: 'Wipe the dashboard cache directory. Rebuilds on next access.',\n icon: Database,\n endpoint: '/api/admin/cache/clear',\n method: 'POST',\n destructive: true,\n group: 'data',\n },\n {\n id: 'memory-reindex',\n title: 'Reindex memory',\n description: 'Rebuild the vault search index.',\n icon: Brain,\n endpoint: '/api/admin/memory/reindex',\n method: 'POST',\n destructive: false,\n group: 'data',\n },\n {\n id: 'logs-purge',\n title: 'Purge old logs',\n description: 'Delete log files older than 14 days from ~/.config/bizar/logs.',\n icon: ScrollText,\n endpoint: '/api/admin/logs/purge',\n method: 'POST',\n destructive: true,\n group: 'logs',\n },\n {\n id: 'restart',\n title: 'Restart dashboard',\n description: 'Signal the server to shut down. The CLI launcher restarts it.',\n icon: PowerOff,\n endpoint: '/api/admin/restart',\n method: 'POST',\n destructive: true,\n group: 'service',\n },\n {\n id: 'rebuild',\n title: 'Rebuild',\n description: 'Re-run the installer build step.',\n icon: Hammer,\n endpoint: '/api/admin/rebuild',\n method: 'POST',\n destructive: true,\n group: 'service',\n },\n {\n id: 'export-activity',\n title: 'Export activity',\n description: 'Download the full activity log as NDJSON.',\n icon: Download,\n endpoint: '/api/admin/activity/export',\n method: 'GET',\n destructive: false,\n group: 'logs',\n },\n];\n\nconst GROUPS: Array<{ id: 'data' | 'service' | 'logs'; title: string }> = [\n { id: 'data', title: 'Data & cache' },\n { id: 'service', title: 'Service' },\n { id: 'logs', title: 'Logs' },\n];\n\nexport function AdminView(): JSX.Element {\n return (\n <Stack gap={4} data-testid=\"admin-view\">\n <ViewHeader\n title=\"Admin\"\n description=\"Maintenance actions. Destructive actions require an inline confirm.\"\n />\n <Stack gap={4} data-testid=\"admin-groups\">\n {GROUPS.map((group) => {\n const items = ACTIONS.filter((a) => a.group === group.id);\n if (items.length === 0) return null;\n return (\n <Stack key={group.id} gap={2} data-testid={`admin-group-${group.id}`}>\n <h3 style={{ margin: 0, fontSize: 'var(--fs-12)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-wide)', color: 'var(--fg-muted)' }}>\n {group.title}\n </h3>\n <Grid cols={{ base: 1, md: 2, lg: 3 }} gap={3}>\n {items.map((a) => (\n <AdminTile key={a.id} action={a} />\n ))}\n </Grid>\n </Stack>\n );\n })}\n </Stack>\n </Stack>\n );\n}\n\nfunction AdminTile({ action }: { action: AdminAction }): JSX.Element {\n const [busy, setBusy] = useState<boolean>(false);\n const [confirm, setConfirm] = useState<boolean>(false);\n const [result, setResult] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const Icon = action.icon;\n\n const run = async (): Promise<void> => {\n setBusy(true);\n setError(null);\n setResult(null);\n try {\n if (action.method === 'GET') {\n // For GET endpoints (export), trigger a download by navigating\n // to the endpoint in a new tab. The server sets Content-Disposition.\n window.open(action.endpoint, '_blank');\n setResult('Download started');\n } else {\n const res = await fetchJson<{ ok?: boolean; files?: number; bytes?: number; note?: string }>(\n action.endpoint,\n { method: action.method, body: {} },\n );\n const summary = res.note\n ? res.note\n : res.files !== undefined\n ? `${res.files} file(s) removed (${res.bytes ?? 0} bytes)`\n : res.ok ? 'Done' : 'Done';\n setResult(summary);\n }\n setConfirm(false);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Card variant=\"default\">\n <CardBody>\n <Stack gap={2}>\n <Inline align=\"center\" gap={2}>\n <Icon size={18} aria-hidden />\n <strong style={{ fontSize: 'var(--fs-13)' }}>{action.title}</strong>\n {action.destructive && (\n <span style={{ marginLeft: 'auto', color: 'var(--danger)', fontSize: 'var(--fs-11)' }} aria-label=\"Destructive\">\n <ShieldAlert size={14} aria-hidden style={{ verticalAlign: 'middle' }} /> destructive\n </span>\n )}\n </Inline>\n <p style={{ color: 'var(--fg-muted)', fontSize: 'var(--fs-12)', margin: 0 }}>\n {action.description}\n </p>\n {result !== null && (\n <span data-testid={`admin-result-${action.id}`} style={{ fontSize: 'var(--fs-12)', color: 'var(--success)' }}>\n {result}\n </span>\n )}\n {error !== null && (\n <span role=\"alert\" data-testid={`admin-error-${action.id}`} style={{ fontSize: 'var(--fs-12)', color: 'var(--danger)' }}>\n {error}\n </span>\n )}\n {confirm ? (\n <Inline gap={1}>\n <Button variant=\"danger\" onClick={() => void run()} disabled={busy} data-testid={`admin-confirm-${action.id}`}>\n Confirm\n </Button>\n <Button variant=\"ghost\" onClick={() => setConfirm(false)} disabled={busy} data-testid={`admin-cancel-${action.id}`}>\n Cancel\n </Button>\n </Inline>\n ) : (\n <Button\n variant={action.destructive ? 'danger' : 'primary'}\n onClick={() => (action.destructive ? setConfirm(true) : void run())}\n disabled={busy}\n data-testid={`admin-run-${action.id}`}\n >\n <RefreshCw size={14} aria-hidden /> {busy ? 'Working…' : 'Run'}\n </Button>\n )}\n </Stack>\n </CardBody>\n </Card>\n );\n}"],"names":["Hammer","createLucideIcon","ScrollText","ACTIONS","Trash2","Database","Brain","PowerOff","Download","GROUPS","AdminView","jsxs","Stack","jsx","ViewHeader","group","items","Grid","AdminTile","action","busy","setBusy","useState","confirm","setConfirm","result","setResult","error","setError","Icon","run","res","fetchJson","summary","err","FetchError","Card","CardBody","Inline","ShieldAlert","Button","RefreshCw"],"mappings":"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","x_google_ignoreList":[0,1]}