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,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openlore-enforcer.ts v2
|
|
3
|
+
*
|
|
4
|
+
* Plugin OpenCode : enforce le workflow SDD openlore.
|
|
5
|
+
*
|
|
6
|
+
* Blocs :
|
|
7
|
+
* 1. tool.execute.before — nudge avant toute écriture de fichier source sans
|
|
8
|
+
* décision enregistrée ; avertissement sur approve/reject_decision (déjà
|
|
9
|
+
* protégés côté MCP par requiresHumanAuthorization).
|
|
10
|
+
* 2. session.idle event — gate check : vérifie l'état des décisions et
|
|
11
|
+
* présente les décisions en attente à l'agent.
|
|
12
|
+
* 3. tool.execute.after — rappel périodique toutes les 5 actions.
|
|
13
|
+
* 4. experimental.session.compacting — préserve les décisions actives lors
|
|
14
|
+
* des compactions de contexte pour éviter la dérive silencieuse.
|
|
15
|
+
*
|
|
16
|
+
* Placer dans : .opencode/plugins/openlore-enforcer.ts
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { execSync } from 'child_process';
|
|
20
|
+
import type { Plugin } from '@opencode-ai/plugin';
|
|
21
|
+
|
|
22
|
+
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
interface GateResult {
|
|
25
|
+
gated: boolean;
|
|
26
|
+
reason?: string;
|
|
27
|
+
verified?: any[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// ─── Config ──────────────────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
let _openloreBin: string | null = null;
|
|
33
|
+
|
|
34
|
+
function resolveOpenLore(): string {
|
|
35
|
+
if (_openloreBin) return _openloreBin;
|
|
36
|
+
for (const c of ['node_modules/.bin/openlore', 'dist/cli/index.js']) {
|
|
37
|
+
try {
|
|
38
|
+
execSync(`test -f ${c}`, { stdio: 'pipe' });
|
|
39
|
+
_openloreBin = c.endsWith('.js') ? `node ${c}` : c;
|
|
40
|
+
return _openloreBin;
|
|
41
|
+
} catch {}
|
|
42
|
+
}
|
|
43
|
+
_openloreBin = 'openlore';
|
|
44
|
+
return _openloreBin;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
48
|
+
|
|
49
|
+
function run(args: string): string {
|
|
50
|
+
try {
|
|
51
|
+
return execSync(`${resolveOpenLore()} ${args}`, {
|
|
52
|
+
encoding: 'utf-8',
|
|
53
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
54
|
+
});
|
|
55
|
+
} catch (e: any) {
|
|
56
|
+
return e.stdout ?? '';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function parseJSON<T>(raw: string): T | null {
|
|
61
|
+
try {
|
|
62
|
+
return JSON.parse(raw.replace(/```json|```/g, '').trim());
|
|
63
|
+
} catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function runGate(): GateResult | null {
|
|
69
|
+
return parseJSON<GateResult>(run('decisions --gate --json'));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getActiveDecisions(): any[] {
|
|
73
|
+
return parseJSON<any[]>(run('decisions --list --json')) ?? [];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Fichiers source susceptibles de contenir des choix architecturaux
|
|
77
|
+
const SOURCE_PATTERN = /\.(ts|tsx|js|jsx|py|go|rs|rb|java|cpp|c|h)$/;
|
|
78
|
+
const SKIP_PATTERN =
|
|
79
|
+
/\.(test|spec|stories|mock|fixture)\.[jt]sx?$|\.d\.ts$|\.lock$|\.json$|\.ya?ml$|\.md$|\.env$/;
|
|
80
|
+
|
|
81
|
+
function isStructural(path: string): boolean {
|
|
82
|
+
return !!path && SOURCE_PATTERN.test(path) && !SKIP_PATTERN.test(path);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function presentDecisions(decisions: any[]): void {
|
|
86
|
+
const sep = '─'.repeat(60);
|
|
87
|
+
console.log(sep);
|
|
88
|
+
decisions.forEach((d, i) => {
|
|
89
|
+
console.log(`\n${i + 1}. [${d.id}] ${d.title}`);
|
|
90
|
+
console.log(` Rationale : ${d.rationale}`);
|
|
91
|
+
console.log(` Domains : ${(d.affectedDomains ?? []).join(', ')}`);
|
|
92
|
+
if (d.affectedFiles?.length) console.log(` Files : ${d.affectedFiles.join(', ')}`);
|
|
93
|
+
});
|
|
94
|
+
console.log(`\n${sep}`);
|
|
95
|
+
console.log('To approve : openlore decisions --approve <id>');
|
|
96
|
+
console.log('Then sync : openlore decisions --sync');
|
|
97
|
+
console.log('Then commit: git commit\n');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ─── Plugin ──────────────────────────────────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
export const OpenLoreEnforcer: Plugin = async (_ctx: any) => {
|
|
103
|
+
let toolCallCount = 0;
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
// ── 1. Nudge avant chaque écriture de fichier source ────────────────────
|
|
107
|
+
//
|
|
108
|
+
// input: { tool, sessionID, callID }
|
|
109
|
+
// output: { args } — mutable (on ne modifie pas les args ici, juste nudge)
|
|
110
|
+
//
|
|
111
|
+
// Note : approve_decision / reject_decision sont déjà protégés côté MCP
|
|
112
|
+
// par requiresHumanAuthorization. On renforce le message ici.
|
|
113
|
+
//
|
|
114
|
+
'tool.execute.before': async (input: any, output: any) => {
|
|
115
|
+
if (input.tool === 'approve_decision') {
|
|
116
|
+
console.error('\n❌ ENFORCER: approve_decision requires HUMAN authorization.');
|
|
117
|
+
console.error(' Present the decision to the user and ask them to run:');
|
|
118
|
+
console.error(' openlore decisions --approve <id>');
|
|
119
|
+
console.error(' openlore decisions --sync');
|
|
120
|
+
console.error(' git commit\n');
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (input.tool === 'reject_decision') {
|
|
125
|
+
console.error('\n❌ ENFORCER: reject_decision requires HUMAN authorization.');
|
|
126
|
+
console.error(' Ask the user before rejecting any decision.\n');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const isFileWrite = [
|
|
131
|
+
'write_file',
|
|
132
|
+
'create_file',
|
|
133
|
+
'str_replace_based_edit_tool',
|
|
134
|
+
'edit',
|
|
135
|
+
].includes(input.tool);
|
|
136
|
+
if (!isFileWrite) return;
|
|
137
|
+
|
|
138
|
+
// output.args contient les arguments qui seront passés au tool
|
|
139
|
+
const filePath: string = output.args?.path ?? output.args?.file_path ?? '';
|
|
140
|
+
if (!filePath || !isStructural(filePath)) return;
|
|
141
|
+
|
|
142
|
+
const covered = getActiveDecisions().some((d) => (d.affectedFiles ?? []).includes(filePath));
|
|
143
|
+
if (!covered) {
|
|
144
|
+
console.log(`\n⚠️ ENFORCER — STRUCTURAL FILE: ${filePath}`);
|
|
145
|
+
console.log(' No architectural decision recorded for this file.');
|
|
146
|
+
console.log(' If this change is architectural, call record_decision FIRST.\n');
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
// ── 2. Gate check lors des pauses de l'agent ─────────────────────────────
|
|
151
|
+
//
|
|
152
|
+
// session.idle est l'event émis quand le modèle s'arrête.
|
|
153
|
+
// C'est le moment idéal pour vérifier l'état des décisions.
|
|
154
|
+
//
|
|
155
|
+
event: async ({ event }: any) => {
|
|
156
|
+
if (event.type !== 'session.idle') return;
|
|
157
|
+
|
|
158
|
+
const gate = runGate();
|
|
159
|
+
if (!gate || !gate.gated) return;
|
|
160
|
+
|
|
161
|
+
console.log('\n🔍 ENFORCER — Gate check:\n');
|
|
162
|
+
|
|
163
|
+
if (
|
|
164
|
+
gate.reason === 'no_decisions_recorded' ||
|
|
165
|
+
gate.reason === 'drafts_pending_consolidation'
|
|
166
|
+
) {
|
|
167
|
+
console.log('⚠️ Source files modified but decisions not yet consolidated.');
|
|
168
|
+
console.log(' Run: openlore decisions --consolidate');
|
|
169
|
+
console.log(' Then: openlore decisions --list\n');
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (gate.verified?.length) {
|
|
174
|
+
console.log(`⛔ ${gate.verified.length} decision(s) await human approval before commit:\n`);
|
|
175
|
+
presentDecisions(gate.verified);
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
// ── 3. Rappel périodique toutes les 5 actions ─────────────────────────────
|
|
180
|
+
//
|
|
181
|
+
// input: { tool, sessionID, callID, args }
|
|
182
|
+
// output: { title, output, metadata }
|
|
183
|
+
//
|
|
184
|
+
'tool.execute.after': async () => {
|
|
185
|
+
toolCallCount++;
|
|
186
|
+
if (toolCallCount % 5 !== 0) return;
|
|
187
|
+
|
|
188
|
+
const pending = getActiveDecisions().filter(
|
|
189
|
+
(d) => !['approved', 'synced'].includes(d.status)
|
|
190
|
+
);
|
|
191
|
+
if (pending.length === 0) return;
|
|
192
|
+
|
|
193
|
+
console.log(`\n📋 DECISION REMINDER [#${toolCallCount}] — ${pending.length} pending:\n`);
|
|
194
|
+
pending.forEach((d) => console.log(` [${d.id}] ${d.title} (${d.status})`));
|
|
195
|
+
console.log('\n Verify alignment with current changes before committing.\n');
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
// ── 4. Préserver les décisions lors des compactions de contexte ───────────
|
|
199
|
+
//
|
|
200
|
+
// input: { sessionID }
|
|
201
|
+
// output: { context: string[], prompt?: string } — mutable
|
|
202
|
+
//
|
|
203
|
+
'experimental.session.compacting': async (_input: any, output: any) => {
|
|
204
|
+
const decisions = getActiveDecisions();
|
|
205
|
+
if (decisions.length === 0) return;
|
|
206
|
+
|
|
207
|
+
output.context.push(
|
|
208
|
+
'## ACTIVE ARCHITECTURAL DECISIONS — DO NOT FORGET',
|
|
209
|
+
'',
|
|
210
|
+
...decisions.map(
|
|
211
|
+
(d) =>
|
|
212
|
+
`### [${d.id}] ${d.title}\n` +
|
|
213
|
+
`- Status: ${d.status}\n` +
|
|
214
|
+
`- Rationale: ${d.rationale}\n` +
|
|
215
|
+
`- Domains: ${(d.affectedDomains ?? []).join(', ')}\n` +
|
|
216
|
+
`- Files: ${(d.affectedFiles ?? []).join(', ')}\n` +
|
|
217
|
+
(d.consequences ? `- Consequences: ${d.consequences}` : '')
|
|
218
|
+
),
|
|
219
|
+
'',
|
|
220
|
+
'⚠️ All code changes MUST align with these decisions.',
|
|
221
|
+
'To supersede: record_decision({ ..., supersedes: "<id>" })'
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
console.log(`\n📦 Compaction: preserving ${decisions.length} decision(s).\n`);
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Sisyphus — SDD Workflow Instructions
|
|
2
|
+
|
|
3
|
+
You are Sisyphus, orchestrating a spec-driven development project.
|
|
4
|
+
This project uses **openlore** to maintain a Spec-Driven Development triangle:
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
Specifications
|
|
8
|
+
/ \
|
|
9
|
+
/ \
|
|
10
|
+
Tests ——— Code
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Your job is to keep all three edges in sync at all times.
|
|
14
|
+
|
|
15
|
+
Three plugins are active in this session:
|
|
16
|
+
- **anti-laziness** — detects when you stop early and re-prompts you to continue.
|
|
17
|
+
- **openlore-enforcer** — nudges you before structural file writes and presents pending decisions at idle.
|
|
18
|
+
- **openlore-decision-extractor** — analyzes your file writes and suggests `record_decision` calls when it detects architectural changes.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## BEFORE taking any action
|
|
23
|
+
|
|
24
|
+
Think through:
|
|
25
|
+
1. Is this request architectural in nature?
|
|
26
|
+
- Does it change module responsibility / ownership?
|
|
27
|
+
- Does it introduce a new pattern or approach?
|
|
28
|
+
- Does it affect how components communicate?
|
|
29
|
+
- Does it change data flow or state management?
|
|
30
|
+
- Does it introduce a new dependency or constraint?
|
|
31
|
+
- Does it affect error handling strategies?
|
|
32
|
+
|
|
33
|
+
2. **If ANY answer is YES** → call `record_decision` IMMEDIATELY, before writing any code.
|
|
34
|
+
|
|
35
|
+
3. **If UNSURE** → treat it as architectural. Over-recording is better than under-recording.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Mandatory tool call order
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
1. record_decision(...) ← FIRST, if architectural
|
|
43
|
+
2. [code changes / file writes]
|
|
44
|
+
3. check_spec_drift ← AFTER changes
|
|
45
|
+
4. openlore decisions --list ← verify all decisions recorded
|
|
46
|
+
5. [human approval gate] ← NOT your job to approve
|
|
47
|
+
6. openlore decisions --sync ← AFTER human approval
|
|
48
|
+
7. git commit ← LAST
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## record_decision — when and how
|
|
54
|
+
|
|
55
|
+
Call this tool with:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"title": "Concise architectural choice (max 10 words)",
|
|
60
|
+
"rationale": "Why this approach was chosen (2-3 sentences explaining the reasoning)",
|
|
61
|
+
"affectedDomains": ["domain-name-from-openspec"],
|
|
62
|
+
"affectedFiles": ["path/to/file.ts"],
|
|
63
|
+
"consequences": "What this changes downstream (1-2 sentences)",
|
|
64
|
+
"supersedes": "previous-decision-id (ONLY if replacing an earlier decision)"
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Good examples of decisions to record:**
|
|
69
|
+
- Splitting a service into two responsibilities
|
|
70
|
+
- Choosing async over sync for a pipeline step
|
|
71
|
+
- Adding a caching layer
|
|
72
|
+
- Changing how modules communicate (events vs direct call)
|
|
73
|
+
- Introducing a new abstraction / interface
|
|
74
|
+
|
|
75
|
+
**NOT decisions (do not record):**
|
|
76
|
+
- Fixing a typo
|
|
77
|
+
- Renaming a variable
|
|
78
|
+
- Adding a log line
|
|
79
|
+
- Formatting / linting changes
|
|
80
|
+
- Trivial bug fixes with no architectural impact
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Multi-iteration awareness
|
|
85
|
+
|
|
86
|
+
If you are in a long session with multiple iterations:
|
|
87
|
+
|
|
88
|
+
1. Before starting a new iteration, run `openlore decisions --list`
|
|
89
|
+
to review all previously recorded decisions.
|
|
90
|
+
|
|
91
|
+
2. If you are about to change something that contradicts an existing decision,
|
|
92
|
+
you MUST either:
|
|
93
|
+
- **Supersede it**: `record_decision({ ..., supersedes: "old-id" })`
|
|
94
|
+
- **Explain the contradiction** to the user before proceeding
|
|
95
|
+
|
|
96
|
+
3. You must NEVER silently drift from a recorded decision.
|
|
97
|
+
Drift = recorded decision says X, but code does Y without a new decision.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Approval is HUMAN-ONLY
|
|
102
|
+
|
|
103
|
+
You CANNOT call `approve_decision` yourself.
|
|
104
|
+
You CANNOT auto-approve.
|
|
105
|
+
You CANNOT skip the approval gate.
|
|
106
|
+
|
|
107
|
+
When decisions are pending approval, present them to the user:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
I've recorded the following architectural decisions for this session:
|
|
111
|
+
|
|
112
|
+
1. [a3f2e1b0] Add OAuth provider abstraction
|
|
113
|
+
Rationale: Support multiple auth strategies, separate concerns
|
|
114
|
+
Domains: auth, security
|
|
115
|
+
|
|
116
|
+
To approve and commit:
|
|
117
|
+
openlore decisions --approve a3f2e1b0
|
|
118
|
+
openlore decisions --sync
|
|
119
|
+
git commit
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Compaction safety
|
|
125
|
+
|
|
126
|
+
If the session context is compacted/summarized, the active decisions
|
|
127
|
+
will be re-injected automatically by the openlore-enforcer plugin.
|
|
128
|
+
Check `.openlore/decisions/pending.json` if you lose track of decisions.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Final check (mandatory before every commit)
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# 1. List all decisions
|
|
136
|
+
openlore decisions --list
|
|
137
|
+
|
|
138
|
+
# 2. Verify no spec drift
|
|
139
|
+
openlore check-drift
|
|
140
|
+
|
|
141
|
+
# 3. Present pending decisions to user for approval
|
|
142
|
+
# 4. Wait for human to run: openlore decisions --approve <id>
|
|
143
|
+
# 5. Sync to spec.md
|
|
144
|
+
openlore decisions --sync
|
|
145
|
+
|
|
146
|
+
# 6. Commit
|
|
147
|
+
git commit -m "..."
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Never skip this checklist.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openlore-analyze-codebase
|
|
3
|
+
description: Run a full static analysis of a project using openlore and summarise the results — architecture, call graph, top refactoring issues, and duplicate code. No LLM required.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: openlore MCP server
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# openlore: Analyze Codebase
|
|
9
|
+
|
|
10
|
+
## When to use this skill
|
|
11
|
+
|
|
12
|
+
Trigger this skill whenever the user asks to **analyze a codebase** with openlore, with phrasings like:
|
|
13
|
+
- "analyze my project / my code"
|
|
14
|
+
- "give me a code quality report"
|
|
15
|
+
- "what are the structural issues in my codebase"
|
|
16
|
+
- "find duplicates in my code"
|
|
17
|
+
- explicit command `/openlore-analyze-codebase`
|
|
18
|
+
|
|
19
|
+
This skill is **read-only** — it modifies no files. It produces a report and suggests next steps.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 1 — Confirm the project directory
|
|
24
|
+
|
|
25
|
+
Ask the user which project to analyze, or confirm the current workspace root.
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Which project directory should I analyze?
|
|
29
|
+
Options: current workspace root | enter a different path
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Step 2 — Run static analysis
|
|
35
|
+
|
|
36
|
+
Call the openlore MCP tool `analyze_codebase` with `{"directory": "$DIRECTORY"}`.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Step 3 — Summarize the results
|
|
41
|
+
|
|
42
|
+
Present a concise summary:
|
|
43
|
+
- Project type and detected frameworks
|
|
44
|
+
- File count, function count, internal call count
|
|
45
|
+
- Top 5 refactoring issues (function name, file, issue type, priority score)
|
|
46
|
+
- Detected domains
|
|
47
|
+
|
|
48
|
+
Also report stack inventory (read directly from `.openlore/analysis/` — no extra MCP call needed):
|
|
49
|
+
- **HTTP routes**: N routes across M files — if `route-inventory.json` exists
|
|
50
|
+
- **ORM tables**: N tables — if `schema-inventory.json` exists
|
|
51
|
+
- **Env vars**: N total, X required without default — if `env-inventory.json` exists
|
|
52
|
+
- **UI components**: N components — if `ui-inventory.json` exists
|
|
53
|
+
|
|
54
|
+
If none of these files exist, skip this section and suggest running `openlore analyze --force`.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Step 4 — Show the call graph
|
|
59
|
+
|
|
60
|
+
Call the openlore MCP tool `get_call_graph` with `{"directory": "$DIRECTORY"}`.
|
|
61
|
+
|
|
62
|
+
Highlight:
|
|
63
|
+
- **Hub functions** (fanIn ≥ 8) — over-solicited functions, high coupling risk
|
|
64
|
+
- **Layer violations** detected (e.g. a UI layer calling the database directly)
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Step 5 — Show duplicate code report
|
|
69
|
+
|
|
70
|
+
Call the openlore MCP tool `get_duplicate_report` with `{"directory": "$DIRECTORY"}`.
|
|
71
|
+
|
|
72
|
+
Present a concise summary:
|
|
73
|
+
- Overall duplication ratio (e.g. "12% of functions are duplicated")
|
|
74
|
+
- Top 3 clone groups sorted by impact (instances × line count):
|
|
75
|
+
- Clone type (exact / structural / near) and similarity score
|
|
76
|
+
- List of instances (file + function name + line range)
|
|
77
|
+
- If no duplicates found, note this as a positive signal
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Step 6 — Suggest next steps
|
|
82
|
+
|
|
83
|
+
Based on the analysis, guide the user through the natural next actions in order:
|
|
84
|
+
|
|
85
|
+
1. Call `get_minimal_context` on the highest-priority function — returns callers, callees, body, and test coverage in one call (~300 tokens). Use instead of `get_subgraph` + `get_signatures` separately.
|
|
86
|
+
2. Call `get_cluster` on any function to see its full community (tightly coupled neighbors across directories).
|
|
87
|
+
3. Call `detect_changes` to rank recently changed functions by blast radius — spot riskiest commits before reviewing.
|
|
88
|
+
3. If significant duplication was found, suggest consolidating clone groups **before** refactoring
|
|
89
|
+
4. Suggest running `/openlore-plan-refactor` once the user has enough context to act, then `/openlore-execute-refactor` to apply the plan
|
|
90
|
+
5. If the project has OpenSpec specs, call `list_spec_domains` then `search_specs` to enable
|
|
91
|
+
spec-first reasoning (question → requirements → linked source files). To activate `search_specs`,
|
|
92
|
+
run `openlore analyze --embed` or `openlore analyze --reindex-specs`.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Absolute constraints
|
|
97
|
+
|
|
98
|
+
- **No code modifications** in this workflow
|
|
99
|
+
- Never skip the duplication step — it determines the order of subsequent actions
|
|
100
|
+
- Always present call graph and duplicate report results even if numbers are low
|
|
101
|
+
- Next steps (Step 6) are suggestions, not automatic actions
|