infraweaver 0.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 (524) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +244 -0
  3. package/dist/agents/claude.d.ts +113 -0
  4. package/dist/agents/claudePretoolGate.d.ts +137 -0
  5. package/dist/agents/dispatchMetrics.d.ts +77 -0
  6. package/dist/agents/gateServer.d.ts +7 -0
  7. package/dist/agents/index.d.ts +6 -0
  8. package/dist/agents/nativeFsDenies.d.ts +46 -0
  9. package/dist/agents/opencode.d.ts +284 -0
  10. package/dist/agents/opencodePlugin.d.ts +96 -0
  11. package/dist/agents/opencodeShared.d.ts +40 -0
  12. package/dist/agents/postRun.d.ts +126 -0
  13. package/dist/agents/reviewer.d.ts +41 -0
  14. package/dist/agents/sessionLabeler.d.ts +97 -0
  15. package/dist/agents/shared.d.ts +246 -0
  16. package/dist/agents/subagentModels.d.ts +19 -0
  17. package/dist/agents/tokenQuota.d.ts +118 -0
  18. package/dist/agents/writeGateSource.d.ts +22 -0
  19. package/dist/agents/writePolicy.d.ts +79 -0
  20. package/dist/brand.d.ts +67 -0
  21. package/dist/cli.mjs +247846 -0
  22. package/dist/external.d.ts +227 -0
  23. package/dist/i18n/scaffolding.d.ts +59 -0
  24. package/dist/index.d.ts +6 -0
  25. package/dist/index.js +247061 -0
  26. package/dist/internal/index.d.ts +18 -0
  27. package/dist/internal.js +2398 -0
  28. package/dist/lifecycle.d.ts +2 -0
  29. package/dist/main.d.ts +8 -0
  30. package/dist/mcp/arkConfig.d.ts +1 -0
  31. package/dist/mcp/assess.d.ts +157 -0
  32. package/dist/mcp/capabilityContext.d.ts +71 -0
  33. package/dist/mcp/changeSummary.d.ts +52 -0
  34. package/dist/mcp/checkSuite.d.ts +27 -0
  35. package/dist/mcp/checkout.d.ts +92 -0
  36. package/dist/mcp/comment.d.ts +127 -0
  37. package/dist/mcp/commitInfo.d.ts +11 -0
  38. package/dist/mcp/crosswalk.d.ts +178 -0
  39. package/dist/mcp/crosswalkDigest.d.ts +1 -0
  40. package/dist/mcp/cyberEssentials.d.ts +24 -0
  41. package/dist/mcp/dashboard.d.ts +125 -0
  42. package/dist/mcp/dependencies.d.ts +12 -0
  43. package/dist/mcp/frameworks.d.ts +74 -0
  44. package/dist/mcp/geminiSanitizer.d.ts +28 -0
  45. package/dist/mcp/git.d.ts +60 -0
  46. package/dist/mcp/guardrails.d.ts +222 -0
  47. package/dist/mcp/issue.d.ts +20 -0
  48. package/dist/mcp/issueComments.d.ts +11 -0
  49. package/dist/mcp/issueEvents.d.ts +11 -0
  50. package/dist/mcp/issueInfo.d.ts +11 -0
  51. package/dist/mcp/labels.d.ts +14 -0
  52. package/dist/mcp/localContext.d.ts +26 -0
  53. package/dist/mcp/moduleExtraction.d.ts +79 -0
  54. package/dist/mcp/moduleTests.d.ts +106 -0
  55. package/dist/mcp/modules.d.ts +198 -0
  56. package/dist/mcp/output.d.ts +16 -0
  57. package/dist/mcp/pathSafety.d.ts +14 -0
  58. package/dist/mcp/policy.d.ts +50 -0
  59. package/dist/mcp/pr.d.ts +64 -0
  60. package/dist/mcp/prInfo.d.ts +11 -0
  61. package/dist/mcp/providerSchema.d.ts +52 -0
  62. package/dist/mcp/review.d.ts +212 -0
  63. package/dist/mcp/reviewComments.d.ts +245 -0
  64. package/dist/mcp/roots.d.ts +60 -0
  65. package/dist/mcp/scope.d.ts +26 -0
  66. package/dist/mcp/selectMode.d.ts +20 -0
  67. package/dist/mcp/server.d.ts +61 -0
  68. package/dist/mcp/shared.d.ts +62 -0
  69. package/dist/mcp/shell.d.ts +58 -0
  70. package/dist/mcp/staleFix.d.ts +138 -0
  71. package/dist/mcp/terraform/azurePrices.d.ts +8 -0
  72. package/dist/mcp/terraform/baseline.d.ts +57 -0
  73. package/dist/mcp/terraform/concernResult.d.ts +38 -0
  74. package/dist/mcp/terraform/cost.d.ts +55 -0
  75. package/dist/mcp/terraform/cspm.d.ts +80 -0
  76. package/dist/mcp/terraform/currency.d.ts +110 -0
  77. package/dist/mcp/terraform/decisions.d.ts +178 -0
  78. package/dist/mcp/terraform/eidas.d.ts +100 -0
  79. package/dist/mcp/terraform/evidence.d.ts +343 -0
  80. package/dist/mcp/terraform/findings.d.ts +76 -0
  81. package/dist/mcp/terraform/fixMemory.d.ts +81 -0
  82. package/dist/mcp/terraform/governance.d.ts +56 -0
  83. package/dist/mcp/terraform/hcl.d.ts +115 -0
  84. package/dist/mcp/terraform/iacLanguages.d.ts +120 -0
  85. package/dist/mcp/terraform/idleFloor.d.ts +78 -0
  86. package/dist/mcp/terraform/keyless.d.ts +68 -0
  87. package/dist/mcp/terraform/moduleDocs.d.ts +56 -0
  88. package/dist/mcp/terraform/nativeRules.d.ts +38 -0
  89. package/dist/mcp/terraform/nativeScan.d.ts +11 -0
  90. package/dist/mcp/terraform/noiseProfile.d.ts +100 -0
  91. package/dist/mcp/terraform/normalization.d.ts +52 -0
  92. package/dist/mcp/terraform/oscal.d.ts +103 -0
  93. package/dist/mcp/terraform/packs/azurerm-3-4.d.ts +2 -0
  94. package/dist/mcp/terraform/packs/cloudflare-4-5.d.ts +2 -0
  95. package/dist/mcp/terraform/paths.d.ts +28 -0
  96. package/dist/mcp/terraform/plan.d.ts +157 -0
  97. package/dist/mcp/terraform/planDrift.d.ts +199 -0
  98. package/dist/mcp/terraform/policyAuthor.d.ts +191 -0
  99. package/dist/mcp/terraform/prowlerOcsf.d.ts +136 -0
  100. package/dist/mcp/terraform/refactor.d.ts +183 -0
  101. package/dist/mcp/terraform/registry.d.ts +108 -0
  102. package/dist/mcp/terraform/risk.d.ts +41 -0
  103. package/dist/mcp/terraform/scanSession.d.ts +116 -0
  104. package/dist/mcp/terraform/scannerCache.d.ts +15 -0
  105. package/dist/mcp/terraform/scannerEgress.d.ts +72 -0
  106. package/dist/mcp/terraform/scannerJson.d.ts +13 -0
  107. package/dist/mcp/terraform/scanners.d.ts +205 -0
  108. package/dist/mcp/terraform/signing.d.ts +61 -0
  109. package/dist/mcp/terraform/stateLocking.d.ts +18 -0
  110. package/dist/mcp/terraform/subprocess.d.ts +43 -0
  111. package/dist/mcp/terraform/suppressions.d.ts +90 -0
  112. package/dist/mcp/terraform/taxonomy.d.ts +39 -0
  113. package/dist/mcp/terraform/tfquery.d.ts +47 -0
  114. package/dist/mcp/terraform/toolchainIntegrity.d.ts +82 -0
  115. package/dist/mcp/terraform/tools/authorPolicy.d.ts +59 -0
  116. package/dist/mcp/terraform/tools/detectPlanDrift.d.ts +20 -0
  117. package/dist/mcp/terraform/tools/emitCost.d.ts +11 -0
  118. package/dist/mcp/terraform/tools/emitSarif.d.ts +14 -0
  119. package/dist/mcp/terraform/tools/fixMemory.d.ts +19 -0
  120. package/dist/mcp/terraform/tools/infracostDiff.d.ts +22 -0
  121. package/dist/mcp/terraform/tools/ingestExternalFindings.d.ts +21 -0
  122. package/dist/mcp/terraform/tools/moduleLookup.d.ts +14 -0
  123. package/dist/mcp/terraform/tools/moduleSearch.d.ts +23 -0
  124. package/dist/mcp/terraform/tools/plan.d.ts +59 -0
  125. package/dist/mcp/terraform/tools/providerUpgrade.d.ts +55 -0
  126. package/dist/mcp/terraform/tools/readFindings.d.ts +17 -0
  127. package/dist/mcp/terraform/tools/scan.d.ts +114 -0
  128. package/dist/mcp/terraform/tools/validate.d.ts +31 -0
  129. package/dist/mcp/terraform/tools/verifyRemediation.d.ts +31 -0
  130. package/dist/mcp/terraform/tools/versionCurrency.d.ts +5 -0
  131. package/dist/mcp/terraform/tools.d.ts +16 -0
  132. package/dist/mcp/terraform/transformPacks.d.ts +267 -0
  133. package/dist/mcp/terraform/types.d.ts +226 -0
  134. package/dist/mcp/terraform/verification.d.ts +81 -0
  135. package/dist/mcp/terraform/vex.d.ts +115 -0
  136. package/dist/mcp/terraform/writeOnly.d.ts +67 -0
  137. package/dist/mcp/terraform.d.ts +51 -0
  138. package/dist/mcp/terratest.d.ts +85 -0
  139. package/dist/mcp/untrustedContent.d.ts +76 -0
  140. package/dist/mcp/upload.d.ts +8 -0
  141. package/dist/models.d.ts +181 -0
  142. package/dist/modes/address-reviews.d.ts +2 -0
  143. package/dist/modes/assess.d.ts +2 -0
  144. package/dist/modes/build.d.ts +2 -0
  145. package/dist/modes/compliance-audit.d.ts +2 -0
  146. package/dist/modes/cost-optimization.d.ts +2 -0
  147. package/dist/modes/drift-detect.d.ts +2 -0
  148. package/dist/modes/fix.d.ts +2 -0
  149. package/dist/modes/incremental-review.d.ts +2 -0
  150. package/dist/modes/index.d.ts +24 -0
  151. package/dist/modes/modernize-deprecated.d.ts +2 -0
  152. package/dist/modes/plan.d.ts +2 -0
  153. package/dist/modes/policy-gate.d.ts +2 -0
  154. package/dist/modes/prFormats.d.ts +3 -0
  155. package/dist/modes/refactor.d.ts +2 -0
  156. package/dist/modes/refresh-remediation.d.ts +2 -0
  157. package/dist/modes/remediate-and-refactor.d.ts +2 -0
  158. package/dist/modes/remediate.d.ts +2 -0
  159. package/dist/modes/resolve-conflicts.d.ts +2 -0
  160. package/dist/modes/review.d.ts +2 -0
  161. package/dist/modes/summarize-pr.d.ts +2 -0
  162. package/dist/modes/task.d.ts +2 -0
  163. package/dist/modes/terraform-code-review.d.ts +2 -0
  164. package/dist/modes/types.d.ts +9 -0
  165. package/dist/modes/update-dependencies.d.ts +2 -0
  166. package/dist/prep/index.d.ts +7 -0
  167. package/dist/prep/installNodeDependencies.d.ts +2 -0
  168. package/dist/prep/installPythonDependencies.d.ts +2 -0
  169. package/dist/prep/types.d.ts +31 -0
  170. package/dist/reviewQuality.d.ts +107 -0
  171. package/dist/skills/terraform-best-practices/SKILL.md +379 -0
  172. package/dist/toolState.d.ts +123 -0
  173. package/dist/utils/activity.d.ts +40 -0
  174. package/dist/utils/agent.d.ts +47 -0
  175. package/dist/utils/agentHangReport.d.ts +38 -0
  176. package/dist/utils/annotations.d.ts +17 -0
  177. package/dist/utils/apiFetch.d.ts +11 -0
  178. package/dist/utils/apiKeys.d.ts +48 -0
  179. package/dist/utils/apiUrl.d.ts +28 -0
  180. package/dist/utils/assets.d.ts +8 -0
  181. package/dist/utils/baseRefConfig.d.ts +121 -0
  182. package/dist/utils/billingErrors.d.ts +85 -0
  183. package/dist/utils/body.d.ts +34 -0
  184. package/dist/utils/buildInfraweaverFooter.d.ts +29 -0
  185. package/dist/utils/byokFallback.d.ts +85 -0
  186. package/dist/utils/changeImpact.d.ts +101 -0
  187. package/dist/utils/claudeSubscription.d.ts +30 -0
  188. package/dist/utils/cli.d.ts +10 -0
  189. package/dist/utils/cloudClient.d.ts +33 -0
  190. package/dist/utils/cloudFetchCore.d.ts +42 -0
  191. package/dist/utils/cloudReport.d.ts +114 -0
  192. package/dist/utils/codexHome.d.ts +29 -0
  193. package/dist/utils/codexOAuth.d.ts +60 -0
  194. package/dist/utils/diffCoverage.d.ts +63 -0
  195. package/dist/utils/env.d.ts +46 -0
  196. package/dist/utils/errorReport.d.ts +17 -0
  197. package/dist/utils/exitHandler.d.ts +8 -0
  198. package/dist/utils/fixDoubleEscapedString.d.ts +1 -0
  199. package/dist/utils/gitAuth.d.ts +84 -0
  200. package/dist/utils/gitAuthServer.d.ts +24 -0
  201. package/dist/utils/github.d.ts +104 -0
  202. package/dist/utils/globals.d.ts +3 -0
  203. package/dist/utils/infraweaverConfig.d.ts +56 -0
  204. package/dist/utils/install.d.ts +37 -0
  205. package/dist/utils/instructions.d.ts +48 -0
  206. package/dist/utils/keylessOidc.d.ts +28 -0
  207. package/dist/utils/leapingComment.d.ts +11 -0
  208. package/dist/utils/learnings.d.ts +62 -0
  209. package/dist/utils/learningsTruncate.d.ts +25 -0
  210. package/dist/utils/lifecycle.d.ts +57 -0
  211. package/dist/utils/log.d.ts +111 -0
  212. package/dist/utils/modelResolver.d.ts +63 -0
  213. package/dist/utils/moduleFetch.d.ts +39 -0
  214. package/dist/utils/normalizeEnv.d.ts +30 -0
  215. package/dist/utils/openCodeModels.d.ts +11 -0
  216. package/dist/utils/openaiCompatible.d.ts +26 -0
  217. package/dist/utils/opentofuMcp.d.ts +50 -0
  218. package/dist/utils/overrides.d.ts +40 -0
  219. package/dist/utils/packageManager.d.ts +49 -0
  220. package/dist/utils/patchWorkflowRunFields.d.ts +29 -0
  221. package/dist/utils/payload.d.ts +249 -0
  222. package/dist/utils/prSummary.d.ts +61 -0
  223. package/dist/utils/presets.d.ts +36 -0
  224. package/dist/utils/progressComment.d.ts +146 -0
  225. package/dist/utils/providerErrors.d.ts +31 -0
  226. package/dist/utils/proxyModel.d.ts +76 -0
  227. package/dist/utils/rangeDiff.d.ts +51 -0
  228. package/dist/utils/redact.d.ts +33 -0
  229. package/dist/utils/registryAuth.d.ts +52 -0
  230. package/dist/utils/remediationCommand.d.ts +58 -0
  231. package/dist/utils/retry.d.ts +38 -0
  232. package/dist/utils/reviewCleanup.d.ts +14 -0
  233. package/dist/utils/run.d.ts +9 -0
  234. package/dist/utils/runContext.d.ts +112 -0
  235. package/dist/utils/runContextData.d.ts +42 -0
  236. package/dist/utils/runErrorRenderer.d.ts +64 -0
  237. package/dist/utils/runLifecycle.d.ts +89 -0
  238. package/dist/utils/runStartupLog.d.ts +15 -0
  239. package/dist/utils/secrets.d.ts +34 -0
  240. package/dist/utils/setup.d.ts +90 -0
  241. package/dist/utils/shell.d.ts +44 -0
  242. package/dist/utils/skills.d.ts +10 -0
  243. package/dist/utils/subprocess.d.ts +81 -0
  244. package/dist/utils/terraformMcp.d.ts +46 -0
  245. package/dist/utils/time.d.ts +15 -0
  246. package/dist/utils/timer.d.ts +23 -0
  247. package/dist/utils/todoTracking.d.ts +16 -0
  248. package/dist/utils/token.d.ts +52 -0
  249. package/dist/utils/toolLicensing.d.ts +56 -0
  250. package/dist/utils/toolSelection.d.ts +73 -0
  251. package/dist/utils/toon.d.ts +16 -0
  252. package/dist/utils/version.d.ts +2 -0
  253. package/dist/utils/versioning.d.ts +7 -0
  254. package/dist/utils/vertex.d.ts +16 -0
  255. package/dist/utils/workflow.d.ts +13 -0
  256. package/package.json +132 -0
  257. package/src/agents/claude.ts +1588 -0
  258. package/src/agents/claudePretoolGate.ts +286 -0
  259. package/src/agents/dispatchMetrics.ts +162 -0
  260. package/src/agents/gateServer.ts +178 -0
  261. package/src/agents/index.ts +10 -0
  262. package/src/agents/nativeFsDenies.ts +164 -0
  263. package/src/agents/opencode.ts +1600 -0
  264. package/src/agents/opencodePlugin.ts +304 -0
  265. package/src/agents/opencodeShared.ts +134 -0
  266. package/src/agents/postRun.ts +615 -0
  267. package/src/agents/reviewer.ts +134 -0
  268. package/src/agents/sessionLabeler.ts +185 -0
  269. package/src/agents/shared.ts +377 -0
  270. package/src/agents/subagentModels.ts +40 -0
  271. package/src/agents/tokenQuota.ts +203 -0
  272. package/src/agents/writeGateSource.ts +148 -0
  273. package/src/agents/writePolicy.ts +132 -0
  274. package/src/brand.ts +84 -0
  275. package/src/cli.ts +117 -0
  276. package/src/commands/gha.ts +188 -0
  277. package/src/commands/mcp.ts +126 -0
  278. package/src/commands/verifyEvidence.ts +100 -0
  279. package/src/entry.ts +7 -0
  280. package/src/entryPost.ts +109 -0
  281. package/src/external.ts +308 -0
  282. package/src/i18n/scaffolding.ts +191 -0
  283. package/src/index.ts +7 -0
  284. package/src/internal/index.ts +74 -0
  285. package/src/lifecycle.ts +2 -0
  286. package/src/main.ts +815 -0
  287. package/src/mcp/__fixtures__/infraweaver-scratch-pr-49-review-3485940013.json +110 -0
  288. package/src/mcp/__fixtures__/infraweaver-scratch-pr-64-review-3531000326.json +14 -0
  289. package/src/mcp/__fixtures__/infraweaver-test-repo-pr-1.diff.json +67 -0
  290. package/src/mcp/__snapshots__/checkout.test.ts.snap +109 -0
  291. package/src/mcp/__snapshots__/reviewComments.test.ts.snap +71 -0
  292. package/src/mcp/arkConfig.ts +7 -0
  293. package/src/mcp/assess.ts +723 -0
  294. package/src/mcp/capabilityContext.ts +80 -0
  295. package/src/mcp/changeSummary.ts +145 -0
  296. package/src/mcp/checkSuite.ts +261 -0
  297. package/src/mcp/checkout.ts +1015 -0
  298. package/src/mcp/comment.ts +683 -0
  299. package/src/mcp/commitInfo.ts +57 -0
  300. package/src/mcp/crosswalk.ts +1253 -0
  301. package/src/mcp/crosswalkDigest.ts +5 -0
  302. package/src/mcp/cyberEssentials.ts +60 -0
  303. package/src/mcp/dashboard.ts +232 -0
  304. package/src/mcp/dependencies.ts +190 -0
  305. package/src/mcp/frameworks.ts +236 -0
  306. package/src/mcp/geminiSanitizer.ts +212 -0
  307. package/src/mcp/git.ts +1116 -0
  308. package/src/mcp/guardrails.ts +771 -0
  309. package/src/mcp/issue.ts +74 -0
  310. package/src/mcp/issueComments.ts +48 -0
  311. package/src/mcp/issueEvents.ts +100 -0
  312. package/src/mcp/issueInfo.ts +72 -0
  313. package/src/mcp/labels.ts +35 -0
  314. package/src/mcp/localContext.ts +65 -0
  315. package/src/mcp/localServer.ts +217 -0
  316. package/src/mcp/moduleExtraction.ts +368 -0
  317. package/src/mcp/moduleTests.ts +421 -0
  318. package/src/mcp/modules.ts +752 -0
  319. package/src/mcp/output.ts +71 -0
  320. package/src/mcp/pathSafety.ts +28 -0
  321. package/src/mcp/policy.ts +226 -0
  322. package/src/mcp/pr.ts +238 -0
  323. package/src/mcp/prInfo.ts +91 -0
  324. package/src/mcp/providerSchema.ts +175 -0
  325. package/src/mcp/review.ts +1081 -0
  326. package/src/mcp/reviewComments.ts +1137 -0
  327. package/src/mcp/roots.ts +217 -0
  328. package/src/mcp/scope.ts +82 -0
  329. package/src/mcp/selectMode.ts +207 -0
  330. package/src/mcp/server.ts +498 -0
  331. package/src/mcp/shared.ts +120 -0
  332. package/src/mcp/shell.ts +631 -0
  333. package/src/mcp/staleFix.ts +557 -0
  334. package/src/mcp/terraform/__snapshots__/moduleDocs.test.ts.snap +40 -0
  335. package/src/mcp/terraform/azurePrices.ts +38 -0
  336. package/src/mcp/terraform/baseline.ts +172 -0
  337. package/src/mcp/terraform/concernResult.ts +111 -0
  338. package/src/mcp/terraform/cost.ts +175 -0
  339. package/src/mcp/terraform/cspm.ts +326 -0
  340. package/src/mcp/terraform/currency.ts +354 -0
  341. package/src/mcp/terraform/decisions.ts +590 -0
  342. package/src/mcp/terraform/eidas.ts +134 -0
  343. package/src/mcp/terraform/evidence.ts +771 -0
  344. package/src/mcp/terraform/findings.ts +383 -0
  345. package/src/mcp/terraform/fixMemory.ts +253 -0
  346. package/src/mcp/terraform/governance.ts +231 -0
  347. package/src/mcp/terraform/hcl.ts +273 -0
  348. package/src/mcp/terraform/iacLanguages.ts +431 -0
  349. package/src/mcp/terraform/idleFloor.ts +304 -0
  350. package/src/mcp/terraform/keyless.ts +123 -0
  351. package/src/mcp/terraform/moduleDocs.ts +303 -0
  352. package/src/mcp/terraform/nativeRules.ts +152 -0
  353. package/src/mcp/terraform/nativeScan.ts +67 -0
  354. package/src/mcp/terraform/noiseProfile.ts +183 -0
  355. package/src/mcp/terraform/normalization.ts +265 -0
  356. package/src/mcp/terraform/oscal.ts +283 -0
  357. package/src/mcp/terraform/packs/azurerm-3-4.ts +382 -0
  358. package/src/mcp/terraform/packs/cloudflare-4-5.ts +114 -0
  359. package/src/mcp/terraform/paths.ts +59 -0
  360. package/src/mcp/terraform/plan.ts +377 -0
  361. package/src/mcp/terraform/planDrift.ts +520 -0
  362. package/src/mcp/terraform/policyAuthor.ts +886 -0
  363. package/src/mcp/terraform/prowlerOcsf.ts +380 -0
  364. package/src/mcp/terraform/refactor.ts +879 -0
  365. package/src/mcp/terraform/registry.ts +317 -0
  366. package/src/mcp/terraform/risk.ts +99 -0
  367. package/src/mcp/terraform/scanSession.ts +242 -0
  368. package/src/mcp/terraform/scannerCache.ts +86 -0
  369. package/src/mcp/terraform/scannerEgress.ts +141 -0
  370. package/src/mcp/terraform/scannerJson.ts +22 -0
  371. package/src/mcp/terraform/scanners.ts +1134 -0
  372. package/src/mcp/terraform/signing.ts +151 -0
  373. package/src/mcp/terraform/stateLocking.ts +106 -0
  374. package/src/mcp/terraform/subprocess.ts +102 -0
  375. package/src/mcp/terraform/suppressions.ts +551 -0
  376. package/src/mcp/terraform/taxonomy.ts +0 -0
  377. package/src/mcp/terraform/tfquery.ts +159 -0
  378. package/src/mcp/terraform/toolchainIntegrity.ts +151 -0
  379. package/src/mcp/terraform/tools/authorPolicy.ts +185 -0
  380. package/src/mcp/terraform/tools/detectPlanDrift.ts +279 -0
  381. package/src/mcp/terraform/tools/emitCost.ts +130 -0
  382. package/src/mcp/terraform/tools/emitSarif.ts +108 -0
  383. package/src/mcp/terraform/tools/fixMemory.ts +82 -0
  384. package/src/mcp/terraform/tools/infracostDiff.ts +110 -0
  385. package/src/mcp/terraform/tools/ingestExternalFindings.ts +259 -0
  386. package/src/mcp/terraform/tools/moduleLookup.ts +86 -0
  387. package/src/mcp/terraform/tools/moduleSearch.ts +46 -0
  388. package/src/mcp/terraform/tools/plan.ts +384 -0
  389. package/src/mcp/terraform/tools/providerUpgrade.ts +217 -0
  390. package/src/mcp/terraform/tools/readFindings.ts +138 -0
  391. package/src/mcp/terraform/tools/scan.ts +303 -0
  392. package/src/mcp/terraform/tools/validate.ts +160 -0
  393. package/src/mcp/terraform/tools/verifyRemediation.ts +190 -0
  394. package/src/mcp/terraform/tools/versionCurrency.ts +64 -0
  395. package/src/mcp/terraform/tools.ts +62 -0
  396. package/src/mcp/terraform/transformPacks.ts +594 -0
  397. package/src/mcp/terraform/types.ts +382 -0
  398. package/src/mcp/terraform/verification.ts +150 -0
  399. package/src/mcp/terraform/vex.ts +367 -0
  400. package/src/mcp/terraform/writeOnly.ts +252 -0
  401. package/src/mcp/terraform.ts +52 -0
  402. package/src/mcp/terratest.ts +215 -0
  403. package/src/mcp/untrustedContent.ts +126 -0
  404. package/src/mcp/upload.ts +123 -0
  405. package/src/models.ts +753 -0
  406. package/src/modes/address-reviews.ts +35 -0
  407. package/src/modes/assess.ts +27 -0
  408. package/src/modes/build.ts +86 -0
  409. package/src/modes/compliance-audit.ts +25 -0
  410. package/src/modes/cost-optimization.ts +36 -0
  411. package/src/modes/drift-detect.ts +31 -0
  412. package/src/modes/fix.ts +29 -0
  413. package/src/modes/incremental-review.ts +103 -0
  414. package/src/modes/index.ts +94 -0
  415. package/src/modes/modernize-deprecated.ts +36 -0
  416. package/src/modes/plan.ts +21 -0
  417. package/src/modes/policy-gate.ts +27 -0
  418. package/src/modes/prFormats.ts +325 -0
  419. package/src/modes/refactor.ts +74 -0
  420. package/src/modes/refresh-remediation.ts +40 -0
  421. package/src/modes/remediate-and-refactor.ts +42 -0
  422. package/src/modes/remediate.ts +78 -0
  423. package/src/modes/resolve-conflicts.ts +32 -0
  424. package/src/modes/review.ts +135 -0
  425. package/src/modes/summarize-pr.ts +42 -0
  426. package/src/modes/task.ts +26 -0
  427. package/src/modes/terraform-code-review.ts +68 -0
  428. package/src/modes/types.ts +17 -0
  429. package/src/modes/update-dependencies.ts +44 -0
  430. package/src/prep/index.ts +96 -0
  431. package/src/prep/installNodeDependencies.ts +251 -0
  432. package/src/prep/installPythonDependencies.ts +235 -0
  433. package/src/prep/types.ts +38 -0
  434. package/src/reviewQuality.ts +237 -0
  435. package/src/runCli.ts +335 -0
  436. package/src/skills/terraform-best-practices/SKILL.md +379 -0
  437. package/src/toolState.ts +241 -0
  438. package/src/utils/activity.ts +210 -0
  439. package/src/utils/agent.ts +245 -0
  440. package/src/utils/agentHangReport.ts +180 -0
  441. package/src/utils/annotations.ts +56 -0
  442. package/src/utils/apiFetch.ts +19 -0
  443. package/src/utils/apiKeys.ts +305 -0
  444. package/src/utils/apiUrl.ts +42 -0
  445. package/src/utils/assets.ts +123 -0
  446. package/src/utils/baseRefConfig.ts +254 -0
  447. package/src/utils/billingErrors.ts +210 -0
  448. package/src/utils/body.ts +168 -0
  449. package/src/utils/buildInfraweaverFooter.ts +104 -0
  450. package/src/utils/byokFallback.ts +137 -0
  451. package/src/utils/changeImpact.ts +330 -0
  452. package/src/utils/claudeSubscription.ts +93 -0
  453. package/src/utils/cli.ts +36 -0
  454. package/src/utils/cloudClient.ts +57 -0
  455. package/src/utils/cloudFetchCore.ts +139 -0
  456. package/src/utils/cloudReport.ts +316 -0
  457. package/src/utils/codexHome.ts +204 -0
  458. package/src/utils/codexOAuth.ts +154 -0
  459. package/src/utils/codexRefreshDetect.ts +36 -0
  460. package/src/utils/diffCoverage.ts +404 -0
  461. package/src/utils/env.ts +84 -0
  462. package/src/utils/errorReport.ts +94 -0
  463. package/src/utils/exitHandler.ts +35 -0
  464. package/src/utils/fixDoubleEscapedString.ts +9 -0
  465. package/src/utils/ghaCore.ts +13 -0
  466. package/src/utils/gitAuth.ts +268 -0
  467. package/src/utils/gitAuthServer.ts +186 -0
  468. package/src/utils/github.ts +676 -0
  469. package/src/utils/globals.ts +9 -0
  470. package/src/utils/humanEditCapture.ts +198 -0
  471. package/src/utils/infraweaverConfig.ts +202 -0
  472. package/src/utils/install.ts +279 -0
  473. package/src/utils/instructions.ts +640 -0
  474. package/src/utils/keylessOidc.ts +47 -0
  475. package/src/utils/leapingComment.ts +20 -0
  476. package/src/utils/learnings.ts +145 -0
  477. package/src/utils/learningsTruncate.ts +42 -0
  478. package/src/utils/lifecycle.ts +198 -0
  479. package/src/utils/log.ts +452 -0
  480. package/src/utils/modelResolver.ts +105 -0
  481. package/src/utils/moduleFetch.ts +138 -0
  482. package/src/utils/normalizeEnv.ts +106 -0
  483. package/src/utils/openCodeModels.ts +86 -0
  484. package/src/utils/openaiCompatible.ts +52 -0
  485. package/src/utils/opentofuMcp.ts +61 -0
  486. package/src/utils/overrides.ts +100 -0
  487. package/src/utils/packageManager.ts +257 -0
  488. package/src/utils/patchWorkflowRunFields.ts +173 -0
  489. package/src/utils/payload.ts +1206 -0
  490. package/src/utils/prSummary.ts +148 -0
  491. package/src/utils/presets.ts +105 -0
  492. package/src/utils/progressComment.ts +266 -0
  493. package/src/utils/providerErrors.ts +189 -0
  494. package/src/utils/proxyModel.ts +239 -0
  495. package/src/utils/rangeDiff.ts +182 -0
  496. package/src/utils/redact.ts +86 -0
  497. package/src/utils/registryAuth.ts +115 -0
  498. package/src/utils/remediationCommand.ts +144 -0
  499. package/src/utils/retry.ts +180 -0
  500. package/src/utils/reviewCleanup.ts +116 -0
  501. package/src/utils/run.ts +100 -0
  502. package/src/utils/runContext.ts +276 -0
  503. package/src/utils/runContextData.ts +121 -0
  504. package/src/utils/runErrorRenderer.ts +282 -0
  505. package/src/utils/runFixture.ts +91 -0
  506. package/src/utils/runLifecycle.ts +360 -0
  507. package/src/utils/runStartupLog.ts +67 -0
  508. package/src/utils/secrets.ts +208 -0
  509. package/src/utils/setup.ts +368 -0
  510. package/src/utils/shell.ts +132 -0
  511. package/src/utils/skills.ts +67 -0
  512. package/src/utils/subprocess.ts +474 -0
  513. package/src/utils/terraformMcp.ts +99 -0
  514. package/src/utils/time.ts +59 -0
  515. package/src/utils/timer.ts +72 -0
  516. package/src/utils/todoTracking.ts +168 -0
  517. package/src/utils/token.ts +294 -0
  518. package/src/utils/toolLicensing.ts +152 -0
  519. package/src/utils/toolSelection.ts +239 -0
  520. package/src/utils/toon.ts +76 -0
  521. package/src/utils/version.ts +10 -0
  522. package/src/utils/versioning.ts +44 -0
  523. package/src/utils/vertex.ts +94 -0
  524. package/src/utils/workflow.ts +25 -0
@@ -0,0 +1,198 @@
1
+ import type { LocalToolContext } from "#app/mcp/localContext";
2
+ /**
3
+ * Terraform module support (module catalogue). Two related capabilities:
4
+ *
5
+ * - **Module catalogue** — an operator-curated list of approved modules (a
6
+ * registry module like `terraform-aws-modules/vpc/aws`, or one of the org's
7
+ * own/house modules at a local path) that a fix/generation should PREFER over
8
+ * hand-rolling raw resources. Surfaced by `list_modules`.
9
+ * - **Module-source-aware fixes** — parse the repo's `module "x" { source = … }`
10
+ * blocks into a call-graph so a concern inside a *local* module is fixed at
11
+ * its SOURCE once (not patched at every call site), while a concern that would
12
+ * require editing a *registry/remote* module is flagged as out-of-repo.
13
+ * Surfaced by `terraform_module_graph`.
14
+ *
15
+ * The parsing is pure (no subprocess) and unit-tested; the tools just read files.
16
+ */
17
+ export interface ModuleCatalogueEntry {
18
+ /** the local name to use in a `module "<name>"` block. */
19
+ name: string;
20
+ /** the `source` value, e.g. `terraform-aws-modules/vpc/aws` or `./modules/vpc`. */
21
+ source: string;
22
+ /** optional version constraint for a registry module. */
23
+ version: string | null;
24
+ /** classification of the source (registry / local / git / remote). */
25
+ kind: ModuleSourceKind;
26
+ }
27
+ export type ModuleSourceKind = "local" | "registry" | "git" | "remote" | "unknown" | "dynamic";
28
+ export interface ParsedModuleSource {
29
+ /** the full original source string. */
30
+ raw: string;
31
+ /** the source with the `//subdir` selector and `?query` stripped. */
32
+ base: string;
33
+ /** the `//subdir` path within the module repo/package, or null. */
34
+ subdir: string | null;
35
+ /** the `?ref=` revision (git tag/branch/commit), or null. This is how git
36
+ * modules PIN a version — Terraform has no `version` attribute for them. */
37
+ ref: string | null;
38
+ kind: ModuleSourceKind;
39
+ }
40
+ /**
41
+ * Split a Terraform module `source` into its base, `//subdir` selector, and
42
+ * `?ref=` revision — the three parts Terraform's go-getter syntax composes
43
+ * (`git::https://host/repo.git//subdir?ref=v1`,
44
+ * `terraform-aws-modules/cloudwatch/aws//modules/log-group`). The `//` separator
45
+ * is the one NOT part of a `://` scheme. Pure; underpins classification + the
46
+ * version a git module is pinned at.
47
+ */
48
+ export declare function splitModuleSource(raw: string): ParsedModuleSource;
49
+ /**
50
+ * Classify a Terraform module `source` string (the full value, including any
51
+ * `//subdir` / `?ref=`). Mirrors Terraform's own source resolution: a
52
+ * `./`/`../`/absolute path is LOCAL; a `git::`/`github.com`/`.git`/`bitbucket.org`
53
+ * source is GIT; an `s3::`/`gcs::`/`http(s)` archive is REMOTE; a bare
54
+ * `namespace/name/provider` (optionally host-prefixed, optionally with a
55
+ * `//submodule` path) is a REGISTRY ref.
56
+ */
57
+ export declare function classifyModuleSource(source: string): ModuleSourceKind;
58
+ /**
59
+ * Parse the operator's `module_catalogue` input into structured entries. Accepts
60
+ * newline- and/or comma-separated entries, each:
61
+ * `[name=]<source>[ <version>]`
62
+ * e.g. `vpc=terraform-aws-modules/vpc/aws ~> 5.0`, `terraform-aws-modules/s3-bucket/aws`,
63
+ * `./modules/networking`. Name is optional (derived from the source when absent);
64
+ * version applies to registry sources.
65
+ */
66
+ export declare function parseModuleCatalogue(raw: string | undefined): ModuleCatalogueEntry[];
67
+ export interface ModuleBlock {
68
+ /** the local name in `module "<name>" { … }`. */
69
+ name: string;
70
+ source: string;
71
+ /** the pinned version — the `version` attribute (registry) or the git `?ref=`
72
+ * (git), whichever is present; null when unpinned. */
73
+ version: string | null;
74
+ /** the `//subdir` selector within the module package, or null. */
75
+ subdir: string | null;
76
+ kind: ModuleSourceKind;
77
+ /** the file the `module` block was declared in (repo-relative). */
78
+ declaredIn: string;
79
+ }
80
+ /**
81
+ * Parse every `module "<name>" { … }` block in some HCL into its name, source,
82
+ * pinned version, and subdir. Brace-matched so nested blocks (e.g. a
83
+ * `providers = { … }` map inside the module block) don't confuse it. The version
84
+ * comes from the `version` attribute (registry modules) OR the source's `?ref=`
85
+ * (git modules), so a git-pinned module isn't reported as unpinned. `declaredIn`
86
+ * is filled by the caller; here it's "".
87
+ */
88
+ export declare function parseModuleBlocks(hcl: string): ModuleBlock[];
89
+ export interface ModuleGraph {
90
+ /** every `module` block found, with its classified source. */
91
+ modules: ModuleBlock[];
92
+ /** local module source dirs (repo-relative), each with the caller files that
93
+ * reference it — fix a concern in one of these dirs ONCE at the source. */
94
+ localModuleDirs: {
95
+ dir: string;
96
+ callers: string[];
97
+ }[];
98
+ /** count of registry/git/remote module references — concerns that live inside
99
+ * one of these are NOT editable in this repo (open an issue instead). */
100
+ externalCount: number;
101
+ }
102
+ export declare const MAX_TF_FILE_BYTES: number;
103
+ export declare const MAX_TF_TOTAL_BYTES: number;
104
+ /** read a text file, returning null for unreadable OR oversize (> cap bytes)
105
+ * files — the byte-cap complement of the walk's "unreadable ⇒ skip". */
106
+ export declare function readTextCapped(path: string, cap?: number): string | null;
107
+ /**
108
+ * Recursively list `*.tf` files under `cwd`, repo-relative (POSIX), skipping
109
+ * cache/VCS/dep dirs. Bounded by depth and a file cap so a huge monorepo can't
110
+ * stall the walk. Real Terraform repos (e.g. hepcare) keep their root config in
111
+ * a subdir (`terraform/`) with house modules in `terraform/modules/` and even a
112
+ * second root (`terraform/core/`) — a single-level read misses all of that, so
113
+ * we walk the tree.
114
+ */
115
+ export declare function walkTfFiles(cwd: string, maxDepth?: number, cap?: number): string[];
116
+ /**
117
+ * The same bounded walk for any file suffix. `.tfquery.hcl` (Terraform 1.14
118
+ * query files) lives outside `*.tf` deliberately — it is discovery input, not
119
+ * managed configuration — so it needs its own walk rather than a widened `.tf`
120
+ * one, which would sweep query files into every path that assumes "`.tf` ⇒
121
+ * remediable".
122
+ */
123
+ export declare function walkFilesBySuffix(cwd: string, suffix: string, maxDepth?: number, cap?: number): string[];
124
+ /**
125
+ * Walk `cwd` recursively and build the module call-graph across every Terraform
126
+ * file (root + subdir roots + nested modules). A local module's dir is resolved
127
+ * RELATIVE TO THE DECLARING FILE (`./modules/x` in `core/main.tf` → `core/modules/x`),
128
+ * not to `cwd`, so the graph is correct for multi-root repos.
129
+ */
130
+ export declare function collectModuleGraph(cwd: string): ModuleGraph;
131
+ /**
132
+ * dependency-aware fix ordering. Order the repo's LOCAL module dirs so a
133
+ * module that others depend on is fixed BEFORE its dependents — sequencing
134
+ * remediation PRs so they don't conflict (a fix at a shared module source
135
+ * propagates to callers; fixing the caller first would be redundant or clash).
136
+ *
137
+ * Builds edges among local module dirs: a `module` block declared inside local
138
+ * dir A whose source resolves to local dir B means "A depends on B", so B must
139
+ * come first. Returns a stable topological order (Kahn's algorithm, ties broken
140
+ * by path) of the local module dirs; cycle-safe (any leftover nodes are appended
141
+ * in sorted order). Pure. The remaining non-module (root) files are fixed after
142
+ * every local module they call — the caller dirs are in each entry's `callers`.
143
+ */
144
+ export declare function dependencyOrderedModuleDirs(graph: ModuleGraph): string[];
145
+ /** true when `file` sits under one of the graph's local module dirs — i.e. a
146
+ * concern there should be fixed at the module SOURCE (it propagates to callers). */
147
+ export declare function isInLocalModule(file: string, graph: ModuleGraph): {
148
+ dir: string;
149
+ callers: string[];
150
+ } | null;
151
+ export interface ModuleVariable {
152
+ name: string;
153
+ /** the `type` expression as written (`string`, `list(string)`, …), or null. */
154
+ type: string | null;
155
+ description: string | null;
156
+ /** true when the variable has NO `default` (the caller must set it). */
157
+ required: boolean;
158
+ }
159
+ export interface ModuleOutput {
160
+ name: string;
161
+ description: string | null;
162
+ }
163
+ export interface ModuleInterface {
164
+ variables: ModuleVariable[];
165
+ outputs: ModuleOutput[];
166
+ }
167
+ /**
168
+ * Parse a module's `variable`/`output` blocks into its public interface — the
169
+ * real names, types, descriptions, and which variables are REQUIRED (no
170
+ * `default`). Used so a generated `module` block (or a Terratest/example
171
+ * fixture) sets the module's ACTUAL variables instead of guessed ones. Pure;
172
+ * brace-matched so a nested `type = object({…})` or `validation {…}` doesn't
173
+ * confuse it.
174
+ */
175
+ export declare function parseModuleInterface(hcl: string): ModuleInterface;
176
+ /** read a module DIR's `*.tf` (non-recursive — a module is a single dir) and
177
+ * parse its interface. */
178
+ export declare function collectModuleInterface(cwd: string, moduleDir: string): ModuleInterface;
179
+ export declare const ListModulesParams: import("arktype/internal/variants/object.ts").ObjectType<object, {}>;
180
+ export declare function ListModulesTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<object, object>> & {
181
+ mutates?: boolean;
182
+ };
183
+ export declare const TerraformModuleGraphParams: import("arktype/internal/variants/object.ts").ObjectType<object, {}>;
184
+ export declare function TerraformModuleGraphTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<object, object>> & {
185
+ mutates?: boolean;
186
+ };
187
+ export declare const TerraformModuleInterfaceParams: import("arktype/internal/variants/object.ts").ObjectType<{
188
+ module_dir: string;
189
+ }, {}>;
190
+ export declare function TerraformModuleInterfaceTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
191
+ module_dir: string;
192
+ }, {
193
+ module_dir: string;
194
+ }>> & {
195
+ mutates?: boolean;
196
+ };
197
+ /** best-effort existence check used by tests/tools — exported for reuse. */
198
+ export declare function moduleDirExists(cwd: string, dir: string): boolean;
@@ -0,0 +1,16 @@
1
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ import type { ToolContext } from "#app/mcp/server";
3
+ export declare const SetOutputParams: import("arktype/internal/variants/object.ts").ObjectType<{
4
+ value: string;
5
+ }, {}>;
6
+ type JsonSchema = Record<string, unknown>;
7
+ export declare function SetOutputTool(ctx: ToolContext, outputSchema?: JsonSchema): (import("fastmcp").Tool<any, StandardSchemaV1<any, any>> & {
8
+ mutates?: boolean;
9
+ }) | (import("fastmcp").Tool<any, StandardSchemaV1<{
10
+ value: string;
11
+ }, {
12
+ value: string;
13
+ }>> & {
14
+ mutates?: boolean;
15
+ });
16
+ export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Resolve an agent-supplied path against `cwd` and confine it to that workspace.
3
+ *
4
+ * Returns the absolute path when it stays inside `cwd`; throws otherwise. Blocks
5
+ * both `..` traversal and absolute paths that point outside `cwd` (including a
6
+ * different drive on Windows, where `relative` returns an absolute path).
7
+ *
8
+ * Infraweaver treats the agent as semi-trusted (attacker-controlled PR content can
9
+ * prompt-inject it), so any tool that reads or writes a file path the agent
10
+ * controls — read_findings, terraform_emit_sarif, terraform_module_interface —
11
+ * must confine that path to the workspace. Without it the agent has an arbitrary
12
+ * file read (findings) or write (SARIF) primitive on the runner.
13
+ */
14
+ export declare function resolveWithinCwd(cwd: string, userPath: string): string;
@@ -0,0 +1,50 @@
1
+ import type { LocalToolContext } from "#app/mcp/localContext";
2
+ /**
3
+ * Policy-as-code gate (OPA/Conftest). An optional, opt-in tool that runs
4
+ * the operator's own Rego policies against the Terraform plan JSON (or the HCL),
5
+ * so an org's policy-as-code can gate a remediation/generation the same way the
6
+ * deterministic scanners do — pairs with prevent recurrence. Infraweaver is
7
+ * an ORCHESTRATOR here, never a redistributor: it invokes the external
8
+ * `conftest` (OPA) binary as a separate process and consumes its normalized
9
+ * output. Degrades green — when conftest isn't installed or no policy dir
10
+ * exists, it returns `ok: false` with a `code` and never fails the run.
11
+ *
12
+ * The parsing is pure + unit-tested; the tool just shells out and parses.
13
+ */
14
+ export interface PolicyFailure {
15
+ /** the policy rule message (the human-readable violation). */
16
+ msg: string;
17
+ /** the file conftest evaluated (repo-relative when conftest reported it). */
18
+ file: string;
19
+ /** "failure" (a deny) or "warning" (a warn). */
20
+ level: "failure" | "warning";
21
+ }
22
+ export interface PolicyResult {
23
+ /** true when there were zero failures (warnings don't fail the gate). */
24
+ passed: boolean;
25
+ failures: PolicyFailure[];
26
+ warnings: PolicyFailure[];
27
+ /** total tests conftest ran (across files), for a confidence signal. */
28
+ tested: number;
29
+ }
30
+ /**
31
+ * Parse `conftest test --output json` output into a normalized PolicyResult.
32
+ * Conftest emits an array of per-file result objects, each with `failures` /
33
+ * `warnings` / `successes`. Pure; tolerant of malformed/empty input (returns a
34
+ * clean pass). A non-empty `failures` anywhere means the gate did NOT pass;
35
+ * warnings are surfaced but don't fail it.
36
+ */
37
+ export declare function parseConftestOutput(stdout: string): PolicyResult;
38
+ export declare const PolicyCheckParams: import("arktype/internal/variants/object.ts").ObjectType<{
39
+ target?: string;
40
+ policy_dir?: string;
41
+ }, {}>;
42
+ export declare function PolicyCheckTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
43
+ target?: string;
44
+ policy_dir?: string;
45
+ }, {
46
+ target?: string;
47
+ policy_dir?: string;
48
+ }>> & {
49
+ mutates?: boolean;
50
+ };
@@ -0,0 +1,64 @@
1
+ import type { GitHubWriteToolContext } from "#app/mcp/capabilityContext";
2
+ import type { ResolvedPayload } from "#app/utils/payload";
3
+ import type { RunContextData } from "#app/utils/runContextData";
4
+ /**
5
+ * The slice `resolveBaseBranch` reads: the declared base-branch input and the
6
+ * repository's default branch. Shared with `terraform_change_summary`, which
7
+ * resolves the same base without needing the rest of the GitHub surface.
8
+ */
9
+ export interface BaseBranchContext {
10
+ payload: ResolvedPayload;
11
+ repo: RunContextData["repo"];
12
+ }
13
+ export declare const PullRequest: import("arktype/internal/variants/object.ts").ObjectType<{
14
+ title: string;
15
+ body: string;
16
+ base?: string;
17
+ draft?: boolean;
18
+ }, {}>;
19
+ /**
20
+ * Pure base-branch picker. Precedence: an explicit `base_branch` declaration
21
+ * always wins; otherwise the repository's default branch (GitHub reports it —
22
+ * normally `main`, sometimes `master`); otherwise prefer `main`, then `master`;
23
+ * final fallback `main`. Split out from git/ctx so it's exhaustively testable.
24
+ */
25
+ export declare function pickBaseBranch(opts: {
26
+ declared?: string | undefined;
27
+ defaultBranch?: string | undefined;
28
+ mainExists: boolean;
29
+ masterExists: boolean;
30
+ }): string;
31
+ /**
32
+ * Deterministically resolve the branch a PR targets, so the base is never left
33
+ * to the agent's guess. Resolves to the repository's default branch (`main`, or
34
+ * `master`), overridable by the `base_branch` input. Git is only probed for
35
+ * main/master in the last-resort case where neither an explicit declaration nor
36
+ * a GitHub default branch is available (essentially never).
37
+ */
38
+ export declare function resolveBaseBranch(ctx: BaseBranchContext): string;
39
+ export declare const UpdatePullRequestBody: import("arktype/internal/variants/object.ts").ObjectType<{
40
+ pull_number: number;
41
+ body: string;
42
+ }, {}>;
43
+ export declare function UpdatePullRequestBodyTool(ctx: GitHubWriteToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
44
+ pull_number: number;
45
+ body: string;
46
+ }, {
47
+ pull_number: number;
48
+ body: string;
49
+ }>> & {
50
+ mutates?: boolean;
51
+ };
52
+ export declare function CreatePullRequestTool(ctx: GitHubWriteToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
53
+ title: string;
54
+ body: string;
55
+ base?: string;
56
+ draft?: boolean;
57
+ }, {
58
+ title: string;
59
+ body: string;
60
+ base?: string;
61
+ draft?: boolean;
62
+ }>> & {
63
+ mutates?: boolean;
64
+ };
@@ -0,0 +1,11 @@
1
+ import type { GitHubToolContext } from "#app/mcp/capabilityContext";
2
+ export declare const PullRequestInfo: import("arktype/internal/variants/object.ts").ObjectType<{
3
+ pull_number: number;
4
+ }, {}>;
5
+ export declare function PullRequestInfoTool(ctx: GitHubToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
6
+ pull_number: number;
7
+ }, {
8
+ pull_number: number;
9
+ }>> & {
10
+ mutates?: boolean;
11
+ };
@@ -0,0 +1,52 @@
1
+ import type { LocalToolContext } from "#app/mcp/localContext";
2
+ /**
3
+ * Provider-schema awareness. A "correct" fix for the wrong provider
4
+ * major just breaks `plan` — argument names and nested blocks differ across
5
+ * majors. After `terraform init`, the installed provider's exact schema is
6
+ * available via `terraform providers schema -json`; this parses it so a fix can
7
+ * be checked against the REAL attributes/blocks for the version in use, not the
8
+ * model's memory of the provider.
9
+ *
10
+ * The schema fetch is cached per `cwd` for the process (schemas don't change
11
+ * within a run) and degrades green (returns `ok: false`) when terraform isn't
12
+ * installed or the dir isn't initialised.
13
+ */
14
+ export interface ResourceSchema {
15
+ attributes: Set<string>;
16
+ blocks: Set<string>;
17
+ }
18
+ /** resourceType → its attribute + nested-block names, across all providers. */
19
+ export type ProvidersSchema = Map<string, ResourceSchema>;
20
+ /**
21
+ * Parse `terraform providers schema -json` into a resource-type → {attributes,
22
+ * blocks} map. Merges every provider's `resource_schemas`. Pure; tolerant of a
23
+ * missing/empty schema.
24
+ */
25
+ export declare function parseProvidersSchema(json: string): ProvidersSchema;
26
+ /**
27
+ * Given a resource type and the argument names a fix introduces, return the ones
28
+ * that are NOT valid attributes or nested blocks for that resource in the
29
+ * installed provider — i.e. names that would break `plan`. Returns `null` for
30
+ * `unknownResourceType` when the schema has no entry for the type (can't judge).
31
+ */
32
+ export declare function unknownArgsForResource(schema: ProvidersSchema, resourceType: string, args: string[]): {
33
+ unknownResourceType: boolean;
34
+ unknown: string[];
35
+ };
36
+ /** fetch + cache the providers schema for `cwd`. null when unavailable. */
37
+ export declare function loadProvidersSchema(cwd: string): ProvidersSchema | null;
38
+ /** test-only: clear the per-process schema cache. */
39
+ export declare function _clearProviderSchemaCache(): void;
40
+ export declare const TerraformProviderSchemaParams: import("arktype/internal/variants/object.ts").ObjectType<{
41
+ resource_type: string;
42
+ args?: string[];
43
+ }, {}>;
44
+ export declare function TerraformProviderSchemaTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
45
+ resource_type: string;
46
+ args?: string[];
47
+ }, {
48
+ resource_type: string;
49
+ args?: string[];
50
+ }>> & {
51
+ mutates?: boolean;
52
+ };
@@ -0,0 +1,212 @@
1
+ import type { RestEndpointMethodTypes } from "@octokit/rest";
2
+ import type { GitHubWriteToolContext } from "#app/mcp/capabilityContext";
3
+ import type { CommentableLines } from "#app/toolState";
4
+ export type { CommentableLines };
5
+ /**
6
+ * detect GitHub's generic server-side 422 ("An internal error occurred,
7
+ * please try again.") that sometimes fires on `POST /pulls/{n}/reviews`.
8
+ *
9
+ * the body is stable across occurrences and distinct from every other 422
10
+ * cause we care about (anchor validation, body length, malformed suggestion
11
+ * blocks) — those all cite the specific problem. treating this as a
12
+ * transient server error unlocks bounded in-tool retry instead of surfacing
13
+ * it to the agent with the generic "likely causes (1)(2)(3)" prompt, which
14
+ * induces whack-a-mole comment dropping on content that was never the issue.
15
+ */
16
+ export declare function isTransientReviewError(err: unknown): boolean;
17
+ export declare const TRANSIENT_REVIEW_RETRY_DELAYS_MS: number[];
18
+ /**
19
+ * parse a PR file's patch to determine which line numbers on each side are
20
+ * valid anchors for inline comments. GitHub only accepts comments on lines
21
+ * inside a diff hunk: added/context lines on RIGHT, removed/context lines
22
+ * on LEFT.
23
+ */
24
+ export declare function commentableLinesForFile(patch: string | undefined): CommentableLines;
25
+ export declare function buildCommentableMap(ctx: GitHubWriteToolContext, pullNumber: number): Promise<Map<string, CommentableLines>>;
26
+ export type ReviewCommentInput = NonNullable<RestEndpointMethodTypes["pulls"]["createReview"]["parameters"]["comments"]>[number];
27
+ export interface DroppedComment {
28
+ path: string;
29
+ line: number;
30
+ startLine?: number | undefined;
31
+ side: "LEFT" | "RIGHT";
32
+ reason: string;
33
+ }
34
+ export declare function validateInlineComments(comments: ReviewCommentInput[], map: Map<string, CommentableLines>): {
35
+ valid: ReviewCommentInput[];
36
+ dropped: DroppedComment[];
37
+ };
38
+ export declare const MAX_DROPPED_COMMENT_LINES = 50;
39
+ /**
40
+ * reason a create_pull_request_review call should be skipped without hitting
41
+ * GitHub. returned by reviewSkipDecision; null means submit normally.
42
+ */
43
+ export type ReviewSkipDecision = {
44
+ kind: "no-issues";
45
+ reason: string;
46
+ } | {
47
+ kind: "empty-downgraded-approve";
48
+ reason: string;
49
+ } | {
50
+ kind: "empty-request-changes";
51
+ reason: string;
52
+ };
53
+ /**
54
+ * decision returned by duplicateReviewDecision when a session has already
55
+ * submitted a review and the current call would be a duplicate.
56
+ */
57
+ export type DuplicateReviewDecision = {
58
+ kind: "already-submitted";
59
+ reviewId: number;
60
+ reason: string;
61
+ };
62
+ /**
63
+ * decide whether a second create_pull_request_review call in the same session
64
+ * is a duplicate of an earlier submission.
65
+ *
66
+ * the agent is instructed to call create_pull_request_review exactly once per
67
+ * Review-mode session (see src/modes/review.ts), but in practice it sometimes
68
+ * submits twice — once with substantive feedback, then again with the
69
+ * canonical "No new issues found." body when the prompt's branch logic
70
+ * re-classifies non-blocking observations. the second submission is
71
+ * always redundant: the first review is the record, and the duplicate just
72
+ * adds noise to the PR.
73
+ *
74
+ * legitimate follow-up reviews after new commits ARE allowed: when the agent
75
+ * re-runs checkout_pr to fetch the new commits, checkoutSha advances past the
76
+ * previously reviewed sha, so any call where checkoutSha has moved past the
77
+ * prior reviewedSha is a real follow-up and goes through. anything else — same
78
+ * sha (including an immediate re-submit that skipped checkout_pr), or no
79
+ * checkoutSha to compare against — is a duplicate.
80
+ */
81
+ export declare function duplicateReviewDecision(params: {
82
+ existing: {
83
+ id: number;
84
+ reviewedSha: string | undefined;
85
+ } | undefined;
86
+ currentCheckoutSha: string | undefined;
87
+ }): DuplicateReviewDecision | null;
88
+ /**
89
+ * decide whether to skip a review submission before any network call.
90
+ *
91
+ * GitHub rejects `event: "COMMENT"` reviews with no body and no inline comments
92
+ * with HTTP 422 "Unprocessable Entity". two paths produce that shape:
93
+ *
94
+ * 1. `!approved` + empty body/comments: agent's "no issues found" result.
95
+ * skipping preserves the agent's intent (nothing to post is a fine
96
+ * outcome for a review run) without a spurious 422.
97
+ * 2. `approved` + `!prApproveEnabled` + empty body/comments: the runtime
98
+ * downgrades APPROVE to COMMENT when prApproveEnabled is off, and the
99
+ * resulting empty-COMMENT is exactly the shape GitHub 422s. skipping
100
+ * here surfaces the cause (downgrade + nothing to say) instead of an
101
+ * opaque 422 the agent can't recover from.
102
+ *
103
+ * legitimate bare approvals (`approved` + `prApproveEnabled`, no body/comments)
104
+ * are never skipped — GitHub accepts empty APPROVE reviews and the approval
105
+ * stamp itself is the review's content.
106
+ *
107
+ * a contentless `request_changes` is always skipped: a blocking verdict with no
108
+ * body and no inline comments tells the author nothing about what must change,
109
+ * and (when downgraded to COMMENT) is the empty-COMMENT shape GitHub 422s.
110
+ */
111
+ export declare function reviewSkipDecision(params: {
112
+ approved: boolean;
113
+ requestChanges?: boolean;
114
+ body: string | null | undefined;
115
+ hasComments: boolean;
116
+ prApproveEnabled: boolean;
117
+ }): ReviewSkipDecision | null;
118
+ export declare function formatDroppedCommentsNote(dropped: DroppedComment[]): string;
119
+ export declare const CreatePullRequestReview: import("arktype/internal/variants/object.ts").ObjectType<{
120
+ pull_number: number;
121
+ body?: string;
122
+ approved?: boolean;
123
+ request_changes?: boolean;
124
+ commit_id?: string;
125
+ comments?: {
126
+ path: string;
127
+ line: number;
128
+ side?: "LEFT" | "RIGHT";
129
+ body?: string;
130
+ suggestion?: string;
131
+ start_line?: number;
132
+ }[];
133
+ }, {}>;
134
+ export declare function CreatePullRequestReviewTool(ctx: GitHubWriteToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
135
+ pull_number: number;
136
+ body?: string;
137
+ approved?: boolean;
138
+ request_changes?: boolean;
139
+ commit_id?: string;
140
+ comments?: {
141
+ path: string;
142
+ line: number;
143
+ side?: "LEFT" | "RIGHT";
144
+ body?: string;
145
+ suggestion?: string;
146
+ start_line?: number;
147
+ }[];
148
+ }, {
149
+ pull_number: number;
150
+ body?: string;
151
+ approved?: boolean;
152
+ request_changes?: boolean;
153
+ commit_id?: string;
154
+ comments?: {
155
+ path: string;
156
+ line: number;
157
+ side?: "LEFT" | "RIGHT";
158
+ body?: string;
159
+ suggestion?: string;
160
+ start_line?: number;
161
+ }[];
162
+ }>> & {
163
+ mutates?: boolean;
164
+ };
165
+ /**
166
+ * clear a pending review draft stranded on the PR by a prior hard-killed run
167
+ * (workflow timeout, OOM) so the next createReview can succeed.
168
+ *
169
+ * GitHub enforces one-pending-review-per-user-per-PR. if the previous process
170
+ * died between createReview(PENDING) and submitReview, the draft remains and
171
+ * the next run's createReview 422s with "already has a pending review".
172
+ * listReviews only exposes PENDING reviews to their author, so filtering on
173
+ * state === "PENDING" is already scoped to the authed token's own draft.
174
+ *
175
+ * if `originalErr` is not a pending-review 422, or no leftover is found, this
176
+ * function rethrows `originalErr` so the caller surfaces the original failure.
177
+ * delete failures with 404 (draft already gone) or 422 (draft submitted by a
178
+ * concurrent caller) are swallowed — the caller's retry will succeed in both
179
+ * cases. any other delete error is rethrown unchanged.
180
+ *
181
+ * known limitation: if two runs on the SAME PR share the authed token and
182
+ * overlap in time, the loser's createReview 422s on the winner's still-active
183
+ * draft. recovery would then delete the winner's active draft and the
184
+ * winner's submitReview would 404. this is not distinguishable from a
185
+ * genuinely-stranded draft via the review object alone (PENDING reviews
186
+ * expose no created_at timestamp, and both reviews are authored by the same
187
+ * bot user). rely on workflow-level concurrency controls (e.g. a concurrency
188
+ * key keyed to the PR number) to prevent overlap.
189
+ */
190
+ export declare function clearStrandedPendingReview(ctx: GitHubWriteToolContext, params: {
191
+ owner: string;
192
+ repo: string;
193
+ pull_number: number;
194
+ originalErr: unknown;
195
+ }): Promise<void>;
196
+ /**
197
+ * single-step createReview (event != PENDING) with stranded-draft recovery.
198
+ * the body path goes through createAndSubmitWithFooter which already recovers
199
+ * from a stranded PENDING draft at its own createReview call. the no-body path
200
+ * used to call createReview directly with no recovery — so a PR whose previous
201
+ * body-path run crashed between createReview(PENDING) and submitReview would
202
+ * permanently 422 any subsequent no-body review (approve-with-no-feedback or
203
+ * comments-only) until a body-path run happened to clear the draft.
204
+ */
205
+ export declare function createReviewWithStrandedRecovery(ctx: GitHubWriteToolContext, params: RestEndpointMethodTypes["pulls"]["createReview"]["parameters"]): Promise<Awaited<ReturnType<typeof ctx.octokit.rest.pulls.createReview>>>;
206
+ /**
207
+ * report the review node ID so the WorkflowRun is marked as "review submitted".
208
+ * exported for use in main.ts post-agent cleanup.
209
+ */
210
+ export declare function reportReviewNodeId(ctx: GitHubWriteToolContext, params: {
211
+ nodeId: string;
212
+ }): Promise<void>;