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 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/disputes/markdown.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA2BH,0DAsDC;AAyJD,4CAeC;AAKD,0CASC;AAKD,8CAIC;AAKD,gDAGC;AAQD,8CAKC;AAKD,sEAEC;AA1SD,qCAAkE;AAClE,yCAAiC;AAEjC,6CAIsB;AAOtB,yCAA0E;AAE1E,0CAA0C;AAE1C,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAEvC,gDAAgD;AAEhD;;GAEG;AACH,SAAgB,uBAAuB,CAAC,EAAqB;IAC3D,MAAM,YAAY,GAAG,IAAA,kCAAqB,EAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,gBAAgB,GAAG,IAAA,kCAAqB,EAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAE3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,4BAA4B,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,yBAAyB,YAAY,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,gBAAgB;IAChB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,OAAwB;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,UAAU,OAAO,WAAW,OAAO,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAA,8BAAiB,EAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACtH,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,iBAAiB;IACjB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,oBAAoB,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kCAAkC,OAAO,4CAA4C,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+CAA+C;AAE/C;;GAEG;AACH,SAAS,cAAc,CAAC,MAAqB,EAAE,UAAqC;IAClF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,IAAiB;IACrC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,GAAG,CAAC;QACb,KAAK,OAAO;YACV,OAAO,GAAG,CAAC;QACb,KAAK,UAAU;YACb,OAAO,GAAG,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,IAAA,0BAAe,EAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,MAAM,MAAM,sCAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAA4B;IACpD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,iCAAiC,CAAC;QAC3C,KAAK,UAAU;YACb,OAAO,4CAA4C,CAAC;QACtD,KAAK,QAAQ;YACX,OAAO,0BAA0B,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,4CAA4C;AAE5C;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,EAAqB,EACrB,WAAoB;IAEpB,MAAM,QAAQ,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,OAAO,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAA,uBAAa,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE1C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,OAAO;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,WAAoB;IAClD,MAAM,QAAQ,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAEnD,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAA,sBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,WAAoB;IACpD,MAAM,QAAQ,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACnD,OAAO,IAAA,oBAAU,EAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,WAAoB;IACrD,MAAM,QAAQ,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9C,OAAO,IAAA,gBAAI,EAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAED,8CAA8C;AAE9C;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,EAAqB,EACrB,WAAoB;IAEpB,gBAAgB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,6BAA6B,CAAC,OAAwB;IACpE,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Database queries for disputes
3
+ *
4
+ * Provides CRUD operations for the disputes table and
5
+ * integration with the task system.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { Dispute, DisputeType, DisputeStatus, ResolutionDecision } from './types.js';
9
+ /**
10
+ * Get a dispute by ID (supports short ID prefix match)
11
+ */
12
+ export declare function getDispute(db: Database.Database, id: string): Dispute | null;
13
+ /**
14
+ * Get all disputes for a specific task
15
+ */
16
+ export declare function getDisputesForTask(db: Database.Database, taskId: string): Dispute[];
17
+ /**
18
+ * Get the most recent open dispute for a task (if any)
19
+ */
20
+ export declare function getOpenDisputeForTask(db: Database.Database, taskId: string): Dispute | null;
21
+ /**
22
+ * List disputes with optional filtering
23
+ */
24
+ export declare function listDisputes(db: Database.Database, options?: {
25
+ status?: DisputeStatus | 'all';
26
+ type?: DisputeType;
27
+ taskId?: string;
28
+ }): Dispute[];
29
+ /**
30
+ * Get stale disputes (open longer than specified days)
31
+ */
32
+ export declare function getStaleDisputes(db: Database.Database, timeoutDays: number): Dispute[];
33
+ /**
34
+ * Count disputes by status
35
+ */
36
+ export declare function countDisputesByStatus(db: Database.Database): {
37
+ open: number;
38
+ resolved: number;
39
+ total: number;
40
+ };
41
+ /**
42
+ * Insert a new dispute into the database
43
+ */
44
+ export declare function insertDispute(db: Database.Database, params: {
45
+ taskId: string;
46
+ type: DisputeType;
47
+ reason: string;
48
+ createdBy: string;
49
+ coderPosition?: string;
50
+ reviewerPosition?: string;
51
+ }): string;
52
+ /**
53
+ * Update coder position on a dispute
54
+ */
55
+ export declare function updateCoderPosition(db: Database.Database, disputeId: string, position: string): void;
56
+ /**
57
+ * Update reviewer position on a dispute
58
+ */
59
+ export declare function updateReviewerPosition(db: Database.Database, disputeId: string, position: string): void;
60
+ /**
61
+ * Resolve a dispute
62
+ */
63
+ export declare function resolveDispute(db: Database.Database, disputeId: string, decision: ResolutionDecision, resolvedBy: string, notes?: string): void;
64
+ /**
65
+ * Dispute record with associated task title
66
+ */
67
+ export interface DisputeWithTask extends Dispute {
68
+ task_title: string;
69
+ task_status: string;
70
+ }
71
+ /**
72
+ * List disputes with associated task information
73
+ */
74
+ export declare function listDisputesWithTasks(db: Database.Database, options?: {
75
+ status?: DisputeStatus | 'all';
76
+ stale?: boolean;
77
+ timeoutDays?: number;
78
+ }): DisputeWithTask[];
79
+ /**
80
+ * Calculate days open for a dispute
81
+ */
82
+ export declare function calculateDaysOpen(createdAt: string): number;
83
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/disputes/queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,GACT,OAAO,GAAG,IAAI,CAchB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,EAAE,CAQX;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,GAAG,IAAI,CAShB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAC/B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,OAAO,EAAE,CAyBX;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,EAAE,CASX;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgBnD;AAID;;GAEG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACA,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI,CAUN;AAID;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,eAAe,EAAE,CAuBnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAK3D"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * Database queries for disputes
4
+ *
5
+ * Provides CRUD operations for the disputes table and
6
+ * integration with the task system.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getDispute = getDispute;
10
+ exports.getDisputesForTask = getDisputesForTask;
11
+ exports.getOpenDisputeForTask = getOpenDisputeForTask;
12
+ exports.listDisputes = listDisputes;
13
+ exports.getStaleDisputes = getStaleDisputes;
14
+ exports.countDisputesByStatus = countDisputesByStatus;
15
+ exports.insertDispute = insertDispute;
16
+ exports.updateCoderPosition = updateCoderPosition;
17
+ exports.updateReviewerPosition = updateReviewerPosition;
18
+ exports.resolveDispute = resolveDispute;
19
+ exports.listDisputesWithTasks = listDisputesWithTasks;
20
+ exports.calculateDaysOpen = calculateDaysOpen;
21
+ const uuid_1 = require("uuid");
22
+ // ============ Read Operations ============
23
+ /**
24
+ * Get a dispute by ID (supports short ID prefix match)
25
+ */
26
+ function getDispute(db, id) {
27
+ // Try exact match first
28
+ let dispute = db
29
+ .prepare('SELECT * FROM disputes WHERE id = ?')
30
+ .get(id);
31
+ // If not found, try prefix match (for short IDs)
32
+ if (!dispute && id.length >= 6) {
33
+ dispute = db
34
+ .prepare('SELECT * FROM disputes WHERE id LIKE ?')
35
+ .get(`${id}%`);
36
+ }
37
+ return dispute;
38
+ }
39
+ /**
40
+ * Get all disputes for a specific task
41
+ */
42
+ function getDisputesForTask(db, taskId) {
43
+ return db
44
+ .prepare(`SELECT * FROM disputes
45
+ WHERE task_id = ?
46
+ ORDER BY created_at DESC`)
47
+ .all(taskId);
48
+ }
49
+ /**
50
+ * Get the most recent open dispute for a task (if any)
51
+ */
52
+ function getOpenDisputeForTask(db, taskId) {
53
+ return db
54
+ .prepare(`SELECT * FROM disputes
55
+ WHERE task_id = ? AND status = 'open'
56
+ ORDER BY created_at DESC
57
+ LIMIT 1`)
58
+ .get(taskId);
59
+ }
60
+ /**
61
+ * List disputes with optional filtering
62
+ */
63
+ function listDisputes(db, options = {}) {
64
+ let sql = `
65
+ SELECT d.* FROM disputes d
66
+ WHERE 1=1
67
+ `;
68
+ const params = [];
69
+ if (options.status && options.status !== 'all') {
70
+ sql += ' AND d.status = ?';
71
+ params.push(options.status);
72
+ }
73
+ if (options.type) {
74
+ sql += ' AND d.type = ?';
75
+ params.push(options.type);
76
+ }
77
+ if (options.taskId) {
78
+ sql += ' AND d.task_id = ?';
79
+ params.push(options.taskId);
80
+ }
81
+ sql += ' ORDER BY d.created_at DESC';
82
+ return db.prepare(sql).all(...params);
83
+ }
84
+ /**
85
+ * Get stale disputes (open longer than specified days)
86
+ */
87
+ function getStaleDisputes(db, timeoutDays) {
88
+ return db
89
+ .prepare(`SELECT * FROM disputes
90
+ WHERE status = 'open'
91
+ AND datetime(created_at, '+' || ? || ' days') < datetime('now')
92
+ ORDER BY created_at ASC`)
93
+ .all(timeoutDays);
94
+ }
95
+ /**
96
+ * Count disputes by status
97
+ */
98
+ function countDisputesByStatus(db) {
99
+ const result = db
100
+ .prepare(`SELECT
101
+ SUM(CASE WHEN status = 'open' THEN 1 ELSE 0 END) as open,
102
+ SUM(CASE WHEN status = 'resolved' THEN 1 ELSE 0 END) as resolved,
103
+ COUNT(*) as total
104
+ FROM disputes`)
105
+ .get();
106
+ return {
107
+ open: result.open ?? 0,
108
+ resolved: result.resolved ?? 0,
109
+ total: result.total ?? 0,
110
+ };
111
+ }
112
+ // ============ Write Operations ============
113
+ /**
114
+ * Insert a new dispute into the database
115
+ */
116
+ function insertDispute(db, params) {
117
+ const id = (0, uuid_1.v4)();
118
+ db.prepare(`INSERT INTO disputes (
119
+ id, task_id, type, reason, created_by,
120
+ coder_position, reviewer_position
121
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)`).run(id, params.taskId, params.type, params.reason, params.createdBy, params.coderPosition ?? null, params.reviewerPosition ?? null);
122
+ return id;
123
+ }
124
+ /**
125
+ * Update coder position on a dispute
126
+ */
127
+ function updateCoderPosition(db, disputeId, position) {
128
+ db.prepare(`UPDATE disputes SET coder_position = ? WHERE id = ?`).run(position, disputeId);
129
+ }
130
+ /**
131
+ * Update reviewer position on a dispute
132
+ */
133
+ function updateReviewerPosition(db, disputeId, position) {
134
+ db.prepare(`UPDATE disputes SET reviewer_position = ? WHERE id = ?`).run(position, disputeId);
135
+ }
136
+ /**
137
+ * Resolve a dispute
138
+ */
139
+ function resolveDispute(db, disputeId, decision, resolvedBy, notes) {
140
+ db.prepare(`UPDATE disputes
141
+ SET status = 'resolved',
142
+ resolution = ?,
143
+ resolution_notes = ?,
144
+ resolved_by = ?,
145
+ resolved_at = datetime('now')
146
+ WHERE id = ?`).run(decision, notes ?? null, resolvedBy, disputeId);
147
+ }
148
+ /**
149
+ * List disputes with associated task information
150
+ */
151
+ function listDisputesWithTasks(db, options = {}) {
152
+ let sql = `
153
+ SELECT d.*, t.title as task_title, t.status as task_status
154
+ FROM disputes d
155
+ JOIN tasks t ON d.task_id = t.id
156
+ WHERE 1=1
157
+ `;
158
+ const params = [];
159
+ if (options.status && options.status !== 'all') {
160
+ sql += ' AND d.status = ?';
161
+ params.push(options.status);
162
+ }
163
+ if (options.stale && options.timeoutDays) {
164
+ sql += ` AND d.status = 'open'
165
+ AND datetime(d.created_at, '+' || ? || ' days') < datetime('now')`;
166
+ params.push(options.timeoutDays);
167
+ }
168
+ sql += ' ORDER BY d.created_at DESC';
169
+ return db.prepare(sql).all(...params);
170
+ }
171
+ /**
172
+ * Calculate days open for a dispute
173
+ */
174
+ function calculateDaysOpen(createdAt) {
175
+ const created = new Date(createdAt);
176
+ const now = new Date();
177
+ const diffMs = now.getTime() - created.getTime();
178
+ return Math.floor(diffMs / (1000 * 60 * 60 * 24));
179
+ }
180
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/disputes/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Dispute resolution logic
3
+ *
4
+ * Handles resolving disputes with decisions (coder/reviewer/custom)
5
+ * and updates task status accordingly.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { Dispute, ResolutionDecision, ResolveDisputeInput } from './types.js';
9
+ export interface ResolveDisputeResult {
10
+ success: true;
11
+ disputeId: string;
12
+ taskId: string;
13
+ decision: ResolutionDecision;
14
+ taskNewStatus: string;
15
+ }
16
+ export interface ResolveDisputeError {
17
+ success: false;
18
+ error: string;
19
+ code: 'DISPUTE_NOT_FOUND' | 'ALREADY_RESOLVED' | 'TASK_NOT_FOUND' | 'INVALID_DECISION';
20
+ }
21
+ export type ResolveDisputeOutcome = ResolveDisputeResult | ResolveDisputeError;
22
+ /**
23
+ * Resolve a dispute with a decision
24
+ *
25
+ * Effects based on decision:
26
+ * - coder: Task stays completed/disputed (dispute resolved, coder's implementation accepted)
27
+ * - reviewer: Task goes back to in_progress (coder must fix per reviewer feedback)
28
+ * - custom: Task goes back to in_progress (coder implements custom solution)
29
+ */
30
+ export declare function resolve(db: Database.Database, input: ResolveDisputeInput): ResolveDisputeOutcome;
31
+ /**
32
+ * Resolve dispute in favor of coder
33
+ * Task is marked as completed.
34
+ */
35
+ export declare function resolveInFavorOfCoder(db: Database.Database, disputeId: string, resolvedBy: string, notes?: string): ResolveDisputeOutcome;
36
+ /**
37
+ * Resolve dispute in favor of reviewer
38
+ * Task goes back to in_progress for coder to fix.
39
+ */
40
+ export declare function resolveInFavorOfReviewer(db: Database.Database, disputeId: string, resolvedBy: string, notes?: string): ResolveDisputeOutcome;
41
+ /**
42
+ * Resolve dispute with custom solution
43
+ * Task goes back to in_progress for coder to implement custom solution.
44
+ */
45
+ export declare function resolveWithCustomSolution(db: Database.Database, disputeId: string, resolvedBy: string, notes: string): ResolveDisputeOutcome;
46
+ /**
47
+ * Check if a dispute can be resolved
48
+ */
49
+ export declare function canResolve(db: Database.Database, disputeId: string): {
50
+ canResolve: boolean;
51
+ reason?: string;
52
+ };
53
+ /**
54
+ * Get resolution summary for a resolved dispute
55
+ */
56
+ export declare function getResolutionSummary(dispute: Dispute): string | null;
57
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/disputes/resolve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAU3C,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EACA,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,CAAC;CACxB;AAED,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAsD/E;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,mBAAmB,GACzB,qBAAqB,CAoDvB;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,qBAAqB,CAOvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,qBAAqB,CAOvB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,qBAAqB,CAOvB;AAID;;GAEG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiB1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAiBpE"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ /**
3
+ * Dispute resolution logic
4
+ *
5
+ * Handles resolving disputes with decisions (coder/reviewer/custom)
6
+ * and updates task status accordingly.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.resolve = resolve;
10
+ exports.resolveInFavorOfCoder = resolveInFavorOfCoder;
11
+ exports.resolveInFavorOfReviewer = resolveInFavorOfReviewer;
12
+ exports.resolveWithCustomSolution = resolveWithCustomSolution;
13
+ exports.canResolve = canResolve;
14
+ exports.getResolutionSummary = getResolutionSummary;
15
+ const queries_js_1 = require("./queries.js");
16
+ const queries_js_2 = require("../database/queries.js");
17
+ const types_js_1 = require("./types.js");
18
+ // ============ Validation ============
19
+ /**
20
+ * Validate resolution input
21
+ */
22
+ function validateInput(db, input) {
23
+ // Check dispute exists
24
+ const dispute = (0, queries_js_1.getDispute)(db, input.disputeId);
25
+ if (!dispute) {
26
+ return {
27
+ success: false,
28
+ error: `Dispute not found: ${input.disputeId}`,
29
+ code: 'DISPUTE_NOT_FOUND',
30
+ };
31
+ }
32
+ // Check dispute is not already resolved
33
+ if (dispute.status === 'resolved') {
34
+ return {
35
+ success: false,
36
+ error: `Dispute already resolved: ${input.disputeId}`,
37
+ code: 'ALREADY_RESOLVED',
38
+ };
39
+ }
40
+ // Check decision is valid
41
+ if (!(0, types_js_1.isResolutionDecision)(input.decision)) {
42
+ return {
43
+ success: false,
44
+ error: `Invalid decision: ${input.decision}. Must be coder, reviewer, or custom`,
45
+ code: 'INVALID_DECISION',
46
+ };
47
+ }
48
+ // Check task exists
49
+ const task = (0, queries_js_2.getTask)(db, dispute.task_id);
50
+ if (!task) {
51
+ return {
52
+ success: false,
53
+ error: `Task not found for dispute: ${dispute.task_id}`,
54
+ code: 'TASK_NOT_FOUND',
55
+ };
56
+ }
57
+ return null;
58
+ }
59
+ // ============ Main Resolve Function ============
60
+ /**
61
+ * Resolve a dispute with a decision
62
+ *
63
+ * Effects based on decision:
64
+ * - coder: Task stays completed/disputed (dispute resolved, coder's implementation accepted)
65
+ * - reviewer: Task goes back to in_progress (coder must fix per reviewer feedback)
66
+ * - custom: Task goes back to in_progress (coder implements custom solution)
67
+ */
68
+ function resolve(db, input) {
69
+ // Validate input
70
+ const validationError = validateInput(db, input);
71
+ if (validationError) {
72
+ return validationError;
73
+ }
74
+ // Get dispute and task (we know they exist from validation)
75
+ const dispute = (0, queries_js_1.getDispute)(db, input.disputeId);
76
+ const task = (0, queries_js_2.getTask)(db, dispute.task_id);
77
+ // Update dispute to resolved
78
+ (0, queries_js_1.resolveDispute)(db, dispute.id, input.decision, input.resolvedBy, input.notes);
79
+ // Update task status based on decision
80
+ let taskNewStatus;
81
+ if (input.decision === 'coder') {
82
+ // Accept coder's implementation - mark as completed
83
+ taskNewStatus = 'completed';
84
+ (0, queries_js_2.updateTaskStatus)(db, task.id, 'completed', input.resolvedBy, `Dispute resolved in favor of coder. ${input.notes ?? ''}`);
85
+ }
86
+ else {
87
+ // Reviewer or custom - task goes back to in_progress
88
+ taskNewStatus = 'in_progress';
89
+ (0, queries_js_2.updateTaskStatus)(db, task.id, 'in_progress', input.resolvedBy, `Dispute resolved in favor of ${input.decision}. Coder must implement changes. ${input.notes ?? ''}`);
90
+ }
91
+ return {
92
+ success: true,
93
+ disputeId: dispute.id,
94
+ taskId: task.id,
95
+ decision: input.decision,
96
+ taskNewStatus,
97
+ };
98
+ }
99
+ // ============ Specialized Resolution Functions ============
100
+ /**
101
+ * Resolve dispute in favor of coder
102
+ * Task is marked as completed.
103
+ */
104
+ function resolveInFavorOfCoder(db, disputeId, resolvedBy, notes) {
105
+ return resolve(db, {
106
+ disputeId,
107
+ decision: 'coder',
108
+ resolvedBy,
109
+ notes,
110
+ });
111
+ }
112
+ /**
113
+ * Resolve dispute in favor of reviewer
114
+ * Task goes back to in_progress for coder to fix.
115
+ */
116
+ function resolveInFavorOfReviewer(db, disputeId, resolvedBy, notes) {
117
+ return resolve(db, {
118
+ disputeId,
119
+ decision: 'reviewer',
120
+ resolvedBy,
121
+ notes,
122
+ });
123
+ }
124
+ /**
125
+ * Resolve dispute with custom solution
126
+ * Task goes back to in_progress for coder to implement custom solution.
127
+ */
128
+ function resolveWithCustomSolution(db, disputeId, resolvedBy, notes) {
129
+ return resolve(db, {
130
+ disputeId,
131
+ decision: 'custom',
132
+ resolvedBy,
133
+ notes,
134
+ });
135
+ }
136
+ // ============ Dispute State Helpers ============
137
+ /**
138
+ * Check if a dispute can be resolved
139
+ */
140
+ function canResolve(db, disputeId) {
141
+ const dispute = (0, queries_js_1.getDispute)(db, disputeId);
142
+ if (!dispute) {
143
+ return { canResolve: false, reason: 'Dispute not found' };
144
+ }
145
+ if (dispute.status === 'resolved') {
146
+ return { canResolve: false, reason: 'Dispute already resolved' };
147
+ }
148
+ const task = (0, queries_js_2.getTask)(db, dispute.task_id);
149
+ if (!task) {
150
+ return { canResolve: false, reason: 'Associated task not found' };
151
+ }
152
+ return { canResolve: true };
153
+ }
154
+ /**
155
+ * Get resolution summary for a resolved dispute
156
+ */
157
+ function getResolutionSummary(dispute) {
158
+ if (dispute.status !== 'resolved' || !dispute.resolution) {
159
+ return null;
160
+ }
161
+ const decisionText = dispute.resolution === 'coder'
162
+ ? "Coder's implementation accepted"
163
+ : dispute.resolution === 'reviewer'
164
+ ? 'Reviewer position accepted, coder must fix'
165
+ : 'Custom solution required';
166
+ const resolvedDate = dispute.resolved_at
167
+ ? new Date(dispute.resolved_at).toLocaleDateString()
168
+ : 'unknown date';
169
+ return `Resolved: ${decisionText} on ${resolvedDate}. ${dispute.resolution_notes ?? ''}`;
170
+ }
171
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/disputes/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Stale dispute handling
3
+ *
4
+ * Tracks disputes that have been open longer than the configured timeout
5
+ * and provides alerting and listing functionality.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import { type DisputeWithTask } from './queries.js';
9
+ import type { Dispute } from './types.js';
10
+ /**
11
+ * Default timeout in days before a dispute is considered stale
12
+ */
13
+ export declare const DEFAULT_TIMEOUT_DAYS = 7;
14
+ /**
15
+ * Alert types for stale disputes
16
+ */
17
+ export type StaleAlertType = 'log' | 'webhook' | 'none';
18
+ /**
19
+ * Result of checking for stale disputes
20
+ */
21
+ export interface StaleDisputesResult {
22
+ /** Number of stale disputes found */
23
+ count: number;
24
+ /** The stale disputes with task info */
25
+ disputes: StaleDisputeInfo[];
26
+ /** Timeout days used for detection */
27
+ timeoutDays: number;
28
+ }
29
+ /**
30
+ * Stale dispute with additional computed info
31
+ */
32
+ export interface StaleDisputeInfo {
33
+ /** The dispute record */
34
+ dispute: DisputeWithTask;
35
+ /** Number of days the dispute has been open */
36
+ daysOpen: number;
37
+ /** Days past the timeout threshold */
38
+ daysPastThreshold: number;
39
+ }
40
+ /**
41
+ * Check for stale disputes
42
+ */
43
+ export declare function checkStaleDisputes(db: Database.Database, timeoutDays?: number): StaleDisputesResult;
44
+ /**
45
+ * Get stale dispute summary for display
46
+ */
47
+ export declare function getStaleDisputeSummary(db: Database.Database, timeoutDays?: number): string;
48
+ /**
49
+ * Alert configuration for stale disputes
50
+ */
51
+ export interface StaleAlertConfig {
52
+ /** Type of alert to send */
53
+ type: StaleAlertType;
54
+ /** Webhook URL (required if type is 'webhook') */
55
+ webhookUrl?: string;
56
+ /** Custom message prefix */
57
+ messagePrefix?: string;
58
+ }
59
+ /**
60
+ * Alert result
61
+ */
62
+ export interface AlertResult {
63
+ success: boolean;
64
+ alertType: StaleAlertType;
65
+ message?: string;
66
+ error?: string;
67
+ }
68
+ /**
69
+ * Send alert for stale disputes
70
+ */
71
+ export declare function alertStaleDisputes(db: Database.Database, config: StaleAlertConfig, timeoutDays?: number): Promise<AlertResult>;
72
+ /**
73
+ * Options for periodic stale checking
74
+ */
75
+ export interface StaleCheckOptions {
76
+ /** Timeout in days */
77
+ timeoutDays: number;
78
+ /** Alert configuration */
79
+ alert: StaleAlertConfig;
80
+ }
81
+ /**
82
+ * Perform a stale check and alert if needed
83
+ * Called from daemon or cron job
84
+ */
85
+ export declare function performStaleCheck(db: Database.Database, options: StaleCheckOptions): Promise<{
86
+ staleCount: number;
87
+ alertSent: boolean;
88
+ alertResult?: AlertResult;
89
+ }>;
90
+ /**
91
+ * List all open disputes sorted by age (oldest first)
92
+ */
93
+ export declare function listOpenDisputesByAge(db: Database.Database): DisputeWithTask[];
94
+ /**
95
+ * Get dispute age in human-readable format
96
+ */
97
+ export declare function formatDisputeAge(dispute: Dispute): string;
98
+ //# sourceMappingURL=stale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.d.ts","sourceRoot":"","sources":["../../src/disputes/stale.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;GAEG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAIxD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,OAAO,EAAE,eAAe,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,WAAW,GAAE,MAA6B,GACzC,mBAAmB,CAoBrB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,WAAW,GAAE,MAA6B,GACzC,MAAM,CAwBR;AAID;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,gBAAgB,EACxB,WAAW,GAAE,MAA6B,GACzC,OAAO,CAAC,WAAW,CAAC,CAsDtB;AAwCD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC,CAqBD;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GACpB,eAAe,EAAE,CAInB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAkBzD"}