@archpilotlabs/archpilot 0.2.2 → 0.2.4
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/CHANGELOG.md +538 -0
- package/README.md +1 -0
- package/dist/archpilot-cli.js +850 -159
- package/dist/cli/src/archpilot-cli.js +5523 -0
- package/dist/cli/src/archpilot-cli.js.map +1 -0
- package/dist/core/src/adr/adrLoader.js +97 -0
- package/dist/core/src/adr/adrLoader.js.map +1 -0
- package/dist/core/src/adr/adrParser.js +77 -0
- package/dist/core/src/adr/adrParser.js.map +1 -0
- package/dist/core/src/adr/adrTemplate.js +45 -0
- package/dist/core/src/adr/adrTemplate.js.map +1 -0
- package/dist/core/src/adr/adrTypes.js +3 -0
- package/dist/core/src/adr/adrTypes.js.map +1 -0
- package/dist/core/src/adr/adrValidation.js +160 -0
- package/dist/core/src/adr/adrValidation.js.map +1 -0
- package/dist/core/src/adr/index.js +9 -0
- package/dist/core/src/adr/index.js.map +1 -0
- package/dist/core/src/adrManagement.js +174 -0
- package/dist/core/src/adrManagement.js.map +1 -0
- package/dist/core/src/adrRequirementStatus.js +62 -0
- package/dist/core/src/adrRequirementStatus.js.map +1 -0
- package/dist/core/src/adrScaffoldGeneration.js +325 -0
- package/dist/core/src/adrScaffoldGeneration.js.map +1 -0
- package/dist/core/src/apiDesignAnalysis.js +869 -0
- package/dist/core/src/apiDesignAnalysis.js.map +1 -0
- package/dist/core/src/applicationLayeringAnalysis.js +920 -0
- package/dist/core/src/applicationLayeringAnalysis.js.map +1 -0
- package/dist/core/src/applyRulePack.js +117 -0
- package/dist/core/src/applyRulePack.js.map +1 -0
- package/dist/core/src/architectureBaseline.js +271 -0
- package/dist/core/src/architectureBaseline.js.map +1 -0
- package/dist/core/src/architectureComponentDiscoveryDefaults.js +139 -0
- package/dist/core/src/architectureComponentDiscoveryDefaults.js.map +1 -0
- package/dist/core/src/architectureDependencyContext.js +316 -0
- package/dist/core/src/architectureDependencyContext.js.map +1 -0
- package/dist/core/src/architectureDriftDetection.js +96 -0
- package/dist/core/src/architectureDriftDetection.js.map +1 -0
- package/dist/core/src/architectureDriftTimeline.js +221 -0
- package/dist/core/src/architectureDriftTimeline.js.map +1 -0
- package/dist/core/src/architectureGovernanceBaseline.js +469 -0
- package/dist/core/src/architectureGovernanceBaseline.js.map +1 -0
- package/dist/core/src/architectureHealthHistory.js +208 -0
- package/dist/core/src/architectureHealthHistory.js.map +1 -0
- package/dist/core/src/architectureHealthScore.js +657 -0
- package/dist/core/src/architectureHealthScore.js.map +1 -0
- package/dist/core/src/architectureInit.js +826 -0
- package/dist/core/src/architectureInit.js.map +1 -0
- package/dist/core/src/architectureMap.js +727 -0
- package/dist/core/src/architectureMap.js.map +1 -0
- package/dist/core/src/architectureMigrationPreview.js +467 -0
- package/dist/core/src/architectureMigrationPreview.js.map +1 -0
- package/dist/core/src/architectureModelRefresh.js +209 -0
- package/dist/core/src/architectureModelRefresh.js.map +1 -0
- package/dist/core/src/architectureReportWorkflow.js +139 -0
- package/dist/core/src/architectureReportWorkflow.js.map +1 -0
- package/dist/core/src/architectureValidation.js +3879 -0
- package/dist/core/src/architectureValidation.js.map +1 -0
- package/dist/core/src/architectureWorkspaceModel.js +166 -0
- package/dist/core/src/architectureWorkspaceModel.js.map +1 -0
- package/dist/core/src/authorizationTenantAnalysis.js +652 -0
- package/dist/core/src/authorizationTenantAnalysis.js.map +1 -0
- package/dist/core/src/bootstrapArchitectureConfig.js +150 -0
- package/dist/core/src/bootstrapArchitectureConfig.js.map +1 -0
- package/dist/core/src/changeRisk/changeRiskAssessment.js +251 -0
- package/dist/core/src/changeRisk/changeRiskAssessment.js.map +1 -0
- package/dist/core/src/changeRisk/changeRiskTypes.js +3 -0
- package/dist/core/src/changeRisk/changeRiskTypes.js.map +1 -0
- package/dist/core/src/changeRisk/index.js +6 -0
- package/dist/core/src/changeRisk/index.js.map +1 -0
- package/dist/core/src/ci/githubInlineAnnotations.js +245 -0
- package/dist/core/src/ci/githubInlineAnnotations.js.map +1 -0
- package/dist/core/src/ci/githubPrCommentAdapter.js +232 -0
- package/dist/core/src/ci/githubPrCommentAdapter.js.map +1 -0
- package/dist/core/src/ciWorkflowTemplates.js +1042 -0
- package/dist/core/src/ciWorkflowTemplates.js.map +1 -0
- package/dist/core/src/compliance/complianceExportBuilder.js +122 -0
- package/dist/core/src/compliance/complianceExportBuilder.js.map +1 -0
- package/dist/core/src/compliance/complianceExportTypes.js +3 -0
- package/dist/core/src/compliance/complianceExportTypes.js.map +1 -0
- package/dist/core/src/compliance/complianceExportWriter.js +48 -0
- package/dist/core/src/compliance/complianceExportWriter.js.map +1 -0
- package/dist/core/src/compliance/complianceRulePackResolver.js +62 -0
- package/dist/core/src/compliance/complianceRulePackResolver.js.map +1 -0
- package/dist/core/src/config/index.js +17 -0
- package/dist/core/src/config/index.js.map +1 -0
- package/dist/core/src/config/projectConfig.js +224 -0
- package/dist/core/src/config/projectConfig.js.map +1 -0
- package/dist/core/src/config/projectIdentity.js +160 -0
- package/dist/core/src/config/projectIdentity.js.map +1 -0
- package/dist/core/src/dataQueryRiskDetection.js +1203 -0
- package/dist/core/src/dataQueryRiskDetection.js.map +1 -0
- package/dist/core/src/dependencyValidation.js +2557 -0
- package/dist/core/src/dependencyValidation.js.map +1 -0
- package/dist/core/src/discoverAdrs.js +15 -0
- package/dist/core/src/discoverAdrs.js.map +1 -0
- package/dist/core/src/drift/driftComparator.js +49 -0
- package/dist/core/src/drift/driftComparator.js.map +1 -0
- package/dist/core/src/drift/driftSnapshotLoader.js +136 -0
- package/dist/core/src/drift/driftSnapshotLoader.js.map +1 -0
- package/dist/core/src/drift/driftSnapshotTypes.js +3 -0
- package/dist/core/src/drift/driftSnapshotTypes.js.map +1 -0
- package/dist/core/src/drift/driftSnapshotWriter.js +48 -0
- package/dist/core/src/drift/driftSnapshotWriter.js.map +1 -0
- package/dist/core/src/drift/index.js +6 -0
- package/dist/core/src/drift/index.js.map +1 -0
- package/dist/core/src/eventArchitectureAnalysis.js +925 -0
- package/dist/core/src/eventArchitectureAnalysis.js.map +1 -0
- package/dist/core/src/findingTargetResolution.js +117 -0
- package/dist/core/src/findingTargetResolution.js.map +1 -0
- package/dist/core/src/generateArchitectureDiagrams.js +57 -0
- package/dist/core/src/generateArchitectureDiagrams.js.map +1 -0
- package/dist/core/src/generateImpactAnalysis.js +366 -0
- package/dist/core/src/generateImpactAnalysis.js.map +1 -0
- package/dist/core/src/generateOnboardingDocs.js +262 -0
- package/dist/core/src/generateOnboardingDocs.js.map +1 -0
- package/dist/core/src/governance/cloudConnection.js +203 -0
- package/dist/core/src/governance/cloudConnection.js.map +1 -0
- package/dist/core/src/governance/governanceContracts.js +129 -0
- package/dist/core/src/governance/governanceContracts.js.map +1 -0
- package/dist/core/src/governance/governanceGitMetadata.js +78 -0
- package/dist/core/src/governance/governanceGitMetadata.js.map +1 -0
- package/dist/core/src/governance/governanceUploadClient.js +119 -0
- package/dist/core/src/governance/governanceUploadClient.js.map +1 -0
- package/dist/core/src/governance/governanceUploadLimitErrorFormatting.js +155 -0
- package/dist/core/src/governance/governanceUploadLimitErrorFormatting.js.map +1 -0
- package/dist/core/src/governance/governanceUploadPayload.js +439 -0
- package/dist/core/src/governance/governanceUploadPayload.js.map +1 -0
- package/dist/core/src/governance/runGovernanceUpload.js +103 -0
- package/dist/core/src/governance/runGovernanceUpload.js.map +1 -0
- package/dist/core/src/impactAnalysisEngine.js +376 -0
- package/dist/core/src/impactAnalysisEngine.js.map +1 -0
- package/dist/core/src/initializationState.js +99 -0
- package/dist/core/src/initializationState.js.map +1 -0
- package/dist/core/src/managedArtifacts.js +151 -0
- package/dist/core/src/managedArtifacts.js.map +1 -0
- package/dist/core/src/moduleContractValidation.js +266 -0
- package/dist/core/src/moduleContractValidation.js.map +1 -0
- package/dist/core/src/moduleContractsGenerator.js +337 -0
- package/dist/core/src/moduleContractsGenerator.js.map +1 -0
- package/dist/core/src/moduleDiscovery.js +416 -0
- package/dist/core/src/moduleDiscovery.js.map +1 -0
- package/dist/core/src/moduleScope.js +426 -0
- package/dist/core/src/moduleScope.js.map +1 -0
- package/dist/core/src/onboardingGuidance.js +74 -0
- package/dist/core/src/onboardingGuidance.js.map +1 -0
- package/dist/core/src/operationalLogging.js +7 -0
- package/dist/core/src/operationalLogging.js.map +1 -0
- package/dist/core/src/packageVersion.js +52 -0
- package/dist/core/src/packageVersion.js.map +1 -0
- package/dist/core/src/policy/effectivePolicyResolver.js +91 -0
- package/dist/core/src/policy/effectivePolicyResolver.js.map +1 -0
- package/dist/core/src/policy/exceptionLoader.js +285 -0
- package/dist/core/src/policy/exceptionLoader.js.map +1 -0
- package/dist/core/src/policy/remotePolicyLoader.js +227 -0
- package/dist/core/src/policy/remotePolicyLoader.js.map +1 -0
- package/dist/core/src/policy/remotePolicyTypes.js +3 -0
- package/dist/core/src/policy/remotePolicyTypes.js.map +1 -0
- package/dist/core/src/policy/riskPolicyConfig.js +206 -0
- package/dist/core/src/policy/riskPolicyConfig.js.map +1 -0
- package/dist/core/src/policy/riskPolicyEnforcement.js +203 -0
- package/dist/core/src/policy/riskPolicyEnforcement.js.map +1 -0
- package/dist/core/src/policy/riskPolicyExitCode.js +16 -0
- package/dist/core/src/policy/riskPolicyExitCode.js.map +1 -0
- package/dist/core/src/policy/riskPolicyInitializer.js +90 -0
- package/dist/core/src/policy/riskPolicyInitializer.js.map +1 -0
- package/dist/core/src/quickFix/quickFixEngine.js +132 -0
- package/dist/core/src/quickFix/quickFixEngine.js.map +1 -0
- package/dist/core/src/quickFix/quickFixMessaging.js +15 -0
- package/dist/core/src/quickFix/quickFixMessaging.js.map +1 -0
- package/dist/core/src/quickFix/quickFixProviders.js +87 -0
- package/dist/core/src/quickFix/quickFixProviders.js.map +1 -0
- package/dist/core/src/quickFix/quickFixTypes.js +3 -0
- package/dist/core/src/quickFix/quickFixTypes.js.map +1 -0
- package/dist/core/src/remediation/fileHelpers.js +86 -0
- package/dist/core/src/remediation/fileHelpers.js.map +1 -0
- package/dist/core/src/remediation/fixRegistry.js +645 -0
- package/dist/core/src/remediation/fixRegistry.js.map +1 -0
- package/dist/core/src/remediation/index.js +8 -0
- package/dist/core/src/remediation/index.js.map +1 -0
- package/dist/core/src/remediation/remediationEngine.js +207 -0
- package/dist/core/src/remediation/remediationEngine.js.map +1 -0
- package/dist/core/src/reporting/adrReporter.js +59 -0
- package/dist/core/src/reporting/adrReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureBaselineReporter.js +64 -0
- package/dist/core/src/reporting/architectureBaselineReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureDiagramReporter.js +148 -0
- package/dist/core/src/reporting/architectureDiagramReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureDriftTimelineReporter.js +44 -0
- package/dist/core/src/reporting/architectureDriftTimelineReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureHealthHistoryReporter.js +51 -0
- package/dist/core/src/reporting/architectureHealthHistoryReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureMapReporter.js +228 -0
- package/dist/core/src/reporting/architectureMapReporter.js.map +1 -0
- package/dist/core/src/reporting/architecturePrCommentReporter.js +324 -0
- package/dist/core/src/reporting/architecturePrCommentReporter.js.map +1 -0
- package/dist/core/src/reporting/architecturePrReviewReporter.js +389 -0
- package/dist/core/src/reporting/architecturePrReviewReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureReportArtifacts.js +166 -0
- package/dist/core/src/reporting/architectureReportArtifacts.js.map +1 -0
- package/dist/core/src/reporting/architectureReviewReportGenerator.js +382 -0
- package/dist/core/src/reporting/architectureReviewReportGenerator.js.map +1 -0
- package/dist/core/src/reporting/architectureReviewReporter.js +1633 -0
- package/dist/core/src/reporting/architectureReviewReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureRiskAssessment.js +101 -0
- package/dist/core/src/reporting/architectureRiskAssessment.js.map +1 -0
- package/dist/core/src/reporting/architectureScoreBadge.js +177 -0
- package/dist/core/src/reporting/architectureScoreBadge.js.map +1 -0
- package/dist/core/src/reporting/architectureSupplementalReporters.js +124 -0
- package/dist/core/src/reporting/architectureSupplementalReporters.js.map +1 -0
- package/dist/core/src/reporting/changeRiskAssessment.js +6 -0
- package/dist/core/src/reporting/changeRiskAssessment.js.map +1 -0
- package/dist/core/src/reporting/changeRiskTypes.js +3 -0
- package/dist/core/src/reporting/changeRiskTypes.js.map +1 -0
- package/dist/core/src/reporting/impactAnalysisReporter.js +111 -0
- package/dist/core/src/reporting/impactAnalysisReporter.js.map +1 -0
- package/dist/core/src/reporting/onboardingDocsReporter.js +113 -0
- package/dist/core/src/reporting/onboardingDocsReporter.js.map +1 -0
- package/dist/core/src/reporting/rulePackReporter.js +61 -0
- package/dist/core/src/reporting/rulePackReporter.js.map +1 -0
- package/dist/core/src/reporting/safetyControlsDetection.js +343 -0
- package/dist/core/src/reporting/safetyControlsDetection.js.map +1 -0
- package/dist/core/src/resolveRuleAdrs.js +31 -0
- package/dist/core/src/resolveRuleAdrs.js.map +1 -0
- package/dist/core/src/reviewGenerationWorkflow.js +220 -0
- package/dist/core/src/reviewGenerationWorkflow.js.map +1 -0
- package/dist/core/src/rulePacks/index.js +17 -0
- package/dist/core/src/rulePacks/index.js.map +1 -0
- package/dist/core/src/rulePacks/layeredMonolithRulePack.js +45 -0
- package/dist/core/src/rulePacks/layeredMonolithRulePack.js.map +1 -0
- package/dist/core/src/rulePacks/modularMonolithRulePack.js +41 -0
- package/dist/core/src/rulePacks/modularMonolithRulePack.js.map +1 -0
- package/dist/core/src/rulePacks/types.js +3 -0
- package/dist/core/src/rulePacks/types.js.map +1 -0
- package/dist/core/src/setupNextSteps.js +939 -0
- package/dist/core/src/setupNextSteps.js.map +1 -0
- package/dist/core/src/setupRefresh.js +152 -0
- package/dist/core/src/setupRefresh.js.map +1 -0
- package/dist/core/src/smartInit/apiDbHintDetection.js +836 -0
- package/dist/core/src/smartInit/apiDbHintDetection.js.map +1 -0
- package/dist/core/src/smartInit/architectureProposalBuilder.js +1215 -0
- package/dist/core/src/smartInit/architectureProposalBuilder.js.map +1 -0
- package/dist/core/src/smartInit/architectureStyleDetection.js +472 -0
- package/dist/core/src/smartInit/architectureStyleDetection.js.map +1 -0
- package/dist/core/src/smartInit/archpilotIgnore.js +139 -0
- package/dist/core/src/smartInit/archpilotIgnore.js.map +1 -0
- package/dist/core/src/smartInit/componentDetection.js +1084 -0
- package/dist/core/src/smartInit/componentDetection.js.map +1 -0
- package/dist/core/src/smartInit/implementationProfileResolution.js +53 -0
- package/dist/core/src/smartInit/implementationProfileResolution.js.map +1 -0
- package/dist/core/src/smartInit/index.js +31 -0
- package/dist/core/src/smartInit/index.js.map +1 -0
- package/dist/core/src/smartInit/moduleDetection.js +982 -0
- package/dist/core/src/smartInit/moduleDetection.js.map +1 -0
- package/dist/core/src/smartInit/projectKindDetection.js +437 -0
- package/dist/core/src/smartInit/projectKindDetection.js.map +1 -0
- package/dist/core/src/smartInit/repoTopologyDetection.js +470 -0
- package/dist/core/src/smartInit/repoTopologyDetection.js.map +1 -0
- package/dist/core/src/smartInit/runContext.js +112 -0
- package/dist/core/src/smartInit/runContext.js.map +1 -0
- package/dist/core/src/smartInit/smartInitEngine.js +94 -0
- package/dist/core/src/smartInit/smartInitEngine.js.map +1 -0
- package/dist/core/src/smartInit/stackDetection.js +503 -0
- package/dist/core/src/smartInit/stackDetection.js.map +1 -0
- package/dist/core/src/smartInit/toolingHintDetection.js +345 -0
- package/dist/core/src/smartInit/toolingHintDetection.js.map +1 -0
- package/dist/core/src/sourceScopeClassification.js +83 -0
- package/dist/core/src/sourceScopeClassification.js.map +1 -0
- package/dist/core/src/stackAdapters.js +2475 -0
- package/dist/core/src/stackAdapters.js.map +1 -0
- package/dist/core/src/stackMetadata.js +157 -0
- package/dist/core/src/stackMetadata.js.map +1 -0
- package/dist/core/src/suppressions/index.js +3 -0
- package/dist/core/src/suppressions/index.js.map +1 -0
- package/dist/core/src/suppressions/suppressionReporter.js +38 -0
- package/dist/core/src/suppressions/suppressionReporter.js.map +1 -0
- package/dist/core/src/suppressions/suppressionTypes.js +3 -0
- package/dist/core/src/suppressions/suppressionTypes.js.map +1 -0
- package/dist/core/src/suppressions/suppressionValidator.js +119 -0
- package/dist/core/src/suppressions/suppressionValidator.js.map +1 -0
- package/dist/core/src/transactionDomainAnalysis.js +1416 -0
- package/dist/core/src/transactionDomainAnalysis.js.map +1 -0
- package/dist/core/src/validation/changedFilesResolver.js +165 -0
- package/dist/core/src/validation/changedFilesResolver.js.map +1 -0
- package/dist/core/src/validationProfiling.js +33 -0
- package/dist/core/src/validationProfiling.js.map +1 -0
- package/dist/core/src/validationRuleExplanations.js +69 -0
- package/dist/core/src/validationRuleExplanations.js.map +1 -0
- package/dist/core/src/validationSourceInventory.js +200 -0
- package/dist/core/src/validationSourceInventory.js.map +1 -0
- package/dist/core/src/validationSuppressions.js +231 -0
- package/dist/core/src/validationSuppressions.js.map +1 -0
- package/dist/core/src/validationTypeScriptAstCache.js +82 -0
- package/dist/core/src/validationTypeScriptAstCache.js.map +1 -0
- package/dist/core/src/validationWorkflow.js +222 -0
- package/dist/core/src/validationWorkflow.js.map +1 -0
- package/dist/core/src/workspaceRoot.js +68 -0
- package/dist/core/src/workspaceRoot.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,645 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.listRegisteredFixHandlers = listRegisteredFixHandlers;
|
|
37
|
+
exports.getFixHandlersForRule = getFixHandlersForRule;
|
|
38
|
+
exports.hasFixHandlerForRule = hasFixHandlerForRule;
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
40
|
+
const node_fs_1 = require("node:fs");
|
|
41
|
+
const adr_1 = require("../adr");
|
|
42
|
+
const fileHelpers_1 = require("./fileHelpers");
|
|
43
|
+
function relative(filePath, workspaceRoot) {
|
|
44
|
+
return path.relative(workspaceRoot, filePath).replace(/\\/g, '/');
|
|
45
|
+
}
|
|
46
|
+
function parseModulesFromArch004Message(message) {
|
|
47
|
+
const prefixMatch = /^Module baseline drift detected in ([^:]+):\s*/u.exec(message);
|
|
48
|
+
if (!prefixMatch?.[1] || !message.endsWith('.')) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const modulesRoot = prefixMatch[1].trim();
|
|
52
|
+
if (modulesRoot.length === 0) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const payload = message.slice(prefixMatch[0].length, -1).trim();
|
|
56
|
+
if (!payload) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const segments = payload
|
|
60
|
+
.split(';')
|
|
61
|
+
.map((segment) => segment.trim())
|
|
62
|
+
.filter((segment) => segment.length > 0);
|
|
63
|
+
if (segments.length === 0) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const parsedModules = [];
|
|
67
|
+
const allowedMissingParts = new Set(['readme.md', 'index.ts', 'public entrypoint']);
|
|
68
|
+
for (const segment of segments) {
|
|
69
|
+
const match = /^([a-z0-9-]+)\s+\(([^)]+)\)$/u.exec(segment);
|
|
70
|
+
if (!match?.[1] || !match[2]) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const missing = [...new Set(match[2]
|
|
74
|
+
.split(',')
|
|
75
|
+
.map((entry) => entry.trim().toLowerCase())
|
|
76
|
+
.filter((entry) => allowedMissingParts.has(entry)))];
|
|
77
|
+
if (missing.length === 0) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
parsedModules.push({
|
|
81
|
+
module: match[1],
|
|
82
|
+
missing: missing.sort((left, right) => left.localeCompare(right)),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
modulesRoot,
|
|
87
|
+
modules: parsedModules.sort((left, right) => left.module.localeCompare(right.module)),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function parseModulePathFromArch005Message(message) {
|
|
91
|
+
const match = /registered at ([^ ]+) but the directory does not exist/u.exec(message);
|
|
92
|
+
return match?.[1];
|
|
93
|
+
}
|
|
94
|
+
function parseContractPathFromArch006Message(message) {
|
|
95
|
+
const match = /references contract ([^ ]+) but the file does not exist/u.exec(message);
|
|
96
|
+
return match?.[1];
|
|
97
|
+
}
|
|
98
|
+
function parseModuleName(message) {
|
|
99
|
+
const match = /Module '([^']+)'/u.exec(message);
|
|
100
|
+
return match?.[1];
|
|
101
|
+
}
|
|
102
|
+
function parseDep006Message(message) {
|
|
103
|
+
const match = /Module '([^']+)' declares dependency on '([^']+)'/u.exec(message);
|
|
104
|
+
if (!match?.[1] || !match?.[2]) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
sourceModule: match[1],
|
|
109
|
+
dependency: match[2],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const architectureOverviewStarterTemplate = `# Architecture Overview
|
|
113
|
+
|
|
114
|
+
## Purpose
|
|
115
|
+
Describe the purpose of this system and its primary responsibilities.
|
|
116
|
+
|
|
117
|
+
## Architecture Style
|
|
118
|
+
Document the chosen architecture style and why it was selected.
|
|
119
|
+
|
|
120
|
+
## Module Structure
|
|
121
|
+
List the major modules or capability areas and their responsibilities.
|
|
122
|
+
|
|
123
|
+
## Dependency Boundaries
|
|
124
|
+
Describe how modules are allowed to depend on each other.
|
|
125
|
+
|
|
126
|
+
## Key Decisions
|
|
127
|
+
Reference ADRs that define major architectural decisions.
|
|
128
|
+
|
|
129
|
+
## Validation Expectations
|
|
130
|
+
Describe what ArchPilot validates in this repository and why.
|
|
131
|
+
`;
|
|
132
|
+
async function previewArch001(context) {
|
|
133
|
+
const targetPaths = [
|
|
134
|
+
path.join(context.workspaceRoot, 'src', 'modules'),
|
|
135
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module'),
|
|
136
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module', 'api'),
|
|
137
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module', 'service'),
|
|
138
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module', 'repository'),
|
|
139
|
+
];
|
|
140
|
+
const filesCreated = [];
|
|
141
|
+
for (const targetPath of targetPaths) {
|
|
142
|
+
if (!(await (0, fileHelpers_1.pathExists)(targetPath))) {
|
|
143
|
+
filesCreated.push(relative(targetPath, context.workspaceRoot));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
filesCreated,
|
|
148
|
+
filesModified: [],
|
|
149
|
+
diffPreview: filesCreated.length === 0
|
|
150
|
+
? '(no changes)'
|
|
151
|
+
: filesCreated.map((filePath) => `+ create directory ${filePath}`).join('\n'),
|
|
152
|
+
description: 'Create the baseline modular folder structure under src/modules.',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
async function applyArch001(context) {
|
|
156
|
+
const targetPaths = [
|
|
157
|
+
path.join(context.workspaceRoot, 'src', 'modules'),
|
|
158
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module'),
|
|
159
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module', 'api'),
|
|
160
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module', 'service'),
|
|
161
|
+
path.join(context.workspaceRoot, 'src', 'modules', 'example-module', 'repository'),
|
|
162
|
+
];
|
|
163
|
+
const filesCreated = [];
|
|
164
|
+
for (const targetPath of targetPaths) {
|
|
165
|
+
const existed = await (0, fileHelpers_1.pathExists)(targetPath);
|
|
166
|
+
await (0, fileHelpers_1.ensureDirectory)(targetPath);
|
|
167
|
+
if (!existed) {
|
|
168
|
+
filesCreated.push(relative(targetPath, context.workspaceRoot));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
applied: filesCreated.length > 0,
|
|
173
|
+
filesCreated,
|
|
174
|
+
filesModified: [],
|
|
175
|
+
description: filesCreated.length > 0
|
|
176
|
+
? 'Created the baseline modular folder structure under src/modules.'
|
|
177
|
+
: 'Baseline modular folder structure already exists.',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
async function previewArch003(context) {
|
|
181
|
+
const directoryPath = path.join(context.workspaceRoot, 'docs', 'architecture');
|
|
182
|
+
const filePath = path.join(directoryPath, 'overview.md');
|
|
183
|
+
const directoryExists = await (0, fileHelpers_1.pathExists)(directoryPath);
|
|
184
|
+
const fileExists = await (0, fileHelpers_1.pathExists)(filePath);
|
|
185
|
+
const filesCreated = [];
|
|
186
|
+
if (!directoryExists) {
|
|
187
|
+
filesCreated.push(relative(directoryPath, context.workspaceRoot));
|
|
188
|
+
}
|
|
189
|
+
if (!fileExists) {
|
|
190
|
+
filesCreated.push(relative(filePath, context.workspaceRoot));
|
|
191
|
+
}
|
|
192
|
+
return {
|
|
193
|
+
filesCreated,
|
|
194
|
+
filesModified: [],
|
|
195
|
+
diffPreview: fileExists
|
|
196
|
+
? '(no changes)'
|
|
197
|
+
: `${directoryExists ? '' : `+ create directory ${relative(directoryPath, context.workspaceRoot)}\n`}+ ${architectureOverviewStarterTemplate
|
|
198
|
+
.trimEnd()
|
|
199
|
+
.replace(/\n/g, '\n+ ')}`,
|
|
200
|
+
description: 'Create a starter architecture overview document if missing.',
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
async function applyArch003(context) {
|
|
204
|
+
const directoryPath = path.join(context.workspaceRoot, 'docs', 'architecture');
|
|
205
|
+
const filePath = path.join(directoryPath, 'overview.md');
|
|
206
|
+
const directoryExisted = await (0, fileHelpers_1.pathExists)(directoryPath);
|
|
207
|
+
const fileCreated = await (0, fileHelpers_1.createFileIfMissing)(filePath, architectureOverviewStarterTemplate);
|
|
208
|
+
const filesCreated = [];
|
|
209
|
+
if (!directoryExisted) {
|
|
210
|
+
filesCreated.push(relative(directoryPath, context.workspaceRoot));
|
|
211
|
+
}
|
|
212
|
+
if (fileCreated) {
|
|
213
|
+
filesCreated.push(relative(filePath, context.workspaceRoot));
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
applied: fileCreated,
|
|
217
|
+
filesCreated,
|
|
218
|
+
filesModified: [],
|
|
219
|
+
description: fileCreated
|
|
220
|
+
? 'Created docs/architecture/overview.md starter template.'
|
|
221
|
+
: 'docs/architecture/overview.md already exists.',
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
async function previewApi001(context) {
|
|
225
|
+
const filePath = path.join(context.workspaceRoot, 'contracts', 'openapi.yaml');
|
|
226
|
+
const exists = await (0, fileHelpers_1.pathExists)(filePath);
|
|
227
|
+
return {
|
|
228
|
+
filesCreated: exists ? [] : [relative(filePath, context.workspaceRoot)],
|
|
229
|
+
filesModified: [],
|
|
230
|
+
diffPreview: exists
|
|
231
|
+
? '(no changes)'
|
|
232
|
+
: `+ openapi: 3.0.0
|
|
233
|
+
+ info:
|
|
234
|
+
+ title: Project API
|
|
235
|
+
+ version: 1.0.0
|
|
236
|
+
+ paths: {}`,
|
|
237
|
+
description: 'Create a missing OpenAPI specification file.',
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
async function applyApi001(context) {
|
|
241
|
+
const filePath = path.join(context.workspaceRoot, 'contracts', 'openapi.yaml');
|
|
242
|
+
const created = await (0, fileHelpers_1.createFileIfMissing)(filePath, `openapi: 3.0.0
|
|
243
|
+
info:
|
|
244
|
+
title: Project API
|
|
245
|
+
version: 1.0.0
|
|
246
|
+
paths: {}
|
|
247
|
+
`);
|
|
248
|
+
return {
|
|
249
|
+
applied: created,
|
|
250
|
+
filesCreated: created ? [relative(filePath, context.workspaceRoot)] : [],
|
|
251
|
+
filesModified: [],
|
|
252
|
+
description: created
|
|
253
|
+
? 'Created contracts/openapi.yaml.'
|
|
254
|
+
: 'contracts/openapi.yaml already exists.',
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
async function previewArch005(context) {
|
|
258
|
+
const modulePath = context.finding.sourceFile ?? parseModulePathFromArch005Message(context.finding.message);
|
|
259
|
+
if (!modulePath) {
|
|
260
|
+
return {
|
|
261
|
+
filesCreated: [],
|
|
262
|
+
filesModified: [],
|
|
263
|
+
diffPreview: '(no changes)',
|
|
264
|
+
description: 'Unable to infer missing module path from finding.',
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
const absolutePath = path.join(context.workspaceRoot, ...modulePath.split('/'));
|
|
268
|
+
const exists = await (0, fileHelpers_1.pathExists)(absolutePath);
|
|
269
|
+
return {
|
|
270
|
+
filesCreated: exists ? [] : [modulePath],
|
|
271
|
+
filesModified: [],
|
|
272
|
+
diffPreview: exists ? '(no changes)' : `+ create directory ${modulePath}`,
|
|
273
|
+
description: `Ensure module registry path exists at ${modulePath}.`,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
async function applyArch005(context) {
|
|
277
|
+
const modulePath = context.finding.sourceFile ?? parseModulePathFromArch005Message(context.finding.message);
|
|
278
|
+
if (!modulePath) {
|
|
279
|
+
return {
|
|
280
|
+
applied: false,
|
|
281
|
+
filesCreated: [],
|
|
282
|
+
filesModified: [],
|
|
283
|
+
description: 'Skipped: unable to infer missing module path from finding.',
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const absolutePath = path.join(context.workspaceRoot, ...modulePath.split('/'));
|
|
287
|
+
const existed = await (0, fileHelpers_1.pathExists)(absolutePath);
|
|
288
|
+
await (0, fileHelpers_1.ensureDirectory)(absolutePath);
|
|
289
|
+
return {
|
|
290
|
+
applied: !existed,
|
|
291
|
+
filesCreated: existed ? [] : [modulePath],
|
|
292
|
+
filesModified: [],
|
|
293
|
+
description: `Ensured module path exists at ${modulePath}.`,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
async function previewArch006(context) {
|
|
297
|
+
const contractPath = context.finding.sourceFile ?? parseContractPathFromArch006Message(context.finding.message);
|
|
298
|
+
const moduleName = parseModuleName(context.finding.message) ?? 'module';
|
|
299
|
+
if (!contractPath) {
|
|
300
|
+
return {
|
|
301
|
+
filesCreated: [],
|
|
302
|
+
filesModified: [],
|
|
303
|
+
diffPreview: '(no changes)',
|
|
304
|
+
description: 'Unable to infer missing contract path from finding.',
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
const absolutePath = path.join(context.workspaceRoot, ...contractPath.split('/'));
|
|
308
|
+
const exists = await (0, fileHelpers_1.pathExists)(absolutePath);
|
|
309
|
+
return {
|
|
310
|
+
filesCreated: exists ? [] : [contractPath],
|
|
311
|
+
filesModified: [],
|
|
312
|
+
diffPreview: exists
|
|
313
|
+
? '(no changes)'
|
|
314
|
+
: `+ {
|
|
315
|
+
+ "module": "${moduleName}",
|
|
316
|
+
+ "dependsOn": [],
|
|
317
|
+
+ "publicEntrypoints": ["src/modules/${moduleName}/index.ts"],
|
|
318
|
+
+ "ownedTables": [],
|
|
319
|
+
+ "exposedApis": []
|
|
320
|
+
+ }`,
|
|
321
|
+
description: `Create missing module contract file at ${contractPath}.`,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
async function applyArch006(context) {
|
|
325
|
+
const contractPath = context.finding.sourceFile ?? parseContractPathFromArch006Message(context.finding.message);
|
|
326
|
+
const moduleName = parseModuleName(context.finding.message) ?? 'module';
|
|
327
|
+
if (!contractPath) {
|
|
328
|
+
return {
|
|
329
|
+
applied: false,
|
|
330
|
+
filesCreated: [],
|
|
331
|
+
filesModified: [],
|
|
332
|
+
description: 'Skipped: unable to infer missing contract path from finding.',
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
const absolutePath = path.join(context.workspaceRoot, ...contractPath.split('/'));
|
|
336
|
+
const created = await (0, fileHelpers_1.writeJsonIfMissing)(absolutePath, {
|
|
337
|
+
module: moduleName,
|
|
338
|
+
dependsOn: [],
|
|
339
|
+
publicEntrypoints: [`src/modules/${moduleName}/index.ts`],
|
|
340
|
+
ownedTables: [],
|
|
341
|
+
exposedApis: [],
|
|
342
|
+
});
|
|
343
|
+
return {
|
|
344
|
+
applied: created,
|
|
345
|
+
filesCreated: created ? [contractPath] : [],
|
|
346
|
+
filesModified: [],
|
|
347
|
+
description: created
|
|
348
|
+
? `Created module contract file at ${contractPath}.`
|
|
349
|
+
: `Module contract file already exists at ${contractPath}.`,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
async function previewDoc001(context) {
|
|
353
|
+
const filePath = path.join(context.workspaceRoot, 'docs', 'adrs', 'adr-001-tenant-model.md');
|
|
354
|
+
const exists = await (0, fileHelpers_1.pathExists)(filePath);
|
|
355
|
+
return {
|
|
356
|
+
filesCreated: exists ? [] : [relative(filePath, context.workspaceRoot)],
|
|
357
|
+
filesModified: [],
|
|
358
|
+
diffPreview: exists
|
|
359
|
+
? '(no changes)'
|
|
360
|
+
: '+ create tenant model ADR template',
|
|
361
|
+
description: 'Create tenant model ADR template if missing.',
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
async function applyDoc001(context) {
|
|
365
|
+
const filePath = path.join(context.workspaceRoot, 'docs', 'adrs', 'adr-001-tenant-model.md');
|
|
366
|
+
const created = await (0, fileHelpers_1.createFileIfMissing)(filePath, (0, adr_1.renderAdrTemplate)(adr_1.canonicalAdrTemplate, {
|
|
367
|
+
adrId: 'ADR-001',
|
|
368
|
+
title: 'Tenant Model',
|
|
369
|
+
status: 'Accepted',
|
|
370
|
+
})
|
|
371
|
+
.replace('Describe the architectural problem or constraint that requires a decision.', 'Document tenant isolation model and constraints.')
|
|
372
|
+
.replace('Clearly describe the chosen approach.', 'The system uses same database with separate schemas per tenant.')
|
|
373
|
+
.replace('Explain the implications of the decision, including:\n- benefits\n- trade-offs\n- operational impact\n- potential future reconsiderations.', '- Simpler operational model than separate databases.\n- Requires strict migration and schema governance.'));
|
|
374
|
+
return {
|
|
375
|
+
applied: created,
|
|
376
|
+
filesCreated: created ? [relative(filePath, context.workspaceRoot)] : [],
|
|
377
|
+
filesModified: [],
|
|
378
|
+
description: created ? 'Created tenant model ADR template.' : 'Tenant model ADR already exists.',
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
async function previewDoc002(context) {
|
|
382
|
+
const filePath = path.join(context.workspaceRoot, 'docs', 'adrs', 'adr-rbac-model.md');
|
|
383
|
+
const exists = await (0, fileHelpers_1.pathExists)(filePath);
|
|
384
|
+
return {
|
|
385
|
+
filesCreated: exists ? [] : [relative(filePath, context.workspaceRoot)],
|
|
386
|
+
filesModified: [],
|
|
387
|
+
diffPreview: exists ? '(no changes)' : '+ create RBAC ADR template',
|
|
388
|
+
description: 'Create an RBAC ADR template if missing.',
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
async function applyDoc002(context) {
|
|
392
|
+
const filePath = path.join(context.workspaceRoot, 'docs', 'adrs', 'adr-rbac-model.md');
|
|
393
|
+
const created = await (0, fileHelpers_1.createFileIfMissing)(filePath, (0, adr_1.renderAdrTemplate)(adr_1.canonicalAdrTemplate, {
|
|
394
|
+
adrId: 'ADR-XXX',
|
|
395
|
+
title: 'RBAC Model',
|
|
396
|
+
})
|
|
397
|
+
.replace('Describe the architectural problem or constraint that requires a decision.', 'Document the RBAC model used in the system.')
|
|
398
|
+
.replace('Clearly describe the chosen approach.', 'Describe roles, permissions, and scope inheritance.')
|
|
399
|
+
.replace('Explain the implications of the decision, including:\n- benefits\n- trade-offs\n- operational impact\n- potential future reconsiderations.', 'Explain how RBAC will be enforced.'));
|
|
400
|
+
return {
|
|
401
|
+
applied: created,
|
|
402
|
+
filesCreated: created ? [relative(filePath, context.workspaceRoot)] : [],
|
|
403
|
+
filesModified: [],
|
|
404
|
+
description: created
|
|
405
|
+
? 'Created docs/adrs/adr-rbac-model.md.'
|
|
406
|
+
: 'docs/adrs/adr-rbac-model.md already exists.',
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
async function previewArch004(context) {
|
|
410
|
+
const parsed = parseModulesFromArch004Message(context.finding.message);
|
|
411
|
+
if (!parsed) {
|
|
412
|
+
return {
|
|
413
|
+
filesCreated: [],
|
|
414
|
+
filesModified: [],
|
|
415
|
+
diffPreview: '(no changes)',
|
|
416
|
+
description: 'Unable to parse AP-ARCH-004 finding details safely. No files would be changed.',
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
const filesCreated = [];
|
|
420
|
+
for (const moduleFinding of parsed.modules) {
|
|
421
|
+
if (moduleFinding.missing.includes('readme.md')) {
|
|
422
|
+
filesCreated.push(`${parsed.modulesRoot}/${moduleFinding.module}/README.md`);
|
|
423
|
+
}
|
|
424
|
+
if (moduleFinding.missing.includes('index.ts')) {
|
|
425
|
+
filesCreated.push(`${parsed.modulesRoot}/${moduleFinding.module}/index.ts`);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return {
|
|
429
|
+
filesCreated,
|
|
430
|
+
filesModified: [],
|
|
431
|
+
diffPreview: filesCreated.length === 0 ? '(no changes)' : `+ create ${filesCreated.join(', ')}`,
|
|
432
|
+
description: 'Create missing module baseline files.',
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
async function applyArch004(context) {
|
|
436
|
+
const parsed = parseModulesFromArch004Message(context.finding.message);
|
|
437
|
+
if (!parsed) {
|
|
438
|
+
return {
|
|
439
|
+
applied: false,
|
|
440
|
+
filesCreated: [],
|
|
441
|
+
filesModified: [],
|
|
442
|
+
description: 'Skipped: unable to parse AP-ARCH-004 finding details safely.',
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
const filesCreated = [];
|
|
446
|
+
for (const moduleFinding of parsed.modules) {
|
|
447
|
+
const moduleRoot = path.join(context.workspaceRoot, ...parsed.modulesRoot.split('/'), moduleFinding.module);
|
|
448
|
+
if (moduleFinding.missing.includes('readme.md')) {
|
|
449
|
+
const readmePath = path.join(moduleRoot, 'README.md');
|
|
450
|
+
const created = await (0, fileHelpers_1.createFileIfMissing)(readmePath, `# ${moduleFinding.module}\n\nModule overview.\n`);
|
|
451
|
+
if (created) {
|
|
452
|
+
filesCreated.push(relative(readmePath, context.workspaceRoot));
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
if (moduleFinding.missing.includes('index.ts')) {
|
|
456
|
+
const indexPath = path.join(moduleRoot, 'index.ts');
|
|
457
|
+
const created = await (0, fileHelpers_1.createFileIfMissing)(indexPath, 'export {};\n');
|
|
458
|
+
if (created) {
|
|
459
|
+
filesCreated.push(relative(indexPath, context.workspaceRoot));
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return {
|
|
464
|
+
applied: filesCreated.length > 0,
|
|
465
|
+
filesCreated,
|
|
466
|
+
filesModified: [],
|
|
467
|
+
description: filesCreated.length > 0 ? 'Created missing module baseline files.' : 'No missing module baseline files remained.',
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
async function previewDep006(context) {
|
|
471
|
+
const parsed = parseDep006Message(context.finding.message);
|
|
472
|
+
if (!parsed) {
|
|
473
|
+
return {
|
|
474
|
+
filesCreated: [],
|
|
475
|
+
filesModified: [],
|
|
476
|
+
diffPreview: '(no changes)',
|
|
477
|
+
description: 'Unable to parse dependency removal from finding.',
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
const contractPath = `.archpilot/contracts/${parsed.sourceModule}.contract.json`;
|
|
481
|
+
return {
|
|
482
|
+
filesCreated: [],
|
|
483
|
+
filesModified: [contractPath],
|
|
484
|
+
diffPreview: `- remove "${parsed.dependency}" from dependsOn in ${contractPath}`,
|
|
485
|
+
description: 'Remove unused declared dependency from module contract.',
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
async function applyDep006(context) {
|
|
489
|
+
const parsed = parseDep006Message(context.finding.message);
|
|
490
|
+
if (!parsed) {
|
|
491
|
+
return {
|
|
492
|
+
applied: false,
|
|
493
|
+
filesCreated: [],
|
|
494
|
+
filesModified: [],
|
|
495
|
+
description: 'Skipped: unable to parse dependency removal from finding.',
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
const contractPath = path.join(context.workspaceRoot, '.archpilot', 'contracts', `${parsed.sourceModule}.contract.json`);
|
|
499
|
+
if (!(await (0, fileHelpers_1.pathExists)(contractPath))) {
|
|
500
|
+
return {
|
|
501
|
+
applied: false,
|
|
502
|
+
filesCreated: [],
|
|
503
|
+
filesModified: [],
|
|
504
|
+
description: 'Skipped: source module contract file is missing.',
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
const content = await node_fs_1.promises.readFile(contractPath, {
|
|
508
|
+
encoding: 'utf8',
|
|
509
|
+
});
|
|
510
|
+
const parsedJson = JSON.parse(content);
|
|
511
|
+
if (!Array.isArray(parsedJson.dependsOn)) {
|
|
512
|
+
return {
|
|
513
|
+
applied: false,
|
|
514
|
+
filesCreated: [],
|
|
515
|
+
filesModified: [],
|
|
516
|
+
description: 'Skipped: contract dependsOn is not an array.',
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
const original = parsedJson.dependsOn.filter((entry) => typeof entry === 'string');
|
|
520
|
+
const next = original.filter((entry) => entry !== parsed.dependency);
|
|
521
|
+
if (next.length === original.length) {
|
|
522
|
+
return {
|
|
523
|
+
applied: false,
|
|
524
|
+
filesCreated: [],
|
|
525
|
+
filesModified: [],
|
|
526
|
+
description: 'No change: declared dependency was already absent.',
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
parsedJson.dependsOn = next;
|
|
530
|
+
await node_fs_1.promises.writeFile(contractPath, `${JSON.stringify(parsedJson, null, 2)}\n`, { encoding: 'utf8' });
|
|
531
|
+
return {
|
|
532
|
+
applied: true,
|
|
533
|
+
filesCreated: [],
|
|
534
|
+
filesModified: [relative(contractPath, context.workspaceRoot)],
|
|
535
|
+
description: `Removed unused dependency '${parsed.dependency}' from module contract.`,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
const handlers = [
|
|
539
|
+
{
|
|
540
|
+
ruleId: 'AP-ARCH-001',
|
|
541
|
+
fixId: 'create-modules-root',
|
|
542
|
+
title: 'Create required modular structure folders',
|
|
543
|
+
description: 'Creates the baseline modular folder structure under src/modules.',
|
|
544
|
+
isSafeFix: true,
|
|
545
|
+
previewFix: previewArch001,
|
|
546
|
+
applyFix: applyArch001,
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
ruleId: 'AP-ARCH-003',
|
|
550
|
+
fixId: 'create-architecture-overview',
|
|
551
|
+
title: 'Create architecture overview document',
|
|
552
|
+
description: 'Creates docs/architecture/overview.md with a starter architecture template.',
|
|
553
|
+
isSafeFix: true,
|
|
554
|
+
previewFix: previewArch003,
|
|
555
|
+
applyFix: applyArch003,
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
ruleId: 'AP-ARCH-004',
|
|
559
|
+
fixId: 'create-missing-module-baseline-files',
|
|
560
|
+
title: 'Create missing module baseline files',
|
|
561
|
+
description: 'Creates missing README.md and index.ts files for modules.',
|
|
562
|
+
isSafeFix: true,
|
|
563
|
+
previewFix: previewArch004,
|
|
564
|
+
applyFix: applyArch004,
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
ruleId: 'AP-ARCH-005',
|
|
568
|
+
fixId: 'create-missing-module-path',
|
|
569
|
+
title: 'Create missing module path',
|
|
570
|
+
description: 'Creates missing module directory referenced in architecture registry.',
|
|
571
|
+
isSafeFix: true,
|
|
572
|
+
previewFix: previewArch005,
|
|
573
|
+
applyFix: applyArch005,
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
ruleId: 'AP-ARCH-006',
|
|
577
|
+
fixId: 'create-missing-module-contract',
|
|
578
|
+
title: 'Create missing module contract file',
|
|
579
|
+
description: 'Creates a minimal module contract JSON file when missing.',
|
|
580
|
+
isSafeFix: true,
|
|
581
|
+
previewFix: previewArch006,
|
|
582
|
+
applyFix: applyArch006,
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
ruleId: 'AP-API-001',
|
|
586
|
+
fixId: 'create-openapi-stub',
|
|
587
|
+
title: 'Create missing OpenAPI specification file',
|
|
588
|
+
description: 'Creates contracts/openapi.yaml with a minimal OpenAPI document.',
|
|
589
|
+
isSafeFix: true,
|
|
590
|
+
previewFix: previewApi001,
|
|
591
|
+
applyFix: applyApi001,
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
ruleId: 'AP-DOC-001',
|
|
595
|
+
fixId: 'create-tenant-adr-template',
|
|
596
|
+
title: 'Create tenant model ADR template',
|
|
597
|
+
description: 'Creates docs/adrs/adr-001-tenant-model.md if missing.',
|
|
598
|
+
isSafeFix: true,
|
|
599
|
+
previewFix: previewDoc001,
|
|
600
|
+
applyFix: applyDoc001,
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
ruleId: 'AP-DOC-002',
|
|
604
|
+
fixId: 'create-rbac-adr-template',
|
|
605
|
+
title: 'Create RBAC ADR template',
|
|
606
|
+
description: 'Creates docs/adrs/adr-rbac-model.md if missing.',
|
|
607
|
+
isSafeFix: true,
|
|
608
|
+
previewFix: previewDoc002,
|
|
609
|
+
applyFix: applyDoc002,
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
ruleId: 'AP-DEP-006',
|
|
613
|
+
fixId: 'remove-unused-declared-dependency',
|
|
614
|
+
title: 'Remove unused declared module dependency',
|
|
615
|
+
description: 'Removes an unused dependency from module contract dependsOn array.',
|
|
616
|
+
isSafeFix: false,
|
|
617
|
+
previewFix: previewDep006,
|
|
618
|
+
applyFix: applyDep006,
|
|
619
|
+
},
|
|
620
|
+
];
|
|
621
|
+
const handlersByRuleId = handlers.reduce((accumulator, handler) => {
|
|
622
|
+
const existing = accumulator.get(handler.ruleId) ?? [];
|
|
623
|
+
existing.push(handler);
|
|
624
|
+
accumulator.set(handler.ruleId, existing);
|
|
625
|
+
return accumulator;
|
|
626
|
+
}, new Map());
|
|
627
|
+
for (const [ruleId, ruleHandlers] of handlersByRuleId.entries()) {
|
|
628
|
+
handlersByRuleId.set(ruleId, [...ruleHandlers].sort((left, right) => left.fixId.localeCompare(right.fixId)));
|
|
629
|
+
}
|
|
630
|
+
function listRegisteredFixHandlers() {
|
|
631
|
+
return [...handlers].sort((left, right) => {
|
|
632
|
+
const ruleCompare = left.ruleId.localeCompare(right.ruleId);
|
|
633
|
+
if (ruleCompare !== 0) {
|
|
634
|
+
return ruleCompare;
|
|
635
|
+
}
|
|
636
|
+
return left.fixId.localeCompare(right.fixId);
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
function getFixHandlersForRule(ruleId) {
|
|
640
|
+
return [...(handlersByRuleId.get(ruleId) ?? [])];
|
|
641
|
+
}
|
|
642
|
+
function hasFixHandlerForRule(ruleId) {
|
|
643
|
+
return getFixHandlersForRule(ruleId).length > 0;
|
|
644
|
+
}
|
|
645
|
+
//# sourceMappingURL=fixRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixRegistry.js","sourceRoot":"","sources":["../../../../../core/src/remediation/fixRegistry.ts"],"names":[],"mappings":"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"}
|