@polderlabs/bizar 8.0.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1012) hide show
  1. package/.claude/agents/agent-browser.md +1 -1
  2. package/.claude/agents/baldr.md +1 -1
  3. package/.claude/agents/forseti.md +1 -1
  4. package/.claude/agents/frigg.md +1 -1
  5. package/.claude/agents/heimdall.md +1 -1
  6. package/.claude/agents/hermod.md +1 -1
  7. package/.claude/agents/mimir.md +1 -1
  8. package/.claude/agents/odin.md +1 -1
  9. package/.claude/agents/quick.md +1 -1
  10. package/.claude/agents/semble-search.md +1 -1
  11. package/.claude/agents/thor.md +1 -1
  12. package/.claude/agents/tyr.md +1 -1
  13. package/.claude/agents/vidarr.md +1 -1
  14. package/.claude/agents/vor.md +1 -1
  15. package/.claude/commands/goal.md +98 -0
  16. package/.claude/settings.local.json +1 -2
  17. package/.claude/worktrees/kanban-overhaul/.claude/CLAUDE.md +15 -0
  18. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
  19. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
  20. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/SKILLS.md +109 -0
  21. package/.claude/worktrees/kanban-overhaul/.claude/agents/agent-browser.md +80 -0
  22. package/.claude/worktrees/kanban-overhaul/.claude/agents/baldr.md +49 -0
  23. package/.claude/worktrees/kanban-overhaul/.claude/agents/forseti.md +51 -0
  24. package/.claude/worktrees/kanban-overhaul/.claude/agents/frigg.md +42 -0
  25. package/.claude/worktrees/kanban-overhaul/.claude/agents/heimdall.md +33 -0
  26. package/.claude/worktrees/kanban-overhaul/.claude/agents/hermod.md +53 -0
  27. package/.claude/worktrees/kanban-overhaul/.claude/agents/mimir.md +49 -0
  28. package/.claude/worktrees/kanban-overhaul/.claude/agents/odin.md +287 -0
  29. package/.claude/worktrees/kanban-overhaul/.claude/agents/quick.md +34 -0
  30. package/.claude/worktrees/kanban-overhaul/.claude/agents/semble-search.md +50 -0
  31. package/.claude/worktrees/kanban-overhaul/.claude/agents/thor.md +53 -0
  32. package/.claude/worktrees/kanban-overhaul/.claude/agents/tyr.md +56 -0
  33. package/.claude/worktrees/kanban-overhaul/.claude/agents/vidarr.md +54 -0
  34. package/.claude/worktrees/kanban-overhaul/.claude/agents/vor.md +53 -0
  35. package/.claude/worktrees/kanban-overhaul/.claude/commands/audit.md +25 -0
  36. package/.claude/worktrees/kanban-overhaul/.claude/commands/bizar.md +22 -0
  37. package/.claude/worktrees/kanban-overhaul/.claude/commands/explain.md +17 -0
  38. package/.claude/worktrees/kanban-overhaul/.claude/commands/init.md +29 -0
  39. package/.claude/worktrees/kanban-overhaul/.claude/commands/learn.md +44 -0
  40. package/.claude/worktrees/kanban-overhaul/.claude/commands/plan.md +35 -0
  41. package/.claude/worktrees/kanban-overhaul/.claude/commands/plow-through.md +50 -0
  42. package/.claude/worktrees/kanban-overhaul/.claude/commands/pr-review.md +49 -0
  43. package/.claude/worktrees/kanban-overhaul/.claude/commands/setup-provider.md +96 -0
  44. package/.claude/worktrees/kanban-overhaul/.claude/commands/tailscale-serve.md +100 -0
  45. package/.claude/worktrees/kanban-overhaul/.claude/commands/team.md +132 -0
  46. package/.claude/worktrees/kanban-overhaul/.claude/commands/test.md +62 -0
  47. package/.claude/worktrees/kanban-overhaul/.claude/commands/validate.md +68 -0
  48. package/.claude/worktrees/kanban-overhaul/.claude/commands/visual-plan.md +24 -0
  49. package/.claude/worktrees/kanban-overhaul/.claude/hooks/README.md +92 -0
  50. package/.claude/worktrees/kanban-overhaul/.claude/hooks/posttooluse-editwrite.mjs +91 -0
  51. package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-bash.mjs +81 -0
  52. package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-editwrite.mjs +139 -0
  53. package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionend-recall.mjs +74 -0
  54. package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionstart-prime.mjs +80 -0
  55. package/.claude/worktrees/kanban-overhaul/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
  56. package/.claude/worktrees/kanban-overhaul/.claude/hooks/worker-suggest.mjs +110 -0
  57. package/.claude/worktrees/kanban-overhaul/.claude/settings.json +125 -0
  58. package/.claude/worktrees/kanban-overhaul/.claude/settings.local.json +8 -0
  59. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router/SKILL.md +80 -0
  60. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-chat/SKILL.md +73 -0
  61. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-embeddings/SKILL.md +69 -0
  62. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-image/SKILL.md +86 -0
  63. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-stt/SKILL.md +79 -0
  64. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-tts/SKILL.md +80 -0
  65. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-fetch/SKILL.md +99 -0
  66. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-search/SKILL.md +91 -0
  67. package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/README.md +9 -0
  68. package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/SKILL.md +450 -0
  69. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/README.md +28 -0
  70. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
  71. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
  72. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
  73. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  74. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  75. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  76. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/README.md +28 -0
  77. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/SKILL.md +304 -0
  78. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/coverage.md +370 -0
  79. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
  80. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  81. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/mocking.md +364 -0
  82. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
  83. package/.claude/worktrees/kanban-overhaul/.claude/skills/cubesandbox/SKILL.md +148 -0
  84. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/README.md +41 -0
  85. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
  86. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  87. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
  88. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  89. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
  90. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  91. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  92. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
  93. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  94. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  95. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  96. package/.claude/worktrees/kanban-overhaul/.claude/skills/glyph/SKILL.md +163 -0
  97. package/.claude/worktrees/kanban-overhaul/.claude/skills/harness-engineering/SKILL.md +143 -0
  98. package/.claude/worktrees/kanban-overhaul/.claude/skills/lightrag/SKILL.md +81 -0
  99. package/.claude/worktrees/kanban-overhaul/.claude/skills/memory-protocol/SKILL.md +105 -0
  100. package/.claude/worktrees/kanban-overhaul/.claude/skills/obsidian/SKILL.md +306 -0
  101. package/.claude/worktrees/kanban-overhaul/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
  102. package/.claude/worktrees/kanban-overhaul/.claude/skills/self-improvement/SKILL.md +64 -0
  103. package/.claude/worktrees/kanban-overhaul/.dockerignore +31 -0
  104. package/.claude/worktrees/kanban-overhaul/.gitattributes +27 -0
  105. package/.claude/worktrees/kanban-overhaul/.harness/agents.json +17 -0
  106. package/.claude/worktrees/kanban-overhaul/.harness/arch-rules.json +69 -0
  107. package/.claude/worktrees/kanban-overhaul/.harness/topology.json +4 -0
  108. package/.claude/worktrees/kanban-overhaul/.nvmrc +1 -0
  109. package/.claude/worktrees/kanban-overhaul/.serena/project.yml +159 -0
  110. package/.claude/worktrees/kanban-overhaul/AGENTS.md +250 -0
  111. package/.claude/worktrees/kanban-overhaul/CHANGELOG.md +5410 -0
  112. package/.claude/worktrees/kanban-overhaul/CLAUDE.md +260 -0
  113. package/.claude/worktrees/kanban-overhaul/CURRENT_ISSUES_ AND_NEW_FEATURES.md +18 -0
  114. package/.claude/worktrees/kanban-overhaul/DECISIONS.md +66 -0
  115. package/.claude/worktrees/kanban-overhaul/Dockerfile +48 -0
  116. package/.claude/worktrees/kanban-overhaul/FINAL_GOAL.md +397 -0
  117. package/.claude/worktrees/kanban-overhaul/IMPLEMENTATION_PLAN.md +250 -0
  118. package/.claude/worktrees/kanban-overhaul/LICENSE +21 -0
  119. package/.claude/worktrees/kanban-overhaul/MILESTONES.md +257 -0
  120. package/.claude/worktrees/kanban-overhaul/Makefile +93 -0
  121. package/.claude/worktrees/kanban-overhaul/PROGRESS.md +1406 -0
  122. package/.claude/worktrees/kanban-overhaul/README.md +483 -0
  123. package/.claude/worktrees/kanban-overhaul/ROADMAP.md +609 -0
  124. package/.claude/worktrees/kanban-overhaul/bizar-dash/.graphifyignore +40 -0
  125. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/README.md +14 -0
  126. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/daily/2026-06-25.md +9 -0
  127. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/vault.json +7 -0
  128. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/SKILL.md +103 -0
  129. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/assets/template.html +338 -0
  130. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/example.html +81 -0
  131. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/open-design.json +172 -0
  132. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/checklist.md +44 -0
  133. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/layouts.md +247 -0
  134. package/.claude/worktrees/kanban-overhaul/bizar-dash/ARCHITECTURE.md +197 -0
  135. package/.claude/worktrees/kanban-overhaul/bizar-dash/CHANGELOG.md +235 -0
  136. package/.claude/worktrees/kanban-overhaul/bizar-dash/DESIGN.md +912 -0
  137. package/.claude/worktrees/kanban-overhaul/bizar-dash/GLYPH.md +418 -0
  138. package/.claude/worktrees/kanban-overhaul/bizar-dash/PLAN.md +1135 -0
  139. package/.claude/worktrees/kanban-overhaul/bizar-dash/critique.json +26 -0
  140. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/comments.json +1 -0
  141. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/meta.json +10 -0
  142. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/plan.json +174 -0
  143. package/.claude/worktrees/kanban-overhaul/bizar-dash/scripts/smoke-bg-retry.mjs +246 -0
  144. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-baseline/SKILL.md +80 -0
  145. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-browser/SKILL.md +181 -0
  146. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/bizar/SKILL.md +116 -0
  147. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/chat/SKILL.md +74 -0
  148. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/eval/SKILL.md +237 -0
  149. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/headroom/SKILL.md +94 -0
  150. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/lightrag/SKILL.md +86 -0
  151. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/minimax/SKILL.md +80 -0
  152. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/obsidian/SKILL.md +68 -0
  153. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/providers/SKILL.md +75 -0
  154. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/publishing/SKILL.md +146 -0
  155. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/sdk/SKILL.md +138 -0
  156. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/self-improvement/SKILL.md +53 -0
  157. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/skills-cli/SKILL.md +94 -0
  158. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/usage/SKILL.md +62 -0
  159. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli/dashboard-ports.mjs +488 -0
  160. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli.mjs +537 -0
  161. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/activity-log.mjs +174 -0
  162. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/agents-store.mjs +465 -0
  163. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/api.mjs +223 -0
  164. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifact-template.html +810 -0
  165. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifacts-store.mjs +733 -0
  166. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/auth.mjs +548 -0
  167. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/background-store.mjs +446 -0
  168. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/backup-store.mjs +530 -0
  169. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-poller.mjs +375 -0
  170. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-retry.mjs +446 -0
  171. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-spawner.mjs +390 -0
  172. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/browser.mjs +40 -0
  173. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
  174. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-info.mjs +412 -0
  175. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-runner.mjs +284 -0
  176. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-sdk.mjs +191 -0
  177. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/diagnostics-store.mjs +598 -0
  178. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-poller.mjs +105 -0
  179. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-store.mjs +177 -0
  180. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/digest-store.mjs +558 -0
  181. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval-store.mjs +281 -0
  182. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval.mjs +500 -0
  183. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/glyphs/mdx-compiler.mjs +596 -0
  184. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/headroom.mjs +649 -0
  185. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/path-safe.mjs +283 -0
  186. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/rate-limit.mjs +122 -0
  187. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/logger.mjs +71 -0
  188. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-consolidator.mjs +225 -0
  189. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-distillation.mjs +296 -0
  190. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-git.mjs +473 -0
  191. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-lightrag.mjs +1478 -0
  192. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-obsidian.mjs +230 -0
  193. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-schema.mjs +145 -0
  194. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-secrets.mjs +84 -0
  195. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-store.mjs +1093 -0
  196. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/metrics.mjs +268 -0
  197. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax-usage-store.mjs +372 -0
  198. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax.mjs +683 -0
  199. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mod-security.mjs +398 -0
  200. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mods-loader.mjs +1243 -0
  201. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/notifications-store.mjs +243 -0
  202. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/obsidian-store.mjs +318 -0
  203. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/ocr.mjs +55 -0
  204. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/otel.mjs +260 -0
  205. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/pair-store.mjs +138 -0
  206. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/progress-parser.mjs +221 -0
  207. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/projects-store.mjs +364 -0
  208. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/providers-store.mjs +1801 -0
  209. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/_shared.mjs +447 -0
  210. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/activity.mjs +195 -0
  211. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents-cc.mjs +194 -0
  212. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents.mjs +134 -0
  213. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/artifacts.mjs +279 -0
  214. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/auth.mjs +69 -0
  215. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/background.mjs +422 -0
  216. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/backup.mjs +112 -0
  217. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/chat.mjs +727 -0
  218. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
  219. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
  220. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/clipboard.mjs +173 -0
  221. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/config.mjs +180 -0
  222. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/diagnostics.mjs +50 -0
  223. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/dialogs.mjs +86 -0
  224. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/digests.mjs +82 -0
  225. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/distill.mjs +129 -0
  226. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/doctor.mjs +71 -0
  227. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/env-vars.mjs +231 -0
  228. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/eval.mjs +187 -0
  229. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/fs.mjs +429 -0
  230. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goal-planner.mjs +236 -0
  231. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goals.mjs +212 -0
  232. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/headroom.mjs +126 -0
  233. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/history.mjs +78 -0
  234. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/lightrag.mjs +169 -0
  235. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/memory.mjs +1524 -0
  236. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/minimax.mjs +133 -0
  237. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/misc.mjs +90 -0
  238. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/mods.mjs +359 -0
  239. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/notifications.mjs +54 -0
  240. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/obsidian.mjs +239 -0
  241. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/ocr.mjs +182 -0
  242. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/overview.mjs +92 -0
  243. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/pair.mjs +67 -0
  244. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/projects.mjs +175 -0
  245. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/providers.mjs +308 -0
  246. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/schedules.mjs +159 -0
  247. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/settings.mjs +51 -0
  248. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/skills.mjs +65 -0
  249. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tailscale.mjs +46 -0
  250. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tasks.mjs +518 -0
  251. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/themes.mjs +51 -0
  252. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/update.mjs +340 -0
  253. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/usage.mjs +136 -0
  254. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/users.mjs +102 -0
  255. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/voice.mjs +167 -0
  256. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/workspaces.mjs +299 -0
  257. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/auth.mjs +59 -0
  258. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/events.mjs +121 -0
  259. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/health.mjs +21 -0
  260. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/index.mjs +90 -0
  261. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/sessions.mjs +111 -0
  262. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-runner.mjs +556 -0
  263. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-store.mjs +268 -0
  264. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/search-store.mjs +220 -0
  265. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/serve-info.mjs +1110 -0
  266. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/server.mjs +966 -0
  267. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/settings-store.mjs +45 -0
  268. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/skills-store.mjs +190 -0
  269. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/state.mjs +437 -0
  270. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tailscale-store.mjs +113 -0
  271. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/task-delegator.mjs +969 -0
  272. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tasks-store.mjs +556 -0
  273. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tui.mjs +923 -0
  274. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/update-store.mjs +168 -0
  275. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-auth-file.mjs +99 -0
  276. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-event-bus.mjs +128 -0
  277. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-store.mjs +229 -0
  278. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-transcribe.mjs +72 -0
  279. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/watcher.mjs +81 -0
  280. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workers/transcription-worker.mjs +213 -0
  281. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workspaces.mjs +626 -0
  282. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/yaml.mjs +238 -0
  283. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/App.tsx +200 -0
  284. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
  285. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/types.ts +168 -0
  286. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
  287. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useWebSocket.ts +153 -0
  288. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/main.tsx +28 -0
  289. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
  290. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
  291. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
  292. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
  293. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
  294. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/index.ts +15 -0
  295. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
  296. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
  297. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
  298. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +232 -0
  299. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
  300. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
  301. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
  302. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
  303. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
  304. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
  305. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
  306. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
  307. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
  308. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
  309. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
  310. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
  311. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
  312. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
  313. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
  314. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
  315. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
  316. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
  317. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
  318. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
  319. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
  320. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
  321. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
  322. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
  323. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
  324. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
  325. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
  326. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
  327. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
  328. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
  329. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
  330. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
  331. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
  332. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
  333. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
  334. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
  335. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
  336. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
  337. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
  338. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
  339. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
  340. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +245 -0
  341. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
  342. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/index.ts +349 -0
  343. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +115 -0
  344. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +391 -0
  345. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanCardBadges.tsx +111 -0
  346. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +181 -0
  347. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +126 -0
  348. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +638 -0
  349. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanEmptyColumn.tsx +43 -0
  350. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanProgress.tsx +130 -0
  351. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
  352. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanToolbar.tsx +291 -0
  353. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/useKanbanSelection.ts +90 -0
  354. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
  355. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
  356. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
  357. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
  358. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
  359. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
  360. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
  361. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
  362. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
  363. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
  364. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
  365. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
  366. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
  367. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
  368. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
  369. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
  370. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
  371. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
  372. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
  373. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
  374. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/globals.css +220 -0
  375. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
  376. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
  377. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
  378. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
  379. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
  380. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
  381. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
  382. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
  383. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +71 -0
  384. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +172 -0
  385. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +247 -0
  386. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +137 -0
  387. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +108 -0
  388. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +77 -0
  389. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +152 -0
  390. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Router.tsx +72 -0
  391. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +330 -0
  392. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
  393. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +792 -0
  394. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
  395. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8.html +17 -0
  396. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/FORMAT.md +76 -0
  397. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/README.md +19 -0
  398. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/agents/greeter.md +8 -0
  399. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/commands/hello.md +6 -0
  400. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/mod.json +20 -0
  401. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/routes/ping.mjs +9 -0
  402. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/views/HelloView.tsx +10 -0
  403. package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/setup.ts +63 -0
  404. package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/smoke-v2.mjs +212 -0
  405. package/.claude/worktrees/kanban-overhaul/bizar-dash/tsconfig.json +23 -0
  406. package/.claude/worktrees/kanban-overhaul/bizar-dash/vite.config.ts +66 -0
  407. package/.claude/worktrees/kanban-overhaul/bizar-dash/vitest.config.ts +20 -0
  408. package/.claude/worktrees/kanban-overhaul/bizar-plugins/registry.json +62 -0
  409. package/.claude/worktrees/kanban-overhaul/bookmarklet/bizar-clipper.js +48 -0
  410. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/README.md +43 -0
  411. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/background.js +95 -0
  412. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/content.js +170 -0
  413. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-128.png +0 -0
  414. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-16.png +0 -0
  415. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-48.png +0 -0
  416. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon.svg +4 -0
  417. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/manifest.json +32 -0
  418. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.html +66 -0
  419. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.js +110 -0
  420. package/.claude/worktrees/kanban-overhaul/bun.lock +1558 -0
  421. package/.claude/worktrees/kanban-overhaul/cli/agent-browser-up.sh +152 -0
  422. package/.claude/worktrees/kanban-overhaul/cli/agent-browser-update.mjs +322 -0
  423. package/.claude/worktrees/kanban-overhaul/cli/artifact-cli.mjs +605 -0
  424. package/.claude/worktrees/kanban-overhaul/cli/artifact-render.mjs +621 -0
  425. package/.claude/worktrees/kanban-overhaul/cli/artifact-server.mjs +847 -0
  426. package/.claude/worktrees/kanban-overhaul/cli/artifact-templates.mjs +523 -0
  427. package/.claude/worktrees/kanban-overhaul/cli/artifact.mjs +63 -0
  428. package/.claude/worktrees/kanban-overhaul/cli/atomic.mjs +73 -0
  429. package/.claude/worktrees/kanban-overhaul/cli/audit.mjs +141 -0
  430. package/.claude/worktrees/kanban-overhaul/cli/banner.mjs +41 -0
  431. package/.claude/worktrees/kanban-overhaul/cli/bg.mjs +471 -0
  432. package/.claude/worktrees/kanban-overhaul/cli/bin.mjs +698 -0
  433. package/.claude/worktrees/kanban-overhaul/cli/bootstrap.mjs +77 -0
  434. package/.claude/worktrees/kanban-overhaul/cli/commands/artifact.mjs +20 -0
  435. package/.claude/worktrees/kanban-overhaul/cli/commands/claim.mjs +282 -0
  436. package/.claude/worktrees/kanban-overhaul/cli/commands/claude-cmd.mjs +348 -0
  437. package/.claude/worktrees/kanban-overhaul/cli/commands/clip.mjs +163 -0
  438. package/.claude/worktrees/kanban-overhaul/cli/commands/cost.mjs +279 -0
  439. package/.claude/worktrees/kanban-overhaul/cli/commands/dash.mjs +193 -0
  440. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/cloudflare.mjs +250 -0
  441. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/docker.mjs +222 -0
  442. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/fly.mjs +161 -0
  443. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/vercel.mjs +225 -0
  444. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy.mjs +240 -0
  445. package/.claude/worktrees/kanban-overhaul/cli/commands/eval.mjs +396 -0
  446. package/.claude/worktrees/kanban-overhaul/cli/commands/headroom.mjs +204 -0
  447. package/.claude/worktrees/kanban-overhaul/cli/commands/install.mjs +170 -0
  448. package/.claude/worktrees/kanban-overhaul/cli/commands/lightrag.mjs +170 -0
  449. package/.claude/worktrees/kanban-overhaul/cli/commands/marketplace.mjs +64 -0
  450. package/.claude/worktrees/kanban-overhaul/cli/commands/memory.mjs +25 -0
  451. package/.claude/worktrees/kanban-overhaul/cli/commands/minimax.mjs +288 -0
  452. package/.claude/worktrees/kanban-overhaul/cli/commands/mod.mjs +185 -0
  453. package/.claude/worktrees/kanban-overhaul/cli/commands/ocr.mjs +182 -0
  454. package/.claude/worktrees/kanban-overhaul/cli/commands/plugin.mjs +358 -0
  455. package/.claude/worktrees/kanban-overhaul/cli/commands/rca.mjs +198 -0
  456. package/.claude/worktrees/kanban-overhaul/cli/commands/sandbox.mjs +220 -0
  457. package/.claude/worktrees/kanban-overhaul/cli/commands/service.mjs +79 -0
  458. package/.claude/worktrees/kanban-overhaul/cli/commands/setup-provider.mjs +466 -0
  459. package/.claude/worktrees/kanban-overhaul/cli/commands/tailscale.mjs +258 -0
  460. package/.claude/worktrees/kanban-overhaul/cli/commands/usage.mjs +113 -0
  461. package/.claude/worktrees/kanban-overhaul/cli/commands/util.mjs +577 -0
  462. package/.claude/worktrees/kanban-overhaul/cli/commands/validate.mjs +541 -0
  463. package/.claude/worktrees/kanban-overhaul/cli/commands/voice.mjs +211 -0
  464. package/.claude/worktrees/kanban-overhaul/cli/commands/workspace.mjs +247 -0
  465. package/.claude/worktrees/kanban-overhaul/cli/copy.mjs +586 -0
  466. package/.claude/worktrees/kanban-overhaul/cli/cost-gate.mjs +501 -0
  467. package/.claude/worktrees/kanban-overhaul/cli/dev-link.mjs +191 -0
  468. package/.claude/worktrees/kanban-overhaul/cli/digest.mjs +149 -0
  469. package/.claude/worktrees/kanban-overhaul/cli/doctor.mjs +217 -0
  470. package/.claude/worktrees/kanban-overhaul/cli/export.mjs +95 -0
  471. package/.claude/worktrees/kanban-overhaul/cli/feature-list-bridge.mjs +400 -0
  472. package/.claude/worktrees/kanban-overhaul/cli/heads-up.mjs +295 -0
  473. package/.claude/worktrees/kanban-overhaul/cli/init.mjs +368 -0
  474. package/.claude/worktrees/kanban-overhaul/cli/install.mjs +640 -0
  475. package/.claude/worktrees/kanban-overhaul/cli/memory-constants.mjs +76 -0
  476. package/.claude/worktrees/kanban-overhaul/cli/memory.mjs +1850 -0
  477. package/.claude/worktrees/kanban-overhaul/cli/plugin-runtime-deps.mjs +250 -0
  478. package/.claude/worktrees/kanban-overhaul/cli/post-install-smoke.mjs +256 -0
  479. package/.claude/worktrees/kanban-overhaul/cli/prompts.mjs +168 -0
  480. package/.claude/worktrees/kanban-overhaul/cli/providers-detect.mjs +233 -0
  481. package/.claude/worktrees/kanban-overhaul/cli/provision-claude.mjs +1176 -0
  482. package/.claude/worktrees/kanban-overhaul/cli/provision.mjs +2233 -0
  483. package/.claude/worktrees/kanban-overhaul/cli/repair.mjs +209 -0
  484. package/.claude/worktrees/kanban-overhaul/cli/service-controller.mjs +927 -0
  485. package/.claude/worktrees/kanban-overhaul/cli/service-env.mjs +139 -0
  486. package/.claude/worktrees/kanban-overhaul/cli/service.mjs +492 -0
  487. package/.claude/worktrees/kanban-overhaul/cli/update.mjs +29 -0
  488. package/.claude/worktrees/kanban-overhaul/cli/utils.mjs +221 -0
  489. package/.claude/worktrees/kanban-overhaul/cli/worker-dispatcher.mjs +259 -0
  490. package/.claude/worktrees/kanban-overhaul/config/AGENTS.md +595 -0
  491. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/AGENT_BASELINE.md +155 -0
  492. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/CLINE_TOOLS.md +398 -0
  493. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/SKILLS.md +109 -0
  494. package/.claude/worktrees/kanban-overhaul/config/agents/agent-browser.md +90 -0
  495. package/.claude/worktrees/kanban-overhaul/config/agents/baldr.md +60 -0
  496. package/.claude/worktrees/kanban-overhaul/config/agents/forseti.md +60 -0
  497. package/.claude/worktrees/kanban-overhaul/config/agents/frigg.md +52 -0
  498. package/.claude/worktrees/kanban-overhaul/config/agents/heimdall.md +44 -0
  499. package/.claude/worktrees/kanban-overhaul/config/agents/hermod.md +64 -0
  500. package/.claude/worktrees/kanban-overhaul/config/agents/mimir.md +60 -0
  501. package/.claude/worktrees/kanban-overhaul/config/agents/odin.md +310 -0
  502. package/.claude/worktrees/kanban-overhaul/config/agents/quick.md +47 -0
  503. package/.claude/worktrees/kanban-overhaul/config/agents/semble-search.md +59 -0
  504. package/.claude/worktrees/kanban-overhaul/config/agents/thor.md +64 -0
  505. package/.claude/worktrees/kanban-overhaul/config/agents/tyr.md +67 -0
  506. package/.claude/worktrees/kanban-overhaul/config/agents/vidarr.md +65 -0
  507. package/.claude/worktrees/kanban-overhaul/config/agents/vor.md +62 -0
  508. package/.claude/worktrees/kanban-overhaul/config/commands/audit.md +5 -0
  509. package/.claude/worktrees/kanban-overhaul/config/commands/bizar.md +22 -0
  510. package/.claude/worktrees/kanban-overhaul/config/commands/explain.md +5 -0
  511. package/.claude/worktrees/kanban-overhaul/config/commands/init.md +26 -0
  512. package/.claude/worktrees/kanban-overhaul/config/commands/learn.md +5 -0
  513. package/.claude/worktrees/kanban-overhaul/config/commands/plan.md +30 -0
  514. package/.claude/worktrees/kanban-overhaul/config/commands/plow-through.md +47 -0
  515. package/.claude/worktrees/kanban-overhaul/config/commands/pr-review.md +5 -0
  516. package/.claude/worktrees/kanban-overhaul/config/commands/setup-provider.md +95 -0
  517. package/.claude/worktrees/kanban-overhaul/config/commands/tailscale-serve.md +97 -0
  518. package/.claude/worktrees/kanban-overhaul/config/commands/team.md +124 -0
  519. package/.claude/worktrees/kanban-overhaul/config/commands/test.md +60 -0
  520. package/.claude/worktrees/kanban-overhaul/config/commands/validate.md +66 -0
  521. package/.claude/worktrees/kanban-overhaul/config/commands/visual-plan.md +19 -0
  522. package/.claude/worktrees/kanban-overhaul/config/hooks/PostToolUse +66 -0
  523. package/.claude/worktrees/kanban-overhaul/config/hooks/PreToolUse +82 -0
  524. package/.claude/worktrees/kanban-overhaul/config/hooks/README.md +68 -0
  525. package/.claude/worktrees/kanban-overhaul/config/hooks/TaskResume +48 -0
  526. package/.claude/worktrees/kanban-overhaul/config/hooks/TaskStart +47 -0
  527. package/.claude/worktrees/kanban-overhaul/config/hooks/UserPromptSubmit +55 -0
  528. package/.claude/worktrees/kanban-overhaul/config/rules/general.md +9 -0
  529. package/.claude/worktrees/kanban-overhaul/config/rules/git.md +11 -0
  530. package/.claude/worktrees/kanban-overhaul/config/rules/javascript.md +10 -0
  531. package/.claude/worktrees/kanban-overhaul/config/rules/python.md +10 -0
  532. package/.claude/worktrees/kanban-overhaul/config/rules/testing.md +10 -0
  533. package/.claude/worktrees/kanban-overhaul/config/rules/thinking.md +56 -0
  534. package/.claude/worktrees/kanban-overhaul/config/rules/uncertainty.md +70 -0
  535. package/.claude/worktrees/kanban-overhaul/config/skills/9router/SKILL.md +80 -0
  536. package/.claude/worktrees/kanban-overhaul/config/skills/9router-chat/SKILL.md +73 -0
  537. package/.claude/worktrees/kanban-overhaul/config/skills/9router-embeddings/SKILL.md +69 -0
  538. package/.claude/worktrees/kanban-overhaul/config/skills/9router-image/SKILL.md +86 -0
  539. package/.claude/worktrees/kanban-overhaul/config/skills/9router-stt/SKILL.md +79 -0
  540. package/.claude/worktrees/kanban-overhaul/config/skills/9router-tts/SKILL.md +80 -0
  541. package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-fetch/SKILL.md +99 -0
  542. package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-search/SKILL.md +91 -0
  543. package/.claude/worktrees/kanban-overhaul/config/skills/bizar/README.md +9 -0
  544. package/.claude/worktrees/kanban-overhaul/config/skills/bizar/SKILL.md +447 -0
  545. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/README.md +28 -0
  546. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/SKILL.md +634 -0
  547. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/agents/openai.yaml +4 -0
  548. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/concurrency.md +320 -0
  549. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/error-handling.md +229 -0
  550. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  551. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  552. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  553. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/README.md +28 -0
  554. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/SKILL.md +304 -0
  555. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/agents/openai.yaml +4 -0
  556. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/coverage.md +370 -0
  557. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/framework-compare.md +175 -0
  558. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  559. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/mocking.md +364 -0
  560. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/tdd-workflow.md +308 -0
  561. package/.claude/worktrees/kanban-overhaul/config/skills/cubesandbox/SKILL.md +148 -0
  562. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/README.md +41 -0
  563. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/SKILL.md +439 -0
  564. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/agents/openai.yaml +4 -0
  565. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  566. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/host-tests.md +164 -0
  567. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  568. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/kconfig.md +159 -0
  569. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  570. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  571. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/nvs.md +121 -0
  572. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  573. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  574. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  575. package/.claude/worktrees/kanban-overhaul/config/skills/glyph/SKILL.md +163 -0
  576. package/.claude/worktrees/kanban-overhaul/config/skills/harness-engineering/SKILL.md +142 -0
  577. package/.claude/worktrees/kanban-overhaul/config/skills/lightrag/SKILL.md +81 -0
  578. package/.claude/worktrees/kanban-overhaul/config/skills/memory-protocol/SKILL.md +105 -0
  579. package/.claude/worktrees/kanban-overhaul/config/skills/obsidian/SKILL.md +306 -0
  580. package/.claude/worktrees/kanban-overhaul/config/skills/read-the-damn-docs/SKILL.md +113 -0
  581. package/.claude/worktrees/kanban-overhaul/config/skills/self-improvement/SKILL.md +64 -0
  582. package/.claude/worktrees/kanban-overhaul/config/trigger-patterns.json +186 -0
  583. package/.claude/worktrees/kanban-overhaul/docker-compose.yml +50 -0
  584. package/.claude/worktrees/kanban-overhaul/docs/A11Y.md +81 -0
  585. package/.claude/worktrees/kanban-overhaul/docs/DEPLOY.md +360 -0
  586. package/.claude/worktrees/kanban-overhaul/docs/DOCKER.md +250 -0
  587. package/.claude/worktrees/kanban-overhaul/docs/INDEX.md +223 -0
  588. package/.claude/worktrees/kanban-overhaul/docs/PLUGIN_REGISTRY.md +107 -0
  589. package/.claude/worktrees/kanban-overhaul/docs/RELEASING.md +693 -0
  590. package/.claude/worktrees/kanban-overhaul/docs/architecture.md +317 -0
  591. package/.claude/worktrees/kanban-overhaul/docs/code-review.md +242 -0
  592. package/.claude/worktrees/kanban-overhaul/docs/curator.md +144 -0
  593. package/.claude/worktrees/kanban-overhaul/docs/dashboard-ui-migration.md +807 -0
  594. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-001-cline-rewrite.md +114 -0
  595. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-002-in-process-clinecore.md +139 -0
  596. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-003-in-process-memory-vault.md +101 -0
  597. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-004-cline-agent-teams.md +112 -0
  598. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-005-bg-agents-via-dashboard.md +77 -0
  599. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-006-kanban-board.md +69 -0
  600. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-007-tool-approval-gate.md +147 -0
  601. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-008-skill-curator.md +100 -0
  602. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-009-pre-compaction-flush.md +106 -0
  603. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-010-knowledge-graph-tools.md +95 -0
  604. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-011-claude-code-migration.md +172 -0
  605. package/.claude/worktrees/kanban-overhaul/docs/graph-tools.md +130 -0
  606. package/.claude/worktrees/kanban-overhaul/docs/migration-guide.md +471 -0
  607. package/.claude/worktrees/kanban-overhaul/docs/migrations/cline-replacement.md +118 -0
  608. package/.claude/worktrees/kanban-overhaul/docs/postmortems/2026-06-18-plugin-state-deadlock.md +250 -0
  609. package/.claude/worktrees/kanban-overhaul/docs/quality-document.md +74 -0
  610. package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.2.md +66 -0
  611. package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.4.md +85 -0
  612. package/.claude/worktrees/kanban-overhaul/docs/releases/v2.3.0.md +96 -0
  613. package/.claude/worktrees/kanban-overhaul/docs/releases/v3.24.0.md +155 -0
  614. package/.claude/worktrees/kanban-overhaul/docs/releases/v4.0.0.md +123 -0
  615. package/.claude/worktrees/kanban-overhaul/docs/releases/v7.0.0.md +173 -0
  616. package/.claude/worktrees/kanban-overhaul/docs/safety.md +216 -0
  617. package/.claude/worktrees/kanban-overhaul/feature_list.json +1297 -0
  618. package/.claude/worktrees/kanban-overhaul/init.sh +211 -0
  619. package/.claude/worktrees/kanban-overhaul/install.sh +498 -0
  620. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/INSTRUCTIONS.md +82 -0
  621. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/mod.json +37 -0
  622. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/route.mjs +136 -0
  623. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/web/index.html +180 -0
  624. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/INSTRUCTIONS.md +81 -0
  625. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/mod.json +61 -0
  626. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/route.mjs +461 -0
  627. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/web/index.html +263 -0
  628. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/INSTRUCTIONS.md +87 -0
  629. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/agents/thor.md +64 -0
  630. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/mod.json +36 -0
  631. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/route.mjs +98 -0
  632. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/web/index.html +126 -0
  633. package/.claude/worktrees/kanban-overhaul/package.json +154 -0
  634. package/.claude/worktrees/kanban-overhaul/packages/sdk/ARCHITECTURE.md +70 -0
  635. package/.claude/worktrees/kanban-overhaul/packages/sdk/LICENSE +21 -0
  636. package/.claude/worktrees/kanban-overhaul/packages/sdk/README.md +80 -0
  637. package/.claude/worktrees/kanban-overhaul/packages/sdk/package.json +30 -0
  638. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/agent-registry.ts +304 -0
  639. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/byzantine.ts +587 -0
  640. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/index.ts +147 -0
  641. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/queen.ts +173 -0
  642. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/types.ts +199 -0
  643. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/dangerous-patterns.ts +127 -0
  644. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/audit.ts +156 -0
  645. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/budget.ts +269 -0
  646. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/envelope.ts +144 -0
  647. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/hmac.ts +160 -0
  648. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/index.ts +443 -0
  649. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/pii.ts +241 -0
  650. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/policy.ts +112 -0
  651. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/trust.ts +146 -0
  652. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/fingerprint.ts +0 -0
  653. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/index.ts +114 -0
  654. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/bin.ts +51 -0
  655. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/server.ts +848 -0
  656. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/memory/index.ts +160 -0
  657. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/codemod-intent.ts +125 -0
  658. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/index.ts +247 -0
  659. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation-shim.mjs +18 -0
  660. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation.ts +249 -0
  661. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/model-router.ts +235 -0
  662. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/q-learning-router.ts +304 -0
  663. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/swarm-topology.ts +279 -0
  664. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/version.ts +4 -0
  665. package/.claude/worktrees/kanban-overhaul/packages/sdk/tsconfig.json +25 -0
  666. package/.claude/worktrees/kanban-overhaul/packages/sdk/vitest.config.ts +9 -0
  667. package/.claude/worktrees/kanban-overhaul/plugins/bizar/ARCHITECTURE.md +72 -0
  668. package/.claude/worktrees/kanban-overhaul/plugins/bizar/CONSTRAINTS.md +62 -0
  669. package/.claude/worktrees/kanban-overhaul/plugins/bizar/LICENSE +21 -0
  670. package/.claude/worktrees/kanban-overhaul/plugins/bizar/README.md +46 -0
  671. package/.claude/worktrees/kanban-overhaul/plugins/bizar/index.ts +50 -0
  672. package/.claude/worktrees/kanban-overhaul/plugins/bizar/package.json +18 -0
  673. package/.claude/worktrees/kanban-overhaul/plugins/bizar/tsconfig.json +29 -0
  674. package/.claude/worktrees/kanban-overhaul/scripts/bh-full-e2e.mjs +298 -0
  675. package/.claude/worktrees/kanban-overhaul/scripts/check-agents.mjs +73 -0
  676. package/.claude/worktrees/kanban-overhaul/scripts/check-arch.sh +80 -0
  677. package/.claude/worktrees/kanban-overhaul/scripts/check-deps.mjs +492 -0
  678. package/.claude/worktrees/kanban-overhaul/scripts/clean-state-check.sh +81 -0
  679. package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-commit +59 -0
  680. package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-push +54 -0
  681. package/.claude/worktrees/kanban-overhaul/scripts/install-hooks.sh +29 -0
  682. package/.claude/worktrees/kanban-overhaul/scripts/install-service.mjs +190 -0
  683. package/.claude/worktrees/kanban-overhaul/scripts/mirror-claude-md.sh +78 -0
  684. package/.claude/worktrees/kanban-overhaul/scripts/session-trace.sh +52 -0
  685. package/.claude/worktrees/kanban-overhaul/scripts/test-in-container.sh +157 -0
  686. package/.claude/worktrees/kanban-overhaul/scripts/verify-feature.sh +102 -0
  687. package/.claude/worktrees/kanban-overhaul/skills-lock.json +11 -0
  688. package/.claude/worktrees/kanban-overhaul/templates/clean-state-checklist.md +55 -0
  689. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/README.md +32 -0
  690. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/functions-index.template.js +15 -0
  691. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/wrangler.toml.template +9 -0
  692. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/.env.template +16 -0
  693. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/README.md +58 -0
  694. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/docker-compose.template.yml +23 -0
  695. package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/README.md +35 -0
  696. package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/fly.toml.template +28 -0
  697. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/README.md +29 -0
  698. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/api-index.template.js +18 -0
  699. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/vercel.json.template +16 -0
  700. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/README.md +58 -0
  701. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/citation.json +16 -0
  702. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-review.json +16 -0
  703. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-search-basic.json +28 -0
  704. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/concise-output.json +16 -0
  705. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/context-window.json +16 -0
  706. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/error-recovery.json +16 -0
  707. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/json-output.json +20 -0
  708. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/latency-bounds.json +16 -0
  709. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/multi-language.json +16 -0
  710. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/regression-suite.json +79 -0
  711. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/response-format.json +30 -0
  712. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/safe-paths.json +16 -0
  713. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-correctness.json +24 -0
  714. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-multi-step.json +18 -0
  715. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/unicode-handling.json +16 -0
  716. package/.claude/worktrees/kanban-overhaul/templates/evaluator-rubric.md +50 -0
  717. package/.claude/worktrees/kanban-overhaul/templates/plan/htmx.min.js +1 -0
  718. package/.claude/worktrees/kanban-overhaul/templates/plan/library/bug-investigation.mdx +79 -0
  719. package/.claude/worktrees/kanban-overhaul/templates/plan/library/decision-record.mdx +71 -0
  720. package/.claude/worktrees/kanban-overhaul/templates/plan/library/feature-design.mdx +92 -0
  721. package/.claude/worktrees/kanban-overhaul/templates/plan/meta.json.template +8 -0
  722. package/.claude/worktrees/kanban-overhaul/templates/plan/plan.mdx.template +46 -0
  723. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/README.md +121 -0
  724. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/index.js +66 -0
  725. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/plugin.json +42 -0
  726. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/tests/plugin.test.js +83 -0
  727. package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-backup.json +12 -0
  728. package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-cleanup.json +12 -0
  729. package/.claude/worktrees/kanban-overhaul/templates/schedules/hourly-health-check.json +12 -0
  730. package/.claude/worktrees/kanban-overhaul/templates/schedules/webhook-on-push.json +13 -0
  731. package/.claude/worktrees/kanban-overhaul/templates/schedules/weekly-digest.json +13 -0
  732. package/.claude/worktrees/kanban-overhaul/templates/sprint-contract.md +47 -0
  733. package/.claude/worktrees/kanban-overhaul/tsconfig.json +44 -0
  734. package/.claude/worktrees/kanban-overhaul/vite.config.ts +51 -0
  735. package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js +16 -0
  736. package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js.map +1 -0
  737. package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js +12 -0
  738. package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js.map +1 -0
  739. package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js +23 -0
  740. package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js.map +1 -0
  741. package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js +6 -0
  742. package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js.map +1 -0
  743. package/bizar-dash/dist/assets/{Card-C_bvqXdQ.js → Card-CeZsWlcP.js} +1 -1
  744. package/bizar-dash/dist/assets/{Card-C_bvqXdQ.js.map → Card-CeZsWlcP.js.map} +1 -1
  745. package/bizar-dash/dist/assets/Chip-OPjSKl2I.js +1 -0
  746. package/bizar-dash/dist/assets/Chip-OPjSKl2I.js.map +1 -0
  747. package/bizar-dash/dist/assets/{EmptyState-BWQuKnk9.js → EmptyState-BrLA8mbE.js} +1 -1
  748. package/bizar-dash/dist/assets/{EmptyState-BWQuKnk9.js.map → EmptyState-BrLA8mbE.js.map} +1 -1
  749. package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js +11 -0
  750. package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js.map +1 -0
  751. package/bizar-dash/dist/assets/{Grid-C62gCPqt.js → Grid-B7NgNtff.js} +1 -1
  752. package/bizar-dash/dist/assets/{Grid-C62gCPqt.js.map → Grid-B7NgNtff.js.map} +1 -1
  753. package/bizar-dash/dist/assets/Input-BW_5Sl6N.js +1 -0
  754. package/bizar-dash/dist/assets/Input-BW_5Sl6N.js.map +1 -0
  755. package/bizar-dash/dist/assets/KanbanCard-B-NOSfMN.js +21 -0
  756. package/bizar-dash/dist/assets/KanbanCard-B-NOSfMN.js.map +1 -0
  757. package/bizar-dash/dist/assets/LibrariesView-D6eB7B2A.js +67 -0
  758. package/bizar-dash/dist/assets/LibrariesView-D6eB7B2A.js.map +1 -0
  759. package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js +13 -0
  760. package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js.map +1 -0
  761. package/bizar-dash/dist/assets/OverviewView-CHavfYBa.js +1 -0
  762. package/bizar-dash/dist/assets/OverviewView-CHavfYBa.js.map +1 -0
  763. package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js +1 -0
  764. package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js.map +1 -0
  765. package/bizar-dash/dist/assets/Select-B6Ho36Tq.js +11 -0
  766. package/bizar-dash/dist/assets/Select-B6Ho36Tq.js.map +1 -0
  767. package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js +1 -0
  768. package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js.map +1 -0
  769. package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js +38 -0
  770. package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js.map +1 -0
  771. package/bizar-dash/dist/assets/Sheet-Cmu_4Zea.js +1 -0
  772. package/bizar-dash/dist/assets/Sheet-Cmu_4Zea.js.map +1 -0
  773. package/bizar-dash/dist/assets/Slider-B_jPr-SR.js +1 -0
  774. package/bizar-dash/dist/assets/Slider-B_jPr-SR.js.map +1 -0
  775. package/bizar-dash/dist/assets/Sparkline-Cmqw0N39.js +1 -0
  776. package/bizar-dash/dist/assets/Sparkline-Cmqw0N39.js.map +1 -0
  777. package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js +10 -0
  778. package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js.map +1 -0
  779. package/bizar-dash/dist/assets/TasksView-BXADmjgb.js +1 -0
  780. package/bizar-dash/dist/assets/TasksView-BXADmjgb.js.map +1 -0
  781. package/bizar-dash/dist/assets/Textarea-KIN98DVH.js +1 -0
  782. package/bizar-dash/dist/assets/Textarea-KIN98DVH.js.map +1 -0
  783. package/bizar-dash/dist/assets/{ViewHeader-D6c2cw1b.js → ViewHeader-CPbqI-w8.js} +1 -1
  784. package/bizar-dash/dist/assets/{ViewHeader-D6c2cw1b.js.map → ViewHeader-CPbqI-w8.js.map} +1 -1
  785. package/bizar-dash/dist/assets/{brain-DeoXNDE2.js → brain-jN_ldx3U.js} +1 -1
  786. package/bizar-dash/dist/assets/{brain-DeoXNDE2.js.map → brain-jN_ldx3U.js.map} +1 -1
  787. package/bizar-dash/dist/assets/{calendar-DRlQkGJc.js → calendar-DZGgPP2_.js} +2 -2
  788. package/bizar-dash/dist/assets/{calendar-DRlQkGJc.js.map → calendar-DZGgPP2_.js.map} +1 -1
  789. package/bizar-dash/dist/assets/{circle-check-DmYQ3vGp.js → circle-check-XhUtiACZ.js} +1 -1
  790. package/bizar-dash/dist/assets/{circle-check-DmYQ3vGp.js.map → circle-check-XhUtiACZ.js.map} +1 -1
  791. package/bizar-dash/dist/assets/clock-BXBnSbox.js +6 -0
  792. package/bizar-dash/dist/assets/clock-BXBnSbox.js.map +1 -0
  793. package/bizar-dash/dist/assets/{cmdk-BwN8hcKQ.js → cmdk-D15rXxc5.js} +2 -2
  794. package/bizar-dash/dist/assets/{cmdk-BwN8hcKQ.js.map → cmdk-D15rXxc5.js.map} +1 -1
  795. package/bizar-dash/dist/assets/dnd-kit-Bormfg7j.js +5 -0
  796. package/bizar-dash/dist/assets/{dnd-kit-DR2Qzzxk.js.map → dnd-kit-Bormfg7j.js.map} +1 -1
  797. package/bizar-dash/dist/assets/git-pull-request-BCt0CEjc.js +11 -0
  798. package/bizar-dash/dist/assets/git-pull-request-BCt0CEjc.js.map +1 -0
  799. package/bizar-dash/dist/assets/index-C0JBGB5M.js +1 -0
  800. package/bizar-dash/dist/assets/index-C0JBGB5M.js.map +1 -0
  801. package/bizar-dash/dist/assets/index-CrWI7sQR.js +1 -0
  802. package/bizar-dash/dist/assets/index-CrWI7sQR.js.map +1 -0
  803. package/bizar-dash/dist/assets/main-CCimEcWH.js +134 -0
  804. package/bizar-dash/dist/assets/main-CCimEcWH.js.map +1 -0
  805. package/bizar-dash/dist/assets/{main-COdgjqbZ.css → main-CcQfRfIJ.css} +1 -1
  806. package/bizar-dash/dist/assets/{minus-CrStJTZ7.js → play-B0rTjpSg.js} +2 -2
  807. package/bizar-dash/dist/assets/play-B0rTjpSg.js.map +1 -0
  808. package/bizar-dash/dist/assets/plus-BaTQsS9G.js +6 -0
  809. package/bizar-dash/dist/assets/plus-BaTQsS9G.js.map +1 -0
  810. package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js +6 -0
  811. package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js.map +1 -0
  812. package/bizar-dash/dist/assets/terminal-k-1HFHcN.js +11 -0
  813. package/bizar-dash/dist/assets/terminal-k-1HFHcN.js.map +1 -0
  814. package/bizar-dash/dist/assets/trash-2-DtpKnAn2.js +6 -0
  815. package/bizar-dash/dist/assets/trash-2-DtpKnAn2.js.map +1 -0
  816. package/bizar-dash/dist/assets/triangle-alert-FHSs_e5b.js +6 -0
  817. package/bizar-dash/dist/assets/triangle-alert-FHSs_e5b.js.map +1 -0
  818. package/bizar-dash/dist/assets/{wrench-BJ1WIC4u.js → wrench-CbBE0oQ0.js} +2 -2
  819. package/bizar-dash/dist/assets/{wrench-BJ1WIC4u.js.map → wrench-CbBE0oQ0.js.map} +1 -1
  820. package/bizar-dash/dist/v8.html +3 -3
  821. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  822. package/bizar-dash/src/server/api.mjs +15 -0
  823. package/bizar-dash/src/server/bg-poller.mjs +81 -1
  824. package/bizar-dash/src/server/bg-poller.test.mjs +28 -0
  825. package/bizar-dash/src/server/progress-parser.mjs +237 -0
  826. package/bizar-dash/src/server/progress-parser.test.mjs +105 -0
  827. package/bizar-dash/src/server/routes/agents-cc.mjs +381 -0
  828. package/bizar-dash/src/server/routes/agents-cc.test.mjs +35 -0
  829. package/bizar-dash/src/server/routes/goals.mjs +307 -0
  830. package/bizar-dash/src/server/routes/spawn.mjs +59 -0
  831. package/bizar-dash/src/server/routes/tasks.mjs +11 -0
  832. package/bizar-dash/src/server/server.mjs +1 -1
  833. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  834. package/bizar-dash/src/web/v8/App.tsx +56 -7
  835. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +2 -2
  836. package/bizar-dash/src/web/v8/__tests__/BackgroundJobsView.test.tsx +172 -0
  837. package/bizar-dash/src/web/v8/__tests__/MemoryView.test.tsx +91 -0
  838. package/bizar-dash/src/web/v8/__tests__/NotificationsPopover.test.tsx +91 -0
  839. package/bizar-dash/src/web/v8/__tests__/SchedulesView.test.tsx +157 -0
  840. package/bizar-dash/src/web/v8/__tests__/Topbar.test.tsx +86 -0
  841. package/bizar-dash/src/web/v8/__tests__/changelog.test.tsx +79 -0
  842. package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +104 -0
  843. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +10 -4
  844. package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +92 -0
  845. package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +87 -0
  846. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +116 -40
  847. package/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
  848. package/bizar-dash/src/web/v8/data/types.ts +156 -0
  849. package/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
  850. package/bizar-dash/src/web/v8/data/useWebSocket.ts +161 -0
  851. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +46 -12
  852. package/bizar-dash/src/web/v8/shell/Topbar.tsx +30 -4
  853. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +283 -0
  854. package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +371 -0
  855. package/bizar-dash/src/web/v8/ui/feedback/NotificationsPopover.tsx +239 -0
  856. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +251 -0
  857. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +6 -3
  858. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +3 -3
  859. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +10 -5
  860. package/bizar-dash/src/web/v8/ui/styles/globals.css +5 -0
  861. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +415 -16
  862. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +151 -87
  863. package/bizar-dash/src/web/v8/views/BackgroundJobs/BackgroundJobsView.tsx +442 -0
  864. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +1 -1
  865. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +148 -30
  866. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +176 -67
  867. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +78 -11
  868. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +212 -42
  869. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +112 -52
  870. package/bizar-dash/src/web/v8/views/Router.tsx +23 -37
  871. package/bizar-dash/src/web/v8/views/Schedules/SchedulesView.tsx +395 -0
  872. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +651 -210
  873. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +142 -49
  874. package/bizar-dash/tests/components/Button.test.tsx +51 -14
  875. package/bizar-dash/tests/components/Card.test.tsx +37 -20
  876. package/bizar-dash/tests/components/Dialog.test.tsx +80 -0
  877. package/bizar-dash/tests/components/Toast.test.tsx +48 -95
  878. package/bizar-dash/tests/goals-decompose.test.mjs +179 -0
  879. package/bizar-dash/tests/setup.ts +21 -0
  880. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +30 -15
  881. package/bizar-dash/vite.config.ts +15 -0
  882. package/bizar-dash/vitest.config.ts +4 -1
  883. package/cli/bin.mjs +32 -0
  884. package/cli/install.mjs +26 -1
  885. package/cli/provision-claude.mjs +86 -0
  886. package/package.json +1 -1
  887. package/packages/sdk/.harness/agents.json +17 -0
  888. package/packages/sdk/.harness/topology.json +4 -0
  889. package/scripts/run-dev.mjs +84 -0
  890. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js +0 -6
  891. package/bizar-dash/dist/assets/ActivityFeed-BRBtQOHB.js.map +0 -1
  892. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js +0 -1
  893. package/bizar-dash/dist/assets/ActivityView-CwqhxBfh.js.map +0 -1
  894. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js +0 -1
  895. package/bizar-dash/dist/assets/AgentActivity-6MxU-a9F.js.map +0 -1
  896. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js +0 -8
  897. package/bizar-dash/dist/assets/AgentsView-BYrOFdwl.js.map +0 -1
  898. package/bizar-dash/dist/assets/Badge-Cd61wsBa.js +0 -1
  899. package/bizar-dash/dist/assets/Badge-Cd61wsBa.js.map +0 -1
  900. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js +0 -11
  901. package/bizar-dash/dist/assets/GoalsView-Dok0yt9S.js.map +0 -1
  902. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js +0 -21
  903. package/bizar-dash/dist/assets/KanbanCard-CtTKP6ZX.js.map +0 -1
  904. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js +0 -67
  905. package/bizar-dash/dist/assets/LibrariesView-BcyBQXiY.js.map +0 -1
  906. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js +0 -13
  907. package/bizar-dash/dist/assets/MemoryView-49wR4u-y.js.map +0 -1
  908. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js +0 -1
  909. package/bizar-dash/dist/assets/OverviewView-BtQ_UWYj.js.map +0 -1
  910. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js +0 -1
  911. package/bizar-dash/dist/assets/ProgressBar-CpvDeq9F.js.map +0 -1
  912. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js +0 -30
  913. package/bizar-dash/dist/assets/SettingsRow-DmIe5OUu.js.map +0 -1
  914. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js +0 -48
  915. package/bizar-dash/dist/assets/SettingsView-D1KmGWbi.js.map +0 -1
  916. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js +0 -11
  917. package/bizar-dash/dist/assets/StatTile-BkIP32gG.js.map +0 -1
  918. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js +0 -1
  919. package/bizar-dash/dist/assets/TasksView-Cba3GJ42.js.map +0 -1
  920. package/bizar-dash/dist/assets/dnd-kit-DR2Qzzxk.js +0 -5
  921. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js +0 -6
  922. package/bizar-dash/dist/assets/git-merge-OoqBKQer.js.map +0 -1
  923. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js +0 -6
  924. package/bizar-dash/dist/assets/git-pull-request-CXBQTR2f.js.map +0 -1
  925. package/bizar-dash/dist/assets/main-Cw6gybzS.js +0 -109
  926. package/bizar-dash/dist/assets/main-Cw6gybzS.js.map +0 -1
  927. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js +0 -6
  928. package/bizar-dash/dist/assets/message-square-DUTeIQAR.js.map +0 -1
  929. package/bizar-dash/dist/assets/minus-CrStJTZ7.js.map +0 -1
  930. /package/bizar-dash/tests/{BackgroundAgents.test.tsx → v7-archive/BackgroundAgents.test.tsx} +0 -0
  931. /package/bizar-dash/tests/{a11y → v7-archive/a11y}/forms.test.tsx +0 -0
  932. /package/bizar-dash/tests/{a11y.test.tsx → v7-archive/a11y.test.tsx} +0 -0
  933. /package/bizar-dash/tests/{autosave.test.tsx → v7-archive/autosave.test.tsx} +0 -0
  934. /package/bizar-dash/tests/{backup-restore.test.tsx → v7-archive/backup-restore.test.tsx} +0 -0
  935. /package/bizar-dash/tests/{chat-composer.test.tsx → v7-archive/chat-composer.test.tsx} +0 -0
  936. /package/bizar-dash/tests/{communication-log.test.tsx → v7-archive/communication-log.test.tsx} +0 -0
  937. /package/bizar-dash/tests/{components → v7-archive/components}/Modal.test.tsx +0 -0
  938. /package/bizar-dash/tests/{components → v7-archive/components}/Spinner.test.tsx +0 -0
  939. /package/bizar-dash/tests/{components → v7-archive/components}/StatusBadge.test.tsx +0 -0
  940. /package/bizar-dash/tests/{components → v7-archive/components}/doctor-panel.test.tsx +0 -0
  941. /package/bizar-dash/tests/{components → v7-archive/components}/screenshot-ocr.test.tsx +0 -0
  942. /package/bizar-dash/tests/{components → v7-archive/components}/settings-search.test.tsx +0 -0
  943. /package/bizar-dash/tests/{components → v7-archive/components}/workspace-selector.test.tsx +0 -0
  944. /package/bizar-dash/tests/{ui → v7-archive}/controls/Button.test.tsx +0 -0
  945. /package/bizar-dash/tests/{ui → v7-archive}/controls/Checkbox.test.tsx +0 -0
  946. /package/bizar-dash/tests/{ui → v7-archive}/controls/IconButton.test.tsx +0 -0
  947. /package/bizar-dash/tests/{ui → v7-archive}/controls/Kbd.test.tsx +0 -0
  948. /package/bizar-dash/tests/{ui → v7-archive}/controls/NumberInput.test.tsx +0 -0
  949. /package/bizar-dash/tests/{ui → v7-archive}/controls/RadioGroup.test.tsx +0 -0
  950. /package/bizar-dash/tests/{ui → v7-archive}/controls/SearchInput.test.tsx +0 -0
  951. /package/bizar-dash/tests/{ui → v7-archive}/controls/Select.test.tsx +0 -0
  952. /package/bizar-dash/tests/{ui → v7-archive}/controls/Slider.test.tsx +0 -0
  953. /package/bizar-dash/tests/{ui → v7-archive}/controls/TextInput.test.tsx +0 -0
  954. /package/bizar-dash/tests/{ui → v7-archive}/controls/Textarea.test.tsx +0 -0
  955. /package/bizar-dash/tests/{ui → v7-archive}/controls/Toggle.test.tsx +0 -0
  956. /package/bizar-dash/tests/{ui → v7-archive}/data/BarChart.test.tsx +0 -0
  957. /package/bizar-dash/tests/{ui → v7-archive}/data/DataTable.test.tsx +0 -0
  958. /package/bizar-dash/tests/{ui → v7-archive}/data/EmptyState.test.tsx +0 -0
  959. /package/bizar-dash/tests/{ui → v7-archive}/data/ErrorState.test.tsx +0 -0
  960. /package/bizar-dash/tests/{ui → v7-archive}/data/KeyValueList.test.tsx +0 -0
  961. /package/bizar-dash/tests/{ui → v7-archive}/data/LoadingState.test.tsx +0 -0
  962. /package/bizar-dash/tests/{ui → v7-archive}/data/Sparkline.test.tsx +0 -0
  963. /package/bizar-dash/tests/{ui → v7-archive}/data/StatTile.test.tsx +0 -0
  964. /package/bizar-dash/tests/{dep-graph.test.tsx → v7-archive/dep-graph.test.tsx} +0 -0
  965. /package/bizar-dash/tests/{eval-web-ui.test.tsx → v7-archive/eval-web-ui.test.tsx} +0 -0
  966. /package/bizar-dash/tests/{event-log.test.tsx → v7-archive/event-log.test.tsx} +0 -0
  967. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Badge.test.tsx +0 -0
  968. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Dialog.test.tsx +0 -0
  969. /package/bizar-dash/tests/{ui → v7-archive}/feedback/ProgressBar.test.tsx +0 -0
  970. /package/bizar-dash/tests/{ui → v7-archive}/feedback/StatusDot.test.tsx +0 -0
  971. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Toast.test.tsx +0 -0
  972. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Tooltip.test.tsx +0 -0
  973. /package/bizar-dash/tests/{goal-input.test.tsx → v7-archive/goal-input.test.tsx} +0 -0
  974. /package/bizar-dash/tests/{goap-planner.test.ts → v7-archive/goap-planner.test.ts} +0 -0
  975. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useModal.test.tsx +0 -0
  976. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useToast.test.tsx +0 -0
  977. /package/bizar-dash/tests/{ui → v7-archive}/layout/AppShell.test.tsx +0 -0
  978. /package/bizar-dash/tests/{ui → v7-archive}/layout/Breadcrumbs.test.tsx +0 -0
  979. /package/bizar-dash/tests/{ui → v7-archive}/layout/Panel.test.tsx +0 -0
  980. /package/bizar-dash/tests/{ui → v7-archive}/layout/PanelHeader.test.tsx +0 -0
  981. /package/bizar-dash/tests/{ui → v7-archive}/layout/Sidebar.test.tsx +0 -0
  982. /package/bizar-dash/tests/{ui → v7-archive}/layout/Tabs.test.tsx +0 -0
  983. /package/bizar-dash/tests/{ui → v7-archive}/layout/Topbar.test.tsx +0 -0
  984. /package/bizar-dash/tests/{ui → v7-archive}/layout/ViewHeader.test.tsx +0 -0
  985. /package/bizar-dash/tests/{lib → v7-archive/lib}/i18n.test.ts +0 -0
  986. /package/bizar-dash/tests/{lib → v7-archive/lib}/search-fuzzy.test.ts +0 -0
  987. /package/bizar-dash/tests/{lib → v7-archive/lib}/utils.test.ts +0 -0
  988. /package/bizar-dash/tests/{memory-graph-view.test.tsx → v7-archive/memory-graph-view.test.tsx} +0 -0
  989. /package/bizar-dash/tests/{mobile-chat.test.tsx → v7-archive/mobile-chat.test.tsx} +0 -0
  990. /package/bizar-dash/tests/{mobile-layout.test.tsx → v7-archive/mobile-layout.test.tsx} +0 -0
  991. /package/bizar-dash/tests/{mobile-overview.test.tsx → v7-archive/mobile-overview.test.tsx} +0 -0
  992. /package/bizar-dash/tests/{mobile-settings.test.tsx → v7-archive/mobile-settings.test.tsx} +0 -0
  993. /package/bizar-dash/tests/{mobile-tasks.test.tsx → v7-archive/mobile-tasks.test.tsx} +0 -0
  994. /package/bizar-dash/tests/{ui → v7-archive}/navigation/CommandPalette.test.tsx +0 -0
  995. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavGroup.test.tsx +0 -0
  996. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavLink.test.tsx +0 -0
  997. /package/bizar-dash/tests/{quality-gates.test.tsx → v7-archive/quality-gates.test.tsx} +0 -0
  998. /package/bizar-dash/tests/{settings-layout.test.tsx → v7-archive/settings-layout.test.tsx} +0 -0
  999. /package/bizar-dash/tests/{settings-mode-wiring.test.tsx → v7-archive/settings-mode-wiring.test.tsx} +0 -0
  1000. /package/bizar-dash/tests/{settings-nav.test.tsx → v7-archive/settings-nav.test.tsx} +0 -0
  1001. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Box.test.tsx +0 -0
  1002. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Grid.test.tsx +0 -0
  1003. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Inline.test.tsx +0 -0
  1004. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Separator.test.tsx +0 -0
  1005. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Stack.test.tsx +0 -0
  1006. /package/bizar-dash/tests/{views → v7-archive/views}/Agents.test.tsx +0 -0
  1007. /package/bizar-dash/tests/{views → v7-archive/views}/Memory.test.tsx +0 -0
  1008. /package/bizar-dash/tests/{views → v7-archive/views}/Overview.test.tsx +0 -0
  1009. /package/bizar-dash/tests/{views → v7-archive/views}/Tasks.test.tsx +0 -0
  1010. /package/bizar-dash/tests/{views → v7-archive/views}/sidebar.test.tsx +0 -0
  1011. /package/bizar-dash/tests/{views → v7-archive/views}/topbar.test.tsx +0 -0
  1012. /package/bizar-dash/tests/{voice-recorder.test.tsx → v7-archive/voice-recorder.test.tsx} +0 -0
@@ -0,0 +1,1176 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cli/provision-claude.mjs
4
+ *
5
+ * v6.3.0 — Claude Code-native installer + updater.
6
+ *
7
+ * Replaces `cli/provision.mjs` (the Cline-era provisioner). The install
8
+ * / update flow for Claude Code is different from Cline:
9
+ *
10
+ * - Config root is `~/.claude/` (NOT `~/.cline/`).
11
+ * - The configuration file is `~/.claude/settings.json` (NOT
12
+ * `~/.cline/cline.json`).
13
+ * - MCP servers are registered via `claude mcp add` (NOT by
14
+ * patching a `plugin[]` array).
15
+ * - Plugins are managed via `claude plugin install ...` (NOT
16
+ * copied into `~/.cline/plugins/bizar/`).
17
+ * - Skills live under `~/.claude/skills/<name>/SKILL.md`.
18
+ * - Commands live under `~/.claude/commands/<name>.md`.
19
+ * - Rules live under `~/.claude/rules/<name>.md`.
20
+ * - Hooks are wired into `~/.claude/settings.json` (NOT installed
21
+ * as executable files in `~/.cline/hooks/`).
22
+ * - `~/.claude/CLAUDE.md` mirrors the repo's `AGENTS.md`.
23
+ *
24
+ * Public API:
25
+ * runProvision({ mode, dryRun, force, yes, restart, ... })
26
+ * Runs the full provision flow for `mode` ('install' | 'update').
27
+ * detectState()
28
+ * Probe what's installed without modifying anything.
29
+ * Returns a structured state object.
30
+ *
31
+ * Both modes are idempotent and safe to re-run.
32
+ *
33
+ * Flags (parsed by the CLI shim at the bottom):
34
+ * --mode=install|update|install-only-system
35
+ * --dry-run Print actions, make no changes.
36
+ * --force Overwrite existing files.
37
+ * --yes / -y Same as --force.
38
+ * --non-interactive Same as --yes.
39
+ */
40
+
41
+ import chalk from 'chalk';
42
+ import { execFileSync, execSync, spawn, spawnSync } from 'node:child_process';
43
+ import {
44
+ chmodSync,
45
+ copyFileSync,
46
+ existsSync,
47
+ mkdirSync,
48
+ readdirSync,
49
+ readFileSync,
50
+ rmSync,
51
+ statSync,
52
+ writeFileSync,
53
+ } from 'node:fs';
54
+ import { homedir } from 'node:os';
55
+ import { dirname, join, resolve, sep } from 'node:path';
56
+ import { fileURLToPath } from 'node:url';
57
+
58
+ const __filename = fileURLToPath(import.meta.url);
59
+ const __dirname = dirname(__filename);
60
+ const HOME = homedir();
61
+
62
+ // Repo root = `<pkg>/cli/provision-claude.mjs` → one level up.
63
+ // This works for source checkouts AND global npm installs.
64
+ export const REPO_ROOT = resolve(__dirname, '..');
65
+
66
+ // ─── Paths ────────────────────────────────────────────────────────────────────
67
+
68
+ /**
69
+ * Resolve the Claude Code config directory.
70
+ *
71
+ * Resolution order (matches Claude Code's own resolver, see
72
+ * https://code.claude.com/docs/en/cli-reference):
73
+ * 1. `process.env.CLAUDE_CONFIG_DIR` (explicit override)
74
+ * 2. `$HOME/.claude` (default)
75
+ * 3. (Windows only) `%APPDATA%\Claude`
76
+ */
77
+ export function resolveClaudeDir() {
78
+ if (process.env.CLAUDE_CONFIG_DIR && process.env.CLAUDE_CONFIG_DIR.trim()) {
79
+ return process.env.CLAUDE_CONFIG_DIR.trim();
80
+ }
81
+ if (process.platform === 'win32') {
82
+ return process.env.APPDATA
83
+ ? join(process.env.APPDATA, 'Claude')
84
+ : join(HOME, '.claude');
85
+ }
86
+ return join(HOME, '.claude');
87
+ }
88
+
89
+ export const CLAUDE_DIR = resolveClaudeDir();
90
+
91
+ /** `~/.bizar_home/` — Bizar-specific runtime state (NOT under ~/.claude/). */
92
+ export const BIZAR_HOME = process.env.BIZAR_HOME
93
+ || join(process.env.XDG_CONFIG_HOME || join(HOME, '.config'), 'bizar');
94
+
95
+ // Standard Claude Code subdirectories (v6.3.0 — Claude Code layout)
96
+ export const CLAUDE_AGENTS_DIR = join(CLAUDE_DIR, 'agents');
97
+ export const CLAUDE_SKILLS_DIR = join(CLAUDE_DIR, 'skills');
98
+ export const CLAUDE_COMMANDS_DIR = join(CLAUDE_DIR, 'commands');
99
+ export const CLAUDE_HOOKS_DIR = join(CLAUDE_DIR, 'hooks');
100
+ export const CLAUDE_RULES_DIR = join(CLAUDE_DIR, 'rules');
101
+ export const CLAUDE_PLUGINS_DIR = join(CLAUDE_DIR, 'plugins');
102
+
103
+ // Service / dashboard pid files
104
+ const SERVICE_PID_FILE = join(BIZAR_HOME, 'service.pid');
105
+ const DASHBOARD_PID_FILE = join(BIZAR_HOME, 'dashboard.pid');
106
+ const DASHBOARD_PORT_FILE = join(BIZAR_HOME, 'dashboard.port');
107
+
108
+ // ─── Tiny utilities ──────────────────────────────────────────────────────────
109
+
110
+ function haveCmd(cmd) {
111
+ try {
112
+ execSync(`command -v ${cmd}`, { stdio: ['ignore', 'pipe', 'ignore'] });
113
+ return true;
114
+ } catch {
115
+ return false;
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Build the SDK workspace so its compiled JS output lives at
121
+ * `<pkg>/packages/sdk/dist/`. The dashboard imports the SDK memory
122
+ * module from `dist/memory/index.js`, not from `src/memory/index.js`,
123
+ * so without this build step the npm-installed package ships a TS
124
+ * source tree that the dashboard cannot run.
125
+ *
126
+ * v7.0.1 — `install.sh` + `bizar update` previously skipped this step
127
+ * entirely. Symptom: `bizar dash start` crashes with
128
+ * `Cannot find module .../packages/sdk/dist/memory/index.js`
129
+ * (or .../src/memory/index.js for older import paths). Root cause: the
130
+ * SDK's `package.json` advertises `./dist/*` exports, but the SDK's
131
+ * `tsconfig.json` is never compiled by the installer.
132
+ *
133
+ * Bun resolution: when bun is invoked from a globally npm-installed
134
+ * package, its lifecycle script runs with a minimal PATH that does
135
+ * NOT include `~/.bun/bin`. So `bun run build:sdk` (which shells out to
136
+ * `tsc` via bun's bin shim) fails with `tsc: command not found`. To
137
+ * dodge that, we resolve bun to its absolute path
138
+ * (`$HOME/.bun/bin/bun`) and prepend that dir to the child process
139
+ * PATH so bun's tsc shim is visible.
140
+ *
141
+ * Idempotent: skips when `dist/memory/index.js` already exists.
142
+ * Non-fatal: returns `{ ok: false, message }` rather than throwing —
143
+ * the rest of the provision flow should still complete (some operators
144
+ * run a separate build pipeline, e.g. a CI step).
145
+ */
146
+ export async function buildSdk({ dryRun = false } = {}) {
147
+ const sdkRoot = join(REPO_ROOT, 'packages', 'sdk');
148
+ const srcEntry = join(sdkRoot, 'src', 'memory', 'index.ts');
149
+ const distEntry = join(sdkRoot, 'dist', 'memory', 'index.js');
150
+
151
+ if (!existsSync(srcEntry)) {
152
+ // No SDK TS source — this is a stripped install or an unusual layout.
153
+ // Don't fail the whole provision over it; just report.
154
+ return { ok: true, skipped: true, message: `SDK src not found at ${srcEntry} — skipping build (likely a non-bundled install)` };
155
+ }
156
+
157
+ if (existsSync(distEntry)) {
158
+ return { ok: true, skipped: true, message: `SDK dist already present — skipping build (delete ${join(sdkRoot, 'dist')} to force)` };
159
+ }
160
+
161
+ if (dryRun) {
162
+ return { ok: true, skipped: false, message: `would build SDK at ${sdkRoot}` };
163
+ }
164
+
165
+ // Resolve bun to an absolute path. `command -v bun` finds whatever is
166
+ // on PATH, but bun's bin dir (typically `~/.bun/bin`) is NOT always on
167
+ // PATH — especially when invoked from a globally npm-installed package
168
+ // whose lifecycle scripts run with a minimal env. Without the absolute
169
+ // path, `bun run build:sdk` shells out to `tsc`, finds no shim on PATH,
170
+ // and fails with `tsc: command not found`.
171
+ //
172
+ // Bun's bin dir contains only `bun` and `bunx` — NOT `tsc`. So even
173
+ // when bun runs `build:sdk` (which executes the `tsc` line from
174
+ // package.json), the child shell still needs `tsc` on PATH. The npm
175
+ // global bin dir (where `npm install -g typescript` lands the shim) is
176
+ // the typical source — resolve it via `npm root -g`'s parent and
177
+ // prepend both bun's bin and the npm global bin to the child PATH.
178
+ const bunFromHome = join(process.env.HOME || '', '.bun', 'bin', 'bun');
179
+ let cmd, args, childEnv;
180
+ if (existsSync(bunFromHome)) {
181
+ cmd = bunFromHome;
182
+ args = ['run', 'build:sdk'];
183
+ const pathDelim = process.platform === 'win32' ? ';' : ':';
184
+ const bunBin = dirname(bunFromHome);
185
+ let npmGlobalBin = '';
186
+ try {
187
+ const npmRootG = execSync('npm root -g', { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
188
+ // npm root -g returns .../lib/node_modules — parent is .../lib, and
189
+ // the bin dir lives at .../bin. So walk up one and over.
190
+ npmGlobalBin = join(dirname(npmRootG), '..', 'bin');
191
+ } catch {
192
+ // npm not on PATH — fall back to the standard location.
193
+ npmGlobalBin = process.platform === 'win32'
194
+ ? join(process.env.APPDATA || '', 'npm')
195
+ : join(process.env.HOME || '', '.local', 'bin');
196
+ }
197
+ const pathParts = [bunBin];
198
+ if (npmGlobalBin && existsSync(npmGlobalBin)) pathParts.push(npmGlobalBin);
199
+ pathParts.push(process.env.PATH || '');
200
+ childEnv = { ...process.env, PATH: pathParts.join(pathDelim) };
201
+ } else if (haveCmd('bun')) {
202
+ cmd = 'bun';
203
+ args = ['run', 'build:sdk'];
204
+ childEnv = process.env;
205
+ } else {
206
+ // Fallback: npx tsc. Requires a network round-trip on first use but
207
+ // works on systems without bun installed (CI, minimal containers).
208
+ cmd = 'npx';
209
+ args = ['--yes', 'tsc', '-p', 'packages/sdk/tsconfig.json'];
210
+ childEnv = process.env;
211
+ }
212
+
213
+ try {
214
+ logInfo(`building SDK with \`${cmd} ${args.join(' ')}\` (REPO_ROOT=${REPO_ROOT})`);
215
+ execFileSync(cmd, args, { cwd: REPO_ROOT, stdio: 'pipe', timeout: 180_000, env: childEnv });
216
+ if (existsSync(distEntry)) {
217
+ return { ok: true, skipped: false, message: 'SDK built (dist/memory/index.js present)' };
218
+ }
219
+ return { ok: false, message: `build completed but ${distEntry} still missing — check tsconfig outDir` };
220
+ } catch (err) {
221
+ const stderr = err.stderr ? err.stderr.toString().split('\n').slice(0, 5).join(' | ') : '(no stderr)';
222
+ return { ok: false, message: `SDK build failed: ${stderr}` };
223
+ }
224
+ }
225
+
226
+ /**
227
+ * Build the Bizar plugin shim (`plugins/bizar/`) so the loader can find
228
+ * `plugins/bizar/dist/index.js` at runtime. Same root cause as `buildSdk()`:
229
+ * the npm-installed package ships `plugins/bizar/index.ts` (TS source) but
230
+ * nothing at `dist/`. Without this build step, `bizar dash start` reports
231
+ * `Plugin source not found at .../plugins/bizar` from `cli/install.mjs:installPluginBizar`
232
+ * (which is misleading — the dir exists, just the compiled entry doesn't).
233
+ *
234
+ * v8.0.2 — same bun/npx/tsc strategy as `buildSdk()`. We compile the
235
+ * single TS entry `plugins/bizar/index.ts` to `plugins/bizar/dist/index.js`
236
+ * via the existing `plugins/bizar/tsconfig.json`.
237
+ *
238
+ * Idempotent: skips when `plugins/bizar/dist/index.js` already exists.
239
+ * Non-fatal: returns `{ ok: false, message }` rather than throwing.
240
+ */
241
+ export async function buildPlugin({ dryRun = false } = {}) {
242
+ const pluginRoot = join(REPO_ROOT, 'plugins', 'bizar');
243
+ const srcEntry = join(pluginRoot, 'index.ts');
244
+ const distEntry = join(pluginRoot, 'dist', 'index.js');
245
+
246
+ if (!existsSync(srcEntry)) {
247
+ return { ok: true, skipped: true, message: `Plugin src not found at ${srcEntry} — skipping build` };
248
+ }
249
+
250
+ if (existsSync(distEntry)) {
251
+ return { ok: true, skipped: true, message: `Plugin dist already present — skipping build (delete ${join(pluginRoot, 'dist')} to force)` };
252
+ }
253
+
254
+ if (dryRun) {
255
+ return { ok: true, skipped: false, message: `would build plugin at ${pluginRoot}` };
256
+ }
257
+
258
+ // Same PATH-resolution dance as buildSdk(): npm-global scripts may have
259
+ // a stripped PATH that doesn't include ~/.bun/bin or the npm bin dir,
260
+ // so bun's tsc shim isn't visible to the child shell.
261
+ const bunFromHome = join(process.env.HOME || '', '.bun', 'bin', 'bun');
262
+ let cmd, args, childEnv;
263
+ if (existsSync(bunFromHome)) {
264
+ cmd = bunFromHome;
265
+ args = ['x', 'tsc', '-p', 'plugins/bizar/tsconfig.json'];
266
+ const pathDelim = process.platform === 'win32' ? ';' : ':';
267
+ const bunBin = dirname(bunFromHome);
268
+ let npmGlobalBin = '';
269
+ try {
270
+ const npmRootG = execSync('npm root -g', { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
271
+ npmGlobalBin = join(dirname(npmRootG), '..', 'bin');
272
+ } catch {
273
+ npmGlobalBin = process.platform === 'win32'
274
+ ? join(process.env.APPDATA || '', 'npm')
275
+ : join(process.env.HOME || '', '.local', 'bin');
276
+ }
277
+ const pathParts = [bunBin];
278
+ if (npmGlobalBin && existsSync(npmGlobalBin)) pathParts.push(npmGlobalBin);
279
+ pathParts.push(process.env.PATH || '');
280
+ childEnv = { ...process.env, PATH: pathParts.join(pathDelim) };
281
+ } else if (haveCmd('bun')) {
282
+ cmd = 'bun';
283
+ args = ['x', 'tsc', '-p', 'plugins/bizar/tsconfig.json'];
284
+ childEnv = process.env;
285
+ } else {
286
+ cmd = 'npx';
287
+ args = ['--yes', 'tsc', '-p', 'plugins/bizar/tsconfig.json'];
288
+ childEnv = process.env;
289
+ }
290
+
291
+ try {
292
+ logInfo(`building plugin with \`${cmd} ${args.join(' ')}\` (REPO_ROOT=${REPO_ROOT})`);
293
+ execFileSync(cmd, args, { cwd: REPO_ROOT, stdio: 'pipe', timeout: 180_000, env: childEnv });
294
+ if (existsSync(distEntry)) {
295
+ return { ok: true, skipped: false, message: 'Plugin built (dist/index.js present)' };
296
+ }
297
+ return { ok: false, message: `build completed but ${distEntry} still missing — check tsconfig outDir` };
298
+ } catch (err) {
299
+ const stderr = err.stderr ? err.stderr.toString().split('\n').slice(0, 5).join(' | ') : '(no stderr)';
300
+ return { ok: false, message: `Plugin build failed: ${stderr}` };
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Build the dashboard SPA (Vite production bundle) so the Node server
306
+ * in `bizar-dash/src/server/server.mjs` can serve the React UI from
307
+ * `bizar-dash/dist/index.html` + `dist/assets/*`. Without this step,
308
+ * npm installs that don't ship a pre-built `dist/` (the published
309
+ * tarball excludes it because it is `.gitignore`'d) leave the
310
+ * dashboard serving 404s for every asset, and the page renders blank
311
+ * with errors like `can't access property 'useState', et is undefined`.
312
+ *
313
+ * v7.0.3 — `install.sh` + `bizar update` previously skipped the
314
+ * dashboard build entirely. Symptom: a fresh `bizar install` /
315
+ * `bizar update` overwrote the package's pre-existing `dist/` (if
316
+ * any) and the dashboard's first request returned a 404 for the
317
+ * bundle, followed by the React error above in the browser console.
318
+ *
319
+ * Same bun / npx resolution strategy as `buildSdk()`. The vite config
320
+ * reads the same `tsconfig.json` for type info, but the heavy lifting
321
+ * is `vite build` itself which uses esbuild internally, so no tsc
322
+ * dependency here.
323
+ *
324
+ * Idempotent: skips when `bizar-dash/dist/index.html` already exists.
325
+ * Non-fatal: returns `{ ok: false, message }` rather than throwing —
326
+ * the rest of the provision flow should still complete.
327
+ */
328
+ export async function buildDash({ dryRun = false } = {}) {
329
+ const dashDir = join(REPO_ROOT, 'bizar-dash');
330
+ const distIndex = join(dashDir, 'dist', 'index.html');
331
+
332
+ if (!existsSync(join(dashDir, 'src', 'web', 'index.html'))) {
333
+ return { ok: true, skipped: true, message: `Dashboard src not found at ${join(dashDir, 'src', 'web', 'index.html')} — skipping build` };
334
+ }
335
+
336
+ if (existsSync(distIndex)) {
337
+ return { ok: true, skipped: true, message: `Dashboard dist already present — skipping build (delete ${join(dashDir, 'dist')} to force)` };
338
+ }
339
+
340
+ if (dryRun) {
341
+ return { ok: true, skipped: false, message: `would build dashboard at ${dashDir}` };
342
+ }
343
+
344
+ const bunFromHome = join(process.env.HOME || '', '.bun', 'bin', 'bun');
345
+ let cmd, args, childEnv;
346
+ if (existsSync(bunFromHome)) {
347
+ cmd = bunFromHome;
348
+ args = ['run', 'build:dash'];
349
+ const pathDelim = process.platform === 'win32' ? ';' : ':';
350
+ const bunBin = dirname(bunFromHome);
351
+ const pathParts = [bunBin, process.env.PATH || ''];
352
+ childEnv = { ...process.env, PATH: pathParts.join(pathDelim) };
353
+ } else if (haveCmd('bun')) {
354
+ cmd = 'bun';
355
+ args = ['run', 'build:dash'];
356
+ childEnv = process.env;
357
+ } else {
358
+ cmd = 'npx';
359
+ args = ['--yes', 'vite', 'build'];
360
+ childEnv = process.env;
361
+ }
362
+
363
+ try {
364
+ logInfo(`building dashboard with \`${cmd} ${args.join(' ')}\` (REPO_ROOT=${REPO_ROOT})`);
365
+ // `vite build` writes to the configured outDir (../../dist from
366
+ // src/web/). On a non-bun shell the cwd must be REPO_ROOT because
367
+ // the configured `root` is relative. Bun handles this either way.
368
+ execFileSync(cmd, args, { cwd: REPO_ROOT, stdio: 'pipe', timeout: 240_000, env: childEnv });
369
+ if (existsSync(distIndex)) {
370
+ return { ok: true, skipped: false, message: 'Dashboard built (dist/index.html present)' };
371
+ }
372
+ return { ok: false, message: `build completed but ${distIndex} still missing — check vite.config.ts outDir` };
373
+ } catch (err) {
374
+ const stderr = err.stderr ? err.stderr.toString().split('\n').slice(0, 5).join(' | ') : '(no stderr)';
375
+ return { ok: false, message: `Dashboard build failed: ${stderr}` };
376
+ }
377
+ }
378
+
379
+ function readTextSafe(file, fallback = '') {
380
+ try {
381
+ if (!existsSync(file)) return fallback;
382
+ return readFileSync(file, 'utf8');
383
+ } catch {
384
+ return fallback;
385
+ }
386
+ }
387
+
388
+ function readJsonSafe(file, fallback = null) {
389
+ try {
390
+ if (!existsSync(file)) return fallback;
391
+ return JSON.parse(readFileSync(file, 'utf8'));
392
+ } catch {
393
+ return fallback;
394
+ }
395
+ }
396
+
397
+ function ensureDir(dir) {
398
+ mkdirSync(dir, { recursive: true });
399
+ }
400
+
401
+ function copyDirContents(src, dest) {
402
+ ensureDir(dest);
403
+ for (const name of readdirSync(src)) {
404
+ const sp = join(src, name);
405
+ const dp = join(dest, name);
406
+ const st = statSync(sp);
407
+ if (st.isDirectory()) copyDirContents(sp, dp);
408
+ else copyFileSync(sp, dp);
409
+ }
410
+ }
411
+
412
+ function rimrafSafe(p) {
413
+ try { rmSync(p, { recursive: true, force: true }); } catch { /* ignore */ }
414
+ }
415
+
416
+ function logOk(msg) { console.log(chalk.green(' ✓') + ' ' + msg); }
417
+ function logInfo(msg) { console.log(chalk.cyan(' →') + ' ' + msg); }
418
+ function logWarn(msg) { console.log(chalk.yellow(' ⚠') + ' ' + msg); }
419
+ function logErr(msg) { console.log(chalk.red(' ✗') + ' ' + msg); }
420
+ function section(title) { console.log('\n' + chalk.bold.cyan(`── ${title} ──`)); }
421
+
422
+ // ─── Bizar HOME bootstrap ────────────────────────────────────────────────────
423
+
424
+ /**
425
+ * Ensure `~/.bizar_home/` (or `$BIZAR_HOME`) exists with the runtime
426
+ * subdirectories Bizar needs (memory vault, loops dir, dashboard port
427
+ * file). Idempotent.
428
+ */
429
+ export function ensureBizarHome({ dryRun = false } = {}) {
430
+ if (dryRun) {
431
+ return { ok: true, message: `[dry-run] would ensure ${BIZAR_HOME}` };
432
+ }
433
+ mkdirSync(BIZAR_HOME, { recursive: true });
434
+ mkdirSync(join(BIZAR_HOME, 'memory-vault'), { recursive: true });
435
+ mkdirSync(join(BIZAR_HOME, 'loops'), { recursive: true });
436
+ // Touch the dashboard port file so downstream readers can probe it.
437
+ if (!existsSync(DASHBOARD_PORT_FILE)) {
438
+ writeFileSync(DASHBOARD_PORT_FILE, '4321\n');
439
+ }
440
+ return { ok: true, message: `${BIZAR_HOME} ready`, path: BIZAR_HOME };
441
+ }
442
+
443
+ // ─── Toolchain ───────────────────────────────────────────────────────────────
444
+
445
+ function checkToolchain() {
446
+ section('Toolchain');
447
+ if (haveCmd('node')) logOk(`node ${execSync('node --version').toString().trim()}`);
448
+ else { logErr('node not on PATH — install Node.js 18+ from https://nodejs.org'); process.exit(1); }
449
+
450
+ if (haveCmd('npm')) logOk(`npm ${execSync('npm --version').toString().trim()}`);
451
+ else logWarn('npm not on PATH — Claude Code install will need npm');
452
+
453
+ if (haveCmd('git')) logOk(`git ${execSync('git --version').toString().trim().split(' ')[2]}`);
454
+ else logWarn('git not on PATH — optional for many tasks');
455
+
456
+ if (haveCmd('claude')) logOk(`claude ${execSync('claude --version').toString().trim().split('\n')[0]}`);
457
+ else logWarn('claude not on PATH — will install via npm');
458
+
459
+ if (haveCmd('agent-browser')) logOk(`agent-browser ${execSync('agent-browser --version').toString().trim()}`);
460
+ else logInfo('agent-browser not installed (optional; npm install -g agent-browser)');
461
+ }
462
+
463
+ /** Install Claude Code CLI + SDK globally via npm. Idempotent. */
464
+ function installClaudeCli({ force = false, dryRun = false } = {}) {
465
+ if (haveCmd('claude') && !force) return;
466
+ section('Installing Claude Code CLI');
467
+ logInfo('npm install -g @anthropic-ai/claude-agent-sdk @anthropic-ai/claude-code');
468
+ if (dryRun) return;
469
+ try {
470
+ execSync(
471
+ 'npm install -g @anthropic-ai/claude-agent-sdk @anthropic-ai/claude-code',
472
+ { stdio: 'inherit' },
473
+ );
474
+ logOk('Claude Code CLI installed');
475
+ } catch (err) {
476
+ logErr(`npm install failed: ${err.message}`);
477
+ logWarn('retry manually: npm install -g @anthropic-ai/claude-code');
478
+ }
479
+ }
480
+
481
+ // ─── File sync helpers ──────────────────────────────────────────────────────
482
+
483
+ /**
484
+ * Mirror a source directory into a destination directory, copying
485
+ * files and preserving subdirectory structure. Skips dotfiles by default.
486
+ */
487
+ function syncDir(srcDir, destDir, opts = {}) {
488
+ if (!existsSync(srcDir)) return { copied: 0, skipped: 0 };
489
+ ensureDir(destDir);
490
+ let copied = 0;
491
+ let skipped = 0;
492
+ for (const name of readdirSync(srcDir)) {
493
+ if (name.startsWith('.')) continue;
494
+ const sp = join(srcDir, name);
495
+ const dp = join(destDir, name);
496
+ const st = statSync(sp);
497
+ if (opts.filter && !opts.filter(name, sp)) { skipped++; continue; }
498
+ if (st.isDirectory()) {
499
+ const r = syncDir(sp, dp, opts);
500
+ copied += r.copied;
501
+ skipped += r.skipped;
502
+ } else {
503
+ copyFileSync(sp, dp);
504
+ copied++;
505
+ }
506
+ }
507
+ return { copied, skipped };
508
+ }
509
+
510
+ /**
511
+ * Copy `config/agents/*.md` → `~/.claude/agents/*.md`.
512
+ *
513
+ * v6.3.0 — Agent files use Claude Code frontmatter (name / description
514
+ * / tools / model at the top). The source files in `config/agents/`
515
+ * have already been migrated by a parallel task; this helper is a
516
+ * straight copy with no YAML regeneration (Claude Code reads `.md`
517
+ * directly — no `.yaml` shadow needed).
518
+ */
519
+ export async function syncAgentFiles({ dryRun = false, force = false } = {}) {
520
+ const src = join(REPO_ROOT, 'config', 'agents');
521
+ const dest = CLAUDE_AGENTS_DIR;
522
+ if (!existsSync(src)) {
523
+ return { ok: true, message: `no agents source at ${src}`, copied: 0, skipped: 0 };
524
+ }
525
+ if (dryRun) {
526
+ return { ok: true, message: `[dry-run] would sync ${src} → ${dest}` };
527
+ }
528
+ ensureDir(dest);
529
+ ensureDir(join(dest, '_shared'));
530
+ // Top-level .md files
531
+ let { copied, skipped } = syncDir(src, dest, { filter: (n) => n.endsWith('.md') });
532
+ // _shared/ — always overwrite (it's tiny + ships agent defaults).
533
+ const sharedSrc = join(src, '_shared');
534
+ if (existsSync(sharedSrc)) {
535
+ for (const entry of readdirSync(sharedSrc, { withFileTypes: true })) {
536
+ if (!entry.isFile()) continue;
537
+ copyFileSync(join(sharedSrc, entry.name), join(dest, '_shared', entry.name));
538
+ copied++;
539
+ }
540
+ }
541
+ return { ok: true, message: `${copied} agent(s) synced (${skipped} kept)`, copied, skipped };
542
+ }
543
+
544
+ /**
545
+ * Copy `config/skills/<name>/` → `~/.claude/skills/<name>/`.
546
+ *
547
+ * Each skill is mirrored as its own subdirectory under
548
+ * `~/.claude/skills/<name>/`. Honors `force` to overwrite.
549
+ */
550
+ export async function syncSkillFiles({ dryRun = false, force = false } = {}) {
551
+ const src = join(REPO_ROOT, 'config', 'skills');
552
+ const dest = CLAUDE_SKILLS_DIR;
553
+ if (!existsSync(src)) {
554
+ return { ok: true, message: `no skills source at ${src}`, copied: 0, skipped: 0 };
555
+ }
556
+ if (dryRun) {
557
+ return { ok: true, message: `[dry-run] would sync ${src} → ${dest}` };
558
+ }
559
+ ensureDir(dest);
560
+ copyDirContents(src, dest);
561
+
562
+ // Mirror AGENT_BASELINE.md → ~/.claude/skills/agent-baseline/SKILL.md
563
+ // (the Claude Code skill loader resolves the `name: agent-baseline`
564
+ // reference via this path).
565
+ const sharedBaseline = join(REPO_ROOT, 'config', 'agents', '_shared', 'AGENT_BASELINE.md');
566
+ if (existsSync(sharedBaseline)) {
567
+ const baselineDir = join(dest, 'agent-baseline');
568
+ ensureDir(baselineDir);
569
+ copyFileSync(sharedBaseline, join(baselineDir, 'SKILL.md'));
570
+ }
571
+
572
+ const count = readdirSync(dest).filter((n) => {
573
+ try { return statSync(join(dest, n)).isDirectory(); } catch { return false; }
574
+ }).length;
575
+ return { ok: true, message: `${count} skill(s) synced`, copied: count, skipped: 0 };
576
+ }
577
+
578
+ /**
579
+ * Copy `.claude/commands/*.md` → `~/.claude/commands/*.md`.
580
+ *
581
+ * Slash commands live in the project's `.claude/commands/` directory
582
+ * (project-scoped). The global mirror in `~/.claude/commands/` makes
583
+ * them available across every Claude Code session for the user.
584
+ */
585
+ export async function syncCommandFiles({ dryRun = false, force = false } = {}) {
586
+ // Project-scoped commands first, then legacy `config/commands/` as
587
+ // a fallback for older Bizar installs.
588
+ const candidates = [
589
+ join(REPO_ROOT, '.claude', 'commands'),
590
+ join(REPO_ROOT, 'config', 'commands'),
591
+ ];
592
+ let src = null;
593
+ for (const c of candidates) if (existsSync(c)) { src = c; break; }
594
+ if (!src) {
595
+ return { ok: true, message: 'no commands source found', copied: 0, skipped: 0 };
596
+ }
597
+ const dest = CLAUDE_COMMANDS_DIR;
598
+ if (dryRun) {
599
+ return { ok: true, message: `[dry-run] would sync ${src} → ${dest}` };
600
+ }
601
+ ensureDir(dest);
602
+ const { copied, skipped } = syncDir(src, dest, { filter: (n) => n.endsWith('.md') });
603
+ return { ok: true, message: `${copied} command(s) synced (${skipped} kept)`, copied, skipped };
604
+ }
605
+
606
+ /**
607
+ * Copy `config/rules/*.md` → `~/.claude/rules/*.md`.
608
+ *
609
+ * Claude Code auto-loads every `.md` file under `~/.claude/rules/` as
610
+ * an always-on rule (https://code.claude.com/docs/en/rules).
611
+ */
612
+ export async function syncRulesFiles({ dryRun = false, force = false } = {}) {
613
+ const src = join(REPO_ROOT, 'config', 'rules');
614
+ const dest = CLAUDE_RULES_DIR;
615
+ if (!existsSync(src)) {
616
+ return { ok: true, message: `no rules source at ${src}`, copied: 0, skipped: 0 };
617
+ }
618
+ if (dryRun) {
619
+ return { ok: true, message: `[dry-run] would sync ${src} → ${dest}` };
620
+ }
621
+ ensureDir(dest);
622
+ const { copied, skipped } = syncDir(src, dest, { filter: (n) => n.endsWith('.md') || n.endsWith('.txt') });
623
+ return { ok: true, message: `${copied} rule(s) synced (${skipped} kept)`, copied, skipped };
624
+ }
625
+
626
+ /**
627
+ * Copy `.claude/hooks/*.mjs` → `~/.claude/hooks/*.mjs`.
628
+ *
629
+ * Hook adapter scripts are real Node modules — Claude Code spawns them
630
+ * and pipes JSON on stdin / stdout. They must be `chmod +x` so Claude
631
+ * Code can `execve` them directly.
632
+ */
633
+ export async function syncHookFiles({ dryRun = false, force = false } = {}) {
634
+ const src = join(REPO_ROOT, '.claude', 'hooks');
635
+ const dest = CLAUDE_HOOKS_DIR;
636
+ ensureDir(dest);
637
+ if (!existsSync(src)) {
638
+ return { ok: true, message: `no hooks source at ${src}`, copied: 0, skipped: 0 };
639
+ }
640
+ if (dryRun) {
641
+ return { ok: true, message: `[dry-run] would sync ${src} → ${dest}` };
642
+ }
643
+ copyDirContents(src, dest);
644
+ // Make all scripts executable.
645
+ for (const name of readdirSync(dest)) {
646
+ const fp = join(dest, name);
647
+ try {
648
+ const st = statSync(fp);
649
+ if (st.isFile() && (name.endsWith('.sh') || name.endsWith('.mjs'))) {
650
+ chmodSync(fp, 0o755);
651
+ }
652
+ } catch { /* ignore */ }
653
+ }
654
+ return { ok: true, message: 'hook scripts installed', copied: readdirSync(dest).length, skipped: 0 };
655
+ }
656
+
657
+ // ─── settings.json ───────────────────────────────────────────────────────────
658
+
659
+ /**
660
+ * Generate `~/.claude/settings.json` with the Bizar harness surface:
661
+ * - $schema pointing to https://json.schemastore.org/claude-code-settings.json
662
+ * - mcpServers block registering the `bizar` MCP server (stdio)
663
+ * - permissions.allow for mcp__bizar__*
664
+ * - permissions.deny for dangerous patterns
665
+ * - hooks.PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd
666
+ * - env block with BIZAR_HOME, BIZAR_MEMORY_VAULT
667
+ *
668
+ * Idempotent — we merge with any existing settings.json (preserve
669
+ * user-added keys, never overwrite).
670
+ */
671
+ export function writeClaudeSettings({ dryRun = false, force = false } = {}) {
672
+ const fp = join(CLAUDE_DIR, 'settings.json');
673
+ const existing = readJsonSafe(fp, {}) || {};
674
+
675
+ const bizarSettings = {
676
+ $schema: 'https://json.schemastore.org/claude-code-settings.json',
677
+ mcpServers: {
678
+ bizar: {
679
+ type: 'stdio',
680
+ command: 'npx',
681
+ args: ['-y', '@polderlabs/bizar-sdk', 'mcp'],
682
+ env: {
683
+ BIZAR_HOME,
684
+ BIZAR_MEMORY_VAULT: process.env.BIZAR_MEMORY_VAULT || join(BIZAR_HOME, 'memory-vault'),
685
+ },
686
+ },
687
+ },
688
+ permissions: {
689
+ allow: ['mcp__bizar__*'],
690
+ deny: [
691
+ 'Read(./.env)',
692
+ 'Read(./.env.*)',
693
+ 'Bash(rm -rf /)',
694
+ 'Bash(sudo *)',
695
+ 'Write(./node_modules/**)',
696
+ 'Write(./package-lock.json)',
697
+ ],
698
+ },
699
+ env: {
700
+ BIZAR_HOME,
701
+ BIZAR_MEMORY_VAULT: process.env.BIZAR_MEMORY_VAULT || join(BIZAR_HOME, 'memory-vault'),
702
+ },
703
+ hooks: {
704
+ PreToolUse: [
705
+ {
706
+ matcher: 'Write|Edit|MultiEdit|Bash',
707
+ hooks: [
708
+ {
709
+ type: 'command',
710
+ command: join(CLAUDE_HOOKS_DIR, 'pretooluse-editwrite.mjs'),
711
+ timeout: 10,
712
+ },
713
+ ],
714
+ },
715
+ ],
716
+ PostToolUse: [
717
+ {
718
+ matcher: 'Edit|Write|MultiEdit',
719
+ hooks: [
720
+ {
721
+ type: 'command',
722
+ command: join(CLAUDE_HOOKS_DIR, 'posttooluse-editwrite.mjs'),
723
+ timeout: 10,
724
+ },
725
+ ],
726
+ },
727
+ ],
728
+ UserPromptSubmit: [
729
+ {
730
+ hooks: [
731
+ {
732
+ type: 'command',
733
+ command: join(CLAUDE_HOOKS_DIR, 'userpromptsubmit-tag.mjs'),
734
+ timeout: 10,
735
+ },
736
+ ],
737
+ },
738
+ ],
739
+ SessionStart: [
740
+ {
741
+ hooks: [
742
+ {
743
+ type: 'command',
744
+ command: join(CLAUDE_HOOKS_DIR, 'sessionstart-prime.mjs'),
745
+ timeout: 10,
746
+ },
747
+ ],
748
+ },
749
+ ],
750
+ SessionEnd: [
751
+ {
752
+ hooks: [
753
+ {
754
+ type: 'command',
755
+ command: join(CLAUDE_HOOKS_DIR, 'sessionend-record.mjs'),
756
+ timeout: 10,
757
+ },
758
+ ],
759
+ },
760
+ ],
761
+ },
762
+ };
763
+
764
+ // Merge bizarre-specific keys into existing settings, preserve user's
765
+ // unrelated keys (model, attribution, theme, etc.).
766
+ const merged = { ...existing };
767
+ if (force) {
768
+ Object.assign(merged, bizarSettings);
769
+ } else {
770
+ merged.$schema = merged.$schema || bizarSettings.$schema;
771
+ merged.mcpServers = { ...(existing.mcpServers || {}), ...bizarSettings.mcpServers };
772
+ merged.permissions = {
773
+ allow: [...new Set([...(existing.permissions?.allow || []), ...bizarSettings.permissions.allow])],
774
+ deny: [...new Set([...(existing.permissions?.deny || []), ...bizarSettings.permissions.deny])],
775
+ ask: [...new Set([...(existing.permissions?.ask || [])])],
776
+ };
777
+ merged.env = { ...(existing.env || {}), ...bizarSettings.env };
778
+ merged.hooks = { ...(existing.hooks || {}), ...bizarSettings.hooks };
779
+ }
780
+
781
+ if (dryRun) {
782
+ return { ok: true, message: `[dry-run] would write ${fp}` };
783
+ }
784
+ ensureDir(CLAUDE_DIR);
785
+ writeFileSync(fp, JSON.stringify(merged, null, 2) + '\n');
786
+ return { ok: true, message: `wrote ${fp}`, path: fp };
787
+ }
788
+
789
+ // ─── CLAUDE.md mirror ──────────────────────────────────────────────────────
790
+
791
+ /**
792
+ * Mirror the repo's `AGENTS.md` into `~/.claude/CLAUDE.md`.
793
+ *
794
+ * Claude Code reads `~/.claude/CLAUDE.md` at session start as a global
795
+ * memory file. Mirroring `AGENTS.md` (the canonical harness entry
796
+ * point) makes the project's always-on rules available to every
797
+ * Claude Code session for the user, not just project-scoped sessions.
798
+ */
799
+ export function writeClaudeMdMirror({ dryRun = false, force = false } = {}) {
800
+ const srcCandidates = [
801
+ join(REPO_ROOT, 'AGENTS.md'),
802
+ join(REPO_ROOT, 'CLAUDE.md'),
803
+ ];
804
+ const src = srcCandidates.find((p) => existsSync(p));
805
+ const dest = join(CLAUDE_DIR, 'CLAUDE.md');
806
+ if (!src) {
807
+ return { ok: false, message: 'no CLAUDE.md / AGENTS.md found in repo root' };
808
+ }
809
+ if (existsSync(dest) && !force) {
810
+ return { ok: true, message: `${dest} already exists — pass --force to overwrite` };
811
+ }
812
+ if (dryRun) {
813
+ return { ok: true, message: `[dry-run] would mirror ${src} → ${dest}` };
814
+ }
815
+ ensureDir(CLAUDE_DIR);
816
+ // Add a banner so users know this is auto-generated.
817
+ const body = readFileSync(src, 'utf8');
818
+ const banner =
819
+ `# CLAUDE.md — Mirror of AGENTS.md for Claude Code compatibility\n\n` +
820
+ `> Auto-generated by \`cli/provision-claude.mjs:writeClaudeMdMirror\`.\n` +
821
+ `> DO NOT EDIT THIS FILE DIRECTLY — edit the project root's \`AGENTS.md\`\n` +
822
+ `> and re-run \`bizar update\` (or \`make mirror-claude-md\`) to refresh.\n\n` +
823
+ `---\n\n`;
824
+ writeFileSync(dest, banner + body);
825
+ return { ok: true, message: `mirrored ${src} → ${dest}`, path: dest };
826
+ }
827
+
828
+ // ─── MCP server registration ─────────────────────────────────────────────────
829
+
830
+ /**
831
+ * Register the `bizar` MCP server via `claude mcp add`. Idempotent —
832
+ * if the server is already registered in settings.json, we skip the
833
+ * `claude mcp add` call.
834
+ *
835
+ * Per https://code.claude.com/docs/en/mcp, the canonical way to add a
836
+ * stdio MCP server is:
837
+ *
838
+ * claude mcp add <name> -- <command> [args...]
839
+ */
840
+ export function setupMcpServer({ dryRun = false } = {}) {
841
+ // Idempotency probe: read existing settings.json and look for a
842
+ // bizar MCP server entry. If present, skip.
843
+ const settingsPath = join(CLAUDE_DIR, 'settings.json');
844
+ const existing = readJsonSafe(settingsPath, null);
845
+ if (existing && existing.mcpServers && existing.mcpServers.bizar) {
846
+ return { ok: true, message: `bizar MCP server already registered in ${settingsPath}` };
847
+ }
848
+
849
+ if (!haveCmd('claude')) {
850
+ return { ok: false, message: 'claude CLI not on PATH — install @anthropic-ai/claude-code first' };
851
+ }
852
+ if (dryRun) {
853
+ return { ok: true, message: '[dry-run] would run: claude mcp add bizar -- npx -y @polderlabs/bizar-sdk mcp' };
854
+ }
855
+
856
+ const r = spawnSync('claude', [
857
+ 'mcp', 'add', '-f', '-s', 'user', 'bizar', '--',
858
+ 'npx', '-y', '@polderlabs/bizar-sdk', 'mcp',
859
+ ], { stdio: 'inherit', timeout: 60_000 });
860
+
861
+ if (r.status !== 0) {
862
+ return { ok: false, message: `claude mcp add exited with code ${r.status}` };
863
+ }
864
+ return { ok: true, message: 'bizar MCP server registered via `claude mcp add`' };
865
+ }
866
+
867
+ /**
868
+ * If `./.claude-plugin/plugin.json` exists, install the Bizar plugin
869
+ * via `claude plugin install .`. Per
870
+ * https://code.claude.com/docs/en/plugins, a Claude Code plugin is a
871
+ * directory containing a `.claude-plugin/plugin.json` manifest.
872
+ */
873
+ export function setupClaudePlugin({ dryRun = false } = {}) {
874
+ const manifestPath = join(REPO_ROOT, '.claude-plugin', 'plugin.json');
875
+ if (!existsSync(manifestPath)) {
876
+ return { ok: true, message: `no plugin manifest at ${manifestPath} — skipping plugin install` };
877
+ }
878
+ if (!haveCmd('claude')) {
879
+ return { ok: false, message: 'claude CLI not on PATH — install @anthropic-ai/claude-code first' };
880
+ }
881
+ if (dryRun) {
882
+ return { ok: true, message: `[dry-run] would run: claude plugin install ${REPO_ROOT}` };
883
+ }
884
+
885
+ const r = spawnSync('claude', ['plugin', 'install', '.'], {
886
+ stdio: 'inherit',
887
+ timeout: 120_000,
888
+ cwd: REPO_ROOT,
889
+ });
890
+ if (r.status !== 0) {
891
+ return { ok: false, message: `claude plugin install exited with code ${r.status}` };
892
+ }
893
+ return { ok: true, message: `claude plugin installed from ${REPO_ROOT}` };
894
+ }
895
+
896
+ // ─── Dashboard service ───────────────────────────────────────────────────────
897
+
898
+ function installDashboardService({ dryRun = false, start = true } = {}) {
899
+ const bin = join(REPO_ROOT, 'cli', 'bin.mjs');
900
+ if (!existsSync(bin)) {
901
+ return { ok: false, message: `cli/bin.mjs not found at ${bin} — service registration deferred` };
902
+ }
903
+ if (dryRun) {
904
+ return { ok: true, message: `[dry-run] would run: node ${bin} service install` };
905
+ }
906
+ const r = spawnSync('node', [bin, 'service', 'install'], { stdio: 'inherit' });
907
+ if (r.status !== 0) {
908
+ return { ok: false, message: `service install returned ${r.status}` };
909
+ }
910
+ return { ok: true, message: 'dashboard service registered' };
911
+ }
912
+
913
+ // ─── Detection ───────────────────────────────────────────────────────────────
914
+
915
+ /**
916
+ * Probe the current state without modifying anything. Both install and
917
+ * update flows start here so they can decide what to skip.
918
+ *
919
+ * Returned shape:
920
+ * {
921
+ * claudeDir: string,
922
+ * claudeCli: { available, version },
923
+ * agentsDir: { exists, count },
924
+ * skillsDir: { exists, count },
925
+ * commandsDir: { exists, count },
926
+ * hooksDir: { exists, count },
927
+ * rulesDir: { exists, count },
928
+ * settingsFile: { exists, parses },
929
+ * mcpServer: { registered, type, command },
930
+ * pluginManifest: { exists },
931
+ * bizarHome: { exists },
932
+ * gitRepo: boolean,
933
+ * }
934
+ */
935
+ export function detectState() {
936
+ const settingsPath = join(CLAUDE_DIR, 'settings.json');
937
+ const settings = readJsonSafe(settingsPath, null);
938
+
939
+ let claudeVersion = null;
940
+ try {
941
+ claudeVersion = execFileSync('claude', ['--version'], { encoding: 'utf8', timeout: 5000 })
942
+ .toString().trim().split('\n')[0] || null;
943
+ } catch { /* not installed */ }
944
+
945
+ const countMd = (dir) => {
946
+ if (!existsSync(dir)) return 0;
947
+ try {
948
+ return readdirSync(dir, { withFileTypes: true })
949
+ .filter((e) => e.isFile() && (e.name.endsWith('.md') || e.name.endsWith('.mjs'))).length;
950
+ } catch { return 0; }
951
+ };
952
+ const countSkillDirs = (dir) => {
953
+ if (!existsSync(dir)) return 0;
954
+ try {
955
+ return readdirSync(dir, { withFileTypes: true }).filter((e) => e.isDirectory()).length;
956
+ } catch { return 0; }
957
+ };
958
+
959
+ const mcpServer = settings && settings.mcpServers && settings.mcpServers.bizar
960
+ ? {
961
+ registered: true,
962
+ type: settings.mcpServers.bizar.type || 'stdio',
963
+ command: settings.mcpServers.bizar.command || 'npx',
964
+ }
965
+ : { registered: false };
966
+
967
+ return {
968
+ claudeDir: CLAUDE_DIR,
969
+ claudeCli: { available: !!claudeVersion, version: claudeVersion },
970
+ agentsDir: { exists: existsSync(CLAUDE_AGENTS_DIR), count: countMd(CLAUDE_AGENTS_DIR) },
971
+ skillsDir: { exists: existsSync(CLAUDE_SKILLS_DIR), count: countSkillDirs(CLAUDE_SKILLS_DIR) },
972
+ commandsDir: { exists: existsSync(CLAUDE_COMMANDS_DIR), count: countMd(CLAUDE_COMMANDS_DIR) },
973
+ hooksDir: { exists: existsSync(CLAUDE_HOOKS_DIR), count: countMd(CLAUDE_HOOKS_DIR) },
974
+ rulesDir: { exists: existsSync(CLAUDE_RULES_DIR), count: countMd(CLAUDE_RULES_DIR) },
975
+ settingsFile: {
976
+ exists: existsSync(settingsPath),
977
+ parses: settings !== null && typeof settings === 'object',
978
+ path: settingsPath,
979
+ },
980
+ mcpServer,
981
+ pluginManifest: { exists: existsSync(join(REPO_ROOT, '.claude-plugin', 'plugin.json')) },
982
+ bizarHome: { exists: existsSync(BIZAR_HOME), path: BIZAR_HOME },
983
+ gitRepo: existsSync(join(REPO_ROOT, '.git')),
984
+ };
985
+ }
986
+
987
+ /** Read-only JSON snapshot of detectState() — for diagnostics + tests. */
988
+ export function detectStateJson() {
989
+ return JSON.stringify(detectState(), null, 2);
990
+ }
991
+
992
+ // ─── Top-level orchestration ─────────────────────────────────────────────────
993
+
994
+ /**
995
+ * The unified provision flow. `mode` is 'install' or 'update'.
996
+ *
997
+ * Steps performed:
998
+ * 1. Detect state (no side effects).
999
+ * 2. Ensure ~/.bizar_home/ exists (memory-vault, loops, port file).
1000
+ * 3. Check toolchain + install Claude Code CLI if missing.
1001
+ * 4. Sync agent files to ~/.claude/agents/.
1002
+ * 5. Sync skills to ~/.claude/skills/.
1003
+ * 6. Sync commands to ~/.claude/commands/.
1004
+ * 7. Sync rules to ~/.claude/rules/.
1005
+ * 8. Sync hook adapter scripts to ~/.claude/hooks/.
1006
+ * 9. Write ~/.claude/settings.json with MCP + hooks + permissions + env.
1007
+ * 10. Register the Bizar MCP server via `claude mcp add`.
1008
+ * 11. Install the Bizar plugin via `claude plugin install .` (optional).
1009
+ * 12. Mirror AGENTS.md → ~/.claude/CLAUDE.md.
1010
+ * 13. (install) Register dashboard service.
1011
+ * 14. Print summary.
1012
+ *
1013
+ * Every step is idempotent — running this twice is safe.
1014
+ */
1015
+ export async function runProvision(opts = {}) {
1016
+ const {
1017
+ mode = 'install',
1018
+ dryRun = false,
1019
+ force = false,
1020
+ yes = false,
1021
+ start = true,
1022
+ } = opts;
1023
+
1024
+ const effectiveMode = mode === 'update' ? 'update' : 'install';
1025
+
1026
+ console.log('');
1027
+ console.log(chalk.bold.cyan(' ⚡ BizarHarness Provisioner v6.3.0 (Claude Code)'));
1028
+ console.log(chalk.dim(` Mode: ${effectiveMode}${force ? ' (force)' : ''}${dryRun ? ' (dry-run)' : ''}`));
1029
+ console.log('');
1030
+
1031
+ // ── 1. Detect state ──────────────────────────────────────────────────
1032
+ const state = detectState();
1033
+
1034
+ // ── 2. Bizar HOME bootstrap ──────────────────────────────────────────
1035
+ section('Bizar HOME');
1036
+ const bizarHomeStep = ensureBizarHome({ dryRun });
1037
+ if (bizarHomeStep.ok) logOk(bizarHomeStep.message);
1038
+ else logErr(bizarHomeStep.message);
1039
+
1040
+ // ── 3. Toolchain ────────────────────────────────────────────────────
1041
+ checkToolchain();
1042
+ installClaudeCli({ force, dryRun });
1043
+
1044
+ // ── 4-8. File sync ──────────────────────────────────────────────────
1045
+ const stepResults = [];
1046
+ const runStep = async (label, fn) => {
1047
+ section(label);
1048
+ const r = await fn();
1049
+ const marker = r.ok ? '✓' : '✗';
1050
+ console.log(` ${marker} ${r.message}`);
1051
+ stepResults.push({ label, ...r });
1052
+ return r;
1053
+ };
1054
+
1055
+ await runStep('Syncing agents', () => syncAgentFiles({ dryRun, force }));
1056
+ await runStep('Syncing skills', () => syncSkillFiles({ dryRun, force }));
1057
+ await runStep('Syncing commands', () => syncCommandFiles({ dryRun, force }));
1058
+ await runStep('Syncing rules', () => syncRulesFiles({ dryRun, force }));
1059
+ await runStep('Syncing hooks', () => syncHookFiles({ dryRun, force }));
1060
+
1061
+ // ── 4b. Build the SDK workspace so dist/ exists. ────────────────────
1062
+ // The dashboard imports from packages/sdk/dist/* at runtime; without
1063
+ // this step v7.0.0+ npm installs crash on dashboard startup because
1064
+ // the SDK ships as TS source only. See `buildSdk()` JSDoc for the
1065
+ // full story.
1066
+ await runStep('Building SDK', () => buildSdk({ dryRun }));
1067
+
1068
+ // ── 4b.2. Build the Bizar plugin shim so dist/index.js exists. ────
1069
+ // The loader expects `plugins/bizar/dist/index.js`. Without this
1070
+ // step v8.0.x npm installs crash on `bizar dash start` with
1071
+ // `Plugin source not found at .../plugins/bizar` from
1072
+ // `cli/install.mjs:installPluginBizar` (the dir exists, but the
1073
+ // compiled entry does not). See `buildPlugin()` JSDoc.
1074
+ await runStep('Building plugin', () => buildPlugin({ dryRun }));
1075
+
1076
+ // ── 4c. Build the dashboard SPA so dist/index.html exists. ───────────
1077
+ // The Node server in `bizar-dash/src/server/server.mjs` serves the
1078
+ // React UI from `bizar-dash/dist/`. The published npm tarball excludes
1079
+ // `dist/` because it is `.gitignore`'d, so a fresh install must
1080
+ // rebuild it. Skips when already present (idempotent). See
1081
+ // `buildDash()` JSDoc for the v7.0.3 reason this step exists.
1082
+ await runStep('Building dashboard', () => buildDash({ dryRun }));
1083
+
1084
+ // ── 9. settings.json (MCP + hooks + permissions + env) ──────────────
1085
+ section('Writing settings.json');
1086
+ const settingsStep = writeClaudeSettings({ dryRun, force });
1087
+ if (settingsStep.ok) logOk(settingsStep.message); else logErr(settingsStep.message);
1088
+ stepResults.push({ label: 'settings.json', ...settingsStep });
1089
+
1090
+ // ── 10. MCP server registration ──────────────────────────────────────
1091
+ section('MCP server (bizar)');
1092
+ const mcpStep = setupMcpServer({ dryRun });
1093
+ if (mcpStep.ok) logOk(mcpStep.message); else logWarn(mcpStep.message);
1094
+ stepResults.push({ label: 'mcp-server', ...mcpStep });
1095
+
1096
+ // ── 11. Plugin install (optional) ───────────────────────────────────
1097
+ section('Claude plugin');
1098
+ const pluginStep = setupClaudePlugin({ dryRun });
1099
+ if (pluginStep.ok) logOk(pluginStep.message); else logWarn(pluginStep.message);
1100
+ stepResults.push({ label: 'claude-plugin', ...pluginStep });
1101
+
1102
+ // ── 12. CLAUDE.md mirror ────────────────────────────────────────────
1103
+ section('CLAUDE.md mirror');
1104
+ const claudeMdStep = writeClaudeMdMirror({ dryRun, force });
1105
+ if (claudeMdStep.ok) logOk(claudeMdStep.message); else logWarn(claudeMdStep.message);
1106
+ stepResults.push({ label: 'claude-md', ...claudeMdStep });
1107
+
1108
+ // ── 13. Dashboard service ───────────────────────────────────────────
1109
+ if (start && effectiveMode === 'install') {
1110
+ section('Dashboard service');
1111
+ const svcStep = installDashboardService({ dryRun });
1112
+ if (svcStep.ok) logOk(svcStep.message); else logWarn(svcStep.message);
1113
+ stepResults.push({ label: 'service', ...svcStep });
1114
+ }
1115
+
1116
+ // ── 14. Summary ─────────────────────────────────────────────────────
1117
+ section('Provision complete');
1118
+ const finalState = detectState();
1119
+ console.log(chalk.dim(JSON.stringify(finalState, null, 2)));
1120
+ console.log('');
1121
+ const anyFail = stepResults.some((r) => !r.ok);
1122
+ if (anyFail) {
1123
+ console.log(chalk.yellow(' ⚠ Some steps had issues. See messages above.'));
1124
+ } else {
1125
+ console.log(chalk.bold.green(' ✓ Bizar is ready.'));
1126
+ console.log(chalk.dim(' Next: restart your Claude Code session to pick up the new config.'));
1127
+ }
1128
+ console.log('');
1129
+ return { ok: !anyFail, mode: effectiveMode, state: finalState, stepResults };
1130
+ }
1131
+
1132
+ // ─── CLI entry ───────────────────────────────────────────────────────────────
1133
+
1134
+ function parseFlags(argv) {
1135
+ const opts = {
1136
+ mode: 'install',
1137
+ dryRun: false,
1138
+ force: false,
1139
+ yes: false,
1140
+ start: true,
1141
+ update: false,
1142
+ };
1143
+ for (let i = 0; i < argv.length; i++) {
1144
+ const a = argv[i];
1145
+ if (a === '--mode=install') opts.mode = 'install';
1146
+ else if (a === '--mode=update') opts.mode = 'update';
1147
+ else if (a === '--mode=install-only-system') opts.mode = 'install-only-system';
1148
+ else if (a === '--mode') {
1149
+ const v = argv[++i];
1150
+ if (v === 'install' || v === 'update' || v === 'install-only-system') opts.mode = v;
1151
+ }
1152
+ else if (a === '--dry-run') opts.dryRun = true;
1153
+ else if (a === '--force') opts.force = true;
1154
+ else if (a === '--yes' || a === '-y') opts.yes = true;
1155
+ else if (a === '--non-interactive') opts.yes = true;
1156
+ else if (a === '--no-service') opts.start = false;
1157
+ else if (a === '--update') opts.mode = 'update';
1158
+ else if (a === '--help' || a === '-h') {
1159
+ console.log(
1160
+ 'Usage: node cli/provision-claude.mjs [--mode=install|update|install-only-system]\n' +
1161
+ ' [--dry-run] [--force] [--yes] [--non-interactive] [--no-service]',
1162
+ );
1163
+ process.exit(0);
1164
+ }
1165
+ }
1166
+ if (opts.mode === 'update') opts.update = true;
1167
+ return opts;
1168
+ }
1169
+
1170
+ if (import.meta.url === `file://${process.argv[1]}`) {
1171
+ const opts = parseFlags(process.argv.slice(2));
1172
+ runProvision(opts).catch((err) => {
1173
+ logErr(`provision failed: ${err?.message || err}`);
1174
+ process.exit(1);
1175
+ });
1176
+ }