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,267 @@
1
+ "use strict";
2
+ /**
3
+ * Hook Payload Schemas
4
+ *
5
+ * Defines the payload structures for each hook event type.
6
+ * Payloads contain all context needed by hook handlers.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createTaskCreatedPayload = createTaskCreatedPayload;
10
+ exports.createTaskUpdatedPayload = createTaskUpdatedPayload;
11
+ exports.createTaskCompletedPayload = createTaskCompletedPayload;
12
+ exports.createTaskFailedPayload = createTaskFailedPayload;
13
+ exports.createSectionCompletedPayload = createSectionCompletedPayload;
14
+ exports.createProjectCompletedPayload = createProjectCompletedPayload;
15
+ exports.createHealthChangedPayload = createHealthChangedPayload;
16
+ exports.createHealthCriticalPayload = createHealthCriticalPayload;
17
+ exports.createDisputeCreatedPayload = createDisputeCreatedPayload;
18
+ exports.createDisputeResolvedPayload = createDisputeResolvedPayload;
19
+ exports.validatePayload = validatePayload;
20
+ // ============================================================================
21
+ // Payload Factory Functions
22
+ // ============================================================================
23
+ /**
24
+ * Create a base payload with common fields
25
+ */
26
+ function createBasePayload(event) {
27
+ return {
28
+ event,
29
+ timestamp: new Date().toISOString(),
30
+ };
31
+ }
32
+ /**
33
+ * Create a task.created payload
34
+ */
35
+ function createTaskCreatedPayload(task, project) {
36
+ return {
37
+ ...createBasePayload('task.created'),
38
+ task,
39
+ project,
40
+ };
41
+ }
42
+ /**
43
+ * Create a task.updated payload
44
+ */
45
+ function createTaskUpdatedPayload(task, project) {
46
+ return {
47
+ ...createBasePayload('task.updated'),
48
+ task,
49
+ project,
50
+ };
51
+ }
52
+ /**
53
+ * Create a task.completed payload
54
+ */
55
+ function createTaskCompletedPayload(task, project) {
56
+ return {
57
+ ...createBasePayload('task.completed'),
58
+ task,
59
+ project,
60
+ };
61
+ }
62
+ /**
63
+ * Create a task.failed payload
64
+ */
65
+ function createTaskFailedPayload(task, project, maxRejections) {
66
+ return {
67
+ ...createBasePayload('task.failed'),
68
+ task,
69
+ project,
70
+ maxRejections,
71
+ };
72
+ }
73
+ /**
74
+ * Create a section.completed payload
75
+ */
76
+ function createSectionCompletedPayload(section, tasks, project) {
77
+ return {
78
+ ...createBasePayload('section.completed'),
79
+ section,
80
+ tasks,
81
+ project,
82
+ };
83
+ }
84
+ /**
85
+ * Create a project.completed payload
86
+ */
87
+ function createProjectCompletedPayload(project, summary) {
88
+ return {
89
+ ...createBasePayload('project.completed'),
90
+ project,
91
+ summary,
92
+ };
93
+ }
94
+ /**
95
+ * Create a health.changed payload
96
+ */
97
+ function createHealthChangedPayload(project, health) {
98
+ return {
99
+ ...createBasePayload('health.changed'),
100
+ project,
101
+ health,
102
+ };
103
+ }
104
+ /**
105
+ * Create a health.critical payload
106
+ */
107
+ function createHealthCriticalPayload(project, health, threshold) {
108
+ return {
109
+ ...createBasePayload('health.critical'),
110
+ project,
111
+ health,
112
+ threshold,
113
+ };
114
+ }
115
+ /**
116
+ * Create a dispute.created payload
117
+ */
118
+ function createDisputeCreatedPayload(dispute, task, project) {
119
+ return {
120
+ ...createBasePayload('dispute.created'),
121
+ dispute,
122
+ task,
123
+ project,
124
+ };
125
+ }
126
+ /**
127
+ * Create a dispute.resolved payload
128
+ */
129
+ function createDisputeResolvedPayload(dispute, task, project) {
130
+ return {
131
+ ...createBasePayload('dispute.resolved'),
132
+ dispute,
133
+ task,
134
+ project,
135
+ };
136
+ }
137
+ // ============================================================================
138
+ // Payload Validation
139
+ // ============================================================================
140
+ /**
141
+ * Validate that a payload has required fields for its event type
142
+ */
143
+ function validatePayload(payload) {
144
+ const errors = [];
145
+ // Base validation
146
+ if (!payload.event) {
147
+ errors.push('Missing required field: event');
148
+ }
149
+ if (!payload.timestamp) {
150
+ errors.push('Missing required field: timestamp');
151
+ }
152
+ // Event-specific validation
153
+ switch (payload.event) {
154
+ case 'task.created':
155
+ case 'task.updated':
156
+ case 'task.completed':
157
+ case 'task.failed':
158
+ validateTaskPayload(payload, errors);
159
+ break;
160
+ case 'section.completed':
161
+ validateSectionPayload(payload, errors);
162
+ break;
163
+ case 'project.completed':
164
+ validateProjectPayload(payload, errors);
165
+ break;
166
+ case 'health.changed':
167
+ case 'health.critical':
168
+ validateHealthPayload(payload, errors);
169
+ break;
170
+ case 'dispute.created':
171
+ case 'dispute.resolved':
172
+ validateDisputePayload(payload, errors);
173
+ break;
174
+ }
175
+ return {
176
+ valid: errors.length === 0,
177
+ errors,
178
+ };
179
+ }
180
+ function validateTaskPayload(payload, errors) {
181
+ if (!payload.task) {
182
+ errors.push('Missing required field: task');
183
+ return;
184
+ }
185
+ if (!payload.task.id) {
186
+ errors.push('Missing required field: task.id');
187
+ }
188
+ if (!payload.task.title) {
189
+ errors.push('Missing required field: task.title');
190
+ }
191
+ if (!payload.task.status) {
192
+ errors.push('Missing required field: task.status');
193
+ }
194
+ if (!payload.project) {
195
+ errors.push('Missing required field: project');
196
+ }
197
+ }
198
+ function validateSectionPayload(payload, errors) {
199
+ if (!payload.section) {
200
+ errors.push('Missing required field: section');
201
+ return;
202
+ }
203
+ if (!payload.section.id) {
204
+ errors.push('Missing required field: section.id');
205
+ }
206
+ if (!payload.section.name) {
207
+ errors.push('Missing required field: section.name');
208
+ }
209
+ if (!payload.project) {
210
+ errors.push('Missing required field: project');
211
+ }
212
+ }
213
+ function validateProjectPayload(payload, errors) {
214
+ if (!payload.project) {
215
+ errors.push('Missing required field: project');
216
+ return;
217
+ }
218
+ if (!payload.project.name) {
219
+ errors.push('Missing required field: project.name');
220
+ }
221
+ if (!payload.project.path) {
222
+ errors.push('Missing required field: project.path');
223
+ }
224
+ if (!payload.summary) {
225
+ errors.push('Missing required field: summary');
226
+ }
227
+ }
228
+ function validateHealthPayload(payload, errors) {
229
+ if (!payload.health) {
230
+ errors.push('Missing required field: health');
231
+ return;
232
+ }
233
+ if (typeof payload.health.score !== 'number') {
234
+ errors.push('Missing or invalid field: health.score');
235
+ }
236
+ if (!payload.health.status) {
237
+ errors.push('Missing required field: health.status');
238
+ }
239
+ if (!payload.project) {
240
+ errors.push('Missing required field: project');
241
+ }
242
+ if (payload.event === 'health.critical') {
243
+ const criticalPayload = payload;
244
+ if (typeof criticalPayload.threshold !== 'number') {
245
+ errors.push('Missing required field: threshold');
246
+ }
247
+ }
248
+ }
249
+ function validateDisputePayload(payload, errors) {
250
+ if (!payload.dispute) {
251
+ errors.push('Missing required field: dispute');
252
+ return;
253
+ }
254
+ if (!payload.dispute.id) {
255
+ errors.push('Missing required field: dispute.id');
256
+ }
257
+ if (!payload.dispute.taskId) {
258
+ errors.push('Missing required field: dispute.taskId');
259
+ }
260
+ if (!payload.task) {
261
+ errors.push('Missing required field: task');
262
+ }
263
+ if (!payload.project) {
264
+ errors.push('Missing required field: project');
265
+ }
266
+ }
267
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/hooks/payload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Script Hook Runner
3
+ *
4
+ * Executes shell commands as hooks with timeout and async support.
5
+ * Handles templated arguments and environment variable resolution.
6
+ */
7
+ import type { HookPayload } from './payload.js';
8
+ /**
9
+ * Script hook configuration
10
+ */
11
+ export interface ScriptHookConfig {
12
+ /** Hook name (for logging) */
13
+ name: string;
14
+ /** Command to execute */
15
+ command: string;
16
+ /** Arguments (supports templates) */
17
+ args?: string[];
18
+ /** Working directory (defaults to project path) */
19
+ cwd?: string;
20
+ /** Timeout (e.g., "60s", "5m", "1h" or number in seconds) */
21
+ timeout?: string | number;
22
+ /** Run async without blocking (default false) */
23
+ async?: boolean;
24
+ }
25
+ /**
26
+ * Script execution result
27
+ */
28
+ export interface ScriptResult {
29
+ /** Whether execution was successful */
30
+ success: boolean;
31
+ /** Exit code */
32
+ exitCode: number | null;
33
+ /** Standard output */
34
+ stdout: string;
35
+ /** Standard error */
36
+ stderr: string;
37
+ /** Execution time in milliseconds */
38
+ duration: number;
39
+ /** Error message if failed */
40
+ error?: string;
41
+ /** Whether execution timed out */
42
+ timedOut?: boolean;
43
+ }
44
+ /**
45
+ * Parse timeout string (e.g., "60s", "5m") to milliseconds
46
+ */
47
+ export declare function parseTimeout(timeout: string | number | undefined): number;
48
+ /**
49
+ * Execute a script hook
50
+ *
51
+ * @param config - Script hook configuration
52
+ * @param payload - Hook event payload for template resolution
53
+ * @returns Promise resolving to script result
54
+ */
55
+ export declare function executeScript(config: ScriptHookConfig, payload: HookPayload): Promise<ScriptResult>;
56
+ /**
57
+ * Validate script hook configuration
58
+ */
59
+ export declare function validateScriptConfig(config: ScriptHookConfig): {
60
+ valid: boolean;
61
+ errors: string[];
62
+ };
63
+ //# sourceMappingURL=script-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-runner.d.ts","sourceRoot":"","sources":["../../src/hooks/script-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,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,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CA8CvB;AAiID;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG;IAC9D,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAuBA"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ /**
3
+ * Script Hook Runner
4
+ *
5
+ * Executes shell commands as hooks with timeout and async support.
6
+ * Handles templated arguments and environment variable resolution.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parseTimeout = parseTimeout;
10
+ exports.executeScript = executeScript;
11
+ exports.validateScriptConfig = validateScriptConfig;
12
+ const node_child_process_1 = require("node:child_process");
13
+ const templates_js_1 = require("./templates.js");
14
+ /**
15
+ * Parse timeout string (e.g., "60s", "5m") to milliseconds
16
+ */
17
+ function parseTimeout(timeout) {
18
+ if (timeout === undefined) {
19
+ return 60000; // 60 seconds default
20
+ }
21
+ if (typeof timeout === 'number') {
22
+ return timeout * 1000; // Convert seconds to ms
23
+ }
24
+ const match = timeout.match(/^(\d+)(s|m|h)?$/);
25
+ if (!match) {
26
+ throw new Error(`Invalid timeout format: ${timeout}. Use format like "60s", "5m", "1h"`);
27
+ }
28
+ const value = parseInt(match[1], 10);
29
+ const unit = match[2] || 's';
30
+ switch (unit) {
31
+ case 's':
32
+ return value * 1000;
33
+ case 'm':
34
+ return value * 60 * 1000;
35
+ case 'h':
36
+ return value * 60 * 60 * 1000;
37
+ default:
38
+ return 60000;
39
+ }
40
+ }
41
+ /**
42
+ * Execute a script hook
43
+ *
44
+ * @param config - Script hook configuration
45
+ * @param payload - Hook event payload for template resolution
46
+ * @returns Promise resolving to script result
47
+ */
48
+ async function executeScript(config, payload) {
49
+ const startTime = Date.now();
50
+ try {
51
+ // Create template context from payload
52
+ const context = (0, templates_js_1.createTemplateContext)(payload);
53
+ // Parse command (resolve env vars)
54
+ const command = (0, templates_js_1.parseTemplate)(config.command, context);
55
+ // Parse arguments (resolve both templates and env vars)
56
+ const args = (config.args || []).map((arg) => (0, templates_js_1.parseTemplate)(arg, context));
57
+ // Parse working directory (default to project path)
58
+ const cwd = config.cwd
59
+ ? (0, templates_js_1.parseTemplate)(config.cwd, context)
60
+ : payload.project.path;
61
+ // Parse timeout
62
+ const timeoutMs = parseTimeout(config.timeout);
63
+ // Execute
64
+ if (config.async) {
65
+ // Fire and forget - don't wait for completion
66
+ spawnAsync(command, args, cwd, config.name);
67
+ return {
68
+ success: true,
69
+ exitCode: null,
70
+ stdout: '',
71
+ stderr: '',
72
+ duration: Date.now() - startTime,
73
+ };
74
+ }
75
+ else {
76
+ // Wait for completion
77
+ return await spawnSync(command, args, cwd, timeoutMs, startTime);
78
+ }
79
+ }
80
+ catch (error) {
81
+ return {
82
+ success: false,
83
+ exitCode: null,
84
+ stdout: '',
85
+ stderr: '',
86
+ duration: Date.now() - startTime,
87
+ error: error instanceof Error ? error.message : String(error),
88
+ };
89
+ }
90
+ }
91
+ /**
92
+ * Spawn a process asynchronously (fire and forget)
93
+ */
94
+ function spawnAsync(command, args, cwd, hookName) {
95
+ const child = (0, node_child_process_1.spawn)(command, args, {
96
+ cwd,
97
+ detached: true,
98
+ stdio: 'ignore',
99
+ shell: false,
100
+ });
101
+ // Detach from parent process
102
+ child.unref();
103
+ // Log errors if they occur (but don't block)
104
+ child.on('error', (error) => {
105
+ console.error(`[Hook ${hookName}] Async execution error:`, error.message);
106
+ });
107
+ }
108
+ /**
109
+ * Spawn a process synchronously (wait for completion)
110
+ */
111
+ function spawnSync(command, args, cwd, timeoutMs, startTime) {
112
+ return new Promise((resolve) => {
113
+ let stdout = '';
114
+ let stderr = '';
115
+ let timedOut = false;
116
+ let hasResolved = false;
117
+ let killTimer = null;
118
+ // Spawn with args as separate argv entries to preserve args-with-spaces
119
+ const child = (0, node_child_process_1.spawn)(command, args, {
120
+ cwd,
121
+ shell: false,
122
+ });
123
+ // Capture stdout
124
+ child.stdout?.on('data', (data) => {
125
+ stdout += data.toString();
126
+ });
127
+ // Capture stderr
128
+ child.stderr?.on('data', (data) => {
129
+ stderr += data.toString();
130
+ });
131
+ // Handle timeout
132
+ const timeoutHandle = setTimeout(() => {
133
+ if (hasResolved)
134
+ return;
135
+ timedOut = true;
136
+ child.kill('SIGTERM');
137
+ // Force kill after 5 seconds if still running
138
+ // Note: child.killed becomes true immediately after kill(), so we check exitCode instead
139
+ killTimer = setTimeout(() => {
140
+ if (child.exitCode === null) {
141
+ try {
142
+ child.kill('SIGKILL');
143
+ }
144
+ catch {
145
+ // Process already exited, ignore ESRCH
146
+ }
147
+ }
148
+ }, 5000);
149
+ killTimer.unref(); // Don't keep event loop alive
150
+ }, timeoutMs);
151
+ timeoutHandle.unref(); // Don't keep event loop alive
152
+ // Handle process exit
153
+ child.on('close', (code, signal) => {
154
+ if (hasResolved)
155
+ return;
156
+ hasResolved = true;
157
+ clearTimeout(timeoutHandle);
158
+ if (killTimer) {
159
+ clearTimeout(killTimer);
160
+ }
161
+ const result = {
162
+ success: !timedOut && code === 0,
163
+ exitCode: code,
164
+ stdout: stdout.trim(),
165
+ stderr: stderr.trim(),
166
+ duration: Date.now() - startTime,
167
+ };
168
+ if (timedOut) {
169
+ result.timedOut = true;
170
+ result.error = `Script execution timed out after ${timeoutMs}ms`;
171
+ }
172
+ else if (signal) {
173
+ result.error = `Process killed by signal: ${signal}`;
174
+ }
175
+ resolve(result);
176
+ });
177
+ // Handle spawn errors
178
+ child.on('error', (error) => {
179
+ if (hasResolved)
180
+ return;
181
+ hasResolved = true;
182
+ clearTimeout(timeoutHandle);
183
+ if (killTimer) {
184
+ clearTimeout(killTimer);
185
+ }
186
+ resolve({
187
+ success: false,
188
+ exitCode: null,
189
+ stdout: stdout.trim(),
190
+ stderr: stderr.trim(),
191
+ duration: Date.now() - startTime,
192
+ error: error.message,
193
+ });
194
+ });
195
+ });
196
+ }
197
+ /**
198
+ * Validate script hook configuration
199
+ */
200
+ function validateScriptConfig(config) {
201
+ const errors = [];
202
+ if (!config.name) {
203
+ errors.push('Missing required field: name');
204
+ }
205
+ if (!config.command) {
206
+ errors.push('Missing required field: command');
207
+ }
208
+ if (config.timeout !== undefined) {
209
+ try {
210
+ parseTimeout(config.timeout);
211
+ }
212
+ catch (error) {
213
+ errors.push(error instanceof Error ? error.message : String(error));
214
+ }
215
+ }
216
+ return {
217
+ valid: errors.length === 0,
218
+ errors,
219
+ };
220
+ }
221
+ //# sourceMappingURL=script-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-runner.js","sourceRoot":"","sources":["../../src/hooks/script-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Template Variable Parser
3
+ *
4
+ * Parses and resolves template variables in hook configurations.
5
+ * Supports {{variable}} syntax for hook payloads and ${VAR} for environment variables.
6
+ */
7
+ import type { HookPayload } from './payload.js';
8
+ /**
9
+ * Context for template variable resolution
10
+ */
11
+ export interface TemplateContext {
12
+ /** Event name */
13
+ event: string;
14
+ /** ISO timestamp */
15
+ timestamp: string;
16
+ /** Task data (if task event) */
17
+ task?: {
18
+ id: string;
19
+ title: string;
20
+ status: string;
21
+ section?: string | null;
22
+ sectionId?: string | null;
23
+ };
24
+ /** Section data (if section event) */
25
+ section?: {
26
+ id: string;
27
+ name: string;
28
+ };
29
+ /** Project data */
30
+ project: {
31
+ name: string;
32
+ path: string;
33
+ };
34
+ /** Health data (if health event) */
35
+ health?: {
36
+ score: number;
37
+ previousScore?: number;
38
+ status: string;
39
+ };
40
+ /** Dispute data (if dispute event) */
41
+ dispute?: {
42
+ id: string;
43
+ taskId: string;
44
+ type: string;
45
+ status: string;
46
+ };
47
+ }
48
+ /**
49
+ * Parse template variables in a string
50
+ *
51
+ * @param template - String containing {{variable}} placeholders
52
+ * @param context - Context for variable resolution
53
+ * @returns Parsed string with variables replaced
54
+ */
55
+ export declare function parseTemplate(template: string, context: TemplateContext): string;
56
+ /**
57
+ * Parse template variables in an object (recursively)
58
+ *
59
+ * @param obj - Object containing template strings
60
+ * @param context - Context for variable resolution
61
+ * @returns New object with templates parsed
62
+ */
63
+ export declare function parseTemplateObject<T>(obj: T, context: TemplateContext): T;
64
+ /**
65
+ * Resolve environment variables (${VAR_NAME})
66
+ *
67
+ * @param text - String containing ${VAR} placeholders
68
+ * @returns String with env vars replaced
69
+ */
70
+ export declare function resolveEnvVars(text: string): string;
71
+ /**
72
+ * Resolve a single template variable path
73
+ *
74
+ * @param path - Variable path (e.g., "task.title", "project.name")
75
+ * @param context - Template context
76
+ * @returns Resolved value or undefined
77
+ */
78
+ export declare function resolveVariable(path: string, context: TemplateContext): string | number | boolean | undefined;
79
+ /**
80
+ * Create template context from hook payload
81
+ *
82
+ * @param payload - Hook event payload
83
+ * @returns Template context for variable resolution
84
+ */
85
+ export declare function createTemplateContext(payload: HookPayload): TemplateContext;
86
+ /**
87
+ * Get all available variables for a given event type
88
+ *
89
+ * @param event - Event name
90
+ * @returns List of available variable paths
91
+ */
92
+ export declare function getAvailableVariables(event: string): string[];
93
+ /**
94
+ * Validate that all template variables in a string are valid for the event
95
+ *
96
+ * @param template - Template string
97
+ * @param event - Event name
98
+ * @returns Validation result with invalid variables
99
+ */
100
+ export declare function validateTemplate(template: string, event: string): {
101
+ valid: boolean;
102
+ invalidVars: string[];
103
+ };
104
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/hooks/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAYhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF,sCAAsC;IACtC,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,mBAAmB;IACnB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,oCAAoC;IACpC,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,sCAAsC;IACtC,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAWhF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,GAAG,CAAC,CAkB1E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GACvB,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAgCvC;AAkHD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAyD3E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAwC7D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAgB3C"}