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,245 @@
1
+ import type { Octokit } from "@octokit/rest";
2
+ import type { GitHubToolContext } from "#app/mcp/capabilityContext";
3
+ /**
4
+ * A GraphQL review-thread fetch worth retrying: an HTTP 5xx / network blip
5
+ * ({@link isTransientServerError}), OR GitHub's transient "Something went wrong
6
+ * while executing your query" — which surfaces both as an HTTP-200
7
+ * `GraphqlResponseError` (message only) and as an HTTP-502 `RequestError`. A
8
+ * blip here would otherwise drop a whole review delivery. Deterministic GraphQL
9
+ * validation errors (bad query, unknown field) don't match and fail fast. #997.
10
+ */
11
+ export declare function isTransientGraphqlError(error: unknown): boolean;
12
+ export declare const REVIEW_THREADS_QUERY = "\nquery ($owner: String!, $name: String!, $prNumber: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n reviewThreads(first: 100) {\n nodes {\n id\n path\n line\n startLine\n diffSide\n isResolved\n isOutdated\n comments(first: 50) {\n nodes {\n fullDatabaseId\n body\n bodyHTML\n createdAt\n diffHunk\n line\n startLine\n originalLine\n originalStartLine\n author { login }\n pullRequestReview {\n databaseId\n author { login }\n }\n reactionGroups {\n content\n reactors(first: 10) {\n totalCount\n nodes {\n ... on Actor { login }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}\n";
13
+ /**
14
+ * Lightweight PAGINATED query for the approval gate. It fetches only each
15
+ * thread's resolved state and its ROOT author (oldest comment, hence
16
+ * `comments(first: 1)`) — everything {@link countOutstandingInfraweaverThreads}
17
+ * needs and nothing more. Distinct from {@link REVIEW_THREADS_QUERY} (a single
18
+ * `first: 100` page with full comment bodies) precisely because the invariant
19
+ * must hold on PRs with more than 100 threads: a silent first-page cap would let
20
+ * a finding beyond thread #100 slip an approval through.
21
+ */
22
+ export declare const OUTSTANDING_THREADS_QUERY = "\nquery ($owner: String!, $name: String!, $prNumber: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n reviewThreads(first: 100, after: $cursor) {\n pageInfo { hasNextPage endCursor }\n nodes {\n isResolved\n comments(first: 1) { nodes { author { login } } }\n }\n }\n }\n }\n}\n";
23
+ export type OutstandingThreadsResponse = {
24
+ repository: {
25
+ pullRequest: {
26
+ reviewThreads: {
27
+ pageInfo: {
28
+ hasNextPage: boolean;
29
+ endCursor: string | null;
30
+ };
31
+ nodes: ({
32
+ isResolved: boolean;
33
+ comments: {
34
+ nodes: ({
35
+ author: {
36
+ login: string;
37
+ } | null;
38
+ } | null)[] | null;
39
+ } | null;
40
+ } | null)[] | null;
41
+ } | null;
42
+ } | null;
43
+ } | null;
44
+ };
45
+ /**
46
+ * Count unresolved review threads on a PR whose ROOT comment was authored by
47
+ * Infraweaver's bot — the full set of open Infraweaver findings on the PR. Basis
48
+ * for the never-approve-with-outstanding-findings invariant (see the approval
49
+ * gate in `create_pull_request_review`).
50
+ *
51
+ * It's a function of ALL open findings, not just the latest commit's delta, so
52
+ * an incremental review can't approve past a prior unresolved thread. Outdated-
53
+ * but-unresolved threads still count: GitHub marks a thread `[OUTDATED]` when the
54
+ * anchor line moved (reformat, rename, force-push), which is not the concern
55
+ * being addressed. Human-reviewer threads are excluded — they belong to those
56
+ * reviewers to resolve. Walks every page (bounded) so a long-lived PR with >100
57
+ * threads can't hide an outstanding finding. #990.
58
+ */
59
+ export declare function countOutstandingInfraweaverThreads(input: {
60
+ octokit: Octokit;
61
+ owner: string;
62
+ name: string;
63
+ pullNumber: number;
64
+ }): Promise<number>;
65
+ export type ReviewThreadComment = {
66
+ fullDatabaseId: string | null;
67
+ body: string;
68
+ bodyHTML: string;
69
+ createdAt: string;
70
+ diffHunk: string;
71
+ line: number | null;
72
+ startLine: number | null;
73
+ originalLine: number | null;
74
+ originalStartLine: number | null;
75
+ author: {
76
+ login: string;
77
+ } | null;
78
+ pullRequestReview: {
79
+ databaseId: number | null;
80
+ author: {
81
+ login: string;
82
+ } | null;
83
+ } | null;
84
+ reactionGroups: Array<{
85
+ content: string;
86
+ reactors: {
87
+ totalCount?: number;
88
+ nodes: Array<{
89
+ login: string;
90
+ } | null> | null;
91
+ } | null;
92
+ }> | null;
93
+ };
94
+ export type ReviewThread = {
95
+ id: string;
96
+ path: string;
97
+ line: number | null;
98
+ startLine: number | null;
99
+ diffSide: "LEFT" | "RIGHT";
100
+ isResolved: boolean;
101
+ isOutdated: boolean;
102
+ comments: {
103
+ nodes: (ReviewThreadComment | null)[] | null;
104
+ } | null;
105
+ };
106
+ export type ReviewThreadsQueryResponse = {
107
+ repository: {
108
+ pullRequest: {
109
+ reviewThreads: {
110
+ nodes: (ReviewThread | null)[] | null;
111
+ } | null;
112
+ } | null;
113
+ } | null;
114
+ };
115
+ export declare function countLines(str: string): number;
116
+ export type ParsedHunk = {
117
+ header: string;
118
+ oldStart: number;
119
+ oldCount: number;
120
+ newStart: number;
121
+ newCount: number;
122
+ content: string[];
123
+ };
124
+ export declare function parseFilePatches(patch: string): ParsedHunk[];
125
+ export declare const GetReviewComments: import("arktype/internal/variants/object.ts").ObjectType<{
126
+ pull_number: number;
127
+ review_id: number;
128
+ }, {}>;
129
+ /**
130
+ * render 👍/👎 totals as a `reactions=` tag attribute so the agent sees
131
+ * human feedback on its findings inline with the thread (a 👎 on a infraweaver
132
+ * root comment is false-positive signal; see the IncrementalReview prompt).
133
+ * Only the thumbs contents — the other six reaction types carry no
134
+ * accept/reject semantics — and only when at least one is nonzero, so the
135
+ * common no-reaction case adds zero tokens.
136
+ */
137
+ export declare function formatReactionCounts(comment: ReviewThreadComment): string;
138
+ /**
139
+ * formats thread blocks into markdown with TOC and line numbers.
140
+ * extracted for testability.
141
+ */
142
+ export declare function formatReviewThreads(threadBlocks: Array<{
143
+ path: string;
144
+ lineRange: string;
145
+ content: string[];
146
+ }>, header: {
147
+ pullNumber: number;
148
+ reviewId: number;
149
+ reviewer: string;
150
+ reviewBody?: string;
151
+ }): {
152
+ toc: string;
153
+ content: string;
154
+ };
155
+ /**
156
+ * builds thread blocks from review threads and file patches.
157
+ * extracted for testability.
158
+ */
159
+ export declare function buildThreadBlocks(threads: ReviewThread[], filePatchMap: Map<string, ParsedHunk[]>, reviewId: number): {
160
+ path: string;
161
+ lineRange: string;
162
+ content: string[];
163
+ }[];
164
+ interface GetReviewDataInput {
165
+ octokit: Octokit;
166
+ owner: string;
167
+ name: string;
168
+ pullNumber: number;
169
+ reviewId: number;
170
+ approvedBy?: string | undefined;
171
+ tmpdir: string;
172
+ githubToken: string;
173
+ }
174
+ export interface FormatReviewDataInput {
175
+ review: ReviewResponse;
176
+ threads: ReviewThread[];
177
+ prFiles: ReviewPrFile[];
178
+ pullNumber: number;
179
+ reviewId: number;
180
+ }
181
+ export type ReviewResponse = {
182
+ body: string | null | undefined;
183
+ user: {
184
+ login: string;
185
+ } | null | undefined;
186
+ };
187
+ export type ReviewPrFile = {
188
+ filename: string;
189
+ patch?: string | undefined;
190
+ };
191
+ export declare function formatReviewData(input: FormatReviewDataInput): {
192
+ threadBlocks: Array<{
193
+ path: string;
194
+ lineRange: string;
195
+ content: string[];
196
+ }>;
197
+ reviewer: string;
198
+ formatted: {
199
+ toc: string;
200
+ content: string;
201
+ };
202
+ } | undefined;
203
+ export declare function getReviewData(input: GetReviewDataInput): Promise<{
204
+ threadBlocks: Array<{
205
+ path: string;
206
+ lineRange: string;
207
+ content: string[];
208
+ }>;
209
+ reviewer: string;
210
+ formatted: {
211
+ toc: string;
212
+ content: string;
213
+ };
214
+ truncated: boolean;
215
+ } | undefined>;
216
+ export declare function GetReviewCommentsTool(ctx: GitHubToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
217
+ pull_number: number;
218
+ review_id: number;
219
+ }, {
220
+ pull_number: number;
221
+ review_id: number;
222
+ }>> & {
223
+ mutates?: boolean;
224
+ };
225
+ export declare const ListPullRequestReviews: import("arktype/internal/variants/object.ts").ObjectType<{
226
+ pull_number: number;
227
+ }, {}>;
228
+ export declare function ListPullRequestReviewsTool(ctx: GitHubToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
229
+ pull_number: number;
230
+ }, {
231
+ pull_number: number;
232
+ }>> & {
233
+ mutates?: boolean;
234
+ };
235
+ export declare const ResolveReviewThread: import("arktype/internal/variants/object.ts").ObjectType<{
236
+ thread_id: string;
237
+ }, {}>;
238
+ export declare function ResolveReviewThreadTool(ctx: GitHubToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
239
+ thread_id: string;
240
+ }, {
241
+ thread_id: string;
242
+ }>> & {
243
+ mutates?: boolean;
244
+ };
245
+ export {};
@@ -0,0 +1,60 @@
1
+ import type { LocalToolContext } from "#app/mcp/localContext";
2
+ /**
3
+ * Multi-root awareness. A repo can hold SEVERAL Terraform root modules — the
4
+ * dirs you'd run `terraform init/plan/apply` in — not one. hepcare, for example,
5
+ * has `terraform/` AND `terraform/core/`, plus a child module under
6
+ * `terraform/modules/`. The scanners run recursively, but plan/validate assume a
7
+ * single `cwd`; this surfaces the roots so a run can act per-root.
8
+ *
9
+ * Heuristic (validated against real repos): a ROOT is a dir whose `*.tf`
10
+ * declares a PROVIDER CONFIGURATION (`provider "<name>" { … }`) or a BACKEND
11
+ * (`backend "<type>" { … }`). A CHILD MODULE never configures a provider or a
12
+ * backend (it only declares `required_providers`), so this cleanly separates the
13
+ * two. Pure parsing + a single fs walk; no subprocess.
14
+ */
15
+ export interface TerraformRoot {
16
+ /** repo-relative dir (POSIX); "" for the top-level. */
17
+ dir: string;
18
+ hasBackend: boolean;
19
+ hasProviderConfig: boolean;
20
+ tfFileCount: number;
21
+ }
22
+ /** detect whether some concatenated HCL marks a root module. */
23
+ export declare function isRootModuleHcl(hcl: string): {
24
+ hasBackend: boolean;
25
+ hasProviderConfig: boolean;
26
+ };
27
+ /**
28
+ * Discover the Terraform root modules under `cwd`. Walks `*.tf` recursively
29
+ * (skipping cache/VCS dirs via walkTfFiles), groups by directory, and keeps the
30
+ * dirs that configure a provider or a backend. Sorted by dir. An empty result
31
+ * means no obvious root was found — the caller falls back to scanning `cwd`
32
+ * itself as a single root.
33
+ */
34
+ export declare function discoverTerraformRoots(cwd: string): TerraformRoot[];
35
+ export interface EnvironmentTwinGroup {
36
+ /** the shared path shape with the env/region segment replaced by `{env}`. */
37
+ pattern: string;
38
+ /** the matched twins: each a dir + the environment/region token it carries. */
39
+ members: {
40
+ dir: string;
41
+ environment: string;
42
+ }[];
43
+ }
44
+ /**
45
+ * Detect environment/region TWINS among a set of repo-relative paths (root dirs
46
+ * and/or `*.tfvars` files): parallel stacks that differ only by an environment
47
+ * (`dev`/`staging`/`prod`/…) or region (`eu-west-2`) segment. A fix applied to
48
+ * one should usually be offered for its twins too (backport / fan-out).
49
+ *
50
+ * For each path, finds the LAST segment that is an env token or a region (a
51
+ * `<env>.tfvars` file counts via its basename), replaces it with `{env}` to form
52
+ * a pattern, and groups by that pattern. Only groups with ≥2 DISTINCT
53
+ * environments are returned (a single match isn't a twin set). Pure +
54
+ * deterministic (sorted).
55
+ */
56
+ export declare function detectEnvironmentTwins(paths: string[]): EnvironmentTwinGroup[];
57
+ export declare const TerraformRootsParams: import("arktype/internal/variants/object.ts").ObjectType<object, {}>;
58
+ export declare function TerraformRootsTool(ctx: LocalToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<object, object>> & {
59
+ mutates?: boolean;
60
+ };
@@ -0,0 +1,26 @@
1
+ import type { ToolState } from "#app/toolState";
2
+ import type { ResolvedPayload } from "#app/utils/payload";
3
+ /**
4
+ * The slice of the run these scope guards read: the triggering event (for the
5
+ * scoped issue/PR) and the created-target set. Both `GitHubToolContext` and the
6
+ * combined GitHub write context satisfy it — the guards need no octokit of their
7
+ * own.
8
+ */
9
+ export interface ScopeContext {
10
+ payload: ResolvedPayload;
11
+ toolState: ToolState;
12
+ }
13
+ /**
14
+ * Record a PR/issue this run created so later body edits / comments / reviews on
15
+ * it pass {@link assertTargetInScope}. Call after a successful
16
+ * `create_pull_request` / `create_issue`.
17
+ */
18
+ export declare function recordCreatedTarget(ctx: ScopeContext, target: number): void;
19
+ /** true when `target` is the run's triggering issue/PR or one it created. */
20
+ export declare function isTargetInScope(ctx: ScopeContext, target: number): boolean;
21
+ /**
22
+ * Throw if `target` is neither the run's triggering issue/PR nor one it created.
23
+ * `action` is a short verb phrase used in the error (e.g. "comment on",
24
+ * "submit a review on", "add labels to").
25
+ */
26
+ export declare function assertTargetInScope(ctx: ScopeContext, target: number, action: string): void;
@@ -0,0 +1,20 @@
1
+ import type { ToolContext } from "#app/mcp/server";
2
+ export declare const SelectModeParams: import("arktype/internal/variants/object.ts").ObjectType<{
3
+ mode: string;
4
+ issue_number?: number;
5
+ }, {}>;
6
+ export type PlanCommentResponsePayload = {
7
+ error: string;
8
+ } | {
9
+ commentId: number;
10
+ body: string;
11
+ };
12
+ export declare function SelectModeTool(ctx: ToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
13
+ mode: string;
14
+ issue_number?: number;
15
+ }, {
16
+ mode: string;
17
+ issue_number?: number;
18
+ }>> & {
19
+ mutates?: boolean;
20
+ };
@@ -0,0 +1,61 @@
1
+ import "#app/mcp/arkConfig";
2
+ import { type AgentId } from "#app/external";
3
+ import type { Mode } from "#app/modes";
4
+ import type { ToolState } from "#app/toolState";
5
+ import type { OctokitWithPlugins } from "#app/utils/github";
6
+ import type { ResolvedPayload } from "#app/utils/payload";
7
+ import type { AccountPlan } from "#app/utils/runContext";
8
+ import type { RunContextData } from "#app/utils/runContextData";
9
+ export interface ToolContext {
10
+ agentId: AgentId;
11
+ repo: RunContextData["repo"];
12
+ payload: ResolvedPayload;
13
+ octokit: OctokitWithPlugins;
14
+ githubInstallationToken: string;
15
+ gitToken: string;
16
+ refreshGitToken?: ((stale: string) => Promise<string>) | undefined;
17
+ apiToken: string;
18
+ modes: Mode[];
19
+ postCheckoutScript: string | null;
20
+ prepushScript: string | null;
21
+ prApproveEnabled: boolean;
22
+ modeInstructions: Record<string, string>;
23
+ toolState: ToolState;
24
+ runId: number | undefined;
25
+ mcpServerUrl: string;
26
+ mcpServerToken: string;
27
+ tmpdir: string;
28
+ oss: boolean;
29
+ plan: AccountPlan;
30
+ resolvedModel: string | undefined;
31
+ }
32
+ type JsonSchema = Record<string, unknown>;
33
+ /**
34
+ * The per-run subagent deny set: the canonical bare names of every registered
35
+ * orchestrator tool marked `mutates: true`. Derived here (not from a static list)
36
+ * so a newly-added mutating tool is fenced the moment it's tagged — there is no
37
+ * separate list to drift. Embedded into the claude/opencode subagent gates
38
+ * (`buildClaudePretoolGateSource` / `buildOpencodeSubagentGateSource`).
39
+ *
40
+ * Throws when the derived set is empty: that means the `mutates` tagging
41
+ * regressed, and we refuse to start with the gate silently disabled rather than
42
+ * let subagents reach state-changing tools.
43
+ */
44
+ export declare function subagentDeniedToolNames(ctx: ToolContext, outputSchema?: JsonSchema): string[];
45
+ type McpHttpServerOptions = {
46
+ outputSchema?: JsonSchema | undefined;
47
+ };
48
+ /**
49
+ * Start the MCP HTTP server.
50
+ *
51
+ * The returned disposer is idempotent — safe to call multiple times.
52
+ * Callers (e.g. the inner activity-timeout handler in main.ts) may need to
53
+ * stop the server before the `await using` block exits; a subsequent
54
+ * automatic dispose is then a no-op.
55
+ */
56
+ export declare function startMcpHttpServer(ctx: ToolContext, options?: McpHttpServerOptions): Promise<{
57
+ url: string;
58
+ token: string;
59
+ [Symbol.asyncDispose]: () => Promise<void>;
60
+ }>;
61
+ export {};
@@ -0,0 +1,62 @@
1
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ import type { FastMCP, Tool } from "fastmcp";
3
+ import type { ToolContext } from "#app/mcp/server";
4
+ /**
5
+ * A FastMCP tool augmented with infraweaver's `mutates` flag: `true` marks a
6
+ * state-changing tool (working tree, remote, GitHub state, run state, fs/process)
7
+ * that subagents must not call. The subagent deny list is derived from this flag
8
+ * at runtime (see `subagentDeniedToolNames`) rather than a hand-maintained list,
9
+ * so a new mutating tool is gated the moment it's tagged — no separate list to
10
+ * drift out of sync.
11
+ */
12
+ export type InfraweaverTool = Tool<any, any> & {
13
+ mutates?: boolean;
14
+ };
15
+ export declare const tool: <const params>(toolDef: Tool<any, StandardSchemaV1<params>> & {
16
+ mutates?: boolean;
17
+ }) => Tool<any, StandardSchemaV1<params>> & {
18
+ mutates?: boolean;
19
+ };
20
+ export interface ToolResult {
21
+ content: {
22
+ type: "text";
23
+ text: string;
24
+ }[];
25
+ isError?: boolean;
26
+ }
27
+ /**
28
+ * Structured tool-outcome envelope ("Structured tool errors"). Every tool
29
+ * that can be unavailable, skipped, or degrade green returns the SAME shape so a
30
+ * caller (the agent, or a downstream parser) can branch deterministically:
31
+ * - success: `{ ok: true, … }`
32
+ * - skip / unavailable / soft failure: `{ ok: false, code, detail }`
33
+ * where `code` is a stable machine token (snake_case) and `detail` a human
34
+ * sentence. The newer tools (terraform_roots / terraform_module_interface /
35
+ * terraform_provider_schema / policy_check) emit this natively; the older
36
+ * degrade-green tools historically returned `{ ran|found: false,
37
+ * skipped_reason|reason }`. Those keep their legacy aliases ALONGSIDE the new
38
+ * fields (the call site spreads `toolSkip(...)` into its existing object) so
39
+ * prompt + test contracts keep working while the surface converges — additive,
40
+ * never breaking.
41
+ */
42
+ export type ToolOk<T extends Record<string, any>> = T & {
43
+ ok: true;
44
+ };
45
+ /** wrap a success payload with `ok: true`. */
46
+ export declare const toolOk: <T extends Record<string, any>>(data: T) => ToolOk<T>;
47
+ /** the structured skip/unavailable envelope: `{ ok: false, code, detail }`. */
48
+ export declare const toolSkip: (code: string, detail: string) => {
49
+ ok: false;
50
+ code: string;
51
+ detail: string;
52
+ };
53
+ export declare const handleToolSuccess: (data: Record<string, any> | string) => ToolResult;
54
+ export declare const handleToolError: (error: unknown) => ToolResult;
55
+ /**
56
+ * Helper to wrap a tool execute function with error handling.
57
+ * Captures ctx in closure so tools don't need to handle try/catch.
58
+ * @param fn - the function to execute
59
+ * @param toolName - optional tool name for error logging
60
+ */
61
+ export declare const execute: <T, R extends Record<string, any> | string>(fn: (params: T) => Promise<R>, toolName?: string) => (params: T) => Promise<ToolResult>;
62
+ export declare const addTools: (ctx: ToolContext, server: FastMCP<any>, tools: InfraweaverTool[]) => FastMCP<any>;
@@ -0,0 +1,58 @@
1
+ import type { ToolContext } from "#app/mcp/server";
2
+ export declare const ShellParams: import("arktype/internal/variants/object.ts").ObjectType<{
3
+ command: string;
4
+ description: string;
5
+ timeout?: number;
6
+ working_directory?: string;
7
+ background?: boolean;
8
+ }, {}>;
9
+ export type SandboxMethod = "unshare" | "sudo-unshare" | "none";
10
+ /** get the current sandbox method (for testing/diagnostics) */
11
+ export declare function getSandboxMethod(): SandboxMethod;
12
+ export declare function resolveRepoRoot(): string;
13
+ /** chars of shell output kept inline in the agent reply. anything past this
14
+ * blows the agent's context budget on commands that dump big logs (test
15
+ * runners, build tools, grep on large trees), so the overflow is spilled
16
+ * to a tempfile the agent can re-read selectively (cat/tail/grep). */
17
+ export declare const MAX_OUTPUT_CHARS = 5000;
18
+ /** hard ceiling on the stdout/stderr we hold in memory WHILE a command runs.
19
+ * `capOutput` only spills to a tempfile AFTER exit, so without this the live
20
+ * accumulator grows by string-concat on every `data` event — a child that streams
21
+ * hundreds of MB before exiting (runaway build/test, `cat` of a huge file) can OOM the
22
+ * runner first. Tail-preferring: the newest output, where errors surface, wins —
23
+ * which also matches `capOutput` keeping the tail. Set far above MAX_OUTPUT_CHARS so it
24
+ * never interferes with normal output, only bounds the pathological case. */
25
+ export declare const MAX_CAPTURE_CHARS = 5000000;
26
+ /** A string accumulator bounded to ~`limit` chars, keeping the TAIL. The trim is
27
+ * amortized (the buffer is allowed to reach 2× before slicing back) so steady-state
28
+ * appends stay O(1). `droppedChars()` reports how much of the head was discarded. */
29
+ export declare function createCappedBuffer(limit: number): {
30
+ push(chunk: string): void;
31
+ value(): string;
32
+ droppedChars(): number;
33
+ };
34
+ export declare function ShellTool(ctx: ToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
35
+ command: string;
36
+ description: string;
37
+ timeout?: number;
38
+ working_directory?: string;
39
+ background?: boolean;
40
+ }, {
41
+ command: string;
42
+ description: string;
43
+ timeout?: number;
44
+ working_directory?: string;
45
+ background?: boolean;
46
+ }>> & {
47
+ mutates?: boolean;
48
+ };
49
+ export declare const KillBackgroundParams: import("arktype/internal/variants/object.ts").ObjectType<{
50
+ handle: string;
51
+ }, {}>;
52
+ export declare function KillBackgroundTool(ctx: ToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
53
+ handle: string;
54
+ }, {
55
+ handle: string;
56
+ }>> & {
57
+ mutates?: boolean;
58
+ };
@@ -0,0 +1,138 @@
1
+ import type { GitHubToolContext } from "#app/mcp/capabilityContext";
2
+ /** true when `branch` is a Infraweaver remediation/generation branch. */
3
+ export declare function isRemediationBranch(branch: string): boolean;
4
+ /** the `<group-id>` of a `remediate/<group-id>` branch (the scan group id that
5
+ * keys the fix), or null for a generation branch / non-remediation branch. */
6
+ export declare function groupIdFromBranch(branch: string): string | null;
7
+ /** true when a commit-author LOGIN is Infraweaver's bot (so a commit by it is NOT
8
+ * a human edit). A null/absent login is treated as non-human here for backward
9
+ * compatibility of this login-only helper — but prefer {@link isBotCommit}, which
10
+ * resolves an absent login via the commit's git identity rather than assuming
11
+ * bot (the assumption that caused a human commit with an unlinked email to be
12
+ * force-overwritten). */
13
+ export declare function isBotActor(login: string | null | undefined): boolean;
14
+ /** the authorship slice of a compareCommits entry that {@link isBotCommit} reads. */
15
+ export interface CommitAuthorship {
16
+ /** the GitHub user GitHub resolved from the commit's author email, or null when
17
+ * the email isn't linked to any account — true for Infraweaver's own `[bot]`
18
+ * noreply email AND for a human committing under an unverified email. */
19
+ author?: {
20
+ login?: string | null;
21
+ } | null;
22
+ /** the raw git author identity from the commit object, present even when the
23
+ * GitHub `author` account above is null. */
24
+ commit?: {
25
+ author?: {
26
+ name?: string | null;
27
+ email?: string | null;
28
+ } | null;
29
+ } | null;
30
+ }
31
+ /**
32
+ * Decide whether a remediation-branch commit is Infraweaver's own (a bot commit,
33
+ * safe to force-overwrite on refresh) or a human/third-party edit (must be
34
+ * preserved — escalate instead of refresh).
35
+ *
36
+ * A resolved GitHub `author.login` is authoritative: a positive bot match is a
37
+ * bot, a real login is a human. When the login is ABSENT — which happens both for
38
+ * Infraweaver's own commits (its `infraweaver[bot]` noreply email doesn't map to a
39
+ * GitHub account) and for a human committing under an unverified email — fall
40
+ * back to the commit's git identity: only a recognised bot name/email
41
+ * (`infraweaver[bot]`, any `[bot]`) counts as a bot; ANY other identity is treated
42
+ * as a human edit. This is the conservative direction on purpose — a missed bot
43
+ * commit costs one skipped auto-refresh, whereas a missed human commit is a
44
+ * force-push that destroys their work.
45
+ */
46
+ export declare function isBotCommit(commit: CommitAuthorship): boolean;
47
+ export type StaleFixStatus = "current" | "stale" | "human_touched" | "checks_failing";
48
+ export type StaleFixAction = "skip" | "refresh" | "escalate";
49
+ /** the latest CI conclusion on a remediation PR's head, used to self-heal a PR
50
+ * whose own checks are red (a failed `terraform plan`, a failing module test, a
51
+ * policy gate) even when its base hasn't moved. `unknown` = no checks reported or
52
+ * the read failed (treated as "no signal" — never manufactures a refresh). */
53
+ export type ChecksState = "passing" | "failing" | "pending" | "unknown";
54
+ export interface StaleFixAssessment {
55
+ status: StaleFixStatus;
56
+ action: StaleFixAction;
57
+ reason: string;
58
+ /** a likely zombie: stale (base advanced), untouched by humans, and open past
59
+ * the staleness age threshold — surface it so the sweep prioritizes closing it
60
+ * once the concern is confirmed resolved. Advisory; the action stays `refresh`. */
61
+ zombie: boolean;
62
+ }
63
+ /** age (in days, PR open duration) past which a stale, untouched remediation PR
64
+ * is flagged as a likely zombie for prioritized cleanup. */
65
+ export declare const DEFAULT_STALE_AFTER_DAYS = 30;
66
+ /**
67
+ * How many times the sweep will auto re-derive a remediation PR to clear a FAILING
68
+ * CI check before it gives up and escalates to a human. Self-heal is on by default,
69
+ * but a fix the engine proves green locally yet that keeps failing the consumer's
70
+ * CI (a cloud-credentialled `terraform plan`, a flaky integration test) must not
71
+ * loop forever — past the cap the PR is labelled needs-human and left alone. Only
72
+ * the checks-failing path is capped; a genuine base move is always a fresh refresh.
73
+ */
74
+ export declare const DEFAULT_SELF_HEAL_MAX_ATTEMPTS = 3;
75
+ /** count of self-heal attempts already recorded on a PR, from its accumulated
76
+ * `infraweaver-self-heal-attempt-N` labels. */
77
+ export declare function selfHealAttempts(labels: string[]): number;
78
+ /** the label to stamp when recording the next self-heal attempt (1-based). */
79
+ export declare function nextSelfHealLabel(attempts: number): string;
80
+ /**
81
+ * Decide what a refresh sweep should do with one open remediation PR, from git +
82
+ * CI facts alone. Pure.
83
+ * - a branch carrying NON-bot commits is `human_touched` → `escalate` (never
84
+ * force-overwrite a human's work; leave it for review).
85
+ * - a branch whose base has NOT advanced AND whose checks are not failing is
86
+ * `current` → `skip` (the fix is still derived against the live base).
87
+ * - a branch whose own CI is red (and base unchanged) is `checks_failing` →
88
+ * `refresh`: re-derive the fix on the current base and re-prove it (the
89
+ * self-heal case — a failed plan/test/policy on Infraweaver's own PR). Two guards
90
+ * stop this looping forever: (1) if it is ALREADY labelled needs-human and the
91
+ * base hasn't moved, re-deriving would only reproduce the same failing fix, so
92
+ * `skip`; (2) once `selfHealAttempts` reaches `maxSelfHealAttempts` (default 3)
93
+ * the sweep gives up and `escalate`s instead of re-deriving again.
94
+ * - otherwise the base moved → `stale` → `refresh`: re-derive the fix on the
95
+ * current base, then close it if the concern is already resolved or update it.
96
+ *
97
+ * `ageDays` (PR open duration) is advisory: a stale, untouched PR open past
98
+ * `staleAfterDays` is additionally flagged `zombie` so the sweep can prioritize
99
+ * clearing the long-rotting ones. It never changes the action — a fix is only
100
+ * ever closed once a re-scan confirms its concern is actually resolved.
101
+ */
102
+ export declare function assessStaleFix(input: {
103
+ baseBehindBy: number;
104
+ hasNonBotCommits: boolean;
105
+ /** the PR's CI is red (a failed plan/test/policy) — triggers a self-heal. */
106
+ checksFailing?: boolean;
107
+ /** the PR already carries `needs-human` — used as the self-heal loop guard. */
108
+ alreadyEscalated?: boolean;
109
+ /** self-heal attempts already recorded on this PR (from its attempt labels). */
110
+ selfHealAttempts?: number;
111
+ /** the retry ceiling for self-heal (default {@link DEFAULT_SELF_HEAL_MAX_ATTEMPTS}). */
112
+ maxSelfHealAttempts?: number;
113
+ ageDays?: number;
114
+ staleAfterDays?: number;
115
+ }): StaleFixAssessment;
116
+ export declare const ListRemediationPrsParams: import("arktype/internal/variants/object.ts").ObjectType<{
117
+ limit?: number;
118
+ }, {}>;
119
+ export declare function ListRemediationPrsTool(ctx: GitHubToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
120
+ limit?: number;
121
+ }, {
122
+ limit?: number;
123
+ }>> & {
124
+ mutates?: boolean;
125
+ };
126
+ export declare const ClosePullRequest: import("arktype/internal/variants/object.ts").ObjectType<{
127
+ pull_number: number;
128
+ comment?: string;
129
+ }, {}>;
130
+ export declare function ClosePullRequestTool(ctx: GitHubToolContext): import("fastmcp").Tool<any, import("@standard-schema/spec").StandardSchemaV1<{
131
+ pull_number: number;
132
+ comment?: string;
133
+ }, {
134
+ pull_number: number;
135
+ comment?: string;
136
+ }>> & {
137
+ mutates?: boolean;
138
+ };