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,437 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration schema with descriptions, options, and defaults
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CONFIG_SCHEMA = void 0;
7
+ exports.isSchemaField = isSchemaField;
8
+ exports.getSchemaForPath = getSchemaForPath;
9
+ exports.getCategories = getCategories;
10
+ exports.getCategoryDescription = getCategoryDescription;
11
+ /**
12
+ * Full configuration schema
13
+ */
14
+ exports.CONFIG_SCHEMA = {
15
+ ai: {
16
+ _description: 'AI provider configuration',
17
+ _type: 'object',
18
+ orchestrator: {
19
+ _description: 'AI settings for orchestration decisions',
20
+ _type: 'object',
21
+ provider: {
22
+ _description: 'AI provider for orchestrator',
23
+ _type: 'string',
24
+ _options: ['claude', 'gemini', 'codex'],
25
+ _default: 'claude',
26
+ },
27
+ model: {
28
+ _description: 'Model identifier for orchestrator',
29
+ _type: 'string',
30
+ _default: 'claude-sonnet-4',
31
+ },
32
+ cli: {
33
+ _description: 'Path to CLI executable',
34
+ _type: 'string',
35
+ _default: '',
36
+ },
37
+ },
38
+ coder: {
39
+ _description: 'AI settings for code generation',
40
+ _type: 'object',
41
+ provider: {
42
+ _description: 'AI provider for coder',
43
+ _type: 'string',
44
+ _options: ['claude', 'gemini', 'codex'],
45
+ _default: 'claude',
46
+ },
47
+ model: {
48
+ _description: 'Model identifier for coder',
49
+ _type: 'string',
50
+ _default: 'claude-sonnet-4',
51
+ },
52
+ cli: {
53
+ _description: 'Path to CLI executable',
54
+ _type: 'string',
55
+ _default: '',
56
+ },
57
+ skipExternalSetup: {
58
+ _description: 'Auto-skip tasks marked as external/manual setup (Cloud SQL, etc.)',
59
+ _type: 'boolean',
60
+ _default: true,
61
+ },
62
+ },
63
+ reviewer: {
64
+ _description: 'AI settings for code review',
65
+ _type: 'object',
66
+ provider: {
67
+ _description: 'AI provider for reviewer',
68
+ _type: 'string',
69
+ _options: ['claude', 'gemini', 'codex'],
70
+ _default: 'claude',
71
+ },
72
+ model: {
73
+ _description: 'Model identifier for reviewer',
74
+ _type: 'string',
75
+ _default: 'claude-sonnet-4',
76
+ },
77
+ cli: {
78
+ _description: 'Path to CLI executable',
79
+ _type: 'string',
80
+ _default: '',
81
+ },
82
+ },
83
+ },
84
+ output: {
85
+ _description: 'Output formatting options',
86
+ _type: 'object',
87
+ format: {
88
+ _description: 'Default output format for CLI commands',
89
+ _type: 'string',
90
+ _options: ['table', 'json'],
91
+ _default: 'table',
92
+ },
93
+ colors: {
94
+ _description: 'Enable colored output',
95
+ _type: 'boolean',
96
+ _default: true,
97
+ },
98
+ verbose: {
99
+ _description: 'Show detailed output',
100
+ _type: 'boolean',
101
+ _default: false,
102
+ },
103
+ },
104
+ git: {
105
+ _description: 'Git workflow settings',
106
+ _type: 'object',
107
+ autoPush: {
108
+ _description: 'Automatically push after task completion',
109
+ _type: 'boolean',
110
+ _default: true,
111
+ },
112
+ remote: {
113
+ _description: 'Remote name for push operations',
114
+ _type: 'string',
115
+ _default: 'origin',
116
+ },
117
+ branch: {
118
+ _description: 'Default branch name',
119
+ _type: 'string',
120
+ _default: 'main',
121
+ },
122
+ commitPrefix: {
123
+ _description: 'Prefix for commit messages',
124
+ _type: 'string',
125
+ _default: '',
126
+ },
127
+ retryOnFailure: {
128
+ _description: 'Retry push on temporary failure',
129
+ _type: 'boolean',
130
+ _default: true,
131
+ },
132
+ },
133
+ runners: {
134
+ _description: 'Runner daemon configuration',
135
+ _type: 'object',
136
+ heartbeatInterval: {
137
+ _description: 'Interval between heartbeat updates',
138
+ _type: 'string',
139
+ _default: '30s',
140
+ },
141
+ staleTimeout: {
142
+ _description: 'Time after which runner is considered stale',
143
+ _type: 'string',
144
+ _default: '5m',
145
+ },
146
+ subprocessHangTimeout: {
147
+ _description: 'Kill subprocess if no output for this duration',
148
+ _type: 'string',
149
+ _default: '15m',
150
+ },
151
+ maxConcurrent: {
152
+ _description: 'Maximum concurrent runners (global)',
153
+ _type: 'number',
154
+ _default: 1,
155
+ },
156
+ logRetention: {
157
+ _description: 'How long to keep runner logs',
158
+ _type: 'string',
159
+ _default: '7d',
160
+ },
161
+ daemonLogs: {
162
+ _description: 'Enable daemon stdout/stderr logging to disk',
163
+ _type: 'boolean',
164
+ _default: true,
165
+ },
166
+ },
167
+ health: {
168
+ _description: 'Health check configuration',
169
+ _type: 'object',
170
+ threshold: {
171
+ _description: 'Minimum health score (0-100)',
172
+ _type: 'number',
173
+ _default: 80,
174
+ },
175
+ checks: {
176
+ _description: 'Which checks to run',
177
+ _type: 'object',
178
+ git: {
179
+ _description: 'Check for clean git working tree',
180
+ _type: 'boolean',
181
+ _default: true,
182
+ },
183
+ deps: {
184
+ _description: 'Check dependencies are installed',
185
+ _type: 'boolean',
186
+ _default: true,
187
+ },
188
+ tests: {
189
+ _description: 'Run tests as part of health check',
190
+ _type: 'boolean',
191
+ _default: true,
192
+ },
193
+ lint: {
194
+ _description: 'Run linting as part of health check',
195
+ _type: 'boolean',
196
+ _default: true,
197
+ },
198
+ },
199
+ },
200
+ locking: {
201
+ _description: 'Task and section locking settings',
202
+ _type: 'object',
203
+ taskTimeout: {
204
+ _description: 'Maximum time a task can be locked',
205
+ _type: 'string',
206
+ _default: '60m',
207
+ },
208
+ sectionTimeout: {
209
+ _description: 'Maximum time a section can be locked',
210
+ _type: 'string',
211
+ _default: '120m',
212
+ },
213
+ waitTimeout: {
214
+ _description: 'How long to wait for a lock before failing',
215
+ _type: 'string',
216
+ _default: '30m',
217
+ },
218
+ pollInterval: {
219
+ _description: 'How often to check for lock availability',
220
+ _type: 'string',
221
+ _default: '5s',
222
+ },
223
+ },
224
+ database: {
225
+ _description: 'Database settings',
226
+ _type: 'object',
227
+ autoMigrate: {
228
+ _description: 'Automatically run migrations on startup',
229
+ _type: 'boolean',
230
+ _default: true,
231
+ },
232
+ backupBeforeMigrate: {
233
+ _description: 'Create backup before running migrations',
234
+ _type: 'boolean',
235
+ _default: true,
236
+ },
237
+ },
238
+ logs: {
239
+ _description: 'Logging configuration',
240
+ _type: 'object',
241
+ retention: {
242
+ _description: 'How long to keep log files',
243
+ _type: 'string',
244
+ _default: '30d',
245
+ },
246
+ keepLogs: {
247
+ _description: 'Whether to persist logs to disk',
248
+ _type: 'boolean',
249
+ _default: true,
250
+ },
251
+ level: {
252
+ _description: 'Minimum log level to record',
253
+ _type: 'string',
254
+ _options: ['debug', 'info', 'warn', 'error'],
255
+ _default: 'info',
256
+ },
257
+ },
258
+ disputes: {
259
+ _description: 'Dispute handling settings',
260
+ _type: 'object',
261
+ timeoutDays: {
262
+ _description: 'Days before stale dispute auto-resolution',
263
+ _type: 'number',
264
+ _default: 7,
265
+ },
266
+ autoCreateOnMaxRejections: {
267
+ _description: 'Auto-create dispute when task hits 15 rejections',
268
+ _type: 'boolean',
269
+ _default: false,
270
+ },
271
+ majorBlocksLoop: {
272
+ _description: 'Whether major disputes block the loop',
273
+ _type: 'boolean',
274
+ _default: false,
275
+ },
276
+ },
277
+ projects: {
278
+ _description: 'Project scanning settings',
279
+ _type: 'object',
280
+ scanPaths: {
281
+ _description: 'Directories to scan for projects',
282
+ _type: 'array',
283
+ _default: ['~/Projects'],
284
+ },
285
+ excludePatterns: {
286
+ _description: 'Patterns to exclude from scanning',
287
+ _type: 'array',
288
+ _default: ['node_modules', '.git'],
289
+ },
290
+ },
291
+ backup: {
292
+ _description: 'Backup configuration',
293
+ _type: 'object',
294
+ enabled: {
295
+ _description: 'Enable automatic backups',
296
+ _type: 'boolean',
297
+ _default: true,
298
+ },
299
+ retention: {
300
+ _description: 'How long to keep backups',
301
+ _type: 'string',
302
+ _default: '7d',
303
+ },
304
+ includeConfig: {
305
+ _description: 'Include config files in backup',
306
+ _type: 'boolean',
307
+ _default: true,
308
+ },
309
+ includeLogs: {
310
+ _description: 'Include log files in backup',
311
+ _type: 'boolean',
312
+ _default: false,
313
+ },
314
+ },
315
+ build: {
316
+ _description: 'Build settings',
317
+ _type: 'object',
318
+ timeout: {
319
+ _description: 'Maximum time for build commands',
320
+ _type: 'string',
321
+ _default: '5m',
322
+ },
323
+ },
324
+ test: {
325
+ _description: 'Test settings',
326
+ _type: 'object',
327
+ timeout: {
328
+ _description: 'Maximum time for test commands',
329
+ _type: 'string',
330
+ _default: '10m',
331
+ },
332
+ },
333
+ webui: {
334
+ _description: 'Web UI settings',
335
+ _type: 'object',
336
+ port: {
337
+ _description: 'Port for web server',
338
+ _type: 'number',
339
+ _default: 3000,
340
+ },
341
+ host: {
342
+ _description: 'Host to bind to',
343
+ _type: 'string',
344
+ _default: 'localhost',
345
+ },
346
+ auth: {
347
+ _description: 'Enable authentication',
348
+ _type: 'boolean',
349
+ _default: false,
350
+ },
351
+ },
352
+ quality: {
353
+ _description: 'Code quality requirements',
354
+ _type: 'object',
355
+ tests: {
356
+ _description: 'Test coverage settings',
357
+ _type: 'object',
358
+ required: {
359
+ _description: 'Whether to require tests for new code',
360
+ _type: 'boolean',
361
+ _default: false,
362
+ },
363
+ minCoverage: {
364
+ _description: 'Minimum test coverage percentage (0-100)',
365
+ _type: 'number',
366
+ },
367
+ },
368
+ },
369
+ sections: {
370
+ _description: 'Section processing settings',
371
+ _type: 'object',
372
+ batchMode: {
373
+ _description: 'Process all pending tasks in a section as one batch',
374
+ _type: 'boolean',
375
+ _default: false,
376
+ },
377
+ maxBatchSize: {
378
+ _description: 'Maximum tasks to batch together (prevents context overflow)',
379
+ _type: 'number',
380
+ _default: 10,
381
+ },
382
+ },
383
+ hooks: {
384
+ _description: 'Event hooks for automation (scripts and webhooks)',
385
+ _type: 'array',
386
+ _default: [],
387
+ },
388
+ };
389
+ /**
390
+ * Check if a schema node is a leaf field (has _type but no child config keys)
391
+ */
392
+ function isSchemaField(node) {
393
+ if (!('_type' in node))
394
+ return false;
395
+ // If it has any non-underscore keys, it's a container object, not a leaf field
396
+ const nonMetaKeys = Object.keys(node).filter((k) => !k.startsWith('_'));
397
+ return nonMetaKeys.length === 0;
398
+ }
399
+ /**
400
+ * Get schema for a config path
401
+ */
402
+ function getSchemaForPath(path) {
403
+ const parts = path.split('.');
404
+ let current = exports.CONFIG_SCHEMA;
405
+ for (const part of parts) {
406
+ if (!current) {
407
+ return null;
408
+ }
409
+ // Skip fields that are metadata
410
+ if (part.startsWith('_')) {
411
+ return null;
412
+ }
413
+ // Navigate into the object
414
+ current = current[part];
415
+ }
416
+ return current ?? null;
417
+ }
418
+ /**
419
+ * Get all top-level config categories
420
+ */
421
+ function getCategories() {
422
+ return Object.keys(exports.CONFIG_SCHEMA);
423
+ }
424
+ /**
425
+ * Get description for a category
426
+ */
427
+ function getCategoryDescription(category) {
428
+ const schema = exports.CONFIG_SCHEMA[category];
429
+ if (schema && isSchemaField(schema)) {
430
+ return schema._description;
431
+ }
432
+ if (schema && '_description' in schema) {
433
+ return schema._description;
434
+ }
435
+ return '';
436
+ }
437
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Configuration validation
3
+ * Validates config against schema and provides helpful error messages
4
+ */
5
+ import type { SteroidsConfig } from './loader.js';
6
+ export interface ValidationError {
7
+ path: string;
8
+ message: string;
9
+ suggestion?: string;
10
+ }
11
+ export interface ValidationResult {
12
+ valid: boolean;
13
+ errors: ValidationError[];
14
+ warnings: ValidationError[];
15
+ }
16
+ /**
17
+ * Validate configuration against schema
18
+ */
19
+ export declare function validateConfig(config: Partial<SteroidsConfig>): ValidationResult;
20
+ /**
21
+ * Format validation results for display
22
+ */
23
+ export declare function formatValidationResult(result: ValidationResult): string;
24
+ /**
25
+ * Validate a single config value
26
+ */
27
+ export declare function validateValue(path: string, value: unknown): ValidationError | null;
28
+ /**
29
+ * Parse a string value to the correct type based on schema
30
+ */
31
+ export declare function parseValue(path: string, stringValue: string): unknown;
32
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/config/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAuGD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAWhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA8BvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,eAAe,GAAG,IAAI,CAsBxB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA+BrE"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration validation
4
+ * Validates config against schema and provides helpful error messages
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.validateConfig = validateConfig;
8
+ exports.formatValidationResult = formatValidationResult;
9
+ exports.validateValue = validateValue;
10
+ exports.parseValue = parseValue;
11
+ const schema_js_1 = require("./schema.js");
12
+ /**
13
+ * Validate a value against a schema field
14
+ */
15
+ function validateField(value, schema, path) {
16
+ // Check type
17
+ const actualType = Array.isArray(value) ? 'array' : typeof value;
18
+ if (schema._type === 'array' && !Array.isArray(value)) {
19
+ return {
20
+ path,
21
+ message: `Expected array, got ${actualType}`,
22
+ suggestion: `Value should be a list, e.g., ["item1", "item2"]`,
23
+ };
24
+ }
25
+ if (schema._type !== 'array' && schema._type !== 'object' && actualType !== schema._type) {
26
+ return {
27
+ path,
28
+ message: `Expected ${schema._type}, got ${actualType}`,
29
+ suggestion: `Value should be a ${schema._type}`,
30
+ };
31
+ }
32
+ // Check options if defined
33
+ if (schema._options && !schema._options.includes(value)) {
34
+ return {
35
+ path,
36
+ message: `Invalid value "${value}"`,
37
+ suggestion: `Valid options: ${schema._options.join(', ')}`,
38
+ };
39
+ }
40
+ return null;
41
+ }
42
+ /**
43
+ * Recursively validate config against schema
44
+ */
45
+ function validateObject(config, schema, path, errors, warnings) {
46
+ // Check for unknown keys
47
+ for (const key of Object.keys(config)) {
48
+ const fullPath = path ? `${path}.${key}` : key;
49
+ const schemaEntry = schema[key];
50
+ if (!schemaEntry) {
51
+ // Unknown key - add warning
52
+ const knownKeys = Object.keys(schema).filter((k) => !k.startsWith('_'));
53
+ const similar = knownKeys.find((k) => k.toLowerCase().includes(key.toLowerCase()) ||
54
+ key.toLowerCase().includes(k.toLowerCase()));
55
+ warnings.push({
56
+ path: fullPath,
57
+ message: `Unknown configuration key "${key}"`,
58
+ suggestion: similar
59
+ ? `Did you mean "${similar}"?`
60
+ : `Known keys: ${knownKeys.join(', ')}`,
61
+ });
62
+ continue;
63
+ }
64
+ const value = config[key];
65
+ if ((0, schema_js_1.isSchemaField)(schemaEntry)) {
66
+ // Validate leaf field
67
+ const error = validateField(value, schemaEntry, fullPath);
68
+ if (error) {
69
+ errors.push(error);
70
+ }
71
+ }
72
+ else {
73
+ // Recurse into nested object
74
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
75
+ validateObject(value, schemaEntry, fullPath, errors, warnings);
76
+ }
77
+ else if (value !== undefined) {
78
+ errors.push({
79
+ path: fullPath,
80
+ message: `Expected object, got ${typeof value}`,
81
+ suggestion: `This should be a nested configuration object`,
82
+ });
83
+ }
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * Validate configuration against schema
89
+ */
90
+ function validateConfig(config) {
91
+ const errors = [];
92
+ const warnings = [];
93
+ validateObject(config, schema_js_1.CONFIG_SCHEMA, '', errors, warnings);
94
+ return {
95
+ valid: errors.length === 0,
96
+ errors,
97
+ warnings,
98
+ };
99
+ }
100
+ /**
101
+ * Format validation results for display
102
+ */
103
+ function formatValidationResult(result) {
104
+ const lines = [];
105
+ if (result.valid && result.warnings.length === 0) {
106
+ lines.push('Configuration is valid.');
107
+ return lines.join('\n');
108
+ }
109
+ if (result.errors.length > 0) {
110
+ lines.push('ERRORS:');
111
+ for (const error of result.errors) {
112
+ lines.push(` ${error.path}: ${error.message}`);
113
+ if (error.suggestion) {
114
+ lines.push(` → ${error.suggestion}`);
115
+ }
116
+ }
117
+ }
118
+ if (result.warnings.length > 0) {
119
+ if (result.errors.length > 0)
120
+ lines.push('');
121
+ lines.push('WARNINGS:');
122
+ for (const warning of result.warnings) {
123
+ lines.push(` ${warning.path}: ${warning.message}`);
124
+ if (warning.suggestion) {
125
+ lines.push(` → ${warning.suggestion}`);
126
+ }
127
+ }
128
+ }
129
+ return lines.join('\n');
130
+ }
131
+ /**
132
+ * Validate a single config value
133
+ */
134
+ function validateValue(path, value) {
135
+ const parts = path.split('.');
136
+ let schema = schema_js_1.CONFIG_SCHEMA;
137
+ for (const part of parts) {
138
+ if (!schema || (0, schema_js_1.isSchemaField)(schema)) {
139
+ return {
140
+ path,
141
+ message: `Unknown configuration path "${path}"`,
142
+ };
143
+ }
144
+ schema = schema[part];
145
+ }
146
+ if (!schema || !(0, schema_js_1.isSchemaField)(schema)) {
147
+ return {
148
+ path,
149
+ message: `"${path}" is not a valid configuration key`,
150
+ };
151
+ }
152
+ return validateField(value, schema, path);
153
+ }
154
+ /**
155
+ * Parse a string value to the correct type based on schema
156
+ */
157
+ function parseValue(path, stringValue) {
158
+ const parts = path.split('.');
159
+ let schema = schema_js_1.CONFIG_SCHEMA;
160
+ for (const part of parts) {
161
+ if (!schema || (0, schema_js_1.isSchemaField)(schema)) {
162
+ return stringValue;
163
+ }
164
+ schema = schema[part];
165
+ }
166
+ if (!schema || !(0, schema_js_1.isSchemaField)(schema)) {
167
+ return stringValue;
168
+ }
169
+ switch (schema._type) {
170
+ case 'boolean':
171
+ return stringValue.toLowerCase() === 'true';
172
+ case 'number':
173
+ return Number(stringValue);
174
+ case 'array':
175
+ // Try to parse as JSON array
176
+ try {
177
+ return JSON.parse(stringValue);
178
+ }
179
+ catch {
180
+ // Split by comma as fallback
181
+ return stringValue.split(',').map((s) => s.trim());
182
+ }
183
+ default:
184
+ return stringValue;
185
+ }
186
+ }
187
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/config/validator.ts"],"names":[],"mappings":"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"}