@polderlabs/bizar 6.2.5 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) 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/hooks/worker-suggest.mjs +110 -0
  41. package/.claude/settings.json +125 -0
  42. package/.claude/skills/9router/SKILL.md +80 -0
  43. package/.claude/skills/9router-chat/SKILL.md +73 -0
  44. package/.claude/skills/9router-embeddings/SKILL.md +69 -0
  45. package/.claude/skills/9router-image/SKILL.md +86 -0
  46. package/.claude/skills/9router-stt/SKILL.md +79 -0
  47. package/.claude/skills/9router-tts/SKILL.md +80 -0
  48. package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
  49. package/.claude/skills/9router-web-search/SKILL.md +91 -0
  50. package/.claude/skills/bizar/README.md +9 -0
  51. package/.claude/skills/bizar/SKILL.md +450 -0
  52. package/.claude/skills/cpp-coding-standards/README.md +28 -0
  53. package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
  54. package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
  55. package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
  56. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  57. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  58. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  59. package/.claude/skills/cpp-testing/README.md +28 -0
  60. package/.claude/skills/cpp-testing/SKILL.md +304 -0
  61. package/.claude/skills/cpp-testing/references/coverage.md +370 -0
  62. package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
  63. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  64. package/.claude/skills/cpp-testing/references/mocking.md +364 -0
  65. package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
  66. package/.claude/skills/cubesandbox/SKILL.md +148 -0
  67. package/.claude/skills/embedded-esp-idf/README.md +41 -0
  68. package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
  69. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  70. package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
  71. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  72. package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
  73. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  74. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  75. package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
  76. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  77. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  78. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  79. package/.claude/skills/glyph/SKILL.md +163 -0
  80. package/.claude/skills/harness-engineering/SKILL.md +143 -0
  81. package/.claude/skills/lightrag/SKILL.md +81 -0
  82. package/.claude/skills/memory-protocol/SKILL.md +105 -0
  83. package/.claude/skills/obsidian/SKILL.md +306 -0
  84. package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
  85. package/.claude/skills/self-improvement/SKILL.md +64 -0
  86. package/README.md +87 -59
  87. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js → EnvVarsSection-CW6fWKds.js} +3 -3
  88. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-CW6fWKds.js.map} +1 -1
  89. package/bizar-dash/dist/assets/MobileChat-D7zRhU9K.js +1 -0
  90. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-D7zRhU9K.js.map} +1 -1
  91. package/bizar-dash/dist/assets/MobileSettings-K-sNsn_r.js +1 -0
  92. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-K-sNsn_r.js.map} +1 -1
  93. package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js → Toast-WTxc3m2g.js} +1 -1
  94. package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js.map → Toast-WTxc3m2g.js.map} +1 -1
  95. package/bizar-dash/dist/assets/flow-BpU0-gK2.js +1 -0
  96. package/bizar-dash/dist/assets/flow-BpU0-gK2.js.map +1 -0
  97. package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js +1 -0
  98. package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js.map +1 -0
  99. package/bizar-dash/dist/assets/{icons-Do5N2jmX.js → icons-B0AKnYI3.js} +98 -103
  100. package/bizar-dash/dist/assets/icons-B0AKnYI3.js.map +1 -0
  101. package/bizar-dash/dist/assets/main-C-Md3DaY.css +1 -0
  102. package/bizar-dash/dist/assets/main-CO8fIxQK.js +18 -0
  103. package/bizar-dash/dist/assets/main-CO8fIxQK.js.map +1 -0
  104. package/bizar-dash/dist/assets/markdown-w2bDDkAH.js +1 -0
  105. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-w2bDDkAH.js.map} +1 -1
  106. package/bizar-dash/dist/assets/mobile-DXYCA0hC.js +1 -0
  107. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DXYCA0hC.js.map} +1 -1
  108. package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js +2 -0
  109. package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js.map +1 -0
  110. package/bizar-dash/dist/assets/react-vendor-BnuhLJ6X.css +1 -0
  111. package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js +46 -0
  112. package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js.map +1 -0
  113. package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js +2 -0
  114. package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js.map +1 -0
  115. package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js +45 -0
  116. package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js.map +1 -0
  117. package/bizar-dash/dist/index.html +12 -10
  118. package/bizar-dash/dist/mobile.html +7 -4
  119. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  120. package/bizar-dash/src/server/api.mjs +15 -4
  121. package/bizar-dash/src/server/background-store.mjs +15 -16
  122. package/bizar-dash/src/server/bg-poller.mjs +25 -35
  123. package/bizar-dash/src/server/bg-retry.mjs +66 -194
  124. package/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
  125. package/bizar-dash/src/server/claude-info.mjs +412 -0
  126. package/bizar-dash/src/server/{cline-runner.mjs → claude-runner.mjs} +53 -48
  127. package/bizar-dash/src/server/claude-sdk.mjs +191 -0
  128. package/bizar-dash/src/server/memory-consolidator.mjs +218 -0
  129. package/bizar-dash/src/server/memory-distillation.mjs +296 -0
  130. package/bizar-dash/src/server/providers-store.mjs +22 -49
  131. package/bizar-dash/src/server/routes/background.mjs +24 -20
  132. package/bizar-dash/src/server/routes/chat.mjs +223 -326
  133. package/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
  134. package/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
  135. package/bizar-dash/src/server/routes/distill.mjs +129 -0
  136. package/bizar-dash/src/server/routes/goal-planner.mjs +236 -0
  137. package/bizar-dash/src/server/routes/tasks.mjs +20 -28
  138. package/bizar-dash/src/server/task-delegator.mjs +76 -77
  139. package/bizar-dash/src/web/App.tsx +4 -0
  140. package/bizar-dash/src/web/components/Tag.tsx +18 -5
  141. package/bizar-dash/src/web/components/Topbar.tsx +3 -0
  142. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +126 -0
  143. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +163 -0
  144. package/bizar-dash/src/web/components/agents/QualityGates.tsx +123 -0
  145. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +127 -0
  146. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +148 -0
  147. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +160 -0
  148. package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
  149. package/bizar-dash/src/web/components/goals/GoalInput.tsx +86 -0
  150. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +111 -0
  151. package/bizar-dash/src/web/lib/goapPlanner.ts +614 -0
  152. package/bizar-dash/src/web/lib/types.ts +25 -0
  153. package/bizar-dash/src/web/styles/agents-redesign.css +311 -0
  154. package/bizar-dash/src/web/styles/main.css +251 -0
  155. package/bizar-dash/src/web/styles/tasks-redesign.css +231 -0
  156. package/bizar-dash/src/web/ui/controls/Button.tsx +77 -0
  157. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +95 -0
  158. package/bizar-dash/src/web/ui/controls/IconButton.tsx +66 -0
  159. package/bizar-dash/src/web/ui/controls/Kbd.tsx +24 -0
  160. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +77 -0
  161. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +109 -0
  162. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +91 -0
  163. package/bizar-dash/src/web/ui/controls/Select.tsx +92 -0
  164. package/bizar-dash/src/web/ui/controls/Slider.tsx +70 -0
  165. package/bizar-dash/src/web/ui/controls/TextInput.tsx +67 -0
  166. package/bizar-dash/src/web/ui/controls/Toggle.tsx +79 -0
  167. package/bizar-dash/src/web/ui/controls/controls.css +454 -0
  168. package/bizar-dash/src/web/ui/controls/index.ts +33 -0
  169. package/bizar-dash/src/web/ui/data/BarChart.tsx +60 -0
  170. package/bizar-dash/src/web/ui/data/DataTable.tsx +216 -0
  171. package/bizar-dash/src/web/ui/data/EmptyState.tsx +60 -0
  172. package/bizar-dash/src/web/ui/data/ErrorState.tsx +56 -0
  173. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +106 -0
  174. package/bizar-dash/src/web/ui/data/LoadingState.tsx +65 -0
  175. package/bizar-dash/src/web/ui/data/Sparkline.tsx +87 -0
  176. package/bizar-dash/src/web/ui/data/StatTile.tsx +87 -0
  177. package/bizar-dash/src/web/ui/data/data.css +535 -0
  178. package/bizar-dash/src/web/ui/data/index.ts +31 -0
  179. package/bizar-dash/src/web/ui/feedback/Badge.tsx +49 -0
  180. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +209 -0
  181. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +69 -0
  182. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +50 -0
  183. package/bizar-dash/src/web/ui/feedback/Toast.tsx +200 -0
  184. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +126 -0
  185. package/bizar-dash/src/web/ui/feedback/feedback.css +314 -0
  186. package/bizar-dash/src/web/ui/feedback/index.ts +43 -0
  187. package/bizar-dash/src/web/ui/index.ts +56 -0
  188. package/bizar-dash/src/web/ui/layout/AppShell.tsx +51 -0
  189. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +97 -0
  190. package/bizar-dash/src/web/ui/layout/Panel.tsx +73 -0
  191. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +39 -0
  192. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +131 -0
  193. package/bizar-dash/src/web/ui/layout/Tabs.tsx +133 -0
  194. package/bizar-dash/src/web/ui/layout/Topbar.tsx +42 -0
  195. package/bizar-dash/src/web/ui/layout/index.ts +33 -0
  196. package/bizar-dash/src/web/ui/layout/layout.css +413 -0
  197. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +199 -0
  198. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +95 -0
  199. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +93 -0
  200. package/bizar-dash/src/web/ui/navigation/index.ts +17 -0
  201. package/bizar-dash/src/web/ui/navigation/navigation.css +343 -0
  202. package/bizar-dash/src/web/ui/primitives/Box.tsx +91 -0
  203. package/bizar-dash/src/web/ui/primitives/Grid.tsx +49 -0
  204. package/bizar-dash/src/web/ui/primitives/Inline.tsx +55 -0
  205. package/bizar-dash/src/web/ui/primitives/Separator.tsx +46 -0
  206. package/bizar-dash/src/web/ui/primitives/Stack.tsx +54 -0
  207. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +26 -0
  208. package/bizar-dash/src/web/ui/primitives/index.ts +23 -0
  209. package/bizar-dash/src/web/ui/primitives/primitives.css +183 -0
  210. package/bizar-dash/src/web/ui/styles/globals.css +86 -0
  211. package/bizar-dash/src/web/ui/styles/reset.css +125 -0
  212. package/bizar-dash/src/web/ui/styles/tokens.css +195 -0
  213. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +142 -0
  214. package/bizar-dash/src/web/ui/theme/tokens.ts +131 -0
  215. package/bizar-dash/src/web/ui/theme/useTheme.ts +22 -0
  216. package/bizar-dash/src/web/ui/utils/cx.ts +42 -0
  217. package/bizar-dash/src/web/views/Agents.tsx +506 -266
  218. package/bizar-dash/src/web/views/Chat.tsx +8 -8
  219. package/bizar-dash/src/web/views/GoalPlanner.tsx +158 -0
  220. package/bizar-dash/src/web/views/Overview.tsx +996 -448
  221. package/bizar-dash/src/web/views/Tasks.tsx +277 -273
  222. package/bizar-dash/tests/communication-log.test.tsx +67 -0
  223. package/bizar-dash/tests/dep-graph.test.tsx +40 -0
  224. package/bizar-dash/tests/event-log.test.tsx +61 -0
  225. package/bizar-dash/tests/goal-input.test.tsx +72 -0
  226. package/bizar-dash/tests/goap-planner.test.ts +68 -0
  227. package/bizar-dash/tests/quality-gates.test.tsx +59 -0
  228. package/bizar-dash/tests/setup.ts +31 -1
  229. package/bizar-dash/tests/ui/controls/Button.test.tsx +50 -0
  230. package/bizar-dash/tests/ui/controls/Checkbox.test.tsx +44 -0
  231. package/bizar-dash/tests/ui/controls/IconButton.test.tsx +37 -0
  232. package/bizar-dash/tests/ui/controls/Kbd.test.tsx +39 -0
  233. package/bizar-dash/tests/ui/controls/NumberInput.test.tsx +56 -0
  234. package/bizar-dash/tests/ui/controls/RadioGroup.test.tsx +58 -0
  235. package/bizar-dash/tests/ui/controls/SearchInput.test.tsx +52 -0
  236. package/bizar-dash/tests/ui/controls/Select.test.tsx +66 -0
  237. package/bizar-dash/tests/ui/controls/Slider.test.tsx +41 -0
  238. package/bizar-dash/tests/ui/controls/TextInput.test.tsx +44 -0
  239. package/bizar-dash/tests/ui/controls/Toggle.test.tsx +39 -0
  240. package/bizar-dash/tests/ui/data/BarChart.test.tsx +55 -0
  241. package/bizar-dash/tests/ui/data/DataTable.test.tsx +112 -0
  242. package/bizar-dash/tests/ui/data/EmptyState.test.tsx +57 -0
  243. package/bizar-dash/tests/ui/data/ErrorState.test.tsx +47 -0
  244. package/bizar-dash/tests/ui/data/KeyValueList.test.tsx +59 -0
  245. package/bizar-dash/tests/ui/data/LoadingState.test.tsx +37 -0
  246. package/bizar-dash/tests/ui/data/Sparkline.test.tsx +56 -0
  247. package/bizar-dash/tests/ui/data/StatTile.test.tsx +69 -0
  248. package/bizar-dash/tests/ui/feedback/Badge.test.tsx +41 -0
  249. package/bizar-dash/tests/ui/feedback/Dialog.test.tsx +99 -0
  250. package/bizar-dash/tests/ui/feedback/ProgressBar.test.tsx +66 -0
  251. package/bizar-dash/tests/ui/feedback/StatusDot.test.tsx +41 -0
  252. package/bizar-dash/tests/ui/feedback/Toast.test.tsx +124 -0
  253. package/bizar-dash/tests/ui/feedback/Tooltip.test.tsx +102 -0
  254. package/bizar-dash/tests/ui/layout/AppShell.test.tsx +50 -0
  255. package/bizar-dash/tests/ui/layout/Breadcrumbs.test.tsx +85 -0
  256. package/bizar-dash/tests/ui/layout/Panel.test.tsx +52 -0
  257. package/bizar-dash/tests/ui/layout/PanelHeader.test.tsx +32 -0
  258. package/bizar-dash/tests/ui/layout/Sidebar.test.tsx +95 -0
  259. package/bizar-dash/tests/ui/layout/Tabs.test.tsx +87 -0
  260. package/bizar-dash/tests/ui/layout/Topbar.test.tsx +41 -0
  261. package/bizar-dash/tests/ui/navigation/CommandPalette.test.tsx +105 -0
  262. package/bizar-dash/tests/ui/navigation/NavGroup.test.tsx +55 -0
  263. package/bizar-dash/tests/ui/navigation/NavLink.test.tsx +61 -0
  264. package/bizar-dash/tests/ui/primitives/Box.test.tsx +49 -0
  265. package/bizar-dash/tests/ui/primitives/Grid.test.tsx +37 -0
  266. package/bizar-dash/tests/ui/primitives/Inline.test.tsx +33 -0
  267. package/bizar-dash/tests/ui/primitives/Separator.test.tsx +34 -0
  268. package/bizar-dash/tests/ui/primitives/Stack.test.tsx +45 -0
  269. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +27 -0
  270. package/bizar-dash/tests/views/Agents.test.tsx +359 -0
  271. package/bizar-dash/tests/views/Overview.test.tsx +413 -0
  272. package/bizar-dash/tests/views/Tasks.test.tsx +250 -0
  273. package/bizar-dash/vitest.config.ts +3 -1
  274. package/cli/__tests__/cost-gate.test.mjs +301 -0
  275. package/cli/__tests__/feature-list-bridge.test.mjs +371 -0
  276. package/cli/bin.mjs +55 -18
  277. package/cli/commands/claim.mjs +282 -0
  278. package/cli/commands/claude-cmd.mjs +348 -0
  279. package/cli/commands/cost.mjs +279 -0
  280. package/cli/commands/install.mjs +12 -11
  281. package/cli/commands/validate.mjs +252 -325
  282. package/cli/cost-gate.mjs +501 -0
  283. package/cli/dev-link.test.mjs +11 -11
  284. package/cli/doctor.mjs +131 -213
  285. package/cli/feature-list-bridge.mjs +400 -0
  286. package/cli/install.mjs +33 -37
  287. package/cli/install.test.mjs +9 -9
  288. package/cli/memory-constants.mjs +17 -0
  289. package/cli/provision-claude.mjs +893 -0
  290. package/cli/provision.mjs +224 -227
  291. package/cli/utils.mjs +72 -58
  292. package/cli/worker-dispatcher.mjs +259 -0
  293. package/cli/worker-dispatcher.test.mjs +204 -0
  294. package/config/AGENTS.md +28 -28
  295. package/config/trigger-patterns.json +186 -0
  296. package/install.sh +66 -44
  297. package/package.json +19 -11
  298. package/packages/sdk/ARCHITECTURE.md +40 -36
  299. package/packages/sdk/package.json +15 -5
  300. package/packages/sdk/src/agent-registry.ts +304 -0
  301. package/packages/sdk/src/consensus/byzantine.ts +587 -0
  302. package/packages/sdk/src/consensus/index.ts +147 -0
  303. package/packages/sdk/src/consensus/queen.ts +173 -0
  304. package/packages/sdk/src/consensus/types.ts +199 -0
  305. package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
  306. package/packages/sdk/src/federation/audit.ts +156 -0
  307. package/packages/sdk/src/federation/budget.ts +269 -0
  308. package/packages/sdk/src/federation/envelope.ts +144 -0
  309. package/packages/sdk/src/federation/hmac.ts +160 -0
  310. package/packages/sdk/src/federation/index.ts +443 -0
  311. package/packages/sdk/src/federation/pii.ts +241 -0
  312. package/packages/sdk/src/federation/policy.ts +112 -0
  313. package/packages/sdk/src/federation/trust.ts +146 -0
  314. package/packages/sdk/src/fingerprint.ts +0 -0
  315. package/packages/sdk/src/index.ts +101 -69
  316. package/packages/sdk/src/mcp/bin.ts +51 -0
  317. package/packages/sdk/src/mcp/server.ts +848 -0
  318. package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
  319. package/packages/sdk/src/router/codemod-intent.ts +125 -0
  320. package/packages/sdk/src/router/index.ts +247 -0
  321. package/packages/sdk/src/router/memory-distillation-shim.mjs +18 -0
  322. package/packages/sdk/src/router/memory-distillation.ts +249 -0
  323. package/packages/sdk/src/router/model-router.ts +235 -0
  324. package/packages/sdk/src/router/q-learning-router.ts +304 -0
  325. package/packages/sdk/src/swarm-topology.ts +279 -0
  326. package/packages/sdk/tests/agent-registry.test.ts +285 -0
  327. package/packages/sdk/tests/consensus.test.ts +376 -0
  328. package/packages/sdk/tests/federation/audit.test.ts +164 -0
  329. package/packages/sdk/tests/federation/budget.test.ts +189 -0
  330. package/packages/sdk/tests/federation/envelope.test.ts +120 -0
  331. package/packages/sdk/tests/federation/hmac.test.ts +194 -0
  332. package/packages/sdk/tests/federation/orchestrator.test.ts +176 -0
  333. package/packages/sdk/tests/federation/pii.test.ts +106 -0
  334. package/packages/sdk/tests/federation/policy.test.ts +140 -0
  335. package/packages/sdk/tests/federation/trust.test.ts +124 -0
  336. package/packages/sdk/tests/mcp-tools.test.ts +204 -0
  337. package/packages/sdk/tests/memory-distillation.test.mjs +186 -0
  338. package/packages/sdk/tests/model-router.test.mjs +108 -0
  339. package/packages/sdk/tests/q-learning-router.test.mjs +100 -0
  340. package/packages/sdk/tests/router-orchestrator.test.mjs +172 -0
  341. package/packages/sdk/tests/router.test.mjs +91 -0
  342. package/packages/sdk/tests/sdk.test.mjs +172 -0
  343. package/packages/sdk/tests/swarm-topology.test.ts +258 -0
  344. package/packages/sdk/vitest.config.ts +1 -1
  345. package/scripts/bh-full-e2e.mjs +167 -368
  346. package/scripts/check-deps.mjs +28 -46
  347. package/scripts/mirror-claude-md.sh +78 -0
  348. package/scripts/test-in-container.sh +31 -9
  349. package/templates/clean-state-checklist.md +3 -3
  350. package/templates/sprint-contract.md +2 -2
  351. package/bizar-dash/.bizar/activity.log +0 -3
  352. package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
  353. package/bizar-dash/.omx/state/session.json +0 -10
  354. package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
  355. package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
  356. package/bizar-dash/bizar-design/canvas.html +0 -281
  357. package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
  358. package/bizar-dash/bizar-design/components.css +0 -1665
  359. package/bizar-dash/bizar-design/components.html +0 -557
  360. package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
  361. package/bizar-dash/bizar-design/desktop/agents.html +0 -74
  362. package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
  363. package/bizar-dash/bizar-design/desktop/memory.html +0 -75
  364. package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
  365. package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
  366. package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
  367. package/bizar-dash/bizar-design/desktop/overview.html +0 -95
  368. package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
  369. package/bizar-dash/bizar-design/desktop/settings.html +0 -70
  370. package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
  371. package/bizar-dash/bizar-design/icons.svg +0 -44
  372. package/bizar-dash/bizar-design/index.html +0 -192
  373. package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
  374. package/bizar-dash/bizar-design/mobile/agents.html +0 -29
  375. package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
  376. package/bizar-dash/bizar-design/mobile/memory.html +0 -28
  377. package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
  378. package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
  379. package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
  380. package/bizar-dash/bizar-design/mobile/overview.html +0 -33
  381. package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
  382. package/bizar-dash/bizar-design/mobile/settings.html +0 -28
  383. package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
  384. package/bizar-dash/bizar-design/prototype.js +0 -114
  385. package/bizar-dash/bizar-design/tokens.css +0 -106
  386. package/bizar-dash/dist/assets/MobileChat-BnKN_Ks_.js +0 -1
  387. package/bizar-dash/dist/assets/MobileSettings-DjCPxC-Q.js +0 -1
  388. package/bizar-dash/dist/assets/icons-Do5N2jmX.js.map +0 -1
  389. package/bizar-dash/dist/assets/main-DYiZqMrn.js +0 -18
  390. package/bizar-dash/dist/assets/main-DYiZqMrn.js.map +0 -1
  391. package/bizar-dash/dist/assets/main-ietCEg_R.css +0 -1
  392. package/bizar-dash/dist/assets/markdown-C6mXtQxD.js +0 -1
  393. package/bizar-dash/dist/assets/mobile-CMHqtLV2.js +0 -1
  394. package/bizar-dash/dist/assets/mobile-layout-3jIhHX_p.js +0 -2
  395. package/bizar-dash/dist/assets/mobile-layout-3jIhHX_p.js.map +0 -1
  396. package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js +0 -40
  397. package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js.map +0 -1
  398. package/bizar-dash/dist/assets/useSlashCommands-DtITw8Xv.js +0 -2
  399. package/bizar-dash/dist/assets/useSlashCommands-DtITw8Xv.js.map +0 -1
  400. package/bizar-dash/dist/assets/vendor-CeHGtduv.js +0 -29
  401. package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
  402. package/bizar-dash/node_modules/.package-lock.json +0 -6
  403. package/bizar-dash/package-lock.json +0 -6
  404. package/bizar-dash/src/server/cline-sdk.mjs +0 -132
  405. package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
  406. package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
  407. package/cli/commands/cline-cmd.mjs +0 -289
  408. package/cli/commands/validate.test.mjs +0 -379
  409. package/cli/doctor.test.mjs +0 -350
  410. package/config/cline.json.template +0 -342
  411. package/packages/sdk/src/client.ts +0 -188
  412. package/packages/sdk/src/cline-events.ts +0 -134
  413. package/packages/sdk/src/cline-types.ts +0 -66
  414. package/packages/sdk/src/cline.ts +0 -339
  415. package/packages/sdk/src/errors.ts +0 -129
  416. package/packages/sdk/src/events.ts +0 -153
  417. package/packages/sdk/src/types.ts +0 -176
  418. package/packages/sdk/tests/client.test.ts +0 -217
  419. package/packages/sdk/tests/errors.test.ts +0 -108
  420. package/packages/sdk/tests/events.test.ts +0 -139
  421. package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
  422. package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
  423. package/plugins/bizar/ARCHITECTURE.md +0 -142
  424. package/plugins/bizar/CONSTRAINTS.md +0 -67
  425. package/plugins/bizar/LICENSE +0 -21
  426. package/plugins/bizar/README.md +0 -448
  427. package/plugins/bizar/index.ts +0 -925
  428. package/plugins/bizar/package.json +0 -39
  429. package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
  430. package/plugins/bizar/src/background-state.ts +0 -641
  431. package/plugins/bizar/src/background.ts +0 -1806
  432. package/plugins/bizar/src/cline-runner.ts +0 -203
  433. package/plugins/bizar/src/clineruntime.ts +0 -227
  434. package/plugins/bizar/src/commands-impl.ts +0 -151
  435. package/plugins/bizar/src/commands.ts +0 -1799
  436. package/plugins/bizar/src/compaction.d.mts +0 -48
  437. package/plugins/bizar/src/compaction.mjs +0 -192
  438. package/plugins/bizar/src/dashboard-client.ts +0 -233
  439. package/plugins/bizar/src/event-stream.ts +0 -606
  440. package/plugins/bizar/src/fingerprint.ts +0 -120
  441. package/plugins/bizar/src/handoff.ts +0 -79
  442. package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
  443. package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
  444. package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
  445. package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
  446. package/plugins/bizar/src/http-client.ts +0 -467
  447. package/plugins/bizar/src/key-rotation.ts +0 -218
  448. package/plugins/bizar/src/logger.ts +0 -144
  449. package/plugins/bizar/src/loop-engineering.ts +0 -241
  450. package/plugins/bizar/src/loop.ts +0 -176
  451. package/plugins/bizar/src/mistake-recovery.ts +0 -98
  452. package/plugins/bizar/src/odin.ts +0 -227
  453. package/plugins/bizar/src/options.ts +0 -470
  454. package/plugins/bizar/src/plan-fs.ts +0 -323
  455. package/plugins/bizar/src/reasoning-clean.ts +0 -454
  456. package/plugins/bizar/src/report.ts +0 -178
  457. package/plugins/bizar/src/research-prompt.ts +0 -35
  458. package/plugins/bizar/src/serve-info.ts +0 -228
  459. package/plugins/bizar/src/serve.ts +0 -496
  460. package/plugins/bizar/src/settings.ts +0 -349
  461. package/plugins/bizar/src/state.ts +0 -298
  462. package/plugins/bizar/src/tool-discipline.ts +0 -105
  463. package/plugins/bizar/src/tools/agent-browser.ts +0 -315
  464. package/plugins/bizar/src/tools/bg-collect.ts +0 -131
  465. package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
  466. package/plugins/bizar/src/tools/bg-kill.ts +0 -116
  467. package/plugins/bizar/src/tools/bg-pause.ts +0 -99
  468. package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
  469. package/plugins/bizar/src/tools/bg-resume.ts +0 -94
  470. package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
  471. package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
  472. package/plugins/bizar/src/tools/bg-status.ts +0 -130
  473. package/plugins/bizar/src/tools/graph-query.ts +0 -278
  474. package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
  475. package/plugins/bizar/src/tools/memory-list.ts +0 -43
  476. package/plugins/bizar/src/tools/memory-read.ts +0 -69
  477. package/plugins/bizar/src/tools/memory-search.ts +0 -47
  478. package/plugins/bizar/src/tools/memory-write.ts +0 -54
  479. package/plugins/bizar/src/tools/open-kb.ts +0 -198
  480. package/plugins/bizar/src/tools/plan-action.ts +0 -785
  481. package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
  482. package/plugins/bizar/src/tools/sandbox.ts +0 -232
  483. package/plugins/bizar/src/tools/team-spawn.ts +0 -73
  484. package/plugins/bizar/src/tools/team-status.ts +0 -76
  485. package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
  486. package/plugins/bizar/src/trajectory.ts +0 -104
  487. package/plugins/bizar/tests/README.md +0 -99
  488. package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
  489. package/plugins/bizar/tests/background-state.test.ts +0 -277
  490. package/plugins/bizar/tests/background.test.ts +0 -402
  491. package/plugins/bizar/tests/block.test.ts +0 -195
  492. package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
  493. package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
  494. package/plugins/bizar/tests/commands-impl.test.ts +0 -316
  495. package/plugins/bizar/tests/commands.test.ts +0 -584
  496. package/plugins/bizar/tests/compaction.test.ts +0 -264
  497. package/plugins/bizar/tests/config.test.ts +0 -128
  498. package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
  499. package/plugins/bizar/tests/dispose.test.ts +0 -336
  500. package/plugins/bizar/tests/event-stream.test.ts +0 -409
  501. package/plugins/bizar/tests/event.test.ts +0 -262
  502. package/plugins/bizar/tests/fingerprint.test.ts +0 -190
  503. package/plugins/bizar/tests/http-client.test.ts +0 -404
  504. package/plugins/bizar/tests/init-helpers.test.ts +0 -203
  505. package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
  506. package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
  507. package/plugins/bizar/tests/key-rotation.test.ts +0 -396
  508. package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
  509. package/plugins/bizar/tests/loop.test.ts +0 -397
  510. package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
  511. package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
  512. package/plugins/bizar/tests/odin.test.ts +0 -125
  513. package/plugins/bizar/tests/options.test.ts +0 -329
  514. package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
  515. package/plugins/bizar/tests/safety.test.ts +0 -281
  516. package/plugins/bizar/tests/serve.test.ts +0 -339
  517. package/plugins/bizar/tests/settings.test.ts +0 -351
  518. package/plugins/bizar/tests/stall-think.test.ts +0 -750
  519. package/plugins/bizar/tests/state.test.ts +0 -276
  520. package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
  521. package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
  522. package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
  523. package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
  524. package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
  525. package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
  526. package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
  527. package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
  528. package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
  529. package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
  530. package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
  531. package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
  532. package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
  533. package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
  534. package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
  535. package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
  536. package/plugins/bizar/tests/tools/sandbox.test.ts +0 -117
  537. package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
  538. package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
  539. package/plugins/bizar/tsconfig.json +0 -29
  540. package/scripts/mirror-agents-md.sh +0 -69
@@ -1,350 +0,0 @@
1
- /**
2
- * cli/doctor.test.mjs
3
- *
4
- * Tests for the `bizar doctor` subcommand. Uses Node's built-in
5
- * node:test (no external test framework).
6
- *
7
- * Strategy: mock HOME so clineConfigDir() resolves inside a
8
- * tmpdir, and craft the cline.json + agents/ directory to drive
9
- * specific pass/fail outcomes. For checks that depend on global
10
- * npm-installed packages or external CLIs (e.g. cline --version,
11
- * npm root -g, which headroom), we accept that they may pass or fail
12
- * depending on the test environment and just verify the framework
13
- * returns the right shape.
14
- */
15
- import { test, describe, beforeEach, afterEach } from 'node:test';
16
- import assert from 'node:assert/strict';
17
- import {
18
- mkdtempSync,
19
- mkdirSync,
20
- writeFileSync,
21
- rmSync,
22
- existsSync,
23
- utimesSync,
24
- } from 'node:fs';
25
- import { tmpdir } from 'node:os';
26
- import { join, dirname } from 'node:path';
27
- import { fileURLToPath } from 'node:url';
28
-
29
- const __dirname = dirname(fileURLToPath(import.meta.url));
30
- const PROJECT_ROOT = join(__dirname, '..');
31
-
32
- const { runDoctor } = await import('./doctor.mjs');
33
-
34
- // ── HOME mocking ────────────────────────────────────────────────────────────
35
-
36
- const ORIG_HOME = process.env.HOME;
37
- const ORIG_XDG = process.env.XDG_CONFIG_HOME;
38
-
39
- /**
40
- * Mock HOME so clineConfigDir() resolves to `<tmpdir>/.cline`.
41
- * Returns the tmpdir path.
42
- *
43
- * We don't set XDG_CONFIG_HOME here for the same reason as dev-link.test.mjs:
44
- * the helper treats a set XDG_CONFIG_HOME as the direct parent (so
45
- * `XDG_CONFIG_HOME=~/.config` → `~/.cline`).
46
- */
47
- function freshHome() {
48
- const home = mkdtempSync(join(tmpdir(), 'bizar-doctor-'));
49
- process.env.HOME = home;
50
- delete process.env.CLINE_DIR;
51
- delete process.env.BIZAR_LEGACY_CLINE_DIR;
52
- return home;
53
- }
54
-
55
- afterEach(() => {
56
- if (ORIG_HOME === undefined) delete process.env.HOME;
57
- else process.env.HOME = ORIG_HOME;
58
- if (ORIG_XDG === undefined) {
59
- delete process.env.CLINE_DIR;
60
- delete process.env.BIZAR_LEGACY_CLINE_DIR;
61
- } else {
62
- process.env.XDG_CONFIG_HOME = ORIG_XDG;
63
- }
64
- });
65
-
66
- // ── Shape & silent-mode tests ───────────────────────────────────────────────
67
-
68
- describe('runDoctor() shape', () => {
69
- let home;
70
-
71
- beforeEach(() => {
72
- home = freshHome();
73
- });
74
-
75
- afterEach(() => {
76
- if (home && existsSync(home)) rmSync(home, { recursive: true, force: true });
77
- });
78
-
79
- test('returns { passed, failed, results }', async () => {
80
- const result = await runDoctor({ silent: true });
81
- assert.equal(typeof result.passed, 'number');
82
- assert.equal(typeof result.failed, 'number');
83
- assert.ok(Array.isArray(result.results));
84
- // results should have one entry per check
85
- assert.equal(result.results.length, 9);
86
- assert.equal(result.passed + result.failed, 9);
87
- // Each result has the expected fields
88
- for (const r of result.results) {
89
- assert.equal(typeof r.name, 'string');
90
- assert.equal(typeof r.ok, 'boolean');
91
- assert.equal(typeof r.message, 'string');
92
- }
93
- });
94
-
95
- test('silent mode suppresses per-check output but still prints summary on failure', async () => {
96
- // Capture stdout by overriding console.log.
97
- const lines = [];
98
- const origLog = console.log;
99
- console.log = (...args) => {
100
- lines.push(args.join(' '));
101
- };
102
-
103
- try {
104
- // Empty home → many checks will fail → summary should print.
105
- const result = await runDoctor({ silent: true });
106
- assert.ok(result.failed > 0, 'precondition: some checks should fail');
107
- } finally {
108
- console.log = origLog;
109
- }
110
-
111
- // In silent mode with failures, only the summary line should print
112
- // (an empty leading line is also fine — it's a visual separator).
113
- const summaryLines = lines.filter((l) => /checks passed.*failed/.test(l));
114
- assert.equal(
115
- summaryLines.length,
116
- 1,
117
- `expected exactly 1 summary line in silent+failed mode, got ${summaryLines.length}:\n${lines.join('\n')}`,
118
- );
119
- assert.match(summaryLines[0], /checks passed.*failed/);
120
- });
121
-
122
- test('silent mode suppresses ALL output when nothing fails', async () => {
123
- // Build a fully healthy environment. We can't make cline reachable
124
- // or headroom installed without modifying PATH, so we settle for: no failures
125
- // means no output at all. Since we know some checks will fail in a
126
- // bare tmpdir, this test is structured to assert the negative case
127
- // differently: we verify silent+no-fail produces 0 lines.
128
- //
129
- // For this we mock nothing — the test just confirms the framework
130
- // doesn't print per-check lines when silent is true.
131
- const lines = [];
132
- const origLog = console.log;
133
- console.log = (...args) => {
134
- lines.push(args.join(' '));
135
- };
136
-
137
- try {
138
- await runDoctor({ silent: true });
139
- // Some checks failed (because the env isn't fully healthy).
140
- // What we want to verify is that per-check lines did NOT print.
141
- const perCheckLines = lines.filter((l) =>
142
- /^\s+[✓✗]\s/.test(l) // chalk check markers
143
- );
144
- assert.equal(
145
- perCheckLines.length,
146
- 0,
147
- `silent mode should suppress per-check output, got:\n${perCheckLines.join('\n')}`,
148
- );
149
- } finally {
150
- console.log = origLog;
151
- }
152
- });
153
-
154
- test('non-silent mode prints per-check output', async () => {
155
- const lines = [];
156
- const origLog = console.log;
157
- console.log = (...args) => {
158
- lines.push(args.join(' '));
159
- };
160
-
161
- try {
162
- await runDoctor();
163
- } finally {
164
- console.log = origLog;
165
- }
166
-
167
- // Should have at least 9 per-check lines plus the summary.
168
- const perCheckLines = lines.filter((l) => /^\s+[✓✗]\s/.test(l));
169
- assert.ok(
170
- perCheckLines.length >= 9,
171
- `expected ≥9 per-check lines, got ${perCheckLines.length}`,
172
- );
173
- });
174
- });
175
-
176
- // ── Fixture-driven pass/fail tests ──────────────────────────────────────────
177
-
178
- describe('runDoctor() with fixture HOME', () => {
179
- let home;
180
-
181
- beforeEach(() => {
182
- home = freshHome();
183
- });
184
-
185
- afterEach(() => {
186
- if (home && existsSync(home)) rmSync(home, { recursive: true, force: true });
187
- });
188
-
189
- function writeClineConfig(json) {
190
- const cfgDir = join(home, '.cline');
191
- mkdirSync(cfgDir, { recursive: true });
192
- writeFileSync(join(cfgDir, 'cline.json'), JSON.stringify(json), 'utf8');
193
- return cfgDir;
194
- }
195
-
196
- function writeAgents(...files) {
197
- const agentsDir = join(home, '.cline', 'agents');
198
- mkdirSync(agentsDir, { recursive: true });
199
- for (const f of files) {
200
- writeFileSync(join(agentsDir, f), `# ${f}`, 'utf8');
201
- }
202
- return agentsDir;
203
- }
204
-
205
- function findCheck(result, name) {
206
- return result.results.find((r) => r.name === name);
207
- }
208
-
209
- test('config-valid passes for parseable JSON', async () => {
210
- writeClineConfig({ provider: {} });
211
- const result = await runDoctor({ silent: true });
212
- const r = findCheck(result, 'cline-config-valid');
213
- assert.equal(r.ok, true, `expected config-valid to pass: ${r.message}`);
214
- });
215
-
216
- test('config-valid fails for missing cline.json', async () => {
217
- // No cline.json written.
218
- const result = await runDoctor({ silent: true });
219
- const r = findCheck(result, 'cline-config-valid');
220
- assert.equal(r.ok, false);
221
- assert.match(r.message, /not found/);
222
- });
223
-
224
- test('config-valid fails for invalid JSON', async () => {
225
- const cfgDir = writeClineConfig({});
226
- // Overwrite with garbage
227
- writeFileSync(join(cfgDir, 'cline.json'), '{ this is not json', 'utf8');
228
- const result = await runDoctor({ silent: true });
229
- const r = findCheck(result, 'cline-config-valid');
230
- assert.equal(r.ok, false);
231
- assert.match(r.message, /invalid JSON/);
232
- });
233
-
234
- test('plugin-entry-present fails when plugin[] is empty', async () => {
235
- writeClineConfig({ plugin: [] });
236
- const result = await runDoctor({ silent: true });
237
- const r = findCheck(result, 'plugin-entry-present');
238
- assert.equal(r.ok, false);
239
- });
240
-
241
- test('plugin-entry-present fails when plugin[] has no bizar', async () => {
242
- writeClineConfig({ plugin: ['something-else'] });
243
- const result = await runDoctor({ silent: true });
244
- const r = findCheck(result, 'plugin-entry-present');
245
- assert.equal(r.ok, false);
246
- });
247
-
248
- test('plugin-entry-present passes when plugin[] has bizar string', async () => {
249
- writeClineConfig({ plugin: ['bizar'] });
250
- const result = await runDoctor({ silent: true });
251
- const r = findCheck(result, 'plugin-entry-present');
252
- assert.equal(r.ok, true, r.message);
253
- });
254
-
255
- test('plugin-entry-present passes when plugin[] has bizar object', async () => {
256
- writeClineConfig({ plugin: [{ name: 'bizar', path: './plugins/bizar' }] });
257
- const result = await runDoctor({ silent: true });
258
- const r = findCheck(result, 'plugin-entry-present');
259
- assert.equal(r.ok, true, r.message);
260
- });
261
-
262
- test('plugin-entry-present passes when plugin[] has [path, options] tuple', async () => {
263
- writeClineConfig({ plugin: [['./plugins/bizar/index.ts', { loopThresholdWarn: 5 }]] });
264
- const result = await runDoctor({ silent: true });
265
- const r = findCheck(result, 'plugin-entry-present');
266
- assert.equal(r.ok, true, r.message);
267
- });
268
-
269
- test('plugin-entry-present fails when tuple path does not contain "bizar"', async () => {
270
- writeClineConfig({ plugin: [['./plugins/other/index.ts', {}]] });
271
- const result = await runDoctor({ silent: true });
272
- const r = findCheck(result, 'plugin-entry-present');
273
- assert.equal(r.ok, false);
274
- });
275
-
276
- test('plugin-path-resolves passes when tuple path resolves', async () => {
277
- const home = process.env.HOME;
278
- const pluginsDir = join(home, '.cline', 'plugins', 'bizar');
279
- mkdirSync(pluginsDir, { recursive: true });
280
- writeFileSync(join(pluginsDir, 'index.ts'), '// fake plugin\n', 'utf8');
281
- writeClineConfig({ plugin: [['./plugins/bizar/index.ts', {}]] });
282
- const result = await runDoctor({ silent: true });
283
- const r = findCheck(result, 'plugin-path-resolves');
284
- assert.equal(r.ok, true, r.message);
285
- });
286
-
287
- test('agent-files-installed fails when core agents missing', async () => {
288
- writeClineConfig({});
289
- writeAgents('odin.md'); // missing the other 13
290
- const result = await runDoctor({ silent: true });
291
- const r = findCheck(result, 'agent-files-installed');
292
- assert.equal(r.ok, false);
293
- assert.match(r.message, /missing/);
294
- });
295
-
296
- test('agent-files-installed passes when all 14 agents present', async () => {
297
- writeClineConfig({});
298
- // v3.20.11: doctor now expects all 14 agents (was 4 in v3.20.10).
299
- writeAgents(
300
- 'odin.md', 'vor.md', 'frigg.md', 'quick.md',
301
- 'mimir.md', 'heimdall.md', 'hermod.md', 'thor.md', 'baldr.md',
302
- 'tyr.md', 'vidarr.md', 'forseti.md',
303
- 'semble-search.md', 'agent-browser.md',
304
- );
305
- const result = await runDoctor({ silent: true });
306
- const r = findCheck(result, 'agent-files-installed');
307
- assert.equal(r.ok, true, r.message);
308
- });
309
-
310
- test('provider-config-sanity warns (not fails) without minimax block', async () => {
311
- // v5.x: checkProviderConfigSanity warns instead of throwing when the
312
- // provider.minimax block is missing, since provision.mjs auto-adds it.
313
- writeClineConfig({ provider: {} });
314
- const result = await runDoctor({ silent: true });
315
- const r = findCheck(result, 'provider-config-sanity');
316
- assert.equal(r.ok, true, 'should pass with warning, not throw');
317
- assert.match(r.message, /warn.*minimax|minimax.*missing/i);
318
- });
319
-
320
- test('provider-config-sanity fails when models lack interleaved+reasoning', async () => {
321
- writeClineConfig({
322
- provider: {
323
- minimax: {
324
- models: { 'some-model': { id: 'foo' } },
325
- },
326
- },
327
- });
328
- const result = await runDoctor({ silent: true });
329
- const r = findCheck(result, 'provider-config-sanity');
330
- assert.equal(r.ok, false);
331
- assert.match(r.message, /interleaved.*reasoning/);
332
- });
333
-
334
- test('provider-config-sanity passes with interleaved+reasoning', async () => {
335
- writeClineConfig({
336
- provider: {
337
- minimax: {
338
- models: {
339
- 'MiniMax/MiniMax-M3': { interleaved: true, reasoning: true },
340
- },
341
- },
342
- },
343
- });
344
- const result = await runDoctor({ silent: true });
345
- const r = findCheck(result, 'provider-config-sanity');
346
- assert.equal(r.ok, true, r.message);
347
- });
348
- });
349
-
350
- console.log(' doctor.mjs tests loaded — run with: node --test cli/doctor.test.mjs');
@@ -1,342 +0,0 @@
1
- {
2
- "$schema": "https://docs.cline.bot/config.json",
3
- "instructions": [".cline/instructions/bizar-tools.md"],
4
- "model": "minimaxcustom/MiniMax-M3",
5
- "small_model": "minimaxcustom/MiniMax-M2.7",
6
- "default_agent": "odin",
7
- "permission": "allow",
8
- "snapshot": false,
9
- "mcp": {
10
- "supabase": {
11
- "type": "remote",
12
- "url": "https://mcp.supabase.com/mcp",
13
- "enabled": false
14
- },
15
- "semble": {
16
- "type": "local",
17
- "command": [
18
- "uvx",
19
- "--from",
20
- "semble[mcp]",
21
- "semble"
22
- ],
23
- "enabled": true
24
- }
25
- },
26
- "plugin": [
27
- ["./plugins/bizar/index.ts", {
28
- "loopThresholdWarn": 5,
29
- "loopThresholdEscalate": 8,
30
- "loopThresholdBlock": 12,
31
- "loopWindowSize": 10,
32
- "clineruntimeMaxConsecutiveMistakes": 6,
33
- "compaction": {
34
- "auto": true,
35
- "threshold": 0.5,
36
- "preserve_recent": 10,
37
- "strategy": "summarize",
38
- "model": "minimaxcustom/MiniMax-M3"
39
- }
40
- }]
41
- ],
42
- "tools": {
43
- "bizar_plan_action": true,
44
- "bizar_get_plan_comments": true,
45
- "bizar_wait_for_feedback": true,
46
- "bizar_spawn_background": true,
47
- "bizar_status": true,
48
- "bizar_collect": true,
49
- "bizar_kill": true
50
- },
51
- "agent": {
52
- "odin": {
53
- "description": "Odin — Pure router that delegates all work to subagents.",
54
- "mode": "primary",
55
- "model": "minimaxcustom/MiniMax-M3",
56
- "color": "#6366f1",
57
- "permission": {
58
- "task": "allow",
59
- "read": "allow",
60
- "list": "allow",
61
- "todowrite": "allow",
62
- "webfetch": "allow",
63
- "websearch": "allow"
64
- }
65
- },
66
- "vor": {
67
- "description": "Vör — The Questioning One.",
68
- "mode": "subagent",
69
- "model": "minimaxcustom/MiniMax-M2.7",
70
- "color": "#8b5cf6",
71
- "permission": {
72
- "read": "allow",
73
- "list": "allow",
74
- "question": "allow"
75
- }
76
- },
77
- "frigg": {
78
- "description": "Frigg — All-knowing Q&A agent.",
79
- "mode": "primary",
80
- "model": "minimaxcustom/MiniMax-M2.7",
81
- "color": "#06b6d4",
82
- "permission": {
83
- "read": "allow",
84
- "list": "allow",
85
- "glob": "allow",
86
- "grep": "allow",
87
- "bash": "allow",
88
- "webfetch": "allow",
89
- "websearch": "allow",
90
- "question": "allow"
91
- }
92
- },
93
- "quick": {
94
- "description": "Quick — Fast single-shot tasks.",
95
- "mode": "primary",
96
- "model": "minimaxcustom/MiniMax-M2.7",
97
- "color": "#22d3ee",
98
- "permission": {
99
- "read": "allow",
100
- "edit": "allow",
101
- "write": "allow",
102
- "bash": "allow",
103
- "glob": "allow",
104
- "grep": "allow",
105
- "list": "allow",
106
- "todowrite": "allow",
107
- "webfetch": "allow",
108
- "websearch": "allow",
109
- "task": "deny"
110
- }
111
- },
112
- "mimir": {
113
- "description": "Mimir — Research and codebase exploration agent.",
114
- "mode": "subagent",
115
- "model": "minimaxcustom/MiniMax-M2.7",
116
- "color": "#0ea5e9",
117
- "permission": {
118
- "read": "allow",
119
- "write": "allow",
120
- "edit": "allow",
121
- "bash": "allow",
122
- "glob": "allow",
123
- "grep": "allow",
124
- "list": "allow",
125
- "webfetch": "allow",
126
- "websearch": "allow",
127
- "todowrite": "allow"
128
- }
129
- },
130
- "heimdall": {
131
- "description": "Heimdall — Simple, routine, deterministic tasks.",
132
- "mode": "subagent",
133
- "model": "minimaxcustom/MiniMax-M2.7",
134
- "color": "#10b981",
135
- "permission": {
136
- "read": "allow",
137
- "edit": "allow",
138
- "bash": "allow",
139
- "glob": "allow",
140
- "grep": "allow",
141
- "list": "allow",
142
- "todowrite": "allow",
143
- "webfetch": "allow",
144
- "websearch": "allow"
145
- }
146
- },
147
- "hermod": {
148
- "description": "Hermod — Git and GitHub operations specialist.",
149
- "mode": "subagent",
150
- "model": "minimaxcustom/MiniMax-M2.7",
151
- "color": "#06b6d4",
152
- "permission": {
153
- "read": "allow",
154
- "edit": "allow",
155
- "bash": "allow",
156
- "glob": "allow",
157
- "grep": "allow",
158
- "list": "allow",
159
- "webfetch": "allow",
160
- "websearch": "allow"
161
- }
162
- },
163
- "thor": {
164
- "description": "Thor — Medium-complexity tasks, strong and reliable.",
165
- "mode": "subagent",
166
- "model": "minimaxcustom/MiniMax-M2.7",
167
- "color": "#a855f7",
168
- "permission": {
169
- "read": "allow",
170
- "edit": "allow",
171
- "bash": "allow",
172
- "glob": "allow",
173
- "grep": "allow",
174
- "list": "allow",
175
- "todowrite": "allow",
176
- "webfetch": "allow",
177
- "websearch": "allow"
178
- }
179
- },
180
- "baldr": {
181
- "description": "Baldr — UI/UX design system specialist.",
182
- "mode": "subagent",
183
- "model": "minimaxcustom/MiniMax-M2.7",
184
- "color": "#ec4899",
185
- "permission": {
186
- "read": "allow",
187
- "edit": "allow",
188
- "bash": "allow",
189
- "glob": "allow",
190
- "grep": "allow",
191
- "list": "allow",
192
- "todowrite": "allow",
193
- "webfetch": "allow",
194
- "websearch": "allow"
195
- }
196
- },
197
- "tyr": {
198
- "description": "Tyr — Complex implementation, debugging, architecture.",
199
- "mode": "subagent",
200
- "model": "minimaxcustom/MiniMax-M3",
201
- "color": "#f59e0b",
202
- "permission": {
203
- "read": "allow",
204
- "edit": "allow",
205
- "bash": "allow",
206
- "glob": "allow",
207
- "grep": "allow",
208
- "list": "allow",
209
- "todowrite": "allow",
210
- "webfetch": "allow",
211
- "websearch": "allow"
212
- }
213
- },
214
- "vidarr": {
215
- "description": "Vidarr — Ultimate fallback via MiniMax M3.",
216
- "mode": "subagent",
217
- "model": "minimaxcustom/MiniMax-M3",
218
- "color": "#dc2626",
219
- "permission": {
220
- "read": "allow",
221
- "edit": "allow",
222
- "bash": "allow",
223
- "glob": "allow",
224
- "grep": "allow",
225
- "list": "allow",
226
- "todowrite": "allow",
227
- "webfetch": "allow",
228
- "websearch": "allow"
229
- }
230
- },
231
- "forseti": {
232
- "description": "Forseti — Audits and corrects plans before execution.",
233
- "mode": "subagent",
234
- "model": "minimaxcustom/MiniMax-M3",
235
- "color": "#ef4444",
236
- "permission": {
237
- "read": "allow",
238
- "edit": "deny",
239
- "bash": "allow",
240
- "glob": "allow",
241
- "grep": "allow",
242
- "list": "allow",
243
- "todowrite": "allow",
244
- "question": "allow",
245
- "webfetch": "allow",
246
- "websearch": "allow"
247
- }
248
- },
249
- "agent-browser": {
250
- "description": "agent-browser — Primary agent for browser-driven E2E verification. No-edit permissions. Drives Chrome for Testing via the agent-browser Rust CLI for end-to-end testing of web apps. Reads `_shared/CLINE_TOOLS.md` before any tool call.",
251
- "mode": "primary",
252
- "model": "minimaxcustom/MiniMax-M2.7",
253
- "color": "#84cc16",
254
- "permission": {
255
- "read": "allow",
256
- "bash": "allow",
257
- "glob": "allow",
258
- "grep": "allow",
259
- "list": "allow",
260
- "webfetch": "allow",
261
- "websearch": "allow",
262
- "edit": "deny",
263
- "write": "deny"
264
- }
265
- },
266
- "semble-search": {
267
- "description": "Code search agent for exploring any codebase.",
268
- "mode": "subagent",
269
- "permission": {
270
- "bash": "allow",
271
- "read": "allow"
272
- }
273
- }
274
- },
275
- "command": {
276
- "audit": {
277
- "description": "Run bizar audit to scan agent configuration for security issues.",
278
- "agent": "forseti",
279
- "template": "commands-bizar/audit.md"
280
- },
281
- "explain": {
282
- "description": "Route to @frigg for read-only codebase Q&A.",
283
- "agent": "frigg",
284
- "template": "commands-bizar/explain.md"
285
- },
286
- "init": {
287
- "description": "Run bizar init to detect project stack and install skills.",
288
- "agent": "heimdall",
289
- "template": "commands-bizar/init.md"
290
- },
291
- "learn": {
292
- "description": "Extract patterns from current session.",
293
- "agent": "heimdall",
294
- "template": "commands-bizar/learn.md"
295
- },
296
- "plan": {
297
- "description": "Open the Bizar visual plan canvas.",
298
- "agent": "odin",
299
- "template": "commands-bizar/plan.md"
300
- },
301
- "pr-review": {
302
- "description": "PR review mode with @mimir and @forseti.",
303
- "agent": "hermod",
304
- "template": "commands-bizar/pr-review.md"
305
- },
306
- "tailscale-serve": {
307
- "description": "Authenticate Tailscale Serve and expose a local port.",
308
- "agent": "heimdall",
309
- "template": "commands-bizar/tailscale-serve.md"
310
- },
311
- "visual-plan": {
312
- "description": "Toggle the Bizar visual plan canvas.",
313
- "agent": "odin",
314
- "template": "commands-bizar/visual-plan.md"
315
- },
316
- "bizar": {
317
- "description": "Bizar Plugin Menu.",
318
- "agent": "odin",
319
- "template": "commands-bizar/bizar.md\n\n$ARGUMENTS"
320
- },
321
- "team": {
322
- "description": "Spawn a Cline agent team — coordinate Thor, Tyr, Mimir, Hermod, and Forseti to complete a complex mission end-to-end.",
323
- "agent": "odin",
324
- "template": "commands-bizar/team.md\n\n$ARGUMENTS"
325
- },
326
- "test": {
327
- "description": "Run the project's test suite via the Bizar test gate (auto-detects jest/vitest/bun/pytest/cargo/go).",
328
- "agent": "thor",
329
- "template": "commands-bizar/test.md\n\n$ARGUMENTS"
330
- },
331
- "validate": {
332
- "description": "Validate the Bizar install: cline.json, plugin entry, agents, skills, hooks, rules, commands, and provider config.",
333
- "agent": "heimdall",
334
- "template": "commands-bizar/validate.md\n\n$ARGUMENTS"
335
- },
336
- "setup-provider": {
337
- "description": "Configure a provider in cline.json. Since v6.2.2 the installer no longer touches provider config — use this to add your own.",
338
- "agent": "heimdall",
339
- "template": "commands-bizar/setup-provider.md\n\n$ARGUMENTS"
340
- }
341
- }
342
- }