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