@humanbased/crosscheck 0.14.0

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 (381) hide show
  1. package/AGENT.md +207 -0
  2. package/ISSUE.md +234 -0
  3. package/LICENSE +21 -0
  4. package/README.md +234 -0
  5. package/README.zh.md +169 -0
  6. package/assets/logo.png +0 -0
  7. package/assets/screenshot-watch-timing.png +0 -0
  8. package/assets/screenshot-watch-timing.svg +1 -0
  9. package/assets/screenshot-watch.png +0 -0
  10. package/crosscheck.config.example.yml +214 -0
  11. package/dist/__tests__/annotation.test.d.ts +2 -0
  12. package/dist/__tests__/annotation.test.d.ts.map +1 -0
  13. package/dist/__tests__/annotation.test.js +134 -0
  14. package/dist/__tests__/annotation.test.js.map +1 -0
  15. package/dist/__tests__/backtrace.test.d.ts +2 -0
  16. package/dist/__tests__/backtrace.test.d.ts.map +1 -0
  17. package/dist/__tests__/backtrace.test.js +280 -0
  18. package/dist/__tests__/backtrace.test.js.map +1 -0
  19. package/dist/__tests__/board.test.d.ts +2 -0
  20. package/dist/__tests__/board.test.d.ts.map +1 -0
  21. package/dist/__tests__/board.test.js +149 -0
  22. package/dist/__tests__/board.test.js.map +1 -0
  23. package/dist/__tests__/codex.test.d.ts +2 -0
  24. package/dist/__tests__/codex.test.d.ts.map +1 -0
  25. package/dist/__tests__/codex.test.js +92 -0
  26. package/dist/__tests__/codex.test.js.map +1 -0
  27. package/dist/__tests__/comment-bodies.test.d.ts +2 -0
  28. package/dist/__tests__/comment-bodies.test.d.ts.map +1 -0
  29. package/dist/__tests__/comment-bodies.test.js +75 -0
  30. package/dist/__tests__/comment-bodies.test.js.map +1 -0
  31. package/dist/__tests__/conflict-resolve.test.d.ts +2 -0
  32. package/dist/__tests__/conflict-resolve.test.d.ts.map +1 -0
  33. package/dist/__tests__/conflict-resolve.test.js +123 -0
  34. package/dist/__tests__/conflict-resolve.test.js.map +1 -0
  35. package/dist/__tests__/crosscheck-commit.test.d.ts +2 -0
  36. package/dist/__tests__/crosscheck-commit.test.d.ts.map +1 -0
  37. package/dist/__tests__/crosscheck-commit.test.js +13 -0
  38. package/dist/__tests__/crosscheck-commit.test.js.map +1 -0
  39. package/dist/__tests__/detector.test.d.ts +2 -0
  40. package/dist/__tests__/detector.test.d.ts.map +1 -0
  41. package/dist/__tests__/detector.test.js +112 -0
  42. package/dist/__tests__/detector.test.js.map +1 -0
  43. package/dist/__tests__/diagnose.test.d.ts +2 -0
  44. package/dist/__tests__/diagnose.test.d.ts.map +1 -0
  45. package/dist/__tests__/diagnose.test.js +164 -0
  46. package/dist/__tests__/diagnose.test.js.map +1 -0
  47. package/dist/__tests__/diff-hash.test.d.ts +2 -0
  48. package/dist/__tests__/diff-hash.test.d.ts.map +1 -0
  49. package/dist/__tests__/diff-hash.test.js +126 -0
  50. package/dist/__tests__/diff-hash.test.js.map +1 -0
  51. package/dist/__tests__/durations.test.d.ts +2 -0
  52. package/dist/__tests__/durations.test.d.ts.map +1 -0
  53. package/dist/__tests__/durations.test.js +26 -0
  54. package/dist/__tests__/durations.test.js.map +1 -0
  55. package/dist/__tests__/event-fields.test.d.ts +2 -0
  56. package/dist/__tests__/event-fields.test.d.ts.map +1 -0
  57. package/dist/__tests__/event-fields.test.js +50 -0
  58. package/dist/__tests__/event-fields.test.js.map +1 -0
  59. package/dist/__tests__/filter.test.d.ts +2 -0
  60. package/dist/__tests__/filter.test.d.ts.map +1 -0
  61. package/dist/__tests__/filter.test.js +21 -0
  62. package/dist/__tests__/filter.test.js.map +1 -0
  63. package/dist/__tests__/fix.test.d.ts +2 -0
  64. package/dist/__tests__/fix.test.d.ts.map +1 -0
  65. package/dist/__tests__/fix.test.js +124 -0
  66. package/dist/__tests__/fix.test.js.map +1 -0
  67. package/dist/__tests__/github-client.test.d.ts +2 -0
  68. package/dist/__tests__/github-client.test.d.ts.map +1 -0
  69. package/dist/__tests__/github-client.test.js +22 -0
  70. package/dist/__tests__/github-client.test.js.map +1 -0
  71. package/dist/__tests__/github-scan-client.test.d.ts +2 -0
  72. package/dist/__tests__/github-scan-client.test.d.ts.map +1 -0
  73. package/dist/__tests__/github-scan-client.test.js +100 -0
  74. package/dist/__tests__/github-scan-client.test.js.map +1 -0
  75. package/dist/__tests__/is-fresh-review-comment.test.d.ts +2 -0
  76. package/dist/__tests__/is-fresh-review-comment.test.d.ts.map +1 -0
  77. package/dist/__tests__/is-fresh-review-comment.test.js +86 -0
  78. package/dist/__tests__/is-fresh-review-comment.test.js.map +1 -0
  79. package/dist/__tests__/issue.test.d.ts +2 -0
  80. package/dist/__tests__/issue.test.d.ts.map +1 -0
  81. package/dist/__tests__/issue.test.js +259 -0
  82. package/dist/__tests__/issue.test.js.map +1 -0
  83. package/dist/__tests__/kickass.test.d.ts +2 -0
  84. package/dist/__tests__/kickass.test.d.ts.map +1 -0
  85. package/dist/__tests__/kickass.test.js +268 -0
  86. package/dist/__tests__/kickass.test.js.map +1 -0
  87. package/dist/__tests__/loader.test.d.ts +2 -0
  88. package/dist/__tests__/loader.test.d.ts.map +1 -0
  89. package/dist/__tests__/loader.test.js +180 -0
  90. package/dist/__tests__/loader.test.js.map +1 -0
  91. package/dist/__tests__/onboard-preservation.test.d.ts +2 -0
  92. package/dist/__tests__/onboard-preservation.test.d.ts.map +1 -0
  93. package/dist/__tests__/onboard-preservation.test.js +506 -0
  94. package/dist/__tests__/onboard-preservation.test.js.map +1 -0
  95. package/dist/__tests__/optimize.test.d.ts +2 -0
  96. package/dist/__tests__/optimize.test.d.ts.map +1 -0
  97. package/dist/__tests__/optimize.test.js +101 -0
  98. package/dist/__tests__/optimize.test.js.map +1 -0
  99. package/dist/__tests__/post-review-comment.test.d.ts +2 -0
  100. package/dist/__tests__/post-review-comment.test.d.ts.map +1 -0
  101. package/dist/__tests__/post-review-comment.test.js +44 -0
  102. package/dist/__tests__/post-review-comment.test.js.map +1 -0
  103. package/dist/__tests__/pr-lock.test.d.ts +2 -0
  104. package/dist/__tests__/pr-lock.test.d.ts.map +1 -0
  105. package/dist/__tests__/pr-lock.test.js +115 -0
  106. package/dist/__tests__/pr-lock.test.js.map +1 -0
  107. package/dist/__tests__/pr-picker.test.d.ts +2 -0
  108. package/dist/__tests__/pr-picker.test.d.ts.map +1 -0
  109. package/dist/__tests__/pr-picker.test.js +57 -0
  110. package/dist/__tests__/pr-picker.test.js.map +1 -0
  111. package/dist/__tests__/pr-status-scan.test.d.ts +2 -0
  112. package/dist/__tests__/pr-status-scan.test.d.ts.map +1 -0
  113. package/dist/__tests__/pr-status-scan.test.js +92 -0
  114. package/dist/__tests__/pr-status-scan.test.js.map +1 -0
  115. package/dist/__tests__/pr-status.test.d.ts +2 -0
  116. package/dist/__tests__/pr-status.test.d.ts.map +1 -0
  117. package/dist/__tests__/pr-status.test.js +346 -0
  118. package/dist/__tests__/pr-status.test.js.map +1 -0
  119. package/dist/__tests__/repo-picker.test.d.ts +2 -0
  120. package/dist/__tests__/repo-picker.test.d.ts.map +1 -0
  121. package/dist/__tests__/repo-picker.test.js +115 -0
  122. package/dist/__tests__/repo-picker.test.js.map +1 -0
  123. package/dist/__tests__/review-comment-body.test.d.ts +2 -0
  124. package/dist/__tests__/review-comment-body.test.d.ts.map +1 -0
  125. package/dist/__tests__/review-comment-body.test.js +54 -0
  126. package/dist/__tests__/review-comment-body.test.js.map +1 -0
  127. package/dist/__tests__/review-models.test.d.ts +2 -0
  128. package/dist/__tests__/review-models.test.d.ts.map +1 -0
  129. package/dist/__tests__/review-models.test.js +39 -0
  130. package/dist/__tests__/review-models.test.js.map +1 -0
  131. package/dist/__tests__/review-status.test.d.ts +2 -0
  132. package/dist/__tests__/review-status.test.d.ts.map +1 -0
  133. package/dist/__tests__/review-status.test.js +95 -0
  134. package/dist/__tests__/review-status.test.js.map +1 -0
  135. package/dist/__tests__/runner.test.d.ts +2 -0
  136. package/dist/__tests__/runner.test.d.ts.map +1 -0
  137. package/dist/__tests__/runner.test.js +204 -0
  138. package/dist/__tests__/runner.test.js.map +1 -0
  139. package/dist/__tests__/scan-cache.test.d.ts +2 -0
  140. package/dist/__tests__/scan-cache.test.d.ts.map +1 -0
  141. package/dist/__tests__/scan-cache.test.js +59 -0
  142. package/dist/__tests__/scan-cache.test.js.map +1 -0
  143. package/dist/__tests__/scan-client.test.d.ts +2 -0
  144. package/dist/__tests__/scan-client.test.d.ts.map +1 -0
  145. package/dist/__tests__/scan-client.test.js +30 -0
  146. package/dist/__tests__/scan-client.test.js.map +1 -0
  147. package/dist/__tests__/scan.test.d.ts +2 -0
  148. package/dist/__tests__/scan.test.d.ts.map +1 -0
  149. package/dist/__tests__/scan.test.js +115 -0
  150. package/dist/__tests__/scan.test.js.map +1 -0
  151. package/dist/__tests__/scopes.test.d.ts +2 -0
  152. package/dist/__tests__/scopes.test.d.ts.map +1 -0
  153. package/dist/__tests__/scopes.test.js +101 -0
  154. package/dist/__tests__/scopes.test.js.map +1 -0
  155. package/dist/__tests__/sha-cache.test.d.ts +2 -0
  156. package/dist/__tests__/sha-cache.test.d.ts.map +1 -0
  157. package/dist/__tests__/sha-cache.test.js +40 -0
  158. package/dist/__tests__/sha-cache.test.js.map +1 -0
  159. package/dist/__tests__/smart-switch.test.d.ts +2 -0
  160. package/dist/__tests__/smart-switch.test.d.ts.map +1 -0
  161. package/dist/__tests__/smart-switch.test.js +145 -0
  162. package/dist/__tests__/smart-switch.test.js.map +1 -0
  163. package/dist/ck.d.ts +3 -0
  164. package/dist/ck.d.ts.map +1 -0
  165. package/dist/ck.js +8 -0
  166. package/dist/ck.js.map +1 -0
  167. package/dist/cli.d.ts +3 -0
  168. package/dist/cli.d.ts.map +1 -0
  169. package/dist/cli.js +132 -0
  170. package/dist/cli.js.map +1 -0
  171. package/dist/commands/diagnose.d.ts +54 -0
  172. package/dist/commands/diagnose.d.ts.map +1 -0
  173. package/dist/commands/diagnose.js +294 -0
  174. package/dist/commands/diagnose.js.map +1 -0
  175. package/dist/commands/impact.d.ts +38 -0
  176. package/dist/commands/impact.d.ts.map +1 -0
  177. package/dist/commands/impact.js +210 -0
  178. package/dist/commands/impact.js.map +1 -0
  179. package/dist/commands/init.d.ts +12 -0
  180. package/dist/commands/init.d.ts.map +1 -0
  181. package/dist/commands/init.js +183 -0
  182. package/dist/commands/init.js.map +1 -0
  183. package/dist/commands/issue.d.ts +25 -0
  184. package/dist/commands/issue.d.ts.map +1 -0
  185. package/dist/commands/issue.js +445 -0
  186. package/dist/commands/issue.js.map +1 -0
  187. package/dist/commands/kickass.d.ts +59 -0
  188. package/dist/commands/kickass.d.ts.map +1 -0
  189. package/dist/commands/kickass.js +288 -0
  190. package/dist/commands/kickass.js.map +1 -0
  191. package/dist/commands/onboard.d.ts +70 -0
  192. package/dist/commands/onboard.d.ts.map +1 -0
  193. package/dist/commands/onboard.js +883 -0
  194. package/dist/commands/onboard.js.map +1 -0
  195. package/dist/commands/optimize.d.ts +16 -0
  196. package/dist/commands/optimize.d.ts.map +1 -0
  197. package/dist/commands/optimize.js +244 -0
  198. package/dist/commands/optimize.js.map +1 -0
  199. package/dist/commands/review.d.ts +2 -0
  200. package/dist/commands/review.d.ts.map +1 -0
  201. package/dist/commands/review.js +118 -0
  202. package/dist/commands/review.js.map +1 -0
  203. package/dist/commands/run.d.ts +13 -0
  204. package/dist/commands/run.d.ts.map +1 -0
  205. package/dist/commands/run.js +243 -0
  206. package/dist/commands/run.js.map +1 -0
  207. package/dist/commands/scan.d.ts +94 -0
  208. package/dist/commands/scan.d.ts.map +1 -0
  209. package/dist/commands/scan.js +276 -0
  210. package/dist/commands/scan.js.map +1 -0
  211. package/dist/commands/serve.d.ts +9 -0
  212. package/dist/commands/serve.d.ts.map +1 -0
  213. package/dist/commands/serve.js +402 -0
  214. package/dist/commands/serve.js.map +1 -0
  215. package/dist/commands/status.d.ts +2 -0
  216. package/dist/commands/status.d.ts.map +1 -0
  217. package/dist/commands/status.js +89 -0
  218. package/dist/commands/status.js.map +1 -0
  219. package/dist/commands/watch.d.ts +9 -0
  220. package/dist/commands/watch.d.ts.map +1 -0
  221. package/dist/commands/watch.js +902 -0
  222. package/dist/commands/watch.js.map +1 -0
  223. package/dist/config/loader.d.ts +47 -0
  224. package/dist/config/loader.d.ts.map +1 -0
  225. package/dist/config/loader.js +334 -0
  226. package/dist/config/loader.js.map +1 -0
  227. package/dist/config/schema.d.ts +814 -0
  228. package/dist/config/schema.d.ts.map +1 -0
  229. package/dist/config/schema.js +152 -0
  230. package/dist/config/schema.js.map +1 -0
  231. package/dist/github/client.d.ts +139 -0
  232. package/dist/github/client.d.ts.map +1 -0
  233. package/dist/github/client.js +711 -0
  234. package/dist/github/client.js.map +1 -0
  235. package/dist/github/detector.d.ts +12 -0
  236. package/dist/github/detector.d.ts.map +1 -0
  237. package/dist/github/detector.js +120 -0
  238. package/dist/github/detector.js.map +1 -0
  239. package/dist/github/merge.d.ts +9 -0
  240. package/dist/github/merge.d.ts.map +1 -0
  241. package/dist/github/merge.js +33 -0
  242. package/dist/github/merge.js.map +1 -0
  243. package/dist/github/review-status.d.ts +6 -0
  244. package/dist/github/review-status.d.ts.map +1 -0
  245. package/dist/github/review-status.js +51 -0
  246. package/dist/github/review-status.js.map +1 -0
  247. package/dist/github/webhook.d.ts +41 -0
  248. package/dist/github/webhook.d.ts.map +1 -0
  249. package/dist/github/webhook.js +50 -0
  250. package/dist/github/webhook.js.map +1 -0
  251. package/dist/lib/annotation.d.ts +23 -0
  252. package/dist/lib/annotation.d.ts.map +1 -0
  253. package/dist/lib/annotation.js +103 -0
  254. package/dist/lib/annotation.js.map +1 -0
  255. package/dist/lib/backtrace.d.ts +40 -0
  256. package/dist/lib/backtrace.d.ts.map +1 -0
  257. package/dist/lib/backtrace.js +169 -0
  258. package/dist/lib/backtrace.js.map +1 -0
  259. package/dist/lib/board.d.ts +74 -0
  260. package/dist/lib/board.d.ts.map +1 -0
  261. package/dist/lib/board.js +640 -0
  262. package/dist/lib/board.js.map +1 -0
  263. package/dist/lib/clone.d.ts +12 -0
  264. package/dist/lib/clone.d.ts.map +1 -0
  265. package/dist/lib/clone.js +30 -0
  266. package/dist/lib/clone.js.map +1 -0
  267. package/dist/lib/comment-bodies.d.ts +17 -0
  268. package/dist/lib/comment-bodies.d.ts.map +1 -0
  269. package/dist/lib/comment-bodies.js +51 -0
  270. package/dist/lib/comment-bodies.js.map +1 -0
  271. package/dist/lib/crosscheck-commit.d.ts +2 -0
  272. package/dist/lib/crosscheck-commit.d.ts.map +1 -0
  273. package/dist/lib/crosscheck-commit.js +4 -0
  274. package/dist/lib/crosscheck-commit.js.map +1 -0
  275. package/dist/lib/diff-hash.d.ts +16 -0
  276. package/dist/lib/diff-hash.d.ts.map +1 -0
  277. package/dist/lib/diff-hash.js +71 -0
  278. package/dist/lib/diff-hash.js.map +1 -0
  279. package/dist/lib/durations.d.ts +5 -0
  280. package/dist/lib/durations.d.ts.map +1 -0
  281. package/dist/lib/durations.js +39 -0
  282. package/dist/lib/durations.js.map +1 -0
  283. package/dist/lib/event-fields.d.ts +6 -0
  284. package/dist/lib/event-fields.d.ts.map +1 -0
  285. package/dist/lib/event-fields.js +20 -0
  286. package/dist/lib/event-fields.js.map +1 -0
  287. package/dist/lib/filter.d.ts +2 -0
  288. package/dist/lib/filter.d.ts.map +1 -0
  289. package/dist/lib/filter.js +4 -0
  290. package/dist/lib/filter.js.map +1 -0
  291. package/dist/lib/fortune.d.ts +2 -0
  292. package/dist/lib/fortune.d.ts.map +1 -0
  293. package/dist/lib/fortune.js +26 -0
  294. package/dist/lib/fortune.js.map +1 -0
  295. package/dist/lib/languages.d.ts +3 -0
  296. package/dist/lib/languages.d.ts.map +1 -0
  297. package/dist/lib/languages.js +26 -0
  298. package/dist/lib/languages.js.map +1 -0
  299. package/dist/lib/log-analysis.d.ts +17 -0
  300. package/dist/lib/log-analysis.d.ts.map +1 -0
  301. package/dist/lib/log-analysis.js +72 -0
  302. package/dist/lib/log-analysis.js.map +1 -0
  303. package/dist/lib/logger.d.ts +14 -0
  304. package/dist/lib/logger.d.ts.map +1 -0
  305. package/dist/lib/logger.js +84 -0
  306. package/dist/lib/logger.js.map +1 -0
  307. package/dist/lib/port.d.ts +2 -0
  308. package/dist/lib/port.d.ts.map +1 -0
  309. package/dist/lib/port.js +21 -0
  310. package/dist/lib/port.js.map +1 -0
  311. package/dist/lib/pr-lock.d.ts +4 -0
  312. package/dist/lib/pr-lock.d.ts.map +1 -0
  313. package/dist/lib/pr-lock.js +91 -0
  314. package/dist/lib/pr-lock.js.map +1 -0
  315. package/dist/lib/pr-picker.d.ts +10 -0
  316. package/dist/lib/pr-picker.d.ts.map +1 -0
  317. package/dist/lib/pr-picker.js +80 -0
  318. package/dist/lib/pr-picker.js.map +1 -0
  319. package/dist/lib/pr-status.d.ts +206 -0
  320. package/dist/lib/pr-status.d.ts.map +1 -0
  321. package/dist/lib/pr-status.js +613 -0
  322. package/dist/lib/pr-status.js.map +1 -0
  323. package/dist/lib/repo-picker.d.ts +23 -0
  324. package/dist/lib/repo-picker.d.ts.map +1 -0
  325. package/dist/lib/repo-picker.js +411 -0
  326. package/dist/lib/repo-picker.js.map +1 -0
  327. package/dist/lib/review-models.d.ts +7 -0
  328. package/dist/lib/review-models.d.ts.map +1 -0
  329. package/dist/lib/review-models.js +32 -0
  330. package/dist/lib/review-models.js.map +1 -0
  331. package/dist/lib/runner.d.ts +65 -0
  332. package/dist/lib/runner.d.ts.map +1 -0
  333. package/dist/lib/runner.js +710 -0
  334. package/dist/lib/runner.js.map +1 -0
  335. package/dist/lib/scan-cache.d.ts +31 -0
  336. package/dist/lib/scan-cache.d.ts.map +1 -0
  337. package/dist/lib/scan-cache.js +112 -0
  338. package/dist/lib/scan-cache.js.map +1 -0
  339. package/dist/lib/scopes.d.ts +16 -0
  340. package/dist/lib/scopes.d.ts.map +1 -0
  341. package/dist/lib/scopes.js +37 -0
  342. package/dist/lib/scopes.js.map +1 -0
  343. package/dist/lib/sha-cache.d.ts +7 -0
  344. package/dist/lib/sha-cache.d.ts.map +1 -0
  345. package/dist/lib/sha-cache.js +44 -0
  346. package/dist/lib/sha-cache.js.map +1 -0
  347. package/dist/lib/smart-switch.d.ts +44 -0
  348. package/dist/lib/smart-switch.d.ts.map +1 -0
  349. package/dist/lib/smart-switch.js +145 -0
  350. package/dist/lib/smart-switch.js.map +1 -0
  351. package/dist/lib/verdict.d.ts +9 -0
  352. package/dist/lib/verdict.d.ts.map +1 -0
  353. package/dist/lib/verdict.js +52 -0
  354. package/dist/lib/verdict.js.map +1 -0
  355. package/dist/lib/workflow.d.ts +85 -0
  356. package/dist/lib/workflow.d.ts.map +1 -0
  357. package/dist/lib/workflow.js +116 -0
  358. package/dist/lib/workflow.js.map +1 -0
  359. package/dist/reviewers/address.d.ts +5 -0
  360. package/dist/reviewers/address.d.ts.map +1 -0
  361. package/dist/reviewers/address.js +87 -0
  362. package/dist/reviewers/address.js.map +1 -0
  363. package/dist/reviewers/claude.d.ts +12 -0
  364. package/dist/reviewers/claude.d.ts.map +1 -0
  365. package/dist/reviewers/claude.js +78 -0
  366. package/dist/reviewers/claude.js.map +1 -0
  367. package/dist/reviewers/codex.d.ts +9 -0
  368. package/dist/reviewers/codex.d.ts.map +1 -0
  369. package/dist/reviewers/codex.js +121 -0
  370. package/dist/reviewers/codex.js.map +1 -0
  371. package/dist/reviewers/conflict-resolve.d.ts +15 -0
  372. package/dist/reviewers/conflict-resolve.d.ts.map +1 -0
  373. package/dist/reviewers/conflict-resolve.js +219 -0
  374. package/dist/reviewers/conflict-resolve.js.map +1 -0
  375. package/dist/reviewers/fix.d.ts +7 -0
  376. package/dist/reviewers/fix.d.ts.map +1 -0
  377. package/dist/reviewers/fix.js +197 -0
  378. package/dist/reviewers/fix.js.map +1 -0
  379. package/get-started.md +1271 -0
  380. package/get-started.zh.md +1208 -0
  381. package/package.json +75 -0
@@ -0,0 +1,23 @@
1
+ export declare function filterIndices(items: string[], query: string): number[];
2
+ export declare function adjustWindowStart(windowStart: number, cursorPos: number, viewport: number, total: number): number;
3
+ export declare function resolveViewport(hint: number | undefined, termRows: number | undefined): number;
4
+ export declare function truncate(s: string, maxWidth: number): string;
5
+ export declare function advancePageStart(windowStart: number, viewport: number, total: number, direction: 1 | -1): number;
6
+ export interface PickerItem {
7
+ label: string;
8
+ description?: string;
9
+ hint?: string;
10
+ }
11
+ export declare function promptSinglePicker(items: PickerItem[], opts?: {
12
+ title?: string;
13
+ defaultIndex?: number;
14
+ pageSize?: number;
15
+ }): Promise<number>;
16
+ export interface PickerOptions {
17
+ title?: string;
18
+ initialSelected?: string[];
19
+ pageSize?: number;
20
+ getDescription?: (item: string) => string;
21
+ }
22
+ export declare function promptRepoPicker(items: string[], opts?: PickerOptions): Promise<string[]>;
23
+ //# sourceMappingURL=repo-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-picker.d.ts","sourceRoot":"","sources":["../../src/lib/repo-picker.ts"],"names":[],"mappings":"AAuBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAQtE;AAID,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAOR;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK9F;AAKD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK5D;AAOD,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAChB,MAAM,CAIR;AAID,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAID,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EAAE,EACnB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACtE,OAAO,CAAC,MAAM,CAAC,CA2GjB;AAID,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CAC1C;AASD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsOnB"}
@@ -0,0 +1,411 @@
1
+ // Interactive arrow-key picker for CLI prompts.
2
+ // Uses raw-mode TTY input — degrades gracefully when stdin is not a TTY.
3
+ const HIDE_CURSOR = '\x1b[?25l';
4
+ const SHOW_CURSOR = '\x1b[?25h';
5
+ const ERASE_LINE = '\x1b[2K\r';
6
+ // Clears from the cursor to the bottom of the screen. Used before re-rendering
7
+ // so leftover content from a taller previous render doesn't linger when the new
8
+ // render is shorter (e.g. after a filter narrows the list).
9
+ const ERASE_DOWN = '\x1b[0J';
10
+ const BOLD = '\x1b[1m';
11
+ const DIM = '\x1b[2m';
12
+ const CYAN = '\x1b[36m';
13
+ const RESET = '\x1b[0m';
14
+ const DEFAULT_PAGE_SIZE = 12;
15
+ // Chrome rows beyond the item viewport: title (≤1) + filter (1) + status (1) + footer (1) + safety (1).
16
+ const VIEWPORT_OVERHEAD = 6;
17
+ // ── Pure helpers (unit-tested) ───────────────────────────────────────────────
18
+ // Indices into `items` whose lowercase label includes the lowercased query.
19
+ // Empty query returns every index in order.
20
+ export function filterIndices(items, query) {
21
+ if (!query)
22
+ return items.map((_, i) => i);
23
+ const q = query.toLowerCase();
24
+ const out = [];
25
+ for (let i = 0; i < items.length; i++) {
26
+ if (items[i].toLowerCase().includes(q))
27
+ out.push(i);
28
+ }
29
+ return out;
30
+ }
31
+ // Shift the viewport so the cursor is inside [windowStart, windowStart + viewport).
32
+ // Pure: returns the new windowStart. Clamps so the viewport never extends past the list.
33
+ export function adjustWindowStart(windowStart, cursorPos, viewport, total) {
34
+ let ws = windowStart;
35
+ if (cursorPos < ws)
36
+ ws = cursorPos;
37
+ else if (cursorPos >= ws + viewport)
38
+ ws = cursorPos - viewport + 1;
39
+ if (ws + viewport > total)
40
+ ws = Math.max(0, total - viewport);
41
+ if (ws < 0)
42
+ ws = 0;
43
+ return ws;
44
+ }
45
+ // Resolve the actual viewport row count given a caller hint and the live terminal height.
46
+ export function resolveViewport(hint, termRows) {
47
+ const rows = termRows && termRows > 0 ? termRows : 24;
48
+ const ceiling = Math.max(3, rows - VIEWPORT_OVERHEAD);
49
+ const requested = hint && hint > 0 ? hint : DEFAULT_PAGE_SIZE;
50
+ return Math.max(3, Math.min(requested, ceiling));
51
+ }
52
+ // Truncate a string so its visible width fits within `maxWidth` columns. Appends
53
+ // `…` when truncation happens. ANSI-aware callers must pass plain text — this
54
+ // helper does not parse escape sequences.
55
+ export function truncate(s, maxWidth) {
56
+ if (maxWidth <= 0)
57
+ return '';
58
+ if (s.length <= maxWidth)
59
+ return s;
60
+ if (maxWidth === 1)
61
+ return '…';
62
+ return s.slice(0, maxWidth - 1) + '…';
63
+ }
64
+ // New windowStart after a PageDown / PageUp jump. The viewport advances by
65
+ // exactly one page so the visible window changes, not just the cursor — without
66
+ // this, PgDn would set cursorPos one viewport ahead but `adjustWindowStart`
67
+ // would only scroll far enough to make it visible (one row), so the picker
68
+ // behaves like a slow ↓ instead of a real page jump.
69
+ export function advancePageStart(windowStart, viewport, total, direction) {
70
+ const next = windowStart + direction * viewport;
71
+ const maxStart = Math.max(0, total - viewport);
72
+ return Math.max(0, Math.min(maxStart, next));
73
+ }
74
+ // Arrow-key single-select. Returns the index of the chosen item.
75
+ // Returns defaultIndex when stdin is not a TTY.
76
+ export async function promptSinglePicker(items, opts = {}) {
77
+ if (!process.stdin.isTTY || items.length === 0)
78
+ return opts.defaultIndex ?? 0;
79
+ return new Promise((resolve, reject) => {
80
+ let cursor = opts.defaultIndex ?? 0;
81
+ let windowStart = 0;
82
+ let lastLineCount = 0;
83
+ const viewport = () => Math.min(resolveViewport(opts.pageSize, process.stdout.rows), items.length);
84
+ function render(firstRender = false) {
85
+ const vp = viewport();
86
+ windowStart = adjustWindowStart(windowStart, cursor, vp, items.length);
87
+ if (!firstRender) {
88
+ process.stdout.write(`\x1b[${lastLineCount}A`);
89
+ }
90
+ const hint = items[cursor]?.hint ?? '';
91
+ const showStatus = items.length > vp;
92
+ // title + items + hint + status (only when overflow) + footer
93
+ lastLineCount = (opts.title ? 1 : 0) + vp + 1 + (showStatus ? 1 : 0) + 1;
94
+ if (opts.title) {
95
+ process.stdout.write(`${ERASE_LINE}${BOLD}${opts.title}${RESET}\n`);
96
+ }
97
+ for (let i = 0; i < vp; i++) {
98
+ const idx = windowStart + i;
99
+ if (idx >= items.length) {
100
+ process.stdout.write(`${ERASE_LINE}\n`);
101
+ continue;
102
+ }
103
+ const item = items[idx];
104
+ const isFocused = cursor === idx;
105
+ const arrow = isFocused ? `${CYAN}❯${RESET}` : ' ';
106
+ const descStr = item.description ? ` ${DIM}${item.description}${RESET}` : '';
107
+ const labelStr = isFocused ? `${BOLD}${item.label}${RESET}` : `${DIM}${item.label}${RESET}`;
108
+ process.stdout.write(`${ERASE_LINE} ${arrow} ${labelStr}${descStr}\n`);
109
+ }
110
+ process.stdout.write(`${ERASE_LINE}${hint ? `${DIM} 💡 ${hint}${RESET}` : ''}\n`);
111
+ if (showStatus) {
112
+ process.stdout.write(`${ERASE_LINE}${DIM} ${cursor + 1}/${items.length}${RESET}\n`);
113
+ }
114
+ const navHint = showStatus ? '↑↓ PgUp/PgDn move' : '↑↓ move';
115
+ process.stdout.write(`${ERASE_LINE}${DIM} ${navHint} · enter confirm${RESET}\n`);
116
+ }
117
+ function cleanup(index) {
118
+ try {
119
+ process.stdin.setRawMode(false);
120
+ }
121
+ catch { /* not raw */ }
122
+ process.stdin.removeAllListeners('data');
123
+ process.stdout.write(SHOW_CURSOR);
124
+ resolve(index);
125
+ }
126
+ function handleSigint() {
127
+ cleanup(opts.defaultIndex ?? 0);
128
+ process.exit(130);
129
+ }
130
+ process.stdout.write(HIDE_CURSOR);
131
+ render(true);
132
+ process.stdin.setRawMode(true);
133
+ process.stdin.resume();
134
+ process.stdin.setEncoding('utf8');
135
+ process.once('SIGINT', handleSigint);
136
+ process.stdin.on('data', (key) => {
137
+ if (key === '\x03') {
138
+ process.removeListener('SIGINT', handleSigint);
139
+ cleanup(opts.defaultIndex ?? 0);
140
+ process.exit(130);
141
+ }
142
+ if (key === '\x1b[A') {
143
+ cursor = cursor > 0 ? cursor - 1 : items.length - 1;
144
+ render();
145
+ }
146
+ else if (key === '\x1b[B') {
147
+ cursor = cursor < items.length - 1 ? cursor + 1 : 0;
148
+ render();
149
+ }
150
+ else if (key === '\x1b[5~') {
151
+ // PageUp — advance window AND cursor by one viewport so the page
152
+ // actually flips. Without the windowStart bump, adjustWindowStart would
153
+ // only scroll far enough to keep the cursor visible (one row).
154
+ const vp = viewport();
155
+ cursor = Math.max(0, cursor - vp);
156
+ windowStart = advancePageStart(windowStart, vp, items.length, -1);
157
+ render();
158
+ }
159
+ else if (key === '\x1b[6~') {
160
+ // PageDown — see PageUp comment.
161
+ const vp = viewport();
162
+ cursor = Math.min(items.length - 1, cursor + vp);
163
+ windowStart = advancePageStart(windowStart, vp, items.length, 1);
164
+ render();
165
+ }
166
+ else if (key === '\r' || key === '\n') {
167
+ process.removeListener('SIGINT', handleSigint);
168
+ cleanup(cursor);
169
+ }
170
+ });
171
+ process.stdin.on('error', (err) => {
172
+ process.removeListener('SIGINT', handleSigint);
173
+ process.stdout.write(SHOW_CURSOR);
174
+ reject(err);
175
+ });
176
+ });
177
+ }
178
+ // Arrow-key + space multi-select with a fixed-height viewport and `/` filter.
179
+ // Returns selected items. Returns [] when stdin is not a TTY.
180
+ //
181
+ // The viewport is capped by `pageSize` *and* the terminal height — we never emit
182
+ // more rows than fit on screen, so cursor-up offsets stay accurate. Press `/` to
183
+ // enter filter mode; typing narrows the visible list, Esc clears the filter,
184
+ // Enter exits filter mode and returns to selection.
185
+ export async function promptRepoPicker(items, opts = {}) {
186
+ if (!process.stdin.isTTY)
187
+ return [];
188
+ if (items.length === 0)
189
+ return [];
190
+ return new Promise((resolve, reject) => {
191
+ const selected = new Set(opts.initialSelected
192
+ ? opts.initialSelected.map(s => items.indexOf(s)).filter(i => i !== -1)
193
+ : []);
194
+ let filterText = '';
195
+ let filterMode = false;
196
+ let filtered = filterIndices(items, '');
197
+ let cursorPos = 0; // index into `filtered`
198
+ let windowStart = 0; // index into `filtered`
199
+ let lastLineCount = 0;
200
+ const viewport = () => resolveViewport(opts.pageSize, process.stdout.rows);
201
+ function recomputeFiltered() {
202
+ filtered = filterIndices(items, filterText);
203
+ if (cursorPos >= filtered.length)
204
+ cursorPos = Math.max(0, filtered.length - 1);
205
+ windowStart = adjustWindowStart(windowStart, cursorPos, viewport(), filtered.length);
206
+ }
207
+ function render(firstRender = false) {
208
+ const vp = viewport();
209
+ windowStart = adjustWindowStart(windowStart, cursorPos, vp, filtered.length);
210
+ if (!firstRender) {
211
+ process.stdout.write(`\x1b[${lastLineCount}A`);
212
+ // Erase leftover content from the previous (possibly taller) render so a
213
+ // shrinking filter doesn't leave stale rows hanging below the new output.
214
+ process.stdout.write(ERASE_DOWN);
215
+ }
216
+ // Render exactly as many item rows as we have items, capped at the
217
+ // viewport. Empty filter result → one "(no matches)" hint row instead.
218
+ const visibleRows = Math.min(vp, filtered.length);
219
+ const emptyHint = filtered.length === 0;
220
+ const itemRows = emptyHint ? 1 : visibleRows;
221
+ lastLineCount = (opts.title ? 1 : 0) + 1 + itemRows + 1 + 1;
222
+ if (opts.title) {
223
+ process.stdout.write(`${ERASE_LINE}${BOLD}${opts.title}${RESET}\n`);
224
+ }
225
+ // All user-controlled / variable-width text is clipped to the live
226
+ // terminal width before rendering. If a line wrapped, the terminal would
227
+ // consume an extra row that lastLineCount doesn't know about, and the
228
+ // next cursor-up would land on the wrong line (re-introducing the
229
+ // overflow bug this PR set out to fix, just triggered by a wide filter
230
+ // string instead of a tall list).
231
+ const cols = process.stdout.columns && process.stdout.columns > 0 ? process.stdout.columns : 80;
232
+ const innerWidth = Math.max(1, cols - 2); // leading " "
233
+ if (filterMode || filterText) {
234
+ const caret = filterMode ? '█' : '';
235
+ // Visible prefix on this line: " / " (4 cols). Caret is 1 col when present.
236
+ const filterMax = Math.max(0, cols - 4 - (caret ? 1 : 0));
237
+ const filterDisplay = truncate(filterText, filterMax);
238
+ process.stdout.write(`${ERASE_LINE} ${CYAN}/${RESET} ${filterDisplay}${caret}\n`);
239
+ }
240
+ else {
241
+ process.stdout.write(`${ERASE_LINE}\n`);
242
+ }
243
+ if (emptyHint) {
244
+ process.stdout.write(`${ERASE_LINE} ${DIM}(no matches)${RESET}\n`);
245
+ }
246
+ else {
247
+ for (let row = 0; row < visibleRows; row++) {
248
+ const fi = windowStart + row;
249
+ const origIdx = filtered[fi];
250
+ const item = items[origIdx];
251
+ const isSelected = selected.has(origIdx);
252
+ const isFocused = cursorPos === fi;
253
+ const checkStr = isSelected ? `${CYAN}[x]${RESET}` : '[ ]';
254
+ const desc = opts.getDescription ? opts.getDescription(item) : '';
255
+ // Budget: cols - 2 (indent) - 4 ("[x] ") - (desc.length + 2 spaces if desc).
256
+ const descBudget = desc ? desc.length + 2 : 0;
257
+ const labelMax = Math.max(1, cols - 6 - descBudget);
258
+ const itemDisplay = truncate(item, labelMax);
259
+ const descStr = desc ? ` ${DIM}${desc}${RESET}` : '';
260
+ const labelStr = isFocused ? `${BOLD}${itemDisplay}${RESET}` : `${DIM}${itemDisplay}${RESET}`;
261
+ process.stdout.write(`${ERASE_LINE} ${checkStr} ${labelStr}${descStr}\n`);
262
+ }
263
+ }
264
+ const total = filtered.length;
265
+ const pos = total === 0 ? 0 : cursorPos + 1;
266
+ const selCount = selected.size;
267
+ const filterNote = filterText ? ` · filter: "${filterText}"` : '';
268
+ const selNote = selCount > 0 ? ` · ${selCount} selected` : '';
269
+ const statusLine = truncate(`${pos}/${total}${filterNote}${selNote}`, innerWidth);
270
+ process.stdout.write(`${ERASE_LINE}${DIM} ${statusLine}${RESET}\n`);
271
+ // PgUp/PgDn only when the *current* visible list overflows the viewport.
272
+ // After a filter narrows the list, the hint shrinks accordingly.
273
+ const navHint = filtered.length > vp ? '↑↓ PgUp/PgDn move' : '↑↓ move';
274
+ const footerLine = filterMode
275
+ ? `${navHint} · type to filter · backspace · esc clear · enter done`
276
+ : `${navHint} · space select · a all · / filter · enter confirm`;
277
+ process.stdout.write(`${ERASE_LINE}${DIM} ${truncate(footerLine, innerWidth)}${RESET}\n`);
278
+ }
279
+ function cleanup(result) {
280
+ try {
281
+ process.stdin.setRawMode(false);
282
+ }
283
+ catch { /* not a raw TTY */ }
284
+ process.stdin.removeAllListeners('data');
285
+ process.stdout.write(SHOW_CURSOR);
286
+ resolve(result);
287
+ }
288
+ function handleSigint() {
289
+ cleanup([]);
290
+ process.exit(130);
291
+ }
292
+ process.stdout.write(HIDE_CURSOR);
293
+ render(true);
294
+ process.stdin.setRawMode(true);
295
+ process.stdin.resume();
296
+ process.stdin.setEncoding('utf8');
297
+ process.once('SIGINT', handleSigint);
298
+ process.stdin.on('data', (key) => {
299
+ if (key === '\x03') {
300
+ process.removeListener('SIGINT', handleSigint);
301
+ cleanup([]);
302
+ process.exit(130);
303
+ }
304
+ // Navigation keys work in both modes — let the user scroll while filtering.
305
+ if (key === '\x1b[A') {
306
+ if (filtered.length === 0)
307
+ return;
308
+ cursorPos = cursorPos > 0 ? cursorPos - 1 : filtered.length - 1;
309
+ render();
310
+ return;
311
+ }
312
+ if (key === '\x1b[B') {
313
+ if (filtered.length === 0)
314
+ return;
315
+ cursorPos = cursorPos < filtered.length - 1 ? cursorPos + 1 : 0;
316
+ render();
317
+ return;
318
+ }
319
+ if (key === '\x1b[5~') {
320
+ // PageUp — advance window AND cursor by one viewport so the page
321
+ // actually flips. Without the windowStart bump, adjustWindowStart would
322
+ // only scroll far enough to keep the cursor visible (one row).
323
+ if (filtered.length === 0)
324
+ return;
325
+ const vp = viewport();
326
+ cursorPos = Math.max(0, cursorPos - vp);
327
+ windowStart = advancePageStart(windowStart, vp, filtered.length, -1);
328
+ render();
329
+ return;
330
+ }
331
+ if (key === '\x1b[6~') {
332
+ // PageDown — see PageUp comment.
333
+ if (filtered.length === 0)
334
+ return;
335
+ const vp = viewport();
336
+ cursorPos = Math.min(filtered.length - 1, cursorPos + vp);
337
+ windowStart = advancePageStart(windowStart, vp, filtered.length, 1);
338
+ render();
339
+ return;
340
+ }
341
+ if (filterMode) {
342
+ if (key === '\x1b') {
343
+ // Esc — clear filter and exit filter mode
344
+ filterMode = false;
345
+ filterText = '';
346
+ recomputeFiltered();
347
+ render();
348
+ return;
349
+ }
350
+ if (key === '\r' || key === '\n') {
351
+ // Enter — exit filter mode, keep filter applied
352
+ filterMode = false;
353
+ render();
354
+ return;
355
+ }
356
+ if (key === '\x7f' || key === '\b') {
357
+ // Backspace
358
+ filterText = filterText.slice(0, -1);
359
+ recomputeFiltered();
360
+ render();
361
+ return;
362
+ }
363
+ // Printable characters extend the filter. Reject control sequences and
364
+ // anything multi-byte we don't recognize.
365
+ if (key.length === 1 && key >= ' ' && key <= '~') {
366
+ filterText += key;
367
+ recomputeFiltered();
368
+ render();
369
+ return;
370
+ }
371
+ return;
372
+ }
373
+ // Non-filter mode
374
+ if (key === '/') {
375
+ filterMode = true;
376
+ render();
377
+ }
378
+ else if (key === ' ') {
379
+ if (filtered.length === 0)
380
+ return;
381
+ const origIdx = filtered[cursorPos];
382
+ if (selected.has(origIdx))
383
+ selected.delete(origIdx);
384
+ else
385
+ selected.add(origIdx);
386
+ render();
387
+ }
388
+ else if (key === 'a') {
389
+ // Toggle every item in the current filtered view.
390
+ const allOn = filtered.every(i => selected.has(i));
391
+ if (allOn)
392
+ for (const i of filtered)
393
+ selected.delete(i);
394
+ else
395
+ for (const i of filtered)
396
+ selected.add(i);
397
+ render();
398
+ }
399
+ else if (key === '\r' || key === '\n') {
400
+ process.removeListener('SIGINT', handleSigint);
401
+ cleanup(Array.from(selected).sort((a, b) => a - b).map(i => items[i]));
402
+ }
403
+ });
404
+ process.stdin.on('error', (err) => {
405
+ process.removeListener('SIGINT', handleSigint);
406
+ process.stdout.write(SHOW_CURSOR);
407
+ reject(err);
408
+ });
409
+ });
410
+ }
411
+ //# sourceMappingURL=repo-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-picker.js","sourceRoot":"","sources":["../../src/lib/repo-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CodexVendorConfig, QualityConfig } from '../config/schema.js';
2
+ export declare const CLAUDE_TIER_MODELS: Record<string, string>;
3
+ export declare const CODEX_TIER_MODELS_API: Record<string, string>;
4
+ export declare function resolveClaudeModel(quality: QualityConfig): string;
5
+ export declare function resolveCodexModel(quality: QualityConfig, vendor: CodexVendorConfig): string;
6
+ export declare function modelDisplayName(model: string): string | null;
7
+ //# sourceMappingURL=review-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-models.d.ts","sourceRoot":"","sources":["../../src/lib/review-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAE3E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIrD,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIxD,CAAA;AAWD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAEjE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAG3F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D"}
@@ -0,0 +1,32 @@
1
+ export const CLAUDE_TIER_MODELS = {
2
+ fast: 'claude-haiku-4-5-20251001',
3
+ balanced: 'claude-sonnet-4-6',
4
+ thorough: 'claude-opus-4-7',
5
+ };
6
+ export const CODEX_TIER_MODELS_API = {
7
+ fast: 'gpt-4o-mini',
8
+ balanced: 'o4-mini',
9
+ thorough: 'o3',
10
+ };
11
+ const MODEL_DISPLAY_NAMES = {
12
+ 'claude-opus-4-7': 'Opus 4.7',
13
+ 'claude-sonnet-4-6': 'Sonnet 4.6',
14
+ 'claude-haiku-4-5-20251001': 'Haiku 4.5',
15
+ 'o4-mini': 'o4-mini',
16
+ 'o3': 'o3',
17
+ 'gpt-4o-mini': 'gpt-4o-mini',
18
+ };
19
+ export function resolveClaudeModel(quality) {
20
+ return CLAUDE_TIER_MODELS[quality.tier] ?? CLAUDE_TIER_MODELS.balanced;
21
+ }
22
+ export function resolveCodexModel(quality, vendor) {
23
+ if (vendor.auth !== 'api-key')
24
+ return 'default';
25
+ return vendor.model || CODEX_TIER_MODELS_API[quality.tier] || CODEX_TIER_MODELS_API.balanced;
26
+ }
27
+ export function modelDisplayName(model) {
28
+ if (model === 'default')
29
+ return null;
30
+ return MODEL_DISPLAY_NAMES[model] ?? model;
31
+ }
32
+ //# sourceMappingURL=review-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-models.js","sourceRoot":"","sources":["../../src/lib/review-models.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,IAAI,EAAE,2BAA2B;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ,EAAE,iBAAiB;CAC5B,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,IAAI;CACf,CAAA;AAED,MAAM,mBAAmB,GAA2B;IAClD,iBAAiB,EAAE,UAAU;IAC7B,mBAAmB,EAAE,YAAY;IACjC,2BAA2B,EAAE,WAAW;IACxC,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,IAAI;IACV,aAAa,EAAE,aAAa;CAC7B,CAAA;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAsB;IACvD,OAAO,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAsB,EAAE,MAAyB;IACjF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC/C,OAAO,MAAM,CAAC,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,QAAQ,CAAA;AAC9F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACpC,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,65 @@
1
+ import type { Config } from '../config/schema.js';
2
+ import type { PREvent } from '../github/webhook.js';
3
+ import type { PROrigin } from '../github/detector.js';
4
+ import { type StepResult } from '../lib/workflow.js';
5
+ import type { PRPhase } from '../lib/board.js';
6
+ export declare function isRetryableFixError(err: unknown): boolean;
7
+ export declare function getEffectiveStepType(stepType: string, isRecheckRun: boolean): string;
8
+ export declare function countCrosscheckCommitsForPR(tmpDir: string, baseRef: string): number;
9
+ export interface WorkflowCompleteInputs {
10
+ owner: string;
11
+ repoName: string;
12
+ prNumber: number;
13
+ workflowId: string;
14
+ workflowStart: number;
15
+ stepsRun: string[];
16
+ results: Record<string, StepResult>;
17
+ workflowFailed: boolean;
18
+ round?: number;
19
+ now?: number;
20
+ }
21
+ export type WorkflowEndedReason = 'completed' | 'error' | 'progress_gate' | 'max_iterations' | 'manual_abort';
22
+ export declare function buildWorkflowCompleteEvent(inputs: WorkflowCompleteInputs): Record<string, unknown>;
23
+ export declare function exceedsMaxRounds(effectiveType: string, originalStepType: string, maxRounds: number, round: number | undefined): boolean;
24
+ export interface PRPhaseData {
25
+ phase?: PRPhase;
26
+ verdict?: string | null;
27
+ commentCount?: number;
28
+ fixCount?: number;
29
+ recheckVerdict?: string | null;
30
+ crTokens?: number;
31
+ recheckTokens?: number;
32
+ fixTokens?: number;
33
+ crReviewer?: string;
34
+ recheckReviewer?: string;
35
+ qualityTier?: string;
36
+ }
37
+ export interface WorkflowContext {
38
+ owner: string;
39
+ repoName: string;
40
+ prNumber: number;
41
+ pr: PREvent['pull_request'];
42
+ tmpDir: string;
43
+ token: string;
44
+ config: Config;
45
+ origin: PROrigin;
46
+ reviewStart: number;
47
+ log: (msg: string) => void;
48
+ onPhaseChange: (label: string, data?: PRPhaseData) => void;
49
+ crosscheckShas: Set<string>;
50
+ isRecheckRun?: boolean;
51
+ round?: number;
52
+ dryRun?: boolean;
53
+ steps?: import('./workflow.js').WorkflowStep[];
54
+ smartSwitchFallback?: 'claude' | 'codex';
55
+ pushedShas?: string[];
56
+ initialReviewComment?: {
57
+ id: number;
58
+ body: string;
59
+ };
60
+ }
61
+ export interface WorkflowResult {
62
+ verdict: string | null;
63
+ }
64
+ export declare function runWorkflow(ctx: WorkflowContext): Promise<WorkflowResult>;
65
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}