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,179 @@
1
+ "use strict";
2
+ /**
3
+ * Hook Integration
4
+ *
5
+ * Helper functions to trigger hooks from CLI commands.
6
+ * Loads and merges global/project hooks, then executes them.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.triggerTaskCreated = triggerTaskCreated;
10
+ exports.triggerTaskUpdated = triggerTaskUpdated;
11
+ exports.triggerTaskCompleted = triggerTaskCompleted;
12
+ exports.triggerTaskFailed = triggerTaskFailed;
13
+ exports.triggerSectionCompleted = triggerSectionCompleted;
14
+ exports.triggerProjectCompleted = triggerProjectCompleted;
15
+ exports.shouldSkipHooks = shouldSkipHooks;
16
+ exports.triggerHooksSafely = triggerHooksSafely;
17
+ const node_path_1 = require("node:path");
18
+ const loader_js_1 = require("../config/loader.js");
19
+ const merge_js_1 = require("./merge.js");
20
+ const orchestrator_js_1 = require("./orchestrator.js");
21
+ const payload_js_1 = require("./payload.js");
22
+ /**
23
+ * Load and merge hooks from global and project configs
24
+ */
25
+ async function loadHooks(projectPath) {
26
+ const globalConfigPath = (0, loader_js_1.getGlobalConfigPath)();
27
+ const projectConfigPath = (0, loader_js_1.getProjectConfigPath)(projectPath);
28
+ let globalHooks = [];
29
+ let projectHooks = [];
30
+ try {
31
+ const globalConfig = (0, loader_js_1.loadConfigFile)(globalConfigPath);
32
+ globalHooks = globalConfig.hooks || [];
33
+ }
34
+ catch {
35
+ // Global config might not exist
36
+ }
37
+ try {
38
+ const projectConfig = (0, loader_js_1.loadConfigFile)(projectConfigPath);
39
+ projectHooks = projectConfig.hooks || [];
40
+ }
41
+ catch {
42
+ // Project config might not exist
43
+ }
44
+ return (0, merge_js_1.mergeHooks)(globalHooks, projectHooks);
45
+ }
46
+ /**
47
+ * Get project context for current directory
48
+ */
49
+ function getProjectContext(projectPath) {
50
+ const path = projectPath || process.cwd();
51
+ return {
52
+ name: (0, node_path_1.basename)(path),
53
+ path,
54
+ };
55
+ }
56
+ /**
57
+ * Convert database task to payload task data
58
+ */
59
+ function taskToPayloadData(task) {
60
+ return {
61
+ id: task.id,
62
+ title: task.title,
63
+ status: task.status,
64
+ section: null, // Task interface doesn't have section_name
65
+ sectionId: task.section_id || null,
66
+ sourceFile: task.source_file || null,
67
+ rejectionCount: task.rejection_count || 0,
68
+ };
69
+ }
70
+ /**
71
+ * Execute hooks for an event
72
+ */
73
+ async function executeHooks(event, payload, options = {}) {
74
+ const hooks = await loadHooks(payload.project.path);
75
+ const orchestrator = new orchestrator_js_1.HookOrchestrator(hooks, {
76
+ verbose: options.verbose ?? false,
77
+ continueOnError: options.continueOnError ?? true,
78
+ });
79
+ return await orchestrator.executeHooksForEvent(event, payload);
80
+ }
81
+ /**
82
+ * Trigger task.created hooks
83
+ */
84
+ async function triggerTaskCreated(task, options = {}) {
85
+ const project = getProjectContext(options.projectPath);
86
+ const taskData = taskToPayloadData(task);
87
+ const payload = (0, payload_js_1.createTaskCreatedPayload)(taskData, project);
88
+ return await executeHooks('task.created', payload, options);
89
+ }
90
+ /**
91
+ * Trigger task.updated hooks
92
+ */
93
+ async function triggerTaskUpdated(task, previousStatus, options = {}) {
94
+ const project = getProjectContext(options.projectPath);
95
+ const taskData = taskToPayloadData(task);
96
+ if (previousStatus) {
97
+ taskData.previousStatus = previousStatus;
98
+ }
99
+ const payload = (0, payload_js_1.createTaskUpdatedPayload)(taskData, project);
100
+ return await executeHooks('task.updated', payload, options);
101
+ }
102
+ /**
103
+ * Trigger task.completed hooks
104
+ */
105
+ async function triggerTaskCompleted(task, options = {}) {
106
+ const project = getProjectContext(options.projectPath);
107
+ const taskData = taskToPayloadData(task);
108
+ const payload = (0, payload_js_1.createTaskCompletedPayload)(taskData, project);
109
+ return await executeHooks('task.completed', payload, options);
110
+ }
111
+ /**
112
+ * Trigger task.failed hooks
113
+ */
114
+ async function triggerTaskFailed(task, maxRejections, options = {}) {
115
+ const project = getProjectContext(options.projectPath);
116
+ const taskData = taskToPayloadData(task);
117
+ const payload = (0, payload_js_1.createTaskFailedPayload)(taskData, project, maxRejections);
118
+ return await executeHooks('task.failed', payload, options);
119
+ }
120
+ /**
121
+ * Trigger section.completed hooks
122
+ */
123
+ async function triggerSectionCompleted(section, tasks, options = {}) {
124
+ const project = getProjectContext(options.projectPath);
125
+ const payload = (0, payload_js_1.createSectionCompletedPayload)(section, tasks, project);
126
+ return await executeHooks('section.completed', payload, options);
127
+ }
128
+ /**
129
+ * Trigger project.completed hooks
130
+ */
131
+ async function triggerProjectCompleted(summary, options = {}) {
132
+ const project = getProjectContext(options.projectPath);
133
+ const payload = (0, payload_js_1.createProjectCompletedPayload)(project, summary);
134
+ return await executeHooks('project.completed', payload, options);
135
+ }
136
+ /**
137
+ * Check if hooks should be skipped
138
+ *
139
+ * Checks environment variable and CLI flags
140
+ */
141
+ function shouldSkipHooks(flags) {
142
+ // Check flag
143
+ if (flags?.noHooks) {
144
+ return true;
145
+ }
146
+ // Check environment variable
147
+ const envVar = process.env.STEROIDS_NO_HOOKS;
148
+ if (envVar && (envVar === '1' || envVar.toLowerCase() === 'true')) {
149
+ return true;
150
+ }
151
+ return false;
152
+ }
153
+ /**
154
+ * Silently trigger hooks (don't throw on failure)
155
+ *
156
+ * Logs errors but doesn't block the main operation
157
+ */
158
+ async function triggerHooksSafely(triggerFn, options = {}) {
159
+ try {
160
+ const results = await triggerFn();
161
+ // Log failures if verbose
162
+ if (options.verbose) {
163
+ const failed = results.filter((r) => !r.success);
164
+ if (failed.length > 0) {
165
+ console.error(`Warning: ${failed.length} hook(s) failed:`);
166
+ for (const result of failed) {
167
+ console.error(` - ${result.hookName}: ${result.error}`);
168
+ }
169
+ }
170
+ }
171
+ }
172
+ catch (error) {
173
+ // Silently fail - don't block main operation
174
+ if (options.verbose) {
175
+ console.error(`Warning: Hook execution failed: ${error instanceof Error ? error.message : String(error)}`);
176
+ }
177
+ }
178
+ }
179
+ //# sourceMappingURL=integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.js","sourceRoot":"","sources":["../../src/hooks/integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Hook Configuration Merge
3
+ *
4
+ * Merges global hooks (~/.steroids/config.yaml) with project hooks (.steroids/config.yaml).
5
+ * Project hooks can override global hooks by name or disable them with enabled: false.
6
+ */
7
+ import type { HookEvent } from './events.js';
8
+ import type { ScriptHookConfig } from './script-runner.js';
9
+ import type { WebhookHookConfig } from './webhook-runner.js';
10
+ /**
11
+ * Hook type discriminator
12
+ */
13
+ export type HookType = 'script' | 'webhook';
14
+ /**
15
+ * Base hook configuration (common fields)
16
+ */
17
+ export interface BaseHookConfig {
18
+ /** Unique hook name */
19
+ name: string;
20
+ /** Event that triggers this hook */
21
+ event: HookEvent;
22
+ /** Hook type */
23
+ type: HookType;
24
+ /** Enable/disable this hook */
25
+ enabled?: boolean;
26
+ }
27
+ /**
28
+ * Script hook configuration (from config.yaml)
29
+ */
30
+ export interface ScriptHookYaml extends BaseHookConfig {
31
+ type: 'script';
32
+ command: string;
33
+ args?: string[];
34
+ cwd?: string;
35
+ timeout?: number | string;
36
+ async?: boolean;
37
+ }
38
+ /**
39
+ * Webhook hook configuration (from config.yaml)
40
+ */
41
+ export interface WebhookHookYaml extends BaseHookConfig {
42
+ type: 'webhook';
43
+ url: string;
44
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
45
+ headers?: Record<string, string>;
46
+ body?: Record<string, unknown> | string;
47
+ timeout?: number | string;
48
+ retry?: number;
49
+ }
50
+ /**
51
+ * Union of all hook configurations
52
+ */
53
+ export type HookConfig = ScriptHookYaml | WebhookHookYaml;
54
+ /**
55
+ * Merge global and project hooks
56
+ *
57
+ * Rules:
58
+ * 1. Project hooks with same name as global hooks override them completely
59
+ * 2. Project hooks with enabled: false disable global hooks with same name
60
+ * 3. All other hooks are included
61
+ *
62
+ * @param globalHooks - Hooks from ~/.steroids/config.yaml
63
+ * @param projectHooks - Hooks from .steroids/config.yaml
64
+ * @returns Merged list of enabled hooks
65
+ */
66
+ export declare function mergeHooks(globalHooks?: HookConfig[], projectHooks?: HookConfig[]): HookConfig[];
67
+ /**
68
+ * Filter hooks by event
69
+ *
70
+ * @param hooks - List of hooks
71
+ * @param event - Event name to filter by
72
+ * @returns Hooks matching the event
73
+ */
74
+ export declare function filterHooksByEvent(hooks: HookConfig[], event: HookEvent): HookConfig[];
75
+ /**
76
+ * Find hook by name
77
+ *
78
+ * @param hooks - List of hooks
79
+ * @param name - Hook name
80
+ * @returns Hook if found, undefined otherwise
81
+ */
82
+ export declare function findHookByName(hooks: HookConfig[], name: string): HookConfig | undefined;
83
+ /**
84
+ * Validate hook configuration
85
+ *
86
+ * @param hook - Hook configuration
87
+ * @returns Validation result with errors
88
+ */
89
+ export declare function validateHook(hook: HookConfig): {
90
+ valid: boolean;
91
+ errors: string[];
92
+ };
93
+ /**
94
+ * Convert script hook config from YAML format to runner format
95
+ */
96
+ export declare function toScriptRunnerConfig(hook: ScriptHookYaml): ScriptHookConfig;
97
+ /**
98
+ * Convert webhook hook config from YAML format to runner format
99
+ */
100
+ export declare function toWebhookRunnerConfig(hook: WebhookHookYaml): WebhookHookConfig;
101
+ /**
102
+ * Group hooks by event
103
+ *
104
+ * @param hooks - List of hooks
105
+ * @returns Map of event -> hooks
106
+ */
107
+ export declare function groupHooksByEvent(hooks: HookConfig[]): Map<HookEvent, HookConfig[]>;
108
+ /**
109
+ * Get all unique events that have hooks registered
110
+ *
111
+ * @param hooks - List of hooks
112
+ * @returns Array of unique event names
113
+ */
114
+ export declare function getEventsWithHooks(hooks: HookConfig[]): HookEvent[];
115
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/hooks/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,gBAAgB;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,eAAe,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,WAAW,GAAE,UAAU,EAAO,EAC9B,YAAY,GAAE,UAAU,EAAO,GAC9B,UAAU,EAAE,CAsBd;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,EAAE,CAEtF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA+BnF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAS3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAU9E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAYnF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAUnE"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ /**
3
+ * Hook Configuration Merge
4
+ *
5
+ * Merges global hooks (~/.steroids/config.yaml) with project hooks (.steroids/config.yaml).
6
+ * Project hooks can override global hooks by name or disable them with enabled: false.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.mergeHooks = mergeHooks;
10
+ exports.filterHooksByEvent = filterHooksByEvent;
11
+ exports.findHookByName = findHookByName;
12
+ exports.validateHook = validateHook;
13
+ exports.toScriptRunnerConfig = toScriptRunnerConfig;
14
+ exports.toWebhookRunnerConfig = toWebhookRunnerConfig;
15
+ exports.groupHooksByEvent = groupHooksByEvent;
16
+ exports.getEventsWithHooks = getEventsWithHooks;
17
+ /**
18
+ * Merge global and project hooks
19
+ *
20
+ * Rules:
21
+ * 1. Project hooks with same name as global hooks override them completely
22
+ * 2. Project hooks with enabled: false disable global hooks with same name
23
+ * 3. All other hooks are included
24
+ *
25
+ * @param globalHooks - Hooks from ~/.steroids/config.yaml
26
+ * @param projectHooks - Hooks from .steroids/config.yaml
27
+ * @returns Merged list of enabled hooks
28
+ */
29
+ function mergeHooks(globalHooks = [], projectHooks = []) {
30
+ const merged = new Map();
31
+ // Add all global hooks first
32
+ for (const hook of globalHooks) {
33
+ if (hook.enabled !== false) {
34
+ merged.set(hook.name, hook);
35
+ }
36
+ }
37
+ // Process project hooks
38
+ for (const hook of projectHooks) {
39
+ if (hook.enabled === false) {
40
+ // Explicitly disabled - remove from merged
41
+ merged.delete(hook.name);
42
+ }
43
+ else {
44
+ // Override global hook with same name, or add new hook
45
+ merged.set(hook.name, hook);
46
+ }
47
+ }
48
+ return Array.from(merged.values());
49
+ }
50
+ /**
51
+ * Filter hooks by event
52
+ *
53
+ * @param hooks - List of hooks
54
+ * @param event - Event name to filter by
55
+ * @returns Hooks matching the event
56
+ */
57
+ function filterHooksByEvent(hooks, event) {
58
+ return hooks.filter((hook) => hook.event === event && hook.enabled !== false);
59
+ }
60
+ /**
61
+ * Find hook by name
62
+ *
63
+ * @param hooks - List of hooks
64
+ * @param name - Hook name
65
+ * @returns Hook if found, undefined otherwise
66
+ */
67
+ function findHookByName(hooks, name) {
68
+ return hooks.find((hook) => hook.name === name);
69
+ }
70
+ /**
71
+ * Validate hook configuration
72
+ *
73
+ * @param hook - Hook configuration
74
+ * @returns Validation result with errors
75
+ */
76
+ function validateHook(hook) {
77
+ const errors = [];
78
+ if (!hook.name) {
79
+ errors.push('Missing required field: name');
80
+ }
81
+ if (!hook.event) {
82
+ errors.push('Missing required field: event');
83
+ }
84
+ if (!hook.type) {
85
+ errors.push('Missing required field: type');
86
+ }
87
+ if (hook.type === 'script') {
88
+ if (!hook.command) {
89
+ errors.push('Missing required field for script hook: command');
90
+ }
91
+ }
92
+ if (hook.type === 'webhook') {
93
+ if (!hook.url) {
94
+ errors.push('Missing required field for webhook hook: url');
95
+ }
96
+ }
97
+ return {
98
+ valid: errors.length === 0,
99
+ errors,
100
+ };
101
+ }
102
+ /**
103
+ * Convert script hook config from YAML format to runner format
104
+ */
105
+ function toScriptRunnerConfig(hook) {
106
+ return {
107
+ name: hook.name,
108
+ command: hook.command,
109
+ args: hook.args,
110
+ cwd: hook.cwd,
111
+ timeout: hook.timeout,
112
+ async: hook.async,
113
+ };
114
+ }
115
+ /**
116
+ * Convert webhook hook config from YAML format to runner format
117
+ */
118
+ function toWebhookRunnerConfig(hook) {
119
+ return {
120
+ name: hook.name,
121
+ url: hook.url,
122
+ method: hook.method,
123
+ headers: hook.headers,
124
+ body: hook.body,
125
+ timeout: hook.timeout,
126
+ retry: hook.retry,
127
+ };
128
+ }
129
+ /**
130
+ * Group hooks by event
131
+ *
132
+ * @param hooks - List of hooks
133
+ * @returns Map of event -> hooks
134
+ */
135
+ function groupHooksByEvent(hooks) {
136
+ const grouped = new Map();
137
+ for (const hook of hooks) {
138
+ if (hook.enabled === false)
139
+ continue;
140
+ const existing = grouped.get(hook.event) || [];
141
+ existing.push(hook);
142
+ grouped.set(hook.event, existing);
143
+ }
144
+ return grouped;
145
+ }
146
+ /**
147
+ * Get all unique events that have hooks registered
148
+ *
149
+ * @param hooks - List of hooks
150
+ * @returns Array of unique event names
151
+ */
152
+ function getEventsWithHooks(hooks) {
153
+ const events = new Set();
154
+ for (const hook of hooks) {
155
+ if (hook.enabled !== false) {
156
+ events.add(hook.event);
157
+ }
158
+ }
159
+ return Array.from(events);
160
+ }
161
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/hooks/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Hook Orchestrator
3
+ *
4
+ * Coordinates hook execution by:
5
+ * 1. Loading hooks from config
6
+ * 2. Matching events to hooks
7
+ * 3. Executing matching hooks (script or webhook)
8
+ * 4. Logging execution results
9
+ * 5. Handling failures gracefully (non-blocking)
10
+ */
11
+ import type { HookEvent } from './events.js';
12
+ import type { HookPayload } from './payload.js';
13
+ import type { HookConfig } from './merge.js';
14
+ import { type ScriptResult } from './script-runner.js';
15
+ import { type WebhookResult } from './webhook-runner.js';
16
+ /**
17
+ * Hook execution result
18
+ */
19
+ export interface HookExecutionResult {
20
+ /** Hook name */
21
+ hookName: string;
22
+ /** Hook type */
23
+ hookType: 'script' | 'webhook';
24
+ /** Whether execution succeeded */
25
+ success: boolean;
26
+ /** Execution duration in milliseconds */
27
+ duration: number;
28
+ /** Error message if failed */
29
+ error?: string;
30
+ /** Script-specific result */
31
+ scriptResult?: ScriptResult;
32
+ /** Webhook-specific result */
33
+ webhookResult?: WebhookResult;
34
+ }
35
+ /**
36
+ * Hook orchestrator configuration
37
+ */
38
+ export interface OrchestratorConfig {
39
+ /** Whether to log hook execution details */
40
+ verbose?: boolean;
41
+ /** Whether to continue on hook failure (default true) */
42
+ continueOnError?: boolean;
43
+ }
44
+ /**
45
+ * Hook Orchestrator
46
+ *
47
+ * Manages hook lifecycle and execution
48
+ */
49
+ export declare class HookOrchestrator {
50
+ private hooks;
51
+ private config;
52
+ constructor(hooks?: HookConfig[], config?: OrchestratorConfig);
53
+ /**
54
+ * Load hooks from configuration
55
+ */
56
+ setHooks(hooks: HookConfig[]): void;
57
+ /**
58
+ * Get all loaded hooks
59
+ */
60
+ getHooks(): HookConfig[];
61
+ /**
62
+ * Get hooks for a specific event
63
+ */
64
+ getHooksForEvent(event: HookEvent): HookConfig[];
65
+ /**
66
+ * Execute all hooks for an event
67
+ *
68
+ * @param event - Event name
69
+ * @param payload - Event payload
70
+ * @returns Array of execution results
71
+ */
72
+ executeHooksForEvent(event: HookEvent, payload: HookPayload): Promise<HookExecutionResult[]>;
73
+ /**
74
+ * Execute a single hook
75
+ */
76
+ private executeHook;
77
+ /**
78
+ * Execute a script hook
79
+ */
80
+ private executeScriptHook;
81
+ /**
82
+ * Execute a webhook hook
83
+ */
84
+ private executeWebhookHook;
85
+ /**
86
+ * Validate all loaded hooks
87
+ *
88
+ * @returns Validation results for each hook
89
+ */
90
+ validateAllHooks(): Array<{
91
+ hook: string;
92
+ valid: boolean;
93
+ errors: string[];
94
+ }>;
95
+ /**
96
+ * Get statistics about loaded hooks
97
+ */
98
+ getStats(): {
99
+ total: number;
100
+ enabled: number;
101
+ disabled: number;
102
+ byType: Record<string, number>;
103
+ byEvent: Record<string, number>;
104
+ };
105
+ }
106
+ /**
107
+ * Create a hook orchestrator from global and project hooks
108
+ *
109
+ * @param globalHooks - Hooks from ~/.steroids/config.yaml
110
+ * @param projectHooks - Hooks from .steroids/config.yaml
111
+ * @param config - Orchestrator configuration
112
+ * @returns Configured hook orchestrator
113
+ */
114
+ export declare function createOrchestrator(globalHooks: HookConfig[], projectHooks: HookConfig[], config?: OrchestratorConfig): HookOrchestrator;
115
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/hooks/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAmC,MAAM,YAAY,CAAC;AAO9E,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8BAA8B;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,KAAK,GAAE,UAAU,EAAO,EAAE,MAAM,GAAE,kBAAuB;IAQrE;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAInC;;OAEG;IACH,QAAQ,IAAI,UAAU,EAAE;IAIxB;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,EAAE;IAIhD;;;;;;OAMG;IACG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA4ElG;;OAEG;YACW,WAAW;IAkBzB;;OAEG;YACW,iBAAiB;IAiB/B;;OAEG;YACW,kBAAkB;IAiBhC;;;;OAIG;IACH,gBAAgB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAW7E;;OAEG;IACH,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC;CAsBF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,UAAU,EAAE,EACzB,YAAY,EAAE,UAAU,EAAE,EAC1B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,gBAAgB,CAIlB"}