@quickchatai/pi-quickreview 0.0.0-stage → 1.2.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 (697) 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 +1099 -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 +113 -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 +377 -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 +235 -0
  282. package/dist/src/engine/pisdk.d.ts.map +1 -0
  283. package/dist/src/engine/pisdk.js +577 -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 +70 -0
  382. package/dist/src/githubAuth.d.ts.map +1 -0
  383. package/dist/src/githubAuth.js +183 -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 +106 -0
  394. package/dist/src/guards.d.ts.map +1 -0
  395. package/dist/src/guards.js +365 -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/identity.d.ts +34 -0
  414. package/dist/src/identity.d.ts.map +1 -0
  415. package/dist/src/identity.js +67 -0
  416. package/dist/src/identity.js.map +1 -0
  417. package/dist/src/include.d.ts +435 -0
  418. package/dist/src/include.d.ts.map +1 -0
  419. package/dist/src/include.js +1692 -0
  420. package/dist/src/include.js.map +1 -0
  421. package/dist/src/launchvocab.d.ts +36 -0
  422. package/dist/src/launchvocab.d.ts.map +1 -0
  423. package/dist/src/launchvocab.js +59 -0
  424. package/dist/src/launchvocab.js.map +1 -0
  425. package/dist/src/ledgercarry.d.ts +24 -0
  426. package/dist/src/ledgercarry.d.ts.map +1 -0
  427. package/dist/src/ledgercarry.js +109 -0
  428. package/dist/src/ledgercarry.js.map +1 -0
  429. package/dist/src/lensids.d.ts +7 -0
  430. package/dist/src/lensids.d.ts.map +1 -0
  431. package/dist/src/lensids.js +53 -0
  432. package/dist/src/lensids.js.map +1 -0
  433. package/dist/src/lensplanning.d.ts +8 -0
  434. package/dist/src/lensplanning.d.ts.map +1 -0
  435. package/dist/src/lensplanning.js +126 -0
  436. package/dist/src/lensplanning.js.map +1 -0
  437. package/dist/src/lensresult.d.ts +94 -0
  438. package/dist/src/lensresult.d.ts.map +1 -0
  439. package/dist/src/lensresult.js +162 -0
  440. package/dist/src/lensresult.js.map +1 -0
  441. package/dist/src/lenstuning.d.ts +97 -0
  442. package/dist/src/lenstuning.d.ts.map +1 -0
  443. package/dist/src/lenstuning.js +326 -0
  444. package/dist/src/lenstuning.js.map +1 -0
  445. package/dist/src/lintconfig.d.ts +31 -0
  446. package/dist/src/lintconfig.d.ts.map +1 -0
  447. package/dist/src/lintconfig.js +543 -0
  448. package/dist/src/lintconfig.js.map +1 -0
  449. package/dist/src/live/events.d.ts +188 -0
  450. package/dist/src/live/events.d.ts.map +1 -0
  451. package/dist/src/live/events.js +136 -0
  452. package/dist/src/live/events.js.map +1 -0
  453. package/dist/src/live/writer.d.ts +54 -0
  454. package/dist/src/live/writer.d.ts.map +1 -0
  455. package/dist/src/live/writer.js +516 -0
  456. package/dist/src/live/writer.js.map +1 -0
  457. package/dist/src/localreview.d.ts +128 -0
  458. package/dist/src/localreview.d.ts.map +1 -0
  459. package/dist/src/localreview.js +426 -0
  460. package/dist/src/localreview.js.map +1 -0
  461. package/dist/src/loosenedtests.d.ts +13 -0
  462. package/dist/src/loosenedtests.d.ts.map +1 -0
  463. package/dist/src/loosenedtests.js +188 -0
  464. package/dist/src/loosenedtests.js.map +1 -0
  465. package/dist/src/memoryport.d.ts +264 -0
  466. package/dist/src/memoryport.d.ts.map +1 -0
  467. package/dist/src/memoryport.js +445 -0
  468. package/dist/src/memoryport.js.map +1 -0
  469. package/dist/src/migrations.d.ts +106 -0
  470. package/dist/src/migrations.d.ts.map +1 -0
  471. package/dist/src/migrations.js +373 -0
  472. package/dist/src/migrations.js.map +1 -0
  473. package/dist/src/modelroute.d.ts +38 -0
  474. package/dist/src/modelroute.d.ts.map +1 -0
  475. package/dist/src/modelroute.js +105 -0
  476. package/dist/src/modelroute.js.map +1 -0
  477. package/dist/src/oneshot.d.ts +12 -0
  478. package/dist/src/oneshot.d.ts.map +1 -0
  479. package/dist/src/oneshot.js +8 -0
  480. package/dist/src/oneshot.js.map +1 -0
  481. package/dist/src/packing.d.ts +11 -0
  482. package/dist/src/packing.d.ts.map +1 -0
  483. package/dist/src/packing.js +31 -0
  484. package/dist/src/packing.js.map +1 -0
  485. package/dist/src/passes.d.ts +16 -0
  486. package/dist/src/passes.d.ts.map +1 -0
  487. package/dist/src/passes.js +104 -0
  488. package/dist/src/passes.js.map +1 -0
  489. package/dist/src/passtasks.d.ts +68 -0
  490. package/dist/src/passtasks.d.ts.map +1 -0
  491. package/dist/src/passtasks.js +360 -0
  492. package/dist/src/passtasks.js.map +1 -0
  493. package/dist/src/pathinside.d.ts +5 -0
  494. package/dist/src/pathinside.d.ts.map +1 -0
  495. package/dist/src/pathinside.js +9 -0
  496. package/dist/src/pathinside.js.map +1 -0
  497. package/dist/src/pibuiltins.d.ts +36 -0
  498. package/dist/src/pibuiltins.d.ts.map +1 -0
  499. package/dist/src/pibuiltins.js +83 -0
  500. package/dist/src/pibuiltins.js.map +1 -0
  501. package/dist/src/plankey.d.ts +4 -0
  502. package/dist/src/plankey.d.ts.map +1 -0
  503. package/dist/src/plankey.js +10 -0
  504. package/dist/src/plankey.js.map +1 -0
  505. package/dist/src/planner.d.ts +375 -0
  506. package/dist/src/planner.d.ts.map +1 -0
  507. package/dist/src/planner.js +722 -0
  508. package/dist/src/planner.js.map +1 -0
  509. package/dist/src/plugin/args.d.ts +19 -0
  510. package/dist/src/plugin/args.d.ts.map +1 -0
  511. package/dist/src/plugin/args.js +107 -0
  512. package/dist/src/plugin/args.js.map +1 -0
  513. package/dist/src/plugin/index.d.ts +3 -0
  514. package/dist/src/plugin/index.d.ts.map +1 -0
  515. package/dist/src/plugin/index.js +14 -0
  516. package/dist/src/plugin/index.js.map +1 -0
  517. package/dist/src/plugin/login.d.ts +42 -0
  518. package/dist/src/plugin/login.d.ts.map +1 -0
  519. package/dist/src/plugin/login.js +82 -0
  520. package/dist/src/plugin/login.js.map +1 -0
  521. package/dist/src/plugin/review.d.ts +27 -0
  522. package/dist/src/plugin/review.d.ts.map +1 -0
  523. package/dist/src/plugin/review.js +302 -0
  524. package/dist/src/plugin/review.js.map +1 -0
  525. package/dist/src/plugin/runner.d.ts +6 -0
  526. package/dist/src/plugin/runner.d.ts.map +1 -0
  527. package/dist/src/plugin/runner.js +65 -0
  528. package/dist/src/plugin/runner.js.map +1 -0
  529. package/dist/src/plugin/scan.d.ts +79 -0
  530. package/dist/src/plugin/scan.d.ts.map +1 -0
  531. package/dist/src/plugin/scan.js +348 -0
  532. package/dist/src/plugin/scan.js.map +1 -0
  533. package/dist/src/plugin/session.d.ts +56 -0
  534. package/dist/src/plugin/session.d.ts.map +1 -0
  535. package/dist/src/plugin/session.js +2 -0
  536. package/dist/src/plugin/session.js.map +1 -0
  537. package/dist/src/plugin/setup.d.ts +19 -0
  538. package/dist/src/plugin/setup.d.ts.map +1 -0
  539. package/dist/src/plugin/setup.js +142 -0
  540. package/dist/src/plugin/setup.js.map +1 -0
  541. package/dist/src/plugin/versiongate.d.ts +26 -0
  542. package/dist/src/plugin/versiongate.d.ts.map +1 -0
  543. package/dist/src/plugin/versiongate.js +83 -0
  544. package/dist/src/plugin/versiongate.js.map +1 -0
  545. package/dist/src/postingkey.d.ts +8 -0
  546. package/dist/src/postingkey.d.ts.map +1 -0
  547. package/dist/src/postingkey.js +25 -0
  548. package/dist/src/postingkey.js.map +1 -0
  549. package/dist/src/postingpolicy.d.ts +108 -0
  550. package/dist/src/postingpolicy.d.ts.map +1 -0
  551. package/dist/src/postingpolicy.js +341 -0
  552. package/dist/src/postingpolicy.js.map +1 -0
  553. package/dist/src/pr-identity.d.ts +3 -0
  554. package/dist/src/pr-identity.d.ts.map +1 -0
  555. package/dist/src/pr-identity.js +9 -0
  556. package/dist/src/pr-identity.js.map +1 -0
  557. package/dist/src/prdelta.d.ts +181 -0
  558. package/dist/src/prdelta.d.ts.map +1 -0
  559. package/dist/src/prdelta.js +501 -0
  560. package/dist/src/prdelta.js.map +1 -0
  561. package/dist/src/pricing.d.ts +94 -0
  562. package/dist/src/pricing.d.ts.map +1 -0
  563. package/dist/src/pricing.js +209 -0
  564. package/dist/src/pricing.js.map +1 -0
  565. package/dist/src/priorfindings.d.ts +167 -0
  566. package/dist/src/priorfindings.d.ts.map +1 -0
  567. package/dist/src/priorfindings.js +445 -0
  568. package/dist/src/priorfindings.js.map +1 -0
  569. package/dist/src/priortasks.d.ts +31 -0
  570. package/dist/src/priortasks.d.ts.map +1 -0
  571. package/dist/src/priortasks.js +119 -0
  572. package/dist/src/priortasks.js.map +1 -0
  573. package/dist/src/profilelookup.d.ts +59 -0
  574. package/dist/src/profilelookup.d.ts.map +1 -0
  575. package/dist/src/profilelookup.js +98 -0
  576. package/dist/src/profilelookup.js.map +1 -0
  577. package/dist/src/profileoverrides.d.ts +91 -0
  578. package/dist/src/profileoverrides.d.ts.map +1 -0
  579. package/dist/src/profileoverrides.js +313 -0
  580. package/dist/src/profileoverrides.js.map +1 -0
  581. package/dist/src/profiles.d.ts +144 -0
  582. package/dist/src/profiles.d.ts.map +1 -0
  583. package/dist/src/profiles.js +604 -0
  584. package/dist/src/profiles.js.map +1 -0
  585. package/dist/src/promptdoc.d.ts +3 -0
  586. package/dist/src/promptdoc.d.ts.map +1 -0
  587. package/dist/src/promptdoc.js +18 -0
  588. package/dist/src/promptdoc.js.map +1 -0
  589. package/dist/src/prtarget.d.ts +70 -0
  590. package/dist/src/prtarget.d.ts.map +1 -0
  591. package/dist/src/prtarget.js +181 -0
  592. package/dist/src/prtarget.js.map +1 -0
  593. package/dist/src/recheckorder.d.ts +32 -0
  594. package/dist/src/recheckorder.d.ts.map +1 -0
  595. package/dist/src/recheckorder.js +5 -0
  596. package/dist/src/recheckorder.js.map +1 -0
  597. package/dist/src/reviewapi.d.ts +207 -0
  598. package/dist/src/reviewapi.d.ts.map +1 -0
  599. package/dist/src/reviewapi.js +939 -0
  600. package/dist/src/reviewapi.js.map +1 -0
  601. package/dist/src/reviewbotfindings.d.ts +33 -0
  602. package/dist/src/reviewbotfindings.d.ts.map +1 -0
  603. package/dist/src/reviewbotfindings.js +80 -0
  604. package/dist/src/reviewbotfindings.js.map +1 -0
  605. package/dist/src/reviewconfig.d.ts +753 -0
  606. package/dist/src/reviewconfig.d.ts.map +1 -0
  607. package/dist/src/reviewconfig.js +805 -0
  608. package/dist/src/reviewconfig.js.map +1 -0
  609. package/dist/src/reviewdelta.d.ts +51 -0
  610. package/dist/src/reviewdelta.d.ts.map +1 -0
  611. package/dist/src/reviewdelta.js +119 -0
  612. package/dist/src/reviewdelta.js.map +1 -0
  613. package/dist/src/reviewdest.d.ts +86 -0
  614. package/dist/src/reviewdest.d.ts.map +1 -0
  615. package/dist/src/reviewdest.js +142 -0
  616. package/dist/src/reviewdest.js.map +1 -0
  617. package/dist/src/reviewerstub.d.ts +12 -0
  618. package/dist/src/reviewerstub.d.ts.map +1 -0
  619. package/dist/src/reviewerstub.js +28 -0
  620. package/dist/src/reviewerstub.js.map +1 -0
  621. package/dist/src/reviewhost.d.ts +58 -0
  622. package/dist/src/reviewhost.d.ts.map +1 -0
  623. package/dist/src/reviewhost.js +135 -0
  624. package/dist/src/reviewhost.js.map +1 -0
  625. package/dist/src/reviewpost.d.ts +79 -0
  626. package/dist/src/reviewpost.d.ts.map +1 -0
  627. package/dist/src/reviewpost.js +233 -0
  628. package/dist/src/reviewpost.js.map +1 -0
  629. package/dist/src/reviewrender.d.ts +154 -0
  630. package/dist/src/reviewrender.d.ts.map +1 -0
  631. package/dist/src/reviewrender.js +480 -0
  632. package/dist/src/reviewrender.js.map +1 -0
  633. package/dist/src/reviewstate.d.ts +62 -0
  634. package/dist/src/reviewstate.d.ts.map +1 -0
  635. package/dist/src/reviewstate.js +167 -0
  636. package/dist/src/reviewstate.js.map +1 -0
  637. package/dist/src/reviewstore.d.ts +17 -0
  638. package/dist/src/reviewstore.d.ts.map +1 -0
  639. package/dist/src/reviewstore.js +105 -0
  640. package/dist/src/reviewstore.js.map +1 -0
  641. package/dist/src/round-progress.d.ts +120 -0
  642. package/dist/src/round-progress.d.ts.map +1 -0
  643. package/dist/src/round-progress.js +172 -0
  644. package/dist/src/round-progress.js.map +1 -0
  645. package/dist/src/round-stage-deadlines.d.ts +12 -0
  646. package/dist/src/round-stage-deadlines.d.ts.map +1 -0
  647. package/dist/src/round-stage-deadlines.js +10 -0
  648. package/dist/src/round-stage-deadlines.js.map +1 -0
  649. package/dist/src/session-command.d.ts +19 -0
  650. package/dist/src/session-command.d.ts.map +1 -0
  651. package/dist/src/session-command.js +20 -0
  652. package/dist/src/session-command.js.map +1 -0
  653. package/dist/src/settledread.d.ts +61 -0
  654. package/dist/src/settledread.d.ts.map +1 -0
  655. package/dist/src/settledread.js +135 -0
  656. package/dist/src/settledread.js.map +1 -0
  657. package/dist/src/severity.d.ts +167 -0
  658. package/dist/src/severity.d.ts.map +1 -0
  659. package/dist/src/severity.js +364 -0
  660. package/dist/src/severity.js.map +1 -0
  661. package/dist/src/severityrank.d.ts +8 -0
  662. package/dist/src/severityrank.d.ts.map +1 -0
  663. package/dist/src/severityrank.js +16 -0
  664. package/dist/src/severityrank.js.map +1 -0
  665. package/dist/src/standing-review.d.ts +45 -0
  666. package/dist/src/standing-review.d.ts.map +1 -0
  667. package/dist/src/standing-review.js +43 -0
  668. package/dist/src/standing-review.js.map +1 -0
  669. package/dist/src/storerows.d.ts +225 -0
  670. package/dist/src/storerows.d.ts.map +1 -0
  671. package/dist/src/storerows.js +7 -0
  672. package/dist/src/storerows.js.map +1 -0
  673. package/dist/src/styleguide.d.ts +25 -0
  674. package/dist/src/styleguide.d.ts.map +1 -0
  675. package/dist/src/styleguide.js +272 -0
  676. package/dist/src/styleguide.js.map +1 -0
  677. package/dist/src/sweepstatus.d.ts +42 -0
  678. package/dist/src/sweepstatus.d.ts.map +1 -0
  679. package/dist/src/sweepstatus.js +97 -0
  680. package/dist/src/sweepstatus.js.map +1 -0
  681. package/dist/src/templates.d.ts +243 -0
  682. package/dist/src/templates.d.ts.map +1 -0
  683. package/dist/src/templates.js +847 -0
  684. package/dist/src/templates.js.map +1 -0
  685. package/dist/src/types.d.ts +639 -0
  686. package/dist/src/types.d.ts.map +1 -0
  687. package/dist/src/types.js +90 -0
  688. package/dist/src/types.js.map +1 -0
  689. package/dist/src/unifieddiff.d.ts +22 -0
  690. package/dist/src/unifieddiff.d.ts.map +1 -0
  691. package/dist/src/unifieddiff.js +176 -0
  692. package/dist/src/unifieddiff.js.map +1 -0
  693. package/dist/src/yieldloop.d.ts +2 -0
  694. package/dist/src/yieldloop.d.ts.map +1 -0
  695. package/dist/src/yieldloop.js +14 -0
  696. package/dist/src/yieldloop.js.map +1 -0
  697. package/package.json +60 -4
@@ -0,0 +1,604 @@
1
+ // Repo-profile addenda packs.
2
+ //
3
+ // A profile is a directory `profiles/<name>/` whose `addenda/*.md` files
4
+ // carry house-rule pass addenda — the same `PassAddendum` shape the compiled-in
5
+ // registry (`PASS_ADDENDA`, packages/pi-plugin/src/include.ts) declares, authored as files so an
6
+ // operator can match the reviewer's house-rule knowledge to their repo without
7
+ // editing this codebase. The addendum registry remains the ONE composition
8
+ // mechanism: a pack does not bypass it, it extends it — wire.ts appends the
9
+ // loaded pack to `PASS_ADDENDA` before calling `buildAgents`, so profile
10
+ // entries compose onto built pass bodies AFTER every built-in generic entry
11
+ // and BEFORE the dynamic same-day feedback addendum (which wire.ts appends
12
+ // last). Seeds stay frozen; nothing here touches `agents/` or `prompts/`.
13
+ //
14
+ // File format — YAML-shaped frontmatter, two keys only, then the body:
15
+ //
16
+ // ---
17
+ // id: migration-discipline
18
+ // scope: pass-data-safety
19
+ // ---
20
+ // ## Migration discipline — … (sandbox rule)
21
+ // …
22
+ //
23
+ // * `id` — stable kebab-case id (what tests and commit messages cite).
24
+ // * `scope` — `all` | `lenses` | a comma-separated list of pass names.
25
+ //
26
+ // The composed text is `"\n" + body` (body = every byte after the closing
27
+ // fence, verbatim): built-in addenda all start with a newline separator, and
28
+ // prepending it here keeps the files editor-friendly (no significant leading
29
+ // blank line) while byte-preserving the composed output.
30
+ //
31
+ // Ordering is deterministic and documented: files compose in ascending
32
+ // filename order (JS default sort — byte-wise by UTF-16 code unit), so packs
33
+ // use numeric prefixes (`10-…`, `20-…`) to state intent. Non-`.md` entries
34
+ // (README, .gitkeep) are ignored by contract; everything else that fails to
35
+ // parse — missing frontmatter, unknown keys, a bad scope, an empty body, a
36
+ // duplicate or reserved id — throws with the offending path. A malformed pack
37
+ // is a loud build failure, never a silent skip.
38
+ //
39
+ // Where a profile lives is the profile search's call (packages/pi-plugin/src/profilelookup.ts
40
+ // `findProfile`): the homes the caller names (`ProfileLookup.homes`, the
41
+ // install's, resolved by src/homes.ts `homeProfileLookup`) first, then the
42
+ // checkout's generic examples — every loader below resolves the name through
43
+ // it, so a name that could escape `profiles/` is refused before any read.
44
+ //
45
+ // A repo profile (`.qcr/` on the base branch, packages/pi-plugin/src/profileoverrides.ts) rides
46
+ // the same loaders as the lowest layer of the chain: `ProfileLookup.repoProfile`
47
+ // names its extracted directory, and everything the named profile and its bases
48
+ // set wins over it. The extraction has already dropped what a repo may not say.
49
+ //
50
+ // Inheritance: `profile.toml` may say `extends = "<profile>"`, and
51
+ // the base may extend another, in chains. Every loader below resolves the
52
+ // WHOLE chain (`profileChain` — base first, the selected profile last; a
53
+ // cycle is refused, a missing base is a loud failure) and merges per kind:
54
+ // * addenda — the base's pack first; a child entry with an inherited id
55
+ // REPLACES it in place, a new id appends, and `[addenda] drop = [ids]`
56
+ // removes inherited ids (a drop naming nothing inherited is refused —
57
+ // a typo must not read as a removal);
58
+ // * heuristics — unioned per lens, base predicates first;
59
+ // * scalars (`ecosystem`) — the nearest profile that sets one wins;
60
+ // * per-lens tuning (`[lenses.<pass>]`) — per lens, per key, the
61
+ // nearest profile that sets it wins;
62
+ // * the scan table (`[scan]`) — per key, the nearest profile that
63
+ // sets it wins (a list, `exclude`, is replaced whole, never appended);
64
+ // * the posting policy (`[posting]`) — per key, the nearest
65
+ // profile that sets it wins.
66
+ // The shipped `default` profile encodes the shipped behaviour (an empty pack,
67
+ // no heuristics, `ecosystem = "none"`, and `[posting] repeat_sites = false`:
68
+ // one comment per root cause) and is the base a generated profile extends. An
69
+ // empty child of it reviews as no profile does, but posts each root cause
70
+ // once where no profile keeps the code default (`repeat_sites = true`).
71
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
72
+ import { join } from "node:path";
73
+ import { parse as parseToml } from "smol-toml";
74
+ import { parseScanTable, SCAN_PROFILE_KEYS } from "./reviewconfig.js";
75
+ import { ALL_PASSES } from "./passes.js";
76
+ import { EMPTY_HEURISTICS, PROFILE_EXTENDABLE_LENSES } from "./heuristics.js";
77
+ import { FEEDBACK_DAY_ADDENDUM_ID, LESSON_VALIDATE_ADDENDUM_ID, PASS_ADDENDA, SCAN_PASS, splitFrontmatter, } from "./include.js";
78
+ import { findProfile, profileSearchPlaces, strandedProfile, } from "./profilelookup.js";
79
+ import { applyProfilePosting, parsePostingTable, POSTING_ADDENDUM_IDS, } from "./postingpolicy.js";
80
+ import { applyProfileTuning, LENS_TUNING_ID_PREFIXES, mergeLensTuning, parseLensTable, } from "./lenstuning.js";
81
+ /** The name the repo profile's layer carries in errors. */
82
+ export const REPO_LAYER_NAME = ".qcr";
83
+ /** Where a not-found looked — and, when the checkout still strands a profile
84
+ * of that name (which is never read), the way out. */
85
+ function notFoundWhere(root, profile, lookup) {
86
+ const homes = lookup.homes ?? [];
87
+ const looked = `looked in ${profileSearchPlaces(root, homes)
88
+ .map((p) => p.dir)
89
+ .join(", ")} (the checkout's: generic examples only)`;
90
+ const stranded = strandedProfile({ root, profile, homes });
91
+ return stranded === null
92
+ ? looked
93
+ : `${looked}; ${stranded} is no longer read — move it into the config home with \`qcr install migrate\``;
94
+ }
95
+ /** The named profile's directory, wherever the locator finds it — or a loud
96
+ * not-found naming every place it looked. */
97
+ function profileDirOrThrow(root, profile, lookup) {
98
+ const located = findProfile({ root, profile, homes: lookup.homes ?? [] });
99
+ if (located)
100
+ return located.dir;
101
+ throw new Error(`[review] profile "${profile}" not found — ${notFoundWhere(root, profile, lookup)}`);
102
+ }
103
+ const ID_RE = /^[a-z0-9][a-z0-9-]*$/;
104
+ const PASS_NAME_RE = /^pass-[a-z0-9][a-z0-9-]*$/;
105
+ /** Read one profile's `profile.toml` — an absent file is an empty one. Owns
106
+ * the `extends` key and the `[addenda]` table; other keys belong to other
107
+ * loaders and are not an error here. */
108
+ function readLayer(name, dir) {
109
+ const toml = join(dir, "profile.toml");
110
+ let raw;
111
+ try {
112
+ raw = readFileSync(toml, "utf8");
113
+ }
114
+ catch (err) {
115
+ const code = err.code;
116
+ if (code === "ENOENT" || code === "ENOTDIR")
117
+ return { name, dir, toml, drop: [] };
118
+ throw new Error(`[review] profile "${name}": cannot read ${toml}: ${String(err)}`, {
119
+ cause: err,
120
+ });
121
+ }
122
+ let doc;
123
+ try {
124
+ doc = parseToml(raw);
125
+ }
126
+ catch (err) {
127
+ throw new Error(`[review] profile "${name}": ${toml} is not valid TOML: ${String(err)}`, {
128
+ cause: err,
129
+ });
130
+ }
131
+ const layer = { name, dir, toml, drop: [] };
132
+ const ext = doc["extends"];
133
+ if (ext !== undefined) {
134
+ if (typeof ext !== "string" || ext === "") {
135
+ throw new Error(`[review] profile "${name}": ${toml} extends must be a profile name, got ${JSON.stringify(ext)}`);
136
+ }
137
+ layer.extends = ext;
138
+ }
139
+ if ("ecosystem" in doc)
140
+ layer.ecosystem = doc["ecosystem"];
141
+ if ("lenses" in doc)
142
+ layer.lenses = doc["lenses"];
143
+ if ("scan" in doc)
144
+ layer.scan = doc["scan"];
145
+ if ("posting" in doc)
146
+ layer.posting = doc["posting"];
147
+ const addenda = doc["addenda"];
148
+ if (addenda !== undefined) {
149
+ if (typeof addenda !== "object" || addenda === null || Array.isArray(addenda)) {
150
+ throw new Error(`[review] profile "${name}": ${toml} [addenda] must be a table`);
151
+ }
152
+ for (const [key, value] of Object.entries(addenda)) {
153
+ if (key !== "drop") {
154
+ throw new Error(`[review] profile "${name}": ${toml} [addenda] unknown key "${key}" — only "drop" is allowed`);
155
+ }
156
+ if (!Array.isArray(value) || value.some((v) => typeof v !== "string" || !ID_RE.test(v))) {
157
+ throw new Error(`[review] profile "${name}": ${toml} [addenda] drop must be an array of addendum ids (kebab-case)`);
158
+ }
159
+ layer.drop = value;
160
+ }
161
+ }
162
+ return layer;
163
+ }
164
+ /**
165
+ * The selected profile and everything it extends, BASE FIRST (the selected
166
+ * profile is the last element). Each name resolves through the install
167
+ * locator, so a base is found where any profile is. Refused, loudly: a
168
+ * profile not found, a base not found (naming who extends it), and a cycle
169
+ * (naming the whole loop, a self-extend included).
170
+ */
171
+ function profileChain(root, profile, lookup) {
172
+ const chain = [];
173
+ let name = profile;
174
+ let dir = profileDirOrThrow(root, profile, lookup);
175
+ for (;;) {
176
+ const layer = readLayer(name, dir);
177
+ chain.push(layer);
178
+ const base = layer.extends;
179
+ if (base === undefined)
180
+ break;
181
+ const seen = chain.map((l) => l.name);
182
+ if (seen.includes(base)) {
183
+ throw new Error(`[review] profile "${profile}": extends cycle ${[...seen, base].join(" → ")} — a profile chain must end in a profile that extends nothing`);
184
+ }
185
+ const located = findProfile({ root, profile: base, homes: lookup.homes ?? [] });
186
+ if (!located) {
187
+ throw new Error(`[review] profile "${name}" extends "${base}", which was not found — ${notFoundWhere(root, base, lookup)}`);
188
+ }
189
+ name = base;
190
+ dir = located.dir;
191
+ }
192
+ return chain.reverse();
193
+ }
194
+ /** The repo profile's layer, when the lookup carries one. */
195
+ function repoLayer(lookup) {
196
+ if (!lookup.repoProfile)
197
+ return [];
198
+ return [{ ...readLayer(REPO_LAYER_NAME, lookup.repoProfile.dir), optionalPack: true }];
199
+ }
200
+ /** The chain every loader walks: the repo layer first (lowest), then the
201
+ * named profile's, base first. `soft` is the tuning loaders' contract: no
202
+ * profile, or one found nowhere, means no named chain rather than a throw. */
203
+ function chainOf(root, profile, lookup, soft) {
204
+ const named = profile === "" || (soft && !findProfile({ root, profile, homes: lookup.homes ?? [] }))
205
+ ? []
206
+ : profileChain(root, profile, lookup);
207
+ return [...repoLayer(lookup), ...named];
208
+ }
209
+ /** The selected profile's resolved `extends` chain, base first — name and
210
+ * directory of each layer (the setup's profile validate names what it
211
+ * checked). Same refusals as every loader: not found, base not found,
212
+ * cycle. `""` is no profile: an empty chain. */
213
+ export function resolveProfileChain(root, profile, lookup = {}) {
214
+ if (profile === "")
215
+ return [];
216
+ return profileChain(root, profile, lookup).map((l) => ({ name: l.name, dir: l.dir }));
217
+ }
218
+ /** Ids a pack may not claim: every compiled-in entry, plus the dynamic
219
+ * same-day feedback addendum wire.ts composes last (src/feedback.ts). */
220
+ export function reservedAddendumIds() {
221
+ return new Set([
222
+ ...PASS_ADDENDA.map((a) => a.id),
223
+ FEEDBACK_DAY_ADDENDUM_ID,
224
+ // The lesson addendum wire.ts composes beside it under `[memory]
225
+ // delivery = "on"` (packages/pi-plugin/src/include.ts lessonAddenda).
226
+ LESSON_VALIDATE_ADDENDUM_ID,
227
+ // The addendum `[posting]` compiles into (packages/pi-plugin/src/postingpolicy.ts).
228
+ ...POSTING_ADDENDUM_IDS,
229
+ ]);
230
+ }
231
+ function parseScope(raw, file) {
232
+ if (raw === "all" || raw === "lenses")
233
+ return raw;
234
+ const names = raw
235
+ .split(",")
236
+ .map((s) => s.trim())
237
+ .filter((s) => s.length > 0);
238
+ if (names.length === 0)
239
+ throw new Error(`profile addendum ${file}: empty scope`);
240
+ for (const n of names) {
241
+ if (!PASS_NAME_RE.test(n)) {
242
+ throw new Error(`profile addendum ${file}: unknown scope "${raw}" — use "all", "lenses", or a comma-separated list of pass names (pass-…)`);
243
+ }
244
+ // A well-shaped name no pass carries matches nothing at composition
245
+ // (addendumApplies is an exact match), so the rule would bind silently
246
+ // nowhere — refuse it, as [lenses] tables are refused.
247
+ if (!ALL_PASSES.includes(n) && n !== SCAN_PASS) {
248
+ throw new Error(`profile addendum ${file}: unknown pass "${n}" in scope "${raw}" — no pass carries that name`);
249
+ }
250
+ }
251
+ return names;
252
+ }
253
+ /** Parse ONE addendum file's raw bytes. Throws (naming `file`) on anything
254
+ * malformed — the loud-failure contract. */
255
+ export function parseProfileAddendum(file, raw) {
256
+ const doc = splitFrontmatter(raw);
257
+ if (!doc.hasFrontmatter) {
258
+ throw new Error(`profile addendum ${file}: missing frontmatter (--- id/scope fences)`);
259
+ }
260
+ const fields = new Map();
261
+ for (const line of doc.frontmatter.split("\n")) {
262
+ if (line.trim() === "")
263
+ continue;
264
+ const m = /^(id|scope):[ \t]*(.+?)[ \t]*$/.exec(line);
265
+ if (!m)
266
+ throw new Error(`profile addendum ${file}: unrecognized frontmatter line "${line}" — only "id:" and "scope:" are allowed`);
267
+ const key = m[1];
268
+ const value = m[2];
269
+ if (fields.has(key))
270
+ throw new Error(`profile addendum ${file}: duplicate frontmatter key "${key}"`);
271
+ fields.set(key, value);
272
+ }
273
+ const id = fields.get("id");
274
+ if (id === undefined)
275
+ throw new Error(`profile addendum ${file}: missing "id:" in frontmatter`);
276
+ if (!ID_RE.test(id))
277
+ throw new Error(`profile addendum ${file}: id "${id}" must be kebab-case ([a-z0-9-])`);
278
+ const rawScope = fields.get("scope");
279
+ if (rawScope === undefined)
280
+ throw new Error(`profile addendum ${file}: missing "scope:" in frontmatter`);
281
+ const scope = parseScope(rawScope, file);
282
+ if (doc.body.trim() === "")
283
+ throw new Error(`profile addendum ${file}: empty body`);
284
+ // "\n" + verbatim body: byte-compatible with the compiled-in constants,
285
+ // which each begin with a newline separator.
286
+ return { id, scope, text: `\n${doc.body}` };
287
+ }
288
+ function mustBeDir(path, what) {
289
+ let ok = false;
290
+ try {
291
+ ok = statSync(path).isDirectory();
292
+ }
293
+ catch {
294
+ ok = false;
295
+ }
296
+ if (!ok)
297
+ throw new Error(`${what}: ${path} is not a directory`);
298
+ }
299
+ /** Load ONE profile's own pack (no inheritance), in filename order. A
300
+ * profile that extends another may omit `addenda/` (it inherits its pack);
301
+ * one that extends nothing must have it. */
302
+ function loadOwnPack(layer) {
303
+ const addendaDir = join(layer.dir, "addenda");
304
+ if ((layer.extends !== undefined || layer.optionalPack) && !existsSync(addendaDir))
305
+ return [];
306
+ mustBeDir(addendaDir, `[review] profile "${layer.name}" has no addenda/ directory`);
307
+ const files = readdirSync(addendaDir)
308
+ .filter((f) => f.endsWith(".md"))
309
+ .sort();
310
+ const reserved = reservedAddendumIds();
311
+ const seen = new Set();
312
+ const loaded = [];
313
+ for (const f of files) {
314
+ const path = join(addendaDir, f);
315
+ const entry = parseProfileAddendum(path, readFileSync(path, "utf8"));
316
+ if (reserved.has(entry.id)) {
317
+ throw new Error(`profile addendum ${path}: id "${entry.id}" collides with a built-in registry entry`);
318
+ }
319
+ if (LENS_TUNING_ID_PREFIXES.some((p) => entry.id.startsWith(p))) {
320
+ throw new Error(`profile addendum ${path}: id "${entry.id}" is reserved for the addenda [lenses] compiles (emphasis, max_severity, guide)`);
321
+ }
322
+ if (seen.has(entry.id))
323
+ throw new Error(`profile addendum ${path}: duplicate id "${entry.id}" within the pack`);
324
+ seen.add(entry.id);
325
+ loaded.push(entry);
326
+ }
327
+ return loaded;
328
+ }
329
+ /**
330
+ * Load the named profile's addenda pack — its whole `extends` chain merged —
331
+ * in composition order.
332
+ *
333
+ * Within one pack the order is ascending filename sort and nothing else;
334
+ * across a chain the base's entries come first, a child's entry with an
335
+ * inherited id takes that entry's PLACE (replace in place, so a child can
336
+ * reword a base rule without reordering the pack), and a new id appends.
337
+ * `[addenda] drop` removes inherited ids before the child's own pack merges,
338
+ * so dropping an id and defining it again moves it to the tail. A drop that
339
+ * names nothing inherited is refused — a built-in registry entry can never be
340
+ * dropped by a profile, and a typo must not silently read as a removal.
341
+ * Deterministic by construction, so a rebuild of an unchanged tree stays
342
+ * byte-identical, same contract as the compiled-in registry's declaration
343
+ * order. Every failure is a throw; the caller (wire.ts, at daemon assembly)
344
+ * is expected to let it crash the boot rather than review with a partial
345
+ * pack.
346
+ */
347
+ export function loadProfileAddenda(root, profile, lookup = {}) {
348
+ const reserved = reservedAddendumIds();
349
+ let merged = [];
350
+ for (const layer of chainOf(root, profile, lookup, false)) {
351
+ for (const id of layer.drop) {
352
+ if (!merged.some((a) => a.id === id)) {
353
+ const why = reserved.has(id)
354
+ ? "a built-in registry entry, which no profile can drop"
355
+ : "no profile it extends defines it";
356
+ throw new Error(`[review] profile "${layer.name}": ${layer.toml} [addenda] drop names "${id}" — ${why}`);
357
+ }
358
+ merged = merged.filter((a) => a.id !== id);
359
+ }
360
+ for (const entry of loadOwnPack(layer)) {
361
+ const at = merged.findIndex((a) => a.id === entry.id);
362
+ if (at >= 0)
363
+ merged[at] = entry;
364
+ else
365
+ merged.push(entry);
366
+ }
367
+ }
368
+ return merged;
369
+ }
370
+ /**
371
+ * The profile's ecosystem selection: `profiles/<name>/profile.toml`,
372
+ * key `ecosystem = "django" | "none"`.
373
+ *
374
+ * No profile (`""`), a profile found nowhere, or no `ecosystem` key anywhere
375
+ * in its `extends` chain (the nearest profile that sets it wins) all mean
376
+ * `"none"` — a generic install gets no framework-specific machinery (no
377
+ * pre-check, no tier-forcing migration gate, no migration-gate prompt prose)
378
+ * unless its profile asks for it. An unreadable file or an unknown value
379
+ * throws with the path named — a loud boot failure, same contract as the
380
+ * addenda loader above: a daemon must never review under a profile it could
381
+ * not parse.
382
+ *
383
+ * Deliberately its own function rather than a fold into `loadProfileAddenda`:
384
+ * `profile.toml` is the profile's settings file and other loaders may own
385
+ * other keys in it (each reads only its own; unknown keys are not an error
386
+ * here), while `addenda/` stays the addenda loader's alone.
387
+ */
388
+ export function loadProfileEcosystem(root, profile, lookup = {}) {
389
+ // Child wins — the nearest profile in the chain that sets the key.
390
+ // Every layer's value is validated, an overridden one too: a base that
391
+ // names an unknown ecosystem is broken for every other child of it.
392
+ let chosen = "none";
393
+ for (const layer of chainOf(root, profile, lookup, true)) {
394
+ const eco = layer.ecosystem;
395
+ if (eco === undefined)
396
+ continue;
397
+ if (eco !== "django" && eco !== "none") {
398
+ throw new Error(`[review] profile "${layer.name}": ${layer.toml} names unknown ecosystem ${JSON.stringify(eco)} — use "django" or "none"`);
399
+ }
400
+ chosen = eco;
401
+ }
402
+ return chosen;
403
+ }
404
+ // ---- per-lens tuning -------------------------------------------------------
405
+ /**
406
+ * The named profile's per-lens tuning — `[lenses.<pass>]` in `profile.toml`,
407
+ * the whole `extends` chain merged (per lens, per key, the nearest profile
408
+ * that sets it wins). The keys and what each one moves are packages/pi-plugin/src/lenstuning.ts's
409
+ * header; the caller overlays the result on the config with
410
+ * `applyProfileTuning`, which is what makes the profile win over config.toml,
411
+ * the preset and the defaults.
412
+ *
413
+ * `""` (no profile), a profile found nowhere and a chain with no `[lenses]`
414
+ * anywhere all mean `{}` — untuned. Everything malformed, in ANY layer (an
415
+ * overridden base value too — a broken base is broken for every child of it),
416
+ * throws with the file named: same loud-boot contract as the loaders above.
417
+ */
418
+ export function loadProfileLensTuning(root, profile, lookup = {}) {
419
+ let merged = {};
420
+ for (const layer of chainOf(root, profile, lookup, true)) {
421
+ if (layer.lenses === undefined)
422
+ continue;
423
+ const where = `[review] profile "${layer.name}": ${layer.toml}`;
424
+ merged = mergeLensTuning(merged, parseLensTable(where, layer.lenses, ALL_PASSES, layer.dir));
425
+ }
426
+ return merged;
427
+ }
428
+ // ---- the scan table ----------------------------------------------------------
429
+ /**
430
+ * The named profile's overrides of `config.toml [scan]` — `[scan]` in
431
+ * `profile.toml`, the whole `extends` chain merged (per key, the nearest
432
+ * profile that sets it wins). Only `SCAN_PROFILE_KEYS` may appear: how hard
433
+ * stage 1 looks at THIS repo (`effort`, `tier`), whether its candidates are
434
+ * validated (`validator`), and what is not worth reading (`exclude`). The
435
+ * install's operating limits (concurrency, case size, the calibration cap)
436
+ * stay config.toml's.
437
+ *
438
+ * `""`, a profile found nowhere and a chain with no `[scan]` all mean `{}`;
439
+ * anything malformed in any layer throws with the file named.
440
+ */
441
+ export function loadProfileScan(root, profile, lookup = {}) {
442
+ let merged = {};
443
+ for (const layer of chainOf(root, profile, lookup, true)) {
444
+ if (layer.scan === undefined)
445
+ continue;
446
+ const where = `[review] profile "${layer.name}": ${layer.toml}`;
447
+ merged = { ...merged, ...parseScanTable(where, layer.scan, SCAN_PROFILE_KEYS) };
448
+ }
449
+ return merged;
450
+ }
451
+ // ---- the posting policy -------------------------------------------------------
452
+ /**
453
+ * The named profile's posting policy — `[posting]` in `profile.toml`, the
454
+ * whole `extends` chain merged (per key, the nearest profile that sets it
455
+ * wins). Returns only the keys the chain sets; `applyProfilePosting`
456
+ * (packages/pi-plugin/src/postingpolicy.ts) resolves them over today's defaults.
457
+ *
458
+ * `""`, a profile found nowhere and a chain with no `[posting]` all mean `{}`
459
+ * — today's behaviour. Anything malformed in any layer (an overridden base
460
+ * value too) throws with the file named: the loud-boot contract.
461
+ */
462
+ export function loadProfilePosting(root, profile, lookup = {}) {
463
+ let merged = {};
464
+ for (const layer of chainOf(root, profile, lookup, true)) {
465
+ if (layer.posting === undefined)
466
+ continue;
467
+ merged = {
468
+ ...merged,
469
+ ...parsePostingTable(`[review] profile "${layer.name}": ${layer.toml}`, layer.posting),
470
+ };
471
+ }
472
+ return merged;
473
+ }
474
+ /**
475
+ * A parsed config with its profile's overlays applied — the per-lens tuning,
476
+ * then the `[posting]` policy — so `cfg.lenses` and `cfg.posting` are the one
477
+ * resolved answer (the profile wins over config.toml, the preset and the
478
+ * defaults). The daemon's assembly and the regression replay resolve through
479
+ * this one function, so a replay plans rounds exactly as the daemon does.
480
+ */
481
+ export function applyProfileOverlays(root, cfg, lookup = {}) {
482
+ const profile = cfg.review.profile;
483
+ return applyProfilePosting(applyProfileTuning(cfg, loadProfileLensTuning(root, profile, lookup)), loadProfilePosting(root, profile, lookup));
484
+ }
485
+ /** The config with the profile's `[scan]` overrides applied — the profile
486
+ * wins over config.toml, as it does for per-lens tuning. */
487
+ export function applyProfileScan(cfg, overrides) {
488
+ return { ...cfg, scan: { ...cfg.scan, ...overrides } };
489
+ }
490
+ // ---- lens-selection heuristics ---------------------------------------------
491
+ //
492
+ // A profile's `heuristics.toml` carries the repo-shaped lens-selection
493
+ // predicates (framework settings-file globs, management-command dirs, a
494
+ // product-local decorator name, …) as per-lens extra path regexes and
495
+ // added-line probes. The generic selection core stays compiled into
496
+ // `packages/pi-plugin/src/heuristics.ts selectLenses`; the extension can only ADD predicates to
497
+ // the lenses that module already selects by shape — never remove or weaken a
498
+ // compiled-in one, and never touch the addable-only lenses or the body-keyed
499
+ // `pass-intent`.
500
+ //
501
+ // File format — one table per extendable lens, two optional keys each:
502
+ //
503
+ // [pass-security]
504
+ // paths = ['(^|/)settings[^/]*\.py$'] # RegExp sources over filenames
505
+ //
506
+ // [pass-delivery]
507
+ // added_lines = ['@background_task'] # probes over ADDED patch lines
508
+ //
509
+ // `paths` entries are compiled verbatim (case-sensitive, like the compiled-in
510
+ // path predicates). `added_lines` entries are wrapped as `^\+.*(?:…)` with
511
+ // the `im` flags, so each one matches an ADDED unified-diff line containing
512
+ // the pattern, case-insensitively. Anything malformed — an unknown lens, an
513
+ // unknown key, a non-string entry, a regex that does not compile — throws
514
+ // with the offending file and key named: a malformed extension is a loud
515
+ // assembly failure (wire.ts loads it once at boot), never a silent skip.
516
+ // An ABSENT heuristics.toml is not malformed: a profile that only carries
517
+ // addenda simply extends selection with nothing.
518
+ /** Parse ONE heuristics.toml's raw bytes. Throws (naming `file`) on anything
519
+ * malformed — the same loud-failure contract as the addenda pack. */
520
+ export function parseProfileHeuristics(file, raw) {
521
+ let doc;
522
+ try {
523
+ doc = parseToml(raw);
524
+ }
525
+ catch (err) {
526
+ throw new Error(`profile heuristics ${file}: not valid TOML — ${String(err instanceof Error ? err.message : err)}`, { cause: err });
527
+ }
528
+ const paths = {};
529
+ const addedLines = {};
530
+ const compile = (lens, key, value, wrap) => {
531
+ if (!Array.isArray(value) || value.some((v) => typeof v !== "string")) {
532
+ throw new Error(`profile heuristics ${file}: [${lens}] ${key} must be an array of strings`);
533
+ }
534
+ return value.map((src) => {
535
+ if (src.trim() === "")
536
+ throw new Error(`profile heuristics ${file}: [${lens}] ${key} contains an empty pattern`);
537
+ try {
538
+ return wrap(src);
539
+ }
540
+ catch (err) {
541
+ throw new Error(`profile heuristics ${file}: [${lens}] ${key} pattern ${JSON.stringify(src)} is not a valid RegExp — ${String(err instanceof Error ? err.message : err)}`, { cause: err });
542
+ }
543
+ });
544
+ };
545
+ for (const [lens, table] of Object.entries(doc)) {
546
+ if (!PROFILE_EXTENDABLE_LENSES.includes(lens)) {
547
+ throw new Error(`profile heuristics ${file}: [${lens}] is not an extendable lens — allowed: ${PROFILE_EXTENDABLE_LENSES.join(", ")} ` +
548
+ `(pass-intent is body-keyed, pass-placement/pass-simplicity are status/size-computed, ` +
549
+ `pass-concurrency is content-triggered only; pass-ask-human is addable-only by ratified decision)`);
550
+ }
551
+ if (typeof table !== "object" || table === null || Array.isArray(table)) {
552
+ throw new Error(`profile heuristics ${file}: [${lens}] must be a table with "paths" and/or "added_lines" arrays`);
553
+ }
554
+ for (const [key, value] of Object.entries(table)) {
555
+ if (key === "paths") {
556
+ paths[lens] = compile(lens, key, value, (src) => new RegExp(src));
557
+ }
558
+ else if (key === "added_lines") {
559
+ // `^\+.*(?:…)` per probe: an ADDED unified-diff line containing the
560
+ // pattern. Case-insensitive by contract (documented above) — the one
561
+ // deliberate generalisation over the compiled-in probes, which mixed
562
+ // `m` and `im`.
563
+ addedLines[lens] = compile(lens, key, value, (src) => {
564
+ new RegExp(src); // validate the source on its own for a clean error
565
+ return new RegExp(`^\\+.*(?:${src})`, "im");
566
+ });
567
+ }
568
+ else {
569
+ throw new Error(`profile heuristics ${file}: [${lens}] unknown key "${key}" — only "paths" and "added_lines" are allowed`);
570
+ }
571
+ }
572
+ }
573
+ return { paths, addedLines };
574
+ }
575
+ /**
576
+ * Load the named profile's lens-heuristics extension.
577
+ *
578
+ * `""` (no profile) and a profile chain without a `heuristics.toml` anywhere
579
+ * both yield the empty extension — the generic compiled-in core alone.
580
+ * Everything else that is wrong throws; the caller (wire.ts, at daemon
581
+ * assembly) lets it crash the boot rather than review with partial selection
582
+ * knowledge.
583
+ */
584
+ export function loadProfileHeuristics(root, profile, lookup = {}) {
585
+ // Unioned across the chain, per lens, base predicates first —
586
+ // heuristics only ever ADD, so a child can neither drop nor narrow a
587
+ // base's predicate (the same ADD-only contract as against the core).
588
+ const paths = {};
589
+ const addedLines = {};
590
+ let any = false;
591
+ for (const layer of chainOf(root, profile, lookup, false)) {
592
+ const file = join(layer.dir, "heuristics.toml");
593
+ if (!existsSync(file))
594
+ continue;
595
+ any = true;
596
+ const ext = parseProfileHeuristics(file, readFileSync(file, "utf8"));
597
+ for (const [lens, res = []] of Object.entries(ext.paths))
598
+ paths[lens] = [...(paths[lens] ?? []), ...res];
599
+ for (const [lens, res = []] of Object.entries(ext.addedLines))
600
+ addedLines[lens] = [...(addedLines[lens] ?? []), ...res];
601
+ }
602
+ return any ? { paths, addedLines } : EMPTY_HEURISTICS;
603
+ }
604
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** The prompt text a model should read: no doc header, no fence markers. */
2
+ export declare function stripModelDocs(text: string): string;
3
+ //# sourceMappingURL=promptdoc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptdoc.d.ts","sourceRoot":"","sources":["../../src/promptdoc.ts"],"names":[],"mappings":"AAgBA,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}