@allocator-one/rcl 4.4.19

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 (663) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1415 -0
  3. package/dist/ci.d.ts +16 -0
  4. package/dist/ci.js +42 -0
  5. package/dist/ci.js.map +1 -0
  6. package/dist/config/data-dir.d.ts +6 -0
  7. package/dist/config/data-dir.js +12 -0
  8. package/dist/config/data-dir.js.map +1 -0
  9. package/dist/config/defaults.d.ts +82 -0
  10. package/dist/config/defaults.js +89 -0
  11. package/dist/config/defaults.js.map +1 -0
  12. package/dist/config/harness.d.ts +40 -0
  13. package/dist/config/harness.js +151 -0
  14. package/dist/config/harness.js.map +1 -0
  15. package/dist/config/loader.d.ts +13 -0
  16. package/dist/config/loader.js +131 -0
  17. package/dist/config/loader.js.map +1 -0
  18. package/dist/config/provider-concurrency.d.ts +4 -0
  19. package/dist/config/provider-concurrency.js +6 -0
  20. package/dist/config/provider-concurrency.js.map +1 -0
  21. package/dist/config/providers.d.ts +3 -0
  22. package/dist/config/providers.js +9 -0
  23. package/dist/config/providers.js.map +1 -0
  24. package/dist/config/schema.d.ts +179 -0
  25. package/dist/config/schema.js +115 -0
  26. package/dist/config/schema.js.map +1 -0
  27. package/dist/consensus/claim-contract.d.ts +9 -0
  28. package/dist/consensus/claim-contract.js +307 -0
  29. package/dist/consensus/claim-contract.js.map +1 -0
  30. package/dist/consensus/claim-identity.d.ts +5 -0
  31. package/dist/consensus/claim-identity.js +39 -0
  32. package/dist/consensus/claim-identity.js.map +1 -0
  33. package/dist/consensus/deduper.d.ts +43 -0
  34. package/dist/consensus/deduper.js +1052 -0
  35. package/dist/consensus/deduper.js.map +1 -0
  36. package/dist/consensus/finding-identity.d.ts +20 -0
  37. package/dist/consensus/finding-identity.js +49 -0
  38. package/dist/consensus/finding-identity.js.map +1 -0
  39. package/dist/consensus/gating.d.ts +215 -0
  40. package/dist/consensus/gating.js +699 -0
  41. package/dist/consensus/gating.js.map +1 -0
  42. package/dist/consensus/parser.d.ts +22 -0
  43. package/dist/consensus/parser.js +255 -0
  44. package/dist/consensus/parser.js.map +1 -0
  45. package/dist/consensus/semantic-deduper.d.ts +10 -0
  46. package/dist/consensus/semantic-deduper.js +70 -0
  47. package/dist/consensus/semantic-deduper.js.map +1 -0
  48. package/dist/consensus/types.d.ts +196 -0
  49. package/dist/consensus/types.js +2 -0
  50. package/dist/consensus/types.js.map +1 -0
  51. package/dist/consensus/verification-contract.d.ts +8 -0
  52. package/dist/consensus/verification-contract.js +95 -0
  53. package/dist/consensus/verification-contract.js.map +1 -0
  54. package/dist/consensus/voter.d.ts +29 -0
  55. package/dist/consensus/voter.js +394 -0
  56. package/dist/consensus/voter.js.map +1 -0
  57. package/dist/converge/attempt-budget.d.ts +88 -0
  58. package/dist/converge/attempt-budget.js +717 -0
  59. package/dist/converge/attempt-budget.js.map +1 -0
  60. package/dist/converge/bound-fix-recovery-source.d.ts +24 -0
  61. package/dist/converge/bound-fix-recovery-source.js +25 -0
  62. package/dist/converge/bound-fix-recovery-source.js.map +1 -0
  63. package/dist/converge/bound-fix-recovery.d.ts +15 -0
  64. package/dist/converge/bound-fix-recovery.js +65 -0
  65. package/dist/converge/bound-fix-recovery.js.map +1 -0
  66. package/dist/converge/correction-anchors.d.ts +1 -0
  67. package/dist/converge/correction-anchors.js +2 -0
  68. package/dist/converge/correction-anchors.js.map +1 -0
  69. package/dist/converge/cycle-remote.d.ts +6 -0
  70. package/dist/converge/cycle-remote.js +41 -0
  71. package/dist/converge/cycle-remote.js.map +1 -0
  72. package/dist/converge/delivery-reconciliation.d.ts +17 -0
  73. package/dist/converge/delivery-reconciliation.js +53 -0
  74. package/dist/converge/delivery-reconciliation.js.map +1 -0
  75. package/dist/converge/finding-identity.d.ts +6 -0
  76. package/dist/converge/finding-identity.js +7 -0
  77. package/dist/converge/finding-identity.js.map +1 -0
  78. package/dist/converge/fresh-review.d.ts +37 -0
  79. package/dist/converge/fresh-review.js +351 -0
  80. package/dist/converge/fresh-review.js.map +1 -0
  81. package/dist/converge/launch-guard.d.ts +55 -0
  82. package/dist/converge/launch-guard.js +363 -0
  83. package/dist/converge/launch-guard.js.map +1 -0
  84. package/dist/converge/launch-preflight.d.ts +5 -0
  85. package/dist/converge/launch-preflight.js +41 -0
  86. package/dist/converge/launch-preflight.js.map +1 -0
  87. package/dist/converge/launch-record.d.ts +136 -0
  88. package/dist/converge/launch-record.js +86 -0
  89. package/dist/converge/launch-record.js.map +1 -0
  90. package/dist/converge/legacy-launch-health.d.ts +311 -0
  91. package/dist/converge/legacy-launch-health.js +159 -0
  92. package/dist/converge/legacy-launch-health.js.map +1 -0
  93. package/dist/converge/legacy-roster.d.ts +29 -0
  94. package/dist/converge/legacy-roster.js +268 -0
  95. package/dist/converge/legacy-roster.js.map +1 -0
  96. package/dist/converge/native-lock.d.ts +18 -0
  97. package/dist/converge/native-lock.js +122 -0
  98. package/dist/converge/native-lock.js.map +1 -0
  99. package/dist/converge/ordinary-pending-export.d.ts +67 -0
  100. package/dist/converge/ordinary-pending-export.js +175 -0
  101. package/dist/converge/ordinary-pending-export.js.map +1 -0
  102. package/dist/converge/ordinary-pending-package.d.ts +28 -0
  103. package/dist/converge/ordinary-pending-package.js +36 -0
  104. package/dist/converge/ordinary-pending-package.js.map +1 -0
  105. package/dist/converge/pending-legacy-resume.d.ts +119 -0
  106. package/dist/converge/pending-legacy-resume.js +720 -0
  107. package/dist/converge/pending-legacy-resume.js.map +1 -0
  108. package/dist/converge/pending-recovery-source.d.ts +131 -0
  109. package/dist/converge/pending-recovery-source.js +71 -0
  110. package/dist/converge/pending-recovery-source.js.map +1 -0
  111. package/dist/converge/recovery-launch.d.ts +66 -0
  112. package/dist/converge/recovery-launch.js +518 -0
  113. package/dist/converge/recovery-launch.js.map +1 -0
  114. package/dist/converge/retained-report.d.ts +29 -0
  115. package/dist/converge/retained-report.js +218 -0
  116. package/dist/converge/retained-report.js.map +1 -0
  117. package/dist/converge/retry-source.d.ts +25 -0
  118. package/dist/converge/retry-source.js +13 -0
  119. package/dist/converge/retry-source.js.map +1 -0
  120. package/dist/converge/review-cycle.d.ts +49 -0
  121. package/dist/converge/review-cycle.js +26 -0
  122. package/dist/converge/review-cycle.js.map +1 -0
  123. package/dist/converge/round-gap-schema.d.ts +66 -0
  124. package/dist/converge/round-gap-schema.js +51 -0
  125. package/dist/converge/round-gap-schema.js.map +1 -0
  126. package/dist/converge/round-gap.d.ts +38 -0
  127. package/dist/converge/round-gap.js +334 -0
  128. package/dist/converge/round-gap.js.map +1 -0
  129. package/dist/converge/run-state.d.ts +224 -0
  130. package/dist/converge/run-state.js +564 -0
  131. package/dist/converge/run-state.js.map +1 -0
  132. package/dist/converge/stale-report-schema.d.ts +42 -0
  133. package/dist/converge/stale-report-schema.js +79 -0
  134. package/dist/converge/stale-report-schema.js.map +1 -0
  135. package/dist/converge/stale-report-storage.d.ts +47 -0
  136. package/dist/converge/stale-report-storage.js +172 -0
  137. package/dist/converge/stale-report-storage.js.map +1 -0
  138. package/dist/converge/stale-report.d.ts +14 -0
  139. package/dist/converge/stale-report.js +213 -0
  140. package/dist/converge/stale-report.js.map +1 -0
  141. package/dist/converge/target-ownership.d.ts +29 -0
  142. package/dist/converge/target-ownership.js +95 -0
  143. package/dist/converge/target-ownership.js.map +1 -0
  144. package/dist/converge/terminal-rejection-schema.d.ts +42 -0
  145. package/dist/converge/terminal-rejection-schema.js +39 -0
  146. package/dist/converge/terminal-rejection-schema.js.map +1 -0
  147. package/dist/converge/terminal-rejection.d.ts +13 -0
  148. package/dist/converge/terminal-rejection.js +275 -0
  149. package/dist/converge/terminal-rejection.js.map +1 -0
  150. package/dist/coordination/registry-lock.d.ts +82 -0
  151. package/dist/coordination/registry-lock.js +498 -0
  152. package/dist/coordination/registry-lock.js.map +1 -0
  153. package/dist/discuss.d.ts +53 -0
  154. package/dist/discuss.js +112 -0
  155. package/dist/discuss.js.map +1 -0
  156. package/dist/dispatch/adapter.d.ts +32 -0
  157. package/dist/dispatch/adapter.js +2 -0
  158. package/dist/dispatch/adapter.js.map +1 -0
  159. package/dist/dispatch/anthropic.d.ts +10 -0
  160. package/dist/dispatch/anthropic.js +235 -0
  161. package/dist/dispatch/anthropic.js.map +1 -0
  162. package/dist/dispatch/async-lane.d.ts +127 -0
  163. package/dist/dispatch/async-lane.js +414 -0
  164. package/dist/dispatch/async-lane.js.map +1 -0
  165. package/dist/dispatch/capture-council.d.ts +63 -0
  166. package/dist/dispatch/capture-council.js +137 -0
  167. package/dist/dispatch/capture-council.js.map +1 -0
  168. package/dist/dispatch/captured-async.d.ts +67 -0
  169. package/dist/dispatch/captured-async.js +40 -0
  170. package/dist/dispatch/captured-async.js.map +1 -0
  171. package/dist/dispatch/captured-inputs.d.ts +50 -0
  172. package/dist/dispatch/captured-inputs.js +190 -0
  173. package/dist/dispatch/captured-inputs.js.map +1 -0
  174. package/dist/dispatch/checkpoint-async-context.d.ts +27 -0
  175. package/dist/dispatch/checkpoint-async-context.js +51 -0
  176. package/dist/dispatch/checkpoint-async-context.js.map +1 -0
  177. package/dist/dispatch/checkpoint-async-execution.d.ts +22 -0
  178. package/dist/dispatch/checkpoint-async-execution.js +130 -0
  179. package/dist/dispatch/checkpoint-async-execution.js.map +1 -0
  180. package/dist/dispatch/checkpoint-async-store.d.ts +134 -0
  181. package/dist/dispatch/checkpoint-async-store.js +534 -0
  182. package/dist/dispatch/checkpoint-async-store.js.map +1 -0
  183. package/dist/dispatch/checkpoint-async-unknown.d.ts +19 -0
  184. package/dist/dispatch/checkpoint-async-unknown.js +46 -0
  185. package/dist/dispatch/checkpoint-async-unknown.js.map +1 -0
  186. package/dist/dispatch/checkpoint-async.d.ts +252 -0
  187. package/dist/dispatch/checkpoint-async.js +270 -0
  188. package/dist/dispatch/checkpoint-async.js.map +1 -0
  189. package/dist/dispatch/checkpoint-gating-execution.d.ts +26 -0
  190. package/dist/dispatch/checkpoint-gating-execution.js +84 -0
  191. package/dist/dispatch/checkpoint-gating-execution.js.map +1 -0
  192. package/dist/dispatch/checkpoint-phase-limits.d.ts +5 -0
  193. package/dist/dispatch/checkpoint-phase-limits.js +11 -0
  194. package/dist/dispatch/checkpoint-phase-limits.js.map +1 -0
  195. package/dist/dispatch/checkpoint-verification-context.d.ts +15 -0
  196. package/dist/dispatch/checkpoint-verification-context.js +48 -0
  197. package/dist/dispatch/checkpoint-verification-context.js.map +1 -0
  198. package/dist/dispatch/checkpoint-verification.d.ts +213 -0
  199. package/dist/dispatch/checkpoint-verification.js +381 -0
  200. package/dist/dispatch/checkpoint-verification.js.map +1 -0
  201. package/dist/dispatch/checkpoint.d.ts +329 -0
  202. package/dist/dispatch/checkpoint.js +1418 -0
  203. package/dist/dispatch/checkpoint.js.map +1 -0
  204. package/dist/dispatch/google.d.ts +10 -0
  205. package/dist/dispatch/google.js +158 -0
  206. package/dist/dispatch/google.js.map +1 -0
  207. package/dist/dispatch/late-audit.d.ts +23 -0
  208. package/dist/dispatch/late-audit.js +133 -0
  209. package/dist/dispatch/late-audit.js.map +1 -0
  210. package/dist/dispatch/merge.d.ts +29 -0
  211. package/dist/dispatch/merge.js +112 -0
  212. package/dist/dispatch/merge.js.map +1 -0
  213. package/dist/dispatch/openai-compat.d.ts +30 -0
  214. package/dist/dispatch/openai-compat.js +166 -0
  215. package/dist/dispatch/openai-compat.js.map +1 -0
  216. package/dist/dispatch/openai.d.ts +10 -0
  217. package/dist/dispatch/openai.js +159 -0
  218. package/dist/dispatch/openai.js.map +1 -0
  219. package/dist/dispatch/original-execution.d.ts +30 -0
  220. package/dist/dispatch/original-execution.js +91 -0
  221. package/dist/dispatch/original-execution.js.map +1 -0
  222. package/dist/dispatch/original-launch.d.ts +37 -0
  223. package/dist/dispatch/original-launch.js +117 -0
  224. package/dist/dispatch/original-launch.js.map +1 -0
  225. package/dist/dispatch/quorum.d.ts +15 -0
  226. package/dist/dispatch/quorum.js +33 -0
  227. package/dist/dispatch/quorum.js.map +1 -0
  228. package/dist/dispatch/recovery-operation.d.ts +44 -0
  229. package/dist/dispatch/recovery-operation.js +146 -0
  230. package/dist/dispatch/recovery-operation.js.map +1 -0
  231. package/dist/dispatch/recovery-policy.d.ts +54 -0
  232. package/dist/dispatch/recovery-policy.js +157 -0
  233. package/dist/dispatch/recovery-policy.js.map +1 -0
  234. package/dist/dispatch/recovery.d.ts +78 -0
  235. package/dist/dispatch/recovery.js +299 -0
  236. package/dist/dispatch/recovery.js.map +1 -0
  237. package/dist/dispatch/retained-async.d.ts +13 -0
  238. package/dist/dispatch/retained-async.js +101 -0
  239. package/dist/dispatch/retained-async.js.map +1 -0
  240. package/dist/dispatch/reviewer-identity.d.ts +10 -0
  241. package/dist/dispatch/reviewer-identity.js +19 -0
  242. package/dist/dispatch/reviewer-identity.js.map +1 -0
  243. package/dist/dispatch/runner.d.ts +76 -0
  244. package/dist/dispatch/runner.js +415 -0
  245. package/dist/dispatch/runner.js.map +1 -0
  246. package/dist/dispatch/utils.d.ts +159 -0
  247. package/dist/dispatch/utils.js +381 -0
  248. package/dist/dispatch/utils.js.map +1 -0
  249. package/dist/dispatch/verification-execution.d.ts +48 -0
  250. package/dist/dispatch/verification-execution.js +252 -0
  251. package/dist/dispatch/verification-execution.js.map +1 -0
  252. package/dist/dispatch/verification-late-audit.d.ts +17 -0
  253. package/dist/dispatch/verification-late-audit.js +117 -0
  254. package/dist/dispatch/verification-late-audit.js.map +1 -0
  255. package/dist/evidence/claim-recovery/authenticated-carrier-projection.d.ts +30 -0
  256. package/dist/evidence/claim-recovery/authenticated-carrier-projection.js +100 -0
  257. package/dist/evidence/claim-recovery/authenticated-carrier-projection.js.map +1 -0
  258. package/dist/evidence/claim-recovery/authenticated-receipts.d.ts +46 -0
  259. package/dist/evidence/claim-recovery/authenticated-receipts.js +120 -0
  260. package/dist/evidence/claim-recovery/authenticated-receipts.js.map +1 -0
  261. package/dist/evidence/claim-recovery/carrier-inventory.d.ts +49 -0
  262. package/dist/evidence/claim-recovery/carrier-inventory.js +340 -0
  263. package/dist/evidence/claim-recovery/carrier-inventory.js.map +1 -0
  264. package/dist/evidence/claim-recovery/claim-index.d.ts +12 -0
  265. package/dist/evidence/claim-recovery/claim-index.js +56 -0
  266. package/dist/evidence/claim-recovery/claim-index.js.map +1 -0
  267. package/dist/evidence/claim-recovery/confirmation.d.ts +53 -0
  268. package/dist/evidence/claim-recovery/confirmation.js +151 -0
  269. package/dist/evidence/claim-recovery/confirmation.js.map +1 -0
  270. package/dist/evidence/claim-recovery/context.d.ts +15 -0
  271. package/dist/evidence/claim-recovery/context.js +40 -0
  272. package/dist/evidence/claim-recovery/context.js.map +1 -0
  273. package/dist/evidence/claim-recovery/proof-storage.d.ts +6 -0
  274. package/dist/evidence/claim-recovery/proof-storage.js +97 -0
  275. package/dist/evidence/claim-recovery/proof-storage.js.map +1 -0
  276. package/dist/evidence/claim-recovery/validation/anchors.d.ts +20 -0
  277. package/dist/evidence/claim-recovery/validation/anchors.js +22 -0
  278. package/dist/evidence/claim-recovery/validation/anchors.js.map +1 -0
  279. package/dist/evidence/claim-recovery/validation/carrier-projection.d.ts +9 -0
  280. package/dist/evidence/claim-recovery/validation/carrier-projection.js +364 -0
  281. package/dist/evidence/claim-recovery/validation/carrier-projection.js.map +1 -0
  282. package/dist/evidence/claim-recovery/validation/carrier-types.d.ts +83 -0
  283. package/dist/evidence/claim-recovery/validation/carrier-types.js +2 -0
  284. package/dist/evidence/claim-recovery/validation/carrier-types.js.map +1 -0
  285. package/dist/evidence/claim-recovery/validation/claim-split.d.ts +57 -0
  286. package/dist/evidence/claim-recovery/validation/claim-split.js +209 -0
  287. package/dist/evidence/claim-recovery/validation/claim-split.js.map +1 -0
  288. package/dist/evidence/claim-recovery/validation/claims.d.ts +20 -0
  289. package/dist/evidence/claim-recovery/validation/claims.js +108 -0
  290. package/dist/evidence/claim-recovery/validation/claims.js.map +1 -0
  291. package/dist/evidence/claim-recovery/validation/current-projection.d.ts +36 -0
  292. package/dist/evidence/claim-recovery/validation/current-projection.js +424 -0
  293. package/dist/evidence/claim-recovery/validation/current-projection.js.map +1 -0
  294. package/dist/evidence/claim-recovery/validation/lexical.d.ts +18 -0
  295. package/dist/evidence/claim-recovery/validation/lexical.js +91 -0
  296. package/dist/evidence/claim-recovery/validation/lexical.js.map +1 -0
  297. package/dist/evidence/claim-recovery/validation/materials.d.ts +19 -0
  298. package/dist/evidence/claim-recovery/validation/materials.js +160 -0
  299. package/dist/evidence/claim-recovery/validation/materials.js.map +1 -0
  300. package/dist/evidence/claim-recovery/validation/native-material.d.ts +27 -0
  301. package/dist/evidence/claim-recovery/validation/native-material.js +35 -0
  302. package/dist/evidence/claim-recovery/validation/native-material.js.map +1 -0
  303. package/dist/evidence/claim-recovery/validation/native-occurrences.d.ts +79 -0
  304. package/dist/evidence/claim-recovery/validation/native-occurrences.js +187 -0
  305. package/dist/evidence/claim-recovery/validation/native-occurrences.js.map +1 -0
  306. package/dist/evidence/claim-recovery/validation/native-state.d.ts +45 -0
  307. package/dist/evidence/claim-recovery/validation/native-state.js +385 -0
  308. package/dist/evidence/claim-recovery/validation/native-state.js.map +1 -0
  309. package/dist/evidence/claim-recovery/validation/obligations.d.ts +15 -0
  310. package/dist/evidence/claim-recovery/validation/obligations.js +65 -0
  311. package/dist/evidence/claim-recovery/validation/obligations.js.map +1 -0
  312. package/dist/evidence/claim-recovery/validation/occurrence-source.d.ts +45 -0
  313. package/dist/evidence/claim-recovery/validation/occurrence-source.js +208 -0
  314. package/dist/evidence/claim-recovery/validation/occurrence-source.js.map +1 -0
  315. package/dist/evidence/claim-recovery/validation/occurrence-types.d.ts +101 -0
  316. package/dist/evidence/claim-recovery/validation/occurrence-types.js +2 -0
  317. package/dist/evidence/claim-recovery/validation/occurrence-types.js.map +1 -0
  318. package/dist/evidence/claim-recovery/validation/occurrence.d.ts +30 -0
  319. package/dist/evidence/claim-recovery/validation/occurrence.js +227 -0
  320. package/dist/evidence/claim-recovery/validation/occurrence.js.map +1 -0
  321. package/dist/evidence/claim-recovery/validation/primitives.d.ts +11 -0
  322. package/dist/evidence/claim-recovery/validation/primitives.js +41 -0
  323. package/dist/evidence/claim-recovery/validation/primitives.js.map +1 -0
  324. package/dist/evidence/claim-recovery/validation/receipts.d.ts +37 -0
  325. package/dist/evidence/claim-recovery/validation/receipts.js +83 -0
  326. package/dist/evidence/claim-recovery/validation/receipts.js.map +1 -0
  327. package/dist/evidence/claim-recovery/validation/recovery-json.d.ts +8 -0
  328. package/dist/evidence/claim-recovery/validation/recovery-json.js +42 -0
  329. package/dist/evidence/claim-recovery/validation/recovery-json.js.map +1 -0
  330. package/dist/evidence/claim-recovery/validation/semantic-cache.d.ts +3 -0
  331. package/dist/evidence/claim-recovery/validation/semantic-cache.js +22 -0
  332. package/dist/evidence/claim-recovery/validation/semantic-cache.js.map +1 -0
  333. package/dist/evidence/claim-recovery/validation/semantic-validation.d.ts +9 -0
  334. package/dist/evidence/claim-recovery/validation/semantic-validation.js +347 -0
  335. package/dist/evidence/claim-recovery/validation/semantic-validation.js.map +1 -0
  336. package/dist/evidence/claim-recovery/validation/sighting.d.ts +2 -0
  337. package/dist/evidence/claim-recovery/validation/sighting.js +15 -0
  338. package/dist/evidence/claim-recovery/validation/sighting.js.map +1 -0
  339. package/dist/evidence/claim-recovery/validation/sources.d.ts +15 -0
  340. package/dist/evidence/claim-recovery/validation/sources.js +2 -0
  341. package/dist/evidence/claim-recovery/validation/sources.js.map +1 -0
  342. package/dist/evidence/claim-recovery/validation/types.d.ts +126 -0
  343. package/dist/evidence/claim-recovery/validation/types.js +2 -0
  344. package/dist/evidence/claim-recovery/validation/types.js.map +1 -0
  345. package/dist/evidence/claim-split.d.ts +1 -0
  346. package/dist/evidence/claim-split.js +2 -0
  347. package/dist/evidence/claim-split.js.map +1 -0
  348. package/dist/evidence/event-receipts.d.ts +16 -0
  349. package/dist/evidence/event-receipts.js +41 -0
  350. package/dist/evidence/event-receipts.js.map +1 -0
  351. package/dist/evidence/finding-recovery.d.ts +23 -0
  352. package/dist/evidence/finding-recovery.js +74 -0
  353. package/dist/evidence/finding-recovery.js.map +1 -0
  354. package/dist/evidence/finding-retriage.d.ts +14 -0
  355. package/dist/evidence/finding-retriage.js +57 -0
  356. package/dist/evidence/finding-retriage.js.map +1 -0
  357. package/dist/evidence/format.d.ts +18 -0
  358. package/dist/evidence/format.js +152 -0
  359. package/dist/evidence/format.js.map +1 -0
  360. package/dist/evidence/original-run/decode.d.ts +30 -0
  361. package/dist/evidence/original-run/decode.js +208 -0
  362. package/dist/evidence/original-run/decode.js.map +1 -0
  363. package/dist/evidence/original-run/journal.d.ts +31 -0
  364. package/dist/evidence/original-run/journal.js +157 -0
  365. package/dist/evidence/original-run/journal.js.map +1 -0
  366. package/dist/evidence/original-run/lock-path.d.ts +17 -0
  367. package/dist/evidence/original-run/lock-path.js +116 -0
  368. package/dist/evidence/original-run/lock-path.js.map +1 -0
  369. package/dist/evidence/original-run/lock-scope.d.ts +21 -0
  370. package/dist/evidence/original-run/lock-scope.js +61 -0
  371. package/dist/evidence/original-run/lock-scope.js.map +1 -0
  372. package/dist/evidence/original-run/lock.d.ts +33 -0
  373. package/dist/evidence/original-run/lock.js +259 -0
  374. package/dist/evidence/original-run/lock.js.map +1 -0
  375. package/dist/evidence/original-run/remote.d.ts +23 -0
  376. package/dist/evidence/original-run/remote.js +110 -0
  377. package/dist/evidence/original-run/remote.js.map +1 -0
  378. package/dist/evidence/original-run/source.d.ts +61 -0
  379. package/dist/evidence/original-run/source.js +267 -0
  380. package/dist/evidence/original-run/source.js.map +1 -0
  381. package/dist/evidence/reads.d.ts +11 -0
  382. package/dist/evidence/reads.js +16 -0
  383. package/dist/evidence/reads.js.map +1 -0
  384. package/dist/evidence/recover-finding.d.ts +17 -0
  385. package/dist/evidence/recover-finding.js +65 -0
  386. package/dist/evidence/recover-finding.js.map +1 -0
  387. package/dist/evidence/recover-run.d.ts +26 -0
  388. package/dist/evidence/recover-run.js +180 -0
  389. package/dist/evidence/recover-run.js.map +1 -0
  390. package/dist/evidence/retained-time-budget.d.ts +9 -0
  391. package/dist/evidence/retained-time-budget.js +14 -0
  392. package/dist/evidence/retained-time-budget.js.map +1 -0
  393. package/dist/evidence/retriage-finding.d.ts +12 -0
  394. package/dist/evidence/retriage-finding.js +67 -0
  395. package/dist/evidence/retriage-finding.js.map +1 -0
  396. package/dist/evidence/reviewer-lineage.d.ts +35 -0
  397. package/dist/evidence/reviewer-lineage.js +293 -0
  398. package/dist/evidence/reviewer-lineage.js.map +1 -0
  399. package/dist/evidence/reviewer-original.d.ts +67 -0
  400. package/dist/evidence/reviewer-original.js +148 -0
  401. package/dist/evidence/reviewer-original.js.map +1 -0
  402. package/dist/evidence/reviewer-recovery.d.ts +74 -0
  403. package/dist/evidence/reviewer-recovery.js +179 -0
  404. package/dist/evidence/reviewer-recovery.js.map +1 -0
  405. package/dist/evidence/reviewer-status.d.ts +145 -0
  406. package/dist/evidence/reviewer-status.js +302 -0
  407. package/dist/evidence/reviewer-status.js.map +1 -0
  408. package/dist/evidence/show.d.ts +10 -0
  409. package/dist/evidence/show.js +41 -0
  410. package/dist/evidence/show.js.map +1 -0
  411. package/dist/evidence/status.d.ts +38 -0
  412. package/dist/evidence/status.js +73 -0
  413. package/dist/evidence/status.js.map +1 -0
  414. package/dist/evidence/target.d.ts +17 -0
  415. package/dist/evidence/target.js +74 -0
  416. package/dist/evidence/target.js.map +1 -0
  417. package/dist/evidence/types.d.ts +176 -0
  418. package/dist/evidence/types.js +109 -0
  419. package/dist/evidence/types.js.map +1 -0
  420. package/dist/index.d.ts +2 -0
  421. package/dist/index.js +2688 -0
  422. package/dist/index.js.map +1 -0
  423. package/dist/models/seed.d.ts +44 -0
  424. package/dist/models/seed.js +175 -0
  425. package/dist/models/seed.js.map +1 -0
  426. package/dist/models/server-stats.d.ts +80 -0
  427. package/dist/models/server-stats.js +109 -0
  428. package/dist/models/server-stats.js.map +1 -0
  429. package/dist/models/stats-store.d.ts +84 -0
  430. package/dist/models/stats-store.js +572 -0
  431. package/dist/models/stats-store.js.map +1 -0
  432. package/dist/output/artifacts.d.ts +16 -0
  433. package/dist/output/artifacts.js +29 -0
  434. package/dist/output/artifacts.js.map +1 -0
  435. package/dist/output/assembly-refusal.d.ts +8 -0
  436. package/dist/output/assembly-refusal.js +14 -0
  437. package/dist/output/assembly-refusal.js.map +1 -0
  438. package/dist/output/github.d.ts +12 -0
  439. package/dist/output/github.js +214 -0
  440. package/dist/output/github.js.map +1 -0
  441. package/dist/output/json.d.ts +3 -0
  442. package/dist/output/json.js +8 -0
  443. package/dist/output/json.js.map +1 -0
  444. package/dist/output/markdown.d.ts +3 -0
  445. package/dist/output/markdown.js +281 -0
  446. package/dist/output/markdown.js.map +1 -0
  447. package/dist/output/progress.d.ts +55 -0
  448. package/dist/output/progress.js +180 -0
  449. package/dist/output/progress.js.map +1 -0
  450. package/dist/output/sanitize.d.ts +18 -0
  451. package/dist/output/sanitize.js +46 -0
  452. package/dist/output/sanitize.js.map +1 -0
  453. package/dist/output/terminal.d.ts +2 -0
  454. package/dist/output/terminal.js +172 -0
  455. package/dist/output/terminal.js.map +1 -0
  456. package/dist/prepare/chunker.d.ts +18 -0
  457. package/dist/prepare/chunker.js +325 -0
  458. package/dist/prepare/chunker.js.map +1 -0
  459. package/dist/prepare/language.d.ts +1 -0
  460. package/dist/prepare/language.js +99 -0
  461. package/dist/prepare/language.js.map +1 -0
  462. package/dist/prepare/prompt-builder.d.ts +44 -0
  463. package/dist/prepare/prompt-builder.js +102 -0
  464. package/dist/prepare/prompt-builder.js.map +1 -0
  465. package/dist/prepare/unified-diff.d.ts +40 -0
  466. package/dist/prepare/unified-diff.js +135 -0
  467. package/dist/prepare/unified-diff.js.map +1 -0
  468. package/dist/prompts/base.d.ts +3 -0
  469. package/dist/prompts/base.js +53 -0
  470. package/dist/prompts/base.js.map +1 -0
  471. package/dist/prompts/hardening.d.ts +19 -0
  472. package/dist/prompts/hardening.js +67 -0
  473. package/dist/prompts/hardening.js.map +1 -0
  474. package/dist/prompts/languages/elixir.d.ts +1 -0
  475. package/dist/prompts/languages/elixir.js +13 -0
  476. package/dist/prompts/languages/elixir.js.map +1 -0
  477. package/dist/prompts/languages/generic.d.ts +1 -0
  478. package/dist/prompts/languages/generic.js +11 -0
  479. package/dist/prompts/languages/generic.js.map +1 -0
  480. package/dist/prompts/languages/python.d.ts +1 -0
  481. package/dist/prompts/languages/python.js +14 -0
  482. package/dist/prompts/languages/python.js.map +1 -0
  483. package/dist/prompts/languages/typescript.d.ts +1 -0
  484. package/dist/prompts/languages/typescript.js +13 -0
  485. package/dist/prompts/languages/typescript.js.map +1 -0
  486. package/dist/prompts/plan.d.ts +15 -0
  487. package/dist/prompts/plan.js +55 -0
  488. package/dist/prompts/plan.js.map +1 -0
  489. package/dist/report/aggregation-inputs.d.ts +52 -0
  490. package/dist/report/aggregation-inputs.js +114 -0
  491. package/dist/report/aggregation-inputs.js.map +1 -0
  492. package/dist/report/assembly.d.ts +43 -0
  493. package/dist/report/assembly.js +133 -0
  494. package/dist/report/assembly.js.map +1 -0
  495. package/dist/report/blocking-health.d.ts +64 -0
  496. package/dist/report/blocking-health.js +156 -0
  497. package/dist/report/blocking-health.js.map +1 -0
  498. package/dist/report/checkpoint-assembly.d.ts +10 -0
  499. package/dist/report/checkpoint-assembly.js +17 -0
  500. package/dist/report/checkpoint-assembly.js.map +1 -0
  501. package/dist/report/checkpoint-consensus.d.ts +59 -0
  502. package/dist/report/checkpoint-consensus.js +197 -0
  503. package/dist/report/checkpoint-consensus.js.map +1 -0
  504. package/dist/report/checkpoint-gating.d.ts +36 -0
  505. package/dist/report/checkpoint-gating.js +110 -0
  506. package/dist/report/checkpoint-gating.js.map +1 -0
  507. package/dist/report/checkpoint-projection.d.ts +76 -0
  508. package/dist/report/checkpoint-projection.js +122 -0
  509. package/dist/report/checkpoint-projection.js.map +1 -0
  510. package/dist/report/consensus-assembly.d.ts +37 -0
  511. package/dist/report/consensus-assembly.js +33 -0
  512. package/dist/report/consensus-assembly.js.map +1 -0
  513. package/dist/report/recovery-source.d.ts +7 -0
  514. package/dist/report/recovery-source.js +7 -0
  515. package/dist/report/recovery-source.js.map +1 -0
  516. package/dist/report/reviewer-artifact.d.ts +118 -0
  517. package/dist/report/reviewer-artifact.js +381 -0
  518. package/dist/report/reviewer-artifact.js.map +1 -0
  519. package/dist/report/reviewer-evidence-schema.d.ts +42 -0
  520. package/dist/report/reviewer-evidence-schema.js +28 -0
  521. package/dist/report/reviewer-evidence-schema.js.map +1 -0
  522. package/dist/report/reviewer-evidence.d.ts +54 -0
  523. package/dist/report/reviewer-evidence.js +229 -0
  524. package/dist/report/reviewer-evidence.js.map +1 -0
  525. package/dist/report/reviewer-health.d.ts +62 -0
  526. package/dist/report/reviewer-health.js +105 -0
  527. package/dist/report/reviewer-health.js.map +1 -0
  528. package/dist/report/run-header.d.ts +219 -0
  529. package/dist/report/run-header.js +307 -0
  530. package/dist/report/run-header.js.map +1 -0
  531. package/dist/report/supplemental-async.d.ts +19 -0
  532. package/dist/report/supplemental-async.js +85 -0
  533. package/dist/report/supplemental-async.js.map +1 -0
  534. package/dist/report/uuid.d.ts +16 -0
  535. package/dist/report/uuid.js +41 -0
  536. package/dist/report/uuid.js.map +1 -0
  537. package/dist/resolver/git.d.ts +16 -0
  538. package/dist/resolver/git.js +77 -0
  539. package/dist/resolver/git.js.map +1 -0
  540. package/dist/resolver/github-client.d.ts +82 -0
  541. package/dist/resolver/github-client.js +27 -0
  542. package/dist/resolver/github-client.js.map +1 -0
  543. package/dist/resolver/github.d.ts +29 -0
  544. package/dist/resolver/github.js +166 -0
  545. package/dist/resolver/github.js.map +1 -0
  546. package/dist/resolver/local.d.ts +3 -0
  547. package/dist/resolver/local.js +75 -0
  548. package/dist/resolver/local.js.map +1 -0
  549. package/dist/resolver/plan.d.ts +8 -0
  550. package/dist/resolver/plan.js +44 -0
  551. package/dist/resolver/plan.js.map +1 -0
  552. package/dist/resolver/target.d.ts +35 -0
  553. package/dist/resolver/target.js +112 -0
  554. package/dist/resolver/target.js.map +1 -0
  555. package/dist/resolver/types.d.ts +43 -0
  556. package/dist/resolver/types.js +2 -0
  557. package/dist/resolver/types.js.map +1 -0
  558. package/dist/roles/builtin.d.ts +4 -0
  559. package/dist/roles/builtin.js +282 -0
  560. package/dist/roles/builtin.js.map +1 -0
  561. package/dist/roles/dispatcher.d.ts +26 -0
  562. package/dist/roles/dispatcher.js +96 -0
  563. package/dist/roles/dispatcher.js.map +1 -0
  564. package/dist/roles/legacy-4.1.10.d.ts +2 -0
  565. package/dist/roles/legacy-4.1.10.js +320 -0
  566. package/dist/roles/legacy-4.1.10.js.map +1 -0
  567. package/dist/roles/legacy-4.4.9.d.ts +4 -0
  568. package/dist/roles/legacy-4.4.9.js +282 -0
  569. package/dist/roles/legacy-4.4.9.js.map +1 -0
  570. package/dist/roles/loader.d.ts +10 -0
  571. package/dist/roles/loader.js +104 -0
  572. package/dist/roles/loader.js.map +1 -0
  573. package/dist/roles/types.d.ts +13 -0
  574. package/dist/roles/types.js +2 -0
  575. package/dist/roles/types.js.map +1 -0
  576. package/dist/telemetry/abort-signal.d.ts +13 -0
  577. package/dist/telemetry/abort-signal.js +40 -0
  578. package/dist/telemetry/abort-signal.js.map +1 -0
  579. package/dist/telemetry/attest.d.ts +98 -0
  580. package/dist/telemetry/attest.js +331 -0
  581. package/dist/telemetry/attest.js.map +1 -0
  582. package/dist/telemetry/attested-retry.d.ts +79 -0
  583. package/dist/telemetry/attested-retry.js +195 -0
  584. package/dist/telemetry/attested-retry.js.map +1 -0
  585. package/dist/telemetry/attested-reviewer-delivery.d.ts +58 -0
  586. package/dist/telemetry/attested-reviewer-delivery.js +238 -0
  587. package/dist/telemetry/attested-reviewer-delivery.js.map +1 -0
  588. package/dist/telemetry/backfill.d.ts +95 -0
  589. package/dist/telemetry/backfill.js +460 -0
  590. package/dist/telemetry/backfill.js.map +1 -0
  591. package/dist/telemetry/credentials.d.ts +44 -0
  592. package/dist/telemetry/credentials.js +87 -0
  593. package/dist/telemetry/credentials.js.map +1 -0
  594. package/dist/telemetry/deliver.d.ts +152 -0
  595. package/dist/telemetry/deliver.js +662 -0
  596. package/dist/telemetry/deliver.js.map +1 -0
  597. package/dist/telemetry/envelope-validation.d.ts +13 -0
  598. package/dist/telemetry/envelope-validation.js +196 -0
  599. package/dist/telemetry/envelope-validation.js.map +1 -0
  600. package/dist/telemetry/envelope.d.ts +159 -0
  601. package/dist/telemetry/envelope.js +288 -0
  602. package/dist/telemetry/envelope.js.map +1 -0
  603. package/dist/telemetry/events.d.ts +68 -0
  604. package/dist/telemetry/events.js +79 -0
  605. package/dist/telemetry/events.js.map +1 -0
  606. package/dist/telemetry/notice.d.ts +15 -0
  607. package/dist/telemetry/notice.js +67 -0
  608. package/dist/telemetry/notice.js.map +1 -0
  609. package/dist/telemetry/outbox.d.ts +166 -0
  610. package/dist/telemetry/outbox.js +741 -0
  611. package/dist/telemetry/outbox.js.map +1 -0
  612. package/dist/telemetry/quarantine.d.ts +105 -0
  613. package/dist/telemetry/quarantine.js +224 -0
  614. package/dist/telemetry/quarantine.js.map +1 -0
  615. package/dist/telemetry/read-sink.d.ts +31 -0
  616. package/dist/telemetry/read-sink.js +25 -0
  617. package/dist/telemetry/read-sink.js.map +1 -0
  618. package/dist/telemetry/recovery/command.d.ts +16 -0
  619. package/dist/telemetry/recovery/command.js +70 -0
  620. package/dist/telemetry/recovery/command.js.map +1 -0
  621. package/dist/telemetry/recovery/discovery.d.ts +8 -0
  622. package/dist/telemetry/recovery/discovery.js +277 -0
  623. package/dist/telemetry/recovery/discovery.js.map +1 -0
  624. package/dist/telemetry/recovery/files.d.ts +20 -0
  625. package/dist/telemetry/recovery/files.js +123 -0
  626. package/dist/telemetry/recovery/files.js.map +1 -0
  627. package/dist/telemetry/recovery/plan.d.ts +10 -0
  628. package/dist/telemetry/recovery/plan.js +325 -0
  629. package/dist/telemetry/recovery/plan.js.map +1 -0
  630. package/dist/telemetry/recovery/source.d.ts +328 -0
  631. package/dist/telemetry/recovery/source.js +253 -0
  632. package/dist/telemetry/recovery/source.js.map +1 -0
  633. package/dist/telemetry/recovery/types.d.ts +100 -0
  634. package/dist/telemetry/recovery/types.js +2 -0
  635. package/dist/telemetry/recovery/types.js.map +1 -0
  636. package/dist/telemetry/recovery-request-budget.d.ts +39 -0
  637. package/dist/telemetry/recovery-request-budget.js +102 -0
  638. package/dist/telemetry/recovery-request-budget.js.map +1 -0
  639. package/dist/telemetry/report-consistency.d.ts +11 -0
  640. package/dist/telemetry/report-consistency.js +111 -0
  641. package/dist/telemetry/report-consistency.js.map +1 -0
  642. package/dist/telemetry/reviewer-delivery.d.ts +39 -0
  643. package/dist/telemetry/reviewer-delivery.js +279 -0
  644. package/dist/telemetry/reviewer-delivery.js.map +1 -0
  645. package/dist/telemetry/reviewer-preflight.d.ts +13 -0
  646. package/dist/telemetry/reviewer-preflight.js +56 -0
  647. package/dist/telemetry/reviewer-preflight.js.map +1 -0
  648. package/dist/telemetry/scrub.d.ts +53 -0
  649. package/dist/telemetry/scrub.js +205 -0
  650. package/dist/telemetry/scrub.js.map +1 -0
  651. package/dist/telemetry/sink.d.ts +212 -0
  652. package/dist/telemetry/sink.js +813 -0
  653. package/dist/telemetry/sink.js.map +1 -0
  654. package/dist/telemetry/terminal-reviewer-delivery.d.ts +18 -0
  655. package/dist/telemetry/terminal-reviewer-delivery.js +27 -0
  656. package/dist/telemetry/terminal-reviewer-delivery.js.map +1 -0
  657. package/dist/telemetry/transient-input.d.ts +2 -0
  658. package/dist/telemetry/transient-input.js +37 -0
  659. package/dist/telemetry/transient-input.js.map +1 -0
  660. package/dist/telemetry/verification.d.ts +9 -0
  661. package/dist/telemetry/verification.js +12 -0
  662. package/dist/telemetry/verification.js.map +1 -0
  663. package/package.json +73 -0
@@ -0,0 +1,112 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { detectProvider } from './roles/dispatcher.js';
3
+ import { defaultAdapterFactory } from './dispatch/runner.js';
4
+ /**
5
+ * Resolve `--finding <id>` against kept findings first, then the
6
+ * below-threshold appendix (appendix findings are prime discussion
7
+ * targets — one model saw something nobody confirmed). Model-generated ids
8
+ * can collide across reviewers, so `<id>:<n>` picks the nth match (1-based).
9
+ */
10
+ export function resolveFinding(result, findingRef) {
11
+ const all = [...result.findings, ...(result.belowThresholdFindings ?? [])];
12
+ const nthMatch = findingRef.match(/^(.+):(\d+)$/);
13
+ const id = nthMatch ? nthMatch[1] : findingRef;
14
+ const matches = all.filter((f) => f.id === id);
15
+ if (matches.length === 0) {
16
+ const available = all
17
+ .slice(0, 30)
18
+ .map((f) => ` ${f.id} ${f.file}:${f.startLine} ${f.title.slice(0, 70)}`)
19
+ .join('\n');
20
+ throw new Error(`No finding with id "${id}" in the report. Available (first 30):\n${available}`);
21
+ }
22
+ if (matches.length === 1)
23
+ return matches[0];
24
+ if (nthMatch) {
25
+ const n = parseInt(nthMatch[2], 10);
26
+ const picked = matches[n - 1];
27
+ if (!picked) {
28
+ throw new Error(`Finding id "${id}" has ${matches.length} matches; :${n} is out of range.`);
29
+ }
30
+ return picked;
31
+ }
32
+ const candidates = matches
33
+ .map((f, i) => ` ${id}:${i + 1} ${f.file}:${f.startLine} ${f.title.slice(0, 70)}`)
34
+ .join('\n');
35
+ throw new Error(`Finding id "${id}" is ambiguous (${matches.length} matches). Pick one with:\n${candidates}`);
36
+ }
37
+ export function buildDiscussPrompts(input) {
38
+ const { finding, question, contextDocs } = input;
39
+ const c = finding.consensus;
40
+ const systemPrompt = `You are a reviewer on a multi-model code review council, discussing one of the council's findings with the engineer who must decide whether to act on it. Answer the question directly and concretely, grounded in the finding's context. If the question or context shows the finding is wrong, overstated, or unexploitable, say so plainly — changing your mind under new information is good reviewing, not weakness. If you lack the code context to be sure, say exactly what you would need to see. Keep the answer under 300 words.`;
41
+ const lines = [
42
+ '## Finding under discussion',
43
+ '',
44
+ `- File: ${finding.file} (lines ${finding.startLine}–${finding.endLine})`,
45
+ `- Severity: ${finding.severity} · Category: ${finding.category}`,
46
+ `- Council agreement: ${c.disputed ? 'DISPUTED' : c.tier} — flagged by ${c.models.join(', ')} (roles: ${c.roles.join(', ')}) · confidence ${c.confidenceLabel}`,
47
+ `- Title: ${finding.title}`,
48
+ '',
49
+ finding.description,
50
+ ];
51
+ if (finding.suggestedFix) {
52
+ lines.push('', '### Suggested fix on record', finding.suggestedFix);
53
+ }
54
+ if (c.disputed && c.disputeDetails) {
55
+ lines.push('', `### Dispute`, c.disputeDetails);
56
+ }
57
+ if (c.positions?.length) {
58
+ lines.push('', '### Positions taken by council members');
59
+ for (const p of c.positions) {
60
+ lines.push(`- ${p.model} (${p.role}) rated ${p.severity}: ${p.title} — ${p.excerpt}`);
61
+ }
62
+ }
63
+ if (contextDocs?.length) {
64
+ for (const doc of contextDocs) {
65
+ lines.push('', `### Context: ${doc.label}`, '```', doc.content, '```');
66
+ }
67
+ }
68
+ lines.push('', '## Question', question);
69
+ return { systemPrompt, userPrompt: lines.join('\n') };
70
+ }
71
+ /** Ask every target model the same question in parallel. */
72
+ export async function runDiscussion(models, prompts, options) {
73
+ const factory = options.adapterFactory ??
74
+ ((provider) => defaultAdapterFactory(provider, options.reasoningEffort));
75
+ return Promise.all(models.map(async (model) => {
76
+ try {
77
+ const adapter = factory(detectProvider(model));
78
+ return await adapter.ask(model, prompts.systemPrompt, prompts.userPrompt, options);
79
+ }
80
+ catch (err) {
81
+ // A missing API key for one provider must not sink the other answers.
82
+ return {
83
+ model,
84
+ provider: detectProvider(model),
85
+ text: '',
86
+ durationMs: 0,
87
+ status: 'error',
88
+ error: err instanceof Error ? err.message : String(err),
89
+ };
90
+ }
91
+ }));
92
+ }
93
+ const MAX_CONTEXT_BYTES = 200_000;
94
+ export async function loadContextDocs(paths) {
95
+ const docs = [];
96
+ for (const path of paths) {
97
+ try {
98
+ const content = await readFile(path, 'utf-8');
99
+ docs.push({
100
+ label: path,
101
+ content: Buffer.byteLength(content, 'utf-8') > MAX_CONTEXT_BYTES
102
+ ? `${content.slice(0, MAX_CONTEXT_BYTES)}\n[truncated]`
103
+ : content,
104
+ });
105
+ }
106
+ catch {
107
+ console.warn(`Warning: could not read context file: ${path}`);
108
+ }
109
+ }
110
+ return docs;
111
+ }
112
+ //# sourceMappingURL=discuss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discuss.js","sourceRoot":"","sources":["../src/discuss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { VerificationReasoningEffort } from '../config/schema.js';
2
+ import type { ModelReview } from '../consensus/types.js';
3
+ export interface AdapterOptions {
4
+ /** Explicit OpenAI ask effort; omitted calls retain their provider default. */
5
+ reasoningEffort?: VerificationReasoningEffort;
6
+ timeoutMs: number;
7
+ maxRetries: number;
8
+ /**
9
+ * External cancellation (quorum round closure). Adapters must abort the
10
+ * in-flight request when it fires so canceled calls stop consuming
11
+ * provider time and the process can exit.
12
+ */
13
+ signal?: AbortSignal;
14
+ }
15
+ /** A free-text answer from one model (discuss path — no findings schema). */
16
+ export interface ModelAnswer {
17
+ /** Observed SDK invocations, including ambiguous failures; not wire requests or billing. */
18
+ adapterAttempts?: number;
19
+ model: string;
20
+ provider: string;
21
+ text: string;
22
+ durationMs: number;
23
+ status: 'success' | 'timeout' | 'error';
24
+ error?: string;
25
+ }
26
+ export interface ReviewAdapter {
27
+ name: string;
28
+ provider: string;
29
+ review(model: string, role: string, systemPrompt: string, userPrompt: string, options: AdapterOptions): Promise<ModelReview>;
30
+ /** One-shot free-text question — used by `rcl discuss`. */
31
+ ask(model: string, systemPrompt: string, userPrompt: string, options: AdapterOptions): Promise<ModelAnswer>;
32
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/dispatch/adapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { ModelReview } from '../consensus/types.js';
2
+ import type { ReviewAdapter, AdapterOptions, ModelAnswer } from './adapter.js';
3
+ export declare class AnthropicAdapter implements ReviewAdapter {
4
+ name: string;
5
+ provider: string;
6
+ private client;
7
+ constructor(apiKey?: string);
8
+ review(model: string, role: string, systemPrompt: string, userPrompt: string, options: AdapterOptions): Promise<ModelReview>;
9
+ ask(model: string, systemPrompt: string, userPrompt: string, options: AdapterOptions): Promise<ModelAnswer>;
10
+ }
@@ -0,0 +1,235 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import { parseReviewOutput } from '../consensus/parser.js';
3
+ import { stripKnownProviderPrefix, isRetryableStatus, attemptWithRetries, isRetryableConnectionError, failedReview, isBlankOutput, reviewFromParse, usageFromAnthropic, ASK_MAX_OUTPUT_TOKENS, TruncatedAnswerError, } from './utils.js';
4
+ function isRetryable(err) {
5
+ if (err instanceof Anthropic.APIConnectionError)
6
+ return isRetryableConnectionError(err, true);
7
+ return err instanceof Anthropic.APIError && isRetryableStatus(err.status);
8
+ }
9
+ function isRetryableReview(err, stream) {
10
+ if (err instanceof Anthropic.APIConnectionError || err instanceof Anthropic.APIUserAbortError)
11
+ return isRetryable(err);
12
+ if (isRetryable(err))
13
+ return true;
14
+ if (!stream)
15
+ return false;
16
+ // The SDK can reject finalMessage() without an HTTP status when a stream
17
+ // disconnects, receives a transient SSE error, or ends before message_stop.
18
+ // An abort, invalid request, or malformed response stays terminal.
19
+ if (err instanceof Anthropic.APIError && err.status === undefined &&
20
+ (err.type === 'overloaded_error' || err.type === 'api_error' ||
21
+ err.type === 'rate_limit_error' || err.type === 'timeout_error'))
22
+ return true;
23
+ return err instanceof Anthropic.AnthropicError &&
24
+ (err.message === 'stream ended without producing a Message with role=assistant' ||
25
+ err.message === 'request ended without sending any chunks');
26
+ }
27
+ const DEFAULT_PROFILE = { maxTokens: 16384, stream: false };
28
+ // Always-on thinking counts against max_tokens, so high effort needs headroom
29
+ // for thinking plus findings. Keep streaming and the existing whole-call
30
+ // deadline from RCL-103. Opus 5.5 defaults to medium effort; a review is
31
+ // intelligence-sensitive work, so request high explicitly.
32
+ const THINKING_REVIEW_PROFILE = { maxTokens: 65536, effort: 'high', stream: true };
33
+ // Claude 4.6+ uses dateless pinned API IDs; these profiles apply to the
34
+ // documented IDs only, without guessing future model capabilities.
35
+ // https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions
36
+ const MODEL_PROFILES = {
37
+ 'claude-opus-5-5': THINKING_REVIEW_PROFILE,
38
+ 'claude-fable-5-1': THINKING_REVIEW_PROFILE,
39
+ };
40
+ function profileFor(modelId) {
41
+ return MODEL_PROFILES[modelId] ?? DEFAULT_PROFILE;
42
+ }
43
+ export class AnthropicAdapter {
44
+ name = 'anthropic';
45
+ provider = 'anthropic';
46
+ client;
47
+ constructor(apiKey) {
48
+ this.client = new Anthropic({
49
+ apiKey: apiKey ?? process.env['ANTHROPIC_API_KEY'],
50
+ // The adapter's retry loop owns all retries; SDK-internal retries
51
+ // would multiply wire attempts inside one timeout budget.
52
+ maxRetries: 0,
53
+ });
54
+ }
55
+ async review(model, role, systemPrompt, userPrompt, options) {
56
+ const start = Date.now();
57
+ let adapterAttempts = 0;
58
+ const modelId = stripKnownProviderPrefix(model);
59
+ // Opus 5.5 and Fable 5.1 count adaptive thinking against max_tokens. Large
60
+ // review chunks exhausted the old ceiling before any findings arrived.
61
+ const profile = profileFor(modelId);
62
+ const outcome = await attemptWithRetries({
63
+ timeoutMs: options.timeoutMs,
64
+ maxRetries: options.maxRetries ?? 3,
65
+ signal: options.signal,
66
+ isRetryable: (err) => isRetryableReview(err, profile.stream),
67
+ attempt: async (signal) => {
68
+ // Use tool use for reliable JSON extraction
69
+ const request = {
70
+ model: modelId,
71
+ max_tokens: profile.maxTokens,
72
+ ...(profile.effort ? { output_config: { effort: profile.effort } } : {}),
73
+ system: systemPrompt,
74
+ messages: [{ role: 'user', content: userPrompt }],
75
+ tools: [
76
+ {
77
+ name: 'report_findings',
78
+ description: 'Report code review findings as structured JSON',
79
+ input_schema: {
80
+ type: 'object',
81
+ properties: {
82
+ findings: {
83
+ type: 'array',
84
+ items: {
85
+ type: 'object',
86
+ properties: {
87
+ id: { type: 'string' },
88
+ file: { type: 'string' },
89
+ startLine: { type: 'number' },
90
+ endLine: { type: 'number' },
91
+ severity: {
92
+ type: 'string',
93
+ enum: ['critical', 'important', 'minor', 'nitpick'],
94
+ },
95
+ category: {
96
+ type: 'string',
97
+ enum: ['security', 'correctness', 'best-practices', 'tests', 'api-design'],
98
+ },
99
+ title: { type: 'string' },
100
+ description: { type: 'string' },
101
+ suggestedFix: { type: 'string' },
102
+ },
103
+ required: ['id', 'file', 'startLine', 'endLine', 'severity', 'category', 'title', 'description'],
104
+ },
105
+ },
106
+ },
107
+ required: ['findings'],
108
+ },
109
+ },
110
+ ],
111
+ tool_choice: { type: 'auto' },
112
+ };
113
+ // The larger thinking-model output budget requires the SDK's streaming path.
114
+ // finalMessage() keeps the same complete-response parsing and
115
+ // truncation checks used by the nonstreaming path.
116
+ const requestOptions = {
117
+ signal: signal,
118
+ timeout: options.timeoutMs + 30_000,
119
+ };
120
+ adapterAttempts++;
121
+ const response = profile.stream
122
+ ? await this.client.messages.stream(request, requestOptions).finalMessage()
123
+ : await this.client.messages.create(request, requestOptions);
124
+ const usage = usageFromAnthropic(response.usage);
125
+ if (response.stop_reason === 'max_tokens') {
126
+ return failedReview({
127
+ model,
128
+ role,
129
+ provider: 'anthropic',
130
+ startedAt: start,
131
+ usage,
132
+ error: 'Response truncated at max_tokens; findings would be incomplete',
133
+ });
134
+ }
135
+ // Safety classifiers decline in-band: HTTP 200, no content. Left
136
+ // unhandled this reads as a clean review of code nobody looked at.
137
+ if (response.stop_reason === 'refusal') {
138
+ const details = response.stop_details;
139
+ const category = details !== null && details !== undefined && 'category' in details
140
+ ? details.category
141
+ : null;
142
+ return failedReview({
143
+ model,
144
+ role,
145
+ provider: 'anthropic',
146
+ startedAt: start,
147
+ usage,
148
+ error: `Model refused this review${category ? ` (${category})` : ''} — the diff was not reviewed`,
149
+ });
150
+ }
151
+ // Extract from tool use
152
+ let rawOutput = '';
153
+ for (const block of response.content) {
154
+ if (block.type === 'tool_use' && block.name === 'report_findings') {
155
+ rawOutput = JSON.stringify(block.input);
156
+ break;
157
+ }
158
+ if (block.type === 'text') {
159
+ rawOutput += block.text;
160
+ }
161
+ }
162
+ if (isBlankOutput(rawOutput)) {
163
+ return failedReview({
164
+ model,
165
+ role,
166
+ provider: 'anthropic',
167
+ startedAt: start,
168
+ usage,
169
+ error: 'Model returned an empty response; the diff was not reviewed',
170
+ });
171
+ }
172
+ // If tool wasn't used, parse text output
173
+ const parsed = parseReviewOutput(rawOutput, model, role);
174
+ for (const w of parsed.warnings)
175
+ console.warn(w);
176
+ return reviewFromParse({
177
+ model,
178
+ role,
179
+ provider: 'anthropic',
180
+ startedAt: start,
181
+ parsed,
182
+ usage,
183
+ });
184
+ },
185
+ });
186
+ return outcome.ok
187
+ ? { ...outcome.value, adapterAttempts }
188
+ : { ...failedReview({ model, role, provider: 'anthropic', startedAt: start,
189
+ status: outcome.timedOut ? 'timeout' : 'error', error: outcome.error }), adapterAttempts };
190
+ }
191
+ async ask(model, systemPrompt, userPrompt, options) {
192
+ const start = Date.now();
193
+ const modelId = stripKnownProviderPrefix(model);
194
+ let adapterAttempts = 0;
195
+ const outcome = await attemptWithRetries({
196
+ timeoutMs: options.timeoutMs,
197
+ maxRetries: options.maxRetries ?? 3,
198
+ signal: options.signal,
199
+ isRetryable,
200
+ attempt: async (signal) => {
201
+ adapterAttempts++;
202
+ const response = await this.client.messages.create({
203
+ model: modelId,
204
+ max_tokens: ASK_MAX_OUTPUT_TOKENS,
205
+ system: systemPrompt,
206
+ messages: [{ role: 'user', content: userPrompt }],
207
+ }, { signal, timeout: options.timeoutMs + 30_000 });
208
+ // An answer cut off at the ceiling is not a short answer: the verifier
209
+ // emits one entry per finding, and a partial list parses to nothing,
210
+ // which gates every candidate it never reached (RCL-60).
211
+ if (response.stop_reason === 'max_tokens') {
212
+ throw new TruncatedAnswerError('anthropic');
213
+ }
214
+ return response.content
215
+ .filter((block) => block.type === 'text')
216
+ .map((block) => block.text)
217
+ .join('\n')
218
+ .trim();
219
+ },
220
+ });
221
+ const durationMs = Date.now() - start;
222
+ return outcome.ok
223
+ ? { model, provider: 'anthropic', text: outcome.value, durationMs, adapterAttempts, status: 'success' }
224
+ : {
225
+ model,
226
+ provider: 'anthropic',
227
+ text: '',
228
+ durationMs,
229
+ adapterAttempts,
230
+ status: outcome.timedOut ? 'timeout' : 'error',
231
+ error: outcome.error,
232
+ };
233
+ }
234
+ }
235
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/dispatch/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { AmbiguousReviewerIdentityError, type ReviewerIdentity } from './reviewer-identity.js';
2
+ import type { ModelReview } from '../consensus/types.js';
3
+ import type { ReviewAdapter } from './adapter.js';
4
+ import type { ReasoningEffort } from '../config/schema.js';
5
+ /**
6
+ * Async review lane (RCL-25). Async models are fired with the round but never
7
+ * awaited: the main process writes a spool file per call and launches a
8
+ * detached worker (`rcl async-worker`) that runs the call and drops the
9
+ * completed ModelReview into the store. The NEXT review of the same target
10
+ * collects whatever has arrived and merges it into its dedup, marked async.
11
+ *
12
+ * The store lives in the repository's git common dir (durable across rounds,
13
+ * repo-scoped, not world-writable), falling back to a per-user tmp dir when
14
+ * reviewing outside a repository.
15
+ */
16
+ export interface AsyncCallSpec {
17
+ model: string;
18
+ role: string;
19
+ provider: string;
20
+ systemPrompt: string;
21
+ userPrompt: string;
22
+ }
23
+ export interface AsyncLaneOptions {
24
+ storeDir: string;
25
+ targetKey: string;
26
+ timeoutMs: number;
27
+ maxRetries: number;
28
+ reasoningEffort?: ReasoningEffort;
29
+ }
30
+ /**
31
+ * Detached workers are one Node process each; a huge chunked diff must not
32
+ * fan out into an unbounded process swarm. Beyond this, extra async calls
33
+ * are dropped (the lane is a bonus, never load-bearing).
34
+ */
35
+ export declare const MAX_ASYNC_CALLS_PER_ROUND = 8;
36
+ /** Split assignments so async models never sit on the blocking path. */
37
+ export declare function partitionAsyncAssignments<A extends {
38
+ model: string;
39
+ }>(assignments: A[], asyncModels: readonly string[]): {
40
+ blocking: A[];
41
+ async: A[];
42
+ };
43
+ /**
44
+ * Stable, filesystem-safe key for a review target, so consecutive rounds of
45
+ * the same converge run find each other's async results and different targets
46
+ * never collide. Same alphabet rule as the converge attempt store.
47
+ * For a converging patch, pass the validated convergence target instead of
48
+ * identifying the loop by its per-round capture path. Prefix the complete
49
+ * key to keep this namespace separate without changing legacy target keys.
50
+ */
51
+ export declare function asyncTargetKey(target: string, convergeTarget?: string, cycleId?: string): string;
52
+ /**
53
+ * Store directory: `<gitCommonDir>/rcl-async` inside a repository, else a
54
+ * per-user directory under the OS tmpdir (mode 0700 either way).
55
+ *
56
+ * The directory is verified before use — spools contain the diff, and a
57
+ * forged result file would inject findings into the next round. A tmpdir
58
+ * path in particular is predictable, so a pre-created symlink or another
59
+ * user's directory must be rejected, never chmod'd or written into.
60
+ */
61
+ export declare function resolveAsyncStoreDir(cwd?: string): Promise<string>;
62
+ /** Resolve an existing async store without creating or changing it. */
63
+ export declare function resolveExistingAsyncStoreDir(cwd?: string): Promise<string>;
64
+ /**
65
+ * Current branch name for git-mode target labels, so `--staged` /
66
+ * `--working-tree` reviews on different branches of one repository never
67
+ * exchange async results. Best-effort: '' outside a repo or on detached
68
+ * HEAD (the store is repo-scoped, so the label only needs to split
69
+ * branches).
70
+ */
71
+ export declare function currentBranchLabel(cwd?: string): Promise<string>;
72
+ /** Write one spool file per async call; returns the spool paths. */
73
+ export declare function spoolAsyncCalls(calls: AsyncCallSpec[], options: AsyncLaneOptions): Promise<string[]>;
74
+ /**
75
+ * Environment for a detached worker: provider credentials/config, proxy and
76
+ * locale basics — nothing else. The worker only ever talks to its model
77
+ * provider, so unrelated secrets in the parent env (GITHUB_TOKEN, cloud
78
+ * credentials, …) have no business outliving the review in a background
79
+ * process.
80
+ */
81
+ export declare function workerEnv(env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
82
+ /**
83
+ * Launch one detached worker process per spool. Fire-and-forget by design:
84
+ * the parent exits when the blocking council is done, and the workers keep
85
+ * running until their call completes or times out. Launch failures are
86
+ * contained: an unhandled child 'error' event would crash the review
87
+ * process that is doing the real work.
88
+ */
89
+ export declare function launchAsyncWorkers(spoolPaths: string[], cliScript?: string): void;
90
+ /**
91
+ * Worker body: consume one spool file, run the call, publish the completed
92
+ * review atomically (tmp + rename, so collect never reads a half-written
93
+ * file). A failed call still publishes — an async reviewer that silently
94
+ * vanishes would be invisible in every report.
95
+ */
96
+ export declare function runAsyncWorker(spoolFile: string, adapterFactory?: (provider: string) => ReviewAdapter): Promise<void>;
97
+ /** Publish a derived opportunistic opinion; this store is never physical-call authority. */
98
+ export declare function publishAsyncReview(storeDir: string, targetKey: string, review: ModelReview): Promise<void>;
99
+ /**
100
+ * Exact bytes observed before a refusal. The original file remains untouched,
101
+ * while the private refusal artifact can still recover it after normal store
102
+ * cleanup removes the source path.
103
+ */
104
+ export interface AsyncResultReference {
105
+ path: string;
106
+ sha256: string;
107
+ bytesBase64: string;
108
+ }
109
+ /** Immutable read-only snapshot for a target-locked interrupted-launch resume. */
110
+ export declare function snapshotAsyncResults(storeDir: string, targetKey: string, blockingReviews?: readonly ReviewerIdentity[], expectedSha256?: readonly string[]): Promise<{
111
+ reviews: ModelReview[];
112
+ reviewBytes: string[];
113
+ artifacts: AsyncResultReference[];
114
+ }>;
115
+ /** Consume only the exact reviewed async artifacts after terminal recovery. */
116
+ export declare function consumeBoundAsyncResults(storeDir: string, targetKey: string, expectedSha256: readonly string[], options?: {
117
+ allowAlreadyConsumed?: boolean;
118
+ }): Promise<void>;
119
+ /**
120
+ * Collect (and consume) every arrived async result for this target. Corrupt
121
+ * files are skipped and removed; other targets' files are left alone except
122
+ * for a TTL sweep of stale leftovers.
123
+ */
124
+ export declare function collectAsyncResults(storeDir: string, targetKey: string, options?: {
125
+ blockingReviews?: readonly ReviewerIdentity[];
126
+ onIdentityRefused?: (error: AmbiguousReviewerIdentityError, artifacts: AsyncResultReference[]) => Promise<void>;
127
+ }): Promise<ModelReview[]>;