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,115 @@
1
+ import { TOOL_NAME } from "#app/brand";
2
+ import type { LocalToolContext } from "#app/mcp/localContext";
3
+ import type { EvidenceSubject } from "#app/mcp/terraform/evidence";
4
+ import { type SignatureMetadata } from "#app/mcp/terraform/signing";
5
+ import type { Concern, Severity } from "#app/mcp/terraform/types";
6
+ import { type ConcernVerificationStatus } from "#app/mcp/terraform/verification";
7
+ /**
8
+ * The spec version emitted. CycloneDX 1.7 is ECMA-424 2nd edition — the version
9
+ * SBOM/VEX consumers standardise on, so emitting 1.6 would date the artefact.
10
+ *
11
+ * The document deliberately stays inside the 1.6 STRUCTURAL SUBSET: every field
12
+ * used here exists in both schemas, so a 1.6-only consumer still parses it.
13
+ * `vex.test.ts` validates the same bytes against both schema fixtures, which is
14
+ * what turns that from an intention into a guarantee.
15
+ *
16
+ * The signing path is untouched by this: signatures cover the exact bytes on
17
+ * disk, not the schema they conform to.
18
+ */
19
+ export declare const CYCLONEDX_SPEC_VERSION: "1.7";
20
+ /** The older spec version the emitted document remains parseable as. */
21
+ export declare const CYCLONEDX_COMPATIBLE_SPEC_VERSION: "1.6";
22
+ export declare const DEFAULT_VEX_PATH = "compliance/infraweaver-vex.cdx.json";
23
+ /** CycloneDX impact-analysis states this emitter may produce. `not_affected`
24
+ * is deliberately NOT in this union: absence of a finding is not proof, so an
25
+ * unfired control never becomes a clearance. */
26
+ export type VexAnalysisState = "exploitable" | "in_triage";
27
+ interface VexProperty {
28
+ name: string;
29
+ value: string;
30
+ }
31
+ interface VexComponent {
32
+ type: "file";
33
+ "bom-ref": string;
34
+ name: string;
35
+ }
36
+ interface VexVulnerability {
37
+ "bom-ref": string;
38
+ /** the scanner's rule id (trivy AVD-*, checkov CKV_*, tflint rule…). */
39
+ id: string;
40
+ source: {
41
+ name: string;
42
+ };
43
+ description: string;
44
+ ratings: {
45
+ severity: Severity;
46
+ method: "other";
47
+ }[];
48
+ analysis: {
49
+ state: VexAnalysisState;
50
+ detail: string;
51
+ };
52
+ affects: {
53
+ ref: string;
54
+ }[];
55
+ properties: VexProperty[];
56
+ }
57
+ export interface CycloneDxVexDocument {
58
+ bomFormat: "CycloneDX";
59
+ specVersion: typeof CYCLONEDX_SPEC_VERSION;
60
+ serialNumber: string;
61
+ version: number;
62
+ metadata: {
63
+ timestamp: string;
64
+ tools: {
65
+ components: {
66
+ type: "application";
67
+ name: typeof TOOL_NAME;
68
+ version: string;
69
+ }[];
70
+ };
71
+ component: {
72
+ type: "application";
73
+ "bom-ref": string;
74
+ name: string;
75
+ };
76
+ properties: VexProperty[];
77
+ };
78
+ components: VexComponent[];
79
+ vulnerabilities: VexVulnerability[];
80
+ }
81
+ /** the five-status verdict → CycloneDX impact-analysis state (honest subset). */
82
+ export declare function vexAnalysisState(status: ConcernVerificationStatus): VexAnalysisState;
83
+ /**
84
+ * Build the CycloneDX 1.7 VEX document from the assessment's OPEN concerns.
85
+ * Pure (clock/identity passed in); UUIDs are name-based, seeded like the OSCAL
86
+ * emitter — same inputs ⇒ identical bytes (the seed includes the generation
87
+ * timestamp, so ids are stable per generation, not across wall-clock re-runs).
88
+ * One vulnerability per concern; each affected file becomes a `file` component
89
+ * the vulnerability `affects` by bom-ref. When `signature` is supplied the
90
+ * public key + fingerprint are embedded in the document's metadata properties
91
+ * (inside the signed bytes), so a consumer holding only the artefact + `.sig`
92
+ * can verify it offline — the same self-contained contract as the evidence
93
+ * bundle.
94
+ */
95
+ export declare function buildVexDocument(args: {
96
+ concerns: Concern[];
97
+ subject: EvidenceSubject;
98
+ generatedAt: string;
99
+ version?: string;
100
+ signature?: SignatureMetadata | null;
101
+ }): CycloneDxVexDocument;
102
+ export declare const TerraformEmitVexParams: import("arktype/internal/variants/object.ts").ObjectType<{
103
+ output_path?: string;
104
+ severity_threshold?: "critical" | "high" | "info" | "low" | "medium";
105
+ }, {}>;
106
+ export declare function TerraformEmitVexTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
107
+ output_path?: string;
108
+ severity_threshold?: "critical" | "high" | "info" | "low" | "medium";
109
+ }, {
110
+ output_path?: string;
111
+ severity_threshold?: "critical" | "high" | "info" | "low" | "medium";
112
+ }>> & {
113
+ mutates?: boolean;
114
+ };
115
+ export {};
@@ -0,0 +1,67 @@
1
+ import { type Concern } from "#app/mcp/terraform/types";
2
+ /** Look up a resource type's attribute names in the installed provider schema.
3
+ * Returns null when the type is unknown — the caller must then make NO claim. */
4
+ export type ResourceAttributes = (resourceType: string) => ReadonlySet<string> | null;
5
+ export interface WriteOnlySite {
6
+ resourceType: string;
7
+ resourceName: string;
8
+ /** the persisted argument as written, e.g. `password`. */
9
+ argument: string;
10
+ /** the counterpart the INSTALLED provider declares, e.g. `password_wo`. */
11
+ writeOnlyArgument: string;
12
+ /** the `_wo_version` companion, when the provider declares one. Null means the
13
+ * provider takes the write-only argument without a version — do not invent it. */
14
+ versionArgument: string | null;
15
+ /** 1-based line of the offending assignment in the file. */
16
+ line: number;
17
+ /** true when the value is a bare string literal — a credential written into the
18
+ * repo, not merely into state. Strictly worse, and not fixable by a rename. */
19
+ literal: boolean;
20
+ /** true when the value opens a heredoc, i.e. it continues past this line. The
21
+ * finding is unaffected (the value is persisted either way) but a single-line
22
+ * rewrite cannot express it, so none is offered. */
23
+ multiline: boolean;
24
+ /** the assignment as written. */
25
+ before: string;
26
+ /** the behaviour-equivalent write-only form. Empty for a `literal` or
27
+ * `multiline` value: there is no correct one-line rewrite for either, and
28
+ * offering one would imply the transform had solved a problem it hasn't. */
29
+ after: string;
30
+ }
31
+ /**
32
+ * Every argument in `hcl` that is persisted to state while the installed provider
33
+ * offers a write-only counterpart.
34
+ *
35
+ * Skipped without a finding: a resource type the schema doesn't know (we cannot
36
+ * judge it), a block that already assigns the counterpart (mid-migration, or the
37
+ * author set both — a provider-level conflict `terraform validate` reports better
38
+ * than we could), and meta-arguments.
39
+ */
40
+ export declare function findPersistedSecrets(hcl: string, attributesFor: ResourceAttributes): WriteOnlySite[];
41
+ /** The remediation hint for one site — the exact edit, or the reason there isn't
42
+ * a mechanical one. */
43
+ export declare function writeOnlyHint(site: WriteOnlySite): string;
44
+ /**
45
+ * Turn detected sites into native concerns.
46
+ *
47
+ * Severity is the band floor (`medium`) for the mechanical case and `high` for a
48
+ * literal: a referenced secret in state is a real exposure with a one-line fix,
49
+ * whereas a committed literal needs rotation before anything else and should
50
+ * escalate. That split is also what keeps the mechanical case auto-remediable —
51
+ * `classifyAutonomy` routes high-severity security findings to a human, which is
52
+ * correct for the literal and wrong for the rename.
53
+ */
54
+ export declare function persistedSecretsToConcerns(sites: WriteOnlySite[], file: string): Concern[];
55
+ export interface WriteOnlyScan {
56
+ concerns: Concern[];
57
+ /** set when the provider schema was unavailable, so this rule did NOT run. An
58
+ * honest coverage gap, never a silent pass. */
59
+ coverageGap: string | null;
60
+ }
61
+ /**
62
+ * The workspace-level entry point, over files ALREADY READ by the caller —
63
+ * `[repo-relative POSIX path, contents]` pairs. The native pack reads the tree
64
+ * once and passes the same text to every rule; re-reading each `.tf` per rule
65
+ * would double the I/O of every scan on exactly the monorepos where it hurts.
66
+ */
67
+ export declare function scanWriteOnlyFiles(cwd: string, files: ReadonlyArray<readonly [string, string]>): WriteOnlyScan;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Facade for the Terraform MCP toolchain. The implementation lives in the
3
+ * per-concern modules under `./terraform/`; this file re-exports every symbol so
4
+ * existing importers (`#app/mcp/terraform`) keep resolving unchanged.
5
+ *
6
+ * types — Concern + shared types/helpers (ids, paths, roots, severity)
7
+ * scanners — fmt / validate / tflint / trivy / checkov + provider/arg schema
8
+ * decisions — grouping, autonomy, confidence, refusal, prevention, co-location
9
+ * cost — infracost breakdown / delta / escalation
10
+ * currency — registry version currency (provider + module upgrade intel)
11
+ * registry — published-module lookup/search (public + private registries)
12
+ * findings — reviewer findings + SARIF ingest/emit
13
+ * plan — plan parsing + destroy/blast/stability/aggregation
14
+ * tools — the MCP Tool factories + their *Params schemas
15
+ * verification — the five-status taxonomy (fail / not-code-verifiable / …)
16
+ * evidence — the backend-free compliance evidence bundle + emitter
17
+ * signing — detached Ed25519 signing for the compliance artefacts
18
+ * vex — the CycloneDX 1.7 VEX emitter
19
+ * nativeRules — the native rule pack's registry (ids, bands, honesty pairs)
20
+ * writeOnly — secret-persisted-to-state + its FP suppression
21
+ * governance — action triggers + dynamic destroy protection
22
+ * tfquery — *.tfquery.hcl discovery inventory (never remediation input)
23
+ * hcl — the shared, tolerant HCL block scanner every rule reads through
24
+ */
25
+ export * from "#app/mcp/terraform/cost";
26
+ export * from "#app/mcp/terraform/currency";
27
+ export * from "#app/mcp/terraform/decisions";
28
+ export * from "#app/mcp/terraform/evidence";
29
+ export * from "#app/mcp/terraform/findings";
30
+ export * from "#app/mcp/terraform/governance";
31
+ export * from "#app/mcp/terraform/hcl";
32
+ export * from "#app/mcp/terraform/moduleDocs";
33
+ export * from "#app/mcp/terraform/nativeRules";
34
+ export * from "#app/mcp/terraform/nativeScan";
35
+ export * from "#app/mcp/terraform/normalization";
36
+ export * from "#app/mcp/terraform/oscal";
37
+ export * from "#app/mcp/terraform/paths";
38
+ export * from "#app/mcp/terraform/plan";
39
+ export * from "#app/mcp/terraform/policyAuthor";
40
+ export * from "#app/mcp/terraform/refactor";
41
+ export * from "#app/mcp/terraform/registry";
42
+ export * from "#app/mcp/terraform/risk";
43
+ export * from "#app/mcp/terraform/scanners";
44
+ export * from "#app/mcp/terraform/signing";
45
+ export * from "#app/mcp/terraform/subprocess";
46
+ export * from "#app/mcp/terraform/tfquery";
47
+ export * from "#app/mcp/terraform/tools";
48
+ export * from "#app/mcp/terraform/types";
49
+ export * from "#app/mcp/terraform/verification";
50
+ export * from "#app/mcp/terraform/vex";
51
+ export * from "#app/mcp/terraform/writeOnly";
@@ -0,0 +1,85 @@
1
+ import type { LocalToolContext } from "#app/mcp/localContext";
2
+ /**
3
+ * Terratest scaffolding (opt-in via the `terratest` input). When Infraweaver
4
+ * GENERATES a reusable module, it can also scaffold a minimal Go
5
+ * [Terratest](https://terratest.gruntwork.io/) smoke test + a Terraform-native
6
+ * `*.tftest.hcl` so the generated infrastructure is testable from the first
7
+ * commit. Both tests plan the module **directly** — Infraweaver does not generate
8
+ * `examples/` fixtures.
9
+ *
10
+ * Design choices:
11
+ * - **Plan-only, never apply.** The scaffolded tests run `terraform init` +
12
+ * `plan` against the module and assert it plans cleanly. Infraweaver never
13
+ * applies (no cloud credentials — the sovereignty stance), so the generated
14
+ * tests mirror that: they're a deployability smoke test the USER runs in their
15
+ * own pipeline (with creds) for real apply/assert coverage.
16
+ * - **Pure generation.** The file contents are computed deterministically here
17
+ * and unit-tested; the agent writes the returned files with its own tools.
18
+ * - The Go test + native test files fall outside the Terraform-only default
19
+ * allow-list, so the `terratest` input also widens the push guardrail (see
20
+ * guardrails.ts).
21
+ */
22
+ export interface ScaffoldFile {
23
+ /** repo-relative path to write. */
24
+ path: string;
25
+ content: string;
26
+ }
27
+ export interface TerratestScaffold {
28
+ files: ScaffoldFile[];
29
+ notes: string[];
30
+ }
31
+ /**
32
+ * Build a Terratest smoke-test + native test for a generated module. Pure:
33
+ * `moduleName` names the module, `modulePath` is its repo-relative dir, and
34
+ * `variables` (optional) are surfaced as TODO placeholders so the test author
35
+ * fills in real values. Both tests plan the module directly (no `examples/`
36
+ * fixture). Returns the files to write + operator notes.
37
+ */
38
+ export declare function scaffoldTerratest(opts: {
39
+ moduleName: string;
40
+ modulePath: string;
41
+ variables?: {
42
+ name: string;
43
+ required?: boolean;
44
+ }[];
45
+ }): TerratestScaffold;
46
+ /**
47
+ * native variant — scaffold a Terraform-native test (Terraform 1.6+) that
48
+ * lives in the module's own `tests/` dir and plans the module in place. Lighter
49
+ * than Terratest: no Go toolchain, just HCL that Terraform runs with
50
+ * `terraform test`. Plan-only `run` block (no apply, so no cloud needed to
51
+ * construct the test). Pure.
52
+ */
53
+ export declare function scaffoldTerraformTest(opts: {
54
+ moduleName: string;
55
+ modulePath: string;
56
+ variables?: {
57
+ name: string;
58
+ required?: boolean;
59
+ }[];
60
+ }): ScaffoldFile;
61
+ export declare const ScaffoldTerratestParams: import("arktype/internal/variants/object.ts").ObjectType<{
62
+ module_name: string;
63
+ module_path: string;
64
+ variables?: {
65
+ name: string;
66
+ required?: boolean;
67
+ }[];
68
+ }, {}>;
69
+ export declare function ScaffoldTerratestTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
70
+ module_name: string;
71
+ module_path: string;
72
+ variables?: {
73
+ name: string;
74
+ required?: boolean;
75
+ }[];
76
+ }, {
77
+ module_name: string;
78
+ module_path: string;
79
+ variables?: {
80
+ name: string;
81
+ required?: boolean;
82
+ }[];
83
+ }>> & {
84
+ mutates?: boolean;
85
+ };
@@ -0,0 +1,76 @@
1
+ /**
2
+ * The instruction/data boundary (OWASP **LLM01**).
3
+ *
4
+ * Infraweaver is an LLM agent that ingests repositories it does not trust and
5
+ * emits code and verdicts. Attacker-influenced text reaches the model from
6
+ * several directions — scanned `.tf` files, commit messages, scanner output,
7
+ * and (least obviously) the **description field of an external CSPM finding** —
8
+ * and none of it is instructions, however much of it is phrased that way.
9
+ *
10
+ * Two different defences, because the risk has two shapes:
11
+ *
12
+ * 1. **Framing** ({@link UNTRUSTED_DATA_NOTICE}) — a single shared statement of
13
+ * the rule, applied wherever untrusted text enters the model's context. It
14
+ * was previously written out once, inline, in the reviewer subagent prompt;
15
+ * one channel framed and the rest silent is not a boundary. Framing is a
16
+ * mitigation, not a guarantee: a determined injection can still be persuasive,
17
+ * which is why it is paired with (2) and why the tool-scope invariant is
18
+ * enforced structurally rather than by asking nicely (see below).
19
+ *
20
+ * 2. **Markup neutralisation** ({@link neutralizeMarkup}) — deterministic, and
21
+ * the part that actually *cannot* be argued with. Externally-authored text
22
+ * ends up rendered in PR bodies, review comments and SARIF, where GitHub
23
+ * interprets Markdown and a useful subset of HTML. Injected markup there can
24
+ * forge Infraweaver's own voice (`> [!NOTE] Infraweaver: approved`), hide content
25
+ * from a human reviewer (`<details>`, HTML comments), or smuggle a tracking
26
+ * pixel. Defusing the control characters costs nothing and removes the class.
27
+ *
28
+ * WHAT THIS DELIBERATELY DOES NOT DO. It does not try to *detect* prompt
29
+ * injection — no keyword list, no "suspicious phrasing" score. Such a detector
30
+ * is unbounded, fails silently, and would create exactly the false confidence
31
+ * this codebase avoids elsewhere. The invariant that actually matters — a
32
+ * read-only mode cannot perform a write — is enforced by construction: the
33
+ * per-run tool deny set is derived from each tool's `mutates` flag and the MCP
34
+ * server throws if it resolves empty, so an injected instruction has no write
35
+ * tool to reach for even if the model were fully persuaded.
36
+ */
37
+ /**
38
+ * The shared framing for untrusted text. Written to be read by a model: it says
39
+ * what the text is, why it addresses you, and — critically — what the
40
+ * consequence of being steered would be, because "ignore instructions in the
41
+ * data" alone has repeatedly proven too abstract to hold.
42
+ */
43
+ export declare const UNTRUSTED_DATA_NOTICE: string;
44
+ /**
45
+ * Wrap untrusted text in a labelled, clearly-terminated fence.
46
+ *
47
+ * The delimiter is deliberately long and unlikely to occur naturally; any
48
+ * occurrence inside the payload is defanged so the content cannot close its own
49
+ * fence and continue as apparent prose outside it.
50
+ */
51
+ export declare function fenceUntrusted(label: string, content: string): string;
52
+ /**
53
+ * Neutralise Markdown/HTML control constructs in externally-authored text.
54
+ *
55
+ * Applied where third-party text enters OUR data model, so every downstream
56
+ * surface (PR body, review comment, job summary, SARIF message) is covered once
57
+ * rather than each having to remember. The transform is deliberately narrow —
58
+ * it defuses *structure*, not words, so the message stays readable:
59
+ *
60
+ * - CR/LF → a single space multi-line payloads posing as separate sections
61
+ * - `\p{Cc}` / `\p{Cf}` stripped invisible text a human reviewer cannot judge
62
+ * - `<` → `&lt;` HTML tags (`<details>`, `<img onerror>`, comments)
63
+ * - fences/backticks defused code blocks escaping their container
64
+ * - leading `>` → `\>` blockquotes + GitHub callouts (voice forgery)
65
+ * - leading `#` → `\#` headings that restructure a rendered report
66
+ *
67
+ * Idempotent in effect (re-running never corrupts already-safe text) and a no-op
68
+ * for the overwhelmingly common case of ordinary prose.
69
+ */
70
+ export declare function neutralizeMarkup(text: string): string;
71
+ /**
72
+ * `neutralizeMarkup` for an optional field, preserving "absent" as absent.
73
+ * Returns null for text that neutralises to nothing (e.g. a payload that was
74
+ * entirely zero-width characters), so a caller's `|| fallback` still fires.
75
+ */
76
+ export declare function neutralizeOptional(text: string | null | undefined): string | null;
@@ -0,0 +1,8 @@
1
+ import type { CloudToolContext } from "#app/mcp/capabilityContext";
2
+ export declare function UploadFileTool(ctx: CloudToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
3
+ path: string;
4
+ }, {
5
+ path: string;
6
+ }>> & {
7
+ mutates?: boolean;
8
+ };
@@ -0,0 +1,181 @@
1
+ /**
2
+ * model alias registry.
3
+ *
4
+ * slugs use the format `provider/model-id` (e.g. "anthropic/claude-opus").
5
+ * bump `resolve` when a new model generation ships — the alias (slug) stays stable.
6
+ */
7
+ /**
8
+ * routing discriminant for entries whose `resolve` is dynamic — looked up
9
+ * from a separate env var at run time rather than fixed in the catalog.
10
+ *
11
+ * `"bedrock"` means the actual model ID comes from `BEDROCK_MODEL_ID`
12
+ * (an AWS-canonical Bedrock model ID like `eu.anthropic.claude-opus-4-7`
13
+ * or `amazon.nova-pro-v1:0`). `"vertex"` means the actual model ID comes
14
+ * from `VERTEX_MODEL_ID` (a Vertex AI model ID like
15
+ * `claude-opus-4-1@20250805` or `gemini-2.5-pro`). enterprise hosted-model
16
+ * customers self-select for version control — silent alias bumps would break
17
+ * compliance review, model-access enrollment, and provisioned-throughput
18
+ * contracts. so the single `bedrock/byok` and `vertex/byok` entries are
19
+ * routing slugs, not model aliases: the harness reads the backend-specific
20
+ * env var and routes to claude-code for Anthropic IDs or opencode for
21
+ * everything else.
22
+ *
23
+ * `"openai-compatible"` means the actual model ID comes from
24
+ * `OPENAI_COMPATIBLE_MODEL_ID` and the endpoint from `OPENAI_COMPATIBLE_BASE_URL`
25
+ * — a bring-your-own OpenAI-compatible server (a self-hosted vLLM / Ollama / TGI,
26
+ * a HuggingFace Inference Endpoint, Azure OpenAI, …). It always routes through
27
+ * opencode's custom-provider block (the AI SDK's `@ai-sdk/openai-compatible`
28
+ * adapter); claude-code is never involved.
29
+ */
30
+ export type ModelRouting = "bedrock" | "vertex" | "openai-compatible";
31
+ export interface ModelAlias {
32
+ /** stable alias stored in DB, e.g. "anthropic/claude-opus" */
33
+ slug: string;
34
+ /** provider key (matches providers keys) */
35
+ provider: string;
36
+ /** human-readable name shown in dropdowns */
37
+ displayName: string;
38
+ /** concrete models.dev specifier, e.g. "anthropic/claude-opus-4-6". sentinel for routing entries — never passed to a CLI directly. */
39
+ resolve: string;
40
+ /** full models.dev specifier for the OpenRouter equivalent (undefined for free models and routing entries) */
41
+ openRouterResolve: string | undefined;
42
+ /** top-tier pick for this provider — preferred during auto-select */
43
+ preferred: boolean;
44
+ /** whether this alias is free and requires no API key */
45
+ isFree: boolean;
46
+ /** slug of a replacement model — presence implies this model is deprecated */
47
+ fallback: string | undefined;
48
+ /** dynamic-resolution discriminant — see ModelRouting docs */
49
+ routing: ModelRouting | undefined;
50
+ /** alias key (within same provider) of the cheaper sibling loupe should
51
+ * use as its lens-fanout subagent. e.g. claude-opus → "claude-sonnet". */
52
+ subagentModel: string | undefined;
53
+ /** hide from selectable lists (UI dropdowns, CLI pickers). does NOT affect
54
+ * resolution — for that use `fallback`. used for internal-only tier targets
55
+ * (e.g. gpt-5.4 as a subagent target without exposing it to users). */
56
+ hidden: boolean;
57
+ }
58
+ interface ModelDef {
59
+ displayName: string;
60
+ /** concrete models.dev specifier, e.g. "anthropic/claude-opus-4-6" */
61
+ resolve: string;
62
+ /** full models.dev specifier for the OpenRouter equivalent, e.g. "openrouter/anthropic/claude-opus-4.6" */
63
+ openRouterResolve?: string;
64
+ preferred?: boolean;
65
+ envVars?: readonly string[];
66
+ isFree?: boolean;
67
+ /** slug of a replacement model — presence implies this model is deprecated */
68
+ fallback?: string;
69
+ /** dynamic-resolution discriminant — see ModelRouting docs */
70
+ routing?: ModelRouting;
71
+ /** alias key (within same provider) of the cheaper sibling loupe should
72
+ * use as its lens-fanout subagent (e.g. claude-opus → "claude-sonnet"). */
73
+ subagentModel?: string;
74
+ /** hide from selectable lists. does NOT affect resolution; for that use `fallback`. */
75
+ hidden?: boolean;
76
+ }
77
+ export interface ProviderConfig {
78
+ displayName: string;
79
+ envVars: readonly string[];
80
+ /** credentials authored only via `infraweaver auth <provider>` — never
81
+ * user-facing in `init`, never documented as a manual GHA secret. counted
82
+ * for hasAnyKey / log-redaction purposes but excluded from any prompt /
83
+ * paste flow. CLI-managed magic. see wiki/codex-auth.md. */
84
+ managedCredentials?: readonly string[];
85
+ models: Record<string, ModelDef>;
86
+ }
87
+ export declare const providers: {
88
+ anthropic: ProviderConfig;
89
+ openai: ProviderConfig;
90
+ google: ProviderConfig;
91
+ xai: ProviderConfig;
92
+ deepseek: ProviderConfig;
93
+ moonshotai: ProviderConfig;
94
+ opencode: ProviderConfig;
95
+ bedrock: ProviderConfig;
96
+ vertex: ProviderConfig;
97
+ "openai-compatible": ProviderConfig;
98
+ openrouter: ProviderConfig;
99
+ };
100
+ export type ModelProvider = keyof typeof providers;
101
+ export declare function parseModel(slug: string): {
102
+ provider: string;
103
+ model: string;
104
+ };
105
+ export declare function getModelProvider(slug: string): string;
106
+ export declare function getProviderDisplayName(slug: string): string | undefined;
107
+ export declare function getModelEnvVars(slug: string): string[];
108
+ /** managed credentials are authored only via `infraweaver auth <provider>` — they
109
+ * count as "configured" for hasAnyKey-style UI checks but are never offered as
110
+ * a manual-paste option in `init` or the AgentSettings env-var button row.
111
+ * see `provider.managedCredentials` and wiki/codex-auth.md. */
112
+ export declare function getModelManagedCredentials(slug: string): string[];
113
+ export declare const modelAliases: ModelAlias[];
114
+ export declare const DEFAULT_PROXY_MODEL: string;
115
+ /** short label for the model auto-select picks today (console hint copy). */
116
+ export declare function getAutoSelectHintModel(): string;
117
+ /** resolve a model slug to its concrete models.dev specifier (e.g. "anthropic/claude-opus-4-6") */
118
+ export declare function resolveModelSlug(slug: string): string | undefined;
119
+ /**
120
+ * walk the fallback chain to the terminal (non-deprecated) alias.
121
+ * returns undefined if the chain is broken, exhausted, or cyclic.
122
+ *
123
+ * use this in UI display sites (dropdown trigger labels, PR-comment footers,
124
+ * etc.) so a deprecated stored slug renders as the model the user actually
125
+ * runs against — not the historical name. selectable lists should still hide
126
+ * deprecated and internal-only aliases by filtering on `!a.fallback && !a.hidden`.
127
+ */
128
+ export declare function resolveDisplayAlias(slug: string): ModelAlias | undefined;
129
+ /**
130
+ * resolve a model slug to the CLI-ready model string, following the fallback
131
+ * chain when a model is deprecated. returns the first non-deprecated resolve
132
+ * target, or undefined if the chain is exhausted or broken.
133
+ */
134
+ export declare function resolveCliModel(slug: string): string | undefined;
135
+ /**
136
+ * resolve a model slug to the OpenRouter-ready model string, following the
137
+ * fallback chain when a model is deprecated. returns undefined if the chain
138
+ * is exhausted/broken or the terminal alias has no openrouter equivalent
139
+ * (e.g. free opencode models).
140
+ */
141
+ export declare function resolveOpenRouterModel(slug: string): string | undefined;
142
+ /** env var that supplies the Bedrock model ID for the `bedrock/byok` slug. */
143
+ export declare const BEDROCK_MODEL_ID_ENV = "BEDROCK_MODEL_ID";
144
+ /** env var that supplies the Vertex AI model ID for the `vertex/byok` slug. */
145
+ export declare const VERTEX_MODEL_ID_ENV = "VERTEX_MODEL_ID";
146
+ /** env var that supplies the model ID for the `openai-compatible/byok` slug. */
147
+ export declare const OPENAI_COMPATIBLE_MODEL_ID_ENV = "OPENAI_COMPATIBLE_MODEL_ID";
148
+ /**
149
+ * the Bedrock model ID passed to claude-code or opencode is whatever the
150
+ * user set in `BEDROCK_MODEL_ID` — Infraweaver never resolves or upgrades it.
151
+ * we route by checking whether the ID names an Anthropic model: claude-code
152
+ * handles Anthropic-on-Bedrock natively (with `CLAUDE_CODE_USE_BEDROCK=1`),
153
+ * everything else goes through opencode's `amazon-bedrock` provider.
154
+ *
155
+ * AWS Bedrock IDs come in two shapes:
156
+ * - dotted foundation IDs: `eu.anthropic.claude-opus-4-7`,
157
+ * `anthropic.claude-haiku-4-5-20251001-v1:0`, `amazon.nova-pro-v1:0`,
158
+ * `meta.llama4-scout-17b-instruct-v1:0`. AWS-published, lowercase, the
159
+ * foundation provider always appears as a discrete dot-segment.
160
+ * - inference-profile ARNs: `arn:aws:bedrock:eu-west-2:<acct>:application-inference-profile/<user-name>`.
161
+ * `<user-name>` is operator-chosen, so a naive substring check is fragile
162
+ * in both directions (Anthropic profile named without "anthropic" → routes
163
+ * to opencode and misses CLAUDE_CODE_USE_BEDROCK; non-Anthropic profile
164
+ * whose name happens to contain "anthropic" → routes to claude-code).
165
+ *
166
+ * we anchor on a discrete dot-segment match (case-insensitive). this catches
167
+ * every published foundation ID and is conservative for ARN-form IDs: ARN
168
+ * names that don't include "anthropic" as their own dot-segment route to
169
+ * opencode by default. operators using ARN-form IDs whose backing model is
170
+ * Anthropic should set `INFRAWEAVER_AGENT=claude` to force the right route, or
171
+ * include the foundation segment in the profile name.
172
+ */
173
+ export declare function isBedrockAnthropicId(bedrockModelId: string): boolean;
174
+ /**
175
+ * Vertex Anthropic model IDs start with the Claude family name, e.g.
176
+ * `claude-opus-4-1@20250805`. partner-model resource paths can contain the
177
+ * substring "anthropic" elsewhere, so the Bedrock segment check does not
178
+ * transfer — anchor on the model ID prefix instead.
179
+ */
180
+ export declare function isVertexAnthropicId(vertexModelId: string): boolean;
181
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function addressReviewsMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function assessMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function buildMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function complianceAuditMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function costOptimizationMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function driftDetectMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function fixMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function incrementalReviewMode(t: ToolRef): Mode;
@@ -0,0 +1,24 @@
1
+ import { type AgentId } from "#app/external";
2
+ import type { Mode } from "./types.ts";
3
+ export { PR_SUMMARY_FORMAT, REFACTOR_PR_FORMAT, REMEDIATION_PR_FORMAT, } from "./prFormats.ts";
4
+ export type { Mode, ToolRef } from "./types.ts";
5
+ export declare function computeModes(agentId: AgentId): Mode[];
6
+ export declare const modes: Mode[];
7
+ /** built-in mode names in canonical casing. used to validate / canonicalize the
8
+ * `mode` action input so a CI run can pin a mode deterministically instead of
9
+ * relying on the agent's prompt-driven `select_mode` choice. mode names are
10
+ * agent-independent (only the embedded tool refs differ per agent), so the
11
+ * opencode-rendered list is the authoritative name set. */
12
+ export declare const BUILTIN_MODE_NAMES: readonly string[];
13
+ /**
14
+ * modes that legitimately never modify the working tree. used by the post-run
15
+ * dirty-tree gate to suppress the "commit and push" nudge — those modes
16
+ * complete by submitting a review, posting a comment, or reporting a verdict,
17
+ * not by touching files. any leftover in the tree at end-of-run is incidental
18
+ * tool noise (e.g. a `node_modules/` from a stray install attempt) on an
19
+ * ephemeral worktree; nudging the agent to commit it would produce a spurious
20
+ * PR. derived from the `nonCommitting` flag each read-only mode declares in
21
+ * its own factory, so a new mode carries its committing-ness with it instead
22
+ * of needing a second edit here.
23
+ */
24
+ export declare const NON_COMMITTING_MODES: ReadonlySet<string>;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function modernizeDeprecatedMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function planMode(t: ToolRef): Mode;
@@ -0,0 +1,2 @@
1
+ import type { Mode, ToolRef } from "./types.ts";
2
+ export declare function policyGateMode(t: ToolRef): Mode;