specweave 0.21.2 → 0.22.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/CLAUDE.md +429 -10
- package/README.md +33 -3
- package/dist/plugins/specweave-github/lib/CodeValidator.d.ts +101 -0
- package/dist/plugins/specweave-github/lib/CodeValidator.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/CodeValidator.js +219 -0
- package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -0
- package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts +98 -0
- package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/IssueStateManager.js +146 -0
- package/dist/plugins/specweave-github/lib/IssueStateManager.js.map +1 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +182 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +603 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -0
- package/dist/plugins/specweave-github/lib/types.d.ts +34 -0
- package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +6 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
- package/dist/src/cli/commands/check-hooks.d.ts +11 -0
- package/dist/src/cli/commands/check-hooks.d.ts.map +1 -0
- package/dist/src/cli/commands/check-hooks.js +144 -0
- package/dist/src/cli/commands/check-hooks.js.map +1 -0
- package/dist/src/cli/commands/cicd-monitor.js +3 -3
- package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
- package/dist/src/cli/commands/import-docs.js +2 -2
- package/dist/src/cli/commands/import-docs.js.map +1 -1
- package/dist/src/cli/commands/init-multiproject.js +4 -4
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +60 -5
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +3 -3
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/cli/commands/plan/agent-invoker.d.ts +79 -0
- package/dist/src/cli/commands/plan/agent-invoker.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/agent-invoker.js +383 -0
- package/dist/src/cli/commands/plan/agent-invoker.js.map +1 -0
- package/dist/src/cli/commands/plan/increment-detector.d.ts +27 -0
- package/dist/src/cli/commands/plan/increment-detector.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/increment-detector.js +159 -0
- package/dist/src/cli/commands/plan/increment-detector.js.map +1 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +45 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.js +229 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.js.map +1 -0
- package/dist/src/cli/commands/plan/plan-validator.d.ts +36 -0
- package/dist/src/cli/commands/plan/plan-validator.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/plan-validator.js +174 -0
- package/dist/src/cli/commands/plan/plan-validator.js.map +1 -0
- package/dist/src/cli/commands/plan/types.d.ts +170 -0
- package/dist/src/cli/commands/plan/types.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/types.js +42 -0
- package/dist/src/cli/commands/plan/types.js.map +1 -0
- package/dist/src/cli/commands/plan-command.d.ts +16 -0
- package/dist/src/cli/commands/plan-command.d.ts.map +1 -0
- package/dist/src/cli/commands/plan-command.js +127 -0
- package/dist/src/cli/commands/plan-command.js.map +1 -0
- package/dist/src/cli/commands/switch-project.js +3 -3
- package/dist/src/cli/commands/switch-project.js.map +1 -1
- package/dist/src/cli/commands/validate-parent-repo.js +1 -1
- package/dist/src/cli/commands/validate-parent-repo.js.map +1 -1
- package/dist/src/config/ConfigManager.d.ts +69 -0
- package/dist/src/config/ConfigManager.d.ts.map +1 -0
- package/dist/src/config/ConfigManager.js +130 -0
- package/dist/src/config/ConfigManager.js.map +1 -0
- package/dist/src/config/types.d.ts +1357 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/config/types.js +67 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/core/brownfield/importer.d.ts +1 -1
- package/dist/src/core/brownfield/importer.d.ts.map +1 -1
- package/dist/src/core/brownfield/importer.js +3 -3
- package/dist/src/core/brownfield/importer.js.map +1 -1
- package/dist/src/core/cicd/config-loader.d.ts +1 -1
- package/dist/src/core/cicd/config-loader.d.ts.map +1 -1
- package/dist/src/core/cicd/index.d.ts +6 -6
- package/dist/src/core/cicd/index.d.ts.map +1 -1
- package/dist/src/core/cicd/index.js +6 -6
- package/dist/src/core/cicd/index.js.map +1 -1
- package/dist/src/core/cicd/monitor-service.d.ts +3 -3
- package/dist/src/core/cicd/monitor-service.d.ts.map +1 -1
- package/dist/src/core/cicd/monitor-service.js +3 -3
- package/dist/src/core/cicd/monitor-service.js.map +1 -1
- package/dist/src/core/cicd/notifier.d.ts +1 -1
- package/dist/src/core/cicd/notifier.d.ts.map +1 -1
- package/dist/src/core/cicd/state-manager.d.ts +1 -1
- package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
- package/dist/src/core/cicd/state-manager.js +1 -1
- package/dist/src/core/cicd/state-manager.js.map +1 -1
- package/dist/src/core/cicd/workflow-monitor.d.ts +1 -1
- package/dist/src/core/cicd/workflow-monitor.d.ts.map +1 -1
- package/dist/src/core/cicd/workflow-monitor.js +1 -1
- package/dist/src/core/cicd/workflow-monitor.js.map +1 -1
- package/dist/src/core/cost-tracker.d.ts +2 -2
- package/dist/src/core/cost-tracker.d.ts.map +1 -1
- package/dist/src/core/cost-tracker.js +1 -1
- package/dist/src/core/cost-tracker.js.map +1 -1
- package/dist/src/core/hooks/HealthReporter.d.ts +55 -0
- package/dist/src/core/hooks/HealthReporter.d.ts.map +1 -0
- package/dist/src/core/hooks/HealthReporter.js +268 -0
- package/dist/src/core/hooks/HealthReporter.js.map +1 -0
- package/dist/src/core/hooks/HookAutoFixer.d.ts +41 -0
- package/dist/src/core/hooks/HookAutoFixer.d.ts.map +1 -0
- package/dist/src/core/hooks/HookAutoFixer.js +222 -0
- package/dist/src/core/hooks/HookAutoFixer.js.map +1 -0
- package/dist/src/core/hooks/HookExecutor.d.ts +57 -0
- package/dist/src/core/hooks/HookExecutor.d.ts.map +1 -0
- package/dist/src/core/hooks/HookExecutor.js +287 -0
- package/dist/src/core/hooks/HookExecutor.js.map +1 -0
- package/dist/src/core/hooks/HookHealthChecker.d.ts +51 -0
- package/dist/src/core/hooks/HookHealthChecker.d.ts.map +1 -0
- package/dist/src/core/hooks/HookHealthChecker.js +212 -0
- package/dist/src/core/hooks/HookHealthChecker.js.map +1 -0
- package/dist/src/core/hooks/HookScanner.d.ts +65 -0
- package/dist/src/core/hooks/HookScanner.d.ts.map +1 -0
- package/dist/src/core/hooks/HookScanner.js +214 -0
- package/dist/src/core/hooks/HookScanner.js.map +1 -0
- package/dist/src/core/hooks/types.d.ts +281 -0
- package/dist/src/core/hooks/types.d.ts.map +1 -0
- package/dist/src/core/hooks/types.js +10 -0
- package/dist/src/core/hooks/types.js.map +1 -0
- package/dist/src/core/iac/index.d.ts +10 -0
- package/dist/src/core/iac/index.d.ts.map +1 -0
- package/dist/src/core/iac/index.js +11 -0
- package/dist/src/core/iac/index.js.map +1 -0
- package/dist/src/core/iac/template-engine.d.ts +77 -0
- package/dist/src/core/iac/template-engine.d.ts.map +1 -0
- package/dist/src/core/iac/template-engine.js +182 -0
- package/dist/src/core/iac/template-engine.js.map +1 -0
- package/dist/src/core/increment/ac-status-manager.d.ts +115 -0
- package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -0
- package/dist/src/core/increment/ac-status-manager.js +343 -0
- package/dist/src/core/increment/ac-status-manager.js.map +1 -0
- package/dist/src/core/increment/auto-transition-manager.d.ts +60 -0
- package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -0
- package/dist/src/core/increment/auto-transition-manager.js +192 -0
- package/dist/src/core/increment/auto-transition-manager.js.map +1 -0
- package/dist/src/core/increment/limits.d.ts +1 -1
- package/dist/src/core/increment/limits.d.ts.map +1 -1
- package/dist/src/core/increment/limits.js +2 -2
- package/dist/src/core/increment/limits.js.map +1 -1
- package/dist/src/core/increment/spec-sync-manager.d.ts +177 -0
- package/dist/src/core/increment/spec-sync-manager.d.ts.map +1 -0
- package/dist/src/core/increment/spec-sync-manager.js +496 -0
- package/dist/src/core/increment/spec-sync-manager.js.map +1 -0
- package/dist/src/core/increment/status-auto-transition.d.ts +46 -0
- package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -0
- package/dist/src/core/increment/status-auto-transition.js +178 -0
- package/dist/src/core/increment/status-auto-transition.js.map +1 -0
- package/dist/src/core/increment/task-state-manager.d.ts +75 -0
- package/dist/src/core/increment/task-state-manager.d.ts.map +1 -0
- package/dist/src/core/increment/task-state-manager.js +117 -0
- package/dist/src/core/increment/task-state-manager.js.map +1 -0
- package/dist/src/core/living-docs/CodeValidator.d.ts +68 -0
- package/dist/src/core/living-docs/CodeValidator.d.ts.map +1 -0
- package/dist/src/core/living-docs/CodeValidator.js +160 -0
- package/dist/src/core/living-docs/CodeValidator.js.map +1 -0
- package/dist/src/core/living-docs/CompletionPropagator.d.ts +84 -0
- package/dist/src/core/living-docs/CompletionPropagator.d.ts.map +1 -0
- package/dist/src/core/living-docs/CompletionPropagator.js +206 -0
- package/dist/src/core/living-docs/CompletionPropagator.js.map +1 -0
- package/dist/src/core/living-docs/ProjectDetector.d.ts +29 -0
- package/dist/src/core/living-docs/ProjectDetector.d.ts.map +1 -0
- package/dist/src/core/living-docs/ProjectDetector.js +94 -0
- package/dist/src/core/living-docs/ProjectDetector.js.map +1 -0
- package/dist/src/core/living-docs/SpecDistributor.d.ts +60 -0
- package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -0
- package/dist/src/core/living-docs/SpecDistributor.js +228 -0
- package/dist/src/core/living-docs/SpecDistributor.js.map +1 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +116 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +1 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.js +356 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +1 -0
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +2 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/index.d.ts +1 -1
- package/dist/src/core/living-docs/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/index.js +5 -1
- package/dist/src/core/living-docs/index.js.map +1 -1
- package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/project-detector.js +38 -0
- package/dist/src/core/living-docs/project-detector.js.map +1 -1
- package/dist/src/core/living-docs/types.d.ts +70 -300
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/types.js +2 -10
- package/dist/src/core/living-docs/types.js.map +1 -1
- package/dist/src/core/project-manager.d.ts +1 -1
- package/dist/src/core/project-manager.d.ts.map +1 -1
- package/dist/src/core/project-manager.js +2 -2
- package/dist/src/core/project-manager.js.map +1 -1
- package/dist/src/core/qa/quality-gate-decider.d.ts +1 -1
- package/dist/src/core/qa/quality-gate-decider.d.ts.map +1 -1
- package/dist/src/core/qa/risk-calculator.d.ts +1 -1
- package/dist/src/core/qa/risk-calculator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/setup-summary.d.ts +1 -1
- package/dist/src/core/repo-structure/setup-summary.d.ts.map +1 -1
- package/dist/src/core/rfc-generator-v2.d.ts +1 -1
- package/dist/src/core/rfc-generator-v2.d.ts.map +1 -1
- package/dist/src/core/rfc-generator-v2.js +1 -1
- package/dist/src/core/rfc-generator-v2.js.map +1 -1
- package/dist/src/core/serverless/context-detector.d.ts +12 -0
- package/dist/src/core/serverless/context-detector.d.ts.map +1 -0
- package/dist/src/core/serverless/context-detector.js +213 -0
- package/dist/src/core/serverless/context-detector.js.map +1 -0
- package/dist/src/core/serverless/cost-comparison.d.ts +73 -0
- package/dist/src/core/serverless/cost-comparison.d.ts.map +1 -0
- package/dist/src/core/serverless/cost-comparison.js +198 -0
- package/dist/src/core/serverless/cost-comparison.js.map +1 -0
- package/dist/src/core/serverless/cost-estimator.d.ts +69 -0
- package/dist/src/core/serverless/cost-estimator.d.ts.map +1 -0
- package/dist/src/core/serverless/cost-estimator.js +127 -0
- package/dist/src/core/serverless/cost-estimator.js.map +1 -0
- package/dist/src/core/serverless/cost-optimizer.d.ts +57 -0
- package/dist/src/core/serverless/cost-optimizer.d.ts.map +1 -0
- package/dist/src/core/serverless/cost-optimizer.js +221 -0
- package/dist/src/core/serverless/cost-optimizer.js.map +1 -0
- package/dist/src/core/serverless/index.d.ts +20 -0
- package/dist/src/core/serverless/index.d.ts.map +1 -0
- package/dist/src/core/serverless/index.js +26 -0
- package/dist/src/core/serverless/index.js.map +1 -0
- package/dist/src/core/serverless/learning-path-recommender.d.ts +152 -0
- package/dist/src/core/serverless/learning-path-recommender.d.ts.map +1 -0
- package/dist/src/core/serverless/learning-path-recommender.js +389 -0
- package/dist/src/core/serverless/learning-path-recommender.js.map +1 -0
- package/dist/src/core/serverless/platform-data-loader.d.ts +22 -0
- package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -0
- package/dist/src/core/serverless/platform-data-loader.js +49 -0
- package/dist/src/core/serverless/platform-data-loader.js.map +1 -0
- package/dist/src/core/serverless/platform-selector.d.ts +20 -0
- package/dist/src/core/serverless/platform-selector.d.ts.map +1 -0
- package/dist/src/core/serverless/platform-selector.js +279 -0
- package/dist/src/core/serverless/platform-selector.js.map +1 -0
- package/dist/src/core/serverless/recommendation-formatter.d.ts +24 -0
- package/dist/src/core/serverless/recommendation-formatter.d.ts.map +1 -0
- package/dist/src/core/serverless/recommendation-formatter.js +70 -0
- package/dist/src/core/serverless/recommendation-formatter.js.map +1 -0
- package/dist/src/core/serverless/suitability-analyzer.d.ts +22 -0
- package/dist/src/core/serverless/suitability-analyzer.d.ts.map +1 -0
- package/dist/src/core/serverless/suitability-analyzer.js +262 -0
- package/dist/src/core/serverless/suitability-analyzer.js.map +1 -0
- package/dist/src/core/serverless/types.d.ts +96 -0
- package/dist/src/core/serverless/types.d.ts.map +1 -0
- package/dist/src/core/serverless/types.js +5 -0
- package/dist/src/core/serverless/types.js.map +1 -0
- package/dist/src/core/sync/bidirectional-engine.d.ts +1 -1
- package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts +1 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
- package/dist/src/core/sync/profile-manager.d.ts +1 -1
- package/dist/src/core/sync/profile-manager.d.ts.map +1 -1
- package/dist/src/core/sync/profile-selector.d.ts +1 -1
- package/dist/src/core/sync/profile-selector.d.ts.map +1 -1
- package/dist/src/core/sync/profile-selector.js +1 -1
- package/dist/src/core/sync/profile-selector.js.map +1 -1
- package/dist/src/core/sync/project-context.d.ts +1 -1
- package/dist/src/core/sync/project-context.d.ts.map +1 -1
- package/dist/src/core/sync/rate-limiter.d.ts +1 -1
- package/dist/src/core/sync/rate-limiter.d.ts.map +1 -1
- package/dist/src/core/sync/status-sync-engine.d.ts +2 -2
- package/dist/src/core/sync/status-sync-engine.d.ts.map +1 -1
- package/dist/src/core/sync/status-sync-engine.js +2 -2
- package/dist/src/core/sync/status-sync-engine.js.map +1 -1
- package/dist/src/core/sync/time-range-selector.d.ts +1 -1
- package/dist/src/core/sync/time-range-selector.d.ts.map +1 -1
- package/dist/src/core/sync/time-range-selector.js +1 -1
- package/dist/src/core/sync/time-range-selector.js.map +1 -1
- package/dist/src/core/types/config.d.ts +23 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js +10 -0
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +27 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/increment-metadata.js +45 -1
- package/dist/src/core/types/increment-metadata.js.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +2 -0
- package/dist/src/core/types/sync-profile.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.js.map +1 -1
- package/dist/src/core/validation/increment-structure-validator.d.ts +47 -0
- package/dist/src/core/validation/increment-structure-validator.d.ts.map +1 -0
- package/dist/src/core/validation/increment-structure-validator.js +187 -0
- package/dist/src/core/validation/increment-structure-validator.js.map +1 -0
- package/dist/src/core/validation/three-file-validator.d.ts +82 -0
- package/dist/src/core/validation/three-file-validator.d.ts.map +1 -0
- package/dist/src/core/validation/three-file-validator.js +320 -0
- package/dist/src/core/validation/three-file-validator.js.map +1 -0
- package/dist/src/core/workflow/phase-detector.d.ts +103 -0
- package/dist/src/core/workflow/phase-detector.d.ts.map +1 -0
- package/dist/src/core/workflow/phase-detector.js +704 -0
- package/dist/src/core/workflow/phase-detector.js.map +1 -0
- package/dist/src/core/workflow/types.d.ts +153 -0
- package/dist/src/core/workflow/types.d.ts.map +1 -0
- package/dist/src/core/workflow/types.js +47 -0
- package/dist/src/core/workflow/types.js.map +1 -0
- package/dist/src/init/ArchitecturePresenter.d.ts +47 -0
- package/dist/src/init/ArchitecturePresenter.d.ts.map +1 -0
- package/dist/src/init/ArchitecturePresenter.js +180 -0
- package/dist/src/init/ArchitecturePresenter.js.map +1 -0
- package/dist/src/init/InitFlow.d.ts +37 -0
- package/dist/src/init/InitFlow.d.ts.map +1 -0
- package/dist/src/init/InitFlow.js +238 -0
- package/dist/src/init/InitFlow.js.map +1 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts +107 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts.map +1 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.js +405 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.js.map +1 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.d.ts +11 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.d.ts.map +1 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.js +92 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.js.map +1 -0
- package/dist/src/init/architecture/CostEstimator.d.ts +52 -0
- package/dist/src/init/architecture/CostEstimator.d.ts.map +1 -0
- package/dist/src/init/architecture/CostEstimator.js +107 -0
- package/dist/src/init/architecture/CostEstimator.js.map +1 -0
- package/dist/src/init/architecture/InfrastructureMapper.d.ts +41 -0
- package/dist/src/init/architecture/InfrastructureMapper.d.ts.map +1 -0
- package/dist/src/init/architecture/InfrastructureMapper.js +140 -0
- package/dist/src/init/architecture/InfrastructureMapper.js.map +1 -0
- package/dist/src/init/architecture/ProjectGenerator.d.ts +44 -0
- package/dist/src/init/architecture/ProjectGenerator.d.ts.map +1 -0
- package/dist/src/init/architecture/ProjectGenerator.js +216 -0
- package/dist/src/init/architecture/ProjectGenerator.js.map +1 -0
- package/dist/src/init/architecture/types.d.ts +251 -0
- package/dist/src/init/architecture/types.d.ts.map +1 -0
- package/dist/src/init/architecture/types.js +54 -0
- package/dist/src/init/architecture/types.js.map +1 -0
- package/dist/src/init/compliance/ComplianceDetector.d.ts +17 -0
- package/dist/src/init/compliance/ComplianceDetector.d.ts.map +1 -0
- package/dist/src/init/compliance/ComplianceDetector.js +64 -0
- package/dist/src/init/compliance/ComplianceDetector.js.map +1 -0
- package/dist/src/init/compliance/standards-database.d.ts +48 -0
- package/dist/src/init/compliance/standards-database.d.ts.map +1 -0
- package/dist/src/init/compliance/standards-database.js +506 -0
- package/dist/src/init/compliance/standards-database.js.map +1 -0
- package/dist/src/init/compliance/types.d.ts +91 -0
- package/dist/src/init/compliance/types.d.ts.map +1 -0
- package/dist/src/init/compliance/types.js +43 -0
- package/dist/src/init/compliance/types.js.map +1 -0
- package/dist/src/init/repo/GitHubAPIClient.d.ts +51 -0
- package/dist/src/init/repo/GitHubAPIClient.d.ts.map +1 -0
- package/dist/src/init/repo/GitHubAPIClient.js +144 -0
- package/dist/src/init/repo/GitHubAPIClient.js.map +1 -0
- package/dist/src/init/repo/RepositorySelector.d.ts +45 -0
- package/dist/src/init/repo/RepositorySelector.d.ts.map +1 -0
- package/dist/src/init/repo/RepositorySelector.js +106 -0
- package/dist/src/init/repo/RepositorySelector.js.map +1 -0
- package/dist/src/init/repo/types.d.ts +95 -0
- package/dist/src/init/repo/types.d.ts.map +1 -0
- package/dist/src/init/repo/types.js +25 -0
- package/dist/src/init/repo/types.js.map +1 -0
- package/dist/src/init/research/CompetitorAnalyzer.d.ts +79 -0
- package/dist/src/init/research/CompetitorAnalyzer.d.ts.map +1 -0
- package/dist/src/init/research/CompetitorAnalyzer.js +265 -0
- package/dist/src/init/research/CompetitorAnalyzer.js.map +1 -0
- package/dist/src/init/research/MarketDetector.d.ts +62 -0
- package/dist/src/init/research/MarketDetector.d.ts.map +1 -0
- package/dist/src/init/research/MarketDetector.js +247 -0
- package/dist/src/init/research/MarketDetector.js.map +1 -0
- package/dist/src/init/research/OpportunityScorer.d.ts +58 -0
- package/dist/src/init/research/OpportunityScorer.d.ts.map +1 -0
- package/dist/src/init/research/OpportunityScorer.js +194 -0
- package/dist/src/init/research/OpportunityScorer.js.map +1 -0
- package/dist/src/init/research/QuestionGenerator.d.ts +68 -0
- package/dist/src/init/research/QuestionGenerator.d.ts.map +1 -0
- package/dist/src/init/research/QuestionGenerator.js +244 -0
- package/dist/src/init/research/QuestionGenerator.js.map +1 -0
- package/dist/src/init/research/ReportGenerator.d.ts +36 -0
- package/dist/src/init/research/ReportGenerator.d.ts.map +1 -0
- package/dist/src/init/research/ReportGenerator.js +125 -0
- package/dist/src/init/research/ReportGenerator.js.map +1 -0
- package/dist/src/init/research/VisionAnalyzer.d.ts +129 -0
- package/dist/src/init/research/VisionAnalyzer.d.ts.map +1 -0
- package/dist/src/init/research/VisionAnalyzer.js +212 -0
- package/dist/src/init/research/VisionAnalyzer.js.map +1 -0
- package/dist/src/init/research/keyword-extractor.d.ts +78 -0
- package/dist/src/init/research/keyword-extractor.d.ts.map +1 -0
- package/dist/src/init/research/keyword-extractor.js +230 -0
- package/dist/src/init/research/keyword-extractor.js.map +1 -0
- package/dist/src/init/research/src/config/ConfigManager.d.ts +14 -0
- package/dist/src/init/research/src/config/ConfigManager.d.ts.map +1 -0
- package/dist/src/init/research/src/config/ConfigManager.js +45 -0
- package/dist/src/init/research/src/config/ConfigManager.js.map +1 -0
- package/dist/src/init/research/src/config/types.d.ts +102 -0
- package/dist/src/init/research/src/config/types.d.ts.map +1 -0
- package/dist/src/init/research/src/config/types.js +24 -0
- package/dist/src/init/research/src/config/types.js.map +1 -0
- package/dist/src/init/research/types.d.ts +183 -0
- package/dist/src/init/research/types.d.ts.map +1 -0
- package/dist/src/init/research/types.js +65 -0
- package/dist/src/init/research/types.js.map +1 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.d.ts +136 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.d.ts.map +1 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.js +360 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.js.map +1 -0
- package/dist/src/init/team/TeamRecommender.d.ts +122 -0
- package/dist/src/init/team/TeamRecommender.d.ts.map +1 -0
- package/dist/src/init/team/TeamRecommender.js +405 -0
- package/dist/src/init/team/TeamRecommender.js.map +1 -0
- package/dist/src/init/team/types.d.ts +95 -0
- package/dist/src/init/team/types.d.ts.map +1 -0
- package/dist/src/init/team/types.js +23 -0
- package/dist/src/init/team/types.js.map +1 -0
- package/dist/src/integrations/jira/jira-mapper.d.ts +1 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
- package/dist/src/types/cost-tracking.d.ts +1 -1
- package/dist/src/types/cost-tracking.d.ts.map +1 -1
- package/dist/src/utils/cost-reporter.d.ts +2 -2
- package/dist/src/utils/cost-reporter.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/config-generator.d.ts +1 -1
- package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/config-generator.js +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.js +4 -4
- package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
- package/dist/src/utils/docs-preview/index.d.ts +6 -6
- package/dist/src/utils/docs-preview/index.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/index.js +6 -6
- package/dist/src/utils/docs-preview/index.js.map +1 -1
- package/dist/src/utils/docs-preview/package-installer.d.ts +1 -1
- package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/package-installer.js +1 -1
- package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
- package/dist/src/utils/docs-preview/server-manager.d.ts +1 -1
- package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/server-manager.js +1 -1
- package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
- package/dist/src/utils/docs-preview/sidebar-builder.d.ts +1 -1
- package/dist/src/utils/docs-preview/sidebar-builder.d.ts.map +1 -1
- package/dist/src/utils/generate-skills-index.d.ts +1 -1
- package/dist/src/utils/generate-skills-index.js +1 -1
- package/dist/src/utils/project-detection.js +1 -1
- package/dist/src/utils/project-detection.js.map +1 -1
- package/package.json +17 -10
- package/plugins/specweave/agents/architect/AGENT.md +605 -0
- package/plugins/specweave/agents/infrastructure/AGENT.md +760 -0
- package/plugins/specweave/agents/pm/AGENT.md +14 -13
- package/plugins/specweave/commands/specweave-check-hooks.md +186 -0
- package/plugins/specweave/commands/specweave-plan.md +151 -0
- package/plugins/specweave/commands/specweave-sync-acs.md +342 -0
- package/plugins/specweave/commands/specweave-validate.md +60 -11
- package/plugins/specweave/hooks/lib/update-status-line.sh +8 -4
- package/plugins/specweave/hooks/post-increment-change.sh +4 -0
- package/plugins/specweave/hooks/post-increment-completion.sh +7 -1
- package/plugins/specweave/hooks/post-increment-planning.sh +4 -0
- package/plugins/specweave/hooks/post-increment-status-change.sh +4 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +78 -0
- package/plugins/specweave/iac-templates/aws-lambda/README.md.hbs +280 -0
- package/plugins/specweave/iac-templates/aws-lambda/defaults.json +118 -0
- package/plugins/specweave/iac-templates/aws-lambda/environments/dev.defaults.json +46 -0
- package/plugins/specweave/iac-templates/aws-lambda/environments/prod.defaults.json +67 -0
- package/plugins/specweave/iac-templates/aws-lambda/environments/staging.defaults.json +47 -0
- package/plugins/specweave/iac-templates/aws-lambda/main.tf.hbs +241 -0
- package/plugins/specweave/iac-templates/aws-lambda/outputs.tf.hbs +61 -0
- package/plugins/specweave/iac-templates/aws-lambda/provider.tf.hbs +15 -0
- package/plugins/specweave/iac-templates/aws-lambda/variables.tf.hbs +88 -0
- package/plugins/specweave/iac-templates/azure-functions/README.md.hbs +315 -0
- package/plugins/specweave/iac-templates/azure-functions/defaults.json +65 -0
- package/plugins/specweave/iac-templates/azure-functions/environments/dev.defaults.json +30 -0
- package/plugins/specweave/iac-templates/azure-functions/environments/prod.defaults.json +34 -0
- package/plugins/specweave/iac-templates/azure-functions/environments/staging.defaults.json +31 -0
- package/plugins/specweave/iac-templates/azure-functions/iam.tf.hbs +34 -0
- package/plugins/specweave/iac-templates/azure-functions/main.tf.hbs +247 -0
- package/plugins/specweave/iac-templates/azure-functions/outputs.tf.hbs +72 -0
- package/plugins/specweave/iac-templates/azure-functions/provider.tf.hbs +14 -0
- package/plugins/specweave/iac-templates/azure-functions/variables.tf.hbs +64 -0
- package/plugins/specweave/iac-templates/firebase/README.md.hbs +487 -0
- package/plugins/specweave/iac-templates/firebase/defaults.json +55 -0
- package/plugins/specweave/iac-templates/firebase/environments/dev.defaults.json +44 -0
- package/plugins/specweave/iac-templates/firebase/environments/prod.defaults.json +52 -0
- package/plugins/specweave/iac-templates/firebase/environments/staging.defaults.json +43 -0
- package/plugins/specweave/iac-templates/firebase/iam.tf.hbs +75 -0
- package/plugins/specweave/iac-templates/firebase/main.tf.hbs +297 -0
- package/plugins/specweave/iac-templates/firebase/outputs.tf.hbs +67 -0
- package/plugins/specweave/iac-templates/firebase/provider.tf.hbs +26 -0
- package/plugins/specweave/iac-templates/firebase/variables.tf.hbs +68 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/README.md.hbs +330 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/defaults.json +69 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/dev.defaults.json +33 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/prod.defaults.json +40 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/staging.defaults.json +33 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/iam.tf.hbs +54 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/main.tf.hbs +211 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/outputs.tf.hbs +44 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/provider.tf.hbs +14 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/variables.tf.hbs +82 -0
- package/plugins/specweave/iac-templates/supabase/README.md.hbs +534 -0
- package/plugins/specweave/iac-templates/supabase/defaults.json +69 -0
- package/plugins/specweave/iac-templates/supabase/environments/dev.defaults.json +55 -0
- package/plugins/specweave/iac-templates/supabase/environments/prod.defaults.json +75 -0
- package/plugins/specweave/iac-templates/supabase/environments/staging.defaults.json +54 -0
- package/plugins/specweave/iac-templates/supabase/iam.tf.hbs +146 -0
- package/plugins/specweave/iac-templates/supabase/main.tf.hbs +310 -0
- package/plugins/specweave/iac-templates/supabase/outputs.tf.hbs +74 -0
- package/plugins/specweave/iac-templates/supabase/provider.tf.hbs +19 -0
- package/plugins/specweave/iac-templates/supabase/variables.tf.hbs +78 -0
- package/plugins/specweave/knowledge-base/serverless/FRESHNESS.md +69 -0
- package/plugins/specweave/knowledge-base/serverless/learning-paths.json +865 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/aws-lambda.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/azure-functions.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/firebase.json +46 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/gcp-cloud-functions.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/supabase.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/schema.json +155 -0
- package/plugins/specweave/lib/hooks/auto-transition.js +50 -0
- package/plugins/specweave/lib/hooks/auto-transition.ts +84 -0
- package/plugins/specweave/lib/hooks/invoke-translator-skill.js +1 -1
- package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +1 -1
- package/plugins/specweave/lib/hooks/sync-living-docs.js +4 -31
- package/plugins/specweave/lib/hooks/{sync-living-docs.ts → sync-living-docs.ts.DISABLED} +9 -48
- package/plugins/specweave/lib/hooks/translate-file.js +1 -1
- package/plugins/specweave/lib/hooks/translate-file.ts +1 -1
- package/plugins/specweave/lib/hooks/update-ac-status.js +24 -75
- package/plugins/specweave/lib/hooks/update-ac-status.ts +46 -135
- package/plugins/specweave/lib/hooks/update-tasks-md.js +115 -3
- package/plugins/specweave/lib/hooks/update-tasks-md.ts +182 -10
- package/plugins/specweave/lib/utils/validate-dev-setup.sh +133 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +25 -15
- package/plugins/specweave/skills/serverless-recommender/SKILL.md +368 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/iam.tf.hbs +137 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/main.tf.hbs +216 -0
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
- package/plugins/specweave-github/lib/CodeValidator.js +195 -0
- package/plugins/specweave-github/lib/CodeValidator.ts +284 -0
- package/plugins/specweave-github/lib/IssueStateManager.js +117 -0
- package/plugins/specweave-github/lib/IssueStateManager.ts +231 -0
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +545 -0
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +809 -0
- package/plugins/specweave-github/lib/types.ts +38 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.js +7 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.ts +11 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1200 -0
- package/plugins/specweave-ui/.mcp.json +0 -10
- package/plugins/specweave-ui/README.md +26 -26
- package/plugins/specweave-ui/skills/browser-automation/SKILL.md +31 -18
- package/src/templates/AGENTS.md.template +22 -1
- package/src/templates/tasks.md.template +51 -33
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts +0 -89
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js +0 -226
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts +0 -60
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js +0 -201
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts +0 -42
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js +0 -123
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts +0 -45
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js +0 -132
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts +0 -33
- package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-parser.js +0 -419
- package/dist/plugins/specweave/lib/hooks/reflection-parser.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts +0 -56
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js +0 -239
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts +0 -64
- package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-storage.js +0 -305
- package/dist/plugins/specweave/lib/hooks/reflection-storage.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts +0 -43
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.js +0 -203
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +0 -32
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +0 -405
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-file.d.ts +0 -59
- package/dist/plugins/specweave/lib/hooks/translate-file.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-file.js +0 -350
- package/dist/plugins/specweave/lib/hooks/translate-file.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts +0 -13
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.js +0 -175
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts +0 -164
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.js +0 -73
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +0 -21
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js +0 -162
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts +0 -29
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.js +0 -203
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.js.map +0 -1
- package/dist/src/core/living-docs/spec-distributor.d.ts +0 -180
- package/dist/src/core/living-docs/spec-distributor.d.ts.map +0 -1
- package/dist/src/core/living-docs/spec-distributor.js +0 -1840
- package/dist/src/core/living-docs/spec-distributor.js.map +0 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates that completed tasks have actual code implementation.
|
|
5
|
+
* Prevents marking tasks as complete when:
|
|
6
|
+
* - Files don't exist
|
|
7
|
+
* - Files are empty or have trivial content
|
|
8
|
+
* - Implementation is incomplete
|
|
9
|
+
*
|
|
10
|
+
* Used by ThreeLayerSyncManager to enforce code-completion discipline.
|
|
11
|
+
*
|
|
12
|
+
* @module CodeValidator
|
|
13
|
+
*/
|
|
14
|
+
import fs from 'fs-extra';
|
|
15
|
+
import path from 'path';
|
|
16
|
+
export class CodeValidator {
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.options = {
|
|
19
|
+
minLines: options.minLines ?? 3,
|
|
20
|
+
minChars: options.minChars ?? 50,
|
|
21
|
+
projectRoot: options.projectRoot ?? process.cwd()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate that code exists for a task
|
|
26
|
+
*
|
|
27
|
+
* Extracts file paths from task description and verifies:
|
|
28
|
+
* 1. Files exist
|
|
29
|
+
* 2. Files have meaningful content
|
|
30
|
+
* 3. Files are not just stubs
|
|
31
|
+
*
|
|
32
|
+
* @param taskDescription - Task description with file paths
|
|
33
|
+
* @param taskId - Task ID for error messages
|
|
34
|
+
* @returns Validation result
|
|
35
|
+
*/
|
|
36
|
+
async validateTask(taskDescription, taskId) {
|
|
37
|
+
const filePaths = this.extractFilePaths(taskDescription);
|
|
38
|
+
if (filePaths.length === 0) {
|
|
39
|
+
// No file paths specified - consider it valid (task might be non-code)
|
|
40
|
+
return {
|
|
41
|
+
taskId,
|
|
42
|
+
valid: true,
|
|
43
|
+
files: [],
|
|
44
|
+
reason: 'No file paths specified in task description'
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const fileResults = [];
|
|
48
|
+
let allValid = true;
|
|
49
|
+
const reasons = [];
|
|
50
|
+
for (const filePath of filePaths) {
|
|
51
|
+
const result = await this.validateFile(filePath);
|
|
52
|
+
fileResults.push(result);
|
|
53
|
+
if (!result.exists) {
|
|
54
|
+
allValid = false;
|
|
55
|
+
reasons.push(`File not found: ${filePath}`);
|
|
56
|
+
}
|
|
57
|
+
else if (!result.hasContent) {
|
|
58
|
+
allValid = false;
|
|
59
|
+
reasons.push(`File has no meaningful content: ${filePath} (${result.reason})`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
taskId,
|
|
64
|
+
valid: allValid,
|
|
65
|
+
files: fileResults,
|
|
66
|
+
reason: reasons.length > 0 ? reasons.join('; ') : undefined
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Validate a single file
|
|
71
|
+
*
|
|
72
|
+
* @param filePath - Path to file (relative or absolute)
|
|
73
|
+
* @returns File validation result
|
|
74
|
+
*/
|
|
75
|
+
async validateFile(filePath) {
|
|
76
|
+
// Resolve relative paths
|
|
77
|
+
const absolutePath = path.isAbsolute(filePath)
|
|
78
|
+
? filePath
|
|
79
|
+
: path.join(this.options.projectRoot, filePath);
|
|
80
|
+
// Check if file exists
|
|
81
|
+
const exists = await fs.pathExists(absolutePath);
|
|
82
|
+
if (!exists) {
|
|
83
|
+
return {
|
|
84
|
+
path: filePath,
|
|
85
|
+
exists: false,
|
|
86
|
+
hasContent: false,
|
|
87
|
+
lineCount: 0,
|
|
88
|
+
reason: 'File does not exist'
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Read file content
|
|
92
|
+
const content = await fs.readFile(absolutePath, 'utf-8');
|
|
93
|
+
const lines = content.split('\n');
|
|
94
|
+
const nonEmptyLines = lines.filter(line => line.trim().length > 0);
|
|
95
|
+
// Check line count
|
|
96
|
+
if (nonEmptyLines.length < this.options.minLines) {
|
|
97
|
+
return {
|
|
98
|
+
path: filePath,
|
|
99
|
+
exists: true,
|
|
100
|
+
hasContent: false,
|
|
101
|
+
lineCount: nonEmptyLines.length,
|
|
102
|
+
reason: `Only ${nonEmptyLines.length} non-empty lines (minimum: ${this.options.minLines})`
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// Check character count
|
|
106
|
+
const trimmedContent = content.trim();
|
|
107
|
+
if (trimmedContent.length < this.options.minChars) {
|
|
108
|
+
return {
|
|
109
|
+
path: filePath,
|
|
110
|
+
exists: true,
|
|
111
|
+
hasContent: false,
|
|
112
|
+
lineCount: nonEmptyLines.length,
|
|
113
|
+
reason: `Only ${trimmedContent.length} characters (minimum: ${this.options.minChars})`
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Check for stub patterns (common placeholder patterns)
|
|
117
|
+
const stubPatterns = [
|
|
118
|
+
/^\/\/\s*TODO:/i,
|
|
119
|
+
/^#\s*TODO:/i,
|
|
120
|
+
/^\s*throw new Error\(['"]Not implemented['"]\)/i,
|
|
121
|
+
/^\s*return null;?\s*$/m,
|
|
122
|
+
/^\s*pass\s*$/m, // Python
|
|
123
|
+
/^\s*\.\.\.$/m // TypeScript
|
|
124
|
+
];
|
|
125
|
+
const isStub = stubPatterns.some(pattern => pattern.test(trimmedContent));
|
|
126
|
+
if (isStub) {
|
|
127
|
+
return {
|
|
128
|
+
path: filePath,
|
|
129
|
+
exists: true,
|
|
130
|
+
hasContent: false,
|
|
131
|
+
lineCount: nonEmptyLines.length,
|
|
132
|
+
reason: 'File contains stub/placeholder code'
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// All checks passed
|
|
136
|
+
return {
|
|
137
|
+
path: filePath,
|
|
138
|
+
exists: true,
|
|
139
|
+
hasContent: true,
|
|
140
|
+
lineCount: nonEmptyLines.length
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Extract file paths from task description
|
|
145
|
+
*
|
|
146
|
+
* Supports multiple formats:
|
|
147
|
+
* - **Files**: src/foo.ts, src/bar.ts
|
|
148
|
+
* - **Files to create**: src/foo.ts
|
|
149
|
+
* - **Files to modify**: src/bar.ts
|
|
150
|
+
* - Inline code blocks with file paths
|
|
151
|
+
*
|
|
152
|
+
* @param description - Task description text
|
|
153
|
+
* @returns Array of file paths
|
|
154
|
+
*/
|
|
155
|
+
extractFilePaths(description) {
|
|
156
|
+
const paths = new Set();
|
|
157
|
+
// Pattern 1: **Files**: path1, path2, path3
|
|
158
|
+
const filesMatch = description.match(/\*\*Files\*\*:\s*([^\n]+)/i);
|
|
159
|
+
if (filesMatch) {
|
|
160
|
+
const filePaths = filesMatch[1].split(',').map(p => p.trim());
|
|
161
|
+
filePaths.forEach(p => paths.add(p));
|
|
162
|
+
}
|
|
163
|
+
// Pattern 2: **Files to create**: path1, path2
|
|
164
|
+
const createMatch = description.match(/\*\*Files to create\*\*:\s*([^\n]+)/i);
|
|
165
|
+
if (createMatch) {
|
|
166
|
+
const filePaths = createMatch[1].split(',').map(p => p.trim());
|
|
167
|
+
filePaths.forEach(p => paths.add(p));
|
|
168
|
+
}
|
|
169
|
+
// Pattern 3: **Files to modify**: path1, path2
|
|
170
|
+
const modifyMatch = description.match(/\*\*Files to modify\*\*:\s*([^\n]+)/i);
|
|
171
|
+
if (modifyMatch) {
|
|
172
|
+
const filePaths = modifyMatch[1].split(',').map(p => p.trim());
|
|
173
|
+
filePaths.forEach(p => paths.add(p));
|
|
174
|
+
}
|
|
175
|
+
// Pattern 4: Inline file references (e.g., `src/foo/bar.ts`)
|
|
176
|
+
const inlineMatches = description.matchAll(/`([a-zA-Z0-9_\-./]+\.(ts|js|tsx|jsx|py|java|go|rs|cpp|c|h))`/g);
|
|
177
|
+
for (const match of inlineMatches) {
|
|
178
|
+
paths.add(match[1]);
|
|
179
|
+
}
|
|
180
|
+
// Pattern 5: Markdown list items with file paths
|
|
181
|
+
const listMatches = description.matchAll(/^[-*]\s+([a-zA-Z0-9_\-./]+\.(ts|js|tsx|jsx|py|java|go|rs|cpp|c|h))/gm);
|
|
182
|
+
for (const match of listMatches) {
|
|
183
|
+
paths.add(match[1]);
|
|
184
|
+
}
|
|
185
|
+
return Array.from(paths);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Batch validate multiple tasks
|
|
189
|
+
*
|
|
190
|
+
* @param tasks - Array of {taskId, description}
|
|
191
|
+
* @returns Array of validation results
|
|
192
|
+
*/
|
|
193
|
+
async validateTasks(tasks) {
|
|
194
|
+
// Use parallel validation for performance
|
|
195
|
+
const validationPromises = tasks.map(task => this.validateTask(task.description, task.taskId));
|
|
196
|
+
return Promise.all(validationPromises);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get summary of validation results
|
|
200
|
+
*
|
|
201
|
+
* @param results - Array of task validation results
|
|
202
|
+
* @returns Summary statistics
|
|
203
|
+
*/
|
|
204
|
+
summarizeResults(results) {
|
|
205
|
+
const total = results.length;
|
|
206
|
+
const valid = results.filter(r => r.valid).length;
|
|
207
|
+
const invalid = results.filter(r => !r.valid).length;
|
|
208
|
+
const noFiles = results.filter(r => r.files.length === 0).length;
|
|
209
|
+
const invalidTasks = results.filter(r => !r.valid).map(r => r.taskId);
|
|
210
|
+
return {
|
|
211
|
+
total,
|
|
212
|
+
valid,
|
|
213
|
+
invalid,
|
|
214
|
+
noFiles,
|
|
215
|
+
invalidTasks
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=CodeValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeValidator.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/CodeValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue State Manager - Auto-update GitHub issue state based on progress
|
|
3
|
+
*
|
|
4
|
+
* Rules:
|
|
5
|
+
* - 0% complete → State = open
|
|
6
|
+
* - 1-99% complete → State = open, label = in-progress
|
|
7
|
+
* - 100% complete → State = closed
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Issue state
|
|
11
|
+
*/
|
|
12
|
+
export type IssueState = 'open' | 'closed';
|
|
13
|
+
/**
|
|
14
|
+
* State change result
|
|
15
|
+
*/
|
|
16
|
+
export interface StateChangeResult {
|
|
17
|
+
/** Previous state */
|
|
18
|
+
previousState: IssueState;
|
|
19
|
+
/** New state */
|
|
20
|
+
newState: IssueState;
|
|
21
|
+
/** State changed */
|
|
22
|
+
changed: boolean;
|
|
23
|
+
/** Labels added */
|
|
24
|
+
labelsAdded: string[];
|
|
25
|
+
/** Labels removed */
|
|
26
|
+
labelsRemoved: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Progress info
|
|
30
|
+
*/
|
|
31
|
+
export interface ProgressInfo {
|
|
32
|
+
/** Total ACs */
|
|
33
|
+
totalAcs: number;
|
|
34
|
+
/** Completed ACs */
|
|
35
|
+
completedAcs: number;
|
|
36
|
+
/** AC completion percentage */
|
|
37
|
+
acPercentage: number;
|
|
38
|
+
/** Total tasks */
|
|
39
|
+
totalTasks: number;
|
|
40
|
+
/** Completed tasks */
|
|
41
|
+
completedTasks: number;
|
|
42
|
+
/** Task completion percentage */
|
|
43
|
+
taskPercentage: number;
|
|
44
|
+
/** Overall completion percentage */
|
|
45
|
+
overallPercentage: number;
|
|
46
|
+
/** Is 100% complete */
|
|
47
|
+
isComplete: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* IssueStateManager - Manages GitHub issue state
|
|
51
|
+
*/
|
|
52
|
+
export declare class IssueStateManager {
|
|
53
|
+
/**
|
|
54
|
+
* Determine issue state based on progress
|
|
55
|
+
*
|
|
56
|
+
* @param progress - Progress information
|
|
57
|
+
* @param currentState - Current issue state
|
|
58
|
+
* @returns State change result
|
|
59
|
+
*/
|
|
60
|
+
static determineState(progress: ProgressInfo, currentState: IssueState): StateChangeResult;
|
|
61
|
+
/**
|
|
62
|
+
* Calculate progress from acceptance criteria and tasks
|
|
63
|
+
*
|
|
64
|
+
* @param acs - Acceptance criteria
|
|
65
|
+
* @param tasks - Tasks
|
|
66
|
+
* @returns Progress information
|
|
67
|
+
*/
|
|
68
|
+
static calculateProgress(acs: Array<{
|
|
69
|
+
completed: boolean;
|
|
70
|
+
}>, tasks: Array<{
|
|
71
|
+
completed: boolean;
|
|
72
|
+
}>): ProgressInfo;
|
|
73
|
+
/**
|
|
74
|
+
* Format progress as markdown
|
|
75
|
+
*
|
|
76
|
+
* @param progress - Progress information
|
|
77
|
+
* @returns Markdown string
|
|
78
|
+
*/
|
|
79
|
+
static formatProgressMarkdown(progress: ProgressInfo): string;
|
|
80
|
+
/**
|
|
81
|
+
* Generate ASCII progress bar
|
|
82
|
+
*
|
|
83
|
+
* @param percentage - Completion percentage (0-100)
|
|
84
|
+
* @returns Progress bar string
|
|
85
|
+
*/
|
|
86
|
+
private static generateProgressBar;
|
|
87
|
+
/**
|
|
88
|
+
* Build GitHub CLI command to update issue state
|
|
89
|
+
*
|
|
90
|
+
* @param issueNumber - GitHub issue number
|
|
91
|
+
* @param state - New state
|
|
92
|
+
* @param labelsToAdd - Labels to add
|
|
93
|
+
* @param labelsToRemove - Labels to remove
|
|
94
|
+
* @returns gh CLI command
|
|
95
|
+
*/
|
|
96
|
+
static buildGitHubCommand(issueNumber: number, state: IssueState, labelsToAdd: string[], labelsToRemove: string[]): string;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=IssueStateManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IssueStateManager.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/IssueStateManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,aAAa,EAAE,UAAU,CAAC;IAE1B,gBAAgB;IAChB,QAAQ,EAAE,UAAU,CAAC;IAErB,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IAEjB,mBAAmB;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,qBAAqB;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IAErB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IAEnB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IAEvB,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IAEvB,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAE1B,uBAAuB;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CACnB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,UAAU,GACvB,iBAAiB;IA8BpB;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CACtB,GAAG,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,EAClC,KAAK,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,GACnC,YAAY;IA8Bf;;;;;OAKG;IACH,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;IAyB7D;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC;;;;;;;;OAQG;IACH,MAAM,CAAC,kBAAkB,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,EAAE,EACrB,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM;CAsBV"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue State Manager - Auto-update GitHub issue state based on progress
|
|
3
|
+
*
|
|
4
|
+
* Rules:
|
|
5
|
+
* - 0% complete → State = open
|
|
6
|
+
* - 1-99% complete → State = open, label = in-progress
|
|
7
|
+
* - 100% complete → State = closed
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* IssueStateManager - Manages GitHub issue state
|
|
11
|
+
*/
|
|
12
|
+
export class IssueStateManager {
|
|
13
|
+
/**
|
|
14
|
+
* Determine issue state based on progress
|
|
15
|
+
*
|
|
16
|
+
* @param progress - Progress information
|
|
17
|
+
* @param currentState - Current issue state
|
|
18
|
+
* @returns State change result
|
|
19
|
+
*/
|
|
20
|
+
static determineState(progress, currentState) {
|
|
21
|
+
const result = {
|
|
22
|
+
previousState: currentState,
|
|
23
|
+
newState: currentState,
|
|
24
|
+
changed: false,
|
|
25
|
+
labelsAdded: [],
|
|
26
|
+
labelsRemoved: []
|
|
27
|
+
};
|
|
28
|
+
// Determine new state based on progress
|
|
29
|
+
if (progress.isComplete) {
|
|
30
|
+
// 100% complete → Close issue
|
|
31
|
+
result.newState = 'closed';
|
|
32
|
+
result.labelsRemoved.push('in-progress');
|
|
33
|
+
}
|
|
34
|
+
else if (progress.overallPercentage > 0) {
|
|
35
|
+
// 1-99% complete → Open with in-progress label
|
|
36
|
+
result.newState = 'open';
|
|
37
|
+
result.labelsAdded.push('in-progress');
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// 0% complete → Open without in-progress label
|
|
41
|
+
result.newState = 'open';
|
|
42
|
+
result.labelsRemoved.push('in-progress');
|
|
43
|
+
}
|
|
44
|
+
// Check if state changed
|
|
45
|
+
result.changed = result.newState !== result.previousState;
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Calculate progress from acceptance criteria and tasks
|
|
50
|
+
*
|
|
51
|
+
* @param acs - Acceptance criteria
|
|
52
|
+
* @param tasks - Tasks
|
|
53
|
+
* @returns Progress information
|
|
54
|
+
*/
|
|
55
|
+
static calculateProgress(acs, tasks) {
|
|
56
|
+
const totalAcs = acs.length;
|
|
57
|
+
const completedAcs = acs.filter(ac => ac.completed).length;
|
|
58
|
+
const acPercentage = totalAcs > 0 ? Math.round((completedAcs / totalAcs) * 100) : 0;
|
|
59
|
+
const totalTasks = tasks.length;
|
|
60
|
+
const completedTasks = tasks.filter(t => t.completed).length;
|
|
61
|
+
const taskPercentage = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0;
|
|
62
|
+
// Overall percentage: average of AC and Task percentages
|
|
63
|
+
// If no tasks, use AC percentage only
|
|
64
|
+
const overallPercentage = totalTasks > 0
|
|
65
|
+
? Math.round((acPercentage + taskPercentage) / 2)
|
|
66
|
+
: acPercentage;
|
|
67
|
+
const isComplete = totalAcs > 0 && completedAcs === totalAcs &&
|
|
68
|
+
(totalTasks === 0 || completedTasks === totalTasks);
|
|
69
|
+
return {
|
|
70
|
+
totalAcs,
|
|
71
|
+
completedAcs,
|
|
72
|
+
acPercentage,
|
|
73
|
+
totalTasks,
|
|
74
|
+
completedTasks,
|
|
75
|
+
taskPercentage,
|
|
76
|
+
overallPercentage,
|
|
77
|
+
isComplete
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Format progress as markdown
|
|
82
|
+
*
|
|
83
|
+
* @param progress - Progress information
|
|
84
|
+
* @returns Markdown string
|
|
85
|
+
*/
|
|
86
|
+
static formatProgressMarkdown(progress) {
|
|
87
|
+
const sections = [];
|
|
88
|
+
sections.push('## Progress');
|
|
89
|
+
sections.push('');
|
|
90
|
+
// AC progress
|
|
91
|
+
sections.push(`**Acceptance Criteria**: ${progress.completedAcs}/${progress.totalAcs} (${progress.acPercentage}%)`);
|
|
92
|
+
// Task progress
|
|
93
|
+
if (progress.totalTasks > 0) {
|
|
94
|
+
sections.push(`**Tasks**: ${progress.completedTasks}/${progress.totalTasks} (${progress.taskPercentage}%)`);
|
|
95
|
+
}
|
|
96
|
+
// Overall progress
|
|
97
|
+
sections.push(`**Overall**: ${progress.overallPercentage}%`);
|
|
98
|
+
// Progress bar
|
|
99
|
+
const progressBar = this.generateProgressBar(progress.overallPercentage);
|
|
100
|
+
sections.push('');
|
|
101
|
+
sections.push(progressBar);
|
|
102
|
+
return sections.join('\n');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generate ASCII progress bar
|
|
106
|
+
*
|
|
107
|
+
* @param percentage - Completion percentage (0-100)
|
|
108
|
+
* @returns Progress bar string
|
|
109
|
+
*/
|
|
110
|
+
static generateProgressBar(percentage) {
|
|
111
|
+
const total = 20;
|
|
112
|
+
const filled = Math.round((percentage / 100) * total);
|
|
113
|
+
const empty = total - filled;
|
|
114
|
+
const bar = '█'.repeat(filled) + '░'.repeat(empty);
|
|
115
|
+
return `\`${bar}\` ${percentage}%`;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Build GitHub CLI command to update issue state
|
|
119
|
+
*
|
|
120
|
+
* @param issueNumber - GitHub issue number
|
|
121
|
+
* @param state - New state
|
|
122
|
+
* @param labelsToAdd - Labels to add
|
|
123
|
+
* @param labelsToRemove - Labels to remove
|
|
124
|
+
* @returns gh CLI command
|
|
125
|
+
*/
|
|
126
|
+
static buildGitHubCommand(issueNumber, state, labelsToAdd, labelsToRemove) {
|
|
127
|
+
const commands = [];
|
|
128
|
+
// Update state
|
|
129
|
+
if (state === 'closed') {
|
|
130
|
+
commands.push(`gh issue close ${issueNumber}`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
commands.push(`gh issue reopen ${issueNumber}`);
|
|
134
|
+
}
|
|
135
|
+
// Add labels
|
|
136
|
+
if (labelsToAdd.length > 0) {
|
|
137
|
+
commands.push(`gh issue edit ${issueNumber} --add-label "${labelsToAdd.join(',')}"`);
|
|
138
|
+
}
|
|
139
|
+
// Remove labels
|
|
140
|
+
if (labelsToRemove.length > 0) {
|
|
141
|
+
commands.push(`gh issue edit ${issueNumber} --remove-label "${labelsToRemove.join(',')}"`);
|
|
142
|
+
}
|
|
143
|
+
return commands.join(' && ');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=IssueStateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IssueStateManager.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/IssueStateManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Three-Layer Bidirectional Sync Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles synchronization across three layers:
|
|
5
|
+
* - Layer 1: GitHub Issue (stakeholder UI)
|
|
6
|
+
* - Layer 2: Living Docs User Story files (intermediate representation)
|
|
7
|
+
* - Layer 3: Increment spec.md + tasks.md (source of truth)
|
|
8
|
+
*
|
|
9
|
+
* Supports two sync flows:
|
|
10
|
+
* 1. GitHub → Living Docs → Increment (stakeholder checks checkbox)
|
|
11
|
+
* 2. Increment → Living Docs → GitHub (developer completes work)
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Code validation (reopen tasks if code doesn't exist)
|
|
15
|
+
* - Completion propagation (Tasks → ACs → User Stories)
|
|
16
|
+
* - Conflict resolution (Increment always wins)
|
|
17
|
+
*
|
|
18
|
+
* @module ThreeLayerSyncManager
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Acceptance Criterion with completion state
|
|
22
|
+
*/
|
|
23
|
+
export interface AcceptanceCriterion {
|
|
24
|
+
id: string;
|
|
25
|
+
userStoryId: string;
|
|
26
|
+
description: string;
|
|
27
|
+
completed: boolean;
|
|
28
|
+
projects: string[];
|
|
29
|
+
rawLine: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Task with completion state and AC references
|
|
33
|
+
*/
|
|
34
|
+
export interface Task {
|
|
35
|
+
id: string;
|
|
36
|
+
title: string;
|
|
37
|
+
completed: boolean;
|
|
38
|
+
completedDate?: string;
|
|
39
|
+
acIds: string[];
|
|
40
|
+
filePaths?: string[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Change detected during sync
|
|
44
|
+
*/
|
|
45
|
+
export interface SyncChange {
|
|
46
|
+
type: 'ac' | 'task';
|
|
47
|
+
id: string;
|
|
48
|
+
completed: boolean;
|
|
49
|
+
layer: 'github' | 'living-docs' | 'increment';
|
|
50
|
+
userStoryPath?: string;
|
|
51
|
+
incrementPath?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Sync result
|
|
55
|
+
*/
|
|
56
|
+
export interface SyncResult {
|
|
57
|
+
acsUpdated: number;
|
|
58
|
+
tasksUpdated: number;
|
|
59
|
+
tasksReopened: number;
|
|
60
|
+
conflicts: string[];
|
|
61
|
+
errors: string[];
|
|
62
|
+
}
|
|
63
|
+
export declare class ThreeLayerSyncManager {
|
|
64
|
+
private codeValidator;
|
|
65
|
+
private userStoryFileCache;
|
|
66
|
+
private projectRoot;
|
|
67
|
+
constructor(projectRoot?: string);
|
|
68
|
+
/**
|
|
69
|
+
* Clear User Story file cache
|
|
70
|
+
* Call this when file structure changes or for testing
|
|
71
|
+
*/
|
|
72
|
+
clearCache(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Sync from GitHub to Increment (Flow 1: GitHub → Living Docs → Increment)
|
|
75
|
+
*
|
|
76
|
+
* Triggered when stakeholder checks AC/Task checkbox in GitHub issue.
|
|
77
|
+
*/
|
|
78
|
+
syncGitHubToIncrement(issueNumber: number, incrementPath: string, livingDocsPath: string): Promise<SyncResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Sync from Increment to GitHub (Flow 2: Increment → Living Docs → GitHub)
|
|
81
|
+
*
|
|
82
|
+
* Triggered when developer completes work and updates increment files.
|
|
83
|
+
*/
|
|
84
|
+
syncIncrementToGitHub(incrementPath: string, livingDocsPath: string, issueNumber: number): Promise<SyncResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Validate that code exists for completed task
|
|
87
|
+
* Uses CodeValidator for comprehensive validation
|
|
88
|
+
*/
|
|
89
|
+
private validateCodeExists;
|
|
90
|
+
/**
|
|
91
|
+
* Reopen task if code validation fails
|
|
92
|
+
*/
|
|
93
|
+
private reopenTask;
|
|
94
|
+
/**
|
|
95
|
+
* Propagate completion from Tasks → ACs → User Stories (bottom-up)
|
|
96
|
+
*/
|
|
97
|
+
propagateCompletion(incrementPath: string, livingDocsPath: string): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Fetch GitHub issue state
|
|
100
|
+
*/
|
|
101
|
+
private fetchGitHubIssueState;
|
|
102
|
+
/**
|
|
103
|
+
* Extract ACs from GitHub issue body
|
|
104
|
+
*/
|
|
105
|
+
private extractAcsFromIssue;
|
|
106
|
+
/**
|
|
107
|
+
* Extract Tasks from GitHub issue body
|
|
108
|
+
*/
|
|
109
|
+
private extractTasksFromIssue;
|
|
110
|
+
/**
|
|
111
|
+
* Parse ACs from spec.md
|
|
112
|
+
*/
|
|
113
|
+
private parseAcceptanceCriteria;
|
|
114
|
+
/**
|
|
115
|
+
* Parse Tasks from tasks.md
|
|
116
|
+
*/
|
|
117
|
+
private parseTasks;
|
|
118
|
+
/**
|
|
119
|
+
* Group ACs by User Story ID
|
|
120
|
+
*/
|
|
121
|
+
private groupAcsByUserStory;
|
|
122
|
+
/**
|
|
123
|
+
* Filter tasks by AC IDs
|
|
124
|
+
*/
|
|
125
|
+
private filterTasksByAcIds;
|
|
126
|
+
/**
|
|
127
|
+
* Find User Story file by ID (with caching for performance)
|
|
128
|
+
*/
|
|
129
|
+
private findUserStoryFile;
|
|
130
|
+
/**
|
|
131
|
+
* Find User Story file that contains specific task
|
|
132
|
+
*/
|
|
133
|
+
private findUserStoryFileForTask;
|
|
134
|
+
/**
|
|
135
|
+
* Update AC in User Story file
|
|
136
|
+
*/
|
|
137
|
+
private updateUserStoryAc;
|
|
138
|
+
/**
|
|
139
|
+
* Update Task in User Story file
|
|
140
|
+
*/
|
|
141
|
+
private updateUserStoryTask;
|
|
142
|
+
/**
|
|
143
|
+
* Update multiple ACs in User Story file
|
|
144
|
+
*/
|
|
145
|
+
private updateUserStoryAcs;
|
|
146
|
+
/**
|
|
147
|
+
* Update multiple Tasks in User Story file
|
|
148
|
+
*/
|
|
149
|
+
private updateUserStoryTasks;
|
|
150
|
+
/**
|
|
151
|
+
* Update AC in increment spec.md
|
|
152
|
+
*/
|
|
153
|
+
private updateIncrementAc;
|
|
154
|
+
/**
|
|
155
|
+
* Update multiple ACs in increment spec.md
|
|
156
|
+
*/
|
|
157
|
+
private updateIncrementAcs;
|
|
158
|
+
/**
|
|
159
|
+
* Update multiple Tasks in increment tasks.md
|
|
160
|
+
*/
|
|
161
|
+
private updateIncrementTasks;
|
|
162
|
+
/**
|
|
163
|
+
* Update ACs in increment with conflict resolution (Increment wins)
|
|
164
|
+
*
|
|
165
|
+
* If GitHub and Increment disagree, Increment state wins as it's the source of truth.
|
|
166
|
+
* Conflicts are logged for transparency.
|
|
167
|
+
*/
|
|
168
|
+
private updateIncrementAcsWithConflictResolution;
|
|
169
|
+
/**
|
|
170
|
+
* Update Tasks in increment with conflict resolution (Increment wins)
|
|
171
|
+
*/
|
|
172
|
+
private updateIncrementTasksWithConflictResolution;
|
|
173
|
+
/**
|
|
174
|
+
* Update GitHub issue with ACs and Tasks
|
|
175
|
+
*/
|
|
176
|
+
private updateGitHubIssue;
|
|
177
|
+
/**
|
|
178
|
+
* Add comment to GitHub issue
|
|
179
|
+
*/
|
|
180
|
+
private addGitHubComment;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=ThreeLayerSyncManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreeLayerSyncManager.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/ThreeLayerSyncManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,WAAW,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAyC;IACnE,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAsB;IAK/C;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;OAIG;IACG,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC;IAuEtB;;;;OAIG;IACG,qBAAqB,CACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC;IAuDtB;;;OAGG;YACW,kBAAkB;IAMhC;;OAEG;YACW,UAAU;IA6BxB;;OAEG;IACG,mBAAmB,CACvB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IA4ChB;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;IACH,OAAO,CAAC,UAAU;IA6ClB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;YACW,iBAAiB;IAuB/B;;OAEG;YACW,wBAAwB;IAgBtC;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;YACW,mBAAmB;IAWjC;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;YACW,oBAAoB;IAYlC;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;YACW,kBAAkB;IAahC;;OAEG;YACW,oBAAoB;IAqBlC;;;;;OAKG;YACW,wCAAwC;IAmCtD;;OAEG;YACW,0CAA0C;IAyCxD;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;YACW,gBAAgB;CAS/B"}
|