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,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Prompts for Specifica Generation
|
|
3
|
+
*
|
|
4
|
+
* Prompt templates for generating spec.md, design.md, and tasks.md
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generate prompt for spec.md (requirements specification)
|
|
8
|
+
*/
|
|
9
|
+
export function generateSpecPrompt(context) {
|
|
10
|
+
const { evidence, language, framework } = context;
|
|
11
|
+
return `You are a technical specification writer. Analyze the following code and generate a requirements specification in Specifica format.
|
|
12
|
+
|
|
13
|
+
## Code Analysis
|
|
14
|
+
|
|
15
|
+
**File**: ${evidence.filePath}
|
|
16
|
+
**Language**: ${language}
|
|
17
|
+
${framework ? `**Framework**: ${framework}` : ''}
|
|
18
|
+
**Lines of Code**: ${evidence.linesOfCode}
|
|
19
|
+
|
|
20
|
+
### API Endpoints
|
|
21
|
+
${formatAPIEndpoints(evidence)}
|
|
22
|
+
|
|
23
|
+
### Methods
|
|
24
|
+
${formatMethods(evidence)}
|
|
25
|
+
|
|
26
|
+
### Data Flow
|
|
27
|
+
- **Sources**: ${evidence.sources.length} taint sources detected
|
|
28
|
+
- **Sinks**: ${evidence.sinks.length} taint sinks detected
|
|
29
|
+
|
|
30
|
+
### Security Issues
|
|
31
|
+
${formatVulnerabilities(evidence)}
|
|
32
|
+
|
|
33
|
+
## Your Task
|
|
34
|
+
|
|
35
|
+
Generate a **requirements specification** that answers: **"What does this code do?"**
|
|
36
|
+
|
|
37
|
+
Output a JSON object with this structure:
|
|
38
|
+
\`\`\`json
|
|
39
|
+
{
|
|
40
|
+
"title": "Feature Name",
|
|
41
|
+
"summary": "One-paragraph description of what this feature does",
|
|
42
|
+
"requirements": [
|
|
43
|
+
{
|
|
44
|
+
"id": "REQ-001",
|
|
45
|
+
"description": "Testable requirement as a checkbox item",
|
|
46
|
+
"category": "functional|security|performance|usability",
|
|
47
|
+
"priority": "must|should|could",
|
|
48
|
+
"tested": false
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"edgeCases": [
|
|
52
|
+
"Edge case 1",
|
|
53
|
+
"Edge case 2"
|
|
54
|
+
],
|
|
55
|
+
"errorScenarios": [
|
|
56
|
+
"Error scenario 1",
|
|
57
|
+
"Error scenario 2"
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
## Guidelines
|
|
63
|
+
|
|
64
|
+
1. **Requirements must be testable** - Each requirement should be something you can write a test for
|
|
65
|
+
2. **Focus on WHAT, not HOW** - Describe behavior, not implementation
|
|
66
|
+
3. **Extract from code behavior** - Infer requirements from what the code actually does
|
|
67
|
+
4. **Include security requirements** - Based on detected sources/sinks/vulnerabilities
|
|
68
|
+
5. **Identify edge cases** - Unusual inputs, error conditions, boundary cases
|
|
69
|
+
6. **Error scenarios** - What can go wrong?
|
|
70
|
+
|
|
71
|
+
## Example Output
|
|
72
|
+
|
|
73
|
+
\`\`\`json
|
|
74
|
+
{
|
|
75
|
+
"title": "User Authentication",
|
|
76
|
+
"summary": "Provides secure user login functionality with JWT token generation and session management.",
|
|
77
|
+
"requirements": [
|
|
78
|
+
{
|
|
79
|
+
"id": "REQ-001",
|
|
80
|
+
"description": "System shall accept username and password via POST /api/login",
|
|
81
|
+
"category": "functional",
|
|
82
|
+
"priority": "must",
|
|
83
|
+
"tested": false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "REQ-002",
|
|
87
|
+
"description": "System shall validate credentials against user database",
|
|
88
|
+
"category": "functional",
|
|
89
|
+
"priority": "must",
|
|
90
|
+
"tested": false
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "REQ-003",
|
|
94
|
+
"description": "System shall generate JWT token on successful authentication",
|
|
95
|
+
"category": "functional",
|
|
96
|
+
"priority": "must",
|
|
97
|
+
"tested": false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "REQ-004",
|
|
101
|
+
"description": "System shall prevent SQL injection in login query",
|
|
102
|
+
"category": "security",
|
|
103
|
+
"priority": "must",
|
|
104
|
+
"tested": false
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "REQ-005",
|
|
108
|
+
"description": "System shall return 401 for invalid credentials",
|
|
109
|
+
"category": "functional",
|
|
110
|
+
"priority": "must",
|
|
111
|
+
"tested": false
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"edgeCases": [
|
|
115
|
+
"Username contains special characters",
|
|
116
|
+
"Password is empty string",
|
|
117
|
+
"User account is locked",
|
|
118
|
+
"Multiple concurrent login attempts"
|
|
119
|
+
],
|
|
120
|
+
"errorScenarios": [
|
|
121
|
+
"Database connection fails during authentication",
|
|
122
|
+
"JWT secret key is not configured",
|
|
123
|
+
"User provides malicious SQL in username field"
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
\`\`\`
|
|
127
|
+
|
|
128
|
+
Now generate the specification for the provided code.`;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Format API endpoints for prompt
|
|
132
|
+
*/
|
|
133
|
+
function formatAPIEndpoints(evidence) {
|
|
134
|
+
if (evidence.publicAPI.length === 0) {
|
|
135
|
+
return 'None detected';
|
|
136
|
+
}
|
|
137
|
+
return evidence.publicAPI.map(endpoint => {
|
|
138
|
+
const params = endpoint.parameters.map(p => ` - ${p.name} (${p.location}): ${p.type}${p.required ? ' [required]' : ''}`).join('\n');
|
|
139
|
+
return `- **${endpoint.method} ${endpoint.path}**
|
|
140
|
+
Handler: ${endpoint.handler}
|
|
141
|
+
Parameters:
|
|
142
|
+
${params || ' None'}
|
|
143
|
+
Response: ${endpoint.responseType || 'void'}`;
|
|
144
|
+
}).join('\n\n');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Format methods for prompt
|
|
148
|
+
*/
|
|
149
|
+
function formatMethods(evidence) {
|
|
150
|
+
if (evidence.methods.length === 0) {
|
|
151
|
+
return 'None';
|
|
152
|
+
}
|
|
153
|
+
const significantMethods = evidence.methods
|
|
154
|
+
.filter(m => m.visibility === 'public' || m.hasHttpHandling)
|
|
155
|
+
.slice(0, 10); // Limit to avoid token overflow
|
|
156
|
+
return significantMethods.map(method => {
|
|
157
|
+
const indicators = [];
|
|
158
|
+
if (method.hasHttpHandling)
|
|
159
|
+
indicators.push('HTTP handling');
|
|
160
|
+
if (method.hasDatabaseAccess)
|
|
161
|
+
indicators.push('Database access');
|
|
162
|
+
if (method.hasValidation)
|
|
163
|
+
indicators.push('Validation');
|
|
164
|
+
if (method.hasErrorHandling)
|
|
165
|
+
indicators.push('Error handling');
|
|
166
|
+
const params = method.parameters.map(p => `${p.name}: ${p.type}`).join(', ');
|
|
167
|
+
return `- **${method.name}**(${params}) → ${method.returnType}
|
|
168
|
+
${indicators.length > 0 ? `Capabilities: ${indicators.join(', ')}` : 'No special capabilities detected'}`;
|
|
169
|
+
}).join('\n');
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Format vulnerabilities for prompt
|
|
173
|
+
*/
|
|
174
|
+
function formatVulnerabilities(evidence) {
|
|
175
|
+
if (evidence.vulnerabilities.length === 0) {
|
|
176
|
+
return 'None detected ✓';
|
|
177
|
+
}
|
|
178
|
+
return evidence.vulnerabilities.map(vuln => `- **${vuln.cwe}** (${vuln.severity}): ${vuln.description}
|
|
179
|
+
Source: ${vuln.sourceType} (line ${vuln.lineNumber})
|
|
180
|
+
Sink: ${vuln.sinkType}`).join('\n');
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Generate prompt for design.md (architecture & decisions)
|
|
184
|
+
* TODO: Phase 2
|
|
185
|
+
*/
|
|
186
|
+
export function generateDesignPrompt(context) {
|
|
187
|
+
return `[Phase 2: Design generation prompt - Coming soon]`;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Generate prompt for tasks.md (implementation order)
|
|
191
|
+
* TODO: Phase 3
|
|
192
|
+
*/
|
|
193
|
+
export function generateTasksPrompt(context) {
|
|
194
|
+
return `[Phase 3: Tasks generation prompt - Coming soon]`;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/specifica/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec Generator
|
|
3
|
+
*
|
|
4
|
+
* Generate spec.md using LLM from extracted evidence
|
|
5
|
+
*/
|
|
6
|
+
import type { FileEvidence, SpecMdContent, SpecificaOptions } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Generate spec.md content from evidence
|
|
9
|
+
* Returns spec content and generation method used
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateSpec(evidence: FileEvidence, options?: SpecificaOptions): Promise<{
|
|
12
|
+
spec: SpecMdContent;
|
|
13
|
+
method: 'llm' | 'static';
|
|
14
|
+
model?: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Format spec as Markdown
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatSpecMarkdown(spec: SpecMdContent, metadata: {
|
|
20
|
+
reviewRequired: boolean;
|
|
21
|
+
}): string;
|
|
22
|
+
//# sourceMappingURL=spec-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-generator.d.ts","sourceRoot":"","sources":["../../src/specifica/spec-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB5E;AA4JD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAsDrG"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec Generator
|
|
3
|
+
*
|
|
4
|
+
* Generate spec.md using LLM from extracted evidence
|
|
5
|
+
*/
|
|
6
|
+
import { getAxLLMClient } from '../llm/ax-client.js';
|
|
7
|
+
/**
|
|
8
|
+
* Generate spec.md content from evidence
|
|
9
|
+
* Returns spec content and generation method used
|
|
10
|
+
*/
|
|
11
|
+
export async function generateSpec(evidence, options = {}) {
|
|
12
|
+
// Try LLM generation first
|
|
13
|
+
const llmResult = await generateWithLLM(evidence, options);
|
|
14
|
+
if (llmResult) {
|
|
15
|
+
console.log('✓ Spec generated using LLM');
|
|
16
|
+
return {
|
|
17
|
+
spec: llmResult,
|
|
18
|
+
method: 'llm',
|
|
19
|
+
model: options.specModel || process.env.LLM_ENRICHMENT_MODEL || 'cognium/gpt-oss-120b',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
// Fallback to static generation
|
|
23
|
+
console.log('⚠ Falling back to static spec generation');
|
|
24
|
+
return {
|
|
25
|
+
spec: generateFallbackSpec(evidence),
|
|
26
|
+
method: 'static',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate spec using LLM
|
|
31
|
+
*/
|
|
32
|
+
async function generateWithLLM(evidence, options) {
|
|
33
|
+
try {
|
|
34
|
+
// Get LLM client - use existing config or override if specified
|
|
35
|
+
const clientConfig = options.specModel ? {
|
|
36
|
+
phases: {
|
|
37
|
+
enrichment: {
|
|
38
|
+
model: options.specModel,
|
|
39
|
+
temperature: 0.3,
|
|
40
|
+
maxTokens: 4000,
|
|
41
|
+
},
|
|
42
|
+
verification: {
|
|
43
|
+
model: options.specModel,
|
|
44
|
+
temperature: 0.3,
|
|
45
|
+
maxTokens: 4000,
|
|
46
|
+
},
|
|
47
|
+
componentEnrichment: {
|
|
48
|
+
model: options.specModel,
|
|
49
|
+
temperature: 0.3,
|
|
50
|
+
maxTokens: 4000,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
} : undefined; // Use default config from environment/config system
|
|
54
|
+
const client = getAxLLMClient(clientConfig);
|
|
55
|
+
// Prepare input for LLM
|
|
56
|
+
const input = {
|
|
57
|
+
title: extractFeatureName(evidence),
|
|
58
|
+
filePath: evidence.filePath,
|
|
59
|
+
language: evidence.language,
|
|
60
|
+
framework: evidence.framework?.name,
|
|
61
|
+
linesOfCode: evidence.linesOfCode,
|
|
62
|
+
apiEndpoints: evidence.publicAPI.map(e => ({
|
|
63
|
+
method: e.method,
|
|
64
|
+
path: e.path,
|
|
65
|
+
handler: e.handler,
|
|
66
|
+
})),
|
|
67
|
+
methods: evidence.methods.slice(0, 15).map(m => ({
|
|
68
|
+
name: m.name,
|
|
69
|
+
signature: m.signature,
|
|
70
|
+
})),
|
|
71
|
+
vulnerabilities: evidence.vulnerabilities.map(v => ({
|
|
72
|
+
cwe: v.cwe,
|
|
73
|
+
severity: v.severity,
|
|
74
|
+
description: v.description,
|
|
75
|
+
})),
|
|
76
|
+
};
|
|
77
|
+
// Call LLM
|
|
78
|
+
const result = await client.generateSpecification(input);
|
|
79
|
+
if (!result) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error('LLM spec generation failed:', error instanceof Error ? error.message : String(error));
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Generate fallback spec when LLM fails or is disabled
|
|
91
|
+
*/
|
|
92
|
+
function generateFallbackSpec(evidence) {
|
|
93
|
+
const requirements = [];
|
|
94
|
+
let reqId = 1;
|
|
95
|
+
// Generate requirements from API endpoints
|
|
96
|
+
for (const endpoint of evidence.publicAPI) {
|
|
97
|
+
requirements.push({
|
|
98
|
+
id: `REQ-${String(reqId++).padStart(3, '0')}`,
|
|
99
|
+
description: `System shall handle ${endpoint.method} requests to ${endpoint.path}`,
|
|
100
|
+
category: 'functional',
|
|
101
|
+
priority: 'must',
|
|
102
|
+
tested: false,
|
|
103
|
+
});
|
|
104
|
+
// Add parameter validation requirements
|
|
105
|
+
const requiredParams = endpoint.parameters.filter(p => p.required);
|
|
106
|
+
if (requiredParams.length > 0) {
|
|
107
|
+
requirements.push({
|
|
108
|
+
id: `REQ-${String(reqId++).padStart(3, '0')}`,
|
|
109
|
+
description: `System shall validate required parameters: ${requiredParams.map(p => p.name).join(', ')}`,
|
|
110
|
+
category: 'functional',
|
|
111
|
+
priority: 'must',
|
|
112
|
+
tested: false,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Generate security requirements from vulnerabilities
|
|
117
|
+
for (const vuln of evidence.vulnerabilities) {
|
|
118
|
+
requirements.push({
|
|
119
|
+
id: `REQ-${String(reqId++).padStart(3, '0')}`,
|
|
120
|
+
description: `System shall prevent ${vuln.cwe}: ${vuln.description}`,
|
|
121
|
+
category: 'security',
|
|
122
|
+
priority: 'must',
|
|
123
|
+
tested: false,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// If no requirements generated, create a basic one
|
|
127
|
+
if (requirements.length === 0) {
|
|
128
|
+
requirements.push({
|
|
129
|
+
id: 'REQ-001',
|
|
130
|
+
description: `System shall provide ${evidence.methods.length} methods as defined in implementation`,
|
|
131
|
+
category: 'functional',
|
|
132
|
+
priority: 'should',
|
|
133
|
+
tested: false,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
title: extractFeatureName(evidence),
|
|
138
|
+
summary: `Feature providing ${evidence.methods.length} methods with ${evidence.publicAPI.length} API endpoints.`,
|
|
139
|
+
requirements,
|
|
140
|
+
edgeCases: [
|
|
141
|
+
'Invalid input parameters',
|
|
142
|
+
'Missing required fields',
|
|
143
|
+
'Concurrent access',
|
|
144
|
+
],
|
|
145
|
+
errorScenarios: [
|
|
146
|
+
'Database connection failure',
|
|
147
|
+
'Invalid data format',
|
|
148
|
+
'Authentication failure',
|
|
149
|
+
],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Extract feature name from file path
|
|
154
|
+
*/
|
|
155
|
+
function extractFeatureName(evidence) {
|
|
156
|
+
const fileName = evidence.filePath.split('/').pop() || 'Unknown';
|
|
157
|
+
const baseName = fileName.replace(/\.(java|ts|js|py|rs)$/, '');
|
|
158
|
+
// Convert CamelCase or snake_case to Title Case
|
|
159
|
+
return baseName
|
|
160
|
+
.replace(/([A-Z])/g, ' $1')
|
|
161
|
+
.replace(/_/g, ' ')
|
|
162
|
+
.trim()
|
|
163
|
+
.split(' ')
|
|
164
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
165
|
+
.join(' ');
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Format spec as Markdown
|
|
169
|
+
*/
|
|
170
|
+
export function formatSpecMarkdown(spec, metadata) {
|
|
171
|
+
const sections = [];
|
|
172
|
+
// Header with review notice
|
|
173
|
+
if (metadata.reviewRequired) {
|
|
174
|
+
sections.push(`> **⚠️ Generated Specification - Review Required**
|
|
175
|
+
> This specification was automatically generated from code.
|
|
176
|
+
> Please review and refine before using.
|
|
177
|
+
|
|
178
|
+
`);
|
|
179
|
+
}
|
|
180
|
+
// Title and summary
|
|
181
|
+
sections.push(`# ${spec.title}\n`);
|
|
182
|
+
sections.push(`${spec.summary}\n`);
|
|
183
|
+
// Requirements
|
|
184
|
+
sections.push(`## Requirements\n`);
|
|
185
|
+
// Group requirements by category
|
|
186
|
+
const byCategory = groupBy(spec.requirements, r => r.category);
|
|
187
|
+
for (const [category, reqs] of Object.entries(byCategory)) {
|
|
188
|
+
const categoryTitle = category.charAt(0).toUpperCase() + category.slice(1);
|
|
189
|
+
sections.push(`### ${categoryTitle}\n`);
|
|
190
|
+
for (const req of reqs) {
|
|
191
|
+
const priority = req.priority === 'must' ? '**MUST**' : req.priority === 'should' ? 'SHOULD' : 'COULD';
|
|
192
|
+
const checked = req.tested ? 'x' : ' ';
|
|
193
|
+
sections.push(`- [${checked}] **${req.id}**: ${priority} ${req.description}\n`);
|
|
194
|
+
}
|
|
195
|
+
sections.push('');
|
|
196
|
+
}
|
|
197
|
+
// Edge Cases
|
|
198
|
+
if (spec.edgeCases.length > 0) {
|
|
199
|
+
sections.push(`## Edge Cases\n`);
|
|
200
|
+
for (const edge of spec.edgeCases) {
|
|
201
|
+
sections.push(`- ${edge}\n`);
|
|
202
|
+
}
|
|
203
|
+
sections.push('');
|
|
204
|
+
}
|
|
205
|
+
// Error Scenarios
|
|
206
|
+
if (spec.errorScenarios.length > 0) {
|
|
207
|
+
sections.push(`## Error Scenarios\n`);
|
|
208
|
+
for (const error of spec.errorScenarios) {
|
|
209
|
+
sections.push(`- ${error}\n`);
|
|
210
|
+
}
|
|
211
|
+
sections.push('');
|
|
212
|
+
}
|
|
213
|
+
return sections.join('\n');
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Helper: Group array by key
|
|
217
|
+
*/
|
|
218
|
+
function groupBy(array, keyFn) {
|
|
219
|
+
const result = {};
|
|
220
|
+
for (const item of array) {
|
|
221
|
+
const key = keyFn(item);
|
|
222
|
+
if (!result[key]) {
|
|
223
|
+
result[key] = [];
|
|
224
|
+
}
|
|
225
|
+
result[key].push(item);
|
|
226
|
+
}
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=spec-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-generator.js","sourceRoot":"","sources":["../../src/specifica/spec-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specifica Generation Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for code-to-spec generation.
|
|
5
|
+
*/
|
|
6
|
+
import type { CircleIR, TaintSource, TaintSink } from 'circle-ir';
|
|
7
|
+
export interface SpecificaOptions {
|
|
8
|
+
/** Output directory for .specifica/ (default: project root) */
|
|
9
|
+
outputDir?: string;
|
|
10
|
+
/** LLM model for spec generation (default: gpt-oss-120b) */
|
|
11
|
+
specModel?: string;
|
|
12
|
+
/** Whether to overwrite existing specs (default: false - prompt user) */
|
|
13
|
+
overwrite?: boolean;
|
|
14
|
+
/** Whether to use LLM enrichment for analysis (default: false - reuse existing) */
|
|
15
|
+
enableEnrichment?: boolean;
|
|
16
|
+
/** Language of the codebase (auto-detected if not provided) */
|
|
17
|
+
language?: 'java' | 'javascript' | 'typescript' | 'python' | 'rust';
|
|
18
|
+
/** Suppress console output (default: false) */
|
|
19
|
+
quiet?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface ConflictResolution {
|
|
22
|
+
/** Strategy for handling existing .specifica/ files */
|
|
23
|
+
strategy: 'skip' | 'overwrite' | 'merge' | 'rename' | 'prompt';
|
|
24
|
+
/** Backup existing files before overwriting */
|
|
25
|
+
backup?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface FileEvidence {
|
|
28
|
+
filePath: string;
|
|
29
|
+
language: string;
|
|
30
|
+
linesOfCode: number;
|
|
31
|
+
types: TypeInfo[];
|
|
32
|
+
methods: MethodInfo[];
|
|
33
|
+
publicAPI: APIEndpoint[];
|
|
34
|
+
imports: ImportInfo[];
|
|
35
|
+
exports: ExportInfo[];
|
|
36
|
+
sources: TaintSource[];
|
|
37
|
+
sinks: TaintSink[];
|
|
38
|
+
vulnerabilities: VulnerabilityInfo[];
|
|
39
|
+
comments: CommentInfo[];
|
|
40
|
+
todos: string[];
|
|
41
|
+
framework?: FrameworkInfo;
|
|
42
|
+
}
|
|
43
|
+
export interface TypeInfo {
|
|
44
|
+
name: string;
|
|
45
|
+
kind: 'class' | 'interface' | 'enum' | 'type';
|
|
46
|
+
visibility: 'public' | 'private' | 'protected' | 'package';
|
|
47
|
+
annotations: string[];
|
|
48
|
+
extends?: string[];
|
|
49
|
+
implements?: string[];
|
|
50
|
+
methods: string[];
|
|
51
|
+
fields: FieldInfo[];
|
|
52
|
+
}
|
|
53
|
+
export interface FieldInfo {
|
|
54
|
+
name: string;
|
|
55
|
+
type: string;
|
|
56
|
+
visibility: 'public' | 'private' | 'protected' | 'package';
|
|
57
|
+
annotations: string[];
|
|
58
|
+
isStatic: boolean;
|
|
59
|
+
isFinal: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface MethodInfo {
|
|
62
|
+
name: string;
|
|
63
|
+
signature: string;
|
|
64
|
+
returnType: string;
|
|
65
|
+
parameters: ParameterInfo[];
|
|
66
|
+
visibility: 'public' | 'private' | 'protected' | 'package';
|
|
67
|
+
annotations: string[];
|
|
68
|
+
isStatic: boolean;
|
|
69
|
+
isAsync: boolean;
|
|
70
|
+
lineStart: number;
|
|
71
|
+
lineEnd: number;
|
|
72
|
+
hasHttpHandling: boolean;
|
|
73
|
+
hasDatabaseAccess: boolean;
|
|
74
|
+
hasValidation: boolean;
|
|
75
|
+
hasErrorHandling: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface ParameterInfo {
|
|
78
|
+
name: string;
|
|
79
|
+
type: string;
|
|
80
|
+
annotations: string[];
|
|
81
|
+
isOptional: boolean;
|
|
82
|
+
}
|
|
83
|
+
export interface APIEndpoint {
|
|
84
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
85
|
+
path: string;
|
|
86
|
+
handler: string;
|
|
87
|
+
parameters: APIParameter[];
|
|
88
|
+
requestBody?: string;
|
|
89
|
+
responseType?: string;
|
|
90
|
+
annotations: string[];
|
|
91
|
+
summary?: string;
|
|
92
|
+
}
|
|
93
|
+
export interface APIParameter {
|
|
94
|
+
name: string;
|
|
95
|
+
location: 'path' | 'query' | 'body' | 'header';
|
|
96
|
+
type: string;
|
|
97
|
+
required: boolean;
|
|
98
|
+
description?: string;
|
|
99
|
+
}
|
|
100
|
+
export interface ImportInfo {
|
|
101
|
+
module: string;
|
|
102
|
+
imports: string[];
|
|
103
|
+
isFramework: boolean;
|
|
104
|
+
}
|
|
105
|
+
export interface ExportInfo {
|
|
106
|
+
name: string;
|
|
107
|
+
kind: 'function' | 'class' | 'interface' | 'type' | 'const';
|
|
108
|
+
isDefault: boolean;
|
|
109
|
+
}
|
|
110
|
+
export interface VulnerabilityInfo {
|
|
111
|
+
cwe: string;
|
|
112
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
113
|
+
description: string;
|
|
114
|
+
sourceType: string;
|
|
115
|
+
sinkType: string;
|
|
116
|
+
lineNumber: number;
|
|
117
|
+
}
|
|
118
|
+
export interface CommentInfo {
|
|
119
|
+
type: 'line' | 'block' | 'doc';
|
|
120
|
+
content: string;
|
|
121
|
+
lineNumber: number;
|
|
122
|
+
}
|
|
123
|
+
export interface FrameworkInfo {
|
|
124
|
+
name: string;
|
|
125
|
+
version?: string;
|
|
126
|
+
patterns: string[];
|
|
127
|
+
layer?: 'controller' | 'service' | 'repository' | 'model' | 'util';
|
|
128
|
+
}
|
|
129
|
+
export interface FeatureCluster {
|
|
130
|
+
name: string;
|
|
131
|
+
files: string[];
|
|
132
|
+
evidence: FileEvidence[];
|
|
133
|
+
confidence: number;
|
|
134
|
+
clusteringMethod: 'package' | 'directory' | 'naming' | 'dependency' | 'semantic';
|
|
135
|
+
}
|
|
136
|
+
export interface SpecificaOutput {
|
|
137
|
+
featureName: string;
|
|
138
|
+
outputPath: string;
|
|
139
|
+
spec: SpecMdContent;
|
|
140
|
+
design?: DesignMdContent;
|
|
141
|
+
tasks?: TasksMdContent;
|
|
142
|
+
metadata: GenerationMetadata;
|
|
143
|
+
generationMethod?: 'llm' | 'static';
|
|
144
|
+
}
|
|
145
|
+
export interface SpecMdContent {
|
|
146
|
+
title: string;
|
|
147
|
+
summary: string;
|
|
148
|
+
requirements: Requirement[];
|
|
149
|
+
edgeCases: string[];
|
|
150
|
+
errorScenarios: string[];
|
|
151
|
+
}
|
|
152
|
+
export interface Requirement {
|
|
153
|
+
id: string;
|
|
154
|
+
description: string;
|
|
155
|
+
category: 'functional' | 'security' | 'performance' | 'usability';
|
|
156
|
+
priority: 'must' | 'should' | 'could';
|
|
157
|
+
tested: boolean;
|
|
158
|
+
}
|
|
159
|
+
export interface DesignMdContent {
|
|
160
|
+
architecture: string;
|
|
161
|
+
components: ComponentInfo[];
|
|
162
|
+
patterns: string[];
|
|
163
|
+
technicalDecisions: TechnicalDecision[];
|
|
164
|
+
securityConsiderations: string[];
|
|
165
|
+
componentDiagram?: string;
|
|
166
|
+
}
|
|
167
|
+
export interface ComponentInfo {
|
|
168
|
+
name: string;
|
|
169
|
+
type: 'controller' | 'service' | 'repository' | 'model' | 'util' | 'middleware';
|
|
170
|
+
responsibilities: string[];
|
|
171
|
+
dependencies: string[];
|
|
172
|
+
}
|
|
173
|
+
export interface TechnicalDecision {
|
|
174
|
+
decision: string;
|
|
175
|
+
rationale: string;
|
|
176
|
+
alternatives?: string[];
|
|
177
|
+
tradeoffs?: string;
|
|
178
|
+
}
|
|
179
|
+
export interface TasksMdContent {
|
|
180
|
+
tasks: Task[];
|
|
181
|
+
dependencyGraph?: string;
|
|
182
|
+
}
|
|
183
|
+
export interface Task {
|
|
184
|
+
id: string;
|
|
185
|
+
title: string;
|
|
186
|
+
description: string;
|
|
187
|
+
dependencies: string[];
|
|
188
|
+
deliverable: string;
|
|
189
|
+
verification: string[];
|
|
190
|
+
estimatedEffort?: string;
|
|
191
|
+
}
|
|
192
|
+
export interface GenerationMetadata {
|
|
193
|
+
generatedAt: string;
|
|
194
|
+
generator: string;
|
|
195
|
+
version: string;
|
|
196
|
+
model: string;
|
|
197
|
+
filesAnalyzed: number;
|
|
198
|
+
reviewRequired: boolean;
|
|
199
|
+
llmCost?: number;
|
|
200
|
+
}
|
|
201
|
+
export interface PromptContext {
|
|
202
|
+
evidence: FileEvidence;
|
|
203
|
+
language: string;
|
|
204
|
+
framework?: string;
|
|
205
|
+
existingAnalysis?: CircleIR;
|
|
206
|
+
}
|
|
207
|
+
export interface LLMResponse {
|
|
208
|
+
spec?: SpecMdContent;
|
|
209
|
+
design?: DesignMdContent;
|
|
210
|
+
tasks?: TasksMdContent;
|
|
211
|
+
reasoning?: string;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=types.d.ts.map
|