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