@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
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * .claude/hooks/worker-suggest.mjs
4
+ *
5
+ * Bizar Background Workers — UserPromptSubmit hook.
6
+ *
7
+ * Runs on every user prompt. Calls `dispatch()` from cli/worker-dispatcher.mjs
8
+ * to find Bizar skills/agents that should be suggested for the prompt text.
9
+ * Emits suggestions to stderr (stdout is reserved for Claude Code's hook
10
+ * protocol). Always exits 0 — this is a suggestion, not a gate.
11
+ *
12
+ * Claude Code stdin shape (UserPromptSubmit):
13
+ * {
14
+ * "session_id": "...",
15
+ * "transcript_path": "...",
16
+ * "cwd": "...",
17
+ * "hook_event_name": "UserPromptSubmit",
18
+ * "user_prompt": "raw prompt text"
19
+ * }
20
+ *
21
+ * Claude Code stdout shape (hookSpecificOutput.additionalContext):
22
+ * { "hookSpecificOutput": {
23
+ * "hookEventName": "UserPromptSubmit",
24
+ * "additionalContext": "Bizar workers suggest: …"
25
+ * }}
26
+ *
27
+ * On any unexpected error: log to stderr, write a no-op hook output,
28
+ * exit 0. Never block the user.
29
+ */
30
+ 'use strict';
31
+
32
+ import { dispatch } from '../../cli/worker-dispatcher.mjs';
33
+
34
+ let raw = '';
35
+ process.stdin.setEncoding('utf8');
36
+ process.stdin.on('data', (chunk) => { raw += chunk; });
37
+ process.stdin.on('end', () => {
38
+ let input = {};
39
+ try {
40
+ input = JSON.parse(raw || '{}');
41
+ } catch {
42
+ input = {};
43
+ }
44
+
45
+ const prompt = String(input.user_prompt || '').trim();
46
+
47
+ // Empty prompts get the silent treatment — the user has not yet
48
+ // committed any intent.
49
+ if (prompt.length === 0) {
50
+ process.stdout.write(JSON.stringify({
51
+ hookSpecificOutput: {
52
+ hookEventName: 'UserPromptSubmit',
53
+ additionalContext: '',
54
+ },
55
+ }) + '\n');
56
+ process.exit(0);
57
+ return;
58
+ }
59
+
60
+ let suggestions;
61
+ try {
62
+ suggestions = dispatch(prompt, { maxSuggestions: 3 });
63
+ } catch (err) {
64
+ process.stderr.write(
65
+ `[bizar.workers] WARN: dispatch failed: ${
66
+ err && err.message ? err.message : String(err)
67
+ }\n`,
68
+ );
69
+ process.stdout.write(JSON.stringify({
70
+ hookSpecificOutput: {
71
+ hookEventName: 'UserPromptSubmit',
72
+ additionalContext: '',
73
+ },
74
+ }) + '\n');
75
+ process.exit(0);
76
+ return;
77
+ }
78
+
79
+ // Emit one stderr line per suggestion (for operator visibility in logs).
80
+ for (const s of suggestions) {
81
+ const skill = s.skill ? `skill: ${s.skill}` : 'skill: (none)';
82
+ const agent = s.agent ? `, agent: ${s.agent}` : '';
83
+ process.stderr.write(
84
+ `[bizar.workers] suggested: ${s.workerId} (${skill}${agent}) via pattern "${s.matchedPattern}"\n`,
85
+ );
86
+ }
87
+
88
+ // Build additionalContext for the model so the next turn is primed.
89
+ let note;
90
+ if (suggestions.length === 0) {
91
+ note = '';
92
+ } else {
93
+ const lines = suggestions.map((s) => {
94
+ const skillPart = s.skill ? `, skill=${s.skill}` : '';
95
+ const agentPart = s.agent ? `, agent=${s.agent}` : '';
96
+ return `- ${s.workerId} (weight=${s.weight}${skillPart}${agentPart}) matched "${s.matchedPattern}"`;
97
+ });
98
+ note =
99
+ 'Bizar workers suggest the following skills/agents for this prompt:\n' +
100
+ lines.join('\n');
101
+ }
102
+
103
+ process.stdout.write(JSON.stringify({
104
+ hookSpecificOutput: {
105
+ hookEventName: 'UserPromptSubmit',
106
+ additionalContext: note,
107
+ },
108
+ }) + '\n');
109
+ process.exit(0);
110
+ });
@@ -0,0 +1,125 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
+ "mcpServers": {
4
+ "bizar": {
5
+ "command": "npx",
6
+ "args": ["-y", "@polderlabs/bizar-sdk", "mcp"],
7
+ "env": {
8
+ "BIZAR_HOME": "${HOME}/.bizar_home",
9
+ "BIZAR_MEMORY_VAULT": "${HOME}/.bizar_home/memory"
10
+ }
11
+ }
12
+ },
13
+ "permissions": {
14
+ "allow": [
15
+ "mcp__bizar__memory_read",
16
+ "mcp__bizar__memory_list",
17
+ "mcp__bizar__memory_search",
18
+ "mcp__bizar__memory_write",
19
+ "mcp__bizar__plan_action",
20
+ "mcp__bizar__open_kb",
21
+ "mcp__bizar__loop_list",
22
+ "mcp__bizar__loop_status",
23
+ "mcp__bizar__loop_start",
24
+ "mcp__bizar__loop_stop",
25
+ "mcp__bizar__graph_query",
26
+ "mcp__bizar__graph_path",
27
+ "mcp__bizar__danger_check",
28
+ "Read(~/.bizar_memory/**)"
29
+ ],
30
+ "deny": [
31
+ "Read(./.env)",
32
+ "Read(./.env.*)",
33
+ "Read(./secrets/**)",
34
+ "Write(./node_modules/**)",
35
+ "Write(./package-lock.json)",
36
+ "Write(./yarn.lock)",
37
+ "Write(./pnpm-lock.yaml)",
38
+ "Bash(rm -rf /)",
39
+ "Bash(sudo *)"
40
+ ]
41
+ },
42
+ "env": {
43
+ "BIZAR_HOME": "${HOME}/.bizar_home",
44
+ "BIZAR_MEMORY_VAULT": "${HOME}/.bizar_home/memory",
45
+ "BIZAR_LOOPS_DIR": "${HOME}/.bizar_loops"
46
+ },
47
+ "hooks": {
48
+ "PreToolUse": [
49
+ {
50
+ "matcher": "Write|Edit|MultiEdit",
51
+ "hooks": [
52
+ {
53
+ "type": "command",
54
+ "command": "node /home/drb0rk/Projects/BizarHarness/.claude/hooks/pretooluse-editwrite.mjs",
55
+ "timeout": 30
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ "matcher": "Bash",
61
+ "hooks": [
62
+ {
63
+ "type": "command",
64
+ "command": "node /home/drb0rk/Projects/BizarHarness/.claude/hooks/pretooluse-bash.mjs",
65
+ "timeout": 30
66
+ }
67
+ ]
68
+ }
69
+ ],
70
+ "PostToolUse": [
71
+ {
72
+ "matcher": "Edit|Write|MultiEdit",
73
+ "hooks": [
74
+ {
75
+ "type": "command",
76
+ "command": "node /home/drb0rk/Projects/BizarHarness/.claude/hooks/posttooluse-editwrite.mjs",
77
+ "timeout": 30
78
+ }
79
+ ]
80
+ }
81
+ ],
82
+ "UserPromptSubmit": [
83
+ {
84
+ "hooks": [
85
+ {
86
+ "type": "command",
87
+ "command": "node /home/drb0rk/Projects/BizarHarness/.claude/hooks/userpromptsubmit-tag.mjs",
88
+ "timeout": 10
89
+ }
90
+ ]
91
+ },
92
+ {
93
+ "hooks": [
94
+ {
95
+ "type": "command",
96
+ "command": "node /home/drb0rk/Projects/BizarHarness/.claude/hooks/worker-suggest.mjs",
97
+ "timeout": 10
98
+ }
99
+ ]
100
+ }
101
+ ],
102
+ "SessionStart": [
103
+ {
104
+ "hooks": [
105
+ {
106
+ "type": "command",
107
+ "command": "node /home/drb0rk/Projects/BizarHarness/.claude/hooks/sessionstart-prime.mjs",
108
+ "timeout": 15
109
+ }
110
+ ]
111
+ }
112
+ ],
113
+ "SessionEnd": [
114
+ {
115
+ "hooks": [
116
+ {
117
+ "type": "command",
118
+ "command": "node /home/drb0rk/Projects/BizarHarness/.claude/hooks/sessionend-recall.mjs",
119
+ "timeout": 15
120
+ }
121
+ ]
122
+ }
123
+ ]
124
+ }
125
+ }
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: 9router
3
+ description: Entry point for 9Router — local/remote AI gateway with OpenAI-compatible REST for chat, image, TTS, STT, embeddings, web search, web fetch. Use when the user mentions 9Router, NINEROUTER_URL, or wants AI without writing provider boilerplate. This skill covers setup + indexes capability skills; fetch the relevant capability SKILL.md from the URLs below when needed.
4
+ ---
5
+
6
+ # 9Router
7
+
8
+ Local/remote AI gateway exposing OpenAI-compatible REST. One key, many providers, auto-fallback.
9
+
10
+ ## Setup
11
+
12
+ The Bizar harness expects 9Router at `http://localhost:20128` by default. Override with:
13
+
14
+ ```bash
15
+ export NINEROUTER_URL="http://localhost:20128" # or VPS / tunnel URL
16
+ export NINEROUTER_KEY="sk-..." # from Dashboard → Keys (only if requireApiKey=true)
17
+ ```
18
+
19
+ All requests: `${NINEROUTER_URL}/v1/...` with header `Authorization: Bearer ${NINEROUTER_KEY}` (omit if auth disabled).
20
+
21
+ Verify: `curl $NINEROUTER_URL/api/health` → `{"ok":true}`
22
+
23
+ ## Discover models
24
+
25
+ ```bash
26
+ curl $NINEROUTER_URL/v1/models # chat/LLM (default)
27
+ curl $NINEROUTER_URL/v1/models/image # image-gen
28
+ curl $NINEROUTER_URL/v1/models/tts # text-to-speech
29
+ curl $NINEROUTER_URL/v1/models/embedding # embeddings
30
+ curl $NINEROUTER_URL/v1/models/web # web search + fetch (entries have `kind` field)
31
+ curl $NINEROUTER_URL/v1/models/stt # speech-to-text
32
+ curl $NINEROUTER_URL/v1/models/image-to-text # vision
33
+ ```
34
+
35
+ Use `data[].id` as `model` field in requests. Combos appear with `owned_by:"combo"`.
36
+
37
+ Response shape:
38
+ ```json
39
+ { "object": "list", "data": [
40
+ { "id": "openai/gpt-5", "object": "model", "owned_by": "openai", "created": 1735000000 },
41
+ { "id": "tavily/search", "object": "model", "kind": "webSearch", "owned_by": "tavily", "created": 1735000000 }
42
+ ]}
43
+ ```
44
+
45
+ ## Capability skills
46
+
47
+ When the user needs a specific capability, fetch that skill's `SKILL.md` from its raw URL:
48
+
49
+ | Capability | Raw URL |
50
+ |---|---|
51
+ | Chat / code-gen | https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router-chat/SKILL.md |
52
+ | Image generation | https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router-image/SKILL.md |
53
+ | Text-to-speech | https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router-tts/SKILL.md |
54
+ | Speech-to-text | https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router-stt/SKILL.md |
55
+ | Embeddings | https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router-embeddings/SKILL.md |
56
+ | Web search | https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router-web-search/SKILL.md |
57
+ | Web fetch (URL → markdown) | https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router-web-fetch/SKILL.md |
58
+
59
+ ## Bizar harness integration
60
+
61
+ This skill is auto-installed by `bizar install` into `~/.claude/skills/9router/`. All
62
+ Bizar agents that need chat or web capabilities should read these skill files
63
+ before starting a task.
64
+
65
+ **Quick-check command** (run from anywhere in a Bizar session):
66
+
67
+ ```bash
68
+ curl -sS http://localhost:20128/api/health
69
+ ```
70
+
71
+ If the response is not `{"ok":true}`, ask the user whether 9Router is running
72
+ or whether `NINEROUTER_URL` should be re-pointed. Do NOT fall back to a
73
+ non-routed provider silently — the whole point of 9Router is auto-fallback +
74
+ single key rotation + observability.
75
+
76
+ ## Errors
77
+
78
+ - 401 → set/refresh `NINEROUTER_KEY` (Dashboard → Keys)
79
+ - 400 `Invalid model format` → check `model` exists in `/v1/models/<kind>`
80
+ - 503 `All accounts unavailable` → wait `retry-after` or add another provider account
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: 9router-chat
3
+ description: Chat / code generation via 9Router using OpenAI /v1/chat/completions or Anthropic /v1/messages format with streaming + auto-fallback combos. Use when the user wants to ask an LLM, generate code, summarize text, or run prompts through 9Router.
4
+ ---
5
+
6
+ # 9Router — Chat
7
+
8
+ Requires `NINEROUTER_URL` (and `NINEROUTER_KEY` if auth enabled). See https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router/SKILL.md for setup.
9
+
10
+ ## Endpoints
11
+
12
+ - `POST $NINEROUTER_URL/v1/chat/completions` — OpenAI format
13
+ - `POST $NINEROUTER_URL/v1/messages` — Anthropic format
14
+
15
+ ## Discover
16
+
17
+ ```bash
18
+ curl $NINEROUTER_URL/v1/models | jq '.data[].id'
19
+ # Per-model metadata (contextWindow, params)
20
+ curl "$NINEROUTER_URL/v1/models/info?id=openai/gpt-4o"
21
+ ```
22
+
23
+ Combos (e.g. `vip`, `mycodex`) auto-fallback through multiple providers.
24
+
25
+ ## OpenAI format
26
+
27
+ ```bash
28
+ curl -X POST $NINEROUTER_URL/v1/chat/completions \
29
+ -H "Authorization: Bearer $NINEROUTER_KEY" \
30
+ -H "Content-Type: application/json" \
31
+ -d '{"model":"openai/gpt-5","messages":[{"role":"user","content":"Hi"}],"stream":false}'
32
+ ```
33
+
34
+ JS (OpenAI SDK):
35
+
36
+ ```js
37
+ import OpenAI from "openai";
38
+ const client = new OpenAI({ baseURL: `${process.env.NINEROUTER_URL}/v1`, apiKey: process.env.NINEROUTER_KEY });
39
+ const res = await client.chat.completions.create({
40
+ model: "openai/gpt-5",
41
+ messages: [{ role: "user", content: "Hi" }],
42
+ stream: true,
43
+ });
44
+ for await (const chunk of res) process.stdout.write(chunk.choices[0]?.delta?.content || "");
45
+ ```
46
+
47
+ ## Anthropic format
48
+
49
+ ```bash
50
+ curl -X POST $NINEROUTER_URL/v1/messages \
51
+ -H "Authorization: Bearer $NINEROUTER_KEY" \
52
+ -H "anthropic-version: 2023-06-01" \
53
+ -H "Content-Type: application/json" \
54
+ -d '{"model":"cc/claude-opus-4-7","max_tokens":1024,"messages":[{"role":"user","content":"Hi"}]}'
55
+ ```
56
+
57
+ ## Response shape
58
+
59
+ OpenAI (`/v1/chat/completions`):
60
+ ```json
61
+ { "id": "chatcmpl-...", "object": "chat.completion", "model": "openai/gpt-5",
62
+ "choices": [{ "index": 0, "message": { "role": "assistant", "content": "Hello!" }, "finish_reason": "stop" }],
63
+ "usage": { "prompt_tokens": 8, "completion_tokens": 2, "total_tokens": 10 } }
64
+ ```
65
+
66
+ Streaming (`stream:true`) emits SSE: `data: {choices:[{delta:{content:"..."}}]}\n\n` ... `data: [DONE]\n\n`.
67
+
68
+ Anthropic (`/v1/messages`):
69
+ ```json
70
+ { "id": "msg_...", "type": "message", "role": "assistant", "model": "cc/claude-opus-4-7",
71
+ "content": [{ "type": "text", "text": "Hello!" }],
72
+ "stop_reason": "end_turn", "usage": { "input_tokens": 8, "output_tokens": 2 } }
73
+ ```
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: 9router-embeddings
3
+ description: Generate vector embeddings via 9Router /v1/embeddings using OpenAI / Gemini / Mistral / Voyage / Nvidia / GitHub embedding models for RAG, semantic search, similarity. Use when the user wants embeddings, vectors, RAG, semantic search, or to embed text.
4
+ ---
5
+
6
+ # 9Router — Embeddings
7
+
8
+ Requires `NINEROUTER_URL` (and `NINEROUTER_KEY` if auth enabled). See https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router/SKILL.md for setup.
9
+
10
+ ## Discover
11
+
12
+ ```bash
13
+ curl $NINEROUTER_URL/v1/models/embedding | jq '.data[].id'
14
+ # Per-model dimensions
15
+ curl "$NINEROUTER_URL/v1/models/info?id=openai/text-embedding-3-small"
16
+ ```
17
+
18
+ ## Endpoint
19
+
20
+ `POST $NINEROUTER_URL/v1/embeddings`
21
+
22
+ | Field | Required | Notes |
23
+ |---|---|---|
24
+ | `model` | yes | from `/v1/models/embedding` |
25
+ | `input` | yes | string OR array of strings |
26
+ | `encoding_format` | no | `float` (default) / `base64` |
27
+ | `dimensions` | no | OpenAI v3 only |
28
+
29
+ ## Examples
30
+
31
+ ```bash
32
+ curl -X POST $NINEROUTER_URL/v1/embeddings \
33
+ -H "Authorization: Bearer $NINEROUTER_KEY" \
34
+ -H "Content-Type: application/json" \
35
+ -d '{"model":"openai/text-embedding-3-small","input":["hello","world"]}'
36
+ ```
37
+
38
+ JS:
39
+
40
+ ```js
41
+ const r = await fetch(`${process.env.NINEROUTER_URL}/v1/embeddings`, {
42
+ method: "POST",
43
+ headers: { "Authorization": `Bearer ${process.env.NINEROUTER_KEY}`, "Content-Type": "application/json" },
44
+ body: JSON.stringify({ model: "gemini/text-embedding-004", input: "RAG chunk text" }),
45
+ });
46
+ const { data } = await r.json();
47
+ console.log(data[0].embedding.length); // dimension
48
+ ```
49
+
50
+ ## Response shape
51
+
52
+ ```json
53
+ { "object": "list", "model": "openai/text-embedding-3-small",
54
+ "data": [
55
+ { "object": "embedding", "index": 0, "embedding": [0.0123, -0.045, ...] },
56
+ { "object": "embedding", "index": 1, "embedding": [...] }
57
+ ],
58
+ "usage": { "prompt_tokens": 5, "total_tokens": 5 } }
59
+ ```
60
+
61
+ ## Provider quirks
62
+
63
+ | Provider | Notes |
64
+ |---|---|
65
+ | `openai`, `openrouter`, `mistral`, `voyage-ai`, `fireworks`, `together`, `nebius`, `github`, `nvidia`, `jina-ai` | Native OpenAI shape — `dimensions` works only on OpenAI v3 (`text-embedding-3-*`) |
66
+ | `gemini`, `google_ai_studio` | Server auto-converts to `embedContent`/`batchEmbedContents` — send OpenAI shape |
67
+ | `openai-compatible-*`, `custom-embedding-*` | Custom `baseUrl` from credentials |
68
+
69
+ Batch (`input` as array) is faster; some providers cap batch size.
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: 9router-image
3
+ description: Generate images via 9Router /v1/images/generations using OpenAI / Gemini Imagen / DALL-E / FLUX / MiniMax / SDWebUI / ComfyUI / Codex models. Use when the user wants to create, generate, draw, or render an image, picture, or text-to-image (txt2img).
4
+ ---
5
+
6
+ # 9Router — Image Generation
7
+
8
+ Requires `NINEROUTER_URL` (and `NINEROUTER_KEY` if auth enabled). See https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router/SKILL.md for setup.
9
+
10
+ ## Discover
11
+
12
+ ```bash
13
+ curl $NINEROUTER_URL/v1/models/image | jq '.data[].id'
14
+ # Per-model params/options (size enum, quality enum, capabilities like edit)
15
+ curl "$NINEROUTER_URL/v1/models/info?id=openai/dall-e-3"
16
+ ```
17
+
18
+ ## Endpoint
19
+
20
+ `POST $NINEROUTER_URL/v1/images/generations`
21
+
22
+ | Field | Required | Notes |
23
+ |---|---|---|
24
+ | `model` | yes | from `/v1/models/image` |
25
+ | `prompt` | yes | image description |
26
+ | `n` | no | count (provider-dependent) |
27
+ | `size` | no | `1024x1024`, `1792x1024`, ... |
28
+ | `quality` | no | `standard` / `hd` (OpenAI) |
29
+ | `response_format` | no | `url` (default) or `b64_json` |
30
+
31
+ Add query `?response_format=binary` to receive raw image bytes (handy for saving file).
32
+
33
+ ## Examples
34
+
35
+ Save to file (binary):
36
+
37
+ ```bash
38
+ curl -X POST "$NINEROUTER_URL/v1/images/generations?response_format=binary" \
39
+ -H "Authorization: Bearer $NINEROUTER_KEY" \
40
+ -H "Content-Type: application/json" \
41
+ -d '{"model":"gemini/gemini-3-pro-image-preview","prompt":"watercolor mountains at sunrise","size":"1024x1024"}' \
42
+ --output out.png
43
+ ```
44
+
45
+ JS (URL response):
46
+
47
+ ```js
48
+ const r = await fetch(`${process.env.NINEROUTER_URL}/v1/images/generations`, {
49
+ method: "POST",
50
+ headers: { "Authorization": `Bearer ${process.env.NINEROUTER_KEY}`, "Content-Type": "application/json" },
51
+ body: JSON.stringify({ model: "gemini/gemini-3-pro-image-preview", prompt: "neon city", size: "1024x1024" }),
52
+ });
53
+ const { data } = await r.json();
54
+ console.log(data[0].url || data[0].b64_json.slice(0, 40));
55
+ ```
56
+
57
+ ## Response shape
58
+
59
+ JSON (default `response_format=url`):
60
+ ```json
61
+ { "created": 1735000000, "data": [{ "url": "https://..." }] }
62
+ ```
63
+
64
+ `response_format=b64_json`:
65
+ ```json
66
+ { "created": 1735000000, "data": [{ "b64_json": "iVBORw0KGgo..." }] }
67
+ ```
68
+
69
+ Query `?response_format=binary` returns raw image bytes (Content-Type `image/png` or `image/jpeg`).
70
+
71
+ ## Provider quirks
72
+
73
+ Common fields above work everywhere. These add/override:
74
+
75
+ | Provider | Extra/changed fields | Notes |
76
+ |---|---|---|
77
+ | `openai`, `minimax`, `openrouter`, `recraft` | `quality`, `style`, `response_format` | Standard OpenAI shape |
78
+ | `gemini` (nano-banana) | — | Only `prompt`; ignores `size`/`n` |
79
+ | `codex` (gpt-5.4-image) | `image`, `images[]`, `image_detail`, `output_format`, `background` | SSE stream; **ChatGPT Plus/Pro required** |
80
+ | `huggingface` | — | Only `prompt`; returns single image |
81
+ | `nanobanana` | `image`, `images[]` (edit mode) | `size` → aspect ratio; async polling |
82
+ | `fal-ai` | `image` (img2img) | `n` → `num_images`; `size` → ratio; async |
83
+ | `stability-ai` | `style` (preset), `output_format` | `size` → `aspect_ratio` |
84
+ | `black-forest-labs` (FLUX) | `image` (ref) | `size` → exact `width`/`height`; async |
85
+ | `runwayml` | `image` (ref) | `size` → ratio; async; video models exist |
86
+ | `sdwebui`, `comfyui` | — | Localhost noAuth (`:7860` / `:8188`) |
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: 9router-stt
3
+ description: Speech-to-text via 9Router /v1/audio/transcriptions using OpenAI Whisper / Groq / Gemini / Deepgram / AssemblyAI / NVIDIA / HuggingFace models. Use when the user wants to transcribe audio, convert speech to text, or get subtitles from audio files.
4
+ ---
5
+
6
+ # 9Router — Speech-to-Text
7
+
8
+ Requires `NINEROUTER_URL` (and `NINEROUTER_KEY` if auth enabled). See https://raw.githubusercontent.com/decolua/9router/refs/heads/master/skills/9router/SKILL.md for setup.
9
+
10
+ ## Discover
11
+
12
+ ```bash
13
+ curl $NINEROUTER_URL/v1/models/stt | jq '.data[].id'
14
+ # Per-model params (language, response_format, prompt, temperature support)
15
+ curl "$NINEROUTER_URL/v1/models/info?id=openai/whisper-1"
16
+ ```
17
+
18
+ `model` = STT model ID (e.g. `openai/whisper-1`, `groq/whisper-large-v3`, `deepgram/nova-3`, `gemini/gemini-2.5-flash`).
19
+
20
+ ## Endpoint
21
+
22
+ `POST $NINEROUTER_URL/v1/audio/transcriptions` (OpenAI Whisper compatible, `multipart/form-data`)
23
+
24
+ | Field | Required | Notes |
25
+ |---|---|---|
26
+ | `model` | yes | from `/v1/models/stt` |
27
+ | `file` | yes | audio file (mp3, wav, m4a, webm, ogg, flac) |
28
+ | `language` | no | ISO-639-1 (e.g. `en`, `vi`) |
29
+ | `prompt` | no | hint text to guide transcription |
30
+ | `response_format` | no | `json` (default) / `text` / `verbose_json` / `srt` / `vtt` |
31
+ | `temperature` | no | 0–1 |
32
+
33
+ ## Examples
34
+
35
+ ```bash
36
+ curl -X POST "$NINEROUTER_URL/v1/audio/transcriptions" \
37
+ -H "Authorization: Bearer $NINEROUTER_KEY" \
38
+ -F "model=openai/whisper-1" \
39
+ -F "file=@audio.mp3" \
40
+ -F "language=vi"
41
+ ```
42
+
43
+ JS (Node):
44
+
45
+ ```js
46
+ import { createReadStream } from "node:fs";
47
+ const form = new FormData();
48
+ form.append("model", "groq/whisper-large-v3-turbo");
49
+ form.append("file", new Blob([await (await import("node:fs/promises")).readFile("audio.mp3")]), "audio.mp3");
50
+ const r = await fetch(`${process.env.NINEROUTER_URL}/v1/audio/transcriptions`, {
51
+ method: "POST",
52
+ headers: { "Authorization": `Bearer ${process.env.NINEROUTER_KEY}` },
53
+ body: form,
54
+ });
55
+ const { text } = await r.json();
56
+ console.log(text);
57
+ ```
58
+
59
+ ## Response shape
60
+
61
+ Default (`response_format=json`):
62
+ ```json
63
+ { "text": "Xin chào, đây là bản ghi âm." }
64
+ ```
65
+
66
+ `verbose_json` adds `language`, `duration`, `segments[]` with timestamps.
67
+ `srt` / `vtt` return subtitle text.
68
+
69
+ ## Provider quirks
70
+
71
+ | Provider | `model` format | Notes |
72
+ |---|---|---|
73
+ | `openai` | `whisper-1`, `gpt-4o-transcribe`, `gpt-4o-mini-transcribe` | Native OpenAI shape |
74
+ | `groq` | `whisper-large-v3`, `whisper-large-v3-turbo`, `distil-whisper-large-v3-en` | Fastest; OpenAI shape |
75
+ | `gemini` | `gemini-2.5-flash`, `gemini-2.5-pro`, `gemini-2.5-flash-lite` | Server converts to `generateContent` with audio inline |
76
+ | `deepgram` | `nova-3`, `nova-2`, `whisper-large` | Token auth; server adapts response |
77
+ | `assemblyai` | `universal-3-pro`, `universal-2` | Async upload+poll handled server-side |
78
+ | `nvidia` | `nvidia/parakeet-ctc-1.1b-asr` | NIM endpoint |
79
+ | `huggingface` | `openai/whisper-large-v3`, `openai/whisper-small` | HF Inference API |