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,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Competitor Analyzer - Keyword Similarity Matching
|
|
3
|
+
*
|
|
4
|
+
* Identifies comparable products using keyword similarity matching against
|
|
5
|
+
* a known product database. No external API calls - all product knowledge
|
|
6
|
+
* is encoded at spec-time.
|
|
7
|
+
*
|
|
8
|
+
* **Approach**:
|
|
9
|
+
* 1. Maintain known product database with domain tags
|
|
10
|
+
* 2. Calculate keyword similarity (Jaccard index)
|
|
11
|
+
* 3. Return top 3-5 most similar products
|
|
12
|
+
* 4. Include strengths and weaknesses
|
|
13
|
+
*
|
|
14
|
+
* **Benefits**:
|
|
15
|
+
* - Zero external dependencies
|
|
16
|
+
* - Instant matching (no API latency)
|
|
17
|
+
* - 100% deterministic and testable
|
|
18
|
+
* - Works offline
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Product database with known competitors across different domains
|
|
22
|
+
*
|
|
23
|
+
* This is where competitive intelligence lives - curated knowledge
|
|
24
|
+
* encoded at spec-time, not runtime LLM calls!
|
|
25
|
+
*/
|
|
26
|
+
const KNOWN_PRODUCTS = [
|
|
27
|
+
// Productivity & Collaboration
|
|
28
|
+
{
|
|
29
|
+
name: 'Notion',
|
|
30
|
+
url: 'https://notion.so',
|
|
31
|
+
domains: ['productivity', 'collaboration', 'saas'],
|
|
32
|
+
strengths: ['All-in-one workspace', 'Flexible databases', 'Rich templates'],
|
|
33
|
+
weaknesses: ['Steep learning curve', 'Slow with large databases', 'Limited offline mode'],
|
|
34
|
+
category: 'productivity-saas'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'Asana',
|
|
38
|
+
url: 'https://asana.com',
|
|
39
|
+
domains: ['productivity', 'project', 'team', 'saas'],
|
|
40
|
+
strengths: ['Task management', 'Team collaboration', 'Integrations'],
|
|
41
|
+
weaknesses: ['Complex for small teams', 'Expensive for large teams', 'Limited customization'],
|
|
42
|
+
category: 'productivity-saas'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Monday.com',
|
|
46
|
+
url: 'https://monday.com',
|
|
47
|
+
domains: ['productivity', 'project', 'workflow', 'saas'],
|
|
48
|
+
strengths: ['Visual workflows', 'Customizable', 'Automation'],
|
|
49
|
+
weaknesses: ['Expensive', 'Can be overwhelming', 'Limited free tier'],
|
|
50
|
+
category: 'productivity-saas'
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Slack',
|
|
54
|
+
url: 'https://slack.com',
|
|
55
|
+
domains: ['collaboration', 'team', 'communication', 'saas'],
|
|
56
|
+
strengths: ['Real-time messaging', 'Integrations', 'Channels'],
|
|
57
|
+
weaknesses: ['Information overload', 'Can replace deep work', 'Search limitations'],
|
|
58
|
+
category: 'productivity-saas'
|
|
59
|
+
},
|
|
60
|
+
// Design Tools
|
|
61
|
+
{
|
|
62
|
+
name: 'Figma',
|
|
63
|
+
url: 'https://figma.com',
|
|
64
|
+
domains: ['design', 'collaboration', 'visual', 'saas'],
|
|
65
|
+
strengths: ['Real-time collaboration', 'Web-based', 'Plugin ecosystem'],
|
|
66
|
+
weaknesses: ['Requires internet', 'Learning curve', 'Performance with complex files'],
|
|
67
|
+
category: 'productivity-saas'
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'Canva',
|
|
71
|
+
url: 'https://canva.com',
|
|
72
|
+
domains: ['design', 'creative', 'visual'],
|
|
73
|
+
strengths: ['Easy to use', 'Templates', 'Free tier'],
|
|
74
|
+
weaknesses: ['Limited professional features', 'Template-heavy designs', 'Branding limitations'],
|
|
75
|
+
category: 'productivity-saas'
|
|
76
|
+
},
|
|
77
|
+
// Healthcare
|
|
78
|
+
{
|
|
79
|
+
name: 'Epic',
|
|
80
|
+
url: 'https://epic.com',
|
|
81
|
+
domains: ['healthcare', 'medical', 'enterprise'],
|
|
82
|
+
strengths: ['Comprehensive EHR', 'Integration', 'Market leader'],
|
|
83
|
+
weaknesses: ['Very expensive', 'Complex implementation', 'Poor UX'],
|
|
84
|
+
category: 'healthcare'
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Cerner',
|
|
88
|
+
url: 'https://cerner.com',
|
|
89
|
+
domains: ['healthcare', 'medical', 'enterprise'],
|
|
90
|
+
strengths: ['Wide adoption', 'Interoperability', 'Data analytics'],
|
|
91
|
+
weaknesses: ['Expensive', 'Complex', 'Customer support issues'],
|
|
92
|
+
category: 'healthcare'
|
|
93
|
+
},
|
|
94
|
+
// Fintech
|
|
95
|
+
{
|
|
96
|
+
name: 'Stripe',
|
|
97
|
+
url: 'https://stripe.com',
|
|
98
|
+
domains: ['fintech', 'payment', 'saas'],
|
|
99
|
+
strengths: ['Developer-friendly', 'Global coverage', 'Comprehensive APIs'],
|
|
100
|
+
weaknesses: ['2.9% + $0.30 fees', 'Account freezes', 'Support delays'],
|
|
101
|
+
category: 'fintech'
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'Square',
|
|
105
|
+
url: 'https://squareup.com',
|
|
106
|
+
domains: ['fintech', 'payment', 'ecommerce'],
|
|
107
|
+
strengths: ['Easy setup', 'POS hardware', 'Small business focus'],
|
|
108
|
+
weaknesses: ['Higher fees', 'Account holds', 'Limited international'],
|
|
109
|
+
category: 'fintech'
|
|
110
|
+
},
|
|
111
|
+
// E-commerce
|
|
112
|
+
{
|
|
113
|
+
name: 'Shopify',
|
|
114
|
+
url: 'https://shopify.com',
|
|
115
|
+
domains: ['ecommerce', 'saas', 'marketplace'],
|
|
116
|
+
strengths: ['Easy setup', 'App ecosystem', 'Themes'],
|
|
117
|
+
weaknesses: ['Transaction fees', 'Customization limits', 'Expensive apps'],
|
|
118
|
+
category: 'e-commerce'
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'WooCommerce',
|
|
122
|
+
url: 'https://woocommerce.com',
|
|
123
|
+
domains: ['ecommerce', 'wordpress'],
|
|
124
|
+
strengths: ['Free and open-source', 'Flexible', 'Large community'],
|
|
125
|
+
weaknesses: ['Requires WordPress', 'Performance issues', 'Security concerns'],
|
|
126
|
+
category: 'e-commerce'
|
|
127
|
+
},
|
|
128
|
+
// Education
|
|
129
|
+
{
|
|
130
|
+
name: 'Coursera',
|
|
131
|
+
url: 'https://coursera.org',
|
|
132
|
+
domains: ['education', 'learning', 'online'],
|
|
133
|
+
strengths: ['University partnerships', 'Certifications', 'Wide range'],
|
|
134
|
+
weaknesses: ['Expensive certificates', 'Variable quality', 'Limited interactivity'],
|
|
135
|
+
category: 'education'
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'Udemy',
|
|
139
|
+
url: 'https://udemy.com',
|
|
140
|
+
domains: ['education', 'learning', 'online'],
|
|
141
|
+
strengths: ['Affordable', 'Variety', 'Lifetime access'],
|
|
142
|
+
weaknesses: ['No quality control', 'No certificates', 'Discount culture'],
|
|
143
|
+
category: 'education'
|
|
144
|
+
},
|
|
145
|
+
// Social
|
|
146
|
+
{
|
|
147
|
+
name: 'Discord',
|
|
148
|
+
url: 'https://discord.com',
|
|
149
|
+
domains: ['social', 'community', 'gaming'],
|
|
150
|
+
strengths: ['Voice chat', 'Communities', 'Free tier'],
|
|
151
|
+
weaknesses: ['Moderation challenges', 'Privacy concerns', 'Information overload'],
|
|
152
|
+
category: 'social-network'
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'Reddit',
|
|
156
|
+
url: 'https://reddit.com',
|
|
157
|
+
domains: ['social', 'community', 'content'],
|
|
158
|
+
strengths: ['Diverse communities', 'Free', 'User-driven'],
|
|
159
|
+
weaknesses: ['Toxicity', 'Moderation issues', 'UI/UX dated'],
|
|
160
|
+
category: 'social-network'
|
|
161
|
+
}
|
|
162
|
+
];
|
|
163
|
+
/**
|
|
164
|
+
* Calculate Jaccard similarity between two keyword sets
|
|
165
|
+
*
|
|
166
|
+
* Jaccard similarity = |A ∩ B| / |A ∪ B|
|
|
167
|
+
*
|
|
168
|
+
* @param keywords1 - First keyword set
|
|
169
|
+
* @param keywords2 - Second keyword set
|
|
170
|
+
* @returns Similarity score (0-1)
|
|
171
|
+
*/
|
|
172
|
+
function jaccardSimilarity(keywords1, keywords2) {
|
|
173
|
+
const set1 = new Set(keywords1.map(k => k.toLowerCase()));
|
|
174
|
+
const set2 = new Set(keywords2.map(k => k.toLowerCase()));
|
|
175
|
+
// Intersection
|
|
176
|
+
const intersection = new Set([...set1].filter(k => set2.has(k)));
|
|
177
|
+
// Union
|
|
178
|
+
const union = new Set([...set1, ...set2]);
|
|
179
|
+
if (union.size === 0) {
|
|
180
|
+
return 0;
|
|
181
|
+
}
|
|
182
|
+
return intersection.size / union.size;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Analyze competitor landscape based on keywords
|
|
186
|
+
*
|
|
187
|
+
* Identifies comparable products using keyword similarity matching.
|
|
188
|
+
*
|
|
189
|
+
* @param keywords - Keywords extracted from product vision
|
|
190
|
+
* @param maxCompetitors - Maximum number of competitors to return (default: 5)
|
|
191
|
+
* @returns Array of competitors sorted by similarity score
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* const competitors = analyzeCompetitors(['design', 'collaboration', 'team'], 3);
|
|
196
|
+
* // Returns top 3 competitors like Figma, Canva, etc.
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export function analyzeCompetitors(keywords, maxCompetitors = 5) {
|
|
200
|
+
if (!keywords || keywords.length === 0) {
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
// Calculate similarity scores for all products
|
|
204
|
+
const scored = [];
|
|
205
|
+
for (const product of KNOWN_PRODUCTS) {
|
|
206
|
+
const similarity = jaccardSimilarity(keywords, product.domains);
|
|
207
|
+
scored.push({ product, similarity });
|
|
208
|
+
}
|
|
209
|
+
// Sort by similarity (descending) and take top N
|
|
210
|
+
scored.sort((a, b) => b.similarity - a.similarity);
|
|
211
|
+
// Convert to Competitor format
|
|
212
|
+
const competitors = scored
|
|
213
|
+
.slice(0, maxCompetitors)
|
|
214
|
+
.filter(s => s.similarity > 0) // Only include matches
|
|
215
|
+
.map(s => ({
|
|
216
|
+
name: s.product.name,
|
|
217
|
+
url: s.product.url,
|
|
218
|
+
strengths: s.product.strengths,
|
|
219
|
+
weaknesses: s.product.weaknesses
|
|
220
|
+
}));
|
|
221
|
+
return competitors;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get detailed competitor analysis with similarity scores (useful for debugging)
|
|
225
|
+
*
|
|
226
|
+
* @param keywords - Keywords from vision
|
|
227
|
+
* @returns Array of products with similarity scores, sorted by score
|
|
228
|
+
*/
|
|
229
|
+
export function getDetailedCompetitorAnalysis(keywords) {
|
|
230
|
+
if (!keywords || keywords.length === 0) {
|
|
231
|
+
return [];
|
|
232
|
+
}
|
|
233
|
+
const keywordSet = new Set(keywords.map(k => k.toLowerCase()));
|
|
234
|
+
const results = KNOWN_PRODUCTS.map(product => {
|
|
235
|
+
const productDomains = new Set(product.domains.map(d => d.toLowerCase()));
|
|
236
|
+
// Find matched keywords
|
|
237
|
+
const matchedKeywords = [...keywordSet].filter(k => productDomains.has(k));
|
|
238
|
+
const similarity = jaccardSimilarity(keywords, product.domains);
|
|
239
|
+
return {
|
|
240
|
+
name: product.name,
|
|
241
|
+
similarity,
|
|
242
|
+
matchedKeywords,
|
|
243
|
+
category: product.category
|
|
244
|
+
};
|
|
245
|
+
});
|
|
246
|
+
// Sort by similarity
|
|
247
|
+
return results.sort((a, b) => b.similarity - a.similarity);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Add a custom product to the database (for testing or extensibility)
|
|
251
|
+
*
|
|
252
|
+
* @param product - Known product to add
|
|
253
|
+
*/
|
|
254
|
+
export function addKnownProduct(product) {
|
|
255
|
+
KNOWN_PRODUCTS.push(product);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get all known products in the database
|
|
259
|
+
*
|
|
260
|
+
* @returns Array of all known products
|
|
261
|
+
*/
|
|
262
|
+
export function getAllKnownProducts() {
|
|
263
|
+
return KNOWN_PRODUCTS;
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=CompetitorAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompetitorAnalyzer.js","sourceRoot":"","sources":["../../../../src/init/research/CompetitorAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Market Category Detector - Rule-Based Classification
|
|
3
|
+
*
|
|
4
|
+
* Classifies product vision into market categories using intelligent
|
|
5
|
+
* rule-based matching against domain patterns. No external LLM calls -
|
|
6
|
+
* all classification logic is encoded at spec-time.
|
|
7
|
+
*
|
|
8
|
+
* **Approach**:
|
|
9
|
+
* 1. Match vision against domain patterns
|
|
10
|
+
* 2. Score each market category based on pattern matches
|
|
11
|
+
* 3. Calculate confidence score
|
|
12
|
+
* 4. Return best-fit category with confidence
|
|
13
|
+
*
|
|
14
|
+
* **Benefits**:
|
|
15
|
+
* - Zero external dependencies
|
|
16
|
+
* - Instant classification (no API latency)
|
|
17
|
+
* - 100% deterministic and testable
|
|
18
|
+
* - Works offline
|
|
19
|
+
*/
|
|
20
|
+
import { MarketCategory } from './types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Market category classification result
|
|
23
|
+
*/
|
|
24
|
+
export interface MarketClassification {
|
|
25
|
+
/** Detected market category */
|
|
26
|
+
category: MarketCategory;
|
|
27
|
+
/** Confidence score (0-1) */
|
|
28
|
+
confidence: number;
|
|
29
|
+
/** Runner-up category (if close) */
|
|
30
|
+
runnerUp?: {
|
|
31
|
+
category: MarketCategory;
|
|
32
|
+
confidence: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Detect market category from vision text
|
|
37
|
+
*
|
|
38
|
+
* Uses rule-based classification against domain patterns to determine
|
|
39
|
+
* the best-fit market category with confidence score.
|
|
40
|
+
*
|
|
41
|
+
* @param vision - Product vision text
|
|
42
|
+
* @returns Market classification with category and confidence
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const result = detectMarketCategory('A project management tool for agile teams');
|
|
47
|
+
* // Returns: { category: 'productivity-saas', confidence: 0.85 }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function detectMarketCategory(vision: string): MarketClassification;
|
|
51
|
+
/**
|
|
52
|
+
* Get all potential market categories with scores (useful for debugging)
|
|
53
|
+
*
|
|
54
|
+
* @param vision - Product vision text
|
|
55
|
+
* @returns Array of all categories with scores, sorted by confidence
|
|
56
|
+
*/
|
|
57
|
+
export declare function analyzeMarketCategories(vision: string): Array<{
|
|
58
|
+
category: MarketCategory;
|
|
59
|
+
confidence: number;
|
|
60
|
+
matchedDomains: string[];
|
|
61
|
+
}>;
|
|
62
|
+
//# sourceMappingURL=MarketDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketDetector.d.ts","sourceRoot":"","sources":["../../../../src/init/research/MarketDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAyB5C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,QAAQ,EAAE,cAAc,CAAC;IAEzB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,cAAc,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAyFD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CA+FzE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7D,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC,CAsDD"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Market Category Detector - Rule-Based Classification
|
|
3
|
+
*
|
|
4
|
+
* Classifies product vision into market categories using intelligent
|
|
5
|
+
* rule-based matching against domain patterns. No external LLM calls -
|
|
6
|
+
* all classification logic is encoded at spec-time.
|
|
7
|
+
*
|
|
8
|
+
* **Approach**:
|
|
9
|
+
* 1. Match vision against domain patterns
|
|
10
|
+
* 2. Score each market category based on pattern matches
|
|
11
|
+
* 3. Calculate confidence score
|
|
12
|
+
* 4. Return best-fit category with confidence
|
|
13
|
+
*
|
|
14
|
+
* **Benefits**:
|
|
15
|
+
* - Zero external dependencies
|
|
16
|
+
* - Instant classification (no API latency)
|
|
17
|
+
* - 100% deterministic and testable
|
|
18
|
+
* - Works offline
|
|
19
|
+
*/
|
|
20
|
+
import { DOMAIN_PATTERNS } from './keyword-extractor.js';
|
|
21
|
+
/**
|
|
22
|
+
* Market category mappings with intelligent rules
|
|
23
|
+
*
|
|
24
|
+
* This encodes business intelligence about what domains correlate
|
|
25
|
+
* with which market categories.
|
|
26
|
+
*/
|
|
27
|
+
const MARKET_MAPPINGS = [
|
|
28
|
+
{
|
|
29
|
+
category: 'productivity-saas',
|
|
30
|
+
primaryDomains: ['productivity', 'saas', 'collaboration'],
|
|
31
|
+
secondaryDomains: ['enterprise', 'design'],
|
|
32
|
+
minConfidence: 0.6
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
category: 'healthcare',
|
|
36
|
+
primaryDomains: ['healthcare'],
|
|
37
|
+
secondaryDomains: ['ai-ml', 'saas', 'enterprise'],
|
|
38
|
+
minConfidence: 0.7
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
category: 'fintech',
|
|
42
|
+
primaryDomains: ['fintech'],
|
|
43
|
+
secondaryDomains: ['ecommerce', 'enterprise', 'blockchain'],
|
|
44
|
+
minConfidence: 0.7
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
category: 'e-commerce',
|
|
48
|
+
primaryDomains: ['ecommerce'],
|
|
49
|
+
secondaryDomains: ['fintech', 'ai-ml', 'social'],
|
|
50
|
+
minConfidence: 0.6
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
category: 'education',
|
|
54
|
+
primaryDomains: ['education'],
|
|
55
|
+
secondaryDomains: ['ai-ml', 'saas', 'collaboration'],
|
|
56
|
+
minConfidence: 0.6
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
category: 'gaming',
|
|
60
|
+
primaryDomains: ['gaming'],
|
|
61
|
+
secondaryDomains: ['social', 'ai-ml'],
|
|
62
|
+
minConfidence: 0.7
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
category: 'social-network',
|
|
66
|
+
primaryDomains: ['social'],
|
|
67
|
+
secondaryDomains: ['collaboration', 'ecommerce', 'gaming'],
|
|
68
|
+
minConfidence: 0.6
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
category: 'enterprise-b2b',
|
|
72
|
+
primaryDomains: ['enterprise'],
|
|
73
|
+
secondaryDomains: ['productivity', 'saas', 'collaboration'],
|
|
74
|
+
minConfidence: 0.6
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
category: 'consumer-b2c',
|
|
78
|
+
primaryDomains: ['social', 'ecommerce'],
|
|
79
|
+
secondaryDomains: ['gaming', 'education'],
|
|
80
|
+
minConfidence: 0.5
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
category: 'marketplace',
|
|
84
|
+
primaryDomains: ['ecommerce'],
|
|
85
|
+
secondaryDomains: ['social', 'fintech'],
|
|
86
|
+
minConfidence: 0.6
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
category: 'iot',
|
|
90
|
+
primaryDomains: ['iot'],
|
|
91
|
+
secondaryDomains: ['ai-ml', 'healthcare'],
|
|
92
|
+
minConfidence: 0.7
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
category: 'blockchain',
|
|
96
|
+
primaryDomains: ['blockchain'],
|
|
97
|
+
secondaryDomains: ['fintech', 'gaming'],
|
|
98
|
+
minConfidence: 0.7
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
category: 'ai-ml',
|
|
102
|
+
primaryDomains: ['ai-ml'],
|
|
103
|
+
secondaryDomains: ['healthcare', 'fintech', 'ecommerce'],
|
|
104
|
+
minConfidence: 0.7
|
|
105
|
+
}
|
|
106
|
+
];
|
|
107
|
+
/**
|
|
108
|
+
* Detect market category from vision text
|
|
109
|
+
*
|
|
110
|
+
* Uses rule-based classification against domain patterns to determine
|
|
111
|
+
* the best-fit market category with confidence score.
|
|
112
|
+
*
|
|
113
|
+
* @param vision - Product vision text
|
|
114
|
+
* @returns Market classification with category and confidence
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* const result = detectMarketCategory('A project management tool for agile teams');
|
|
119
|
+
* // Returns: { category: 'productivity-saas', confidence: 0.85 }
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export function detectMarketCategory(vision) {
|
|
123
|
+
if (!vision || vision.trim().length === 0) {
|
|
124
|
+
return {
|
|
125
|
+
category: 'unknown',
|
|
126
|
+
confidence: 0
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const visionLower = vision.toLowerCase();
|
|
130
|
+
// Step 1: Detect which domains are present in the vision
|
|
131
|
+
const presentDomains = new Set();
|
|
132
|
+
for (const domainPattern of DOMAIN_PATTERNS) {
|
|
133
|
+
const regex = new RegExp(domainPattern.pattern);
|
|
134
|
+
if (regex.test(visionLower)) {
|
|
135
|
+
presentDomains.add(domainPattern.domain);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// If no domains detected, return unknown
|
|
139
|
+
if (presentDomains.size === 0) {
|
|
140
|
+
return {
|
|
141
|
+
category: 'unknown',
|
|
142
|
+
confidence: 0
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// Step 2: Score each market category based on domain matches
|
|
146
|
+
const categoryScores = [];
|
|
147
|
+
for (const mapping of MARKET_MAPPINGS) {
|
|
148
|
+
let score = 0;
|
|
149
|
+
// Primary domains: weight 3.0
|
|
150
|
+
for (const primaryDomain of mapping.primaryDomains) {
|
|
151
|
+
if (presentDomains.has(primaryDomain)) {
|
|
152
|
+
score += 3.0;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Secondary domains: weight 1.0
|
|
156
|
+
for (const secondaryDomain of mapping.secondaryDomains) {
|
|
157
|
+
if (presentDomains.has(secondaryDomain)) {
|
|
158
|
+
score += 1.0;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Calculate confidence (normalize score)
|
|
162
|
+
const maxPossibleScore = mapping.primaryDomains.length * 3.0 +
|
|
163
|
+
mapping.secondaryDomains.length * 1.0;
|
|
164
|
+
const confidence = score / maxPossibleScore;
|
|
165
|
+
if (confidence >= mapping.minConfidence) {
|
|
166
|
+
categoryScores.push({
|
|
167
|
+
category: mapping.category,
|
|
168
|
+
score,
|
|
169
|
+
confidence
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Step 3: Sort by score (descending)
|
|
174
|
+
categoryScores.sort((a, b) => b.score - a.score);
|
|
175
|
+
// Step 4: Return best match (or unknown if no matches)
|
|
176
|
+
if (categoryScores.length === 0) {
|
|
177
|
+
return {
|
|
178
|
+
category: 'unknown',
|
|
179
|
+
confidence: 0
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const best = categoryScores[0];
|
|
183
|
+
const result = {
|
|
184
|
+
category: best.category,
|
|
185
|
+
confidence: best.confidence
|
|
186
|
+
};
|
|
187
|
+
// Include runner-up if close (within 20% confidence)
|
|
188
|
+
if (categoryScores.length > 1) {
|
|
189
|
+
const runnerUp = categoryScores[1];
|
|
190
|
+
if (runnerUp.confidence >= best.confidence * 0.8) {
|
|
191
|
+
result.runnerUp = {
|
|
192
|
+
category: runnerUp.category,
|
|
193
|
+
confidence: runnerUp.confidence
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get all potential market categories with scores (useful for debugging)
|
|
201
|
+
*
|
|
202
|
+
* @param vision - Product vision text
|
|
203
|
+
* @returns Array of all categories with scores, sorted by confidence
|
|
204
|
+
*/
|
|
205
|
+
export function analyzeMarketCategories(vision) {
|
|
206
|
+
if (!vision || vision.trim().length === 0) {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
const visionLower = vision.toLowerCase();
|
|
210
|
+
// Detect domains
|
|
211
|
+
const presentDomains = new Set();
|
|
212
|
+
for (const domainPattern of DOMAIN_PATTERNS) {
|
|
213
|
+
const regex = new RegExp(domainPattern.pattern);
|
|
214
|
+
if (regex.test(visionLower)) {
|
|
215
|
+
presentDomains.add(domainPattern.domain);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Score all categories
|
|
219
|
+
const results = [];
|
|
220
|
+
for (const mapping of MARKET_MAPPINGS) {
|
|
221
|
+
let score = 0;
|
|
222
|
+
const matchedDomains = [];
|
|
223
|
+
for (const primaryDomain of mapping.primaryDomains) {
|
|
224
|
+
if (presentDomains.has(primaryDomain)) {
|
|
225
|
+
score += 3.0;
|
|
226
|
+
matchedDomains.push(primaryDomain);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
for (const secondaryDomain of mapping.secondaryDomains) {
|
|
230
|
+
if (presentDomains.has(secondaryDomain)) {
|
|
231
|
+
score += 1.0;
|
|
232
|
+
matchedDomains.push(secondaryDomain);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const maxPossibleScore = mapping.primaryDomains.length * 3.0 +
|
|
236
|
+
mapping.secondaryDomains.length * 1.0;
|
|
237
|
+
const confidence = score / maxPossibleScore;
|
|
238
|
+
results.push({
|
|
239
|
+
category: mapping.category,
|
|
240
|
+
confidence,
|
|
241
|
+
matchedDomains
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
// Sort by confidence
|
|
245
|
+
return results.sort((a, b) => b.confidence - a.confidence);
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=MarketDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarketDetector.js","sourceRoot":"","sources":["../../../../src/init/research/MarketDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opportunity Score Calculator
|
|
3
|
+
*
|
|
4
|
+
* Calculates market opportunity score (1-10 scale) based on:
|
|
5
|
+
* - Market size estimate
|
|
6
|
+
* - Competition density
|
|
7
|
+
* - Viral potential
|
|
8
|
+
* - Innovation factor
|
|
9
|
+
*
|
|
10
|
+
* **Formula**:
|
|
11
|
+
* score = (marketSize / 10) - (competitionDensity / 2) + viralBonus + innovationBonus
|
|
12
|
+
* Clamped to 1-10 range
|
|
13
|
+
*
|
|
14
|
+
* **Benefits**:
|
|
15
|
+
* - Algorithmic calculation (no LLM needed)
|
|
16
|
+
* - Transparent scoring logic
|
|
17
|
+
* - Deterministic and testable
|
|
18
|
+
*/
|
|
19
|
+
import { MarketCategory } from './types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Calculate market opportunity score
|
|
22
|
+
*
|
|
23
|
+
* @param marketCategory - Detected market category
|
|
24
|
+
* @param competitorCount - Number of direct competitors identified
|
|
25
|
+
* @param viralPotential - Whether product has viral growth potential
|
|
26
|
+
* @param innovationFactor - Innovation score (0-1) based on uniqueness
|
|
27
|
+
* @returns Opportunity score (1-10) with rationale
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const result = calculateOpportunityScore('productivity-saas', 5, true, 0.7);
|
|
32
|
+
* // Returns: { score: 7, rationale: '...' }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function calculateOpportunityScore(marketCategory: MarketCategory, competitorCount: number, viralPotential: boolean, innovationFactor?: number): {
|
|
36
|
+
score: number;
|
|
37
|
+
rationale: string;
|
|
38
|
+
breakdown: {
|
|
39
|
+
marketSize: number;
|
|
40
|
+
competition: number;
|
|
41
|
+
viral: number;
|
|
42
|
+
innovation: number;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Estimate innovation factor from keywords and competitors
|
|
47
|
+
*
|
|
48
|
+
* Innovation factor is based on:
|
|
49
|
+
* - Unique keyword combinations
|
|
50
|
+
* - Number of competitors (fewer = more innovative)
|
|
51
|
+
* - Presence of emerging tech keywords
|
|
52
|
+
*
|
|
53
|
+
* @param keywords - Product keywords
|
|
54
|
+
* @param competitorCount - Number of competitors
|
|
55
|
+
* @returns Innovation score (0-1)
|
|
56
|
+
*/
|
|
57
|
+
export declare function estimateInnovationFactor(keywords: string[], competitorCount: number): number;
|
|
58
|
+
//# sourceMappingURL=OpportunityScorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpportunityScorer.d.ts","sourceRoot":"","sources":["../../../../src/init/research/OpportunityScorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA8C5C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,OAAO,EACvB,gBAAgB,GAAE,MAAY,GAC7B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CA+CA;AA4DD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAAE,EAClB,eAAe,EAAE,MAAM,GACtB,MAAM,CAwBR"}
|