@polderlabs/bizar 6.2.5 → 6.3.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 (329) hide show
  1. package/.claude/CLAUDE.md +15 -0
  2. package/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
  3. package/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
  4. package/.claude/agents/_shared/SKILLS.md +109 -0
  5. package/.claude/agents/agent-browser.md +80 -0
  6. package/.claude/agents/baldr.md +49 -0
  7. package/.claude/agents/forseti.md +51 -0
  8. package/.claude/agents/frigg.md +42 -0
  9. package/.claude/agents/heimdall.md +33 -0
  10. package/.claude/agents/hermod.md +53 -0
  11. package/.claude/agents/mimir.md +49 -0
  12. package/.claude/agents/odin.md +287 -0
  13. package/.claude/agents/quick.md +34 -0
  14. package/.claude/agents/semble-search.md +50 -0
  15. package/.claude/agents/thor.md +53 -0
  16. package/.claude/agents/tyr.md +56 -0
  17. package/.claude/agents/vidarr.md +54 -0
  18. package/.claude/agents/vor.md +53 -0
  19. package/.claude/commands/audit.md +25 -0
  20. package/.claude/commands/bizar.md +22 -0
  21. package/.claude/commands/explain.md +17 -0
  22. package/.claude/commands/init.md +29 -0
  23. package/.claude/commands/learn.md +44 -0
  24. package/.claude/commands/plan.md +35 -0
  25. package/.claude/commands/plow-through.md +50 -0
  26. package/.claude/commands/pr-review.md +49 -0
  27. package/.claude/commands/setup-provider.md +96 -0
  28. package/.claude/commands/tailscale-serve.md +100 -0
  29. package/.claude/commands/team.md +132 -0
  30. package/.claude/commands/test.md +62 -0
  31. package/.claude/commands/validate.md +68 -0
  32. package/.claude/commands/visual-plan.md +24 -0
  33. package/.claude/hooks/README.md +92 -0
  34. package/.claude/hooks/posttooluse-editwrite.mjs +91 -0
  35. package/.claude/hooks/pretooluse-bash.mjs +81 -0
  36. package/.claude/hooks/pretooluse-editwrite.mjs +139 -0
  37. package/.claude/hooks/sessionend-recall.mjs +74 -0
  38. package/.claude/hooks/sessionstart-prime.mjs +80 -0
  39. package/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
  40. package/.claude/settings.json +116 -0
  41. package/.claude/skills/9router/SKILL.md +80 -0
  42. package/.claude/skills/9router-chat/SKILL.md +73 -0
  43. package/.claude/skills/9router-embeddings/SKILL.md +69 -0
  44. package/.claude/skills/9router-image/SKILL.md +86 -0
  45. package/.claude/skills/9router-stt/SKILL.md +79 -0
  46. package/.claude/skills/9router-tts/SKILL.md +80 -0
  47. package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
  48. package/.claude/skills/9router-web-search/SKILL.md +91 -0
  49. package/.claude/skills/bizar/README.md +9 -0
  50. package/.claude/skills/bizar/SKILL.md +450 -0
  51. package/.claude/skills/cpp-coding-standards/README.md +28 -0
  52. package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
  53. package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
  54. package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
  55. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  56. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  57. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  58. package/.claude/skills/cpp-testing/README.md +28 -0
  59. package/.claude/skills/cpp-testing/SKILL.md +304 -0
  60. package/.claude/skills/cpp-testing/references/coverage.md +370 -0
  61. package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
  62. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  63. package/.claude/skills/cpp-testing/references/mocking.md +364 -0
  64. package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
  65. package/.claude/skills/cubesandbox/SKILL.md +148 -0
  66. package/.claude/skills/embedded-esp-idf/README.md +41 -0
  67. package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
  68. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  69. package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
  70. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  71. package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
  72. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  73. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  74. package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
  75. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  76. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  77. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  78. package/.claude/skills/glyph/SKILL.md +163 -0
  79. package/.claude/skills/harness-engineering/SKILL.md +143 -0
  80. package/.claude/skills/lightrag/SKILL.md +81 -0
  81. package/.claude/skills/memory-protocol/SKILL.md +105 -0
  82. package/.claude/skills/obsidian/SKILL.md +306 -0
  83. package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
  84. package/.claude/skills/self-improvement/SKILL.md +64 -0
  85. package/README.md +87 -59
  86. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js → EnvVarsSection-B58aiJiE.js} +1 -1
  87. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-B58aiJiE.js.map} +1 -1
  88. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js → MobileChat-BJrqwVDd.js} +1 -1
  89. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-BJrqwVDd.js.map} +1 -1
  90. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js → MobileSettings-CEQNJNLJ.js} +1 -1
  91. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-CEQNJNLJ.js.map} +1 -1
  92. package/bizar-dash/dist/assets/{main-DYiZqMrn.js → main-IvfQAOfy.js} +1 -1
  93. package/bizar-dash/dist/assets/{main-DYiZqMrn.js.map → main-IvfQAOfy.js.map} +1 -1
  94. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js → markdown-tOLaD6nm.js} +1 -1
  95. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-tOLaD6nm.js.map} +1 -1
  96. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js → mobile-DYCHcUpq.js} +1 -1
  97. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DYCHcUpq.js.map} +1 -1
  98. package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js → mobile-layout-CBHjpwsb.js} +2 -2
  99. package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js.map → mobile-layout-CBHjpwsb.js.map} +1 -1
  100. package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js → useSlashCommands-Bd7_FA6U.js} +2 -2
  101. package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js.map → useSlashCommands-Bd7_FA6U.js.map} +1 -1
  102. package/bizar-dash/dist/assets/{vendor-CeHGtduv.js → vendor-C843201K.js} +12 -12
  103. package/bizar-dash/dist/assets/vendor-C843201K.js.map +1 -0
  104. package/bizar-dash/dist/index.html +6 -6
  105. package/bizar-dash/dist/mobile.html +2 -2
  106. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  107. package/bizar-dash/src/server/api.mjs +4 -4
  108. package/bizar-dash/src/server/background-store.mjs +15 -16
  109. package/bizar-dash/src/server/bg-poller.mjs +25 -35
  110. package/bizar-dash/src/server/bg-retry.mjs +66 -194
  111. package/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
  112. package/bizar-dash/src/server/claude-info.mjs +412 -0
  113. package/bizar-dash/src/server/{cline-runner.mjs → claude-runner.mjs} +53 -48
  114. package/bizar-dash/src/server/claude-sdk.mjs +191 -0
  115. package/bizar-dash/src/server/providers-store.mjs +22 -49
  116. package/bizar-dash/src/server/routes/background.mjs +24 -20
  117. package/bizar-dash/src/server/routes/chat.mjs +223 -326
  118. package/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
  119. package/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
  120. package/bizar-dash/src/server/routes/tasks.mjs +20 -28
  121. package/bizar-dash/src/server/task-delegator.mjs +76 -77
  122. package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
  123. package/bizar-dash/src/web/views/Chat.tsx +8 -8
  124. package/cli/bin.mjs +17 -18
  125. package/cli/commands/claude-cmd.mjs +348 -0
  126. package/cli/commands/install.mjs +12 -11
  127. package/cli/commands/validate.mjs +252 -325
  128. package/cli/dev-link.test.mjs +11 -11
  129. package/cli/doctor.mjs +131 -213
  130. package/cli/install.mjs +33 -37
  131. package/cli/install.test.mjs +9 -9
  132. package/cli/provision-claude.mjs +893 -0
  133. package/cli/provision.mjs +224 -227
  134. package/cli/utils.mjs +72 -58
  135. package/config/AGENTS.md +28 -28
  136. package/install.sh +66 -44
  137. package/package.json +19 -11
  138. package/packages/sdk/ARCHITECTURE.md +40 -36
  139. package/packages/sdk/package-lock.json +32 -0
  140. package/packages/sdk/package.json +15 -5
  141. package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
  142. package/packages/sdk/src/fingerprint.ts +0 -0
  143. package/packages/sdk/src/index.ts +38 -73
  144. package/packages/sdk/src/mcp/bin.ts +51 -0
  145. package/packages/sdk/src/mcp/server.ts +498 -0
  146. package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
  147. package/packages/sdk/tests/sdk.test.mjs +148 -0
  148. package/packages/sdk/vitest.config.ts +1 -1
  149. package/scripts/bh-full-e2e.mjs +166 -363
  150. package/scripts/check-deps.mjs +28 -46
  151. package/scripts/mirror-claude-md.sh +78 -0
  152. package/scripts/test-in-container.sh +31 -9
  153. package/templates/clean-state-checklist.md +3 -3
  154. package/templates/sprint-contract.md +2 -2
  155. package/bizar-dash/.bizar/activity.log +0 -3
  156. package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
  157. package/bizar-dash/.omx/state/session.json +0 -10
  158. package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
  159. package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
  160. package/bizar-dash/bizar-design/canvas.html +0 -281
  161. package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
  162. package/bizar-dash/bizar-design/components.css +0 -1665
  163. package/bizar-dash/bizar-design/components.html +0 -557
  164. package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
  165. package/bizar-dash/bizar-design/desktop/agents.html +0 -74
  166. package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
  167. package/bizar-dash/bizar-design/desktop/memory.html +0 -75
  168. package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
  169. package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
  170. package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
  171. package/bizar-dash/bizar-design/desktop/overview.html +0 -95
  172. package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
  173. package/bizar-dash/bizar-design/desktop/settings.html +0 -70
  174. package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
  175. package/bizar-dash/bizar-design/icons.svg +0 -44
  176. package/bizar-dash/bizar-design/index.html +0 -192
  177. package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
  178. package/bizar-dash/bizar-design/mobile/agents.html +0 -29
  179. package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
  180. package/bizar-dash/bizar-design/mobile/memory.html +0 -28
  181. package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
  182. package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
  183. package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
  184. package/bizar-dash/bizar-design/mobile/overview.html +0 -33
  185. package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
  186. package/bizar-dash/bizar-design/mobile/settings.html +0 -28
  187. package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
  188. package/bizar-dash/bizar-design/prototype.js +0 -114
  189. package/bizar-dash/bizar-design/tokens.css +0 -106
  190. package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
  191. package/bizar-dash/node_modules/.package-lock.json +0 -6
  192. package/bizar-dash/package-lock.json +0 -6
  193. package/bizar-dash/src/server/cline-sdk.mjs +0 -132
  194. package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
  195. package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
  196. package/cli/commands/cline-cmd.mjs +0 -289
  197. package/cli/commands/validate.test.mjs +0 -379
  198. package/cli/doctor.test.mjs +0 -350
  199. package/config/cline.json.template +0 -342
  200. package/packages/sdk/src/client.ts +0 -188
  201. package/packages/sdk/src/cline-events.ts +0 -134
  202. package/packages/sdk/src/cline-types.ts +0 -66
  203. package/packages/sdk/src/cline.ts +0 -339
  204. package/packages/sdk/src/errors.ts +0 -129
  205. package/packages/sdk/src/events.ts +0 -153
  206. package/packages/sdk/src/types.ts +0 -176
  207. package/packages/sdk/tests/client.test.ts +0 -217
  208. package/packages/sdk/tests/errors.test.ts +0 -108
  209. package/packages/sdk/tests/events.test.ts +0 -139
  210. package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
  211. package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
  212. package/plugins/bizar/ARCHITECTURE.md +0 -142
  213. package/plugins/bizar/CONSTRAINTS.md +0 -67
  214. package/plugins/bizar/LICENSE +0 -21
  215. package/plugins/bizar/README.md +0 -448
  216. package/plugins/bizar/index.ts +0 -925
  217. package/plugins/bizar/package.json +0 -39
  218. package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
  219. package/plugins/bizar/src/background-state.ts +0 -641
  220. package/plugins/bizar/src/background.ts +0 -1806
  221. package/plugins/bizar/src/cline-runner.ts +0 -203
  222. package/plugins/bizar/src/clineruntime.ts +0 -227
  223. package/plugins/bizar/src/commands-impl.ts +0 -151
  224. package/plugins/bizar/src/commands.ts +0 -1799
  225. package/plugins/bizar/src/compaction.d.mts +0 -48
  226. package/plugins/bizar/src/compaction.mjs +0 -192
  227. package/plugins/bizar/src/dashboard-client.ts +0 -233
  228. package/plugins/bizar/src/event-stream.ts +0 -606
  229. package/plugins/bizar/src/fingerprint.ts +0 -120
  230. package/plugins/bizar/src/handoff.ts +0 -79
  231. package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
  232. package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
  233. package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
  234. package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
  235. package/plugins/bizar/src/http-client.ts +0 -467
  236. package/plugins/bizar/src/key-rotation.ts +0 -218
  237. package/plugins/bizar/src/logger.ts +0 -144
  238. package/plugins/bizar/src/loop-engineering.ts +0 -241
  239. package/plugins/bizar/src/loop.ts +0 -176
  240. package/plugins/bizar/src/mistake-recovery.ts +0 -98
  241. package/plugins/bizar/src/odin.ts +0 -227
  242. package/plugins/bizar/src/options.ts +0 -470
  243. package/plugins/bizar/src/plan-fs.ts +0 -323
  244. package/plugins/bizar/src/reasoning-clean.ts +0 -454
  245. package/plugins/bizar/src/report.ts +0 -178
  246. package/plugins/bizar/src/research-prompt.ts +0 -35
  247. package/plugins/bizar/src/serve-info.ts +0 -228
  248. package/plugins/bizar/src/serve.ts +0 -496
  249. package/plugins/bizar/src/settings.ts +0 -349
  250. package/plugins/bizar/src/state.ts +0 -298
  251. package/plugins/bizar/src/tool-discipline.ts +0 -105
  252. package/plugins/bizar/src/tools/agent-browser.ts +0 -315
  253. package/plugins/bizar/src/tools/bg-collect.ts +0 -131
  254. package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
  255. package/plugins/bizar/src/tools/bg-kill.ts +0 -116
  256. package/plugins/bizar/src/tools/bg-pause.ts +0 -99
  257. package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
  258. package/plugins/bizar/src/tools/bg-resume.ts +0 -94
  259. package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
  260. package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
  261. package/plugins/bizar/src/tools/bg-status.ts +0 -130
  262. package/plugins/bizar/src/tools/graph-query.ts +0 -278
  263. package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
  264. package/plugins/bizar/src/tools/memory-list.ts +0 -43
  265. package/plugins/bizar/src/tools/memory-read.ts +0 -69
  266. package/plugins/bizar/src/tools/memory-search.ts +0 -47
  267. package/plugins/bizar/src/tools/memory-write.ts +0 -54
  268. package/plugins/bizar/src/tools/open-kb.ts +0 -198
  269. package/plugins/bizar/src/tools/plan-action.ts +0 -785
  270. package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
  271. package/plugins/bizar/src/tools/sandbox.ts +0 -232
  272. package/plugins/bizar/src/tools/team-spawn.ts +0 -73
  273. package/plugins/bizar/src/tools/team-status.ts +0 -76
  274. package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
  275. package/plugins/bizar/src/trajectory.ts +0 -104
  276. package/plugins/bizar/tests/README.md +0 -99
  277. package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
  278. package/plugins/bizar/tests/background-state.test.ts +0 -277
  279. package/plugins/bizar/tests/background.test.ts +0 -402
  280. package/plugins/bizar/tests/block.test.ts +0 -195
  281. package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
  282. package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
  283. package/plugins/bizar/tests/commands-impl.test.ts +0 -316
  284. package/plugins/bizar/tests/commands.test.ts +0 -584
  285. package/plugins/bizar/tests/compaction.test.ts +0 -264
  286. package/plugins/bizar/tests/config.test.ts +0 -128
  287. package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
  288. package/plugins/bizar/tests/dispose.test.ts +0 -336
  289. package/plugins/bizar/tests/event-stream.test.ts +0 -409
  290. package/plugins/bizar/tests/event.test.ts +0 -262
  291. package/plugins/bizar/tests/fingerprint.test.ts +0 -190
  292. package/plugins/bizar/tests/http-client.test.ts +0 -404
  293. package/plugins/bizar/tests/init-helpers.test.ts +0 -203
  294. package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
  295. package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
  296. package/plugins/bizar/tests/key-rotation.test.ts +0 -396
  297. package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
  298. package/plugins/bizar/tests/loop.test.ts +0 -397
  299. package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
  300. package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
  301. package/plugins/bizar/tests/odin.test.ts +0 -125
  302. package/plugins/bizar/tests/options.test.ts +0 -329
  303. package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
  304. package/plugins/bizar/tests/safety.test.ts +0 -281
  305. package/plugins/bizar/tests/serve.test.ts +0 -339
  306. package/plugins/bizar/tests/settings.test.ts +0 -351
  307. package/plugins/bizar/tests/stall-think.test.ts +0 -750
  308. package/plugins/bizar/tests/state.test.ts +0 -276
  309. package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
  310. package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
  311. package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
  312. package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
  313. package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
  314. package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
  315. package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
  316. package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
  317. package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
  318. package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
  319. package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
  320. package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
  321. package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
  322. package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
  323. package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
  324. package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
  325. package/plugins/bizar/tests/tools/sandbox.test.ts +0 -117
  326. package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
  327. package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
  328. package/plugins/bizar/tsconfig.json +0 -29
  329. package/scripts/mirror-agents-md.sh +0 -69
package/cli/utils.mjs CHANGED
@@ -15,30 +15,56 @@ export function repoPath(...parts) {
15
15
  }
16
16
 
17
17
  /**
18
- * Resolve the Cline global config directory.
19
- *
20
- * Mirrors Cline's `resolveClineDir()` in `@cline/shared/storage`:
21
- * 1. `process.env.CLINE_DIR` (explicit override)
22
- * 2. `$HOME/.cline` (the Cline default since v3.0)
23
- *
24
- * v6.1.0 — Bizar is Cline-only. The pre-v5.6 `~/.config/cline/` path
25
- * (the OpenCode-era layout) is no longer supported; the previous
26
- * `legacyClineConfigDir()` helper has been removed.
27
- */
28
- export function clineConfigDir() {
29
- if (process.env.CLINE_DIR && process.env.CLINE_DIR.trim()) {
30
- return process.env.CLINE_DIR.trim();
18
+ * Resolve the Claude Code global config directory.
19
+ *
20
+ * v6.3.0 — Bizar is Claude Code-native. The legacy `~/.cline/`
21
+ * path is kept as a back-compat alias via the wrappers below.
22
+ *
23
+ * 1. `process.env.CLAUDE_CONFIG_DIR` (explicit override)
24
+ * 2. `$HOME/.claude` (Claude Code default)
25
+ */
26
+ export function claudeConfigDir() {
27
+ if (process.env.CLAUDE_CONFIG_DIR && process.env.CLAUDE_CONFIG_DIR.trim()) {
28
+ return process.env.CLAUDE_CONFIG_DIR.trim();
31
29
  }
32
30
  if (isWin) {
33
31
  return process.env.APPDATA
34
- ? join(process.env.APPDATA, 'cline')
35
- : join(homedir(), '.cline');
32
+ ? join(process.env.APPDATA, 'claude')
33
+ : join(homedir(), '.claude');
36
34
  }
37
- return join(homedir(), '.cline');
35
+ return join(homedir(), '.claude');
38
36
  }
39
37
 
38
+ export function claudeAgentsDir() {
39
+ return join(claudeConfigDir(), 'agents');
40
+ }
41
+
42
+ export function claudeSkillsDir() {
43
+ return join(claudeConfigDir(), 'skills');
44
+ }
45
+
46
+ export function claudeCommandsDir() {
47
+ return join(claudeConfigDir(), 'commands');
48
+ }
49
+
50
+ export function claudeHooksDir() {
51
+ return join(claudeConfigDir(), 'hooks');
52
+ }
53
+
54
+ /**
55
+ * @deprecated v6.3.0 — Claude Code migration. Use `claudeConfigDir()`.
56
+ * Thin wrapper so older scripts that haven't been migrated keep working.
57
+ */
58
+ export function clineConfigDir() {
59
+ return claudeConfigDir();
60
+ }
61
+
62
+ /**
63
+ * @deprecated v6.3.0 — Claude Code migration. Use `claudeAgentsDir()`.
64
+ * Thin wrapper so older scripts that haven't been migrated keep working.
65
+ */
40
66
  export function clineAgentsDir() {
41
- return join(clineConfigDir(), 'agents');
67
+ return claudeAgentsDir();
42
68
  }
43
69
 
44
70
  async function tryReadVersion(filePath) {
@@ -58,53 +84,41 @@ function commandExists(command) {
58
84
  return probe.status === 0;
59
85
  }
60
86
 
87
+ /**
88
+ * @deprecated v6.3.0 — Claude Code migration. Use `detectClaude()`.
89
+ * Probe for the legacy Cline CLI to power compat reports.
90
+ */
61
91
  export async function detectCline() {
62
- const configDir = clineConfigDir();
63
- const agentsDir = clineAgentsDir();
64
-
92
+ const configDir = claudeConfigDir();
93
+ const agentsDir = claudeAgentsDir();
65
94
  let exists = false;
66
95
  let version = '';
67
-
68
96
  try {
69
97
  await access(configDir, constants.F_OK);
70
98
  exists = true;
99
+ } catch {
100
+ exists = false;
101
+ }
102
+ return { exists, version, configDir, agentsDir };
103
+ }
71
104
 
72
- if (isWin) {
73
- const winPaths = [
74
- join(process.env.APPDATA || homedir(), 'npm', 'node_modules', 'cline', 'package.json'),
75
- join(process.env.APPDATA || homedir(), 'npm', 'node_modules', 'cline', 'package.json'),
76
- join(process.env.APPDATA || homedir(), 'npm-global', 'node_modules', 'cline', 'package.json'),
77
- join(process.env.APPDATA || homedir(), 'npm-global', 'node_modules', 'cline', 'package.json'),
78
- join(homedir(), 'node_modules', 'cline', 'package.json'),
79
- join(homedir(), 'node_modules', 'cline', 'package.json'),
80
- ];
81
- for (const p of winPaths) {
82
- version = await tryReadVersion(p);
83
- if (version) break;
84
- }
85
- } else {
86
- const posixPaths = [
87
- join(homedir(), '.local', 'share', 'cline', 'package.json'),
88
- join(homedir(), '.local', 'share', 'cline', 'package.json'),
89
- '/usr/local/lib/node_modules/cline/package.json',
90
- '/usr/local/lib/node_modules/cline/package.json',
91
- '/usr/lib/node_modules/cline/package.json',
92
- '/usr/lib/node_modules/cline/package.json',
93
- join(homedir(), '.npm-global', 'lib', 'node_modules', 'cline', 'package.json'),
94
- join(homedir(), '.npm-global', 'lib', 'node_modules', 'cline', 'package.json'),
95
- join(homedir(), 'node_modules', 'cline', 'package.json'),
96
- join(homedir(), 'node_modules', 'cline', 'package.json'),
97
- ];
98
- for (const p of posixPaths) {
99
- version = await tryReadVersion(p);
100
- if (version) break;
101
- }
105
+ /**
106
+ * Probe for the Claude Code CLI on PATH.
107
+ * Returns `{ exists, version }`. v6.3.0+ replacement for `detectCline()`.
108
+ */
109
+ export async function detectClaude() {
110
+ let exists = false;
111
+ let version = '';
112
+ try {
113
+ const probe = spawnSync('claude', ['--version'], { encoding: 'utf8', timeout: 5000 });
114
+ if (probe.status === 0) {
115
+ exists = true;
116
+ version = (probe.stdout || probe.stderr || '').trim().split('\n')[0];
102
117
  }
103
118
  } catch {
104
119
  exists = false;
105
120
  }
106
-
107
- return { exists, version, configDir, agentsDir };
121
+ return { exists, version, configDir: claudeConfigDir(), agentsDir: claudeAgentsDir() };
108
122
  }
109
123
 
110
124
  export async function detectHeadroom() {
@@ -133,7 +147,7 @@ export async function detectSkillsCli() {
133
147
  }
134
148
 
135
149
  export async function detectInstalledAgents() {
136
- const agentsDir = clineAgentsDir();
150
+ const agentsDir = claudeAgentsDir();
137
151
  try {
138
152
  await access(agentsDir, constants.F_OK);
139
153
  return agentsDir;
@@ -148,9 +162,9 @@ export function buildSummary(components, agents, target, skillPacks = []) {
148
162
  if (components.includes('agents-md')) parts.push('AGENTS.md');
149
163
  if (components.includes('skill-bizar')) parts.push('bizar skill');
150
164
  if (components.includes('skill-improve')) parts.push('self-improvement skill');
151
- if (components.includes('cline-json')) parts.push('cline.json');
165
+ if (components.includes('settings-json')) parts.push('settings.json');
152
166
  if (components.includes('bizar')) parts.push('.bizar/ folder');
153
- if (components.includes('plugin-bizar')) parts.push('Bizar plugin');
167
+ if (components.includes('mcp-bizar')) parts.push('Bizar MCP server');
154
168
  if (components.includes('rules')) parts.push('rules');
155
169
  if (components.includes('hooks')) parts.push('hooks');
156
170
  if (components.includes('commands')) parts.push('commands');
@@ -167,7 +181,7 @@ export function buildSummary(components, agents, target, skillPacks = []) {
167
181
  };
168
182
  }
169
183
 
170
- // ── Path helpers ─────────────────────────────────────────────────────────────────
184
+ // Path helpers
171
185
 
172
186
  /**
173
187
  * Return the platform-specific Bizar config directory.
@@ -204,4 +218,4 @@ export function whichPath(cmd) {
204
218
  } catch {
205
219
  return null;
206
220
  }
207
- }
221
+ }
package/config/AGENTS.md CHANGED
@@ -54,7 +54,7 @@ which skills 2>/dev/null
54
54
  skills list --json
55
55
 
56
56
  # View installed skill files
57
- ls ~/.cline/skills/<skill-name>/SKILL.md
57
+ ls ~/.claude/skills/<skill-name>/SKILL.md
58
58
  ```
59
59
 
60
60
  ### How to Install
@@ -72,7 +72,7 @@ skills add <owner/repo> -s "<skill-name>" -y
72
72
  1. **Assess**: When given a task, consider whether a skill might exist for it
73
73
  2. **Check installed**: Run `skills list --json` to see what's already available
74
74
  3. **Try known repos**: Based on the task domain, attempt installation from known skill repos (e.g., `skills add supabase/agent-skills --all -y` for database work, `skills add vercel-labs/agent-skills --all -y` for frontend work)
75
- 4. **Use**: After installing, the skill instructions are at `~/.cline/skills/<skill-name>/SKILL.md` — load them with the `skill` tool
75
+ 4. **Use**: After installing, the skill instructions are at `~/.claude/skills/<skill-name>/SKILL.md` — load them with the `skill` tool
76
76
  5. **Skip**: If no skill is found after trying likely repos, proceed without
77
77
 
78
78
  ### Known Skill Repositories by Domain
@@ -146,26 +146,26 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
146
146
 
147
147
  ### Frigg
148
148
 
149
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
149
+ - **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic API, free tier)
150
150
  - **Use for**: Read-only codebase Q&A. Use `@frigg` to ask questions about the project and get answers with file references — never modifies anything.
151
151
  - **Mode**: Primary (directly selectable by the user via `@frigg`)
152
152
  - **Cost**: Free
153
153
 
154
154
  ### Vör
155
155
 
156
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
156
+ - **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic API, free tier)
157
157
  - **Use for**: Clarifying ambiguous or incomplete requests. First reads project context (`.bizar/PROJECT.md`, obsidian, project files), then only asks targeted, project-specific questions if still unclear. Never asks generic questions.
158
158
  - **Cost**: Free
159
159
 
160
160
  ### Heimdall
161
161
 
162
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
162
+ - **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic API, free tier)
163
163
  - **Use for**: Simple tasks, mechanical work, quick edits, file operations. The ever-watchful guardian.
164
164
  - **Cost**: Free
165
165
 
166
166
  ### Mimir
167
167
 
168
- - **Model**: `cline/deepseek-v4-flash-free` (via Cline Zen — free tier)
168
+ - **Model**: `claude-3-5-haiku` (via Claude Code — Anthropic API, free tier)
169
169
  - **Use for**: Deep codebase research, exploration, documentation analysis. Semble-first search approach.
170
170
  - **Cost**: Free
171
171
 
@@ -207,7 +207,7 @@ Odin (`@odin`) is the All-Father and primary/default agent. He analyzes each req
207
207
 
208
208
  ### Routing Heuristic
209
209
 
210
- Odin dispatches all tasks to subagents via the `task` tool. When work items are **independent**, he launches them as **parallel `task` calls in a single message**.
210
+ Odin dispatches all tasks to subagents via the Claude Code `Agent` tool. When work items are **independent**, he launches them as **parallel `Agent` calls in a single message** with `subagent_type` set to the target agent's name.
211
211
 
212
212
  **Before dispatching any task, Odin runs `bizar memory status` to confirm the vault is reachable.** No `bank_id` is needed — `bizar memory status` resolves everything from the project root.
213
213
 
@@ -285,25 +285,25 @@ From the project root, the user (or heimdall via `/init` or any other agent prom
285
285
 
286
286
  ## General Agent Baseline — Always-On Behavior
287
287
 
288
- This section is the single source of truth for every Bizar agent's behavior. It is **adapted from the upstream system prompt and translated to Bizar**. Every Claude-specific reference has been mapped to the Bizar equivalent (BizarHarness, cline, obsidian, Semble, Skills CLI, agent-browser, the cline tool set). All agents **MUST** follow these rules at all times.
288
+ This section is the single source of truth for every Bizar agent's behavior. It is **adapted from the upstream system prompt and translated to Bizar**. Every Claude-specific reference has been mapped to the Bizar equivalent (BizarHarness, Claude Code, obsidian, Semble, Skills CLI, agent-browser, Claude Code's native tool set). All agents **MUST** follow these rules at all times.
289
289
 
290
- > **Tool name translation table** (used throughout this baseline):
290
+ > **Tool name translation table** (used throughout this baseline): this section maps Claude.ai tool names (e.g. `view`) to Claude Code tool names (e.g. `Read`). Starting with v6.3.0 (DEC-011), Claude Code's native tools are the source of truth — the harness no longer maintains its own tool set. The Bizar column below is the Claude Code column when they match.
291
291
  >
292
- > | Upstream (Claude.ai) | Bizar equivalent |
292
+ > | Upstream (Claude.ai) | Claude Code |
293
293
  > |---|---|
294
- > | `view` | `read` |
295
- > | `str_replace` | `edit` |
296
- > | `create_file` | `write` |
297
- > | `bash_tool` | `bash` |
298
- > | `web_search` | `websearch` (cline built-in) |
299
- > | `web_fetch` | `webfetch` (cline built-in) |
294
+ > | `view` | `Read` |
295
+ > | `str_replace` | `Edit` |
296
+ > | `create_file` | `Write` |
297
+ > | `bash_tool` | `Bash` |
298
+ > | `web_search` | `WebSearch` |
299
+ > | `web_fetch` | `WebFetch` |
300
300
  > | `present_files` | not applicable — Bizar delivers files via the dashboard (`@polderlabs/bizar-dash/src/server/routes/artifacts.mjs`) or by writing to the workspace |
301
- > | `image_search` / `places_*` / `weather_fetch` / `recipe_display_v0` / `fetch_sports_data` / `message_compose_v1` / `recommend_claude_apps` | not available in Bizar — do not assume these exist |
301
+ > | `image_search` / `places_*` / `weather_fetch` / `recipe_display_v0` / `fetch_sports_data` / `message_compose_v1` / `recommend_claude_apps` | not available in Claude Code — do not assume these exist |
302
302
  > | `search_mcp_registry` / `suggest_connectors` | use the `skills` CLI (`skills add <owner/repo> -s <name>`) to discover and install skills instead |
303
- > | `ask_user_input_v0` | Bizar has a `question` tool — same shape, single high-value question |
304
- > | `skill` | `skill` — load a SKILL.md from `~/.cline/skills/<name>/` or installed equivalent |
305
- > | `task` (subagent dispatch) | `task` — same — used by Odin to dispatch subagents |
306
- > | MCP servers | `semble` (codebase search) and any user-added servers in `config/cline.json` |
303
+ > | `ask_user_input_v0` | `AskUserQuestion` — single high-value question |
304
+ > | `skill` | `Skill` — load a SKILL.md from `~/.claude/skills/<name>/` or `.claude/skills/<name>/` |
305
+ > | `task` (subagent dispatch) | `Agent` (with `subagent_type`, `run_in_background`, `isolation: "worktree"`) — used by Odin to dispatch subagents |
306
+ > | MCP servers | `semble` (codebase search) and any user-added servers in `.claude/mcp.json` |
307
307
 
308
308
  ### Simplicity Rule — do not overcomplicate
309
309
 
@@ -321,7 +321,7 @@ This section is the single source of truth for every Bizar agent's behavior. It
321
321
 
322
322
  ### Identity preamble
323
323
 
324
- - Bizar is a Norse-pantheon multi-agent system for cline. Odin is the default primary agent; Frigg, Vör, Mimir, Heimdall, Hermod, Thor, Baldr, Tyr, Vidarr, and Forseti are the subagents.
324
+ - Bizar is a Norse-pantheon multi-agent system for Claude Code. Odin is the default primary agent; Frigg, Vör, Mimir, Heimdall, Hermod, Thor, Baldr, Tyr, Vidarr, and Forseti are the subagents.
325
325
  - The agent does not have a fixed identity outside its role definition. Do not claim to be Claude, Anthropic, or any other AI.
326
326
  - Treat the user as a capable adult working on engineering work unless the context clearly indicates otherwise.
327
327
 
@@ -388,7 +388,7 @@ This section is the single source of truth for every Bizar agent's behavior. It
388
388
  - For facts that change quickly (current positions, prices, breaking news) or anything that could have changed recently, **search before answering**: use `websearch` and `webfetch` or delegate to `@mimir` for deep research.
389
389
  - For stable technical knowledge (language semantics, well-established APIs, mathematical truths), answer directly without search.
390
390
  - Default to running `bizar memory search "<topic>"` at session start to retrieve prior project context before answering anything project-specific.
391
- - When formulating date-sensitive queries, use the actual current date (Bizar's cline environment provides this). Do not hardcode years.
391
+ - When formulating date-sensitive queries, use the actual current date (Bizar's Claude Code environment provides this). Do not hardcode years.
392
392
  - Do not over-rely on memory; if uncertain, search. Confabulating costs the user more than searching.
393
393
 
394
394
  ### mcp_servers_and_skills
@@ -407,7 +407,7 @@ The `skills` CLI (`npm install -g skills`) installs skill packs from skills.sh.
407
407
  ```bash
408
408
  which skills 2>/dev/null
409
409
  skills list --json
410
- ls ~/.cline/skills/<skill-name>/SKILL.md
410
+ ls ~/.claude/skills/<skill-name>/SKILL.md
411
411
  ```
412
412
 
413
413
  If not installed but relevant, install it from a known repo by domain:
@@ -424,7 +424,7 @@ Load the SKILL.md via the `skill` tool before writing code or making changes cov
424
424
 
425
425
  #### Browser interaction
426
426
 
427
- For browser-driven E2E validation, use **agent-browser** (the Python tool from https://github.com/browser-use/agent-browser). Invoke via `bash` heredoc:
427
+ For browser-driven E2E validation, use **agent-browser** (the Rust-native tool from https://github.com/vercel-labs/agent-browser; the earlier Python build at https://github.com/browser-use/agent-browser is archived as of the v6.0.0 migration). Invoke via `bash` heredoc:
428
428
 
429
429
  ```bash
430
430
  agent-browser <<'PY'
@@ -434,7 +434,7 @@ print(page_info())
434
434
  PY
435
435
  ```
436
436
 
437
- Common operations: `new_tab`, `goto_url`, `wait_for_load`, `page_info`, `click_at_xy`, `fill_input`, `press_key`, `scroll`, `capture_screenshot`, `js`, `cdp("Domain.method", ...)`. Read the SKILL.md at `~/.cline/skills/agent-browser/SKILL.md` on first use. Do **not** install headless Chrome via raw shell commands when agent-browser is available.
437
+ Common operations: `new_tab`, `goto_url`, `wait_for_load`, `page_info`, `click_at_xy`, `fill_input`, `press_key`, `scroll`, `capture_screenshot`, `js`, `cdp("Domain.method", ...)`. Read the SKILL.md at `~/.claude/skills/agent-browser/SKILL.md` on first use. Do **not** install headless Chrome via raw shell commands when agent-browser is available.
438
438
 
439
439
  ### skills_mandatory_read
440
440
 
@@ -445,8 +445,8 @@ Concrete triggers:
445
445
  - Backend/API work → framework-specific skill
446
446
  - Browser E2E → `agent-browser` SKILL.md
447
447
  - Skill creation → `skill-creator` SKILL.md
448
- - BizarHarness-specific work → `~/.cline/skills/bizar/` SKILL.md (always)
449
- - Self-improvement logging → `~/.cline/skills/self-improvement/` SKILL.md (always)
448
+ - BizarHarness-specific work → `~/.claude/skills/bizar/` SKILL.md (always)
449
+ - Self-improvement logging → `~/.claude/skills/self-improvement/` SKILL.md (always)
450
450
 
451
451
  ### file_creation_advice
452
452
 
package/install.sh CHANGED
@@ -1,26 +1,23 @@
1
1
  #!/usr/bin/env bash
2
2
  #
3
- # install.sh — Cross-platform BizarHarness installer (v5.x — thin shell wrapper).
3
+ # install.sh — Cross-platform BizarHarness installer (Claude Code).
4
4
  #
5
- # v5.x — Updated for issue #7. The install/update flow now:
6
- # 1. On first install: registers the system service that auto-starts
7
- # the dashboard (`bizar service install`).
8
- # 2. On update: stops the running service before files are replaced
9
- # (`bizar service stop` → npm upgrade → `bizar service restart`).
5
+ # v6.3.0 — Migrated from Cline to Claude Code.
10
6
  #
11
- # Almost all logic still lives in `cli/provision.mjs:runProvision`, which
12
- # is shared between `bizar install` and `bizar update`. This bash script
13
- # exists only for the platform-specific steps that need sudo + a system
14
- # package manager:
7
+ # 1. Detects platform (Linux/macOS/Windows)
8
+ # 2. Installs Node.js 18+, jq, gh, uv, python3 (cross-platform)
9
+ # 3. Installs Claude Code via npm:
10
+ # npm install -g @anthropic-ai/claude-agent-sdk
11
+ # npm install -g @anthropic-ai/claude-code
12
+ # 4. Optionally installs agent-browser (Rust native CLI from vercel-labs)
13
+ # 5. Shells out to `node cli/provision-claude.mjs`, which writes the
14
+ # `~/.claude/` config tree, registers the Bizar MCP server, and
15
+ # copies agent files / skills / commands / hooks / rules.
15
16
  #
16
- # - Linux: ensure node is installed (apt/dnf/pacman/zypper), install uv,
17
- # python3.12, jq, gh, agent-browser (npm), Chrome for Testing.
18
- # - macOS: ensure homebrew is installed; everything else is via brew/npm.
19
- # - Windows: a stub that prints "use install.ps1".
20
- #
21
- # Agent files / plugin copy / cline.json patching / service registration /
22
- # skills install / doctor check are ALL handled by the unified provisioner
23
- # after this script returns.
17
+ # Almost all logic still lives in `cli/provision-claude.mjs:runProvision`,
18
+ # which is shared between `bizar install` and `bizar update`. This bash
19
+ # script exists only for the platform-specific steps that need sudo +
20
+ # a system package manager.
24
21
  #
25
22
  # Flags:
26
23
  # --non-interactive skip prompts (CI safe)
@@ -72,7 +69,7 @@ MODE="install"
72
69
 
73
70
  show_usage() {
74
71
  cat <<'EOF'
75
- install.sh — BizarHarness cross-platform installer
72
+ install.sh — BizarHarness cross-platform installer (Claude Code)
76
73
 
77
74
  Usage:
78
75
  ./install.sh Interactive install (Linux/macOS)
@@ -84,9 +81,10 @@ Usage:
84
81
  ./install.sh --mode=<mode> install | update | install-only-system
85
82
 
86
83
  This script handles platform-specific system dependencies (apt/dnf/pacman/
87
- zypper on Linux, brew on macOS) and then shells to `node cli/provision.mjs`,
88
- which performs agent-file sync, plugin copy, cline.json patching,
89
- service registration, skills install, and the post-install doctor check.
84
+ zypper on Linux, brew on macOS) and then shells to
85
+ `node cli/provision-claude.mjs`, which writes ~/.claude/, registers the
86
+ Bizar MCP server, copies agents / skills / commands / hooks / rules,
87
+ and runs the post-install doctor check.
90
88
  EOF
91
89
  }
92
90
 
@@ -159,7 +157,7 @@ ensure_node() {
159
157
  action "Detected NixOS — Node.js must be installed via nix-shell"
160
158
  warn "Run the following, then re-run this installer:"
161
159
  warn " nix-shell -p nodejs python3 jq gh git"
162
- warn " node cli/provision.mjs"
160
+ warn " node cli/provision-claude.mjs"
163
161
  exit 0
164
162
  ;;
165
163
  void)
@@ -175,6 +173,29 @@ ensure_node() {
175
173
  note "Node.js installed: $(node --version)"
176
174
  }
177
175
 
176
+ # ── Claude Code install ────────────────────────────────────────────────────
177
+ install_claude_code() {
178
+ if have_cmd claude; then
179
+ note "claude $(claude --version 2>/dev/null | head -1) present"
180
+ else
181
+ section "Installing Claude Code"
182
+ if ! have_cmd npm; then
183
+ err "npm not available — install Node.js 18+ first: https://nodejs.org/"
184
+ exit 1
185
+ fi
186
+ action "Installing @anthropic-ai/claude-agent-sdk..."
187
+ dry npm install -g @anthropic-ai/claude-agent-sdk 2>&1 || \
188
+ warn "claude-agent-sdk install failed — retry later: npm install -g @anthropic-ai/claude-agent-sdk"
189
+ action "Installing @anthropic-ai/claude-code..."
190
+ dry npm install -g @anthropic-ai/claude-code 2>&1
191
+ if have_cmd claude; then
192
+ note "claude $(claude --version 2>/dev/null | head -1) installed"
193
+ else
194
+ warn "claude CLI not found on PATH after install — check npm global bin dir"
195
+ fi
196
+ fi
197
+ }
198
+
178
199
  # ── Dependency detection + install (cross-platform) ────────────────────────
179
200
  check_deps() {
180
201
  section "Checking dependencies"
@@ -194,7 +215,7 @@ install_agent_browser() {
194
215
  # the v5.x browser-harness (Python CDP wrapper). Installs via npm.
195
216
  #
196
217
  # If npm is not available, this is a soft-fail: agent-browser is
197
- # optional, and `cli/provision.mjs:ensureAgentBrowser` will retry it
218
+ # optional, and `cli/provision-claude.mjs:ensureAgentBrowser` will retry it
198
219
  # once npm is available.
199
220
  if have_cmd agent-browser; then
200
221
  local ab_ver
@@ -305,7 +326,7 @@ install_missing_deps_linux() {
305
326
  warn "NixOS detected — LightRAG and other uv tools require manual setup"
306
327
  warn " After nix-shell: nix-shell -p nodejs python3 jq gh git"
307
328
  warn " Then run: uv tool install \"lightrag-hku[api]\""
308
- warn " And re-run this installer: node cli/provision.mjs"
329
+ warn " And re-run this installer: node cli/provision-claude.mjs"
309
330
  return 0
310
331
  ;;
311
332
  esac
@@ -337,15 +358,13 @@ install_service() {
337
358
  # We still call it from here because the bash script may run standalone
338
359
  # (e.g. for first-boot provisioning before the npm package is set up).
339
360
  #
340
- # v5.x — issue #7: On first install, register the service so the
341
- # dashboard auto-starts at login. On update, the running service is
342
- # stopped by the provisioner before files are replaced, then restarted
343
- # by the provisioner after — see cli/provision.mjs. This function
344
- # covers the FIRST install path only.
361
+ # v6.3.0 — Claude Code does NOT have an out-of-process "server" the way
362
+ # Cline did, so we skip `bizar service install` here. The dashboard
363
+ # (bizar-dash) is launched via `bizar dash start --bg` instead.
345
364
  local bin="$REPO_DIR/cli/bin.mjs"
346
365
  if [ ! -f "$bin" ]; then
347
366
  warn "cli/bin.mjs not found — service registration deferred"
348
- warn " (will complete when `bizar service install` is run later)"
367
+ warn " (will complete when \`bizar service install\` is run later)"
349
368
  return 0
350
369
  fi
351
370
  if [ "$DRY_RUN" -eq 1 ]; then
@@ -369,15 +388,15 @@ print_banner() {
369
388
  section "Install complete"
370
389
  echo ""
371
390
  echo -e "${BOLD}${CYAN}┌────────────────────────────────────────────────────────────┐${NC}"
372
- echo -e "${BOLD}${CYAN}│${NC} ${BOLD}BizarHarness ready.${NC} │"
391
+ echo -e "${BOLD}${CYAN}│${NC} ${BOLD}BizarHarness ready (Claude Code).${NC} │"
373
392
  echo -e "${BOLD}${CYAN}│${NC} │"
374
- echo -e "${BOLD}${CYAN}│${NC} ${GREEN}✓${NC} Cross-platform installer v4.4.7 │"
393
+ echo -e "${BOLD}${CYAN}│${NC} ${GREEN}✓${NC} Cross-platform installer v6.3.0 │"
375
394
  echo -e "${BOLD}${CYAN}│${NC} │"
376
395
  echo -e "${BOLD}${CYAN}│${NC} Dashboard: ${CYAN}$dashboard_url${NC} │"
377
396
  echo -e "${BOLD}${CYAN}│${NC} │"
378
397
  echo -e "${BOLD}${CYAN}│${NC} ${DIM}Next:${NC} │"
379
- echo -e "${BOLD}${CYAN}│${NC} ${DIM} 1. Restart cline to pick up new config${NC} │"
380
- echo -e "${BOLD}${CYAN}│${NC} ${DIM} 2. Run /connect in cline to add API keys${NC} │"
398
+ echo -e "${BOLD}${CYAN}│${NC} ${DIM} 1. Restart claude to pick up new config${NC} │"
399
+ echo -e "${BOLD}${CYAN}│${NC} ${DIM} 2. Run \`claude auth login\` to add API keys${NC} │"
381
400
  echo -e "${BOLD}${CYAN}│${NC} ${DIM} 3. Run 'bizar dash start' to launch the dashboard${NC} │"
382
401
  echo -e "${BOLD}${CYAN}│${NC} ${DIM} 4. Visit $dashboard_url in your browser${NC} │"
383
402
  echo -e "${BOLD}${CYAN}└────────────────────────────────────────────────────────────┘${NC}"
@@ -393,6 +412,7 @@ install_linux() {
393
412
  note "Detected Linux ($(uname -m))"
394
413
  ensure_node
395
414
  check_deps
415
+ install_claude_code
396
416
  install_missing_deps_linux
397
417
  install_agent_browser
398
418
  install_service
@@ -402,6 +422,7 @@ install_macos() {
402
422
  note "Detected macOS ($(uname -m))"
403
423
  check_deps
404
424
  install_missing_deps_macos
425
+ install_claude_code
405
426
  install_agent_browser
406
427
  install_service
407
428
  }
@@ -417,7 +438,7 @@ main() {
417
438
  fi
418
439
 
419
440
  echo ""
420
- echo -e "${BOLD}${CYAN} ⚡ BizarHarness Installer v6.0.0${NC}"
441
+ echo -e "${BOLD}${CYAN} ⚡ BizarHarness Installer v6.3.0 (Claude Code)${NC}"
421
442
  if [ "$UPDATE_MODE" -eq 1 ]; then
422
443
  echo -e " ${DIM}Update mode${NC}"
423
444
  fi
@@ -441,16 +462,17 @@ main() {
441
462
  esac
442
463
 
443
464
  # ── Hand off to the unified provisioner (Node) ─────────────────────────
444
- # All cross-OS work (agent files, plugin copy, cline.json patching,
445
- # skills install, doctor check) lives in `cli/provision.mjs:runProvision`.
446
- # It's idempotent — skipping it (e.g. via --install-only-system) is fine
447
- # for first-boot scenarios where the npm package isn't yet set up.
465
+ # All cross-OS work (agent files, command copy, ~/.claude/ settings,
466
+ # MCP server registration, skills/rules/hooks mirror) lives in
467
+ # `cli/provision-claude.mjs:runProvision`. It's idempotent — skipping
468
+ # it (e.g. via --install-only-system) is fine for first-boot scenarios
469
+ # where the npm package isn't yet set up.
448
470
  if [ "$MODE" = "install-only-system" ]; then
449
471
  note "skipped node provisioner (--mode=install-only-system)"
450
472
  exit 0
451
473
  fi
452
474
 
453
- if [ -f "$REPO_DIR/cli/provision.mjs" ]; then
475
+ if [ -f "$REPO_DIR/cli/provision-claude.mjs" ]; then
454
476
  echo ""
455
477
  section "Running unified provisioner"
456
478
  local args=(--mode "$MODE")
@@ -459,7 +481,7 @@ main() {
459
481
  [ "$NON_INTERACTIVE" -eq 1 ] && args+=(--yes)
460
482
  # `set +e` so we capture the provisioner's exit code and surface it.
461
483
  set +e
462
- node "$REPO_DIR/cli/provision.mjs" "${args[@]}"
484
+ node "$REPO_DIR/cli/provision-claude.mjs" "${args[@]}"
463
485
  local rc=$?
464
486
  set -e
465
487
  if [ "$rc" -ne 0 ]; then
@@ -468,9 +490,9 @@ main() {
468
490
  fi
469
491
  print_banner
470
492
  else
471
- warn "cli/provision.mjs not found — agent files / plugin / cline.json"
493
+ warn "cli/provision-claude.mjs not found — agent files / MCP / settings.json"
472
494
  warn " were NOT synced. Run \`bizar install\` from a checkout to fix."
473
495
  fi
474
496
  }
475
497
 
476
- main "$@"
498
+ main "$@"