@quickchatai/pi-quickreview 0.0.0-stage → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (689) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +75 -2
  3. package/assets/agents/pass-abstraction.md +64 -0
  4. package/assets/agents/pass-ask-human.md +134 -0
  5. package/assets/agents/pass-backcompat.md +67 -0
  6. package/assets/agents/pass-baseline.md +61 -0
  7. package/assets/agents/pass-behaviour-delta.md +64 -0
  8. package/assets/agents/pass-bounds.md +36 -0
  9. package/assets/agents/pass-claims.md +31 -0
  10. package/assets/agents/pass-concurrency.md +168 -0
  11. package/assets/agents/pass-consistency.md +57 -0
  12. package/assets/agents/pass-contracts.md +30 -0
  13. package/assets/agents/pass-data-safety.md +54 -0
  14. package/assets/agents/pass-deferred.md +35 -0
  15. package/assets/agents/pass-delivery.md +37 -0
  16. package/assets/agents/pass-duplication.md +60 -0
  17. package/assets/agents/pass-intent.md +63 -0
  18. package/assets/agents/pass-lint-conformance.md +46 -0
  19. package/assets/agents/pass-maintainability.md +67 -0
  20. package/assets/agents/pass-placement.md +68 -0
  21. package/assets/agents/pass-prod-risk.md +24 -0
  22. package/assets/agents/pass-rollout.md +32 -0
  23. package/assets/agents/pass-roundtrip.md +46 -0
  24. package/assets/agents/pass-security.md +31 -0
  25. package/assets/agents/pass-simplicity.md +68 -0
  26. package/assets/agents/pass-statelessness.md +27 -0
  27. package/assets/agents/pass-style.md +37 -0
  28. package/assets/agents/pass-sweep.md +57 -0
  29. package/assets/agents/pass-tests.md +58 -0
  30. package/assets/agents/pass-ui.md +23 -0
  31. package/assets/agents/pass-validate.md +50 -0
  32. package/assets/agents/pass-widened.md +46 -0
  33. package/assets/agents/scan/pass-scan.md +86 -0
  34. package/assets/config.example.toml +1067 -0
  35. package/assets/deploy/reviewer/AGENTS.override.md +12 -0
  36. package/assets/profiles/default/README.md +21 -0
  37. package/assets/profiles/default/addenda/.gitkeep +0 -0
  38. package/assets/profiles/default/profile.toml +17 -0
  39. package/assets/profiles/example-django/README.md +21 -0
  40. package/assets/profiles/example-django/addenda/10-migration-discipline.md +13 -0
  41. package/assets/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
  42. package/assets/profiles/example-django/addenda/30-test-doctrine.md +12 -0
  43. package/assets/profiles/example-django/addenda/40-orm-usage.md +19 -0
  44. package/assets/profiles/example-django/addenda/50-declared-shape.md +10 -0
  45. package/assets/profiles/example-django/addenda/60-config-placement.md +14 -0
  46. package/assets/profiles/example-django/heuristics.toml +24 -0
  47. package/assets/profiles/example-django/profile.toml +9 -0
  48. package/assets/profiles/fast/README.md +24 -0
  49. package/assets/profiles/fast/profile.toml +59 -0
  50. package/assets/profiles/minimal/README.md +17 -0
  51. package/assets/profiles/minimal/addenda/.gitkeep +0 -0
  52. package/assets/profiles/minimal/profile.toml +8 -0
  53. package/assets/profiles/snappy/README.md +24 -0
  54. package/assets/profiles/snappy/addenda/10-race-as-question.md +6 -0
  55. package/assets/profiles/snappy/profile.toml +46 -0
  56. package/assets/prompts/companion-day-open.md +46 -0
  57. package/assets/prompts/companion-first-run.md +104 -0
  58. package/assets/prompts/companion.md +821 -0
  59. package/assets/prompts/conversation-system.md +117 -0
  60. package/assets/prompts/eod-sweep.md +120 -0
  61. package/assets/prompts/onboarding.md +74 -0
  62. package/assets/prompts/pass-common.md +52 -0
  63. package/assets/prompts/pass-quality-common.md +22 -0
  64. package/assets/prompts/round-first.md +874 -0
  65. package/assets/prompts/round-follow-up.md +991 -0
  66. package/assets/prompts/round-re-review.md +889 -0
  67. package/assets/prompts/round-recheck.md +196 -0
  68. package/assets/prompts/round-staleness.md +856 -0
  69. package/assets/schemas/review-result.v1.json +391 -0
  70. package/assets/schemas/scan-result.v1.json +421 -0
  71. package/assets/schemas/version.v1.json +57 -0
  72. package/assets/seed-manifest.json +19 -0
  73. package/assets/seeds/agents/pass-baseline.md +61 -0
  74. package/assets/seeds/agents/pass-contracts.md +30 -0
  75. package/assets/seeds/agents/pass-data-safety.md +54 -0
  76. package/assets/seeds/agents/pass-delivery.md +37 -0
  77. package/assets/seeds/agents/pass-prod-risk.md +24 -0
  78. package/assets/seeds/agents/pass-security.md +31 -0
  79. package/assets/seeds/agents/pass-statelessness.md +27 -0
  80. package/assets/seeds/agents/pass-ui.md +23 -0
  81. package/assets/seeds/agents/pass-validate.md +50 -0
  82. package/assets/seeds/prompts/conversation-system.md +117 -0
  83. package/assets/seeds/prompts/eod-sweep.md +120 -0
  84. package/assets/seeds/prompts/pass-common.md +52 -0
  85. package/dist/extensions/bash-guard.d.ts +467 -0
  86. package/dist/extensions/bash-guard.d.ts.map +1 -0
  87. package/dist/extensions/bash-guard.js +3058 -0
  88. package/dist/extensions/bash-guard.js.map +1 -0
  89. package/dist/extensions/finding-clusters.d.ts +33 -0
  90. package/dist/extensions/finding-clusters.d.ts.map +1 -0
  91. package/dist/extensions/finding-clusters.js +218 -0
  92. package/dist/extensions/finding-clusters.js.map +1 -0
  93. package/dist/extensions/ledger-pin.d.ts +76 -0
  94. package/dist/extensions/ledger-pin.d.ts.map +1 -0
  95. package/dist/extensions/ledger-pin.js +331 -0
  96. package/dist/extensions/ledger-pin.js.map +1 -0
  97. package/dist/extensions/lens.d.ts +43 -0
  98. package/dist/extensions/lens.d.ts.map +1 -0
  99. package/dist/extensions/lens.js +150 -0
  100. package/dist/extensions/lens.js.map +1 -0
  101. package/dist/extensions/pi-tool.d.ts +22 -0
  102. package/dist/extensions/pi-tool.d.ts.map +1 -0
  103. package/dist/extensions/pi-tool.js +20 -0
  104. package/dist/extensions/pi-tool.js.map +1 -0
  105. package/dist/extensions/quickreview.d.ts +21 -0
  106. package/dist/extensions/quickreview.d.ts.map +1 -0
  107. package/dist/extensions/quickreview.js +132 -0
  108. package/dist/extensions/quickreview.js.map +1 -0
  109. package/dist/src/anchors.d.ts +54 -0
  110. package/dist/src/anchors.d.ts.map +1 -0
  111. package/dist/src/anchors.js +127 -0
  112. package/dist/src/anchors.js.map +1 -0
  113. package/dist/src/assetroot.d.ts +16 -0
  114. package/dist/src/assetroot.d.ts.map +1 -0
  115. package/dist/src/assetroot.js +77 -0
  116. package/dist/src/assetroot.js.map +1 -0
  117. package/dist/src/authwatch.d.ts +61 -0
  118. package/dist/src/authwatch.d.ts.map +1 -0
  119. package/dist/src/authwatch.js +210 -0
  120. package/dist/src/authwatch.js.map +1 -0
  121. package/dist/src/budget.d.ts +15 -0
  122. package/dist/src/budget.d.ts.map +1 -0
  123. package/dist/src/budget.js +32 -0
  124. package/dist/src/budget.js.map +1 -0
  125. package/dist/src/casebudget.d.ts +3 -0
  126. package/dist/src/casebudget.d.ts.map +1 -0
  127. package/dist/src/casebudget.js +3 -0
  128. package/dist/src/casebudget.js.map +1 -0
  129. package/dist/src/cigate.d.ts +116 -0
  130. package/dist/src/cigate.d.ts.map +1 -0
  131. package/dist/src/cigate.js +176 -0
  132. package/dist/src/cigate.js.map +1 -0
  133. package/dist/src/codespan.d.ts +46 -0
  134. package/dist/src/codespan.d.ts.map +1 -0
  135. package/dist/src/codespan.js +75 -0
  136. package/dist/src/codespan.js.map +1 -0
  137. package/dist/src/contextpack.d.ts +56 -0
  138. package/dist/src/contextpack.d.ts.map +1 -0
  139. package/dist/src/contextpack.js +195 -0
  140. package/dist/src/contextpack.js.map +1 -0
  141. package/dist/src/contract.d.ts +8 -0
  142. package/dist/src/contract.d.ts.map +1 -0
  143. package/dist/src/contract.js +21 -0
  144. package/dist/src/contract.js.map +1 -0
  145. package/dist/src/coverage.d.ts +32 -0
  146. package/dist/src/coverage.d.ts.map +1 -0
  147. package/dist/src/coverage.js +85 -0
  148. package/dist/src/coverage.js.map +1 -0
  149. package/dist/src/datafence.d.ts +19 -0
  150. package/dist/src/datafence.d.ts.map +1 -0
  151. package/dist/src/datafence.js +60 -0
  152. package/dist/src/datafence.js.map +1 -0
  153. package/dist/src/dedup.d.ts +65 -0
  154. package/dist/src/dedup.d.ts.map +1 -0
  155. package/dist/src/dedup.js +459 -0
  156. package/dist/src/dedup.js.map +1 -0
  157. package/dist/src/depsources.d.ts +304 -0
  158. package/dist/src/depsources.d.ts.map +1 -0
  159. package/dist/src/depsources.js +3367 -0
  160. package/dist/src/depsources.js.map +1 -0
  161. package/dist/src/diffinput.d.ts +10 -0
  162. package/dist/src/diffinput.d.ts.map +1 -0
  163. package/dist/src/diffinput.js +172 -0
  164. package/dist/src/diffinput.js.map +1 -0
  165. package/dist/src/doubtwords.d.ts +10 -0
  166. package/dist/src/doubtwords.d.ts.map +1 -0
  167. package/dist/src/doubtwords.js +13 -0
  168. package/dist/src/doubtwords.js.map +1 -0
  169. package/dist/src/ecosystem.d.ts +148 -0
  170. package/dist/src/ecosystem.d.ts.map +1 -0
  171. package/dist/src/ecosystem.js +338 -0
  172. package/dist/src/ecosystem.js.map +1 -0
  173. package/dist/src/engine/agentdir.d.ts +5 -0
  174. package/dist/src/engine/agentdir.d.ts.map +1 -0
  175. package/dist/src/engine/agentdir.js +21 -0
  176. package/dist/src/engine/agentdir.js.map +1 -0
  177. package/dist/src/engine/auth.d.ts +214 -0
  178. package/dist/src/engine/auth.d.ts.map +1 -0
  179. package/dist/src/engine/auth.js +374 -0
  180. package/dist/src/engine/auth.js.map +1 -0
  181. package/dist/src/engine/budget.d.ts +60 -0
  182. package/dist/src/engine/budget.d.ts.map +1 -0
  183. package/dist/src/engine/budget.js +113 -0
  184. package/dist/src/engine/budget.js.map +1 -0
  185. package/dist/src/engine/capfd.d.ts +6 -0
  186. package/dist/src/engine/capfd.d.ts.map +1 -0
  187. package/dist/src/engine/capfd.js +21 -0
  188. package/dist/src/engine/capfd.js.map +1 -0
  189. package/dist/src/engine/caseout.d.ts +66 -0
  190. package/dist/src/engine/caseout.d.ts.map +1 -0
  191. package/dist/src/engine/caseout.js +107 -0
  192. package/dist/src/engine/caseout.js.map +1 -0
  193. package/dist/src/engine/context.d.ts +57 -0
  194. package/dist/src/engine/context.d.ts.map +1 -0
  195. package/dist/src/engine/context.js +212 -0
  196. package/dist/src/engine/context.js.map +1 -0
  197. package/dist/src/engine/envmap.d.ts +13 -0
  198. package/dist/src/engine/envmap.d.ts.map +1 -0
  199. package/dist/src/engine/envmap.js +372 -0
  200. package/dist/src/engine/envmap.js.map +1 -0
  201. package/dist/src/engine/extfiles.d.ts +7 -0
  202. package/dist/src/engine/extfiles.d.ts.map +1 -0
  203. package/dist/src/engine/extfiles.js +23 -0
  204. package/dist/src/engine/extfiles.js.map +1 -0
  205. package/dist/src/engine/keyroute.d.ts +21 -0
  206. package/dist/src/engine/keyroute.d.ts.map +1 -0
  207. package/dist/src/engine/keyroute.js +58 -0
  208. package/dist/src/engine/keyroute.js.map +1 -0
  209. package/dist/src/engine/lens/cache-group.d.ts +20 -0
  210. package/dist/src/engine/lens/cache-group.d.ts.map +1 -0
  211. package/dist/src/engine/lens/cache-group.js +31 -0
  212. package/dist/src/engine/lens/cache-group.js.map +1 -0
  213. package/dist/src/engine/lens/cache-run.d.ts +65 -0
  214. package/dist/src/engine/lens/cache-run.d.ts.map +1 -0
  215. package/dist/src/engine/lens/cache-run.js +159 -0
  216. package/dist/src/engine/lens/cache-run.js.map +1 -0
  217. package/dist/src/engine/lens/deadline.d.ts +54 -0
  218. package/dist/src/engine/lens/deadline.d.ts.map +1 -0
  219. package/dist/src/engine/lens/deadline.js +111 -0
  220. package/dist/src/engine/lens/deadline.js.map +1 -0
  221. package/dist/src/engine/lens/engine-tools.d.ts +13 -0
  222. package/dist/src/engine/lens/engine-tools.d.ts.map +1 -0
  223. package/dist/src/engine/lens/engine-tools.js +37 -0
  224. package/dist/src/engine/lens/engine-tools.js.map +1 -0
  225. package/dist/src/engine/lens/env.d.ts +23 -0
  226. package/dist/src/engine/lens/env.d.ts.map +1 -0
  227. package/dist/src/engine/lens/env.js +42 -0
  228. package/dist/src/engine/lens/env.js.map +1 -0
  229. package/dist/src/engine/lens/launch-plan.d.ts +63 -0
  230. package/dist/src/engine/lens/launch-plan.d.ts.map +1 -0
  231. package/dist/src/engine/lens/launch-plan.js +203 -0
  232. package/dist/src/engine/lens/launch-plan.js.map +1 -0
  233. package/dist/src/engine/lens/leaf-cache.d.ts +22 -0
  234. package/dist/src/engine/lens/leaf-cache.d.ts.map +1 -0
  235. package/dist/src/engine/lens/leaf-cache.js +115 -0
  236. package/dist/src/engine/lens/leaf-cache.js.map +1 -0
  237. package/dist/src/engine/lens/permits.d.ts +14 -0
  238. package/dist/src/engine/lens/permits.d.ts.map +1 -0
  239. package/dist/src/engine/lens/permits.js +18 -0
  240. package/dist/src/engine/lens/permits.js.map +1 -0
  241. package/dist/src/engine/lens/registry.d.ts +55 -0
  242. package/dist/src/engine/lens/registry.d.ts.map +1 -0
  243. package/dist/src/engine/lens/registry.js +140 -0
  244. package/dist/src/engine/lens/registry.js.map +1 -0
  245. package/dist/src/engine/lens/round-lens.d.ts +16 -0
  246. package/dist/src/engine/lens/round-lens.d.ts.map +1 -0
  247. package/dist/src/engine/lens/round-lens.js +46 -0
  248. package/dist/src/engine/lens/round-lens.js.map +1 -0
  249. package/dist/src/engine/lens/runlens.d.ts +103 -0
  250. package/dist/src/engine/lens/runlens.d.ts.map +1 -0
  251. package/dist/src/engine/lens/runlens.js +538 -0
  252. package/dist/src/engine/lens/runlens.js.map +1 -0
  253. package/dist/src/engine/lens/section.d.ts +19 -0
  254. package/dist/src/engine/lens/section.d.ts.map +1 -0
  255. package/dist/src/engine/lens/section.js +40 -0
  256. package/dist/src/engine/lens/section.js.map +1 -0
  257. package/dist/src/engine/lens/semaphore.d.ts +13 -0
  258. package/dist/src/engine/lens/semaphore.d.ts.map +1 -0
  259. package/dist/src/engine/lens/semaphore.js +44 -0
  260. package/dist/src/engine/lens/semaphore.js.map +1 -0
  261. package/dist/src/engine/lens/tool.d.ts +34 -0
  262. package/dist/src/engine/lens/tool.d.ts.map +1 -0
  263. package/dist/src/engine/lens/tool.js +345 -0
  264. package/dist/src/engine/lens/tool.js.map +1 -0
  265. package/dist/src/engine/lens/wave.d.ts +63 -0
  266. package/dist/src/engine/lens/wave.d.ts.map +1 -0
  267. package/dist/src/engine/lens/wave.js +95 -0
  268. package/dist/src/engine/lens/wave.js.map +1 -0
  269. package/dist/src/engine/livesessions.d.ts +21 -0
  270. package/dist/src/engine/livesessions.d.ts.map +1 -0
  271. package/dist/src/engine/livesessions.js +57 -0
  272. package/dist/src/engine/livesessions.js.map +1 -0
  273. package/dist/src/engine/livewire.d.ts +18 -0
  274. package/dist/src/engine/livewire.d.ts.map +1 -0
  275. package/dist/src/engine/livewire.js +31 -0
  276. package/dist/src/engine/livewire.js.map +1 -0
  277. package/dist/src/engine/openable.d.ts +37 -0
  278. package/dist/src/engine/openable.d.ts.map +1 -0
  279. package/dist/src/engine/openable.js +120 -0
  280. package/dist/src/engine/openable.js.map +1 -0
  281. package/dist/src/engine/pisdk.d.ts +226 -0
  282. package/dist/src/engine/pisdk.d.ts.map +1 -0
  283. package/dist/src/engine/pisdk.js +552 -0
  284. package/dist/src/engine/pisdk.js.map +1 -0
  285. package/dist/src/engine/port.d.ts +144 -0
  286. package/dist/src/engine/port.d.ts.map +1 -0
  287. package/dist/src/engine/port.js +16 -0
  288. package/dist/src/engine/port.js.map +1 -0
  289. package/dist/src/engine/prompts.d.ts +159 -0
  290. package/dist/src/engine/prompts.d.ts.map +1 -0
  291. package/dist/src/engine/prompts.js +339 -0
  292. package/dist/src/engine/prompts.js.map +1 -0
  293. package/dist/src/engine/render.d.ts +10 -0
  294. package/dist/src/engine/render.d.ts.map +1 -0
  295. package/dist/src/engine/render.js +23 -0
  296. package/dist/src/engine/render.js.map +1 -0
  297. package/dist/src/engine/reviewruntime.d.ts +13 -0
  298. package/dist/src/engine/reviewruntime.d.ts.map +1 -0
  299. package/dist/src/engine/reviewruntime.js +35 -0
  300. package/dist/src/engine/reviewruntime.js.map +1 -0
  301. package/dist/src/engine/reviewsdk.d.ts +75 -0
  302. package/dist/src/engine/reviewsdk.d.ts.map +1 -0
  303. package/dist/src/engine/reviewsdk.js +180 -0
  304. package/dist/src/engine/reviewsdk.js.map +1 -0
  305. package/dist/src/engine/round.d.ts +166 -0
  306. package/dist/src/engine/round.d.ts.map +1 -0
  307. package/dist/src/engine/round.js +543 -0
  308. package/dist/src/engine/round.js.map +1 -0
  309. package/dist/src/engine/roundagents.d.ts +17 -0
  310. package/dist/src/engine/roundagents.d.ts.map +1 -0
  311. package/dist/src/engine/roundagents.js +49 -0
  312. package/dist/src/engine/roundagents.js.map +1 -0
  313. package/dist/src/engine/roundevents.d.ts +110 -0
  314. package/dist/src/engine/roundevents.d.ts.map +1 -0
  315. package/dist/src/engine/roundevents.js +276 -0
  316. package/dist/src/engine/roundevents.js.map +1 -0
  317. package/dist/src/engine/roundsdk.d.ts +33 -0
  318. package/dist/src/engine/roundsdk.d.ts.map +1 -0
  319. package/dist/src/engine/roundsdk.js +76 -0
  320. package/dist/src/engine/roundsdk.js.map +1 -0
  321. package/dist/src/engine/sdkruntime.d.ts +23 -0
  322. package/dist/src/engine/sdkruntime.d.ts.map +1 -0
  323. package/dist/src/engine/sdkruntime.js +340 -0
  324. package/dist/src/engine/sdkruntime.js.map +1 -0
  325. package/dist/src/engine/select.d.ts +16 -0
  326. package/dist/src/engine/select.d.ts.map +1 -0
  327. package/dist/src/engine/select.js +32 -0
  328. package/dist/src/engine/select.js.map +1 -0
  329. package/dist/src/engine/sessionwrap.d.ts +4 -0
  330. package/dist/src/engine/sessionwrap.d.ts.map +1 -0
  331. package/dist/src/engine/sessionwrap.js +31 -0
  332. package/dist/src/engine/sessionwrap.js.map +1 -0
  333. package/dist/src/engine/toolfence.d.ts +90 -0
  334. package/dist/src/engine/toolfence.d.ts.map +1 -0
  335. package/dist/src/engine/toolfence.js +378 -0
  336. package/dist/src/engine/toolfence.js.map +1 -0
  337. package/dist/src/engine/tooluid.d.ts +128 -0
  338. package/dist/src/engine/tooluid.d.ts.map +1 -0
  339. package/dist/src/engine/tooluid.js +401 -0
  340. package/dist/src/engine/tooluid.js.map +1 -0
  341. package/dist/src/envstrip.d.ts +10 -0
  342. package/dist/src/envstrip.d.ts.map +1 -0
  343. package/dist/src/envstrip.js +15 -0
  344. package/dist/src/envstrip.js.map +1 -0
  345. package/dist/src/escalationprompt.d.ts +22 -0
  346. package/dist/src/escalationprompt.d.ts.map +1 -0
  347. package/dist/src/escalationprompt.js +54 -0
  348. package/dist/src/escalationprompt.js.map +1 -0
  349. package/dist/src/execfn.d.ts +29 -0
  350. package/dist/src/execfn.d.ts.map +1 -0
  351. package/dist/src/execfn.js +55 -0
  352. package/dist/src/execfn.js.map +1 -0
  353. package/dist/src/finding-chain.d.ts +40 -0
  354. package/dist/src/finding-chain.d.ts.map +1 -0
  355. package/dist/src/finding-chain.js +76 -0
  356. package/dist/src/finding-chain.js.map +1 -0
  357. package/dist/src/finding-row.d.ts +24 -0
  358. package/dist/src/finding-row.d.ts.map +1 -0
  359. package/dist/src/finding-row.js +26 -0
  360. package/dist/src/finding-row.js.map +1 -0
  361. package/dist/src/findingkey.d.ts +99 -0
  362. package/dist/src/findingkey.d.ts.map +1 -0
  363. package/dist/src/findingkey.js +210 -0
  364. package/dist/src/findingkey.js.map +1 -0
  365. package/dist/src/findingsrecord.d.ts +175 -0
  366. package/dist/src/findingsrecord.d.ts.map +1 -0
  367. package/dist/src/findingsrecord.js +410 -0
  368. package/dist/src/findingsrecord.js.map +1 -0
  369. package/dist/src/followup-mode.d.ts +4 -0
  370. package/dist/src/followup-mode.d.ts.map +1 -0
  371. package/dist/src/followup-mode.js +6 -0
  372. package/dist/src/followup-mode.js.map +1 -0
  373. package/dist/src/gate.d.ts +199 -0
  374. package/dist/src/gate.d.ts.map +1 -0
  375. package/dist/src/gate.js +315 -0
  376. package/dist/src/gate.js.map +1 -0
  377. package/dist/src/ghcred.d.ts +58 -0
  378. package/dist/src/ghcred.d.ts.map +1 -0
  379. package/dist/src/ghcred.js +139 -0
  380. package/dist/src/ghcred.js.map +1 -0
  381. package/dist/src/githubAuth.d.ts +32 -0
  382. package/dist/src/githubAuth.d.ts.map +1 -0
  383. package/dist/src/githubAuth.js +116 -0
  384. package/dist/src/githubAuth.js.map +1 -0
  385. package/dist/src/githubcore.d.ts +20 -0
  386. package/dist/src/githubcore.d.ts.map +1 -0
  387. package/dist/src/githubcore.js +20 -0
  388. package/dist/src/githubcore.js.map +1 -0
  389. package/dist/src/glob.d.ts +11 -0
  390. package/dist/src/glob.d.ts.map +1 -0
  391. package/dist/src/glob.js +69 -0
  392. package/dist/src/glob.js.map +1 -0
  393. package/dist/src/guards.d.ts +93 -0
  394. package/dist/src/guards.d.ts.map +1 -0
  395. package/dist/src/guards.js +306 -0
  396. package/dist/src/guards.js.map +1 -0
  397. package/dist/src/heartbeat.d.ts +29 -0
  398. package/dist/src/heartbeat.d.ts.map +1 -0
  399. package/dist/src/heartbeat.js +87 -0
  400. package/dist/src/heartbeat.js.map +1 -0
  401. package/dist/src/heuristics.d.ts +247 -0
  402. package/dist/src/heuristics.d.ts.map +1 -0
  403. package/dist/src/heuristics.js +927 -0
  404. package/dist/src/heuristics.js.map +1 -0
  405. package/dist/src/homes.d.ts +181 -0
  406. package/dist/src/homes.d.ts.map +1 -0
  407. package/dist/src/homes.js +242 -0
  408. package/dist/src/homes.js.map +1 -0
  409. package/dist/src/hunkheader.d.ts +11 -0
  410. package/dist/src/hunkheader.d.ts.map +1 -0
  411. package/dist/src/hunkheader.js +18 -0
  412. package/dist/src/hunkheader.js.map +1 -0
  413. package/dist/src/include.d.ts +435 -0
  414. package/dist/src/include.d.ts.map +1 -0
  415. package/dist/src/include.js +1692 -0
  416. package/dist/src/include.js.map +1 -0
  417. package/dist/src/launchvocab.d.ts +36 -0
  418. package/dist/src/launchvocab.d.ts.map +1 -0
  419. package/dist/src/launchvocab.js +59 -0
  420. package/dist/src/launchvocab.js.map +1 -0
  421. package/dist/src/ledgercarry.d.ts +24 -0
  422. package/dist/src/ledgercarry.d.ts.map +1 -0
  423. package/dist/src/ledgercarry.js +109 -0
  424. package/dist/src/ledgercarry.js.map +1 -0
  425. package/dist/src/lensids.d.ts +7 -0
  426. package/dist/src/lensids.d.ts.map +1 -0
  427. package/dist/src/lensids.js +53 -0
  428. package/dist/src/lensids.js.map +1 -0
  429. package/dist/src/lensplanning.d.ts +8 -0
  430. package/dist/src/lensplanning.d.ts.map +1 -0
  431. package/dist/src/lensplanning.js +126 -0
  432. package/dist/src/lensplanning.js.map +1 -0
  433. package/dist/src/lensresult.d.ts +94 -0
  434. package/dist/src/lensresult.d.ts.map +1 -0
  435. package/dist/src/lensresult.js +162 -0
  436. package/dist/src/lensresult.js.map +1 -0
  437. package/dist/src/lenstuning.d.ts +97 -0
  438. package/dist/src/lenstuning.d.ts.map +1 -0
  439. package/dist/src/lenstuning.js +326 -0
  440. package/dist/src/lenstuning.js.map +1 -0
  441. package/dist/src/lintconfig.d.ts +31 -0
  442. package/dist/src/lintconfig.d.ts.map +1 -0
  443. package/dist/src/lintconfig.js +543 -0
  444. package/dist/src/lintconfig.js.map +1 -0
  445. package/dist/src/live/events.d.ts +188 -0
  446. package/dist/src/live/events.d.ts.map +1 -0
  447. package/dist/src/live/events.js +136 -0
  448. package/dist/src/live/events.js.map +1 -0
  449. package/dist/src/live/writer.d.ts +54 -0
  450. package/dist/src/live/writer.d.ts.map +1 -0
  451. package/dist/src/live/writer.js +516 -0
  452. package/dist/src/live/writer.js.map +1 -0
  453. package/dist/src/localreview.d.ts +128 -0
  454. package/dist/src/localreview.d.ts.map +1 -0
  455. package/dist/src/localreview.js +426 -0
  456. package/dist/src/localreview.js.map +1 -0
  457. package/dist/src/loosenedtests.d.ts +13 -0
  458. package/dist/src/loosenedtests.d.ts.map +1 -0
  459. package/dist/src/loosenedtests.js +188 -0
  460. package/dist/src/loosenedtests.js.map +1 -0
  461. package/dist/src/memoryport.d.ts +264 -0
  462. package/dist/src/memoryport.d.ts.map +1 -0
  463. package/dist/src/memoryport.js +445 -0
  464. package/dist/src/memoryport.js.map +1 -0
  465. package/dist/src/migrations.d.ts +106 -0
  466. package/dist/src/migrations.d.ts.map +1 -0
  467. package/dist/src/migrations.js +373 -0
  468. package/dist/src/migrations.js.map +1 -0
  469. package/dist/src/oneshot.d.ts +12 -0
  470. package/dist/src/oneshot.d.ts.map +1 -0
  471. package/dist/src/oneshot.js +8 -0
  472. package/dist/src/oneshot.js.map +1 -0
  473. package/dist/src/packing.d.ts +11 -0
  474. package/dist/src/packing.d.ts.map +1 -0
  475. package/dist/src/packing.js +31 -0
  476. package/dist/src/packing.js.map +1 -0
  477. package/dist/src/passes.d.ts +16 -0
  478. package/dist/src/passes.d.ts.map +1 -0
  479. package/dist/src/passes.js +104 -0
  480. package/dist/src/passes.js.map +1 -0
  481. package/dist/src/passtasks.d.ts +68 -0
  482. package/dist/src/passtasks.d.ts.map +1 -0
  483. package/dist/src/passtasks.js +360 -0
  484. package/dist/src/passtasks.js.map +1 -0
  485. package/dist/src/pathinside.d.ts +5 -0
  486. package/dist/src/pathinside.d.ts.map +1 -0
  487. package/dist/src/pathinside.js +9 -0
  488. package/dist/src/pathinside.js.map +1 -0
  489. package/dist/src/pibuiltins.d.ts +36 -0
  490. package/dist/src/pibuiltins.d.ts.map +1 -0
  491. package/dist/src/pibuiltins.js +83 -0
  492. package/dist/src/pibuiltins.js.map +1 -0
  493. package/dist/src/plankey.d.ts +4 -0
  494. package/dist/src/plankey.d.ts.map +1 -0
  495. package/dist/src/plankey.js +10 -0
  496. package/dist/src/plankey.js.map +1 -0
  497. package/dist/src/planner.d.ts +375 -0
  498. package/dist/src/planner.d.ts.map +1 -0
  499. package/dist/src/planner.js +722 -0
  500. package/dist/src/planner.js.map +1 -0
  501. package/dist/src/plugin/args.d.ts +19 -0
  502. package/dist/src/plugin/args.d.ts.map +1 -0
  503. package/dist/src/plugin/args.js +107 -0
  504. package/dist/src/plugin/args.js.map +1 -0
  505. package/dist/src/plugin/index.d.ts +3 -0
  506. package/dist/src/plugin/index.d.ts.map +1 -0
  507. package/dist/src/plugin/index.js +14 -0
  508. package/dist/src/plugin/index.js.map +1 -0
  509. package/dist/src/plugin/login.d.ts +39 -0
  510. package/dist/src/plugin/login.d.ts.map +1 -0
  511. package/dist/src/plugin/login.js +73 -0
  512. package/dist/src/plugin/login.js.map +1 -0
  513. package/dist/src/plugin/review.d.ts +27 -0
  514. package/dist/src/plugin/review.d.ts.map +1 -0
  515. package/dist/src/plugin/review.js +298 -0
  516. package/dist/src/plugin/review.js.map +1 -0
  517. package/dist/src/plugin/runner.d.ts +6 -0
  518. package/dist/src/plugin/runner.d.ts.map +1 -0
  519. package/dist/src/plugin/runner.js +65 -0
  520. package/dist/src/plugin/runner.js.map +1 -0
  521. package/dist/src/plugin/scan.d.ts +79 -0
  522. package/dist/src/plugin/scan.d.ts.map +1 -0
  523. package/dist/src/plugin/scan.js +348 -0
  524. package/dist/src/plugin/scan.js.map +1 -0
  525. package/dist/src/plugin/session.d.ts +56 -0
  526. package/dist/src/plugin/session.d.ts.map +1 -0
  527. package/dist/src/plugin/session.js +2 -0
  528. package/dist/src/plugin/session.js.map +1 -0
  529. package/dist/src/plugin/setup.d.ts +19 -0
  530. package/dist/src/plugin/setup.d.ts.map +1 -0
  531. package/dist/src/plugin/setup.js +142 -0
  532. package/dist/src/plugin/setup.js.map +1 -0
  533. package/dist/src/plugin/versiongate.d.ts +26 -0
  534. package/dist/src/plugin/versiongate.d.ts.map +1 -0
  535. package/dist/src/plugin/versiongate.js +83 -0
  536. package/dist/src/plugin/versiongate.js.map +1 -0
  537. package/dist/src/postingkey.d.ts +8 -0
  538. package/dist/src/postingkey.d.ts.map +1 -0
  539. package/dist/src/postingkey.js +25 -0
  540. package/dist/src/postingkey.js.map +1 -0
  541. package/dist/src/postingpolicy.d.ts +108 -0
  542. package/dist/src/postingpolicy.d.ts.map +1 -0
  543. package/dist/src/postingpolicy.js +341 -0
  544. package/dist/src/postingpolicy.js.map +1 -0
  545. package/dist/src/pr-identity.d.ts +3 -0
  546. package/dist/src/pr-identity.d.ts.map +1 -0
  547. package/dist/src/pr-identity.js +9 -0
  548. package/dist/src/pr-identity.js.map +1 -0
  549. package/dist/src/prdelta.d.ts +181 -0
  550. package/dist/src/prdelta.d.ts.map +1 -0
  551. package/dist/src/prdelta.js +501 -0
  552. package/dist/src/prdelta.js.map +1 -0
  553. package/dist/src/pricing.d.ts +94 -0
  554. package/dist/src/pricing.d.ts.map +1 -0
  555. package/dist/src/pricing.js +209 -0
  556. package/dist/src/pricing.js.map +1 -0
  557. package/dist/src/priorfindings.d.ts +167 -0
  558. package/dist/src/priorfindings.d.ts.map +1 -0
  559. package/dist/src/priorfindings.js +445 -0
  560. package/dist/src/priorfindings.js.map +1 -0
  561. package/dist/src/priortasks.d.ts +31 -0
  562. package/dist/src/priortasks.d.ts.map +1 -0
  563. package/dist/src/priortasks.js +119 -0
  564. package/dist/src/priortasks.js.map +1 -0
  565. package/dist/src/profilelookup.d.ts +59 -0
  566. package/dist/src/profilelookup.d.ts.map +1 -0
  567. package/dist/src/profilelookup.js +98 -0
  568. package/dist/src/profilelookup.js.map +1 -0
  569. package/dist/src/profileoverrides.d.ts +91 -0
  570. package/dist/src/profileoverrides.d.ts.map +1 -0
  571. package/dist/src/profileoverrides.js +313 -0
  572. package/dist/src/profileoverrides.js.map +1 -0
  573. package/dist/src/profiles.d.ts +144 -0
  574. package/dist/src/profiles.d.ts.map +1 -0
  575. package/dist/src/profiles.js +604 -0
  576. package/dist/src/profiles.js.map +1 -0
  577. package/dist/src/promptdoc.d.ts +3 -0
  578. package/dist/src/promptdoc.d.ts.map +1 -0
  579. package/dist/src/promptdoc.js +18 -0
  580. package/dist/src/promptdoc.js.map +1 -0
  581. package/dist/src/prtarget.d.ts +70 -0
  582. package/dist/src/prtarget.d.ts.map +1 -0
  583. package/dist/src/prtarget.js +181 -0
  584. package/dist/src/prtarget.js.map +1 -0
  585. package/dist/src/recheckorder.d.ts +32 -0
  586. package/dist/src/recheckorder.d.ts.map +1 -0
  587. package/dist/src/recheckorder.js +5 -0
  588. package/dist/src/recheckorder.js.map +1 -0
  589. package/dist/src/reviewapi.d.ts +207 -0
  590. package/dist/src/reviewapi.d.ts.map +1 -0
  591. package/dist/src/reviewapi.js +939 -0
  592. package/dist/src/reviewapi.js.map +1 -0
  593. package/dist/src/reviewbotfindings.d.ts +33 -0
  594. package/dist/src/reviewbotfindings.d.ts.map +1 -0
  595. package/dist/src/reviewbotfindings.js +80 -0
  596. package/dist/src/reviewbotfindings.js.map +1 -0
  597. package/dist/src/reviewconfig.d.ts +741 -0
  598. package/dist/src/reviewconfig.d.ts.map +1 -0
  599. package/dist/src/reviewconfig.js +797 -0
  600. package/dist/src/reviewconfig.js.map +1 -0
  601. package/dist/src/reviewdelta.d.ts +51 -0
  602. package/dist/src/reviewdelta.d.ts.map +1 -0
  603. package/dist/src/reviewdelta.js +119 -0
  604. package/dist/src/reviewdelta.js.map +1 -0
  605. package/dist/src/reviewdest.d.ts +86 -0
  606. package/dist/src/reviewdest.d.ts.map +1 -0
  607. package/dist/src/reviewdest.js +142 -0
  608. package/dist/src/reviewdest.js.map +1 -0
  609. package/dist/src/reviewerstub.d.ts +12 -0
  610. package/dist/src/reviewerstub.d.ts.map +1 -0
  611. package/dist/src/reviewerstub.js +28 -0
  612. package/dist/src/reviewerstub.js.map +1 -0
  613. package/dist/src/reviewhost.d.ts +58 -0
  614. package/dist/src/reviewhost.d.ts.map +1 -0
  615. package/dist/src/reviewhost.js +135 -0
  616. package/dist/src/reviewhost.js.map +1 -0
  617. package/dist/src/reviewpost.d.ts +79 -0
  618. package/dist/src/reviewpost.d.ts.map +1 -0
  619. package/dist/src/reviewpost.js +233 -0
  620. package/dist/src/reviewpost.js.map +1 -0
  621. package/dist/src/reviewrender.d.ts +154 -0
  622. package/dist/src/reviewrender.d.ts.map +1 -0
  623. package/dist/src/reviewrender.js +480 -0
  624. package/dist/src/reviewrender.js.map +1 -0
  625. package/dist/src/reviewstate.d.ts +62 -0
  626. package/dist/src/reviewstate.d.ts.map +1 -0
  627. package/dist/src/reviewstate.js +167 -0
  628. package/dist/src/reviewstate.js.map +1 -0
  629. package/dist/src/reviewstore.d.ts +17 -0
  630. package/dist/src/reviewstore.d.ts.map +1 -0
  631. package/dist/src/reviewstore.js +105 -0
  632. package/dist/src/reviewstore.js.map +1 -0
  633. package/dist/src/round-progress.d.ts +120 -0
  634. package/dist/src/round-progress.d.ts.map +1 -0
  635. package/dist/src/round-progress.js +172 -0
  636. package/dist/src/round-progress.js.map +1 -0
  637. package/dist/src/round-stage-deadlines.d.ts +12 -0
  638. package/dist/src/round-stage-deadlines.d.ts.map +1 -0
  639. package/dist/src/round-stage-deadlines.js +10 -0
  640. package/dist/src/round-stage-deadlines.js.map +1 -0
  641. package/dist/src/session-command.d.ts +19 -0
  642. package/dist/src/session-command.d.ts.map +1 -0
  643. package/dist/src/session-command.js +20 -0
  644. package/dist/src/session-command.js.map +1 -0
  645. package/dist/src/settledread.d.ts +61 -0
  646. package/dist/src/settledread.d.ts.map +1 -0
  647. package/dist/src/settledread.js +135 -0
  648. package/dist/src/settledread.js.map +1 -0
  649. package/dist/src/severity.d.ts +167 -0
  650. package/dist/src/severity.d.ts.map +1 -0
  651. package/dist/src/severity.js +364 -0
  652. package/dist/src/severity.js.map +1 -0
  653. package/dist/src/severityrank.d.ts +8 -0
  654. package/dist/src/severityrank.d.ts.map +1 -0
  655. package/dist/src/severityrank.js +16 -0
  656. package/dist/src/severityrank.js.map +1 -0
  657. package/dist/src/standing-review.d.ts +45 -0
  658. package/dist/src/standing-review.d.ts.map +1 -0
  659. package/dist/src/standing-review.js +43 -0
  660. package/dist/src/standing-review.js.map +1 -0
  661. package/dist/src/storerows.d.ts +225 -0
  662. package/dist/src/storerows.d.ts.map +1 -0
  663. package/dist/src/storerows.js +7 -0
  664. package/dist/src/storerows.js.map +1 -0
  665. package/dist/src/styleguide.d.ts +25 -0
  666. package/dist/src/styleguide.d.ts.map +1 -0
  667. package/dist/src/styleguide.js +272 -0
  668. package/dist/src/styleguide.js.map +1 -0
  669. package/dist/src/sweepstatus.d.ts +42 -0
  670. package/dist/src/sweepstatus.d.ts.map +1 -0
  671. package/dist/src/sweepstatus.js +97 -0
  672. package/dist/src/sweepstatus.js.map +1 -0
  673. package/dist/src/templates.d.ts +243 -0
  674. package/dist/src/templates.d.ts.map +1 -0
  675. package/dist/src/templates.js +847 -0
  676. package/dist/src/templates.js.map +1 -0
  677. package/dist/src/types.d.ts +639 -0
  678. package/dist/src/types.d.ts.map +1 -0
  679. package/dist/src/types.js +90 -0
  680. package/dist/src/types.js.map +1 -0
  681. package/dist/src/unifieddiff.d.ts +22 -0
  682. package/dist/src/unifieddiff.d.ts.map +1 -0
  683. package/dist/src/unifieddiff.js +176 -0
  684. package/dist/src/unifieddiff.js.map +1 -0
  685. package/dist/src/yieldloop.d.ts +2 -0
  686. package/dist/src/yieldloop.d.ts.map +1 -0
  687. package/dist/src/yieldloop.js +14 -0
  688. package/dist/src/yieldloop.js.map +1 -0
  689. package/package.json +60 -4
@@ -0,0 +1,148 @@
1
+ import type { GateResult } from "./gate.js";
2
+ import { type PrFile } from "./heuristics.js";
3
+ import type { CollisionCommentRecord } from "./storerows.js";
4
+ import { type MigrationCollision } from "./migrations.js";
5
+ /** The ecosystems a profile may select (`profile.toml`, key `ecosystem`). */
6
+ export type EcosystemName = "django" | "none";
7
+ /** One round's facts, as the dispatch pre-check call site knows them. */
8
+ export interface EcosystemRound {
9
+ pr: number;
10
+ /** The PR's changed files (the files-API shape migrations.ts consumes). */
11
+ files: Array<{
12
+ filename: string;
13
+ status?: string;
14
+ patch?: string;
15
+ }>;
16
+ head_sha: string;
17
+ base_ref: string;
18
+ base_sha: string;
19
+ }
20
+ /** The I/O the pre-check may perform, passed per call by dispatch. Every
21
+ * write still rides the caller's gate-backed adapter (`createReview` is
22
+ * dispatch's own gated COMMENT route) — the seam adds no mutation path. */
23
+ export interface EcosystemPreCheckIo {
24
+ logEvent(kind: string, pr: number | null, payload?: unknown): void;
25
+ /** Has this exact (head, collision set) already been commented?
26
+ * (Staleness-round dedupe — suppress the repost, never the check.) `unknown`
27
+ * — a comment row the ledger cannot read — also suppresses the post: a
28
+ * duplicate on the reviewed repo is the mutation this read exists to
29
+ * prevent, and an unreadable row cannot rule it out. */
30
+ migrationCollisionCommented(pr: number, fingerprint: string): CollisionCommentRecord;
31
+ /** Read-only marker reconciliation; absent adapters retain unknown delivery. */
32
+ findCollisionComment?(pr: number, marker: string, head: string): Promise<boolean>;
33
+ isDryRun?: boolean;
34
+ /** The gated COMMENT delivery — dispatch's `adapter.createReview`. */
35
+ createReview(pr: number, payload: {
36
+ commit_id: string;
37
+ event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
38
+ body: string;
39
+ }, options?: {
40
+ purpose?: "migration_precheck";
41
+ }): Promise<GateResult>;
42
+ /** Every migration path on the base branch at a sha (read-only git).
43
+ * Absent ⇒ the Django check degrades (never a throw, never silence). */
44
+ listBaseMigrations?: (baseSha: string) => Promise<string[]>;
45
+ log?: (msg: string, extra?: unknown) => void;
46
+ }
47
+ /**
48
+ * What one round's pre-check concluded. THE off/degraded distinction lives in
49
+ * this union:
50
+ *
51
+ * * `"off"` — configured off (`ecosystem = "none"`): no check exists,
52
+ * nothing ran, nothing degraded, nothing to say.
53
+ * * `"checked"` — the check ran; `collisions` is what it found (usually
54
+ * empty, and already delivered as a COMMENT when not).
55
+ * `comment_withheld` marks the one checked round whose
56
+ * COMMENT was deliberately NOT posted: the ledger holds a
57
+ * comment row it cannot read. The caller owes the
58
+ * operator an anomaly for it — a withheld comment is
59
+ * quieter than a posted one, and the bar is "more
60
+ * reliable, never quieter".
61
+ * * `"degraded"` — the check EXISTS but could not run this round (no base
62
+ * reader, no base sha, or the base read threw) while the
63
+ * PR touches migrations. The never-quieter path:
64
+ * the caller raises the overseer anomaly and the round
65
+ * prompt un-muzzles the lens.
66
+ */
67
+ export type EcosystemPreCheckOutcome = {
68
+ status: "off";
69
+ } | {
70
+ status: "checked";
71
+ collisions: MigrationCollision[];
72
+ comment_withheld?: true;
73
+ /** The collisions' COMMENT is not known to be on the PR: withheld,
74
+ * guard-refused, or the gated call threw. The gate note then hands the
75
+ * remedy to the session instead of claiming it was posted. */
76
+ comment_undelivered?: true;
77
+ } | {
78
+ status: "degraded";
79
+ };
80
+ /** The slice of a RoundOrder the gate note renders from — structural, so a
81
+ * full RoundOrder satisfies it as-is. */
82
+ export interface GateNoteFacts {
83
+ migration_gate: boolean;
84
+ migration_precheck_degraded?: boolean;
85
+ migration_collisions?: MigrationCollision[] | undefined;
86
+ migration_collisions_undelivered?: boolean | undefined;
87
+ }
88
+ export interface Ecosystem {
89
+ readonly name: EcosystemName;
90
+ /** The tier-forcing gate (heuristics: forces sol-med and flags the round's
91
+ * `migration_gate`). Pure and total; `none` is constantly false. */
92
+ migrationGate(files: PrFile[]): boolean;
93
+ /**
94
+ * The round's pre-check, run by dispatch after the worktree is prepared and
95
+ * BEFORE the session hears about the round. Total: resolves with an outcome
96
+ * for every input, never throws — a failure inside is an event plus a
97
+ * degraded/checked outcome.
98
+ */
99
+ preCheck(io: EcosystemPreCheckIo, round: EcosystemRound): Promise<EcosystemPreCheckOutcome>;
100
+ /** The round prompt's entire `{{migration_gate_note}}` text. `none` renders
101
+ * `""` — a none round carries NO migration-gate prose at all. */
102
+ gateNote(facts: GateNoteFacts): string;
103
+ /** The round templates' `{{missing_migration_note}}`: the rule
104
+ * that tells the session to add pass-data-safety when models change with no
105
+ * migration. The placeholder sits on its own line after a paragraph, so
106
+ * the text carries its own leading blank line; `none` renders `""` — no
107
+ * Django rule and no stray blank line. */
108
+ readonly missingMigrationNote: string;
109
+ }
110
+ /**
111
+ * The GATE NOTES paragraph that carries the migration pre-check result to
112
+ * the session (rendered inside `migration_gate_note`, which all three round
113
+ * templates already print — no seed and no template edit needed).
114
+ *
115
+ * The daemon detected these collisions itself, before this round was ordered,
116
+ * and already posted the remedy as a COMMENT. Without this paragraph the
117
+ * session would re-derive the same fact from the diff and raise it as a
118
+ * blocker — the finding would be correct and the verdict wrong. So the note
119
+ * is imperative — the collision is
120
+ * settled mechanics, it is not a finding, and it never moves the verdict.
121
+ *
122
+ * Every filename-derived field is the PR author's (a migration name is
123
+ * `[^/]+`, backticks and newlines included), so each renders through
124
+ * `codePath`: it can never close its span or open a line of GATE NOTES.
125
+ */
126
+ export declare function renderMigrationCollisionsNote(collisions: readonly MigrationCollision[], undelivered?: boolean): string;
127
+ /**
128
+ * The GATE NOTES paragraph for a DEGRADED pre-check ("more reliable, never
129
+ * quieter"). When the daemon could not run the collision check at all —
130
+ * no base reader, no base sha, or the base read failed — the class must not
131
+ * fall between two stools: the daemon caught nothing AND the pass-data-safety
132
+ * addendum (packages/pi-plugin/src/include.ts) muzzles the lens. This note is the key that
133
+ * un-muzzles it for exactly this round: the addendum's withdrawal is
134
+ * conditional on the round prompt NOT carrying this text.
135
+ */
136
+ export declare function renderMigrationPrecheckDegradedNote(): string;
137
+ export declare const DJANGO_ECOSYSTEM: Ecosystem;
138
+ /**
139
+ * Configured off. Not a degraded Django: nothing runs, nothing is read,
140
+ * nothing is logged, nothing is posted, no anomaly is raised, no prose is
141
+ * rendered, and the tier gate never fires. `{ status: "off" }` is the
142
+ * first-class answer that keeps every one of those a structural fact rather
143
+ * than a skipped branch.
144
+ */
145
+ export declare const NONE_ECOSYSTEM: Ecosystem;
146
+ /** The implementation a profile's `ecosystem` name selects. */
147
+ export declare function ecosystemFor(name: EcosystemName): Ecosystem;
148
+ //# sourceMappingURL=ecosystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem.d.ts","sourceRoot":"","sources":["../../src/ecosystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,338 @@
1
+ // The ONE ecosystem pre-check seam.
2
+ //
3
+ // Everything framework-specific about a round — the tier-forcing migration
4
+ // gate, the migration-number collision pre-check, and the round prompt's
5
+ // migration-gate prose — talks to `Ecosystem`. No caller knows which framework
6
+ // (if any) the reviewed repo uses: dispatch asks the seam, the templates ask
7
+ // the seam, and the profile (`profiles/<name>/profile.toml`, loaded by
8
+ // `packages/pi-plugin/src/profiles.ts`) picks the implementation.
9
+ //
10
+ // Exactly TWO implementations, both here:
11
+ //
12
+ // * `DJANGO_ECOSYSTEM` — the migration collision pre-check (detection at
13
+ // the pinned base sha, remedy posted as a gated COMMENT,
14
+ // degraded-is-never-quieter), the `migrations/` tier gate, the MIGRATION
15
+ // GATE prompt prose, and the round templates' "add on a missing
16
+ // migration" rule (it names Django model fields). The detection/rendering
17
+ // pure functions live in packages/pi-plugin/src/migrations.ts — this object is the seam over
18
+ // them.
19
+ // * `NONE_ECOSYSTEM` — the clean CONFIGURED-OFF state, first-class and
20
+ // distinct from degradation: no pre-check runs (`{ status: "off" }` — an
21
+ // answer, not an error), no degraded path, no gate note, no anomaly, no
22
+ // tier forcing. A generic install's rounds carry no migration-gate prose
23
+ // at all.
24
+ //
25
+ // Shape notes (deliberate — the same discipline as src/memory/store.ts):
26
+ //
27
+ // * Every method is TOTAL. `preCheck` resolves with an outcome for every
28
+ // input — a check that could not run is `{ status: "degraded" }`
29
+ // (refusal-as-answer), an ecosystem with no check is `{ status: "off" }`;
30
+ // only a broken caller contract could throw, and the Django
31
+ // implementation swallows even its own I/O failures into events.
32
+ // * "off" and "degraded" are DIFFERENT arms of the outcome union, never one
33
+ // boolean. Degraded is the never-quieter path (gate note +
34
+ // overseer anomaly + un-muzzled pass-data-safety); off is silence by
35
+ // configuration, and conflating them would either spam a non-Django repo
36
+ // with degradation noise or mute a Django repo's real degradation.
37
+ // * The seam takes its I/O per call (`EcosystemPreCheckIo`), so the
38
+ // implementations hold no state and dispatch keeps owning the store, the
39
+ // gate-backed adapter and the git seam — nothing here can grow a second
40
+ // mutation path.
41
+ import { GitHubRequestError } from "./githubcore.js";
42
+ import { codePath } from "./codespan.js";
43
+ import { isMigrationPath, migrationGate as djangoMigrationGate, } from "./heuristics.js";
44
+ import { collisionFingerprint, detectMigrationCollisions, collisionDependencyAdvice, renamedDependencyReplacement, renderMigrationCollisionComment, } from "./migrations.js";
45
+ // ---- Django prose -----------------------------------------------------------
46
+ // The migration gate is a data-safety signal: it forces the sol-med tier and
47
+ // tells the session the DDL must be judged. It never escalates.
48
+ const GATE_ON = "MIGRATION GATE: this PR touches migrations — pass-data-safety must judge the ORM operations and any supplied generated SQL for destructive mutation, concrete rebuild/locking risk, backfill safety, and rolling-deploy ordering. Ordinary Django ORM operations are acceptable and must not be rewritten as handwritten SQL merely for reviewability. Only a concrete migration hazard blocks; missing generated SQL or an unproven database algorithm does not.";
49
+ const GATE_OFF = "no migration gate on this round";
50
+ // The missing-migration add trigger for the three round templates: it is a
51
+ // Django rule, so a `none` round omits it.
52
+ const MISSING_MIGRATION_NOTE = "\n**Add on a missing migration.** If the diff changes a Django model's fields — a\n" +
53
+ "field added, removed or altered, or a changed `db_index`/`unique`/`choices`/\n" +
54
+ "`default` — and the PR carries **no migration file at all**, add\n" +
55
+ "`pass-data-safety` and give that as your one-line reason. The daemon's plan is\n" +
56
+ "path-shaped: `pass-data-safety` is selected on `migrations/`, `.sql`,\n" +
57
+ "`backfills/` and management commands, so the one case where the **absence** of a\n" +
58
+ "file is the defect is invisible to it. This is the team's longest-running\n" +
59
+ "migration complaint; the lens carries the rule, but only you can see that it\n" +
60
+ "needs to run.\n";
61
+ /**
62
+ * The GATE NOTES paragraph that carries the migration pre-check result to
63
+ * the session (rendered inside `migration_gate_note`, which all three round
64
+ * templates already print — no seed and no template edit needed).
65
+ *
66
+ * The daemon detected these collisions itself, before this round was ordered,
67
+ * and already posted the remedy as a COMMENT. Without this paragraph the
68
+ * session would re-derive the same fact from the diff and raise it as a
69
+ * blocker — the finding would be correct and the verdict wrong. So the note
70
+ * is imperative — the collision is
71
+ * settled mechanics, it is not a finding, and it never moves the verdict.
72
+ *
73
+ * Every filename-derived field is the PR author's (a migration name is
74
+ * `[^/]+`, backticks and newlines included), so each renders through
75
+ * `codePath`: it can never close its span or open a line of GATE NOTES.
76
+ */
77
+ export function renderMigrationCollisionsNote(collisions, undelivered = false) {
78
+ if (collisions.length === 0)
79
+ return "";
80
+ const lines = undelivered
81
+ ? [
82
+ "",
83
+ "",
84
+ "MIGRATION NUMBERING — REMEDY NOT DELIVERED, CARRY IT IN YOUR REVIEW. The",
85
+ "daemon checked this PR's migration numbers against the base branch at the",
86
+ "pinned base sha before this round was ordered and found the collision(s)",
87
+ "below, but its COMMENT with the remedy was NOT delivered to the PR this",
88
+ "round (withheld, refused by a posting guard, or the call failed):",
89
+ "",
90
+ ]
91
+ : [
92
+ "",
93
+ "",
94
+ "MIGRATION NUMBERING — ALREADY HANDLED, DO NOT RAISE IT. The daemon checked",
95
+ "this PR's migration numbers against the base branch at the pinned base sha",
96
+ "before this round was ordered, found the collision(s) below, and has already",
97
+ "posted the exact remedy to the PR as a COMMENT:",
98
+ "",
99
+ ];
100
+ for (const c of collisions) {
101
+ if (c.kind === "renamed-dependency") {
102
+ const stale = c.stale_dependency ?? "";
103
+ lines.push(`- ${codePath(c.pr_path)} references renamed ${codePath(`"${stale}"`)} → in its dependencies ${renamedDependencyReplacement(c)}, keeping every other entry` +
104
+ (c.renumber ? `; rename to ${codePath(c.target_path)}` : ""));
105
+ continue;
106
+ }
107
+ lines.push(`- ${codePath(c.pr_path)} collides with ${codePath(c.base_path)} → rename to ${codePath(c.target_path)}; ${collisionDependencyAdvice(c)}`);
108
+ }
109
+ if (undelivered) {
110
+ lines.push("", "So the author has not been told. Put this remedy in your review body, once,", 'in a short "Migration numbering (mechanics, not a blocker)" paragraph that', "states each rename and `dependencies` entry above. It is still mechanics:", "it is not a finding, not a blocker, never inline, and it never moves the", "verdict — a PR whose only migration problem is this numbering collision is", "still APPROVE-able on its merits. Everything else about these migrations is", "judged exactly as it always was.");
111
+ return lines.join("\n");
112
+ }
113
+ lines.push("", "This is mechanics, not review content: it is deterministic, it has exactly", "one remedy and it carries no design decision. It is **not a finding** — do", "not report it, do not post it inline or in the body, do not let any pass", "raise it, and above all do not let it become a `[blocker]` or move the", "verdict. A PR whose only migration problem is this numbering collision is", "still APPROVE-able on its merits. Everything else about these migrations —", "the DDL itself, ALGORITHM, backfill safety, rolling-deploy ordering — is", "judged exactly as it always was.");
114
+ return lines.join("\n");
115
+ }
116
+ /**
117
+ * The GATE NOTES paragraph for a DEGRADED pre-check ("more reliable, never
118
+ * quieter"). When the daemon could not run the collision check at all —
119
+ * no base reader, no base sha, or the base read failed — the class must not
120
+ * fall between two stools: the daemon caught nothing AND the pass-data-safety
121
+ * addendum (packages/pi-plugin/src/include.ts) muzzles the lens. This note is the key that
122
+ * un-muzzles it for exactly this round: the addendum's withdrawal is
123
+ * conditional on the round prompt NOT carrying this text.
124
+ */
125
+ export function renderMigrationPrecheckDegradedNote() {
126
+ return [
127
+ "",
128
+ "",
129
+ "MIGRATION PRE-CHECK DID NOT RUN — CHECK COLLISIONS YOURSELF. The daemon",
130
+ "normally checks this PR's migration numbers against the base branch before",
131
+ "each round and posts the renumber remedy itself as a COMMENT. This round the",
132
+ "migration pre-check did not run (the base branch facts were unavailable or",
133
+ "the base read failed), so nothing has been checked and nothing has been",
134
+ "posted. YOU must check base-branch migration-number collisions yourself this",
135
+ "round: compare every migration this PR adds against the base branch's",
136
+ "migrations, and report a number the base already occupies as a normal",
137
+ "finding — with the remedy (the free target number and the exact",
138
+ "`dependencies` entry) stated. This lifts, for this round only, the standing",
139
+ "rule that base-branch numbering collisions are handled daemon-side.",
140
+ ].join("\n");
141
+ }
142
+ // ---- the two implementations ----------------------------------------------
143
+ /**
144
+ * Django: the migration-number collision pre-check.
145
+ *
146
+ * A PR migration sitting on a number the base branch already took is
147
+ * deterministic, has exactly one remedy and carries no design content — so the
148
+ * daemon states the remedy itself, as a **COMMENT**. It is never a blocker, it
149
+ * consumes no verdict, and it does not touch the PR's lifecycle state. The
150
+ * write is `io.createReview`, i.e. the ordinary MutationGate path; in dry-run
151
+ * it lands in state/dryrun/ like every other intent.
152
+ *
153
+ * Every failure here is logged and swallowed: a round must never be lost to
154
+ * the pre-check. A degraded check must never be quieter than no check at all
155
+ * ("more reliable, never quieter"): the caller renders an
156
+ * explicit "the pre-check did not run — check collisions yourself" note into
157
+ * the round prompt, which is what conditionally un-muzzles pass-data-safety's
158
+ * withdrawn finding class for exactly that round (see packages/pi-plugin/src/include.ts,
159
+ * MIGRATION_NUMBERING_ADDENDUM), and raises the overseer anomaly.
160
+ */
161
+ async function djangoPreCheck(io, round) {
162
+ const log = io.log ?? (() => { });
163
+ const touchesMigrations = round.files.some((f) => isMigrationPath(f.filename));
164
+ if (!io.listBaseMigrations || !round.base_sha) {
165
+ // Not a silent pass: the check is ~15% of all blockers and nothing else in
166
+ // the pipeline catches the class, so a round that could not run it says so.
167
+ if (touchesMigrations) {
168
+ io.logEvent("migration_precheck_skipped", round.pr, {
169
+ head_sha: round.head_sha,
170
+ reason: !io.listBaseMigrations ? "no_base_reader" : "no_base_sha",
171
+ });
172
+ return { status: "degraded" };
173
+ }
174
+ return { status: "checked", collisions: [] };
175
+ }
176
+ let collisions;
177
+ try {
178
+ const baseFiles = await io.listBaseMigrations(round.base_sha);
179
+ collisions = detectMigrationCollisions({ files: round.files, baseFiles });
180
+ }
181
+ catch (err) {
182
+ log(`dispatch: migration pre-check failed on #${round.pr}`, err);
183
+ io.logEvent("migration_precheck_failed", round.pr, {
184
+ head_sha: round.head_sha,
185
+ error: String(err),
186
+ });
187
+ return touchesMigrations ? { status: "degraded" } : { status: "checked", collisions: [] };
188
+ }
189
+ if (collisions.length === 0)
190
+ return { status: "checked", collisions };
191
+ io.logEvent("migration_collision_detected", round.pr, {
192
+ head_sha: round.head_sha,
193
+ base_ref: round.base_ref,
194
+ base_sha: round.base_sha,
195
+ collisions: collisions.map((c) => ({
196
+ pr_path: c.pr_path,
197
+ base_path: c.base_path,
198
+ target_path: c.target_path,
199
+ })),
200
+ });
201
+ const fingerprint = collisionFingerprint(round.head_sha, collisions);
202
+ // A staleness round re-runs at the same head and must not repost the same
203
+ // comment. Detection still runs and is still logged; only the duplicate
204
+ // COMMENT is suppressed.
205
+ const commented = io.migrationCollisionCommented(round.pr, fingerprint);
206
+ if (commented === "commented" || commented === "dryrun") {
207
+ log(`dispatch: #${round.pr} migration collision already commented at ${round.head_sha}`);
208
+ return {
209
+ status: "checked",
210
+ collisions,
211
+ ...(commented === "dryrun" ? { comment_undelivered: true } : {}),
212
+ };
213
+ }
214
+ const marker = `<!-- qcr-migration:${fingerprint} -->`;
215
+ if (commented === "unknown" || commented === "pending") {
216
+ try {
217
+ if (await io.findCollisionComment?.(round.pr, marker, round.head_sha)) {
218
+ io.logEvent("migration_collision_comment", round.pr, {
219
+ head_sha: round.head_sha,
220
+ fingerprint,
221
+ executed: true,
222
+ recovered: true,
223
+ });
224
+ return { status: "checked", collisions };
225
+ }
226
+ }
227
+ catch (err) {
228
+ log(`dispatch: #${round.pr} migration marker read unavailable`, err);
229
+ }
230
+ // The ledger holds a comment row it cannot read. Posting would risk the
231
+ // exact duplicate the dedupe exists to prevent, so the COMMENT is withheld
232
+ // — loudly, and with the check still counted as RUN: the collisions ride
233
+ // the round order into the gate note, so the session still hears them.
234
+ log(`dispatch: #${round.pr} migration collision comment withheld — ${commented === "pending" ? "an earlier delivery is unconfirmed" : "an earlier comment row is unreadable"}`);
235
+ io.logEvent("migration_collision_comment_withheld", round.pr, {
236
+ head_sha: round.head_sha,
237
+ fingerprint,
238
+ reason: commented === "pending" ? "unconfirmed_delivery" : "unreadable_comment_row",
239
+ });
240
+ return { status: "checked", collisions, comment_withheld: true, comment_undelivered: true };
241
+ }
242
+ let delivered = false;
243
+ try {
244
+ const body = renderMigrationCollisionComment({
245
+ collisions,
246
+ base_ref: round.base_ref,
247
+ base_sha: round.base_sha,
248
+ });
249
+ if (!io.isDryRun)
250
+ io.logEvent("migration_collision_comment_pending", round.pr, {
251
+ head_sha: round.head_sha,
252
+ fingerprint,
253
+ });
254
+ const result = await io.createReview(round.pr, {
255
+ commit_id: round.head_sha,
256
+ event: "COMMENT",
257
+ body: `${body}\n\n${marker}`,
258
+ }, { purpose: "migration_precheck" });
259
+ // Only a delivered (or, in dry-run, recorded) comment marks the
260
+ // fingerprint. A guard refusal returns without throwing and delivered
261
+ // nothing, so it must not consume the dedupe: the next round retries.
262
+ if (!result.executed && !result.dryRunFile) {
263
+ log(`dispatch: #${round.pr} migration collision comment refused (${result.blocked ?? "not executed"})`);
264
+ io.logEvent("migration_collision_comment_refused", round.pr, {
265
+ head_sha: round.head_sha,
266
+ fingerprint,
267
+ reason: result.blocked ?? "not_executed",
268
+ });
269
+ }
270
+ else {
271
+ delivered = result.executed;
272
+ io.logEvent("migration_collision_comment", round.pr, {
273
+ head_sha: round.head_sha,
274
+ fingerprint,
275
+ executed: result.executed,
276
+ dry_run_file: result.dryRunFile ?? null,
277
+ });
278
+ }
279
+ }
280
+ catch (err) {
281
+ // 408 is not a refusal: the request may have been accepted, so its
282
+ // delivery stays unknown and the pending event is reconciled by marker.
283
+ if (err instanceof GitHubRequestError &&
284
+ err.status >= 400 &&
285
+ err.status < 500 &&
286
+ err.status !== 408)
287
+ io.logEvent("migration_collision_comment_refused", round.pr, {
288
+ head_sha: round.head_sha,
289
+ fingerprint,
290
+ reason: String(err),
291
+ });
292
+ // The COMMENT failed, but the collisions are real, already detected and
293
+ // already logged — throwing them away here would leave the round's gate
294
+ // note empty while the addendum still muzzles the lens, i.e. NOBODY
295
+ // holding the class. The check RAN (not degraded); a refused comment
296
+ // retries on the next round because the fingerprint is only marked on
297
+ // success, while an uncertain delivery (pending, no refusal) is
298
+ // reconciled by marker and never resent.
299
+ log(`dispatch: migration pre-check failed on #${round.pr}`, err);
300
+ io.logEvent("migration_precheck_failed", round.pr, {
301
+ head_sha: round.head_sha,
302
+ stage: "create_review",
303
+ error: String(err),
304
+ });
305
+ }
306
+ return delivered
307
+ ? { status: "checked", collisions }
308
+ : { status: "checked", collisions, comment_undelivered: true };
309
+ }
310
+ export const DJANGO_ECOSYSTEM = {
311
+ name: "django",
312
+ migrationGate: (files) => djangoMigrationGate(files),
313
+ preCheck: djangoPreCheck,
314
+ missingMigrationNote: MISSING_MIGRATION_NOTE,
315
+ gateNote: (facts) => (facts.migration_gate ? GATE_ON : GATE_OFF) +
316
+ (facts.migration_precheck_degraded
317
+ ? renderMigrationPrecheckDegradedNote()
318
+ : renderMigrationCollisionsNote(facts.migration_collisions ?? [], facts.migration_collisions_undelivered === true)),
319
+ };
320
+ /**
321
+ * Configured off. Not a degraded Django: nothing runs, nothing is read,
322
+ * nothing is logged, nothing is posted, no anomaly is raised, no prose is
323
+ * rendered, and the tier gate never fires. `{ status: "off" }` is the
324
+ * first-class answer that keeps every one of those a structural fact rather
325
+ * than a skipped branch.
326
+ */
327
+ export const NONE_ECOSYSTEM = {
328
+ name: "none",
329
+ migrationGate: () => false,
330
+ preCheck: async () => ({ status: "off" }),
331
+ gateNote: () => "",
332
+ missingMigrationNote: "",
333
+ };
334
+ /** The implementation a profile's `ecosystem` name selects. */
335
+ export function ecosystemFor(name) {
336
+ return name === "django" ? DJANGO_ECOSYSTEM : NONE_ECOSYSTEM;
337
+ }
338
+ //# sourceMappingURL=ecosystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem.js","sourceRoot":"","sources":["../../src/ecosystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { PiHostOptions } from "./pisdk.js";
2
+ /** What the process route's pi reads from the agent dir's settings.json and an
3
+ * SDK host must be given instead (it takes in-memory settings only). */
4
+ export declare function agentDirSettings(agentDir: string): PiHostOptions["settings"];
5
+ //# sourceMappingURL=agentdir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentdir.d.ts","sourceRoot":"","sources":["../../../src/engine/agentdir.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;wEACwE;AACxE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAe5E"}
@@ -0,0 +1,21 @@
1
+ // What a pi agent dir hands an SDK host. The process route's pi reads these from
2
+ // the dir's files; an SDK host takes in-memory settings only.
3
+ import { readFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ /** What the process route's pi reads from the agent dir's settings.json and an
6
+ * SDK host must be given instead (it takes in-memory settings only). */
7
+ export function agentDirSettings(agentDir) {
8
+ try {
9
+ const s = JSON.parse(readFileSync(join(agentDir, "settings.json"), "utf8"));
10
+ return {
11
+ ...(s["retry"] !== undefined ? { retry: s["retry"] } : {}),
12
+ ...(typeof s["httpIdleTimeoutMs"] === "number"
13
+ ? { httpIdleTimeoutMs: s["httpIdleTimeoutMs"] }
14
+ : {}),
15
+ };
16
+ }
17
+ catch {
18
+ return {};
19
+ }
20
+ }
21
+ //# sourceMappingURL=agentdir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentdir.js","sourceRoot":"","sources":["../../../src/engine/agentdir.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;wEACwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAGzE,CAAC;QACF,OAAO;YACL,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,KAAK,QAAQ;gBAC5C,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE;gBAC/C,CAAC,CAAC,EAAE,CAAC;SACqB,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}