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,327 @@
1
+ "use strict";
2
+ /**
3
+ * Template Variable Parser
4
+ *
5
+ * Parses and resolves template variables in hook configurations.
6
+ * Supports {{variable}} syntax for hook payloads and ${VAR} for environment variables.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parseTemplate = parseTemplate;
10
+ exports.parseTemplateObject = parseTemplateObject;
11
+ exports.resolveEnvVars = resolveEnvVars;
12
+ exports.resolveVariable = resolveVariable;
13
+ exports.createTemplateContext = createTemplateContext;
14
+ exports.getAvailableVariables = getAvailableVariables;
15
+ exports.validateTemplate = validateTemplate;
16
+ /**
17
+ * Template variable pattern: {{variable.name}}
18
+ */
19
+ const TEMPLATE_VAR_PATTERN = /\{\{([^}]+)\}\}/g;
20
+ /**
21
+ * Environment variable pattern: ${VAR_NAME}
22
+ */
23
+ const ENV_VAR_PATTERN = /\$\{([^}]+)\}/g;
24
+ /**
25
+ * Parse template variables in a string
26
+ *
27
+ * @param template - String containing {{variable}} placeholders
28
+ * @param context - Context for variable resolution
29
+ * @returns Parsed string with variables replaced
30
+ */
31
+ function parseTemplate(template, context) {
32
+ // First, resolve environment variables
33
+ let result = resolveEnvVars(template);
34
+ // Then resolve template variables
35
+ result = result.replace(TEMPLATE_VAR_PATTERN, (match, varPath) => {
36
+ const value = resolveVariable(varPath.trim(), context);
37
+ return value !== undefined ? String(value) : match;
38
+ });
39
+ return result;
40
+ }
41
+ /**
42
+ * Parse template variables in an object (recursively)
43
+ *
44
+ * @param obj - Object containing template strings
45
+ * @param context - Context for variable resolution
46
+ * @returns New object with templates parsed
47
+ */
48
+ function parseTemplateObject(obj, context) {
49
+ if (typeof obj === 'string') {
50
+ return parseTemplate(obj, context);
51
+ }
52
+ if (Array.isArray(obj)) {
53
+ return obj.map((item) => parseTemplateObject(item, context));
54
+ }
55
+ if (obj && typeof obj === 'object') {
56
+ const result = {};
57
+ for (const [key, value] of Object.entries(obj)) {
58
+ result[key] = parseTemplateObject(value, context);
59
+ }
60
+ return result;
61
+ }
62
+ return obj;
63
+ }
64
+ /**
65
+ * Resolve environment variables (${VAR_NAME})
66
+ *
67
+ * @param text - String containing ${VAR} placeholders
68
+ * @returns String with env vars replaced
69
+ */
70
+ function resolveEnvVars(text) {
71
+ return text.replace(ENV_VAR_PATTERN, (match, varName) => {
72
+ const envValue = process.env[varName.trim()];
73
+ return envValue !== undefined ? envValue : match;
74
+ });
75
+ }
76
+ /**
77
+ * Resolve a single template variable path
78
+ *
79
+ * @param path - Variable path (e.g., "task.title", "project.name")
80
+ * @param context - Template context
81
+ * @returns Resolved value or undefined
82
+ */
83
+ function resolveVariable(path, context) {
84
+ const parts = path.split('.');
85
+ // Meta variables (top-level)
86
+ if (parts.length === 1) {
87
+ switch (parts[0]) {
88
+ case 'event':
89
+ return context.event;
90
+ case 'timestamp':
91
+ return context.timestamp;
92
+ default:
93
+ return undefined;
94
+ }
95
+ }
96
+ // Nested variables
97
+ const [category, ...rest] = parts;
98
+ switch (category) {
99
+ case 'task':
100
+ return resolveTaskVariable(rest, context.task);
101
+ case 'section':
102
+ return resolveSectionVariable(rest, context.section);
103
+ case 'project':
104
+ return resolveProjectVariable(rest, context.project);
105
+ case 'health':
106
+ return resolveHealthVariable(rest, context.health);
107
+ case 'dispute':
108
+ return resolveDisputeVariable(rest, context.dispute);
109
+ default:
110
+ return undefined;
111
+ }
112
+ }
113
+ /**
114
+ * Resolve task.* variables
115
+ */
116
+ function resolveTaskVariable(path, task) {
117
+ if (!task)
118
+ return undefined;
119
+ const key = path[0];
120
+ switch (key) {
121
+ case 'id':
122
+ return task.id;
123
+ case 'title':
124
+ return task.title;
125
+ case 'status':
126
+ return task.status;
127
+ case 'section':
128
+ return task.section ?? undefined;
129
+ case 'sectionId':
130
+ return task.sectionId ?? undefined;
131
+ default:
132
+ return undefined;
133
+ }
134
+ }
135
+ /**
136
+ * Resolve section.* variables
137
+ */
138
+ function resolveSectionVariable(path, section) {
139
+ if (!section)
140
+ return undefined;
141
+ const key = path[0];
142
+ switch (key) {
143
+ case 'id':
144
+ return section.id;
145
+ case 'name':
146
+ return section.name;
147
+ default:
148
+ return undefined;
149
+ }
150
+ }
151
+ /**
152
+ * Resolve project.* variables
153
+ */
154
+ function resolveProjectVariable(path, project) {
155
+ if (!project)
156
+ return undefined;
157
+ const key = path[0];
158
+ switch (key) {
159
+ case 'name':
160
+ return project.name;
161
+ case 'path':
162
+ return project.path;
163
+ default:
164
+ return undefined;
165
+ }
166
+ }
167
+ /**
168
+ * Resolve health.* variables
169
+ */
170
+ function resolveHealthVariable(path, health) {
171
+ if (!health)
172
+ return undefined;
173
+ const key = path[0];
174
+ switch (key) {
175
+ case 'score':
176
+ return health.score;
177
+ case 'previousScore':
178
+ return health.previousScore;
179
+ case 'status':
180
+ return health.status;
181
+ default:
182
+ return undefined;
183
+ }
184
+ }
185
+ /**
186
+ * Resolve dispute.* variables
187
+ */
188
+ function resolveDisputeVariable(path, dispute) {
189
+ if (!dispute)
190
+ return undefined;
191
+ const key = path[0];
192
+ switch (key) {
193
+ case 'id':
194
+ return dispute.id;
195
+ case 'taskId':
196
+ return dispute.taskId;
197
+ case 'type':
198
+ return dispute.type;
199
+ case 'status':
200
+ return dispute.status;
201
+ default:
202
+ return undefined;
203
+ }
204
+ }
205
+ /**
206
+ * Create template context from hook payload
207
+ *
208
+ * @param payload - Hook event payload
209
+ * @returns Template context for variable resolution
210
+ */
211
+ function createTemplateContext(payload) {
212
+ const context = {
213
+ event: payload.event,
214
+ timestamp: payload.timestamp,
215
+ project: payload.project,
216
+ };
217
+ // Add event-specific data
218
+ switch (payload.event) {
219
+ case 'task.created':
220
+ case 'task.updated':
221
+ case 'task.completed':
222
+ case 'task.failed':
223
+ context.task = {
224
+ id: payload.task.id,
225
+ title: payload.task.title,
226
+ status: payload.task.status,
227
+ section: payload.task.section,
228
+ sectionId: payload.task.sectionId,
229
+ };
230
+ break;
231
+ case 'section.completed':
232
+ context.section = {
233
+ id: payload.section.id,
234
+ name: payload.section.name,
235
+ };
236
+ break;
237
+ case 'health.changed':
238
+ case 'health.critical':
239
+ context.health = {
240
+ score: payload.health.score,
241
+ previousScore: payload.health.previousScore,
242
+ status: payload.health.status,
243
+ };
244
+ break;
245
+ case 'dispute.created':
246
+ case 'dispute.resolved':
247
+ context.dispute = {
248
+ id: payload.dispute.id,
249
+ taskId: payload.dispute.taskId,
250
+ type: payload.dispute.type,
251
+ status: payload.dispute.status,
252
+ };
253
+ context.task = {
254
+ id: payload.task.id,
255
+ title: payload.task.title,
256
+ status: payload.task.status,
257
+ section: payload.task.section,
258
+ sectionId: payload.task.sectionId,
259
+ };
260
+ break;
261
+ }
262
+ return context;
263
+ }
264
+ /**
265
+ * Get all available variables for a given event type
266
+ *
267
+ * @param event - Event name
268
+ * @returns List of available variable paths
269
+ */
270
+ function getAvailableVariables(event) {
271
+ const baseVars = ['event', 'timestamp', 'project.name', 'project.path'];
272
+ if (event.startsWith('task.')) {
273
+ return [
274
+ ...baseVars,
275
+ 'task.id',
276
+ 'task.title',
277
+ 'task.status',
278
+ 'task.section',
279
+ 'task.sectionId',
280
+ ];
281
+ }
282
+ if (event === 'section.completed') {
283
+ return [...baseVars, 'section.id', 'section.name'];
284
+ }
285
+ if (event === 'project.completed') {
286
+ return baseVars;
287
+ }
288
+ if (event.startsWith('health.')) {
289
+ return [...baseVars, 'health.score', 'health.previousScore', 'health.status'];
290
+ }
291
+ if (event.startsWith('dispute.')) {
292
+ return [
293
+ ...baseVars,
294
+ 'dispute.id',
295
+ 'dispute.taskId',
296
+ 'dispute.type',
297
+ 'dispute.status',
298
+ 'task.id',
299
+ 'task.title',
300
+ 'task.status',
301
+ ];
302
+ }
303
+ return baseVars;
304
+ }
305
+ /**
306
+ * Validate that all template variables in a string are valid for the event
307
+ *
308
+ * @param template - Template string
309
+ * @param event - Event name
310
+ * @returns Validation result with invalid variables
311
+ */
312
+ function validateTemplate(template, event) {
313
+ const availableVars = getAvailableVariables(event);
314
+ const invalidVars = [];
315
+ const matches = template.matchAll(TEMPLATE_VAR_PATTERN);
316
+ for (const match of matches) {
317
+ const varPath = match[1].trim();
318
+ if (!availableVars.includes(varPath)) {
319
+ invalidVars.push(varPath);
320
+ }
321
+ }
322
+ return {
323
+ valid: invalidVars.length === 0,
324
+ invalidVars,
325
+ };
326
+ }
327
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/hooks/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Webhook Hook Runner
3
+ *
4
+ * Sends HTTP requests as hooks with retry support.
5
+ * Handles templated URLs, headers, and body content.
6
+ */
7
+ import type { HookPayload } from './payload.js';
8
+ /**
9
+ * HTTP methods supported by webhooks
10
+ */
11
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
12
+ /**
13
+ * Webhook hook configuration
14
+ */
15
+ export interface WebhookHookConfig {
16
+ /** Hook name (for logging) */
17
+ name: string;
18
+ /** Webhook URL (supports templates) */
19
+ url: string;
20
+ /** HTTP method (default POST) */
21
+ method?: HttpMethod;
22
+ /** HTTP headers (supports templates and env vars) */
23
+ headers?: Record<string, string>;
24
+ /** Request body (supports templates and env vars) */
25
+ body?: Record<string, unknown> | string;
26
+ /** Timeout in seconds (default 30) */
27
+ timeout?: number;
28
+ /** Number of retries on failure (default 0) */
29
+ retry?: number;
30
+ }
31
+ /**
32
+ * Webhook execution result
33
+ */
34
+ export interface WebhookResult {
35
+ /** Whether execution was successful */
36
+ success: boolean;
37
+ /** HTTP status code */
38
+ statusCode: number | null;
39
+ /** Response body */
40
+ responseBody: string;
41
+ /** Execution time in milliseconds */
42
+ duration: number;
43
+ /** Number of retry attempts made */
44
+ retries: number;
45
+ /** Error message if failed */
46
+ error?: string;
47
+ /** Whether request timed out */
48
+ timedOut?: boolean;
49
+ }
50
+ /**
51
+ * Parse timeout string (e.g., "30s", "5m") to milliseconds
52
+ */
53
+ export declare function parseTimeout(timeout: string | number | undefined): number;
54
+ /**
55
+ * Execute a webhook hook
56
+ *
57
+ * @param config - Webhook hook configuration
58
+ * @param payload - Hook event payload for template resolution
59
+ * @returns Promise resolving to webhook result
60
+ */
61
+ export declare function executeWebhook(config: WebhookHookConfig, payload: HookPayload): Promise<WebhookResult>;
62
+ /**
63
+ * Validate webhook hook configuration
64
+ */
65
+ export declare function validateWebhookConfig(config: WebhookHookConfig): {
66
+ valid: boolean;
67
+ errors: string[];
68
+ };
69
+ //# sourceMappingURL=webhook-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-runner.d.ts","sourceRoot":"","sources":["../../src/hooks/webhook-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IACxC,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CA2BzE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CA6CxB;AAyGD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAkCA"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * Webhook Hook Runner
4
+ *
5
+ * Sends HTTP requests as hooks with retry support.
6
+ * Handles templated URLs, headers, and body content.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parseTimeout = parseTimeout;
10
+ exports.executeWebhook = executeWebhook;
11
+ exports.validateWebhookConfig = validateWebhookConfig;
12
+ const templates_js_1 = require("./templates.js");
13
+ /**
14
+ * Parse timeout string (e.g., "30s", "5m") to milliseconds
15
+ */
16
+ function parseTimeout(timeout) {
17
+ if (timeout === undefined) {
18
+ return 30000; // 30 seconds default
19
+ }
20
+ if (typeof timeout === 'number') {
21
+ return timeout * 1000; // Convert seconds to ms
22
+ }
23
+ const match = timeout.match(/^(\d+)(s|m|h)?$/);
24
+ if (!match) {
25
+ throw new Error(`Invalid timeout format: ${timeout}. Use format like "30s", "5m", "1h"`);
26
+ }
27
+ const value = parseInt(match[1], 10);
28
+ const unit = match[2] || 's';
29
+ switch (unit) {
30
+ case 's':
31
+ return value * 1000;
32
+ case 'm':
33
+ return value * 60 * 1000;
34
+ case 'h':
35
+ return value * 60 * 60 * 1000;
36
+ default:
37
+ return 30000;
38
+ }
39
+ }
40
+ /**
41
+ * Execute a webhook hook
42
+ *
43
+ * @param config - Webhook hook configuration
44
+ * @param payload - Hook event payload for template resolution
45
+ * @returns Promise resolving to webhook result
46
+ */
47
+ async function executeWebhook(config, payload) {
48
+ const startTime = Date.now();
49
+ const maxRetries = config.retry ?? 0;
50
+ let lastError;
51
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
52
+ try {
53
+ const result = await executeWebhookOnce(config, payload, startTime);
54
+ // Success - return result
55
+ if (result.success) {
56
+ return { ...result, retries: attempt };
57
+ }
58
+ // Failed but might retry
59
+ lastError = result.error;
60
+ // Don't retry on client errors (4xx)
61
+ if (result.statusCode && result.statusCode >= 400 && result.statusCode < 500) {
62
+ return { ...result, retries: attempt };
63
+ }
64
+ // Wait before retry (exponential backoff)
65
+ if (attempt < maxRetries) {
66
+ await sleep(Math.min(1000 * Math.pow(2, attempt), 10000));
67
+ }
68
+ }
69
+ catch (error) {
70
+ lastError = error instanceof Error ? error.message : String(error);
71
+ // Wait before retry
72
+ if (attempt < maxRetries) {
73
+ await sleep(Math.min(1000 * Math.pow(2, attempt), 10000));
74
+ }
75
+ }
76
+ }
77
+ // All retries exhausted
78
+ return {
79
+ success: false,
80
+ statusCode: null,
81
+ responseBody: '',
82
+ duration: Date.now() - startTime,
83
+ retries: maxRetries,
84
+ error: lastError || 'Unknown error',
85
+ };
86
+ }
87
+ /**
88
+ * Execute webhook once (single attempt)
89
+ */
90
+ async function executeWebhookOnce(config, payload, startTime) {
91
+ try {
92
+ // Create template context from payload
93
+ const context = (0, templates_js_1.createTemplateContext)(payload);
94
+ // Parse URL (resolve templates and env vars)
95
+ const url = (0, templates_js_1.parseTemplate)(config.url, context);
96
+ // Parse headers
97
+ const headers = config.headers
98
+ ? (0, templates_js_1.parseTemplateObject)(config.headers, context)
99
+ : {};
100
+ // Parse body
101
+ let body;
102
+ if (config.body) {
103
+ if (typeof config.body === 'string') {
104
+ body = (0, templates_js_1.parseTemplate)(config.body, context);
105
+ }
106
+ else {
107
+ const parsedBody = (0, templates_js_1.parseTemplateObject)(config.body, context);
108
+ body = JSON.stringify(parsedBody);
109
+ // Add content-type header if not present
110
+ if (!headers['Content-Type'] && !headers['content-type']) {
111
+ headers['Content-Type'] = 'application/json';
112
+ }
113
+ }
114
+ }
115
+ // Parse timeout
116
+ const timeoutMs = parseTimeout(config.timeout);
117
+ // Make request with timeout
118
+ const controller = new AbortController();
119
+ const timeoutHandle = setTimeout(() => controller.abort(), timeoutMs);
120
+ try {
121
+ const response = await fetch(url, {
122
+ method: config.method || 'POST',
123
+ headers,
124
+ body,
125
+ signal: controller.signal,
126
+ });
127
+ clearTimeout(timeoutHandle);
128
+ const responseBody = await response.text();
129
+ const success = response.ok; // 2xx status codes
130
+ return {
131
+ success,
132
+ statusCode: response.status,
133
+ responseBody,
134
+ duration: Date.now() - startTime,
135
+ retries: 0,
136
+ error: !success ? `HTTP ${response.status}: ${response.statusText}` : undefined,
137
+ };
138
+ }
139
+ catch (error) {
140
+ clearTimeout(timeoutHandle);
141
+ // Check if it was a timeout
142
+ const timedOut = error instanceof Error && error.name === 'AbortError';
143
+ return {
144
+ success: false,
145
+ statusCode: null,
146
+ responseBody: '',
147
+ duration: Date.now() - startTime,
148
+ retries: 0,
149
+ timedOut,
150
+ error: timedOut
151
+ ? `Request timed out after ${timeoutMs}ms`
152
+ : error instanceof Error
153
+ ? error.message
154
+ : String(error),
155
+ };
156
+ }
157
+ }
158
+ catch (error) {
159
+ return {
160
+ success: false,
161
+ statusCode: null,
162
+ responseBody: '',
163
+ duration: Date.now() - startTime,
164
+ retries: 0,
165
+ error: error instanceof Error ? error.message : String(error),
166
+ };
167
+ }
168
+ }
169
+ /**
170
+ * Sleep for specified milliseconds
171
+ */
172
+ function sleep(ms) {
173
+ return new Promise((resolve) => setTimeout(resolve, ms));
174
+ }
175
+ /**
176
+ * Validate webhook hook configuration
177
+ */
178
+ function validateWebhookConfig(config) {
179
+ const errors = [];
180
+ if (!config.name) {
181
+ errors.push('Missing required field: name');
182
+ }
183
+ if (!config.url) {
184
+ errors.push('Missing required field: url');
185
+ }
186
+ if (config.method) {
187
+ const validMethods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
188
+ if (!validMethods.includes(config.method)) {
189
+ errors.push(`Invalid HTTP method: ${config.method}. Must be one of: ${validMethods.join(', ')}`);
190
+ }
191
+ }
192
+ if (config.timeout !== undefined) {
193
+ try {
194
+ parseTimeout(config.timeout);
195
+ }
196
+ catch (error) {
197
+ errors.push(error instanceof Error ? error.message : String(error));
198
+ }
199
+ }
200
+ if (config.retry !== undefined && (config.retry < 0 || config.retry > 10)) {
201
+ errors.push('Retry count must be between 0 and 10');
202
+ }
203
+ return {
204
+ valid: errors.length === 0,
205
+ errors,
206
+ };
207
+ }
208
+ //# sourceMappingURL=webhook-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-runner.js","sourceRoot":"","sources":["../../src/hooks/webhook-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Steroids CLI - Automated task execution system
4
+ * Entry point for the CLI
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}