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,76 @@
|
|
|
1
|
+
import type { Agent } from "#app/agents/index";
|
|
2
|
+
import type { ModelGateResult } from "#app/utils/agent";
|
|
3
|
+
import { apiFetch } from "#app/utils/apiFetch";
|
|
4
|
+
import type { AccountPlan } from "#app/utils/runContext";
|
|
5
|
+
/** A resolved model decision plus the env patch (if any) the caller must apply to
|
|
6
|
+
* route the run. `envToApply` is set only when the managed proxy engaged. */
|
|
7
|
+
export type RoutedModel = ModelGateResult & {
|
|
8
|
+
envToApply?: Record<string, string>;
|
|
9
|
+
};
|
|
10
|
+
export type ProxyMintResult = {
|
|
11
|
+
ok: true;
|
|
12
|
+
token: string;
|
|
13
|
+
endpoint: string;
|
|
14
|
+
} | {
|
|
15
|
+
ok: false;
|
|
16
|
+
reason: "requires_card" | "requires_upgrade" | "unconfigured" | "transient";
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* The proxy `endpoint` becomes `ANTHROPIC_BASE_URL` and receives the bearer on every
|
|
20
|
+
* model call, so it must be a well-formed **https** URL — never cleartext. It comes
|
|
21
|
+
* from the authenticated Cloud (not directly attacker-controlled), but a
|
|
22
|
+
* compromised/misconfigured Cloud response could otherwise redirect the proxy token.
|
|
23
|
+
* Operators can additionally pin exact hosts via `INFRAWEAVER_MODEL_PROXY_ALLOWED_HOSTS`
|
|
24
|
+
* (comma-separated); unset = trust any https host the Cloud returns.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isSafeProxyEndpoint(endpoint: string): boolean;
|
|
27
|
+
/** Classify a `/api/proxy-token` response. Pure given the status + parsed body
|
|
28
|
+
* (aside from the optional `INFRAWEAVER_MODEL_PROXY_ALLOWED_HOSTS` host pin). */
|
|
29
|
+
export declare function classifyProxyMint(status: number, body: {
|
|
30
|
+
token?: unknown;
|
|
31
|
+
endpoint?: unknown;
|
|
32
|
+
} | null): ProxyMintResult;
|
|
33
|
+
/** The env that points the Anthropic-compatible harness at the managed proxy. Pure. */
|
|
34
|
+
export declare function managedProxyEnv(token: string, endpoint: string): Record<string, string>;
|
|
35
|
+
/** Apply a model-routing env patch to the process. The one place env is mutated, and
|
|
36
|
+
* the caller does it explicitly with a value it can see (no hidden side effect). */
|
|
37
|
+
export declare function applyModelEnv(env: Record<string, string>): void;
|
|
38
|
+
/** Mint a managed-model proxy token from the Cloud. Never throws — network/parse
|
|
39
|
+
* failures classify as `transient` so the caller can fall back to the free model. */
|
|
40
|
+
export declare function mintProxyToken(opts: {
|
|
41
|
+
credential: string;
|
|
42
|
+
model?: string | undefined;
|
|
43
|
+
fetchImpl?: typeof apiFetch;
|
|
44
|
+
}): Promise<ProxyMintResult>;
|
|
45
|
+
/** The mint seam `applyManagedProxy` / `resolveRunModel` accept for tests. */
|
|
46
|
+
export type ProxyMint = typeof mintProxyToken;
|
|
47
|
+
/**
|
|
48
|
+
* The model the managed EU Bedrock proxy should serve for this run. The managed
|
|
49
|
+
* gateway is Anthropic-on-Bedrock, and unlike a BYOK key it can serve the whole
|
|
50
|
+
* Claude family — including Claude Fable, which the BYOK catalog deprecates to Opus
|
|
51
|
+
* (many BYOK Anthropic keys can't invoke Fable). So for an `anthropic/*` selection
|
|
52
|
+
* we mint for the slug's *undeprecated* resolve (e.g. `anthropic/claude-fable`
|
|
53
|
+
* stays Fable) rather than the fallback-collapsed model the BYOK gate produced.
|
|
54
|
+
* Non-Anthropic selections keep the gate's resolved model (the proxy maps anything
|
|
55
|
+
* else to its default Claude model anyway). Returns undefined when there is no
|
|
56
|
+
* usable Anthropic override, so the caller keeps `gate.fallback.from`.
|
|
57
|
+
*/
|
|
58
|
+
export declare function managedProxyModel(slug: string | undefined): string | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Overlay the managed proxy onto a model gate. A no-op (returns the gate unchanged)
|
|
61
|
+
* unless the free fallback engaged (no BYO key) AND the org is on PAYG. On a
|
|
62
|
+
* successful mint it routes the originally-requested model through the proxy and sets
|
|
63
|
+
* `envToApply`; a `requires_card` mint surfaces a `BillingError`;
|
|
64
|
+
* `unconfigured`/`transient` keep the free fallback the gate already chose.
|
|
65
|
+
*/
|
|
66
|
+
export declare function applyManagedProxy(input: {
|
|
67
|
+
gate: ModelGateResult;
|
|
68
|
+
plan: AccountPlan;
|
|
69
|
+
credential: string;
|
|
70
|
+
resolveAgent: (ctx: {
|
|
71
|
+
model?: string | undefined;
|
|
72
|
+
}) => Agent;
|
|
73
|
+
/** the originally-requested model slug (before BYOK fallback), when known */
|
|
74
|
+
slug?: string | undefined;
|
|
75
|
+
mint?: ProxyMint;
|
|
76
|
+
}): Promise<RoutedModel>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
type ComputeIncrementalDiffParams = {
|
|
2
|
+
baseBranch: string;
|
|
3
|
+
beforeSha: string;
|
|
4
|
+
headSha: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* computes the incremental diff between two versions of a PR using range-diff
|
|
8
|
+
* on virtual squash commits created via `git commit-tree`.
|
|
9
|
+
*
|
|
10
|
+
* each PR version is squashed into a single synthetic commit (merge-base → tip tree),
|
|
11
|
+
* then range-diff compares those two single-commit ranges. this:
|
|
12
|
+
* - isolates each version's net effect (base branch noise eliminated via per-version merge bases)
|
|
13
|
+
* - avoids commit-matching issues that raw range-diff has with rebases/squashes/reordering
|
|
14
|
+
* - creates only loose git objects, no branches or refs (unlike temp-branch squash approaches)
|
|
15
|
+
*
|
|
16
|
+
* unlike fetchAndFormatPrDiff/formatFilesWithLineNumbers, this output has no line numbers.
|
|
17
|
+
* range-diff compares *patches* (diffs-of-diffs), not file trees — its hunk headers are
|
|
18
|
+
* `@@ file.ts` breadcrumbs, not positional `@@ -X,Y +A,B @@` markers. reconstructing
|
|
19
|
+
* line numbers would require cross-referencing with the v2 diff or content-matching against
|
|
20
|
+
* file trees, both of which are fragile (duplicate lines, hunk boundary shifts after rebase).
|
|
21
|
+
* a structured interdiff approach (diff two parsed patches, compare only +/- keys via Myers)
|
|
22
|
+
* could approximate line numbers but loses semantic precision: range-diff understands patch
|
|
23
|
+
* structure natively (rename detection, hunk-aware matching, dual-prefix inner/outer changes),
|
|
24
|
+
* while flat key-sequence comparison can misalign duplicate lines and can't distinguish
|
|
25
|
+
* "new addition to the PR" from "existing code newly modified by the PR". range-diff is the
|
|
26
|
+
* right abstraction here — the incremental diff answers "how did the changeset evolve?",
|
|
27
|
+
* not "where in the file is this?", and forcing positional line numbers onto it would be
|
|
28
|
+
* semantically misleading.
|
|
29
|
+
*
|
|
30
|
+
* alternatives considered:
|
|
31
|
+
* - plain git diff (two-tree or three-dot): includes base branch changes, no PR isolation
|
|
32
|
+
* - patch-text diffing (interdiff / diff-of-diffs): fragile, hunk offset noise on rebase
|
|
33
|
+
* - range-diff on raw commit ranges: confused by commit reorganization across force-pushes
|
|
34
|
+
*/
|
|
35
|
+
export declare function computeIncrementalDiff(params: ComputeIncrementalDiffParams): string | null;
|
|
36
|
+
/**
|
|
37
|
+
* transforms git range-diff output into a clean incremental diff.
|
|
38
|
+
*
|
|
39
|
+
* range-diff content lines have two prefix characters:
|
|
40
|
+
* 1st (outer): range-diff level — space (same in both), + (new only), - (old only)
|
|
41
|
+
* 2nd (inner): original diff level — space (context), + (added), - (removed)
|
|
42
|
+
*
|
|
43
|
+
* stripping the inner prefix produces a standard unified-diff-like output where
|
|
44
|
+
* +/- means "changed between PR versions" rather than "changed vs base branch".
|
|
45
|
+
*
|
|
46
|
+
* uses a streaming approach: a ring buffer of before-context lines is flushed when
|
|
47
|
+
* a change is hit, then afterCount lines of after-context are emitted directly.
|
|
48
|
+
* nearest preceding ## / @@ headers are force-included when outside the context window.
|
|
49
|
+
*/
|
|
50
|
+
export declare function postProcessRangeDiff(raw: string, contextLines?: number): string | null;
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sink-independent secret redaction for log output.
|
|
3
|
+
*
|
|
4
|
+
* `core.setSecret()` only masks on the GitHub `actions` log sink. Every stdio MCP
|
|
5
|
+
* server runs with `setLogSink("stderr")` (stdout is the JSON-RPC channel there) and
|
|
6
|
+
* local dev prints to the console — neither is masked. So a stray `log.debug(env)`,
|
|
7
|
+
* an error that stringifies a request, or any line that merely contains a bearer would
|
|
8
|
+
* print it in cleartext on those sinks. This scrubs secret-shaped substrings from an
|
|
9
|
+
* already-formatted log line BEFORE it reaches any sink, so redaction no longer depends
|
|
10
|
+
* on which sink is active (it complements `core.setSecret`, it doesn't replace it).
|
|
11
|
+
*
|
|
12
|
+
* Two layers, applied in order:
|
|
13
|
+
* 1. Registered literals — exact values handed to {@link registerSecret} (e.g. the
|
|
14
|
+
* minted managed-proxy token). Caught even when their shape is unusual.
|
|
15
|
+
* 2. Shape patterns — known token formats (`tmnd_`/`tmpx_` org + proxy tokens, the
|
|
16
|
+
* GitHub `ghp_`/`gho_`/`ghu_`/`ghs_`/`ghr_` family + fine-grained PATs, Anthropic
|
|
17
|
+
* keys, AWS access-key ids, `Bearer …` headers) plus any JSON property whose NAME
|
|
18
|
+
* matches the sensitive-env patterns (reuses {@link isSensitiveEnvName}, so an
|
|
19
|
+
* `{"GITHUB_TOKEN":"…"}` env dump is masked by key even if the value shape is novel).
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Register a literal secret value for sink-independent log redaction. Safe to call with
|
|
23
|
+
* any string; values under 8 chars are ignored so we never scrub a common substring.
|
|
24
|
+
* Complements `core.setSecret` (call both) — this one also masks on stderr/local sinks.
|
|
25
|
+
*/
|
|
26
|
+
export declare function registerSecret(value: string | undefined | null): void;
|
|
27
|
+
/** Test-only: clear the literal registry between cases. */
|
|
28
|
+
export declare function _resetRegisteredSecrets(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Redact secret-shaped substrings from an already-formatted log line. Idempotent,
|
|
31
|
+
* allocation-light on the common (no-secret) path, and never throws.
|
|
32
|
+
*/
|
|
33
|
+
export declare function redactSecrets(text: string): string;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** the HCP Terraform / private-registry host a `registry_token` defaults to. */
|
|
2
|
+
export declare const DEFAULT_REGISTRY_HOST = "app.terraform.io";
|
|
3
|
+
/**
|
|
4
|
+
* The `TF_TOKEN_<host>` env-var NAME for a registry host, per Terraform's encoding:
|
|
5
|
+
* lower-cased, each `.` → `_`, each `-` → `__`. The two replacements operate on
|
|
6
|
+
* disjoint characters, so order is immaterial. Pure.
|
|
7
|
+
*/
|
|
8
|
+
export declare function registryTokenEnvName(host: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Parse the `registry_host` input (newline/comma-separated) into the hosts a
|
|
11
|
+
* registry token authorises. Blank/whitespace entries are dropped and hosts are
|
|
12
|
+
* de-duplicated case-insensitively. Falls back to the HCP host when none is given —
|
|
13
|
+
* the overwhelmingly common private-registry target — so supplying just a token works.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registryHosts(raw?: string | undefined): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Build the `TF_TOKEN_<host>=<token>` env that authorises `terraform init` to fetch
|
|
18
|
+
* a private-registry module for each host. Pure (token + hosts in, env out) so it is
|
|
19
|
+
* unit-testable without a real terraform. The token only ever lands in a VALUE, never
|
|
20
|
+
* a key. Returns `{}` for a blank token or no usable host.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildRegistryTokenEnv(token: string, hosts: string[]): Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the registry-token env for a run, or undefined when no `registry_token`
|
|
25
|
+
* was supplied (the common public-registry/local case). Mirrors
|
|
26
|
+
* `resolveModuleFetchEnv` so the scan/verify/plan/refactor paths treat both
|
|
27
|
+
* credentials identically. The token authorises the hosts named in `registryHost`
|
|
28
|
+
* (default: the HCP host).
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveRegistryTokenEnv(payload: {
|
|
31
|
+
registryToken?: string | undefined;
|
|
32
|
+
registryHost?: string | undefined;
|
|
33
|
+
}): Record<string, string> | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* The full extra-env a terraform subprocess needs to FETCH private modules: the
|
|
36
|
+
* git-transport credential for cross-repo `git::` modules (moduleFetch.ts) merged
|
|
37
|
+
* with the registry-protocol token for private-registry modules (this file). The two
|
|
38
|
+
* key namespaces (`GIT_CONFIG_*` / `GIT_SSH_COMMAND` vs `TF_TOKEN_*`) never collide.
|
|
39
|
+
* Both are scoped to the subprocess and never persisted. Returns undefined when
|
|
40
|
+
* neither is configured (the common public/local-module case). This is the single
|
|
41
|
+
* resolver the scan / verify / plan / equivalence-check paths call so they treat both
|
|
42
|
+
* credentials alike.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolveModuleCredentialEnv(payload: {
|
|
45
|
+
moduleFetchToken?: string | undefined;
|
|
46
|
+
moduleFetchSshKey?: string | undefined;
|
|
47
|
+
registryToken?: string | undefined;
|
|
48
|
+
registryHost?: string | undefined;
|
|
49
|
+
}, opts?: {
|
|
50
|
+
sshKeyDir?: string;
|
|
51
|
+
writeKey?: (path: string, contents: string) => void;
|
|
52
|
+
}): Record<string, string> | undefined;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comment-command interface. A developer can scope a remediation run from
|
|
3
|
+
* a PR/issue comment that mentions the bot:
|
|
4
|
+
*
|
|
5
|
+
* @infraweaver fix #3a9f1c2 → fix exactly one concern (by id or short id)
|
|
6
|
+
* @infraweaver fix all high-severity → fix every concern at/above a severity
|
|
7
|
+
* @infraweaver fix all → fix everything (still bounded by max_prs)
|
|
8
|
+
* @infraweaver fix main.tf → fix one file's group
|
|
9
|
+
*
|
|
10
|
+
* Propose, then let me steer — when a non-trivial finding has several
|
|
11
|
+
* genuinely distinct valid fixes, Remediate proposes 2–3 labelled strategies in
|
|
12
|
+
* a comment instead of guessing, and the reviewer picks one by replying:
|
|
13
|
+
*
|
|
14
|
+
* @infraweaver fix #3a9f1c2 with strategy B → apply strategy B to that concern
|
|
15
|
+
* @infraweaver strategy 2 → pick strategy 2 (concern from the thread)
|
|
16
|
+
*
|
|
17
|
+
* The parsing is pure + deterministic so the scoping doesn't depend on the
|
|
18
|
+
* model's reading of the comment. The Remediate mode applies the parsed scope
|
|
19
|
+
* (which group(s) to act on, and which strategy) instead of the default
|
|
20
|
+
* "highest-severity group, agent's-choice fix".
|
|
21
|
+
*/
|
|
22
|
+
export type RemediationCommand = {
|
|
23
|
+
kind: "concern";
|
|
24
|
+
concernRef: string;
|
|
25
|
+
strategy?: string;
|
|
26
|
+
} | {
|
|
27
|
+
kind: "severity";
|
|
28
|
+
severity: Severity;
|
|
29
|
+
} | {
|
|
30
|
+
kind: "file";
|
|
31
|
+
file: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "rule";
|
|
34
|
+
ruleId: string;
|
|
35
|
+
} | {
|
|
36
|
+
kind: "strategy";
|
|
37
|
+
strategy: string;
|
|
38
|
+
} | {
|
|
39
|
+
kind: "all";
|
|
40
|
+
};
|
|
41
|
+
declare const SEVERITIES: readonly ["critical", "high", "medium", "low", "info"];
|
|
42
|
+
type Severity = (typeof SEVERITIES)[number];
|
|
43
|
+
/**
|
|
44
|
+
* the canonical phrasing the proposal comment must tell reviewers to reply
|
|
45
|
+
* with. Lives next to the parser that accepts it so the proposal template (in
|
|
46
|
+
* the Remediate prompt) and the parser can never drift apart. `<concern-id>` and
|
|
47
|
+
* `<A|B|C>` are placeholders the agent fills with the real id and the offered
|
|
48
|
+
* strategy labels.
|
|
49
|
+
*/
|
|
50
|
+
export declare const STRATEGY_REPLY_HINT = "@infraweaver fix #<concern-id> with strategy <A|B|C>";
|
|
51
|
+
/**
|
|
52
|
+
* Parse a `@infraweaver fix …` command out of a comment body. Returns null when
|
|
53
|
+
* the body isn't a recognised fix command (the run then falls back to its
|
|
54
|
+
* default scope). Tolerant of surrounding prose — it scans for the mention then
|
|
55
|
+
* the `fix` verb and its argument.
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseRemediationCommand(body: string | undefined): RemediationCommand | null;
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Default upper bound on a honored server Retry-After hint (ms). A hostile or
|
|
2
|
+
* buggy `Retry-After` could otherwise stall a run for its full value (GitHub
|
|
3
|
+
* secondary-rate-limit responses have carried multi-minute hints); 20s matches
|
|
4
|
+
* octokit's throttling-plugin ceiling. */
|
|
5
|
+
export declare const DEFAULT_RETRY_AFTER_CAP_MS = 20000;
|
|
6
|
+
export type RetryOptions = {
|
|
7
|
+
maxAttempts?: number;
|
|
8
|
+
delayMs?: number;
|
|
9
|
+
/**
|
|
10
|
+
* explicit delay schedule — one entry per retry (length N ⇒ N+1 attempts).
|
|
11
|
+
* when set, overrides `maxAttempts` and `delayMs`. e.g. `[1_000, 3_000]`
|
|
12
|
+
* means up to 3 attempts, sleeping 1s before retry 2 and 3s before retry 3.
|
|
13
|
+
*/
|
|
14
|
+
delaysMs?: readonly number[];
|
|
15
|
+
shouldRetry?: (error: unknown) => boolean;
|
|
16
|
+
/** cap (ms) on a honored server Retry-After / rate-limit-reset hint. default
|
|
17
|
+
* {@link DEFAULT_RETRY_AFTER_CAP_MS}. The fixed backoff is never capped —
|
|
18
|
+
* this only bounds how long a *server-suggested* delay can extend it. */
|
|
19
|
+
retryAfterCapMs?: number;
|
|
20
|
+
label?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* A broad transient predicate for octokit/GitHub calls: an HTTP 5xx (an upstream
|
|
24
|
+
* blip) OR a network-class error. Distinct from a deterministic 4xx (404/401/403/
|
|
25
|
+
* 422), which fails fast. Pass as `shouldRetry` for idempotent GitHub reads/
|
|
26
|
+
* dispatches whose client carries no 5xx retry of its own (mirrors pullfrog's
|
|
27
|
+
* `isTransientOctokitError`). see #999/#997.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isTransientServerError(error: unknown): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Parse an HTTP `Retry-After` header value into milliseconds. Accepts the two
|
|
32
|
+
* RFC-9110 forms — delta-seconds (`"120"`) and an HTTP-date (`"Wed, 21 Oct 2026
|
|
33
|
+
* 07:28:00 GMT"`) — and returns `undefined` for anything else. Callers that hold
|
|
34
|
+
* the `Response` attach the result as `retryAfterMs` on the thrown error so
|
|
35
|
+
* {@link retry} can floor its backoff to it.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseRetryAfter(value: string | null | undefined): number | undefined;
|
|
38
|
+
export declare function retry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ToolContext } from "#app/mcp/server";
|
|
2
|
+
/**
|
|
3
|
+
* post-agent review lifecycle: runs after the agent exits (success or timeout).
|
|
4
|
+
*
|
|
5
|
+
* normally the agent handles new commits inline: create_pull_request_review
|
|
6
|
+
* detects HEAD movement and tells the agent to pull and review the delta.
|
|
7
|
+
* this dispatch is a safety net for cases where the agent couldn't handle
|
|
8
|
+
* it (timeout, error, etc).
|
|
9
|
+
*
|
|
10
|
+
* ordering matters: reportReviewNodeId marks this run "done" FIRST so push
|
|
11
|
+
* webhooks stop being suppressed by dedup. the HEAD check runs SECOND to
|
|
12
|
+
* catch any pushes that were suppressed while this run was in-flight.
|
|
13
|
+
*/
|
|
14
|
+
export declare function postReviewCleanup(ctx: ToolContext): Promise<void>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentResult } from "#app/agents/shared";
|
|
2
|
+
import type { MainResult } from "#app/main";
|
|
3
|
+
import type { ToolContext } from "#app/mcp/server";
|
|
4
|
+
export interface HandleAgentResultParams {
|
|
5
|
+
result: AgentResult;
|
|
6
|
+
toolContext: ToolContext;
|
|
7
|
+
silent: boolean | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare function handleAgentResult(ctx: HandleAgentResultParams): Promise<MainResult>;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { PushPermission, ShellPermission } from "#app/external";
|
|
2
|
+
import type { RepoContext } from "#app/utils/github";
|
|
3
|
+
export interface Mode {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
prompt: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* server-parsed TOC entry for `Repo.learnings`. depth is 1-6 (h1-h6),
|
|
11
|
+
* line numbers are 1-indexed against the raw body. computed by
|
|
12
|
+
* `parseLearningsHeadings` in `utils/learningsToc.ts` (server side) and
|
|
13
|
+
* shipped over the run-context JSON boundary; the canonical declaration
|
|
14
|
+
* lives there. duplicated here because the action runtime can't reach
|
|
15
|
+
* across into the proprietary root-level codebase, and the JSON wire
|
|
16
|
+
* means typecheck can't enforce shape equality across both sides.
|
|
17
|
+
*/
|
|
18
|
+
export interface LearningsHeading {
|
|
19
|
+
depth: 1 | 2 | 3 | 4 | 5 | 6;
|
|
20
|
+
title: string;
|
|
21
|
+
startLine: number;
|
|
22
|
+
endLine: number;
|
|
23
|
+
}
|
|
24
|
+
export interface RepoSettings {
|
|
25
|
+
model: string | null;
|
|
26
|
+
modes: Mode[];
|
|
27
|
+
setupScript: string | null;
|
|
28
|
+
postCheckoutScript: string | null;
|
|
29
|
+
prepushScript: string | null;
|
|
30
|
+
stopScript: string | null;
|
|
31
|
+
push: PushPermission;
|
|
32
|
+
shell: ShellPermission;
|
|
33
|
+
prApproveEnabled: boolean;
|
|
34
|
+
modeInstructions: Record<string, string>;
|
|
35
|
+
learnings: string | null;
|
|
36
|
+
learningsHeadings: LearningsHeading[];
|
|
37
|
+
envAllowlist: string | null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Account-level billing plan. Orthogonal to repo-level OSS status. Mirrors
|
|
41
|
+
* the server's `AccountPlan` in `utils/billing.ts`. `"none"` = free tier,
|
|
42
|
+
* `"payg"` = card on file / pay-as-you-go.
|
|
43
|
+
*/
|
|
44
|
+
export type AccountPlan = "none" | "payg";
|
|
45
|
+
/**
|
|
46
|
+
* Cloud-managed module credentials for this repo, entered once in the dashboard's
|
|
47
|
+
* Refactor dialog and sealed at rest. Delivered over the authenticated, repo-scoped
|
|
48
|
+
* run-context call (never the GitHub `repository_dispatch` payload). Used by the
|
|
49
|
+
* engine only as a FALLBACK for the matching action inputs — an explicit
|
|
50
|
+
* `module_fetch_token` / `registry_token` input always wins. Both fields optional;
|
|
51
|
+
* absent on OSS / unmanaged runs or when none were stored.
|
|
52
|
+
*/
|
|
53
|
+
export interface ModuleCredentials {
|
|
54
|
+
/** read-only PAT for a private cross-repo `git::` module (refactor b.1). */
|
|
55
|
+
moduleFetchToken?: string;
|
|
56
|
+
/** bearer token for a private Terraform registry module (refactor b.4). */
|
|
57
|
+
registryToken?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface RunContext {
|
|
60
|
+
settings: RepoSettings;
|
|
61
|
+
apiToken: string;
|
|
62
|
+
oss: boolean;
|
|
63
|
+
plan: AccountPlan;
|
|
64
|
+
/**
|
|
65
|
+
* The maintained-pack control ids this run's ORG marked MANDATORY in the Cloud
|
|
66
|
+
* dashboard (the "required controls" policy). Org-scoped by construction — the
|
|
67
|
+
* run-context call is authenticated to exactly one org + repo, so a run only
|
|
68
|
+
* ever receives its own org's policy. Merged into the gate's `required_controls`
|
|
69
|
+
* so an open finding on any of these fails CI regardless of severity. `[]` for
|
|
70
|
+
* OSS / unmanaged runs.
|
|
71
|
+
*/
|
|
72
|
+
requiredControls: string[];
|
|
73
|
+
/** §5.12 the org's proven-fix library — patterns (finding-type → proven
|
|
74
|
+
* transformation) captured from prior `✗→✓` proofs across the org's fleet,
|
|
75
|
+
* served so this run can offer them as priors for matching finding-types. An
|
|
76
|
+
* untrusted blob coerced engine-side (utils/fixMemory `coerceLibrary`). `[]`
|
|
77
|
+
* for OSS / unentitled / unconfigured runs. */
|
|
78
|
+
provenFixes: unknown[];
|
|
79
|
+
/** G7 the org's fleet-wide dismissal record — which rules this org has waived,
|
|
80
|
+
* across how many DISTINCT repos, with the reasons given. A SURFACING signal
|
|
81
|
+
* only: it reorders the low-severity tail and can neither suppress a finding
|
|
82
|
+
* nor change a verdict (see `terraform/noiseProfile`). An untrusted blob
|
|
83
|
+
* coerced engine-side, same posture as {@link RunContext.provenFixes}. `[]`
|
|
84
|
+
* for OSS / unentitled / unconfigured runs. */
|
|
85
|
+
noiseProfile: unknown[];
|
|
86
|
+
/** TC-2.2 the org's fleet-wide record of provider-upgrade transforms that have
|
|
87
|
+
* already planned cleanly elsewhere — counters keyed by transform id, never
|
|
88
|
+
* another repo's configuration. Annotates a detected transform with how widely
|
|
89
|
+
* it has been proven. An untrusted blob coerced engine-side, same posture as
|
|
90
|
+
* {@link RunContext.provenFixes}. `[]` for OSS / unentitled / unconfigured runs. */
|
|
91
|
+
provenTransforms: unknown[];
|
|
92
|
+
/** Cloud-managed module credentials (see {@link ModuleCredentials}); undefined
|
|
93
|
+
* when none are stored for this repo. */
|
|
94
|
+
moduleCredentials?: ModuleCredentials;
|
|
95
|
+
}
|
|
96
|
+
/** Coerce the untrusted run-context `moduleCredentials` blob into the typed shape,
|
|
97
|
+
* keeping only non-empty string values. Returns undefined when nothing usable is
|
|
98
|
+
* present (so the engine treats it as "no managed credentials"). */
|
|
99
|
+
export declare function parseModuleCredentials(raw: {
|
|
100
|
+
moduleFetchToken?: unknown;
|
|
101
|
+
registryToken?: unknown;
|
|
102
|
+
} | undefined): ModuleCredentials | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* fetch run context from Infraweaver API
|
|
105
|
+
* returns settings + API token for subsequent calls
|
|
106
|
+
* returns defaults if fetch fails (warns when a backend was configured)
|
|
107
|
+
*/
|
|
108
|
+
export declare function fetchRunContext(params: {
|
|
109
|
+
token: string;
|
|
110
|
+
repoContext: RepoContext;
|
|
111
|
+
oidcToken?: string | undefined;
|
|
112
|
+
}): Promise<RunContext>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Octokit } from "@octokit/rest";
|
|
2
|
+
import { type OctokitWithPlugins } from "#app/utils/github";
|
|
3
|
+
import { type AccountPlan, type ModuleCredentials, type RepoSettings } from "#app/utils/runContext";
|
|
4
|
+
export interface RunContextData {
|
|
5
|
+
repo: {
|
|
6
|
+
owner: string;
|
|
7
|
+
name: string;
|
|
8
|
+
data: Awaited<ReturnType<Octokit["repos"]["get"]>>["data"];
|
|
9
|
+
};
|
|
10
|
+
repoSettings: RepoSettings;
|
|
11
|
+
apiToken: string;
|
|
12
|
+
oss: boolean;
|
|
13
|
+
plan: AccountPlan;
|
|
14
|
+
/** The org's mandatory crosswalk-pack control ids (Cloud "required controls"
|
|
15
|
+
* policy), org-scoped via the authenticated run-context. Merged into the gate. */
|
|
16
|
+
requiredControls: string[];
|
|
17
|
+
/** §5.12 the org's proven-fix library (untrusted blob; coerced engine-side).
|
|
18
|
+
* `[]` for OSS / unentitled runs. */
|
|
19
|
+
provenFixes: unknown[];
|
|
20
|
+
/** TC-2.2 the org's proven provider-upgrade transforms (untrusted blob;
|
|
21
|
+
* coerced engine-side). Counters only — never another repo's configuration.
|
|
22
|
+
* `[]` for OSS / unentitled runs. */
|
|
23
|
+
provenTransforms: unknown[];
|
|
24
|
+
/** G7 the org's fleet-wide dismissal record (untrusted blob; coerced
|
|
25
|
+
* engine-side). Reorders surfacing only — never suppresses. `[]` for OSS /
|
|
26
|
+
* unentitled runs. */
|
|
27
|
+
noiseProfile: unknown[];
|
|
28
|
+
/** Cloud-managed module credentials for this repo (a read-only module-repo PAT /
|
|
29
|
+
* a private-registry token), entered in the dashboard's Refactor dialog. A
|
|
30
|
+
* fallback for the matching action inputs; an explicit input still wins.
|
|
31
|
+
* undefined when none are stored. */
|
|
32
|
+
moduleCredentials?: ModuleCredentials;
|
|
33
|
+
}
|
|
34
|
+
interface ResolveRunContextDataParams {
|
|
35
|
+
octokit: OctokitWithPlugins;
|
|
36
|
+
token: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* initialize run context data: parse context, fetch repo info and settings
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveRunContextData(params: ResolveRunContextDataParams): Promise<RunContextData>;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
import type { AgentDiagnostic } from "#app/utils/agentHangReport";
|
|
53
|
+
export type RenderedRunError = {
|
|
54
|
+
summary: string;
|
|
55
|
+
comment: string;
|
|
56
|
+
};
|
|
57
|
+
export declare function renderRunError(input: {
|
|
58
|
+
errorMessage: string;
|
|
59
|
+
repo: {
|
|
60
|
+
owner: string;
|
|
61
|
+
name: string;
|
|
62
|
+
};
|
|
63
|
+
agentDiagnostic: AgentDiagnostic | undefined;
|
|
64
|
+
}): RenderedRunError;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-of-run cleanup phases extracted out of `main.ts`. Three shapes:
|
|
3
|
+
*
|
|
4
|
+
* - `persistRunArtifacts`: best-effort post-review cleanup + summary +
|
|
5
|
+
* learnings persistence. Shared by both the success path and the
|
|
6
|
+
* error-catch path; idempotent (each step has its own guard against
|
|
7
|
+
* double-execution).
|
|
8
|
+
*
|
|
9
|
+
* - `finalizeSuccessRun`: success-only — calls `persistRunArtifacts`
|
|
10
|
+
* first, then surfaces harness-side failures in the progress comment,
|
|
11
|
+
* deletes stranded progress comments, writes the GitHub Actions job
|
|
12
|
+
* summary, and emits the structured output marker.
|
|
13
|
+
*
|
|
14
|
+
* - `writeRunErrorOutputs`: error-only — writes the rendered error
|
|
15
|
+
* summary to the Actions summary tab and mirrors it to the PR
|
|
16
|
+
* progress comment. The catch path calls this and then
|
|
17
|
+
* `persistRunArtifacts` separately so the rendered error lands before
|
|
18
|
+
* the persistence calls, in case the latter throw.
|
|
19
|
+
*
|
|
20
|
+
* All three swallow their own non-fatal errors (`log.debug` or empty
|
|
21
|
+
* `catch {}`) so a cleanup failure can't flip an already-decided run
|
|
22
|
+
* outcome.
|
|
23
|
+
*/
|
|
24
|
+
import type { AgentResult } from "#app/agents/shared";
|
|
25
|
+
import type { ToolContext } from "#app/mcp/server";
|
|
26
|
+
import type { ToolState } from "#app/toolState";
|
|
27
|
+
import { type RenderedRunError } from "#app/utils/runErrorRenderer";
|
|
28
|
+
/**
|
|
29
|
+
* Best-effort cleanup shared by both run-end paths:
|
|
30
|
+
* 1. post-review cleanup (dispatch follow-up re-review on submitted reviews)
|
|
31
|
+
* 2. persist the agent-edited PR summary tmpfile
|
|
32
|
+
* 3. persist the agent-edited repo-level learnings tmpfile
|
|
33
|
+
*
|
|
34
|
+
* Each step is idempotent and swallows its own errors. Safe to call from
|
|
35
|
+
* both `main()`'s success path and its catch path.
|
|
36
|
+
*/
|
|
37
|
+
export declare function persistRunArtifacts(toolContext: ToolContext): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Run the success-path cleanup waterfall:
|
|
40
|
+
*
|
|
41
|
+
* 1. shared best-effort cleanup via `persistRunArtifacts`
|
|
42
|
+
* 2. when the harness returned `success=false` (e.g. unsubmitted-review
|
|
43
|
+
* gate exhausted retries, stop-hook persistently failing), render via
|
|
44
|
+
* `renderRunError` and surface the error in BOTH the progress comment
|
|
45
|
+
* (rendered.comment) and the Actions job summary (rendered.summary,
|
|
46
|
+
* prepended below in step 4) — same classifier as the catch path so
|
|
47
|
+
* the user sees it instead of a deleted-comment void / empty summary
|
|
48
|
+
* tab
|
|
49
|
+
* 3. when the run succeeded, some write landed (`wasUpdated`), but the
|
|
50
|
+
* progress comment was never finalized via `report_progress`, delete
|
|
51
|
+
* the stranded comment (abandoned checklist, or a substantive artifact
|
|
52
|
+
* written via another MCP write tool that skipped report_progress). a
|
|
53
|
+
* run where NO write landed keeps its comment for handleAgentResult to
|
|
54
|
+
* salvage into — see the `wasUpdated` guard below and #868
|
|
55
|
+
* 4. write the GitHub Actions step summary (best-effort — a write
|
|
56
|
+
* failure must not throw past this point because we'd hit the outer
|
|
57
|
+
* catch and clobber any progress comment we just wrote)
|
|
58
|
+
* 5. emit the structured output marker for tests + workflow consumers
|
|
59
|
+
*/
|
|
60
|
+
export declare function finalizeSuccessRun(input: {
|
|
61
|
+
toolContext: ToolContext;
|
|
62
|
+
toolState: ToolState;
|
|
63
|
+
result: AgentResult;
|
|
64
|
+
repo: {
|
|
65
|
+
owner: string;
|
|
66
|
+
name: string;
|
|
67
|
+
};
|
|
68
|
+
/** Infraweaver Cloud org token (the `api_token` input). When set, the run's
|
|
69
|
+
* findings/posture are reported to Cloud (best-effort). */
|
|
70
|
+
cloudApiToken?: string | undefined;
|
|
71
|
+
}): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Write the rendered error to the GitHub Actions job summary tab + mirror
|
|
74
|
+
* to the PR progress comment when one exists. Catch path only.
|
|
75
|
+
*
|
|
76
|
+
* `lastProgressBody` and the usage table are appended to the summary so the
|
|
77
|
+
* partial work the agent did before failing isn't lost.
|
|
78
|
+
*
|
|
79
|
+
* `createIfMissing: true` is symmetric with `finalizeSuccessRun` — silent
|
|
80
|
+
* triggers (IncrementalReview / pull_request_synchronize / auto-label) that
|
|
81
|
+
* throw past `finalizeSuccessRun` (e.g. timeout race kills the agent
|
|
82
|
+
* mid-billing-exhausted-retry) reach this catch path with no progress
|
|
83
|
+
* comment to update, and without `createIfMissing` the terminal error
|
|
84
|
+
* lands only in the GH job summary that most users never open. see #835.
|
|
85
|
+
*/
|
|
86
|
+
export declare function writeRunErrorOutputs(input: {
|
|
87
|
+
rendered: RenderedRunError;
|
|
88
|
+
toolState: ToolState;
|
|
89
|
+
}): Promise<void>;
|