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,160 @@
1
+ "use strict";
2
+ /**
3
+ * Database schema definitions for Steroids CLI
4
+ * Creates all required tables with proper constraints
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.INITIAL_SCHEMA_DATA = exports.SCHEMA_SQL = exports.SCHEMA_VERSION = void 0;
8
+ exports.SCHEMA_VERSION = '0.1.0';
9
+ exports.SCHEMA_SQL = `
10
+ -- Schema metadata (version tracking)
11
+ CREATE TABLE IF NOT EXISTS _schema (
12
+ key TEXT PRIMARY KEY,
13
+ value TEXT NOT NULL
14
+ );
15
+
16
+ -- Applied migrations log
17
+ CREATE TABLE IF NOT EXISTS _migrations (
18
+ id INTEGER PRIMARY KEY,
19
+ name TEXT NOT NULL UNIQUE,
20
+ checksum TEXT NOT NULL,
21
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
22
+ );
23
+
24
+ -- Sections (task groups)
25
+ CREATE TABLE IF NOT EXISTS sections (
26
+ id TEXT PRIMARY KEY,
27
+ name TEXT NOT NULL,
28
+ position INTEGER NOT NULL,
29
+ priority INTEGER DEFAULT 50,
30
+ skipped INTEGER DEFAULT 0,
31
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
32
+ );
33
+
34
+ CREATE INDEX IF NOT EXISTS idx_sections_priority ON sections(priority);
35
+
36
+ -- Tasks
37
+ CREATE TABLE IF NOT EXISTS tasks (
38
+ id TEXT PRIMARY KEY,
39
+ title TEXT NOT NULL,
40
+ status TEXT NOT NULL DEFAULT 'pending',
41
+ section_id TEXT REFERENCES sections(id),
42
+ source_file TEXT,
43
+ file_path TEXT,
44
+ file_line INTEGER,
45
+ file_commit_sha TEXT,
46
+ file_content_hash TEXT,
47
+ rejection_count INTEGER NOT NULL DEFAULT 0,
48
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
49
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
50
+ );
51
+
52
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
53
+ CREATE INDEX IF NOT EXISTS idx_tasks_section ON tasks(section_id);
54
+
55
+ -- Audit trail (immutable log of status changes)
56
+ CREATE TABLE IF NOT EXISTS audit (
57
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
58
+ task_id TEXT NOT NULL REFERENCES tasks(id),
59
+ from_status TEXT,
60
+ to_status TEXT NOT NULL,
61
+ actor TEXT NOT NULL,
62
+ actor_type TEXT DEFAULT 'human',
63
+ model TEXT,
64
+ notes TEXT,
65
+ commit_sha TEXT,
66
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
67
+ );
68
+
69
+ CREATE INDEX IF NOT EXISTS idx_audit_task ON audit(task_id);
70
+ CREATE INDEX IF NOT EXISTS idx_audit_commit ON audit(commit_sha);
71
+
72
+ -- Disputes
73
+ CREATE TABLE IF NOT EXISTS disputes (
74
+ id TEXT PRIMARY KEY,
75
+ task_id TEXT NOT NULL REFERENCES tasks(id),
76
+ type TEXT NOT NULL,
77
+ status TEXT NOT NULL DEFAULT 'open',
78
+ reason TEXT NOT NULL,
79
+ coder_position TEXT,
80
+ reviewer_position TEXT,
81
+ resolution TEXT,
82
+ resolution_notes TEXT,
83
+ created_by TEXT NOT NULL,
84
+ resolved_by TEXT,
85
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
86
+ resolved_at TEXT
87
+ );
88
+
89
+ CREATE INDEX IF NOT EXISTS idx_disputes_task ON disputes(task_id);
90
+ CREATE INDEX IF NOT EXISTS idx_disputes_status ON disputes(status);
91
+
92
+ -- Task locks (for orchestrator coordination)
93
+ CREATE TABLE IF NOT EXISTS task_locks (
94
+ task_id TEXT PRIMARY KEY REFERENCES tasks(id),
95
+ runner_id TEXT NOT NULL,
96
+ acquired_at TEXT NOT NULL DEFAULT (datetime('now')),
97
+ expires_at TEXT NOT NULL,
98
+ heartbeat_at TEXT NOT NULL DEFAULT (datetime('now'))
99
+ );
100
+
101
+ CREATE INDEX IF NOT EXISTS idx_task_locks_expires ON task_locks(expires_at);
102
+
103
+ -- Section locks (for orchestrator coordination)
104
+ CREATE TABLE IF NOT EXISTS section_locks (
105
+ section_id TEXT PRIMARY KEY REFERENCES sections(id),
106
+ runner_id TEXT NOT NULL,
107
+ acquired_at TEXT NOT NULL DEFAULT (datetime('now')),
108
+ expires_at TEXT NOT NULL
109
+ );
110
+
111
+ CREATE INDEX IF NOT EXISTS idx_section_locks_expires ON section_locks(expires_at);
112
+
113
+ -- Section dependencies (ordering constraints between sections)
114
+ CREATE TABLE IF NOT EXISTS section_dependencies (
115
+ id TEXT PRIMARY KEY,
116
+ section_id TEXT NOT NULL REFERENCES sections(id),
117
+ depends_on_section_id TEXT NOT NULL REFERENCES sections(id),
118
+ created_at TEXT DEFAULT (datetime('now')),
119
+ UNIQUE(section_id, depends_on_section_id)
120
+ );
121
+
122
+ CREATE INDEX IF NOT EXISTS idx_section_dependencies_section ON section_dependencies(section_id);
123
+ CREATE INDEX IF NOT EXISTS idx_section_dependencies_depends_on ON section_dependencies(depends_on_section_id);
124
+
125
+ -- Task invocations (LLM calls per task)
126
+ CREATE TABLE IF NOT EXISTS task_invocations (
127
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
128
+ task_id TEXT NOT NULL REFERENCES tasks(id),
129
+ role TEXT NOT NULL,
130
+ provider TEXT NOT NULL,
131
+ model TEXT NOT NULL,
132
+ prompt TEXT NOT NULL,
133
+ response TEXT,
134
+ error TEXT,
135
+ exit_code INTEGER NOT NULL DEFAULT 0,
136
+ duration_ms INTEGER NOT NULL DEFAULT 0,
137
+ success INTEGER NOT NULL DEFAULT 0,
138
+ timed_out INTEGER NOT NULL DEFAULT 0,
139
+ rejection_number INTEGER,
140
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
141
+ );
142
+
143
+ CREATE INDEX IF NOT EXISTS idx_task_invocations_task ON task_invocations(task_id);
144
+ CREATE INDEX IF NOT EXISTS idx_task_invocations_role ON task_invocations(role);
145
+ CREATE INDEX IF NOT EXISTS idx_task_invocations_created ON task_invocations(created_at DESC);
146
+ `;
147
+ exports.INITIAL_SCHEMA_DATA = `
148
+ INSERT OR REPLACE INTO _schema (key, value) VALUES ('version', '${exports.SCHEMA_VERSION}');
149
+ INSERT OR REPLACE INTO _schema (key, value) VALUES ('created_at', datetime('now'));
150
+
151
+ -- Mark all migrations as applied since new databases have the full schema
152
+ INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (1, '001_initial_schema', 'builtin');
153
+ INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (2, '002_add_commit_sha', 'builtin');
154
+ INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (3, '003_add_section_priority', 'builtin');
155
+ INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (4, '004_add_section_dependencies', 'builtin');
156
+ INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (5, '005_add_audit_actor_model', 'builtin');
157
+ INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (6, '006_add_task_invocations', 'builtin');
158
+ INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (7, '007_add_file_anchor', 'builtin');
159
+ `;
160
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEU,QAAA,cAAc,GAAG,OAAO,CAAC;AAEzB,QAAA,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyIzB,CAAC;AAEW,QAAA,mBAAmB,GAAG;kEAC+B,sBAAc;;;;;;;;;;;CAW/E,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Major/minor dispute behavior
3
+ *
4
+ * Defines how different dispute types affect the loop:
5
+ * - Major disputes can block the loop if configured
6
+ * - Minor disputes are logged but work continues
7
+ */
8
+ import type Database from 'better-sqlite3';
9
+ import type { DisputeType, Dispute } from './types.js';
10
+ /**
11
+ * Dispute behavior configuration
12
+ */
13
+ export interface DisputeBehaviorConfig {
14
+ /** If true, major disputes block the automation loop */
15
+ majorBlocksLoop: boolean;
16
+ /** Auto-create system dispute after 15 rejections */
17
+ autoCreateOnMaxRejections: boolean;
18
+ /** Days before dispute is considered stale */
19
+ timeoutDays: number;
20
+ }
21
+ /**
22
+ * Default dispute behavior configuration
23
+ */
24
+ export declare const DEFAULT_DISPUTE_BEHAVIOR: DisputeBehaviorConfig;
25
+ /**
26
+ * Result of checking if loop should be blocked
27
+ */
28
+ export interface LoopBlockResult {
29
+ /** Whether the loop should be blocked */
30
+ blocked: boolean;
31
+ /** Reason for blocking */
32
+ reason?: string;
33
+ /** Disputes causing the block */
34
+ blockingDisputes?: Dispute[];
35
+ }
36
+ /**
37
+ * Check if the loop should be blocked due to major disputes
38
+ */
39
+ export declare function checkLoopBlocked(db: Database.Database, config?: DisputeBehaviorConfig): LoopBlockResult;
40
+ /**
41
+ * Determine the behavior for a dispute type
42
+ */
43
+ export interface DisputeBehavior {
44
+ /** Whether this type blocks the task */
45
+ blocksTask: boolean;
46
+ /** Whether task status changes to 'disputed' */
47
+ changesTaskStatus: boolean;
48
+ /** Whether this type can block the loop */
49
+ canBlockLoop: boolean;
50
+ /** Human-readable description */
51
+ description: string;
52
+ }
53
+ /**
54
+ * Get the behavior for a dispute type
55
+ */
56
+ export declare function getDisputeBehavior(type: DisputeType, config?: DisputeBehaviorConfig): DisputeBehavior;
57
+ /**
58
+ * Actions to take when a dispute is created
59
+ */
60
+ export interface DisputeCreatedActions {
61
+ /** Push work to git */
62
+ pushToGit: boolean;
63
+ /** Move to next task */
64
+ moveToNextTask: boolean;
65
+ /** Block the loop */
66
+ blockLoop: boolean;
67
+ /** Update dispute.md */
68
+ updateDisputeLog: boolean;
69
+ }
70
+ /**
71
+ * Get actions to take when a dispute is created
72
+ */
73
+ export declare function getActionsOnDisputeCreated(type: DisputeType, config?: DisputeBehaviorConfig): DisputeCreatedActions;
74
+ /**
75
+ * Get a summary of current dispute status for loop
76
+ */
77
+ export declare function getDisputeLoopSummary(db: Database.Database, config?: DisputeBehaviorConfig): string;
78
+ /**
79
+ * Check if loop can proceed (not blocked by disputes)
80
+ */
81
+ export declare function canLoopProceed(db: Database.Database, config?: DisputeBehaviorConfig): boolean;
82
+ /**
83
+ * Options for handling a disputed task
84
+ */
85
+ export interface DisputedTaskHandling {
86
+ /** Should the task be skipped in task selection */
87
+ skipInSelection: boolean;
88
+ /** Is the task considered "done" for loop purposes */
89
+ consideredDone: boolean;
90
+ /** Should the task be included in progress reports */
91
+ includeInProgress: boolean;
92
+ }
93
+ /**
94
+ * Get handling options for disputed tasks
95
+ */
96
+ export declare function getDisputedTaskHandling(): DisputedTaskHandling;
97
+ /**
98
+ * Status markers for terminal states
99
+ * Disputed [!] is considered terminal like completed [x]
100
+ */
101
+ export declare const TERMINAL_STATUSES: readonly ["completed", "disputed", "failed"];
102
+ /**
103
+ * Check if a task status is terminal (no more work needed)
104
+ */
105
+ export declare function isTerminalStatus(status: string): boolean;
106
+ //# sourceMappingURL=behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/disputes/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIvD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,yBAAyB,EAAE,OAAO,CAAC;IACnC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAItC,CAAC;AAIF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,GAAE,qBAAgD,GACvD,eAAe,CAkBjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,YAAY,EAAE,OAAO,CAAC;IACtB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,qBAAgD,GACvD,eAAe,CA4CjB;AAID;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,qBAAgD,GACvD,qBAAqB,CASvB;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,GAAE,qBAAgD,GACvD,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,GAAE,qBAAgD,GACvD,OAAO,CAET;AAID;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,eAAe,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,oBAAoB,CAM9D;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,8CAA+C,CAAC;AAE9E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Major/minor dispute behavior
4
+ *
5
+ * Defines how different dispute types affect the loop:
6
+ * - Major disputes can block the loop if configured
7
+ * - Minor disputes are logged but work continues
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TERMINAL_STATUSES = exports.DEFAULT_DISPUTE_BEHAVIOR = void 0;
11
+ exports.checkLoopBlocked = checkLoopBlocked;
12
+ exports.getDisputeBehavior = getDisputeBehavior;
13
+ exports.getActionsOnDisputeCreated = getActionsOnDisputeCreated;
14
+ exports.getDisputeLoopSummary = getDisputeLoopSummary;
15
+ exports.canLoopProceed = canLoopProceed;
16
+ exports.getDisputedTaskHandling = getDisputedTaskHandling;
17
+ exports.isTerminalStatus = isTerminalStatus;
18
+ const queries_js_1 = require("./queries.js");
19
+ /**
20
+ * Default dispute behavior configuration
21
+ */
22
+ exports.DEFAULT_DISPUTE_BEHAVIOR = {
23
+ majorBlocksLoop: false,
24
+ autoCreateOnMaxRejections: true,
25
+ timeoutDays: 7,
26
+ };
27
+ /**
28
+ * Check if the loop should be blocked due to major disputes
29
+ */
30
+ function checkLoopBlocked(db, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
31
+ // If major disputes don't block the loop, return immediately
32
+ if (!config.majorBlocksLoop) {
33
+ return { blocked: false };
34
+ }
35
+ // Find open major disputes
36
+ const majorDisputes = (0, queries_js_1.listDisputes)(db, { type: 'major', status: 'open' });
37
+ if (majorDisputes.length === 0) {
38
+ return { blocked: false };
39
+ }
40
+ return {
41
+ blocked: true,
42
+ reason: `${majorDisputes.length} major dispute(s) require human resolution`,
43
+ blockingDisputes: majorDisputes,
44
+ };
45
+ }
46
+ /**
47
+ * Get the behavior for a dispute type
48
+ */
49
+ function getDisputeBehavior(type, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
50
+ switch (type) {
51
+ case 'major':
52
+ return {
53
+ blocksTask: true,
54
+ changesTaskStatus: true,
55
+ canBlockLoop: config.majorBlocksLoop,
56
+ description: config.majorBlocksLoop
57
+ ? 'Blocks task and loop until resolved by human'
58
+ : 'Blocks task, loop continues to next task',
59
+ };
60
+ case 'minor':
61
+ return {
62
+ blocksTask: false,
63
+ changesTaskStatus: false,
64
+ canBlockLoop: false,
65
+ description: 'Logged disagreement, coder implementation continues',
66
+ };
67
+ case 'coder':
68
+ return {
69
+ blocksTask: true,
70
+ changesTaskStatus: true,
71
+ canBlockLoop: false,
72
+ description: 'Coder disputes rejection, task marked disputed, loop continues',
73
+ };
74
+ case 'reviewer':
75
+ return {
76
+ blocksTask: true,
77
+ changesTaskStatus: true,
78
+ canBlockLoop: false,
79
+ description: 'Reviewer raises concern, task marked disputed, loop continues',
80
+ };
81
+ case 'system':
82
+ return {
83
+ blocksTask: true,
84
+ changesTaskStatus: true,
85
+ canBlockLoop: false,
86
+ description: 'Auto-created after max rejections, requires human intervention',
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Get actions to take when a dispute is created
92
+ */
93
+ function getActionsOnDisputeCreated(type, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
94
+ const behavior = getDisputeBehavior(type, config);
95
+ return {
96
+ pushToGit: type !== 'minor', // Always push for non-minor disputes
97
+ moveToNextTask: !behavior.canBlockLoop, // Move on unless loop is blocked
98
+ blockLoop: behavior.canBlockLoop,
99
+ updateDisputeLog: true, // Always update dispute.md
100
+ };
101
+ }
102
+ // ============ Summary Helpers ============
103
+ /**
104
+ * Get a summary of current dispute status for loop
105
+ */
106
+ function getDisputeLoopSummary(db, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
107
+ const counts = (0, queries_js_1.countDisputesByStatus)(db);
108
+ const blockResult = checkLoopBlocked(db, config);
109
+ const lines = [];
110
+ if (blockResult.blocked) {
111
+ lines.push(`LOOP BLOCKED: ${blockResult.reason}`);
112
+ lines.push('');
113
+ }
114
+ lines.push(`Disputes: ${counts.open} open, ${counts.resolved} resolved`);
115
+ if (config.majorBlocksLoop) {
116
+ lines.push('Config: Major disputes block loop');
117
+ }
118
+ else {
119
+ lines.push('Config: Major disputes logged but loop continues');
120
+ }
121
+ return lines.join('\n');
122
+ }
123
+ /**
124
+ * Check if loop can proceed (not blocked by disputes)
125
+ */
126
+ function canLoopProceed(db, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
127
+ return !checkLoopBlocked(db, config).blocked;
128
+ }
129
+ /**
130
+ * Get handling options for disputed tasks
131
+ */
132
+ function getDisputedTaskHandling() {
133
+ return {
134
+ skipInSelection: true, // Disputed tasks are skipped
135
+ consideredDone: true, // Treated as done for loop progress
136
+ includeInProgress: false, // Not counted as work in progress
137
+ };
138
+ }
139
+ /**
140
+ * Status markers for terminal states
141
+ * Disputed [!] is considered terminal like completed [x]
142
+ */
143
+ exports.TERMINAL_STATUSES = ['completed', 'disputed', 'failed'];
144
+ /**
145
+ * Check if a task status is terminal (no more work needed)
146
+ */
147
+ function isTerminalStatus(status) {
148
+ return exports.TERMINAL_STATUSES.includes(status);
149
+ }
150
+ //# sourceMappingURL=behavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/disputes/behavior.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Dispute creation logic
3
+ *
4
+ * Creates disputes linked to tasks, sets appropriate positions
5
+ * based on the actor (coder or reviewer), and updates task status.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { DisputeType, CreateDisputeInput } from './types.js';
9
+ export interface CreateDisputeResult {
10
+ success: true;
11
+ disputeId: string;
12
+ taskId: string;
13
+ type: DisputeType;
14
+ taskStatusUpdated: boolean;
15
+ }
16
+ export interface CreateDisputeError {
17
+ success: false;
18
+ error: string;
19
+ code: 'TASK_NOT_FOUND' | 'DISPUTE_EXISTS' | 'INVALID_TYPE' | 'INVALID_REASON';
20
+ }
21
+ export type CreateDisputeOutcome = CreateDisputeResult | CreateDisputeError;
22
+ /**
23
+ * Create a new dispute for a task
24
+ *
25
+ * This function:
26
+ * 1. Validates the input
27
+ * 2. Creates the dispute record
28
+ * 3. Sets the position based on actor role (coder or reviewer)
29
+ * 4. Updates task status to 'disputed' (except for minor disputes)
30
+ * 5. Adds an audit entry
31
+ */
32
+ export declare function createDispute(db: Database.Database, input: CreateDisputeInput): CreateDisputeOutcome;
33
+ /**
34
+ * Create a coder dispute (coder disagrees with reviewer rejection)
35
+ */
36
+ export declare function createCoderDispute(db: Database.Database, taskId: string, reason: string, position: string, model: string): CreateDisputeOutcome;
37
+ /**
38
+ * Create a reviewer dispute (reviewer raises concern)
39
+ */
40
+ export declare function createReviewerDispute(db: Database.Database, taskId: string, reason: string, position: string, model: string): CreateDisputeOutcome;
41
+ /**
42
+ * Create a major dispute (blocks task, requires human resolution)
43
+ */
44
+ export declare function createMajorDispute(db: Database.Database, taskId: string, reason: string, position: string, createdBy: string): CreateDisputeOutcome;
45
+ /**
46
+ * Create a minor dispute (logged only, doesn't block)
47
+ */
48
+ export declare function createMinorDispute(db: Database.Database, taskId: string, reason: string, position: string, createdBy: string): CreateDisputeOutcome;
49
+ /**
50
+ * Create a system dispute (auto-created after 15 rejections)
51
+ * Called from the task rejection logic
52
+ */
53
+ export declare function createSystemDispute(db: Database.Database, taskId: string, reason?: string): CreateDisputeOutcome;
54
+ /**
55
+ * Log a minor disagreement without changing task status
56
+ * Used for non-blocking style/preference disagreements
57
+ */
58
+ export declare function logMinorDisagreement(db: Database.Database, taskId: string, notes: string, createdBy: string): CreateDisputeOutcome;
59
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/disputes/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAEV,WAAW,EACX,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,CAAC;CAC/E;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAiE5E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,kBAAkB,GACxB,oBAAoB,CA2DtB;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAQtB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAiC,GACxC,oBAAoB,CAQtB;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAmCtB"}