@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
@@ -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.