@polderlabs/bizar 6.2.4 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/.claude/CLAUDE.md +15 -0
  2. package/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
  3. package/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
  4. package/.claude/agents/_shared/SKILLS.md +109 -0
  5. package/.claude/agents/agent-browser.md +80 -0
  6. package/.claude/agents/baldr.md +49 -0
  7. package/.claude/agents/forseti.md +51 -0
  8. package/.claude/agents/frigg.md +42 -0
  9. package/.claude/agents/heimdall.md +33 -0
  10. package/.claude/agents/hermod.md +53 -0
  11. package/.claude/agents/mimir.md +49 -0
  12. package/.claude/agents/odin.md +287 -0
  13. package/.claude/agents/quick.md +34 -0
  14. package/.claude/agents/semble-search.md +50 -0
  15. package/.claude/agents/thor.md +53 -0
  16. package/.claude/agents/tyr.md +56 -0
  17. package/.claude/agents/vidarr.md +54 -0
  18. package/.claude/agents/vor.md +53 -0
  19. package/.claude/commands/audit.md +25 -0
  20. package/.claude/commands/bizar.md +22 -0
  21. package/.claude/commands/explain.md +17 -0
  22. package/.claude/commands/init.md +29 -0
  23. package/.claude/commands/learn.md +44 -0
  24. package/.claude/commands/plan.md +35 -0
  25. package/.claude/commands/plow-through.md +50 -0
  26. package/.claude/commands/pr-review.md +49 -0
  27. package/.claude/commands/setup-provider.md +96 -0
  28. package/.claude/commands/tailscale-serve.md +100 -0
  29. package/.claude/commands/team.md +132 -0
  30. package/.claude/commands/test.md +62 -0
  31. package/.claude/commands/validate.md +68 -0
  32. package/.claude/commands/visual-plan.md +24 -0
  33. package/.claude/hooks/README.md +92 -0
  34. package/.claude/hooks/posttooluse-editwrite.mjs +91 -0
  35. package/.claude/hooks/pretooluse-bash.mjs +81 -0
  36. package/.claude/hooks/pretooluse-editwrite.mjs +139 -0
  37. package/.claude/hooks/sessionend-recall.mjs +74 -0
  38. package/.claude/hooks/sessionstart-prime.mjs +80 -0
  39. package/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
  40. package/.claude/settings.json +116 -0
  41. package/.claude/skills/9router/SKILL.md +80 -0
  42. package/.claude/skills/9router-chat/SKILL.md +73 -0
  43. package/.claude/skills/9router-embeddings/SKILL.md +69 -0
  44. package/.claude/skills/9router-image/SKILL.md +86 -0
  45. package/.claude/skills/9router-stt/SKILL.md +79 -0
  46. package/.claude/skills/9router-tts/SKILL.md +80 -0
  47. package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
  48. package/.claude/skills/9router-web-search/SKILL.md +91 -0
  49. package/.claude/skills/bizar/README.md +9 -0
  50. package/.claude/skills/bizar/SKILL.md +450 -0
  51. package/.claude/skills/cpp-coding-standards/README.md +28 -0
  52. package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
  53. package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
  54. package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
  55. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
  56. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
  57. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
  58. package/.claude/skills/cpp-testing/README.md +28 -0
  59. package/.claude/skills/cpp-testing/SKILL.md +304 -0
  60. package/.claude/skills/cpp-testing/references/coverage.md +370 -0
  61. package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
  62. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
  63. package/.claude/skills/cpp-testing/references/mocking.md +364 -0
  64. package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
  65. package/.claude/skills/cubesandbox/SKILL.md +148 -0
  66. package/.claude/skills/embedded-esp-idf/README.md +41 -0
  67. package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
  68. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
  69. package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
  70. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
  71. package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
  72. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
  73. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
  74. package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
  75. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
  76. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
  77. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
  78. package/.claude/skills/glyph/SKILL.md +163 -0
  79. package/.claude/skills/harness-engineering/SKILL.md +143 -0
  80. package/.claude/skills/lightrag/SKILL.md +81 -0
  81. package/.claude/skills/memory-protocol/SKILL.md +105 -0
  82. package/.claude/skills/obsidian/SKILL.md +306 -0
  83. package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
  84. package/.claude/skills/self-improvement/SKILL.md +64 -0
  85. package/README.md +87 -59
  86. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js → EnvVarsSection-B58aiJiE.js} +1 -1
  87. package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-B58aiJiE.js.map} +1 -1
  88. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js → MobileChat-BJrqwVDd.js} +1 -1
  89. package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-BJrqwVDd.js.map} +1 -1
  90. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js → MobileSettings-CEQNJNLJ.js} +1 -1
  91. package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-CEQNJNLJ.js.map} +1 -1
  92. package/bizar-dash/dist/assets/{main-DYiZqMrn.js → main-IvfQAOfy.js} +1 -1
  93. package/bizar-dash/dist/assets/{main-DYiZqMrn.js.map → main-IvfQAOfy.js.map} +1 -1
  94. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js → markdown-tOLaD6nm.js} +1 -1
  95. package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-tOLaD6nm.js.map} +1 -1
  96. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js → mobile-DYCHcUpq.js} +1 -1
  97. package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DYCHcUpq.js.map} +1 -1
  98. package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js → mobile-layout-CBHjpwsb.js} +2 -2
  99. package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js.map → mobile-layout-CBHjpwsb.js.map} +1 -1
  100. package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js → useSlashCommands-Bd7_FA6U.js} +2 -2
  101. package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js.map → useSlashCommands-Bd7_FA6U.js.map} +1 -1
  102. package/bizar-dash/dist/assets/{vendor-CeHGtduv.js → vendor-C843201K.js} +12 -12
  103. package/bizar-dash/dist/assets/vendor-C843201K.js.map +1 -0
  104. package/bizar-dash/dist/index.html +6 -6
  105. package/bizar-dash/dist/mobile.html +2 -2
  106. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  107. package/bizar-dash/src/server/api.mjs +4 -4
  108. package/bizar-dash/src/server/background-store.mjs +15 -16
  109. package/bizar-dash/src/server/bg-poller.mjs +25 -35
  110. package/bizar-dash/src/server/bg-retry.mjs +66 -194
  111. package/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
  112. package/bizar-dash/src/server/claude-info.mjs +412 -0
  113. package/bizar-dash/src/server/{cline-runner.mjs → claude-runner.mjs} +53 -48
  114. package/bizar-dash/src/server/claude-sdk.mjs +191 -0
  115. package/bizar-dash/src/server/providers-store.mjs +22 -49
  116. package/bizar-dash/src/server/routes/background.mjs +24 -20
  117. package/bizar-dash/src/server/routes/chat.mjs +223 -326
  118. package/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
  119. package/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
  120. package/bizar-dash/src/server/routes/tasks.mjs +20 -28
  121. package/bizar-dash/src/server/task-delegator.mjs +76 -77
  122. package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
  123. package/bizar-dash/src/web/views/Chat.tsx +8 -8
  124. package/cli/bin.mjs +31 -18
  125. package/cli/commands/claude-cmd.mjs +348 -0
  126. package/cli/commands/install.mjs +12 -11
  127. package/cli/commands/sandbox.mjs +220 -0
  128. package/cli/commands/validate.mjs +252 -288
  129. package/cli/dev-link.test.mjs +11 -11
  130. package/cli/doctor.mjs +131 -213
  131. package/cli/install.mjs +33 -37
  132. package/cli/install.test.mjs +9 -9
  133. package/cli/provision-claude.mjs +893 -0
  134. package/cli/provision.mjs +330 -226
  135. package/cli/provision.test.mjs +102 -0
  136. package/cli/utils.mjs +72 -58
  137. package/config/AGENTS.md +28 -28
  138. package/config/agents/_shared/AGENT_BASELINE.md +104 -684
  139. package/config/skills/bizar/SKILL.md +197 -0
  140. package/config/skills/cubesandbox/SKILL.md +148 -0
  141. package/config/skills/harness-engineering/SKILL.md +142 -0
  142. package/install.sh +66 -44
  143. package/package.json +19 -11
  144. package/packages/sdk/ARCHITECTURE.md +40 -36
  145. package/packages/sdk/package-lock.json +32 -0
  146. package/packages/sdk/package.json +15 -5
  147. package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
  148. package/packages/sdk/src/fingerprint.ts +0 -0
  149. package/packages/sdk/src/index.ts +38 -73
  150. package/packages/sdk/src/mcp/bin.ts +51 -0
  151. package/packages/sdk/src/mcp/server.ts +498 -0
  152. package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
  153. package/packages/sdk/tests/sdk.test.mjs +148 -0
  154. package/packages/sdk/vitest.config.ts +1 -1
  155. package/scripts/bh-full-e2e.mjs +166 -363
  156. package/scripts/check-deps.mjs +28 -46
  157. package/scripts/mirror-claude-md.sh +78 -0
  158. package/scripts/test-in-container.sh +157 -0
  159. package/templates/clean-state-checklist.md +3 -3
  160. package/templates/sprint-contract.md +2 -2
  161. package/bizar-dash/.bizar/activity.log +0 -3
  162. package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
  163. package/bizar-dash/.omx/state/session.json +0 -10
  164. package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
  165. package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
  166. package/bizar-dash/bizar-design/canvas.html +0 -281
  167. package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
  168. package/bizar-dash/bizar-design/components.css +0 -1665
  169. package/bizar-dash/bizar-design/components.html +0 -557
  170. package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
  171. package/bizar-dash/bizar-design/desktop/agents.html +0 -74
  172. package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
  173. package/bizar-dash/bizar-design/desktop/memory.html +0 -75
  174. package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
  175. package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
  176. package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
  177. package/bizar-dash/bizar-design/desktop/overview.html +0 -95
  178. package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
  179. package/bizar-dash/bizar-design/desktop/settings.html +0 -70
  180. package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
  181. package/bizar-dash/bizar-design/icons.svg +0 -44
  182. package/bizar-dash/bizar-design/index.html +0 -192
  183. package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
  184. package/bizar-dash/bizar-design/mobile/agents.html +0 -29
  185. package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
  186. package/bizar-dash/bizar-design/mobile/memory.html +0 -28
  187. package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
  188. package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
  189. package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
  190. package/bizar-dash/bizar-design/mobile/overview.html +0 -33
  191. package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
  192. package/bizar-dash/bizar-design/mobile/settings.html +0 -28
  193. package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
  194. package/bizar-dash/bizar-design/prototype.js +0 -114
  195. package/bizar-dash/bizar-design/tokens.css +0 -106
  196. package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
  197. package/bizar-dash/node_modules/.package-lock.json +0 -6
  198. package/bizar-dash/package-lock.json +0 -6
  199. package/bizar-dash/src/server/cline-sdk.mjs +0 -132
  200. package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
  201. package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
  202. package/cli/commands/cline-cmd.mjs +0 -289
  203. package/cli/commands/validate.test.mjs +0 -344
  204. package/cli/doctor.test.mjs +0 -350
  205. package/config/cline.json.template +0 -342
  206. package/packages/sdk/src/client.ts +0 -188
  207. package/packages/sdk/src/cline-events.ts +0 -134
  208. package/packages/sdk/src/cline-types.ts +0 -66
  209. package/packages/sdk/src/cline.ts +0 -339
  210. package/packages/sdk/src/errors.ts +0 -129
  211. package/packages/sdk/src/events.ts +0 -153
  212. package/packages/sdk/src/types.ts +0 -176
  213. package/packages/sdk/tests/client.test.ts +0 -217
  214. package/packages/sdk/tests/errors.test.ts +0 -108
  215. package/packages/sdk/tests/events.test.ts +0 -139
  216. package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
  217. package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
  218. package/plugins/bizar/ARCHITECTURE.md +0 -142
  219. package/plugins/bizar/CONSTRAINTS.md +0 -67
  220. package/plugins/bizar/LICENSE +0 -21
  221. package/plugins/bizar/README.md +0 -448
  222. package/plugins/bizar/index.ts +0 -872
  223. package/plugins/bizar/package.json +0 -39
  224. package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
  225. package/plugins/bizar/src/background-state.ts +0 -641
  226. package/plugins/bizar/src/background.ts +0 -1806
  227. package/plugins/bizar/src/cline-runner.ts +0 -203
  228. package/plugins/bizar/src/clineruntime.ts +0 -227
  229. package/plugins/bizar/src/commands-impl.ts +0 -151
  230. package/plugins/bizar/src/commands.ts +0 -1799
  231. package/plugins/bizar/src/compaction.d.mts +0 -48
  232. package/plugins/bizar/src/compaction.mjs +0 -192
  233. package/plugins/bizar/src/dashboard-client.ts +0 -233
  234. package/plugins/bizar/src/event-stream.ts +0 -606
  235. package/plugins/bizar/src/fingerprint.ts +0 -120
  236. package/plugins/bizar/src/handoff.ts +0 -79
  237. package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
  238. package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
  239. package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
  240. package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
  241. package/plugins/bizar/src/http-client.ts +0 -467
  242. package/plugins/bizar/src/key-rotation.ts +0 -218
  243. package/plugins/bizar/src/logger.ts +0 -144
  244. package/plugins/bizar/src/loop-engineering.ts +0 -241
  245. package/plugins/bizar/src/loop.ts +0 -176
  246. package/plugins/bizar/src/mistake-recovery.ts +0 -98
  247. package/plugins/bizar/src/odin.ts +0 -227
  248. package/plugins/bizar/src/options.ts +0 -470
  249. package/plugins/bizar/src/plan-fs.ts +0 -323
  250. package/plugins/bizar/src/reasoning-clean.ts +0 -454
  251. package/plugins/bizar/src/report.ts +0 -178
  252. package/plugins/bizar/src/research-prompt.ts +0 -35
  253. package/plugins/bizar/src/serve-info.ts +0 -228
  254. package/plugins/bizar/src/serve.ts +0 -496
  255. package/plugins/bizar/src/settings.ts +0 -349
  256. package/plugins/bizar/src/state.ts +0 -298
  257. package/plugins/bizar/src/tool-discipline.ts +0 -105
  258. package/plugins/bizar/src/tools/agent-browser.ts +0 -315
  259. package/plugins/bizar/src/tools/bg-collect.ts +0 -131
  260. package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
  261. package/plugins/bizar/src/tools/bg-kill.ts +0 -116
  262. package/plugins/bizar/src/tools/bg-pause.ts +0 -99
  263. package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
  264. package/plugins/bizar/src/tools/bg-resume.ts +0 -94
  265. package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
  266. package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
  267. package/plugins/bizar/src/tools/bg-status.ts +0 -130
  268. package/plugins/bizar/src/tools/graph-query.ts +0 -278
  269. package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
  270. package/plugins/bizar/src/tools/memory-list.ts +0 -43
  271. package/plugins/bizar/src/tools/memory-read.ts +0 -69
  272. package/plugins/bizar/src/tools/memory-search.ts +0 -47
  273. package/plugins/bizar/src/tools/memory-write.ts +0 -54
  274. package/plugins/bizar/src/tools/open-kb.ts +0 -198
  275. package/plugins/bizar/src/tools/plan-action.ts +0 -785
  276. package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
  277. package/plugins/bizar/src/tools/team-spawn.ts +0 -73
  278. package/plugins/bizar/src/tools/team-status.ts +0 -76
  279. package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
  280. package/plugins/bizar/src/trajectory.ts +0 -104
  281. package/plugins/bizar/tests/README.md +0 -99
  282. package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
  283. package/plugins/bizar/tests/background-state.test.ts +0 -277
  284. package/plugins/bizar/tests/background.test.ts +0 -402
  285. package/plugins/bizar/tests/block.test.ts +0 -195
  286. package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
  287. package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
  288. package/plugins/bizar/tests/commands-impl.test.ts +0 -316
  289. package/plugins/bizar/tests/commands.test.ts +0 -584
  290. package/plugins/bizar/tests/compaction.test.ts +0 -264
  291. package/plugins/bizar/tests/config.test.ts +0 -128
  292. package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
  293. package/plugins/bizar/tests/dispose.test.ts +0 -336
  294. package/plugins/bizar/tests/event-stream.test.ts +0 -409
  295. package/plugins/bizar/tests/event.test.ts +0 -262
  296. package/plugins/bizar/tests/fingerprint.test.ts +0 -162
  297. package/plugins/bizar/tests/http-client.test.ts +0 -404
  298. package/plugins/bizar/tests/init-helpers.test.ts +0 -203
  299. package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
  300. package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
  301. package/plugins/bizar/tests/key-rotation.test.ts +0 -396
  302. package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
  303. package/plugins/bizar/tests/loop.test.ts +0 -397
  304. package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
  305. package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
  306. package/plugins/bizar/tests/odin.test.ts +0 -125
  307. package/plugins/bizar/tests/options.test.ts +0 -329
  308. package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
  309. package/plugins/bizar/tests/safety.test.ts +0 -256
  310. package/plugins/bizar/tests/serve.test.ts +0 -339
  311. package/plugins/bizar/tests/settings.test.ts +0 -351
  312. package/plugins/bizar/tests/stall-think.test.ts +0 -750
  313. package/plugins/bizar/tests/state.test.ts +0 -276
  314. package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
  315. package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
  316. package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
  317. package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
  318. package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
  319. package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
  320. package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
  321. package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
  322. package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
  323. package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
  324. package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
  325. package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
  326. package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
  327. package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
  328. package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
  329. package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
  330. package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
  331. package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
  332. package/plugins/bizar/tsconfig.json +0 -29
@@ -1,291 +0,0 @@
1
- /**
2
- * src/server/routes/cline-sessions.mjs
3
- *
4
- * /api/cline-sessions — list cline sessions
5
- * POST /api/cline-sessions/new — create a new cline session
6
- * PATCH /api/cline-sessions/:id — rename an cline session
7
- * DELETE /api/cline-sessions/:id — delete an cline session
8
- *
9
- * The list endpoint reads from the cline SQLite database
10
- * (~/.local/share/cline/cline.db). The mutating endpoints
11
- * talk to the cline serve child via the helpers in
12
- * `../serve-info.mjs` (see `createClineSession`,
13
- * `updateClineSession`, `deleteClineSession`).
14
- *
15
- * Both surfaces share directory-resolution logic: we discover the
16
- * session's directory from `listClineSessions()` and fall back to
17
- * `info.worktree` so a freshly created session (not yet listed) can
18
- * still be addressed using the active project's path or the plugin's
19
- * recorded cwd.
20
- *
21
- * v4.2.5 — Added POST/PATCH/DELETE so the dashboard's "New session"
22
- * button, the rail row menu (rename / delete), and the info-panel
23
- * actions all work end-to-end against the cline serve child.
24
- * Sessions are filtered to non-archived (time_archived IS NULL) and
25
- * ordered by most recently updated.
26
- */
27
-
28
- import { Router } from 'express';
29
- import { SpanStatusCode } from '@opentelemetry/api';
30
- import Database from 'better-sqlite3';
31
- import { join } from 'node:path';
32
- import { homedir } from 'node:os';
33
- import { wrap } from './_shared.mjs';
34
- import { tracer } from '../otel.mjs';
35
- import {
36
- readServeInfo,
37
- listClineSessions,
38
- createClineSession,
39
- updateClineSession,
40
- deleteClineSession,
41
- } from '../serve-info.mjs';
42
-
43
- const DB_PATH = join(homedir(), '.local', 'share', 'cline', 'cline.db');
44
-
45
- const SESSION_ID_RE = /^[A-Za-z0-9_-]{1,200}$/;
46
- const AGENT_NAME_RE = /^[A-Za-z0-9_-]{1,64}$/;
47
- const TITLE_MAX = 200;
48
-
49
- /**
50
- * Resolve the cline `directory` for a known session. Used by
51
- * PATCH and DELETE so a session started from any worktree is
52
- * addressed through its own scope.
53
- *
54
- * @param {ReturnType<typeof readServeInfo>} info
55
- * @param {string} sessionId
56
- * @returns {Promise<string|null>}
57
- */
58
- async function resolveSessionDirectory(info, sessionId) {
59
- if (!info) return null;
60
- try {
61
- const sessions = await listClineSessions(info, 5_000);
62
- if (Array.isArray(sessions)) {
63
- const entry = sessions.find((s) => s && s.id === sessionId);
64
- const dir = entry?.location?.directory;
65
- if (typeof dir === 'string' && dir.length > 0) return dir;
66
- }
67
- } catch {
68
- /* fall through to worktree */
69
- }
70
- if (typeof info.worktree === 'string' && info.worktree.length > 0) {
71
- return info.worktree;
72
- }
73
- return null;
74
- }
75
-
76
- /**
77
- * @returns {import('express').Router}
78
- */
79
- export function createClineSessionsRouter() {
80
- const router = Router();
81
-
82
- router.get('/cline-sessions', wrap(async (_req, res) => {
83
- let db;
84
- try {
85
- db = new Database(DB_PATH, { readonly: true, fileMustExist: true });
86
- const rows = db.prepare(`
87
- SELECT id, title, project_id, time_created, time_updated
88
- FROM session
89
- WHERE time_archived IS NULL
90
- ORDER BY time_updated DESC
91
- LIMIT 200
92
- `).all();
93
- return res.json({
94
- sessions: rows.map((r) => ({
95
- id: r.id,
96
- title: r.title,
97
- project: r.project_id,
98
- created: r.time_created,
99
- updated: r.time_updated,
100
- mtime: r.time_updated,
101
- })),
102
- });
103
- } catch (err) {
104
- // DB might not exist yet, or permissions issue — return empty list
105
- return res.json({ sessions: [], error: err.message });
106
- } finally {
107
- if (db) db.close();
108
- }
109
- }));
110
-
111
- // ── POST /api/cline-sessions/new ───────────────────────────────────
112
- //
113
- // Body: { title?: string, agent: string, directory?: string }.
114
- // When `directory` is omitted we use the cline plugin's recorded
115
- // worktree (the active project's path on disk).
116
- //
117
- // Returns 201 with `{ id, title, agent, directory, createdAt }`.
118
- // Returns 400 when the body is missing / invalid.
119
- // Returns 502 when the upstream cline serve errors.
120
- // Returns 503 when the cline plugin is offline.
121
- // ────────────────────────────────────────────────────────────────────
122
- router.post('/cline-sessions/new', wrap(async (req, res) => {
123
- return tracer.startActiveSpan('cline.session.create', async (span) => {
124
- let spanEnded = false;
125
- const finishSpan = () => {
126
- if (spanEnded) return;
127
- spanEnded = true;
128
- try {
129
- const code = res.statusCode || 0;
130
- if (code >= 400) {
131
- span.setStatus({ code: SpanStatusCode.ERROR, message: `HTTP ${code}` });
132
- } else {
133
- span.setStatus({ code: SpanStatusCode.OK });
134
- }
135
- } finally {
136
- span.end();
137
- }
138
- };
139
- res.once('finish', finishSpan);
140
- try {
141
- const body = req.body && typeof req.body === 'object' ? req.body : {};
142
- const title = typeof body.title === 'string' && body.title.trim().length > 0
143
- ? body.title.trim().slice(0, TITLE_MAX)
144
- : null;
145
- const agent = typeof body.agent === 'string' ? body.agent.trim() : '';
146
- span.setAttribute('cline.session.agent', agent);
147
- span.setAttribute('cline.session.title_length', title === null ? 0 : title.length);
148
- if (!agent) {
149
- res.status(400).json({ error: 'bad_request', message: '`agent` is required' });
150
- return;
151
- }
152
- if (!AGENT_NAME_RE.test(agent)) {
153
- res.status(400).json({ error: 'bad_request', message: '`agent` is invalid (allowed: [A-Za-z0-9_-]{1,64})' });
154
- return;
155
- }
156
- if (title !== null && title.length > TITLE_MAX) {
157
- res.status(400).json({ error: 'bad_request', message: `title too long (> ${TITLE_MAX} chars)` });
158
- return;
159
- }
160
-
161
- const info = readServeInfo();
162
- if (!info) {
163
- res.status(503).json({
164
- error: 'plugin_offline',
165
- message: 'cline plugin is not running',
166
- });
167
- return;
168
- }
169
-
170
- const directory = typeof body.directory === 'string' && body.directory.length > 0
171
- ? body.directory
172
- : (info.worktree || '');
173
- span.setAttribute('cline.session.directory', directory);
174
-
175
- const finalTitle = title || `Chat: ${agent}`;
176
- const result = await createClineSession(
177
- info,
178
- { title: finalTitle, agent },
179
- directory,
180
- );
181
- if (!result.ok || !result.sessionId) {
182
- const status = result.status === 404 ? 404 : 502;
183
- res.status(status).json({
184
- error: 'cline_error',
185
- message: result.error || 'failed to create cline session',
186
- });
187
- return;
188
- }
189
-
190
- span.setAttribute('cline.session.id', result.sessionId);
191
- res.status(201).json({
192
- id: result.sessionId,
193
- title: finalTitle,
194
- agent,
195
- directory,
196
- createdAt: Date.now(),
197
- });
198
- } catch (err) {
199
- if (!spanEnded) {
200
- spanEnded = true;
201
- span.recordException(err);
202
- span.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
203
- span.end();
204
- }
205
- throw err;
206
- }
207
- });
208
- }));
209
-
210
- // ── PATCH /api/cline-sessions/:id ──────────────────────────────────
211
- //
212
- // Body: { title: string } — required, non-empty, ≤ 200 chars.
213
- // Returns 200 with `{ id, title }` on success.
214
- // 400 / 404 (unknown) / 502 / 503 / 504 (timeouts).
215
- // ────────────────────────────────────────────────────────────────────
216
- router.patch('/cline-sessions/:id', wrap(async (req, res) => {
217
- const sessionId = String(req.params?.id || '');
218
- if (!SESSION_ID_RE.test(sessionId)) {
219
- res.status(400).json({ error: 'bad_request', message: 'invalid session id' });
220
- return;
221
- }
222
- const body = req.body && typeof req.body === 'object' ? req.body : {};
223
- const title = typeof body.title === 'string' ? body.title.trim() : '';
224
- if (!title) {
225
- res.status(400).json({ error: 'bad_request', message: '`title` is required (non-empty)' });
226
- return;
227
- }
228
- if (title.length > TITLE_MAX) {
229
- res.status(400).json({ error: 'bad_request', message: `title too long (> ${TITLE_MAX} chars)` });
230
- return;
231
- }
232
-
233
- const info = readServeInfo();
234
- if (!info) {
235
- res.status(503).json({ error: 'plugin_offline', message: 'cline plugin is not running' });
236
- return;
237
- }
238
- const directory = await resolveSessionDirectory(info, sessionId);
239
- if (!directory) {
240
- res.status(503).json({
241
- error: 'directory_unknown',
242
- message: 'cannot determine the cline session directory',
243
- });
244
- return;
245
- }
246
-
247
- const result = await updateClineSession(info, sessionId, { title }, directory);
248
- if (!result.ok) {
249
- const status = result.status === 404 ? 404 : 502;
250
- res.status(status).json({ error: 'cline_error', message: result.error || 'rename failed' });
251
- return;
252
- }
253
- res.json({ id: sessionId, title });
254
- }));
255
-
256
- // ── DELETE /api/cline-sessions/:id ─────────────────────────────────
257
- //
258
- // No body. Returns 200 on success or if the session was already gone.
259
- // 400 (invalid id) / 404 (unknown — surfaces when upstream says so) /
260
- // 502 / 503.
261
- // ────────────────────────────────────────────────────────────────────
262
- router.delete('/cline-sessions/:id', wrap(async (req, res) => {
263
- const sessionId = String(req.params?.id || '');
264
- if (!SESSION_ID_RE.test(sessionId)) {
265
- res.status(400).json({ error: 'bad_request', message: 'invalid session id' });
266
- return;
267
- }
268
- const info = readServeInfo();
269
- if (!info) {
270
- res.status(503).json({ error: 'plugin_offline', message: 'cline plugin is not running' });
271
- return;
272
- }
273
- const directory = await resolveSessionDirectory(info, sessionId);
274
- if (!directory) {
275
- res.status(503).json({
276
- error: 'directory_unknown',
277
- message: 'cannot determine the cline session directory',
278
- });
279
- return;
280
- }
281
- const result = await deleteClineSession(info, sessionId, directory);
282
- if (!result.ok) {
283
- const status = result.status === 404 ? 404 : 502;
284
- res.status(status).json({ error: 'cline_error', message: result.error || 'delete failed' });
285
- return;
286
- }
287
- res.json({ id: sessionId, deleted: true });
288
- }));
289
-
290
- return router;
291
- }
@@ -1,289 +0,0 @@
1
- /**
2
- * cli/commands/cline-cmd.mjs
3
- *
4
- * v6.2.3 — Pass-through wrappers for Cline CLI commands that Bizar
5
- * wants to expose as `bizar <subcommand>` for consistency.
6
- *
7
- * These are NOT reimaginings — they're thin pass-throughs that:
8
- * 1. Set sane defaults from Bizar's installed location
9
- * (e.g. CLINE_DIR=~/.cline, CLINE_PROVIDER_SETTINGS_PATH)
10
- * 2. Spawn the `cline` binary with the same args
11
- * 3. Stream the output through (with our chalk banner)
12
- *
13
- * Wrapped commands:
14
- * - bizar config → `cline config`
15
- * - bizar history → `cline history`
16
- * - bizar plugin → `cline plugin <sub>`
17
- * - bizar hub → `cline hub <sub>`
18
- * - bizar hook → `cline hook` (handle hook payload from stdin)
19
- * - bizar team → `cline --team-name <name> "mission"`
20
- * (spawn an agent team from the CLI directly, without the plugin)
21
- *
22
- * Why: Bizar users already know the `bizar` CLI. Wrapping Cline
23
- * commands means they don't have to remember which binary owns
24
- * which feature.
25
- */
26
-
27
- import { spawn } from 'node:child_process';
28
- import { existsSync } from 'node:fs';
29
- import { join } from 'node:path';
30
- import chalk from 'chalk';
31
-
32
- const HOMEDIR = process.env.HOME || process.env.USERPROFILE || '/tmp';
33
- const CLINE_BIN = process.env.CLINE_BIN || 'cline';
34
-
35
- /**
36
- * Resolve the cline binary. On most installs, `which cline` returns
37
- * the shim; we use that. Allow override via CLINE_BIN env var.
38
- */
39
- function findClineBin() {
40
- if (CLINE_BIN && existsSync(CLINE_BIN)) return CLINE_BIN;
41
- // Default to PATH lookup via the spawn shell.
42
- return 'cline';
43
- }
44
-
45
- /**
46
- * Spawn `cline` with the given args, inheriting stdio.
47
- * Returns a promise that resolves with the exit code.
48
- */
49
- export function spawnCline(args, opts = {}) {
50
- return new Promise((resolve, reject) => {
51
- const bin = findClineBin();
52
- const child = spawn(bin, args, {
53
- stdio: opts.stdio || 'inherit',
54
- env: {
55
- ...process.env,
56
- // Always use the standard Cline state dir unless overridden.
57
- ...(process.env.CLINE_DIR ? {} : { CLINE_DIR: join(HOMEDIR, '.cline') }),
58
- // The plugin already wires up the Cline data dir; pass it
59
- // through so `bizar config` and `bizar history` see the same
60
- // session/db the plugin sees.
61
- ...(process.env.CLINE_PROVIDER_SETTINGS_PATH ? {} : {}),
62
- },
63
- });
64
- child.on('error', reject);
65
- child.on('exit', (code, signal) => {
66
- // Mirror the exit code so callers can chain commands.
67
- if (typeof code === 'number') resolve(code);
68
- else if (signal) resolve(128 + (typeof process.exitCode === 'number' ? process.exitCode : 0));
69
- else resolve(0);
70
- });
71
- });
72
- }
73
-
74
- export function showClineCmdHelp() {
75
- console.log(`
76
- bizar <cline-cmd> — Pass-through wrappers for Cline CLI commands
77
-
78
- These commands delegate to the \`cline\` binary on your PATH so you
79
- don't have to remember which binary owns which feature.
80
-
81
- Available wrappers:
82
- bizar config Show current configuration (mirrors \`cline config\`)
83
- bizar history List session history (mirrors \`cline history\`)
84
- bizar hub Manage the local hub daemon (mirrors \`cline hub\`)
85
- bizar hook Handle a hook payload from stdin (mirrors \`cline hook\`)
86
- bizar team <name> Spawn a coordinated agent team (wraps \`cline --team-name\`)
87
- bizar subagent Spawn a read-only research subagent
88
-
89
- Note: Cline plugin management uses \`bizar plugin\` (Bizar's plugin
90
- marketplace) which already overlaps with the Cline plugin manager.
91
- Run \`cline plugin <sub>\` directly for the Cline one.
92
-
93
- Examples:
94
- bizar config --json
95
- bizar history --limit 20 --json
96
- bizar hub start
97
- bizar team auth-sprint "Plan and implement user auth with tests"
98
- bizar subagent mimir "Find all places where the auth token is verified"
99
-
100
- Related:
101
- /team The matching Cline slash command (works inside a session)
102
- bizar validate Health check the Bizar install
103
- bizar doctor Diagnose Cline-side issues
104
- `);
105
- }
106
-
107
- /**
108
- * `bizar config` — show current Cline configuration.
109
- * Thin wrapper around `cline config [options]`.
110
- */
111
- export async function runClineConfig(args = []) {
112
- console.log(chalk.dim(` (delegating to \`cline config\`)\n`));
113
- const code = await spawnCline(['config', ...args]);
114
- process.exit(code);
115
- }
116
-
117
- /**
118
- * `bizar history` — list session history.
119
- * Thin wrapper around `cline history [options]`.
120
- */
121
- export async function runClineHistory(args = []) {
122
- console.log(chalk.dim(` (delegating to \`cline history\`)\n`));
123
- const code = await spawnCline(['history', ...args]);
124
- process.exit(code);
125
- }
126
-
127
- // NOTE: `bizar plugin` is already taken by the Bizar marketplace
128
- // (cli/commands/plugin.mjs). To avoid the name collision, Cline's
129
- // plugin manager is exposed as `cline plugin <sub>` directly via
130
- // the cline CLI on PATH. Users who want Cline plugin management
131
- // can also shell out via `bizar provider install <url>` or just
132
- // run `cline plugin install <url>` themselves.
133
-
134
- /**
135
- * `bizar hub <subcommand> [...args]` — manage the local hub daemon.
136
- * Thin wrapper around `cline hub <subcommand>`.
137
- */
138
- export async function runClineHub(args = []) {
139
- if (args.length === 0) {
140
- console.log(chalk.cyan(' bizar hub — Manage the local Cline hub daemon\n'));
141
- console.log(chalk.dim(' Subcommands (passed through to `cline hub`):'));
142
- console.log(' start Start the hub daemon');
143
- console.log(' stop Stop the hub daemon');
144
- console.log(' status Show hub status');
145
- console.log(' logs Show hub logs');
146
- console.log('');
147
- console.log(chalk.dim(' The hub daemon lets long-running tasks survive logout. '));
148
- console.log(chalk.dim(' Used by `--zen` mode and by scheduled agents.'));
149
- console.log('');
150
- return;
151
- }
152
- const code = await spawnCline(['hub', ...args]);
153
- process.exit(code);
154
- }
155
-
156
- /**
157
- * `bizar hook` — handle a hook payload from stdin.
158
- * Thin wrapper around `cline hook` (reads JSON from stdin and
159
- * runs the configured hook handler).
160
- */
161
- export async function runClineHook(args = []) {
162
- // No banner — the hook payload is JSON, no room for chalk noise.
163
- const code = await spawnCline(['hook', ...args], { stdio: 'inherit' });
164
- process.exit(code);
165
- }
166
-
167
- /**
168
- * `bizar team <name> "mission" [...flags]` — spawn a coordinated agent
169
- * team from the CLI directly. Wraps `cline --team-name <name>`.
170
- *
171
- * This is the OUT-OF-SESSION equivalent of the `/team` slash command.
172
- * Useful for batch / scripting use cases where you want to fire off a
173
- * team mission from a shell script (e.g. a CI job, a cron, a webhook).
174
- *
175
- * Example:
176
- * bizar team auth-sprint "Plan and implement user auth with tests" \
177
- * --provider litellm --model minimaxcustom/MiniMax-M3
178
- */
179
- export async function runClineTeam(args = []) {
180
- if (args.length === 0) {
181
- console.log(chalk.cyan(' bizar team — Spawn a coordinated agent team from the CLI\n'));
182
- console.log(chalk.dim(' Usage:'));
183
- console.log(' bizar team <name> "mission" [--provider X] [--model Y] [more flags]');
184
- console.log('');
185
- console.log(chalk.dim(' This is the OUT-OF-SESSION equivalent of the /team slash command.'));
186
- console.log(chalk.dim(' Wraps `cline --team-name <name> "<mission>"`. Use it for batch'));
187
- console.log(chalk.dim(' / scripted / CI use cases where you want to fire a team mission'));
188
- console.log(chalk.dim(' without entering an interactive Cline session.'));
189
- console.log('');
190
- console.log(chalk.dim(' Examples:'));
191
- console.log(' bizar team auth-sprint "Plan and implement user auth with tests"');
192
- console.log(' bizar team release-prep "Check CHANGELOG, bump version, run /test"');
193
- console.log(' bizar team rca "Investigate why the build failed on PR #42"');
194
- console.log('');
195
- return;
196
- }
197
- // First positional arg = team name, second = mission prompt.
198
- const [name, mission, ...rest] = args;
199
- if (!name) {
200
- console.error(chalk.red(' ✗ Team name required'));
201
- console.error(chalk.dim(' Usage: bizar team <name> "mission"'));
202
- process.exit(2);
203
- }
204
- if (!mission) {
205
- console.error(chalk.red(' ✗ Mission prompt required'));
206
- console.error(chalk.dim(' Usage: bizar team <name> "mission"'));
207
- process.exit(2);
208
- }
209
- console.log(chalk.cyan(`\n 🚀 Spawning team '${name}'\n`));
210
- console.log(chalk.dim(` Mission: ${mission}\n`));
211
- const code = await spawnCline(['--team-name', name, mission, ...rest]);
212
- process.exit(code);
213
- }
214
-
215
- /**
216
- * `bizar subagent <agent> "task"` — spawn a quick read-only research
217
- * subagent. This is the OUT-OF-SESSION equivalent of using
218
- * `use_subagents` inside Cline.
219
- *
220
- * Why it's separate from `bizar team`: subagents are fast/cheap and
221
- * read-only. They don't need team coordination. They're the right
222
- * tool for "go investigate X and report back".
223
- *
224
- * Note: Cline's `use_subagents` is a built-in tool that only works
225
- * INSIDE a Cline session. The `cline --yolo` / interactive flags
226
- * don't expose it directly. We shell out via the `--provider` flag
227
- * to force an immediate one-shot run.
228
- *
229
- * For programmatic subagent dispatch (from inside a Cline session),
230
- * use the `task` tool that Cline provides automatically when
231
- * `enableSpawnAgent: true` (the Bizar plugin sets this since v6.2.3).
232
- *
233
- * This function is a thin convenience: it just spawns a regular
234
- * Cline run with the agent name prefixed. For real subagent
235
- * orchestration, run `cline` interactively.
236
- */
237
- export async function runClineSubagent(args = []) {
238
- if (args.length === 0) {
239
- console.log(chalk.cyan(' bizar subagent — Spawn a quick read-only research subagent\n'));
240
- console.log(chalk.dim(' Subagents are read-only research agents. They run in parallel, '));
241
- console.log(chalk.dim(' keep their own context window, and return a focused report.'));
242
- console.log(chalk.dim(' Use them for broad codebase exploration without burning context.\n'));
243
- console.log('');
244
- console.log(chalk.dim(' Usage:'));
245
- console.log(' bizar subagent <agent> "task"');
246
- console.log('');
247
- console.log(chalk.dim(' Note: for IN-SESSION subagent dispatch, just ask the model'));
248
- console.log(chalk.dim(' to "use subagents" — Cline picks them up automatically when'));
249
- console.log(chalk.dim(' enableSpawnAgent=true (the Bizar default since v6.2.3).'));
250
- console.log('');
251
- return;
252
- }
253
- const [agent, ...rest] = args;
254
- const task = rest.find((a) => typeof a === 'string' && !a.startsWith('-'));
255
- if (!agent || !task) {
256
- console.error(chalk.red(' ✗ Usage: bizar subagent <agent> "task"'));
257
- process.exit(2);
258
- }
259
- console.log(chalk.cyan(`\n 🔍 Spawning subagent '${agent}'\n`));
260
- console.log(chalk.dim(` Task: ${task}\n`));
261
- // We pass --agent <name> so Cline uses the named agent and
262
- // --auto-approve true to skip permission prompts for the
263
- // read-only subagent.
264
- const filteredArgs = rest.filter((a) => a !== task);
265
- const code = await spawnCline([
266
- '--agent', agent,
267
- '--auto-approve', 'true',
268
- `--system-prompt:subagent-research`,
269
- task,
270
- ...filteredArgs,
271
- ]);
272
- process.exit(code);
273
- }
274
-
275
- // ── run() entry point (used by bin.mjs dispatcher) ─────────────────────────
276
-
277
- export async function run(name, args, isHelpRequest) {
278
- // Note: bin.mjs dispatcher calls run('team', [], false) etc.
279
- // So `name` here is the subcommand itself.
280
- if (name === 'config') { await runClineConfig(args); return true; }
281
- if (name === 'history') { await runClineHistory(args); return true; }
282
- if (name === 'hub') { await runClineHub(args); return true; }
283
- if (name === 'hook') { await runClineHook(args); return true; }
284
- if (name === 'team') { await runClineTeam(args); return true; }
285
- if (name === 'subagent') { await runClineSubagent(args); return true; }
286
- // Fallback: show help.
287
- showClineCmdHelp();
288
- return true;
289
- }