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,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graceful shutdown handling for openlore CLI
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { OPENLORE_DIR, ARTIFACT_SHUTDOWN_STATE } from '../constants.js';
|
|
7
|
+
/**
|
|
8
|
+
* Manages graceful shutdown with cleanup callbacks
|
|
9
|
+
*/
|
|
10
|
+
export class ShutdownManager {
|
|
11
|
+
callbacks = [];
|
|
12
|
+
isShuttingDown = false;
|
|
13
|
+
state = null;
|
|
14
|
+
stateFile;
|
|
15
|
+
handlers = new Map();
|
|
16
|
+
handlersAttached = false;
|
|
17
|
+
constructor(projectPath = process.cwd(), options) {
|
|
18
|
+
this.stateFile = path.join(projectPath, OPENLORE_DIR, ARTIFACT_SHUTDOWN_STATE);
|
|
19
|
+
// Skip handlers in test environment or when explicitly disabled
|
|
20
|
+
if (!options?.skipHandlers && process.env.NODE_ENV !== 'test') {
|
|
21
|
+
this.setupHandlers();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
setupHandlers() {
|
|
25
|
+
if (this.handlersAttached)
|
|
26
|
+
return;
|
|
27
|
+
this.handlersAttached = true;
|
|
28
|
+
const sigintHandler = () => this.handleShutdown('SIGINT');
|
|
29
|
+
const sigtermHandler = () => this.handleShutdown('SIGTERM');
|
|
30
|
+
const exceptionHandler = (error) => {
|
|
31
|
+
console.error('\n❌ Uncaught exception:', error.message);
|
|
32
|
+
this.handleShutdown('uncaughtException');
|
|
33
|
+
};
|
|
34
|
+
const rejectionHandler = (reason) => {
|
|
35
|
+
console.error('\n❌ Unhandled rejection:', reason);
|
|
36
|
+
this.handleShutdown('unhandledRejection');
|
|
37
|
+
};
|
|
38
|
+
// Store handlers for potential cleanup
|
|
39
|
+
this.handlers.set('SIGINT', sigintHandler);
|
|
40
|
+
this.handlers.set('SIGTERM', sigtermHandler);
|
|
41
|
+
this.handlers.set('uncaughtException', exceptionHandler);
|
|
42
|
+
this.handlers.set('unhandledRejection', rejectionHandler);
|
|
43
|
+
// Handle Ctrl+C
|
|
44
|
+
process.on('SIGINT', sigintHandler);
|
|
45
|
+
// Handle termination signal
|
|
46
|
+
process.on('SIGTERM', sigtermHandler);
|
|
47
|
+
// Handle uncaught exceptions
|
|
48
|
+
process.on('uncaughtException', exceptionHandler);
|
|
49
|
+
// Handle unhandled promise rejections
|
|
50
|
+
process.on('unhandledRejection', rejectionHandler);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Remove all registered signal handlers (for testing)
|
|
54
|
+
*/
|
|
55
|
+
removeHandlers() {
|
|
56
|
+
for (const [event, handler] of this.handlers) {
|
|
57
|
+
process.removeListener(event, handler);
|
|
58
|
+
}
|
|
59
|
+
this.handlers.clear();
|
|
60
|
+
this.handlersAttached = false;
|
|
61
|
+
}
|
|
62
|
+
async handleShutdown(signal) {
|
|
63
|
+
if (this.isShuttingDown) {
|
|
64
|
+
console.log('\n⚠️ Force quitting...');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
this.isShuttingDown = true;
|
|
68
|
+
console.log('\n\n🛑 Interrupted! Cleaning up...');
|
|
69
|
+
// Save state if we have one
|
|
70
|
+
if (this.state) {
|
|
71
|
+
await this.saveState();
|
|
72
|
+
}
|
|
73
|
+
// Run cleanup callbacks in reverse order (copy to avoid mutating the array)
|
|
74
|
+
for (const callback of [...this.callbacks].reverse()) {
|
|
75
|
+
try {
|
|
76
|
+
await callback();
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error('Cleanup error:', error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Show resume suggestion
|
|
83
|
+
this.showResumeSuggestion();
|
|
84
|
+
process.exit(signal === 'SIGINT' ? 130 : 1);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Register a cleanup callback to run on shutdown
|
|
88
|
+
*/
|
|
89
|
+
onCleanup(callback) {
|
|
90
|
+
this.callbacks.push(callback);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Remove a cleanup callback
|
|
94
|
+
*/
|
|
95
|
+
removeCleanup(callback) {
|
|
96
|
+
const index = this.callbacks.indexOf(callback);
|
|
97
|
+
if (index !== -1) {
|
|
98
|
+
this.callbacks.splice(index, 1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Set the current state for potential resume
|
|
103
|
+
*/
|
|
104
|
+
setState(state) {
|
|
105
|
+
this.state = {
|
|
106
|
+
phase: state.phase ?? 'init',
|
|
107
|
+
currentFiles: state.currentFiles,
|
|
108
|
+
savedResults: state.savedResults,
|
|
109
|
+
timestamp: Date.now(),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Clear state (call on successful completion)
|
|
114
|
+
*/
|
|
115
|
+
clearState() {
|
|
116
|
+
this.state = null;
|
|
117
|
+
// Remove state file if it exists
|
|
118
|
+
try {
|
|
119
|
+
if (fs.existsSync(this.stateFile)) {
|
|
120
|
+
fs.unlinkSync(this.stateFile);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Ignore errors
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Save state to file for potential resume
|
|
129
|
+
*/
|
|
130
|
+
async saveState() {
|
|
131
|
+
if (!this.state)
|
|
132
|
+
return;
|
|
133
|
+
try {
|
|
134
|
+
const dir = path.dirname(this.stateFile);
|
|
135
|
+
if (!fs.existsSync(dir)) {
|
|
136
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
137
|
+
}
|
|
138
|
+
fs.writeFileSync(this.stateFile, JSON.stringify(this.state, null, 2));
|
|
139
|
+
console.log(`📝 State saved to ${this.stateFile}`);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error('Failed to save state:', error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Load previous shutdown state
|
|
147
|
+
*/
|
|
148
|
+
loadState() {
|
|
149
|
+
try {
|
|
150
|
+
if (fs.existsSync(this.stateFile)) {
|
|
151
|
+
const content = fs.readFileSync(this.stateFile, 'utf-8');
|
|
152
|
+
return JSON.parse(content);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Ignore errors
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if there's a previous interrupted session
|
|
162
|
+
*/
|
|
163
|
+
hasPreviousState() {
|
|
164
|
+
return this.loadState() !== null;
|
|
165
|
+
}
|
|
166
|
+
showResumeSuggestion() {
|
|
167
|
+
if (!this.state)
|
|
168
|
+
return;
|
|
169
|
+
console.log('\n📋 To resume from where you left off:');
|
|
170
|
+
switch (this.state.phase) {
|
|
171
|
+
case 'init':
|
|
172
|
+
console.log(' Run: openlore init');
|
|
173
|
+
break;
|
|
174
|
+
case 'analyze':
|
|
175
|
+
console.log(' Run: openlore analyze');
|
|
176
|
+
if (this.state.savedResults) {
|
|
177
|
+
console.log(` Partial analysis saved to: ${this.state.savedResults}`);
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
case 'generate':
|
|
181
|
+
console.log(' Run: openlore generate');
|
|
182
|
+
if (this.state.savedResults) {
|
|
183
|
+
console.log(` Partial specs saved to: ${this.state.savedResults}`);
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
case 'verify':
|
|
187
|
+
console.log(' Run: openlore verify');
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
console.log('');
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Check if shutdown is in progress
|
|
194
|
+
*/
|
|
195
|
+
isInProgress() {
|
|
196
|
+
return this.isShuttingDown;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Global shutdown manager instance
|
|
200
|
+
let globalManager = null;
|
|
201
|
+
/**
|
|
202
|
+
* Get or create the global shutdown manager
|
|
203
|
+
*/
|
|
204
|
+
export function getShutdownManager(projectPath) {
|
|
205
|
+
if (!globalManager) {
|
|
206
|
+
globalManager = new ShutdownManager(projectPath);
|
|
207
|
+
}
|
|
208
|
+
return globalManager;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Register a cleanup callback with the global manager
|
|
212
|
+
*/
|
|
213
|
+
export function onShutdown(callback) {
|
|
214
|
+
getShutdownManager().onCleanup(callback);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Set current state for potential resume
|
|
218
|
+
*/
|
|
219
|
+
export function setShutdownState(state) {
|
|
220
|
+
getShutdownManager().setState(state);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Clear shutdown state (call on successful completion)
|
|
224
|
+
*/
|
|
225
|
+
export function clearShutdownState() {
|
|
226
|
+
getShutdownManager().clearState();
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Create a scope that sets/clears state automatically
|
|
230
|
+
*/
|
|
231
|
+
export async function withShutdownState(state, fn) {
|
|
232
|
+
const manager = getShutdownManager();
|
|
233
|
+
manager.setState(state);
|
|
234
|
+
const result = await fn();
|
|
235
|
+
manager.clearState();
|
|
236
|
+
return result;
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=shutdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/utils/shutdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# BMAD assets for openlore
|
|
2
|
+
|
|
3
|
+
BMAD Method implementation of the [openlore agentic workflow pattern](../../docs/agentic-workflows/README.md).
|
|
4
|
+
|
|
5
|
+
See [docs/agentic-workflows/BMAD.md](../../docs/agentic-workflows/BMAD.md) for the full integration guide.
|
|
6
|
+
|
|
7
|
+
## OpenSpec spec baseline
|
|
8
|
+
|
|
9
|
+
`search_specs` and `check_spec_drift` are only useful if specs exist. The Architect agent
|
|
10
|
+
runs `openlore generate` during onboarding — that creates the baseline. Without it,
|
|
11
|
+
`search_specs` returns empty and `check_spec_drift` flags everything as uncovered.
|
|
12
|
+
|
|
13
|
+
| State | What to do |
|
|
14
|
+
|---|---|
|
|
15
|
+
| First time on this codebase | Run `openlore analyze && openlore generate` during onboarding (covered in `tasks/onboarding.md`) |
|
|
16
|
+
| Specs exist | `search_specs` and `check_spec_drift` work as expected |
|
|
17
|
+
| Specs missing mid-project | Run `openlore generate $PROJECT_ROOT` — takes a few minutes, only needed once |
|
|
18
|
+
|
|
19
|
+
The `implement-story.md` task detects this automatically and tells you what to do.
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
```mermaid
|
|
24
|
+
flowchart TD
|
|
25
|
+
ONBOARD["openlore analyze + generate\n(one-time baseline)"]
|
|
26
|
+
|
|
27
|
+
subgraph ARCH ["🏛️ Architecture"]
|
|
28
|
+
ONBOARD --> OVERVIEW["get_architecture_overview\nget_refactor_report"]
|
|
29
|
+
OVERVIEW --> PROPOSAL["generate_change_proposal × epic\nannotate_story × story\n→ risk_context pre-filled"]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
subgraph PLAN ["📋 Sprint Planning"]
|
|
33
|
+
PROPOSAL --> SPRINT["sprint-planning.md\nconflict detection\nrefactor ordering"]
|
|
34
|
+
SPRINT --> GATE{risk ≥ 70?}
|
|
35
|
+
GATE -- yes --> REFACTOR["refactor.md\n🔴 refactor first"]
|
|
36
|
+
GATE -- no --> LOCKED["Sprint locked"]
|
|
37
|
+
REFACTOR --> SPRINT
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
subgraph IMPL ["⚙️ Per Story"]
|
|
41
|
+
LOCKED --> ORIENT["orient + analyze_impact\n(confirm risk_context)"]
|
|
42
|
+
ORIENT --> CODE["implement"]
|
|
43
|
+
CODE --> TESTS["tests green ✅"]
|
|
44
|
+
TESTS --> DRIFT["check_spec_drift"]
|
|
45
|
+
DRIFT --> DONE["story done ✅"]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
style ONBOARD fill:#f0f0f0,stroke:#999
|
|
49
|
+
style REFACTOR fill:#fdd,stroke:#c00
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Setup (BMAD via npm)
|
|
53
|
+
|
|
54
|
+
### Prerequisites
|
|
55
|
+
|
|
56
|
+
- Node.js 20+
|
|
57
|
+
- BMAD installed in your project: `npx bmad-method install`
|
|
58
|
+
- openlore MCP server running and indexed (`openlore analyze && openlore generate`)
|
|
59
|
+
|
|
60
|
+
### Step 1 — Copy assets into your BMAD project
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# From your project root (where _bmad/ lives)
|
|
64
|
+
cp /path/to/openlore/examples/bmad/agents/architect.md \
|
|
65
|
+
_bmad/_memory/architect-sidecar/openlore.md
|
|
66
|
+
|
|
67
|
+
cp /path/to/openlore/examples/bmad/tasks/*.md \
|
|
68
|
+
_bmad/openlore/tasks/
|
|
69
|
+
|
|
70
|
+
cp /path/to/openlore/examples/bmad/templates/*.md \
|
|
71
|
+
_bmad/openlore/templates/
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Step 2 — Install the architect customization
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
cp /path/to/openlore/examples/bmad/setup/architect.customize.yaml \
|
|
78
|
+
_bmad/_config/customizations/architect.customize.yaml
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This tells the BMAD Architect agent to load the openlore structural analysis
|
|
82
|
+
instructions every time it starts, via the sidecar mechanism.
|
|
83
|
+
|
|
84
|
+
### Step 3 — Recompile BMAD agents
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npx bmad-method install
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
BMAD recompiles the Architect agent with the new customization. The compiled
|
|
91
|
+
markdown agent file now includes a `Load COMPLETE file` directive pointing to
|
|
92
|
+
`_bmad/_memory/architect-sidecar/openlore.md`.
|
|
93
|
+
|
|
94
|
+
### Step 4 — Start an architecture session
|
|
95
|
+
|
|
96
|
+
Open your IDE and start a conversation with the BMAD Architect agent.
|
|
97
|
+
The agent will automatically load the openlore instructions and begin
|
|
98
|
+
with Phase 0 (Structural Reality) before any design work.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Contents
|
|
103
|
+
|
|
104
|
+
| Path | Purpose | Where it goes in BMAD |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| `agents/architect.md` | Architect sidecar — structural analysis before architecture | `_bmad/_memory/architect-sidecar/openlore.md` |
|
|
107
|
+
| `agents/dev-brownfield.md` | Dev agent fallback gate when planning was skipped | `_bmad/_memory/dev-sidecar/openlore-fallback.md` *(optional)* |
|
|
108
|
+
| `tasks/onboarding.md` | One-time baseline: analyze + generate specs | `_bmad/openlore/tasks/` |
|
|
109
|
+
| `tasks/sprint-planning.md` | Sprint validation: conflict detection, refactor ordering | `_bmad/openlore/tasks/` |
|
|
110
|
+
| `tasks/implement-story.md` | Implementation: risk-proportional orient → code → tests → drift | `_bmad/openlore/tasks/` |
|
|
111
|
+
| `tasks/refactor.md` | Safe refactor task for risk ≥ 70 stories | `_bmad/openlore/tasks/` |
|
|
112
|
+
| `templates/story.md` | Story template with `risk_context` section | `_bmad/openlore/templates/` |
|
|
113
|
+
| `setup/architect.customize.yaml` | BMAD customization — enables sidecar load | `_bmad/_config/customizations/` |
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Agent: Architect — openlore extension
|
|
2
|
+
|
|
3
|
+
> **This file is a sidecar for the BMAD `architect` agent.**
|
|
4
|
+
>
|
|
5
|
+
> **Setup (one-time):**
|
|
6
|
+
> ```bash
|
|
7
|
+
> # 1. Copy this file into your BMAD project
|
|
8
|
+
> cp examples/bmad/agents/architect.md _bmad/_memory/architect-sidecar/openlore.md
|
|
9
|
+
>
|
|
10
|
+
> # 2. Install the customization that tells BMAD to load it
|
|
11
|
+
> cp examples/bmad/setup/architect.customize.yaml \
|
|
12
|
+
> _bmad/_config/customizations/architect.customize.yaml
|
|
13
|
+
>
|
|
14
|
+
> # 3. Recompile BMAD agents
|
|
15
|
+
> npx bmad-method install
|
|
16
|
+
> ```
|
|
17
|
+
>
|
|
18
|
+
> After that, the Architect agent loads this file automatically at session start.
|
|
19
|
+
> No manual step needed in the conversation.
|
|
20
|
+
>
|
|
21
|
+
> Requires: openlore MCP server connected and onboarding completed
|
|
22
|
+
> (see `tasks/onboarding.md`).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Core Principle
|
|
27
|
+
|
|
28
|
+
The architecture document MUST reflect the reality of the code,
|
|
29
|
+
not just the desired target state. An architecture written without reading the code
|
|
30
|
+
produces a plan that the codebase cannot support.
|
|
31
|
+
|
|
32
|
+
**Produce two documents:**
|
|
33
|
+
1. **Structural Reality** — what the code actually is (openlore output)
|
|
34
|
+
2. **Target Architecture** — what you want it to become (your design)
|
|
35
|
+
|
|
36
|
+
The gap between them is the technical debt backlog.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Phase 0 — Structural Reality (run before any design work)
|
|
41
|
+
|
|
42
|
+
### Step 0.1 — Architecture overview
|
|
43
|
+
|
|
44
|
+
```xml
|
|
45
|
+
<use_mcp_tool>
|
|
46
|
+
<server_name>openlore</server_name>
|
|
47
|
+
<tool_name>get_architecture_overview</tool_name>
|
|
48
|
+
<arguments>{"directory": "$PROJECT_ROOT"}</arguments>
|
|
49
|
+
</use_mcp_tool>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Extract:
|
|
53
|
+
- **Domain clusters** → existing logical boundaries
|
|
54
|
+
- **Cross-cluster dependencies** → where coupling is highest
|
|
55
|
+
- **Critical hubs** → functions that act as bottlenecks
|
|
56
|
+
- **Entry points** → where control enters the system
|
|
57
|
+
|
|
58
|
+
If this returns an error, run `analyze_codebase` first.
|
|
59
|
+
|
|
60
|
+
### Step 0.2 — Risk landscape
|
|
61
|
+
|
|
62
|
+
```xml
|
|
63
|
+
<use_mcp_tool>
|
|
64
|
+
<server_name>openlore</server_name>
|
|
65
|
+
<tool_name>get_refactor_report</tool_name>
|
|
66
|
+
<arguments>{"directory": "$PROJECT_ROOT"}</arguments>
|
|
67
|
+
</use_mcp_tool>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Classify each high-priority candidate:
|
|
71
|
+
|
|
72
|
+
| Function | Issues | Priority | Classification |
|
|
73
|
+
|---|---|---|---|
|
|
74
|
+
| ... | high_fan_out | 85 | 🔴 no-touch zone |
|
|
75
|
+
| ... | in_cycle | 62 | 🟠 isolate before touching |
|
|
76
|
+
| ... | multi_requirement | 38 | 🟡 document carefully |
|
|
77
|
+
|
|
78
|
+
**No-touch zones** (priority ≥ 70): any story touching these functions is **blocked**
|
|
79
|
+
until a refactor story is completed first.
|
|
80
|
+
|
|
81
|
+
### Step 0.3 — Structural debt
|
|
82
|
+
|
|
83
|
+
```xml
|
|
84
|
+
<use_mcp_tool>
|
|
85
|
+
<server_name>openlore</server_name>
|
|
86
|
+
<tool_name>get_duplicate_report</tool_name>
|
|
87
|
+
<arguments>{"directory": "$PROJECT_ROOT"}</arguments>
|
|
88
|
+
</use_mcp_tool>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Note clone groups — they amplify the cost of any feature that touches duplicated logic.
|
|
92
|
+
|
|
93
|
+
### Step 0.4 — Critical hubs
|
|
94
|
+
|
|
95
|
+
```xml
|
|
96
|
+
<use_mcp_tool>
|
|
97
|
+
<server_name>openlore</server_name>
|
|
98
|
+
<tool_name>get_critical_hubs</tool_name>
|
|
99
|
+
<arguments>{"directory": "$PROJECT_ROOT", "limit": 10, "minFanIn": 3}</arguments>
|
|
100
|
+
</use_mcp_tool>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Hubs with high fan-in are the riskiest insertion points. Note their recommended approach
|
|
104
|
+
(`extract`, `split`, `facade`, `delegate`).
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Phase 1 — Feature / Epic Impact Assessment
|
|
109
|
+
|
|
110
|
+
For each epic or major feature in scope, generate a change proposal:
|
|
111
|
+
|
|
112
|
+
```xml
|
|
113
|
+
<use_mcp_tool>
|
|
114
|
+
<server_name>openlore</server_name>
|
|
115
|
+
<tool_name>generate_change_proposal</tool_name>
|
|
116
|
+
<arguments>{
|
|
117
|
+
"directory": "$PROJECT_ROOT",
|
|
118
|
+
"description": "$EPIC_DESCRIPTION",
|
|
119
|
+
"slug": "$EPIC_SLUG"
|
|
120
|
+
}</arguments>
|
|
121
|
+
</use_mcp_tool>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
From each proposal:
|
|
125
|
+
- **domainsAffected** → which spec domains this epic touches
|
|
126
|
+
- **maxRiskScore** → overall risk level of this epic
|
|
127
|
+
- **requirementsTouched** → existing requirements this epic overlaps or extends
|
|
128
|
+
|
|
129
|
+
Build an epic risk matrix:
|
|
130
|
+
|
|
131
|
+
| Epic | Domains | Max Risk | Blocking Refactors |
|
|
132
|
+
|---|---|---|---|
|
|
133
|
+
| Add payment retry | payment, api | 🔴 82 | refactor `processPayment` first |
|
|
134
|
+
| User email validation | auth, user | 🟢 18 | none |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Phase 2 — Architecture Document
|
|
139
|
+
|
|
140
|
+
Write `docs/architecture.md` (or the BMAD equivalent) with two mandatory sections:
|
|
141
|
+
|
|
142
|
+
### Section: Structural Reality
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
## Structural Reality (as-is)
|
|
146
|
+
|
|
147
|
+
> Generated from openlore analysis on {date}.
|
|
148
|
+
> Re-run `openlore analyze --force` before each planning cycle.
|
|
149
|
+
|
|
150
|
+
### Domain Map
|
|
151
|
+
|
|
152
|
+
{paste architecture overview clusters and dependencies}
|
|
153
|
+
|
|
154
|
+
### No-Touch Zones
|
|
155
|
+
|
|
156
|
+
Functions that MUST NOT be modified without a prior refactor story:
|
|
157
|
+
|
|
158
|
+
| Function | File | Risk | Issues |
|
|
159
|
+
|---|---|---|---|
|
|
160
|
+
|
|
161
|
+
### Known Debt
|
|
162
|
+
|
|
163
|
+
- N clone groups detected
|
|
164
|
+
- N cyclic dependencies
|
|
165
|
+
|
|
166
|
+
### Critical Hubs
|
|
167
|
+
|
|
168
|
+
Functions requiring the most careful change management:
|
|
169
|
+
|
|
170
|
+
| Function | Fan-in | Recommended approach |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Section: Target Architecture
|
|
175
|
+
|
|
176
|
+
Design the future state here — new domains, desired boundaries, patterns to introduce.
|
|
177
|
+
**For each structural gap between reality and target, create a technical debt story.**
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Phase 3 — Technical Debt Backlog
|
|
182
|
+
|
|
183
|
+
For every no-touch zone, create a **refactor story** in the BMAD backlog:
|
|
184
|
+
|
|
185
|
+
Use the template `bmad/templates/story.md` with:
|
|
186
|
+
- Story type: `technical-debt`
|
|
187
|
+
- Title: `Refactor {function}: {issue}`
|
|
188
|
+
- Blocking: list stories that cannot proceed until this is done
|
|
189
|
+
- **Won't Do**: at minimum one item — scope the refactor tightly (e.g. "Won't change the public API", "Won't refactor callers")
|
|
190
|
+
- **Acceptance Criteria**: must be testable — state observable outcomes (e.g. "riskScore drops below 70", "no caller changes required")
|
|
191
|
+
|
|
192
|
+
These stories MUST be sprint-scheduled before any story that depends on the refactored function.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Phase 4 — Annotate Stories with Risk Context
|
|
197
|
+
|
|
198
|
+
For each story in the backlog, run `annotate_story` — do not fill `risk_context` manually.
|
|
199
|
+
|
|
200
|
+
```xml
|
|
201
|
+
<use_mcp_tool>
|
|
202
|
+
<server_name>openlore</server_name>
|
|
203
|
+
<tool_name>annotate_story</tool_name>
|
|
204
|
+
<arguments>{
|
|
205
|
+
"directory": "$PROJECT_ROOT",
|
|
206
|
+
"storyFilePath": "$STORY_FILE_PATH",
|
|
207
|
+
"description": "$STORY_TITLE — $PRIMARY_AC"
|
|
208
|
+
}</arguments>
|
|
209
|
+
</use_mcp_tool>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
The tool reads the story file, runs `orient` + `analyze_impact`, and writes the
|
|
213
|
+
`risk_context` section directly. Existing sections are replaced, not appended.
|
|
214
|
+
|
|
215
|
+
Re-run after any completed refactor story — risk scores change as the code evolves.
|
|
216
|
+
|
|
217
|
+
The Dev Agent reads this context at sprint time — it does **not** discover it.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Absolute Constraints
|
|
222
|
+
|
|
223
|
+
- Never write a target architecture without first completing Phase 0
|
|
224
|
+
- Never assign a story touching a no-touch zone without a blocking refactor story in the backlog
|
|
225
|
+
- Always run `annotate_story` on stories before they enter a sprint — never fill risk_context manually
|
|
226
|
+
- Re-run Phase 0 at the start of each planning cycle — the structural reality changes
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Agent: Developer — No-Planning Fallback
|
|
2
|
+
|
|
3
|
+
> **Load this ONLY when:**
|
|
4
|
+
> - No architect analysis was done and stories have no `risk_context`
|
|
5
|
+
> - Onboarding to a completely unknown codebase mid-project
|
|
6
|
+
> - The sprint planning task was skipped
|
|
7
|
+
>
|
|
8
|
+
> In normal usage, `bmad/tasks/implement-story.md` is sufficient —
|
|
9
|
+
> the risk context from planning makes this override unnecessary.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## What this adds
|
|
14
|
+
|
|
15
|
+
When `risk_context` is absent from a story, this override enforces a full
|
|
16
|
+
structural gate at implementation time as a safety net.
|
|
17
|
+
|
|
18
|
+
For every story, before writing code:
|
|
19
|
+
|
|
20
|
+
1. Call `orient` with the story description
|
|
21
|
+
2. Call `analyze_impact` on the top 3 functions
|
|
22
|
+
3. If any `riskScore ≥ 70`: stop, propose a refactor story, do not proceed
|
|
23
|
+
|
|
24
|
+
This replicates at dev time what should have happened at planning time.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## When to stop using this
|
|
29
|
+
|
|
30
|
+
Once the Architect Agent has run `bmad/tasks/onboarding.md` and
|
|
31
|
+
`bmad/agents/architect.md`, and stories have `risk_context` populated,
|
|
32
|
+
**remove this override**. It adds cost (extra MCP calls) with no benefit
|
|
33
|
+
once planning is done correctly.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Gate
|
|
38
|
+
|
|
39
|
+
```xml
|
|
40
|
+
<use_mcp_tool>
|
|
41
|
+
<server_name>openlore</server_name>
|
|
42
|
+
<tool_name>orient</tool_name>
|
|
43
|
+
<arguments>{
|
|
44
|
+
"directory": "$PROJECT_ROOT",
|
|
45
|
+
"task": "$STORY_TITLE — $AC1",
|
|
46
|
+
"limit": 7
|
|
47
|
+
}</arguments>
|
|
48
|
+
</use_mcp_tool>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
For each of the top 3 functions:
|
|
52
|
+
|
|
53
|
+
```xml
|
|
54
|
+
<use_mcp_tool>
|
|
55
|
+
<server_name>openlore</server_name>
|
|
56
|
+
<tool_name>analyze_impact</tool_name>
|
|
57
|
+
<arguments>{
|
|
58
|
+
"directory": "$PROJECT_ROOT",
|
|
59
|
+
"symbol": "$FUNCTION_NAME",
|
|
60
|
+
"depth": 2
|
|
61
|
+
}</arguments>
|
|
62
|
+
</use_mcp_tool>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
| riskScore | Action |
|
|
66
|
+
|---|---|
|
|
67
|
+
| < 40 | Proceed |
|
|
68
|
+
| 40–69 | Proceed with care — protect listed callers |
|
|
69
|
+
| ≥ 70 | Stop — create refactor story, block this story |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# openlore extension for the BMAD Architect agent
|
|
2
|
+
#
|
|
3
|
+
# Drop this file at: _bmad/_config/customizations/architect.customize.yaml
|
|
4
|
+
# Then re-run: npx bmad-method install
|
|
5
|
+
#
|
|
6
|
+
# What it does: instructs the Architect agent to load the openlore structural
|
|
7
|
+
# analysis instructions as a sidecar before starting any design work.
|
|
8
|
+
|
|
9
|
+
customize:
|
|
10
|
+
metadata:
|
|
11
|
+
hasSidecar: true
|
|
12
|
+
critical-actions:
|
|
13
|
+
Appends:
|
|
14
|
+
- "Load COMPLETE file {project-root}/_bmad/_memory/architect-sidecar/openlore.md"
|