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,48 @@
1
+ import { type AgentId } from "#app/external";
2
+ import type { Mode } from "#app/modes";
3
+ import type { ResolvedPayload } from "#app/utils/payload";
4
+ import type { LearningsHeading } from "#app/utils/runContext";
5
+ import type { RunContextData } from "#app/utils/runContextData";
6
+ interface InstructionsContext {
7
+ payload: ResolvedPayload;
8
+ repo: RunContextData["repo"];
9
+ modes: Mode[];
10
+ agentId: AgentId;
11
+ outputSchema?: Record<string, unknown> | undefined;
12
+ /** absolute path to the seeded learnings tmpfile, or null when the file
13
+ * couldn't be seeded for some reason. main.ts always seeds, so in
14
+ * practice this is always set; the null case keeps the type honest. */
15
+ learningsFilePath: string | null;
16
+ /** server-parsed TOC for the body of the learnings tmpfile. rendered
17
+ * inline into the LEARNINGS prompt section so the agent can `read_file`
18
+ * targeted line ranges instead of pulling the whole file into context. */
19
+ learningsHeadings: LearningsHeading[];
20
+ /** agent-facing description of a setup lifecycle hook failure (see
21
+ * `describeSetupFailure`), rendered as a SETUP HOOK FAILED banner. empty
22
+ * string when the hook succeeded, was skipped, or wasn't configured. */
23
+ setupHookFailure: string;
24
+ }
25
+ export interface ResolvedInstructions {
26
+ full: string;
27
+ system: string;
28
+ user: string;
29
+ eventInstructions: string;
30
+ event: string;
31
+ runtime: string;
32
+ }
33
+ /** render the heading list as an indented bullet TOC. ranges shown in
34
+ * parentheses (`(L3-L18)`); the start line is always the heading line
35
+ * itself, so reading the listed range gives the agent the heading +
36
+ * body together. shallowest heading depth in the body sits at the root
37
+ * column; deeper levels indent by `(depth - rootDepth) * 2` spaces. */
38
+ export declare function renderLearningsToc(headings: LearningsHeading[]): string;
39
+ /** assemble the LEARNINGS prompt section: file path + intro + either
40
+ * the rendered heading TOC (when the body has structure) or a no-headings
41
+ * affordance pointing the agent at the reflection turn for restructuring.
42
+ * empty string when the seed step failed and there's no path to surface. */
43
+ export declare function buildLearningsSection(ctx: {
44
+ filePath: string | null;
45
+ headings: LearningsHeading[];
46
+ }): string;
47
+ export declare function resolveInstructions(ctx: InstructionsContext): ResolvedInstructions;
48
+ export {};
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Stash for the GitHub Actions OIDC request creds used by KEYLESS (Sigstore)
3
+ * evidence signing.
4
+ *
5
+ * The `terraform_emit_evidence` / `terraform_emit_vex` tools run DURING the agent
6
+ * loop — after `main.ts` scrubs `ACTIONS_ID_TOKEN_REQUEST_*` from the env (in
7
+ * every shell mode) — so they can't call `core.getIDToken()` / read those vars
8
+ * themselves. Infraweaver already snapshots the request creds early (see
9
+ * `resolveTokens` in `utils/token.ts`, which reads them for mid-run token
10
+ * re-mints); this module lets that same snapshot feed a `sigstore`-audience OIDC
11
+ * token to Fulcio at emit time.
12
+ *
13
+ * Fulcio requires the OIDC token's `aud` to be exactly `sigstore` (its configured
14
+ * audience), distinct from Infraweaver Cloud's own `cloudOidcAudience()`.
15
+ */
16
+ import { type OidcCreds } from "#app/utils/github";
17
+ /** Fulcio's required OIDC audience for the public-good instance. */
18
+ export declare const SIGSTORE_OIDC_AUDIENCE: "sigstore";
19
+ /** Record the OIDC request creds for later keyless signing. Call once at startup
20
+ * (before the restricted-mode env scrub), passing `readOidcCreds()`. `undefined`
21
+ * off-CI, which simply disables keyless signing (there is no ambient identity). */
22
+ export declare function stashKeylessOidcCreds(creds: OidcCreds | undefined): void;
23
+ /** True when an ambient GitHub Actions OIDC identity was captured — i.e. keyless
24
+ * signing is possible (running in CI with `id-token: write`). */
25
+ export declare function keylessOidcAvailable(): boolean;
26
+ /** Fetch a fresh `sigstore`-audience OIDC JWT for Fulcio from the stashed creds.
27
+ * Throws when no creds were stashed (off-CI, or the workflow lacks id-token:write). */
28
+ export declare function fetchSigstoreOidcToken(): Promise<string>;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The prefix text for the initial "leaping into action" comment.
3
+ * Used to detect whether a progress comment is still in its initial state
4
+ * and hasn't been updated with real progress or error messages.
5
+ *
6
+ * Lives in `utils/` (not `mcp/`) so it can be re-exported via `infraweaver/internal`
7
+ * without dragging the MCP server's transitive imports into the Next.js app's
8
+ * type-check graph.
9
+ */
10
+ export declare const LEAPING_INTO_ACTION_PREFIX = "Leaping into action";
11
+ export declare function isLeapingIntoActionCommentBody(body: string): boolean;
@@ -0,0 +1,62 @@
1
+ import type { ToolContext } from "#app/mcp/server";
2
+ import { MAX_LEARNINGS_LENGTH, truncateAtLineBoundary } from "#app/utils/learningsTruncate";
3
+ export { MAX_LEARNINGS_LENGTH, truncateAtLineBoundary };
4
+ /**
5
+ * Repo-level learnings — operational facts about a repo (setup steps, test
6
+ * commands, conventions, gotchas) that accumulate across agent runs and feed
7
+ * back into future runs as durable context. Modeled on the PR-summary tmpfile
8
+ * pattern (see action/utils/prSummary.ts):
9
+ *
10
+ * 1. server seeds `infraweaver-learnings.md` with the verbatim body of
11
+ * `Repo.learnings` (or empty for fresh repos), and parses headings
12
+ * server-side (`utils/learningsToc.ts`) — the parsed TOC is rendered
13
+ * into the LEARNINGS prompt section, not into the file
14
+ * 2. the agent reads the TOC in the prompt and uses listed line ranges
15
+ * to read just the sections relevant to the current task — file can
16
+ * grow large, but only targeted ranges hit the agent's context
17
+ * 3. agent edits the file in place at end-of-run during the reflection
18
+ * turn (see action/agents/postRun.ts buildLearningsReflectionPrompt)
19
+ * 4. main.ts reads the file back at end-of-run and PATCHes
20
+ * `/api/repo/[owner]/[repo]/learnings` if the body changed
21
+ *
22
+ * Edit-in-place avoids stuffing the entire learnings list into both the
23
+ * prompt context and an `update_learnings` MCP tool call (which previously
24
+ * required passing the FULL merged list as a string parameter — an
25
+ * output-token tax that grew linearly with the learnings size).
26
+ *
27
+ * Section structure is agent-curated. The reflection prompt teaches
28
+ * hierarchy + a soft 300-line-per-section cap to keep TOC ranges
29
+ * agent-targetable on long-lived repos; there is no fixed taxonomy.
30
+ */
31
+ export declare const LEARNINGS_FILE_NAME = "infraweaver-learnings.md";
32
+ export declare function learningsFilePath(tmpdir: string): string;
33
+ /** seed the rolling learnings tmpfile with the verbatim DB body (or empty
34
+ * string for fresh repos). returns the absolute path. the parsed TOC is
35
+ * carried separately via `RepoSettings.learningsHeadings` and rendered
36
+ * into the prompt by `resolveInstructions`, so the file on disk is just
37
+ * the body — no markers, no scaffold, no in-file TOC. */
38
+ export declare function seedLearningsFile(params: {
39
+ tmpdir: string;
40
+ current: string | null;
41
+ }): Promise<string>;
42
+ /** read the agent-edited learnings file. returns null when the file is
43
+ * missing or unreadable (treated as "no change"). caps content at the
44
+ * server's max length to avoid a 400 round-trip. */
45
+ export declare function readLearningsFile(path: string): Promise<string | null>;
46
+ /**
47
+ * Read the agent-edited repo-level learnings tmpfile and PATCH it to
48
+ * `Repo.learnings`.
49
+ *
50
+ * Best-effort: any failure is logged and does not affect the run's success
51
+ * status. Skips the PATCH when the file is byte-trim-identical to its seed —
52
+ * the agent didn't touch it, so writing the same content back would just
53
+ * burn a `LearningsRevision` row and an API round-trip.
54
+ *
55
+ * `ctx.toolState.model` is forwarded so `LearningsRevision.model` keeps
56
+ * populating; it powers the per-revision attribution badge in the UI
57
+ * history view.
58
+ *
59
+ * `learningsPersistAttempted` guards against double-execution between the
60
+ * normal end-of-run path and the SIGINT/SIGTERM handler.
61
+ */
62
+ export declare function persistLearnings(ctx: ToolContext): Promise<void>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * pure string helpers for capping and line-boundary-truncating the
3
+ * `Repo.learnings` body. lives in its own module (vs alongside
4
+ * `learnings.ts`) so the proprietary root app can re-export it through
5
+ * `action/internal/index.ts` without dragging the entire MCP type graph
6
+ * along — `learnings.ts` imports `ToolContext` for its runtime helpers,
7
+ * and pulling that into the SDK-facing `internal` barrel expands the
8
+ * type graph reachable from root `tsc` and `cf-worker-indexing` to every
9
+ * tool module under `action/mcp/`. keeping these helpers MCP-free is the
10
+ * cheap structural fix.
11
+ *
12
+ * see `action/utils/learnings.ts` for the full learnings-file lifecycle.
13
+ */
14
+ /** maximum size of `Repo.learnings` body in chars. action truncates the
15
+ * read-back BEFORE the PATCH to avoid sending an oversized payload; the
16
+ * server applies the same truncation as a defense-in-depth backstop (any
17
+ * caller that misses the client-side step would otherwise persist a
18
+ * mid-line tail, breaking the next-run TOC parse).
19
+ *
20
+ * raised from 10k → 100k once the TOC affordance landed: with line-range
21
+ * reads via the server-parsed TOC the agent doesn't ingest the whole
22
+ * file, so the cap is governed by curation discipline rather than a
23
+ * tight byte ceiling. 100k holds ~400-500 short bullets. */
24
+ export declare const MAX_LEARNINGS_LENGTH = 100000;
25
+ export declare function truncateAtLineBoundary(body: string, cap: number): string;
@@ -0,0 +1,57 @@
1
+ export interface ExecuteLifecycleHookParams {
2
+ event: string;
3
+ script: string | null;
4
+ /**
5
+ * when true, after the hook runs (success or failure), discard tracked-file
6
+ * mods so the agent doesn't see hook-generated drift (e.g. `pnpm install`
7
+ * rewriting a lockfile). untracked files are preserved — hooks that
8
+ * intentionally materialize files (e.g. a `.env` from a template) stay
9
+ * visible to the agent. skipped (with a warning) if the tree had
10
+ * pre-existing tracked changes before the hook ran, so we never clobber
11
+ * pre-existing work; pre-existing untracked files are ignored for this
12
+ * gate because `git restore --staged --worktree .` doesn't touch them
13
+ * anyway. no-op when no script was configured.
14
+ */
15
+ normalizeWorkingTreeAfter?: boolean;
16
+ }
17
+ /** structured failure info — `output` on the `exit` variant is trimmed
18
+ * stderr, falling back to stdout when stderr is empty. */
19
+ export type LifecycleHookFailure = {
20
+ kind: "exit";
21
+ exitCode: number;
22
+ output: string;
23
+ } | {
24
+ kind: "timeout";
25
+ } | {
26
+ kind: "spawn";
27
+ spawnError: string;
28
+ };
29
+ /** one-line, agent-facing description of a hook failure. empty string when
30
+ * there was no failure, so callers can pass the result straight through to a
31
+ * prompt section that omits itself on empty. */
32
+ export declare function describeSetupFailure(failure: LifecycleHookFailure | undefined): string;
33
+ export interface LifecycleHookResult {
34
+ /**
35
+ * human-readable warning when the hook failed. includes retry guidance:
36
+ * transient spawn/exit errors are worth retrying, timeouts and
37
+ * persistent failures are not. absent when the hook succeeded or was
38
+ * skipped. setup/post-checkout callers surface this verbatim; prepush
39
+ * builds its own message from `failure` instead.
40
+ */
41
+ warning?: string;
42
+ /**
43
+ * structured failure info — undefined when the hook succeeded or was
44
+ * skipped. lets callers compose their own messaging without parsing the
45
+ * `warning` string.
46
+ */
47
+ failure?: LifecycleHookFailure;
48
+ }
49
+ /**
50
+ * execute a lifecycle hook script if one is configured.
51
+ *
52
+ * soft-fails: instead of throwing on hook errors, returns a warning string
53
+ * (and structured failure info) so callers can choose how to surface it
54
+ * (mcp tools relay it to the agent; setup logs it and adds a prompt banner).
55
+ * timeouts are flagged as non-retryable in the warning text.
56
+ */
57
+ export declare function executeLifecycleHook(params: ExecuteLifecycleHookParams): Promise<LifecycleHookResult>;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Logging utilities that work well in both local and GitHub Actions environments
3
+ */
4
+ import { type AgentUsage } from "#app/agents/shared";
5
+ /** run `fn` with every log line prefixed by `prefix` (e.g. "[task-label]") in magenta */
6
+ export declare function withLogPrefix<T>(prefix: string, fn: () => Promise<T>): Promise<T>;
7
+ type LogSink = "actions" | "stderr";
8
+ /**
9
+ * Route ALL log output to stderr instead of `@actions/core` (which writes to
10
+ * stdout). Required before starting a stdio MCP server: stdout is the JSON-RPC
11
+ * channel there, and a single stray diagnostic line corrupts the framing.
12
+ * The GitHub Action path never calls this — its sink stays `@actions/core`.
13
+ */
14
+ export declare function setLogSink(next: LogSink): void;
15
+ /**
16
+ * Start a collapsed group (GitHub Actions) or regular group (local)
17
+ */
18
+ declare function startGroup(name: string): void;
19
+ /**
20
+ * End a collapsed group
21
+ */
22
+ declare function endGroup(): void;
23
+ /**
24
+ * Run a callback within a collapsed group
25
+ */
26
+ declare function group(name: string, fn: () => void): void;
27
+ /**
28
+ * Print a formatted box with text
29
+ */
30
+ declare function box(text: string, options?: {
31
+ title?: string;
32
+ maxWidth?: number;
33
+ }): void;
34
+ /**
35
+ * Overwrite the job summary with the given text.
36
+ * Skips if:
37
+ * - Not in GitHub Actions
38
+ * - Running inside Docker (CI tests inherit host env vars but can't access host paths)
39
+ * - GITHUB_STEP_SUMMARY not set
40
+ */
41
+ export declare function writeSummary(text: string): Promise<void>;
42
+ /**
43
+ * Print a formatted table using the table package
44
+ */
45
+ declare function printTable(rows: Array<Array<{
46
+ data: string;
47
+ header?: boolean;
48
+ } | string>>, options?: {
49
+ title?: string;
50
+ }): void;
51
+ /**
52
+ * Print a separator line
53
+ */
54
+ declare function separator(length?: number): void;
55
+ /**
56
+ * Main logging utility object - import this once and access all utilities
57
+ */
58
+ export declare const log: {
59
+ /** Print info message */
60
+ info: (...args: unknown[]) => void;
61
+ /** Print a warning message. Use only for warnings that should be displayed in the job summary. */
62
+ warning: (...args: unknown[]) => void;
63
+ /** Print an error message. Use only for errors that should be displayed in the job summary. */
64
+ error: (...args: unknown[]) => void;
65
+ /** Print success message */
66
+ success: (...args: unknown[]) => void;
67
+ /** Print debug message (only when debug mode is enabled) */
68
+ debug: (...args: unknown[]) => void;
69
+ /** Print a formatted box with text */
70
+ box: typeof box;
71
+ /** Print a formatted table using the table package */
72
+ table: typeof printTable;
73
+ /** Print a separator line */
74
+ separator: typeof separator;
75
+ /** Start a collapsed group (GitHub Actions) or regular group (local) */
76
+ startGroup: typeof startGroup;
77
+ /** End a collapsed group */
78
+ endGroup: typeof endGroup;
79
+ /** Run a callback within a collapsed group */
80
+ group: typeof group;
81
+ /** Log tool call information to console with formatted output */
82
+ toolCall: ({ toolName, input }: {
83
+ toolName: string;
84
+ input: unknown;
85
+ }) => void;
86
+ };
87
+ /**
88
+ * Format a value as JSON, using compact format for simple values and pretty-printed for complex ones
89
+ */
90
+ export declare function formatJsonValue(value: unknown): string;
91
+ /**
92
+ * Format a multi-line string with proper indentation for tool call output
93
+ * First line has the label, subsequent lines are indented 4 spaces
94
+ */
95
+ export declare function formatIndentedField(label: string, content: string): string;
96
+ /**
97
+ * format aggregated usage data as a markdown table for the GitHub step summary.
98
+ *
99
+ * columns mirror the per-run stdout token table emitted by `logTokenTable`
100
+ * (Input / Cache Read / Cache Write / Output / Total / Cost ($)) so the job
101
+ * summary and the in-run logs can be compared row-for-row.
102
+ *
103
+ * notes:
104
+ * - `AgentUsage.inputTokens` is the sum of non-cached input + cache read
105
+ * + cache write (set that way by both agent harnesses' `buildUsage`),
106
+ * so the non-cached Input column is recovered by subtracting cache fields.
107
+ * - `costUsd` is sourced from models.dev (OpenCode) or `total_cost_usd`
108
+ * (Claude CLI). absent rows show `—` so per-agent coverage is obvious.
109
+ */
110
+ export declare function formatUsageSummary(entries: AgentUsage[]): string;
111
+ export {};
@@ -0,0 +1,63 @@
1
+ import type { Agent } from "#app/agents/index";
2
+ import { type ProxyMint } from "#app/utils/proxyModel";
3
+ import type { AccountPlan } from "#app/utils/runContext";
4
+ /**
5
+ * The single owner of the model decision. "Which model runs, on which harness,
6
+ * with what auth" used to be smeared across main.ts and four utils; the two
7
+ * entry points here are the whole story:
8
+ *
9
+ * 1. {@link captureModelAuthority} — the ordered BYOK-authority capture
10
+ * (baseline → Codex auth.json → authorized set), returned as an explicit
11
+ * value instead of hidden module state the caller must remember to
12
+ * sequence correctly.
13
+ * 2. {@link resolveRunModel} — BYOK gate → managed-proxy overlay → env
14
+ * patch → api-key validation, returning the routed model + harness.
15
+ *
16
+ * The building blocks stay where they are (catalog in models.ts, gate in
17
+ * agent.ts, proxy overlay in proxyModel.ts); this module owns their
18
+ * composition and ordering.
19
+ */
20
+ /**
21
+ * Capture the BYOK model authority in the one order that is correct:
22
+ * the BASELINE set (what OpenCode can route from the runner's pre-existing
23
+ * env alone) must be snapshotted BEFORE Codex auth.json is materialized, and
24
+ * the AUTHORIZED set after — their diff is the Codex credential's
25
+ * contribution, logged by the capture. Returns the authorized set, the
26
+ * authoritative input for {@link resolveRunModel}.
27
+ */
28
+ export declare function captureModelAuthority(opencodeCliPath: string): Set<string>;
29
+ export interface RoutedRunModel {
30
+ /** the effective model that will run (post-fallback); undefined → auto-select */
31
+ model: string | undefined;
32
+ /** the slug to surface in footers/logs */
33
+ effectiveSlug: string | undefined;
34
+ /** the harness resolved for the effective model */
35
+ agent: Agent;
36
+ /** set only when the free safety-net fallback engaged */
37
+ fallback?: {
38
+ from: string;
39
+ to: string;
40
+ };
41
+ /** operator warnings for the caller to log */
42
+ warnings: string[];
43
+ }
44
+ /**
45
+ * Resolve the model + auth for this run in one call: the BYOK gate (resolve
46
+ * slug → pick harness → free-fallback decision), the managed EU Bedrock proxy
47
+ * overlay (a no-op unless PAYG with no BYO key), the env patch the routing
48
+ * needs, and the api-key validation the gate asks for. Throws the actionable
49
+ * authorized-model list on an unavailable model, a `BillingError` when the
50
+ * managed path needs a payment method, and the missing-key error when
51
+ * validation fails — all before any agent runs.
52
+ */
53
+ export declare function resolveRunModel(input: {
54
+ slug: string | undefined;
55
+ plan: AccountPlan;
56
+ credential: string;
57
+ authorized: Set<string>;
58
+ repo: {
59
+ owner: string;
60
+ name: string;
61
+ };
62
+ mint?: ProxyMint;
63
+ }): Promise<RoutedRunModel>;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Build the `GIT_CONFIG_*` env that authorises `git clone` of a private module
3
+ * over HTTPS for each host. Pure (token + hosts in, env out) so it is unit-
4
+ * testable without a real git. Empty/whitespace hosts are dropped; hosts are
5
+ * de-duplicated case-insensitively. Returns an empty object only when no usable
6
+ * host remains (the caller treats that as "no module-fetch credential").
7
+ */
8
+ export declare function buildModuleFetchGitEnv(token: string, hosts: string[]): Record<string, string>;
9
+ /**
10
+ * The hosts a module-fetch credential should authorise: always github.com, plus
11
+ * the GitHub host the run executes against (a GitHub Enterprise Server instance
12
+ * via `GITHUB_SERVER_URL`) when it differs. Reads the env; pure given it.
13
+ */
14
+ export declare function moduleFetchHosts(serverUrl?: string | undefined): string[];
15
+ /**
16
+ * Build the SSH env for fetching a private `git::ssh://…` module. The key MUST be
17
+ * a file for `ssh -i`, so it is written 0600 into `keyDir` (the run's tmpdir,
18
+ * wiped at run end) — never the home dir, never committed. `IdentitiesOnly=yes`
19
+ * stops ssh falling back to an agent or other keys; `StrictHostKeyChecking=accept-new`
20
+ * trusts the host on first use rather than the interactive prompt that would hang a
21
+ * headless run. Pure given an injected writer (so it is unit-testable without fs).
22
+ * Returns `{}` for a blank key.
23
+ */
24
+ export declare function buildModuleFetchSshEnv(sshKey: string, keyDir: string, writeKey?: (path: string, contents: string) => void): Record<string, string>;
25
+ /**
26
+ * Resolve the module-fetch git env for a run, or undefined when neither a
27
+ * `module_fetch_token` (HTTPS) nor a `module_fetch_ssh_key` (SSH) was supplied
28
+ * (the common case — public/registry/local modules need no credential). The result
29
+ * is merged into the env of the `terraform init`/`plan` invocations so private
30
+ * cross-repo modules resolve. SSH activates only when `opts.sshKeyDir` is given (a
31
+ * writable scratch dir for the ephemeral key — the run's tmpdir at the real sites).
32
+ */
33
+ export declare function resolveModuleFetchEnv(payload: {
34
+ moduleFetchToken?: string | undefined;
35
+ moduleFetchSshKey?: string | undefined;
36
+ }, opts?: {
37
+ sshKeyDir?: string;
38
+ writeKey?: (path: string, contents: string) => void;
39
+ }): Record<string, string> | undefined;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Trim surrounding whitespace from a sensitive value and register it as a
3
+ * GitHub Actions log mask. Trailing newlines from terminal-copy paste are a
4
+ * common footgun: the value travels through GH Actions logs and any tool
5
+ * that re-emits parts of it leaks the unmasked tail. Trimming canonicalises
6
+ * the value so the mask matches exactly what downstream tools will print.
7
+ *
8
+ * Masking is delegated to `core.setSecret` (not raw `console.log`) so the
9
+ * toolkit percent-encodes `\r`/`\n`; the runner V2 parser decodes them and
10
+ * registers the full value plus every non-empty line as separate masks. That
11
+ * keeps us safe for embedded-newline values (PEMs, kubeconfigs, JSON blobs)
12
+ * even though they aren't currently used.
13
+ *
14
+ * Returns the trimmed value, or `null` when the input was whitespace-only —
15
+ * callers must leave `process.env` untouched in that case so a misconfigured
16
+ * value surfaces as a clear "missing key" downstream rather than silently
17
+ * mutating to the empty string.
18
+ */
19
+ export declare function sanitizeSecret(key: string, value: string): string | null;
20
+ /**
21
+ * Normalize environment variables to uppercase.
22
+ * This handles case-insensitive env var names (e.g., `anthropic_api_key` -> `ANTHROPIC_API_KEY`).
23
+ *
24
+ * If there are conflicts (same key with different capitalizations but different values),
25
+ * logs a warning and keeps the uppercase version.
26
+ *
27
+ * Also trims and masks sensitive values so accidental trailing whitespace
28
+ * doesn't defeat GitHub Actions log masking.
29
+ */
30
+ export declare function normalizeEnv(): void;
@@ -0,0 +1,11 @@
1
+ /** Snapshot the set of models OpenCode can serve from the current env, BEFORE
2
+ * Infraweaver-stored credentials are merged in. Call once early in `main.ts`. */
3
+ export declare function captureBaselineModels(cliPath: string): void;
4
+ /** Snapshot the set of models OpenCode can serve AFTER dbSecrets +
5
+ * Codex auth.json are in place. Logs the diff against the baseline as
6
+ * `» BYOK auth enabled N model(s): …`. */
7
+ export declare function captureAuthorizedModels(cliPath: string): void;
8
+ /** Authorized set captured after Infraweaver-stored auth is applied. Throws if
9
+ * called before `captureAuthorizedModels` — the call sites (fallback gate,
10
+ * api-key validation, auto-select) all run strictly after capture. */
11
+ export declare function getAuthorizedModels(): Set<string>;
@@ -0,0 +1,26 @@
1
+ /** endpoint base URL for the `openai-compatible/byok` route (e.g. an Ollama, vLLM,
2
+ * TGI, HuggingFace Inference Endpoint, or Azure OpenAI base URL). */
3
+ export declare const OPENAI_COMPATIBLE_BASE_URL_ENV = "OPENAI_COMPATIBLE_BASE_URL";
4
+ /** API key for the endpoint. Optional — keyless self-hosted servers (a local
5
+ * Ollama) omit it and the adapter is handed a placeholder instead. */
6
+ export declare const OPENAI_COMPATIBLE_API_KEY_ENV = "OPENAI_COMPATIBLE_API_KEY";
7
+ /** opencode provider name for the injected custom endpoint. */
8
+ export declare const OPENAI_COMPATIBLE_PROVIDER = "openai-compatible";
9
+ /**
10
+ * Is `model` the resolved id for the `openai-compatible/byok` route? Detected by
11
+ * the env sentinel — after `resolveModel`, a routing slug becomes its raw backing
12
+ * id (here `OPENAI_COMPATIBLE_MODEL_ID`), so this is how the harness re-identifies
13
+ * the route downstream (same pattern as `isVertexRoute` / the Bedrock sentinel).
14
+ * A HuggingFace model id can itself contain a `/`, so callers must NOT rely on the
15
+ * slash heuristic that distinguishes raw Bedrock/Vertex ids — use this instead.
16
+ */
17
+ export declare function isOpenAiCompatibleRoute(model: string | undefined): boolean;
18
+ /** When the route is active, the opencode model string is `openai-compatible/<id>`. */
19
+ export declare function resolveOpenAiCompatibleOpenCodeModel(model: string | undefined): string | undefined;
20
+ /**
21
+ * The opencode `provider` block that registers the user's OpenAI-compatible
22
+ * endpoint via the AI SDK's `@ai-sdk/openai-compatible` adapter. Returns undefined
23
+ * unless both the model id and base URL are set. `apiKey` falls back to a non-empty
24
+ * placeholder so keyless self-hosted endpoints still satisfy the adapter.
25
+ */
26
+ export declare function openAiCompatibleProviderBlock(): Record<string, unknown> | undefined;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * OpenTofu MCP server integration — the permissively-licensed sibling to
3
+ * [[terraformMcp]].
4
+ *
5
+ * When the `opentofu_mcp` input is on, the agent harness registers the OpenTofu
6
+ * project's registry MCP server next to infraweaver's. It gives the fixing agent
7
+ * live OpenTofu Registry knowledge — provider/resource docs, module details,
8
+ * current versions — which powers module-source-aware fixes and generation on an
9
+ * OpenTofu repo, the same way `terraform_mcp` does for the Terraform Registry.
10
+ * It's the natural pairing for the OpenTofu-first stance the engine already takes
11
+ * (the scanners fall back to the `tofu` CLI; the licence posture prefers OpenTofu's
12
+ * MPL fork over BUSL Terraform).
13
+ *
14
+ * Why the HOSTED endpoint (not a Docker image like terraform_mcp):
15
+ * - the OpenTofu MCP server has NO official Docker image; it's published as a
16
+ * hosted streamable-HTTP endpoint (OpenTofu's own first-party infrastructure)
17
+ * plus an npx package. The hosted endpoint is the zero-install path — no
18
+ * docker on the runner, no npm supply-chain surface to pin.
19
+ * - it serves PUBLIC registry data and needs NO credentials, so pointing the
20
+ * agent at it exposes no repo content or secrets — the queries are the same
21
+ * class of public lookups a `tofu init` already makes.
22
+ *
23
+ * Security posture:
24
+ * - opt-in + licence-gated (MPL-2.0): on only via the `opentofu_mcp` input or by
25
+ * naming "opentofu_mcp" in tools_enabled — the explicit, licence-aware
26
+ * acknowledgement (an external network surface the operator chooses).
27
+ * - read-only registry knowledge only; the server exposes no state/apply/deploy
28
+ * tools, so there is nothing mutating for the agent to reach.
29
+ */
30
+ import { type ToolSelectionFlags } from "#app/utils/toolSelection";
31
+ /** OpenTofu's hosted streamable-HTTP MCP endpoint (first-party; public registry
32
+ * data; no credentials). The zero-install path — no docker, no npm pin. */
33
+ export declare const OPENTOFU_MCP_URL = "https://mcp.opentofu.org/mcp";
34
+ /** the registry name the server is registered under in agent MCP configs —
35
+ * matches the OpenTofu docs' own client-config examples, so agent guidance
36
+ * written against "the opentofu MCP server" finds it under the expected key. */
37
+ export declare const OPENTOFU_MCP_SERVER_NAME = "opentofu";
38
+ export type OpenTofuMcpResolution = {
39
+ kind: "disabled";
40
+ } | {
41
+ kind: "available";
42
+ url: string;
43
+ };
44
+ /**
45
+ * Decide whether the run gets the OpenTofu registry MCP server. Unlike
46
+ * `resolveTerraformMcp` there is no docker probe: the server is a hosted HTTP
47
+ * endpoint, so it's either opted-in (available) or off. A discriminated union so
48
+ * every harness handles both outcomes explicitly.
49
+ */
50
+ export declare function resolveOpenTofuMcp(payload: ToolSelectionFlags): OpenTofuMcpResolution;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Parse + apply the action's `unsafe_overrides` input — a JSON object of env
3
+ * var overrides that mutate `process.env` at the start of a run. Designed for
4
+ * e2e testing / debugging from `workflow_dispatch`; only callers with
5
+ * `actions:write` on the repo can supply it.
6
+ *
7
+ * The `unsafe` prefix is load-bearing: GH Actions echoes the value verbatim
8
+ * in the runner's step-header log, so the raw JSON (including any values
9
+ * passed in) is visible to anyone with `actions:read` on the calling repo.
10
+ * Treat the run log as compromised for any value placed in `unsafe_overrides`.
11
+ */
12
+ /**
13
+ * Names refused even when present in the input. Overriding these would let a
14
+ * caller escape infraweaver's scope (GITHUB_TOKEN), break runner internals
15
+ * (ACTIONS_RUNTIME_*), forge OIDC tokens (ACTIONS_ID_TOKEN_REQUEST_*), or
16
+ * substitute our server-side auth (INFRAWEAVER_API_SECRET). Customer-facing
17
+ * provider keys (ANTHROPIC_API_KEY, OPENAI_API_KEY, CLAUDE_CODE_OAUTH_TOKEN,
18
+ * etc.) are intentionally NOT denied — overriding those is the use case.
19
+ */
20
+ export declare const DENIED_OVERRIDE_NAMES: ReadonlySet<string>;
21
+ export interface ApplyOverridesResult {
22
+ applied: string[];
23
+ denied: string[];
24
+ }
25
+ /** Parse the JSON input. Returns `{}` for empty/whitespace. Throws on shape errors. */
26
+ export declare function parseOverrides(raw: string): Record<string, string>;
27
+ /**
28
+ * Mutate `params.env` in place with the supplied JSON overrides, skipping any
29
+ * names in `DENIED_OVERRIDE_NAMES`. Each applied value is registered with
30
+ * `core.setSecret` so the runner masks it in subsequent log output, and the
31
+ * raw `UNSAFE_OVERRIDES` env var is deleted so spawned subprocesses don't
32
+ * inherit the original JSON (which would defeat both the deny-list and the
33
+ * masking by exposing the values verbatim).
34
+ *
35
+ * Returns the applied/denied breakdown so the caller can render an audit log.
36
+ */
37
+ export declare function applyOverrides(params: {
38
+ raw: string;
39
+ env: NodeJS.ProcessEnv;
40
+ }): ApplyOverridesResult;