@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
package/cli/bin.mjs CHANGED
@@ -78,7 +78,7 @@ if (
78
78
  // ── Banner ─────────────────────────────────────────────────────────────────────
79
79
 
80
80
  function showBanner() {
81
- console.log(chalk.bold.cyan(' ᛭ Bizar — Norse Pantheon Agent System for cline'));
81
+ console.log(chalk.bold.cyan(' ᛭ Bizar — Norse Pantheon Agent System for Claude Code'));
82
82
  console.log();
83
83
  }
84
84
 
@@ -97,7 +97,7 @@ function showHelp() {
97
97
  export [target] Export agents/rules to another harness
98
98
  artifact <subcommand> Manage visual artifacts
99
99
  test-gate Detect & run the project's test suite
100
- update Auto-update everything (cline + bizar + dash + plugin)
100
+ update Auto-update everything (claude + bizar + dash + sdk)
101
101
  service Manage the background service daemon
102
102
  dash <subcommand> Manage the dashboard (start/stop/status/cleanup/tui)
103
103
  memory <subcommand> Manage project memory (Bizar Memory Service)
@@ -109,7 +109,7 @@ function showHelp() {
109
109
  usage Show compact usage analytics summary (24h rolling)
110
110
  doctor Check the BizarHarness install for health issues
111
111
  repair Fix common install issues
112
- dev-link Symlink local plugin source into cline's plugin dir
112
+ dev-link Symlink local SDK source into Claude Code's plugin dir
113
113
  dev-unlink Remove the dev symlink and restore the deployed copy
114
114
  heads-up <subcommand> Manage pre-push / pre-release heads-ups
115
115
  bg <subcommand> Manage background agents (list/view/kill/logs)
@@ -118,7 +118,7 @@ function showHelp() {
118
118
  marketplace <subcommand> Browse and install plugins from the public marketplace
119
119
  agent-browser Install / update / verify the agent-browser CLI
120
120
  agent-browser-up Start Chromium for agent-browser (start/stop/status)
121
- providers detect Auto-detect provider API keys from env + cline.json
121
+ providers detect Auto-detect provider API keys from env + ~/.claude/settings.json
122
122
  clip <subcommand> Manage web clipper saved clips (list/delete/configure)
123
123
  ocr <subcommand> OCR operations on images (list/process/configure)
124
124
  digest Manage weekly digests (list/view/generate)
@@ -129,14 +129,16 @@ function showHelp() {
129
129
  eval Evaluate AI agent outputs against golden fixtures
130
130
  plan [v6.0.0+] Reserved for future plan management
131
131
  validate Validate the Bizar install (21 checks)
132
- setup-provider Configure a provider in cline.json (since v6.2.2 installer doesn't touch providers)
133
- config Show current Cline configuration (pass-through to cline config)
134
- history List session history (pass-through to cline history)
135
- hub Manage the local hub daemon (pass-through to cline hub)
136
- hook Handle a hook payload from stdin (pass-through to cline hook)
137
- team Spawn an agent team from CLI (wraps cline --team-name)
132
+ setup-provider Configure a provider in ~/.claude/settings.json (since v6.2.2 installer doesn't touch providers)
133
+ config Show current Claude Code configuration (pass-through to claude config)
134
+ history List session history (pass-through to claude history)
135
+ hub Manage the local hub daemon (pass-through to claude hub)
136
+ hook Handle a hook payload from stdin (pass-through to claude hook)
137
+ team Spawn an agent team from CLI (wraps claude --team-name)
138
138
  subagent Spawn a read-only research subagent from CLI
139
- rca Analyze a GitHub issue (Cline CLI sample)
139
+ rca Analyze a GitHub issue (Claude Code CLI sample)
140
+ cost <subcommand> Atomic cost gate (SQLite-backed room budget tracker)
141
+ claim <subcommand> GitHub-style claim protocol over feature_list.json
140
142
 
141
143
  Examples:
142
144
  bizar install
@@ -151,8 +153,7 @@ function showHelp() {
151
153
 
152
154
  Install:
153
155
  npm install -g @polderlabs/bizar
154
- npm install -g @polderlabs/bizar-dash
155
- npm install -g @polderlabs/bizar-plugin
156
+ npm install -g @anthropic-ai/claude-code
156
157
  `);
157
158
  }
158
159
 
@@ -548,15 +549,15 @@ async function main() {
548
549
  case 'hook':
549
550
  case 'team':
550
551
  case 'subagent': {
551
- // v6.2.3 — Pass-through wrappers for Cline CLI commands.
552
- // These live in cli/commands/cline-cmd.mjs.
553
- const mod = await importCommand('cline-cmd');
552
+ // v6.3.0 — Pass-through wrappers for Claude Code CLI commands.
553
+ // These live in cli/commands/claude-cmd.mjs.
554
+ const mod = await importCommand('claude-cmd');
554
555
  if (!mod) {
555
- console.error(chalk.red(` ✗ Could not load cline-cmd module`));
556
+ console.error(chalk.red(` ✗ Could not load claude-cmd module`));
556
557
  process.exit(EXIT_ERROR);
557
558
  return;
558
559
  }
559
- dbg('loaded command module:', 'cline-cmd');
560
+ dbg('loaded command module:', 'claude-cmd');
560
561
  const found = await mod.run(cmd, cmdArgs, isHelpRequest);
561
562
  if (!found) {
562
563
  console.error(chalk.red(` ✗ Unknown command: ${cmd}`));
@@ -598,6 +599,42 @@ async function main() {
598
599
  break;
599
600
  }
600
601
 
602
+ case 'cost': {
603
+ // F-035 MetaHarness — atomic SQLite-backed cost gate.
604
+ // Subcommands: register | status | reserve | commit | release | sweep | list
605
+ const mod = await importCommand('cost');
606
+ if (!mod) {
607
+ console.error(chalk.red(` ✗ Could not load cost command module`));
608
+ process.exit(EXIT_ERROR);
609
+ return;
610
+ }
611
+ dbg('loaded command module:', 'cost');
612
+ const found = await mod.run(cmd, cmdArgs, isHelpRequest);
613
+ if (found === false) {
614
+ console.error(chalk.red(` ✗ Usage: bizar cost <subcommand> — run 'bizar cost --help'`));
615
+ process.exit(EXIT_USAGE);
616
+ }
617
+ break;
618
+ }
619
+
620
+ case 'claim': {
621
+ // F-035 MetaHarness — GitHub-style claim protocol over feature_list.json.
622
+ // Subcommands: <featureId> | release | handoff | steal | status | list | transition
623
+ const mod = await importCommand('claim');
624
+ if (!mod) {
625
+ console.error(chalk.red(` ✗ Could not load claim command module`));
626
+ process.exit(EXIT_ERROR);
627
+ return;
628
+ }
629
+ dbg('loaded command module:', 'claim');
630
+ const found = await mod.run(cmd, cmdArgs, isHelpRequest);
631
+ if (found === false) {
632
+ console.error(chalk.red(` ✗ Usage: bizar claim <subcommand> — run 'bizar claim --help'`));
633
+ process.exit(EXIT_USAGE);
634
+ }
635
+ break;
636
+ }
637
+
601
638
  default: {
602
639
  console.error(chalk.red(` ✗ Unknown command: ${cmd}`));
603
640
  showHelp();
@@ -0,0 +1,282 @@
1
+ /**
2
+ * cli/commands/claim.mjs
3
+ *
4
+ * F-035 (MetaHarness) — `bizar claim` subcommand surface.
5
+ *
6
+ * Wraps cli/feature-list-bridge.mjs (over feature_list.json).
7
+ *
8
+ * Subcommands:
9
+ * bizar claim <featureId> # claim with --who (or $USER)
10
+ * --who <id> (default: $USER)
11
+ * --type <human|agent> (default: human)
12
+ * --reason <text> Free-form claim reason
13
+ * bizar claim release <featureId> # release
14
+ * --who <id> Optional claimant check
15
+ * --reason <text>
16
+ * bizar claim handoff <featureId> --to <id> # handoff
17
+ * --from <id>
18
+ * --reason <text>
19
+ * bizar claim steal <featureId> --by <id> # steal
20
+ * --type <human|agent>
21
+ * --reason <steal-reason> Must be one of STEAL_REASONS
22
+ * bizar claim status <featureId> # Show current claim + history
23
+ * bizar claim list # list all features with status
24
+ * --status <s> One of CLAIM_STATUSES (repeatable)
25
+ * --by-claimant <id> Filter by claimant id
26
+ * --human-only / --agent-only
27
+ * bizar claim transition <featureId> <newStatus> # active|paused|blocked|completed
28
+ * --who <id>
29
+ * --reason <text>
30
+ *
31
+ * --json flag for machine output.
32
+ */
33
+
34
+ import chalk from 'chalk';
35
+
36
+ import { FeatureListBridge, ClaimError, CLAIM_STATUSES, STEAL_REASONS, defaultFeatureListPath } from '../feature-list-bridge.mjs';
37
+
38
+ function parseFlags(args) {
39
+ const flags = { _: [], statuses: [] };
40
+ for (let i = 0; i < args.length; i++) {
41
+ const a = args[i];
42
+ if (a === '--json') flags.json = true;
43
+ else if (a === '--who' && i + 1 < args.length) { flags.who = args[++i]; }
44
+ else if (a.startsWith('--who=')) flags.who = a.slice('--who='.length);
45
+ else if (a === '--type' && i + 1 < args.length) { flags.type = args[++i]; }
46
+ else if (a.startsWith('--type=')) flags.type = a.slice('--type='.length);
47
+ else if (a === '--reason' && i + 1 < args.length) { flags.reason = args[++i]; }
48
+ else if (a.startsWith('--reason=')) flags.reason = a.slice('--reason='.length);
49
+ else if (a === '--to' && i + 1 < args.length) { flags.to = args[++i]; }
50
+ else if (a.startsWith('--to=')) flags.to = a.slice('--to='.length);
51
+ else if (a === '--from' && i + 1 < args.length) { flags.from = args[++i]; }
52
+ else if (a.startsWith('--from=')) flags.from = a.slice('--from='.length);
53
+ else if (a === '--by' && i + 1 < args.length) { flags.by = args[++i]; }
54
+ else if (a.startsWith('--by=')) flags.by = a.slice('--by='.length);
55
+ else if (a === '--status' && i + 1 < args.length) { flags.statuses.push(args[++i]); }
56
+ else if (a.startsWith('--status=')) flags.statuses.push(a.slice('--status='.length));
57
+ else if (a === '--by-claimant' && i + 1 < args.length) { flags.byClaimant = args[++i]; }
58
+ else if (a.startsWith('--by-claimant=')) flags.byClaimant = a.slice('--by-claimant='.length);
59
+ else if (a === '--human-only') flags.humanOnly = true;
60
+ else if (a === '--agent-only') flags.agentOnly = true;
61
+ else if (a === '--file' && i + 1 < args.length) { flags.file = args[++i]; }
62
+ else if (a.startsWith('--file=')) flags.file = a.slice('--file='.length);
63
+ else if (a === '--help' || a === '-h') flags.help = true;
64
+ else flags._.push(a);
65
+ }
66
+ return flags;
67
+ }
68
+
69
+ function makeClaimant(flags, fallbackId) {
70
+ const id = flags.who || flags.by || fallbackId;
71
+ const type = flags.type || 'human';
72
+ if (!id) return null;
73
+ return { type, id, name: id };
74
+ }
75
+
76
+ function bridge(flags) {
77
+ return new FeatureListBridge({
78
+ filePath: flags.file || defaultFeatureListPath(),
79
+ });
80
+ }
81
+
82
+ function showHelp() {
83
+ console.log(`
84
+ bizar claim — GitHub-ish claim protocol over feature_list.json
85
+
86
+ Usage:
87
+ bizar claim <featureId> [--who <id>] [--type human|agent] [--reason <text>]
88
+ bizar claim release <featureId> [--who <id>] [--reason <text>]
89
+ bizar claim handoff <featureId> --to <id> [--from <id>] [--reason <text>]
90
+ bizar claim steal <featureId> --by <id> [--type human|agent] --reason <reason>
91
+ bizar claim status <featureId>
92
+ bizar claim list [--status <s>] [--by-claimant <id>] [--human-only|--agent-only]
93
+ bizar claim transition <featureId> <active|paused|blocked|completed> [--who <id>]
94
+
95
+ Steal reasons (must match exactly):
96
+ ${STEAL_REASONS.join(' | ')}
97
+
98
+ Status states (must match exactly):
99
+ ${CLAIM_STATUSES.join(' | ')}
100
+
101
+ Flags:
102
+ --json Machine-readable JSON output
103
+ --file <path> Override feature_list.json path
104
+ --who <id> / --by <id> Claimant identifier (default: $USER)
105
+ --type human|agent Claimant type (default: human)
106
+ --reason <text> Free-form reason (mandatory for steal)
107
+ --to / --from <id> Recipient / sender for handoff
108
+ --human-only / --agent-only Restrict list to human or agent claims
109
+ --status <s> Filter list (repeat for multiple)
110
+ --by-claimant <id> Filter list by claimant id
111
+ --help, -h Show this help
112
+
113
+ Examples:
114
+ bizar claim F-035 --who odin --reason "porting MetaHarness from ruflo"
115
+ bizar claim steal F-014 --by hermod --reason stale
116
+ bizar claim handoff F-035 --to tyr --from odin
117
+ bizar claim list --status claimed --agent-only
118
+ `);
119
+ }
120
+
121
+ function out(result, flags, formatter) {
122
+ if (flags.json) {
123
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
124
+ } else if (formatter) {
125
+ formatter(result);
126
+ } else {
127
+ console.log(JSON.stringify(result, null, 2));
128
+ }
129
+ }
130
+
131
+ export async function run(name, args, isHelpRequest) {
132
+ if (name !== 'claim') return false;
133
+ const flags = parseFlags(args);
134
+ if (flags.help || isHelpRequest) {
135
+ showHelp();
136
+ return true;
137
+ }
138
+
139
+ const [sub, ...rest] = flags._;
140
+ const fallback = process.env.USER || 'unknown';
141
+ const who = flags.who || fallback;
142
+
143
+ try {
144
+ const br = bridge(flags);
145
+
146
+ if (!sub || sub === 'help') {
147
+ showHelp();
148
+ return true;
149
+ }
150
+
151
+ if (sub === 'list' || sub === 'ls') {
152
+ const filters = {};
153
+ if (flags.statuses.length) filters.status = flags.statuses;
154
+ if (flags.byClaimant) filters.claimantId = flags.byClaimant;
155
+ if (flags.humanOnly) filters.claimedByHuman = true;
156
+ if (flags.agentOnly) filters.claimedByAgent = true;
157
+ const rows = br.list(filters);
158
+ out({ count: rows.length, features: rows }, flags, (r) => {
159
+ console.log(chalk.bold(` Claims (${r.count}):`));
160
+ for (const f of r.features) {
161
+ const who = f.claimant ? `${f.claimant.name || f.claimant.id} (${f.claimant.type})` : '—';
162
+ console.log(` ${chalk.cyan(f.id)} [${f.claimStatus || 'unclaimed'}] by ${who}`);
163
+ }
164
+ });
165
+ return true;
166
+ }
167
+
168
+ if (sub === 'status' || sub === 'show' || sub === 'get') {
169
+ const featureId = rest[0];
170
+ if (!featureId) {
171
+ console.error(chalk.red(' ✗ Usage: bizar claim status <featureId>'));
172
+ return false;
173
+ }
174
+ const feature = br.get(featureId);
175
+ out(feature, flags, (f) => {
176
+ console.log(chalk.bold(` ${chalk.cyan(f.id)} — ${f.behavior || ''}`));
177
+ const who = f.claimant ? `${f.claimant.name || f.claimant.id} (${f.claimant.type})` : 'unclaimed';
178
+ console.log(` state = ${f.state}`);
179
+ console.log(` claim = ${f.claimStatus || 'unclaimed'} (by ${who})`);
180
+ console.log(` claimedAt = ${f.claimedAt || '—'}`);
181
+ console.log(` claimReason = ${f.claimReason || '—'}`);
182
+ const hist = Array.isArray(f.claimHistory) ? f.claimHistory : [];
183
+ console.log(` history = ${hist.length} event(s)`);
184
+ for (const e of hist.slice(-8)) {
185
+ console.log(` ${e.ts} ${chalk.dim(e.event)}${e.reason ? ' — ' + e.reason : ''}`);
186
+ }
187
+ });
188
+ return true;
189
+ }
190
+
191
+ if (sub === 'release') {
192
+ const featureId = rest[0];
193
+ if (!featureId) {
194
+ console.error(chalk.red(' ✗ Usage: bizar claim release <featureId> [--who <id>] [--reason <text>]'));
195
+ return false;
196
+ }
197
+ const claimant = makeClaimant({ who, type: flags.type }, fallback);
198
+ const result = br.release(featureId, claimant, flags.reason || '');
199
+ out(result, flags, (r) =>
200
+ console.log(chalk.green(` ✓ Released ${featureId}`) + (r.previousClaimant ? chalk.dim(` (was held by ${r.previousClaimant.name || r.previousClaimant.id})`) : '')),
201
+ );
202
+ return true;
203
+ }
204
+
205
+ if (sub === 'handoff') {
206
+ const featureId = rest[0];
207
+ if (!featureId || !flags.to) {
208
+ console.error(chalk.red(' ✗ Usage: bizar claim handoff <featureId> --to <id> [--from <id>] [--reason <text>]'));
209
+ return false;
210
+ }
211
+ const fromClaimant = flags.from ? { type: flags.type || 'human', id: flags.from, name: flags.from } : null;
212
+ const toClaimant = { type: flags.type || 'human', id: flags.to, name: flags.to };
213
+ const result = br.handoff(featureId, fromClaimant, toClaimant, flags.reason || '');
214
+ out(result, flags, (r) =>
215
+ console.log(chalk.green(` ✓ Handed off ${featureId} → ${flags.to}`)),
216
+ );
217
+ return true;
218
+ }
219
+
220
+ if (sub === 'steal') {
221
+ const featureId = rest[0];
222
+ if (!featureId || !flags.by) {
223
+ console.error(chalk.red(' ✗ Usage: bizar claim steal <featureId> --by <id> --reason <reason>'));
224
+ return false;
225
+ }
226
+ if (!flags.reason) {
227
+ console.error(chalk.red(' ✗ steal requires --reason (one of: ' + STEAL_REASONS.join(', ') + ')'));
228
+ return false;
229
+ }
230
+ const newClaimant = { type: flags.type || 'human', id: flags.by, name: flags.by };
231
+ const result = br.steal(featureId, newClaimant, flags.reason);
232
+ out(result, flags, (r) =>
233
+ console.log(chalk.green(` ✓ Stole ${featureId} (reason: ${r.stealReason}); previous owner: ${r.previousClaimant?.name || r.previousClaimant?.id || '—'}`)),
234
+ );
235
+ return true;
236
+ }
237
+
238
+ if (sub === 'transition') {
239
+ const [featureId, newStatus] = rest;
240
+ if (!featureId || !newStatus) {
241
+ console.error(chalk.red(' ✗ Usage: bizar claim transition <featureId> <active|paused|blocked|completed> [--who <id>]'));
242
+ return false;
243
+ }
244
+ if (!CLAIM_STATUSES.includes(newStatus)) {
245
+ console.error(chalk.red(` ✗ Unknown status '${newStatus}'. Must be one of: ${CLAIM_STATUSES.join(', ')}`));
246
+ return false;
247
+ }
248
+ const claimant = makeClaimant({ who: flags.who, type: flags.type }, fallback);
249
+ const result = br.transition(featureId, newStatus, claimant, flags.reason || '');
250
+ out(result, flags, (r) =>
251
+ console.log(chalk.green(` ✓ ${featureId} → ${newStatus}` + (r.unchanged ? ' (unchanged)' : ''))),
252
+ );
253
+ return true;
254
+ }
255
+
256
+ // Default: `bizar claim <featureId>` — claim it.
257
+ if (!sub.startsWith('-') && sub) {
258
+ const featureId = sub;
259
+ const claimant = makeClaimant({ who: flags.who, type: flags.type }, fallback);
260
+ if (!claimant) {
261
+ console.error(chalk.red(' ✗ No claimant id (set $USER or pass --who <id>)'));
262
+ return false;
263
+ }
264
+ const result = br.claim(featureId, claimant, flags.reason || '');
265
+ out(result, flags, (r) =>
266
+ console.log(chalk.green(` ✓ Claimed ${featureId} by ${r.feature.claimant.name || r.feature.claimant.id} (${r.feature.claimStatus})`)),
267
+ );
268
+ return true;
269
+ }
270
+
271
+ console.error(chalk.red(` ✗ Unknown subcommand: ${sub}`));
272
+ showHelp();
273
+ return false;
274
+ } catch (err) {
275
+ if (err instanceof ClaimError) {
276
+ console.error(chalk.red(` ✗ ${err.code}: ${err.message}`));
277
+ } else {
278
+ console.error(chalk.red(` ✗ ${err && err.message ? err.message : String(err)}`));
279
+ }
280
+ return false;
281
+ }
282
+ }