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,126 @@
|
|
|
1
|
+
import { existsSync, statSync } from "node:fs";
|
|
2
|
+
import { isAbsolute, resolve } from "node:path";
|
|
3
|
+
import arg from "arg";
|
|
4
|
+
import { PRODUCT_SLUG } from "#app/brand";
|
|
5
|
+
import { startLocalMcpServer } from "#app/mcp/localServer";
|
|
6
|
+
import { setLogSink } from "#app/utils/log";
|
|
7
|
+
|
|
8
|
+
const SEVERITIES = ["critical", "high", "medium", "low", "info"] as const;
|
|
9
|
+
type SeverityFlag = (typeof SEVERITIES)[number];
|
|
10
|
+
|
|
11
|
+
const SCAN_SCOPES = ["full", "diff"] as const;
|
|
12
|
+
type ScanScopeFlag = (typeof SCAN_SCOPES)[number];
|
|
13
|
+
|
|
14
|
+
function isSeverity(value: string): value is SeverityFlag {
|
|
15
|
+
return (SEVERITIES as readonly string[]).includes(value);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function isScanScope(value: string): value is ScanScopeFlag {
|
|
19
|
+
return (SCAN_SCOPES as readonly string[]).includes(value);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface McpCliParams {
|
|
23
|
+
args: string[];
|
|
24
|
+
prog: string;
|
|
25
|
+
showHelp?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function printMcpUsage(params: { stream: typeof console.log; prog: string }): void {
|
|
29
|
+
params.stream(`usage: ${params.prog} mcp [options]\n`);
|
|
30
|
+
params.stream(`start the local MCP server (stdio) exposing ${PRODUCT_SLUG}'s read-only`);
|
|
31
|
+
params.stream("terraform tools — scan, validate, verify, plan, version currency,");
|
|
32
|
+
params.stream("modules, provider schema, roots — to MCP clients like Claude Code,");
|
|
33
|
+
params.stream("Cursor, or Windsurf. example registration:");
|
|
34
|
+
params.stream(` claude mcp add ${PRODUCT_SLUG} -- npx -y ${PRODUCT_SLUG} mcp`);
|
|
35
|
+
params.stream("");
|
|
36
|
+
params.stream("options:");
|
|
37
|
+
params.stream(" --cwd <dir> workspace to operate on (default: current dir)");
|
|
38
|
+
params.stream(` --severity-threshold <sev> minimum severity (${SEVERITIES.join("|")})`);
|
|
39
|
+
params.stream(" --scan-scope <scope> full (default) or diff (vs base branch)");
|
|
40
|
+
params.stream(" --iac-languages <list> Assess scope: auto (default) | terraform | comma list");
|
|
41
|
+
params.stream(" --module-catalogue <list> approved modules to prefer (comma/newline-sep)");
|
|
42
|
+
params.stream(" -h, --help show help");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function parseMcpArgs(args: string[]) {
|
|
46
|
+
return arg(
|
|
47
|
+
{
|
|
48
|
+
"--help": Boolean,
|
|
49
|
+
"--cwd": String,
|
|
50
|
+
"--severity-threshold": String,
|
|
51
|
+
"--scan-scope": String,
|
|
52
|
+
"--iac-languages": String,
|
|
53
|
+
"--module-catalogue": String,
|
|
54
|
+
"-h": "--help",
|
|
55
|
+
},
|
|
56
|
+
{ argv: args },
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function runMcpCli(params: McpCliParams): Promise<void> {
|
|
61
|
+
if (params.showHelp) {
|
|
62
|
+
printMcpUsage({ stream: console.log, prog: params.prog });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
let parsed: ReturnType<typeof parseMcpArgs>;
|
|
67
|
+
try {
|
|
68
|
+
parsed = parseMcpArgs(params.args);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
71
|
+
console.error(`${message}\n`);
|
|
72
|
+
printMcpUsage({ stream: console.error, prog: params.prog });
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (parsed["--help"]) {
|
|
77
|
+
printMcpUsage({ stream: console.log, prog: params.prog });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (parsed._.length > 0) {
|
|
82
|
+
console.error(`unexpected positional arguments for mcp: ${parsed._.join(" ")}\n`);
|
|
83
|
+
printMcpUsage({ stream: console.error, prog: params.prog });
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const rawCwd = parsed["--cwd"];
|
|
88
|
+
let cwd = process.cwd();
|
|
89
|
+
if (rawCwd) {
|
|
90
|
+
cwd = isAbsolute(rawCwd) ? rawCwd : resolve(process.cwd(), rawCwd);
|
|
91
|
+
}
|
|
92
|
+
if (!existsSync(cwd) || !statSync(cwd).isDirectory()) {
|
|
93
|
+
console.error(`--cwd is not a directory: ${cwd}`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const severityRaw = parsed["--severity-threshold"];
|
|
98
|
+
if (severityRaw !== undefined && !isSeverity(severityRaw)) {
|
|
99
|
+
console.error(
|
|
100
|
+
`invalid --severity-threshold: ${severityRaw} (expected ${SEVERITIES.join("|")})`,
|
|
101
|
+
);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
const scopeRaw = parsed["--scan-scope"];
|
|
105
|
+
if (scopeRaw !== undefined && !isScanScope(scopeRaw)) {
|
|
106
|
+
console.error(`invalid --scan-scope: ${scopeRaw} (expected ${SCAN_SCOPES.join("|")})`);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// stdout is the JSON-RPC channel from here on — every diagnostic goes to stderr.
|
|
111
|
+
setLogSink("stderr");
|
|
112
|
+
|
|
113
|
+
const server = await startLocalMcpServer({
|
|
114
|
+
cwd,
|
|
115
|
+
severityThreshold: severityRaw,
|
|
116
|
+
scanScope: scopeRaw,
|
|
117
|
+
iacLanguages: parsed["--iac-languages"],
|
|
118
|
+
moduleCatalogue: parsed["--module-catalogue"],
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const shutdown = (): void => {
|
|
122
|
+
void server.stop().finally(() => process.exit(0));
|
|
123
|
+
};
|
|
124
|
+
process.on("SIGINT", shutdown);
|
|
125
|
+
process.on("SIGTERM", shutdown);
|
|
126
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `infraweaver verify-evidence <bundle> <sig> <pubkey>` — offline verification of
|
|
3
|
+
* a signed compliance artefact (the evidence bundle or the CycloneDX VEX).
|
|
4
|
+
*
|
|
5
|
+
* Checks the detached Ed25519 signature (`<bundle>.sig`, base64) over the
|
|
6
|
+
* bundle's EXACT bytes against the SPKI public-key PEM. No network, no private
|
|
7
|
+
* key, no GitHub context — an auditor can run it anywhere. Exit 0 = signature
|
|
8
|
+
* OK; exit 1 = verification failed / unreadable input.
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync } from "node:fs";
|
|
11
|
+
import { EVIDENCE_FILE, PRODUCT_NAME } from "#app/brand";
|
|
12
|
+
import { publicKeyFingerprint, verifyBytes } from "#app/mcp/terraform/signing";
|
|
13
|
+
|
|
14
|
+
interface VerifyEvidenceCliParams {
|
|
15
|
+
args: string[];
|
|
16
|
+
prog: string;
|
|
17
|
+
showHelp?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function printUsage(params: {
|
|
21
|
+
stream: typeof console.log;
|
|
22
|
+
prog: string;
|
|
23
|
+
}): void {
|
|
24
|
+
params.stream(
|
|
25
|
+
`usage: ${params.prog} verify-evidence <bundle> <sig> <pubkey>\n`,
|
|
26
|
+
);
|
|
27
|
+
params.stream(
|
|
28
|
+
`verify a ${PRODUCT_NAME} compliance artefact's detached Ed25519 signature:`,
|
|
29
|
+
);
|
|
30
|
+
params.stream(
|
|
31
|
+
` <bundle> the signed file (e.g. compliance/${EVIDENCE_FILE})`,
|
|
32
|
+
);
|
|
33
|
+
params.stream(
|
|
34
|
+
" <sig> the detached signature beside it (base64, e.g. …-evidence.json.sig)",
|
|
35
|
+
);
|
|
36
|
+
params.stream(
|
|
37
|
+
" <pubkey> the signer's public key (SPKI PEM — also embedded in the bundle's",
|
|
38
|
+
);
|
|
39
|
+
params.stream(" `signature.public_key` metadata)");
|
|
40
|
+
params.stream("");
|
|
41
|
+
params.stream(
|
|
42
|
+
"exits 0 when the signature verifies over the bundle's exact bytes, 1 otherwise.",
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function readFileOrExit(path: string, what: string): Buffer {
|
|
47
|
+
try {
|
|
48
|
+
return readFileSync(path);
|
|
49
|
+
} catch (e) {
|
|
50
|
+
console.error(
|
|
51
|
+
`could not read the ${what} at ${path}: ${e instanceof Error ? e.message : String(e)}`,
|
|
52
|
+
);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function runVerifyEvidenceCli(
|
|
58
|
+
params: VerifyEvidenceCliParams,
|
|
59
|
+
): Promise<void> {
|
|
60
|
+
if (
|
|
61
|
+
params.showHelp ||
|
|
62
|
+
params.args.includes("--help") ||
|
|
63
|
+
params.args.includes("-h")
|
|
64
|
+
) {
|
|
65
|
+
printUsage({ stream: console.log, prog: params.prog });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const positional = params.args.filter((a) => !a.startsWith("-"));
|
|
69
|
+
if (positional.length !== 3) {
|
|
70
|
+
console.error(`expected exactly 3 arguments, got ${positional.length}\n`);
|
|
71
|
+
printUsage({ stream: console.error, prog: params.prog });
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const [bundlePath, sigPath, pubkeyPath] = positional as [
|
|
75
|
+
string,
|
|
76
|
+
string,
|
|
77
|
+
string,
|
|
78
|
+
];
|
|
79
|
+
const bundle = readFileOrExit(bundlePath, "bundle");
|
|
80
|
+
const sig = readFileOrExit(sigPath, "signature").toString("utf8");
|
|
81
|
+
const pubkey = readFileOrExit(pubkeyPath, "public key").toString("utf8");
|
|
82
|
+
|
|
83
|
+
if (verifyBytes(bundle, sig, pubkey)) {
|
|
84
|
+
let fingerprint = "";
|
|
85
|
+
try {
|
|
86
|
+
fingerprint = ` (key sha256:${publicKeyFingerprint(pubkey)})`;
|
|
87
|
+
} catch {
|
|
88
|
+
/* verified above, so the key parsed — fingerprint is best-effort display */
|
|
89
|
+
}
|
|
90
|
+
console.log(
|
|
91
|
+
`signature OK — ${bundlePath} verifies under the supplied Ed25519 key${fingerprint}`,
|
|
92
|
+
);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
console.error(
|
|
96
|
+
`signature verification FAILED — ${bundlePath} does not verify under ${pubkeyPath} ` +
|
|
97
|
+
"(the file was modified, the signature belongs to different bytes, or the key is wrong)",
|
|
98
|
+
);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
package/src/entry.ts
ADDED
package/src/entryPost.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
//
|
|
3
|
+
// GitHub Actions `post:` entry point. Runs after the main step regardless of
|
|
4
|
+
// exit status (cancellation, timeout, unhandled error) — that's the contract
|
|
5
|
+
// we need for credential persistence: if OpenCode refreshed the Codex
|
|
6
|
+
// auth.json during the run, the refreshed token must land back in Infraweaver
|
|
7
|
+
// even when the main step died unexpectedly.
|
|
8
|
+
//
|
|
9
|
+
// THIS IS WHY `CODEX_AUTH_JSON` HAS TO LIVE IN INFRAWEAVER'S OWN SECRET STORE,
|
|
10
|
+
// NOT IN GITHUB ACTIONS SECRETS. The refresh chain rotates on every use; this
|
|
11
|
+
// hook PUTs the rotated chain back to Infraweaver Postgres so the next run starts
|
|
12
|
+
// from a fresh token. GH Actions secrets are read-only at runtime — there is
|
|
13
|
+
// no API to write them back from inside a job — so a token stashed there
|
|
14
|
+
// silently goes stale on the first refresh and the next run fails. See
|
|
15
|
+
// wiki/codex-auth.md.
|
|
16
|
+
//
|
|
17
|
+
// Today's only job: detect a Codex auth refresh by diffing the on-disk
|
|
18
|
+
// auth.json against the original refresh token (saved to GH Actions state
|
|
19
|
+
// by src/agents/opencode.ts), convert OpenCode's auth shape
|
|
20
|
+
// back to Codex CLI shape, and PUT it to /api/runtime/secret.
|
|
21
|
+
//
|
|
22
|
+
// Silent no-op when the main step didn't materialize Codex auth (no state
|
|
23
|
+
// saved). Best-effort: failures are logged but never throw — the workflow
|
|
24
|
+
// is already done, and a missed refresh write-back means the user re-runs
|
|
25
|
+
// `infraweaver auth codex` next time the chain breaks.
|
|
26
|
+
//
|
|
27
|
+
// Imports here MUST stay stdlib-only — GHA runs this file directly from the
|
|
28
|
+
// checked-out action repo, which has no node_modules for sha-pinned consumers.
|
|
29
|
+
|
|
30
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
31
|
+
import { PRODUCT_NAME } from "#app/brand";
|
|
32
|
+
import { cloudFetch } from "#app/utils/cloudFetchCore";
|
|
33
|
+
import { detectCodexRefresh } from "#app/utils/codexRefreshDetect";
|
|
34
|
+
import * as core from "#app/utils/ghaCore";
|
|
35
|
+
|
|
36
|
+
async function main(): Promise<void> {
|
|
37
|
+
const raw = core.getState("codex_writeback");
|
|
38
|
+
if (!raw) {
|
|
39
|
+
core.info("codex post-hook: no writeback state — skipping");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let state: { apiToken: string; authPath: string; originalRefresh: string };
|
|
44
|
+
try {
|
|
45
|
+
state = JSON.parse(raw) as typeof state;
|
|
46
|
+
} catch (err) {
|
|
47
|
+
core.warning(`codex post-hook: malformed writeback state — ${err}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (!state.apiToken || !state.authPath || !state.originalRefresh) {
|
|
51
|
+
core.warning("codex post-hook: incomplete writeback state — skipping");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (!existsSync(state.authPath)) {
|
|
56
|
+
core.info(
|
|
57
|
+
`codex post-hook: ${state.authPath} not found — nothing to write back`,
|
|
58
|
+
);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let authFileContent: string;
|
|
63
|
+
try {
|
|
64
|
+
authFileContent = readFileSync(state.authPath, "utf8");
|
|
65
|
+
} catch (err) {
|
|
66
|
+
core.warning(`codex post-hook: cannot read ${state.authPath} — ${err}`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const refreshedCodexJson = detectCodexRefresh({
|
|
71
|
+
authFileContent,
|
|
72
|
+
originalRefresh: state.originalRefresh,
|
|
73
|
+
});
|
|
74
|
+
if (!refreshedCodexJson) {
|
|
75
|
+
core.info("codex post-hook: refresh chain unchanged — no writeback needed");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
const response = await cloudFetch({
|
|
81
|
+
path: "/api/runtime/secret",
|
|
82
|
+
method: "PUT",
|
|
83
|
+
headers: {
|
|
84
|
+
authorization: `Bearer ${state.apiToken}`,
|
|
85
|
+
"content-type": "application/json",
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify({
|
|
88
|
+
name: "CODEX_AUTH_JSON",
|
|
89
|
+
value: refreshedCodexJson,
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
const body = await response.text().catch(() => "");
|
|
94
|
+
core.warning(
|
|
95
|
+
`codex post-hook: writeback returned ${response.status}: ${body}`,
|
|
96
|
+
);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
core.info(
|
|
100
|
+
`codex post-hook: refreshed CODEX_AUTH_JSON persisted to ${PRODUCT_NAME}`,
|
|
101
|
+
);
|
|
102
|
+
} catch (err) {
|
|
103
|
+
core.warning(`codex post-hook: writeback failed — ${err}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
main().catch((err) => {
|
|
108
|
+
core.warning(`codex post-hook: unexpected error — ${err}`);
|
|
109
|
+
});
|
package/src/external.ts
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ⚠️ LIMITED IMPORTS - this file is imported by Next.js and must avoid pulling in backend code.
|
|
3
|
+
* All shared constants, types, and data used by both the Next.js app and the action runtime live here.
|
|
4
|
+
* Other files in action/ re-export from this file for backward compatibility.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { PullRequest } from "@octokit/webhooks-types";
|
|
8
|
+
|
|
9
|
+
// mcp name constant
|
|
10
|
+
export const infraweaverMcpName = "infraweaver";
|
|
11
|
+
|
|
12
|
+
/** @see {@link file://./agents/shared.ts} Agent interface that uses this type */
|
|
13
|
+
export type AgentId = "claude" | "opencode";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* format a tool name the way each agent's MCP client presents it to the model.
|
|
17
|
+
* claude code: mcp__infraweaver__select_mode
|
|
18
|
+
* opencode: infraweaver_select_mode
|
|
19
|
+
*/
|
|
20
|
+
export function formatMcpToolRef(agentId: AgentId, toolName: string): string {
|
|
21
|
+
switch (agentId) {
|
|
22
|
+
case "claude":
|
|
23
|
+
return `mcp__${infraweaverMcpName}__${toolName}`;
|
|
24
|
+
case "opencode":
|
|
25
|
+
return `${infraweaverMcpName}_${toolName}`;
|
|
26
|
+
default:
|
|
27
|
+
return agentId satisfies never;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// model alias registry lives in models.ts — re-exported here for shared access
|
|
32
|
+
export type { ModelAlias, ModelProvider, ProviderConfig } from "#app/models";
|
|
33
|
+
export {
|
|
34
|
+
DEFAULT_PROXY_MODEL,
|
|
35
|
+
getAutoSelectHintModel,
|
|
36
|
+
getModelEnvVars,
|
|
37
|
+
getModelManagedCredentials,
|
|
38
|
+
getModelProvider,
|
|
39
|
+
getProviderDisplayName,
|
|
40
|
+
modelAliases,
|
|
41
|
+
parseModel,
|
|
42
|
+
providers,
|
|
43
|
+
resolveCliModel,
|
|
44
|
+
resolveDisplayAlias,
|
|
45
|
+
resolveModelSlug,
|
|
46
|
+
resolveOpenRouterModel,
|
|
47
|
+
} from "#app/models";
|
|
48
|
+
|
|
49
|
+
// tool permission types shared with server dispatch
|
|
50
|
+
export type ToolPermission = "disabled" | "enabled";
|
|
51
|
+
export type ShellPermission = "disabled" | "restricted" | "enabled";
|
|
52
|
+
export type PushPermission = "disabled" | "restricted" | "enabled";
|
|
53
|
+
|
|
54
|
+
// workflow yml permissions for GITHUB_TOKEN
|
|
55
|
+
export type WorkflowPermissionValue = "read" | "write" | "none";
|
|
56
|
+
export type WorkflowIdTokenPermissionValue = "write" | "none";
|
|
57
|
+
|
|
58
|
+
export interface WorkflowPermissions {
|
|
59
|
+
actions?: WorkflowPermissionValue;
|
|
60
|
+
attestations?: WorkflowPermissionValue;
|
|
61
|
+
checks?: WorkflowPermissionValue;
|
|
62
|
+
contents?: WorkflowPermissionValue;
|
|
63
|
+
deployments?: WorkflowPermissionValue;
|
|
64
|
+
discussions?: WorkflowPermissionValue;
|
|
65
|
+
"id-token"?: WorkflowIdTokenPermissionValue;
|
|
66
|
+
issues?: WorkflowPermissionValue;
|
|
67
|
+
models?: WorkflowPermissionValue;
|
|
68
|
+
packages?: WorkflowPermissionValue;
|
|
69
|
+
pages?: WorkflowPermissionValue;
|
|
70
|
+
"pull-requests"?: WorkflowPermissionValue;
|
|
71
|
+
"repository-projects"?: WorkflowPermissionValue;
|
|
72
|
+
"security-events"?: WorkflowPermissionValue;
|
|
73
|
+
statuses?: WorkflowPermissionValue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// permission level for the author who triggered the event
|
|
77
|
+
// matches GitHub's permission levels: admin > write > maintain > triage > read > none
|
|
78
|
+
export type AuthorPermission =
|
|
79
|
+
| "admin"
|
|
80
|
+
| "maintain"
|
|
81
|
+
| "write"
|
|
82
|
+
| "triage"
|
|
83
|
+
| "read"
|
|
84
|
+
| "none";
|
|
85
|
+
|
|
86
|
+
// base interface for common payload event fields
|
|
87
|
+
interface BasePayloadEvent {
|
|
88
|
+
issue_number?: number;
|
|
89
|
+
is_pr?: boolean;
|
|
90
|
+
branch?: string;
|
|
91
|
+
/** title of the issue/PR (or contextual title for comments) */
|
|
92
|
+
title?: string;
|
|
93
|
+
/** primary content for this trigger (issue body, PR body, comment body, review body, etc.) */
|
|
94
|
+
body?: string | null;
|
|
95
|
+
comment_id?: number;
|
|
96
|
+
review_id?: number;
|
|
97
|
+
review_state?: string;
|
|
98
|
+
/** GraphQL review-thread context (shape owned by the backend producer; not read in-action) */
|
|
99
|
+
thread?: unknown;
|
|
100
|
+
pull_request?: PullRequest;
|
|
101
|
+
check_suite?: {
|
|
102
|
+
id: number;
|
|
103
|
+
head_sha: string;
|
|
104
|
+
head_branch: string | null;
|
|
105
|
+
status: string | null;
|
|
106
|
+
conclusion: string | null;
|
|
107
|
+
url: string;
|
|
108
|
+
};
|
|
109
|
+
comment_ids?: number[] | "all";
|
|
110
|
+
/** permission level of the user who triggered this event */
|
|
111
|
+
authorPermission?: AuthorPermission;
|
|
112
|
+
/** when true, runs silently without progress comments (e.g., auto-labeling) */
|
|
113
|
+
silent?: boolean;
|
|
114
|
+
[key: string]: unknown;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface PullRequestOpenedEvent extends BasePayloadEvent {
|
|
118
|
+
trigger: "pull_request_opened";
|
|
119
|
+
issue_number: number;
|
|
120
|
+
is_pr: true;
|
|
121
|
+
title: string;
|
|
122
|
+
body: string | null;
|
|
123
|
+
branch: string;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
interface PullRequestReadyForReviewEvent extends BasePayloadEvent {
|
|
127
|
+
trigger: "pull_request_ready_for_review";
|
|
128
|
+
issue_number: number;
|
|
129
|
+
is_pr: true;
|
|
130
|
+
title: string;
|
|
131
|
+
body: string | null;
|
|
132
|
+
branch: string;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
interface PullRequestReviewRequestedEvent extends BasePayloadEvent {
|
|
136
|
+
trigger: "pull_request_review_requested";
|
|
137
|
+
issue_number: number;
|
|
138
|
+
is_pr: true;
|
|
139
|
+
title: string;
|
|
140
|
+
body: string | null;
|
|
141
|
+
branch: string;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
interface PullRequestReviewSubmittedEvent extends BasePayloadEvent {
|
|
145
|
+
trigger: "pull_request_review_submitted";
|
|
146
|
+
issue_number: number;
|
|
147
|
+
is_pr: true;
|
|
148
|
+
review_id: number;
|
|
149
|
+
/** review body is the primary content */
|
|
150
|
+
body: string | null;
|
|
151
|
+
review_state: string;
|
|
152
|
+
branch: string;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
interface PullRequestReviewCommentCreatedEvent extends BasePayloadEvent {
|
|
156
|
+
trigger: "pull_request_review_comment_created";
|
|
157
|
+
issue_number: number;
|
|
158
|
+
is_pr: true;
|
|
159
|
+
title: string;
|
|
160
|
+
comment_id: number;
|
|
161
|
+
/** comment body is the primary content (null if already in prompt) */
|
|
162
|
+
body: string | null;
|
|
163
|
+
thread?: unknown;
|
|
164
|
+
branch: string;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
interface IssuesOpenedEvent extends BasePayloadEvent {
|
|
168
|
+
trigger: "issues_opened";
|
|
169
|
+
issue_number: number;
|
|
170
|
+
title: string;
|
|
171
|
+
body: string | null;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
interface IssuesAssignedEvent extends BasePayloadEvent {
|
|
175
|
+
trigger: "issues_assigned";
|
|
176
|
+
issue_number: number;
|
|
177
|
+
title: string;
|
|
178
|
+
body: string | null;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
interface IssuesLabeledEvent extends BasePayloadEvent {
|
|
182
|
+
trigger: "issues_labeled";
|
|
183
|
+
issue_number: number;
|
|
184
|
+
title: string;
|
|
185
|
+
body: string | null;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
interface IssueCommentCreatedEvent extends BasePayloadEvent {
|
|
189
|
+
trigger: "issue_comment_created";
|
|
190
|
+
comment_id: number;
|
|
191
|
+
/** distinguishes this from PR review comments (which use pull_request_review_comment_created) */
|
|
192
|
+
comment_type: "issue";
|
|
193
|
+
/** comment body is the primary content (null if already in prompt) */
|
|
194
|
+
body: string | null;
|
|
195
|
+
issue_number: number;
|
|
196
|
+
// PR-specific fields (only present when is_pr is true)
|
|
197
|
+
is_pr?: true;
|
|
198
|
+
branch?: string;
|
|
199
|
+
title?: string;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
interface CheckSuiteCompletedEvent extends BasePayloadEvent {
|
|
203
|
+
trigger: "check_suite_completed";
|
|
204
|
+
issue_number: number;
|
|
205
|
+
is_pr: true;
|
|
206
|
+
title: string;
|
|
207
|
+
body: string | null;
|
|
208
|
+
pull_request: PullRequest;
|
|
209
|
+
branch: string;
|
|
210
|
+
check_suite: {
|
|
211
|
+
id: number;
|
|
212
|
+
head_sha: string;
|
|
213
|
+
head_branch: string | null;
|
|
214
|
+
status: string | null;
|
|
215
|
+
conclusion: string | null;
|
|
216
|
+
url: string;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
interface WorkflowDispatchEvent extends BasePayloadEvent {
|
|
221
|
+
trigger: "workflow_dispatch";
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
interface FixReviewEvent extends BasePayloadEvent {
|
|
225
|
+
trigger: "fix_review";
|
|
226
|
+
issue_number: number;
|
|
227
|
+
is_pr: true;
|
|
228
|
+
review_id: number;
|
|
229
|
+
/** when true, only address comments the triggerer approved with 👍 (vs all comments) */
|
|
230
|
+
approved_only?: boolean | undefined;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
interface ImplementPlanEvent extends BasePayloadEvent {
|
|
234
|
+
trigger: "implement_plan";
|
|
235
|
+
issue_number: number;
|
|
236
|
+
plan_comment_id: number;
|
|
237
|
+
/** plan content is the primary content (null if already in prompt) */
|
|
238
|
+
body: string | null;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
interface PullRequestSynchronizeEvent extends BasePayloadEvent {
|
|
242
|
+
trigger: "pull_request_synchronize";
|
|
243
|
+
issue_number: number;
|
|
244
|
+
is_pr: true;
|
|
245
|
+
title: string;
|
|
246
|
+
body: string | null;
|
|
247
|
+
branch: string;
|
|
248
|
+
/** SHA before the push -- used to compute incremental range-diff between PR versions */
|
|
249
|
+
before_sha: string;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
interface UnknownEvent extends BasePayloadEvent {
|
|
253
|
+
trigger: "unknown";
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// discriminated union for payload event based on trigger
|
|
257
|
+
// note: all events use issue_number for consistency (PRs are issues in GitHub's API)
|
|
258
|
+
export type PayloadEvent =
|
|
259
|
+
| PullRequestOpenedEvent
|
|
260
|
+
| PullRequestReadyForReviewEvent
|
|
261
|
+
| PullRequestSynchronizeEvent
|
|
262
|
+
| PullRequestReviewRequestedEvent
|
|
263
|
+
| PullRequestReviewSubmittedEvent
|
|
264
|
+
| PullRequestReviewCommentCreatedEvent
|
|
265
|
+
| IssuesOpenedEvent
|
|
266
|
+
| IssuesAssignedEvent
|
|
267
|
+
| IssuesLabeledEvent
|
|
268
|
+
| IssueCommentCreatedEvent
|
|
269
|
+
| CheckSuiteCompletedEvent
|
|
270
|
+
| WorkflowDispatchEvent
|
|
271
|
+
| FixReviewEvent
|
|
272
|
+
| ImplementPlanEvent
|
|
273
|
+
| UnknownEvent;
|
|
274
|
+
|
|
275
|
+
// writeable payload type for building payloads
|
|
276
|
+
export interface WriteablePayload {
|
|
277
|
+
"~infraweaver": true;
|
|
278
|
+
/** semantic version of the payload to ensure compatibility */
|
|
279
|
+
version: string;
|
|
280
|
+
/** provider/model slug (e.g. "anthropic/claude-opus") */
|
|
281
|
+
model?: string | undefined;
|
|
282
|
+
/** the user's actual request (body if @infraweaver tagged) */
|
|
283
|
+
prompt: string;
|
|
284
|
+
/** github username of the human who triggered this workflow run */
|
|
285
|
+
triggerer?: string | undefined;
|
|
286
|
+
/** event-level instructions for this trigger type (flag-expanded server-side) */
|
|
287
|
+
eventInstructions?: string | undefined;
|
|
288
|
+
/**
|
|
289
|
+
* system-injected note about prior superseded runs (e.g. when the
|
|
290
|
+
* triggering @infraweaver comment is edited). rendered alongside the user's
|
|
291
|
+
* prompt rather than via eventInstructions so it survives user-prompt
|
|
292
|
+
* precedence.
|
|
293
|
+
*/
|
|
294
|
+
previousRunsNote?: string | undefined;
|
|
295
|
+
/** event data from webhook payload - discriminated union based on trigger field */
|
|
296
|
+
event: PayloadEvent;
|
|
297
|
+
/** timeout for agent run (e.g., "10m", "1h30m") - defaults to "1h" */
|
|
298
|
+
timeout?: string | undefined;
|
|
299
|
+
/** working directory for the agent */
|
|
300
|
+
cwd?: string | undefined;
|
|
301
|
+
/** pre-created progress comment (ID + type) for updating status */
|
|
302
|
+
progressComment?: { id: string; type: "issue" | "review" } | undefined;
|
|
303
|
+
/** when true, seed the PR summary tmpfile + persist edits at run end */
|
|
304
|
+
generateSummary?: boolean | undefined;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// immutable payload type for agent execution
|
|
308
|
+
export type Payload = Readonly<WriteablePayload>;
|