openlore 2.0.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/LICENSE +21 -0
- package/README.md +268 -0
- package/dist/api/analyze.d.ts +17 -0
- package/dist/api/analyze.d.ts.map +1 -0
- package/dist/api/analyze.js +143 -0
- package/dist/api/analyze.js.map +1 -0
- package/dist/api/audit.d.ts +10 -0
- package/dist/api/audit.d.ts.map +1 -0
- package/dist/api/audit.js +117 -0
- package/dist/api/audit.js.map +1 -0
- package/dist/api/decisions.d.ts +55 -0
- package/dist/api/decisions.d.ts.map +1 -0
- package/dist/api/decisions.js +157 -0
- package/dist/api/decisions.js.map +1 -0
- package/dist/api/drift.d.ts +21 -0
- package/dist/api/drift.d.ts.map +1 -0
- package/dist/api/drift.js +152 -0
- package/dist/api/drift.js.map +1 -0
- package/dist/api/generate.d.ts +18 -0
- package/dist/api/generate.d.ts.map +1 -0
- package/dist/api/generate.js +259 -0
- package/dist/api/generate.js.map +1 -0
- package/dist/api/index.d.ts +41 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +34 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/init.d.ts +18 -0
- package/dist/api/init.d.ts.map +1 -0
- package/dist/api/init.js +83 -0
- package/dist/api/init.js.map +1 -0
- package/dist/api/run.d.ts +19 -0
- package/dist/api/run.d.ts.map +1 -0
- package/dist/api/run.js +312 -0
- package/dist/api/run.js.map +1 -0
- package/dist/api/specs.d.ts +49 -0
- package/dist/api/specs.d.ts.map +1 -0
- package/dist/api/specs.js +137 -0
- package/dist/api/specs.js.map +1 -0
- package/dist/api/types.d.ts +201 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/verify.d.ts +20 -0
- package/dist/api/verify.d.ts.map +1 -0
- package/dist/api/verify.js +117 -0
- package/dist/api/verify.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +30 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +683 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +9 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +98 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/decisions.d.ts +16 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +864 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/digest.d.ts +9 -0
- package/dist/cli/commands/digest.d.ts.map +1 -0
- package/dist/cli/commands/digest.js +61 -0
- package/dist/cli/commands/digest.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +9 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +398 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/drift.d.ts +9 -0
- package/dist/cli/commands/drift.d.ts.map +1 -0
- package/dist/cli/commands/drift.js +550 -0
- package/dist/cli/commands/drift.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +9 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +565 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +173 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +2235 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +1384 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/refresh-stories.d.ts +10 -0
- package/dist/cli/commands/refresh-stories.d.ts.map +1 -0
- package/dist/cli/commands/refresh-stories.js +314 -0
- package/dist/cli/commands/refresh-stories.js.map +1 -0
- package/dist/cli/commands/run.d.ts +9 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +459 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +19 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +355 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/test.d.ts +22 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +180 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +9 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +383 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/view.d.ts +13 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +547 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +118 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/tui-approval.d.ts +11 -0
- package/dist/cli/tui-approval.d.ts.map +1 -0
- package/dist/cli/tui-approval.js +129 -0
- package/dist/cli/tui-approval.js.map +1 -0
- package/dist/constants.d.ts +314 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +382 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/analyzer/ai-config-generator.d.ts +54 -0
- package/dist/core/analyzer/ai-config-generator.d.ts.map +1 -0
- package/dist/core/analyzer/ai-config-generator.js +98 -0
- package/dist/core/analyzer/ai-config-generator.js.map +1 -0
- package/dist/core/analyzer/architecture-writer.d.ts +67 -0
- package/dist/core/analyzer/architecture-writer.d.ts.map +1 -0
- package/dist/core/analyzer/architecture-writer.js +209 -0
- package/dist/core/analyzer/architecture-writer.js.map +1 -0
- package/dist/core/analyzer/artifact-generator.d.ts +261 -0
- package/dist/core/analyzer/artifact-generator.d.ts.map +1 -0
- package/dist/core/analyzer/artifact-generator.js +909 -0
- package/dist/core/analyzer/artifact-generator.js.map +1 -0
- package/dist/core/analyzer/ast-chunker.d.ts +24 -0
- package/dist/core/analyzer/ast-chunker.d.ts.map +1 -0
- package/dist/core/analyzer/ast-chunker.js +198 -0
- package/dist/core/analyzer/ast-chunker.js.map +1 -0
- package/dist/core/analyzer/call-graph.d.ts +162 -0
- package/dist/core/analyzer/call-graph.d.ts.map +1 -0
- package/dist/core/analyzer/call-graph.js +2040 -0
- package/dist/core/analyzer/call-graph.js.map +1 -0
- package/dist/core/analyzer/code-shaper.d.ts +33 -0
- package/dist/core/analyzer/code-shaper.d.ts.map +1 -0
- package/dist/core/analyzer/code-shaper.js +154 -0
- package/dist/core/analyzer/code-shaper.js.map +1 -0
- package/dist/core/analyzer/codebase-digest.d.ts +40 -0
- package/dist/core/analyzer/codebase-digest.d.ts.map +1 -0
- package/dist/core/analyzer/codebase-digest.js +195 -0
- package/dist/core/analyzer/codebase-digest.js.map +1 -0
- package/dist/core/analyzer/cpp-header-resolver.d.ts +30 -0
- package/dist/core/analyzer/cpp-header-resolver.d.ts.map +1 -0
- package/dist/core/analyzer/cpp-header-resolver.js +71 -0
- package/dist/core/analyzer/cpp-header-resolver.js.map +1 -0
- package/dist/core/analyzer/dependency-graph.d.ts +230 -0
- package/dist/core/analyzer/dependency-graph.d.ts.map +1 -0
- package/dist/core/analyzer/dependency-graph.js +752 -0
- package/dist/core/analyzer/dependency-graph.js.map +1 -0
- package/dist/core/analyzer/duplicate-detector.d.ts +52 -0
- package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -0
- package/dist/core/analyzer/duplicate-detector.js +289 -0
- package/dist/core/analyzer/duplicate-detector.js.map +1 -0
- package/dist/core/analyzer/embedding-service.d.ts +56 -0
- package/dist/core/analyzer/embedding-service.d.ts.map +1 -0
- package/dist/core/analyzer/embedding-service.js +118 -0
- package/dist/core/analyzer/embedding-service.js.map +1 -0
- package/dist/core/analyzer/env-extractor.d.ts +33 -0
- package/dist/core/analyzer/env-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/env-extractor.js +196 -0
- package/dist/core/analyzer/env-extractor.js.map +1 -0
- package/dist/core/analyzer/external-packages.d.ts +20 -0
- package/dist/core/analyzer/external-packages.d.ts.map +1 -0
- package/dist/core/analyzer/external-packages.js +175 -0
- package/dist/core/analyzer/external-packages.js.map +1 -0
- package/dist/core/analyzer/file-walker.d.ts +78 -0
- package/dist/core/analyzer/file-walker.d.ts.map +1 -0
- package/dist/core/analyzer/file-walker.js +532 -0
- package/dist/core/analyzer/file-walker.js.map +1 -0
- package/dist/core/analyzer/function-registry-trie.d.ts +21 -0
- package/dist/core/analyzer/function-registry-trie.d.ts.map +1 -0
- package/dist/core/analyzer/function-registry-trie.js +39 -0
- package/dist/core/analyzer/function-registry-trie.js.map +1 -0
- package/dist/core/analyzer/http-route-parser.d.ts +152 -0
- package/dist/core/analyzer/http-route-parser.d.ts.map +1 -0
- package/dist/core/analyzer/http-route-parser.js +971 -0
- package/dist/core/analyzer/http-route-parser.js.map +1 -0
- package/dist/core/analyzer/import-parser.d.ts +100 -0
- package/dist/core/analyzer/import-parser.d.ts.map +1 -0
- package/dist/core/analyzer/import-parser.js +952 -0
- package/dist/core/analyzer/import-parser.js.map +1 -0
- package/dist/core/analyzer/import-resolver-bridge.d.ts +25 -0
- package/dist/core/analyzer/import-resolver-bridge.d.ts.map +1 -0
- package/dist/core/analyzer/import-resolver-bridge.js +99 -0
- package/dist/core/analyzer/import-resolver-bridge.js.map +1 -0
- package/dist/core/analyzer/index.d.ts +10 -0
- package/dist/core/analyzer/index.d.ts.map +1 -0
- package/dist/core/analyzer/index.js +10 -0
- package/dist/core/analyzer/index.js.map +1 -0
- package/dist/core/analyzer/middleware-extractor.d.ts +29 -0
- package/dist/core/analyzer/middleware-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/middleware-extractor.js +195 -0
- package/dist/core/analyzer/middleware-extractor.js.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts +83 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.js +351 -0
- package/dist/core/analyzer/refactor-analyzer.js.map +1 -0
- package/dist/core/analyzer/repository-mapper.d.ts +150 -0
- package/dist/core/analyzer/repository-mapper.d.ts.map +1 -0
- package/dist/core/analyzer/repository-mapper.js +740 -0
- package/dist/core/analyzer/repository-mapper.js.map +1 -0
- package/dist/core/analyzer/schema-extractor.d.ts +41 -0
- package/dist/core/analyzer/schema-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/schema-extractor.js +229 -0
- package/dist/core/analyzer/schema-extractor.js.map +1 -0
- package/dist/core/analyzer/signature-extractor.d.ts +31 -0
- package/dist/core/analyzer/signature-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/signature-extractor.js +675 -0
- package/dist/core/analyzer/signature-extractor.js.map +1 -0
- package/dist/core/analyzer/significance-scorer.d.ts +79 -0
- package/dist/core/analyzer/significance-scorer.d.ts.map +1 -0
- package/dist/core/analyzer/significance-scorer.js +407 -0
- package/dist/core/analyzer/significance-scorer.js.map +1 -0
- package/dist/core/analyzer/spec-snapshot-generator.d.ts +17 -0
- package/dist/core/analyzer/spec-snapshot-generator.d.ts.map +1 -0
- package/dist/core/analyzer/spec-snapshot-generator.js +201 -0
- package/dist/core/analyzer/spec-snapshot-generator.js.map +1 -0
- package/dist/core/analyzer/spec-vector-index.d.ts +68 -0
- package/dist/core/analyzer/spec-vector-index.d.ts.map +1 -0
- package/dist/core/analyzer/spec-vector-index.js +340 -0
- package/dist/core/analyzer/spec-vector-index.js.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts +51 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.js +147 -0
- package/dist/core/analyzer/subgraph-extractor.js.map +1 -0
- package/dist/core/analyzer/type-inference-engine.d.ts +23 -0
- package/dist/core/analyzer/type-inference-engine.d.ts.map +1 -0
- package/dist/core/analyzer/type-inference-engine.js +130 -0
- package/dist/core/analyzer/type-inference-engine.js.map +1 -0
- package/dist/core/analyzer/ui-component-extractor.d.ts +43 -0
- package/dist/core/analyzer/ui-component-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/ui-component-extractor.js +245 -0
- package/dist/core/analyzer/ui-component-extractor.js.map +1 -0
- package/dist/core/analyzer/unified-search.d.ts +116 -0
- package/dist/core/analyzer/unified-search.d.ts.map +1 -0
- package/dist/core/analyzer/unified-search.js +231 -0
- package/dist/core/analyzer/unified-search.js.map +1 -0
- package/dist/core/analyzer/vector-index.d.ts +92 -0
- package/dist/core/analyzer/vector-index.d.ts.map +1 -0
- package/dist/core/analyzer/vector-index.js +451 -0
- package/dist/core/analyzer/vector-index.js.map +1 -0
- package/dist/core/decisions/consolidator.d.ts +14 -0
- package/dist/core/decisions/consolidator.d.ts.map +1 -0
- package/dist/core/decisions/consolidator.js +169 -0
- package/dist/core/decisions/consolidator.js.map +1 -0
- package/dist/core/decisions/extractor.d.ts +26 -0
- package/dist/core/decisions/extractor.d.ts.map +1 -0
- package/dist/core/decisions/extractor.js +156 -0
- package/dist/core/decisions/extractor.js.map +1 -0
- package/dist/core/decisions/index.d.ts +19 -0
- package/dist/core/decisions/index.d.ts.map +1 -0
- package/dist/core/decisions/index.js +16 -0
- package/dist/core/decisions/index.js.map +1 -0
- package/dist/core/decisions/store.d.ts +36 -0
- package/dist/core/decisions/store.d.ts.map +1 -0
- package/dist/core/decisions/store.js +109 -0
- package/dist/core/decisions/store.js.map +1 -0
- package/dist/core/decisions/syncer.d.ts +27 -0
- package/dist/core/decisions/syncer.d.ts.map +1 -0
- package/dist/core/decisions/syncer.js +214 -0
- package/dist/core/decisions/syncer.js.map +1 -0
- package/dist/core/decisions/verifier.d.ts +20 -0
- package/dist/core/decisions/verifier.d.ts.map +1 -0
- package/dist/core/decisions/verifier.js +115 -0
- package/dist/core/decisions/verifier.js.map +1 -0
- package/dist/core/digest/digest-generator.d.ts +29 -0
- package/dist/core/digest/digest-generator.d.ts.map +1 -0
- package/dist/core/digest/digest-generator.js +181 -0
- package/dist/core/digest/digest-generator.js.map +1 -0
- package/dist/core/drift/drift-detector.d.ts +102 -0
- package/dist/core/drift/drift-detector.d.ts.map +1 -0
- package/dist/core/drift/drift-detector.js +598 -0
- package/dist/core/drift/drift-detector.js.map +1 -0
- package/dist/core/drift/git-diff.d.ts +60 -0
- package/dist/core/drift/git-diff.d.ts.map +1 -0
- package/dist/core/drift/git-diff.js +383 -0
- package/dist/core/drift/git-diff.js.map +1 -0
- package/dist/core/drift/index.d.ts +12 -0
- package/dist/core/drift/index.d.ts.map +1 -0
- package/dist/core/drift/index.js +9 -0
- package/dist/core/drift/index.js.map +1 -0
- package/dist/core/drift/spec-mapper.d.ts +73 -0
- package/dist/core/drift/spec-mapper.d.ts.map +1 -0
- package/dist/core/drift/spec-mapper.js +353 -0
- package/dist/core/drift/spec-mapper.js.map +1 -0
- package/dist/core/drift/test-suggester.d.ts +18 -0
- package/dist/core/drift/test-suggester.d.ts.map +1 -0
- package/dist/core/drift/test-suggester.js +107 -0
- package/dist/core/drift/test-suggester.js.map +1 -0
- package/dist/core/generator/adr-generator.d.ts +32 -0
- package/dist/core/generator/adr-generator.d.ts.map +1 -0
- package/dist/core/generator/adr-generator.js +192 -0
- package/dist/core/generator/adr-generator.js.map +1 -0
- package/dist/core/generator/index.d.ts +9 -0
- package/dist/core/generator/index.d.ts.map +1 -0
- package/dist/core/generator/index.js +12 -0
- package/dist/core/generator/index.js.map +1 -0
- package/dist/core/generator/mapping-generator.d.ts +54 -0
- package/dist/core/generator/mapping-generator.d.ts.map +1 -0
- package/dist/core/generator/mapping-generator.js +240 -0
- package/dist/core/generator/mapping-generator.js.map +1 -0
- package/dist/core/generator/openspec-compat.d.ts +160 -0
- package/dist/core/generator/openspec-compat.d.ts.map +1 -0
- package/dist/core/generator/openspec-compat.js +524 -0
- package/dist/core/generator/openspec-compat.js.map +1 -0
- package/dist/core/generator/openspec-format-generator.d.ts +131 -0
- package/dist/core/generator/openspec-format-generator.d.ts.map +1 -0
- package/dist/core/generator/openspec-format-generator.js +963 -0
- package/dist/core/generator/openspec-format-generator.js.map +1 -0
- package/dist/core/generator/openspec-writer.d.ts +130 -0
- package/dist/core/generator/openspec-writer.d.ts.map +1 -0
- package/dist/core/generator/openspec-writer.js +404 -0
- package/dist/core/generator/openspec-writer.js.map +1 -0
- package/dist/core/generator/prompts.d.ts +35 -0
- package/dist/core/generator/prompts.d.ts.map +1 -0
- package/dist/core/generator/prompts.js +212 -0
- package/dist/core/generator/prompts.js.map +1 -0
- package/dist/core/generator/rag-manifest-generator.d.ts +37 -0
- package/dist/core/generator/rag-manifest-generator.d.ts.map +1 -0
- package/dist/core/generator/rag-manifest-generator.js +134 -0
- package/dist/core/generator/rag-manifest-generator.js.map +1 -0
- package/dist/core/generator/schemas.d.ts +365 -0
- package/dist/core/generator/schemas.d.ts.map +1 -0
- package/dist/core/generator/schemas.js +190 -0
- package/dist/core/generator/schemas.js.map +1 -0
- package/dist/core/generator/spec-pipeline.d.ts +123 -0
- package/dist/core/generator/spec-pipeline.d.ts.map +1 -0
- package/dist/core/generator/spec-pipeline.js +699 -0
- package/dist/core/generator/spec-pipeline.js.map +1 -0
- package/dist/core/generator/stages/stage1-survey.d.ts +19 -0
- package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -0
- package/dist/core/generator/stages/stage1-survey.js +171 -0
- package/dist/core/generator/stages/stage1-survey.js.map +1 -0
- package/dist/core/generator/stages/stage2-entities.d.ts +11 -0
- package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -0
- package/dist/core/generator/stages/stage2-entities.js +74 -0
- package/dist/core/generator/stages/stage2-entities.js.map +1 -0
- package/dist/core/generator/stages/stage3-services.d.ts +11 -0
- package/dist/core/generator/stages/stage3-services.d.ts.map +1 -0
- package/dist/core/generator/stages/stage3-services.js +85 -0
- package/dist/core/generator/stages/stage3-services.js.map +1 -0
- package/dist/core/generator/stages/stage4-api.d.ts +11 -0
- package/dist/core/generator/stages/stage4-api.d.ts.map +1 -0
- package/dist/core/generator/stages/stage4-api.js +72 -0
- package/dist/core/generator/stages/stage4-api.js.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts +11 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.js +75 -0
- package/dist/core/generator/stages/stage5-architecture.js.map +1 -0
- package/dist/core/generator/stages/stage6-adr.d.ts +8 -0
- package/dist/core/generator/stages/stage6-adr.d.ts.map +1 -0
- package/dist/core/generator/stages/stage6-adr.js +47 -0
- package/dist/core/generator/stages/stage6-adr.js.map +1 -0
- package/dist/core/services/chat-agent.d.ts +50 -0
- package/dist/core/services/chat-agent.d.ts.map +1 -0
- package/dist/core/services/chat-agent.js +369 -0
- package/dist/core/services/chat-agent.js.map +1 -0
- package/dist/core/services/chat-tools.d.ts +32 -0
- package/dist/core/services/chat-tools.d.ts.map +1 -0
- package/dist/core/services/chat-tools.js +494 -0
- package/dist/core/services/chat-tools.js.map +1 -0
- package/dist/core/services/config-manager.d.ts +61 -0
- package/dist/core/services/config-manager.d.ts.map +1 -0
- package/dist/core/services/config-manager.js +149 -0
- package/dist/core/services/config-manager.js.map +1 -0
- package/dist/core/services/edge-store.d.ts +57 -0
- package/dist/core/services/edge-store.d.ts.map +1 -0
- package/dist/core/services/edge-store.js +419 -0
- package/dist/core/services/edge-store.js.map +1 -0
- package/dist/core/services/gitignore-manager.d.ts +29 -0
- package/dist/core/services/gitignore-manager.d.ts.map +1 -0
- package/dist/core/services/gitignore-manager.js +95 -0
- package/dist/core/services/gitignore-manager.js.map +1 -0
- package/dist/core/services/index.d.ts +8 -0
- package/dist/core/services/index.d.ts.map +1 -0
- package/dist/core/services/index.js +8 -0
- package/dist/core/services/index.js.map +1 -0
- package/dist/core/services/llm-service.d.ts +379 -0
- package/dist/core/services/llm-service.d.ts.map +1 -0
- package/dist/core/services/llm-service.js +1553 -0
- package/dist/core/services/llm-service.js.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts +127 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.js +1185 -0
- package/dist/core/services/mcp-handlers/analysis.js.map +1 -0
- package/dist/core/services/mcp-handlers/change.d.ts +14 -0
- package/dist/core/services/mcp-handlers/change.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/change.js +416 -0
- package/dist/core/services/mcp-handlers/change.js.map +1 -0
- package/dist/core/services/mcp-handlers/decisions.d.ts +16 -0
- package/dist/core/services/mcp-handlers/decisions.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/decisions.js +239 -0
- package/dist/core/services/mcp-handlers/decisions.js.map +1 -0
- package/dist/core/services/mcp-handlers/graph.d.ts +94 -0
- package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/graph.js +693 -0
- package/dist/core/services/mcp-handlers/graph.js.map +1 -0
- package/dist/core/services/mcp-handlers/orient.d.ts +17 -0
- package/dist/core/services/mcp-handlers/orient.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/orient.js +357 -0
- package/dist/core/services/mcp-handlers/orient.js.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts +66 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.js +432 -0
- package/dist/core/services/mcp-handlers/semantic.js.map +1 -0
- package/dist/core/services/mcp-handlers/utils.d.ts +85 -0
- package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/utils.js +262 -0
- package/dist/core/services/mcp-handlers/utils.js.map +1 -0
- package/dist/core/services/mcp-watcher.d.ts +41 -0
- package/dist/core/services/mcp-watcher.d.ts.map +1 -0
- package/dist/core/services/mcp-watcher.js +254 -0
- package/dist/core/services/mcp-watcher.js.map +1 -0
- package/dist/core/services/project-detector.d.ts +32 -0
- package/dist/core/services/project-detector.d.ts.map +1 -0
- package/dist/core/services/project-detector.js +100 -0
- package/dist/core/services/project-detector.js.map +1 -0
- package/dist/core/test-generator/coverage-analyzer.d.ts +27 -0
- package/dist/core/test-generator/coverage-analyzer.d.ts.map +1 -0
- package/dist/core/test-generator/coverage-analyzer.js +285 -0
- package/dist/core/test-generator/coverage-analyzer.js.map +1 -0
- package/dist/core/test-generator/framework-detector.d.ts +17 -0
- package/dist/core/test-generator/framework-detector.d.ts.map +1 -0
- package/dist/core/test-generator/framework-detector.js +65 -0
- package/dist/core/test-generator/framework-detector.js.map +1 -0
- package/dist/core/test-generator/index.d.ts +14 -0
- package/dist/core/test-generator/index.d.ts.map +1 -0
- package/dist/core/test-generator/index.js +11 -0
- package/dist/core/test-generator/index.js.map +1 -0
- package/dist/core/test-generator/renderers/catch2.d.ts +8 -0
- package/dist/core/test-generator/renderers/catch2.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/catch2.js +47 -0
- package/dist/core/test-generator/renderers/catch2.js.map +1 -0
- package/dist/core/test-generator/renderers/gtest.d.ts +8 -0
- package/dist/core/test-generator/renderers/gtest.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/gtest.js +45 -0
- package/dist/core/test-generator/renderers/gtest.js.map +1 -0
- package/dist/core/test-generator/renderers/index.d.ts +20 -0
- package/dist/core/test-generator/renderers/index.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/index.js +35 -0
- package/dist/core/test-generator/renderers/index.js.map +1 -0
- package/dist/core/test-generator/renderers/playwright.d.ts +8 -0
- package/dist/core/test-generator/renderers/playwright.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/playwright.js +44 -0
- package/dist/core/test-generator/renderers/playwright.js.map +1 -0
- package/dist/core/test-generator/renderers/pytest.d.ts +8 -0
- package/dist/core/test-generator/renderers/pytest.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/pytest.js +44 -0
- package/dist/core/test-generator/renderers/pytest.js.map +1 -0
- package/dist/core/test-generator/renderers/shared.d.ts +21 -0
- package/dist/core/test-generator/renderers/shared.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/shared.js +56 -0
- package/dist/core/test-generator/renderers/shared.js.map +1 -0
- package/dist/core/test-generator/renderers/vitest.d.ts +8 -0
- package/dist/core/test-generator/renderers/vitest.d.ts.map +1 -0
- package/dist/core/test-generator/renderers/vitest.js +52 -0
- package/dist/core/test-generator/renderers/vitest.js.map +1 -0
- package/dist/core/test-generator/scenario-parser.d.ts +33 -0
- package/dist/core/test-generator/scenario-parser.d.ts.map +1 -0
- package/dist/core/test-generator/scenario-parser.js +244 -0
- package/dist/core/test-generator/scenario-parser.js.map +1 -0
- package/dist/core/test-generator/test-generator.d.ts +30 -0
- package/dist/core/test-generator/test-generator.d.ts.map +1 -0
- package/dist/core/test-generator/test-generator.js +174 -0
- package/dist/core/test-generator/test-generator.js.map +1 -0
- package/dist/core/test-generator/test-writer.d.ts +25 -0
- package/dist/core/test-generator/test-writer.d.ts.map +1 -0
- package/dist/core/test-generator/test-writer.js +128 -0
- package/dist/core/test-generator/test-writer.js.map +1 -0
- package/dist/core/test-generator/then-matchers.d.ts +35 -0
- package/dist/core/test-generator/then-matchers.d.ts.map +1 -0
- package/dist/core/test-generator/then-matchers.js +211 -0
- package/dist/core/test-generator/then-matchers.js.map +1 -0
- package/dist/core/verifier/index.d.ts +5 -0
- package/dist/core/verifier/index.d.ts.map +1 -0
- package/dist/core/verifier/index.js +5 -0
- package/dist/core/verifier/index.js.map +1 -0
- package/dist/core/verifier/verification-engine.d.ts +293 -0
- package/dist/core/verifier/verification-engine.d.ts.map +1 -0
- package/dist/core/verifier/verification-engine.js +919 -0
- package/dist/core/verifier/verification-engine.js.map +1 -0
- package/dist/types/index.d.ts +368 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pipeline.d.ts +167 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +5 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/types/test-generator.d.ts +103 -0
- package/dist/types/test-generator.d.ts.map +1 -0
- package/dist/types/test-generator.js +17 -0
- package/dist/types/test-generator.js.map +1 -0
- package/dist/utils/command-helpers.d.ts +68 -0
- package/dist/utils/command-helpers.d.ts.map +1 -0
- package/dist/utils/command-helpers.js +150 -0
- package/dist/utils/command-helpers.js.map +1 -0
- package/dist/utils/errors.d.ts +51 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +129 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +149 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +342 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/misc.d.ts +10 -0
- package/dist/utils/misc.d.ts.map +1 -0
- package/dist/utils/misc.js +21 -0
- package/dist/utils/misc.js.map +1 -0
- package/dist/utils/progress.d.ts +142 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +283 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/prompts.d.ts +53 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +199 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/shutdown.d.ts +89 -0
- package/dist/utils/shutdown.d.ts.map +1 -0
- package/dist/utils/shutdown.js +238 -0
- package/dist/utils/shutdown.js.map +1 -0
- package/examples/bmad/README.md +113 -0
- package/examples/bmad/agents/architect.md +226 -0
- package/examples/bmad/agents/dev-brownfield.md +69 -0
- package/examples/bmad/setup/architect.customize.yaml +14 -0
- package/examples/bmad/tasks/implement-story.md +254 -0
- package/examples/bmad/tasks/onboarding.md +169 -0
- package/examples/bmad/tasks/refactor.md +178 -0
- package/examples/bmad/tasks/sprint-planning.md +168 -0
- package/examples/bmad/templates/story.md +108 -0
- package/examples/cline-workflows/openlore-analyze-codebase.md +101 -0
- package/examples/cline-workflows/openlore-check-spec-drift.md +102 -0
- package/examples/cline-workflows/openlore-execute-refactor.md +212 -0
- package/examples/cline-workflows/openlore-implement-feature.md +266 -0
- package/examples/cline-workflows/openlore-plan-refactor.md +279 -0
- package/examples/cline-workflows/openlore-refactor-codebase.md +16 -0
- package/examples/cline-workflows/openlore-write-tests.md +177 -0
- package/examples/drift-demo/openspec/config.yaml +14 -0
- package/examples/drift-demo/openspec/specs/architecture/spec.md +30 -0
- package/examples/drift-demo/openspec/specs/auth/spec.md +71 -0
- package/examples/drift-demo/openspec/specs/database/spec.md +33 -0
- package/examples/drift-demo/openspec/specs/overview/spec.md +20 -0
- package/examples/drift-demo/openspec/specs/projects/spec.md +55 -0
- package/examples/drift-demo/openspec/specs/tasks/spec.md +78 -0
- package/examples/drift-demo/package.json +21 -0
- package/examples/drift-demo/src/auth/auth-middleware.ts +30 -0
- package/examples/drift-demo/src/auth/auth-routes.ts +29 -0
- package/examples/drift-demo/src/auth/auth-service.ts +45 -0
- package/examples/drift-demo/src/database/connection.ts +27 -0
- package/examples/drift-demo/src/index.ts +16 -0
- package/examples/drift-demo/src/projects/project-model.ts +15 -0
- package/examples/drift-demo/src/projects/project-service.ts +34 -0
- package/examples/drift-demo/src/tasks/task-model.ts +37 -0
- package/examples/drift-demo/src/tasks/task-routes.ts +53 -0
- package/examples/drift-demo/src/tasks/task-service.ts +60 -0
- package/examples/drift-demo/src/utils/validation.ts +11 -0
- package/examples/drift-demo/tests/auth.test.ts +4 -0
- package/examples/drift-demo/tests/tasks.test.ts +4 -0
- package/examples/drift-demo/tsconfig.json +10 -0
- package/examples/drift-test/run-drift-test.sh +1087 -0
- package/examples/gsd/README.md +119 -0
- package/examples/gsd/commands/gsd/openlore-drift.md +111 -0
- package/examples/gsd/commands/gsd/openlore-orient.md +191 -0
- package/examples/mistral-vibe/README.md +101 -0
- package/examples/mistral-vibe/antipatterns-template.md +18 -0
- package/examples/mistral-vibe/skills/openlore-analyze-codebase/SKILL.md +124 -0
- package/examples/mistral-vibe/skills/openlore-brainstorm/SKILL.md +379 -0
- package/examples/mistral-vibe/skills/openlore-debug/SKILL.md +330 -0
- package/examples/mistral-vibe/skills/openlore-execute-refactor/SKILL.md +291 -0
- package/examples/mistral-vibe/skills/openlore-generate/SKILL.md +245 -0
- package/examples/mistral-vibe/skills/openlore-implement-story/SKILL.md +326 -0
- package/examples/mistral-vibe/skills/openlore-plan-refactor/SKILL.md +365 -0
- package/examples/mistral-vibe/skills/openlore-review-changes/SKILL.md +128 -0
- package/examples/mistral-vibe/skills/openlore-write-tests/SKILL.md +261 -0
- package/examples/opencode/agent-guard.ts +170 -0
- package/examples/opencode/plugins/anti-laziness.ts +202 -0
- package/examples/opencode/plugins/lib/openlore-context-injector-helpers.ts +116 -0
- package/examples/opencode/plugins/lib/openlore-decision-extractor-helpers.ts +65 -0
- package/examples/opencode/plugins/openlore-context-injector.test.ts +211 -0
- package/examples/opencode/plugins/openlore-context-injector.ts +165 -0
- package/examples/opencode/plugins/openlore-decision-extractor.test.ts +131 -0
- package/examples/opencode/plugins/openlore-decision-extractor.ts +322 -0
- package/examples/opencode/plugins/openlore-enforcer.ts +227 -0
- package/examples/opencode/prompts/sisyphus-sdd.md +150 -0
- package/examples/opencode-skills/openlore-analyze-codebase/SKILL.md +101 -0
- package/examples/opencode-skills/openlore-brainstorm/SKILL.md +354 -0
- package/examples/opencode-skills/openlore-debug/SKILL.md +291 -0
- package/examples/opencode-skills/openlore-execute-refactor/SKILL.md +241 -0
- package/examples/opencode-skills/openlore-generate/SKILL.md +236 -0
- package/examples/opencode-skills/openlore-implement-story/SKILL.md +251 -0
- package/examples/opencode-skills/openlore-plan-refactor/SKILL.md +298 -0
- package/examples/opencode-skills/openlore-review-changes/SKILL.md +134 -0
- package/examples/opencode-skills/openlore-write-tests/SKILL.md +230 -0
- package/examples/openspec-analysis/README.md +59 -0
- package/examples/openspec-analysis/SUMMARY.md +72 -0
- package/examples/openspec-analysis/config.json +16 -0
- package/examples/openspec-analysis/dependencies.mermaid +35 -0
- package/examples/openspec-analysis/dependency-graph.json +12116 -0
- package/examples/openspec-analysis/llm-context.json +119 -0
- package/examples/openspec-analysis/repo-structure.json +871 -0
- package/examples/openspec-cli/README.md +67 -0
- package/examples/openspec-cli/openspec/config.yaml +26 -0
- package/examples/openspec-cli/openspec/specs/architecture/spec.md +178 -0
- package/examples/openspec-cli/openspec/specs/artifact-graph/spec.md +143 -0
- package/examples/openspec-cli/openspec/specs/cli/spec.md +138 -0
- package/examples/openspec-cli/openspec/specs/overview/spec.md +60 -0
- package/examples/openspec-cli/openspec/specs/parsing/spec.md +123 -0
- package/examples/openspec-cli/openspec/specs/validation/spec.md +108 -0
- package/examples/spec-kit/README.md +104 -0
- package/examples/spec-kit/commands/drift.md +87 -0
- package/examples/spec-kit/commands/orient.md +138 -0
- package/examples/spec-kit/extension.yml +54 -0
- package/package.json +125 -0
- package/src/viewer/InteractiveGraphViewer.jsx +1600 -0
- package/src/viewer/app/index.html +17 -0
- package/src/viewer/app/main.jsx +13 -0
- package/src/viewer/components/ArchitectureView.jsx +177 -0
- package/src/viewer/components/ChatPanel.jsx +450 -0
- package/src/viewer/components/ClassGraph.jsx +782 -0
- package/src/viewer/components/ClusterGraph.jsx +469 -0
- package/src/viewer/components/FilterBar.jsx +179 -0
- package/src/viewer/components/FlatGraph.jsx +282 -0
- package/src/viewer/components/MicroComponents.jsx +85 -0
- package/src/viewer/hooks/usePanZoom.js +79 -0
- package/src/viewer/utils/constants.js +64 -0
- package/src/viewer/utils/graph-helpers.js +303 -0
- package/src/viewer/utils/graph-helpers.test.ts +39 -0
- package/src/viewer/utils/themes.js +206 -0
- package/stubs/tree-sitter-cli-stub/package.json +6 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THEN Clause Pattern Engine
|
|
3
|
+
*
|
|
4
|
+
* Transforms natural-language THEN clauses from OpenSpec scenarios into
|
|
5
|
+
* framework-specific assertion lines — without any LLM call.
|
|
6
|
+
*
|
|
7
|
+
* Design principles:
|
|
8
|
+
* - Pure functions only, no I/O
|
|
9
|
+
* - Each pattern matches a common spec phrase and emits assertions
|
|
10
|
+
* - Multiple assertions can be emitted per THEN line
|
|
11
|
+
* - Falls back to a TODO placeholder when no pattern matches
|
|
12
|
+
* - Framework-aware: same pattern emits different syntax per framework
|
|
13
|
+
*
|
|
14
|
+
* Adding a new pattern:
|
|
15
|
+
* 1. Add a ThenPattern to PATTERNS below
|
|
16
|
+
* 2. Add assertions for all five frameworks in its `assertions` object
|
|
17
|
+
*/
|
|
18
|
+
import type { TestFramework } from '../../types/test-generator.js';
|
|
19
|
+
export interface ThenMatch {
|
|
20
|
+
/** Assertion source lines for the given framework */
|
|
21
|
+
lines: string[];
|
|
22
|
+
/** Which THEN clause index this matched */
|
|
23
|
+
thenIndex: number;
|
|
24
|
+
/** true = came from pattern engine; false = placeholder */
|
|
25
|
+
fromPattern: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Match THEN clauses against the pattern library and return assertion lines.
|
|
29
|
+
*
|
|
30
|
+
* @param thenClauses Array of THEN clause strings (one per bullet)
|
|
31
|
+
* @param framework Target test framework
|
|
32
|
+
* @returns Array of ThenMatch — one per THEN clause
|
|
33
|
+
*/
|
|
34
|
+
export declare function matchThenClauses(thenClauses: string[], framework: TestFramework): ThenMatch[];
|
|
35
|
+
//# sourceMappingURL=then-matchers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"then-matchers.d.ts","sourceRoot":"","sources":["../../../src/core/test-generator/then-matchers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMnE,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;CACtB;AAoMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,aAAa,GACvB,SAAS,EAAE,CAmBb"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THEN Clause Pattern Engine
|
|
3
|
+
*
|
|
4
|
+
* Transforms natural-language THEN clauses from OpenSpec scenarios into
|
|
5
|
+
* framework-specific assertion lines — without any LLM call.
|
|
6
|
+
*
|
|
7
|
+
* Design principles:
|
|
8
|
+
* - Pure functions only, no I/O
|
|
9
|
+
* - Each pattern matches a common spec phrase and emits assertions
|
|
10
|
+
* - Multiple assertions can be emitted per THEN line
|
|
11
|
+
* - Falls back to a TODO placeholder when no pattern matches
|
|
12
|
+
* - Framework-aware: same pattern emits different syntax per framework
|
|
13
|
+
*
|
|
14
|
+
* Adding a new pattern:
|
|
15
|
+
* 1. Add a ThenPattern to PATTERNS below
|
|
16
|
+
* 2. Add assertions for all five frameworks in its `assertions` object
|
|
17
|
+
*/
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// PATTERN LIBRARY
|
|
20
|
+
// ============================================================================
|
|
21
|
+
const PATTERNS = [
|
|
22
|
+
// ── "returns status <N> with error '<msg>'" ──────────────────────────────
|
|
23
|
+
{
|
|
24
|
+
regex: /returns?\s+status\s+(\d+)\s+with\s+error\s+["']([^"']+)["']/i,
|
|
25
|
+
assertions: {
|
|
26
|
+
vitest: ([, status, msg]) => [
|
|
27
|
+
`expect(response.status).toBe(${status});`,
|
|
28
|
+
`expect(response.body.error).toBe('${msg}');`,
|
|
29
|
+
],
|
|
30
|
+
playwright: ([, status, msg]) => [
|
|
31
|
+
`expect(response.status()).toBe(${status});`,
|
|
32
|
+
`expect(await response.json()).toMatchObject({ error: '${msg}' });`,
|
|
33
|
+
],
|
|
34
|
+
pytest: ([, status, msg]) => [
|
|
35
|
+
`assert response.status_code == ${status}`,
|
|
36
|
+
`assert response.json()["error"] == "${msg}"`,
|
|
37
|
+
],
|
|
38
|
+
gtest: ([, status, msg]) => [
|
|
39
|
+
`EXPECT_EQ(response.status, ${status});`,
|
|
40
|
+
`EXPECT_EQ(response.body["error"], "${msg}");`,
|
|
41
|
+
],
|
|
42
|
+
catch2: ([, status, msg]) => [
|
|
43
|
+
`REQUIRE(response.status == ${status});`,
|
|
44
|
+
`REQUIRE(response.body["error"] == "${msg}");`,
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
// ── "returns status <N>" ─────────────────────────────────────────────────
|
|
49
|
+
{
|
|
50
|
+
regex: /returns?\s+status\s+(\d+)/i,
|
|
51
|
+
assertions: {
|
|
52
|
+
vitest: ([, status]) => [`expect(response.status).toBe(${status});`],
|
|
53
|
+
playwright: ([, status]) => [`expect(response.status()).toBe(${status});`],
|
|
54
|
+
pytest: ([, status]) => [`assert response.status_code == ${status}`],
|
|
55
|
+
gtest: ([, status]) => [`EXPECT_EQ(response.status, ${status});`],
|
|
56
|
+
catch2: ([, status]) => [`REQUIRE(response.status == ${status});`],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
// ── "returns a/an <prop> [, <prop>] [and <prop>]" ────────────────────────
|
|
60
|
+
// e.g. "returns a JWT token, expiry time, and userId"
|
|
61
|
+
{
|
|
62
|
+
regex: /returns?\s+(?:a|an)\s+(.+?)(?:\s+with\s+status\s+\d+)?$/i,
|
|
63
|
+
assertions: {
|
|
64
|
+
vitest: ([, propsStr]) => extractProps(propsStr).map((p) => `expect(response.body).toHaveProperty('${p}');`),
|
|
65
|
+
playwright: ([, propsStr]) => [
|
|
66
|
+
`const body = await response.json();`,
|
|
67
|
+
...extractProps(propsStr).map((p) => `expect(body).toHaveProperty('${p}');`),
|
|
68
|
+
],
|
|
69
|
+
pytest: ([, propsStr]) => [
|
|
70
|
+
`body = response.json()`,
|
|
71
|
+
...extractProps(propsStr).map((p) => `assert "${p}" in body`),
|
|
72
|
+
],
|
|
73
|
+
gtest: ([, propsStr]) => extractProps(propsStr).map((p) => `EXPECT_TRUE(response.body.contains("${p}"));`),
|
|
74
|
+
catch2: ([, propsStr]) => extractProps(propsStr).map((p) => `REQUIRE(response.body.contains("${p}"));`),
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
// ── "creates/creates the <entity> with <field> '<value>'" ─────────────────
|
|
78
|
+
{
|
|
79
|
+
regex: /creates?\s+(?:the\s+)?\w+\s+with\s+(\w+)\s+["']([^"']+)["']/i,
|
|
80
|
+
assertions: {
|
|
81
|
+
vitest: ([, field, value]) => [
|
|
82
|
+
`expect(result.${field}).toBe('${value}');`,
|
|
83
|
+
],
|
|
84
|
+
playwright: ([, field, value]) => [
|
|
85
|
+
`const result = await response.json();`,
|
|
86
|
+
`expect(result.${field}).toBe('${value}');`,
|
|
87
|
+
],
|
|
88
|
+
pytest: ([, field, value]) => [
|
|
89
|
+
`result = response.json()`,
|
|
90
|
+
`assert result["${field}"] == "${value}"`,
|
|
91
|
+
],
|
|
92
|
+
gtest: ([, field, value]) => [
|
|
93
|
+
`EXPECT_EQ(result.${field}, "${value}");`,
|
|
94
|
+
],
|
|
95
|
+
catch2: ([, field, value]) => [
|
|
96
|
+
`REQUIRE(result.${field} == "${value}");`,
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
// ── "returns the <entity> with status <N>" ───────────────────────────────
|
|
101
|
+
{
|
|
102
|
+
regex: /returns?\s+(?:the\s+)?\w+\s+(?:and\s+)?\w*\s*with\s+status\s+(\d+)/i,
|
|
103
|
+
assertions: {
|
|
104
|
+
vitest: ([, status]) => [
|
|
105
|
+
`expect(response.status).toBe(${status});`,
|
|
106
|
+
`expect(response.body).toBeDefined();`,
|
|
107
|
+
],
|
|
108
|
+
playwright: ([, status]) => [
|
|
109
|
+
`expect(response.status()).toBe(${status});`,
|
|
110
|
+
],
|
|
111
|
+
pytest: ([, status]) => [
|
|
112
|
+
`assert response.status_code == ${status}`,
|
|
113
|
+
`assert response.json() is not None`,
|
|
114
|
+
],
|
|
115
|
+
gtest: ([, status]) => [
|
|
116
|
+
`EXPECT_EQ(response.status, ${status});`,
|
|
117
|
+
`EXPECT_FALSE(response.body.empty());`,
|
|
118
|
+
],
|
|
119
|
+
catch2: ([, status]) => [
|
|
120
|
+
`REQUIRE(response.status == ${status});`,
|
|
121
|
+
`REQUIRE(!response.body.empty());`,
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
// ── "throws/raises an error" ─────────────────────────────────────────────
|
|
126
|
+
{
|
|
127
|
+
regex: /(?:throws?|raises?)\s+(?:an?\s+)?(?:error|exception)/i,
|
|
128
|
+
assertions: {
|
|
129
|
+
vitest: () => [`await expect(action()).rejects.toThrow();`],
|
|
130
|
+
playwright: () => [`// TODO: verify error is thrown`],
|
|
131
|
+
pytest: () => [`with pytest.raises(Exception):\n action()`],
|
|
132
|
+
gtest: () => [`EXPECT_THROW(action(), std::exception);`],
|
|
133
|
+
catch2: () => [`REQUIRE_THROWS(action());`],
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
// ── "does not/doesn't <verb>" ────────────────────────────────────────────
|
|
137
|
+
{
|
|
138
|
+
regex: /does\s+not|doesn'?t/i,
|
|
139
|
+
assertions: {
|
|
140
|
+
vitest: () => [`expect(result).toBeUndefined(); // TODO: verify negative case`],
|
|
141
|
+
playwright: () => [`// TODO: verify negative behavior`],
|
|
142
|
+
pytest: () => [`assert result is None # TODO: verify negative case`],
|
|
143
|
+
gtest: () => [`EXPECT_FALSE(result.has_value()); // TODO: verify negative case`],
|
|
144
|
+
catch2: () => [`REQUIRE_FALSE(result.has_value()); // TODO: verify negative case`],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
];
|
|
148
|
+
// ============================================================================
|
|
149
|
+
// HELPERS
|
|
150
|
+
// ============================================================================
|
|
151
|
+
/**
|
|
152
|
+
* Extract property names from a "a JWT token, expiry time, and userId" string.
|
|
153
|
+
* Strips filler words (a/an/the/time/etc.) to get clean property identifiers.
|
|
154
|
+
*/
|
|
155
|
+
function extractProps(raw) {
|
|
156
|
+
// Remove "and", split on comma
|
|
157
|
+
const parts = raw
|
|
158
|
+
.replace(/\band\b/gi, ',')
|
|
159
|
+
.split(',')
|
|
160
|
+
.map((p) => p.trim())
|
|
161
|
+
.filter(Boolean);
|
|
162
|
+
return parts.map((p) => {
|
|
163
|
+
// Take the last "word" in each part as the property name — usually correct
|
|
164
|
+
// "JWT token" → "token", "expiry time" → "expiry", "userId" → "userId"
|
|
165
|
+
const words = p.replace(/[^a-zA-Z0-9\s_]/g, '').trim().split(/\s+/);
|
|
166
|
+
// If last word is a filler, take the one before it
|
|
167
|
+
const fillers = new Set(['time', 'date', 'value', 'object', 'item', 'entity']);
|
|
168
|
+
if (words.length > 1 && fillers.has(words[words.length - 1].toLowerCase())) {
|
|
169
|
+
return words[words.length - 2];
|
|
170
|
+
}
|
|
171
|
+
return words[words.length - 1];
|
|
172
|
+
}).filter(Boolean);
|
|
173
|
+
}
|
|
174
|
+
// ============================================================================
|
|
175
|
+
// PUBLIC API
|
|
176
|
+
// ============================================================================
|
|
177
|
+
const PLACEHOLDER = {
|
|
178
|
+
vitest: `expect(true).toBe(true); // TODO: implement assertion`,
|
|
179
|
+
playwright: `// TODO: implement assertion`,
|
|
180
|
+
pytest: `assert True # TODO: implement assertion`,
|
|
181
|
+
gtest: `SUCCEED(); // TODO: implement assertion`,
|
|
182
|
+
catch2: `SUCCEED(); // TODO: implement assertion`,
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Match THEN clauses against the pattern library and return assertion lines.
|
|
186
|
+
*
|
|
187
|
+
* @param thenClauses Array of THEN clause strings (one per bullet)
|
|
188
|
+
* @param framework Target test framework
|
|
189
|
+
* @returns Array of ThenMatch — one per THEN clause
|
|
190
|
+
*/
|
|
191
|
+
export function matchThenClauses(thenClauses, framework) {
|
|
192
|
+
return thenClauses.map((clause, thenIndex) => {
|
|
193
|
+
for (const pattern of PATTERNS) {
|
|
194
|
+
const m = clause.match(pattern.regex);
|
|
195
|
+
if (m) {
|
|
196
|
+
const builder = pattern.assertions[framework];
|
|
197
|
+
const lines = builder(m);
|
|
198
|
+
if (lines.length > 0) {
|
|
199
|
+
return { lines, thenIndex, fromPattern: true };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// No pattern matched — emit placeholder
|
|
204
|
+
return {
|
|
205
|
+
lines: [PLACEHOLDER[framework]],
|
|
206
|
+
thenIndex,
|
|
207
|
+
fromPattern: false,
|
|
208
|
+
};
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=then-matchers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"then-matchers.js","sourceRoot":"","sources":["../../../src/core/test-generator/then-matchers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/verifier/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/verifier/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec Verification Engine
|
|
3
|
+
*
|
|
4
|
+
* Tests whether generated specs accurately describe the codebase by using
|
|
5
|
+
* the specs to predict code behavior and comparing against actual files.
|
|
6
|
+
*/
|
|
7
|
+
import type { LLMService } from '../services/llm-service.js';
|
|
8
|
+
import type { DependencyGraphResult } from '../analyzer/dependency-graph.js';
|
|
9
|
+
/**
|
|
10
|
+
* Verification candidate file
|
|
11
|
+
*/
|
|
12
|
+
export interface VerificationCandidate {
|
|
13
|
+
path: string;
|
|
14
|
+
absolutePath: string;
|
|
15
|
+
domain: string;
|
|
16
|
+
usedInGeneration: boolean;
|
|
17
|
+
complexity: number;
|
|
18
|
+
lines: number;
|
|
19
|
+
imports: number;
|
|
20
|
+
exports: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* LLM prediction for a file
|
|
24
|
+
*/
|
|
25
|
+
export interface FilePrediction {
|
|
26
|
+
predictedPurpose: string;
|
|
27
|
+
predictedImports: string[];
|
|
28
|
+
predictedExports: string[];
|
|
29
|
+
predictedLogic: string[];
|
|
30
|
+
relatedRequirements: string[];
|
|
31
|
+
confidence: number;
|
|
32
|
+
/** LLM-as-judge score: how accurately does the spec describe this file (0.0–1.0) */
|
|
33
|
+
specAccuracyScore?: number;
|
|
34
|
+
/** LLM-as-judge score: fraction of this file's behavior covered by spec requirements (0.0–1.0) */
|
|
35
|
+
requirementCoverageScore?: number;
|
|
36
|
+
reasoning: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Match result for purpose
|
|
40
|
+
*/
|
|
41
|
+
export interface PurposeMatch {
|
|
42
|
+
predicted: string;
|
|
43
|
+
actual: string;
|
|
44
|
+
similarity: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Match result for imports/exports
|
|
48
|
+
*/
|
|
49
|
+
export interface SetMatch {
|
|
50
|
+
predicted: string[];
|
|
51
|
+
actual: string[];
|
|
52
|
+
precision: number;
|
|
53
|
+
recall: number;
|
|
54
|
+
f1Score: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Requirement coverage analysis
|
|
58
|
+
*/
|
|
59
|
+
export interface RequirementCoverage {
|
|
60
|
+
relatedRequirements: string[];
|
|
61
|
+
actuallyImplements: string[];
|
|
62
|
+
coverage: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Result for a single file verification
|
|
66
|
+
*/
|
|
67
|
+
export interface VerificationResult {
|
|
68
|
+
filePath: string;
|
|
69
|
+
domain: string;
|
|
70
|
+
purposeMatch: PurposeMatch;
|
|
71
|
+
importMatch: SetMatch;
|
|
72
|
+
exportMatch: SetMatch;
|
|
73
|
+
requirementCoverage: RequirementCoverage;
|
|
74
|
+
overallScore: number;
|
|
75
|
+
llmConfidence: number;
|
|
76
|
+
feedback: string[];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Domain breakdown in report
|
|
80
|
+
*/
|
|
81
|
+
export interface DomainBreakdown {
|
|
82
|
+
domain: string;
|
|
83
|
+
specPath: string;
|
|
84
|
+
filesVerified: number;
|
|
85
|
+
averageScore: number;
|
|
86
|
+
weakestArea: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Suggested improvement
|
|
90
|
+
*/
|
|
91
|
+
export interface SuggestedImprovement {
|
|
92
|
+
domain: string;
|
|
93
|
+
issue: string;
|
|
94
|
+
suggestion: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Complete verification report
|
|
98
|
+
*/
|
|
99
|
+
export interface VerificationReport {
|
|
100
|
+
timestamp: string;
|
|
101
|
+
specVersion: string;
|
|
102
|
+
sampledFiles: number;
|
|
103
|
+
passedFiles: number;
|
|
104
|
+
overallConfidence: number;
|
|
105
|
+
domainBreakdown: DomainBreakdown[];
|
|
106
|
+
commonGaps: string[];
|
|
107
|
+
recommendation: 'ready' | 'needs-review' | 'regenerate';
|
|
108
|
+
suggestedImprovements: SuggestedImprovement[];
|
|
109
|
+
results: VerificationResult[];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Engine options
|
|
113
|
+
*/
|
|
114
|
+
export interface VerificationEngineOptions {
|
|
115
|
+
/** Root directory of the project */
|
|
116
|
+
rootPath: string;
|
|
117
|
+
/** Path to openspec directory */
|
|
118
|
+
openspecPath: string;
|
|
119
|
+
/** Output directory for reports */
|
|
120
|
+
outputDir: string;
|
|
121
|
+
/** Minimum complexity (lines) for candidate files */
|
|
122
|
+
minComplexity?: number;
|
|
123
|
+
/** Maximum complexity (lines) for candidate files */
|
|
124
|
+
maxComplexity?: number;
|
|
125
|
+
/** Number of files to sample per domain */
|
|
126
|
+
filesPerDomain?: number;
|
|
127
|
+
/** Passing threshold for overall score */
|
|
128
|
+
passThreshold?: number;
|
|
129
|
+
/** Files used in generation (to exclude) */
|
|
130
|
+
generationContext?: string[];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Spec Verification Engine
|
|
134
|
+
*/
|
|
135
|
+
export declare class SpecVerificationEngine {
|
|
136
|
+
private llm;
|
|
137
|
+
private options;
|
|
138
|
+
private specs;
|
|
139
|
+
private fileDomainMap;
|
|
140
|
+
private parser;
|
|
141
|
+
constructor(llm: LLMService, options: VerificationEngineOptions);
|
|
142
|
+
/**
|
|
143
|
+
* Run full verification
|
|
144
|
+
*/
|
|
145
|
+
verify(depGraph: DependencyGraphResult, specVersion: string): Promise<VerificationReport>;
|
|
146
|
+
/**
|
|
147
|
+
* Load all specs from openspec directory
|
|
148
|
+
*/
|
|
149
|
+
private loadSpecs;
|
|
150
|
+
/**
|
|
151
|
+
* Load file→domain mapping from .openlore/analysis/mapping.json.
|
|
152
|
+
* Falls back silently if the file doesn't exist (e.g. before first analysis run).
|
|
153
|
+
*/
|
|
154
|
+
private loadFileDomainMap;
|
|
155
|
+
/**
|
|
156
|
+
* Select verification candidate files
|
|
157
|
+
*/
|
|
158
|
+
selectCandidates(depGraph: DependencyGraphResult): VerificationCandidate[];
|
|
159
|
+
/**
|
|
160
|
+
* Resolve the spec domain for a file.
|
|
161
|
+
*
|
|
162
|
+
* Priority:
|
|
163
|
+
* 1. mapping.json lookup — deterministic, built from the analysis run.
|
|
164
|
+
* 2. Path heuristic — walk segments, match against known spec domain names
|
|
165
|
+
* (exact, then prefix ≥4 chars to handle utils→utilities etc.).
|
|
166
|
+
* 3. Fallback — first meaningful non-structural segment.
|
|
167
|
+
*/
|
|
168
|
+
private inferDomain;
|
|
169
|
+
/**
|
|
170
|
+
* Verify a single file
|
|
171
|
+
*/
|
|
172
|
+
verifyFile(candidate: VerificationCandidate): Promise<VerificationResult>;
|
|
173
|
+
/**
|
|
174
|
+
* Build specs context string capped at maxChars to avoid silent LLM token overflow.
|
|
175
|
+
* Specs are included in order; the last spec may be truncated if the budget is tight.
|
|
176
|
+
*/
|
|
177
|
+
private buildSpecsContext;
|
|
178
|
+
/**
|
|
179
|
+
* Get prediction from LLM.
|
|
180
|
+
*
|
|
181
|
+
* When fileContent is provided the prompt uses an LLM-as-judge approach:
|
|
182
|
+
* the model sees both the spec and the actual file content, and returns a
|
|
183
|
+
* specAccuracyScore (0–1) measuring how well the spec describes the file.
|
|
184
|
+
* This replaces the brittle Jaccard keyword-overlap used for purposeMatch.
|
|
185
|
+
*/
|
|
186
|
+
private getPrediction;
|
|
187
|
+
/**
|
|
188
|
+
* Compare predicted purpose to actual file content.
|
|
189
|
+
*
|
|
190
|
+
* When specAccuracyScore is provided (LLM-as-judge), it is used directly as
|
|
191
|
+
* the similarity score — this is far more reliable than keyword overlap because
|
|
192
|
+
* the LLM has seen the actual file and can assess whether the spec describes it.
|
|
193
|
+
* Falls back to Jaccard keyword overlap when no LLM score is available.
|
|
194
|
+
*/
|
|
195
|
+
private comparePurpose;
|
|
196
|
+
/**
|
|
197
|
+
* Extract purpose from file content (comments, docstrings)
|
|
198
|
+
*/
|
|
199
|
+
private extractPurpose;
|
|
200
|
+
/**
|
|
201
|
+
* Calculate text similarity using keyword overlap
|
|
202
|
+
*/
|
|
203
|
+
private calculateSimilarity;
|
|
204
|
+
/**
|
|
205
|
+
* Normalize a word for similarity comparison by truncating to its first 5
|
|
206
|
+
* characters. This is more robust than suffix-stripping for technical
|
|
207
|
+
* English: "generate/generates/generating/generation" all share the prefix
|
|
208
|
+
* "gener", "verify/verification/verifies" share "verif", etc.
|
|
209
|
+
* Tested against 26 word pairs: 18/26 correct matches, 0 false positives.
|
|
210
|
+
*/
|
|
211
|
+
private normalize;
|
|
212
|
+
/**
|
|
213
|
+
* Extract keywords from text
|
|
214
|
+
*/
|
|
215
|
+
private extractKeywords;
|
|
216
|
+
/**
|
|
217
|
+
* Analyze import coverage using spec content rather than LLM predictions.
|
|
218
|
+
* For each actual import (normalized to module name), checks whether it is
|
|
219
|
+
* mentioned in the domain's spec text (exact name or hyphen→space variant).
|
|
220
|
+
* This is a spec-completeness check: are the modules the file depends on
|
|
221
|
+
* actually described in the spec?
|
|
222
|
+
*
|
|
223
|
+
* Returns a SetMatch where:
|
|
224
|
+
* - actual = all normalized actual import module names
|
|
225
|
+
* - predicted = subset of actual imports that appear in the spec text
|
|
226
|
+
* - f1Score = recall = fraction of actual imports covered by spec
|
|
227
|
+
*/
|
|
228
|
+
private analyzeImportCoverage;
|
|
229
|
+
/**
|
|
230
|
+
* Normalize import path for comparison.
|
|
231
|
+
* Strips file extensions and the first leading `./` or `../` prefix,
|
|
232
|
+
* then extracts the final path segment (module name) in lowercase.
|
|
233
|
+
* Deeply-nested relative paths (e.g. `../../foo`) are handled correctly
|
|
234
|
+
* because only the last segment is used for comparison.
|
|
235
|
+
*/
|
|
236
|
+
private normalizeImport;
|
|
237
|
+
/**
|
|
238
|
+
* Compare predicted exports to actual
|
|
239
|
+
*/
|
|
240
|
+
private compareExports;
|
|
241
|
+
/**
|
|
242
|
+
* Calculate precision, recall, F1 for set comparison
|
|
243
|
+
*/
|
|
244
|
+
private calculateSetMatch;
|
|
245
|
+
/**
|
|
246
|
+
* Parse requirements from a spec's markdown content.
|
|
247
|
+
* Returns an array of { name, description } extracted from
|
|
248
|
+
* "### Requirement: Name\n\nThe system SHALL ..." blocks.
|
|
249
|
+
*/
|
|
250
|
+
private parseSpecRequirements;
|
|
251
|
+
/**
|
|
252
|
+
* Analyze requirement coverage.
|
|
253
|
+
*
|
|
254
|
+
* When llmScore is provided (LLM-as-judge), it is used directly — the LLM
|
|
255
|
+
* has seen both the spec and the file and scores only the requirements
|
|
256
|
+
* relevant to this specific file, avoiding the false penalty of a domain
|
|
257
|
+
* spec covering many files where each file implements only a small subset.
|
|
258
|
+
*
|
|
259
|
+
* Falls back to keyword matching when no LLM score is available.
|
|
260
|
+
*/
|
|
261
|
+
private analyzeRequirementCoverage;
|
|
262
|
+
/**
|
|
263
|
+
* Calculate overall score (weighted combination)
|
|
264
|
+
*/
|
|
265
|
+
private calculateOverallScore;
|
|
266
|
+
/**
|
|
267
|
+
* Generate feedback for gaps
|
|
268
|
+
*/
|
|
269
|
+
private generateFeedback;
|
|
270
|
+
/**
|
|
271
|
+
* Generate verification report
|
|
272
|
+
*/
|
|
273
|
+
private generateReport;
|
|
274
|
+
/**
|
|
275
|
+
* Save verification report
|
|
276
|
+
*/
|
|
277
|
+
private saveReport;
|
|
278
|
+
/**
|
|
279
|
+
* Generate markdown report
|
|
280
|
+
*/
|
|
281
|
+
private generateMarkdownReport;
|
|
282
|
+
/**
|
|
283
|
+
* Get list of domains from loaded specs.
|
|
284
|
+
* If specs have not been loaded yet (i.e., verify() has not been called),
|
|
285
|
+
* triggers an eager load so callers can preview domains without a full LLM run.
|
|
286
|
+
*/
|
|
287
|
+
getDomains(): Promise<string[]>;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Run verification on a project
|
|
291
|
+
*/
|
|
292
|
+
export declare function verifySpecs(llm: LLMService, depGraph: DependencyGraphResult, options: VerificationEngineOptions, specVersion: string): Promise<VerificationReport>;
|
|
293
|
+
//# sourceMappingURL=verification-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-engine.d.ts","sourceRoot":"","sources":["../../../src/core/verifier/verification-engine.ts"],"names":[],"mappings":"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"}
|