steroids-cli 0.4.47

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +640 -0
  3. package/dist/cli/colors.d.ts +110 -0
  4. package/dist/cli/colors.d.ts.map +1 -0
  5. package/dist/cli/colors.js +228 -0
  6. package/dist/cli/colors.js.map +1 -0
  7. package/dist/cli/env.d.ts +159 -0
  8. package/dist/cli/env.d.ts.map +1 -0
  9. package/dist/cli/env.js +227 -0
  10. package/dist/cli/env.js.map +1 -0
  11. package/dist/cli/errors.d.ts +166 -0
  12. package/dist/cli/errors.d.ts.map +1 -0
  13. package/dist/cli/errors.js +244 -0
  14. package/dist/cli/errors.js.map +1 -0
  15. package/dist/cli/flags.d.ts +75 -0
  16. package/dist/cli/flags.d.ts.map +1 -0
  17. package/dist/cli/flags.js +232 -0
  18. package/dist/cli/flags.js.map +1 -0
  19. package/dist/cli/help.d.ts +97 -0
  20. package/dist/cli/help.d.ts.map +1 -0
  21. package/dist/cli/help.js +275 -0
  22. package/dist/cli/help.js.map +1 -0
  23. package/dist/cli/index.d.ts +13 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +29 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/interactive.d.ts +58 -0
  28. package/dist/cli/interactive.d.ts.map +1 -0
  29. package/dist/cli/interactive.js +127 -0
  30. package/dist/cli/interactive.js.map +1 -0
  31. package/dist/cli/output.d.ts +116 -0
  32. package/dist/cli/output.d.ts.map +1 -0
  33. package/dist/cli/output.js +178 -0
  34. package/dist/cli/output.js.map +1 -0
  35. package/dist/commands/about.d.ts +7 -0
  36. package/dist/commands/about.d.ts.map +1 -0
  37. package/dist/commands/about.js +259 -0
  38. package/dist/commands/about.js.map +1 -0
  39. package/dist/commands/ai.d.ts +6 -0
  40. package/dist/commands/ai.d.ts.map +1 -0
  41. package/dist/commands/ai.js +382 -0
  42. package/dist/commands/ai.js.map +1 -0
  43. package/dist/commands/backup.d.ts +3 -0
  44. package/dist/commands/backup.d.ts.map +1 -0
  45. package/dist/commands/backup.js +528 -0
  46. package/dist/commands/backup.js.map +1 -0
  47. package/dist/commands/completion.d.ts +3 -0
  48. package/dist/commands/completion.d.ts.map +1 -0
  49. package/dist/commands/completion.js +405 -0
  50. package/dist/commands/completion.js.map +1 -0
  51. package/dist/commands/config.d.ts +3 -0
  52. package/dist/commands/config.d.ts.map +1 -0
  53. package/dist/commands/config.js +665 -0
  54. package/dist/commands/config.js.map +1 -0
  55. package/dist/commands/disputes.d.ts +3 -0
  56. package/dist/commands/disputes.d.ts.map +1 -0
  57. package/dist/commands/disputes.js +499 -0
  58. package/dist/commands/disputes.js.map +1 -0
  59. package/dist/commands/gc.d.ts +3 -0
  60. package/dist/commands/gc.d.ts.map +1 -0
  61. package/dist/commands/gc.js +300 -0
  62. package/dist/commands/gc.js.map +1 -0
  63. package/dist/commands/git.d.ts +3 -0
  64. package/dist/commands/git.d.ts.map +1 -0
  65. package/dist/commands/git.js +458 -0
  66. package/dist/commands/git.js.map +1 -0
  67. package/dist/commands/health.d.ts +3 -0
  68. package/dist/commands/health.d.ts.map +1 -0
  69. package/dist/commands/health.js +604 -0
  70. package/dist/commands/health.js.map +1 -0
  71. package/dist/commands/hooks.d.ts +6 -0
  72. package/dist/commands/hooks.d.ts.map +1 -0
  73. package/dist/commands/hooks.js +529 -0
  74. package/dist/commands/hooks.js.map +1 -0
  75. package/dist/commands/init.d.ts +6 -0
  76. package/dist/commands/init.d.ts.map +1 -0
  77. package/dist/commands/init.js +200 -0
  78. package/dist/commands/init.js.map +1 -0
  79. package/dist/commands/llm.d.ts +7 -0
  80. package/dist/commands/llm.d.ts.map +1 -0
  81. package/dist/commands/llm.js +285 -0
  82. package/dist/commands/llm.js.map +1 -0
  83. package/dist/commands/locks.d.ts +3 -0
  84. package/dist/commands/locks.d.ts.map +1 -0
  85. package/dist/commands/locks.js +431 -0
  86. package/dist/commands/locks.js.map +1 -0
  87. package/dist/commands/logs.d.ts +3 -0
  88. package/dist/commands/logs.d.ts.map +1 -0
  89. package/dist/commands/logs.js +487 -0
  90. package/dist/commands/logs.js.map +1 -0
  91. package/dist/commands/loop-phases.d.ts +11 -0
  92. package/dist/commands/loop-phases.d.ts.map +1 -0
  93. package/dist/commands/loop-phases.js +204 -0
  94. package/dist/commands/loop-phases.js.map +1 -0
  95. package/dist/commands/loop.d.ts +3 -0
  96. package/dist/commands/loop.d.ts.map +1 -0
  97. package/dist/commands/loop.js +396 -0
  98. package/dist/commands/loop.js.map +1 -0
  99. package/dist/commands/projects.d.ts +6 -0
  100. package/dist/commands/projects.d.ts.map +1 -0
  101. package/dist/commands/projects.js +362 -0
  102. package/dist/commands/projects.js.map +1 -0
  103. package/dist/commands/purge.d.ts +3 -0
  104. package/dist/commands/purge.d.ts.map +1 -0
  105. package/dist/commands/purge.js +516 -0
  106. package/dist/commands/purge.js.map +1 -0
  107. package/dist/commands/runners.d.ts +3 -0
  108. package/dist/commands/runners.d.ts.map +1 -0
  109. package/dist/commands/runners.js +1076 -0
  110. package/dist/commands/runners.js.map +1 -0
  111. package/dist/commands/scan.d.ts +3 -0
  112. package/dist/commands/scan.d.ts.map +1 -0
  113. package/dist/commands/scan.js +291 -0
  114. package/dist/commands/scan.js.map +1 -0
  115. package/dist/commands/sections-commands.d.ts +9 -0
  116. package/dist/commands/sections-commands.d.ts.map +1 -0
  117. package/dist/commands/sections-commands.js +282 -0
  118. package/dist/commands/sections-commands.js.map +1 -0
  119. package/dist/commands/sections-graph.d.ts +25 -0
  120. package/dist/commands/sections-graph.d.ts.map +1 -0
  121. package/dist/commands/sections-graph.js +180 -0
  122. package/dist/commands/sections-graph.js.map +1 -0
  123. package/dist/commands/sections.d.ts +3 -0
  124. package/dist/commands/sections.d.ts.map +1 -0
  125. package/dist/commands/sections.js +376 -0
  126. package/dist/commands/sections.js.map +1 -0
  127. package/dist/commands/stats.d.ts +6 -0
  128. package/dist/commands/stats.d.ts.map +1 -0
  129. package/dist/commands/stats.js +324 -0
  130. package/dist/commands/stats.js.map +1 -0
  131. package/dist/commands/tasks.d.ts +3 -0
  132. package/dist/commands/tasks.d.ts.map +1 -0
  133. package/dist/commands/tasks.js +1115 -0
  134. package/dist/commands/tasks.js.map +1 -0
  135. package/dist/commands/web.d.ts +7 -0
  136. package/dist/commands/web.d.ts.map +1 -0
  137. package/dist/commands/web.js +204 -0
  138. package/dist/commands/web.js.map +1 -0
  139. package/dist/config/ai-setup.d.ts +27 -0
  140. package/dist/config/ai-setup.d.ts.map +1 -0
  141. package/dist/config/ai-setup.js +432 -0
  142. package/dist/config/ai-setup.js.map +1 -0
  143. package/dist/config/browser.d.ts +9 -0
  144. package/dist/config/browser.d.ts.map +1 -0
  145. package/dist/config/browser.js +200 -0
  146. package/dist/config/browser.js.map +1 -0
  147. package/dist/config/json-schema.d.ts +28 -0
  148. package/dist/config/json-schema.d.ts.map +1 -0
  149. package/dist/config/json-schema.js +84 -0
  150. package/dist/config/json-schema.js.map +1 -0
  151. package/dist/config/loader.d.ts +152 -0
  152. package/dist/config/loader.d.ts.map +1 -0
  153. package/dist/config/loader.js +270 -0
  154. package/dist/config/loader.js.map +1 -0
  155. package/dist/config/schema.d.ts +34 -0
  156. package/dist/config/schema.d.ts.map +1 -0
  157. package/dist/config/schema.js +437 -0
  158. package/dist/config/schema.js.map +1 -0
  159. package/dist/config/validator.d.ts +32 -0
  160. package/dist/config/validator.d.ts.map +1 -0
  161. package/dist/config/validator.js +187 -0
  162. package/dist/config/validator.js.map +1 -0
  163. package/dist/database/connection.d.ts +35 -0
  164. package/dist/database/connection.d.ts.map +1 -0
  165. package/dist/database/connection.js +208 -0
  166. package/dist/database/connection.js.map +1 -0
  167. package/dist/database/queries.d.ts +218 -0
  168. package/dist/database/queries.d.ts.map +1 -0
  169. package/dist/database/queries.js +613 -0
  170. package/dist/database/queries.js.map +1 -0
  171. package/dist/database/schema.d.ts +8 -0
  172. package/dist/database/schema.d.ts.map +1 -0
  173. package/dist/database/schema.js +160 -0
  174. package/dist/database/schema.js.map +1 -0
  175. package/dist/disputes/behavior.d.ts +106 -0
  176. package/dist/disputes/behavior.d.ts.map +1 -0
  177. package/dist/disputes/behavior.js +150 -0
  178. package/dist/disputes/behavior.js.map +1 -0
  179. package/dist/disputes/create.d.ts +59 -0
  180. package/dist/disputes/create.d.ts.map +1 -0
  181. package/dist/disputes/create.js +222 -0
  182. package/dist/disputes/create.js.map +1 -0
  183. package/dist/disputes/index.d.ts +21 -0
  184. package/dist/disputes/index.d.ts.map +1 -0
  185. package/dist/disputes/index.js +76 -0
  186. package/dist/disputes/index.js.map +1 -0
  187. package/dist/disputes/markdown.d.ts +41 -0
  188. package/dist/disputes/markdown.d.ts.map +1 -0
  189. package/dist/disputes/markdown.js +261 -0
  190. package/dist/disputes/markdown.js.map +1 -0
  191. package/dist/disputes/queries.d.ts +83 -0
  192. package/dist/disputes/queries.d.ts.map +1 -0
  193. package/dist/disputes/queries.js +180 -0
  194. package/dist/disputes/queries.js.map +1 -0
  195. package/dist/disputes/resolve.d.ts +57 -0
  196. package/dist/disputes/resolve.d.ts.map +1 -0
  197. package/dist/disputes/resolve.js +171 -0
  198. package/dist/disputes/resolve.js.map +1 -0
  199. package/dist/disputes/stale.d.ts +98 -0
  200. package/dist/disputes/stale.d.ts.map +1 -0
  201. package/dist/disputes/stale.js +205 -0
  202. package/dist/disputes/stale.js.map +1 -0
  203. package/dist/disputes/types.d.ts +92 -0
  204. package/dist/disputes/types.d.ts.map +1 -0
  205. package/dist/disputes/types.js +100 -0
  206. package/dist/disputes/types.js.map +1 -0
  207. package/dist/git/push.d.ts +26 -0
  208. package/dist/git/push.d.ts.map +1 -0
  209. package/dist/git/push.js +97 -0
  210. package/dist/git/push.js.map +1 -0
  211. package/dist/git/status.d.ts +61 -0
  212. package/dist/git/status.d.ts.map +1 -0
  213. package/dist/git/status.js +251 -0
  214. package/dist/git/status.js.map +1 -0
  215. package/dist/hooks/events.d.ts +72 -0
  216. package/dist/hooks/events.d.ts.map +1 -0
  217. package/dist/hooks/events.js +120 -0
  218. package/dist/hooks/events.js.map +1 -0
  219. package/dist/hooks/index.d.ts +19 -0
  220. package/dist/hooks/index.d.ts.map +1 -0
  221. package/dist/hooks/index.js +48 -0
  222. package/dist/hooks/index.js.map +1 -0
  223. package/dist/hooks/integration.d.ts +69 -0
  224. package/dist/hooks/integration.d.ts.map +1 -0
  225. package/dist/hooks/integration.js +179 -0
  226. package/dist/hooks/integration.js.map +1 -0
  227. package/dist/hooks/merge.d.ts +115 -0
  228. package/dist/hooks/merge.d.ts.map +1 -0
  229. package/dist/hooks/merge.js +161 -0
  230. package/dist/hooks/merge.js.map +1 -0
  231. package/dist/hooks/orchestrator.d.ts +115 -0
  232. package/dist/hooks/orchestrator.d.ts.map +1 -0
  233. package/dist/hooks/orchestrator.js +226 -0
  234. package/dist/hooks/orchestrator.js.map +1 -0
  235. package/dist/hooks/payload.d.ts +294 -0
  236. package/dist/hooks/payload.d.ts.map +1 -0
  237. package/dist/hooks/payload.js +267 -0
  238. package/dist/hooks/payload.js.map +1 -0
  239. package/dist/hooks/script-runner.d.ts +63 -0
  240. package/dist/hooks/script-runner.d.ts.map +1 -0
  241. package/dist/hooks/script-runner.js +221 -0
  242. package/dist/hooks/script-runner.js.map +1 -0
  243. package/dist/hooks/templates.d.ts +104 -0
  244. package/dist/hooks/templates.d.ts.map +1 -0
  245. package/dist/hooks/templates.js +327 -0
  246. package/dist/hooks/templates.js.map +1 -0
  247. package/dist/hooks/webhook-runner.d.ts +69 -0
  248. package/dist/hooks/webhook-runner.d.ts.map +1 -0
  249. package/dist/hooks/webhook-runner.js +208 -0
  250. package/dist/hooks/webhook-runner.js.map +1 -0
  251. package/dist/index.d.ts +7 -0
  252. package/dist/index.d.ts.map +1 -0
  253. package/dist/index.js +281 -0
  254. package/dist/index.js.map +1 -0
  255. package/dist/locking/cleanup.d.ts +70 -0
  256. package/dist/locking/cleanup.d.ts.map +1 -0
  257. package/dist/locking/cleanup.js +157 -0
  258. package/dist/locking/cleanup.js.map +1 -0
  259. package/dist/locking/queries.d.ts +116 -0
  260. package/dist/locking/queries.d.ts.map +1 -0
  261. package/dist/locking/queries.js +255 -0
  262. package/dist/locking/queries.js.map +1 -0
  263. package/dist/locking/section-lock.d.ts +74 -0
  264. package/dist/locking/section-lock.d.ts.map +1 -0
  265. package/dist/locking/section-lock.js +207 -0
  266. package/dist/locking/section-lock.js.map +1 -0
  267. package/dist/locking/task-lock.d.ts +92 -0
  268. package/dist/locking/task-lock.d.ts.map +1 -0
  269. package/dist/locking/task-lock.js +246 -0
  270. package/dist/locking/task-lock.js.map +1 -0
  271. package/dist/migrations/index.d.ts +7 -0
  272. package/dist/migrations/index.d.ts.map +1 -0
  273. package/dist/migrations/index.js +37 -0
  274. package/dist/migrations/index.js.map +1 -0
  275. package/dist/migrations/manifest.d.ts +92 -0
  276. package/dist/migrations/manifest.d.ts.map +1 -0
  277. package/dist/migrations/manifest.js +270 -0
  278. package/dist/migrations/manifest.js.map +1 -0
  279. package/dist/migrations/runner.d.ts +84 -0
  280. package/dist/migrations/runner.d.ts.map +1 -0
  281. package/dist/migrations/runner.js +351 -0
  282. package/dist/migrations/runner.js.map +1 -0
  283. package/dist/orchestrator/coder.d.ts +32 -0
  284. package/dist/orchestrator/coder.d.ts.map +1 -0
  285. package/dist/orchestrator/coder.js +174 -0
  286. package/dist/orchestrator/coder.js.map +1 -0
  287. package/dist/orchestrator/coordinator.d.ts +28 -0
  288. package/dist/orchestrator/coordinator.d.ts.map +1 -0
  289. package/dist/orchestrator/coordinator.js +256 -0
  290. package/dist/orchestrator/coordinator.js.map +1 -0
  291. package/dist/orchestrator/reviewer.d.ts +35 -0
  292. package/dist/orchestrator/reviewer.d.ts.map +1 -0
  293. package/dist/orchestrator/reviewer.js +241 -0
  294. package/dist/orchestrator/reviewer.js.map +1 -0
  295. package/dist/orchestrator/task-selector.d.ts +102 -0
  296. package/dist/orchestrator/task-selector.d.ts.map +1 -0
  297. package/dist/orchestrator/task-selector.js +341 -0
  298. package/dist/orchestrator/task-selector.js.map +1 -0
  299. package/dist/prompts/coder.d.ts +36 -0
  300. package/dist/prompts/coder.d.ts.map +1 -0
  301. package/dist/prompts/coder.js +315 -0
  302. package/dist/prompts/coder.js.map +1 -0
  303. package/dist/prompts/prompt-helpers.d.ts +51 -0
  304. package/dist/prompts/prompt-helpers.d.ts.map +1 -0
  305. package/dist/prompts/prompt-helpers.js +312 -0
  306. package/dist/prompts/prompt-helpers.js.map +1 -0
  307. package/dist/prompts/reviewer.d.ts +40 -0
  308. package/dist/prompts/reviewer.d.ts.map +1 -0
  309. package/dist/prompts/reviewer.js +438 -0
  310. package/dist/prompts/reviewer.js.map +1 -0
  311. package/dist/providers/api-models.d.ts +65 -0
  312. package/dist/providers/api-models.d.ts.map +1 -0
  313. package/dist/providers/api-models.js +323 -0
  314. package/dist/providers/api-models.js.map +1 -0
  315. package/dist/providers/claude.d.ts +53 -0
  316. package/dist/providers/claude.d.ts.map +1 -0
  317. package/dist/providers/claude.js +229 -0
  318. package/dist/providers/claude.js.map +1 -0
  319. package/dist/providers/codex.d.ts +53 -0
  320. package/dist/providers/codex.d.ts.map +1 -0
  321. package/dist/providers/codex.js +214 -0
  322. package/dist/providers/codex.js.map +1 -0
  323. package/dist/providers/gemini.d.ts +58 -0
  324. package/dist/providers/gemini.d.ts.map +1 -0
  325. package/dist/providers/gemini.js +242 -0
  326. package/dist/providers/gemini.js.map +1 -0
  327. package/dist/providers/index.d.ts +13 -0
  328. package/dist/providers/index.d.ts.map +1 -0
  329. package/dist/providers/index.js +49 -0
  330. package/dist/providers/index.js.map +1 -0
  331. package/dist/providers/interface.d.ts +173 -0
  332. package/dist/providers/interface.d.ts.map +1 -0
  333. package/dist/providers/interface.js +96 -0
  334. package/dist/providers/interface.js.map +1 -0
  335. package/dist/providers/invocation-logger.d.ts +114 -0
  336. package/dist/providers/invocation-logger.d.ts.map +1 -0
  337. package/dist/providers/invocation-logger.js +298 -0
  338. package/dist/providers/invocation-logger.js.map +1 -0
  339. package/dist/providers/openai.d.ts +53 -0
  340. package/dist/providers/openai.d.ts.map +1 -0
  341. package/dist/providers/openai.js +232 -0
  342. package/dist/providers/openai.js.map +1 -0
  343. package/dist/providers/registry.d.ts +100 -0
  344. package/dist/providers/registry.d.ts.map +1 -0
  345. package/dist/providers/registry.js +178 -0
  346. package/dist/providers/registry.js.map +1 -0
  347. package/dist/runners/activity-log.d.ts +65 -0
  348. package/dist/runners/activity-log.d.ts.map +1 -0
  349. package/dist/runners/activity-log.js +148 -0
  350. package/dist/runners/activity-log.js.map +1 -0
  351. package/dist/runners/cron.d.ts +26 -0
  352. package/dist/runners/cron.d.ts.map +1 -0
  353. package/dist/runners/cron.js +176 -0
  354. package/dist/runners/cron.js.map +1 -0
  355. package/dist/runners/daemon.d.ts +71 -0
  356. package/dist/runners/daemon.d.ts.map +1 -0
  357. package/dist/runners/daemon.js +245 -0
  358. package/dist/runners/daemon.js.map +1 -0
  359. package/dist/runners/global-db.d.ts +31 -0
  360. package/dist/runners/global-db.d.ts.map +1 -0
  361. package/dist/runners/global-db.js +230 -0
  362. package/dist/runners/global-db.js.map +1 -0
  363. package/dist/runners/hang-detector.d.ts +38 -0
  364. package/dist/runners/hang-detector.d.ts.map +1 -0
  365. package/dist/runners/hang-detector.js +136 -0
  366. package/dist/runners/hang-detector.js.map +1 -0
  367. package/dist/runners/heartbeat.d.ts +39 -0
  368. package/dist/runners/heartbeat.d.ts.map +1 -0
  369. package/dist/runners/heartbeat.js +79 -0
  370. package/dist/runners/heartbeat.js.map +1 -0
  371. package/dist/runners/lock.d.ts +47 -0
  372. package/dist/runners/lock.d.ts.map +1 -0
  373. package/dist/runners/lock.js +150 -0
  374. package/dist/runners/lock.js.map +1 -0
  375. package/dist/runners/orchestrator-loop.d.ts +20 -0
  376. package/dist/runners/orchestrator-loop.d.ts.map +1 -0
  377. package/dist/runners/orchestrator-loop.js +285 -0
  378. package/dist/runners/orchestrator-loop.js.map +1 -0
  379. package/dist/runners/projects.d.ts +96 -0
  380. package/dist/runners/projects.d.ts.map +1 -0
  381. package/dist/runners/projects.js +255 -0
  382. package/dist/runners/projects.js.map +1 -0
  383. package/dist/runners/wakeup.d.ts +34 -0
  384. package/dist/runners/wakeup.d.ts.map +1 -0
  385. package/dist/runners/wakeup.js +291 -0
  386. package/dist/runners/wakeup.js.map +1 -0
  387. package/migrations/001_initial_schema.sql +106 -0
  388. package/migrations/002_add_commit_sha.sql +12 -0
  389. package/migrations/003_add_section_priority.sql +13 -0
  390. package/migrations/004_add_section_dependencies.sql +18 -0
  391. package/migrations/005_add_audit_actor_model.sql +10 -0
  392. package/migrations/006_add_task_invocations.sql +33 -0
  393. package/migrations/007_add_file_anchor.sql +14 -0
  394. package/migrations/manifest.json +62 -0
  395. package/package.json +49 -0
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ /**
3
+ * Loop phase functions for coder and reviewer invocation
4
+ * Extracted from loop.ts to keep files under 500 lines
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.runCoderPhase = runCoderPhase;
8
+ exports.runReviewerPhase = runReviewerPhase;
9
+ const queries_js_1 = require("../database/queries.js");
10
+ const coder_js_1 = require("../orchestrator/coder.js");
11
+ const reviewer_js_1 = require("../orchestrator/reviewer.js");
12
+ const coordinator_js_1 = require("../orchestrator/coordinator.js");
13
+ const push_js_1 = require("../git/push.js");
14
+ const status_js_1 = require("../git/status.js");
15
+ async function runCoderPhase(db, task, projectPath, action, jsonMode = false, coordinatorCache, coordinatorThresholds) {
16
+ if (!task)
17
+ return;
18
+ let coordinatorGuidance;
19
+ const thresholds = coordinatorThresholds || [2, 5, 9];
20
+ // Check if we should run the coordinator at this rejection count
21
+ // Only runs at specific thresholds to avoid redundant/costly LLM calls
22
+ // But always reuse cached results between thresholds
23
+ const shouldInvokeCoordinator = thresholds.includes(task.rejection_count);
24
+ const cachedResult = coordinatorCache?.get(task.id);
25
+ if (shouldInvokeCoordinator) {
26
+ if (!jsonMode) {
27
+ console.log(`\n>>> Task has ${task.rejection_count} rejections (threshold hit) - invoking COORDINATOR...\n`);
28
+ }
29
+ try {
30
+ const rejectionHistory = (0, queries_js_1.getTaskRejections)(db, task.id);
31
+ const coordExtra = {};
32
+ // Section tasks - so coordinator knows what other tasks handle
33
+ if (task.section_id) {
34
+ const allSectionTasks = (0, queries_js_1.listTasks)(db, { sectionId: task.section_id });
35
+ coordExtra.sectionTasks = allSectionTasks.map(t => ({
36
+ id: t.id, title: t.title, status: t.status,
37
+ }));
38
+ }
39
+ // Coder's latest submission notes
40
+ coordExtra.submissionNotes = (0, queries_js_1.getLatestSubmissionNotes)(db, task.id);
41
+ // What files were modified (lightweight diff summary)
42
+ const modified = (0, status_js_1.getModifiedFiles)(projectPath);
43
+ if (modified.length > 0) {
44
+ coordExtra.gitDiffSummary = modified.join('\n');
45
+ }
46
+ // Include previous coordinator guidance so it doesn't repeat itself
47
+ if (cachedResult) {
48
+ coordExtra.previousGuidance = cachedResult.guidance;
49
+ }
50
+ const coordResult = await (0, coordinator_js_1.invokeCoordinator)(task, rejectionHistory, projectPath, coordExtra);
51
+ if (coordResult) {
52
+ coordinatorGuidance = coordResult.guidance;
53
+ // Store in cache for both coder reuse and reviewer phase
54
+ coordinatorCache?.set(task.id, coordResult);
55
+ // Log coordinator intervention to audit trail so it's visible in WebUI
56
+ (0, queries_js_1.addAuditEntry)(db, task.id, task.status, task.status, 'coordinator', {
57
+ actorType: 'orchestrator',
58
+ notes: `[${coordResult.decision}] ${coordResult.guidance}`,
59
+ });
60
+ if (!jsonMode) {
61
+ console.log(`\nCoordinator decision: ${coordResult.decision}`);
62
+ console.log('Coordinator guidance stored for both coder and reviewer.');
63
+ }
64
+ }
65
+ }
66
+ catch (error) {
67
+ // Coordinator failure is non-fatal - continue without guidance
68
+ if (!jsonMode) {
69
+ console.warn('Coordinator invocation failed, continuing without guidance:', error);
70
+ }
71
+ }
72
+ }
73
+ else if (cachedResult) {
74
+ // Reuse cached coordinator guidance between thresholds
75
+ coordinatorGuidance = cachedResult.guidance;
76
+ if (!jsonMode && task.rejection_count >= 2) {
77
+ console.log(`\nReusing cached coordinator guidance (decision: ${cachedResult.decision})`);
78
+ }
79
+ }
80
+ if (!jsonMode) {
81
+ console.log('\n>>> Invoking CODER...\n');
82
+ }
83
+ const result = await (0, coder_js_1.invokeCoder)(task, projectPath, action, coordinatorGuidance);
84
+ if (result.timedOut) {
85
+ console.warn('Coder timed out. Will retry next iteration.');
86
+ return;
87
+ }
88
+ // Re-read task to see if status was updated
89
+ const updatedTask = (0, queries_js_1.getTask)(db, task.id);
90
+ if (!updatedTask)
91
+ return;
92
+ if (!jsonMode) {
93
+ if (updatedTask.status === 'review') {
94
+ console.log('\nCoder submitted for review. Ready for reviewer.');
95
+ }
96
+ else {
97
+ console.log(`Task status unchanged (${updatedTask.status}). Will retry next iteration.`);
98
+ }
99
+ }
100
+ }
101
+ async function runReviewerPhase(db, task, projectPath, jsonMode = false, coordinatorResult) {
102
+ if (!task)
103
+ return;
104
+ if (!jsonMode) {
105
+ console.log('\n>>> Invoking REVIEWER...\n');
106
+ if (coordinatorResult) {
107
+ console.log(`Coordinator guidance included (decision: ${coordinatorResult.decision})`);
108
+ }
109
+ }
110
+ const result = await (0, reviewer_js_1.invokeReviewer)(task, projectPath, coordinatorResult?.guidance, coordinatorResult?.decision);
111
+ if (result.timedOut) {
112
+ if (!jsonMode) {
113
+ console.warn('Reviewer timed out. Will retry next iteration.');
114
+ }
115
+ return;
116
+ }
117
+ // Re-read task to see what the reviewer decided
118
+ // (Codex runs steroids commands directly to update the database)
119
+ const updatedTask = (0, queries_js_1.getTask)(db, task.id);
120
+ if (!updatedTask)
121
+ return;
122
+ if (updatedTask.status === 'completed') {
123
+ handleApproved(projectPath, jsonMode);
124
+ }
125
+ else if (updatedTask.status === 'in_progress') {
126
+ if (!jsonMode) {
127
+ console.log(`\n✗ Task REJECTED (${updatedTask.rejection_count}/15)`);
128
+ console.log('Returning to coder for fixes.');
129
+ }
130
+ }
131
+ else if (updatedTask.status === 'disputed') {
132
+ handleDisputed(projectPath, jsonMode);
133
+ }
134
+ else if (updatedTask.status === 'failed') {
135
+ if (!jsonMode) {
136
+ console.log('\n✗ Task FAILED (exceeded 15 rejections)');
137
+ console.log('Human intervention required.');
138
+ }
139
+ }
140
+ else if (updatedTask.status === 'review') {
141
+ handleReviewFallback(db, task.id, result, projectPath, jsonMode);
142
+ }
143
+ }
144
+ function handleApproved(projectPath, jsonMode) {
145
+ if (!jsonMode) {
146
+ console.log('\n✓ Task APPROVED');
147
+ console.log('Pushing to git...');
148
+ }
149
+ const pushResult = (0, push_js_1.pushToRemote)(projectPath);
150
+ if (!jsonMode) {
151
+ if (pushResult.success) {
152
+ console.log(`Pushed successfully (${pushResult.commitHash})`);
153
+ }
154
+ else {
155
+ console.warn('Push failed. Will stack and retry on next completion.');
156
+ }
157
+ }
158
+ }
159
+ function handleDisputed(projectPath, jsonMode) {
160
+ if (!jsonMode) {
161
+ console.log('\n! Task DISPUTED');
162
+ console.log('Pushing current work and moving to next task.');
163
+ }
164
+ const pushResult = (0, push_js_1.pushToRemote)(projectPath);
165
+ if (!jsonMode && pushResult.success) {
166
+ console.log(`Pushed disputed work (${pushResult.commitHash})`);
167
+ }
168
+ }
169
+ function handleReviewFallback(db, taskId, result, projectPath, jsonMode) {
170
+ if (!result.decision) {
171
+ if (!jsonMode) {
172
+ console.log('\nReviewer did not take action (status unchanged). Will retry.');
173
+ }
174
+ return;
175
+ }
176
+ if (!jsonMode) {
177
+ console.log(`\nReviewer indicated ${result.decision.toUpperCase()} but command may have failed.`);
178
+ console.log('Attempting fallback...');
179
+ }
180
+ const commitSha = (0, status_js_1.getCurrentCommitSha)(projectPath) ?? undefined;
181
+ if (result.decision === 'approve') {
182
+ (0, queries_js_1.approveTask)(db, taskId, 'codex', result.notes, commitSha);
183
+ if (!jsonMode) {
184
+ console.log('✓ Task APPROVED (via fallback)');
185
+ }
186
+ const pushResult = (0, push_js_1.pushToRemote)(projectPath);
187
+ if (!jsonMode && pushResult.success) {
188
+ console.log(`Pushed successfully (${pushResult.commitHash})`);
189
+ }
190
+ }
191
+ else if (result.decision === 'reject') {
192
+ (0, queries_js_1.rejectTask)(db, taskId, 'codex', result.notes, commitSha);
193
+ if (!jsonMode) {
194
+ console.log('✗ Task REJECTED (via fallback)');
195
+ }
196
+ }
197
+ else if (result.decision === 'dispute') {
198
+ (0, queries_js_1.updateTaskStatus)(db, taskId, 'disputed', 'codex', result.notes, commitSha);
199
+ if (!jsonMode) {
200
+ console.log('! Task DISPUTED (via fallback)');
201
+ }
202
+ }
203
+ }
204
+ //# sourceMappingURL=loop-phases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-phases.js","sourceRoot":"","sources":["../../src/commands/loop-phases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GlobalFlags } from '../cli/flags.js';
2
+ export declare function loopCommand(args: string[], flags: GlobalFlags): Promise<void>;
3
+ //# sourceMappingURL=loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA4EnD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqVnF"}
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loopCommand = loopCommand;
4
+ /**
5
+ * steroids loop - Main orchestrator loop
6
+ * Runs continuously until all tasks are done
7
+ */
8
+ const node_util_1 = require("node:util");
9
+ const node_fs_1 = require("node:fs");
10
+ const node_path_1 = require("node:path");
11
+ const connection_js_1 = require("../database/connection.js");
12
+ const queries_js_1 = require("../database/queries.js");
13
+ const task_selector_js_1 = require("../orchestrator/task-selector.js");
14
+ const wakeup_js_1 = require("../runners/wakeup.js");
15
+ const projects_js_1 = require("../runners/projects.js");
16
+ const loop_phases_js_1 = require("./loop-phases.js");
17
+ const help_js_1 = require("../cli/help.js");
18
+ const output_js_1 = require("../cli/output.js");
19
+ const errors_js_1 = require("../cli/errors.js");
20
+ const HELP = (0, help_js_1.generateHelp)({
21
+ command: 'loop',
22
+ description: 'Run the automated coder/reviewer orchestration loop',
23
+ details: `The orchestrator loop is the heart of Steroids automation.
24
+ It continuously selects tasks, assigns them to coder or reviewer, and tracks progress.
25
+ Runs until all tasks are completed or interrupted.`,
26
+ usage: ['steroids loop [options]'],
27
+ options: [
28
+ { long: 'project', description: 'Run loop for specific project directory', values: '<path>' },
29
+ { long: 'section', description: 'Focus on a specific section only', values: '<id|name>' },
30
+ { long: 'once', description: 'Run one iteration only (don\'t loop continuously)' },
31
+ ],
32
+ examples: [
33
+ { command: 'steroids loop', description: 'Run until all tasks done' },
34
+ { command: 'steroids loop --once', description: 'Process one task only' },
35
+ { command: 'steroids loop --dry-run', description: 'Preview without executing' },
36
+ { command: 'steroids loop --verbose', description: 'Show detailed progress' },
37
+ { command: 'steroids loop --project ~/code/myapp', description: 'Run for specific project' },
38
+ { command: 'steroids loop --section "Phase 2"', description: 'Focus on specific section' },
39
+ { command: 'steroids loop --section fd1f', description: 'Section by ID prefix' },
40
+ { command: 'STEROIDS_NO_HOOKS=1 steroids loop', description: 'Run without git hooks' },
41
+ ],
42
+ related: [
43
+ { command: 'steroids tasks', description: 'View task status during loop execution' },
44
+ { command: 'steroids runners', description: 'Manage background loop runners' },
45
+ { command: 'steroids dispute', description: 'View coder/reviewer disputes' },
46
+ ],
47
+ sections: [
48
+ {
49
+ title: 'HOW IT WORKS',
50
+ content: `1. Select next task (review > in_progress > pending)
51
+ 2. Invoke coder (Claude) for pending/rejected tasks
52
+ 3. Invoke reviewer (Codex) for tasks in review
53
+ 4. Push to git on task completion
54
+ 5. Repeat until all tasks complete or interrupted
55
+
56
+ Coder is responsible for running build/test commands.
57
+ Reviewer checks code quality and adherence to spec.`,
58
+ },
59
+ {
60
+ title: 'TASK PRIORITY',
61
+ content: `Tasks are selected in this order:
62
+ - Status priority: review > in_progress > pending
63
+ - Within same status: section position, then creation time
64
+ - Section dependencies respected (waiting sections blocked)`,
65
+ },
66
+ ],
67
+ });
68
+ async function loopCommand(args, flags) {
69
+ const out = (0, output_js_1.createOutput)({ command: 'loop', flags });
70
+ // Check global help flag first
71
+ if (flags.help) {
72
+ console.log(HELP);
73
+ return;
74
+ }
75
+ const { values } = (0, node_util_1.parseArgs)({
76
+ args,
77
+ options: {
78
+ once: { type: 'boolean', default: false },
79
+ project: { type: 'string' },
80
+ section: { type: 'string' },
81
+ },
82
+ allowPositionals: false,
83
+ });
84
+ // Handle --project flag: change directory if specified
85
+ if (values.project) {
86
+ const projectPath = (0, node_path_1.resolve)(values.project);
87
+ const steroidsDbPath = (0, node_path_1.join)(projectPath, '.steroids', 'steroids.db');
88
+ // Validate project path exists
89
+ if (!(0, node_fs_1.existsSync)(projectPath)) {
90
+ if (flags.json) {
91
+ out.error(errors_js_1.ErrorCode.CONFIG_ERROR, `Path does not exist: ${projectPath}`, { path: projectPath });
92
+ }
93
+ else {
94
+ console.error(`Error: Path does not exist: ${projectPath}`);
95
+ }
96
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.CONFIG_ERROR));
97
+ }
98
+ // Validate it's a directory, not a file
99
+ try {
100
+ const stats = (0, node_fs_1.statSync)(projectPath);
101
+ if (!stats.isDirectory()) {
102
+ if (flags.json) {
103
+ out.error(errors_js_1.ErrorCode.CONFIG_ERROR, `Path is not a directory: ${projectPath}`, { path: projectPath });
104
+ }
105
+ else {
106
+ console.error(`Error: Path is not a directory: ${projectPath}`);
107
+ }
108
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.CONFIG_ERROR));
109
+ }
110
+ }
111
+ catch (error) {
112
+ if (flags.json) {
113
+ out.error(errors_js_1.ErrorCode.CONFIG_ERROR, `Cannot access path: ${projectPath}`, { path: projectPath });
114
+ }
115
+ else {
116
+ console.error(`Error: Cannot access path: ${projectPath}`);
117
+ }
118
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.CONFIG_ERROR));
119
+ }
120
+ // Validate it's a steroids project
121
+ if (!(0, node_fs_1.existsSync)(steroidsDbPath)) {
122
+ if (flags.json) {
123
+ out.error(errors_js_1.ErrorCode.NOT_INITIALIZED, `Not a steroids project: ${projectPath}`, {
124
+ path: projectPath,
125
+ missing: steroidsDbPath,
126
+ hint: 'Run "steroids init" in that directory first.',
127
+ });
128
+ }
129
+ else {
130
+ console.error(`Error: Not a steroids project: ${projectPath}`);
131
+ console.error(` Missing: ${steroidsDbPath}`);
132
+ console.error(' Run "steroids init" in that directory first.');
133
+ }
134
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.NOT_INITIALIZED));
135
+ }
136
+ // Change to project directory
137
+ process.chdir(projectPath);
138
+ // Only show message if not in dry-run mode (for scripting consistency)
139
+ if (!flags.dryRun && !flags.json) {
140
+ console.log(`Switched to project: ${projectPath}`);
141
+ console.log('');
142
+ }
143
+ }
144
+ const projectPath = process.cwd();
145
+ // Check if project is disabled in the global registry
146
+ const registeredProject = (0, projects_js_1.getRegisteredProject)(projectPath);
147
+ if (registeredProject && !registeredProject.enabled) {
148
+ if (flags.json) {
149
+ out.error(errors_js_1.ErrorCode.CONFIG_ERROR, 'Project is disabled', {
150
+ project: projectPath,
151
+ hint: 'Run "steroids projects enable" to enable it.',
152
+ });
153
+ }
154
+ else {
155
+ console.error('Error: Project is disabled');
156
+ console.error(' Project: ' + projectPath);
157
+ console.error('');
158
+ console.error('Run "steroids projects enable" to enable it.');
159
+ }
160
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.CONFIG_ERROR));
161
+ }
162
+ // Check if a runner is already active for this project
163
+ if ((0, wakeup_js_1.hasActiveRunnerForProject)(projectPath)) {
164
+ if (flags.json) {
165
+ out.error(errors_js_1.ErrorCode.RESOURCE_LOCKED, 'A runner is already active for this project', {
166
+ project: projectPath,
167
+ hint: 'Only one runner per project is allowed. Use "steroids runners list" to see active runners.',
168
+ });
169
+ }
170
+ else {
171
+ console.error('Error: A runner is already active for this project');
172
+ console.error(' Project: ' + projectPath);
173
+ console.error('');
174
+ console.error('Only one runner per project is allowed.');
175
+ console.error('Use "steroids runners list" to see active runners.');
176
+ }
177
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.RESOURCE_LOCKED));
178
+ }
179
+ const { db, close } = (0, connection_js_1.openDatabase)();
180
+ // Declare these outside the try block so they're available throughout the function
181
+ let focusedSectionId;
182
+ let focusedSectionName;
183
+ try {
184
+ // Resolve section if --section flag is provided
185
+ if (values.section) {
186
+ const sectionInput = values.section;
187
+ try {
188
+ // Try to resolve by ID (exact or prefix match)
189
+ let section = (0, queries_js_1.getSection)(db, sectionInput);
190
+ // If not found by ID, try by name
191
+ if (!section) {
192
+ section = (0, queries_js_1.getSectionByName)(db, sectionInput);
193
+ }
194
+ if (!section) {
195
+ const sections = (0, queries_js_1.listSections)(db);
196
+ if (flags.json) {
197
+ out.error(errors_js_1.ErrorCode.SECTION_NOT_FOUND, `Section not found: ${sectionInput}`, {
198
+ sectionId: sectionInput,
199
+ availableSections: sections.map(s => ({ id: s.id.substring(0, 8), name: s.name })),
200
+ });
201
+ }
202
+ else {
203
+ console.error(`Error: Section not found: ${sectionInput}`);
204
+ console.error('');
205
+ console.error('Available sections:');
206
+ if (sections.length === 0) {
207
+ console.error(' (no sections defined)');
208
+ }
209
+ else {
210
+ for (const s of sections) {
211
+ console.error(` ${s.id.substring(0, 8)} ${s.name}`);
212
+ }
213
+ }
214
+ }
215
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.SECTION_NOT_FOUND));
216
+ }
217
+ // Check if section is skipped (Phase 0.6 feature)
218
+ if (section.skipped === 1) {
219
+ if (flags.json) {
220
+ out.error(errors_js_1.ErrorCode.CONFIG_ERROR, `Section "${section.name}" is currently skipped`, {
221
+ sectionId: section.id,
222
+ sectionName: section.name,
223
+ hint: `Run 'steroids sections unskip "${section.name}"' to re-enable it.`,
224
+ });
225
+ }
226
+ else {
227
+ console.error(`Error: Section "${section.name}" is currently skipped`);
228
+ console.error('');
229
+ console.error(`Run 'steroids sections unskip "${section.name}"' to re-enable it.`);
230
+ }
231
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.CONFIG_ERROR));
232
+ }
233
+ focusedSectionId = section.id;
234
+ focusedSectionName = section.name;
235
+ }
236
+ catch (error) {
237
+ // Handle ambiguous prefix error from getSection()
238
+ const errorMessage = error instanceof Error ? error.message : 'Failed to resolve section';
239
+ if (flags.json) {
240
+ out.error(errors_js_1.ErrorCode.CONFIG_ERROR, errorMessage, { sectionInput });
241
+ }
242
+ else {
243
+ console.error(`Error: ${errorMessage}`);
244
+ }
245
+ process.exit((0, errors_js_1.getExitCode)(errors_js_1.ErrorCode.CONFIG_ERROR));
246
+ }
247
+ }
248
+ // Show initial status (skip in JSON mode)
249
+ if (!flags.json) {
250
+ console.log('');
251
+ console.log('╔════════════════════════════════════════════════════════════╗');
252
+ console.log('║ STEROIDS ORCHESTRATOR ║');
253
+ if (focusedSectionName) {
254
+ const sectionLabel = `Focused: ${focusedSectionName}`;
255
+ const padding = Math.floor((60 - sectionLabel.length) / 2);
256
+ console.log(`║${' '.repeat(padding)}${sectionLabel}${' '.repeat(60 - padding - sectionLabel.length)}║`);
257
+ }
258
+ console.log('╚════════════════════════════════════════════════════════════╝');
259
+ console.log('');
260
+ }
261
+ const counts = (0, task_selector_js_1.getTaskCounts)(db, focusedSectionId);
262
+ if (!flags.json) {
263
+ const statusLabel = focusedSectionName ? `Task Status (${focusedSectionName} only):` : 'Task Status:';
264
+ console.log(statusLabel);
265
+ console.log(` Pending: ${counts.pending}`);
266
+ console.log(` In Progress: ${counts.in_progress}`);
267
+ console.log(` Review: ${counts.review}`);
268
+ console.log(` Completed: ${counts.completed}`);
269
+ console.log(` Disputed: ${counts.disputed}`);
270
+ console.log(` Failed: ${counts.failed}`);
271
+ console.log(` ─────────────────`);
272
+ console.log(` Total: ${counts.total}`);
273
+ console.log('');
274
+ }
275
+ if (flags.dryRun) {
276
+ const next = (0, task_selector_js_1.selectNextTask)(db, focusedSectionId);
277
+ if (flags.json) {
278
+ out.success({
279
+ dryRun: true,
280
+ nextTask: next ? {
281
+ id: next.task.id,
282
+ title: next.task.title,
283
+ action: next.action,
284
+ status: next.task.status,
285
+ } : null,
286
+ counts,
287
+ });
288
+ }
289
+ else {
290
+ if (next) {
291
+ console.log(`[DRY RUN] Would process: ${next.task.title}`);
292
+ console.log(` Action: ${next.action}`);
293
+ console.log(` Task ID: ${next.task.id}`);
294
+ }
295
+ else {
296
+ console.log('[DRY RUN] No tasks to process');
297
+ }
298
+ }
299
+ return;
300
+ }
301
+ let iteration = 0;
302
+ const processedTasks = [];
303
+ // Cache coordinator results so they can flow from coder phase to reviewer phase
304
+ // Key: task ID, Value: coordinator result
305
+ const coordinatorCache = new Map();
306
+ // Coordinator only runs at specific rejection thresholds to avoid redundant LLM calls
307
+ const COORDINATOR_THRESHOLDS = [2, 5, 9];
308
+ // Main loop
309
+ while (true) {
310
+ iteration++;
311
+ if (!flags.json) {
312
+ console.log(`\n─── Iteration ${iteration} ───\n`);
313
+ }
314
+ // Select next task
315
+ const selected = (0, task_selector_js_1.selectNextTask)(db, focusedSectionId);
316
+ if (!selected) {
317
+ if (!flags.json) {
318
+ console.log('');
319
+ console.log('╔════════════════════════════════════════════════════════════╗');
320
+ if (focusedSectionName) {
321
+ const completeLabel = `SECTION "${focusedSectionName}" COMPLETE`;
322
+ const padding = Math.floor((60 - completeLabel.length) / 2);
323
+ console.log(`║${' '.repeat(padding)}${completeLabel}${' '.repeat(60 - padding - completeLabel.length)}║`);
324
+ }
325
+ else {
326
+ console.log('║ ALL TASKS COMPLETE ║');
327
+ }
328
+ console.log('╚════════════════════════════════════════════════════════════╝');
329
+ console.log('');
330
+ }
331
+ break;
332
+ }
333
+ const { task, action } = selected;
334
+ if (!flags.json) {
335
+ console.log(`Task: ${task.title}`);
336
+ console.log(`Action: ${action}`);
337
+ console.log(`Status: ${task.status}`);
338
+ }
339
+ // Track processed task for JSON output
340
+ processedTasks.push({
341
+ taskId: task.id,
342
+ title: task.title,
343
+ action,
344
+ status: task.status,
345
+ });
346
+ if (action === 'start') {
347
+ // Starting a new task
348
+ (0, task_selector_js_1.markTaskInProgress)(db, task.id);
349
+ await (0, loop_phases_js_1.runCoderPhase)(db, task, projectPath, 'start', flags.json, coordinatorCache, COORDINATOR_THRESHOLDS);
350
+ }
351
+ else if (action === 'resume') {
352
+ // Resuming in-progress task
353
+ await (0, loop_phases_js_1.runCoderPhase)(db, task, projectPath, 'resume', flags.json, coordinatorCache, COORDINATOR_THRESHOLDS);
354
+ }
355
+ else if (action === 'review') {
356
+ // Task ready for review - pass coordinator guidance if available
357
+ const cachedCoord = coordinatorCache.get(task.id);
358
+ await (0, loop_phases_js_1.runReviewerPhase)(db, task, projectPath, flags.json, cachedCoord);
359
+ }
360
+ // Check if we should continue
361
+ if (values.once) {
362
+ if (!flags.json) {
363
+ console.log('\n[--once] Stopping after one iteration');
364
+ }
365
+ break;
366
+ }
367
+ // Brief pause between iterations to avoid overwhelming the system
368
+ await sleep(1000);
369
+ }
370
+ // Final status
371
+ const finalCounts = (0, task_selector_js_1.getTaskCounts)(db, focusedSectionId);
372
+ if (flags.json) {
373
+ out.success({
374
+ iterations: iteration,
375
+ processedTasks,
376
+ initialCounts: counts,
377
+ finalCounts,
378
+ focusedSection: focusedSectionName || null,
379
+ });
380
+ }
381
+ else {
382
+ const finalLabel = focusedSectionName ? `\nFinal Status (${focusedSectionName}):` : '\nFinal Status:';
383
+ console.log(finalLabel);
384
+ console.log(` Completed: ${finalCounts.completed}`);
385
+ console.log(` Failed: ${finalCounts.failed}`);
386
+ console.log(` Disputed: ${finalCounts.disputed}`);
387
+ }
388
+ }
389
+ finally {
390
+ close();
391
+ }
392
+ }
393
+ function sleep(ms) {
394
+ return new Promise((resolve) => setTimeout(resolve, ms));
395
+ }
396
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":";;AA4EA,kCAqVC;AAhaD;;;GAGG;AAEH,yCAAsC;AACtC,qCAA+C;AAC/C,yCAA0C;AAC1C,6DAAyD;AACzD,uDAIgC;AAChC,uEAI0C;AAC1C,oDAAiE;AACjE,wDAA8D;AAC9D,qDAA2F;AAC3F,4CAA8C;AAC9C,gDAAgD;AAChD,gDAA0D;AAE1D,MAAM,IAAI,GAAG,IAAA,sBAAY,EAAC;IACxB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,qDAAqD;IAClE,OAAO,EAAE;;mDAEwC;IACjD,KAAK,EAAE,CAAC,yBAAyB,CAAC;IAClC,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yCAAyC,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC7F,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kCAAkC,EAAE,MAAM,EAAE,WAAW,EAAE;QACzF,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,mDAAmD,EAAE;KACnF;IACD,QAAQ,EAAE;QACR,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B,EAAE;QACrE,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACzE,EAAE,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,2BAA2B,EAAE;QAChF,EAAE,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,wBAAwB,EAAE;QAC7E,EAAE,OAAO,EAAE,sCAAsC,EAAE,WAAW,EAAE,0BAA0B,EAAE;QAC5F,EAAE,OAAO,EAAE,mCAAmC,EAAE,WAAW,EAAE,2BAA2B,EAAE;QAC1F,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,sBAAsB,EAAE;QAChF,EAAE,OAAO,EAAE,mCAAmC,EAAE,WAAW,EAAE,uBAAuB,EAAE;KACvF;IACD,OAAO,EAAE;QACP,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,wCAAwC,EAAE;QACpF,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,gCAAgC,EAAE;QAC9E,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,8BAA8B,EAAE;KAC7E;IACD,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE;;;;;;;oDAOqC;SAC/C;QACD;YACE,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE;;;4DAG6C;SACvD;KACF;CACF,CAAC,CAAC;AAEI,KAAK,UAAU,WAAW,CAAC,IAAc,EAAE,KAAkB;IAClE,MAAM,GAAG,GAAG,IAAA,wBAAY,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAErD,+BAA+B;IAC/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,qBAAS,EAAC;QAC3B,IAAI;QACJ,OAAO,EAAE;YACP,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YACzC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC5B;QACD,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,uDAAuD;IACvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,IAAA,mBAAO,EAAC,MAAM,CAAC,OAAiB,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,IAAA,gBAAI,EAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAErE,+BAA+B;QAC/B,IAAI,CAAC,IAAA,oBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,YAAY,EAAE,wBAAwB,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YAClG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,YAAY,EAAE,4BAA4B,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;gBACtG,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,YAAY,EAAE,uBAAuB,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YACjG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,IAAA,oBAAU,EAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,eAAe,EAAE,2BAA2B,WAAW,EAAE,EAAE;oBAC7E,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,8CAA8C;iBACrD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAC;gBAC/D,OAAO,CAAC,KAAK,CAAC,cAAc,cAAc,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,8BAA8B;QAC9B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE3B,uEAAuE;QACvE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,sDAAsD;IACtD,MAAM,iBAAiB,GAAG,IAAA,kCAAoB,EAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,YAAY,EAAE,qBAAqB,EAAE;gBACvD,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,8CAA8C;aACrD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,uDAAuD;IACvD,IAAI,IAAA,qCAAyB,EAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,eAAe,EAAE,6CAA6C,EAAE;gBAClF,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,4FAA4F;aACnG,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAA,4BAAY,GAAE,CAAC;IAErC,mFAAmF;IACnF,IAAI,gBAAoC,CAAC;IACzC,IAAI,kBAAsC,CAAC;IAE3C,IAAI,CAAC;QACH,gDAAgD;QAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAiB,CAAC;YAE9C,IAAI,CAAC;gBACH,+CAA+C;gBAC/C,IAAI,OAAO,GAAG,IAAA,uBAAU,EAAC,EAAE,EAAE,YAAY,CAAC,CAAC;gBAE3C,kCAAkC;gBAClC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAA,6BAAgB,EAAC,EAAE,EAAE,YAAY,CAAC,CAAC;gBAC/C,CAAC;gBAED,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,EAAE,CAAC,CAAC;oBAClC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,iBAAiB,EAAE,sBAAsB,YAAY,EAAE,EAAE;4BAC3E,SAAS,EAAE,YAAY;4BACvB,iBAAiB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;yBACnF,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAC;wBAC3D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAClB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;wBACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC1B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;wBAC3C,CAAC;6BAAM,CAAC;4BACN,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gCACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;4BACxD,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACzD,CAAC;gBAED,kDAAkD;gBAClD,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;oBAC1B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,YAAY,EAAE,YAAY,OAAO,CAAC,IAAI,wBAAwB,EAAE;4BAClF,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,WAAW,EAAE,OAAO,CAAC,IAAI;4BACzB,IAAI,EAAE,kCAAkC,OAAO,CAAC,IAAI,qBAAqB;yBAC1E,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,wBAAwB,CAAC,CAAC;wBACvE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAClB,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,CAAC,IAAI,qBAAqB,CAAC,CAAC;oBACrF,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,YAAY,CAAC,CAAC,CAAC;gBACpD,CAAC;gBAED,gBAAgB,GAAG,OAAO,CAAC,EAAE,CAAC;gBAC9B,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,kDAAkD;gBAClD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;gBAC1F,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,GAAG,CAAC,KAAK,CAAC,qBAAS,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;gBAC1C,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAW,EAAC,qBAAS,CAAC,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;YACjF,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,YAAY,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1G,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,gCAAa,EAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,kBAAkB,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;YACtG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAA,iCAAc,EAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,GAAG,CAAC,OAAO,CAAC;oBACV,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;wBACf,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;wBAChB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;wBACtB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;qBACzB,CAAC,CAAC,CAAC,IAAI;oBACR,MAAM;iBACP,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC3D,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACxC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,cAAc,GAAwE,EAAE,CAAC;QAE/F,gFAAgF;QAChF,0CAA0C;QAC1C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA6B,CAAC;QAE9D,sFAAsF;QACtF,MAAM,sBAAsB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzC,YAAY;QACZ,OAAO,IAAI,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,QAAQ,CAAC,CAAC;YACpD,CAAC;YAED,mBAAmB;YACnB,MAAM,QAAQ,GAAG,IAAA,iCAAc,EAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAEtD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;oBAC9E,IAAI,kBAAkB,EAAE,CAAC;wBACvB,MAAM,aAAa,GAAG,YAAY,kBAAkB,YAAY,CAAC;wBACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5G,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;oBACnF,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;oBAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM;YACR,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAElC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,uCAAuC;YACvC,cAAc,CAAC,IAAI,CAAC;gBAClB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,sBAAsB;gBACtB,IAAA,qCAAkB,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,IAAA,8BAAa,EAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,sBAAsB,CAAC,CAAC;YAC5G,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,4BAA4B;gBAC5B,MAAM,IAAA,8BAAa,EAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,sBAAsB,CAAC,CAAC;YAC7G,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,iEAAiE;gBACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClD,MAAM,IAAA,iCAAgB,EAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACzE,CAAC;YAED,8BAA8B;YAC9B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM;YACR,CAAC;YAED,kEAAkE;YAClE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,eAAe;QACf,MAAM,WAAW,GAAG,IAAA,gCAAa,EAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAExD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,CAAC;gBACV,UAAU,EAAE,SAAS;gBACrB,cAAc;gBACd,aAAa,EAAE,MAAM;gBACrB,WAAW;gBACX,cAAc,EAAE,kBAAkB,IAAI,IAAI;aAC3C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,kBAAkB,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACtG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,CAAC;IACV,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * steroids projects - Manage global project registry
3
+ */
4
+ import type { GlobalFlags } from '../cli/flags.js';
5
+ export declare function projectsCommand(args: string[], flags: GlobalFlags): Promise<void>;
6
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkDnD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDvF"}