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,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Market Research Report Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates markdown reports summarizing vision analysis results.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'fs/promises';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
/**
|
|
9
|
+
* ReportGenerator - Generates market research reports
|
|
10
|
+
*
|
|
11
|
+
* **Usage**:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* await ReportGenerator.generate(insights);
|
|
14
|
+
* // Creates .specweave/reports/market-research.md
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export class ReportGenerator {
|
|
18
|
+
/**
|
|
19
|
+
* Generate market research report
|
|
20
|
+
*
|
|
21
|
+
* @param insights - Vision insights to include in report
|
|
22
|
+
* @param reportPath - Optional custom report path
|
|
23
|
+
*/
|
|
24
|
+
static async generate(insights, reportPath = ReportGenerator.REPORT_PATH) {
|
|
25
|
+
const markdown = ReportGenerator.createMarkdown(insights);
|
|
26
|
+
// Ensure reports directory exists
|
|
27
|
+
const dir = path.dirname(reportPath);
|
|
28
|
+
await fs.mkdir(dir, { recursive: true });
|
|
29
|
+
// Write report
|
|
30
|
+
await fs.writeFile(reportPath, markdown, 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create markdown content from insights
|
|
34
|
+
*
|
|
35
|
+
* @param insights - Vision insights
|
|
36
|
+
* @returns Markdown string
|
|
37
|
+
*/
|
|
38
|
+
static createMarkdown(insights) {
|
|
39
|
+
const timestamp = new Date().toISOString();
|
|
40
|
+
const date = new Date().toLocaleDateString('en-US', {
|
|
41
|
+
year: 'numeric',
|
|
42
|
+
month: 'long',
|
|
43
|
+
day: 'numeric'
|
|
44
|
+
});
|
|
45
|
+
const sections = [];
|
|
46
|
+
// Header
|
|
47
|
+
sections.push('# Market Research Report');
|
|
48
|
+
sections.push('');
|
|
49
|
+
sections.push(`**Generated**: ${date}`);
|
|
50
|
+
sections.push(`**Timestamp**: ${timestamp}`);
|
|
51
|
+
sections.push('');
|
|
52
|
+
sections.push('---');
|
|
53
|
+
sections.push('');
|
|
54
|
+
// Vision
|
|
55
|
+
sections.push('## Product Vision');
|
|
56
|
+
sections.push('');
|
|
57
|
+
sections.push(insights.rawVision);
|
|
58
|
+
sections.push('');
|
|
59
|
+
// Keywords
|
|
60
|
+
sections.push('## Keywords & Domain Focus');
|
|
61
|
+
sections.push('');
|
|
62
|
+
sections.push('**Extracted Keywords**:');
|
|
63
|
+
sections.push('');
|
|
64
|
+
insights.keywords.forEach(keyword => {
|
|
65
|
+
sections.push(`- ${keyword}`);
|
|
66
|
+
});
|
|
67
|
+
sections.push('');
|
|
68
|
+
// Market Category
|
|
69
|
+
sections.push('## Market Classification');
|
|
70
|
+
sections.push('');
|
|
71
|
+
sections.push(`**Category**: ${insights.market}`);
|
|
72
|
+
sections.push(`**Confidence**: ${(insights.confidence * 100).toFixed(0)}%`);
|
|
73
|
+
sections.push('');
|
|
74
|
+
// Opportunity Score
|
|
75
|
+
sections.push('## Opportunity Analysis');
|
|
76
|
+
sections.push('');
|
|
77
|
+
sections.push(`**Opportunity Score**: ${insights.opportunityScore}/10`);
|
|
78
|
+
sections.push(`**Viral Potential**: ${insights.viralPotential ? 'Yes' : 'No'}`);
|
|
79
|
+
sections.push('');
|
|
80
|
+
// Competitors
|
|
81
|
+
if (insights.competitors.length > 0) {
|
|
82
|
+
sections.push('## Competitive Landscape');
|
|
83
|
+
sections.push('');
|
|
84
|
+
sections.push('**Similar Products**:');
|
|
85
|
+
sections.push('');
|
|
86
|
+
sections.push('| Product | URL | Similarity | Strengths | Weaknesses |');
|
|
87
|
+
sections.push('|---------|-----|------------|-----------|------------|');
|
|
88
|
+
insights.competitors.forEach(comp => {
|
|
89
|
+
const similarity = 'N/A'; // Similarity scoring not yet implemented
|
|
90
|
+
const strengths = comp.strengths.join(', ') || 'N/A';
|
|
91
|
+
const weaknesses = comp.weaknesses.join(', ') || 'N/A';
|
|
92
|
+
sections.push(`| ${comp.name} | ${comp.url || 'N/A'} | ${similarity} | ${strengths} | ${weaknesses} |`);
|
|
93
|
+
});
|
|
94
|
+
sections.push('');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
sections.push('## Competitive Landscape');
|
|
98
|
+
sections.push('');
|
|
99
|
+
sections.push('No similar products identified.');
|
|
100
|
+
sections.push('');
|
|
101
|
+
}
|
|
102
|
+
// Follow-up Questions
|
|
103
|
+
if (insights.followUpQuestions.length > 0) {
|
|
104
|
+
sections.push('## Recommended Next Steps');
|
|
105
|
+
sections.push('');
|
|
106
|
+
sections.push('To refine your product strategy, consider these questions:');
|
|
107
|
+
sections.push('');
|
|
108
|
+
insights.followUpQuestions.forEach((q, idx) => {
|
|
109
|
+
sections.push(`${idx + 1}. **${q.question}**`);
|
|
110
|
+
sections.push('');
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// Footer
|
|
114
|
+
sections.push('---');
|
|
115
|
+
sections.push('');
|
|
116
|
+
sections.push('*This report was generated by SpecWeave Strategic Init*');
|
|
117
|
+
sections.push('');
|
|
118
|
+
return sections.join('\n');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Default report path
|
|
123
|
+
*/
|
|
124
|
+
ReportGenerator.REPORT_PATH = '.specweave/reports/market-research.md';
|
|
125
|
+
//# sourceMappingURL=ReportGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportGenerator.js","sourceRoot":"","sources":["../../../../src/init/research/ReportGenerator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IAM1B;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CACnB,QAAwB,EACxB,aAAqB,eAAe,CAAC,WAAW;QAEhD,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE1D,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,eAAe;QACf,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,cAAc,CAAC,QAAwB;QACpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAClD,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,SAAS;QACT,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,SAAS;QACT,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,WAAW;QACX,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,kBAAkB;QAClB,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5E,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,0BAA0B,QAAQ,CAAC,gBAAgB,KAAK,CAAC,CAAC;QACxE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,cAAc;QACd,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAElB,QAAQ,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACzE,QAAQ,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAEzE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yCAAyC;gBACnE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;gBACrD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;gBACvD,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,IAAI,KAAK,MAAM,UAAU,MAAM,SAAS,MAAM,UAAU,IAAI,CAAC,CAAC;YAC1G,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,sBAAsB;QACtB,IAAI,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC5E,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAElB,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;gBAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,SAAS;QACT,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;;AA7HD;;GAEG;AACqB,2BAAW,GAAG,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision & Market Research Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes product vision descriptions using AI to extract:
|
|
5
|
+
* - Keywords and domain focus
|
|
6
|
+
* - Market category classification
|
|
7
|
+
* - Competitor analysis
|
|
8
|
+
* - Opportunity scoring
|
|
9
|
+
* - Viral potential detection
|
|
10
|
+
* - Adaptive follow-up questions
|
|
11
|
+
*
|
|
12
|
+
* This is the foundation of SpecWeave's research-driven init flow.
|
|
13
|
+
*/
|
|
14
|
+
import { VisionInsights } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for VisionAnalyzer
|
|
17
|
+
*/
|
|
18
|
+
export interface VisionAnalyzerConfig {
|
|
19
|
+
/** Cache duration for analysis results (in milliseconds) */
|
|
20
|
+
cacheDuration?: number;
|
|
21
|
+
/** Maximum number of competitors to return */
|
|
22
|
+
maxCompetitors?: number;
|
|
23
|
+
/** Maximum number of follow-up questions */
|
|
24
|
+
maxFollowUpQuestions?: number;
|
|
25
|
+
/** Minimum keyword score threshold */
|
|
26
|
+
minKeywordScore?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* VisionAnalyzer - Main class for vision analysis
|
|
30
|
+
*
|
|
31
|
+
* **Usage**:
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const analyzer = new VisionAnalyzer();
|
|
34
|
+
* const insights = await analyzer.analyze('A Figma-like design tool for remote teams');
|
|
35
|
+
* console.log(insights.market); // 'productivity-saas'
|
|
36
|
+
* console.log(insights.keywords); // ['design', 'collaboration', 'remote teams']
|
|
37
|
+
* console.log(insights.viralPotential); // true
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare class VisionAnalyzer {
|
|
41
|
+
private config;
|
|
42
|
+
private cache;
|
|
43
|
+
/**
|
|
44
|
+
* Create a new VisionAnalyzer
|
|
45
|
+
*
|
|
46
|
+
* @param config - Optional configuration
|
|
47
|
+
*/
|
|
48
|
+
constructor(config?: VisionAnalyzerConfig);
|
|
49
|
+
/**
|
|
50
|
+
* Analyze product vision and return insights
|
|
51
|
+
*
|
|
52
|
+
* This is the primary method that orchestrates the entire analysis:
|
|
53
|
+
* 1. Check cache
|
|
54
|
+
* 2. Extract keywords (LLM or rules)
|
|
55
|
+
* 3. Detect market category (LLM or rules)
|
|
56
|
+
* 4. Identify competitors (LLM or empty)
|
|
57
|
+
* 5. Calculate opportunity score
|
|
58
|
+
* 6. Detect viral potential
|
|
59
|
+
* 7. Generate follow-up questions
|
|
60
|
+
* 8. Validate and return results
|
|
61
|
+
*
|
|
62
|
+
* @param vision - User's product vision (1-3 sentences)
|
|
63
|
+
* @returns VisionInsights with validated data
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const insights = await analyzer.analyze(
|
|
68
|
+
* 'A project management tool for agile teams with real-time collaboration'
|
|
69
|
+
* );
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
analyze(vision: string): Promise<VisionInsights>;
|
|
73
|
+
/**
|
|
74
|
+
* Perform the actual analysis
|
|
75
|
+
*
|
|
76
|
+
* Implementation status:
|
|
77
|
+
* - ✅ T-002: Keyword extraction (pattern-based)
|
|
78
|
+
* - ✅ T-003: Market detection (rule-based classification)
|
|
79
|
+
* - ✅ T-004: Competitor analysis (keyword similarity)
|
|
80
|
+
* - ✅ T-005: Opportunity scoring (algorithmic)
|
|
81
|
+
* - ✅ T-006: Follow-up questions (adaptive)
|
|
82
|
+
*
|
|
83
|
+
* @param vision - Trimmed vision text
|
|
84
|
+
* @returns VisionInsights
|
|
85
|
+
*/
|
|
86
|
+
private performAnalysis;
|
|
87
|
+
/**
|
|
88
|
+
* Get cached insights if available and not expired
|
|
89
|
+
*
|
|
90
|
+
* @param vision - Vision text (cache key)
|
|
91
|
+
* @returns Cached insights or undefined
|
|
92
|
+
*/
|
|
93
|
+
private getCached;
|
|
94
|
+
/**
|
|
95
|
+
* Store insights in cache
|
|
96
|
+
*
|
|
97
|
+
* @param vision - Vision text (cache key)
|
|
98
|
+
* @param insights - Insights to cache
|
|
99
|
+
*/
|
|
100
|
+
private setCached;
|
|
101
|
+
/**
|
|
102
|
+
* Clear cache (useful for testing)
|
|
103
|
+
*/
|
|
104
|
+
clearCache(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Get current configuration
|
|
107
|
+
*/
|
|
108
|
+
getConfig(): Readonly<Required<VisionAnalyzerConfig>>;
|
|
109
|
+
/**
|
|
110
|
+
* Update configuration
|
|
111
|
+
*
|
|
112
|
+
* @param config - Partial config to merge
|
|
113
|
+
*/
|
|
114
|
+
updateConfig(config: Partial<VisionAnalyzerConfig>): void;
|
|
115
|
+
/**
|
|
116
|
+
* Save vision insights to .specweave/config.json
|
|
117
|
+
*
|
|
118
|
+
* @param insights - Vision insights to save
|
|
119
|
+
* @param configPath - Optional custom config path
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const insights = await analyzer.analyze(vision);
|
|
124
|
+
* await VisionAnalyzer.saveToConfig(insights);
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
static saveToConfig(insights: VisionInsights, configPath?: string): Promise<void>;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=VisionAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisionAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/init/research/VisionAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAwC,MAAM,YAAY,CAAC;AAGlF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAYD;;;;;;;;;;;GAWG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAA+D;IAE5E;;;;OAIG;gBACS,MAAM,GAAE,oBAAyB;IAK7C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA2BtD;;;;;;;;;;;;OAYG;YACW,eAAe;IA2D7B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAmBjB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAIrD;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAIzD;;;;;;;;;;;OAWG;WACU,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIxF"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision & Market Research Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes product vision descriptions using AI to extract:
|
|
5
|
+
* - Keywords and domain focus
|
|
6
|
+
* - Market category classification
|
|
7
|
+
* - Competitor analysis
|
|
8
|
+
* - Opportunity scoring
|
|
9
|
+
* - Viral potential detection
|
|
10
|
+
* - Adaptive follow-up questions
|
|
11
|
+
*
|
|
12
|
+
* This is the foundation of SpecWeave's research-driven init flow.
|
|
13
|
+
*/
|
|
14
|
+
import { VisionInsightsSchema } from './types.js';
|
|
15
|
+
import { extractKeywords } from './keyword-extractor.js';
|
|
16
|
+
/**
|
|
17
|
+
* Default configuration
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_CONFIG = {
|
|
20
|
+
cacheDuration: 24 * 60 * 60 * 1000, // 24 hours
|
|
21
|
+
maxCompetitors: 5,
|
|
22
|
+
maxFollowUpQuestions: 3,
|
|
23
|
+
minKeywordScore: 0.5
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* VisionAnalyzer - Main class for vision analysis
|
|
27
|
+
*
|
|
28
|
+
* **Usage**:
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const analyzer = new VisionAnalyzer();
|
|
31
|
+
* const insights = await analyzer.analyze('A Figma-like design tool for remote teams');
|
|
32
|
+
* console.log(insights.market); // 'productivity-saas'
|
|
33
|
+
* console.log(insights.keywords); // ['design', 'collaboration', 'remote teams']
|
|
34
|
+
* console.log(insights.viralPotential); // true
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class VisionAnalyzer {
|
|
38
|
+
/**
|
|
39
|
+
* Create a new VisionAnalyzer
|
|
40
|
+
*
|
|
41
|
+
* @param config - Optional configuration
|
|
42
|
+
*/
|
|
43
|
+
constructor(config = {}) {
|
|
44
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
45
|
+
this.cache = new Map();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Analyze product vision and return insights
|
|
49
|
+
*
|
|
50
|
+
* This is the primary method that orchestrates the entire analysis:
|
|
51
|
+
* 1. Check cache
|
|
52
|
+
* 2. Extract keywords (LLM or rules)
|
|
53
|
+
* 3. Detect market category (LLM or rules)
|
|
54
|
+
* 4. Identify competitors (LLM or empty)
|
|
55
|
+
* 5. Calculate opportunity score
|
|
56
|
+
* 6. Detect viral potential
|
|
57
|
+
* 7. Generate follow-up questions
|
|
58
|
+
* 8. Validate and return results
|
|
59
|
+
*
|
|
60
|
+
* @param vision - User's product vision (1-3 sentences)
|
|
61
|
+
* @returns VisionInsights with validated data
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const insights = await analyzer.analyze(
|
|
66
|
+
* 'A project management tool for agile teams with real-time collaboration'
|
|
67
|
+
* );
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
async analyze(vision) {
|
|
71
|
+
// Validate input
|
|
72
|
+
if (!vision || vision.trim().length === 0) {
|
|
73
|
+
throw new Error('Vision description cannot be empty');
|
|
74
|
+
}
|
|
75
|
+
const trimmedVision = vision.trim();
|
|
76
|
+
// Check cache
|
|
77
|
+
const cached = this.getCached(trimmedVision);
|
|
78
|
+
if (cached) {
|
|
79
|
+
return cached;
|
|
80
|
+
}
|
|
81
|
+
// Perform analysis (stub implementation for now)
|
|
82
|
+
// This will be implemented in subsequent tasks
|
|
83
|
+
const insights = await this.performAnalysis(trimmedVision);
|
|
84
|
+
// Validate results
|
|
85
|
+
const validated = VisionInsightsSchema.parse(insights);
|
|
86
|
+
// Cache results
|
|
87
|
+
this.setCached(trimmedVision, validated);
|
|
88
|
+
return validated;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Perform the actual analysis
|
|
92
|
+
*
|
|
93
|
+
* Implementation status:
|
|
94
|
+
* - ✅ T-002: Keyword extraction (pattern-based)
|
|
95
|
+
* - ✅ T-003: Market detection (rule-based classification)
|
|
96
|
+
* - ✅ T-004: Competitor analysis (keyword similarity)
|
|
97
|
+
* - ✅ T-005: Opportunity scoring (algorithmic)
|
|
98
|
+
* - ✅ T-006: Follow-up questions (adaptive)
|
|
99
|
+
*
|
|
100
|
+
* @param vision - Trimmed vision text
|
|
101
|
+
* @returns VisionInsights
|
|
102
|
+
*/
|
|
103
|
+
async performAnalysis(vision) {
|
|
104
|
+
// Import needed modules
|
|
105
|
+
const { detectMarketCategory } = await import('./MarketDetector.js');
|
|
106
|
+
const { analyzeCompetitors } = await import('./CompetitorAnalyzer.js');
|
|
107
|
+
const { calculateOpportunityScore, estimateInnovationFactor } = await import('./OpportunityScorer.js');
|
|
108
|
+
const { generateFollowUpQuestions } = await import('./QuestionGenerator.js');
|
|
109
|
+
// ✅ T-002: Extract keywords using pattern matching
|
|
110
|
+
const keywords = extractKeywords(vision);
|
|
111
|
+
// ✅ T-003: Detect market category using rule-based classification
|
|
112
|
+
const marketClassification = detectMarketCategory(vision);
|
|
113
|
+
const market = marketClassification.category;
|
|
114
|
+
const confidence = marketClassification.confidence;
|
|
115
|
+
// ✅ T-004: Analyze competitors using keyword similarity
|
|
116
|
+
const competitors = analyzeCompetitors(keywords, this.config.maxCompetitors);
|
|
117
|
+
// ✅ T-005: Calculate opportunity score
|
|
118
|
+
const innovation = estimateInnovationFactor(keywords, competitors.length);
|
|
119
|
+
// Detect viral potential (simple heuristic)
|
|
120
|
+
const viralKeywords = ['viral', 'social', 'share', 'network', 'community', 'collaboration', 'real-time'];
|
|
121
|
+
const viralPotential = keywords.some(k => viralKeywords.some(vk => k.toLowerCase().includes(vk)));
|
|
122
|
+
const opportunityResult = calculateOpportunityScore(market, competitors.length, viralPotential, innovation);
|
|
123
|
+
// ✅ T-006: Generate adaptive follow-up questions
|
|
124
|
+
const followUpQuestions = generateFollowUpQuestions({
|
|
125
|
+
marketCategory: market,
|
|
126
|
+
viralPotential,
|
|
127
|
+
opportunityScore: opportunityResult.score,
|
|
128
|
+
keywords,
|
|
129
|
+
competitorCount: competitors.length
|
|
130
|
+
}, this.config.maxFollowUpQuestions);
|
|
131
|
+
const insights = {
|
|
132
|
+
keywords,
|
|
133
|
+
market,
|
|
134
|
+
competitors,
|
|
135
|
+
opportunityScore: opportunityResult.score,
|
|
136
|
+
viralPotential,
|
|
137
|
+
followUpQuestions,
|
|
138
|
+
confidence,
|
|
139
|
+
rawVision: vision
|
|
140
|
+
};
|
|
141
|
+
return insights;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get cached insights if available and not expired
|
|
145
|
+
*
|
|
146
|
+
* @param vision - Vision text (cache key)
|
|
147
|
+
* @returns Cached insights or undefined
|
|
148
|
+
*/
|
|
149
|
+
getCached(vision) {
|
|
150
|
+
const cached = this.cache.get(vision);
|
|
151
|
+
if (!cached) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
const now = Date.now();
|
|
155
|
+
const age = now - cached.timestamp;
|
|
156
|
+
if (age > this.config.cacheDuration) {
|
|
157
|
+
// Expired, remove from cache
|
|
158
|
+
this.cache.delete(vision);
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
return cached.insights;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Store insights in cache
|
|
165
|
+
*
|
|
166
|
+
* @param vision - Vision text (cache key)
|
|
167
|
+
* @param insights - Insights to cache
|
|
168
|
+
*/
|
|
169
|
+
setCached(vision, insights) {
|
|
170
|
+
this.cache.set(vision, {
|
|
171
|
+
insights,
|
|
172
|
+
timestamp: Date.now()
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Clear cache (useful for testing)
|
|
177
|
+
*/
|
|
178
|
+
clearCache() {
|
|
179
|
+
this.cache.clear();
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get current configuration
|
|
183
|
+
*/
|
|
184
|
+
getConfig() {
|
|
185
|
+
return { ...this.config };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Update configuration
|
|
189
|
+
*
|
|
190
|
+
* @param config - Partial config to merge
|
|
191
|
+
*/
|
|
192
|
+
updateConfig(config) {
|
|
193
|
+
this.config = { ...this.config, ...config };
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Save vision insights to .specweave/config.json
|
|
197
|
+
*
|
|
198
|
+
* @param insights - Vision insights to save
|
|
199
|
+
* @param configPath - Optional custom config path
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* const insights = await analyzer.analyze(vision);
|
|
204
|
+
* await VisionAnalyzer.saveToConfig(insights);
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
static async saveToConfig(insights, configPath) {
|
|
208
|
+
const { ConfigManager } = await import('../../config/ConfigManager.js');
|
|
209
|
+
await ConfigManager.updateResearch({ vision: insights }, configPath);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=VisionAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisionAnalyzer.js","sourceRoot":"","sources":["../../../../src/init/research/VisionAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyword Extractor - Pattern-Based Intelligence
|
|
3
|
+
*
|
|
4
|
+
* Extracts domain-specific keywords from product vision using intelligent
|
|
5
|
+
* pattern matching. No external LLM API calls - all intelligence is encoded
|
|
6
|
+
* at spec-time using domain knowledge.
|
|
7
|
+
*
|
|
8
|
+
* **Approach**:
|
|
9
|
+
* 1. Define domain patterns (design, collaboration, productivity, etc.)
|
|
10
|
+
* 2. Match vision text against patterns
|
|
11
|
+
* 3. Score and rank keywords by relevance
|
|
12
|
+
* 4. Deduplicate and return top 5-10 keywords
|
|
13
|
+
*
|
|
14
|
+
* **Benefits**:
|
|
15
|
+
* - Zero external dependencies
|
|
16
|
+
* - Instant execution (no API latency)
|
|
17
|
+
* - 100% deterministic and testable
|
|
18
|
+
* - Works offline
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Domain pattern definitions
|
|
22
|
+
*
|
|
23
|
+
* Each pattern maps to a domain category and contains:
|
|
24
|
+
* - Regex pattern for matching
|
|
25
|
+
* - Weight (importance multiplier)
|
|
26
|
+
* - Related keywords
|
|
27
|
+
*/
|
|
28
|
+
export interface DomainPattern {
|
|
29
|
+
/** Domain category name */
|
|
30
|
+
domain: string;
|
|
31
|
+
/** Regex pattern for matching */
|
|
32
|
+
pattern: RegExp;
|
|
33
|
+
/** Weight multiplier (1.0 = normal, 2.0 = high priority) */
|
|
34
|
+
weight: number;
|
|
35
|
+
/** Related keywords for this domain */
|
|
36
|
+
keywords: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Keyword match result
|
|
40
|
+
*/
|
|
41
|
+
export interface KeywordMatch {
|
|
42
|
+
/** Matched keyword */
|
|
43
|
+
keyword: string;
|
|
44
|
+
/** Domain category */
|
|
45
|
+
domain: string;
|
|
46
|
+
/** Relevance score (higher = more relevant) */
|
|
47
|
+
score: number;
|
|
48
|
+
/** Number of times this keyword appeared */
|
|
49
|
+
frequency: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Domain patterns encoded with intelligence from spec generation time
|
|
53
|
+
*
|
|
54
|
+
* This is where the AI intelligence lives - as smart patterns designed
|
|
55
|
+
* by Claude during spec generation, not as runtime LLM calls!
|
|
56
|
+
*/
|
|
57
|
+
export declare const DOMAIN_PATTERNS: DomainPattern[];
|
|
58
|
+
/**
|
|
59
|
+
* Extract keywords from vision text using pattern matching
|
|
60
|
+
*
|
|
61
|
+
* @param vision - Product vision text (1-3 sentences)
|
|
62
|
+
* @returns Array of 5-10 keywords sorted by relevance score
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const keywords = extractKeywords('A Figma-like design tool for remote teams');
|
|
67
|
+
* // Returns: ['design', 'collaboration', 'creative', 'team', 'visual', ...]
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function extractKeywords(vision: string): string[];
|
|
71
|
+
/**
|
|
72
|
+
* Get detailed keyword analysis (useful for debugging/testing)
|
|
73
|
+
*
|
|
74
|
+
* @param vision - Product vision text
|
|
75
|
+
* @returns Array of KeywordMatch objects with scores and domains
|
|
76
|
+
*/
|
|
77
|
+
export declare function analyzeKeywords(vision: string): KeywordMatch[];
|
|
78
|
+
//# sourceMappingURL=keyword-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyword-extractor.d.ts","sourceRoot":"","sources":["../../../../src/init/research/keyword-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAEhB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IAEf,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAEhB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IAEd,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EAwG1C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyExD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAwC9D"}
|