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,150 @@
1
+ "use strict";
2
+ /**
3
+ * Singleton lock for runner daemon
4
+ * Uses directory-based locking with PID file
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getLockDir = getLockDir;
8
+ exports.getPidFilePath = getPidFilePath;
9
+ exports.isProcessAlive = isProcessAlive;
10
+ exports.readLockPid = readLockPid;
11
+ exports.removeLock = removeLock;
12
+ exports.acquireLock = acquireLock;
13
+ exports.releaseLock = releaseLock;
14
+ exports.checkLockStatus = checkLockStatus;
15
+ const node_fs_1 = require("node:fs");
16
+ const node_path_1 = require("node:path");
17
+ const global_db_js_1 = require("./global-db.js");
18
+ const LOCK_DIR = 'runners/lock';
19
+ const PID_FILE = 'pid';
20
+ /**
21
+ * Get the lock directory path
22
+ */
23
+ function getLockDir() {
24
+ return (0, node_path_1.join)((0, global_db_js_1.getGlobalSteroidsDir)(), LOCK_DIR);
25
+ }
26
+ /**
27
+ * Get the PID file path
28
+ */
29
+ function getPidFilePath() {
30
+ return (0, node_path_1.join)(getLockDir(), PID_FILE);
31
+ }
32
+ /**
33
+ * Check if a process with given PID is running
34
+ */
35
+ function isProcessAlive(pid) {
36
+ try {
37
+ // Sending signal 0 checks if process exists without killing it
38
+ process.kill(pid, 0);
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ /**
46
+ * Read the PID from lock file
47
+ */
48
+ function readLockPid() {
49
+ const pidPath = getPidFilePath();
50
+ if (!(0, node_fs_1.existsSync)(pidPath)) {
51
+ return null;
52
+ }
53
+ try {
54
+ const content = (0, node_fs_1.readFileSync)(pidPath, 'utf-8').trim();
55
+ const pid = parseInt(content, 10);
56
+ return isNaN(pid) ? null : pid;
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ /**
63
+ * Remove the lock directory
64
+ */
65
+ function removeLock() {
66
+ const lockDir = getLockDir();
67
+ if ((0, node_fs_1.existsSync)(lockDir)) {
68
+ (0, node_fs_1.rmSync)(lockDir, { recursive: true, force: true });
69
+ }
70
+ }
71
+ /**
72
+ * Attempt to acquire the singleton lock
73
+ * Returns result indicating success or existing lock holder
74
+ */
75
+ function acquireLock() {
76
+ const lockDir = getLockDir();
77
+ const pidPath = getPidFilePath();
78
+ // Check if lock exists
79
+ if ((0, node_fs_1.existsSync)(lockDir)) {
80
+ const existingPid = readLockPid();
81
+ if (existingPid !== null) {
82
+ if (isProcessAlive(existingPid)) {
83
+ // Another runner is active
84
+ return {
85
+ acquired: false,
86
+ existingPid,
87
+ isZombie: false,
88
+ };
89
+ }
90
+ // Zombie lock - process is dead
91
+ removeLock();
92
+ // Fall through to acquire
93
+ }
94
+ else {
95
+ // Lock dir exists but no valid PID - clean up
96
+ removeLock();
97
+ }
98
+ }
99
+ // Create lock directory
100
+ try {
101
+ (0, node_fs_1.mkdirSync)(lockDir, { recursive: true });
102
+ }
103
+ catch (err) {
104
+ // Race condition - another process may have created it
105
+ if ((0, node_fs_1.existsSync)(lockDir)) {
106
+ const existingPid = readLockPid();
107
+ if (existingPid !== null && isProcessAlive(existingPid)) {
108
+ return {
109
+ acquired: false,
110
+ existingPid,
111
+ isZombie: false,
112
+ };
113
+ }
114
+ }
115
+ throw err;
116
+ }
117
+ // Write our PID
118
+ (0, node_fs_1.writeFileSync)(pidPath, String(process.pid));
119
+ return { acquired: true };
120
+ }
121
+ /**
122
+ * Release the lock (should be called on shutdown)
123
+ */
124
+ function releaseLock() {
125
+ const existingPid = readLockPid();
126
+ // Only release if we own the lock
127
+ if (existingPid === process.pid) {
128
+ removeLock();
129
+ }
130
+ }
131
+ /**
132
+ * Check lock status without acquiring
133
+ */
134
+ function checkLockStatus() {
135
+ const lockDir = getLockDir();
136
+ if (!(0, node_fs_1.existsSync)(lockDir)) {
137
+ return { locked: false, pid: null, isZombie: false };
138
+ }
139
+ const pid = readLockPid();
140
+ if (pid === null) {
141
+ return { locked: false, pid: null, isZombie: false };
142
+ }
143
+ const alive = isProcessAlive(pid);
144
+ return {
145
+ locked: alive,
146
+ pid,
147
+ isZombie: !alive,
148
+ };
149
+ }
150
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/runners/lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Orchestrator loop - core task processing logic
3
+ * Used by both the daemon and the loop command
4
+ */
5
+ export interface LoopOptions {
6
+ projectPath: string;
7
+ once?: boolean;
8
+ sectionId?: string;
9
+ runnerId?: string;
10
+ onIteration?: (iteration: number) => void;
11
+ onTaskStart?: (taskId: string, action: string) => void;
12
+ onTaskComplete?: (taskId: string) => void;
13
+ shouldStop?: () => boolean;
14
+ }
15
+ /**
16
+ * Run the orchestrator loop
17
+ * Processes tasks until all are complete or shouldStop returns true
18
+ */
19
+ export declare function runOrchestratorLoop(options: LoopOptions): Promise<void>;
20
+ //# sourceMappingURL=orchestrator-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-loop.d.ts","sourceRoot":"","sources":["../../src/runners/orchestrator-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmN7E"}
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ /**
3
+ * Orchestrator loop - core task processing logic
4
+ * Used by both the daemon and the loop command
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.runOrchestratorLoop = runOrchestratorLoop;
8
+ const connection_js_1 = require("../database/connection.js");
9
+ const index_js_1 = require("../migrations/index.js");
10
+ const queries_js_1 = require("../database/queries.js");
11
+ const task_selector_js_1 = require("../orchestrator/task-selector.js");
12
+ const coder_js_1 = require("../orchestrator/coder.js");
13
+ const loader_js_1 = require("../config/loader.js");
14
+ const reviewer_js_1 = require("../orchestrator/reviewer.js");
15
+ const activity_log_js_1 = require("./activity-log.js");
16
+ const projects_js_1 = require("./projects.js");
17
+ const node_child_process_1 = require("node:child_process");
18
+ function sleep(ms) {
19
+ return new Promise((resolve) => setTimeout(resolve, ms));
20
+ }
21
+ /**
22
+ * Run the orchestrator loop
23
+ * Processes tasks until all are complete or shouldStop returns true
24
+ */
25
+ async function runOrchestratorLoop(options) {
26
+ const { projectPath, once = false, shouldStop, sectionId } = options;
27
+ const { db, close } = (0, connection_js_1.openDatabase)(projectPath);
28
+ // Auto-migrate database if needed
29
+ const dbPath = (0, connection_js_1.getDbPath)(projectPath);
30
+ const migrationResult = (0, index_js_1.autoMigrate)(db, dbPath);
31
+ if (migrationResult.applied) {
32
+ console.log(`Applied ${migrationResult.migrations.length} migration(s): ${migrationResult.migrations.join(', ')}`);
33
+ }
34
+ else if (migrationResult.error) {
35
+ console.error(`Migration error: ${migrationResult.error}`);
36
+ close();
37
+ throw new Error(`Database migration failed: ${migrationResult.error}`);
38
+ }
39
+ // Load batch mode config
40
+ const config = (0, loader_js_1.loadConfig)(projectPath);
41
+ const batchMode = config.sections?.batchMode ?? false;
42
+ const maxBatchSize = config.sections?.maxBatchSize ?? 10;
43
+ try {
44
+ let iteration = 0;
45
+ while (true) {
46
+ // Check if we should stop
47
+ if (shouldStop?.()) {
48
+ console.log('\nLoop stopped by signal');
49
+ break;
50
+ }
51
+ // Check if project has been disabled
52
+ const registeredProject = (0, projects_js_1.getRegisteredProject)(projectPath);
53
+ if (registeredProject && !registeredProject.enabled) {
54
+ console.log('\nProject has been disabled. Stopping loop.');
55
+ break;
56
+ }
57
+ iteration++;
58
+ console.log(`\n─── Iteration ${iteration} ───\n`);
59
+ options.onIteration?.(iteration);
60
+ // Batch mode: process multiple pending tasks at once
61
+ // Only active when not focusing on a specific section and batch mode is enabled
62
+ if (batchMode && !sectionId) {
63
+ const batch = (0, task_selector_js_1.selectTaskBatch)(db, maxBatchSize);
64
+ if (batch && batch.tasks.length > 0) {
65
+ console.log(`[BATCH MODE] Section "${batch.sectionName}" - ${batch.tasks.length} tasks`);
66
+ // Mark all tasks as in_progress
67
+ for (const task of batch.tasks) {
68
+ (0, task_selector_js_1.markTaskInProgress)(db, task.id);
69
+ options.onTaskStart?.(task.id, 'batch');
70
+ }
71
+ // Invoke batch coder
72
+ console.log('\n>>> Invoking BATCH CODER...\n');
73
+ await (0, coder_js_1.invokeCoderBatch)(batch.tasks, batch.sectionName, projectPath);
74
+ // Check which tasks are now in review status
75
+ const tasksInReview = batch.tasks
76
+ .map(t => (0, queries_js_1.getTask)(db, t.id))
77
+ .filter((t) => t !== null && t.status === 'review');
78
+ if (tasksInReview.length > 0) {
79
+ console.log(`\n[BATCH MODE] ${tasksInReview.length} tasks ready for batch review\n`);
80
+ // Invoke batch reviewer
81
+ console.log('\n>>> Invoking BATCH REVIEWER...\n');
82
+ await (0, reviewer_js_1.invokeReviewerBatch)(tasksInReview, batch.sectionName, projectPath);
83
+ // Handle results for each reviewed task
84
+ for (const task of tasksInReview) {
85
+ const updatedTask = (0, queries_js_1.getTask)(db, task.id);
86
+ if (!updatedTask)
87
+ continue;
88
+ const section = task.section_id ? (0, queries_js_1.getSection)(db, task.section_id) : null;
89
+ const sectionName = section?.name ?? null;
90
+ if (updatedTask.status === 'completed' && options.runnerId) {
91
+ // Get commit message for activity log
92
+ let commitMessage = null;
93
+ try {
94
+ commitMessage = (0, node_child_process_1.execSync)('git log -1 --format=%B', {
95
+ cwd: projectPath,
96
+ encoding: 'utf-8',
97
+ }).trim();
98
+ }
99
+ catch {
100
+ // Ignore error
101
+ }
102
+ (0, activity_log_js_1.logActivity)(projectPath, options.runnerId, task.id, task.title, sectionName, 'completed', commitMessage);
103
+ }
104
+ else if (updatedTask.status === 'failed' && options.runnerId) {
105
+ (0, activity_log_js_1.logActivity)(projectPath, options.runnerId, task.id, task.title, sectionName, 'failed');
106
+ }
107
+ else if (updatedTask.status === 'disputed' && options.runnerId) {
108
+ (0, activity_log_js_1.logActivity)(projectPath, options.runnerId, task.id, task.title, sectionName, 'disputed');
109
+ }
110
+ else if (updatedTask.status === 'skipped' && options.runnerId) {
111
+ (0, activity_log_js_1.logActivity)(projectPath, options.runnerId, task.id, task.title, sectionName, 'skipped');
112
+ }
113
+ }
114
+ // Push changes after batch review if any tasks were approved
115
+ const approvedTasks = tasksInReview.filter(t => {
116
+ const updated = (0, queries_js_1.getTask)(db, t.id);
117
+ return updated?.status === 'completed';
118
+ });
119
+ if (approvedTasks.length > 0) {
120
+ try {
121
+ console.log('Pushing batch changes to git...');
122
+ (0, node_child_process_1.execSync)('git push', { cwd: projectPath, stdio: 'inherit' });
123
+ console.log(`Pushed ${approvedTasks.length} approved task(s)`);
124
+ }
125
+ catch (error) {
126
+ console.warn('Failed to push:', error);
127
+ }
128
+ }
129
+ }
130
+ // Notify completion for each task
131
+ for (const task of batch.tasks) {
132
+ options.onTaskComplete?.(task.id);
133
+ }
134
+ if (once) {
135
+ console.log('\n[--once] Stopping after one batch');
136
+ break;
137
+ }
138
+ await sleep(1000);
139
+ continue;
140
+ }
141
+ }
142
+ // Select next task
143
+ const selected = (0, task_selector_js_1.selectNextTask)(db, sectionId);
144
+ if (!selected) {
145
+ console.log('');
146
+ console.log('╔════════════════════════════════════════════════════════════╗');
147
+ console.log('║ ALL TASKS COMPLETE ║');
148
+ console.log('╚════════════════════════════════════════════════════════════╝');
149
+ console.log('');
150
+ break;
151
+ }
152
+ const { task, action } = selected;
153
+ console.log(`Task: ${task.title}`);
154
+ console.log(`Action: ${action}`);
155
+ console.log(`Status: ${task.status}`);
156
+ options.onTaskStart?.(task.id, action);
157
+ if (action === 'start') {
158
+ (0, task_selector_js_1.markTaskInProgress)(db, task.id);
159
+ await runCoderPhase(db, task, projectPath, 'start');
160
+ }
161
+ else if (action === 'resume') {
162
+ await runCoderPhase(db, task, projectPath, 'resume');
163
+ }
164
+ else if (action === 'review') {
165
+ await runReviewerPhase(db, task, projectPath, options.runnerId);
166
+ }
167
+ options.onTaskComplete?.(task.id);
168
+ if (once) {
169
+ console.log('\n[--once] Stopping after one iteration');
170
+ break;
171
+ }
172
+ // Brief pause between iterations
173
+ await sleep(1000);
174
+ }
175
+ // Final status
176
+ const finalCounts = (0, task_selector_js_1.getTaskCounts)(db, sectionId);
177
+ console.log('\nFinal Status:');
178
+ console.log(` Completed: ${finalCounts.completed}`);
179
+ console.log(` Failed: ${finalCounts.failed}`);
180
+ console.log(` Disputed: ${finalCounts.disputed}`);
181
+ }
182
+ finally {
183
+ close();
184
+ }
185
+ }
186
+ async function runCoderPhase(db, task, projectPath, action) {
187
+ console.log('\n>>> Invoking CODER...\n');
188
+ const result = await (0, coder_js_1.invokeCoder)(task, projectPath, action);
189
+ if (result.timedOut) {
190
+ console.warn('Coder timed out. Will retry next iteration.');
191
+ return;
192
+ }
193
+ const updatedTask = (0, queries_js_1.getTask)(db, task.id);
194
+ if (!updatedTask)
195
+ return;
196
+ if (updatedTask.status === 'review') {
197
+ console.log('\nCoder submitted for review. Ready for reviewer.');
198
+ }
199
+ else {
200
+ console.log(`Task status unchanged (${updatedTask.status}). Will retry next iteration.`);
201
+ }
202
+ }
203
+ async function runReviewerPhase(db, task, projectPath, runnerId) {
204
+ console.log('\n>>> Invoking REVIEWER...\n');
205
+ const result = await (0, reviewer_js_1.invokeReviewer)(task, projectPath);
206
+ if (result.timedOut) {
207
+ console.warn('Reviewer timed out. Will retry next iteration.');
208
+ return;
209
+ }
210
+ const updatedTask = (0, queries_js_1.getTask)(db, task.id);
211
+ if (!updatedTask)
212
+ return;
213
+ // Get section name for activity logging
214
+ const section = task.section_id ? (0, queries_js_1.getSection)(db, task.section_id) : null;
215
+ const sectionName = section?.name ?? null;
216
+ // Check actual task status in database - don't trust parsed decision alone
217
+ // The reviewer might say "APPROVE" but the command could fail
218
+ if (updatedTask.status === 'completed') {
219
+ console.log('\n✓ Task APPROVED');
220
+ // Get the commit message and SHA before pushing
221
+ let commitMessage = null;
222
+ let commitSha = null;
223
+ try {
224
+ commitMessage = (0, node_child_process_1.execSync)('git log -1 --format=%B', {
225
+ cwd: projectPath,
226
+ encoding: 'utf-8',
227
+ }).trim();
228
+ commitSha = (0, node_child_process_1.execSync)('git rev-parse HEAD', {
229
+ cwd: projectPath,
230
+ encoding: 'utf-8',
231
+ }).trim();
232
+ }
233
+ catch (error) {
234
+ console.warn('Failed to get commit info:', error);
235
+ }
236
+ // Push changes
237
+ try {
238
+ console.log('Pushing to git...');
239
+ (0, node_child_process_1.execSync)('git push', { cwd: projectPath, stdio: 'inherit' });
240
+ console.log(`Pushed successfully (${commitSha})`);
241
+ }
242
+ catch (error) {
243
+ console.warn('Failed to push:', error);
244
+ }
245
+ // Log activity for completed task
246
+ if (runnerId) {
247
+ (0, activity_log_js_1.logActivity)(projectPath, runnerId, task.id, task.title, sectionName, 'completed', commitMessage, commitSha);
248
+ }
249
+ }
250
+ else if (updatedTask.status === 'skipped') {
251
+ console.log('\n⊘ Task SKIPPED');
252
+ // Log activity for skipped task
253
+ if (runnerId) {
254
+ (0, activity_log_js_1.logActivity)(projectPath, runnerId, task.id, task.title, sectionName, 'skipped');
255
+ }
256
+ }
257
+ else if (result.decision === 'reject') {
258
+ console.log('\n✗ Task REJECTED');
259
+ console.log(`Rejection count: ${updatedTask.rejection_count}/15`);
260
+ if (result.notes) {
261
+ console.log(`Notes: ${result.notes}`);
262
+ }
263
+ // Check if task failed (exceeded 15 rejections)
264
+ if (updatedTask.status === 'failed' && runnerId) {
265
+ (0, activity_log_js_1.logActivity)(projectPath, runnerId, task.id, task.title, sectionName, 'failed');
266
+ }
267
+ else {
268
+ console.log('Returning to coder for fixes.');
269
+ }
270
+ }
271
+ else if (result.decision === 'dispute') {
272
+ console.log('\n! Task DISPUTED');
273
+ if (result.notes) {
274
+ console.log(`Reason: ${result.notes}`);
275
+ }
276
+ // Log activity for disputed task
277
+ if (runnerId) {
278
+ (0, activity_log_js_1.logActivity)(projectPath, runnerId, task.id, task.title, sectionName, 'disputed');
279
+ }
280
+ }
281
+ else {
282
+ console.log(`\nReviewer completed without clear decision. Status: ${updatedTask.status}`);
283
+ }
284
+ }
285
+ //# sourceMappingURL=orchestrator-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-loop.js","sourceRoot":"","sources":["../../src/runners/orchestrator-loop.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAsCH,kDAmNC;AAvPD,6DAAoE;AACpE,qDAAqD;AACrD,uDAA6D;AAC7D,uEAK0C;AAC1C,uDAAyE;AACzE,mDAAiD;AACjD,6DAAkF;AAElF,uDAAgD;AAChD,+CAAqD;AACrD,2DAA8C;AAE9C,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAaD;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CAAC,OAAoB;IAC5D,MAAM,EAAE,WAAW,EAAE,IAAI,GAAG,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAErE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAA,4BAAY,EAAC,WAAW,CAAC,CAAC;IAEhD,kCAAkC;IAClC,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,WAAW,CAAC,CAAC;IACtC,MAAM,eAAe,GAAG,IAAA,sBAAW,EAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,eAAe,CAAC,UAAU,CAAC,MAAM,kBAAkB,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrH,CAAC;SAAM,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,oBAAoB,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,KAAK,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAA,sBAAU,EAAC,WAAW,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,KAAK,CAAC;IACtD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,OAAO,IAAI,EAAE,CAAC;YACZ,0BAA0B;YAC1B,IAAI,UAAU,EAAE,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;gBACxC,MAAM;YACR,CAAC;YAED,qCAAqC;YACrC,MAAM,iBAAiB,GAAG,IAAA,kCAAoB,EAAC,WAAW,CAAC,CAAC;YAC5D,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,MAAM;YACR,CAAC;YAED,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,QAAQ,CAAC,CAAC;YAClD,OAAO,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;YAEjC,qDAAqD;YACrD,gFAAgF;YAChF,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,IAAA,kCAAe,EAAC,EAAE,EAAE,YAAY,CAAC,CAAC;gBAChD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,WAAW,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;oBAEzF,gCAAgC;oBAChC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC/B,IAAA,qCAAkB,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;wBAChC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBAC1C,CAAC;oBAED,qBAAqB;oBACrB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;oBAC/C,MAAM,IAAA,2BAAgB,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;oBAEpE,6CAA6C;oBAC7C,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK;yBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,oBAAO,EAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;yBAC3B,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;oBAElF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,aAAa,CAAC,MAAM,iCAAiC,CAAC,CAAC;wBAErF,wBAAwB;wBACxB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;wBAClD,MAAM,IAAA,iCAAmB,EAAC,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;wBAEzE,wCAAwC;wBACxC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;4BACjC,MAAM,WAAW,GAAG,IAAA,oBAAO,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;4BACzC,IAAI,CAAC,WAAW;gCAAE,SAAS;4BAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,uBAAU,EAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;4BACzE,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;4BAE1C,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gCAC3D,sCAAsC;gCACtC,IAAI,aAAa,GAAkB,IAAI,CAAC;gCACxC,IAAI,CAAC;oCACH,aAAa,GAAG,IAAA,6BAAQ,EAAC,wBAAwB,EAAE;wCACjD,GAAG,EAAE,WAAW;wCAChB,QAAQ,EAAE,OAAO;qCAClB,CAAC,CAAC,IAAI,EAAE,CAAC;gCACZ,CAAC;gCAAC,MAAM,CAAC;oCACP,eAAe;gCACjB,CAAC;gCAED,IAAA,6BAAW,EACT,WAAW,EACX,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,CACd,CAAC;4BACJ,CAAC;iCAAM,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gCAC/D,IAAA,6BAAW,EACT,WAAW,EACX,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,QAAQ,CACT,CAAC;4BACJ,CAAC;iCAAM,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gCACjE,IAAA,6BAAW,EACT,WAAW,EACX,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,UAAU,CACX,CAAC;4BACJ,CAAC;iCAAM,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gCAChE,IAAA,6BAAW,EACT,WAAW,EACX,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,SAAS,CACV,CAAC;4BACJ,CAAC;wBACH,CAAC;wBAED,6DAA6D;wBAC7D,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;4BAC7C,MAAM,OAAO,GAAG,IAAA,oBAAO,EAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;4BAClC,OAAO,OAAO,EAAE,MAAM,KAAK,WAAW,CAAC;wBACzC,CAAC,CAAC,CAAC;wBAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC7B,IAAI,CAAC;gCACH,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gCAC/C,IAAA,6BAAQ,EAAC,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gCAC7D,OAAO,CAAC,GAAG,CAAC,UAAU,aAAa,CAAC,MAAM,mBAAmB,CAAC,CAAC;4BACjE,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;4BACzC,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,kCAAkC;oBAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC/B,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpC,CAAC;oBAED,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;wBACnD,MAAM;oBACR,CAAC;oBAED,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClB,SAAS;gBACX,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,MAAM,QAAQ,GAAG,IAAA,iCAAc,EAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAElC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAEtC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAEvC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,IAAA,qCAAkB,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAElC,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACvD,MAAM;YACR,CAAC;YAED,iCAAiC;YACjC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,eAAe;QACf,MAAM,WAAW,GAAG,IAAA,gCAAa,EAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,CAAC;IACV,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,EAAyC,EACzC,IAA6C,EAC7C,WAAmB,EACnB,MAA0B;IAE1B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAE5D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,oBAAO,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,CAAC,MAAM,+BAA+B,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,EAAyC,EACzC,IAA6C,EAC7C,WAAmB,EACnB,QAAiB;IAEjB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAc,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,oBAAO,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,wCAAwC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,uBAAU,EAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;IAE1C,2EAA2E;IAC3E,8DAA8D;IAC9D,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAEjC,gDAAgD;QAChD,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,CAAC;YACH,aAAa,GAAG,IAAA,6BAAQ,EAAC,wBAAwB,EAAE;gBACjD,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,SAAS,GAAG,IAAA,6BAAQ,EAAC,oBAAoB,EAAE;gBACzC,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,eAAe;QACf,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,IAAA,6BAAQ,EAAC,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,GAAG,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,kCAAkC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAA,6BAAW,EACT,WAAW,EACX,QAAQ,EACR,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAEhC,gCAAgC;QAChC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAA,6BAAW,EACT,WAAW,EACX,QAAQ,EACR,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,CAAC,eAAe,KAAK,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,gDAAgD;QAChD,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAChD,IAAA,6BAAW,EACT,WAAW,EACX,QAAQ,EACR,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,QAAQ,CACT,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,iCAAiC;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAA,6BAAW,EACT,WAAW,EACX,QAAQ,EACR,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,WAAW,EACX,UAAU,CACX,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wDAAwD,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Global project registry management
3
+ * Tracks all registered steroids projects across the system
4
+ */
5
+ export interface RegisteredProject {
6
+ path: string;
7
+ name: string | null;
8
+ registered_at: string;
9
+ last_seen_at: string;
10
+ enabled: boolean;
11
+ pending_count?: number;
12
+ in_progress_count?: number;
13
+ review_count?: number;
14
+ completed_count?: number;
15
+ stats_updated_at?: string | null;
16
+ }
17
+ /**
18
+ * Register a project in the global registry
19
+ * Idempotent - updates last_seen_at if project already exists
20
+ *
21
+ * @param path - Absolute path to project directory
22
+ * @param name - Optional project name
23
+ */
24
+ export declare function registerProject(path: string, name?: string): void;
25
+ /**
26
+ * Get all registered projects (enabled only by default)
27
+ *
28
+ * @param includeDisabled - If true, includes disabled projects
29
+ * @returns Array of registered projects
30
+ */
31
+ export declare function getRegisteredProjects(includeDisabled?: boolean): RegisteredProject[];
32
+ /**
33
+ * Get a single registered project by path
34
+ *
35
+ * @param path - Project path to look up
36
+ * @returns Project if found, null otherwise
37
+ */
38
+ export declare function getRegisteredProject(path: string): RegisteredProject | null;
39
+ /**
40
+ * Unregister a project from the global registry
41
+ * Removes it completely from the database
42
+ *
43
+ * @param path - Project path to unregister
44
+ */
45
+ export declare function unregisterProject(path: string): void;
46
+ /**
47
+ * Disable a project (skip in wakeup, but keep in registry)
48
+ *
49
+ * @param path - Project path to disable
50
+ */
51
+ export declare function disableProject(path: string): void;
52
+ /**
53
+ * Enable a project (include in wakeup)
54
+ *
55
+ * @param path - Project path to enable
56
+ */
57
+ export declare function enableProject(path: string): void;
58
+ /**
59
+ * Remove projects that no longer exist on disk
60
+ * Returns the number of projects removed
61
+ *
62
+ * @returns Number of projects pruned
63
+ */
64
+ export declare function pruneProjects(): number;
65
+ /**
66
+ * Update last_seen_at timestamp for a project
67
+ * Used by runners to track when project was last active
68
+ *
69
+ * @param path - Project path to update
70
+ */
71
+ export declare function updateProjectLastSeen(path: string): void;
72
+ /**
73
+ * Check if a project is registered
74
+ *
75
+ * @param path - Project path to check
76
+ * @returns True if project is registered
77
+ */
78
+ export declare function isProjectRegistered(path: string): boolean;
79
+ /**
80
+ * Task count statistics for a project
81
+ */
82
+ export interface ProjectStats {
83
+ pending: number;
84
+ in_progress: number;
85
+ review: number;
86
+ completed: number;
87
+ }
88
+ /**
89
+ * Update project stats in global database
90
+ * Called by runner heartbeat to cache stats for API/WebUI access
91
+ *
92
+ * @param path - Project path
93
+ * @param stats - Task counts by status
94
+ */
95
+ export declare function updateProjectStats(path: string, stats: ProjectStats): void;
96
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/runners/projects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAmBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAejE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,UAAQ,GAAG,iBAAiB,EAAE,CAoClF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAuC3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CASpD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CASjD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAShD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAsBtC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAWxD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAazD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAuB1E"}