@polderlabs/bizar 6.2.4 → 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 (332) 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 +31 -18
  125. package/cli/commands/claude-cmd.mjs +348 -0
  126. package/cli/commands/install.mjs +12 -11
  127. package/cli/commands/sandbox.mjs +220 -0
  128. package/cli/commands/validate.mjs +252 -288
  129. package/cli/dev-link.test.mjs +11 -11
  130. package/cli/doctor.mjs +131 -213
  131. package/cli/install.mjs +33 -37
  132. package/cli/install.test.mjs +9 -9
  133. package/cli/provision-claude.mjs +893 -0
  134. package/cli/provision.mjs +330 -226
  135. package/cli/provision.test.mjs +102 -0
  136. package/cli/utils.mjs +72 -58
  137. package/config/AGENTS.md +28 -28
  138. package/config/agents/_shared/AGENT_BASELINE.md +104 -684
  139. package/config/skills/bizar/SKILL.md +197 -0
  140. package/config/skills/cubesandbox/SKILL.md +148 -0
  141. package/config/skills/harness-engineering/SKILL.md +142 -0
  142. package/install.sh +66 -44
  143. package/package.json +19 -11
  144. package/packages/sdk/ARCHITECTURE.md +40 -36
  145. package/packages/sdk/package-lock.json +32 -0
  146. package/packages/sdk/package.json +15 -5
  147. package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
  148. package/packages/sdk/src/fingerprint.ts +0 -0
  149. package/packages/sdk/src/index.ts +38 -73
  150. package/packages/sdk/src/mcp/bin.ts +51 -0
  151. package/packages/sdk/src/mcp/server.ts +498 -0
  152. package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
  153. package/packages/sdk/tests/sdk.test.mjs +148 -0
  154. package/packages/sdk/vitest.config.ts +1 -1
  155. package/scripts/bh-full-e2e.mjs +166 -363
  156. package/scripts/check-deps.mjs +28 -46
  157. package/scripts/mirror-claude-md.sh +78 -0
  158. package/scripts/test-in-container.sh +157 -0
  159. package/templates/clean-state-checklist.md +3 -3
  160. package/templates/sprint-contract.md +2 -2
  161. package/bizar-dash/.bizar/activity.log +0 -3
  162. package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
  163. package/bizar-dash/.omx/state/session.json +0 -10
  164. package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
  165. package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
  166. package/bizar-dash/bizar-design/canvas.html +0 -281
  167. package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
  168. package/bizar-dash/bizar-design/components.css +0 -1665
  169. package/bizar-dash/bizar-design/components.html +0 -557
  170. package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
  171. package/bizar-dash/bizar-design/desktop/agents.html +0 -74
  172. package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
  173. package/bizar-dash/bizar-design/desktop/memory.html +0 -75
  174. package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
  175. package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
  176. package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
  177. package/bizar-dash/bizar-design/desktop/overview.html +0 -95
  178. package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
  179. package/bizar-dash/bizar-design/desktop/settings.html +0 -70
  180. package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
  181. package/bizar-dash/bizar-design/icons.svg +0 -44
  182. package/bizar-dash/bizar-design/index.html +0 -192
  183. package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
  184. package/bizar-dash/bizar-design/mobile/agents.html +0 -29
  185. package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
  186. package/bizar-dash/bizar-design/mobile/memory.html +0 -28
  187. package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
  188. package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
  189. package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
  190. package/bizar-dash/bizar-design/mobile/overview.html +0 -33
  191. package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
  192. package/bizar-dash/bizar-design/mobile/settings.html +0 -28
  193. package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
  194. package/bizar-dash/bizar-design/prototype.js +0 -114
  195. package/bizar-dash/bizar-design/tokens.css +0 -106
  196. package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
  197. package/bizar-dash/node_modules/.package-lock.json +0 -6
  198. package/bizar-dash/package-lock.json +0 -6
  199. package/bizar-dash/src/server/cline-sdk.mjs +0 -132
  200. package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
  201. package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
  202. package/cli/commands/cline-cmd.mjs +0 -289
  203. package/cli/commands/validate.test.mjs +0 -344
  204. package/cli/doctor.test.mjs +0 -350
  205. package/config/cline.json.template +0 -342
  206. package/packages/sdk/src/client.ts +0 -188
  207. package/packages/sdk/src/cline-events.ts +0 -134
  208. package/packages/sdk/src/cline-types.ts +0 -66
  209. package/packages/sdk/src/cline.ts +0 -339
  210. package/packages/sdk/src/errors.ts +0 -129
  211. package/packages/sdk/src/events.ts +0 -153
  212. package/packages/sdk/src/types.ts +0 -176
  213. package/packages/sdk/tests/client.test.ts +0 -217
  214. package/packages/sdk/tests/errors.test.ts +0 -108
  215. package/packages/sdk/tests/events.test.ts +0 -139
  216. package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
  217. package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
  218. package/plugins/bizar/ARCHITECTURE.md +0 -142
  219. package/plugins/bizar/CONSTRAINTS.md +0 -67
  220. package/plugins/bizar/LICENSE +0 -21
  221. package/plugins/bizar/README.md +0 -448
  222. package/plugins/bizar/index.ts +0 -872
  223. package/plugins/bizar/package.json +0 -39
  224. package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
  225. package/plugins/bizar/src/background-state.ts +0 -641
  226. package/plugins/bizar/src/background.ts +0 -1806
  227. package/plugins/bizar/src/cline-runner.ts +0 -203
  228. package/plugins/bizar/src/clineruntime.ts +0 -227
  229. package/plugins/bizar/src/commands-impl.ts +0 -151
  230. package/plugins/bizar/src/commands.ts +0 -1799
  231. package/plugins/bizar/src/compaction.d.mts +0 -48
  232. package/plugins/bizar/src/compaction.mjs +0 -192
  233. package/plugins/bizar/src/dashboard-client.ts +0 -233
  234. package/plugins/bizar/src/event-stream.ts +0 -606
  235. package/plugins/bizar/src/fingerprint.ts +0 -120
  236. package/plugins/bizar/src/handoff.ts +0 -79
  237. package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
  238. package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
  239. package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
  240. package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
  241. package/plugins/bizar/src/http-client.ts +0 -467
  242. package/plugins/bizar/src/key-rotation.ts +0 -218
  243. package/plugins/bizar/src/logger.ts +0 -144
  244. package/plugins/bizar/src/loop-engineering.ts +0 -241
  245. package/plugins/bizar/src/loop.ts +0 -176
  246. package/plugins/bizar/src/mistake-recovery.ts +0 -98
  247. package/plugins/bizar/src/odin.ts +0 -227
  248. package/plugins/bizar/src/options.ts +0 -470
  249. package/plugins/bizar/src/plan-fs.ts +0 -323
  250. package/plugins/bizar/src/reasoning-clean.ts +0 -454
  251. package/plugins/bizar/src/report.ts +0 -178
  252. package/plugins/bizar/src/research-prompt.ts +0 -35
  253. package/plugins/bizar/src/serve-info.ts +0 -228
  254. package/plugins/bizar/src/serve.ts +0 -496
  255. package/plugins/bizar/src/settings.ts +0 -349
  256. package/plugins/bizar/src/state.ts +0 -298
  257. package/plugins/bizar/src/tool-discipline.ts +0 -105
  258. package/plugins/bizar/src/tools/agent-browser.ts +0 -315
  259. package/plugins/bizar/src/tools/bg-collect.ts +0 -131
  260. package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
  261. package/plugins/bizar/src/tools/bg-kill.ts +0 -116
  262. package/plugins/bizar/src/tools/bg-pause.ts +0 -99
  263. package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
  264. package/plugins/bizar/src/tools/bg-resume.ts +0 -94
  265. package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
  266. package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
  267. package/plugins/bizar/src/tools/bg-status.ts +0 -130
  268. package/plugins/bizar/src/tools/graph-query.ts +0 -278
  269. package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
  270. package/plugins/bizar/src/tools/memory-list.ts +0 -43
  271. package/plugins/bizar/src/tools/memory-read.ts +0 -69
  272. package/plugins/bizar/src/tools/memory-search.ts +0 -47
  273. package/plugins/bizar/src/tools/memory-write.ts +0 -54
  274. package/plugins/bizar/src/tools/open-kb.ts +0 -198
  275. package/plugins/bizar/src/tools/plan-action.ts +0 -785
  276. package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
  277. package/plugins/bizar/src/tools/team-spawn.ts +0 -73
  278. package/plugins/bizar/src/tools/team-status.ts +0 -76
  279. package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
  280. package/plugins/bizar/src/trajectory.ts +0 -104
  281. package/plugins/bizar/tests/README.md +0 -99
  282. package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
  283. package/plugins/bizar/tests/background-state.test.ts +0 -277
  284. package/plugins/bizar/tests/background.test.ts +0 -402
  285. package/plugins/bizar/tests/block.test.ts +0 -195
  286. package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
  287. package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
  288. package/plugins/bizar/tests/commands-impl.test.ts +0 -316
  289. package/plugins/bizar/tests/commands.test.ts +0 -584
  290. package/plugins/bizar/tests/compaction.test.ts +0 -264
  291. package/plugins/bizar/tests/config.test.ts +0 -128
  292. package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
  293. package/plugins/bizar/tests/dispose.test.ts +0 -336
  294. package/plugins/bizar/tests/event-stream.test.ts +0 -409
  295. package/plugins/bizar/tests/event.test.ts +0 -262
  296. package/plugins/bizar/tests/fingerprint.test.ts +0 -162
  297. package/plugins/bizar/tests/http-client.test.ts +0 -404
  298. package/plugins/bizar/tests/init-helpers.test.ts +0 -203
  299. package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
  300. package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
  301. package/plugins/bizar/tests/key-rotation.test.ts +0 -396
  302. package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
  303. package/plugins/bizar/tests/loop.test.ts +0 -397
  304. package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
  305. package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
  306. package/plugins/bizar/tests/odin.test.ts +0 -125
  307. package/plugins/bizar/tests/options.test.ts +0 -329
  308. package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
  309. package/plugins/bizar/tests/safety.test.ts +0 -256
  310. package/plugins/bizar/tests/serve.test.ts +0 -339
  311. package/plugins/bizar/tests/settings.test.ts +0 -351
  312. package/plugins/bizar/tests/stall-think.test.ts +0 -750
  313. package/plugins/bizar/tests/state.test.ts +0 -276
  314. package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
  315. package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
  316. package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
  317. package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
  318. package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
  319. package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
  320. package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
  321. package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
  322. package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
  323. package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
  324. package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
  325. package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
  326. package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
  327. package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
  328. package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
  329. package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
  330. package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
  331. package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
  332. package/plugins/bizar/tsconfig.json +0 -29
@@ -1,152 +0,0 @@
1
- /**
2
- * Test fixture: a fetch mock with canned responses + request log.
3
- *
4
- * Usage:
5
- * const m = makeFetchMock();
6
- * m.respondWith("GET", /\/sessions/, { body: [{ id: "ses_1" }] });
7
- * const client = createBizarClient({ ..., fetch: m.fetch });
8
- * await client.sessions.list();
9
- * expect(m.lastRequest.url).toBe("http://127.0.0.1:4098/sessions");
10
- */
11
-
12
- export interface FetchMockRequest {
13
- url: string;
14
- method: string;
15
- headers: Record<string, string>;
16
- body: string | undefined;
17
- }
18
-
19
- export interface FetchMockRule {
20
- method: string;
21
- match: RegExp | string;
22
- /** Plain canned response (text/JSON). */
23
- response?: {
24
- status: number;
25
- body?: string;
26
- contentType?: string;
27
- };
28
- /** Streaming response (SSE). Overrides `response` if both set. */
29
- stream?: ReadableStream<Uint8Array>;
30
- streamStatus?: number;
31
- streamContentType?: string;
32
- }
33
-
34
- export interface FetchMock {
35
- fetch: typeof fetch;
36
- respondWith(method: string, match: RegExp | string, response: FetchMockRule["response"]): void;
37
- respondWithStream(
38
- method: string,
39
- match: RegExp | string,
40
- stream: ReadableStream<Uint8Array>,
41
- opts?: { status?: number; contentType?: string },
42
- ): void;
43
- respondWithError(method: string, match: RegExp | string, error: Error): void;
44
- lastRequest: FetchMockRequest | null;
45
- requests: FetchMockRequest[];
46
- reset(): void;
47
- }
48
-
49
- export function makeFetchMock(): FetchMock {
50
- const rules: FetchMockRule[] = [];
51
- const errorRules: Array<{ method: string; match: RegExp | string; error: Error }> = [];
52
- const requests: FetchMockRequest[] = [];
53
- let lastRequest: FetchMockRequest | null = null;
54
-
55
- const mockFetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
56
- const req: FetchMockRequest = {
57
- url: typeof input === "string" ? input : input instanceof URL ? input.toString() : (input as Request).url,
58
- method: (init?.method ?? "GET").toUpperCase(),
59
- headers: parseHeaders(init?.headers),
60
- body: init?.body === undefined ? undefined : String(init.body),
61
- };
62
- requests.push(req);
63
- lastRequest = req;
64
-
65
- const errorMatch = errorRules.find(
66
- (r) => r.method.toUpperCase() === req.method && matchUrl(r.match, req.url),
67
- );
68
- if (errorMatch) throw errorMatch.error;
69
-
70
- const rule = rules.find(
71
- (r) => r.method.toUpperCase() === req.method && matchUrl(r.match, req.url),
72
- );
73
- if (!rule) {
74
- return new Response(JSON.stringify({ error: "no mock rule" }), { status: 404 });
75
- }
76
-
77
- if (rule.stream) {
78
- const headers: Record<string, string> = {};
79
- headers["Content-Type"] = rule.streamContentType ?? "text/event-stream";
80
- return new Response(rule.stream, {
81
- status: rule.streamStatus ?? 200,
82
- headers,
83
- });
84
- }
85
-
86
- const r = rule.response ?? { status: 200 };
87
- const headers: Record<string, string> = {};
88
- if (r.contentType) headers["Content-Type"] = r.contentType;
89
- else if (r.body !== undefined) headers["Content-Type"] = "application/json";
90
-
91
- // 204/205/304 MUST NOT have a body per the Fetch spec.
92
- if (r.status === 204 || r.status === 205 || r.status === 304) {
93
- return new Response(null, { status: r.status, headers });
94
- }
95
-
96
- return new Response(r.body ?? "", {
97
- status: r.status,
98
- headers,
99
- });
100
- };
101
-
102
- return {
103
- fetch: mockFetch as typeof fetch,
104
- respondWith(method, match, response) {
105
- rules.push({ method: method.toUpperCase(), match, response });
106
- },
107
- respondWithStream(method, match, stream, opts) {
108
- rules.push({
109
- method: method.toUpperCase(),
110
- match,
111
- stream,
112
- streamStatus: opts?.status ?? 200,
113
- streamContentType: opts?.contentType ?? "text/event-stream",
114
- });
115
- },
116
- respondWithError(method, match, error) {
117
- errorRules.push({ method: method.toUpperCase(), match, error });
118
- },
119
- get lastRequest() {
120
- return lastRequest;
121
- },
122
- requests,
123
- reset() {
124
- rules.length = 0;
125
- errorRules.length = 0;
126
- requests.length = 0;
127
- lastRequest = null;
128
- },
129
- };
130
- }
131
-
132
- function matchUrl(match: RegExp | string, url: string): boolean {
133
- if (typeof match === "string") return url.endsWith(match) || url.includes(match);
134
- return match.test(url);
135
- }
136
-
137
- function parseHeaders(h: HeadersInit | undefined): Record<string, string> {
138
- if (!h) return {};
139
- if (h instanceof Headers) {
140
- const out: Record<string, string> = {};
141
- h.forEach((v, k) => {
142
- out[k] = v;
143
- });
144
- return out;
145
- }
146
- if (Array.isArray(h)) {
147
- const out: Record<string, string> = {};
148
- for (const [k, v] of h) out[k] = v;
149
- return out;
150
- }
151
- return { ...(h as Record<string, string>) };
152
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Test fixture: build an SSE ReadableStream from a list of events.
3
- */
4
-
5
- import type { DashboardEvent } from "../../src/types.js";
6
-
7
- export function sseStream(events: DashboardEvent[]): ReadableStream<Uint8Array> {
8
- const encoder = new TextEncoder();
9
- return new ReadableStream<Uint8Array>({
10
- start(controller) {
11
- for (const event of events) {
12
- const chunk = `event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`;
13
- controller.enqueue(encoder.encode(chunk));
14
- }
15
- controller.close();
16
- },
17
- });
18
- }
19
-
20
- export function sseRawStream(chunks: string[]): ReadableStream<Uint8Array> {
21
- const encoder = new TextEncoder();
22
- return new ReadableStream<Uint8Array>({
23
- start(controller) {
24
- for (const chunk of chunks) {
25
- controller.enqueue(encoder.encode(chunk));
26
- }
27
- controller.close();
28
- },
29
- });
30
- }
@@ -1,142 +0,0 @@
1
- # plugins/bizar/ — Architecture
2
-
3
- > The Cline plugin entry and all 19 tools. This module is Layer 0
4
- > (Core) and runs inside the Cline host. See
5
- > [docs/architecture.md](../docs/architecture.md) for the layer
6
- > model.
7
-
8
- ## Top-level layout
9
-
10
- ```
11
- plugins/bizar/
12
- ├── index.ts # AgentPlugin entry; setup() + tools + hooks
13
- ├── src/
14
- │ ├── clineruntime.ts # ClineCore wrapper (in-process)
15
- │ ├── memory-vault.ts # Obsidian-compatible vault (in-process)
16
- │ ├── dangerous-patterns.ts # 36 safety patterns (v6.0.0)
17
- │ ├── background.ts # InstanceManager (state tracking)
18
- │ ├── background-state.ts # Persisted state shape
19
- │ ├── plan-fs.ts # Plan directory read/write
20
- │ ├── plan-schema.ts # Zod schema for plans
21
- │ ├── settings.ts # User settings store
22
- │ ├── state.ts # Session state store (loop guard)
23
- │ ├── settings-store.ts # Settings file IO
24
- │ ├── log-writer.ts # Append-only tool-call log
25
- │ ├── reasoning-clean.ts # <think> block stripper for fetch
26
- │ ├── key-rotation.ts # API key rotation for fetch
27
- │ ├── compaction.mjs # Compaction threshold
28
- │ ├── commands.ts # Slash command parser (pure)
29
- │ ├── commands-impl.ts # Slash command executor
30
- │ ├── logger.ts # Logger interface
31
- │ ├── hooks/
32
- │ │ ├── memory-inject.ts # beforeModel hook
33
- │ │ ├── memory-write-on-end.ts # onEvent hook (session.idle/error)
34
- │ │ ├── skill-curator.ts # Closed learning loop (v6.0.0)
35
- │ │ └── memory-flush-on-compact.ts # Pre-compact snapshot (v6.0.0)
36
- │ └── tools/ # 19 tools
37
- │ ├── bg-collect.ts
38
- │ ├── bg-get-comments.ts
39
- │ ├── bg-kill.ts
40
- │ ├── bg-pause.ts
41
- │ ├── bg-report-progress.ts
42
- │ ├── bg-resume.ts
43
- │ ├── bg-send-message.ts
44
- │ ├── bg-spawn.ts
45
- │ ├── bg-status.ts
46
- │ ├── memory-list.ts
47
- │ ├── memory-read.ts
48
- │ ├── memory-search.ts
49
- │ ├── memory-write.ts
50
- │ ├── open-kb.ts
51
- │ ├── plan-action.ts
52
- │ ├── read-glyph-feedback.ts
53
- │ ├── team-spawn.ts
54
- │ ├── team-status.ts
55
- │ ├── wait-for-feedback.ts
56
- │ ├── graph-query.ts # Knowledge graph (v6.0.0)
57
- │ ├── graph-path.ts # Shortest path (v6.0.0)
58
- │ └── graph-explain.ts # Node summary (v6.0.0)
59
- └── tests/ # bun:test (45 files)
60
- ```
61
-
62
- ## Public contract
63
-
64
- ```ts
65
- const plugin: AgentPlugin = {
66
- name: "bizar",
67
- manifest: { capabilities: ["tools", "hooks"] },
68
- hooks: {...}, // computed from runtimeCtx
69
- async setup(api, ctx) {
70
- const { runtimeCtx, tools } = await initRuntime(api, ctx);
71
- for (const t of tools) api.registerTool(t);
72
- },
73
- };
74
- export default plugin;
75
- ```
76
-
77
- ## Tools (19 total)
78
-
79
- | Category | Count | Tools |
80
- | --- | --- | --- |
81
- | **Background agents** | 9 | `bizar_spawn_background`, `bizar_status`, `bizar_collect`, `bizar_kill`, `bizar_pause`, `bizar_resume`, `bizar_send_message`, `bizar_get_comments`, `bizar_report_progress` |
82
- | **Memory** | 4 | `bizar_memory_list`, `bizar_memory_read`, `bizar_memory_write`, `bizar_memory_search` |
83
- | **Plan / Glyphs** | 4 | `bizar_plan_action`, `bizar_open_kb`, `bizar_wait_for_feedback`, `bizar_read_glyph_feedback` |
84
- | **Cline agent teams** | 2 | `bizar_spawn_team`, `bizar_team_status` |
85
- | **Knowledge graph** | 3 | `bizar_graph_query`, `bizar_graph_path`, `bizar_graph_explain` |
86
- | **Total** | **22** | (19 + 3 graph) |
87
-
88
- > Note: 19 was the count before v6.0.0 added the 3 graph tools.
89
- > Current total: **22 tools**.
90
-
91
- ## Hooks (4 + 2 safety)
92
-
93
- | Hook | Purpose |
94
- | --- | --- |
95
- | `beforeTool` | Loop guard + DANGEROUS_PATTERNS gate |
96
- | `afterTool` | Per-tool-call log to `LogWriter` |
97
- | `beforeModel` | Pre-compaction memory flush (writes snapshot to vault) |
98
- | `onEvent` | `message-added` (slash commands) + `run-finished`/`run-failed` (memory write) |
99
-
100
- | Safety hook | Purpose |
101
- | --- | --- |
102
- | `skill-curator` (manual) | Reports skill usage + flags revisions |
103
- | `memory-flush-on-compact` (auto) | Writes snapshot to vault when `shouldCompact()` returns true |
104
-
105
- ## State flow
106
-
107
- 1. `setup()` builds the runtime context (logger, env flags,
108
- stores).
109
- 2. Brings up `ClineRuntime` (best-effort; team tools only if
110
- it works).
111
- 3. Brings up `InstanceManager` in bg-only mode (no HTTP).
112
- 4. Builds 22 tools via `buildTools(runtimeCtx, instanceManager,
113
- clineRuntime)`.
114
- 5. Each tool uses
115
- `createTool({ name, description, inputSchema: z.object({...}).shape, execute })`.
116
- 6. Hooks are computed lazily from the runtime context.
117
-
118
- ## Key invariants
119
-
120
- - **Plugin must NOT import from `bizar-dash/`** (Layer 1).
121
- - **Memory tools MUST use the in-process vault** (no HTTP).
122
- - **Tools MUST use `createTool`** (no manual `AgentTool` shapes).
123
- - **ClineRuntime MUST be used** (no `cline serve` subprocess).
124
- - **All tool calls MUST pass `checkDangerous()`** in `beforeTool`.
125
- - **Compaction MUST trigger a flush** in `beforeModel`.
126
-
127
- ## Verification
128
-
129
- - `make check` — TS compile + tests
130
- - `make e2e` — real plugin load + 27 tool/hook checks
131
- - `make check-arch` — arch-rules.json enforcement (7 rules)
132
- - `make clean-check` — 5-dimension clean-state check
133
-
134
- ## See also
135
-
136
- - [plugins/bizar/CONSTRAINTS.md](CONSTRAINTS.md) — module hard rules
137
- - [docs/architecture.md](../docs/architecture.md) — layer model
138
- - [docs/safety.md](../docs/safety.md) — DANGEROUS_PATTERNS reference
139
- - [docs/curator.md](../docs/curator.md) — Skill curator
140
- - [docs/graph-tools.md](../docs/graph-tools.md) — Graph tools
141
- - [docs/decisions/DEC-001-cline-rewrite.md](../docs/decisions/DEC-001-cline-rewrite.md)
142
- — the OpenCode → Cline rewrite
@@ -1,67 +0,0 @@
1
- # plugins/bizar/ — Hard Rules
2
-
3
- > Module-specific hard rules. These complement the root
4
- > [AGENTS.md](../../AGENTS.md) constraints. Violations break the
5
- > plugin's portability or safety guarantees.
6
-
7
- ## Hard rules
8
-
9
- - **MUST** use `createTool` from `@cline/sdk` for every tool.
10
- # why: Ensures the `AgentTool` shape is correct and the host can
11
- # validate the inputSchema.
12
- - **MUST** use the in-process `ClineRuntime` (no `cline serve` subprocess).
13
- # why: The subprocess hangs in headless test environments.
14
- - **MUST** use the in-process `memory-vault.ts` for memory operations.
15
- # why: The plugin must work without the dashboard.
16
- - **MUST** run the `InstanceManager` in bg-only mode (http=null).
17
- # why: No HTTP server means no background-agent controls via HTTP.
18
- # The dashboard owns the actual Cline session lifecycle.
19
- - **MUST NOT** import from `bizar-dash/`.
20
- # why: Cross-layer violation. Use `@cline/sdk` or `packages/sdk/`.
21
- - **MUST NOT** use `fetch('http://127.0.0.1:...')` for memory.
22
- # why: The plugin must work in-process without a dashboard.
23
- - **MUST NOT** return `{ output: JSON.stringify(...) }` from tool `execute()`.
24
- # why: Use the structured `AgentToolResult` shape (`{ ok, ... }`).
25
- - **MUST NOT** hand-roll `AgentTool` shapes (use `createTool`).
26
- # why: Hand-rolled tools drift from the Cline contract.
27
- - **MUST** pass every tool call through `checkDangerous()` in `beforeTool`.
28
- # why: 36 dangerous patterns must be checked before the call
29
- # reaches the host. Deny decisions stop the call.
30
- - **MUST** call `createMemoryFlushOnCompact().maybeFlush()` in
31
- `beforeModel` when usage crosses the compaction threshold.
32
- # why: Compaction drops context before persistence; the flush
33
- # writes a durable snapshot first.
34
- - **MUST NOT** spawn subagents with `rm -rf`, `sudo`, SSRF, or
35
- prompt-injection content. (Enforced by `checkDangerous()`.)
36
- # why: Defense in depth — even legitimate agents sometimes
37
- # generate bad tool calls.
38
-
39
- ## Soft rules
40
-
41
- - Prefer `bun:test` over `vitest` for new tests.
42
- - Prefer `Bun.file().text()` over `fs.readFileSync` for async reads.
43
- - Use `logger.debug()` not `console.debug()`.
44
- - Use `process.env.BIZAR_*` for environment-driven config.
45
- - The plugin's `setup()` should not block. Use `try/catch` for
46
- ClineRuntime setup; fall back gracefully.
47
-
48
- ## Anti-patterns
49
-
50
- - ❌ Adding new tool types via the old OpenCode `tool()` factory
51
- → Use `createTool()`.
52
- - ❌ Putting state in the plugin entry's module scope
53
- → Use `ctx.stateStore` for per-session state.
54
- - ❌ Calling `process.exit()` from a hook
55
- → Return `{ stop: true, reason: '...' }` to the host.
56
- - ❌ Spawning long-lived side effects in `beforeTool`
57
- → Use the `afterTool` hook for post-call actions.
58
- - ❌ Skipping `checkDangerous()` for "trusted" tools
59
- → All tool calls go through the gate, no exceptions.
60
-
61
- ## When in doubt
62
-
63
- 1. Read [docs/architecture.md](../../docs/architecture.md) for the layer model.
64
- 2. Check [.harness/arch-rules.json](../../.harness/arch-rules.json) for enforced rules.
65
- 3. Run `make check-arch` before committing.
66
- 4. Read [docs/decisions/DEC-007-tool-approval-gate.md](../../docs/decisions/DEC-007-tool-approval-gate.md)
67
- for the safety gate.
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 DrB0rk
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.