specweave 0.21.2 → 0.21.3
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 +232 -5
- 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/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/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 +205 -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 +55 -0
- package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -0
- package/dist/src/core/living-docs/SpecDistributor.js +216 -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/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/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/InitFlow.d.ts +37 -0
- package/dist/src/init/InitFlow.d.ts.map +1 -0
- package/dist/src/init/InitFlow.js +209 -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/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 +9 -3
- 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-github/lib/IssueStateManager.js +117 -0
- package/plugins/specweave-github/lib/IssueStateManager.ts +231 -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-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/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,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serverless Cost Estimator
|
|
3
|
+
*
|
|
4
|
+
* Calculates accurate costs for serverless platforms including:
|
|
5
|
+
* - Compute costs (GB-seconds)
|
|
6
|
+
* - Request costs
|
|
7
|
+
* - Data transfer costs
|
|
8
|
+
* - Free tier deductions
|
|
9
|
+
*/
|
|
10
|
+
import { PlatformDataLoader } from './platform-data-loader.js';
|
|
11
|
+
/**
|
|
12
|
+
* Estimate costs for a serverless platform
|
|
13
|
+
*
|
|
14
|
+
* @param platform - The serverless platform to estimate costs for
|
|
15
|
+
* @param input - Usage parameters
|
|
16
|
+
* @returns Detailed cost estimation with breakdown
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const input = {
|
|
21
|
+
* requestsPerMonth: 1000000,
|
|
22
|
+
* avgExecutionTimeMs: 200,
|
|
23
|
+
* memoryMb: 512,
|
|
24
|
+
* dataTransferGb: 5
|
|
25
|
+
* };
|
|
26
|
+
* const result = estimateCost(platform, input);
|
|
27
|
+
* console.log(`Monthly cost: $${result.monthlyEstimate}`);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export function estimateCost(platform, input) {
|
|
31
|
+
// Validate input
|
|
32
|
+
validateInput(input);
|
|
33
|
+
const { pricing } = platform;
|
|
34
|
+
// Calculate GB-seconds
|
|
35
|
+
// Formula: (requests × execution_time_ms × memory_MB) / (1000 × 1024)
|
|
36
|
+
const gbSeconds = (input.requestsPerMonth * input.avgExecutionTimeMs * input.memoryMb) / (1000 * 1024);
|
|
37
|
+
// Calculate raw costs before free tier
|
|
38
|
+
const computeCostRaw = gbSeconds * pricing.payAsYouGo.computePerGbSecond;
|
|
39
|
+
const requestCostRaw = (input.requestsPerMonth / 1000000) * pricing.payAsYouGo.requestsPer1M;
|
|
40
|
+
const dataTransferCostRaw = input.dataTransferGb * pricing.payAsYouGo.dataTransferPerGb;
|
|
41
|
+
// Calculate free tier deductions
|
|
42
|
+
const freeTierDeduction = calculateFreeTierDeduction({
|
|
43
|
+
compute: computeCostRaw,
|
|
44
|
+
requests: requestCostRaw,
|
|
45
|
+
dataTransfer: dataTransferCostRaw,
|
|
46
|
+
}, {
|
|
47
|
+
gbSeconds,
|
|
48
|
+
requests: input.requestsPerMonth,
|
|
49
|
+
dataTransferGb: input.dataTransferGb,
|
|
50
|
+
}, platform);
|
|
51
|
+
// Calculate billable amounts
|
|
52
|
+
const computeCost = Math.max(0, computeCostRaw - freeTierDeduction.compute);
|
|
53
|
+
const requestCost = Math.max(0, requestCostRaw - freeTierDeduction.requests);
|
|
54
|
+
const dataTransferCost = Math.max(0, dataTransferCostRaw - freeTierDeduction.dataTransfer);
|
|
55
|
+
const total = computeCostRaw + requestCostRaw + dataTransferCostRaw;
|
|
56
|
+
const totalFreeTierDeduction = freeTierDeduction.compute + freeTierDeduction.requests + freeTierDeduction.dataTransfer;
|
|
57
|
+
const billableAmount = computeCost + requestCost + dataTransferCost;
|
|
58
|
+
const breakdown = {
|
|
59
|
+
compute: computeCost,
|
|
60
|
+
requests: requestCost,
|
|
61
|
+
dataTransfer: dataTransferCost,
|
|
62
|
+
total,
|
|
63
|
+
freeTierDeduction: totalFreeTierDeduction,
|
|
64
|
+
billableAmount,
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
platform,
|
|
68
|
+
input,
|
|
69
|
+
breakdown,
|
|
70
|
+
withinFreeTier: billableAmount === 0,
|
|
71
|
+
monthlyEstimate: billableAmount,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Estimate costs by platform ID
|
|
76
|
+
*
|
|
77
|
+
* @param platformId - Platform identifier (e.g., 'aws-lambda', 'firebase')
|
|
78
|
+
* @param input - Usage parameters
|
|
79
|
+
* @returns Cost estimation result
|
|
80
|
+
*/
|
|
81
|
+
export async function estimateCostById(platformId, input) {
|
|
82
|
+
const loader = new PlatformDataLoader();
|
|
83
|
+
const platform = await loader.loadById(platformId);
|
|
84
|
+
if (!platform) {
|
|
85
|
+
throw new Error(`Platform not found: ${platformId}`);
|
|
86
|
+
}
|
|
87
|
+
return estimateCost(platform, input);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Calculate free tier deductions
|
|
91
|
+
*/
|
|
92
|
+
function calculateFreeTierDeduction(costs, usage, platform) {
|
|
93
|
+
const { freeTier, payAsYouGo } = platform.pricing;
|
|
94
|
+
// Calculate how much of each resource is covered by free tier
|
|
95
|
+
const freeComputeGbSeconds = Math.min(usage.gbSeconds, freeTier.computeGbSeconds);
|
|
96
|
+
const freeRequests = Math.min(usage.requests, freeTier.requests);
|
|
97
|
+
const freeDataTransferGb = Math.min(usage.dataTransferGb, freeTier.dataTransferGb);
|
|
98
|
+
// Calculate the monetary value of free tier coverage
|
|
99
|
+
const computeDeduction = freeComputeGbSeconds * payAsYouGo.computePerGbSecond;
|
|
100
|
+
const requestsDeduction = (freeRequests / 1000000) * payAsYouGo.requestsPer1M;
|
|
101
|
+
const dataTransferDeduction = freeDataTransferGb * payAsYouGo.dataTransferPerGb;
|
|
102
|
+
return {
|
|
103
|
+
compute: Math.min(computeDeduction, costs.compute),
|
|
104
|
+
requests: Math.min(requestsDeduction, costs.requests),
|
|
105
|
+
dataTransfer: Math.min(dataTransferDeduction, costs.dataTransfer),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Validate cost estimation input
|
|
110
|
+
*/
|
|
111
|
+
function validateInput(input) {
|
|
112
|
+
if (input.requestsPerMonth < 0) {
|
|
113
|
+
throw new Error('Requests per month cannot be negative');
|
|
114
|
+
}
|
|
115
|
+
if (input.avgExecutionTimeMs < 0) {
|
|
116
|
+
throw new Error('Average execution time cannot be negative');
|
|
117
|
+
}
|
|
118
|
+
if (input.memoryMb < 0) {
|
|
119
|
+
throw new Error('Memory cannot be negative');
|
|
120
|
+
}
|
|
121
|
+
if (input.dataTransferGb < 0) {
|
|
122
|
+
throw new Error('Data transfer cannot be negative');
|
|
123
|
+
}
|
|
124
|
+
// Zero requests is valid (e.g., for testing or estimation purposes)
|
|
125
|
+
// No warning needed as it's a valid scenario
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=cost-estimator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-estimator.js","sourceRoot":"","sources":["../../../../src/core/serverless/cost-estimator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serverless Cost Optimizer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes usage patterns and provides optimization recommendations to reduce costs:
|
|
5
|
+
* - Memory right-sizing
|
|
6
|
+
* - Caching strategies
|
|
7
|
+
* - Batching recommendations
|
|
8
|
+
* - Reserved capacity
|
|
9
|
+
* - Compression
|
|
10
|
+
* - CDN usage
|
|
11
|
+
*/
|
|
12
|
+
import type { ServerlessPlatform } from './types.js';
|
|
13
|
+
import type { CostEstimationInput } from './cost-estimator.js';
|
|
14
|
+
/**
|
|
15
|
+
* Types of optimization recommendations
|
|
16
|
+
*/
|
|
17
|
+
export type OptimizationType = 'memory' | 'caching' | 'batching' | 'reserved-capacity' | 'compression' | 'cdn';
|
|
18
|
+
/**
|
|
19
|
+
* Individual optimization recommendation
|
|
20
|
+
*/
|
|
21
|
+
export interface OptimizationRecommendation {
|
|
22
|
+
type: OptimizationType;
|
|
23
|
+
description: string;
|
|
24
|
+
estimatedSavings: number;
|
|
25
|
+
implementationComplexity: 'low' | 'medium' | 'high';
|
|
26
|
+
priority: 'high' | 'medium' | 'low';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Complete cost optimization analysis result
|
|
30
|
+
*/
|
|
31
|
+
export interface CostOptimizationResult {
|
|
32
|
+
currentCost: number;
|
|
33
|
+
optimizedCost: number;
|
|
34
|
+
potentialSavings: number;
|
|
35
|
+
recommendations: OptimizationRecommendation[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Analyze usage and generate cost optimization recommendations
|
|
39
|
+
*
|
|
40
|
+
* @param platform - The serverless platform
|
|
41
|
+
* @param input - Current usage parameters
|
|
42
|
+
* @returns Optimization analysis with recommendations
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const input = {
|
|
47
|
+
* requestsPerMonth: 5000000,
|
|
48
|
+
* avgExecutionTimeMs: 500,
|
|
49
|
+
* memoryMb: 1024,
|
|
50
|
+
* dataTransferGb: 50
|
|
51
|
+
* };
|
|
52
|
+
* const result = optimizeCost(platform, input);
|
|
53
|
+
* console.log(`Potential savings: $${result.potentialSavings}/month`);
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function optimizeCost(platform: ServerlessPlatform, input: CostEstimationInput): CostOptimizationResult;
|
|
57
|
+
//# sourceMappingURL=cost-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-optimizer.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/cost-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,mBAAmB,GACnB,aAAa,GACb,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpD,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,0BAA0B,EAAE,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,mBAAmB,GACzB,sBAAsB,CA+DxB"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serverless Cost Optimizer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes usage patterns and provides optimization recommendations to reduce costs:
|
|
5
|
+
* - Memory right-sizing
|
|
6
|
+
* - Caching strategies
|
|
7
|
+
* - Batching recommendations
|
|
8
|
+
* - Reserved capacity
|
|
9
|
+
* - Compression
|
|
10
|
+
* - CDN usage
|
|
11
|
+
*/
|
|
12
|
+
import { estimateCost } from './cost-estimator.js';
|
|
13
|
+
/**
|
|
14
|
+
* Analyze usage and generate cost optimization recommendations
|
|
15
|
+
*
|
|
16
|
+
* @param platform - The serverless platform
|
|
17
|
+
* @param input - Current usage parameters
|
|
18
|
+
* @returns Optimization analysis with recommendations
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const input = {
|
|
23
|
+
* requestsPerMonth: 5000000,
|
|
24
|
+
* avgExecutionTimeMs: 500,
|
|
25
|
+
* memoryMb: 1024,
|
|
26
|
+
* dataTransferGb: 50
|
|
27
|
+
* };
|
|
28
|
+
* const result = optimizeCost(platform, input);
|
|
29
|
+
* console.log(`Potential savings: $${result.potentialSavings}/month`);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export function optimizeCost(platform, input) {
|
|
33
|
+
const currentEstimation = estimateCost(platform, input);
|
|
34
|
+
const currentCost = currentEstimation.monthlyEstimate;
|
|
35
|
+
const recommendations = [];
|
|
36
|
+
let optimizedCost = currentCost;
|
|
37
|
+
// 1. Memory right-sizing
|
|
38
|
+
const memoryOptimization = analyzeMemoryOptimization(platform, input, currentCost);
|
|
39
|
+
if (memoryOptimization) {
|
|
40
|
+
recommendations.push(memoryOptimization);
|
|
41
|
+
optimizedCost -= memoryOptimization.estimatedSavings;
|
|
42
|
+
}
|
|
43
|
+
// 2. Caching recommendations
|
|
44
|
+
const cachingOptimization = analyzeCachingOpportunity(input, currentCost);
|
|
45
|
+
if (cachingOptimization) {
|
|
46
|
+
recommendations.push(cachingOptimization);
|
|
47
|
+
optimizedCost -= cachingOptimization.estimatedSavings;
|
|
48
|
+
}
|
|
49
|
+
// 3. Batching recommendations
|
|
50
|
+
const batchingOptimization = analyzeBatchingOpportunity(input, currentCost);
|
|
51
|
+
if (batchingOptimization) {
|
|
52
|
+
recommendations.push(batchingOptimization);
|
|
53
|
+
optimizedCost -= batchingOptimization.estimatedSavings;
|
|
54
|
+
}
|
|
55
|
+
// 4. Reserved capacity
|
|
56
|
+
const reservedCapacityOptimization = analyzeReservedCapacity(input, currentCost);
|
|
57
|
+
if (reservedCapacityOptimization) {
|
|
58
|
+
recommendations.push(reservedCapacityOptimization);
|
|
59
|
+
optimizedCost -= reservedCapacityOptimization.estimatedSavings;
|
|
60
|
+
}
|
|
61
|
+
// 5. Compression
|
|
62
|
+
const compressionOptimization = analyzeCompression(input, currentCost);
|
|
63
|
+
if (compressionOptimization) {
|
|
64
|
+
recommendations.push(compressionOptimization);
|
|
65
|
+
optimizedCost -= compressionOptimization.estimatedSavings;
|
|
66
|
+
}
|
|
67
|
+
// 6. CDN recommendations
|
|
68
|
+
const cdnOptimization = analyzeCdnOpportunity(input, currentCost);
|
|
69
|
+
if (cdnOptimization) {
|
|
70
|
+
recommendations.push(cdnOptimization);
|
|
71
|
+
optimizedCost -= cdnOptimization.estimatedSavings;
|
|
72
|
+
}
|
|
73
|
+
// Sort recommendations by priority and savings
|
|
74
|
+
recommendations.sort((a, b) => {
|
|
75
|
+
const priorityOrder = { high: 3, medium: 2, low: 1 };
|
|
76
|
+
const priorityDiff = priorityOrder[b.priority] - priorityOrder[a.priority];
|
|
77
|
+
if (priorityDiff !== 0)
|
|
78
|
+
return priorityDiff;
|
|
79
|
+
return b.estimatedSavings - a.estimatedSavings;
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
currentCost,
|
|
83
|
+
optimizedCost: Math.max(0, optimizedCost),
|
|
84
|
+
potentialSavings: currentCost - Math.max(0, optimizedCost),
|
|
85
|
+
recommendations,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Analyze memory right-sizing opportunities
|
|
90
|
+
*/
|
|
91
|
+
function analyzeMemoryOptimization(platform, input, currentCost) {
|
|
92
|
+
// Test different memory configurations
|
|
93
|
+
const memoryOptions = [128, 256, 512, 1024, 2048];
|
|
94
|
+
const currentMemory = input.memoryMb;
|
|
95
|
+
// Only recommend if current memory is not already minimal
|
|
96
|
+
if (currentMemory <= 128) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
// Find optimal memory (assuming execution time might improve with more memory)
|
|
100
|
+
let bestMemory = currentMemory;
|
|
101
|
+
let bestCost = currentCost;
|
|
102
|
+
for (const memory of memoryOptions) {
|
|
103
|
+
if (memory >= currentMemory)
|
|
104
|
+
continue; // Only test smaller sizes
|
|
105
|
+
const testInput = { ...input, memoryMb: memory };
|
|
106
|
+
const estimation = estimateCost(platform, testInput);
|
|
107
|
+
if (estimation.monthlyEstimate < bestCost) {
|
|
108
|
+
bestCost = estimation.monthlyEstimate;
|
|
109
|
+
bestMemory = memory;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (bestMemory < currentMemory) {
|
|
113
|
+
const savings = currentCost - bestCost;
|
|
114
|
+
const savingsPercent = ((savings / currentCost) * 100).toFixed(1);
|
|
115
|
+
return {
|
|
116
|
+
type: 'memory',
|
|
117
|
+
description: `Reduce memory from ${currentMemory}MB to ${bestMemory}MB. This could save ${savingsPercent}% on compute costs. Test thoroughly to ensure performance is acceptable.`,
|
|
118
|
+
estimatedSavings: savings,
|
|
119
|
+
implementationComplexity: 'low',
|
|
120
|
+
priority: savings > currentCost * 0.2 ? 'high' : 'medium',
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Analyze caching opportunities
|
|
127
|
+
*/
|
|
128
|
+
function analyzeCachingOpportunity(input, currentCost) {
|
|
129
|
+
// High request rate with potential for repetitive queries
|
|
130
|
+
const requestsPerSecond = input.requestsPerMonth / (30 * 24 * 60 * 60);
|
|
131
|
+
if (requestsPerSecond > 10) {
|
|
132
|
+
// Assume 30-50% of requests could be cached
|
|
133
|
+
const cacheHitRate = 0.4;
|
|
134
|
+
const estimatedSavings = currentCost * cacheHitRate * 0.9; // 90% reduction for cached requests
|
|
135
|
+
return {
|
|
136
|
+
type: 'caching',
|
|
137
|
+
description: `Implement caching (Redis, CloudFront, or API Gateway caching) to reduce function invocations. With ~${requestsPerSecond.toFixed(1)} requests/second, caching could eliminate 30-50% of function calls.`,
|
|
138
|
+
estimatedSavings,
|
|
139
|
+
implementationComplexity: 'medium',
|
|
140
|
+
priority: estimatedSavings > currentCost * 0.2 ? 'high' : 'medium',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Analyze batching opportunities
|
|
147
|
+
*/
|
|
148
|
+
function analyzeBatchingOpportunity(input, currentCost) {
|
|
149
|
+
// Many small invocations that could be batched
|
|
150
|
+
if (input.requestsPerMonth > 1000000 && input.avgExecutionTimeMs < 100) {
|
|
151
|
+
// Batching could reduce invocations by 80%
|
|
152
|
+
const estimatedSavings = currentCost * 0.5; // Conservative 50% savings
|
|
153
|
+
return {
|
|
154
|
+
type: 'batching',
|
|
155
|
+
description: `Batch multiple operations together to reduce invocation count. With ${(input.requestsPerMonth / 1000000).toFixed(1)}M short invocations, batching could significantly reduce request costs.`,
|
|
156
|
+
estimatedSavings,
|
|
157
|
+
implementationComplexity: 'high',
|
|
158
|
+
priority: estimatedSavings > currentCost * 0.3 ? 'high' : 'medium',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Analyze reserved capacity opportunities
|
|
165
|
+
*/
|
|
166
|
+
function analyzeReservedCapacity(input, currentCost) {
|
|
167
|
+
// High consistent traffic (AWS Lambda offers provisioned concurrency)
|
|
168
|
+
const requestsPerSecond = input.requestsPerMonth / (30 * 24 * 60 * 60);
|
|
169
|
+
if (requestsPerSecond > 100 && currentCost > 500) {
|
|
170
|
+
// Reserved capacity typically saves 20-40%
|
|
171
|
+
const estimatedSavings = currentCost * 0.3;
|
|
172
|
+
return {
|
|
173
|
+
type: 'reserved-capacity',
|
|
174
|
+
description: `Consider provisioned concurrency (AWS Lambda) or reserved capacity. With high consistent traffic (~${requestsPerSecond.toFixed(0)} req/s), reserved capacity could save 20-40% and eliminate cold starts.`,
|
|
175
|
+
estimatedSavings,
|
|
176
|
+
implementationComplexity: 'low',
|
|
177
|
+
priority: 'high',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Analyze compression opportunities
|
|
184
|
+
*/
|
|
185
|
+
function analyzeCompression(input, currentCost) {
|
|
186
|
+
// High data transfer
|
|
187
|
+
if (input.dataTransferGb > 100) {
|
|
188
|
+
// Compression can reduce transfer by 60-80%
|
|
189
|
+
const compressionRatio = 0.7;
|
|
190
|
+
const dataTransferCostRatio = 0.2; // Assume ~20% of total cost is data transfer
|
|
191
|
+
const estimatedSavings = currentCost * dataTransferCostRatio * compressionRatio;
|
|
192
|
+
return {
|
|
193
|
+
type: 'compression',
|
|
194
|
+
description: `Enable response compression (gzip/brotli) to reduce data transfer costs. With ${input.dataTransferGb.toFixed(0)}GB/month, compression could reduce transfer by 60-80%.`,
|
|
195
|
+
estimatedSavings,
|
|
196
|
+
implementationComplexity: 'low',
|
|
197
|
+
priority: estimatedSavings > 50 ? 'high' : 'medium',
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Analyze CDN opportunities
|
|
204
|
+
*/
|
|
205
|
+
function analyzeCdnOpportunity(input, currentCost) {
|
|
206
|
+
// High read traffic that could benefit from edge caching
|
|
207
|
+
if (input.requestsPerMonth > 10000000 && input.dataTransferGb > 50) {
|
|
208
|
+
// CDN can reduce origin requests by 70-90%
|
|
209
|
+
const cdnCacheRate = 0.8;
|
|
210
|
+
const estimatedSavings = currentCost * cdnCacheRate * 0.6;
|
|
211
|
+
return {
|
|
212
|
+
type: 'cdn',
|
|
213
|
+
description: `Use a CDN (CloudFront, Cloudflare, Fastly) to cache static content and reduce origin requests. With ${(input.requestsPerMonth / 1000000).toFixed(1)}M requests, a CDN could cache 70-90% of traffic.`,
|
|
214
|
+
estimatedSavings,
|
|
215
|
+
implementationComplexity: 'medium',
|
|
216
|
+
priority: estimatedSavings > currentCost * 0.4 ? 'high' : 'medium',
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=cost-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-optimizer.js","sourceRoot":"","sources":["../../../../src/core/serverless/cost-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serverless Architecture Intelligence - Barrel Exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive serverless platform intelligence including:
|
|
5
|
+
* - Context detection (pet-project, startup, enterprise)
|
|
6
|
+
* - Workload suitability analysis
|
|
7
|
+
* - Platform selection and ranking
|
|
8
|
+
* - Cost estimation and optimization
|
|
9
|
+
* - Learning path recommendations
|
|
10
|
+
*/
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
export * from './platform-data-loader.js';
|
|
13
|
+
export * from './context-detector.js';
|
|
14
|
+
export * from './suitability-analyzer.js';
|
|
15
|
+
export * from './platform-selector.js';
|
|
16
|
+
export * from './cost-estimator.js';
|
|
17
|
+
export * from './cost-optimizer.js';
|
|
18
|
+
export * from './cost-comparison.js';
|
|
19
|
+
export * from './learning-path-recommender.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serverless Architecture Intelligence - Barrel Exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive serverless platform intelligence including:
|
|
5
|
+
* - Context detection (pet-project, startup, enterprise)
|
|
6
|
+
* - Workload suitability analysis
|
|
7
|
+
* - Platform selection and ranking
|
|
8
|
+
* - Cost estimation and optimization
|
|
9
|
+
* - Learning path recommendations
|
|
10
|
+
*/
|
|
11
|
+
// Core types and interfaces
|
|
12
|
+
export * from './types.js';
|
|
13
|
+
// Platform data and loading
|
|
14
|
+
export * from './platform-data-loader.js';
|
|
15
|
+
// Context and suitability analysis
|
|
16
|
+
export * from './context-detector.js';
|
|
17
|
+
export * from './suitability-analyzer.js';
|
|
18
|
+
// Platform selection
|
|
19
|
+
export * from './platform-selector.js';
|
|
20
|
+
// Cost analysis modules
|
|
21
|
+
export * from './cost-estimator.js';
|
|
22
|
+
export * from './cost-optimizer.js';
|
|
23
|
+
export * from './cost-comparison.js';
|
|
24
|
+
// Learning and education
|
|
25
|
+
export * from './learning-path-recommender.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/serverless/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4BAA4B;AAC5B,cAAc,YAAY,CAAC;AAE3B,4BAA4B;AAC5B,cAAc,2BAA2B,CAAC;AAE1C,mCAAmC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAE1C,qBAAqB;AACrB,cAAc,wBAAwB,CAAC;AAEvC,wBAAwB;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAErC,yBAAyB;AACzB,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning Path Recommender for Serverless Platforms
|
|
3
|
+
*
|
|
4
|
+
* Recommends curated learning resources based on skill level, platform,
|
|
5
|
+
* and best practices for serverless development.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* User skill levels for serverless development
|
|
9
|
+
*/
|
|
10
|
+
export type SkillLevel = 'beginner' | 'intermediate' | 'advanced';
|
|
11
|
+
/**
|
|
12
|
+
* Learning resource types
|
|
13
|
+
*/
|
|
14
|
+
export type ResourceType = 'tutorial' | 'documentation' | 'video' | 'course' | 'sample-project' | 'blog-post' | 'webinar';
|
|
15
|
+
/**
|
|
16
|
+
* Complexity rating for sample projects
|
|
17
|
+
*/
|
|
18
|
+
export type ProjectComplexity = 'basic' | 'intermediate' | 'advanced';
|
|
19
|
+
/**
|
|
20
|
+
* Best practice categories
|
|
21
|
+
*/
|
|
22
|
+
export type BestPracticeCategory = 'performance' | 'security' | 'cost' | 'architecture' | 'monitoring' | 'testing';
|
|
23
|
+
/**
|
|
24
|
+
* Severity level for common pitfalls
|
|
25
|
+
*/
|
|
26
|
+
export type PitfallSeverity = 'critical' | 'high' | 'medium' | 'low';
|
|
27
|
+
/**
|
|
28
|
+
* A single learning resource (tutorial, course, video, etc.)
|
|
29
|
+
*/
|
|
30
|
+
export interface LearningResource {
|
|
31
|
+
id: string;
|
|
32
|
+
title: string;
|
|
33
|
+
url: string;
|
|
34
|
+
type: ResourceType;
|
|
35
|
+
skillLevel: SkillLevel;
|
|
36
|
+
estimatedTime?: string;
|
|
37
|
+
provider?: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
tags?: string[];
|
|
40
|
+
prerequisite?: string;
|
|
41
|
+
lastVerified?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* A best practice guide for a specific category
|
|
45
|
+
*/
|
|
46
|
+
export interface BestPractice {
|
|
47
|
+
id: string;
|
|
48
|
+
category: BestPracticeCategory;
|
|
49
|
+
title: string;
|
|
50
|
+
description: string;
|
|
51
|
+
priority: 'high' | 'medium' | 'low';
|
|
52
|
+
example?: string;
|
|
53
|
+
relatedResources?: string[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A common pitfall with mitigation strategy
|
|
57
|
+
*/
|
|
58
|
+
export interface CommonPitfall {
|
|
59
|
+
id: string;
|
|
60
|
+
title: string;
|
|
61
|
+
description: string;
|
|
62
|
+
mitigation: string;
|
|
63
|
+
severity: PitfallSeverity;
|
|
64
|
+
example?: string;
|
|
65
|
+
affectedSkillLevels?: SkillLevel[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A sample project with complexity rating
|
|
69
|
+
*/
|
|
70
|
+
export interface SampleProject extends LearningResource {
|
|
71
|
+
complexity: ProjectComplexity;
|
|
72
|
+
estimatedDuration?: string;
|
|
73
|
+
technologies?: string[];
|
|
74
|
+
sourceRepo?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Data freshness information
|
|
78
|
+
*/
|
|
79
|
+
export interface DataFreshness {
|
|
80
|
+
lastVerified: string;
|
|
81
|
+
isStale: boolean;
|
|
82
|
+
staleDays: number;
|
|
83
|
+
maxStaleDays: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Complete learning path recommendation result
|
|
87
|
+
*/
|
|
88
|
+
export interface LearningPathResult {
|
|
89
|
+
platform: string;
|
|
90
|
+
platformId: string;
|
|
91
|
+
skillLevel: SkillLevel;
|
|
92
|
+
tutorials: LearningResource[];
|
|
93
|
+
documentation: LearningResource[];
|
|
94
|
+
videos: LearningResource[];
|
|
95
|
+
courses: LearningResource[];
|
|
96
|
+
sampleProjects: SampleProject[];
|
|
97
|
+
bestPractices: BestPractice[];
|
|
98
|
+
commonPitfalls: CommonPitfall[];
|
|
99
|
+
dataFreshness: DataFreshness;
|
|
100
|
+
nextSteps: string[];
|
|
101
|
+
estimatedLearningTime?: string;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Skill detection result with confidence
|
|
105
|
+
*/
|
|
106
|
+
export interface SkillDetectionResult {
|
|
107
|
+
skillLevel: SkillLevel;
|
|
108
|
+
confidence: 'low' | 'medium' | 'high';
|
|
109
|
+
signals: string[];
|
|
110
|
+
justification: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Detect user skill level from natural language input
|
|
114
|
+
*
|
|
115
|
+
* Analyzes keywords and patterns to determine if user is beginner/intermediate/advanced
|
|
116
|
+
* @param userInput - User's description of their experience
|
|
117
|
+
* @returns SkillDetectionResult with detected level and confidence
|
|
118
|
+
*/
|
|
119
|
+
export declare function detectSkillLevel(userInput: string): SkillDetectionResult;
|
|
120
|
+
/**
|
|
121
|
+
* Recommend learning path for a specific platform and skill level
|
|
122
|
+
*
|
|
123
|
+
* @param platformId - ID of the serverless platform
|
|
124
|
+
* @param skillLevel - Optional skill level (will default to 'beginner' if not provided)
|
|
125
|
+
* @returns Complete learning path recommendation
|
|
126
|
+
*/
|
|
127
|
+
export declare function recommendLearningPath(platformId: string, skillLevel?: SkillLevel): LearningPathResult;
|
|
128
|
+
/**
|
|
129
|
+
* Get all available platform IDs
|
|
130
|
+
*/
|
|
131
|
+
export declare function getAvailablePlatforms(): string[];
|
|
132
|
+
/**
|
|
133
|
+
* Get platforms with fresh data (not stale)
|
|
134
|
+
*/
|
|
135
|
+
export declare function getFreshPlatforms(maxStaleDays?: number): string[];
|
|
136
|
+
/**
|
|
137
|
+
* Get stale platforms (data not verified within max days)
|
|
138
|
+
*/
|
|
139
|
+
export declare function getStalePlatforms(maxStaleDays?: number): string[];
|
|
140
|
+
/**
|
|
141
|
+
* Get learning resources for a specific category and platform
|
|
142
|
+
*/
|
|
143
|
+
export declare function getResourcesByType(platformId: string, resourceType: ResourceType, skillLevel?: SkillLevel): LearningResource[];
|
|
144
|
+
/**
|
|
145
|
+
* Validate learning path data integrity
|
|
146
|
+
*/
|
|
147
|
+
export declare function validateLearningPathData(): {
|
|
148
|
+
isValid: boolean;
|
|
149
|
+
errors: string[];
|
|
150
|
+
warnings: string[];
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=learning-path-recommender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-path-recommender.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/learning-path-recommender.ts"],"names":[],"mappings":"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"}
|