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,114 @@
1
+ import { type Concern } from "#app/mcp/terraform/types";
2
+ export { cyberEssentialsScore } from "#app/mcp/cyberEssentials";
3
+ import type { ToolState } from "#app/toolState";
4
+ import { cloudOidcAudience } from "#app/utils/apiUrl";
5
+ export { cloudOidcAudience };
6
+ /**
7
+ * Resolve the credential to authenticate the Cloud report with, in order of
8
+ * preference:
9
+ * 1. An explicit `tmnd_` org token (the `api_token` input).
10
+ * 2. A GitHub Actions OIDC token — the tokenless GitHub App path. Requires
11
+ * `permissions: id-token: write`; the App installation is the consent gate
12
+ * Cloud checks. Returns undefined when neither is available (pure OSS run).
13
+ */
14
+ export declare function resolveCloudCredential(apiToken: string | undefined): Promise<string | undefined>;
15
+ /**
16
+ * Ingest seam — POST a finished run's findings/posture to Infraweaver Cloud
17
+ * so the dashboard reflects this repo. This is the explicit ORG-TOKEN path: the
18
+ * caller passes the `tmnd_` token (the `api_token` input); the tokenless GitHub
19
+ * App path reports differently and standalone OSS runs don't report at all.
20
+ *
21
+ * The wire shape matches infraweaver-ui `reportSchema`
22
+ * (src/features/api/schemas.ts) — kept in sync by hand across the action ⇄ cloud
23
+ * JSON boundary (the two codebases can't share types).
24
+ */
25
+ export type CloudPosture = "clean" | "advisory" | "action-required";
26
+ /** Posture from the open concern set — any critical/high ⇒ action-required. */
27
+ export declare function derivePosture(concerns: Concern[]): CloudPosture;
28
+ /** the Cloud-bound refactor (modularise) verdict, mirrors infraweaver-ui
29
+ * reportSchema.run.refactor.equivalence_verdict. */
30
+ export type RefactorVerdict = "equivalence-proven" | "equivalence-failed" | "proposed-unproven";
31
+ /**
32
+ * The refactor (modularise) proof for the Cloud report, or undefined on a
33
+ * non-refactor run (so the wire omits it). Built from the recorded keys-free
34
+ * EQUIVALENCE proof when one ran (b.1/b.2/b.3), else the b.4 `proposed — unproven`
35
+ * marker — an equivalence proof always wins, so a change is never both. Asserts
36
+ * only what the engine proved: a failed/absent proof is reported as such, never
37
+ * upgraded. Pure over `toolState`. Mirrors infraweaver-ui reportSchema.run.refactor.
38
+ */
39
+ export declare function buildRefactorReport(toolState: ToolState): {
40
+ equivalence_verdict: RefactorVerdict;
41
+ proposed_unproven: boolean;
42
+ moved_block_count: number;
43
+ uncovered_moves: number;
44
+ } | undefined;
45
+ /** Build the `/report` request body from the finished run's tool state. Exported
46
+ * for tests; pure (reads only `toolState` + GitHub env). */
47
+ export declare function buildReportBody(toolState: ToolState): {
48
+ commit_sha: string | undefined;
49
+ posture: CloudPosture;
50
+ ce_score: number;
51
+ prs_open: number | undefined;
52
+ findings: {
53
+ concern_id: string;
54
+ concern_key: string;
55
+ source: "checkov" | "infraweaver" | "reviewer" | "terraform-fmt" | "terraform-validate" | "tflint" | "trivy";
56
+ rule_id: string;
57
+ severity: "critical" | "high" | "info" | "low" | "medium";
58
+ category: "correctness" | "cost" | "security" | "style";
59
+ evidence: string;
60
+ file: string;
61
+ line: number | undefined;
62
+ remediation_hint: string | undefined;
63
+ code_snippet: string | undefined;
64
+ doc_url: string | undefined;
65
+ compliance: string[];
66
+ risk_score: number;
67
+ suppressed?: true;
68
+ suppression_reason?: string;
69
+ suppression_source?: "inline" | "policy";
70
+ suppression_expires?: string | undefined;
71
+ }[];
72
+ proven_fixes?: {
73
+ finding_type: string;
74
+ source: string | undefined;
75
+ canonical_class: string | undefined;
76
+ category: string;
77
+ title: string;
78
+ description: string | undefined;
79
+ remediation_hint: string | undefined;
80
+ before_example: string | undefined;
81
+ }[];
82
+ proven_transforms?: import("#app/mcp/terraform/transformPacks").ProvenTransform[];
83
+ run: {
84
+ run_number: number | undefined;
85
+ external_run_id: string | undefined;
86
+ mode: string | undefined;
87
+ trigger: string | undefined;
88
+ status: "success";
89
+ engine_crosswalk_version: string;
90
+ refactor?: {
91
+ equivalence_verdict: RefactorVerdict;
92
+ proposed_unproven: boolean;
93
+ moved_block_count: number;
94
+ uncovered_moves: number;
95
+ };
96
+ };
97
+ };
98
+ /**
99
+ * Best-effort report of this run to Infraweaver Cloud. No-ops (silently) when:
100
+ * - `API_URL` unset — standalone BYOK; don't POST into the marketing host.
101
+ * - no scan ran (`lastScanConcerns` undefined) — nothing to report.
102
+ * - no credential — neither an `api_token` nor a mintable GitHub Actions OIDC
103
+ * token (no `id-token: write`); the run stays pure OSS.
104
+ * A network/Cloud failure is logged at debug and swallowed — reporting must
105
+ * never flip an already-successful run outcome.
106
+ */
107
+ export declare function reportToCloud(input: {
108
+ toolState: ToolState;
109
+ repo: {
110
+ owner: string;
111
+ name: string;
112
+ };
113
+ apiToken: string | undefined;
114
+ }): Promise<void>;
@@ -0,0 +1,29 @@
1
+ /** sandbox-hidden home for infraweaver-managed on-disk secrets in CI. bash via
2
+ * MCP shell tmpfs-overlays this path; opencode's internal auth module
3
+ * bypasses external_directory and reaches the real file. mirrors the
4
+ * pattern in action/agents/claude.ts installManagedSettings.
5
+ *
6
+ * not used for codex auth in local dev — the sandbox is no-op there, so
7
+ * the path doesn't matter. local dev keeps the existing $HOME path. */
8
+ export declare const INFRAWEAVER_DATA_DIR = "/var/lib/infraweaver";
9
+ export interface InstalledCodexAuth {
10
+ /** absolute path of the auth.json we wrote — caller passes this to the
11
+ * post-hook via core.saveState for refresh-detection later. */
12
+ authPath: string;
13
+ /** value to set as XDG_DATA_HOME for the OpenCode subprocess. */
14
+ xdgDataHome: string;
15
+ /** refresh_token from the env at materialization time. post-hook
16
+ * compares against the on-disk file after the run to detect whether
17
+ * OpenCode refreshed during the session (only happens on long runs
18
+ * that span >50min — see wiki/codex-auth.md "Concurrency"). */
19
+ originalRefresh: string;
20
+ }
21
+ /** materialize CODEX_AUTH_JSON from env into a disk path OpenCode reads from.
22
+ * returns null when the env var is absent, malformed, or wrong auth mode —
23
+ * caller treats null as "no codex auth, fall through to API key flow".
24
+ *
25
+ * The env value is read as-is — we parse + write it here and set
26
+ * `process.env.XDG_DATA_HOME` so every opencode subprocess discovers the
27
+ * auth.json; no refresh and no DB interaction. Freshness is the supplier's
28
+ * responsibility (see the header caveat on static-secret expiry). */
29
+ export declare function installCodexAuth(): InstalledCodexAuth | null;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Pure-stdlib (fetch + Buffer) Codex OAuth refresh + JWT exp decoding.
3
+ *
4
+ * Lives here (not in codexAuth.ts) so the Next.js server side can import it
5
+ * via infraweaver/internal without dragging in node:child_process / spawn /
6
+ * mkdtemp from the rest of codexAuth.ts. Used by:
7
+ * - action/utils/codexAuth.ts (re-exports refreshCodexAuthBody)
8
+ * - utils/codexSecretRotation.ts (server-side maybeRotate at run-context)
9
+ *
10
+ * See wiki/codex-auth.md for the end-to-end refresh lifecycle.
11
+ */
12
+ export interface CodexAuthBody {
13
+ auth_mode: "chatgpt";
14
+ tokens: {
15
+ access_token: string;
16
+ refresh_token: string;
17
+ id_token?: string;
18
+ account_id?: string;
19
+ };
20
+ last_refresh?: string;
21
+ }
22
+ /** OAuth client id Codex CLI and OpenCode both use against `auth.openai.com`.
23
+ * Same chain — a refresh token minted via `codex login --device-auth` can be
24
+ * refreshed against this client_id. */
25
+ export declare const CODEX_OAUTH_CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
26
+ export declare const CODEX_OAUTH_TOKEN_URL = "https://auth.openai.com/oauth/token";
27
+ /** thrown when the OAuth provider rejects the refresh token (4xx). callers
28
+ * can distinguish "race-lost / token revoked" from network errors via
29
+ * `instanceof OAuthInvalidGrantError`. */
30
+ export declare class OAuthInvalidGrantError extends Error {
31
+ readonly status: number;
32
+ constructor(status: number, body: string);
33
+ }
34
+ /** force one refresh round-trip against the OAuth provider. returns the
35
+ * rotated Codex-shaped blob (the auth.json body verbatim). does NOT persist
36
+ * — caller is responsible for writing back to wherever the token lives.
37
+ *
38
+ * server-side callers (maybeRotateCodexSecret) hold a DB row lock around
39
+ * this call so concurrent runs serialize: first one rotates, subsequent
40
+ * ones see the fresh value and skip. The 10s timeout is critical for that
41
+ * use: it caps how long a stalled auth.openai.com holds the row lock,
42
+ * keeping us well under the enclosing 30s transaction budget so the lock
43
+ * always releases and queued callers get a turn instead of timing out on
44
+ * the tx wrapper. Real OAuth latency is sub-second; 10s is generous. */
45
+ export declare function refreshCodexAuthBody(body: CodexAuthBody): Promise<CodexAuthBody>;
46
+ /** decode the access_token's JWT payload and return its `exp` claim in ms
47
+ * since epoch. returns null if the token isn't a parseable JWT or has no
48
+ * `exp` claim — caller falls back to "treat as expired".
49
+ *
50
+ * We don't verify the JWT signature (we'd need OpenAI's JWKS); we're only
51
+ * using the claim as a freshness hint. The actual auth check happens
52
+ * server-side at OpenAI when the token is used — trusting a fake JWT here
53
+ * would just delay the inevitable 401 from OpenAI. No security boundary
54
+ * at this decode step. */
55
+ export declare function decodeJwtExpMs(token: string): number | null;
56
+ /** parse + validate a Codex auth.json body from its JSON-string form.
57
+ * returns null on any shape mismatch — caller treats as "no codex auth". */
58
+ export declare function parseCodexAuthBody(raw: string): CodexAuthBody | null;
59
+ /** serialize a CodexAuthBody to its canonical on-disk form. */
60
+ export declare function stringifyCodexAuthBody(body: CodexAuthBody): string;
@@ -0,0 +1,63 @@
1
+ export type DiffLineRange = {
2
+ startLine: number;
3
+ endLine: number;
4
+ };
5
+ export type DiffTocEntry = {
6
+ filename: string;
7
+ startLine: number;
8
+ endLine: number;
9
+ };
10
+ export type DiffCoverageFileBreakdown = {
11
+ filename: string;
12
+ startLine: number;
13
+ endLine: number;
14
+ totalLines: number;
15
+ coveredLines: number;
16
+ coveredRanges: DiffLineRange[];
17
+ unreadRanges: DiffLineRange[];
18
+ };
19
+ export type DiffCoverageBreakdown = {
20
+ totalLines: number;
21
+ coveredLines: number;
22
+ unreadLines: number;
23
+ coveragePercent: number;
24
+ coveredRanges: DiffLineRange[];
25
+ unreadRanges: DiffLineRange[];
26
+ files: DiffCoverageFileBreakdown[];
27
+ };
28
+ export type DiffCoverageState = {
29
+ diffPath: string;
30
+ totalLines: number;
31
+ tocEntries: DiffTocEntry[];
32
+ coveredRanges: DiffLineRange[];
33
+ coveragePreflightRan: boolean;
34
+ lastBreakdown?: string | undefined;
35
+ };
36
+ export declare function countLines(params: {
37
+ content: string;
38
+ }): number;
39
+ export declare function parseDiffTocEntries(params: {
40
+ toc: string;
41
+ }): DiffTocEntry[];
42
+ export declare function createDiffCoverageState(params: {
43
+ diffPath: string;
44
+ totalLines: number;
45
+ toc: string;
46
+ previous?: DiffCoverageState | undefined;
47
+ }): DiffCoverageState;
48
+ export declare function recordDiffReadFromToolUse(params: {
49
+ state: DiffCoverageState | undefined;
50
+ toolName: string;
51
+ input: unknown;
52
+ cwd: string;
53
+ }): boolean;
54
+ export declare function getDiffCoverageBreakdown(params: {
55
+ state: DiffCoverageState;
56
+ }): DiffCoverageBreakdown;
57
+ export declare function renderDiffCoverageBreakdown(params: {
58
+ diffPath: string;
59
+ breakdown: DiffCoverageBreakdown;
60
+ }): string;
61
+ export declare function countLinesInRanges(params: {
62
+ ranges: DiffLineRange[];
63
+ }): number;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Small typed accessors for process env — read once, in one place, instead of
3
+ * re-implementing the same `process.env.X` guard at every call site. Provider
4
+ * API-key names live in `models.ts`; the Cloud host/allowlist in
5
+ * `cloudFetchCore.ts`; this module holds the generic presence/read helpers plus
6
+ * the shared-temp-dir accessor.
7
+ */
8
+ /** True when `name` is set to a non-empty string. Folds the copy that lived
9
+ * privately in agent.ts / apiKeys.ts / byokFallback.ts / vertex.ts. */
10
+ export declare function hasEnvVar(name: string): boolean;
11
+ /** The trimmed value of `name`, or undefined when unset/blank. */
12
+ export declare function readEnv(name: string): string | undefined;
13
+ /** The action's shared temp dir, or undefined outside a Infraweaver action run
14
+ * (created by `createTempDirectory()` in setup.ts, which sets INFRAWEAVER_TEMP_DIR). */
15
+ export declare function readTempDir(): string | undefined;
16
+ /**
17
+ * The GitHub Actions run context (the `GITHUB_*` env the runner injects), read
18
+ * through one typed accessor instead of `process.env.GITHUB_*` at ~30 sites.
19
+ * Every field is optional — the vars are absent outside a GHA runner (local dev,
20
+ * the stdio server), and callers already treat them as best-effort metadata.
21
+ */
22
+ export type GitHubContext = {
23
+ /** `owner/repo`. */
24
+ repository: string | undefined;
25
+ /** the commit SHA under test. */
26
+ sha: string | undefined;
27
+ /** the short branch/tag name (`GITHUB_REF_NAME`). */
28
+ refName: string | undefined;
29
+ /** the full ref (`refs/heads/…`). */
30
+ ref: string | undefined;
31
+ runId: string | undefined;
32
+ runNumber: string | undefined;
33
+ eventName: string | undefined;
34
+ actor: string | undefined;
35
+ workflow: string | undefined;
36
+ serverUrl: string | undefined;
37
+ workspace: string | undefined;
38
+ };
39
+ export declare function githubContext(): GitHubContext;
40
+ /**
41
+ * The action's shared temp dir, throwing when it isn't set — the single home for
42
+ * the guard that ~9 call sites previously re-implemented with drifting messages.
43
+ * Pass `context` (a tool name) to keep the "must run in infraweaver action context"
44
+ * hint the checkout/commit tools surfaced.
45
+ */
46
+ export declare function getTempDir(context?: string): string;
@@ -0,0 +1,17 @@
1
+ import type { ToolState } from "#app/toolState";
2
+ interface ReportErrorParams {
3
+ toolState: ToolState;
4
+ error: string;
5
+ title?: string;
6
+ /**
7
+ * When the run has no pre-existing progress comment to update (silent
8
+ * IncrementalReview / pull_request_synchronize, mode-less polls), create
9
+ * a fresh issue comment on `toolState.issueNumber` instead of returning
10
+ * silently. Used for terminal errors (BillingError, TransientError) where
11
+ * the GH job summary is the only other surface and most users never open
12
+ * it. see #775.
13
+ */
14
+ createIfMissing?: boolean;
15
+ }
16
+ export declare function reportErrorToComment(ctx: ReportErrorParams): Promise<void>;
17
+ export {};
@@ -0,0 +1,8 @@
1
+ type ExitSignalHandler = (signal: "SIGINT" | "SIGTERM") => void | Promise<void>;
2
+ /**
3
+ * Register a handler to run when the process receives SIGINT or SIGTERM.
4
+ * Returns a dispose function that removes the handler.
5
+ */
6
+ export declare function onExitSignal(handler: ExitSignalHandler): () => void;
7
+ export declare function exitWithSignal(signal: "SIGINT" | "SIGTERM"): void;
8
+ export {};
@@ -0,0 +1 @@
1
+ export declare function fixDoubleEscapedString(str: string): string;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * git authentication via GIT_ASKPASS.
3
+ *
4
+ * a localhost HTTP server serves tokens via UUID codes whose lifetime is
5
+ * bounded by the parent $git() invocation: register() makes the code active,
6
+ * the script (and any sibling subprocess — e.g. git-lfs pre-push) can fetch
7
+ * the token any number of times, and $git()'s finally calls revoke() to
8
+ * close the window. each $git() call writes a unique askpass script with
9
+ * the server port+code baked into the file body — no secrets in subprocess
10
+ * env. a replay of a revoked code trips a 409 and revokes the underlying
11
+ * github installation token.
12
+ *
13
+ * see wiki/askpass.md for full security documentation.
14
+ */
15
+ import type { GitAuthServer } from "#app/utils/gitAuthServer";
16
+ type SafeGitSubcommand = "fetch" | "push";
17
+ type GitAuthOptions = {
18
+ token: string;
19
+ cwd?: string;
20
+ disableHooks?: boolean;
21
+ };
22
+ type GitResult = {
23
+ stdout: string;
24
+ stderr: string;
25
+ };
26
+ /**
27
+ * resolve and fingerprint the git binary. must be called once at startup
28
+ * (in main()) before any agent code runs, so the path and hash reflect
29
+ * the untampered binary.
30
+ *
31
+ * resolves symlinks via realpath so the hash is of the actual binary.
32
+ * a malicious agent with sudo could replace the binary later, which is
33
+ * caught by verifyGitBinary() before each authenticated call.
34
+ */
35
+ export declare function resolveGit(): void;
36
+ export declare function setGitAuthServer(server: GitAuthServer): void;
37
+ /**
38
+ * execute authenticated git command via ASKPASS.
39
+ *
40
+ * subcommand is restricted to "fetch" | "push" — operations that talk to
41
+ * a remote and need credentials. working-tree operations (checkout, merge)
42
+ * use $() from shell.ts which has no token.
43
+ *
44
+ * per call: registers a code with the auth server (valid for the lifetime
45
+ * of this invocation), writes a unique askpass script with port+code baked
46
+ * in, spawns git with GIT_ASKPASS pointing to the script. on completion,
47
+ * revokes the code and deletes the script in finally. multiple sibling
48
+ * askpass calls within one invocation (e.g. git itself + git-lfs pre-push)
49
+ * all see a valid code; replay attempts after finally trip a 409 and the
50
+ * server revokes the underlying github token as a tamper signal.
51
+ *
52
+ * @example
53
+ * await $git("fetch", ["origin", "main"], { token });
54
+ * await $git("push", ["-u", "origin", "feature"], { token });
55
+ */
56
+ export declare function $git(subcommand: SafeGitSubcommand, args: string[], options: GitAuthOptions): Promise<GitResult>;
57
+ /**
58
+ * shallow-clone unreachable: when an existing local depth is too shallow for
59
+ * git to traverse to the requested ref's ancestry, the remote walk fails with
60
+ * one of these wordings (git emits the full OID via oid_to_hex, so the bound
61
+ * is 40 for SHA-1 or 64 for SHA-256). detecting both lets a single deepen
62
+ * retry recover before the error reaches the agent — see issue #564 for the
63
+ * original `git_fetch` precedent and #656 for the `checkout_pr` follow-up.
64
+ */
65
+ export declare const SHALLOW_UNREACHABLE_PATTERNS: RegExp[];
66
+ /**
67
+ * large enough to clear the merge base on most real-world PRs without
68
+ * downloading the full history; matches the fallback used by
69
+ * `checkoutPrBranch` when the GitHub compare API is unavailable.
70
+ */
71
+ export declare const DEEPEN_RETRY_DEPTH = 1000;
72
+ /**
73
+ * authenticated `git fetch` that recovers from shallow-unreachable errors
74
+ * by retrying once with `--deepen=1000`. callers pass the same args they
75
+ * would to `$git("fetch", ...)`; on shallow-unreachable failures in a
76
+ * shallow repo, the second attempt prepends `--deepen=N` and strips any
77
+ * caller-supplied `--depth=` (the two flags are mutually exclusive, and
78
+ * the caller's depth is what got us into this mess).
79
+ *
80
+ * non-shallow-unreachable errors and non-shallow repos rethrow unchanged,
81
+ * so this is safe to wrap any fetch without changing fast-path behavior.
82
+ */
83
+ export declare function $gitFetchWithDeepen(args: string[], options: GitAuthOptions, label?: string): Promise<GitResult>;
84
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ASKPASS-based git authentication server.
3
+ *
4
+ * serves tokens via a localhost HTTP server with per-$git()-call UUID codes.
5
+ * each $git() call gets a unique askpass script with the port+code baked in.
6
+ * the token never appears in subprocess env — only the script file path.
7
+ *
8
+ * lifetime: the code is valid for as long as the $git() invocation is
9
+ * running. multiple askpass calls within one invocation (e.g. git's own
10
+ * fetch/push + a git-lfs pre-push hook that also authenticates) all
11
+ * succeed. $git() calls revoke(code) in finally; subsequent requests for
12
+ * a revoked code trigger immediate token revocation via the GitHub API
13
+ * as a tamper-evidence precaution (an agent replaying the code after the
14
+ * legitimate window has closed is the realistic attack we still catch).
15
+ */
16
+ export type GitAuthServer = {
17
+ port: number;
18
+ register: (token: string) => string;
19
+ revoke: (code: string) => void;
20
+ writeAskpassScript: (code: string) => string;
21
+ close: () => Promise<void>;
22
+ [Symbol.asyncDispose]: () => Promise<void>;
23
+ };
24
+ export declare function startGitAuthServer(tmpdir: string): Promise<GitAuthServer>;
@@ -0,0 +1,104 @@
1
+ import { throttling } from "@octokit/plugin-throttling";
2
+ import { Octokit } from "@octokit/rest";
3
+ export interface InstallationToken {
4
+ token: string;
5
+ expires_at: string;
6
+ installation_id: number;
7
+ repository: string;
8
+ ref: string;
9
+ runner_environment: string;
10
+ owner?: string;
11
+ }
12
+ /**
13
+ * Snapshot the GHA OIDC request creds from the env. Returns undefined off-CI or
14
+ * once they have been scrubbed. Call this BEFORE main.ts's restricted-mode env
15
+ * scrub so a mid-run token re-mint can still fetch a fresh OIDC JWT afterwards.
16
+ */
17
+ export declare function readOidcCreds(): OidcCreds | undefined;
18
+ /**
19
+ * Fetch a fresh OIDC JWT from the GHA token service using stashed creds — the
20
+ * env-independent equivalent of `core.getIDToken(audience)` (same
21
+ * `${url}&audience=` shape + bearer request token). Lets a re-mint succeed after
22
+ * the ACTIONS_ID_TOKEN_REQUEST_* env vars `core.getIDToken` reads are scrubbed.
23
+ */
24
+ export declare function fetchOidcIdToken(creds: OidcCreds, audience: string): Promise<string>;
25
+ type ReadWrite = "read" | "write";
26
+ type WriteOnly = "write";
27
+ /**
28
+ * GitHub App installation access token permissions.
29
+ * passed to `POST /app/installations/{id}/access_tokens` to scope the token.
30
+ * fields and allowed values come from the `app-permissions` OpenAPI schema.
31
+ * @see https://docs.github.com/en/rest/apps/installations#create-an-installation-access-token-for-an-app
32
+ * @see https://github.com/github/rest-api-description — components.schemas.app-permissions
33
+ */
34
+ type GitHubAppPermissions = {
35
+ actions?: ReadWrite;
36
+ artifact_metadata?: ReadWrite;
37
+ attestations?: ReadWrite;
38
+ checks?: ReadWrite;
39
+ contents?: ReadWrite;
40
+ deployments?: ReadWrite;
41
+ discussions?: ReadWrite;
42
+ issues?: ReadWrite;
43
+ packages?: ReadWrite;
44
+ pages?: ReadWrite;
45
+ pull_requests?: ReadWrite;
46
+ security_events?: ReadWrite;
47
+ statuses?: ReadWrite;
48
+ workflows?: WriteOnly;
49
+ };
50
+ /**
51
+ * Stashed GitHub Actions OIDC request credentials (`ACTIONS_ID_TOKEN_REQUEST_URL`
52
+ * + `_TOKEN`). Captured by {@link readOidcCreds} while the env vars are still
53
+ * present so a mid-run token re-mint can fetch a fresh OIDC JWT even after main.ts
54
+ * scrubs those vars from the env (which it does in every shell mode).
55
+ */
56
+ export type OidcCreds = {
57
+ requestUrl: string;
58
+ requestToken: string;
59
+ };
60
+ type AcquireTokenOptions = {
61
+ repos?: string[];
62
+ permissions?: GitHubAppPermissions;
63
+ /** when set, mint via OIDC using these stashed creds instead of reading the
64
+ * (possibly already-scrubbed) ACTIONS_ID_TOKEN_REQUEST_* env vars. */
65
+ oidc?: OidcCreds;
66
+ };
67
+ /**
68
+ * ensure a GitHub token is available in the environment.
69
+ *
70
+ * when OIDC is available (CI), always mints a fresh token scoped to
71
+ * GITHUB_REPOSITORY — overriding any inherited GITHUB_TOKEN that may
72
+ * be scoped to the wrong repo.
73
+ *
74
+ * otherwise falls back to GitHub App credentials for local development.
75
+ *
76
+ * only called from dev-run.ts (test/dev path) — the live action calls
77
+ * main() directly and never calls this.
78
+ */
79
+ export declare function ensureGitHubToken(): Promise<void>;
80
+ export declare function acquireNewToken(opts?: AcquireTokenOptions): Promise<string>;
81
+ export interface RepoContext {
82
+ owner: string;
83
+ name: string;
84
+ }
85
+ /**
86
+ * Parse repository context from GITHUB_REPOSITORY environment variable.
87
+ */
88
+ export declare function parseRepoContext(): RepoContext;
89
+ export type OctokitWithPlugins = InstanceType<ReturnType<typeof Octokit.plugin<typeof Octokit, [typeof throttling]>>>;
90
+ export interface ResourceUsage {
91
+ requestCount: number;
92
+ rateLimitRemaining: number | null;
93
+ rateLimitResetMs: number | null;
94
+ }
95
+ export interface UsageSummary {
96
+ version: 1;
97
+ github: {
98
+ core: ResourceUsage;
99
+ graphql: ResourceUsage;
100
+ };
101
+ }
102
+ export declare function writeGitHubUsageSummaryToFile(path: string): Promise<void>;
103
+ export declare function createOctokit(token: string, refreshAuth?: (stale: string) => Promise<string>): OctokitWithPlugins;
104
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare const isCloudflareSandbox: boolean;
2
+ export declare const isGitHubActions: boolean;
3
+ export declare const isInsideDocker: boolean;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Repo-committed `.infraweaver.yml` / `.infraweaver.json` config (the follow-up
3
+ * to the unified `tools_enabled` input). A thin layer that sits **under** the
4
+ * action inputs: an
5
+ * explicit workflow input always wins; the file only fills the gaps. It versions
6
+ * the toolchain + scoping policy *with the code* (and doubles as the auditable
7
+ * record of which non-permissive tools the repo owner opted into), so the
8
+ * workflow file can stay minimal and the policy lives next to the Terraform.
9
+ *
10
+ * Scope is deliberate — only repo-level **policy** knobs live here. Each maps
11
+ * 1:1 to the matching action input and flows through the SAME parser, so the file
12
+ * and the input validate identically. Secrets (`module_fetch_token`) and
13
+ * per-run/workflow knobs (`mode`, `max_prs`, `base_branch`, `allow_replace`) are
14
+ * intentionally NOT read from the file: a committed file is the wrong place for a
15
+ * credential, and the run's shape belongs to the workflow that dispatches it.
16
+ *
17
+ * Trust boundary: `.infraweaver.yml` is controlled by whoever can push to the repo
18
+ * — the same surface as the Terraform being remediated. It can only RELAX within
19
+ * the licence gate's structure (naming a non-permissive tool is the repo owner's
20
+ * licence acknowledgement, exactly as on the input) and it can never disable the
21
+ * required substrate. A workflow author who needs to *enforce* a policy sets the
22
+ * action input, which wins over the file.
23
+ *
24
+ * Degrade-green: a missing file is silent; malformed YAML, a non-mapping
25
+ * document, an unknown key, or a value of the wrong shape yields a warning and is
26
+ * ignored — never a hard failure.
27
+ */
28
+ /** filenames checked, in order; the first that exists wins. `.infraweaver.json` is
29
+ * listed first so the JSON form takes precedence if a repo (mis)commits both. */
30
+ export declare const INFRAWEAVER_CONFIG_FILENAMES: readonly [".infraweaver.json", ".infraweaver.yml", ".infraweaver.yaml"];
31
+ /** the repo-level keys `.infraweaver.yml` may set. Each is the snake_case name of
32
+ * the matching action input, so the file value can be fed straight through the
33
+ * input's own parser in `resolvePayload`. */
34
+ export declare const INFRAWEAVER_CONFIG_KEYS: readonly ["tools_enabled", "protected_paths", "allowed_paths", "scan_scope", "iac_languages", "language", "severity_threshold", "grouping", "autonomy_threshold", "module_catalogue", "required_controls"];
35
+ export type InfraweaverConfigKey = (typeof INFRAWEAVER_CONFIG_KEYS)[number];
36
+ /** normalized string values (lists newline-joined), keyed by input name. */
37
+ export type InfraweaverFileValues = Partial<Record<InfraweaverConfigKey, string>>;
38
+ export interface ParsedInfraweaverConfig {
39
+ values: InfraweaverFileValues;
40
+ /** non-fatal problems (malformed value, unknown key) for the caller to log. */
41
+ warnings: string[];
42
+ }
43
+ /**
44
+ * Parse raw `.infraweaver.yml`/`.infraweaver.json` text into normalized string values
45
+ * + warnings. Pure — no I/O, no logging — so the parsing/validation is
46
+ * unit-testable. `format` selects the syntax (and shapes the warning wording);
47
+ * everything after the document is parsed is identical, since JSON and YAML both
48
+ * yield a plain object here.
49
+ */
50
+ export declare function parseInfraweaverConfig(raw: string, format?: "yaml" | "json"): ParsedInfraweaverConfig;
51
+ /**
52
+ * Read + parse the repo's `.infraweaver.yml` (first of the supported filenames
53
+ * found under `cwd`). Returns the normalized values, logging any warnings. A
54
+ * missing file resolves to `{}` silently — the common, valid case.
55
+ */
56
+ export declare function loadInfraweaverConfig(cwd: string | undefined): InfraweaverFileValues;
@@ -0,0 +1,37 @@
1
+ export interface InstallFromNpmTarballParams {
2
+ packageName: string;
3
+ version: string;
4
+ executablePath: string;
5
+ installDependencies?: boolean;
6
+ }
7
+ /**
8
+ * The `dist` block npm returns for a published version. `integrity` is a
9
+ * Subresource-Integrity string (`sha512-<base64>`); `shasum` is the legacy hex
10
+ * SHA-1. Every public-registry version carries at least one.
11
+ */
12
+ export interface NpmDist {
13
+ integrity?: string;
14
+ shasum?: string;
15
+ }
16
+ /**
17
+ * Verify a downloaded tarball against the digest the registry published for
18
+ * that exact version, and throw if it doesn't match.
19
+ *
20
+ * This is what makes a consumer's `uses: infraweaver@<sha>` pin mean something:
21
+ * the action itself is pinned by SHA, but it then fetches an agent CLI at
22
+ * runtime. Without this check a compromised registry/CDN — or anything able to
23
+ * intercept the download — could serve arbitrary code into a run that reads the
24
+ * customer's repository. The version is already pinned by `package.json` (see
25
+ * `getDevDependencyVersion`, which refuses a range); this pins the *bytes*.
26
+ *
27
+ * Fails **closed**: no digest published ⇒ we refuse to install, rather than
28
+ * silently degrading to unverified. A registry that serves no digest is exactly
29
+ * the case worth stopping on.
30
+ */
31
+ export declare function verifyTarballIntegrity(tarballPath: string, dist: NpmDist | undefined, descriptor: string): void;
32
+ /**
33
+ * Install a CLI tool from an npm package tarball
34
+ * Downloads the tarball, extracts it to a temp directory, and returns the path to the CLI executable
35
+ * The temp directory will be cleaned up by the OS automatically
36
+ */
37
+ export declare function installFromNpmTarball(params: InstallFromNpmTarballParams): Promise<string>;