@polderlabs/bizar 6.2.5 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/.claude/CLAUDE.md +15 -0
  2. package/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
  3. package/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
  4. package/.claude/agents/_shared/SKILLS.md +109 -0
  5. package/.claude/agents/agent-browser.md +80 -0
  6. package/.claude/agents/baldr.md +49 -0
  7. package/.claude/agents/forseti.md +51 -0
  8. package/.claude/agents/frigg.md +42 -0
  9. package/.claude/agents/heimdall.md +33 -0
  10. package/.claude/agents/hermod.md +53 -0
  11. package/.claude/agents/mimir.md +49 -0
  12. package/.claude/agents/odin.md +287 -0
  13. package/.claude/agents/quick.md +34 -0
  14. package/.claude/agents/semble-search.md +50 -0
  15. package/.claude/agents/thor.md +53 -0
  16. package/.claude/agents/tyr.md +56 -0
  17. package/.claude/agents/vidarr.md +54 -0
  18. package/.claude/agents/vor.md +53 -0
  19. package/.claude/commands/audit.md +25 -0
  20. package/.claude/commands/bizar.md +22 -0
  21. package/.claude/commands/explain.md +17 -0
  22. package/.claude/commands/init.md +29 -0
  23. package/.claude/commands/learn.md +44 -0
  24. package/.claude/commands/plan.md +35 -0
  25. package/.claude/commands/plow-through.md +50 -0
  26. package/.claude/commands/pr-review.md +49 -0
  27. package/.claude/commands/setup-provider.md +96 -0
  28. package/.claude/commands/tailscale-serve.md +100 -0
  29. package/.claude/commands/team.md +132 -0
  30. package/.claude/commands/test.md +62 -0
  31. package/.claude/commands/validate.md +68 -0
  32. package/.claude/commands/visual-plan.md +24 -0
  33. package/.claude/hooks/README.md +92 -0
  34. package/.claude/hooks/posttooluse-editwrite.mjs +91 -0
  35. package/.claude/hooks/pretooluse-bash.mjs +81 -0
  36. package/.claude/hooks/pretooluse-editwrite.mjs +139 -0
  37. package/.claude/hooks/sessionend-recall.mjs +74 -0
  38. package/.claude/hooks/sessionstart-prime.mjs +80 -0
  39. package/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
  40. package/.claude/hooks/worker-suggest.mjs +110 -0
  41. package/.claude/settings.json +125 -0
  42. package/.claude/skills/9router/SKILL.md +80 -0
  43. package/.claude/skills/9router-chat/SKILL.md +73 -0
  44. package/.claude/skills/9router-embeddings/SKILL.md +69 -0
  45. package/.claude/skills/9router-image/SKILL.md +86 -0
  46. package/.claude/skills/9router-stt/SKILL.md +79 -0
  47. package/.claude/skills/9router-tts/SKILL.md +80 -0
  48. package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
  49. package/.claude/skills/9router-web-search/SKILL.md +91 -0
  50. package/.claude/skills/bizar/README.md +9 -0
  51. package/.claude/skills/bizar/SKILL.md +450 -0
  52. package/.claude/skills/cpp-coding-standards/README.md +28 -0
  53. package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
  54. package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
  55. package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
  56. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  57. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  58. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  59. package/.claude/skills/cpp-testing/README.md +28 -0
  60. package/.claude/skills/cpp-testing/SKILL.md +304 -0
  61. package/.claude/skills/cpp-testing/references/coverage.md +370 -0
  62. package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
  63. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  64. package/.claude/skills/cpp-testing/references/mocking.md +364 -0
  65. package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
  66. package/.claude/skills/cubesandbox/SKILL.md +148 -0
  67. package/.claude/skills/embedded-esp-idf/README.md +41 -0
  68. package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
  69. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  70. package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
  71. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  72. package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
  73. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  74. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  75. package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
  76. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  77. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  78. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  79. package/.claude/skills/glyph/SKILL.md +163 -0
  80. package/.claude/skills/harness-engineering/SKILL.md +143 -0
  81. package/.claude/skills/lightrag/SKILL.md +81 -0
  82. package/.claude/skills/memory-protocol/SKILL.md +105 -0
  83. package/.claude/skills/obsidian/SKILL.md +306 -0
  84. package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
  85. package/.claude/skills/self-improvement/SKILL.md +64 -0
  86. package/README.md +87 -59
  87. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js → EnvVarsSection-CW6fWKds.js} +3 -3
  88. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-CW6fWKds.js.map} +1 -1
  89. package/bizar-dash/dist/assets/MobileChat-D7zRhU9K.js +1 -0
  90. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-D7zRhU9K.js.map} +1 -1
  91. package/bizar-dash/dist/assets/MobileSettings-K-sNsn_r.js +1 -0
  92. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-K-sNsn_r.js.map} +1 -1
  93. package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js → Toast-WTxc3m2g.js} +1 -1
  94. package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js.map → Toast-WTxc3m2g.js.map} +1 -1
  95. package/bizar-dash/dist/assets/flow-BpU0-gK2.js +1 -0
  96. package/bizar-dash/dist/assets/flow-BpU0-gK2.js.map +1 -0
  97. package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js +1 -0
  98. package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js.map +1 -0
  99. package/bizar-dash/dist/assets/{icons-Do5N2jmX.js → icons-B0AKnYI3.js} +98 -103
  100. package/bizar-dash/dist/assets/icons-B0AKnYI3.js.map +1 -0
  101. package/bizar-dash/dist/assets/main-C-Md3DaY.css +1 -0
  102. package/bizar-dash/dist/assets/main-CO8fIxQK.js +18 -0
  103. package/bizar-dash/dist/assets/main-CO8fIxQK.js.map +1 -0
  104. package/bizar-dash/dist/assets/markdown-w2bDDkAH.js +1 -0
  105. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-w2bDDkAH.js.map} +1 -1
  106. package/bizar-dash/dist/assets/mobile-DXYCA0hC.js +1 -0
  107. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DXYCA0hC.js.map} +1 -1
  108. package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js +2 -0
  109. package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js.map +1 -0
  110. package/bizar-dash/dist/assets/react-vendor-BnuhLJ6X.css +1 -0
  111. package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js +46 -0
  112. package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js.map +1 -0
  113. package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js +2 -0
  114. package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js.map +1 -0
  115. package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js +45 -0
  116. package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js.map +1 -0
  117. package/bizar-dash/dist/index.html +12 -10
  118. package/bizar-dash/dist/mobile.html +7 -4
  119. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  120. package/bizar-dash/src/server/api.mjs +15 -4
  121. package/bizar-dash/src/server/background-store.mjs +15 -16
  122. package/bizar-dash/src/server/bg-poller.mjs +25 -35
  123. package/bizar-dash/src/server/bg-retry.mjs +66 -194
  124. package/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
  125. package/bizar-dash/src/server/claude-info.mjs +412 -0
  126. package/bizar-dash/src/server/{cline-runner.mjs → claude-runner.mjs} +53 -48
  127. package/bizar-dash/src/server/claude-sdk.mjs +191 -0
  128. package/bizar-dash/src/server/memory-consolidator.mjs +218 -0
  129. package/bizar-dash/src/server/memory-distillation.mjs +296 -0
  130. package/bizar-dash/src/server/providers-store.mjs +22 -49
  131. package/bizar-dash/src/server/routes/background.mjs +24 -20
  132. package/bizar-dash/src/server/routes/chat.mjs +223 -326
  133. package/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
  134. package/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
  135. package/bizar-dash/src/server/routes/distill.mjs +129 -0
  136. package/bizar-dash/src/server/routes/goal-planner.mjs +236 -0
  137. package/bizar-dash/src/server/routes/tasks.mjs +20 -28
  138. package/bizar-dash/src/server/task-delegator.mjs +76 -77
  139. package/bizar-dash/src/web/App.tsx +4 -0
  140. package/bizar-dash/src/web/components/Tag.tsx +18 -5
  141. package/bizar-dash/src/web/components/Topbar.tsx +3 -0
  142. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +126 -0
  143. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +163 -0
  144. package/bizar-dash/src/web/components/agents/QualityGates.tsx +123 -0
  145. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +127 -0
  146. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +148 -0
  147. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +160 -0
  148. package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
  149. package/bizar-dash/src/web/components/goals/GoalInput.tsx +86 -0
  150. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +111 -0
  151. package/bizar-dash/src/web/lib/goapPlanner.ts +614 -0
  152. package/bizar-dash/src/web/lib/types.ts +25 -0
  153. package/bizar-dash/src/web/styles/agents-redesign.css +311 -0
  154. package/bizar-dash/src/web/styles/main.css +251 -0
  155. package/bizar-dash/src/web/styles/tasks-redesign.css +231 -0
  156. package/bizar-dash/src/web/ui/controls/Button.tsx +77 -0
  157. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +95 -0
  158. package/bizar-dash/src/web/ui/controls/IconButton.tsx +66 -0
  159. package/bizar-dash/src/web/ui/controls/Kbd.tsx +24 -0
  160. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +77 -0
  161. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +109 -0
  162. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +91 -0
  163. package/bizar-dash/src/web/ui/controls/Select.tsx +92 -0
  164. package/bizar-dash/src/web/ui/controls/Slider.tsx +70 -0
  165. package/bizar-dash/src/web/ui/controls/TextInput.tsx +67 -0
  166. package/bizar-dash/src/web/ui/controls/Toggle.tsx +79 -0
  167. package/bizar-dash/src/web/ui/controls/controls.css +454 -0
  168. package/bizar-dash/src/web/ui/controls/index.ts +33 -0
  169. package/bizar-dash/src/web/ui/data/BarChart.tsx +60 -0
  170. package/bizar-dash/src/web/ui/data/DataTable.tsx +216 -0
  171. package/bizar-dash/src/web/ui/data/EmptyState.tsx +60 -0
  172. package/bizar-dash/src/web/ui/data/ErrorState.tsx +56 -0
  173. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +106 -0
  174. package/bizar-dash/src/web/ui/data/LoadingState.tsx +65 -0
  175. package/bizar-dash/src/web/ui/data/Sparkline.tsx +87 -0
  176. package/bizar-dash/src/web/ui/data/StatTile.tsx +87 -0
  177. package/bizar-dash/src/web/ui/data/data.css +535 -0
  178. package/bizar-dash/src/web/ui/data/index.ts +31 -0
  179. package/bizar-dash/src/web/ui/feedback/Badge.tsx +49 -0
  180. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +209 -0
  181. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +69 -0
  182. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +50 -0
  183. package/bizar-dash/src/web/ui/feedback/Toast.tsx +200 -0
  184. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +126 -0
  185. package/bizar-dash/src/web/ui/feedback/feedback.css +314 -0
  186. package/bizar-dash/src/web/ui/feedback/index.ts +43 -0
  187. package/bizar-dash/src/web/ui/index.ts +56 -0
  188. package/bizar-dash/src/web/ui/layout/AppShell.tsx +51 -0
  189. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +97 -0
  190. package/bizar-dash/src/web/ui/layout/Panel.tsx +73 -0
  191. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +39 -0
  192. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +131 -0
  193. package/bizar-dash/src/web/ui/layout/Tabs.tsx +133 -0
  194. package/bizar-dash/src/web/ui/layout/Topbar.tsx +42 -0
  195. package/bizar-dash/src/web/ui/layout/index.ts +33 -0
  196. package/bizar-dash/src/web/ui/layout/layout.css +413 -0
  197. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +199 -0
  198. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +95 -0
  199. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +93 -0
  200. package/bizar-dash/src/web/ui/navigation/index.ts +17 -0
  201. package/bizar-dash/src/web/ui/navigation/navigation.css +343 -0
  202. package/bizar-dash/src/web/ui/primitives/Box.tsx +91 -0
  203. package/bizar-dash/src/web/ui/primitives/Grid.tsx +49 -0
  204. package/bizar-dash/src/web/ui/primitives/Inline.tsx +55 -0
  205. package/bizar-dash/src/web/ui/primitives/Separator.tsx +46 -0
  206. package/bizar-dash/src/web/ui/primitives/Stack.tsx +54 -0
  207. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +26 -0
  208. package/bizar-dash/src/web/ui/primitives/index.ts +23 -0
  209. package/bizar-dash/src/web/ui/primitives/primitives.css +183 -0
  210. package/bizar-dash/src/web/ui/styles/globals.css +86 -0
  211. package/bizar-dash/src/web/ui/styles/reset.css +125 -0
  212. package/bizar-dash/src/web/ui/styles/tokens.css +195 -0
  213. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +142 -0
  214. package/bizar-dash/src/web/ui/theme/tokens.ts +131 -0
  215. package/bizar-dash/src/web/ui/theme/useTheme.ts +22 -0
  216. package/bizar-dash/src/web/ui/utils/cx.ts +42 -0
  217. package/bizar-dash/src/web/views/Agents.tsx +506 -266
  218. package/bizar-dash/src/web/views/Chat.tsx +8 -8
  219. package/bizar-dash/src/web/views/GoalPlanner.tsx +158 -0
  220. package/bizar-dash/src/web/views/Overview.tsx +996 -448
  221. package/bizar-dash/src/web/views/Tasks.tsx +277 -273
  222. package/bizar-dash/tests/communication-log.test.tsx +67 -0
  223. package/bizar-dash/tests/dep-graph.test.tsx +40 -0
  224. package/bizar-dash/tests/event-log.test.tsx +61 -0
  225. package/bizar-dash/tests/goal-input.test.tsx +72 -0
  226. package/bizar-dash/tests/goap-planner.test.ts +68 -0
  227. package/bizar-dash/tests/quality-gates.test.tsx +59 -0
  228. package/bizar-dash/tests/setup.ts +31 -1
  229. package/bizar-dash/tests/ui/controls/Button.test.tsx +50 -0
  230. package/bizar-dash/tests/ui/controls/Checkbox.test.tsx +44 -0
  231. package/bizar-dash/tests/ui/controls/IconButton.test.tsx +37 -0
  232. package/bizar-dash/tests/ui/controls/Kbd.test.tsx +39 -0
  233. package/bizar-dash/tests/ui/controls/NumberInput.test.tsx +56 -0
  234. package/bizar-dash/tests/ui/controls/RadioGroup.test.tsx +58 -0
  235. package/bizar-dash/tests/ui/controls/SearchInput.test.tsx +52 -0
  236. package/bizar-dash/tests/ui/controls/Select.test.tsx +66 -0
  237. package/bizar-dash/tests/ui/controls/Slider.test.tsx +41 -0
  238. package/bizar-dash/tests/ui/controls/TextInput.test.tsx +44 -0
  239. package/bizar-dash/tests/ui/controls/Toggle.test.tsx +39 -0
  240. package/bizar-dash/tests/ui/data/BarChart.test.tsx +55 -0
  241. package/bizar-dash/tests/ui/data/DataTable.test.tsx +112 -0
  242. package/bizar-dash/tests/ui/data/EmptyState.test.tsx +57 -0
  243. package/bizar-dash/tests/ui/data/ErrorState.test.tsx +47 -0
  244. package/bizar-dash/tests/ui/data/KeyValueList.test.tsx +59 -0
  245. package/bizar-dash/tests/ui/data/LoadingState.test.tsx +37 -0
  246. package/bizar-dash/tests/ui/data/Sparkline.test.tsx +56 -0
  247. package/bizar-dash/tests/ui/data/StatTile.test.tsx +69 -0
  248. package/bizar-dash/tests/ui/feedback/Badge.test.tsx +41 -0
  249. package/bizar-dash/tests/ui/feedback/Dialog.test.tsx +99 -0
  250. package/bizar-dash/tests/ui/feedback/ProgressBar.test.tsx +66 -0
  251. package/bizar-dash/tests/ui/feedback/StatusDot.test.tsx +41 -0
  252. package/bizar-dash/tests/ui/feedback/Toast.test.tsx +124 -0
  253. package/bizar-dash/tests/ui/feedback/Tooltip.test.tsx +102 -0
  254. package/bizar-dash/tests/ui/layout/AppShell.test.tsx +50 -0
  255. package/bizar-dash/tests/ui/layout/Breadcrumbs.test.tsx +85 -0
  256. package/bizar-dash/tests/ui/layout/Panel.test.tsx +52 -0
  257. package/bizar-dash/tests/ui/layout/PanelHeader.test.tsx +32 -0
  258. package/bizar-dash/tests/ui/layout/Sidebar.test.tsx +95 -0
  259. package/bizar-dash/tests/ui/layout/Tabs.test.tsx +87 -0
  260. package/bizar-dash/tests/ui/layout/Topbar.test.tsx +41 -0
  261. package/bizar-dash/tests/ui/navigation/CommandPalette.test.tsx +105 -0
  262. package/bizar-dash/tests/ui/navigation/NavGroup.test.tsx +55 -0
  263. package/bizar-dash/tests/ui/navigation/NavLink.test.tsx +61 -0
  264. package/bizar-dash/tests/ui/primitives/Box.test.tsx +49 -0
  265. package/bizar-dash/tests/ui/primitives/Grid.test.tsx +37 -0
  266. package/bizar-dash/tests/ui/primitives/Inline.test.tsx +33 -0
  267. package/bizar-dash/tests/ui/primitives/Separator.test.tsx +34 -0
  268. package/bizar-dash/tests/ui/primitives/Stack.test.tsx +45 -0
  269. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +27 -0
  270. package/bizar-dash/tests/views/Agents.test.tsx +359 -0
  271. package/bizar-dash/tests/views/Overview.test.tsx +413 -0
  272. package/bizar-dash/tests/views/Tasks.test.tsx +250 -0
  273. package/bizar-dash/vitest.config.ts +3 -1
  274. package/cli/__tests__/cost-gate.test.mjs +301 -0
  275. package/cli/__tests__/feature-list-bridge.test.mjs +371 -0
  276. package/cli/bin.mjs +55 -18
  277. package/cli/commands/claim.mjs +282 -0
  278. package/cli/commands/claude-cmd.mjs +348 -0
  279. package/cli/commands/cost.mjs +279 -0
  280. package/cli/commands/install.mjs +12 -11
  281. package/cli/commands/validate.mjs +252 -325
  282. package/cli/cost-gate.mjs +501 -0
  283. package/cli/dev-link.test.mjs +11 -11
  284. package/cli/doctor.mjs +131 -213
  285. package/cli/feature-list-bridge.mjs +400 -0
  286. package/cli/install.mjs +33 -37
  287. package/cli/install.test.mjs +9 -9
  288. package/cli/memory-constants.mjs +17 -0
  289. package/cli/provision-claude.mjs +893 -0
  290. package/cli/provision.mjs +224 -227
  291. package/cli/utils.mjs +72 -58
  292. package/cli/worker-dispatcher.mjs +259 -0
  293. package/cli/worker-dispatcher.test.mjs +204 -0
  294. package/config/AGENTS.md +28 -28
  295. package/config/trigger-patterns.json +186 -0
  296. package/install.sh +66 -44
  297. package/package.json +19 -11
  298. package/packages/sdk/ARCHITECTURE.md +40 -36
  299. package/packages/sdk/package.json +15 -5
  300. package/packages/sdk/src/agent-registry.ts +304 -0
  301. package/packages/sdk/src/consensus/byzantine.ts +587 -0
  302. package/packages/sdk/src/consensus/index.ts +147 -0
  303. package/packages/sdk/src/consensus/queen.ts +173 -0
  304. package/packages/sdk/src/consensus/types.ts +199 -0
  305. package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
  306. package/packages/sdk/src/federation/audit.ts +156 -0
  307. package/packages/sdk/src/federation/budget.ts +269 -0
  308. package/packages/sdk/src/federation/envelope.ts +144 -0
  309. package/packages/sdk/src/federation/hmac.ts +160 -0
  310. package/packages/sdk/src/federation/index.ts +443 -0
  311. package/packages/sdk/src/federation/pii.ts +241 -0
  312. package/packages/sdk/src/federation/policy.ts +112 -0
  313. package/packages/sdk/src/federation/trust.ts +146 -0
  314. package/packages/sdk/src/fingerprint.ts +0 -0
  315. package/packages/sdk/src/index.ts +101 -69
  316. package/packages/sdk/src/mcp/bin.ts +51 -0
  317. package/packages/sdk/src/mcp/server.ts +848 -0
  318. package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
  319. package/packages/sdk/src/router/codemod-intent.ts +125 -0
  320. package/packages/sdk/src/router/index.ts +247 -0
  321. package/packages/sdk/src/router/memory-distillation-shim.mjs +18 -0
  322. package/packages/sdk/src/router/memory-distillation.ts +249 -0
  323. package/packages/sdk/src/router/model-router.ts +235 -0
  324. package/packages/sdk/src/router/q-learning-router.ts +304 -0
  325. package/packages/sdk/src/swarm-topology.ts +279 -0
  326. package/packages/sdk/tests/agent-registry.test.ts +285 -0
  327. package/packages/sdk/tests/consensus.test.ts +376 -0
  328. package/packages/sdk/tests/federation/audit.test.ts +164 -0
  329. package/packages/sdk/tests/federation/budget.test.ts +189 -0
  330. package/packages/sdk/tests/federation/envelope.test.ts +120 -0
  331. package/packages/sdk/tests/federation/hmac.test.ts +194 -0
  332. package/packages/sdk/tests/federation/orchestrator.test.ts +176 -0
  333. package/packages/sdk/tests/federation/pii.test.ts +106 -0
  334. package/packages/sdk/tests/federation/policy.test.ts +140 -0
  335. package/packages/sdk/tests/federation/trust.test.ts +124 -0
  336. package/packages/sdk/tests/mcp-tools.test.ts +204 -0
  337. package/packages/sdk/tests/memory-distillation.test.mjs +186 -0
  338. package/packages/sdk/tests/model-router.test.mjs +108 -0
  339. package/packages/sdk/tests/q-learning-router.test.mjs +100 -0
  340. package/packages/sdk/tests/router-orchestrator.test.mjs +172 -0
  341. package/packages/sdk/tests/router.test.mjs +91 -0
  342. package/packages/sdk/tests/sdk.test.mjs +172 -0
  343. package/packages/sdk/tests/swarm-topology.test.ts +258 -0
  344. package/packages/sdk/vitest.config.ts +1 -1
  345. package/scripts/bh-full-e2e.mjs +167 -368
  346. package/scripts/check-deps.mjs +28 -46
  347. package/scripts/mirror-claude-md.sh +78 -0
  348. package/scripts/test-in-container.sh +31 -9
  349. package/templates/clean-state-checklist.md +3 -3
  350. package/templates/sprint-contract.md +2 -2
  351. package/bizar-dash/.bizar/activity.log +0 -3
  352. package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
  353. package/bizar-dash/.omx/state/session.json +0 -10
  354. package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
  355. package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
  356. package/bizar-dash/bizar-design/canvas.html +0 -281
  357. package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
  358. package/bizar-dash/bizar-design/components.css +0 -1665
  359. package/bizar-dash/bizar-design/components.html +0 -557
  360. package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
  361. package/bizar-dash/bizar-design/desktop/agents.html +0 -74
  362. package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
  363. package/bizar-dash/bizar-design/desktop/memory.html +0 -75
  364. package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
  365. package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
  366. package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
  367. package/bizar-dash/bizar-design/desktop/overview.html +0 -95
  368. package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
  369. package/bizar-dash/bizar-design/desktop/settings.html +0 -70
  370. package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
  371. package/bizar-dash/bizar-design/icons.svg +0 -44
  372. package/bizar-dash/bizar-design/index.html +0 -192
  373. package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
  374. package/bizar-dash/bizar-design/mobile/agents.html +0 -29
  375. package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
  376. package/bizar-dash/bizar-design/mobile/memory.html +0 -28
  377. package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
  378. package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
  379. package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
  380. package/bizar-dash/bizar-design/mobile/overview.html +0 -33
  381. package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
  382. package/bizar-dash/bizar-design/mobile/settings.html +0 -28
  383. package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
  384. package/bizar-dash/bizar-design/prototype.js +0 -114
  385. package/bizar-dash/bizar-design/tokens.css +0 -106
  386. package/bizar-dash/dist/assets/MobileChat-BnKN_Ks_.js +0 -1
  387. package/bizar-dash/dist/assets/MobileSettings-DjCPxC-Q.js +0 -1
  388. package/bizar-dash/dist/assets/icons-Do5N2jmX.js.map +0 -1
  389. package/bizar-dash/dist/assets/main-DYiZqMrn.js +0 -18
  390. package/bizar-dash/dist/assets/main-DYiZqMrn.js.map +0 -1
  391. package/bizar-dash/dist/assets/main-ietCEg_R.css +0 -1
  392. package/bizar-dash/dist/assets/markdown-C6mXtQxD.js +0 -1
  393. package/bizar-dash/dist/assets/mobile-CMHqtLV2.js +0 -1
  394. package/bizar-dash/dist/assets/mobile-layout-3jIhHX_p.js +0 -2
  395. package/bizar-dash/dist/assets/mobile-layout-3jIhHX_p.js.map +0 -1
  396. package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js +0 -40
  397. package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js.map +0 -1
  398. package/bizar-dash/dist/assets/useSlashCommands-DtITw8Xv.js +0 -2
  399. package/bizar-dash/dist/assets/useSlashCommands-DtITw8Xv.js.map +0 -1
  400. package/bizar-dash/dist/assets/vendor-CeHGtduv.js +0 -29
  401. package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
  402. package/bizar-dash/node_modules/.package-lock.json +0 -6
  403. package/bizar-dash/package-lock.json +0 -6
  404. package/bizar-dash/src/server/cline-sdk.mjs +0 -132
  405. package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
  406. package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
  407. package/cli/commands/cline-cmd.mjs +0 -289
  408. package/cli/commands/validate.test.mjs +0 -379
  409. package/cli/doctor.test.mjs +0 -350
  410. package/config/cline.json.template +0 -342
  411. package/packages/sdk/src/client.ts +0 -188
  412. package/packages/sdk/src/cline-events.ts +0 -134
  413. package/packages/sdk/src/cline-types.ts +0 -66
  414. package/packages/sdk/src/cline.ts +0 -339
  415. package/packages/sdk/src/errors.ts +0 -129
  416. package/packages/sdk/src/events.ts +0 -153
  417. package/packages/sdk/src/types.ts +0 -176
  418. package/packages/sdk/tests/client.test.ts +0 -217
  419. package/packages/sdk/tests/errors.test.ts +0 -108
  420. package/packages/sdk/tests/events.test.ts +0 -139
  421. package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
  422. package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
  423. package/plugins/bizar/ARCHITECTURE.md +0 -142
  424. package/plugins/bizar/CONSTRAINTS.md +0 -67
  425. package/plugins/bizar/LICENSE +0 -21
  426. package/plugins/bizar/README.md +0 -448
  427. package/plugins/bizar/index.ts +0 -925
  428. package/plugins/bizar/package.json +0 -39
  429. package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
  430. package/plugins/bizar/src/background-state.ts +0 -641
  431. package/plugins/bizar/src/background.ts +0 -1806
  432. package/plugins/bizar/src/cline-runner.ts +0 -203
  433. package/plugins/bizar/src/clineruntime.ts +0 -227
  434. package/plugins/bizar/src/commands-impl.ts +0 -151
  435. package/plugins/bizar/src/commands.ts +0 -1799
  436. package/plugins/bizar/src/compaction.d.mts +0 -48
  437. package/plugins/bizar/src/compaction.mjs +0 -192
  438. package/plugins/bizar/src/dashboard-client.ts +0 -233
  439. package/plugins/bizar/src/event-stream.ts +0 -606
  440. package/plugins/bizar/src/fingerprint.ts +0 -120
  441. package/plugins/bizar/src/handoff.ts +0 -79
  442. package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
  443. package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
  444. package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
  445. package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
  446. package/plugins/bizar/src/http-client.ts +0 -467
  447. package/plugins/bizar/src/key-rotation.ts +0 -218
  448. package/plugins/bizar/src/logger.ts +0 -144
  449. package/plugins/bizar/src/loop-engineering.ts +0 -241
  450. package/plugins/bizar/src/loop.ts +0 -176
  451. package/plugins/bizar/src/mistake-recovery.ts +0 -98
  452. package/plugins/bizar/src/odin.ts +0 -227
  453. package/plugins/bizar/src/options.ts +0 -470
  454. package/plugins/bizar/src/plan-fs.ts +0 -323
  455. package/plugins/bizar/src/reasoning-clean.ts +0 -454
  456. package/plugins/bizar/src/report.ts +0 -178
  457. package/plugins/bizar/src/research-prompt.ts +0 -35
  458. package/plugins/bizar/src/serve-info.ts +0 -228
  459. package/plugins/bizar/src/serve.ts +0 -496
  460. package/plugins/bizar/src/settings.ts +0 -349
  461. package/plugins/bizar/src/state.ts +0 -298
  462. package/plugins/bizar/src/tool-discipline.ts +0 -105
  463. package/plugins/bizar/src/tools/agent-browser.ts +0 -315
  464. package/plugins/bizar/src/tools/bg-collect.ts +0 -131
  465. package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
  466. package/plugins/bizar/src/tools/bg-kill.ts +0 -116
  467. package/plugins/bizar/src/tools/bg-pause.ts +0 -99
  468. package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
  469. package/plugins/bizar/src/tools/bg-resume.ts +0 -94
  470. package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
  471. package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
  472. package/plugins/bizar/src/tools/bg-status.ts +0 -130
  473. package/plugins/bizar/src/tools/graph-query.ts +0 -278
  474. package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
  475. package/plugins/bizar/src/tools/memory-list.ts +0 -43
  476. package/plugins/bizar/src/tools/memory-read.ts +0 -69
  477. package/plugins/bizar/src/tools/memory-search.ts +0 -47
  478. package/plugins/bizar/src/tools/memory-write.ts +0 -54
  479. package/plugins/bizar/src/tools/open-kb.ts +0 -198
  480. package/plugins/bizar/src/tools/plan-action.ts +0 -785
  481. package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
  482. package/plugins/bizar/src/tools/sandbox.ts +0 -232
  483. package/plugins/bizar/src/tools/team-spawn.ts +0 -73
  484. package/plugins/bizar/src/tools/team-status.ts +0 -76
  485. package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
  486. package/plugins/bizar/src/trajectory.ts +0 -104
  487. package/plugins/bizar/tests/README.md +0 -99
  488. package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
  489. package/plugins/bizar/tests/background-state.test.ts +0 -277
  490. package/plugins/bizar/tests/background.test.ts +0 -402
  491. package/plugins/bizar/tests/block.test.ts +0 -195
  492. package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
  493. package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
  494. package/plugins/bizar/tests/commands-impl.test.ts +0 -316
  495. package/plugins/bizar/tests/commands.test.ts +0 -584
  496. package/plugins/bizar/tests/compaction.test.ts +0 -264
  497. package/plugins/bizar/tests/config.test.ts +0 -128
  498. package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
  499. package/plugins/bizar/tests/dispose.test.ts +0 -336
  500. package/plugins/bizar/tests/event-stream.test.ts +0 -409
  501. package/plugins/bizar/tests/event.test.ts +0 -262
  502. package/plugins/bizar/tests/fingerprint.test.ts +0 -190
  503. package/plugins/bizar/tests/http-client.test.ts +0 -404
  504. package/plugins/bizar/tests/init-helpers.test.ts +0 -203
  505. package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
  506. package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
  507. package/plugins/bizar/tests/key-rotation.test.ts +0 -396
  508. package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
  509. package/plugins/bizar/tests/loop.test.ts +0 -397
  510. package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
  511. package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
  512. package/plugins/bizar/tests/odin.test.ts +0 -125
  513. package/plugins/bizar/tests/options.test.ts +0 -329
  514. package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
  515. package/plugins/bizar/tests/safety.test.ts +0 -281
  516. package/plugins/bizar/tests/serve.test.ts +0 -339
  517. package/plugins/bizar/tests/settings.test.ts +0 -351
  518. package/plugins/bizar/tests/stall-think.test.ts +0 -750
  519. package/plugins/bizar/tests/state.test.ts +0 -276
  520. package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
  521. package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
  522. package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
  523. package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
  524. package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
  525. package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
  526. package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
  527. package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
  528. package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
  529. package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
  530. package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
  531. package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
  532. package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
  533. package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
  534. package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
  535. package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
  536. package/plugins/bizar/tests/tools/sandbox.test.ts +0 -117
  537. package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
  538. package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
  539. package/plugins/bizar/tsconfig.json +0 -29
  540. package/scripts/mirror-agents-md.sh +0 -69
@@ -1,32 +1,23 @@
1
1
  /**
2
2
  * src/server/bg-retry.mjs
3
3
  *
4
- * v3.11.0 — Periodic recovery for background-agent instances stuck
4
+ * v6.3.0 — Periodic recovery for background-agent instances stuck
5
5
  * in `dispatchPending: true` with `toolCallCount === 0`.
6
6
  *
7
7
  * Why this exists:
8
- * Before v3.11.0, the task delegator's
9
- * `dispatchToBackground(main, subtasks, …)` short-circuited when
10
- * `pingClineServe()` returned false. The bg state file was
11
- * written with `dispatchPending: true` and a tmux session was
12
- * never created. The only recovery path was the user manually
13
- * hitting `POST /api/tasks/:id/start` (or restarting the
14
- * dashboard). The user's "home folder project" got stuck this way
15
- * with 7 instances in `dispatchPending: true` — 6 from a Jun 19
16
- * E2E test fixture and 1 active (`bgr_738FFSKMAT5SP58SVF5HQW`,
17
- * "Install vLLM as a Python package").
8
+ * Before v6.3.0, the task delegator's `dispatchToBackground` would
9
+ * short-circuit when `pingClaudeSdk()` returned false and the
10
+ * `claude` binary wasn't on PATH. The bg state file was written
11
+ * with `dispatchPending: true` and the actual spawn never happened.
12
+ * The only recovery path was the user manually hitting
13
+ * `POST /api/tasks/:id/start` (or restarting the dashboard).
18
14
  *
19
15
  * What this module does:
20
16
  * - On a 30s timer, walk every bg state file under BG_DIRS.
21
17
  * - For any instance whose `dispatchPending === true` AND
22
18
  * `toolCallCount === 0` AND `startedAt` is older than the
23
- * 30-second grace window, attempt to re-dispatch by:
24
- * 1. Reading serve-info (the v3.11.0 fix makes this lenient).
25
- * 2. POSTing `/api/session` to the cline serve child.
26
- * 3. POSTing `/api/session/{id}/prompt` with the recorded
27
- * prompt.
28
- * 4. Wrapping the agent run in a tmux session via
29
- * `backgroundStore.spawnTmuxFor`.
19
+ * 30-second grace window, attempt to re-dispatch by spawning
20
+ * `claude -p "<prompt>"` via `claude-runner.mjs`.
30
21
  * - On success, clear `dispatchPending`, persist the real
31
22
  * `sessionId`, bump `lastActivityAt`, and write the file back
32
23
  * atomically.
@@ -49,9 +40,6 @@
49
40
  * non-existent) tmux session — `spawnTmuxFor` already handles
50
41
  * pre-existing sessions via its `note: 'session already existed'`
51
42
  * return path.
52
- * - The cline plugin's own bg state. The retry only writes the
53
- * dashboard's view of the bg instance. The plugin will pick up
54
- * the new dispatch on its next `GET /api/session` poll.
55
43
  */
56
44
 
57
45
  import {
@@ -66,18 +54,13 @@ import { join } from 'node:path';
66
54
  import { homedir } from 'node:os';
67
55
 
68
56
  import { backgroundStore } from './background-store.mjs';
69
- import {
70
- readServeInfo,
71
- pingClineServe,
72
- createClineSession,
73
- sendClinePrompt,
74
- } from './serve-info.mjs';
75
57
  import { tasksStore } from './tasks-store.mjs';
76
58
  import {
77
59
  deriveAbsoluteBgLogPath,
78
60
  isBrokenBgLogPath,
79
61
  getActualBgLogPath,
80
62
  } from './lib/path-safe.mjs';
63
+ import { spawnAgent } from './claude-runner.mjs';
81
64
 
82
65
  const HOME = homedir();
83
66
 
@@ -144,15 +127,7 @@ function findBgFile(instanceId) {
144
127
  * - `retryCount < MAX_DISPATCH_RETRIES` (we don't retry past cap)
145
128
  * - The instance is "stuck": either `dispatchPending === true`,
146
129
  * OR `sessionId` is missing/empty (a sentinel for "spawn never
147
- * returned an cline session"). The user's actual stuck
148
- * `bgr_738FFSKMAT5SP58SVF5HQW.json` does NOT have a
149
- * `dispatchPending` field — it was written by the cline
150
- * plugin itself, not by the dashboard's task-delegator, so
151
- * its stuckness is encoded as `sessionId: ""` instead.
152
- *
153
- * @param {object} inst
154
- * @param {number} now
155
- * @returns {boolean}
130
+ * returned a Claude Code session").
156
131
  */
157
132
  export function shouldRetryDispatch(inst, now = Date.now()) {
158
133
  if (!inst || typeof inst !== 'object') return false;
@@ -165,9 +140,6 @@ export function shouldRetryDispatch(inst, now = Date.now()) {
165
140
  const startedAt = typeof inst.startedAt === 'number' ? inst.startedAt : 0;
166
141
  if (startedAt <= 0) return false;
167
142
  if (now - startedAt < DISPATCH_GRACE_MS) return false;
168
- // Stuckness detector — either the dashboard marked this as
169
- // dispatchPending, OR the plugin wrote an empty sessionId
170
- // (meaning the cline session was never created).
171
143
  const sessionId = inst.sessionId;
172
144
  const emptySession = sessionId === null || sessionId === undefined || sessionId === '';
173
145
  if (inst.dispatchPending !== true && !emptySession) return false;
@@ -175,16 +147,7 @@ export function shouldRetryDispatch(inst, now = Date.now()) {
175
147
  }
176
148
 
177
149
  /**
178
- * Repair a bg instance's `logPath` if it is missing or broken
179
- * (empty / not absolute / contains `//`). The plugin writes the
180
- * logPath as `${worktree}/.cline/log/<id>.log` — when worktree
181
- * was missing, the resulting path becomes `//.cline/log/<id>.log`
182
- * and is unusable. We rebuild from a sane source: serve.json's
183
- * `worktree` first, then the instance's existing worktree field,
184
- * then `~/.cache/bizar/logs` as the last-resort fallback.
185
- *
186
- * @param {object} inst
187
- * @returns {{ repaired: boolean, logPath: string }}
150
+ * Repair a bg instance's `logPath` if it is missing or broken.
188
151
  */
189
152
  function repairLogPath(inst) {
190
153
  const current = inst.logPath;
@@ -192,17 +155,8 @@ function repairLogPath(inst) {
192
155
  return { repaired: false, logPath: typeof current === 'string' ? current : '' };
193
156
  }
194
157
  let worktree = '';
195
- try {
196
- const serve = readServeInfo();
197
- if (serve && typeof serve.worktree === 'string' && serve.worktree.length > 0) {
198
- worktree = serve.worktree;
199
- }
200
- } catch {
201
- /* ignore */
202
- }
203
- if (!worktree && typeof inst.worktree === 'string') {
204
- worktree = inst.worktree;
205
- }
158
+ if (typeof inst.worktree === 'string') worktree = inst.worktree;
159
+ if (!worktree) worktree = process.cwd();
206
160
  const fixed = deriveAbsoluteBgLogPath(worktree, inst.instanceId || '');
207
161
  return { repaired: true, logPath: fixed };
208
162
  }
@@ -216,13 +170,6 @@ function repairLogPath(inst) {
216
170
  * manual-retry endpoint) can render a useful message.
217
171
  *
218
172
  * @param {string} instanceId
219
- * @returns {Promise<{
220
- * ok: boolean,
221
- * reason?: string,
222
- * retryCount?: number,
223
- * sessionId?: string,
224
- * logPath?: string,
225
- * }>}
226
173
  */
227
174
  export async function retryDispatchOnce(instanceId) {
228
175
  const found = findBgFile(instanceId);
@@ -248,133 +195,78 @@ export async function retryDispatchOnce(instanceId) {
248
195
  return { ok: false, reason: 'max_retries_exceeded', retryCount };
249
196
  }
250
197
 
251
- // v3.11.0 — Repair a broken logPath so the new run can write logs.
252
198
  const { repaired, logPath } = repairLogPath(inst);
253
199
 
254
- // v3.11.0 — Resolve serve-info. The relaxed schema means a partial
255
- // `{password, pid, port}` file is now usable: we derive baseUrl
256
- // from the port and treat missing worktree as empty.
257
- const serveInfo = readServeInfo();
258
- if (!serveInfo) {
259
- // Serve not running yet — bump retryCount but leave dispatchPending.
260
- const updated = {
261
- ...inst,
262
- retryCount,
263
- lastRetryAt: Date.now(),
264
- lastActivityAt: Date.now(),
265
- ...(repaired ? { logPath } : {}),
266
- retryError: 'serve-info unavailable',
267
- };
268
- atomicWriteJson(found.file, updated);
269
- return { ok: false, reason: 'serve_unavailable', retryCount };
270
- }
271
-
272
- const reachable = await pingClineServe(serveInfo);
273
- if (!reachable) {
274
- const updated = {
275
- ...inst,
276
- retryCount,
277
- lastRetryAt: Date.now(),
278
- lastActivityAt: Date.now(),
279
- ...(repaired ? { logPath } : {}),
280
- retryError: 'serve_unreachable',
281
- };
282
- atomicWriteJson(found.file, updated);
283
- return { ok: false, reason: 'serve_unreachable', retryCount };
284
- }
285
-
286
- // Attempt the actual session creation + prompt.
287
- let createRes;
288
- let sendRes;
200
+ // Verify the Claude Code runtime is reachable.
201
+ let claudeAvailable = false;
289
202
  try {
290
- createRes = await createClineSession(
291
- serveInfo,
292
- {
293
- title: inst.promptPreview || `bg: ${instanceId}`,
294
- agent: inst.agent || 'tyr',
295
- parentID: undefined,
296
- },
297
- serveInfo.worktree || inst.worktree || '',
298
- );
299
- } catch (err) {
300
- const message = err instanceof Error ? err.message : String(err);
301
- const updated = {
302
- ...inst,
303
- retryCount,
304
- lastRetryAt: Date.now(),
305
- lastActivityAt: Date.now(),
306
- ...(repaired ? { logPath } : {}),
307
- retryError: `createSession threw: ${message}`,
308
- };
309
- atomicWriteJson(found.file, updated);
310
- return { ok: false, reason: 'create_threw', retryCount };
203
+ const { pingClaudeSdk } = await import('./claude-sdk.mjs');
204
+ claudeAvailable = await pingClaudeSdk();
205
+ } catch {
206
+ claudeAvailable = false;
311
207
  }
312
-
313
- if (!createRes.ok) {
208
+ if (!claudeAvailable) {
209
+ try {
210
+ const { spawnSync } = await import('node:child_process');
211
+ const probe = spawnSync('claude', ['-v'], { stdio: 'ignore', timeout: 1500 });
212
+ claudeAvailable = probe.status === 0;
213
+ } catch {
214
+ claudeAvailable = false;
215
+ }
216
+ }
217
+ if (!claudeAvailable) {
314
218
  const updated = {
315
219
  ...inst,
316
220
  retryCount,
317
221
  lastRetryAt: Date.now(),
318
222
  lastActivityAt: Date.now(),
319
223
  ...(repaired ? { logPath } : {}),
320
- retryError: createRes.error || 'createSession failed',
224
+ retryError: 'claude runtime unavailable',
321
225
  };
322
226
  atomicWriteJson(found.file, updated);
323
- return { ok: false, reason: 'create_failed', retryCount };
227
+ return { ok: false, reason: 'claude_unavailable', retryCount };
324
228
  }
325
229
 
326
- const sessionId = createRes.sessionId;
230
+ // Spawn the Claude Code process for this bg instance.
231
+ let sessionId = null;
327
232
  try {
328
233
  const promptText = buildReplayPromptText(inst);
329
- sendRes = await sendClinePrompt(
330
- serveInfo,
331
- {
332
- sessionId,
333
- agent: inst.agent || 'tyr',
334
- text: promptText,
335
- },
336
- serveInfo.worktree || inst.worktree || '',
337
- );
234
+ const dispatchWorktree = inst.worktree || process.cwd();
235
+ const spawnRes = await spawnAgent({
236
+ prompt: promptText,
237
+ agent: inst.agent || 'tyr',
238
+ worktree: dispatchWorktree,
239
+ logPath: repaired ? logPath : (inst.logPath || getActualBgLogPath({ sessionId: instanceId })),
240
+ title: `retry:${instanceId}`,
241
+ });
242
+ if (!spawnRes.ok || !spawnRes.sessionId) {
243
+ const updated = {
244
+ ...inst,
245
+ retryCount,
246
+ lastRetryAt: Date.now(),
247
+ lastActivityAt: Date.now(),
248
+ ...(repaired ? { logPath } : {}),
249
+ retryError: spawnRes.error || 'spawn failed',
250
+ };
251
+ atomicWriteJson(found.file, updated);
252
+ return { ok: false, reason: 'spawn_failed', retryCount };
253
+ }
254
+ sessionId = spawnRes.sessionId;
338
255
  } catch (err) {
339
256
  const message = err instanceof Error ? err.message : String(err);
340
- // Session was created but prompt failed. Mark the instance as
341
- // running-with-sessionId so the operator can interact with it via
342
- // cline directly; the next retry tick will re-issue the prompt
343
- // only if toolCallCount stays at 0.
344
257
  const updated = {
345
258
  ...inst,
346
- sessionId,
347
259
  retryCount,
348
260
  lastRetryAt: Date.now(),
349
261
  lastActivityAt: Date.now(),
350
- status: 'running',
351
- dispatchPending: false,
352
262
  ...(repaired ? { logPath } : {}),
353
- retryError: `sendPrompt threw: ${message}`,
263
+ retryError: `spawn threw: ${message}`,
354
264
  };
355
265
  atomicWriteJson(found.file, updated);
356
- return { ok: false, reason: 'send_threw', retryCount, sessionId };
266
+ return { ok: false, reason: 'spawn_threw', retryCount };
357
267
  }
358
268
 
359
- if (!sendRes.ok) {
360
- const updated = {
361
- ...inst,
362
- sessionId,
363
- retryCount,
364
- lastRetryAt: Date.now(),
365
- lastActivityAt: Date.now(),
366
- status: 'running',
367
- dispatchPending: false,
368
- ...(repaired ? { logPath } : {}),
369
- retryError: sendRes.error || 'sendPrompt failed',
370
- };
371
- atomicWriteJson(found.file, updated);
372
- return { ok: false, reason: 'send_failed', retryCount, sessionId };
373
- }
374
-
375
- // Success path. Re-write the instance as `running`, clear
376
- // dispatchPending, refresh activity timestamps, and wrap the agent
377
- // run in a tmux session (best-effort, matches `task-delegator`).
269
+ // Success path.
378
270
  const updated = {
379
271
  ...inst,
380
272
  sessionId,
@@ -390,15 +282,11 @@ export async function retryDispatchOnce(instanceId) {
390
282
 
391
283
  try {
392
284
  const tmuxName = `bg_${(sessionId || instanceId).slice(0, 16)}`;
393
- // v3.11.1 — Bug fix: the previous code tailed `${worktree}/.cline/log/<id>.log`,
394
- // a path nothing writes to. The plugin's `LogWriter` writes to
395
- // `${logDir}/${sessionId}.log` (default `~/.cache/bizar/logs`).
396
- // Use the real path so the operator sees activity.
397
285
  const logFile = getActualBgLogPath({ sessionId: sessionId || instanceId });
398
286
  backgroundStore.spawnTmuxFor(
399
287
  tmuxName,
400
288
  { command: 'tail', args: ['-n', '200', '-F', logFile] },
401
- serveInfo.worktree || inst.worktree || undefined,
289
+ inst.worktree || undefined,
402
290
  );
403
291
  } catch {
404
292
  /* best-effort */
@@ -410,7 +298,6 @@ export async function retryDispatchOnce(instanceId) {
410
298
  await tasksStore.update(null, inst.taskId, {
411
299
  status: 'doing',
412
300
  metadata: {
413
- ...(typeof inst.mainTaskId === 'string' ? {} : {}),
414
301
  progress: 5,
415
302
  currentStep: `Re-dispatched (${sessionId})`,
416
303
  dispatchedAt: Date.now(),
@@ -426,14 +313,7 @@ export async function retryDispatchOnce(instanceId) {
426
313
 
427
314
  /**
428
315
  * Reconstruct the prompt text for the retry from what the bg file
429
- * stored. The original `task-delegator.dispatchToBackground` builds
430
- * a multi-line prompt (`# Title`, body, `---`, IDs); we approximate
431
- * that here using the promptPreview + instanceId context. If the
432
- * upstream caller stored the full prompt in `metadata.promptText`,
433
- * use that; otherwise fall back to the preview.
434
- *
435
- * @param {object} inst
436
- * @returns {string}
316
+ * stored.
437
317
  */
438
318
  function buildReplayPromptText(inst) {
439
319
  const full = inst?.metadata?.promptText;
@@ -444,24 +324,23 @@ function buildReplayPromptText(inst) {
444
324
  parts.push('');
445
325
  parts.push('(Re-dispatched by the bg-retry loop — full prompt was not');
446
326
  parts.push('persisted. The dashboard recovered this instance after the');
447
- parts.push('plugin was reachable. The original prompt preview is above;');
448
- parts.push('if more context is required, inspect the linked task.)');
327
+ parts.push('Claude Code runtime was reachable. The original prompt');
328
+ parts.push('preview is above; if more context is required, inspect the');
329
+ parts.push('linked task.)');
449
330
  parts.push('');
450
331
  parts.push('---');
451
332
  parts.push(`Subtask ID: ${inst.taskId || '(unknown)'}`);
452
333
  parts.push(`Assigned agent: ${inst.agent || 'tyr'}`);
453
334
  parts.push(`Parent task ID: ${inst.mainTaskId || '(none)'}`);
454
335
  parts.push(`Instance ID: ${inst.instanceId}`);
336
+ parts.push(`Runtime: Claude Code (claude -p)`);
455
337
  return parts.join('\n');
456
338
  }
457
339
 
458
340
  /**
459
341
  * One pass of the retry loop. Walks every bg state file, identifies
460
342
  * candidates via `shouldRetryDispatch`, and calls `retryDispatchOnce`
461
- * for each. Failures are caught so a single broken file cannot
462
- * poison the rest of the pass.
463
- *
464
- * @returns {Promise<{ scanned: number, retried: number, succeeded: number, failed: number, skipped: number }>}
343
+ * for each.
465
344
  */
466
345
  export async function tickRetryLoop() {
467
346
  if (inFlightTick) {
@@ -528,9 +407,6 @@ export async function tickRetryLoop() {
528
407
 
529
408
  /**
530
409
  * Start the periodic retry loop. Idempotent.
531
- *
532
- * @param {object} [opts]
533
- * @param {number} [opts.intervalMs] override the default 30s tick
534
410
  */
535
411
  export function startBgRetryLoop({ intervalMs } = {}) {
536
412
  if (intervalHandle) return { ok: true, alreadyRunning: true };
@@ -542,9 +418,6 @@ export function startBgRetryLoop({ intervalMs } = {}) {
542
418
  });
543
419
  }, ms);
544
420
  if (typeof intervalHandle.unref === 'function') intervalHandle.unref();
545
- // Kick off a first tick on the next event-loop turn so the
546
- // dashboard recovers any pre-existing stuck instances immediately
547
- // after a restart, without waiting 30s.
548
421
  setImmediate(() => {
549
422
  tickRetryLoop().catch(() => { /* logged inside */ });
550
423
  });
@@ -570,5 +443,4 @@ export const _BG_RETRY_INTERNAL = {
570
443
  MAX_DISPATCH_RETRIES,
571
444
  };
572
445
 
573
- // Silence unused-import warnings for helpers used transitively.
574
- void mkdirSync;
446
+ void mkdirSync;