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