circle-ir-ai 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +105 -0
- package/LICENSE +15 -0
- package/README.md +336 -0
- package/dist/action-queue/aggregator.d.ts +40 -0
- package/dist/action-queue/aggregator.d.ts.map +1 -0
- package/dist/action-queue/aggregator.js +375 -0
- package/dist/action-queue/aggregator.js.map +1 -0
- package/dist/action-queue/index.d.ts +14 -0
- package/dist/action-queue/index.d.ts.map +1 -0
- package/dist/action-queue/index.js +17 -0
- package/dist/action-queue/index.js.map +1 -0
- package/dist/action-queue/queue.d.ts +74 -0
- package/dist/action-queue/queue.d.ts.map +1 -0
- package/dist/action-queue/queue.js +433 -0
- package/dist/action-queue/queue.js.map +1 -0
- package/dist/action-queue/types.d.ts +162 -0
- package/dist/action-queue/types.d.ts.map +1 -0
- package/dist/action-queue/types.js +44 -0
- package/dist/action-queue/types.js.map +1 -0
- package/dist/agents/enrichment-agent.d.ts +16 -0
- package/dist/agents/enrichment-agent.d.ts.map +1 -0
- package/dist/agents/enrichment-agent.js +102 -0
- package/dist/agents/enrichment-agent.js.map +1 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +15 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/mastra/agents.d.ts +373 -0
- package/dist/agents/mastra/agents.d.ts.map +1 -0
- package/dist/agents/mastra/agents.js +347 -0
- package/dist/agents/mastra/agents.js.map +1 -0
- package/dist/agents/mastra/index.d.ts +12 -0
- package/dist/agents/mastra/index.d.ts.map +1 -0
- package/dist/agents/mastra/index.js +17 -0
- package/dist/agents/mastra/index.js.map +1 -0
- package/dist/agents/mastra/instance.d.ts +383 -0
- package/dist/agents/mastra/instance.d.ts.map +1 -0
- package/dist/agents/mastra/instance.js +37 -0
- package/dist/agents/mastra/instance.js.map +1 -0
- package/dist/agents/mastra/steps.d.ts +300 -0
- package/dist/agents/mastra/steps.d.ts.map +1 -0
- package/dist/agents/mastra/steps.js +468 -0
- package/dist/agents/mastra/steps.js.map +1 -0
- package/dist/agents/mastra/swarm.d.ts +106 -0
- package/dist/agents/mastra/swarm.d.ts.map +1 -0
- package/dist/agents/mastra/swarm.js +501 -0
- package/dist/agents/mastra/swarm.js.map +1 -0
- package/dist/agents/mastra/workflow.d.ts +81 -0
- package/dist/agents/mastra/workflow.d.ts.map +1 -0
- package/dist/agents/mastra/workflow.js +460 -0
- package/dist/agents/mastra/workflow.js.map +1 -0
- package/dist/agents/multi/agents/security.d.ts +29 -0
- package/dist/agents/multi/agents/security.d.ts.map +1 -0
- package/dist/agents/multi/agents/security.js +830 -0
- package/dist/agents/multi/agents/security.js.map +1 -0
- package/dist/agents/multi/extractor.d.ts +21 -0
- package/dist/agents/multi/extractor.d.ts.map +1 -0
- package/dist/agents/multi/extractor.js +483 -0
- package/dist/agents/multi/extractor.js.map +1 -0
- package/dist/agents/multi/index.d.ts +32 -0
- package/dist/agents/multi/index.d.ts.map +1 -0
- package/dist/agents/multi/index.js +34 -0
- package/dist/agents/multi/index.js.map +1 -0
- package/dist/agents/multi/runner.d.ts +79 -0
- package/dist/agents/multi/runner.d.ts.map +1 -0
- package/dist/agents/multi/runner.js +323 -0
- package/dist/agents/multi/runner.js.map +1 -0
- package/dist/agents/security-agent.d.ts +16 -0
- package/dist/agents/security-agent.d.ts.map +1 -0
- package/dist/agents/security-agent.js +299 -0
- package/dist/agents/security-agent.js.map +1 -0
- package/dist/agents/types.d.ts +373 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +14 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/verification-agent.d.ts +23 -0
- package/dist/agents/verification-agent.d.ts.map +1 -0
- package/dist/agents/verification-agent.js +217 -0
- package/dist/agents/verification-agent.js.map +1 -0
- package/dist/agents/workflow.d.ts +30 -0
- package/dist/agents/workflow.d.ts.map +1 -0
- package/dist/agents/workflow.js +79 -0
- package/dist/agents/workflow.js.map +1 -0
- package/dist/analysis/enriched.d.ts +16 -0
- package/dist/analysis/enriched.d.ts.map +1 -0
- package/dist/analysis/enriched.js +297 -0
- package/dist/analysis/enriched.js.map +1 -0
- package/dist/analysis/llm-correlated-predicates.d.ts +80 -0
- package/dist/analysis/llm-correlated-predicates.d.ts.map +1 -0
- package/dist/analysis/llm-correlated-predicates.js +255 -0
- package/dist/analysis/llm-correlated-predicates.js.map +1 -0
- package/dist/analysis/llm-cross-file-taint.d.ts +86 -0
- package/dist/analysis/llm-cross-file-taint.d.ts.map +1 -0
- package/dist/analysis/llm-cross-file-taint.js +264 -0
- package/dist/analysis/llm-cross-file-taint.js.map +1 -0
- package/dist/analysis/pattern-discovery.d.ts +79 -0
- package/dist/analysis/pattern-discovery.d.ts.map +1 -0
- package/dist/analysis/pattern-discovery.js +447 -0
- package/dist/analysis/pattern-discovery.js.map +1 -0
- package/dist/cache/file-cache.d.ts +89 -0
- package/dist/cache/file-cache.d.ts.map +1 -0
- package/dist/cache/file-cache.js +208 -0
- package/dist/cache/file-cache.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cli/args.d.ts +52 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +422 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/colors.d.ts +31 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +80 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/commands/analyze-skill.d.ts +33 -0
- package/dist/cli/commands/analyze-skill.d.ts.map +1 -0
- package/dist/cli/commands/analyze-skill.js +217 -0
- package/dist/cli/commands/analyze-skill.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +18 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +30 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/benchmark-runner.d.ts +42 -0
- package/dist/cli/commands/benchmark-runner.d.ts.map +1 -0
- package/dist/cli/commands/benchmark-runner.js +18 -0
- package/dist/cli/commands/benchmark-runner.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +11 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +90 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/dead-code.d.ts +11 -0
- package/dist/cli/commands/dead-code.d.ts.map +1 -0
- package/dist/cli/commands/dead-code.js +65 -0
- package/dist/cli/commands/dead-code.js.map +1 -0
- package/dist/cli/commands/generate-spec.d.ts +11 -0
- package/dist/cli/commands/generate-spec.d.ts.map +1 -0
- package/dist/cli/commands/generate-spec.js +67 -0
- package/dist/cli/commands/generate-spec.js.map +1 -0
- package/dist/cli/commands/health.d.ts +11 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +67 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/project.d.ts +21 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +92 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +11 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +68 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/secrets.d.ts +11 -0
- package/dist/cli/commands/secrets.d.ts.map +1 -0
- package/dist/cli/commands/secrets.js +71 -0
- package/dist/cli/commands/secrets.js.map +1 -0
- package/dist/cli/commands/swarm.d.ts +20 -0
- package/dist/cli/commands/swarm.d.ts.map +1 -0
- package/dist/cli/commands/swarm.js +174 -0
- package/dist/cli/commands/swarm.js.map +1 -0
- package/dist/cli/config.d.ts +103 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +307 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/discovery.d.ts +31 -0
- package/dist/cli/discovery.d.ts.map +1 -0
- package/dist/cli/discovery.js +212 -0
- package/dist/cli/discovery.js.map +1 -0
- package/dist/cli/formatters/index.d.ts +15 -0
- package/dist/cli/formatters/index.d.ts.map +1 -0
- package/dist/cli/formatters/index.js +51 -0
- package/dist/cli/formatters/index.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +11 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +12 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/project-json.d.ts +11 -0
- package/dist/cli/formatters/project-json.d.ts.map +1 -0
- package/dist/cli/formatters/project-json.js +12 -0
- package/dist/cli/formatters/project-json.js.map +1 -0
- package/dist/cli/formatters/project-sarif.d.ts +11 -0
- package/dist/cli/formatters/project-sarif.d.ts.map +1 -0
- package/dist/cli/formatters/project-sarif.js +127 -0
- package/dist/cli/formatters/project-sarif.js.map +1 -0
- package/dist/cli/formatters/project-summary.d.ts +11 -0
- package/dist/cli/formatters/project-summary.d.ts.map +1 -0
- package/dist/cli/formatters/project-summary.js +202 -0
- package/dist/cli/formatters/project-summary.js.map +1 -0
- package/dist/cli/formatters/sarif-shared.d.ts +101 -0
- package/dist/cli/formatters/sarif-shared.d.ts.map +1 -0
- package/dist/cli/formatters/sarif-shared.js +57 -0
- package/dist/cli/formatters/sarif-shared.js.map +1 -0
- package/dist/cli/formatters/sarif.d.ts +12 -0
- package/dist/cli/formatters/sarif.d.ts.map +1 -0
- package/dist/cli/formatters/sarif.js +92 -0
- package/dist/cli/formatters/sarif.js.map +1 -0
- package/dist/cli/formatters/summary.d.ts +11 -0
- package/dist/cli/formatters/summary.d.ts.map +1 -0
- package/dist/cli/formatters/summary.js +240 -0
- package/dist/cli/formatters/summary.js.map +1 -0
- package/dist/cli/formatters/two-phase-summary.d.ts +11 -0
- package/dist/cli/formatters/two-phase-summary.d.ts.map +1 -0
- package/dist/cli/formatters/two-phase-summary.js +188 -0
- package/dist/cli/formatters/two-phase-summary.js.map +1 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +555 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/components/clustering.d.ts +60 -0
- package/dist/components/clustering.d.ts.map +1 -0
- package/dist/components/clustering.js +129 -0
- package/dist/components/clustering.js.map +1 -0
- package/dist/components/enrichment.d.ts +45 -0
- package/dist/components/enrichment.d.ts.map +1 -0
- package/dist/components/enrichment.js +193 -0
- package/dist/components/enrichment.js.map +1 -0
- package/dist/components/index.d.ts +29 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +56 -0
- package/dist/components/index.js.map +1 -0
- package/dist/dead-code/detector.d.ts +200 -0
- package/dist/dead-code/detector.d.ts.map +1 -0
- package/dist/dead-code/detector.js +1003 -0
- package/dist/dead-code/detector.js.map +1 -0
- package/dist/dead-code/index.d.ts +7 -0
- package/dist/dead-code/index.d.ts.map +1 -0
- package/dist/dead-code/index.js +7 -0
- package/dist/dead-code/index.js.map +1 -0
- package/dist/extractors/index.d.ts +15 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +14 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/natural-language.d.ts +46 -0
- package/dist/extractors/natural-language.d.ts.map +1 -0
- package/dist/extractors/natural-language.js +228 -0
- package/dist/extractors/natural-language.js.map +1 -0
- package/dist/extractors/tree-sitter.d.ts +33 -0
- package/dist/extractors/tree-sitter.d.ts.map +1 -0
- package/dist/extractors/tree-sitter.js +69 -0
- package/dist/extractors/tree-sitter.js.map +1 -0
- package/dist/extractors/types.d.ts +62 -0
- package/dist/extractors/types.d.ts.map +1 -0
- package/dist/extractors/types.js +54 -0
- package/dist/extractors/types.js.map +1 -0
- package/dist/health-score/calculator.d.ts +123 -0
- package/dist/health-score/calculator.d.ts.map +1 -0
- package/dist/health-score/calculator.js +444 -0
- package/dist/health-score/calculator.js.map +1 -0
- package/dist/health-score/index.d.ts +12 -0
- package/dist/health-score/index.d.ts.map +1 -0
- package/dist/health-score/index.js +14 -0
- package/dist/health-score/index.js.map +1 -0
- package/dist/health-score/metrics.d.ts +142 -0
- package/dist/health-score/metrics.d.ts.map +1 -0
- package/dist/health-score/metrics.js +332 -0
- package/dist/health-score/metrics.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/ax-client.d.ts +477 -0
- package/dist/llm/ax-client.d.ts.map +1 -0
- package/dist/llm/ax-client.js +1641 -0
- package/dist/llm/ax-client.js.map +1 -0
- package/dist/llm/config.d.ts +58 -0
- package/dist/llm/config.d.ts.map +1 -0
- package/dist/llm/config.js +97 -0
- package/dist/llm/config.js.map +1 -0
- package/dist/llm/discovery.d.ts +123 -0
- package/dist/llm/discovery.d.ts.map +1 -0
- package/dist/llm/discovery.js +505 -0
- package/dist/llm/discovery.js.map +1 -0
- package/dist/llm/enrichment.d.ts +108 -0
- package/dist/llm/enrichment.d.ts.map +1 -0
- package/dist/llm/enrichment.js +312 -0
- package/dist/llm/enrichment.js.map +1 -0
- package/dist/llm/index.d.ts +13 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +22 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/language-context.d.ts +64 -0
- package/dist/llm/language-context.d.ts.map +1 -0
- package/dist/llm/language-context.js +492 -0
- package/dist/llm/language-context.js.map +1 -0
- package/dist/llm/pattern-verification.d.ts +39 -0
- package/dist/llm/pattern-verification.d.ts.map +1 -0
- package/dist/llm/pattern-verification.js +127 -0
- package/dist/llm/pattern-verification.js.map +1 -0
- package/dist/llm/prompt-security.d.ts +120 -0
- package/dist/llm/prompt-security.d.ts.map +1 -0
- package/dist/llm/prompt-security.js +301 -0
- package/dist/llm/prompt-security.js.map +1 -0
- package/dist/llm/prompts/index.d.ts +31 -0
- package/dist/llm/prompts/index.d.ts.map +1 -0
- package/dist/llm/prompts/index.js +92 -0
- package/dist/llm/prompts/index.js.map +1 -0
- package/dist/llm/prompts/rust.d.ts +30 -0
- package/dist/llm/prompts/rust.d.ts.map +1 -0
- package/dist/llm/prompts/rust.js +121 -0
- package/dist/llm/prompts/rust.js.map +1 -0
- package/dist/llm/schemas.d.ts +892 -0
- package/dist/llm/schemas.d.ts.map +1 -0
- package/dist/llm/schemas.js +258 -0
- package/dist/llm/schemas.js.map +1 -0
- package/dist/llm/verification.d.ts +127 -0
- package/dist/llm/verification.d.ts.map +1 -0
- package/dist/llm/verification.js +394 -0
- package/dist/llm/verification.js.map +1 -0
- package/dist/project/analyzer.d.ts +30 -0
- package/dist/project/analyzer.d.ts.map +1 -0
- package/dist/project/analyzer.js +358 -0
- package/dist/project/analyzer.js.map +1 -0
- package/dist/project/call-graph.d.ts +22 -0
- package/dist/project/call-graph.d.ts.map +1 -0
- package/dist/project/call-graph.js +246 -0
- package/dist/project/call-graph.js.map +1 -0
- package/dist/project/index.d.ts +18 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +20 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/taint-paths.d.ts +22 -0
- package/dist/project/taint-paths.d.ts.map +1 -0
- package/dist/project/taint-paths.js +265 -0
- package/dist/project/taint-paths.js.map +1 -0
- package/dist/project/two-phase-analyzer.d.ts +143 -0
- package/dist/project/two-phase-analyzer.d.ts.map +1 -0
- package/dist/project/two-phase-analyzer.js +646 -0
- package/dist/project/two-phase-analyzer.js.map +1 -0
- package/dist/project/type-hierarchy.d.ts +28 -0
- package/dist/project/type-hierarchy.d.ts.map +1 -0
- package/dist/project/type-hierarchy.js +218 -0
- package/dist/project/type-hierarchy.js.map +1 -0
- package/dist/secret-scan/index.d.ts +12 -0
- package/dist/secret-scan/index.d.ts.map +1 -0
- package/dist/secret-scan/index.js +14 -0
- package/dist/secret-scan/index.js.map +1 -0
- package/dist/secret-scan/patterns.d.ts +38 -0
- package/dist/secret-scan/patterns.d.ts.map +1 -0
- package/dist/secret-scan/patterns.js +473 -0
- package/dist/secret-scan/patterns.js.map +1 -0
- package/dist/secret-scan/scanner.d.ts +162 -0
- package/dist/secret-scan/scanner.d.ts.map +1 -0
- package/dist/secret-scan/scanner.js +511 -0
- package/dist/secret-scan/scanner.js.map +1 -0
- package/dist/security-scan/index.d.ts +12 -0
- package/dist/security-scan/index.d.ts.map +1 -0
- package/dist/security-scan/index.js +15 -0
- package/dist/security-scan/index.js.map +1 -0
- package/dist/security-scan/owasp-mapping.d.ts +29 -0
- package/dist/security-scan/owasp-mapping.d.ts.map +1 -0
- package/dist/security-scan/owasp-mapping.js +246 -0
- package/dist/security-scan/owasp-mapping.js.map +1 -0
- package/dist/security-scan/scanner.d.ts +204 -0
- package/dist/security-scan/scanner.d.ts.map +1 -0
- package/dist/security-scan/scanner.js +693 -0
- package/dist/security-scan/scanner.js.map +1 -0
- package/dist/security-scan/trend-tracker.d.ts +150 -0
- package/dist/security-scan/trend-tracker.d.ts.map +1 -0
- package/dist/security-scan/trend-tracker.js +299 -0
- package/dist/security-scan/trend-tracker.js.map +1 -0
- package/dist/skills/bundle-loader.d.ts +26 -0
- package/dist/skills/bundle-loader.d.ts.map +1 -0
- package/dist/skills/bundle-loader.js +284 -0
- package/dist/skills/bundle-loader.js.map +1 -0
- package/dist/skills/capability-mismatch.d.ts +21 -0
- package/dist/skills/capability-mismatch.d.ts.map +1 -0
- package/dist/skills/capability-mismatch.js +188 -0
- package/dist/skills/capability-mismatch.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +9 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-analyzer.d.ts +16 -0
- package/dist/skills/skill-analyzer.d.ts.map +1 -0
- package/dist/skills/skill-analyzer.js +361 -0
- package/dist/skills/skill-analyzer.js.map +1 -0
- package/dist/skills/types.d.ts +195 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +7 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/specifica/conflict-resolver.d.ts +23 -0
- package/dist/specifica/conflict-resolver.d.ts.map +1 -0
- package/dist/specifica/conflict-resolver.js +129 -0
- package/dist/specifica/conflict-resolver.js.map +1 -0
- package/dist/specifica/evidence-aggregator.d.ts +33 -0
- package/dist/specifica/evidence-aggregator.d.ts.map +1 -0
- package/dist/specifica/evidence-aggregator.js +236 -0
- package/dist/specifica/evidence-aggregator.js.map +1 -0
- package/dist/specifica/evidence-extractor.d.ts +13 -0
- package/dist/specifica/evidence-extractor.d.ts.map +1 -0
- package/dist/specifica/evidence-extractor.js +431 -0
- package/dist/specifica/evidence-extractor.js.map +1 -0
- package/dist/specifica/feature-clustering.d.ts +19 -0
- package/dist/specifica/feature-clustering.d.ts.map +1 -0
- package/dist/specifica/feature-clustering.js +231 -0
- package/dist/specifica/feature-clustering.js.map +1 -0
- package/dist/specifica/generator.d.ts +16 -0
- package/dist/specifica/generator.d.ts.map +1 -0
- package/dist/specifica/generator.js +277 -0
- package/dist/specifica/generator.js.map +1 -0
- package/dist/specifica/index.d.ts +15 -0
- package/dist/specifica/index.d.ts.map +1 -0
- package/dist/specifica/index.js +18 -0
- package/dist/specifica/index.js.map +1 -0
- package/dist/specifica/prompts.d.ts +21 -0
- package/dist/specifica/prompts.d.ts.map +1 -0
- package/dist/specifica/prompts.js +196 -0
- package/dist/specifica/prompts.js.map +1 -0
- package/dist/specifica/spec-generator.d.ts +22 -0
- package/dist/specifica/spec-generator.d.ts.map +1 -0
- package/dist/specifica/spec-generator.js +229 -0
- package/dist/specifica/spec-generator.js.map +1 -0
- package/dist/specifica/types.d.ts +213 -0
- package/dist/specifica/types.d.ts.map +1 -0
- package/dist/specifica/types.js +7 -0
- package/dist/specifica/types.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +51 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature Clustering
|
|
3
|
+
*
|
|
4
|
+
* Groups related files into features for multi-file spec generation.
|
|
5
|
+
*/
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
/**
|
|
8
|
+
* Cluster files into features based on package, naming, and dependencies
|
|
9
|
+
*/
|
|
10
|
+
export function clusterFilesByFeature(evidenceList, rootDir) {
|
|
11
|
+
const clusters = new Map();
|
|
12
|
+
// Strategy 1: Package-based clustering (Java, etc.)
|
|
13
|
+
const packageClusters = clusterByPackage(evidenceList, rootDir);
|
|
14
|
+
for (const cluster of packageClusters) {
|
|
15
|
+
clusters.set(cluster.name, cluster);
|
|
16
|
+
}
|
|
17
|
+
// Strategy 2: Directory-based clustering (JS/TS, Python)
|
|
18
|
+
if (clusters.size === 0) {
|
|
19
|
+
const dirClusters = clusterByDirectory(evidenceList, rootDir);
|
|
20
|
+
for (const cluster of dirClusters) {
|
|
21
|
+
clusters.set(cluster.name, cluster);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Strategy 3: Naming pattern clustering
|
|
25
|
+
const nameClusters = clusterByNaming(evidenceList);
|
|
26
|
+
mergeClusters(clusters, nameClusters);
|
|
27
|
+
// If no clustering worked, create one cluster per file
|
|
28
|
+
if (clusters.size === 0) {
|
|
29
|
+
for (const evidence of evidenceList) {
|
|
30
|
+
const name = extractFeatureNameFromFile(evidence.filePath);
|
|
31
|
+
clusters.set(name, {
|
|
32
|
+
name,
|
|
33
|
+
files: [evidence.filePath],
|
|
34
|
+
evidence: [evidence],
|
|
35
|
+
confidence: 0.5,
|
|
36
|
+
clusteringMethod: 'naming',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return Array.from(clusters.values());
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Cluster by Java package structure
|
|
44
|
+
*/
|
|
45
|
+
function clusterByPackage(evidenceList, rootDir) {
|
|
46
|
+
const clusters = new Map();
|
|
47
|
+
for (const evidence of evidenceList) {
|
|
48
|
+
// Only works for languages with explicit packages
|
|
49
|
+
if (evidence.language !== 'java')
|
|
50
|
+
continue;
|
|
51
|
+
// Extract package from imports/types
|
|
52
|
+
const packageName = extractPackageName(evidence);
|
|
53
|
+
if (!packageName)
|
|
54
|
+
continue;
|
|
55
|
+
// Group by last segment of package (e.g., com.example.user -> user)
|
|
56
|
+
const feature = packageName.split('.').pop() || 'unknown';
|
|
57
|
+
if (!clusters.has(feature)) {
|
|
58
|
+
clusters.set(feature, []);
|
|
59
|
+
}
|
|
60
|
+
clusters.get(feature).push(evidence);
|
|
61
|
+
}
|
|
62
|
+
return Array.from(clusters.entries()).map(([name, evidence]) => ({
|
|
63
|
+
name,
|
|
64
|
+
files: evidence.map(e => e.filePath),
|
|
65
|
+
evidence,
|
|
66
|
+
confidence: 0.9,
|
|
67
|
+
clusteringMethod: 'package',
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Cluster by directory structure
|
|
72
|
+
*/
|
|
73
|
+
function clusterByDirectory(evidenceList, rootDir) {
|
|
74
|
+
const clusters = new Map();
|
|
75
|
+
for (const evidence of evidenceList) {
|
|
76
|
+
// Get directory relative to root
|
|
77
|
+
const relativePath = path.relative(rootDir, evidence.filePath);
|
|
78
|
+
const dir = path.dirname(relativePath);
|
|
79
|
+
// Use last directory segment as feature name
|
|
80
|
+
const segments = dir.split(path.sep);
|
|
81
|
+
const feature = segments[segments.length - 1] || 'root';
|
|
82
|
+
if (!clusters.has(feature)) {
|
|
83
|
+
clusters.set(feature, []);
|
|
84
|
+
}
|
|
85
|
+
clusters.get(feature).push(evidence);
|
|
86
|
+
}
|
|
87
|
+
return Array.from(clusters.entries()).map(([name, evidence]) => ({
|
|
88
|
+
name,
|
|
89
|
+
files: evidence.map(e => e.filePath),
|
|
90
|
+
evidence,
|
|
91
|
+
confidence: 0.7,
|
|
92
|
+
clusteringMethod: 'directory',
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Cluster by naming patterns (UserController, UserService -> user)
|
|
97
|
+
*/
|
|
98
|
+
function clusterByNaming(evidenceList) {
|
|
99
|
+
const clusters = new Map();
|
|
100
|
+
for (const evidence of evidenceList) {
|
|
101
|
+
const fileName = path.basename(evidence.filePath, path.extname(evidence.filePath));
|
|
102
|
+
// Extract feature name from file name
|
|
103
|
+
const feature = extractFeatureNameFromFile(fileName);
|
|
104
|
+
if (!clusters.has(feature)) {
|
|
105
|
+
clusters.set(feature, []);
|
|
106
|
+
}
|
|
107
|
+
clusters.get(feature).push(evidence);
|
|
108
|
+
}
|
|
109
|
+
return Array.from(clusters.entries()).map(([name, evidence]) => ({
|
|
110
|
+
name,
|
|
111
|
+
files: evidence.map(e => e.filePath),
|
|
112
|
+
evidence,
|
|
113
|
+
confidence: 0.6,
|
|
114
|
+
clusteringMethod: 'naming',
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Merge naming-based clusters into existing clusters
|
|
119
|
+
*/
|
|
120
|
+
function mergeClusters(existing, newClusters) {
|
|
121
|
+
for (const newCluster of newClusters) {
|
|
122
|
+
if (existing.has(newCluster.name)) {
|
|
123
|
+
// Merge evidence from naming cluster into existing
|
|
124
|
+
const existingCluster = existing.get(newCluster.name);
|
|
125
|
+
// Add files that aren't already in the cluster
|
|
126
|
+
for (const evidence of newCluster.evidence) {
|
|
127
|
+
if (!existingCluster.files.includes(evidence.filePath)) {
|
|
128
|
+
existingCluster.files.push(evidence.filePath);
|
|
129
|
+
existingCluster.evidence.push(evidence);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Update confidence (max of both methods)
|
|
133
|
+
existingCluster.confidence = Math.max(existingCluster.confidence, newCluster.confidence);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Extract package name from evidence
|
|
139
|
+
*/
|
|
140
|
+
function extractPackageName(evidence) {
|
|
141
|
+
// Try to find package from imports
|
|
142
|
+
for (const imp of evidence.imports) {
|
|
143
|
+
if (imp.module && imp.module.includes('.')) {
|
|
144
|
+
// Return package without the class name
|
|
145
|
+
const parts = imp.module.split('.');
|
|
146
|
+
return parts.slice(0, -1).join('.');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Try to infer from file path
|
|
150
|
+
const segments = evidence.filePath.split('/');
|
|
151
|
+
const javaIndex = segments.findIndex(s => s === 'java');
|
|
152
|
+
if (javaIndex !== -1 && javaIndex < segments.length - 2) {
|
|
153
|
+
return segments.slice(javaIndex + 1, -1).join('.');
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Extract feature name from file name
|
|
159
|
+
* Examples:
|
|
160
|
+
* UserController -> user
|
|
161
|
+
* OrderService -> order
|
|
162
|
+
* product-repository -> product
|
|
163
|
+
*/
|
|
164
|
+
function extractFeatureNameFromFile(fileName) {
|
|
165
|
+
// Remove common suffixes
|
|
166
|
+
const cleaned = fileName
|
|
167
|
+
.replace(/Controller$/i, '')
|
|
168
|
+
.replace(/Service$/i, '')
|
|
169
|
+
.replace(/Repository$/i, '')
|
|
170
|
+
.replace(/Handler$/i, '')
|
|
171
|
+
.replace(/Manager$/i, '')
|
|
172
|
+
.replace(/Impl$/i, '')
|
|
173
|
+
.replace(/Model$/i, '')
|
|
174
|
+
.replace(/Entity$/i, '');
|
|
175
|
+
// Convert to kebab-case
|
|
176
|
+
return cleaned
|
|
177
|
+
.replace(/([A-Z])/g, '-$1')
|
|
178
|
+
.toLowerCase()
|
|
179
|
+
.replace(/^-/, '')
|
|
180
|
+
.replace(/_/g, '-')
|
|
181
|
+
.replace(/\s+/g, '-');
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Filter clusters to only include those with multiple files or significant size
|
|
185
|
+
*/
|
|
186
|
+
export function filterSignificantClusters(clusters, minFiles = 1) {
|
|
187
|
+
return clusters.filter(cluster => {
|
|
188
|
+
// Include if it has enough files
|
|
189
|
+
if (cluster.files.length >= minFiles) {
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
// Include if single file but has significant content
|
|
193
|
+
if (cluster.files.length === 1) {
|
|
194
|
+
const evidence = cluster.evidence[0];
|
|
195
|
+
const hasAPI = evidence.publicAPI.length > 0;
|
|
196
|
+
const hasMethods = evidence.methods.length > 3;
|
|
197
|
+
const hasVulns = evidence.vulnerabilities.length > 0;
|
|
198
|
+
return hasAPI || hasMethods || hasVulns;
|
|
199
|
+
}
|
|
200
|
+
return false;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Sort clusters by importance (API endpoints, method count, vulnerabilities)
|
|
205
|
+
*/
|
|
206
|
+
export function sortClustersByImportance(clusters) {
|
|
207
|
+
return clusters.sort((a, b) => {
|
|
208
|
+
// Calculate importance score
|
|
209
|
+
const scoreA = calculateImportance(a);
|
|
210
|
+
const scoreB = calculateImportance(b);
|
|
211
|
+
return scoreB - scoreA;
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Calculate importance score for a cluster
|
|
216
|
+
*/
|
|
217
|
+
function calculateImportance(cluster) {
|
|
218
|
+
let score = 0;
|
|
219
|
+
for (const evidence of cluster.evidence) {
|
|
220
|
+
score += evidence.publicAPI.length * 10; // API endpoints are high value
|
|
221
|
+
score += evidence.methods.length * 1;
|
|
222
|
+
score += evidence.vulnerabilities.length * 5; // Security issues matter
|
|
223
|
+
score += evidence.types.length * 2;
|
|
224
|
+
}
|
|
225
|
+
// Bonus for multiple files (indicates larger feature)
|
|
226
|
+
if (cluster.files.length > 1) {
|
|
227
|
+
score += cluster.files.length * 5;
|
|
228
|
+
}
|
|
229
|
+
return score;
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=feature-clustering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-clustering.js","sourceRoot":"","sources":["../../src/specifica/feature-clustering.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAA4B,EAC5B,OAAe;IAEf,MAAM,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAExD,oDAAoD;IACpD,MAAM,eAAe,GAAG,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAChE,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC9D,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACnD,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEtC,uDAAuD;IACvD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,0BAA0B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3D,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;gBACjB,IAAI;gBACJ,KAAK,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC1B,QAAQ,EAAE,CAAC,QAAQ,CAAC;gBACpB,UAAU,EAAE,GAAG;gBACf,gBAAgB,EAAE,QAAQ;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,YAA4B,EAAE,OAAe;IACrE,MAAM,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,kDAAkD;QAClD,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM;YAAE,SAAS;QAE3C,qCAAqC;QACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW;YAAE,SAAS;QAE3B,oEAAoE;QACpE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;QAE1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI;QACJ,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpC,QAAQ;QACR,UAAU,EAAE,GAAG;QACf,gBAAgB,EAAE,SAAkB;KACrC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,YAA4B,EAAE,OAAe;IACvE,MAAM,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,iCAAiC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEvC,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;QAExD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI;QACJ,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpC,QAAQ;QACR,UAAU,EAAE,GAAG;QACf,gBAAgB,EAAE,WAAoB;KACvC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,YAA4B;IACnD,MAAM,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEnF,sCAAsC;QACtC,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI;QACJ,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpC,QAAQ;QACR,UAAU,EAAE,GAAG;QACf,gBAAgB,EAAE,QAAiB;KACpC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,QAAqC,EACrC,WAA6B;IAE7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,mDAAmD;YACnD,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;YAEvD,+CAA+C;YAC/C,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvD,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC9C,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,eAAe,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CACnC,eAAe,CAAC,UAAU,EAC1B,UAAU,CAAC,UAAU,CACtB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAsB;IAChD,mCAAmC;IACnC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,wCAAwC;YACxC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,0BAA0B,CAAC,QAAgB;IAClD,yBAAyB;IACzB,MAAM,OAAO,GAAG,QAAQ;SACrB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3B,wBAAwB;IACxB,OAAO,OAAO;SACX,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA0B,EAC1B,WAAmB,CAAC;IAEpB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC/B,iCAAiC;QACjC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qDAAqD;QACrD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,OAAO,MAAM,IAAI,UAAU,IAAI,QAAQ,CAAC;QAC1C,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAA0B;IACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5B,6BAA6B;QAC7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAuB;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACxC,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,+BAA+B;QACxE,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,KAAK,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,yBAAyB;QACvE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,sDAAsD;IACtD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specifica Generator
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for generating Specifica specifications from code
|
|
5
|
+
*/
|
|
6
|
+
import type { SpecificaOptions, SpecificaOutput } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Generate Specifica specification from a single file
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateSpecifica(filePath: string, options?: SpecificaOptions): Promise<SpecificaOutput>;
|
|
11
|
+
/**
|
|
12
|
+
* Generate Specifica for multiple files (directory)
|
|
13
|
+
* Phase 2: Feature clustering and multi-file analysis
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateSpecificaForDirectory(dirPath: string, options?: SpecificaOptions): Promise<SpecificaOutput[]>;
|
|
16
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/specifica/generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CA6D1B;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CA+H5B"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specifica Generator
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for generating Specifica specifications from code
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { analyze } from 'circle-ir';
|
|
9
|
+
import { extractEvidence } from './evidence-extractor.js';
|
|
10
|
+
import { generateSpec, formatSpecMarkdown } from './spec-generator.js';
|
|
11
|
+
import { resolveConflict } from './conflict-resolver.js';
|
|
12
|
+
/**
|
|
13
|
+
* Generate Specifica specification from a single file
|
|
14
|
+
*/
|
|
15
|
+
export async function generateSpecifica(filePath, options = {}) {
|
|
16
|
+
// Read source code
|
|
17
|
+
const code = fs.readFileSync(filePath, 'utf-8');
|
|
18
|
+
// Determine output directory (default: project root)
|
|
19
|
+
const outputDir = options.outputDir || findProjectRoot(filePath);
|
|
20
|
+
const specificaDir = path.join(outputDir, '.specifica');
|
|
21
|
+
// Run Circle-IR analysis (reuse existing if available)
|
|
22
|
+
const language = options.language || detectLanguage(filePath);
|
|
23
|
+
const analysis = await analyze(code, filePath, language, {
|
|
24
|
+
// AnalyzerOptions doesn't have enableLLMEnrichment
|
|
25
|
+
// LLM enrichment is handled separately in circle-ir-ai
|
|
26
|
+
});
|
|
27
|
+
// Extract evidence
|
|
28
|
+
const evidence = extractEvidence(filePath, code, analysis);
|
|
29
|
+
// Generate spec.md
|
|
30
|
+
const { spec, method, model } = await generateSpec(evidence, options);
|
|
31
|
+
// Determine feature name and output path
|
|
32
|
+
const featureName = generateFeatureName(evidence.filePath);
|
|
33
|
+
const featureDir = path.join(specificaDir, featureName);
|
|
34
|
+
const specPath = path.join(featureDir, 'spec.md');
|
|
35
|
+
// Check for conflicts
|
|
36
|
+
if (fs.existsSync(specPath) && !options.overwrite) {
|
|
37
|
+
const resolution = await resolveConflict(specPath, {
|
|
38
|
+
strategy: 'prompt',
|
|
39
|
+
backup: true,
|
|
40
|
+
});
|
|
41
|
+
if (resolution === 'skip') {
|
|
42
|
+
throw new Error(`Spec already exists at ${specPath}. Use --overwrite to replace.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Create output directory
|
|
46
|
+
fs.mkdirSync(featureDir, { recursive: true });
|
|
47
|
+
// Format and write spec.md
|
|
48
|
+
const metadata = {
|
|
49
|
+
generatedAt: new Date().toISOString(),
|
|
50
|
+
generator: 'circle-ir-ai/specifica',
|
|
51
|
+
version: getVersion(),
|
|
52
|
+
model: model || 'static-generation',
|
|
53
|
+
filesAnalyzed: 1,
|
|
54
|
+
reviewRequired: true,
|
|
55
|
+
};
|
|
56
|
+
const markdown = formatSpecMarkdown(spec, { reviewRequired: true });
|
|
57
|
+
fs.writeFileSync(specPath, markdown, 'utf-8');
|
|
58
|
+
return {
|
|
59
|
+
featureName,
|
|
60
|
+
outputPath: featureDir,
|
|
61
|
+
spec,
|
|
62
|
+
metadata,
|
|
63
|
+
generationMethod: method,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generate Specifica for multiple files (directory)
|
|
68
|
+
* Phase 2: Feature clustering and multi-file analysis
|
|
69
|
+
*/
|
|
70
|
+
export async function generateSpecificaForDirectory(dirPath, options = {}) {
|
|
71
|
+
const { clusterFilesByFeature, filterSignificantClusters, sortClustersByImportance } = await import('./feature-clustering.js');
|
|
72
|
+
const { aggregateEvidence } = await import('./evidence-aggregator.js');
|
|
73
|
+
// Find all source files in directory
|
|
74
|
+
const files = collectSourceFiles(dirPath);
|
|
75
|
+
if (files.length === 0) {
|
|
76
|
+
throw new Error(`No source files found in ${dirPath}`);
|
|
77
|
+
}
|
|
78
|
+
if (!options.quiet) {
|
|
79
|
+
console.log(`Found ${files.length} source files`);
|
|
80
|
+
}
|
|
81
|
+
// Analyze each file
|
|
82
|
+
const evidenceList = [];
|
|
83
|
+
for (let i = 0; i < files.length; i++) {
|
|
84
|
+
const file = files[i];
|
|
85
|
+
if (!options.quiet) {
|
|
86
|
+
console.log(`[${i + 1}/${files.length}] Analyzing ${path.basename(file)}...`);
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const code = fs.readFileSync(file, 'utf-8');
|
|
90
|
+
const language = detectLanguage(file);
|
|
91
|
+
const analysis = await analyze(code, file, language, {});
|
|
92
|
+
const evidence = extractEvidence(file, code, analysis);
|
|
93
|
+
evidenceList.push(evidence);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error(`Failed to analyze ${file}:`, error instanceof Error ? error.message : String(error));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (evidenceList.length === 0) {
|
|
100
|
+
throw new Error('Failed to analyze any files');
|
|
101
|
+
}
|
|
102
|
+
// Cluster files into features
|
|
103
|
+
if (!options.quiet) {
|
|
104
|
+
console.log('\nClustering files into features...');
|
|
105
|
+
}
|
|
106
|
+
let clusters = clusterFilesByFeature(evidenceList, dirPath);
|
|
107
|
+
clusters = filterSignificantClusters(clusters);
|
|
108
|
+
clusters = sortClustersByImportance(clusters);
|
|
109
|
+
if (!options.quiet) {
|
|
110
|
+
console.log(`Found ${clusters.length} features:\n`);
|
|
111
|
+
for (const cluster of clusters) {
|
|
112
|
+
console.log(` - ${cluster.name} (${cluster.files.length} files, ${cluster.clusteringMethod})`);
|
|
113
|
+
}
|
|
114
|
+
console.log('');
|
|
115
|
+
}
|
|
116
|
+
// Generate specs for each cluster
|
|
117
|
+
const outputs = [];
|
|
118
|
+
for (let i = 0; i < clusters.length; i++) {
|
|
119
|
+
const cluster = clusters[i];
|
|
120
|
+
if (!options.quiet) {
|
|
121
|
+
console.log(`[${i + 1}/${clusters.length}] Generating spec for ${cluster.name}...`);
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
// Aggregate evidence from all files in cluster
|
|
125
|
+
const aggregated = aggregateEvidence(cluster);
|
|
126
|
+
// Generate spec from aggregated evidence
|
|
127
|
+
const { spec, method, model } = await generateSpec(aggregated, options);
|
|
128
|
+
// Determine output path
|
|
129
|
+
const outputDir = options.outputDir || findProjectRoot(dirPath);
|
|
130
|
+
const specificaDir = path.join(outputDir, '.specifica');
|
|
131
|
+
const featureDir = path.join(specificaDir, cluster.name);
|
|
132
|
+
const specPath = path.join(featureDir, 'spec.md');
|
|
133
|
+
// Check for conflicts
|
|
134
|
+
if (fs.existsSync(specPath) && !options.overwrite) {
|
|
135
|
+
const resolution = await resolveConflict(specPath, {
|
|
136
|
+
strategy: 'prompt',
|
|
137
|
+
backup: true,
|
|
138
|
+
});
|
|
139
|
+
if (resolution === 'skip') {
|
|
140
|
+
console.log(`Skipping ${cluster.name} (spec exists)`);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Create output directory
|
|
145
|
+
fs.mkdirSync(featureDir, { recursive: true });
|
|
146
|
+
// Format and write spec.md
|
|
147
|
+
const metadata = {
|
|
148
|
+
generatedAt: new Date().toISOString(),
|
|
149
|
+
generator: 'circle-ir-ai/specifica',
|
|
150
|
+
version: getVersion(),
|
|
151
|
+
model: model || 'static-generation',
|
|
152
|
+
filesAnalyzed: cluster.files.length,
|
|
153
|
+
reviewRequired: true,
|
|
154
|
+
};
|
|
155
|
+
const markdown = formatSpecMarkdown(spec, { reviewRequired: true });
|
|
156
|
+
fs.writeFileSync(specPath, markdown, 'utf-8');
|
|
157
|
+
outputs.push({
|
|
158
|
+
featureName: cluster.name,
|
|
159
|
+
outputPath: featureDir,
|
|
160
|
+
spec,
|
|
161
|
+
metadata,
|
|
162
|
+
generationMethod: method,
|
|
163
|
+
});
|
|
164
|
+
if (!options.quiet) {
|
|
165
|
+
console.log(` ✓ Generated: ${featureDir}/spec.md`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error(`Failed to generate spec for ${cluster.name}:`, error instanceof Error ? error.message : String(error));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (!options.quiet) {
|
|
173
|
+
console.log(`\n✓ Generated ${outputs.length} specifications`);
|
|
174
|
+
}
|
|
175
|
+
return outputs;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Find project root (directory containing package.json, pom.xml, etc.)
|
|
179
|
+
*/
|
|
180
|
+
function findProjectRoot(filePath) {
|
|
181
|
+
let current = path.dirname(path.resolve(filePath));
|
|
182
|
+
while (current !== '/') {
|
|
183
|
+
// Check for project markers
|
|
184
|
+
const markers = ['package.json', 'pom.xml', 'Cargo.toml', 'pyproject.toml', '.git'];
|
|
185
|
+
for (const marker of markers) {
|
|
186
|
+
if (fs.existsSync(path.join(current, marker))) {
|
|
187
|
+
return current;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Move up one directory
|
|
191
|
+
const parent = path.dirname(current);
|
|
192
|
+
if (parent === current)
|
|
193
|
+
break; // Reached root
|
|
194
|
+
current = parent;
|
|
195
|
+
}
|
|
196
|
+
// Fallback: use file's directory
|
|
197
|
+
return path.dirname(path.resolve(filePath));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Detect language from file extension
|
|
201
|
+
*/
|
|
202
|
+
function detectLanguage(filePath) {
|
|
203
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
204
|
+
switch (ext) {
|
|
205
|
+
case '.java': return 'java';
|
|
206
|
+
case '.js':
|
|
207
|
+
case '.jsx': return 'javascript';
|
|
208
|
+
case '.ts':
|
|
209
|
+
case '.tsx': return 'typescript';
|
|
210
|
+
case '.py': return 'python';
|
|
211
|
+
case '.rs': return 'rust';
|
|
212
|
+
default: return 'java'; // Default fallback
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Generate feature name from file path
|
|
217
|
+
* Example: UserAuthController.java -> user-auth
|
|
218
|
+
*/
|
|
219
|
+
function generateFeatureName(filePath) {
|
|
220
|
+
const fileName = path.basename(filePath, path.extname(filePath));
|
|
221
|
+
// Remove common suffixes
|
|
222
|
+
const cleaned = fileName
|
|
223
|
+
.replace(/Controller$/, '')
|
|
224
|
+
.replace(/Service$/, '')
|
|
225
|
+
.replace(/Repository$/, '')
|
|
226
|
+
.replace(/Handler$/, '')
|
|
227
|
+
.replace(/Manager$/, '')
|
|
228
|
+
.replace(/Impl$/, '');
|
|
229
|
+
// Convert to kebab-case
|
|
230
|
+
return cleaned
|
|
231
|
+
.replace(/([A-Z])/g, '-$1')
|
|
232
|
+
.toLowerCase()
|
|
233
|
+
.replace(/^-/, '')
|
|
234
|
+
.replace(/_/g, '-');
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Collect all source files in a directory
|
|
238
|
+
*/
|
|
239
|
+
function collectSourceFiles(dirPath) {
|
|
240
|
+
const files = [];
|
|
241
|
+
const extensions = ['.java', '.js', '.ts', '.tsx', '.jsx', '.py', '.rs'];
|
|
242
|
+
function traverse(currentPath) {
|
|
243
|
+
const entries = fs.readdirSync(currentPath, { withFileTypes: true });
|
|
244
|
+
for (const entry of entries) {
|
|
245
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
246
|
+
// Skip node_modules, .git, dist, build, etc.
|
|
247
|
+
if (entry.isDirectory()) {
|
|
248
|
+
const skipDirs = ['node_modules', '.git', 'dist', 'build', 'target', '__pycache__', '.specifica'];
|
|
249
|
+
if (!skipDirs.includes(entry.name)) {
|
|
250
|
+
traverse(fullPath);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else if (entry.isFile()) {
|
|
254
|
+
const ext = path.extname(entry.name);
|
|
255
|
+
if (extensions.includes(ext)) {
|
|
256
|
+
files.push(fullPath);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
traverse(dirPath);
|
|
262
|
+
return files;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get circle-ir-ai version
|
|
266
|
+
*/
|
|
267
|
+
function getVersion() {
|
|
268
|
+
try {
|
|
269
|
+
const packagePath = new URL('../../package.json', import.meta.url).pathname;
|
|
270
|
+
const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
|
|
271
|
+
return pkg.version;
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return 'unknown';
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/specifica/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specifica Generation Module
|
|
3
|
+
*
|
|
4
|
+
* Generate Specifica-format specifications from existing code.
|
|
5
|
+
*
|
|
6
|
+
* Phase 1: Single file → spec.md
|
|
7
|
+
* Phase 2: Multi-file → spec.md + design.md
|
|
8
|
+
* Phase 3: Full project → spec.md + design.md + tasks.md
|
|
9
|
+
*/
|
|
10
|
+
export { generateSpecifica, generateSpecificaForDirectory } from './generator.js';
|
|
11
|
+
export { extractEvidence } from './evidence-extractor.js';
|
|
12
|
+
export { generateSpec, formatSpecMarkdown } from './spec-generator.js';
|
|
13
|
+
export { resolveConflict, fileExists, getConflictStrategy } from './conflict-resolver.js';
|
|
14
|
+
export type { SpecificaOptions, SpecificaOutput, FileEvidence, SpecMdContent, Requirement, GenerationMetadata, ConflictResolution, } from './types.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/specifica/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGlF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG1F,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specifica Generation Module
|
|
3
|
+
*
|
|
4
|
+
* Generate Specifica-format specifications from existing code.
|
|
5
|
+
*
|
|
6
|
+
* Phase 1: Single file → spec.md
|
|
7
|
+
* Phase 2: Multi-file → spec.md + design.md
|
|
8
|
+
* Phase 3: Full project → spec.md + design.md + tasks.md
|
|
9
|
+
*/
|
|
10
|
+
// Main API
|
|
11
|
+
export { generateSpecifica, generateSpecificaForDirectory } from './generator.js';
|
|
12
|
+
// Evidence extraction
|
|
13
|
+
export { extractEvidence } from './evidence-extractor.js';
|
|
14
|
+
// Spec generation
|
|
15
|
+
export { generateSpec, formatSpecMarkdown } from './spec-generator.js';
|
|
16
|
+
// Conflict resolution
|
|
17
|
+
export { resolveConflict, fileExists, getConflictStrategy } from './conflict-resolver.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/specifica/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,WAAW;AACX,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAElF,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Prompts for Specifica Generation
|
|
3
|
+
*
|
|
4
|
+
* Prompt templates for generating spec.md, design.md, and tasks.md
|
|
5
|
+
*/
|
|
6
|
+
import type { PromptContext } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Generate prompt for spec.md (requirements specification)
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateSpecPrompt(context: PromptContext): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generate prompt for design.md (architecture & decisions)
|
|
13
|
+
* TODO: Phase 2
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateDesignPrompt(context: PromptContext): string;
|
|
16
|
+
/**
|
|
17
|
+
* Generate prompt for tasks.md (implementation order)
|
|
18
|
+
* TODO: Phase 3
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateTasksPrompt(context: PromptContext): string;
|
|
21
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/specifica/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAyHjE;AAgED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAEnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAElE"}
|