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,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classify + render the error thrown out of the main run try-block into a
|
|
3
|
+
* pair of user-facing markdown bodies — one for the GitHub Actions job
|
|
4
|
+
* summary tab, one for the PR progress comment.
|
|
5
|
+
*
|
|
6
|
+
* Classifications, in dispatch order (first match wins; the api-key
|
|
7
|
+
* branch additionally folds in the activity-timeout hang body as a
|
|
8
|
+
* sub-source so a hang masking an api-key error still surfaces the api-key
|
|
9
|
+
* CTA):
|
|
10
|
+
*
|
|
11
|
+
* 1. `BillingError` — either the proxy-token mint already threw one (402
|
|
12
|
+
* handled inline) or the agent runtime surfaced an OpenRouter
|
|
13
|
+
* "key budget exhausted" string mid-run. Both render via
|
|
14
|
+
* `formatBillingErrorSummary` so the user sees actionable copy.
|
|
15
|
+
*
|
|
16
|
+
* 2. BYOK provider billing-exhausted (#835) — DeepSeek "Insufficient
|
|
17
|
+
* Balance", Anthropic "credit balance is too low", OpenCode Zen
|
|
18
|
+
* `CreditsError`, Gemini "spending cap". Checked before api-key auth
|
|
19
|
+
* because billing-exhausted responses often carry 401 status codes
|
|
20
|
+
* that `isApiKeyAuthError` would otherwise mis-classify.
|
|
21
|
+
*
|
|
22
|
+
* 3. API-key auth error — `isApiKeyAuthError` sniffs the raw error string
|
|
23
|
+
* (or the activity-timeout hang body when present, since that's where
|
|
24
|
+
* the underlying provider error often lands); `formatApiKeyErrorSummary`
|
|
25
|
+
* renders provider + console-link copy.
|
|
26
|
+
*
|
|
27
|
+
* 4. ProviderModelNotFoundError — stale free-fallback model id no longer
|
|
28
|
+
* in the OpenCode catalog; renders a nudge to add a BYOK key.
|
|
29
|
+
*
|
|
30
|
+
* 5. Activity-timeout hang — `errorMessage` starts with
|
|
31
|
+
* `"activity timeout"` or `"agent still pending"` AND none of the
|
|
32
|
+
* above matched. The harness keeps structured diagnostic state on
|
|
33
|
+
* `toolState.agentDiagnostic`; `formatAgentHangBody` renders that into
|
|
34
|
+
* the job summary. The PR comment instead collapses to a one-line
|
|
35
|
+
* `**Run failed.** [View the logs →]` — the watchdog jargon, event
|
|
36
|
+
* counts, and benign stderr tail are operator-grade detail that only
|
|
37
|
+
* alarm the average user. The one exception is a hang masking billing
|
|
38
|
+
* exhaustion (#778), where `formatAgentHangBody` emits an actionable
|
|
39
|
+
* top-up CTA that the comment keeps verbatim.
|
|
40
|
+
*
|
|
41
|
+
* 6. Default — the job summary gets a plain-English lead sentence plus the
|
|
42
|
+
* raw error in a fenced code block under the `### ❌ Infraweaver failed`
|
|
43
|
+
* banner; the PR comment collapses to the same one-line logs link as
|
|
44
|
+
* the hang case, since the raw internal string helps nobody on the PR.
|
|
45
|
+
*
|
|
46
|
+
* Net: the actionable classifications (billing, API-key, model-not-found)
|
|
47
|
+
* render identical bodies on both surfaces; the non-actionable ones (hang,
|
|
48
|
+
* generic) keep the forensics in the Actions job summary and show a calm
|
|
49
|
+
* one-liner in the PR comment, whose footer already carries Infraweaver
|
|
50
|
+
* branding + rerun links.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
import { PRODUCT_NAME } from "#app/brand";
|
|
54
|
+
import type { AgentDiagnostic } from "#app/utils/agentHangReport";
|
|
55
|
+
import { formatAgentHangBody } from "#app/utils/agentHangReport";
|
|
56
|
+
import {
|
|
57
|
+
formatApiKeyErrorSummary,
|
|
58
|
+
isApiKeyAuthError,
|
|
59
|
+
} from "#app/utils/apiKeys";
|
|
60
|
+
import {
|
|
61
|
+
BillingError,
|
|
62
|
+
formatBillingErrorSummary,
|
|
63
|
+
} from "#app/utils/billingErrors";
|
|
64
|
+
import {
|
|
65
|
+
extractProviderId,
|
|
66
|
+
isProviderBillingExhausted,
|
|
67
|
+
isRouterKeylimitExhaustedError,
|
|
68
|
+
} from "#app/utils/providerErrors";
|
|
69
|
+
|
|
70
|
+
export type RenderedRunError = {
|
|
71
|
+
summary: string;
|
|
72
|
+
comment: string;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
function isProviderModelNotFoundError(message: string): boolean {
|
|
76
|
+
return message.includes("ProviderModelNotFoundError");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Generic failure copy for any shape not caught by a more specific classifier
|
|
81
|
+
* (billing / api-key / hang / model-not-found). A plain-English lead sentence
|
|
82
|
+
* so the user isn't staring at a raw internal string like
|
|
83
|
+
* `opencode prompt failed: fetch failed`, followed by the actual error in a
|
|
84
|
+
* fenced code block for anyone who needs the detail. Shared by both surfaces;
|
|
85
|
+
* the job summary adds the `### ❌ Infraweaver failed` banner on top.
|
|
86
|
+
*/
|
|
87
|
+
function formatGenericFailure(errorMessage: string): string {
|
|
88
|
+
return [
|
|
89
|
+
`${PRODUCT_NAME} ran into an unexpected error and couldn't finish this run. The underlying error is below — re-trigger ${PRODUCT_NAME} to try again, and reach out to support if it keeps happening.`,
|
|
90
|
+
"",
|
|
91
|
+
"```",
|
|
92
|
+
errorMessage,
|
|
93
|
+
"```",
|
|
94
|
+
].join("\n");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Minimal PR-comment body for non-actionable failures (hangs, unexpected
|
|
99
|
+
* errors). The forensic detail (event counts, stderr tail, raw error) stays
|
|
100
|
+
* in the Actions job summary; the comment the average user sees is one calm
|
|
101
|
+
* line plus a link to the logs. The footer appended by `reportErrorToComment`
|
|
102
|
+
* already carries rerun / model context.
|
|
103
|
+
*/
|
|
104
|
+
function formatMinimalFailureComment(repo: {
|
|
105
|
+
owner: string;
|
|
106
|
+
name: string;
|
|
107
|
+
}): string {
|
|
108
|
+
const runId = process.env.GITHUB_RUN_ID;
|
|
109
|
+
if (!runId) return "**Run failed.**";
|
|
110
|
+
const server = process.env.GITHUB_SERVER_URL ?? "https://github.com";
|
|
111
|
+
const url = `${server}/${repo.owner}/${repo.name}/actions/runs/${runId}`;
|
|
112
|
+
return `**Run failed.** [View the logs →](${url})`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Best-known billing top-up URL per provider. Conservative list: only
|
|
117
|
+
* providers we've actually classified billing-exhaustion shapes for in
|
|
118
|
+
* `providerErrors.ts`. Unknown providers fall through to a generic CTA.
|
|
119
|
+
*/
|
|
120
|
+
const PROVIDER_BILLING_URLS: Record<string, string> = {
|
|
121
|
+
deepseek: "https://platform.deepseek.com/top_up",
|
|
122
|
+
anthropic: "https://console.anthropic.com/settings/billing",
|
|
123
|
+
openai: "https://platform.openai.com/account/billing",
|
|
124
|
+
google: "https://aistudio.google.com/usage",
|
|
125
|
+
opencode: "https://opencode.ai/zen",
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* `extractProviderId` only fires when the harness emits `providerID=...`
|
|
130
|
+
* (OpenCode log shape). Direct-provider errors (e.g. Anthropic SDK throwing
|
|
131
|
+
* `"Your credit balance is too low to access the Anthropic API"`) carry no
|
|
132
|
+
* such tag, so map their distinctive copy to a provider id here so the
|
|
133
|
+
* dashboard link is reachable.
|
|
134
|
+
*
|
|
135
|
+
* Pattern is intentionally tight (Anthropic-specific phrasing only) to
|
|
136
|
+
* avoid mis-tagging non-Anthropic billing-exhausted errors that happen to
|
|
137
|
+
* mention `"Anthropic API"` in passing — the broader phrase appears in
|
|
138
|
+
* fallback-chain agent prompt text and OpenCode harness logs.
|
|
139
|
+
*/
|
|
140
|
+
function detectProviderId(message: string): string | null {
|
|
141
|
+
const harnessId = extractProviderId(message);
|
|
142
|
+
if (harnessId) return harnessId;
|
|
143
|
+
if (/credit balance is too low/i.test(message)) return "anthropic";
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function formatProviderBillingExhausted(input: {
|
|
148
|
+
errorMessage: string;
|
|
149
|
+
}): string {
|
|
150
|
+
const providerId = detectProviderId(input.errorMessage);
|
|
151
|
+
const dashboardUrl = providerId
|
|
152
|
+
? PROVIDER_BILLING_URLS[providerId]
|
|
153
|
+
: undefined;
|
|
154
|
+
|
|
155
|
+
const headline = providerId
|
|
156
|
+
? `**Your \`${providerId}\` account is out of credit.**`
|
|
157
|
+
: "**Your provider account is out of credit.**";
|
|
158
|
+
const cta = dashboardUrl
|
|
159
|
+
? `[Top up \`${providerId}\` →](${dashboardUrl})`
|
|
160
|
+
: `Top up your provider account, then re-trigger ${PRODUCT_NAME}.`;
|
|
161
|
+
|
|
162
|
+
return [
|
|
163
|
+
headline,
|
|
164
|
+
"",
|
|
165
|
+
`${PRODUCT_NAME} detected a billing-exhausted response from your provider — the agent stopped before completing this run.`,
|
|
166
|
+
"",
|
|
167
|
+
cta,
|
|
168
|
+
"",
|
|
169
|
+
`\`\`\`\n${input.errorMessage}\n\`\`\``,
|
|
170
|
+
].join("\n");
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function formatProviderModelNotFoundSummary(input: {
|
|
174
|
+
owner: string;
|
|
175
|
+
name: string;
|
|
176
|
+
raw: string;
|
|
177
|
+
}): string {
|
|
178
|
+
return (
|
|
179
|
+
`${PRODUCT_NAME}'s free fallback model is no longer available in OpenCode's catalog. ` +
|
|
180
|
+
`Add an API key for your configured model in the ${PRODUCT_NAME} console for \`${input.owner}/${input.name}\`, ` +
|
|
181
|
+
`or contact support if this persists.\n\n` +
|
|
182
|
+
`\`\`\`\n${input.raw}\n\`\`\``
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function renderRunError(input: {
|
|
187
|
+
errorMessage: string;
|
|
188
|
+
repo: { owner: string; name: string };
|
|
189
|
+
agentDiagnostic: AgentDiagnostic | undefined;
|
|
190
|
+
}): RenderedRunError {
|
|
191
|
+
// reclassify mid-run OpenRouter "key budget exhausted" as BillingError so
|
|
192
|
+
// the user gets the same actionable copy as a /api/proxy-token 402.
|
|
193
|
+
const billingError = isRouterKeylimitExhaustedError(input.errorMessage)
|
|
194
|
+
? new BillingError(input.errorMessage, {
|
|
195
|
+
code: "router_keylimit_exhausted",
|
|
196
|
+
})
|
|
197
|
+
: null;
|
|
198
|
+
|
|
199
|
+
if (billingError) {
|
|
200
|
+
const body = formatBillingErrorSummary(billingError, input.repo.owner);
|
|
201
|
+
return { summary: body, comment: body };
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// gated on isHang because the harness sets `agentDiagnostic` on entry, so
|
|
205
|
+
// any non-hang throw that hits the outer catch (e.g. post-success
|
|
206
|
+
// output_schema validator, or a late cleanup throw after the run already
|
|
207
|
+
// succeeded) would otherwise render "Infraweaver failed" with stale event
|
|
208
|
+
// counts and silently drop the real errorMessage.
|
|
209
|
+
const isHang =
|
|
210
|
+
input.errorMessage.startsWith("activity timeout") ||
|
|
211
|
+
input.errorMessage.startsWith("agent still pending");
|
|
212
|
+
const hangBody = isHang
|
|
213
|
+
? formatAgentHangBody({
|
|
214
|
+
diagnostic: input.agentDiagnostic,
|
|
215
|
+
isHang: true,
|
|
216
|
+
errorMessage: input.errorMessage,
|
|
217
|
+
})
|
|
218
|
+
: null;
|
|
219
|
+
|
|
220
|
+
// BYOK provider billing-exhausted (DeepSeek "Insufficient Balance",
|
|
221
|
+
// Anthropic "credit balance is too low", OpenCode Zen `CreditsError` /
|
|
222
|
+
// `FreeUsageLimitError`, Gemini "spending cap"). distinct from the Router
|
|
223
|
+
// billing branches above — Router uses `BillingError`, this uses the agent
|
|
224
|
+
// log payload classified by `isProviderBillingExhausted`. see #835.
|
|
225
|
+
//
|
|
226
|
+
// checked BEFORE api-key auth: providers commonly return 401 (DeepSeek,
|
|
227
|
+
// Gemini) or include `"API Error: 401"` in the error body for billing
|
|
228
|
+
// exhaustion, which `isApiKeyAuthError` would otherwise match — surfacing
|
|
229
|
+
// a "rotate your key" CTA when the actual fix is "top up credits".
|
|
230
|
+
if (isProviderBillingExhausted(input.errorMessage)) {
|
|
231
|
+
const body = formatProviderBillingExhausted({
|
|
232
|
+
errorMessage: input.errorMessage,
|
|
233
|
+
});
|
|
234
|
+
return {
|
|
235
|
+
summary: `### ❌ ${PRODUCT_NAME} failed\n\n${body}`,
|
|
236
|
+
comment: body,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const apiKeySource = hangBody ?? input.errorMessage;
|
|
241
|
+
const apiKeyErrorSummary = isApiKeyAuthError(apiKeySource)
|
|
242
|
+
? formatApiKeyErrorSummary({
|
|
243
|
+
owner: input.repo.owner,
|
|
244
|
+
name: input.repo.name,
|
|
245
|
+
raw: apiKeySource,
|
|
246
|
+
})
|
|
247
|
+
: null;
|
|
248
|
+
|
|
249
|
+
if (apiKeyErrorSummary) {
|
|
250
|
+
return { summary: apiKeyErrorSummary, comment: apiKeyErrorSummary };
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (isProviderModelNotFoundError(input.errorMessage)) {
|
|
254
|
+
const body = formatProviderModelNotFoundSummary({
|
|
255
|
+
owner: input.repo.owner,
|
|
256
|
+
name: input.repo.name,
|
|
257
|
+
raw: input.errorMessage,
|
|
258
|
+
});
|
|
259
|
+
return { summary: body, comment: body };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (hangBody) {
|
|
263
|
+
// a hang masking billing exhaustion (#778) renders an actionable top-up
|
|
264
|
+
// CTA inside `hangBody` — keep that in the comment. every other hang is
|
|
265
|
+
// non-actionable noise for the average user, so the comment collapses to
|
|
266
|
+
// a one-liner and the diagnostic stays in the Actions job summary.
|
|
267
|
+
const isBillingExhausted =
|
|
268
|
+
input.agentDiagnostic?.lastProviderError === "provider billing exhausted";
|
|
269
|
+
return {
|
|
270
|
+
summary: `### ❌ ${PRODUCT_NAME} failed\n\n${hangBody}`,
|
|
271
|
+
comment: isBillingExhausted
|
|
272
|
+
? hangBody
|
|
273
|
+
: formatMinimalFailureComment(input.repo),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const genericBody = formatGenericFailure(input.errorMessage);
|
|
278
|
+
return {
|
|
279
|
+
summary: `### ❌ ${PRODUCT_NAME} failed\n\n${genericBody}`,
|
|
280
|
+
comment: formatMinimalFailureComment(input.repo),
|
|
281
|
+
};
|
|
282
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// in-process fixture runner used by `dev-run.ts` (and any future host-side
|
|
2
|
+
// runner). does NOT know about Docker — that's `docker.ts`'s job. when run
|
|
3
|
+
// inside the local docker container, this is what executes after the entrypoint.
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import { mkdtemp } from "node:fs/promises";
|
|
6
|
+
import { devNull, tmpdir } from "node:os";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import type { AgentResult } from "#app/agents/shared";
|
|
9
|
+
import { type Inputs, main } from "#app/main";
|
|
10
|
+
import { log } from "#app/utils/cli";
|
|
11
|
+
import { ensureGitHubToken } from "#app/utils/github";
|
|
12
|
+
import { setupTestRepo } from "#app/utils/setup";
|
|
13
|
+
|
|
14
|
+
export async function run(
|
|
15
|
+
inputsOrPrompt: Inputs | string,
|
|
16
|
+
): Promise<AgentResult> {
|
|
17
|
+
await ensureGitHubToken();
|
|
18
|
+
|
|
19
|
+
// dev-run.ts is a CI-emulator — isolate it from the developer's user- and
|
|
20
|
+
// system-scope gitconfig so checks like `validatePushDestination` see the
|
|
21
|
+
// raw stored remote URL instead of values mutated by `url.*.insteadOf`
|
|
22
|
+
// rewrites (a common SSH-auth convenience on dev boxes). CI runners have
|
|
23
|
+
// empty gitconfigs so this is a no-op there; locally it makes `pnpm dev:run`
|
|
24
|
+
// and real runs produce identical git state. `os.devNull` canonicalizes
|
|
25
|
+
// the null device across Unix (`/dev/null`) and Windows (`\\.\nul`).
|
|
26
|
+
process.env.GIT_CONFIG_GLOBAL = devNull;
|
|
27
|
+
process.env.GIT_CONFIG_SYSTEM = devNull;
|
|
28
|
+
|
|
29
|
+
const tempParent = await mkdtemp(join(tmpdir(), "infraweaver-dev-run-"));
|
|
30
|
+
const tempDir = join(tempParent, "repo");
|
|
31
|
+
const originalCwd = process.cwd();
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
setupTestRepo({ tempDir });
|
|
35
|
+
process.chdir(tempDir);
|
|
36
|
+
|
|
37
|
+
// optional pre-agent setup (e.g. seed symlinks for adversarial fixtures).
|
|
38
|
+
if (process.env.INFRAWEAVER_TEST_REPO_SETUP) {
|
|
39
|
+
log.info("» running repo setup commands...");
|
|
40
|
+
execSync(process.env.INFRAWEAVER_TEST_REPO_SETUP, {
|
|
41
|
+
cwd: tempDir,
|
|
42
|
+
stdio: "pipe",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// tell main() to use the cloned tempDir instead of the GHA workspace path.
|
|
47
|
+
process.env.GITHUB_WORKSPACE = tempDir;
|
|
48
|
+
|
|
49
|
+
const inputs: Inputs =
|
|
50
|
+
typeof inputsOrPrompt === "string"
|
|
51
|
+
? { prompt: inputsOrPrompt }
|
|
52
|
+
: inputsOrPrompt;
|
|
53
|
+
|
|
54
|
+
for (const [key, value] of Object.entries(inputs)) {
|
|
55
|
+
if (value !== undefined && value !== null) {
|
|
56
|
+
process.env[`INPUT_${key.toUpperCase()}`] = String(value);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const result: AgentResult = await main();
|
|
61
|
+
process.chdir(originalCwd);
|
|
62
|
+
|
|
63
|
+
if (result.success) {
|
|
64
|
+
log.success("Action completed successfully");
|
|
65
|
+
return {
|
|
66
|
+
success: true,
|
|
67
|
+
output: result.output || undefined,
|
|
68
|
+
error: undefined,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
log.error(`Action failed: ${result.error || "Unknown error"}`);
|
|
72
|
+
return {
|
|
73
|
+
success: false,
|
|
74
|
+
error: result.error || undefined,
|
|
75
|
+
output: undefined,
|
|
76
|
+
};
|
|
77
|
+
} catch (err) {
|
|
78
|
+
const errorMessage = (err as Error).message;
|
|
79
|
+
log.error(`Error: ${errorMessage}`);
|
|
80
|
+
return { success: false, error: errorMessage, output: undefined };
|
|
81
|
+
} finally {
|
|
82
|
+
process.chdir(originalCwd);
|
|
83
|
+
// sandbox isolation may create files with non-host ownership; rmSync
|
|
84
|
+
// can't always delete those, so escalate.
|
|
85
|
+
try {
|
|
86
|
+
execSync(`sudo rm -rf "${tempParent}"`, { stdio: "ignore" });
|
|
87
|
+
} catch {
|
|
88
|
+
// best-effort cleanup.
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|