@quickchatai/pi-quickreview 0.0.0-stage → 1.1.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 (689) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +75 -2
  3. package/assets/agents/pass-abstraction.md +64 -0
  4. package/assets/agents/pass-ask-human.md +134 -0
  5. package/assets/agents/pass-backcompat.md +67 -0
  6. package/assets/agents/pass-baseline.md +61 -0
  7. package/assets/agents/pass-behaviour-delta.md +64 -0
  8. package/assets/agents/pass-bounds.md +36 -0
  9. package/assets/agents/pass-claims.md +31 -0
  10. package/assets/agents/pass-concurrency.md +168 -0
  11. package/assets/agents/pass-consistency.md +57 -0
  12. package/assets/agents/pass-contracts.md +30 -0
  13. package/assets/agents/pass-data-safety.md +54 -0
  14. package/assets/agents/pass-deferred.md +35 -0
  15. package/assets/agents/pass-delivery.md +37 -0
  16. package/assets/agents/pass-duplication.md +60 -0
  17. package/assets/agents/pass-intent.md +63 -0
  18. package/assets/agents/pass-lint-conformance.md +46 -0
  19. package/assets/agents/pass-maintainability.md +67 -0
  20. package/assets/agents/pass-placement.md +68 -0
  21. package/assets/agents/pass-prod-risk.md +24 -0
  22. package/assets/agents/pass-rollout.md +32 -0
  23. package/assets/agents/pass-roundtrip.md +46 -0
  24. package/assets/agents/pass-security.md +31 -0
  25. package/assets/agents/pass-simplicity.md +68 -0
  26. package/assets/agents/pass-statelessness.md +27 -0
  27. package/assets/agents/pass-style.md +37 -0
  28. package/assets/agents/pass-sweep.md +57 -0
  29. package/assets/agents/pass-tests.md +58 -0
  30. package/assets/agents/pass-ui.md +23 -0
  31. package/assets/agents/pass-validate.md +50 -0
  32. package/assets/agents/pass-widened.md +46 -0
  33. package/assets/agents/scan/pass-scan.md +86 -0
  34. package/assets/config.example.toml +1067 -0
  35. package/assets/deploy/reviewer/AGENTS.override.md +12 -0
  36. package/assets/profiles/default/README.md +21 -0
  37. package/assets/profiles/default/addenda/.gitkeep +0 -0
  38. package/assets/profiles/default/profile.toml +17 -0
  39. package/assets/profiles/example-django/README.md +21 -0
  40. package/assets/profiles/example-django/addenda/10-migration-discipline.md +13 -0
  41. package/assets/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
  42. package/assets/profiles/example-django/addenda/30-test-doctrine.md +12 -0
  43. package/assets/profiles/example-django/addenda/40-orm-usage.md +19 -0
  44. package/assets/profiles/example-django/addenda/50-declared-shape.md +10 -0
  45. package/assets/profiles/example-django/addenda/60-config-placement.md +14 -0
  46. package/assets/profiles/example-django/heuristics.toml +24 -0
  47. package/assets/profiles/example-django/profile.toml +9 -0
  48. package/assets/profiles/fast/README.md +24 -0
  49. package/assets/profiles/fast/profile.toml +59 -0
  50. package/assets/profiles/minimal/README.md +17 -0
  51. package/assets/profiles/minimal/addenda/.gitkeep +0 -0
  52. package/assets/profiles/minimal/profile.toml +8 -0
  53. package/assets/profiles/snappy/README.md +24 -0
  54. package/assets/profiles/snappy/addenda/10-race-as-question.md +6 -0
  55. package/assets/profiles/snappy/profile.toml +46 -0
  56. package/assets/prompts/companion-day-open.md +46 -0
  57. package/assets/prompts/companion-first-run.md +104 -0
  58. package/assets/prompts/companion.md +821 -0
  59. package/assets/prompts/conversation-system.md +117 -0
  60. package/assets/prompts/eod-sweep.md +120 -0
  61. package/assets/prompts/onboarding.md +74 -0
  62. package/assets/prompts/pass-common.md +52 -0
  63. package/assets/prompts/pass-quality-common.md +22 -0
  64. package/assets/prompts/round-first.md +874 -0
  65. package/assets/prompts/round-follow-up.md +991 -0
  66. package/assets/prompts/round-re-review.md +889 -0
  67. package/assets/prompts/round-recheck.md +196 -0
  68. package/assets/prompts/round-staleness.md +856 -0
  69. package/assets/schemas/review-result.v1.json +391 -0
  70. package/assets/schemas/scan-result.v1.json +421 -0
  71. package/assets/schemas/version.v1.json +57 -0
  72. package/assets/seed-manifest.json +19 -0
  73. package/assets/seeds/agents/pass-baseline.md +61 -0
  74. package/assets/seeds/agents/pass-contracts.md +30 -0
  75. package/assets/seeds/agents/pass-data-safety.md +54 -0
  76. package/assets/seeds/agents/pass-delivery.md +37 -0
  77. package/assets/seeds/agents/pass-prod-risk.md +24 -0
  78. package/assets/seeds/agents/pass-security.md +31 -0
  79. package/assets/seeds/agents/pass-statelessness.md +27 -0
  80. package/assets/seeds/agents/pass-ui.md +23 -0
  81. package/assets/seeds/agents/pass-validate.md +50 -0
  82. package/assets/seeds/prompts/conversation-system.md +117 -0
  83. package/assets/seeds/prompts/eod-sweep.md +120 -0
  84. package/assets/seeds/prompts/pass-common.md +52 -0
  85. package/dist/extensions/bash-guard.d.ts +467 -0
  86. package/dist/extensions/bash-guard.d.ts.map +1 -0
  87. package/dist/extensions/bash-guard.js +3058 -0
  88. package/dist/extensions/bash-guard.js.map +1 -0
  89. package/dist/extensions/finding-clusters.d.ts +33 -0
  90. package/dist/extensions/finding-clusters.d.ts.map +1 -0
  91. package/dist/extensions/finding-clusters.js +218 -0
  92. package/dist/extensions/finding-clusters.js.map +1 -0
  93. package/dist/extensions/ledger-pin.d.ts +76 -0
  94. package/dist/extensions/ledger-pin.d.ts.map +1 -0
  95. package/dist/extensions/ledger-pin.js +331 -0
  96. package/dist/extensions/ledger-pin.js.map +1 -0
  97. package/dist/extensions/lens.d.ts +43 -0
  98. package/dist/extensions/lens.d.ts.map +1 -0
  99. package/dist/extensions/lens.js +150 -0
  100. package/dist/extensions/lens.js.map +1 -0
  101. package/dist/extensions/pi-tool.d.ts +22 -0
  102. package/dist/extensions/pi-tool.d.ts.map +1 -0
  103. package/dist/extensions/pi-tool.js +20 -0
  104. package/dist/extensions/pi-tool.js.map +1 -0
  105. package/dist/extensions/quickreview.d.ts +21 -0
  106. package/dist/extensions/quickreview.d.ts.map +1 -0
  107. package/dist/extensions/quickreview.js +132 -0
  108. package/dist/extensions/quickreview.js.map +1 -0
  109. package/dist/src/anchors.d.ts +54 -0
  110. package/dist/src/anchors.d.ts.map +1 -0
  111. package/dist/src/anchors.js +127 -0
  112. package/dist/src/anchors.js.map +1 -0
  113. package/dist/src/assetroot.d.ts +16 -0
  114. package/dist/src/assetroot.d.ts.map +1 -0
  115. package/dist/src/assetroot.js +77 -0
  116. package/dist/src/assetroot.js.map +1 -0
  117. package/dist/src/authwatch.d.ts +61 -0
  118. package/dist/src/authwatch.d.ts.map +1 -0
  119. package/dist/src/authwatch.js +210 -0
  120. package/dist/src/authwatch.js.map +1 -0
  121. package/dist/src/budget.d.ts +15 -0
  122. package/dist/src/budget.d.ts.map +1 -0
  123. package/dist/src/budget.js +32 -0
  124. package/dist/src/budget.js.map +1 -0
  125. package/dist/src/casebudget.d.ts +3 -0
  126. package/dist/src/casebudget.d.ts.map +1 -0
  127. package/dist/src/casebudget.js +3 -0
  128. package/dist/src/casebudget.js.map +1 -0
  129. package/dist/src/cigate.d.ts +116 -0
  130. package/dist/src/cigate.d.ts.map +1 -0
  131. package/dist/src/cigate.js +176 -0
  132. package/dist/src/cigate.js.map +1 -0
  133. package/dist/src/codespan.d.ts +46 -0
  134. package/dist/src/codespan.d.ts.map +1 -0
  135. package/dist/src/codespan.js +75 -0
  136. package/dist/src/codespan.js.map +1 -0
  137. package/dist/src/contextpack.d.ts +56 -0
  138. package/dist/src/contextpack.d.ts.map +1 -0
  139. package/dist/src/contextpack.js +195 -0
  140. package/dist/src/contextpack.js.map +1 -0
  141. package/dist/src/contract.d.ts +8 -0
  142. package/dist/src/contract.d.ts.map +1 -0
  143. package/dist/src/contract.js +21 -0
  144. package/dist/src/contract.js.map +1 -0
  145. package/dist/src/coverage.d.ts +32 -0
  146. package/dist/src/coverage.d.ts.map +1 -0
  147. package/dist/src/coverage.js +85 -0
  148. package/dist/src/coverage.js.map +1 -0
  149. package/dist/src/datafence.d.ts +19 -0
  150. package/dist/src/datafence.d.ts.map +1 -0
  151. package/dist/src/datafence.js +60 -0
  152. package/dist/src/datafence.js.map +1 -0
  153. package/dist/src/dedup.d.ts +65 -0
  154. package/dist/src/dedup.d.ts.map +1 -0
  155. package/dist/src/dedup.js +459 -0
  156. package/dist/src/dedup.js.map +1 -0
  157. package/dist/src/depsources.d.ts +304 -0
  158. package/dist/src/depsources.d.ts.map +1 -0
  159. package/dist/src/depsources.js +3367 -0
  160. package/dist/src/depsources.js.map +1 -0
  161. package/dist/src/diffinput.d.ts +10 -0
  162. package/dist/src/diffinput.d.ts.map +1 -0
  163. package/dist/src/diffinput.js +172 -0
  164. package/dist/src/diffinput.js.map +1 -0
  165. package/dist/src/doubtwords.d.ts +10 -0
  166. package/dist/src/doubtwords.d.ts.map +1 -0
  167. package/dist/src/doubtwords.js +13 -0
  168. package/dist/src/doubtwords.js.map +1 -0
  169. package/dist/src/ecosystem.d.ts +148 -0
  170. package/dist/src/ecosystem.d.ts.map +1 -0
  171. package/dist/src/ecosystem.js +338 -0
  172. package/dist/src/ecosystem.js.map +1 -0
  173. package/dist/src/engine/agentdir.d.ts +5 -0
  174. package/dist/src/engine/agentdir.d.ts.map +1 -0
  175. package/dist/src/engine/agentdir.js +21 -0
  176. package/dist/src/engine/agentdir.js.map +1 -0
  177. package/dist/src/engine/auth.d.ts +214 -0
  178. package/dist/src/engine/auth.d.ts.map +1 -0
  179. package/dist/src/engine/auth.js +374 -0
  180. package/dist/src/engine/auth.js.map +1 -0
  181. package/dist/src/engine/budget.d.ts +60 -0
  182. package/dist/src/engine/budget.d.ts.map +1 -0
  183. package/dist/src/engine/budget.js +113 -0
  184. package/dist/src/engine/budget.js.map +1 -0
  185. package/dist/src/engine/capfd.d.ts +6 -0
  186. package/dist/src/engine/capfd.d.ts.map +1 -0
  187. package/dist/src/engine/capfd.js +21 -0
  188. package/dist/src/engine/capfd.js.map +1 -0
  189. package/dist/src/engine/caseout.d.ts +66 -0
  190. package/dist/src/engine/caseout.d.ts.map +1 -0
  191. package/dist/src/engine/caseout.js +107 -0
  192. package/dist/src/engine/caseout.js.map +1 -0
  193. package/dist/src/engine/context.d.ts +57 -0
  194. package/dist/src/engine/context.d.ts.map +1 -0
  195. package/dist/src/engine/context.js +212 -0
  196. package/dist/src/engine/context.js.map +1 -0
  197. package/dist/src/engine/envmap.d.ts +13 -0
  198. package/dist/src/engine/envmap.d.ts.map +1 -0
  199. package/dist/src/engine/envmap.js +372 -0
  200. package/dist/src/engine/envmap.js.map +1 -0
  201. package/dist/src/engine/extfiles.d.ts +7 -0
  202. package/dist/src/engine/extfiles.d.ts.map +1 -0
  203. package/dist/src/engine/extfiles.js +23 -0
  204. package/dist/src/engine/extfiles.js.map +1 -0
  205. package/dist/src/engine/keyroute.d.ts +21 -0
  206. package/dist/src/engine/keyroute.d.ts.map +1 -0
  207. package/dist/src/engine/keyroute.js +58 -0
  208. package/dist/src/engine/keyroute.js.map +1 -0
  209. package/dist/src/engine/lens/cache-group.d.ts +20 -0
  210. package/dist/src/engine/lens/cache-group.d.ts.map +1 -0
  211. package/dist/src/engine/lens/cache-group.js +31 -0
  212. package/dist/src/engine/lens/cache-group.js.map +1 -0
  213. package/dist/src/engine/lens/cache-run.d.ts +65 -0
  214. package/dist/src/engine/lens/cache-run.d.ts.map +1 -0
  215. package/dist/src/engine/lens/cache-run.js +159 -0
  216. package/dist/src/engine/lens/cache-run.js.map +1 -0
  217. package/dist/src/engine/lens/deadline.d.ts +54 -0
  218. package/dist/src/engine/lens/deadline.d.ts.map +1 -0
  219. package/dist/src/engine/lens/deadline.js +111 -0
  220. package/dist/src/engine/lens/deadline.js.map +1 -0
  221. package/dist/src/engine/lens/engine-tools.d.ts +13 -0
  222. package/dist/src/engine/lens/engine-tools.d.ts.map +1 -0
  223. package/dist/src/engine/lens/engine-tools.js +37 -0
  224. package/dist/src/engine/lens/engine-tools.js.map +1 -0
  225. package/dist/src/engine/lens/env.d.ts +23 -0
  226. package/dist/src/engine/lens/env.d.ts.map +1 -0
  227. package/dist/src/engine/lens/env.js +42 -0
  228. package/dist/src/engine/lens/env.js.map +1 -0
  229. package/dist/src/engine/lens/launch-plan.d.ts +63 -0
  230. package/dist/src/engine/lens/launch-plan.d.ts.map +1 -0
  231. package/dist/src/engine/lens/launch-plan.js +203 -0
  232. package/dist/src/engine/lens/launch-plan.js.map +1 -0
  233. package/dist/src/engine/lens/leaf-cache.d.ts +22 -0
  234. package/dist/src/engine/lens/leaf-cache.d.ts.map +1 -0
  235. package/dist/src/engine/lens/leaf-cache.js +115 -0
  236. package/dist/src/engine/lens/leaf-cache.js.map +1 -0
  237. package/dist/src/engine/lens/permits.d.ts +14 -0
  238. package/dist/src/engine/lens/permits.d.ts.map +1 -0
  239. package/dist/src/engine/lens/permits.js +18 -0
  240. package/dist/src/engine/lens/permits.js.map +1 -0
  241. package/dist/src/engine/lens/registry.d.ts +55 -0
  242. package/dist/src/engine/lens/registry.d.ts.map +1 -0
  243. package/dist/src/engine/lens/registry.js +140 -0
  244. package/dist/src/engine/lens/registry.js.map +1 -0
  245. package/dist/src/engine/lens/round-lens.d.ts +16 -0
  246. package/dist/src/engine/lens/round-lens.d.ts.map +1 -0
  247. package/dist/src/engine/lens/round-lens.js +46 -0
  248. package/dist/src/engine/lens/round-lens.js.map +1 -0
  249. package/dist/src/engine/lens/runlens.d.ts +103 -0
  250. package/dist/src/engine/lens/runlens.d.ts.map +1 -0
  251. package/dist/src/engine/lens/runlens.js +538 -0
  252. package/dist/src/engine/lens/runlens.js.map +1 -0
  253. package/dist/src/engine/lens/section.d.ts +19 -0
  254. package/dist/src/engine/lens/section.d.ts.map +1 -0
  255. package/dist/src/engine/lens/section.js +40 -0
  256. package/dist/src/engine/lens/section.js.map +1 -0
  257. package/dist/src/engine/lens/semaphore.d.ts +13 -0
  258. package/dist/src/engine/lens/semaphore.d.ts.map +1 -0
  259. package/dist/src/engine/lens/semaphore.js +44 -0
  260. package/dist/src/engine/lens/semaphore.js.map +1 -0
  261. package/dist/src/engine/lens/tool.d.ts +34 -0
  262. package/dist/src/engine/lens/tool.d.ts.map +1 -0
  263. package/dist/src/engine/lens/tool.js +345 -0
  264. package/dist/src/engine/lens/tool.js.map +1 -0
  265. package/dist/src/engine/lens/wave.d.ts +63 -0
  266. package/dist/src/engine/lens/wave.d.ts.map +1 -0
  267. package/dist/src/engine/lens/wave.js +95 -0
  268. package/dist/src/engine/lens/wave.js.map +1 -0
  269. package/dist/src/engine/livesessions.d.ts +21 -0
  270. package/dist/src/engine/livesessions.d.ts.map +1 -0
  271. package/dist/src/engine/livesessions.js +57 -0
  272. package/dist/src/engine/livesessions.js.map +1 -0
  273. package/dist/src/engine/livewire.d.ts +18 -0
  274. package/dist/src/engine/livewire.d.ts.map +1 -0
  275. package/dist/src/engine/livewire.js +31 -0
  276. package/dist/src/engine/livewire.js.map +1 -0
  277. package/dist/src/engine/openable.d.ts +37 -0
  278. package/dist/src/engine/openable.d.ts.map +1 -0
  279. package/dist/src/engine/openable.js +120 -0
  280. package/dist/src/engine/openable.js.map +1 -0
  281. package/dist/src/engine/pisdk.d.ts +226 -0
  282. package/dist/src/engine/pisdk.d.ts.map +1 -0
  283. package/dist/src/engine/pisdk.js +552 -0
  284. package/dist/src/engine/pisdk.js.map +1 -0
  285. package/dist/src/engine/port.d.ts +144 -0
  286. package/dist/src/engine/port.d.ts.map +1 -0
  287. package/dist/src/engine/port.js +16 -0
  288. package/dist/src/engine/port.js.map +1 -0
  289. package/dist/src/engine/prompts.d.ts +159 -0
  290. package/dist/src/engine/prompts.d.ts.map +1 -0
  291. package/dist/src/engine/prompts.js +339 -0
  292. package/dist/src/engine/prompts.js.map +1 -0
  293. package/dist/src/engine/render.d.ts +10 -0
  294. package/dist/src/engine/render.d.ts.map +1 -0
  295. package/dist/src/engine/render.js +23 -0
  296. package/dist/src/engine/render.js.map +1 -0
  297. package/dist/src/engine/reviewruntime.d.ts +13 -0
  298. package/dist/src/engine/reviewruntime.d.ts.map +1 -0
  299. package/dist/src/engine/reviewruntime.js +35 -0
  300. package/dist/src/engine/reviewruntime.js.map +1 -0
  301. package/dist/src/engine/reviewsdk.d.ts +75 -0
  302. package/dist/src/engine/reviewsdk.d.ts.map +1 -0
  303. package/dist/src/engine/reviewsdk.js +180 -0
  304. package/dist/src/engine/reviewsdk.js.map +1 -0
  305. package/dist/src/engine/round.d.ts +166 -0
  306. package/dist/src/engine/round.d.ts.map +1 -0
  307. package/dist/src/engine/round.js +543 -0
  308. package/dist/src/engine/round.js.map +1 -0
  309. package/dist/src/engine/roundagents.d.ts +17 -0
  310. package/dist/src/engine/roundagents.d.ts.map +1 -0
  311. package/dist/src/engine/roundagents.js +49 -0
  312. package/dist/src/engine/roundagents.js.map +1 -0
  313. package/dist/src/engine/roundevents.d.ts +110 -0
  314. package/dist/src/engine/roundevents.d.ts.map +1 -0
  315. package/dist/src/engine/roundevents.js +276 -0
  316. package/dist/src/engine/roundevents.js.map +1 -0
  317. package/dist/src/engine/roundsdk.d.ts +33 -0
  318. package/dist/src/engine/roundsdk.d.ts.map +1 -0
  319. package/dist/src/engine/roundsdk.js +76 -0
  320. package/dist/src/engine/roundsdk.js.map +1 -0
  321. package/dist/src/engine/sdkruntime.d.ts +23 -0
  322. package/dist/src/engine/sdkruntime.d.ts.map +1 -0
  323. package/dist/src/engine/sdkruntime.js +340 -0
  324. package/dist/src/engine/sdkruntime.js.map +1 -0
  325. package/dist/src/engine/select.d.ts +16 -0
  326. package/dist/src/engine/select.d.ts.map +1 -0
  327. package/dist/src/engine/select.js +32 -0
  328. package/dist/src/engine/select.js.map +1 -0
  329. package/dist/src/engine/sessionwrap.d.ts +4 -0
  330. package/dist/src/engine/sessionwrap.d.ts.map +1 -0
  331. package/dist/src/engine/sessionwrap.js +31 -0
  332. package/dist/src/engine/sessionwrap.js.map +1 -0
  333. package/dist/src/engine/toolfence.d.ts +90 -0
  334. package/dist/src/engine/toolfence.d.ts.map +1 -0
  335. package/dist/src/engine/toolfence.js +378 -0
  336. package/dist/src/engine/toolfence.js.map +1 -0
  337. package/dist/src/engine/tooluid.d.ts +128 -0
  338. package/dist/src/engine/tooluid.d.ts.map +1 -0
  339. package/dist/src/engine/tooluid.js +401 -0
  340. package/dist/src/engine/tooluid.js.map +1 -0
  341. package/dist/src/envstrip.d.ts +10 -0
  342. package/dist/src/envstrip.d.ts.map +1 -0
  343. package/dist/src/envstrip.js +15 -0
  344. package/dist/src/envstrip.js.map +1 -0
  345. package/dist/src/escalationprompt.d.ts +22 -0
  346. package/dist/src/escalationprompt.d.ts.map +1 -0
  347. package/dist/src/escalationprompt.js +54 -0
  348. package/dist/src/escalationprompt.js.map +1 -0
  349. package/dist/src/execfn.d.ts +29 -0
  350. package/dist/src/execfn.d.ts.map +1 -0
  351. package/dist/src/execfn.js +55 -0
  352. package/dist/src/execfn.js.map +1 -0
  353. package/dist/src/finding-chain.d.ts +40 -0
  354. package/dist/src/finding-chain.d.ts.map +1 -0
  355. package/dist/src/finding-chain.js +76 -0
  356. package/dist/src/finding-chain.js.map +1 -0
  357. package/dist/src/finding-row.d.ts +24 -0
  358. package/dist/src/finding-row.d.ts.map +1 -0
  359. package/dist/src/finding-row.js +26 -0
  360. package/dist/src/finding-row.js.map +1 -0
  361. package/dist/src/findingkey.d.ts +99 -0
  362. package/dist/src/findingkey.d.ts.map +1 -0
  363. package/dist/src/findingkey.js +210 -0
  364. package/dist/src/findingkey.js.map +1 -0
  365. package/dist/src/findingsrecord.d.ts +175 -0
  366. package/dist/src/findingsrecord.d.ts.map +1 -0
  367. package/dist/src/findingsrecord.js +410 -0
  368. package/dist/src/findingsrecord.js.map +1 -0
  369. package/dist/src/followup-mode.d.ts +4 -0
  370. package/dist/src/followup-mode.d.ts.map +1 -0
  371. package/dist/src/followup-mode.js +6 -0
  372. package/dist/src/followup-mode.js.map +1 -0
  373. package/dist/src/gate.d.ts +199 -0
  374. package/dist/src/gate.d.ts.map +1 -0
  375. package/dist/src/gate.js +315 -0
  376. package/dist/src/gate.js.map +1 -0
  377. package/dist/src/ghcred.d.ts +58 -0
  378. package/dist/src/ghcred.d.ts.map +1 -0
  379. package/dist/src/ghcred.js +139 -0
  380. package/dist/src/ghcred.js.map +1 -0
  381. package/dist/src/githubAuth.d.ts +32 -0
  382. package/dist/src/githubAuth.d.ts.map +1 -0
  383. package/dist/src/githubAuth.js +116 -0
  384. package/dist/src/githubAuth.js.map +1 -0
  385. package/dist/src/githubcore.d.ts +20 -0
  386. package/dist/src/githubcore.d.ts.map +1 -0
  387. package/dist/src/githubcore.js +20 -0
  388. package/dist/src/githubcore.js.map +1 -0
  389. package/dist/src/glob.d.ts +11 -0
  390. package/dist/src/glob.d.ts.map +1 -0
  391. package/dist/src/glob.js +69 -0
  392. package/dist/src/glob.js.map +1 -0
  393. package/dist/src/guards.d.ts +93 -0
  394. package/dist/src/guards.d.ts.map +1 -0
  395. package/dist/src/guards.js +306 -0
  396. package/dist/src/guards.js.map +1 -0
  397. package/dist/src/heartbeat.d.ts +29 -0
  398. package/dist/src/heartbeat.d.ts.map +1 -0
  399. package/dist/src/heartbeat.js +87 -0
  400. package/dist/src/heartbeat.js.map +1 -0
  401. package/dist/src/heuristics.d.ts +247 -0
  402. package/dist/src/heuristics.d.ts.map +1 -0
  403. package/dist/src/heuristics.js +927 -0
  404. package/dist/src/heuristics.js.map +1 -0
  405. package/dist/src/homes.d.ts +181 -0
  406. package/dist/src/homes.d.ts.map +1 -0
  407. package/dist/src/homes.js +242 -0
  408. package/dist/src/homes.js.map +1 -0
  409. package/dist/src/hunkheader.d.ts +11 -0
  410. package/dist/src/hunkheader.d.ts.map +1 -0
  411. package/dist/src/hunkheader.js +18 -0
  412. package/dist/src/hunkheader.js.map +1 -0
  413. package/dist/src/include.d.ts +435 -0
  414. package/dist/src/include.d.ts.map +1 -0
  415. package/dist/src/include.js +1692 -0
  416. package/dist/src/include.js.map +1 -0
  417. package/dist/src/launchvocab.d.ts +36 -0
  418. package/dist/src/launchvocab.d.ts.map +1 -0
  419. package/dist/src/launchvocab.js +59 -0
  420. package/dist/src/launchvocab.js.map +1 -0
  421. package/dist/src/ledgercarry.d.ts +24 -0
  422. package/dist/src/ledgercarry.d.ts.map +1 -0
  423. package/dist/src/ledgercarry.js +109 -0
  424. package/dist/src/ledgercarry.js.map +1 -0
  425. package/dist/src/lensids.d.ts +7 -0
  426. package/dist/src/lensids.d.ts.map +1 -0
  427. package/dist/src/lensids.js +53 -0
  428. package/dist/src/lensids.js.map +1 -0
  429. package/dist/src/lensplanning.d.ts +8 -0
  430. package/dist/src/lensplanning.d.ts.map +1 -0
  431. package/dist/src/lensplanning.js +126 -0
  432. package/dist/src/lensplanning.js.map +1 -0
  433. package/dist/src/lensresult.d.ts +94 -0
  434. package/dist/src/lensresult.d.ts.map +1 -0
  435. package/dist/src/lensresult.js +162 -0
  436. package/dist/src/lensresult.js.map +1 -0
  437. package/dist/src/lenstuning.d.ts +97 -0
  438. package/dist/src/lenstuning.d.ts.map +1 -0
  439. package/dist/src/lenstuning.js +326 -0
  440. package/dist/src/lenstuning.js.map +1 -0
  441. package/dist/src/lintconfig.d.ts +31 -0
  442. package/dist/src/lintconfig.d.ts.map +1 -0
  443. package/dist/src/lintconfig.js +543 -0
  444. package/dist/src/lintconfig.js.map +1 -0
  445. package/dist/src/live/events.d.ts +188 -0
  446. package/dist/src/live/events.d.ts.map +1 -0
  447. package/dist/src/live/events.js +136 -0
  448. package/dist/src/live/events.js.map +1 -0
  449. package/dist/src/live/writer.d.ts +54 -0
  450. package/dist/src/live/writer.d.ts.map +1 -0
  451. package/dist/src/live/writer.js +516 -0
  452. package/dist/src/live/writer.js.map +1 -0
  453. package/dist/src/localreview.d.ts +128 -0
  454. package/dist/src/localreview.d.ts.map +1 -0
  455. package/dist/src/localreview.js +426 -0
  456. package/dist/src/localreview.js.map +1 -0
  457. package/dist/src/loosenedtests.d.ts +13 -0
  458. package/dist/src/loosenedtests.d.ts.map +1 -0
  459. package/dist/src/loosenedtests.js +188 -0
  460. package/dist/src/loosenedtests.js.map +1 -0
  461. package/dist/src/memoryport.d.ts +264 -0
  462. package/dist/src/memoryport.d.ts.map +1 -0
  463. package/dist/src/memoryport.js +445 -0
  464. package/dist/src/memoryport.js.map +1 -0
  465. package/dist/src/migrations.d.ts +106 -0
  466. package/dist/src/migrations.d.ts.map +1 -0
  467. package/dist/src/migrations.js +373 -0
  468. package/dist/src/migrations.js.map +1 -0
  469. package/dist/src/oneshot.d.ts +12 -0
  470. package/dist/src/oneshot.d.ts.map +1 -0
  471. package/dist/src/oneshot.js +8 -0
  472. package/dist/src/oneshot.js.map +1 -0
  473. package/dist/src/packing.d.ts +11 -0
  474. package/dist/src/packing.d.ts.map +1 -0
  475. package/dist/src/packing.js +31 -0
  476. package/dist/src/packing.js.map +1 -0
  477. package/dist/src/passes.d.ts +16 -0
  478. package/dist/src/passes.d.ts.map +1 -0
  479. package/dist/src/passes.js +104 -0
  480. package/dist/src/passes.js.map +1 -0
  481. package/dist/src/passtasks.d.ts +68 -0
  482. package/dist/src/passtasks.d.ts.map +1 -0
  483. package/dist/src/passtasks.js +360 -0
  484. package/dist/src/passtasks.js.map +1 -0
  485. package/dist/src/pathinside.d.ts +5 -0
  486. package/dist/src/pathinside.d.ts.map +1 -0
  487. package/dist/src/pathinside.js +9 -0
  488. package/dist/src/pathinside.js.map +1 -0
  489. package/dist/src/pibuiltins.d.ts +36 -0
  490. package/dist/src/pibuiltins.d.ts.map +1 -0
  491. package/dist/src/pibuiltins.js +83 -0
  492. package/dist/src/pibuiltins.js.map +1 -0
  493. package/dist/src/plankey.d.ts +4 -0
  494. package/dist/src/plankey.d.ts.map +1 -0
  495. package/dist/src/plankey.js +10 -0
  496. package/dist/src/plankey.js.map +1 -0
  497. package/dist/src/planner.d.ts +375 -0
  498. package/dist/src/planner.d.ts.map +1 -0
  499. package/dist/src/planner.js +722 -0
  500. package/dist/src/planner.js.map +1 -0
  501. package/dist/src/plugin/args.d.ts +19 -0
  502. package/dist/src/plugin/args.d.ts.map +1 -0
  503. package/dist/src/plugin/args.js +107 -0
  504. package/dist/src/plugin/args.js.map +1 -0
  505. package/dist/src/plugin/index.d.ts +3 -0
  506. package/dist/src/plugin/index.d.ts.map +1 -0
  507. package/dist/src/plugin/index.js +14 -0
  508. package/dist/src/plugin/index.js.map +1 -0
  509. package/dist/src/plugin/login.d.ts +39 -0
  510. package/dist/src/plugin/login.d.ts.map +1 -0
  511. package/dist/src/plugin/login.js +73 -0
  512. package/dist/src/plugin/login.js.map +1 -0
  513. package/dist/src/plugin/review.d.ts +27 -0
  514. package/dist/src/plugin/review.d.ts.map +1 -0
  515. package/dist/src/plugin/review.js +298 -0
  516. package/dist/src/plugin/review.js.map +1 -0
  517. package/dist/src/plugin/runner.d.ts +6 -0
  518. package/dist/src/plugin/runner.d.ts.map +1 -0
  519. package/dist/src/plugin/runner.js +65 -0
  520. package/dist/src/plugin/runner.js.map +1 -0
  521. package/dist/src/plugin/scan.d.ts +79 -0
  522. package/dist/src/plugin/scan.d.ts.map +1 -0
  523. package/dist/src/plugin/scan.js +348 -0
  524. package/dist/src/plugin/scan.js.map +1 -0
  525. package/dist/src/plugin/session.d.ts +56 -0
  526. package/dist/src/plugin/session.d.ts.map +1 -0
  527. package/dist/src/plugin/session.js +2 -0
  528. package/dist/src/plugin/session.js.map +1 -0
  529. package/dist/src/plugin/setup.d.ts +19 -0
  530. package/dist/src/plugin/setup.d.ts.map +1 -0
  531. package/dist/src/plugin/setup.js +142 -0
  532. package/dist/src/plugin/setup.js.map +1 -0
  533. package/dist/src/plugin/versiongate.d.ts +26 -0
  534. package/dist/src/plugin/versiongate.d.ts.map +1 -0
  535. package/dist/src/plugin/versiongate.js +83 -0
  536. package/dist/src/plugin/versiongate.js.map +1 -0
  537. package/dist/src/postingkey.d.ts +8 -0
  538. package/dist/src/postingkey.d.ts.map +1 -0
  539. package/dist/src/postingkey.js +25 -0
  540. package/dist/src/postingkey.js.map +1 -0
  541. package/dist/src/postingpolicy.d.ts +108 -0
  542. package/dist/src/postingpolicy.d.ts.map +1 -0
  543. package/dist/src/postingpolicy.js +341 -0
  544. package/dist/src/postingpolicy.js.map +1 -0
  545. package/dist/src/pr-identity.d.ts +3 -0
  546. package/dist/src/pr-identity.d.ts.map +1 -0
  547. package/dist/src/pr-identity.js +9 -0
  548. package/dist/src/pr-identity.js.map +1 -0
  549. package/dist/src/prdelta.d.ts +181 -0
  550. package/dist/src/prdelta.d.ts.map +1 -0
  551. package/dist/src/prdelta.js +501 -0
  552. package/dist/src/prdelta.js.map +1 -0
  553. package/dist/src/pricing.d.ts +94 -0
  554. package/dist/src/pricing.d.ts.map +1 -0
  555. package/dist/src/pricing.js +209 -0
  556. package/dist/src/pricing.js.map +1 -0
  557. package/dist/src/priorfindings.d.ts +167 -0
  558. package/dist/src/priorfindings.d.ts.map +1 -0
  559. package/dist/src/priorfindings.js +445 -0
  560. package/dist/src/priorfindings.js.map +1 -0
  561. package/dist/src/priortasks.d.ts +31 -0
  562. package/dist/src/priortasks.d.ts.map +1 -0
  563. package/dist/src/priortasks.js +119 -0
  564. package/dist/src/priortasks.js.map +1 -0
  565. package/dist/src/profilelookup.d.ts +59 -0
  566. package/dist/src/profilelookup.d.ts.map +1 -0
  567. package/dist/src/profilelookup.js +98 -0
  568. package/dist/src/profilelookup.js.map +1 -0
  569. package/dist/src/profileoverrides.d.ts +91 -0
  570. package/dist/src/profileoverrides.d.ts.map +1 -0
  571. package/dist/src/profileoverrides.js +313 -0
  572. package/dist/src/profileoverrides.js.map +1 -0
  573. package/dist/src/profiles.d.ts +144 -0
  574. package/dist/src/profiles.d.ts.map +1 -0
  575. package/dist/src/profiles.js +604 -0
  576. package/dist/src/profiles.js.map +1 -0
  577. package/dist/src/promptdoc.d.ts +3 -0
  578. package/dist/src/promptdoc.d.ts.map +1 -0
  579. package/dist/src/promptdoc.js +18 -0
  580. package/dist/src/promptdoc.js.map +1 -0
  581. package/dist/src/prtarget.d.ts +70 -0
  582. package/dist/src/prtarget.d.ts.map +1 -0
  583. package/dist/src/prtarget.js +181 -0
  584. package/dist/src/prtarget.js.map +1 -0
  585. package/dist/src/recheckorder.d.ts +32 -0
  586. package/dist/src/recheckorder.d.ts.map +1 -0
  587. package/dist/src/recheckorder.js +5 -0
  588. package/dist/src/recheckorder.js.map +1 -0
  589. package/dist/src/reviewapi.d.ts +207 -0
  590. package/dist/src/reviewapi.d.ts.map +1 -0
  591. package/dist/src/reviewapi.js +939 -0
  592. package/dist/src/reviewapi.js.map +1 -0
  593. package/dist/src/reviewbotfindings.d.ts +33 -0
  594. package/dist/src/reviewbotfindings.d.ts.map +1 -0
  595. package/dist/src/reviewbotfindings.js +80 -0
  596. package/dist/src/reviewbotfindings.js.map +1 -0
  597. package/dist/src/reviewconfig.d.ts +741 -0
  598. package/dist/src/reviewconfig.d.ts.map +1 -0
  599. package/dist/src/reviewconfig.js +797 -0
  600. package/dist/src/reviewconfig.js.map +1 -0
  601. package/dist/src/reviewdelta.d.ts +51 -0
  602. package/dist/src/reviewdelta.d.ts.map +1 -0
  603. package/dist/src/reviewdelta.js +119 -0
  604. package/dist/src/reviewdelta.js.map +1 -0
  605. package/dist/src/reviewdest.d.ts +86 -0
  606. package/dist/src/reviewdest.d.ts.map +1 -0
  607. package/dist/src/reviewdest.js +142 -0
  608. package/dist/src/reviewdest.js.map +1 -0
  609. package/dist/src/reviewerstub.d.ts +12 -0
  610. package/dist/src/reviewerstub.d.ts.map +1 -0
  611. package/dist/src/reviewerstub.js +28 -0
  612. package/dist/src/reviewerstub.js.map +1 -0
  613. package/dist/src/reviewhost.d.ts +58 -0
  614. package/dist/src/reviewhost.d.ts.map +1 -0
  615. package/dist/src/reviewhost.js +135 -0
  616. package/dist/src/reviewhost.js.map +1 -0
  617. package/dist/src/reviewpost.d.ts +79 -0
  618. package/dist/src/reviewpost.d.ts.map +1 -0
  619. package/dist/src/reviewpost.js +233 -0
  620. package/dist/src/reviewpost.js.map +1 -0
  621. package/dist/src/reviewrender.d.ts +154 -0
  622. package/dist/src/reviewrender.d.ts.map +1 -0
  623. package/dist/src/reviewrender.js +480 -0
  624. package/dist/src/reviewrender.js.map +1 -0
  625. package/dist/src/reviewstate.d.ts +62 -0
  626. package/dist/src/reviewstate.d.ts.map +1 -0
  627. package/dist/src/reviewstate.js +167 -0
  628. package/dist/src/reviewstate.js.map +1 -0
  629. package/dist/src/reviewstore.d.ts +17 -0
  630. package/dist/src/reviewstore.d.ts.map +1 -0
  631. package/dist/src/reviewstore.js +105 -0
  632. package/dist/src/reviewstore.js.map +1 -0
  633. package/dist/src/round-progress.d.ts +120 -0
  634. package/dist/src/round-progress.d.ts.map +1 -0
  635. package/dist/src/round-progress.js +172 -0
  636. package/dist/src/round-progress.js.map +1 -0
  637. package/dist/src/round-stage-deadlines.d.ts +12 -0
  638. package/dist/src/round-stage-deadlines.d.ts.map +1 -0
  639. package/dist/src/round-stage-deadlines.js +10 -0
  640. package/dist/src/round-stage-deadlines.js.map +1 -0
  641. package/dist/src/session-command.d.ts +19 -0
  642. package/dist/src/session-command.d.ts.map +1 -0
  643. package/dist/src/session-command.js +20 -0
  644. package/dist/src/session-command.js.map +1 -0
  645. package/dist/src/settledread.d.ts +61 -0
  646. package/dist/src/settledread.d.ts.map +1 -0
  647. package/dist/src/settledread.js +135 -0
  648. package/dist/src/settledread.js.map +1 -0
  649. package/dist/src/severity.d.ts +167 -0
  650. package/dist/src/severity.d.ts.map +1 -0
  651. package/dist/src/severity.js +364 -0
  652. package/dist/src/severity.js.map +1 -0
  653. package/dist/src/severityrank.d.ts +8 -0
  654. package/dist/src/severityrank.d.ts.map +1 -0
  655. package/dist/src/severityrank.js +16 -0
  656. package/dist/src/severityrank.js.map +1 -0
  657. package/dist/src/standing-review.d.ts +45 -0
  658. package/dist/src/standing-review.d.ts.map +1 -0
  659. package/dist/src/standing-review.js +43 -0
  660. package/dist/src/standing-review.js.map +1 -0
  661. package/dist/src/storerows.d.ts +225 -0
  662. package/dist/src/storerows.d.ts.map +1 -0
  663. package/dist/src/storerows.js +7 -0
  664. package/dist/src/storerows.js.map +1 -0
  665. package/dist/src/styleguide.d.ts +25 -0
  666. package/dist/src/styleguide.d.ts.map +1 -0
  667. package/dist/src/styleguide.js +272 -0
  668. package/dist/src/styleguide.js.map +1 -0
  669. package/dist/src/sweepstatus.d.ts +42 -0
  670. package/dist/src/sweepstatus.d.ts.map +1 -0
  671. package/dist/src/sweepstatus.js +97 -0
  672. package/dist/src/sweepstatus.js.map +1 -0
  673. package/dist/src/templates.d.ts +243 -0
  674. package/dist/src/templates.d.ts.map +1 -0
  675. package/dist/src/templates.js +847 -0
  676. package/dist/src/templates.js.map +1 -0
  677. package/dist/src/types.d.ts +639 -0
  678. package/dist/src/types.d.ts.map +1 -0
  679. package/dist/src/types.js +90 -0
  680. package/dist/src/types.js.map +1 -0
  681. package/dist/src/unifieddiff.d.ts +22 -0
  682. package/dist/src/unifieddiff.d.ts.map +1 -0
  683. package/dist/src/unifieddiff.js +176 -0
  684. package/dist/src/unifieddiff.js.map +1 -0
  685. package/dist/src/yieldloop.d.ts +2 -0
  686. package/dist/src/yieldloop.d.ts.map +1 -0
  687. package/dist/src/yieldloop.js +14 -0
  688. package/dist/src/yieldloop.js.map +1 -0
  689. package/package.json +60 -4
@@ -0,0 +1,128 @@
1
+ import type { PrFileEntry } from "./githubcore.js";
2
+ /** The current branch against its base, as the round order takes a target. */
3
+ export interface BranchTarget {
4
+ /** `owner/name` from the origin remote, else `local/<directory>`. */
5
+ repo: string;
6
+ branch: string;
7
+ base: string;
8
+ headSha: string;
9
+ baseSha: string;
10
+ mergeBase: string;
11
+ files: PrFileEntry[];
12
+ /** Added plus deleted lines over the diff. */
13
+ lines: number;
14
+ /** Set when the target is the uncommitted working tree: the tree object of
15
+ * HEAD plus every uncommitted edit (the person's index is never touched),
16
+ * and the binary patch from HEAD to it. The tree's objects live only in a
17
+ * scratch store that is gone once the target is resolved, so the patch is
18
+ * what later builds the review tree. */
19
+ uncommitted?: {
20
+ treeSha: string;
21
+ patch: string;
22
+ };
23
+ /** Set when the target is a unified diff handed in (`--diff`): there is no
24
+ * branch and no head, so `headSha` is a hash of the diff's text. */
25
+ diff?: {
26
+ patch: string;
27
+ };
28
+ }
29
+ export type BranchResolution = {
30
+ ok: true;
31
+ target: BranchTarget;
32
+ } | {
33
+ ok: false;
34
+ error: string;
35
+ };
36
+ /** `owner/name` from the origin remote, or null when there is none. */
37
+ export declare function originRepo(cwd: string): string | null;
38
+ export declare function resolveBranch(cwd: string, asked?: string): BranchResolution;
39
+ /** The uncommitted working tree against HEAD: staged, unstaged and new
40
+ * (untracked, not ignored) files, read without touching the person's index or
41
+ * files. The snapshot is a tree built in a throwaway index, and its objects
42
+ * are written to a throwaway object store that borrows the repo's as an
43
+ * alternate, so nothing is written into the reviewed repository and a
44
+ * read-only checkout works. The snapshot's scratch store goes under
45
+ * `scratchParent` (default: the OS temp dir) and is gone when this returns. */
46
+ export declare function resolveUncommitted(cwd: string, o?: {
47
+ scratchParent?: string;
48
+ }): BranchResolution;
49
+ /** A unified diff handed in, as a target. The repository around `cwd` is not
50
+ * needed: when there is one it is only named (the repo, for the report), never
51
+ * written to. */
52
+ export declare function resolveDiff(cwd: string, text: string): BranchResolution;
53
+ /** The review's tree for a diff target: a plain directory, never a git
54
+ * worktree, so a read-only checkout is enough and nothing is written to its
55
+ * git dir. With a repository around `cwd` the tree starts as a copy of HEAD
56
+ * (`git archive`, a read) and the diff is applied on top when it applies;
57
+ * otherwise, or when it does not, the tree is the HEAD copy (or empty) and
58
+ * the review reads the changes from the diff itself. Returns a warning when
59
+ * the diff did not apply. The HEAD archive is staged beside `dir`. */
60
+ export declare function addDiffTree(cwd: string, dir: string, t: BranchTarget): string | null;
61
+ /** The review's tree for an uncommitted target: HEAD, then the edits on top. */
62
+ export declare function addUncommittedTree(cwd: string, dir: string, t: BranchTarget, o?: {
63
+ signal?: AbortSignal;
64
+ }): Promise<void>;
65
+ /** A throwaway detached checkout of `sha`, for the review to read. A shared
66
+ * clone, not a worktree: its objects come from the repository by alternates, so
67
+ * nothing is written into the reviewed repo's .git (the wrapper and the Action
68
+ * mount it read-only), and the tree is still a git checkout the lenses can ask. */
69
+ export declare function addReviewTree(cwd: string, dir: string, sha: string, o?: {
70
+ signal?: AbortSignal;
71
+ }): Promise<void>;
72
+ export declare function removeReviewTree(_cwd: string, dir: string): void;
73
+ /** What a repo has decided about local reviews, kept in its git dir (never
74
+ * tracked, never shared): the price under which a review starts without
75
+ * asking, and the price model's three rates. */
76
+ export interface ReviewSettings {
77
+ auto_limit_usd: number;
78
+ /** Dollars a review costs before any lens runs. */
79
+ usd_base: number;
80
+ /** Dollars one planned lens costs, whatever the diff. */
81
+ usd_per_lens: number;
82
+ /** Dollars the diff adds per thousand changed lines, once, not per lens. */
83
+ usd_per_kline: number;
84
+ }
85
+ /** The rates are a least-squares fit to what 295 recorded default-preset
86
+ * reviews cost (the final1 bench runs, gpt-6.1-sol list prices: $2 / M
87
+ * uncached input, $0.10 / M cached input, $10 / M output): the median PR is
88
+ * off by about a fifth, the sum by 1%, and no recorded review cost more than
89
+ * twice its estimate. The table is tests/fixtures/review-cost/recorded.json.
90
+ * A different model moves them; the repo's settings override them. */
91
+ export declare const DEFAULT_REVIEW_SETTINGS: ReviewSettings;
92
+ /** A review stops hard at this many times its estimate. The estimate is the
93
+ * expected cost, so stopping at it would cut about half the reviews short. */
94
+ export declare const HARD_STOP_FACTOR = 2;
95
+ export declare const SETTINGS_GIT_PATH = "qcr-review.json";
96
+ export declare function settingsPath(cwd: string): string | null;
97
+ /** The repo's settings over the defaults. A key that is not a positive number
98
+ * is ignored, so a typo never turns the limit off. */
99
+ export declare function loadReviewSettings(cwd: string): ReviewSettings;
100
+ /** The estimated cost of reviewing `lines` changed lines with `lenses` lenses:
101
+ * a base, a fixed cost per lens and one term for the diff. Rounded UP to the
102
+ * cent shown. */
103
+ export declare function priceReview(lenses: number, lines: number, s: ReviewSettings): number;
104
+ /** The most a review may spend before it is stopped, from its estimate. */
105
+ export declare function hardStopFor(estimateUsd: number): number;
106
+ /** What a start must quote: change the branch, the plan or the price and the
107
+ * key moves. */
108
+ export declare function reviewKey(parts: {
109
+ headSha: string;
110
+ baseSha: string;
111
+ lenses: readonly string[];
112
+ lines: number;
113
+ cap_usd: number;
114
+ /** A delta review: the head it reviews from. */
115
+ since?: string;
116
+ }): string;
117
+ export interface TerminalFinding {
118
+ path: string | null;
119
+ line: number | null;
120
+ severity: string;
121
+ title: string;
122
+ lens: string | null;
123
+ }
124
+ /** The findings a reader sees, grouped by severity, worst first (P0 … nit;
125
+ * a spelling outside the scale after them, as "other"). */
126
+ export declare function groupFindings(record: unknown): Record<string, TerminalFinding[]>;
127
+ export declare function renderGrouped(groups: Record<string, TerminalFinding[]>): string[];
128
+ //# sourceMappingURL=localreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localreview.d.ts","sourceRoot":"","sources":["../../src/localreview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,426 @@
1
+ // The pieces of a local review (`qcr review`) that are not the CLI: what the
2
+ // current branch is against its base (read with git, no network), what the
3
+ // review will cost, and how its findings read in a terminal. The engine is
4
+ // the shared one-shot runner (packages/pi-plugin/src/oneshot.ts); the plan key is the scan's
5
+ // (src/setup/scan.ts planKey) so a start must quote the price it was shown.
6
+ import { execFileSync } from "node:child_process";
7
+ import { createHash } from "node:crypto";
8
+ import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, utimesSync, } from "node:fs";
9
+ import { tmpdir } from "node:os";
10
+ import { basename, dirname, join, resolve } from "node:path";
11
+ import { normalizeDisposition, recordNumber, recordString } from "./findingkey.js";
12
+ import { severityRank } from "./severityrank.js";
13
+ import { planKey } from "./plankey.js";
14
+ import { parseUnifiedDiff } from "./diffinput.js";
15
+ import { nodeExec, runOrThrow } from "./execfn.js";
16
+ /** A git command's stdout, trimmed; throws with git's own words. */
17
+ function git(cwd, args, opts = {}) {
18
+ const out = execFileSync("git", [...args], {
19
+ cwd,
20
+ encoding: "utf8",
21
+ ...(opts.env ? { env: { ...process.env, ...opts.env } } : {}),
22
+ ...(opts.input !== undefined ? { input: opts.input } : {}),
23
+ stdio: [opts.input !== undefined ? "pipe" : "ignore", "pipe", "pipe"],
24
+ maxBuffer: 256 * 1024 * 1024,
25
+ });
26
+ return opts.raw ? out : out.trim();
27
+ }
28
+ /** How long one git step of building a review tree may take. */
29
+ const TREE_GIT_TIMEOUT_MS = 10 * 60_000;
30
+ /** A git command run as a child the event loop waits on (a clone or checkout
31
+ * of a large repo takes a while, and the caller's stop must be heard while it
32
+ * runs); throws with git's own words, or the signal's AbortError. */
33
+ async function gitAsync(cwd, args, opts = {}) {
34
+ const res = await runOrThrow(nodeExec, "git", [...args], {
35
+ cwd,
36
+ timeoutMs: TREE_GIT_TIMEOUT_MS,
37
+ ...(opts.input !== undefined ? { input: opts.input } : {}),
38
+ ...(opts.signal ? { signal: opts.signal } : {}),
39
+ });
40
+ return res.stdout.trim();
41
+ }
42
+ function tryGit(cwd, args) {
43
+ try {
44
+ return git(cwd, args);
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ const STATUS = { A: "added", D: "removed", M: "modified" };
51
+ /** The base to review against: `--base`, else origin's default branch, else
52
+ * `main`, else `master`. */
53
+ function baseOf(cwd, asked) {
54
+ const exists = (ref) => tryGit(cwd, ["rev-parse", "--verify", "--quiet", `${ref}^{commit}`]) !== null;
55
+ if (asked !== undefined)
56
+ return exists(asked) ? asked : null;
57
+ const origin = tryGit(cwd, ["symbolic-ref", "--quiet", "--short", "refs/remotes/origin/HEAD"]);
58
+ if (origin && exists(origin))
59
+ return origin;
60
+ for (const c of ["main", "master"])
61
+ if (exists(c))
62
+ return c;
63
+ return null;
64
+ }
65
+ /** The files and changed-line count between two trees (or commits). */
66
+ function diffFiles(cwd, from, to, env) {
67
+ // -z: NUL-terminated records with the paths verbatim, never C-quoted.
68
+ const numstat = git(cwd, ["diff", "--no-renames", "-z", "--numstat", from, to], {
69
+ env,
70
+ raw: true,
71
+ });
72
+ const names = new Map();
73
+ const nameFields = git(cwd, ["diff", "--no-renames", "-z", "--name-status", from, to], {
74
+ env,
75
+ raw: true,
76
+ }).split("\0");
77
+ for (let i = 0; i + 1 < nameFields.length; i += 2)
78
+ names.set(nameFields[i + 1], STATUS[nameFields[i][0]] ?? "modified");
79
+ const files = [];
80
+ let lines = 0;
81
+ for (const l of numstat.split("\0").filter(Boolean)) {
82
+ const [a, d, ...p] = l.split("\t");
83
+ const path = p.join("\t");
84
+ const binary = a === "-";
85
+ const additions = binary ? 0 : Number(a);
86
+ const deletions = binary ? 0 : Number(d);
87
+ lines += additions + deletions;
88
+ const patch = binary
89
+ ? undefined
90
+ : git(cwd, ["diff", "--no-renames", from, to, "--", path], { env });
91
+ files.push({
92
+ filename: path,
93
+ additions,
94
+ deletions,
95
+ status: names.get(path) ?? "modified",
96
+ ...(patch ? { patch } : {}),
97
+ });
98
+ }
99
+ return { files, lines };
100
+ }
101
+ /** `owner/name` from the origin remote, or null when there is none. */
102
+ export function originRepo(cwd) {
103
+ const origin = tryGit(cwd, ["remote", "get-url", "origin"]);
104
+ const m = origin?.match(/[:/]([^/:]+\/[^/]+?)(?:\.git)?\/?$/);
105
+ return m ? m[1] : null;
106
+ }
107
+ /** `owner/name` from the origin remote, else `local/<directory>`. */
108
+ function repoName(cwd) {
109
+ const top = tryGit(cwd, ["rev-parse", "--show-toplevel"]) ?? cwd;
110
+ return originRepo(cwd) ?? `local/${basename(resolve(top))}`;
111
+ }
112
+ /** The repository check both resolvers start with: `cwd` is a work tree and
113
+ * HEAD names a commit. */
114
+ function admitRepo(cwd) {
115
+ if (tryGit(cwd, ["rev-parse", "--is-inside-work-tree"]) !== "true")
116
+ return { ok: false, error: `${cwd} is not a git repository` };
117
+ const headSha = tryGit(cwd, ["rev-parse", "--verify", "--quiet", "HEAD^{commit}"]);
118
+ if (headSha === null)
119
+ return { ok: false, error: "the repository has no commits yet" };
120
+ return { ok: true, headSha };
121
+ }
122
+ export function resolveBranch(cwd, asked) {
123
+ const head = admitRepo(cwd);
124
+ if (!head.ok)
125
+ return head;
126
+ const headSha = head.headSha;
127
+ const base = baseOf(cwd, asked);
128
+ if (base === null)
129
+ return {
130
+ ok: false,
131
+ error: asked !== undefined
132
+ ? `base ${asked} is not a commit in this repository`
133
+ : "no base to review against: no origin default branch, main or master — pass --base REF",
134
+ };
135
+ const baseSha = git(cwd, ["rev-parse", `${base}^{commit}`]);
136
+ const mergeBase = tryGit(cwd, ["merge-base", base, "HEAD"]);
137
+ if (mergeBase === null)
138
+ return {
139
+ ok: false,
140
+ error: `HEAD and ${base} share no history, so there is no branch to review`,
141
+ };
142
+ const branch = tryGit(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]) ?? "HEAD";
143
+ const { files, lines } = diffFiles(cwd, mergeBase, headSha);
144
+ if (files.length === 0)
145
+ return { ok: false, error: `nothing to review: ${branch} has no changes against ${base}` };
146
+ return {
147
+ ok: true,
148
+ target: {
149
+ repo: repoName(cwd),
150
+ branch,
151
+ base,
152
+ headSha,
153
+ baseSha,
154
+ mergeBase,
155
+ files,
156
+ lines,
157
+ },
158
+ };
159
+ }
160
+ /** The uncommitted working tree against HEAD: staged, unstaged and new
161
+ * (untracked, not ignored) files, read without touching the person's index or
162
+ * files. The snapshot is a tree built in a throwaway index, and its objects
163
+ * are written to a throwaway object store that borrows the repo's as an
164
+ * alternate, so nothing is written into the reviewed repository and a
165
+ * read-only checkout works. The snapshot's scratch store goes under
166
+ * `scratchParent` (default: the OS temp dir) and is gone when this returns. */
167
+ export function resolveUncommitted(cwd, o = {}) {
168
+ const head = admitRepo(cwd);
169
+ if (!head.ok)
170
+ return head;
171
+ const headSha = head.headSha;
172
+ if (o.scratchParent !== undefined)
173
+ mkdirSync(o.scratchParent, { recursive: true });
174
+ const scratch = mkdtempSync(join(o.scratchParent ?? tmpdir(), "qcr-snap-"));
175
+ let treeSha;
176
+ let files;
177
+ let lines;
178
+ let patch;
179
+ try {
180
+ const objects = join(scratch, "objects");
181
+ mkdirSync(objects);
182
+ const commonDir = resolve(cwd, git(cwd, ["rev-parse", "--git-common-dir"]));
183
+ const env = {
184
+ GIT_INDEX_FILE: join(scratch, "index"),
185
+ GIT_OBJECT_DIRECTORY: objects,
186
+ GIT_ALTERNATE_OBJECT_DIRECTORIES: join(commonDir, "objects"),
187
+ };
188
+ const top = git(cwd, ["rev-parse", "--show-toplevel"]);
189
+ // Start from the person's own index (copied, never touched): its cached
190
+ // stat data keeps `add -A` from re-hashing every unchanged file, and git
191
+ // refreshes the mtime of each object it writes again, even one that sits
192
+ // in the alternate store. An index that is absent or unreadable falls back
193
+ // to HEAD's tree.
194
+ const index = resolve(cwd, git(cwd, ["rev-parse", "--git-path", "index"]));
195
+ try {
196
+ copyFileSync(index, env.GIT_INDEX_FILE);
197
+ // git re-hashes a file whose stat matches its entry only while the index
198
+ // file is no newer than that entry (the racy check): the copy keeps the
199
+ // original's mtime, a microsecond earlier, or a same-size edit made in
200
+ // the tick of the last index write would be read as unchanged
201
+ const t = (Math.floor(statSync(index).mtimeMs * 1000) - 1) / 1e6;
202
+ utimesSync(env.GIT_INDEX_FILE, t, t);
203
+ }
204
+ catch {
205
+ git(top, ["read-tree", headSha], { env });
206
+ }
207
+ git(top, ["add", "-A"], { env });
208
+ treeSha = git(top, ["write-tree"], { env });
209
+ ({ files, lines } = diffFiles(cwd, headSha, treeSha, env));
210
+ patch =
211
+ files.length === 0
212
+ ? ""
213
+ : git(cwd, ["diff", "--binary", "--no-renames", headSha, treeSha], { env, raw: true });
214
+ }
215
+ finally {
216
+ rmSync(scratch, { recursive: true, force: true });
217
+ }
218
+ if (files.length === 0)
219
+ return { ok: false, error: "nothing to review: the working tree has no uncommitted changes" };
220
+ const branch = tryGit(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]) ?? "HEAD";
221
+ return {
222
+ ok: true,
223
+ target: {
224
+ repo: repoName(cwd),
225
+ branch,
226
+ base: "HEAD",
227
+ headSha,
228
+ baseSha: headSha,
229
+ mergeBase: headSha,
230
+ files,
231
+ lines,
232
+ uncommitted: { treeSha, patch },
233
+ },
234
+ };
235
+ }
236
+ /** A unified diff handed in, as a target. The repository around `cwd` is not
237
+ * needed: when there is one it is only named (the repo, for the report), never
238
+ * written to. */
239
+ export function resolveDiff(cwd, text) {
240
+ const { files, lines } = parseUnifiedDiff(text);
241
+ if (files.length === 0)
242
+ return { ok: false, error: "nothing to review: no file changes were found in the diff" };
243
+ const id = createHash("sha1").update(text).digest("hex");
244
+ const inRepo = tryGit(cwd, ["rev-parse", "--is-inside-work-tree"]) === "true";
245
+ return {
246
+ ok: true,
247
+ target: {
248
+ repo: inRepo ? repoName(cwd) : "local/diff",
249
+ branch: "diff",
250
+ base: "diff",
251
+ headSha: id,
252
+ baseSha: id,
253
+ mergeBase: id,
254
+ files,
255
+ lines,
256
+ diff: { patch: text },
257
+ },
258
+ };
259
+ }
260
+ /** The review's tree for a diff target: a plain directory, never a git
261
+ * worktree, so a read-only checkout is enough and nothing is written to its
262
+ * git dir. With a repository around `cwd` the tree starts as a copy of HEAD
263
+ * (`git archive`, a read) and the diff is applied on top when it applies;
264
+ * otherwise, or when it does not, the tree is the HEAD copy (or empty) and
265
+ * the review reads the changes from the diff itself. Returns a warning when
266
+ * the diff did not apply. The HEAD archive is staged beside `dir`. */
267
+ export function addDiffTree(cwd, dir, t) {
268
+ mkdirSync(dir, { recursive: true });
269
+ const top = tryGit(cwd, ["rev-parse", "--show-toplevel"]);
270
+ const head = top === null ? null : tryGit(top, ["rev-parse", "--verify", "--quiet", "HEAD^{commit}"]);
271
+ if (top === null || head === null)
272
+ return null;
273
+ const scratch = mkdtempSync(join(dirname(resolve(dir)), ".qcr-diff-"));
274
+ try {
275
+ const tarball = join(scratch, "head.tar");
276
+ git(top, ["archive", "--format=tar", "-o", tarball, head]);
277
+ execFileSync("tar", ["-xf", tarball, "-C", dir], { stdio: "ignore" });
278
+ if (!t.diff)
279
+ return null;
280
+ try {
281
+ // the ceiling keeps git from finding a repository above the scratch tree
282
+ git(dir, ["apply", "--whitespace=nowarn"], {
283
+ input: t.diff.patch,
284
+ env: { GIT_CEILING_DIRECTORIES: dirname(resolve(dir)) },
285
+ });
286
+ return null;
287
+ }
288
+ catch {
289
+ return "the diff does not apply to this repository's HEAD, so the repository is context only and the review reads the changes from the diff";
290
+ }
291
+ }
292
+ finally {
293
+ rmSync(scratch, { recursive: true, force: true });
294
+ }
295
+ }
296
+ /** The review's tree for an uncommitted target: HEAD, then the edits on top. */
297
+ export async function addUncommittedTree(cwd, dir, t, o = {}) {
298
+ await addReviewTree(cwd, dir, t.headSha, o);
299
+ if (!t.uncommitted)
300
+ return;
301
+ const { patch } = t.uncommitted;
302
+ if (patch)
303
+ await gitAsync(dir, ["apply", "--whitespace=nowarn"], {
304
+ input: patch,
305
+ ...(o.signal ? { signal: o.signal } : {}),
306
+ });
307
+ }
308
+ /** A throwaway detached checkout of `sha`, for the review to read. A shared
309
+ * clone, not a worktree: its objects come from the repository by alternates, so
310
+ * nothing is written into the reviewed repo's .git (the wrapper and the Action
311
+ * mount it read-only), and the tree is still a git checkout the lenses can ask. */
312
+ export async function addReviewTree(cwd, dir, sha, o = {}) {
313
+ const common = git(cwd, ["rev-parse", "--path-format=absolute", "--git-common-dir"]);
314
+ const signal = o.signal ? { signal: o.signal } : {};
315
+ await gitAsync(cwd, ["clone", "--quiet", "--shared", "--no-checkout", common, dir], signal);
316
+ await gitAsync(dir, ["checkout", "--quiet", "--detach", sha], signal);
317
+ }
318
+ export function removeReviewTree(_cwd, dir) {
319
+ rmSync(dir, { recursive: true, force: true });
320
+ }
321
+ /** The rates are a least-squares fit to what 295 recorded default-preset
322
+ * reviews cost (the final1 bench runs, gpt-6.1-sol list prices: $2 / M
323
+ * uncached input, $0.10 / M cached input, $10 / M output): the median PR is
324
+ * off by about a fifth, the sum by 1%, and no recorded review cost more than
325
+ * twice its estimate. The table is tests/fixtures/review-cost/recorded.json.
326
+ * A different model moves them; the repo's settings override them. */
327
+ export const DEFAULT_REVIEW_SETTINGS = {
328
+ auto_limit_usd: 2,
329
+ usd_base: 0.1,
330
+ usd_per_lens: 0.125,
331
+ usd_per_kline: 1.85,
332
+ };
333
+ /** A review stops hard at this many times its estimate. The estimate is the
334
+ * expected cost, so stopping at it would cut about half the reviews short. */
335
+ export const HARD_STOP_FACTOR = 2;
336
+ export const SETTINGS_GIT_PATH = "qcr-review.json";
337
+ export function settingsPath(cwd) {
338
+ const p = tryGit(cwd, ["rev-parse", "--git-path", SETTINGS_GIT_PATH]);
339
+ return p === null ? null : resolve(cwd, p);
340
+ }
341
+ /** The repo's settings over the defaults. A key that is not a positive number
342
+ * is ignored, so a typo never turns the limit off. */
343
+ export function loadReviewSettings(cwd) {
344
+ const out = { ...DEFAULT_REVIEW_SETTINGS };
345
+ const path = settingsPath(cwd);
346
+ if (path === null || !existsSync(path))
347
+ return out;
348
+ try {
349
+ const raw = JSON.parse(readFileSync(path, "utf8"));
350
+ for (const k of Object.keys(out)) {
351
+ const v = raw[k];
352
+ if (typeof v === "number" && Number.isFinite(v) && v > 0)
353
+ out[k] = v;
354
+ }
355
+ }
356
+ catch {
357
+ // unreadable settings are the defaults
358
+ }
359
+ return out;
360
+ }
361
+ /** The estimated cost of reviewing `lines` changed lines with `lenses` lenses:
362
+ * a base, a fixed cost per lens and one term for the diff. Rounded UP to the
363
+ * cent shown. */
364
+ export function priceReview(lenses, lines, s) {
365
+ const usd = s.usd_base + s.usd_per_lens * lenses + (s.usd_per_kline * lines) / 1000;
366
+ return Math.max(0.01, Math.ceil(usd * 100 - 1e-9) / 100);
367
+ }
368
+ /** The most a review may spend before it is stopped, from its estimate. */
369
+ export function hardStopFor(estimateUsd) {
370
+ return Math.ceil(estimateUsd * HARD_STOP_FACTOR * 100 - 1e-9) / 100;
371
+ }
372
+ /** What a start must quote: change the branch, the plan or the price and the
373
+ * key moves. */
374
+ export function reviewKey(parts) {
375
+ return planKey({ ...parts, cap: Math.round(parts.cap_usd * 100) });
376
+ }
377
+ /** Dispositions that never reach a reader: the review's own kills. */
378
+ const HIDDEN = new Set(["killed", "withheld", "merged", "folded", "conceded"]);
379
+ /** The findings a reader sees, grouped by severity, worst first (P0 … nit;
380
+ * a spelling outside the scale after them, as "other"). */
381
+ export function groupFindings(record) {
382
+ const entries = record !== null &&
383
+ typeof record === "object" &&
384
+ Array.isArray(record.findings)
385
+ ? record.findings
386
+ : record !== null &&
387
+ typeof record === "object" &&
388
+ Array.isArray(record.candidates)
389
+ ? record.candidates
390
+ : [];
391
+ const rows = [];
392
+ for (const e of entries) {
393
+ if (e === null || typeof e !== "object")
394
+ continue;
395
+ if (HIDDEN.has(normalizeDisposition(e["disposition"])))
396
+ continue;
397
+ const sev = typeof e["severity"] === "string" ? e["severity"].trim() : "";
398
+ const rank = severityRank(sev);
399
+ const str = recordString;
400
+ rows.push({
401
+ rank: rank ?? 99,
402
+ path: str(e["path"]),
403
+ line: recordNumber(e["line"]),
404
+ severity: rank === undefined ? "other" : sev.toUpperCase() === "NIT" ? "nit" : sev.toUpperCase(),
405
+ title: str(e["title"]) ?? str(e["reason"]) ?? "(untitled finding)",
406
+ lens: str(e["lens"]) ?? str(e["name"]),
407
+ });
408
+ }
409
+ rows.sort((a, b) => a.rank - b.rank);
410
+ const out = {};
411
+ for (const { rank: _r, ...f } of rows)
412
+ (out[f.severity] ??= []).push(f);
413
+ return out;
414
+ }
415
+ export function renderGrouped(groups) {
416
+ const lines = [];
417
+ for (const [sev, list] of Object.entries(groups)) {
418
+ lines.push(`${sev} (${list.length})`);
419
+ for (const f of list) {
420
+ const where = f.path ? `${f.path}${f.line !== null ? `:${f.line}` : ""}` : "(no location)";
421
+ lines.push(` ${where} ${f.title}`);
422
+ }
423
+ }
424
+ return lines;
425
+ }
426
+ //# sourceMappingURL=localreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localreview.js","sourceRoot":"","sources":["../../src/localreview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type PrFile } from "./heuristics.js";
2
+ export type LoosenedKind = "exact-to-bound" | "exact-to-contains" | "tolerance-widened" | "count-lowered" | "bound-relaxed" | "timeout-lengthened" | "assert-removed" | "assert-commented" | "skip-added";
3
+ export interface LoosenedHit {
4
+ file: string;
5
+ /** Head line of the weakened assertion (the removed line's base line for a removal). */
6
+ line: number;
7
+ kind: LoosenedKind;
8
+ }
9
+ /** Every weakened assertion in the PR's test files, in diff order. */
10
+ export declare function detectLoosenedAssertions(files: readonly PrFile[]): LoosenedHit[];
11
+ /** The plan reason that hands the hits to pass-tests (at most `max` sites named). */
12
+ export declare function loosenedReason(hits: readonly LoosenedHit[], max?: number): string;
13
+ //# sourceMappingURL=loosenedtests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loosenedtests.d.ts","sourceRoot":"","sources":["../../src/loosenedtests.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,gBAAgB,GAChB,kBAAkB,GAClB,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;CACpB;AAqFD,sEAAsE;AACtE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,EAAE,CA2FhF;AAcD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,SAAK,GAAG,MAAM,CAO7E"}