@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,552 @@
1
+ // The isolated SDK session builder: PiHost, and the ONLY module that imports the
2
+ // pi SDK at runtime (the extension factories are the other, tests/fences-engine
3
+ // pins both). An engine route that needs a pi session, the lens runner
4
+ // included, gets it from PiHost.makeSession and never touches the SDK itself.
5
+ //
6
+ // "Isolated" means the host reads and writes nothing it was not handed:
7
+ //
8
+ // - Every path pi would default to ~/.pi/agent is explicit: one private
9
+ // agentDir, and authPath / modelsPath / modelsStorePath inside it (the
10
+ // defaults are model-runtime.js:81, models-store.js:30 and
11
+ // settings-manager.js:223). PiHost refuses a relative or missing agentDir,
12
+ // so a forgotten path cannot fall through to the operator's home.
13
+ // - The ResourceLoader discovers nothing. No extension, skill, prompt
14
+ // template or theme is read from HOME, the agentDir, the cwd's .pi/ or
15
+ // .agents/ (the reviewed repo is untrusted input), or any ancestor. The
16
+ // only things a session sees are what the spec hands it: extension
17
+ // factories, the system prompt, and the context files (the reviewer
18
+ // stub, as data, never written into a checkout).
19
+ // - The model's bash gets an environment built from an allowlist over the
20
+ // spec's env, with the GitHub token names always stripped (envstrip.ts).
21
+ // - The tool list is an allowlist of exact names. A tool an extension
22
+ // registers that is not on it is dropped.
23
+ // - The model's tools do not reach what holds the run's secrets. Its
24
+ // bash runs as the separate tool uid when the host is given one
25
+ // (`toolUid`, from the image's QCR_TOOL_UID), which the kernel keeps out of
26
+ // /proc/<pid>/mem and environ of this process. Its file tools (read, grep,
27
+ // find, ls, edit, write) run in this process, so each path they are handed
28
+ // goes through a fence (toolfence.ts) that refuses /proc, /run/qcr-in and
29
+ // the agent dirs and the login's source, after resolving symlinks.
30
+ //
31
+ // The HTTP dispatcher follows the dispatcher ruling. pi's CLI installs an undici dispatcher at
32
+ // startup (configureHttpDispatcher, which the package does not export); an
33
+ // SDK host needs the same one, since provider requests and our own GitHub
34
+ // fetches go through it. PiHost deep-imports pi's own function so the settings
35
+ // match exactly, and installs it only when the route says it owns the process.
36
+ // Inside a CLI pi (the debug round, the companion, the pi plugin's commands)
37
+ // the dispatcher is pi's, and PiHost leaves it alone. Canary 6 pins the
38
+ // function and its settings.
39
+ //
40
+ // A host built by an extension of the running pi (`hostPi`, the plugin's
41
+ // /review) knows it is inside pi without the title heuristic, and loads
42
+ // nothing from pi's dist/ by file path: the running pi may be a bundle or a
43
+ // binary whose files are not the package's. pi's own location comes from its
44
+ // exported getPackageDir(), never from a module-path walk.
45
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync } from "node:fs";
46
+ import { access } from "node:fs/promises";
47
+ import { createRequire } from "node:module";
48
+ import { dirname, join, isAbsolute } from "node:path";
49
+ import { pathToFileURL } from "node:url";
50
+ import { randomUUID } from "node:crypto";
51
+ import { DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, createAgentSession, createBashToolDefinition, createFindToolDefinition, createGrepToolDefinition, createLsToolDefinition, createReadToolDefinition, createEditToolDefinition, createWriteToolDefinition, getPackageDir, main as piCliMain, } from "@earendil-works/pi-coding-agent";
52
+ import { isProtectedWriteTarget } from "../../extensions/bash-guard.js";
53
+ import { GITHUB_TOKEN_ENVS } from "../envstrip.js";
54
+ import { FENCED_TOOLS, createToolFence, credentialPaths, fencedOperations, guardedTool, loginSourceDirs, } from "./toolfence.js";
55
+ import { inheritingBashOperations, isolatedBashOperations } from "./tooluid.js";
56
+ // ---- the HTTP dispatcher -------------------------------------------------
57
+ /** Where undici keeps the process-global dispatcher: both Node's bundled fetch
58
+ * and the npm undici pi installs read this one symbol. */
59
+ export const UNDICI_GLOBAL_DISPATCHER = Symbol.for("undici.globalDispatcher.1");
60
+ /** Set on globalThis to the dispatcher PiHost itself installed. */
61
+ const INSTALLED_BY_PIHOST = Symbol.for("qcr.pisdk.dispatcher");
62
+ /** The idle timeout the production routes run pi with (bench/aacr/Dockerfile's
63
+ * project settings). pi's own default is five minutes. */
64
+ export const DEFAULT_HTTP_IDLE_TIMEOUT_MS = 120_000;
65
+ /** The process title pi's CLI gives itself: its APP_NAME (`pi` unless the
66
+ * package's piConfig renames it), with `-rpc` appended by the rpc entry. */
67
+ export function piCliTitles() {
68
+ let name = "pi";
69
+ try {
70
+ const pkg = JSON.parse(readFileSync(join(piPackageDir(), "package.json"), "utf8"));
71
+ name = pkg.piConfig?.name || name;
72
+ }
73
+ catch {
74
+ // pi not found: the default name is the best there is.
75
+ }
76
+ return [name, `${name}-rpc`];
77
+ }
78
+ /** True inside a pi CLI process (setupCli and rpc-entry set both signals): the
79
+ * dispatcher there is pi's own and must never be replaced. The environment flag
80
+ * alone is not proof: pi's bash tool hands it to every child, so a standalone
81
+ * `qcr review` started from a pi session inherits it. The process title is set
82
+ * per process and never inherited, so it must agree. */
83
+ export function insideCliPi(env = process.env, title = process.title) {
84
+ return env["PI_CODING_AGENT"] === "true" && piCliTitles().includes(title);
85
+ }
86
+ /** The directory of the pi package this module runs against: pi's own answer
87
+ * (its exported getPackageDir), so an extension inside a running pi, whose
88
+ * package directory holds no pi of its own, gets the running one. */
89
+ export function piPackageDir() {
90
+ return getPackageDir();
91
+ }
92
+ /** pi's own configureHttpDispatcher, deep-imported by file path (the export map
93
+ * does not publish it). It is the same module instance pi's SDK uses, so
94
+ * its fetch bookkeeping stays single. Throws if pi moved or renamed it: that is
95
+ * drift, and canary 6 is where a bump finds out. */
96
+ export async function loadConfigureHttpDispatcher() {
97
+ const file = join(piPackageDir(), "dist", "core", "http-dispatcher.js");
98
+ let mod;
99
+ try {
100
+ mod = createRequire(import.meta.url)(file);
101
+ }
102
+ catch (e) {
103
+ // Node < 22.12 cannot require() an ES module; the import cache is shared either way.
104
+ if (e.code !== "ERR_REQUIRE_ESM")
105
+ throw e;
106
+ mod = (await import(pathToFileURL(file).href));
107
+ }
108
+ if (typeof mod.configureHttpDispatcher !== "function")
109
+ throw new Error(`pi's configureHttpDispatcher is gone from ${file}: the pinned pi drifted from what pisdk.ts deep-imports (canary 6)`);
110
+ return mod.configureHttpDispatcher;
111
+ }
112
+ const CWD_PINNED = Symbol.for("qcr.picwd.pinned");
113
+ /** Make `SessionManager.open` default its cwd to `cwd()` (the launcher's, as its
114
+ * host resolves it) instead of the session header's, the way `resumeFile` below opens a session in the spec's cwd. Idempotent.
115
+ * An explicit override (pi's own missing-cwd recovery) still wins. VERIFY-ON-PIN: pi's
116
+ * CLI reaches the class's static `open` at call time (main.js createSessionManager;
117
+ * tests/picwd.test.ts drives the real one). */
118
+ export function pinSessionCwd(manager, cwd) {
119
+ const holder = manager;
120
+ if (holder[CWD_PINNED])
121
+ return;
122
+ const open = manager.open.bind(manager);
123
+ holder.open = (path, sessionDir, cwdOverride) => open(path, sessionDir, cwdOverride ?? cwd());
124
+ holder[CWD_PINNED] = true;
125
+ }
126
+ /** pi's own CLI entry (its cli.js: setupCli, then main) with the session cwd pinned
127
+ * to `cwd()`, the launching process's (src/picwd.ts). setupCli's steps are repeated
128
+ * here because the package does not export it: the same title and flags (so
129
+ * `insideCliPi` answers as in the CLI binary) and the same HTTP dispatcher. */
130
+ export async function runPiCliInCwd(argv, cwd) {
131
+ process.title = piCliTitles()[0];
132
+ process.env["PI_CODING_AGENT"] = "true";
133
+ process.env["AI_AGENT"] = "pi";
134
+ process.emitWarning = () => { };
135
+ (await loadConfigureHttpDispatcher())();
136
+ pinSessionCwd(SessionManager, cwd);
137
+ await piCliMain(argv);
138
+ }
139
+ let imageSniffer;
140
+ /** pi's own image sniffer (utils/mime.js), deep-imported the way the dispatcher
141
+ * is: the fenced read tool tells an image from its first bytes with it. Null
142
+ * where pi moved it: a file is then read as text, never as an image. */
143
+ export function loadImageSniffer() {
144
+ imageSniffer ??= (async () => {
145
+ try {
146
+ const file = join(piPackageDir(), "dist", "utils", "mime.js");
147
+ const mod = (await import(pathToFileURL(file).href));
148
+ return typeof mod.detectSupportedImageMimeType === "function"
149
+ ? mod.detectSupportedImageMimeType
150
+ : null;
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ })();
156
+ return imageSniffer;
157
+ }
158
+ /**
159
+ * Make sure provider requests (and every Node fetch in the process) go through
160
+ * pi's dispatcher, installing it at most once and only when `ownsProcess`.
161
+ *
162
+ * Inside a CLI pi the dispatcher is pi's own and is never touched, whatever the
163
+ * route claims. Nor is one that PiHost installed and something else has since
164
+ * replaced. (undici wraps every dispatcher it is given, and Node creates its own
165
+ * lazily on the first fetch, so a dispatcher cannot be recognised as pi's by
166
+ * looking at it: the flag and title pi's CLI sets, and PiHost's own marker,
167
+ * are the facts there are.)
168
+ */
169
+ export async function ensureHttpDispatcher(o) {
170
+ const g = globalThis;
171
+ if (o.hostPi === true || insideCliPi())
172
+ return "reused";
173
+ const ours = g[INSTALLED_BY_PIHOST];
174
+ if (ours !== undefined)
175
+ return g[UNDICI_GLOBAL_DISPATCHER] === ours ? "installed" : "reused";
176
+ if (!o.ownsProcess)
177
+ return "none";
178
+ (await loadConfigureHttpDispatcher())(o.idleTimeoutMs);
179
+ g[INSTALLED_BY_PIHOST] = g[UNDICI_GLOBAL_DISPATCHER];
180
+ return "installed";
181
+ }
182
+ // ---- the model's bash environment ---------------------------------------------
183
+ /** Names (or `PREFIX*` patterns) of the spec's env the model's bash receives by
184
+ * default. A route adds its own through `bashEnv.allow`. */
185
+ export const DEFAULT_BASH_ENV_ALLOW = [
186
+ "PATH",
187
+ "HOME",
188
+ "USER",
189
+ "LOGNAME",
190
+ "SHELL",
191
+ "LANG",
192
+ "LANGUAGE",
193
+ "LC_*",
194
+ "TERM",
195
+ "TZ",
196
+ "TMPDIR",
197
+ ];
198
+ /** The session identity pi itself puts in the bash env (bash.js:137-153); the
199
+ * tool's prompt text promises them, so they pass. */
200
+ const PI_SESSION_ENV = [
201
+ "PI_SESSION_ID",
202
+ "PI_SESSION_FILE",
203
+ "PI_PROVIDER",
204
+ "PI_MODEL",
205
+ "PI_REASONING_LEVEL",
206
+ ];
207
+ function allowed(name, patterns) {
208
+ return patterns.some((p) => (p.endsWith("*") ? name.startsWith(p.slice(0, -1)) : name === p));
209
+ }
210
+ /**
211
+ * The environment of one bash call: the spec's env filtered by the allowlist,
212
+ * pi's session identity, the route's explicit values, and never a GitHub token.
213
+ * The process's own env is not a source: a token the host holds cannot leak
214
+ * through here whatever the allowlist says.
215
+ */
216
+ export function buildBashEnv(specEnv, piEnv, options = {}) {
217
+ const patterns = [...DEFAULT_BASH_ENV_ALLOW, ...(options.allow ?? [])];
218
+ const env = {};
219
+ for (const [name, value] of Object.entries(specEnv))
220
+ if (value !== undefined && allowed(name, patterns))
221
+ env[name] = value;
222
+ for (const name of PI_SESSION_ENV) {
223
+ const value = piEnv[name];
224
+ if (value !== undefined)
225
+ env[name] = value;
226
+ }
227
+ Object.assign(env, options.set);
228
+ for (const name of GITHUB_TOKEN_ENVS)
229
+ delete env[name];
230
+ return env;
231
+ }
232
+ // ---- provider auth discovery that does not look in HOME ------------------------
233
+ /** pi-ai's default auth context expands `~` to the operator's home to look for
234
+ * ambient credentials (google-vertex checks ~/.config/gcloud for ADC). A review
235
+ * host takes its credentials from the auth file it was given and from env, so
236
+ * `~` paths are simply absent. */
237
+ const ISOLATED_AUTH_CONTEXT = {
238
+ async env(name) {
239
+ const value = process.env[name];
240
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
241
+ },
242
+ async fileExists(path) {
243
+ if (path.startsWith("~"))
244
+ return false;
245
+ try {
246
+ await access(path);
247
+ return true;
248
+ }
249
+ catch {
250
+ return false;
251
+ }
252
+ },
253
+ };
254
+ /** ModelRuntime builds its provider collection with pi-ai's default context and
255
+ * exposes no way to pass another, so swap it on the collection. Fails closed:
256
+ * a pi that moved the field has to be looked at (canary 4). */
257
+ function isolateProviderAuth(runtime) {
258
+ const models = runtime.models;
259
+ if (!models || typeof models.authContext !== "object" || models.authContext === null)
260
+ throw new Error("pi's ModelRuntime no longer holds an authContext pisdk.ts isolates (canary 4)");
261
+ models.authContext = ISOLATED_AUTH_CONTEXT;
262
+ }
263
+ // ---- the resource loader that discovers nothing -------------------------------
264
+ /** What a package manager resolves to when there is nothing to resolve. */
265
+ const NO_RESOURCES = { extensions: [], skills: [], prompts: [], themes: [] };
266
+ class IsolatedResourceLoader extends DefaultResourceLoader {
267
+ constructor(o) {
268
+ super({
269
+ cwd: o.cwd,
270
+ agentDir: o.agentDir,
271
+ settingsManager: o.settingsManager,
272
+ extensionFactories: [...o.extensionFactories],
273
+ noExtensions: true,
274
+ noSkills: true,
275
+ noPromptTemplates: true,
276
+ noThemes: true,
277
+ noContextFiles: true,
278
+ // The belts to the switches' braces: whatever a discovery path still
279
+ // turned up (an extension's resources_discover, a pi that stops honouring
280
+ // a switch) is dropped here. This is where $HOME/.agents/skills is closed
281
+ // on the SDK route.
282
+ skillsOverride: () => ({ skills: [], diagnostics: [] }),
283
+ promptsOverride: () => ({ prompts: [], diagnostics: [] }),
284
+ themesOverride: () => ({ themes: [], diagnostics: [] }),
285
+ agentsFilesOverride: () => ({ agentsFiles: o.agentsFiles.map((f) => ({ ...f })) }),
286
+ systemPromptOverride: () => o.systemPrompt,
287
+ appendSystemPromptOverride: () => [...o.appendSystemPrompt],
288
+ });
289
+ // reload() asks the package manager to scan HOME (~/.agents/skills), the
290
+ // agentDir and every cwd ancestor before any switch applies, so the switches
291
+ // alone still read those directories. Nothing there may be read at all:
292
+ // replace the scan with an empty answer. Fail closed if pi's shape moves.
293
+ const self = this;
294
+ const pm = self.packageManager;
295
+ if (!pm ||
296
+ typeof pm["resolve"] !== "function" ||
297
+ typeof pm["resolveExtensionSources"] !== "function")
298
+ throw new Error("pi's DefaultResourceLoader no longer has the package manager pisdk.ts isolates (canary 4)");
299
+ pm["resolve"] = async () => NO_RESOURCES;
300
+ pm["resolveExtensionSources"] = async () => NO_RESOURCES;
301
+ }
302
+ }
303
+ /** pi's own default tool set at the pin (DEFAULT_TOOL_NAMES). Canary 5 holds it. */
304
+ export const DEFAULT_TOOLS = ["read", "bash", "edit", "write"];
305
+ function checkToolAllowlist(tools) {
306
+ for (const t of tools)
307
+ if (!/^[A-Za-z0-9_][A-Za-z0-9_.:-]*$/.test(t))
308
+ throw new Error(`tool allowlist entries are exact names, got ${JSON.stringify(t)}`);
309
+ }
310
+ function resolveModel(runtime, model) {
311
+ if (typeof model !== "string")
312
+ return model;
313
+ const at = model.indexOf("/");
314
+ const found = at > 0 ? runtime.getModel(model.slice(0, at), model.slice(at + 1)) : undefined;
315
+ if (!found)
316
+ throw new Error(`model ${JSON.stringify(model)} is not known to the host`);
317
+ return found;
318
+ }
319
+ /** The id a session JSONL's header carries; null when the file does not start
320
+ * with a session header. */
321
+ export function headerId(file) {
322
+ let first;
323
+ try {
324
+ // The header is the first line; a transcript can run to megabytes.
325
+ const fd = openSync(file, "r");
326
+ try {
327
+ const buf = Buffer.alloc(64 * 1024);
328
+ first = buf.toString("utf8", 0, readSync(fd, buf, 0, buf.length, 0)).split("\n", 1)[0];
329
+ }
330
+ finally {
331
+ closeSync(fd);
332
+ }
333
+ }
334
+ catch {
335
+ return null;
336
+ }
337
+ try {
338
+ const h = JSON.parse(first ?? "");
339
+ return h.type === "session" && typeof h.id === "string" && h.id !== "" ? h.id : null;
340
+ }
341
+ catch {
342
+ return null;
343
+ }
344
+ }
345
+ /** The session manager a spec asks for. A session file that already exists is a
346
+ * resume, not a create, and is refused for `sessionFile`: nothing opens an old
347
+ * session by accident. A resume names its file as `resumeFile`, which must hold
348
+ * a session header: pi would otherwise start a fresh session (a new id, so a
349
+ * cold prompt cache) at a missing or empty path. */
350
+ function sessionManagerFor(spec) {
351
+ const { persist, sessionManager } = spec;
352
+ if (spec.sessionId !== undefined && (sessionManager || (persist && !("sessionDir" in persist))))
353
+ throw new Error("sessionId names a new session: not with a sessionManager, a sessionFile or a resumeFile");
354
+ if (spec.sessionId === "")
355
+ throw new Error("sessionId must not be empty");
356
+ if (sessionManager) {
357
+ if (persist)
358
+ throw new Error("give a sessionManager or persist, not both");
359
+ return sessionManager;
360
+ }
361
+ if (persist && "resumeFile" in persist) {
362
+ const file = persist.resumeFile;
363
+ if (!isAbsolute(file))
364
+ throw new Error(`a session file must be absolute, got ${file}`);
365
+ const id = headerId(file);
366
+ if (id === null)
367
+ throw new Error(`${file} is not a session JSONL to resume`);
368
+ // The cwd override keeps the session in the spec's cwd (the header's belongs
369
+ // to the machine that wrote it); the header on disk is not rewritten.
370
+ const manager = SessionManager.open(file, dirname(file), spec.cwd);
371
+ if (manager.getSessionId() !== id)
372
+ throw new Error(`resuming ${file} changed the session id (${id} -> ${manager.getSessionId()})`);
373
+ return manager;
374
+ }
375
+ if (persist && "sessionFile" in persist) {
376
+ const file = persist.sessionFile;
377
+ if (!isAbsolute(file))
378
+ throw new Error(`a session file must be absolute, got ${file}`);
379
+ if (existsSync(file))
380
+ throw new Error(`session file ${file} already exists`);
381
+ // open() on a path that does not exist yet is how pi starts a session at a
382
+ // chosen file; the cwd override keeps the header's cwd the spec's.
383
+ return SessionManager.open(file, dirname(file), spec.cwd);
384
+ }
385
+ if (persist)
386
+ return SessionManager.create(spec.cwd, persist.sessionDir, spec.sessionId !== undefined ? { id: spec.sessionId } : undefined);
387
+ // VERIFY-ON-PIN (pi 1.3.0, re-read at 1.4.0): inMemory({id}) sets the session id the provider
388
+ // keys its cache on (prompt_cache_key, session-id, x-client-request-id).
389
+ return SessionManager.inMemory(spec.cwd, { id: spec.sessionId ?? randomUUID() });
390
+ }
391
+ export class PiHost {
392
+ options;
393
+ agentDir;
394
+ modelRuntime;
395
+ /** What the host found or did about the HTTP dispatcher. */
396
+ dispatcher;
397
+ httpIdleTimeoutMs;
398
+ /** What the file tools are kept out of, or null. */
399
+ fence;
400
+ sessions = new Set();
401
+ constructor(options, modelRuntime, dispatcher, httpIdleTimeoutMs) {
402
+ this.options = options;
403
+ this.agentDir = options.agentDir;
404
+ this.modelRuntime = modelRuntime;
405
+ this.dispatcher = dispatcher;
406
+ this.httpIdleTimeoutMs = httpIdleTimeoutMs;
407
+ this.fence =
408
+ options.fence === false
409
+ ? null
410
+ : (options.fence ??
411
+ createToolFence({
412
+ protectedWrite: isProtectedWriteTarget,
413
+ dirs: [
414
+ options.agentDir,
415
+ ...(options.homeDir !== undefined ? [join(options.homeDir, ".pi")] : []),
416
+ ...loginSourceDirs(process.env),
417
+ ...credentialPaths(process.env),
418
+ ...(options.fenceDirs ?? []),
419
+ ],
420
+ }));
421
+ }
422
+ static async create(options) {
423
+ if (!isAbsolute(options.agentDir))
424
+ throw new Error(`PiHost needs an absolute private agentDir, got ${options.agentDir}`);
425
+ mkdirSync(options.agentDir, { recursive: true });
426
+ const idle = options.httpIdleTimeoutMs ?? DEFAULT_HTTP_IDLE_TIMEOUT_MS;
427
+ if (options.hostPi === true && options.ownsProcess === true)
428
+ throw new Error("a host inside a running pi does not own its process");
429
+ const dispatcher = await ensureHttpDispatcher({
430
+ ownsProcess: options.ownsProcess ?? false,
431
+ idleTimeoutMs: idle,
432
+ ...(options.hostPi === true ? { hostPi: true } : {}),
433
+ });
434
+ const runtime = await ModelRuntime.create({
435
+ authPath: join(options.agentDir, "auth.json"),
436
+ modelsPath: join(options.agentDir, "models.json"),
437
+ modelsStorePath: join(options.agentDir, "models-store.json"),
438
+ ...(options.credentials ? { credentials: options.credentials } : {}),
439
+ // No catalog refresh over the network at create: a review run does not
440
+ // wait on, or leak to, a model-list endpoint.
441
+ refreshOnCreate: false,
442
+ });
443
+ isolateProviderAuth(runtime);
444
+ await options.configureModels?.(runtime);
445
+ return new PiHost(options, runtime, dispatcher, idle);
446
+ }
447
+ /** A fresh settings manager per session: sessions never share mutable
448
+ * settings, and project settings (the reviewed repo's .pi/) are never read. */
449
+ settings() {
450
+ return SettingsManager.inMemory({ httpIdleTimeoutMs: this.httpIdleTimeoutMs, ...this.options.settings }, { projectTrusted: false });
451
+ }
452
+ /** The file tools of the allowlist, behind the fence. None when there is no fence. */
453
+ async fileTools(cwd, names) {
454
+ const fence = this.fence;
455
+ if (fence === null)
456
+ return [];
457
+ const ops = fencedOperations(fence, this.options.hostPi === true ? null : await loadImageSniffer());
458
+ const make = {
459
+ read: () => createReadToolDefinition(cwd, { operations: ops.read }),
460
+ grep: () => createGrepToolDefinition(cwd, { operations: ops.grep }),
461
+ find: () => createFindToolDefinition(cwd),
462
+ ls: () => createLsToolDefinition(cwd, { operations: ops.ls }),
463
+ edit: () => createEditToolDefinition(cwd, { operations: ops.edit }),
464
+ write: () => createWriteToolDefinition(cwd, { operations: ops.write }),
465
+ };
466
+ return FENCED_TOOLS.filter((n) => names.includes(n)).map((n) => guardedTool(make[n](), fence, cwd, this.options.homeDir));
467
+ }
468
+ /**
469
+ * One isolated, extension-bound session. The caller owns it: dispose it, or
470
+ * dispose the host to dispose every session it made.
471
+ */
472
+ async makeSession(spec) {
473
+ const tools = [...(spec.tools ?? DEFAULT_TOOLS)];
474
+ checkToolAllowlist(tools);
475
+ const sessionManager = sessionManagerFor(spec);
476
+ const settingsManager = this.settings();
477
+ const resourceLoader = new IsolatedResourceLoader({
478
+ cwd: spec.cwd,
479
+ agentDir: this.agentDir,
480
+ settingsManager,
481
+ extensionFactories: spec.extensions ?? [],
482
+ systemPrompt: spec.systemPrompt,
483
+ appendSystemPrompt: spec.appendSystemPrompt ?? [],
484
+ agentsFiles: spec.agentsFiles ?? this.options.agentsFiles ?? [],
485
+ });
486
+ await resourceLoader.reload();
487
+ // The model's bash: its environment from the allowlist, and, where the host
488
+ // has a tool uid, its command run as that uid (tooluid.ts).
489
+ const bash = createBashToolDefinition(spec.cwd, {
490
+ spawnHook: (ctx) => ({
491
+ command: ctx.command,
492
+ cwd: ctx.cwd,
493
+ env: buildBashEnv(spec.env, ctx.env, spec.bashEnv),
494
+ }),
495
+ ...(this.options.toolUid
496
+ ? {
497
+ operations: isolatedBashOperations(this.options.toolUid, this.options.setprivBin, spec.inheritFds),
498
+ }
499
+ : spec.inheritFds?.length
500
+ ? { operations: inheritingBashOperations(spec.inheritFds) }
501
+ : {}),
502
+ });
503
+ const files = await this.fileTools(spec.cwd, tools);
504
+ const { session } = await createAgentSession({
505
+ cwd: spec.cwd,
506
+ agentDir: this.agentDir,
507
+ model: resolveModel(this.modelRuntime, spec.model),
508
+ ...(spec.thinkingLevel ? { thinkingLevel: spec.thinkingLevel } : {}),
509
+ modelRuntime: this.modelRuntime,
510
+ resourceLoader,
511
+ sessionManager,
512
+ settingsManager,
513
+ tools,
514
+ customTools: [bash, ...files, ...(spec.customTools ?? [])],
515
+ });
516
+ try {
517
+ await session.bindExtensions({ onError: spec.onExtensionError });
518
+ // The allowlist is enforced by pi; this is the host checking pi's work.
519
+ const stray = session
520
+ .getAllTools()
521
+ .map((t) => t.name)
522
+ .filter((name) => !tools.includes(name));
523
+ if (stray.length > 0)
524
+ throw new Error(`tools outside the allowlist are registered: ${stray.join(", ")}`);
525
+ }
526
+ catch (e) {
527
+ session.dispose();
528
+ throw e;
529
+ }
530
+ this.sessions.add(session);
531
+ return session;
532
+ }
533
+ /** Dispose every session this host made. Idempotent. */
534
+ dispose() {
535
+ for (const s of this.sessions) {
536
+ try {
537
+ s.dispose();
538
+ }
539
+ catch {
540
+ /* already disposed */
541
+ }
542
+ }
543
+ this.sessions.clear();
544
+ }
545
+ }
546
+ /** pi's own parse of a session file, as a worker's first act on it: open it and
547
+ * rebuild the context. No session is started and nothing is written to `file`.
548
+ * The cutover preflight (src/preflight.ts) resumes every open PR's JSONL with it. */
549
+ export function openSessionContext(file, sessionDir, cwd) {
550
+ SessionManager.open(file, sessionDir, cwd).buildSessionContext();
551
+ }
552
+ //# sourceMappingURL=pisdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pisdk.js","sourceRoot":"","sources":["../../../src/engine/pisdk.ts"],"names":[],"mappings":"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"}