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,613 @@
1
+ "use strict";
2
+ /**
3
+ * Database query functions for tasks, sections, and audit
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.STATUS_MARKERS = void 0;
7
+ exports.createSection = createSection;
8
+ exports.listSections = listSections;
9
+ exports.getSection = getSection;
10
+ exports.getSectionByName = getSectionByName;
11
+ exports.getOrCreateFeedbackSection = getOrCreateFeedbackSection;
12
+ exports.getSectionTaskCount = getSectionTaskCount;
13
+ exports.getPendingDependencies = getPendingDependencies;
14
+ exports.hasDependenciesMet = hasDependenciesMet;
15
+ exports.setSectionPriority = setSectionPriority;
16
+ exports.wouldCreateCircularDependency = wouldCreateCircularDependency;
17
+ exports.addSectionDependency = addSectionDependency;
18
+ exports.removeSectionDependency = removeSectionDependency;
19
+ exports.getSectionDependencies = getSectionDependencies;
20
+ exports.getSectionDependents = getSectionDependents;
21
+ exports.createTask = createTask;
22
+ exports.getTask = getTask;
23
+ exports.getTaskByTitle = getTaskByTitle;
24
+ exports.listTasks = listTasks;
25
+ exports.updateTaskStatus = updateTaskStatus;
26
+ exports.resetRejectionCount = resetRejectionCount;
27
+ exports.approveTask = approveTask;
28
+ exports.rejectTask = rejectTask;
29
+ exports.addAuditEntry = addAuditEntry;
30
+ exports.getTaskAudit = getTaskAudit;
31
+ exports.getTaskRejections = getTaskRejections;
32
+ exports.getLatestSubmissionNotes = getLatestSubmissionNotes;
33
+ exports.createSystemDisputeForRejection = createSystemDisputeForRejection;
34
+ exports.findNextTask = findNextTask;
35
+ exports.getLastRejectionNotes = getLastRejectionNotes;
36
+ exports.getTaskCountsByStatus = getTaskCountsByStatus;
37
+ exports.createTaskInvocation = createTaskInvocation;
38
+ exports.getTaskInvocations = getTaskInvocations;
39
+ exports.getRecentTaskInvocations = getRecentTaskInvocations;
40
+ exports.getLatestInvocation = getLatestInvocation;
41
+ exports.getInvocationCount = getInvocationCount;
42
+ const uuid_1 = require("uuid");
43
+ // Status markers for display
44
+ exports.STATUS_MARKERS = {
45
+ pending: '[ ]',
46
+ in_progress: '[-]',
47
+ review: '[o]',
48
+ completed: '[x]',
49
+ disputed: '[!]',
50
+ failed: '[F]',
51
+ skipped: '[S]', // Fully skipped - external setup required
52
+ partial: '[s]', // Partial - coded what we could, rest is external
53
+ };
54
+ // ============ Section Operations ============
55
+ function createSection(db, name, position) {
56
+ const id = (0, uuid_1.v4)();
57
+ // Get max position if not specified
58
+ if (position === undefined) {
59
+ const maxPos = db
60
+ .prepare('SELECT MAX(position) as max FROM sections')
61
+ .get();
62
+ position = (maxPos?.max ?? -1) + 1;
63
+ }
64
+ db.prepare(`INSERT INTO sections (id, name, position) VALUES (?, ?, ?)`).run(id, name, position);
65
+ return {
66
+ id,
67
+ name,
68
+ position,
69
+ created_at: new Date().toISOString(),
70
+ };
71
+ }
72
+ function listSections(db) {
73
+ return db
74
+ .prepare('SELECT * FROM sections ORDER BY position ASC')
75
+ .all();
76
+ }
77
+ function getSection(db, id) {
78
+ // Try exact match first
79
+ let section = db
80
+ .prepare('SELECT * FROM sections WHERE id = ?')
81
+ .get(id);
82
+ // If not found, try prefix match (for short IDs)
83
+ if (!section && id.length >= 4) {
84
+ const matches = db
85
+ .prepare('SELECT * FROM sections WHERE id LIKE ?')
86
+ .all(`${id}%`);
87
+ if (matches.length === 1) {
88
+ section = matches[0];
89
+ }
90
+ else if (matches.length > 1) {
91
+ // Ambiguous prefix - throw error with suggestions
92
+ const matchingIds = matches.map(s => `${s.id.substring(0, 8)} (${s.name})`).join(', ');
93
+ throw new Error(`Ambiguous section prefix "${id}". Matches: ${matchingIds}. ` +
94
+ `Please provide a longer prefix or use the full section name.`);
95
+ }
96
+ // If 0 matches, section remains null and will be handled by caller
97
+ }
98
+ return section;
99
+ }
100
+ function getSectionByName(db, name) {
101
+ return db
102
+ .prepare('SELECT * FROM sections WHERE name = ?')
103
+ .get(name);
104
+ }
105
+ const FEEDBACK_SECTION_NAME = 'Needs User Input';
106
+ function getOrCreateFeedbackSection(db) {
107
+ const existing = getSectionByName(db, FEEDBACK_SECTION_NAME);
108
+ if (existing)
109
+ return existing;
110
+ const maxPos = db
111
+ .prepare('SELECT MAX(position) as max FROM sections')
112
+ .get();
113
+ const position = (maxPos?.max ?? -1) + 1;
114
+ const id = (0, uuid_1.v4)();
115
+ db.prepare(`INSERT INTO sections (id, name, position, priority, skipped) VALUES (?, ?, ?, ?, ?)`).run(id, FEEDBACK_SECTION_NAME, position, 100, 1);
116
+ return { id, name: FEEDBACK_SECTION_NAME, position, priority: 100, skipped: 1, created_at: new Date().toISOString() };
117
+ }
118
+ function getSectionTaskCount(db, sectionId) {
119
+ const result = db
120
+ .prepare('SELECT COUNT(*) as count FROM tasks WHERE section_id = ?')
121
+ .get(sectionId);
122
+ return result.count;
123
+ }
124
+ /**
125
+ * Get dependencies for a section that have incomplete tasks
126
+ * Returns sections that the given section depends on and have any non-completed tasks
127
+ * (pending, in_progress, review, disputed, failed, skipped, partial)
128
+ */
129
+ function getPendingDependencies(db, sectionId) {
130
+ return db
131
+ .prepare(`SELECT DISTINCT s.*
132
+ FROM sections s
133
+ INNER JOIN section_dependencies sd ON s.id = sd.depends_on_section_id
134
+ WHERE sd.section_id = ?
135
+ AND EXISTS (
136
+ SELECT 1 FROM tasks t
137
+ WHERE t.section_id = s.id
138
+ AND t.status != 'completed'
139
+ )
140
+ ORDER BY s.position ASC`)
141
+ .all(sectionId);
142
+ }
143
+ /**
144
+ * Check if all dependencies for a section are met
145
+ * Dependencies are considered met when all tasks in dependent sections are completed
146
+ */
147
+ function hasDependenciesMet(db, sectionId) {
148
+ const pendingDeps = getPendingDependencies(db, sectionId);
149
+ return pendingDeps.length === 0;
150
+ }
151
+ /**
152
+ * Set the priority of a section
153
+ * Priority range: 0 (highest) to 100 (lowest), default is 50
154
+ */
155
+ function setSectionPriority(db, sectionId, priority) {
156
+ if (priority < 0 || priority > 100) {
157
+ throw new Error('Priority must be between 0 and 100');
158
+ }
159
+ const result = db
160
+ .prepare('UPDATE sections SET priority = ? WHERE id = ?')
161
+ .run(priority, sectionId);
162
+ if (result.changes === 0) {
163
+ throw new Error(`Section not found: ${sectionId}`);
164
+ }
165
+ }
166
+ /**
167
+ * Check if adding a dependency would create a circular dependency
168
+ * Returns true if circular dependency would be created
169
+ */
170
+ function wouldCreateCircularDependency(db, sectionId, dependsOnSectionId) {
171
+ // Self-dependency is always circular
172
+ if (sectionId === dependsOnSectionId) {
173
+ return true;
174
+ }
175
+ // Build dependency graph
176
+ const visited = new Set();
177
+ const recursionStack = new Set();
178
+ function hasCycle(currentId) {
179
+ if (recursionStack.has(currentId)) {
180
+ return true; // Found a cycle
181
+ }
182
+ if (visited.has(currentId)) {
183
+ return false; // Already checked this path
184
+ }
185
+ visited.add(currentId);
186
+ recursionStack.add(currentId);
187
+ // Get all sections that currentId depends on
188
+ const deps = db
189
+ .prepare(`SELECT depends_on_section_id FROM section_dependencies WHERE section_id = ?`)
190
+ .all(currentId);
191
+ // Add the proposed new dependency for simulation
192
+ if (currentId === sectionId) {
193
+ deps.push({ depends_on_section_id: dependsOnSectionId });
194
+ }
195
+ for (const dep of deps) {
196
+ if (hasCycle(dep.depends_on_section_id)) {
197
+ return true;
198
+ }
199
+ }
200
+ recursionStack.delete(currentId);
201
+ return false;
202
+ }
203
+ return hasCycle(sectionId);
204
+ }
205
+ /**
206
+ * Add a dependency between sections
207
+ * Makes sectionId depend on dependsOnSectionId
208
+ */
209
+ function addSectionDependency(db, sectionId, dependsOnSectionId) {
210
+ // Check for circular dependencies
211
+ if (wouldCreateCircularDependency(db, sectionId, dependsOnSectionId)) {
212
+ throw new Error('Cannot add dependency: would create a circular dependency');
213
+ }
214
+ const id = (0, uuid_1.v4)();
215
+ try {
216
+ db.prepare(`INSERT INTO section_dependencies (id, section_id, depends_on_section_id)
217
+ VALUES (?, ?, ?)`).run(id, sectionId, dependsOnSectionId);
218
+ return {
219
+ id,
220
+ section_id: sectionId,
221
+ depends_on_section_id: dependsOnSectionId,
222
+ created_at: new Date().toISOString(),
223
+ };
224
+ }
225
+ catch (error) {
226
+ if (error.message?.includes('UNIQUE constraint')) {
227
+ throw new Error('This dependency already exists');
228
+ }
229
+ if (error.message?.includes('FOREIGN KEY constraint')) {
230
+ throw new Error('One or both section IDs are invalid');
231
+ }
232
+ throw error;
233
+ }
234
+ }
235
+ /**
236
+ * Remove a dependency between sections
237
+ */
238
+ function removeSectionDependency(db, sectionId, dependsOnSectionId) {
239
+ const result = db
240
+ .prepare(`DELETE FROM section_dependencies
241
+ WHERE section_id = ? AND depends_on_section_id = ?`)
242
+ .run(sectionId, dependsOnSectionId);
243
+ if (result.changes === 0) {
244
+ throw new Error('Dependency not found');
245
+ }
246
+ }
247
+ /**
248
+ * Get all dependencies for a section
249
+ */
250
+ function getSectionDependencies(db, sectionId) {
251
+ return db
252
+ .prepare(`SELECT s.*
253
+ FROM sections s
254
+ INNER JOIN section_dependencies sd ON s.id = sd.depends_on_section_id
255
+ WHERE sd.section_id = ?
256
+ ORDER BY s.position ASC`)
257
+ .all(sectionId);
258
+ }
259
+ /**
260
+ * Get all sections that depend on a given section
261
+ */
262
+ function getSectionDependents(db, sectionId) {
263
+ return db
264
+ .prepare(`SELECT s.*
265
+ FROM sections s
266
+ INNER JOIN section_dependencies sd ON s.id = sd.section_id
267
+ WHERE sd.depends_on_section_id = ?
268
+ ORDER BY s.position ASC`)
269
+ .all(sectionId);
270
+ }
271
+ // ============ Task Operations ============
272
+ function createTask(db, title, options = {}) {
273
+ const id = (0, uuid_1.v4)();
274
+ const status = options.status ?? 'pending';
275
+ db.prepare(`INSERT INTO tasks (id, title, status, section_id, source_file, file_path, file_line, file_commit_sha, file_content_hash)
276
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, title, status, options.sectionId ?? null, options.sourceFile ?? null, options.filePath ?? null, options.fileLine ?? null, options.fileCommitSha ?? null, options.fileContentHash ?? null);
277
+ // Add audit entry for creation
278
+ addAuditEntry(db, id, null, status, 'human:cli');
279
+ return {
280
+ id,
281
+ title,
282
+ status,
283
+ section_id: options.sectionId ?? null,
284
+ source_file: options.sourceFile ?? null,
285
+ file_path: options.filePath ?? null,
286
+ file_line: options.fileLine ?? null,
287
+ file_commit_sha: options.fileCommitSha ?? null,
288
+ file_content_hash: options.fileContentHash ?? null,
289
+ rejection_count: 0,
290
+ created_at: new Date().toISOString(),
291
+ updated_at: new Date().toISOString(),
292
+ };
293
+ }
294
+ function getTask(db, id) {
295
+ // Try exact match first
296
+ let task = db
297
+ .prepare('SELECT * FROM tasks WHERE id = ?')
298
+ .get(id);
299
+ // If not found, try prefix match (for short IDs)
300
+ if (!task && id.length >= 6) {
301
+ task = db
302
+ .prepare('SELECT * FROM tasks WHERE id LIKE ?')
303
+ .get(`${id}%`);
304
+ }
305
+ return task;
306
+ }
307
+ function getTaskByTitle(db, title) {
308
+ // Exact match first
309
+ let task = db
310
+ .prepare('SELECT * FROM tasks WHERE title = ?')
311
+ .get(title);
312
+ if (!task) {
313
+ // Partial match
314
+ task = db
315
+ .prepare('SELECT * FROM tasks WHERE title LIKE ?')
316
+ .get(`%${title}%`);
317
+ }
318
+ return task;
319
+ }
320
+ function listTasks(db, options = {}) {
321
+ let sql = `
322
+ SELECT t.* FROM tasks t
323
+ LEFT JOIN sections s ON t.section_id = s.id
324
+ WHERE 1=1
325
+ `;
326
+ const params = [];
327
+ if (options.status && options.status !== 'all') {
328
+ sql += ' AND t.status = ?';
329
+ params.push(options.status);
330
+ }
331
+ if (options.sectionId) {
332
+ sql += ' AND t.section_id = ?';
333
+ params.push(options.sectionId);
334
+ }
335
+ if (options.search) {
336
+ sql += ' AND t.title LIKE ?';
337
+ params.push(`%${options.search}%`);
338
+ }
339
+ sql += ' ORDER BY COALESCE(s.position, 999999), t.created_at';
340
+ return db.prepare(sql).all(...params);
341
+ }
342
+ function updateTaskStatus(db, taskId, newStatus, actor, notes, commitSha) {
343
+ const task = getTask(db, taskId);
344
+ if (!task) {
345
+ throw new Error(`Task not found: ${taskId}`);
346
+ }
347
+ const oldStatus = task.status;
348
+ db.prepare(`UPDATE tasks SET status = ?, updated_at = datetime('now') WHERE id = ?`).run(newStatus, taskId);
349
+ addAuditEntry(db, taskId, oldStatus, newStatus, actor, notes, commitSha);
350
+ }
351
+ /**
352
+ * Reset rejection count to 0 (keeps audit history)
353
+ * Use when manually restarting a task after spec changes
354
+ */
355
+ function resetRejectionCount(db, taskId, actor, notes) {
356
+ const task = getTask(db, taskId);
357
+ if (!task) {
358
+ throw new Error(`Task not found: ${taskId}`);
359
+ }
360
+ const oldCount = task.rejection_count;
361
+ db.prepare(`UPDATE tasks SET rejection_count = 0, updated_at = datetime('now') WHERE id = ?`).run(taskId);
362
+ // Record in audit trail
363
+ addAuditEntry(db, taskId, task.status, task.status, actor, notes ?? `Rejection count reset from ${oldCount} to 0`);
364
+ return oldCount;
365
+ }
366
+ function approveTask(db, taskId, model, notes, commitSha) {
367
+ updateTaskStatus(db, taskId, 'completed', `model:${model}`, notes, commitSha);
368
+ }
369
+ function rejectTask(db, taskId, model, notes, commitSha) {
370
+ const task = getTask(db, taskId);
371
+ if (!task) {
372
+ throw new Error(`Task not found: ${taskId}`);
373
+ }
374
+ const newRejectionCount = task.rejection_count + 1;
375
+ if (newRejectionCount >= 15) {
376
+ // Task failed - exceeded max rejections
377
+ db.prepare(`UPDATE tasks SET status = 'failed', rejection_count = ?, updated_at = datetime('now')
378
+ WHERE id = ?`).run(newRejectionCount, taskId);
379
+ addAuditEntry(db, taskId, task.status, 'failed', `model:${model}`, `Exceeded 15 rejections. Last note: ${notes ?? 'none'}`, commitSha);
380
+ // Create system dispute
381
+ createSystemDisputeForRejection(db, taskId, 'Exceeded 15 rejections');
382
+ return { status: 'failed', rejectionCount: newRejectionCount };
383
+ }
384
+ // Normal rejection - back to in_progress
385
+ db.prepare(`UPDATE tasks SET status = 'in_progress', rejection_count = ?, updated_at = datetime('now')
386
+ WHERE id = ?`).run(newRejectionCount, taskId);
387
+ addAuditEntry(db, taskId, task.status, 'in_progress', `model:${model}`, notes, commitSha);
388
+ return { status: 'retry', rejectionCount: newRejectionCount };
389
+ }
390
+ function addAuditEntry(db, taskId, fromStatus, toStatus, actor, options, commitSha) {
391
+ // Support legacy signature: addAuditEntry(db, taskId, from, to, actor, notes, commitSha)
392
+ if (typeof options === 'string' || options === undefined) {
393
+ const notes = options;
394
+ db.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, model, notes, commit_sha)
395
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(taskId, fromStatus, toStatus, actor, 'human', null, notes ?? null, commitSha ?? null);
396
+ return;
397
+ }
398
+ // New signature with options object
399
+ db.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, model, notes, commit_sha)
400
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(taskId, fromStatus, toStatus, actor, options.actorType ?? 'human', options.model ?? null, options.notes ?? null, options.commitSha ?? null);
401
+ }
402
+ function getTaskAudit(db, taskId) {
403
+ return db
404
+ .prepare('SELECT * FROM audit WHERE task_id = ? ORDER BY created_at ASC')
405
+ .all(taskId);
406
+ }
407
+ /**
408
+ * Get rejection history for a task
409
+ * Returns entries where a review was rejected (review -> in_progress)
410
+ * Includes commit hash for easy reference
411
+ */
412
+ function getTaskRejections(db, taskId) {
413
+ const rejections = db
414
+ .prepare(`SELECT notes, commit_sha, actor, created_at
415
+ FROM audit
416
+ WHERE task_id = ?
417
+ AND from_status = 'review'
418
+ AND to_status = 'in_progress'
419
+ ORDER BY created_at ASC`)
420
+ .all(taskId);
421
+ return rejections.map((r, index) => ({
422
+ rejection_number: index + 1,
423
+ commit_sha: r.commit_sha,
424
+ notes: r.notes,
425
+ actor: r.actor,
426
+ created_at: r.created_at,
427
+ }));
428
+ }
429
+ /**
430
+ * Get the latest submission notes (when coder submitted for review)
431
+ * This captures any notes the coder included with --notes flag
432
+ */
433
+ function getLatestSubmissionNotes(db, taskId) {
434
+ const entry = db
435
+ .prepare(`SELECT notes FROM audit
436
+ WHERE task_id = ?
437
+ AND to_status = 'review'
438
+ ORDER BY created_at DESC
439
+ LIMIT 1`)
440
+ .get(taskId);
441
+ return entry?.notes ?? null;
442
+ }
443
+ // ============ Dispute Operations ============
444
+ // NOTE: Full dispute operations are in src/disputes/
445
+ // This is a minimal helper for backward compatibility with rejectTask
446
+ function createSystemDisputeForRejection(db, taskId, reason) {
447
+ const id = (0, uuid_1.v4)();
448
+ db.prepare(`INSERT INTO disputes (id, task_id, type, reason, created_by, coder_position)
449
+ VALUES (?, ?, 'system', ?, 'system', ?)`).run(id, taskId, reason, 'Task exceeded maximum rejection count and requires human intervention.');
450
+ return id;
451
+ }
452
+ // ============ Task Selection (for orchestrator) ============
453
+ /**
454
+ * Helper to filter out tasks from sections with unmet dependencies
455
+ */
456
+ function filterTasksWithMetDependencies(db, tasks) {
457
+ return tasks.filter(task => {
458
+ if (!task.section_id) {
459
+ // Tasks without a section are always allowed
460
+ return true;
461
+ }
462
+ // Check if section has all dependencies met
463
+ return hasDependenciesMet(db, task.section_id);
464
+ });
465
+ }
466
+ function findNextTask(db, sectionId) {
467
+ // Build WHERE clause for section filtering
468
+ const sectionFilter = sectionId ? 'AND t.section_id = ?' : '';
469
+ const sectionParams = sectionId ? [sectionId] : [];
470
+ // Exclude tasks in skipped sections unless a specific section was requested
471
+ const skipFilter = sectionId ? '' : 'AND (s.skipped IS NULL OR s.skipped = 0)';
472
+ // Priority 1: Tasks ready for review
473
+ const reviewTasks = db
474
+ .prepare(`SELECT t.* FROM tasks t
475
+ LEFT JOIN sections s ON t.section_id = s.id
476
+ WHERE t.status = 'review' ${sectionFilter} ${skipFilter}
477
+ ORDER BY COALESCE(s.position, 999999), t.created_at`)
478
+ .all(...sectionParams);
479
+ const filteredReviewTasks = filterTasksWithMetDependencies(db, reviewTasks);
480
+ if (filteredReviewTasks.length > 0) {
481
+ return { task: filteredReviewTasks[0], action: 'review' };
482
+ }
483
+ // Priority 2: Tasks in progress
484
+ const inProgressTasks = db
485
+ .prepare(`SELECT t.* FROM tasks t
486
+ LEFT JOIN sections s ON t.section_id = s.id
487
+ WHERE t.status = 'in_progress' ${sectionFilter} ${skipFilter}
488
+ ORDER BY COALESCE(s.position, 999999), t.created_at`)
489
+ .all(...sectionParams);
490
+ const filteredInProgressTasks = filterTasksWithMetDependencies(db, inProgressTasks);
491
+ if (filteredInProgressTasks.length > 0) {
492
+ return { task: filteredInProgressTasks[0], action: 'resume' };
493
+ }
494
+ // Priority 3: Pending tasks
495
+ const pendingTasks = db
496
+ .prepare(`SELECT t.* FROM tasks t
497
+ LEFT JOIN sections s ON t.section_id = s.id
498
+ WHERE t.status = 'pending' ${sectionFilter} ${skipFilter}
499
+ ORDER BY COALESCE(s.position, 999999), t.created_at`)
500
+ .all(...sectionParams);
501
+ const filteredPendingTasks = filterTasksWithMetDependencies(db, pendingTasks);
502
+ if (filteredPendingTasks.length > 0) {
503
+ return { task: filteredPendingTasks[0], action: 'start' };
504
+ }
505
+ return { task: null, action: 'idle' };
506
+ }
507
+ /**
508
+ * Get the last rejection notes for a task
509
+ */
510
+ function getLastRejectionNotes(db, taskId) {
511
+ const entry = db
512
+ .prepare(`SELECT notes FROM audit
513
+ WHERE task_id = ? AND to_status = 'in_progress' AND notes IS NOT NULL
514
+ ORDER BY created_at DESC LIMIT 1`)
515
+ .get(taskId);
516
+ return entry?.notes ?? null;
517
+ }
518
+ /**
519
+ * Get task counts by status for project stats
520
+ * Used by runner heartbeat to update global database
521
+ */
522
+ function getTaskCountsByStatus(db) {
523
+ const rows = db
524
+ .prepare('SELECT status, COUNT(*) as count FROM tasks GROUP BY status')
525
+ .all();
526
+ const counts = {
527
+ pending: 0,
528
+ in_progress: 0,
529
+ review: 0,
530
+ completed: 0,
531
+ };
532
+ for (const row of rows) {
533
+ if (row.status === 'pending') {
534
+ counts.pending = row.count;
535
+ }
536
+ else if (row.status === 'in_progress') {
537
+ counts.in_progress = row.count;
538
+ }
539
+ else if (row.status === 'review') {
540
+ counts.review = row.count;
541
+ }
542
+ else if (row.status === 'completed') {
543
+ counts.completed = row.count;
544
+ }
545
+ }
546
+ return counts;
547
+ }
548
+ /**
549
+ * Log an LLM invocation for a task
550
+ * This stores the full prompt and response for debugging
551
+ */
552
+ function createTaskInvocation(db, params) {
553
+ const result = db.prepare(`INSERT INTO task_invocations (
554
+ task_id, role, provider, model, prompt, response, error,
555
+ exit_code, duration_ms, success, timed_out, rejection_number
556
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(params.taskId, params.role, params.provider, params.model, params.prompt, params.response ?? null, params.error ?? null, params.exitCode, params.durationMs, params.success ? 1 : 0, params.timedOut ? 1 : 0, params.rejectionNumber ?? null);
557
+ return result.lastInsertRowid;
558
+ }
559
+ /**
560
+ * Get all invocations for a task
561
+ * Ordered by creation time (oldest first)
562
+ */
563
+ function getTaskInvocations(db, taskId) {
564
+ return db
565
+ .prepare(`SELECT * FROM task_invocations
566
+ WHERE task_id = ?
567
+ ORDER BY created_at ASC`)
568
+ .all(taskId);
569
+ }
570
+ /**
571
+ * Get recent invocations for a task (limited)
572
+ * Ordered by creation time (newest first)
573
+ */
574
+ function getRecentTaskInvocations(db, taskId, limit = 10) {
575
+ return db
576
+ .prepare(`SELECT * FROM task_invocations
577
+ WHERE task_id = ?
578
+ ORDER BY created_at DESC
579
+ LIMIT ?`)
580
+ .all(taskId, limit);
581
+ }
582
+ /**
583
+ * Get the latest invocation for a specific role
584
+ */
585
+ function getLatestInvocation(db, taskId, role) {
586
+ return db
587
+ .prepare(`SELECT * FROM task_invocations
588
+ WHERE task_id = ? AND role = ?
589
+ ORDER BY created_at DESC
590
+ LIMIT 1`)
591
+ .get(taskId, role);
592
+ }
593
+ /**
594
+ * Get invocation count for a task
595
+ */
596
+ function getInvocationCount(db, taskId) {
597
+ const rows = db
598
+ .prepare(`SELECT role, COUNT(*) as count
599
+ FROM task_invocations
600
+ WHERE task_id = ?
601
+ GROUP BY role`)
602
+ .all(taskId);
603
+ const counts = { coder: 0, reviewer: 0, total: 0 };
604
+ for (const row of rows) {
605
+ if (row.role === 'coder')
606
+ counts.coder = row.count;
607
+ if (row.role === 'reviewer')
608
+ counts.reviewer = row.count;
609
+ counts.total += row.count;
610
+ }
611
+ return counts;
612
+ }
613
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/database/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Database schema definitions for Steroids CLI
3
+ * Creates all required tables with proper constraints
4
+ */
5
+ export declare const SCHEMA_VERSION = "0.1.0";
6
+ export declare const SCHEMA_SQL = "\n-- Schema metadata (version tracking)\nCREATE TABLE IF NOT EXISTS _schema (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n);\n\n-- Applied migrations log\nCREATE TABLE IF NOT EXISTS _migrations (\n id INTEGER PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n checksum TEXT NOT NULL,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Sections (task groups)\nCREATE TABLE IF NOT EXISTS sections (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n position INTEGER NOT NULL,\n priority INTEGER DEFAULT 50,\n skipped INTEGER DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_sections_priority ON sections(priority);\n\n-- Tasks\nCREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY,\n title TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n section_id TEXT REFERENCES sections(id),\n source_file TEXT,\n file_path TEXT,\n file_line INTEGER,\n file_commit_sha TEXT,\n file_content_hash TEXT,\n rejection_count INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);\nCREATE INDEX IF NOT EXISTS idx_tasks_section ON tasks(section_id);\n\n-- Audit trail (immutable log of status changes)\nCREATE TABLE IF NOT EXISTS audit (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id TEXT NOT NULL REFERENCES tasks(id),\n from_status TEXT,\n to_status TEXT NOT NULL,\n actor TEXT NOT NULL,\n actor_type TEXT DEFAULT 'human',\n model TEXT,\n notes TEXT,\n commit_sha TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_audit_task ON audit(task_id);\nCREATE INDEX IF NOT EXISTS idx_audit_commit ON audit(commit_sha);\n\n-- Disputes\nCREATE TABLE IF NOT EXISTS disputes (\n id TEXT PRIMARY KEY,\n task_id TEXT NOT NULL REFERENCES tasks(id),\n type TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'open',\n reason TEXT NOT NULL,\n coder_position TEXT,\n reviewer_position TEXT,\n resolution TEXT,\n resolution_notes TEXT,\n created_by TEXT NOT NULL,\n resolved_by TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n resolved_at TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_disputes_task ON disputes(task_id);\nCREATE INDEX IF NOT EXISTS idx_disputes_status ON disputes(status);\n\n-- Task locks (for orchestrator coordination)\nCREATE TABLE IF NOT EXISTS task_locks (\n task_id TEXT PRIMARY KEY REFERENCES tasks(id),\n runner_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL DEFAULT (datetime('now')),\n expires_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_task_locks_expires ON task_locks(expires_at);\n\n-- Section locks (for orchestrator coordination)\nCREATE TABLE IF NOT EXISTS section_locks (\n section_id TEXT PRIMARY KEY REFERENCES sections(id),\n runner_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL DEFAULT (datetime('now')),\n expires_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_section_locks_expires ON section_locks(expires_at);\n\n-- Section dependencies (ordering constraints between sections)\nCREATE TABLE IF NOT EXISTS section_dependencies (\n id TEXT PRIMARY KEY,\n section_id TEXT NOT NULL REFERENCES sections(id),\n depends_on_section_id TEXT NOT NULL REFERENCES sections(id),\n created_at TEXT DEFAULT (datetime('now')),\n UNIQUE(section_id, depends_on_section_id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_section_dependencies_section ON section_dependencies(section_id);\nCREATE INDEX IF NOT EXISTS idx_section_dependencies_depends_on ON section_dependencies(depends_on_section_id);\n\n-- Task invocations (LLM calls per task)\nCREATE TABLE IF NOT EXISTS task_invocations (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id TEXT NOT NULL REFERENCES tasks(id),\n role TEXT NOT NULL,\n provider TEXT NOT NULL,\n model TEXT NOT NULL,\n prompt TEXT NOT NULL,\n response TEXT,\n error TEXT,\n exit_code INTEGER NOT NULL DEFAULT 0,\n duration_ms INTEGER NOT NULL DEFAULT 0,\n success INTEGER NOT NULL DEFAULT 0,\n timed_out INTEGER NOT NULL DEFAULT 0,\n rejection_number INTEGER,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_task_invocations_task ON task_invocations(task_id);\nCREATE INDEX IF NOT EXISTS idx_task_invocations_role ON task_invocations(role);\nCREATE INDEX IF NOT EXISTS idx_task_invocations_created ON task_invocations(created_at DESC);\n";
7
+ export declare const INITIAL_SCHEMA_DATA = "\nINSERT OR REPLACE INTO _schema (key, value) VALUES ('version', '0.1.0');\nINSERT OR REPLACE INTO _schema (key, value) VALUES ('created_at', datetime('now'));\n\n-- Mark all migrations as applied since new databases have the full schema\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (1, '001_initial_schema', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (2, '002_add_commit_sha', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (3, '003_add_section_priority', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (4, '004_add_section_dependencies', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (5, '005_add_audit_actor_model', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (6, '006_add_task_invocations', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (7, '007_add_file_anchor', 'builtin');\n";
8
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,eAAO,MAAM,UAAU,4jJAyItB,CAAC;AAEF,eAAO,MAAM,mBAAmB,q9BAY/B,CAAC"}