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,75 @@
1
+ /**
2
+ * Global flags parser for Steroids CLI
3
+ *
4
+ * Parses global flags that apply to all commands:
5
+ * - Output format: --json, --quiet, --verbose
6
+ * - Display: --no-color, --help
7
+ * - Configuration: --config, --dry-run, --timeout, --no-hooks
8
+ * - Version: --version
9
+ */
10
+ /**
11
+ * Parsed global options available to all commands
12
+ */
13
+ export interface GlobalFlags {
14
+ /** Output as JSON (-j, --json) */
15
+ json: boolean;
16
+ /** Minimal output (-q, --quiet) */
17
+ quiet: boolean;
18
+ /** Detailed output (-v, --verbose) */
19
+ verbose: boolean;
20
+ /** Show help (-h, --help) */
21
+ help: boolean;
22
+ /** Show version (--version) */
23
+ version: boolean;
24
+ /** Disable colors (--no-color) */
25
+ noColor: boolean;
26
+ /** Custom config path (--config) */
27
+ configPath?: string;
28
+ /** Preview without executing (--dry-run) */
29
+ dryRun: boolean;
30
+ /** Command timeout in milliseconds (--timeout) */
31
+ timeout?: number;
32
+ /** Skip hook execution (--no-hooks) */
33
+ noHooks: boolean;
34
+ /** Don't wait for locks to be released (--no-wait) */
35
+ noWait: boolean;
36
+ }
37
+ /**
38
+ * Result of parsing global flags
39
+ */
40
+ export interface ParsedArgs {
41
+ /** Parsed global flags */
42
+ flags: GlobalFlags;
43
+ /** Remaining args after global flags are extracted */
44
+ remaining: string[];
45
+ }
46
+ /**
47
+ * Default values for global flags
48
+ */
49
+ export declare function getDefaultFlags(): GlobalFlags;
50
+ /**
51
+ * Parse duration string to milliseconds
52
+ * Supports: 30s, 5m, 1h, or plain number (ms)
53
+ */
54
+ export declare function parseDuration(value: string): number;
55
+ /**
56
+ * Load flags from environment variables
57
+ * Environment variables provide defaults that can be overridden by CLI flags
58
+ */
59
+ export declare function loadEnvFlags(): Partial<GlobalFlags>;
60
+ /**
61
+ * Parse global flags from command line arguments
62
+ *
63
+ * Global flags can appear anywhere in the args and are extracted,
64
+ * leaving the remaining args for command-specific parsing.
65
+ *
66
+ * @param args - Command line arguments to parse
67
+ * @returns Parsed flags and remaining arguments
68
+ */
69
+ export declare function parseGlobalFlags(args: string[]): ParsedArgs;
70
+ /**
71
+ * Apply global flags to affect runtime behavior
72
+ * Call this after parsing to set up the environment
73
+ */
74
+ export declare function applyGlobalFlags(flags: GlobalFlags): void;
75
+ //# sourceMappingURL=flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/cli/flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,sDAAsD;IACtD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAc7C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBnD;AAUD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAiCnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA2H3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAKzD"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ /**
3
+ * Global flags parser for Steroids CLI
4
+ *
5
+ * Parses global flags that apply to all commands:
6
+ * - Output format: --json, --quiet, --verbose
7
+ * - Display: --no-color, --help
8
+ * - Configuration: --config, --dry-run, --timeout, --no-hooks
9
+ * - Version: --version
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getDefaultFlags = getDefaultFlags;
13
+ exports.parseDuration = parseDuration;
14
+ exports.loadEnvFlags = loadEnvFlags;
15
+ exports.parseGlobalFlags = parseGlobalFlags;
16
+ exports.applyGlobalFlags = applyGlobalFlags;
17
+ /**
18
+ * Default values for global flags
19
+ */
20
+ function getDefaultFlags() {
21
+ return {
22
+ json: false,
23
+ quiet: false,
24
+ verbose: false,
25
+ help: false,
26
+ version: false,
27
+ noColor: false,
28
+ configPath: undefined,
29
+ dryRun: false,
30
+ timeout: undefined,
31
+ noHooks: false,
32
+ noWait: false,
33
+ };
34
+ }
35
+ /**
36
+ * Parse duration string to milliseconds
37
+ * Supports: 30s, 5m, 1h, or plain number (ms)
38
+ */
39
+ function parseDuration(value) {
40
+ const match = value.match(/^(\d+)(ms|s|m|h)?$/);
41
+ if (!match) {
42
+ throw new Error(`Invalid duration format: ${value}. Use format: 30s, 5m, 1h, or milliseconds`);
43
+ }
44
+ const num = parseInt(match[1], 10);
45
+ const unit = match[2] || 'ms';
46
+ switch (unit) {
47
+ case 'ms':
48
+ return num;
49
+ case 's':
50
+ return num * 1000;
51
+ case 'm':
52
+ return num * 60 * 1000;
53
+ case 'h':
54
+ return num * 60 * 60 * 1000;
55
+ default:
56
+ return num;
57
+ }
58
+ }
59
+ /**
60
+ * Check if a value is truthy for boolean env vars
61
+ */
62
+ function isTruthy(value) {
63
+ if (!value)
64
+ return false;
65
+ return value === '1' || value.toLowerCase() === 'true';
66
+ }
67
+ /**
68
+ * Load flags from environment variables
69
+ * Environment variables provide defaults that can be overridden by CLI flags
70
+ */
71
+ function loadEnvFlags() {
72
+ const env = {};
73
+ if (isTruthy(process.env.STEROIDS_JSON)) {
74
+ env.json = true;
75
+ }
76
+ if (isTruthy(process.env.STEROIDS_QUIET)) {
77
+ env.quiet = true;
78
+ }
79
+ if (isTruthy(process.env.STEROIDS_VERBOSE)) {
80
+ env.verbose = true;
81
+ }
82
+ if (isTruthy(process.env.STEROIDS_NO_HOOKS)) {
83
+ env.noHooks = true;
84
+ }
85
+ if (isTruthy(process.env.STEROIDS_NO_WAIT)) {
86
+ env.noWait = true;
87
+ }
88
+ if (isTruthy(process.env.STEROIDS_NO_COLOR) || process.env.NO_COLOR !== undefined) {
89
+ env.noColor = true;
90
+ }
91
+ if (process.env.STEROIDS_CONFIG) {
92
+ env.configPath = process.env.STEROIDS_CONFIG;
93
+ }
94
+ if (process.env.STEROIDS_TIMEOUT) {
95
+ try {
96
+ env.timeout = parseDuration(process.env.STEROIDS_TIMEOUT);
97
+ }
98
+ catch {
99
+ // Ignore invalid timeout from env
100
+ }
101
+ }
102
+ return env;
103
+ }
104
+ /**
105
+ * Parse global flags from command line arguments
106
+ *
107
+ * Global flags can appear anywhere in the args and are extracted,
108
+ * leaving the remaining args for command-specific parsing.
109
+ *
110
+ * @param args - Command line arguments to parse
111
+ * @returns Parsed flags and remaining arguments
112
+ */
113
+ function parseGlobalFlags(args) {
114
+ // Start with defaults, then apply env vars
115
+ const flags = {
116
+ ...getDefaultFlags(),
117
+ ...loadEnvFlags(),
118
+ };
119
+ const remaining = [];
120
+ let i = 0;
121
+ while (i < args.length) {
122
+ const arg = args[i];
123
+ // Handle combined short flags like -jqv
124
+ if (arg.match(/^-[jqvh]+$/) && arg.length > 2) {
125
+ for (const char of arg.slice(1)) {
126
+ switch (char) {
127
+ case 'j':
128
+ flags.json = true;
129
+ break;
130
+ case 'q':
131
+ flags.quiet = true;
132
+ break;
133
+ case 'v':
134
+ flags.verbose = true;
135
+ break;
136
+ case 'h':
137
+ flags.help = true;
138
+ break;
139
+ }
140
+ }
141
+ i++;
142
+ continue;
143
+ }
144
+ switch (arg) {
145
+ case '-j':
146
+ case '--json':
147
+ flags.json = true;
148
+ i++;
149
+ break;
150
+ case '-q':
151
+ case '--quiet':
152
+ flags.quiet = true;
153
+ i++;
154
+ break;
155
+ case '-v':
156
+ case '--verbose':
157
+ flags.verbose = true;
158
+ i++;
159
+ break;
160
+ case '-h':
161
+ case '--help':
162
+ flags.help = true;
163
+ i++;
164
+ break;
165
+ case '--version':
166
+ flags.version = true;
167
+ i++;
168
+ break;
169
+ case '--no-color':
170
+ flags.noColor = true;
171
+ i++;
172
+ break;
173
+ case '--dry-run':
174
+ flags.dryRun = true;
175
+ i++;
176
+ break;
177
+ case '--no-hooks':
178
+ flags.noHooks = true;
179
+ i++;
180
+ break;
181
+ case '--no-wait':
182
+ flags.noWait = true;
183
+ i++;
184
+ break;
185
+ case '--config':
186
+ if (i + 1 >= args.length) {
187
+ throw new Error('--config requires a path argument');
188
+ }
189
+ flags.configPath = args[i + 1];
190
+ i += 2;
191
+ break;
192
+ case '--timeout':
193
+ if (i + 1 >= args.length) {
194
+ throw new Error('--timeout requires a duration argument');
195
+ }
196
+ flags.timeout = parseDuration(args[i + 1]);
197
+ i += 2;
198
+ break;
199
+ default:
200
+ // Handle --config=value and --timeout=value syntax
201
+ if (arg.startsWith('--config=')) {
202
+ flags.configPath = arg.slice('--config='.length);
203
+ i++;
204
+ }
205
+ else if (arg.startsWith('--timeout=')) {
206
+ flags.timeout = parseDuration(arg.slice('--timeout='.length));
207
+ i++;
208
+ }
209
+ else {
210
+ // Not a global flag, pass through to remaining
211
+ remaining.push(arg);
212
+ i++;
213
+ }
214
+ }
215
+ }
216
+ // Validate conflicting flags
217
+ if (flags.quiet && flags.verbose) {
218
+ throw new Error('Cannot use --quiet and --verbose together');
219
+ }
220
+ return { flags, remaining };
221
+ }
222
+ /**
223
+ * Apply global flags to affect runtime behavior
224
+ * Call this after parsing to set up the environment
225
+ */
226
+ function applyGlobalFlags(flags) {
227
+ // Disable colors if requested
228
+ if (flags.noColor) {
229
+ process.env.NO_COLOR = '1';
230
+ }
231
+ }
232
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/cli/flags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Help system for Steroids CLI
3
+ *
4
+ * Provides templates and utilities for creating consistent,
5
+ * comprehensive help text across all commands.
6
+ */
7
+ /**
8
+ * Help section structure
9
+ */
10
+ export interface HelpSection {
11
+ title: string;
12
+ content: string;
13
+ }
14
+ /**
15
+ * Command example
16
+ */
17
+ export interface CommandExample {
18
+ command: string;
19
+ description: string;
20
+ }
21
+ /**
22
+ * Option definition for help text
23
+ */
24
+ export interface OptionDef {
25
+ short?: string;
26
+ long: string;
27
+ description: string;
28
+ values?: string;
29
+ default?: string;
30
+ }
31
+ /**
32
+ * Subcommand definition
33
+ */
34
+ export interface SubcommandDef {
35
+ name: string;
36
+ description: string;
37
+ args?: string;
38
+ }
39
+ /**
40
+ * Related command reference
41
+ */
42
+ export interface RelatedCommand {
43
+ command: string;
44
+ description: string;
45
+ }
46
+ /**
47
+ * Help template configuration
48
+ */
49
+ export interface HelpTemplate {
50
+ /** Command name (e.g., 'tasks', 'sections') */
51
+ command: string;
52
+ /** Short one-line description */
53
+ description: string;
54
+ /** Detailed description (optional) */
55
+ details?: string;
56
+ /** Usage examples */
57
+ usage?: string[];
58
+ /** Subcommands */
59
+ subcommands?: SubcommandDef[];
60
+ /** Command-specific options */
61
+ options?: OptionDef[];
62
+ /** Examples with descriptions */
63
+ examples?: CommandExample[];
64
+ /** Related commands */
65
+ related?: RelatedCommand[];
66
+ /** Custom sections */
67
+ sections?: HelpSection[];
68
+ /** Whether to show global options (default: true) */
69
+ showGlobalOptions?: boolean;
70
+ /** Whether to show exit codes (default: true) */
71
+ showExitCodes?: boolean;
72
+ /** Whether to show environment variables (default: true) */
73
+ showEnvVars?: boolean;
74
+ }
75
+ /**
76
+ * Generate help text from template
77
+ */
78
+ export declare function generateHelp(template: HelpTemplate): string;
79
+ /**
80
+ * Quick help for simple commands
81
+ *
82
+ * Generates basic help text with just usage and options
83
+ */
84
+ export declare function quickHelp(command: string, description: string, options?: OptionDef[], examples?: CommandExample[]): string;
85
+ /**
86
+ * Display error codes table
87
+ */
88
+ export declare function showErrorCodes(): void;
89
+ /**
90
+ * Format a compact help hint for error messages
91
+ */
92
+ export declare function helpHint(command?: string): string;
93
+ /**
94
+ * Format a "Did you mean?" suggestion
95
+ */
96
+ export declare function didYouMean(provided: string, options: string[]): string | null;
97
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB;IAClB,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;IAC9B,+BAA+B;IAC/B,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,uBAAuB;IACvB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iDAAiD;IACjD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAsFD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAoG3D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,EAAO,EACzB,QAAQ,GAAE,cAAc,EAAO,GAC9B,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CA0BrC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAe7E"}
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ /**
3
+ * Help system for Steroids CLI
4
+ *
5
+ * Provides templates and utilities for creating consistent,
6
+ * comprehensive help text across all commands.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.generateHelp = generateHelp;
10
+ exports.quickHelp = quickHelp;
11
+ exports.showErrorCodes = showErrorCodes;
12
+ exports.helpHint = helpHint;
13
+ exports.didYouMean = didYouMean;
14
+ /**
15
+ * Format an option for display
16
+ */
17
+ function formatOption(opt) {
18
+ const flags = opt.short ? `-${opt.short}, --${opt.long}` : ` --${opt.long}`;
19
+ const paddedFlags = flags.padEnd(24);
20
+ let desc = opt.description;
21
+ if (opt.values) {
22
+ desc += `\n${' '.repeat(24)}Values: ${opt.values}`;
23
+ }
24
+ if (opt.default) {
25
+ desc += `\n${' '.repeat(24)}Default: ${opt.default}`;
26
+ }
27
+ return ` ${paddedFlags}${desc}`;
28
+ }
29
+ /**
30
+ * Format a subcommand for display
31
+ */
32
+ function formatSubcommand(sub) {
33
+ const name = sub.args ? `${sub.name} ${sub.args}` : sub.name;
34
+ const paddedName = name.padEnd(20);
35
+ return ` ${paddedName}${sub.description}`;
36
+ }
37
+ /**
38
+ * Format an example for display
39
+ */
40
+ function formatExample(ex) {
41
+ return ` ${ex.command.padEnd(50)} # ${ex.description}`;
42
+ }
43
+ /**
44
+ * Global options that apply to all commands
45
+ */
46
+ const GLOBAL_OPTIONS = [
47
+ { short: 'h', long: 'help', description: 'Show help' },
48
+ { long: 'version', description: 'Show version' },
49
+ { short: 'j', long: 'json', description: 'Output as JSON' },
50
+ { short: 'q', long: 'quiet', description: 'Minimal output' },
51
+ { short: 'v', long: 'verbose', description: 'Detailed output' },
52
+ { long: 'no-color', description: 'Disable colored output' },
53
+ { long: 'config', description: 'Custom config file path', values: '<path>' },
54
+ { long: 'dry-run', description: 'Preview without executing' },
55
+ { long: 'timeout', description: 'Command timeout', values: '<duration> (e.g., 30s, 5m, 1h)' },
56
+ { long: 'no-hooks', description: 'Skip hook execution' },
57
+ { long: 'no-wait', description: 'Don\'t wait for locks' },
58
+ ];
59
+ /**
60
+ * Environment variables section
61
+ */
62
+ const ENV_VARS_SECTION = `
63
+ ENVIRONMENT VARIABLES:
64
+ STEROIDS_CONFIG Custom config path (--config)
65
+ STEROIDS_JSON Output as JSON (--json)
66
+ STEROIDS_QUIET Minimal output (--quiet)
67
+ STEROIDS_VERBOSE Detailed output (--verbose)
68
+ STEROIDS_NO_HOOKS Skip hooks (--no-hooks)
69
+ STEROIDS_NO_COLOR Disable colors (--no-color)
70
+ STEROIDS_NO_WAIT Don't wait for locks (--no-wait)
71
+ STEROIDS_AUTO_MIGRATE Auto-migrate database (1, true)
72
+ STEROIDS_TIMEOUT Command timeout (duration)
73
+ NO_COLOR Standard no-color variable
74
+ CI CI environment detected
75
+ `;
76
+ /**
77
+ * Exit codes section
78
+ */
79
+ const EXIT_CODES_SECTION = `
80
+ EXIT CODES:
81
+ 0 Success
82
+ 1 General error
83
+ 2 Invalid arguments
84
+ 3 Configuration error or not initialized
85
+ 4 Resource not found
86
+ 5 Permission denied
87
+ 6 Resource locked
88
+ 7 Health check failed
89
+ `;
90
+ /**
91
+ * Generate help text from template
92
+ */
93
+ function generateHelp(template) {
94
+ const lines = [];
95
+ // Header
96
+ lines.push(`steroids ${template.command} - ${template.description}`);
97
+ lines.push('');
98
+ // Usage
99
+ if (template.usage && template.usage.length > 0) {
100
+ lines.push('USAGE:');
101
+ for (const usage of template.usage) {
102
+ lines.push(` ${usage}`);
103
+ }
104
+ lines.push('');
105
+ }
106
+ else {
107
+ lines.push('USAGE:');
108
+ lines.push(` steroids ${template.command} [options]`);
109
+ lines.push('');
110
+ }
111
+ // Detailed description
112
+ if (template.details) {
113
+ lines.push('DESCRIPTION:');
114
+ const detailLines = template.details.trim().split('\n');
115
+ for (const line of detailLines) {
116
+ lines.push(line ? ` ${line}` : '');
117
+ }
118
+ lines.push('');
119
+ }
120
+ // Subcommands
121
+ if (template.subcommands && template.subcommands.length > 0) {
122
+ lines.push('SUBCOMMANDS:');
123
+ for (const sub of template.subcommands) {
124
+ lines.push(formatSubcommand(sub));
125
+ }
126
+ lines.push('');
127
+ }
128
+ // Command-specific options
129
+ if (template.options && template.options.length > 0) {
130
+ lines.push('OPTIONS:');
131
+ for (const opt of template.options) {
132
+ lines.push(formatOption(opt));
133
+ }
134
+ lines.push('');
135
+ }
136
+ // Global options
137
+ if (template.showGlobalOptions !== false) {
138
+ lines.push('GLOBAL OPTIONS:');
139
+ for (const opt of GLOBAL_OPTIONS) {
140
+ lines.push(formatOption(opt));
141
+ }
142
+ lines.push('');
143
+ }
144
+ // Examples
145
+ if (template.examples && template.examples.length > 0) {
146
+ lines.push('EXAMPLES:');
147
+ for (const ex of template.examples) {
148
+ lines.push(formatExample(ex));
149
+ }
150
+ lines.push('');
151
+ }
152
+ // Related commands
153
+ if (template.related && template.related.length > 0) {
154
+ lines.push('RELATED COMMANDS:');
155
+ for (const rel of template.related) {
156
+ lines.push(` ${rel.command.padEnd(30)}${rel.description}`);
157
+ }
158
+ lines.push('');
159
+ }
160
+ // Custom sections
161
+ if (template.sections && template.sections.length > 0) {
162
+ for (const section of template.sections) {
163
+ lines.push(`${section.title}:`);
164
+ const sectionLines = section.content.trim().split('\n');
165
+ for (const line of sectionLines) {
166
+ lines.push(line ? ` ${line}` : '');
167
+ }
168
+ lines.push('');
169
+ }
170
+ }
171
+ // Environment variables
172
+ if (template.showEnvVars !== false) {
173
+ lines.push(ENV_VARS_SECTION.trim());
174
+ lines.push('');
175
+ }
176
+ // Exit codes
177
+ if (template.showExitCodes !== false) {
178
+ lines.push(EXIT_CODES_SECTION.trim());
179
+ lines.push('');
180
+ }
181
+ return lines.join('\n');
182
+ }
183
+ /**
184
+ * Quick help for simple commands
185
+ *
186
+ * Generates basic help text with just usage and options
187
+ */
188
+ function quickHelp(command, description, options = [], examples = []) {
189
+ return generateHelp({
190
+ command,
191
+ description,
192
+ options,
193
+ examples,
194
+ });
195
+ }
196
+ /**
197
+ * Display error codes table
198
+ */
199
+ function showErrorCodes() {
200
+ console.log('ERROR CODES AND EXIT CODES:\n');
201
+ console.log(' Code Exit Description');
202
+ console.log(' ' + '─'.repeat(70));
203
+ const codes = [
204
+ ['SUCCESS', '0', 'Operation completed successfully'],
205
+ ['GENERAL_ERROR', '1', 'Unspecified error'],
206
+ ['INVALID_ARGUMENTS', '2', 'Bad command arguments'],
207
+ ['CONFIG_ERROR', '3', 'Configuration problem'],
208
+ ['NOT_FOUND', '4', 'Resource not found'],
209
+ ['PERMISSION_DENIED', '5', 'Access denied'],
210
+ ['RESOURCE_LOCKED', '6', 'Lock held by another'],
211
+ ['HEALTH_FAILED', '7', 'Health check failed'],
212
+ ['TASK_NOT_FOUND', '4', 'Task doesn\'t exist'],
213
+ ['SECTION_NOT_FOUND', '4', 'Section doesn\'t exist'],
214
+ ['TASK_LOCKED', '6', 'Task locked by runner'],
215
+ ['NOT_INITIALIZED', '3', 'Steroids not initialized'],
216
+ ['MIGRATION_REQUIRED', '3', 'Database needs migration'],
217
+ ['HOOK_FAILED', '1', 'Hook execution failed'],
218
+ ];
219
+ for (const [code, exit, desc] of codes) {
220
+ console.log(` ${code.padEnd(20)} ${exit.padEnd(5)} ${desc}`);
221
+ }
222
+ console.log();
223
+ }
224
+ /**
225
+ * Format a compact help hint for error messages
226
+ */
227
+ function helpHint(command) {
228
+ if (command) {
229
+ return `Run 'steroids ${command} --help' for usage information.`;
230
+ }
231
+ return `Run 'steroids --help' for usage information.`;
232
+ }
233
+ /**
234
+ * Format a "Did you mean?" suggestion
235
+ */
236
+ function didYouMean(provided, options) {
237
+ // Simple Levenshtein distance for suggestions
238
+ const distances = options.map(opt => ({
239
+ option: opt,
240
+ distance: levenshtein(provided.toLowerCase(), opt.toLowerCase()),
241
+ }));
242
+ distances.sort((a, b) => a.distance - b.distance);
243
+ // Only suggest if distance is small enough (less than half the length)
244
+ if (distances[0] && distances[0].distance <= provided.length / 2) {
245
+ return `Did you mean '${distances[0].option}'?`;
246
+ }
247
+ return null;
248
+ }
249
+ /**
250
+ * Simple Levenshtein distance for suggestions
251
+ */
252
+ function levenshtein(a, b) {
253
+ const matrix = [];
254
+ for (let i = 0; i <= b.length; i++) {
255
+ matrix[i] = [i];
256
+ }
257
+ for (let j = 0; j <= a.length; j++) {
258
+ matrix[0][j] = j;
259
+ }
260
+ for (let i = 1; i <= b.length; i++) {
261
+ for (let j = 1; j <= a.length; j++) {
262
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
263
+ matrix[i][j] = matrix[i - 1][j - 1];
264
+ }
265
+ else {
266
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
267
+ matrix[i][j - 1] + 1, // insertion
268
+ matrix[i - 1][j] + 1 // deletion
269
+ );
270
+ }
271
+ }
272
+ }
273
+ return matrix[b.length][a.length];
274
+ }
275
+ //# sourceMappingURL=help.js.map