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,200 @@
1
+ "use strict";
2
+ /**
3
+ * steroids init - Initialize steroids in current directory
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initCommand = initCommand;
7
+ const node_util_1 = require("node:util");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const node_child_process_1 = require("node:child_process");
11
+ const connection_js_1 = require("../database/connection.js");
12
+ const output_js_1 = require("../cli/output.js");
13
+ const colors_js_1 = require("../cli/colors.js");
14
+ const projects_js_1 = require("../runners/projects.js");
15
+ const help_js_1 = require("../cli/help.js");
16
+ const ai_setup_js_1 = require("../config/ai-setup.js");
17
+ const HELP = (0, help_js_1.generateHelp)({
18
+ command: 'init',
19
+ description: 'Initialize Steroids in current directory',
20
+ details: `Sets up Steroids task management system in the current directory.
21
+ Creates a .steroids directory with SQLite database for task tracking.
22
+ Projects are only registered globally if inside a git repository.
23
+ This prevents test/temporary directories from polluting the global registry.`,
24
+ usage: ['steroids init [options]'],
25
+ options: [
26
+ { short: 'y', long: 'yes', description: 'Accept all defaults without prompts (skips AI setup wizard)' },
27
+ { long: 'no-register', description: 'Skip global project registration' },
28
+ { long: 'skip-ai-setup', description: 'Skip AI provider configuration wizard' },
29
+ ],
30
+ examples: [
31
+ { command: 'steroids init', description: 'Initialize in current directory' },
32
+ { command: 'steroids init --yes', description: 'Initialize with defaults' },
33
+ { command: 'steroids init --no-register', description: 'Initialize without global registration' },
34
+ { command: 'steroids init --dry-run', description: 'Preview initialization' },
35
+ ],
36
+ related: [
37
+ { command: 'steroids sections add', description: 'Add task sections after init' },
38
+ { command: 'steroids tasks add', description: 'Add tasks after init' },
39
+ { command: 'steroids loop', description: 'Start automation after setup' },
40
+ ],
41
+ sections: [
42
+ {
43
+ title: 'CREATES',
44
+ content: `.steroids/steroids.db SQLite database with task schema
45
+ Registers project in global registry at ~/.steroids/steroids.db (if in git repo)`,
46
+ },
47
+ ],
48
+ });
49
+ /**
50
+ * Try to extract project name from package.json if it exists
51
+ * @param cwd - Current working directory
52
+ * @returns Project name or null if not found
53
+ */
54
+ function getProjectName(cwd) {
55
+ try {
56
+ const packageJsonPath = (0, node_path_1.join)(cwd, 'package.json');
57
+ if ((0, node_fs_1.existsSync)(packageJsonPath)) {
58
+ const content = (0, node_fs_1.readFileSync)(packageJsonPath, 'utf-8');
59
+ const pkg = JSON.parse(content);
60
+ return pkg.name || null;
61
+ }
62
+ }
63
+ catch {
64
+ // Ignore errors - package.json might not exist or be invalid
65
+ }
66
+ return null;
67
+ }
68
+ /**
69
+ * Check if the directory is inside a git repository
70
+ * @param cwd - Current working directory
71
+ * @returns true if inside a git repo
72
+ */
73
+ function isInsideGitRepo(cwd) {
74
+ try {
75
+ (0, node_child_process_1.execSync)('git rev-parse --is-inside-work-tree', {
76
+ cwd,
77
+ stdio: 'pipe',
78
+ });
79
+ return true;
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ }
85
+ async function initCommand(args, flags) {
86
+ const out = (0, output_js_1.createOutput)({ command: 'init', flags });
87
+ const { values } = (0, node_util_1.parseArgs)({
88
+ args,
89
+ options: {
90
+ yes: { type: 'boolean', short: 'y', default: false },
91
+ help: { type: 'boolean', short: 'h', default: false },
92
+ 'no-register': { type: 'boolean', default: false },
93
+ 'skip-ai-setup': { type: 'boolean', default: false },
94
+ },
95
+ allowPositionals: false,
96
+ });
97
+ if (values.help || flags.help) {
98
+ out.log(HELP);
99
+ return;
100
+ }
101
+ const cwd = process.cwd();
102
+ const dbPath = (0, connection_js_1.getDbPath)(cwd);
103
+ if ((0, connection_js_1.isInitialized)(cwd)) {
104
+ if (flags.json) {
105
+ out.success({
106
+ message: 'Already initialized',
107
+ database: dbPath,
108
+ alreadyInitialized: true,
109
+ });
110
+ }
111
+ else {
112
+ out.log(colors_js_1.markers.info('Steroids already initialized in this directory.'));
113
+ out.log(`Database: ${colors_js_1.colors.cyan(dbPath)}`);
114
+ }
115
+ return;
116
+ }
117
+ out.verbose('Initializing Steroids...');
118
+ if (flags.dryRun) {
119
+ if (flags.json) {
120
+ out.success({
121
+ message: 'Dry run: Would initialize Steroids',
122
+ database: dbPath,
123
+ dryRun: true,
124
+ });
125
+ }
126
+ else {
127
+ out.log(colors_js_1.colors.yellow('Dry run: Would initialize Steroids'));
128
+ out.log(`Database would be created at: ${dbPath}`);
129
+ }
130
+ return;
131
+ }
132
+ const { close } = (0, connection_js_1.initDatabase)(cwd);
133
+ close();
134
+ // Register project in global registry (only if in a git repo and not --no-register)
135
+ const noRegister = values['no-register'];
136
+ const inGitRepo = isInsideGitRepo(cwd);
137
+ if (noRegister) {
138
+ out.verbose('Skipping global registration (--no-register flag)');
139
+ }
140
+ else if (!inGitRepo) {
141
+ out.verbose('Skipping global registration (not inside a git repository)');
142
+ }
143
+ else {
144
+ const projectName = getProjectName(cwd);
145
+ try {
146
+ (0, projects_js_1.registerProject)(cwd, projectName || undefined);
147
+ out.verbose(`Registered project globally${projectName ? ` as "${projectName}"` : ''}`);
148
+ }
149
+ catch (error) {
150
+ // Don't fail init if registration fails - just log it
151
+ out.verbose(`Warning: Failed to register project globally: ${error}`);
152
+ }
153
+ }
154
+ // Run AI setup wizard (unless --yes or --skip-ai-setup is used, or JSON output)
155
+ const skipAISetup = values.yes || values['skip-ai-setup'] || flags.json;
156
+ if (!skipAISetup) {
157
+ out.log('');
158
+ out.log(colors_js_1.markers.info('AI Provider Configuration'));
159
+ out.log('Configure AI providers for orchestrator, coder, and reviewer roles.');
160
+ out.log(`${colors_js_1.colors.dim('(You can skip this and configure later with "steroids config ai")')}`);
161
+ out.log('');
162
+ try {
163
+ // Run wizard for coder role first (most important)
164
+ await (0, ai_setup_js_1.runAISetup)({ role: 'coder', global: true });
165
+ // Ask if user wants to configure other roles
166
+ out.log('');
167
+ out.log(`${colors_js_1.colors.dim('Tip: Run "steroids config ai" to configure other roles (orchestrator, reviewer)')}`);
168
+ }
169
+ catch (error) {
170
+ // AI setup failed or was cancelled - don't fail init
171
+ out.verbose(`AI setup skipped or cancelled: ${error}`);
172
+ }
173
+ }
174
+ if (flags.json) {
175
+ out.success({
176
+ message: 'Initialized successfully',
177
+ database: dbPath,
178
+ nextSteps: [
179
+ 'steroids config ai',
180
+ 'steroids sections add "Phase 1"',
181
+ 'steroids tasks add "My first task" --section "Phase 1"',
182
+ 'steroids loop',
183
+ ],
184
+ });
185
+ }
186
+ else {
187
+ out.log('');
188
+ out.log(colors_js_1.markers.success('Steroids initialized successfully!'));
189
+ out.log(`Database: ${colors_js_1.colors.cyan(dbPath)}`);
190
+ out.log('');
191
+ out.log(colors_js_1.colors.bold('Next steps:'));
192
+ if (skipAISetup) {
193
+ out.log(` ${colors_js_1.colors.dim('$')} steroids config ai ${colors_js_1.colors.dim('# Configure AI providers')}`);
194
+ }
195
+ out.log(` ${colors_js_1.colors.dim('$')} steroids sections add "Phase 1"`);
196
+ out.log(` ${colors_js_1.colors.dim('$')} steroids tasks add "My first task" --section "Phase 1"`);
197
+ out.log(` ${colors_js_1.colors.dim('$')} steroids loop`);
198
+ }
199
+ }
200
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * steroids llm - Compact instructions for LLM agents
3
+ * Call this when context is lost to quickly understand the system
4
+ */
5
+ import type { GlobalFlags } from '../cli/flags.js';
6
+ export declare function llmCommand(args: string[], flags: GlobalFlags): Promise<void>;
7
+ //# sourceMappingURL=llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/commands/llm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA8JnD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4HlF"}
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ /**
3
+ * steroids llm - Compact instructions for LLM agents
4
+ * Call this when context is lost to quickly understand the system
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.llmCommand = llmCommand;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const projects_js_1 = require("../runners/projects.js");
11
+ const daemon_js_1 = require("../runners/daemon.js");
12
+ const connection_js_1 = require("../database/connection.js");
13
+ const queries_js_1 = require("../database/queries.js");
14
+ const help_js_1 = require("../cli/help.js");
15
+ const LLM_INSTRUCTIONS = `# STEROIDS LLM QUICK REFERENCE
16
+
17
+ ## WHAT IS STEROIDS
18
+ Steroids=automated task orchestration system.
19
+ It manages tasks and invokes LLM agents (coders/reviewers) to execute them.
20
+ The system spawns separate LLM processes for coding and reviewing.
21
+
22
+ ## TASK FLOW
23
+ pending → in_progress (coder works) → review (reviewer checks) → completed OR rejected→pending
24
+ Runner daemon picks tasks and invokes appropriate LLM agents automatically.
25
+
26
+ ## ARCHITECTURE
27
+ - Tasks stored in .steroids/steroids.db (per project)
28
+ - Runner daemon executes the loop (one per project)
29
+ - Coder LLM: implements task, commits, submits for review
30
+ - Reviewer LLM: verifies implementation, approves or rejects
31
+ - You (reading this): likely helping user manage/debug the system
32
+
33
+ ## MULTI-PROJECT
34
+ - Multiple projects can have runners simultaneously
35
+ - Each runner bound to ONE project only
36
+ - Global registry at ~/.steroids/steroids.db tracks all projects
37
+ - NEVER modify files outside current project
38
+
39
+ ## KEY COMMANDS
40
+
41
+ ### View Tasks
42
+ steroids tasks stats # task counts by status
43
+ steroids tasks # pending tasks (current project)
44
+ steroids tasks --status active # in_progress+review (current project)
45
+ steroids tasks --status active --global # active across ALL projects
46
+ steroids tasks --status all # all tasks
47
+ steroids tasks audit <id> # view task spec, history, rejection notes
48
+
49
+ ### Add Tasks
50
+ steroids tasks add "Title" --section <id> --source <spec-file>
51
+ steroids tasks add "Title" --section <id> --source spec.md --file src/foo.ts --line 42
52
+ steroids tasks add "Advisory note" --feedback
53
+
54
+ Options:
55
+ --section <id> Section to add the task to (required unless --feedback)
56
+ --source <file> Specification markdown file (required unless --feedback)
57
+ --file <path> Anchor task to a specific file in the codebase
58
+ File must be committed in git (not dirty/untracked)
59
+ Auto-captures: commit SHA of last change + content hash
60
+ Coder/reviewer prompts will reference this exact location
61
+ --line <number> Line number in the anchored file (requires --file)
62
+ --feedback Add to skipped "Needs User Input" section for human review
63
+ Skips --section and --source requirements
64
+
65
+ BEST PRACTICE: When generating tasks from documentation or specs, commit the
66
+ documentation first, then fill in ALL values including optional ones:
67
+ --source pointing to the committed spec file
68
+ --file pointing to the relevant source file in the codebase
69
+ --line pointing to the exact line where work applies
70
+ This gives the coder/reviewer maximum context and traceability.
71
+
72
+ ### Manage Tasks
73
+ steroids tasks update <id> --status <s> --actor model --model <m>
74
+ statuses: pending, in_progress, review, completed, skipped, partial
75
+ steroids tasks approve <id> --model <m> [--notes "msg"] # mark completed
76
+ steroids tasks reject <id> --model <m> --notes "feedback" # back to pending
77
+ steroids tasks skip <id> --notes "reason" # external setup, skip it
78
+ steroids tasks skip <id> --partial --notes "reason" # coded some, rest external
79
+
80
+ ### Sections
81
+ steroids sections list # list sections
82
+ steroids sections skip <id> # exclude from runner
83
+ steroids sections unskip <id> # include in runner
84
+
85
+ ### Runners (daemon that executes tasks)
86
+ steroids runners list # all runners (all projects)
87
+ steroids runners start --detach # start background daemon
88
+ steroids runners start --section "X" # focus on specific section
89
+ steroids runners stop --all # stop all
90
+ steroids runners status # current state
91
+ steroids runners logs <pid> # view daemon output
92
+
93
+ ### Projects
94
+ steroids projects list # all registered projects
95
+
96
+ ### Web Dashboard
97
+ steroids web # clone (first run) and launch dashboard
98
+ steroids web update # pull latest + reinstall deps
99
+ steroids web stop # stop running dashboard
100
+ steroids web status # check if dashboard is running
101
+
102
+ ## COMMON OPERATIONS
103
+
104
+ ### Start automation
105
+ steroids runners start --detach # daemon picks tasks and invokes coders/reviewers
106
+
107
+ ### Check what's happening
108
+ steroids tasks --status active --global # see all active work
109
+ steroids runners list # see all running daemons
110
+
111
+ ### Unblock stuck task in review
112
+ steroids tasks approve <id> --model human # approve manually
113
+ steroids tasks reject <id> --model human --notes "reason" # reject manually
114
+
115
+ ### Restart failed task
116
+ steroids tasks update <id> --status pending --reset-rejections # reset to pending with fresh count
117
+
118
+ ### Skip external setup task
119
+ steroids tasks skip <id> --notes "spec says SKIP, needs Cloud SQL setup"
120
+ # Use when: spec says SKIP/MANUAL, requires cloud console, account creation, etc.
121
+ # --partial: use if you coded some parts but rest needs human action
122
+
123
+ ## TASK STATES
124
+ - pending: waiting to be picked up
125
+ - in_progress: coder is working on it
126
+ - review: coder submitted, waiting for reviewer
127
+ - completed: approved by reviewer
128
+ - skipped: fully external (Cloud SQL, manual setup) - human must do
129
+ - partial: some coded, rest external - human must complete
130
+ - failed: exceeded 15 rejections, needs human intervention
131
+ - disputed: coder/reviewer disagreement, needs human resolution
132
+
133
+ ## IMPORTANT NOTES
134
+ - Task spec is in source file (see tasks audit output)
135
+ - Max 15 rejections before task fails
136
+ - Runner auto-restarts via cron (steroids runners cron install)
137
+ - Each project isolated: own database, own runner
138
+ `;
139
+ const HELP = (0, help_js_1.generateHelp)({
140
+ command: 'llm',
141
+ description: 'Compact instructions for LLM agents',
142
+ details: 'Quick reference guide for AI agents working with Steroids. Shows key commands, task flow, and current context.',
143
+ usage: [
144
+ 'steroids llm',
145
+ 'steroids llm --context',
146
+ ],
147
+ options: [
148
+ { long: 'context', description: 'Include current project context (projects, runners, tasks)' },
149
+ ],
150
+ examples: [
151
+ { command: 'steroids llm', description: 'Show LLM quick reference' },
152
+ { command: 'steroids llm --context', description: 'Show reference with current context' },
153
+ ],
154
+ related: [
155
+ { command: 'steroids about', description: 'Explain what Steroids is' },
156
+ { command: 'steroids tasks', description: 'Manage tasks' },
157
+ ],
158
+ showGlobalOptions: false,
159
+ showEnvVars: false,
160
+ showExitCodes: false,
161
+ });
162
+ async function llmCommand(args, flags) {
163
+ // Check for help
164
+ if (flags.help || args.includes('-h') || args.includes('--help')) {
165
+ console.log(HELP);
166
+ return;
167
+ }
168
+ const includeContext = args.includes('--context');
169
+ // Always print instructions
170
+ console.log(LLM_INSTRUCTIONS);
171
+ // Optionally include current context
172
+ if (includeContext) {
173
+ console.log('## CURRENT CONTEXT\n');
174
+ // Current project
175
+ console.log(`Project: ${process.cwd()}`);
176
+ // Registered projects
177
+ try {
178
+ const projects = (0, projects_js_1.getRegisteredProjects)(false);
179
+ console.log(`Registered projects: ${projects.length}`);
180
+ if (projects.length > 1) {
181
+ console.log('WARNING: Multi-project environment. Only work on YOUR project.');
182
+ }
183
+ }
184
+ catch {
185
+ console.log('Registered projects: unknown');
186
+ }
187
+ // Active runners
188
+ try {
189
+ const runners = (0, daemon_js_1.listRunners)();
190
+ const activeRunners = runners.filter(r => r.status === 'running');
191
+ console.log(`Active runners: ${activeRunners.length}`);
192
+ for (const r of activeRunners) {
193
+ const proj = r.project_path ? r.project_path.split('/').pop() : 'unknown';
194
+ console.log(` - ${r.id.slice(0, 8)} on ${proj} (PID ${r.pid})`);
195
+ }
196
+ }
197
+ catch {
198
+ console.log('Active runners: unknown');
199
+ }
200
+ // Global active tasks
201
+ console.log('');
202
+ console.log('Active tasks (all projects):');
203
+ try {
204
+ const projects = (0, projects_js_1.getRegisteredProjects)(false);
205
+ let totalActive = 0;
206
+ for (const project of projects) {
207
+ const dbPath = `${project.path}/.steroids/steroids.db`;
208
+ if (!(0, node_fs_1.existsSync)(dbPath))
209
+ continue;
210
+ try {
211
+ const { db, close } = (0, connection_js_1.openDatabase)(project.path);
212
+ try {
213
+ const inProgress = (0, queries_js_1.listTasks)(db, { status: 'in_progress' });
214
+ const review = (0, queries_js_1.listTasks)(db, { status: 'review' });
215
+ const active = [...inProgress, ...review];
216
+ const projName = project.name || (0, node_path_1.basename)(project.path);
217
+ for (const task of active) {
218
+ totalActive++;
219
+ const status = task.status === 'in_progress' ? 'CODING' : 'REVIEW';
220
+ console.log(` [${status}] ${projName}: ${task.title.slice(0, 50)} (${task.id.slice(0, 8)})`);
221
+ }
222
+ }
223
+ finally {
224
+ close();
225
+ }
226
+ }
227
+ catch {
228
+ // Skip inaccessible projects
229
+ }
230
+ }
231
+ if (totalActive === 0) {
232
+ console.log(' (none)');
233
+ }
234
+ }
235
+ catch {
236
+ console.log(' (unknown)');
237
+ }
238
+ // Skipped tasks requiring manual action
239
+ console.log('');
240
+ console.log('Skipped tasks (need manual action):');
241
+ try {
242
+ const projects = (0, projects_js_1.getRegisteredProjects)(false);
243
+ let totalSkipped = 0;
244
+ for (const project of projects) {
245
+ const dbPath = `${project.path}/.steroids/steroids.db`;
246
+ if (!(0, node_fs_1.existsSync)(dbPath))
247
+ continue;
248
+ try {
249
+ const { db, close } = (0, connection_js_1.openDatabase)(project.path);
250
+ try {
251
+ const skipped = (0, queries_js_1.listTasks)(db, { status: 'skipped' });
252
+ const partial = (0, queries_js_1.listTasks)(db, { status: 'partial' });
253
+ const allSkipped = [...skipped, ...partial];
254
+ const projName = project.name || (0, node_path_1.basename)(project.path);
255
+ for (const task of allSkipped) {
256
+ totalSkipped++;
257
+ const marker = task.status === 'skipped' ? '[S]' : '[s]';
258
+ console.log(` ${marker} ${projName}: ${task.title.slice(0, 50)} (${task.id.slice(0, 8)})`);
259
+ }
260
+ }
261
+ finally {
262
+ close();
263
+ }
264
+ }
265
+ catch {
266
+ // Skip inaccessible projects
267
+ }
268
+ }
269
+ if (totalSkipped === 0) {
270
+ console.log(' (none - all tasks are automated)');
271
+ }
272
+ else {
273
+ console.log('');
274
+ console.log(' [S] = Fully external (human must do entire task)');
275
+ console.log(' [s] = Partial (some coded, rest needs human)');
276
+ console.log(' Use: steroids tasks audit <id> to see what action is needed');
277
+ }
278
+ }
279
+ catch {
280
+ console.log(' (unknown)');
281
+ }
282
+ console.log('');
283
+ }
284
+ }
285
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/commands/llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GlobalFlags } from '../cli/flags.js';
2
+ export declare function locksCommand(args: string[], flags: GlobalFlags): Promise<void>;
3
+ //# sourceMappingURL=locks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../src/commands/locks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAoEnD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCpF"}