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,136 @@
1
+ import type { ExternalFinding } from "#app/mcp/terraform/cspm";
2
+ import type { Severity } from "#app/mcp/terraform/types";
3
+ /**
4
+ * Prowler OCSF ingestion (CSPM phase 1).
5
+ *
6
+ * Prowler is an Apache-2.0 live-cloud CSPM scanner. Infraweaver CONSUMES its
7
+ * findings and never runs it: the customer runs Prowler in their own CI with
8
+ * their own cloud credentials and Infraweaver ingests the resulting JSON. The
9
+ * zero-credential invariant is unchanged — this module only parses a file.
10
+ *
11
+ * Prowler writes OCSF `DetectionFinding` objects (class_uid 2004) as a single
12
+ * JSON ARRAY, not NDJSON. Field locations follow the OCSF 1.x DetectionFinding
13
+ * schema; `severity_id` is the OCSF enum (0 Unknown, 1 Informational, 2 Low,
14
+ * 3 Medium, 4 High, 5 Critical, 6 Fatal), which is deliberately NOT routed
15
+ * through `normalizeExternalSeverity()` — that function reads bare numbers as
16
+ * CVSS scores and would silently downgrade a Critical (5) to medium.
17
+ *
18
+ * Output is the existing `ExternalFinding` shape, so everything downstream —
19
+ * correlation, concern building, grouping, the Cloud report — is unchanged.
20
+ */
21
+ /** OCSF `type_uid` for DetectionFinding: Create — what Prowler emits. */
22
+ export declare const DETECTION_FINDING_CREATE = 200401;
23
+ declare const ProwlerFinding: import("arktype/internal/variants/object.ts").ObjectType<{
24
+ metadata?: {
25
+ event_code?: string;
26
+ product?: {
27
+ name?: string;
28
+ version?: string;
29
+ };
30
+ };
31
+ status_code?: string;
32
+ status?: string;
33
+ status_detail?: string;
34
+ message?: string;
35
+ severity?: string;
36
+ severity_id?: number;
37
+ finding_info?: {
38
+ title?: string;
39
+ desc?: string;
40
+ };
41
+ remediation?: {
42
+ desc?: string;
43
+ references?: string[];
44
+ };
45
+ resources?: {
46
+ uid?: string;
47
+ name?: string;
48
+ type?: string;
49
+ region?: string;
50
+ labels?: string[];
51
+ }[];
52
+ cloud?: {
53
+ provider?: string;
54
+ account?: {
55
+ uid?: string;
56
+ };
57
+ region?: string;
58
+ };
59
+ type_uid?: number;
60
+ unmapped?: object;
61
+ }, {}>;
62
+ export type ProwlerFindingInput = typeof ProwlerFinding.infer;
63
+ /**
64
+ * True for a parsed value that looks like a Prowler OCSF feed: a non-empty array
65
+ * whose first item is a DetectionFinding or carries Prowler's product name.
66
+ * Checked BEFORE the native `infraweaver.external-findings/v1` validator, which is
67
+ * safe because the native feed is an OBJECT and this requires a non-empty ARRAY —
68
+ * the two shapes cannot collide, so existing feeds keep their exact behaviour.
69
+ */
70
+ export declare function isProwlerOcsf(parsed: unknown): boolean;
71
+ /**
72
+ * Detect a Prowler output file that was never closed. Prowler streams `[`, then
73
+ * findings, and only seeks back to write `]` when the scan completes — so a
74
+ * crashed or still-running scan leaves an unterminated array that `JSON.parse`
75
+ * rejects with a message no operator can act on.
76
+ */
77
+ export declare function isUnterminatedJsonArray(raw: string): boolean;
78
+ /**
79
+ * Resolve a finding's severity: the OCSF severity NAME first (what Prowler
80
+ * writes), then the numeric enum, then `medium` — matching the default the
81
+ * existing external-findings path uses when a feed says nothing.
82
+ */
83
+ export declare function prowlerSeverity(finding: ProwlerFindingInput): Severity;
84
+ /** True when a Prowler compliance key names a framework we may lawfully carry. */
85
+ export declare function isFreeFrameworkKey(key: string): boolean;
86
+ /**
87
+ * The free-framework compliance references a finding carries, as
88
+ * `FRAMEWORK: req-id` strings. Paywalled frameworks are dropped silently and by
89
+ * design. Returns [] when the finding carries none.
90
+ */
91
+ export declare function freeComplianceRefs(finding: ProwlerFindingInput): string[];
92
+ export interface ProwlerParseResult {
93
+ /** FAIL findings mapped into the shared external-finding shape. */
94
+ findings: ExternalFinding[];
95
+ summary: {
96
+ total: number;
97
+ /** mapped to concerns (status_code FAIL, not muted). */
98
+ failed: number;
99
+ passed: number;
100
+ manual: number;
101
+ /** muted by the customer's Prowler mutelist — user intent we honour. */
102
+ muted: number;
103
+ /** items that did not match the DetectionFinding shape at all. */
104
+ malformed: number;
105
+ /** items whose `status_code` is one we do not model — distinct from malformed,
106
+ * so an operator can tell "new Prowler status" from "not a finding". */
107
+ unknown_status: number;
108
+ /** `metadata.product.version`, when the feed declared one. */
109
+ product_version: string | null;
110
+ /** set when type_uid drifted from the expected DetectionFinding value. */
111
+ schema_warning: string | null;
112
+ };
113
+ }
114
+ /**
115
+ * Parse a Prowler OCSF array into external findings + an honest tally.
116
+ *
117
+ * Only `status_code === "FAIL"` findings become concerns. PASS/MANUAL and muted
118
+ * findings are COUNTED but never mapped: a passing check is not a defect, and
119
+ * Prowler's mutelist is user-authored intent. The counts still matter — phase-2
120
+ * requirement coverage needs to say "3 checks FAIL, 12 PASS" rather than
121
+ * treating absence as unknown.
122
+ *
123
+ * Pure: no fs, no network.
124
+ */
125
+ export declare function parseProwlerOcsf(items: readonly unknown[]): ProwlerParseResult;
126
+ /**
127
+ * The identity-bearing cloud tags a Prowler finding carries, lower-cased, as
128
+ * last-resort correlation hints.
129
+ *
130
+ * Two filters, both about not mis-mapping: only identity keys (above), and only
131
+ * values long enough to identify something — a short value like `eu` would match
132
+ * half the repo. A wrong mapping is worse than an honest unmapped alert, because
133
+ * it puts a real cloud finding on an unrelated line of someone's code.
134
+ */
135
+ export declare function tagHints(labels: readonly string[] | undefined): string[];
136
+ export {};
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Refactor equivalence proof (Phase A — the "safe floor").
3
+ *
4
+ * The `refactor` verb relocates resources behind a module boundary and asserts
5
+ * behaviour is unchanged. The PROOF that backs that assertion has two layers:
6
+ *
7
+ * - the keys-free STATIC proof in this file (no cloud creds): same managed
8
+ * resource set, identical per-resource argument names, and — the highest-risk
9
+ * invariant — EVERY relocated address covered by a `moved {}` block, plus
10
+ * `terraform validate` and `terraform fmt -check` clean. `computeEquivalence`
11
+ * hard-fails on a single uncovered move: a missed `moved {}` is a silent
12
+ * destroy/create on live infrastructure (a sin of commission), so the gate
13
+ * must refuse rather than warn.
14
+ * - the OPTIONAL stronger proof (cloud creds present): a real `terraform plan`
15
+ * that is a pure-move plan (`isPureMovePlan` in plan.ts). That is corroboration
16
+ * layered on top of this floor, never a substitute for it.
17
+ *
18
+ * Everything here is pure parsing + set arithmetic over file contents — the tool
19
+ * wrapper supplies the before-tree (via `git show <base>:<path>`) and the
20
+ * after-tree (the working tree on disk), mirroring moduleExtraction.ts.
21
+ *
22
+ * `moved {}` semantics anchor:
23
+ * https://developer.hashicorp.com/terraform/language/modules/develop/refactoring
24
+ * moved { from = aws_instance.example to = module.ec2.aws_instance.example }
25
+ */
26
+ import type { LocalToolContext } from "#app/mcp/localContext";
27
+ import { type ModuleSourceKind } from "#app/mcp/modules";
28
+ export interface ResourceRef {
29
+ /** full Terraform address, module-prefixed: `module.x.aws_s3_bucket.logs`. */
30
+ address: string;
31
+ /** the resource's logical identity, module-path-independent: `aws_s3_bucket.logs`. */
32
+ key: string;
33
+ type: string;
34
+ name: string;
35
+ /** sorted top-level argument names (attributes + nested block labels). */
36
+ argNames: string[];
37
+ }
38
+ export interface MovedBlock {
39
+ from: string;
40
+ to: string;
41
+ }
42
+ export interface SourceFile {
43
+ /** repo-relative path, posix-separated. */
44
+ path: string;
45
+ hcl: string;
46
+ }
47
+ /**
48
+ * Parse every top-level `moved { from = <addr> to = <addr> }` block from HCL.
49
+ * Addresses are unquoted Terraform traversals (`module.x.aws_s3_bucket.logs`,
50
+ * `aws_instance.example[0]`), so the value is captured raw up to the line end or
51
+ * a trailing comment. Brace-matched so a stray `{}` in a comment can't fool it.
52
+ * A block missing either `from` or `to` is skipped (incomplete, not a relocation).
53
+ */
54
+ export declare function parseMovedBlocks(hcl: string): MovedBlock[];
55
+ /** collapse incidental whitespace so two spellings of the same address compare
56
+ * equal (`module.x . aws_s3_bucket.logs` is not valid HCL, but defensive). */
57
+ export declare function normaliseAddress(addr: string): string;
58
+ /** the leaf `<type>.<name>` of an address, stripping leading `module.X.` hops and
59
+ * any `[index]`/`["key"]` instance suffix. `module.db.aws_db_instance.main[0]`
60
+ * → `aws_db_instance.main`. */
61
+ export declare function addressKey(address: string): string;
62
+ /**
63
+ * Attribute every resource in a file tree to its full Terraform address.
64
+ * A resource in a file under a single-caller local module dir is prefixed
65
+ * `module.<caller>.`; a resource at root keeps its bare `<type>.<name>`. A module
66
+ * dir with MULTIPLE callers (instantiated more than once) or NESTED module dirs
67
+ * can't be attributed to one address deterministically — those resources are
68
+ * returned in `ambiguous` so the caller degrades honestly rather than asserting a
69
+ * false address. Pure.
70
+ */
71
+ export declare function attributeAddresses(files: SourceFile[]): {
72
+ resources: ResourceRef[];
73
+ ambiguous: string[];
74
+ };
75
+ export interface EquivalenceResult {
76
+ /** the overall keys-free verdict: all sub-checks below passed. The push
77
+ * guardrail hard-blocks when this is false. */
78
+ equivalent: boolean;
79
+ /** same multiset of `<type>.<name>` across the whole tree before and after. */
80
+ resource_set_equivalent: boolean;
81
+ /** identical top-level argument names for every resource present in both. */
82
+ arg_names_equivalent: boolean;
83
+ /** every relocated address is covered by a `moved {}` block (zero uncovered).
84
+ * THE highest-risk invariant — a false here means a silent destroy/create. */
85
+ moves_exhaustive: boolean;
86
+ /** count of address relocations detected between before and after. */
87
+ moves_detected: number;
88
+ /** the relocations we detected (the authoritative move set). */
89
+ expected_moves: MovedBlock[];
90
+ /** relocations with NO matching `moved {}` block — the hard-fail set. */
91
+ uncovered_moves: MovedBlock[];
92
+ /** `moved {}` blocks that match no detected relocation (likely a typo'd
93
+ * `to`/`from` — surfaced, but not on its own a hard-fail). */
94
+ spurious_moved_blocks: MovedBlock[];
95
+ /** logical keys added / removed between before and after (must be empty for
96
+ * an equivalence-preserving refactor; a non-empty `added` is the b.4 "adopting
97
+ * a module adds a KMS key" signal — that's an ALTERING change, not equivalence). */
98
+ resource_set_diff: {
99
+ added: string[];
100
+ removed: string[];
101
+ };
102
+ /** per-resource argument-name drift. */
103
+ arg_diffs: {
104
+ resource: string;
105
+ added: string[];
106
+ removed: string[];
107
+ }[];
108
+ /** addresses that couldn't be attributed deterministically (multi-instantiated
109
+ * or nested modules) — equivalence is reported but flagged incomplete. */
110
+ ambiguous: string[];
111
+ /** human-readable reasons the verdict is what it is. */
112
+ reasons: string[];
113
+ }
114
+ /**
115
+ * Compute the keys-free equivalence verdict from the before/after resource
116
+ * address sets and the `moved {}` blocks present in the after tree. Validate/fmt
117
+ * results are merged in by the tool wrapper (they need a subprocess); this pure
118
+ * core proves the three static invariants — resource-set preservation, argument
119
+ * preservation, and moved-block exhaustiveness.
120
+ */
121
+ export declare function computeEquivalence(before: ResourceRef[], after: ResourceRef[], movedBlocks: MovedBlock[], ambiguous?: string[]): EquivalenceResult;
122
+ /**
123
+ * Generate one `moved {}` block per resource being relocated under a module call,
124
+ * and the authoritative `expected_moves` list (the denominator
125
+ * `computeEquivalence` checks coverage against). Each input address keeps its
126
+ * leaf `<type>.<name>[index]`; the new address prefixes it with `module.<to_module>.`.
127
+ * Works for root→module and module→module — the
128
+ * leaf is taken after stripping any existing `module.X.` hops.
129
+ */
130
+ export declare function generateMovedBlocks(addresses: string[], toModule: string): {
131
+ hcl: string;
132
+ expected_moves: MovedBlock[];
133
+ };
134
+ export interface ModuleProvenance {
135
+ /** the local `module "<name>"` call name. */
136
+ name: string;
137
+ source: string;
138
+ /** the pinned version (registry `version`, or a git `?ref=`), or null. */
139
+ version: string | null;
140
+ kind: ModuleSourceKind;
141
+ /** true when the source is pinned to an exact version/ref — the provenance
142
+ * discipline for adopting a third-party module (the analog to a SHA-pinned
143
+ * action). An unpinned external module is a supply-chain risk to flag. */
144
+ pinned: boolean;
145
+ }
146
+ /**
147
+ * Record the provenance of every EXTERNAL module the config calls (registry /
148
+ * git / remote — local modules have in-tree code, no provenance to record).
149
+ * Used by the refactor b.4 evidence: "adopted `<source>` at `<version>`",
150
+ * with `pinned` flagging an unpinned adoption. Pure over the file tree.
151
+ */
152
+ export declare function collectModuleProvenance(files: SourceFile[]): ModuleProvenance[];
153
+ /** read the workspace's `.tf`/`.tfvars` tree and record external-module
154
+ * provenance (the impure wrapper the evidence bundle calls). */
155
+ export declare function collectWorkspaceProvenance(cwd: string): ModuleProvenance[];
156
+ /** the GitHub label an UNPROVEN b.4 change carries so it is never mistaken for a
157
+ * proven one. Applied to the PR and surfaced in the evidence bundle. */
158
+ export declare const PROPOSED_UNPROVEN_LABEL = "proposed-unproven";
159
+ /**
160
+ * The unmissable PR-body banner for a behaviour-ALTERING b.4 change that ran
161
+ * WITHOUT opt-in read creds (the default): Infraweaver proposes the change but
162
+ * proves nothing about its runtime effect. It must never silently read as a
163
+ * proven/equivalence change. Used verbatim at the top of such a PR's body and
164
+ * mirrored as the `proposed_unproven` marker in the evidence bundle.
165
+ */
166
+ export declare const PROPOSED_UNPROVEN_BANNER: string;
167
+ export declare const TerraformEquivalenceCheckParams: import("arktype/internal/variants/object.ts").ObjectType<object, {}>;
168
+ export declare function TerraformEquivalenceCheckTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<object, object>> & {
169
+ mutates?: boolean;
170
+ };
171
+ export declare const TerraformGenerateMovedParams: import("arktype/internal/variants/object.ts").ObjectType<{
172
+ resources: string[];
173
+ to_module: string;
174
+ }, {}>;
175
+ export declare function TerraformGenerateMovedTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
176
+ resources: string[];
177
+ to_module: string;
178
+ }, {
179
+ resources: string[];
180
+ to_module: string;
181
+ }>> & {
182
+ mutates?: boolean;
183
+ };
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Registry module intelligence — look up a PUBLISHED module's interface and
3
+ * search the public registry for modules to reuse.
4
+ *
5
+ * Complements `./currency.ts` (which answers "is a newer VERSION available?"):
6
+ * this answers "what does this module EXPECT and EXPOSE?" (root inputs/outputs)
7
+ * and "what published modules exist for this need?". It exists so the agent can
8
+ * wire a `module {}` block against a real, published interface — an organisation's
9
+ * own published modules included — instead of guessing variable names.
10
+ *
11
+ * Read-only, public default registry only (private/TFE hosts are rejected, same
12
+ * scope as the currency check), and degrades green on every failure.
13
+ */
14
+ import { type LookupStatus } from "#app/mcp/terraform/currency";
15
+ export interface ModuleInput {
16
+ name: string;
17
+ type: string | null;
18
+ description: string | null;
19
+ default: string | null;
20
+ required: boolean;
21
+ }
22
+ export interface ModuleOutput {
23
+ name: string;
24
+ description: string | null;
25
+ }
26
+ export interface ModuleDetail {
27
+ source: string;
28
+ version: string | null;
29
+ description: string | null;
30
+ verified: boolean;
31
+ downloads: number | null;
32
+ published_at: string | null;
33
+ provider_dependencies: string[];
34
+ inputs: ModuleInput[];
35
+ outputs: ModuleOutput[];
36
+ }
37
+ /** the default public registry host — a bare `namespace/name/provider` (or a
38
+ * `registry.terraform.io/`-prefixed source) resolves here with no auth. */
39
+ export declare const PUBLIC_REGISTRY_HOST = "registry.terraform.io";
40
+ /** a module lookup's outcome: the shared `LookupStatus` plus two private-registry
41
+ * policy outcomes the tool surfaces with their own message. */
42
+ export type ModuleLookupStatus = LookupStatus | "host_not_allowed" | "auth_required";
43
+ /**
44
+ * Split a module source into its optional registry `host` and the
45
+ * `namespace/name/provider` path. A host-prefixed source
46
+ * (`app.terraform.io/acme/vpc/aws`) targets a PRIVATE registry; a bare
47
+ * `namespace/name/provider` targets the public default registry (host === null).
48
+ * `path` is null when the source isn't a valid module address (the detected host,
49
+ * if any, is still returned for the caller's error message).
50
+ */
51
+ export declare function splitModuleAddress(source: string): {
52
+ host: string | null;
53
+ path: string | null;
54
+ };
55
+ export interface PrivateRegistryAuth {
56
+ /** the host(s) `token` authorises — a private source's host must be one of them.
57
+ * This is the security boundary: the agent names the source, but we only ever
58
+ * send the token to a host the operator allow-listed via `registry_host`. */
59
+ allowedHosts: string[];
60
+ /** the bearer token, or undefined when the run supplied no `registry_token`. */
61
+ token: string | undefined;
62
+ }
63
+ /** test seam: drop the per-host discovery cache. */
64
+ export declare function _clearModuleDiscoveryCache(): void;
65
+ /**
66
+ * Look up a published module's interface. A bare `namespace/name/provider` hits
67
+ * the public default registry (no auth). A host-prefixed `host/namespace/name/
68
+ * provider` targets a PRIVATE registry (HCP Terraform / Terraform Enterprise / any
69
+ * protocol-compliant registry): the host must be in `auth.allowedHosts` AND a token
70
+ * supplied, then the API base is resolved via service discovery and the detail
71
+ * fetched with `Authorization: Bearer …`. Pass `version` to pin the lookup; omit it
72
+ * for the latest.
73
+ */
74
+ export declare function fetchModuleDetail(source: string, opts?: {
75
+ version?: string | undefined;
76
+ auth?: PrivateRegistryAuth | undefined;
77
+ /** public-base override (tests). */
78
+ baseUrl?: string;
79
+ }): Promise<{
80
+ status: ModuleLookupStatus;
81
+ module: ModuleDetail | null;
82
+ }>;
83
+ export interface ModuleSearchResult {
84
+ address: string;
85
+ version: string | null;
86
+ description: string | null;
87
+ downloads: number | null;
88
+ verified: boolean;
89
+ }
90
+ export interface ModuleSearchQuery {
91
+ query: string;
92
+ namespace?: string | undefined;
93
+ provider?: string | undefined;
94
+ verified?: boolean | undefined;
95
+ limit?: number | undefined;
96
+ }
97
+ /**
98
+ * GET /v1/modules/search — discover published modules (the organisation's own
99
+ * namespace included) to REUSE instead of writing raw resources. Public default
100
+ * registry only. `limit` is clamped to a small range to keep the result tight.
101
+ */
102
+ export declare function searchRegistryModules(params: ModuleSearchQuery, opts?: {
103
+ baseUrl?: string;
104
+ }): Promise<{
105
+ status: LookupStatus;
106
+ modules: ModuleSearchResult[];
107
+ limit: number;
108
+ }>;
@@ -0,0 +1,41 @@
1
+ import { type NoiseAdjustment, type NoiseProfile } from "#app/mcp/terraform/noiseProfile";
2
+ import { type Concern } from "#app/mcp/terraform/types";
3
+ export interface RiskFactors {
4
+ severity: number;
5
+ exposure: number;
6
+ fixability: number;
7
+ /** G7: the fleet-noise down-rank applied, as a NEGATIVE contribution. Present
8
+ * only when one applied, so a reader can always reconstruct the score from
9
+ * its parts and see that nothing was adjusted invisibly. */
10
+ noise?: number;
11
+ }
12
+ export interface RiskScore {
13
+ score: number;
14
+ factors: RiskFactors;
15
+ /** the dismissal history behind `factors.noise`, when there is one. */
16
+ noise?: NoiseAdjustment;
17
+ }
18
+ /**
19
+ * Score a concern for SURFACING order.
20
+ *
21
+ * `profile` is the org's fleet-wide dismissal record (G7). It can only ever
22
+ * lower a score, is bounded and floored, and never applies to critical/high —
23
+ * see `noiseProfile.ts` for why a ranking model in an evidence product is
24
+ * allowed to reorder and nothing else. Defaults to empty, so every existing
25
+ * caller keeps the exact scores it had.
26
+ */
27
+ export declare function scoreConcern(concern: Concern, profile?: NoiseProfile): RiskScore;
28
+ export declare function riskScore(concern: Concern, profile?: NoiseProfile): number;
29
+ export interface RankedConcern {
30
+ concern_id: string;
31
+ rule_id: string;
32
+ severity: Concern["severity"];
33
+ category: Concern["category"];
34
+ location: Concern["location"];
35
+ risk_score: number;
36
+ risk_factors: RiskFactors;
37
+ /** G7: why this was ranked lower, in the org's own words. Present only when a
38
+ * down-rank applied — an unexplained demotion is indistinguishable from a bug. */
39
+ noise_reason?: string;
40
+ }
41
+ export declare function topRisks(concerns: Concern[], n?: number, profile?: NoiseProfile): RankedConcern[];
@@ -0,0 +1,116 @@
1
+ import type { ProvenFixPattern } from "#app/mcp/terraform/fixMemory";
2
+ import type { IdleFloorReport } from "#app/mcp/terraform/idleFloor";
3
+ import type { NoiseProfile } from "#app/mcp/terraform/noiseProfile";
4
+ import type { DriftEvidenceStatement } from "#app/mcp/terraform/planDrift";
5
+ import { type ProvenTransform, type TransformMatch, type UpgradeEvidenceStatement, type UpgradeIntent } from "#app/mcp/terraform/transformPacks";
6
+ import type { Concern } from "#app/mcp/terraform/types";
7
+ /**
8
+ * The terraform tool-to-tool session: the explicit, typed channel the terraform
9
+ * MCP tools use to hand results to one another (and to end-of-run reporting)
10
+ * across separate, agent-mediated invocations.
11
+ *
12
+ * This used to be ~11 loose fields on the 69-field `ToolState` god-bag, where
13
+ * the coupling was invisible in every signature and the ordering was silently
14
+ * load-bearing. Naming the channel makes the contract greppable and testable:
15
+ *
16
+ * - `terraform_scan` / `terraform_assess` / `read_findings` POPULATE the
17
+ * baseline (`baselineConcernIds` / `baselineConcernKeys` /
18
+ * `baselineFmtDriftFiles`) and the acted-on set (`lastScanConcerns`).
19
+ * - `terraform_plan` POPULATES `plannedDestroy` + the confidence signals
20
+ * (`lastBlastTier`, `lastIdempotent`); `infracost_diff` populates
21
+ * `lastCostDirection`; `terraform_emit_sarif` sets `emittedSarifPath`;
22
+ * the refactor equivalence check sets `refactorEquivalence` and
23
+ * `terraform_emit_evidence` sets `refactorProposedUnproven`.
24
+ * - `terraform_verify_remediation` CONSUMES the baseline + confidence signals;
25
+ * `terraform_validate` consumes `baselineFmtDriftFiles`; the push guardrails
26
+ * consume `plannedDestroy` / `refactorEquivalence`; end-of-run reporting
27
+ * (`runLifecycle`, `cloudReport`) consumes `lastScanConcerns` /
28
+ * `emittedSarifPath` / the refactor markers.
29
+ *
30
+ * Every field is still LITERAL (records a thing that happened) and every
31
+ * consumer degrades gracefully when its producer didn't run this session
32
+ * (`undefined`), so the ordering is documented here rather than assumed.
33
+ * Reach it through {@link scanSessionOf} so a partially-constructed `ToolState`
34
+ * (chiefly in tests) lazily gets a session rather than throwing.
35
+ */
36
+ export interface ScanSession {
37
+ baselineConcernIds?: string[];
38
+ baselineConcernKeys?: string[];
39
+ baselineFmtDriftFiles?: string[];
40
+ lastScanConcerns?: Concern[];
41
+ plannedDestroy?: {
42
+ stateful: {
43
+ address: string;
44
+ action: string;
45
+ type: string;
46
+ }[];
47
+ ephemeral: {
48
+ address: string;
49
+ action: string;
50
+ type: string;
51
+ }[];
52
+ };
53
+ lastBlastTier?: "low" | "medium" | "high";
54
+ lastIdempotent?: boolean;
55
+ lastCostDirection?: "increase" | "decrease" | "no-change" | "unknown";
56
+ lastIdleFloor?: IdleFloorReport | undefined;
57
+ lastDrift?: DriftEvidenceStatement | undefined;
58
+ emittedSarifPath?: string;
59
+ refactorEquivalence?: {
60
+ equivalent: boolean;
61
+ resource_set_equivalent: boolean;
62
+ arg_names_equivalent: boolean;
63
+ moves_exhaustive: boolean;
64
+ moves_detected: number;
65
+ validate_passed: boolean;
66
+ fmt_clean: boolean;
67
+ uncovered_moves: {
68
+ from: string;
69
+ to: string;
70
+ }[];
71
+ reasons: string[];
72
+ };
73
+ refactorProposedUnproven?: boolean;
74
+ fixMemoryLibrary?: ProvenFixPattern[];
75
+ noiseProfile?: NoiseProfile;
76
+ provenFixCaptures?: ProvenFixPattern[];
77
+ provenTransformLibrary?: ProvenTransform[];
78
+ transformMatches?: TransformMatch[];
79
+ upgradeIntent?: UpgradeIntent;
80
+ lastPlanTotals?: {
81
+ to_add: number;
82
+ to_change: number;
83
+ to_destroy: number;
84
+ destructive: number;
85
+ };
86
+ planFollowedUpgradeDetection?: boolean;
87
+ }
88
+ /**
89
+ * The TC-2.2 upgrade statement for this session, or undefined when no provider
90
+ * pack applied.
91
+ *
92
+ * Deliberately computed in ONE place. Two consumers need it — the signed
93
+ * evidence bundle and the fleet report — and if each assembled the plan facts
94
+ * itself they could disagree, which would mean telling an org that a transform
95
+ * planned cleanly while the signed artefact for that same run said otherwise.
96
+ */
97
+ export declare function upgradeStatementOf(session: ScanSession): UpgradeEvidenceStatement | undefined;
98
+ /** A fresh, empty terraform session. */
99
+ export declare function createScanSession(): ScanSession;
100
+ /**
101
+ * The single entry point to the terraform session on a `ToolState`. Lazily
102
+ * initializes it, so a partially-constructed `ToolState` (chiefly test fixtures
103
+ * that cast `{}`) still reads and writes safely rather than dereferencing
104
+ * `undefined`. In production `initToolState` seeds it, so this only ever
105
+ * lazy-creates for such fixtures.
106
+ */
107
+ export declare function scanSessionOf(toolState: {
108
+ scanSession?: ScanSession;
109
+ }): ScanSession;
110
+ /**
111
+ * true once terraform_scan / read_findings captured a pre-fix baseline this
112
+ * session. terraform_verify_remediation key-maps requested ids against the
113
+ * baseline when this holds, and reports regressions on that basis; otherwise it
114
+ * falls back to raw-id matching and marks regressions as unchecked.
115
+ */
116
+ export declare function hasBaseline(session: ScanSession): boolean;
@@ -0,0 +1,15 @@
1
+ import { type RunScannersOptions } from "#app/mcp/terraform/scanners";
2
+ import type { ScannerOutcome } from "#app/mcp/terraform/types";
3
+ /** Content hash of every Terraform file under `cwd` (sorted for determinism),
4
+ * mixed with an `extra` signature (the toolchain). Reading the files is cheap
5
+ * next to running Trivy/Checkov, and hashing CONTENT (not mtime) means an edit
6
+ * that rewrites a file in place still busts the key. */
7
+ export declare function treeHash(cwd: string, extra: string): string;
8
+ /**
9
+ * `runScanners` with a per-process, tree-content-keyed cache — ONLY for the
10
+ * read-only scan path. Identical signature to `runScanners`. Never call this from
11
+ * the verifier; call `runScanners` there so it always re-scans fresh.
12
+ */
13
+ export declare function runScannersCached(cwd: string, opts?: RunScannersOptions): ScannerOutcome[];
14
+ /** Drop the cache (test isolation / explicit invalidation). */
15
+ export declare function clearScannerCache(): void;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Per-scanner network egress control (supply-chain phase 0.2).
3
+ *
4
+ * THE THREAT. The TeamPCP trivy payload dumped runner memory and *called home* —
5
+ * the breach was the exfiltration, not the dump. The 0.1 integrity gate refuses
6
+ * builds we KNOW are compromised; this bounds the ones we don't: a scanner that
7
+ * cannot egress is a local nuisance, not a breach.
8
+ *
9
+ * THE MECHANISM. Env-level proxy denial: the scanner subprocess gets
10
+ * `HTTP(S)_PROXY` pointed at a blackhole (a local port nothing listens on, so
11
+ * every proxied connection fails fast) and `NO_PROXY` naming only the hosts that
12
+ * tool legitimately needs (trivy's DB registries, tflint's ruleset releases —
13
+ * which bypass the proxy and connect directly). Go and Python HTTP stacks both
14
+ * honour these variables, which covers all three scanners.
15
+ *
16
+ * HONESTY. This is the *degrade path* of the roadmap item — an env contract,
17
+ * not a kernel boundary: a malicious binary can ignore proxy vars. So an
18
+ * outcome produced under this control records `egress_isolation: "partial"`,
19
+ * never a stronger claim. The netns default-deny (a real kernel boundary) is
20
+ * the unbuilt upgrade; when it lands, this stays as the fallback for runners
21
+ * that can't grant namespace privileges. Deny is OPT-IN (`tools_network`
22
+ * input): turning it on by default would break DB pulls on runners whose
23
+ * mirrors we can't know about.
24
+ */
25
+ export type EgressPolicy = "open" | "deny";
26
+ /** the parsed `tools_network` input: a base policy + per-tool overrides. */
27
+ export interface ToolsNetworkDirective {
28
+ base: EgressPolicy;
29
+ perTool: Map<string, EgressPolicy>;
30
+ /** unrecognised tokens (warn, never fatal — matching `tools_enabled`). */
31
+ unknown: string[];
32
+ /** extra NO_PROXY hosts admitted for every denied tool (private mirrors). */
33
+ extraAllowedHosts: string[];
34
+ }
35
+ /**
36
+ * Hosts each scanner legitimately needs when its egress is denied. Deliberately
37
+ * MINIMAL — every entry is a documented, first-party distribution endpoint, not
38
+ * a convenience:
39
+ *
40
+ * - trivy: vulnerability-DB / checks-bundle OCI registries (`trivy-db`,
41
+ * `trivy-checks` live on GHCR with the ECR Public mirror as fallback).
42
+ * - tflint: ruleset plugins are GitHub release assets, fetched by
43
+ * `tflint --init`.
44
+ * - checkov: scans fully offline — needs nothing.
45
+ *
46
+ * An operator whose runner uses a private mirror adds it via
47
+ * `tools_network: "deny,allow=<host>"`.
48
+ */
49
+ export declare const SCANNER_EGRESS_ALLOWLIST: Readonly<Record<string, readonly string[]>>;
50
+ /**
51
+ * Parse the `tools_network` input (comma- or newline-separated). Grammar
52
+ * mirrors `tools_enabled`:
53
+ *
54
+ * - `deny` / `open` — base policy for every scanner (default open);
55
+ * - `<tool>=deny|open` — per-tool override (`trivy=deny`);
56
+ * - `allow=<host>` — extra NO_PROXY host admitted for every denied tool
57
+ * (private DB mirrors).
58
+ *
59
+ * Unrecognised tokens are collected, never fatal — a typo must not silently
60
+ * change a security posture NOR fail the run.
61
+ */
62
+ export declare function parseToolsNetwork(raw: string | undefined): ToolsNetworkDirective;
63
+ /** The effective policy for one tool under a directive. */
64
+ export declare function egressPolicyFor(tool: string, directive: ToolsNetworkDirective | undefined): EgressPolicy;
65
+ /**
66
+ * The env overlay that denies a tool's egress, or null when its policy is open.
67
+ * Both case spellings are set — Go reads either, Python's requests prefers
68
+ * lowercase. `NO_PROXY` admits the tool's documented endpoints (plus loopback,
69
+ * which is never egress) so the tool keeps working while everything else dies
70
+ * at the blackhole.
71
+ */
72
+ export declare function egressEnvFor(tool: string, directive: ToolsNetworkDirective | undefined): Record<string, string> | null;