@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 @@
1
+ {"version":3,"file":"recovery-policy.js","sourceRoot":"","sources":["../../src/dispatch/recovery-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import type { ModelReview } from '../consensus/types.js';
2
+ import { type NativeTargetOwnership } from '../converge/target-ownership.js';
3
+ import type { BuiltPrompt } from '../prepare/prompt-builder.js';
4
+ import type { ReviewAssignment } from '../roles/types.js';
5
+ import { CheckpointJournal, type CheckpointState, type FrozenCheckpointPlan, type PaidAttempt } from './checkpoint.js';
6
+ import { type RecoveryAttempt, type RecoveryPreview } from './recovery-policy.js';
7
+ import { type RunnerOptions } from './runner.js';
8
+ import { type RecoveryOperation, type RecoveryRuntimeBounds } from './recovery-operation.js';
9
+ export interface ReviewerRecoveryOptions {
10
+ commonDir: string;
11
+ ownership: NativeTargetOwnership;
12
+ /** New successor journal; original terminal journals are read-only sources. */
13
+ journal: CheckpointJournal;
14
+ plan: FrozenCheckpointPlan;
15
+ expectedPlan: FrozenCheckpointPlan;
16
+ assignments: ReviewAssignment[];
17
+ prompts: BuiltPrompt[];
18
+ /** Validated immutable source history, excluding the successor's own attempts. */
19
+ sourceAttempts: readonly RecoveryAttempt[];
20
+ /** Original dispatch retains prepared secondary work; successors only top up blocking seats. */
21
+ includeSecondary?: boolean;
22
+ fraction: number;
23
+ maxAdditionalCalls: number;
24
+ maxAttemptsPerCell: number;
25
+ /** Remaining time from the persisted operation, not a new budget on resume. */
26
+ remainingMs: number;
27
+ timeoutMs: number;
28
+ concurrency: number;
29
+ providerConcurrency?: RunnerOptions['providerConcurrency'];
30
+ adapterFactory?: RunnerOptions['adapterFactory'];
31
+ reasoningEffort?: RunnerOptions['reasoningEffort'];
32
+ signal?: AbortSignal;
33
+ /**
34
+ * Newly durable physical results only, including failures; never retained or
35
+ * uncertain placeholders. Receives isolated copies. Rejection stops dispatch
36
+ * through the acceptance boundary without undoing recorded results or spend.
37
+ */
38
+ onPhysicalReviewComplete?: (review: ModelReview, callIndex: number, paidAttempt: PaidAttempt) => void | Promise<void>;
39
+ auditLateReview?: RunnerOptions['auditLateReview'];
40
+ /** Audit-only callback pinned to the durable physical intent from its wave. */
41
+ auditLateAttempt?: (review: ModelReview, callIndex: number, paidAttempt: PaidAttempt) => void | Promise<void>;
42
+ onLateAuditError?: RunnerOptions['onLateAuditError'];
43
+ }
44
+ export interface ReviewerRecoveryResult {
45
+ preview: RecoveryPreview;
46
+ /** Complete original matrix order, with unstarted/uncertain cells explicit. */
47
+ reviews: ModelReview[];
48
+ /** All attempts charged to this successor, including earlier interrupted invocations. */
49
+ newAttempts: number;
50
+ stoppedBy?: 'canceled' | 'no_dispatch';
51
+ /** Setup failures are diagnostics, never newly billed or successful attempts. */
52
+ setupFailures?: Array<{
53
+ cell: string;
54
+ review: ModelReview;
55
+ }>;
56
+ }
57
+ export type CapturedRecoveryOptions = Omit<ReviewerRecoveryOptions, 'plan' | 'assignments' | 'prompts' | 'fraction' | 'maxAdditionalCalls' | 'maxAttemptsPerCell' | 'remainingMs' | 'timeoutMs' | 'concurrency' | 'providerConcurrency' | 'reasoningEffort' | 'includeSecondary'> & {
58
+ /** Exact operation already claimed and bound by the outer source/authority validator. */
59
+ operation: RecoveryOperation;
60
+ runtimeBounds?: RecoveryRuntimeBounds;
61
+ nowMs?: () => number;
62
+ };
63
+ /**
64
+ * Internal execution boundary for saved inputs and limits. This is not a CLI
65
+ * admission path: the caller still validates source report/lineage, server
66
+ * support, producer authority and the native launch claim before invoking it.
67
+ * Only the existing journal supplies prompts and persisted spend/time caps.
68
+ */
69
+ export declare function recoverCapturedAssignments(options: CapturedRecoveryOptions): Promise<ReviewerRecoveryResult>;
70
+ /** Read physical attempts without counting a reused source success as a new call. */
71
+ export declare function recoveryAttemptsFromCheckpoint(state: CheckpointState): RecoveryAttempt[];
72
+ /**
73
+ * Execute the missing portion under the guard's existing ownership. The caller
74
+ * must first validate the source report/lineage, server capability and producer
75
+ * authority, then claim the native attempt and provide its persisted bounds.
76
+ * This engine never performs delivery, native admission or an approval decision.
77
+ */
78
+ export declare function recoverReviewerAssignments(input: ReviewerRecoveryOptions): Promise<ReviewerRecoveryResult>;
@@ -0,0 +1,299 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { setTimeout as delay } from 'node:timers/promises';
3
+ import { assertNativeTargetOwnership, withOwnedNativeOperation } from '../converge/target-ownership.js';
4
+ import { freezeCheckpointPlan, blockingCheckpointSeatIds, checkpointRecoveryCells, requireReviewerLaneBinding } from './checkpoint.js';
5
+ import { previewReviewerRecovery } from './recovery-policy.js';
6
+ import { resolveQuorumPolicy } from './quorum.js';
7
+ import { defaultAdapterFactory, reviewCallIdentity, runReviews } from './runner.js';
8
+ import { retryDelay } from './utils.js';
9
+ import { DEFAULT_CONCURRENCY, DEFAULT_REASONING_EFFORT, DEFAULT_TIMEOUT_MS } from '../config/defaults.js';
10
+ import { decodeCapturedInputs } from './captured-inputs.js';
11
+ import { decodeRecoveryOperation, encodeRecoveryOperation, remainingRecoveryBudget } from './recovery-operation.js';
12
+ /**
13
+ * Internal execution boundary for saved inputs and limits. This is not a CLI
14
+ * admission path: the caller still validates source report/lineage, server
15
+ * support, producer authority and the native launch claim before invoking it.
16
+ * Only the existing journal supplies prompts and persisted spend/time caps.
17
+ */
18
+ export async function recoverCapturedAssignments(options) {
19
+ const expectedOperation = encodeRecoveryOperation(options.operation);
20
+ const expectedPlan = freezeCheckpointPlan(options.expectedPlan);
21
+ requireReviewerLaneBinding(expectedPlan);
22
+ const sourceAttempts = structuredClone(options.sourceAttempts);
23
+ const runtimeBounds = options.runtimeBounds === undefined ? undefined : structuredClone(options.runtimeBounds);
24
+ const capturedOptions = { ...options, expectedPlan, sourceAttempts, runtimeBounds };
25
+ return withOwnedNativeOperation(options.ownership, options.commonDir, expectedPlan.target, async (ownership) => {
26
+ const bindings = await capturedOptions.journal.readBindings();
27
+ if (bindings['captured-inputs'] === undefined || bindings.operation === undefined)
28
+ throw new Error('recovery_missing_bindings');
29
+ const operation = decodeRecoveryOperation(bindings.operation);
30
+ if (bindings.operation !== expectedOperation || operation.target !== expectedPlan.target ||
31
+ operation.planDigest !== expectedPlan.digest)
32
+ throw new Error('recovery_operation_mismatch');
33
+ const captured = decodeCapturedInputs(bindings['captured-inputs'], expectedPlan);
34
+ if (captured.digest !== operation.capturedInputsSha256)
35
+ throw new Error('recovery_captured_inputs_mismatch');
36
+ const budget = remainingRecoveryBudget(operation, (capturedOptions.nowMs ?? Date.now)(), runtimeBounds);
37
+ return recoverReviewerAssignments({ ...capturedOptions, ownership, plan: captured.plan, includeSecondary: false,
38
+ assignments: captured.assignments, prompts: captured.prompts, fraction: captured.policy.fraction,
39
+ timeoutMs: captured.config.timeout ?? DEFAULT_TIMEOUT_MS,
40
+ concurrency: captured.config.concurrency ?? DEFAULT_CONCURRENCY,
41
+ providerConcurrency: captured.config.providerConcurrency,
42
+ reasoningEffort: captured.config.reasoningEffort ?? DEFAULT_REASONING_EFFORT,
43
+ remainingMs: budget.remainingMs, maxAdditionalCalls: budget.maxAdditionalCalls,
44
+ maxAttemptsPerCell: budget.maxAttemptsPerCell });
45
+ });
46
+ }
47
+ /** Read physical attempts without counting a reused source success as a new call. */
48
+ export function recoveryAttemptsFromCheckpoint(state) {
49
+ const outcomes = new Map(state.outcomes.map(outcome => [outcome.paidAttempt.id, outcome]));
50
+ return state.records.filter(record => record.type === 'intent').map(record => {
51
+ const outcome = outcomes.get(record.paidAttempt.id);
52
+ if (outcome && outcome.cell !== record.cell)
53
+ throw new Error('recovery_attempt_cell_mismatch');
54
+ return { id: record.paidAttempt.id, cell: record.cell,
55
+ ...(outcome ? { outcome: JSON.parse(outcome.result.reviewBytes) } : {}) };
56
+ });
57
+ }
58
+ /**
59
+ * Execute the missing portion under the guard's existing ownership. The caller
60
+ * must first validate the source report/lineage, server capability and producer
61
+ * authority, then claim the native attempt and provide its persisted bounds.
62
+ * This engine never performs delivery, native admission or an approval decision.
63
+ */
64
+ export async function recoverReviewerAssignments(input) {
65
+ const startedAt = performance.now();
66
+ input = { ...input };
67
+ if ((input.auditLateAttempt || input.auditLateReview) && typeof input.onLateAuditError !== 'function') {
68
+ throw new Error('Late review audit requires an error sink');
69
+ }
70
+ const plan = freezeCheckpointPlan(input.plan);
71
+ if (plan.digest !== input.plan.digest || plan.digest !== input.expectedPlan.digest ||
72
+ JSON.stringify(plan.cells) !== JSON.stringify(input.plan.cells) ||
73
+ JSON.stringify(plan.cells) !== JSON.stringify(input.expectedPlan.cells) ||
74
+ input.journal.getPlan().digest !== plan.digest)
75
+ throw new Error('recovery_plan_mismatch');
76
+ const assignments = structuredClone(input.assignments), prompts = structuredClone(input.prompts);
77
+ const sourceAttempts = structuredClone(input.sourceAttempts);
78
+ if (assignments.length !== plan.cells.length || prompts.length !== plan.cells.length)
79
+ throw new Error('recovery_matrix_mismatch');
80
+ for (const [index, cell] of plan.cells.entries()) {
81
+ const assignment = assignments[index], prompt = prompts[index];
82
+ if (assignment.model !== cell.model || assignment.provider !== cell.route || assignment.role.name !== cell.role) {
83
+ throw new Error('recovery_assignment_mismatch');
84
+ }
85
+ const digest = (text) => createHash('sha256').update(text).digest('hex');
86
+ if (digest(prompt.systemPrompt) !== cell.systemPromptSha256 || digest(prompt.userPrompt) !== cell.userPromptSha256) {
87
+ throw new Error('recovery_prompt_mismatch');
88
+ }
89
+ }
90
+ if (!Number.isFinite(input.remainingMs) || input.remainingMs < 0 || input.remainingMs > 2_147_483_647) {
91
+ throw new Error('recovery_invalid_deadline');
92
+ }
93
+ const deadline = startedAt + input.remainingMs;
94
+ await assertNativeTargetOwnership(input.ownership, input.commonDir, plan.target);
95
+ // Serialize whole invocations using the guard's existing ownership. A second
96
+ // resume must see the first one's completed writes, not a partially published
97
+ // record. Child operations below remain reentrant without another target lock.
98
+ return withOwnedNativeOperation(input.ownership, input.commonDir, plan.target, async (ownership) => {
99
+ input = { ...input, ownership };
100
+ const blockingSeatIds = blockingCheckpointSeatIds(plan);
101
+ const policy = resolveQuorumPolicy(blockingSeatIds.length, input.fraction);
102
+ const controller = new AbortController();
103
+ const abort = () => controller.abort();
104
+ if (input.signal?.aborted)
105
+ abort();
106
+ else
107
+ input.signal?.addEventListener('abort', abort, { once: true });
108
+ const timer = setTimeout(abort, Math.max(0, deadline - performance.now()));
109
+ let waves = 0;
110
+ const setupFailuresByIndex = new Map();
111
+ function preview(attempts, newAttempts) {
112
+ return previewReviewerRecovery(checkpointRecoveryCells(plan), attempts, policy, {
113
+ maxAttemptsPerCell: input.maxAttemptsPerCell,
114
+ maxAdditionalCalls: input.maxAdditionalCalls,
115
+ additionalCallsUsed: newAttempts,
116
+ remainingMs: Math.max(0, deadline - performance.now()),
117
+ }, [...setupFailuresByIndex.keys()].map(index => plan.cells[index].id), input.includeSecondary === true);
118
+ }
119
+ async function capture() {
120
+ const state = await input.journal.read();
121
+ const own = recoveryAttemptsFromCheckpoint(state);
122
+ const attempts = [...sourceAttempts, ...own];
123
+ return { state, attempts, own, preview: preview(attempts, own.length) };
124
+ }
125
+ function finish(snapshot, stoppedBy) {
126
+ const last = new Map(snapshot.attempts.map(attempt => [attempt.cell, attempt]));
127
+ const reviews = plan.cells.map((cell, index) => setupFailuresByIndex.get(index) ?? last.get(cell.id)?.outcome ?? {
128
+ model: cell.model, role: cell.role, provider: cell.route, status: 'canceled',
129
+ findings: [], durationMs: 0,
130
+ error: last.has(cell.id) ? 'Provider outcome is uncertain and possibly billed.' : 'Original assignment has not been started.',
131
+ });
132
+ return { preview: snapshot.preview, reviews, newAttempts: snapshot.own.length,
133
+ ...(setupFailuresByIndex.size ? { setupFailures: [...setupFailuresByIndex].map(([index, review]) => ({ cell: plan.cells[index].id, review })) } : {}),
134
+ ...(stoppedBy ? { stoppedBy } : {}) };
135
+ }
136
+ try {
137
+ const prior = await capture();
138
+ if (prior.preview.nextAction === 'retry_missing_assignments' &&
139
+ !controller.signal.aborted && !prior.state.finalized) {
140
+ // Exclusive invocation ownership means these intents belong to an earlier
141
+ // executor. Retain their uncertain cost before replaying a new selection.
142
+ const recorded = new Set(prior.state.records.filter(record => record.type === 'uncertain')
143
+ .map(record => record.paidAttempt.id));
144
+ for (const pending of prior.state.uncertain) {
145
+ if (!recorded.has(pending.paidAttempt.id)) {
146
+ await input.journal.recordUncertain(pending.cell, pending.paidAttempt, 'Previous executor ended without a recorded outcome; call remains possibly billed.', ownership);
147
+ }
148
+ }
149
+ }
150
+ while (true) {
151
+ const before = await capture();
152
+ if (before.preview.nextAction !== 'retry_missing_assignments')
153
+ return finish(before);
154
+ if (controller.signal.aborted)
155
+ return finish(before, 'canceled');
156
+ if (before.state.finalized)
157
+ throw new Error('recovery_successor_finalized');
158
+ const selected = new Map(before.attempts.filter(attempt => attempt.outcome?.status === 'success')
159
+ .map(attempt => [attempt.cell, attempt.outcome]));
160
+ const inFlight = new Map();
161
+ const running = new Set();
162
+ const adapters = new Map();
163
+ const pendingIntentWrites = [];
164
+ const returned = await runReviews(assignments, prompts, {
165
+ timeoutMs: input.timeoutMs, concurrency: input.concurrency,
166
+ providerConcurrency: input.providerConcurrency,
167
+ // Every physical call has a durable intent; SDK/adapter retries cannot
168
+ // happen invisibly inside this accounting boundary.
169
+ maxRetries: 0, reasoningEffort: input.reasoningEffort,
170
+ adapterFactory: provider => {
171
+ const adapter = adapters.get(provider);
172
+ if (!adapter)
173
+ throw new Error('recovery_missing_prepared_adapter');
174
+ return adapter;
175
+ }, quorum: { fraction: policy.fraction, blockingSeatIds },
176
+ seatIds: plan.cells.map(cell => cell.seat), signal: controller.signal,
177
+ retainedReviews: before.preview.retainedCallIndices.map(callIndex => ({ callIndex,
178
+ callIdentity: reviewCallIdentity(assignments[callIndex], prompts[callIndex], callIndex, plan.cells[callIndex].seat),
179
+ review: selected.get(plan.cells[callIndex].id),
180
+ })),
181
+ eligibleCallIndices: before.preview.eligibleCallIndices.filter(index => !setupFailuresByIndex.has(index)),
182
+ beforeReview: (index, signal) => {
183
+ const operation = withOwnedNativeOperation(input.ownership, input.commonDir, plan.target, async (ownership) => {
184
+ if (signal.aborted)
185
+ return false;
186
+ const current = await capture();
187
+ // The preview reserves work; every durable paid intent must still
188
+ // respect this invocation's possibly tighter runtime call bound.
189
+ if (current.own.length >= input.maxAdditionalCalls)
190
+ return false;
191
+ // Our own running calls still have a chance to succeed. Treat their
192
+ // pending intents as reserved work, not uncertain previous invocations,
193
+ // when deciding whether another missing cell could complete quorum.
194
+ const activeIds = new Set([...running].map(index => inFlight.get(index).id));
195
+ const planning = current.attempts.filter(attempt => attempt.outcome !== undefined || !activeIds.has(attempt.id));
196
+ const now = preview(planning, current.own.length - activeIds.size);
197
+ if (now.nextAction !== 'retry_missing_assignments' || controller.signal.aborted ||
198
+ !now.eligibleCallIndices.includes(index))
199
+ return false;
200
+ // Prepare only an eligible cell, before its durable paid intent.
201
+ // Constructor/configuration failures never start a provider call.
202
+ const assignment = assignments[index];
203
+ if (!adapters.has(assignment.provider)) {
204
+ try {
205
+ adapters.set(assignment.provider, input.adapterFactory
206
+ ? input.adapterFactory(assignment.provider)
207
+ : defaultAdapterFactory(assignment.provider, input.reasoningEffort));
208
+ }
209
+ catch (error) {
210
+ setupFailuresByIndex.set(index, { model: assignment.model, role: assignment.role.name,
211
+ provider: assignment.provider, status: 'error', findings: [], durationMs: 0,
212
+ error: error instanceof Error ? error.message : String(error) });
213
+ return false;
214
+ }
215
+ }
216
+ if (signal.aborted || controller.signal.aborted)
217
+ return false;
218
+ const attempt = { id: randomUUID(), kind: 'paid' };
219
+ await input.journal.recordIntent(plan.cells[index].id, attempt, ownership);
220
+ inFlight.set(index, attempt);
221
+ running.add(index);
222
+ });
223
+ pendingIntentWrites.push(operation);
224
+ return operation;
225
+ },
226
+ acceptReview: async (review, index) => {
227
+ running.delete(index);
228
+ const attempt = inFlight.get(index);
229
+ if (!attempt)
230
+ throw new Error('recovery_missing_paid_intent');
231
+ const cell = plan.cells[index];
232
+ if (review.status === 'canceled') {
233
+ await input.journal.recordUncertain(cell.id, attempt, review.error ?? 'Provider canceled with an unknown outcome.', input.ownership);
234
+ }
235
+ else {
236
+ const result = review.status === 'success'
237
+ ? { kind: 'success', chunk: cell.chunk, reviewBytes: JSON.stringify(review) }
238
+ : { kind: 'failure', chunk: cell.chunk, reviewBytes: JSON.stringify(review), possiblyBilled: true };
239
+ await input.journal.recordResult(cell.id, attempt, result, input.ownership);
240
+ // Observe the exact persisted snapshot, not a provider-owned object
241
+ // that may have changed while the durable write was pending.
242
+ await input.onPhysicalReviewComplete?.(JSON.parse(result.reviewBytes), index, { ...attempt });
243
+ }
244
+ },
245
+ auditLateReview: input.auditLateAttempt ? async (review, index) => {
246
+ // This closure retains this wave's map, so a later retry can never
247
+ // substitute its new paid intent for a delayed earlier response.
248
+ const attempt = inFlight.get(index);
249
+ if (!attempt)
250
+ throw new Error('recovery_missing_late_paid_intent');
251
+ const callbacks = [Promise.resolve().then(() => input.auditLateAttempt(structuredClone(review), index, { ...attempt }))];
252
+ if (input.auditLateReview)
253
+ callbacks.push(Promise.resolve().then(() => input.auditLateReview(structuredClone(review), index)));
254
+ const failures = (await Promise.allSettled(callbacks)).filter(result => result.status === 'rejected').map(result => result.reason);
255
+ if (failures.length === 1)
256
+ throw failures[0];
257
+ if (failures.length > 1)
258
+ throw new AggregateError(failures, 'late_audit_callbacks_failed');
259
+ } : input.auditLateReview,
260
+ onLateAuditError: input.onLateAuditError,
261
+ });
262
+ // Provider cancellation can win while an already-started intent fsync
263
+ // finishes. Drain those owned writes before reading the terminal state.
264
+ await Promise.all(pendingIntentWrites);
265
+ returned.forEach((review, index) => {
266
+ if (review.status === 'error' && !inFlight.has(index))
267
+ setupFailuresByIndex.set(index, review);
268
+ });
269
+ const after = await capture();
270
+ if (after.preview.nextAction !== 'retry_missing_assignments')
271
+ return finish(after);
272
+ if (controller.signal.aborted)
273
+ return finish(after, 'canceled');
274
+ if (after.own.length === before.own.length) {
275
+ if (JSON.stringify(after.preview.eligibleCallIndices) !== JSON.stringify(before.preview.eligibleCallIndices))
276
+ continue;
277
+ const stopped = finish(after, 'no_dispatch');
278
+ return { ...stopped,
279
+ preview: { ...stopped.preview, nextAction: 'inspect_blocked_assignments', eligibleCallIndices: [] },
280
+ };
281
+ }
282
+ if (controller.signal.aborted)
283
+ return finish(after, 'canceled');
284
+ try {
285
+ await delay(Math.min(retryDelay(waves++), Math.max(0, deadline - performance.now())), undefined, { signal: controller.signal });
286
+ }
287
+ catch (error) {
288
+ if (!controller.signal.aborted)
289
+ throw error;
290
+ }
291
+ }
292
+ }
293
+ finally {
294
+ clearTimeout(timer);
295
+ input.signal?.removeEventListener('abort', abort);
296
+ }
297
+ });
298
+ }
299
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/dispatch/recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ModelReview } from '../consensus/types.js';
2
+ import type { ReviewAdapter } from './adapter.js';
3
+ import { type AsyncDelegate } from './checkpoint-async-store.js';
4
+ export declare const MAX_ASYNC_DELEGATE_BYTES = 16384;
5
+ /** Bounded transient stdin; delegation secrets never appear in argv or a credential file. */
6
+ export declare function readRetainedAsyncInput(stream: AsyncIterable<Uint8Array | string>): Promise<string>;
7
+ /** Launch the existing detached lifecycle with only a restricted same-checkpoint capability. */
8
+ export declare function launchRetainedAsyncWorkers(delegates: readonly AsyncDelegate[], onError: () => void, cliScript?: string): Promise<number>;
9
+ /** Run one delegated async call; ordinary opinions remain derivative of durable original accounting. */
10
+ export declare function runRetainedAsyncWorker(bytes: string, dependencies?: {
11
+ adapterFactory?: (provider: string) => ReviewAdapter;
12
+ publish?: (review: ModelReview) => Promise<void>;
13
+ }): Promise<void>;
@@ -0,0 +1,101 @@
1
+ import { readTransientInput } from '../telemetry/transient-input.js';
2
+ import { spawn } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { CheckpointJournal } from './checkpoint.js';
5
+ import { decodeCapturedInputs } from './captured-inputs.js';
6
+ import { openCapturedAsyncDelegate, readAsyncPhase, recordAsyncLateFailure } from './checkpoint-async-store.js';
7
+ import { executeCheckpointAsync } from './checkpoint-async-execution.js';
8
+ import { parseAsyncReview } from './checkpoint-async.js';
9
+ import { defaultAdapterFactory } from './runner.js';
10
+ import { asyncTargetKey, publishAsyncReview, resolveAsyncStoreDir, workerEnv } from './async-lane.js';
11
+ export const MAX_ASYNC_DELEGATE_BYTES = 16_384;
12
+ function refuse() { throw new Error('retained_async_invalid_delegation'); }
13
+ function defaultCliScript() {
14
+ const extension = /\.[cm]?ts$/.test(fileURLToPath(import.meta.url)) ? 'ts' : 'js';
15
+ return fileURLToPath(new URL(`../index.${extension}`, import.meta.url));
16
+ }
17
+ /** Bounded transient stdin; delegation secrets never appear in argv or a credential file. */
18
+ export async function readRetainedAsyncInput(stream) {
19
+ return readTransientInput(stream, MAX_ASYNC_DELEGATE_BYTES);
20
+ }
21
+ /** Launch the existing detached lifecycle with only a restricted same-checkpoint capability. */
22
+ export async function launchRetainedAsyncWorkers(delegates, onError, cliScript = defaultCliScript()) {
23
+ const payloads = delegates.map(delegate => {
24
+ let bytes;
25
+ try {
26
+ bytes = JSON.stringify(delegate);
27
+ }
28
+ catch {
29
+ refuse();
30
+ }
31
+ if (typeof bytes !== 'string' || Buffer.byteLength(bytes) > MAX_ASYNC_DELEGATE_BYTES)
32
+ refuse();
33
+ return bytes;
34
+ });
35
+ const launches = payloads.map(async (bytes) => {
36
+ let errorReported = false;
37
+ const reportErrorOnce = () => { if (!errorReported) {
38
+ errorReported = true;
39
+ onError();
40
+ } };
41
+ try {
42
+ const child = spawn(process.execPath, [...(/\.[cm]?ts$/.test(cliScript) ? ['--import', import.meta.resolve('tsx')] : []), cliScript, 'retained-async-worker'], {
43
+ detached: true, stdio: ['pipe', 'ignore', 'ignore'], env: workerEnv(),
44
+ });
45
+ const spawned = new Promise(resolve => {
46
+ let settled = false;
47
+ child.once('spawn', () => { if (!settled) {
48
+ settled = true;
49
+ resolve(true);
50
+ } });
51
+ child.on('error', () => { reportErrorOnce(); if (!settled) {
52
+ settled = true;
53
+ resolve(false);
54
+ } });
55
+ });
56
+ child.stdin.on('error', reportErrorOnce);
57
+ child.stdin.end(bytes);
58
+ child.unref();
59
+ return await spawned ? 1 : 0;
60
+ }
61
+ catch {
62
+ reportErrorOnce();
63
+ return 0;
64
+ }
65
+ });
66
+ return (await Promise.all(launches)).reduce((total, value) => total + value, 0);
67
+ }
68
+ /** Run one delegated async call; ordinary opinions remain derivative of durable original accounting. */
69
+ export async function runRetainedAsyncWorker(bytes, dependencies = {}) {
70
+ if (typeof bytes !== 'string' || Buffer.byteLength(bytes) > MAX_ASYNC_DELEGATE_BYTES || Buffer.from(bytes).toString('utf8') !== bytes)
71
+ refuse();
72
+ let delegate;
73
+ try {
74
+ delegate = JSON.parse(bytes);
75
+ }
76
+ catch {
77
+ return refuse();
78
+ }
79
+ const original = await openCapturedAsyncDelegate(delegate);
80
+ const journal = await CheckpointJournal.inspectRead(delegate.checkpointPath);
81
+ const captured = decodeCapturedInputs((await journal.readBindings())['captured-inputs'], journal.getPlan());
82
+ // This immutable private phase binding was proven under original native ownership.
83
+ // A pending launch need not have a runId, and later rounds cannot redirect it.
84
+ const opinionTarget = asyncTargetKey('', delegate.target, original.opinionCycle.cycleId ?? undefined);
85
+ await executeCheckpointAsync({ delegate,
86
+ adapterFactory: call => (dependencies.adapterFactory ?? (provider => defaultAdapterFactory(provider, captured.config.reasoningEffort)))(call.provider),
87
+ onLateAuditError: (_error, attemptId) => recordAsyncLateFailure(delegate, attemptId),
88
+ });
89
+ const state = (await readAsyncPhase({ commonDir: delegate.commonDir, namespace: delegate.namespace,
90
+ plan: journal.getPlan() })).state;
91
+ const latestIntent = state.intents.filter(intent => intent.callIndex === delegate.callIndex).at(-1);
92
+ const durable = latestIntent && state.outcomes.find(outcome => outcome.attemptId === latestIntent.attemptId);
93
+ if (durable) {
94
+ const review = structuredClone(parseAsyncReview(durable.reviewBytes, original.call.ref));
95
+ const publish = dependencies.publish ?? (async (review) => publishAsyncReview(await resolveAsyncStoreDir(delegate.commonDir), opinionTarget, review));
96
+ await publish(review);
97
+ }
98
+ // The hidden command exits here even if an adapter ignored abort. Unknown
99
+ // intents remain possibly billed; no provider retry or fabricated opinion.
100
+ }
101
+ //# sourceMappingURL=retained-async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retained-async.js","sourceRoot":"","sources":["../../src/dispatch/retained-async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** The existing consensus key is eligible only when it identifies one exact tuple. */
2
+ export interface ReviewerIdentity {
3
+ readonly model: string;
4
+ readonly role: string;
5
+ }
6
+ export declare class AmbiguousReviewerIdentityError extends Error {
7
+ constructor(first: ReviewerIdentity, second: ReviewerIdentity);
8
+ }
9
+ /** Preserve duplicate assignment instances and legacy merge semantics for eligible inputs. */
10
+ export declare function assertUnambiguousReviewerIdentities(reviewers: readonly ReviewerIdentity[]): void;
@@ -0,0 +1,19 @@
1
+ export class AmbiguousReviewerIdentityError extends Error {
2
+ constructor(first, second) {
3
+ super(`ambiguous_reviewer_identity: ${JSON.stringify([first.model, first.role])} and ${JSON.stringify([second.model, second.role])} share a consensus key. Use unambiguous reviewer model and role combinations.`);
4
+ this.name = 'AmbiguousReviewerIdentityError';
5
+ }
6
+ }
7
+ /** Preserve duplicate assignment instances and legacy merge semantics for eligible inputs. */
8
+ export function assertUnambiguousReviewerIdentities(reviewers) {
9
+ const byKey = new Map();
10
+ for (const reviewer of reviewers) {
11
+ const key = `${reviewer.model}::${reviewer.role}`;
12
+ const previous = byKey.get(key);
13
+ if (previous && (previous.model !== reviewer.model || previous.role !== reviewer.role)) {
14
+ throw new AmbiguousReviewerIdentityError(previous, reviewer);
15
+ }
16
+ byKey.set(key, reviewer);
17
+ }
18
+ }
19
+ //# sourceMappingURL=reviewer-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer-identity.js","sourceRoot":"","sources":["../../src/dispatch/reviewer-identity.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACvD,YAAY,KAAuB,EAAE,MAAwB;QAC3D,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,+EAA+E,CAAC,CAAC;QACnN,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,8FAA8F;AAC9F,MAAM,UAAU,mCAAmC,CAAC,SAAsC;IACxF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}