universal-agent-protocol 0.5.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 +462 -0
- package/dist/analyzers/index.d.ts +3 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +656 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +506 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/tool-calls.d.ts +3 -0
- package/dist/bin/tool-calls.d.ts.map +1 -0
- package/dist/bin/tool-calls.js +4 -0
- package/dist/bin/tool-calls.js.map +1 -0
- package/dist/cli/agent.d.ts +20 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +434 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/analyze.d.ts +7 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +103 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/coord.d.ts +7 -0
- package/dist/cli/coord.d.ts.map +1 -0
- package/dist/cli/coord.js +138 -0
- package/dist/cli/coord.js.map +1 -0
- package/dist/cli/dashboard.d.ts +8 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +704 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/deploy.d.ts +19 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +267 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/droids.d.ts +9 -0
- package/dist/cli/droids.d.ts.map +1 -0
- package/dist/cli/droids.js +227 -0
- package/dist/cli/droids.js.map +1 -0
- package/dist/cli/generate.d.ts +17 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +432 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/hooks.d.ts +9 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +374 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/init.d.ts +11 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +316 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-router.d.ts +16 -0
- package/dist/cli/mcp-router.d.ts.map +1 -0
- package/dist/cli/mcp-router.js +143 -0
- package/dist/cli/mcp-router.js.map +1 -0
- package/dist/cli/memory.d.ts +24 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +877 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/model.d.ts +15 -0
- package/dist/cli/model.d.ts.map +1 -0
- package/dist/cli/model.js +270 -0
- package/dist/cli/model.js.map +1 -0
- package/dist/cli/patterns.d.ts +26 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +587 -0
- package/dist/cli/patterns.js.map +1 -0
- package/dist/cli/setup-mcp-router.d.ts +8 -0
- package/dist/cli/setup-mcp-router.d.ts.map +1 -0
- package/dist/cli/setup-mcp-router.js +163 -0
- package/dist/cli/setup-mcp-router.js.map +1 -0
- package/dist/cli/setup.d.ts +13 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +146 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/sync.d.ts +7 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +26 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/task.d.ts +33 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +616 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/tool-calls.d.ts +8 -0
- package/dist/cli/tool-calls.d.ts.map +1 -0
- package/dist/cli/tool-calls.js +239 -0
- package/dist/cli/tool-calls.js.map +1 -0
- package/dist/cli/update.d.ts +10 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +300 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/visualize.d.ts +77 -0
- package/dist/cli/visualize.d.ts.map +1 -0
- package/dist/cli/visualize.js +287 -0
- package/dist/cli/visualize.js.map +1 -0
- package/dist/cli/worktree.d.ts +9 -0
- package/dist/cli/worktree.d.ts.map +1 -0
- package/dist/cli/worktree.js +175 -0
- package/dist/cli/worktree.js.map +1 -0
- package/dist/coordination/capability-router.d.ts +79 -0
- package/dist/coordination/capability-router.d.ts.map +1 -0
- package/dist/coordination/capability-router.js +324 -0
- package/dist/coordination/capability-router.js.map +1 -0
- package/dist/coordination/database.d.ts +13 -0
- package/dist/coordination/database.d.ts.map +1 -0
- package/dist/coordination/database.js +131 -0
- package/dist/coordination/database.js.map +1 -0
- package/dist/coordination/deploy-batcher.d.ts +101 -0
- package/dist/coordination/deploy-batcher.d.ts.map +1 -0
- package/dist/coordination/deploy-batcher.js +565 -0
- package/dist/coordination/deploy-batcher.js.map +1 -0
- package/dist/coordination/index.d.ts +5 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +5 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/service.d.ts +81 -0
- package/dist/coordination/service.d.ts.map +1 -0
- package/dist/coordination/service.js +603 -0
- package/dist/coordination/service.js.map +1 -0
- package/dist/generators/claude-md.d.ts +3 -0
- package/dist/generators/claude-md.d.ts.map +1 -0
- package/dist/generators/claude-md.js +977 -0
- package/dist/generators/claude-md.js.map +1 -0
- package/dist/generators/template-loader.d.ts +105 -0
- package/dist/generators/template-loader.d.ts.map +1 -0
- package/dist/generators/template-loader.js +291 -0
- package/dist/generators/template-loader.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-router/config/parser.d.ts +9 -0
- package/dist/mcp-router/config/parser.d.ts.map +1 -0
- package/dist/mcp-router/config/parser.js +174 -0
- package/dist/mcp-router/config/parser.js.map +1 -0
- package/dist/mcp-router/executor/client.d.ts +31 -0
- package/dist/mcp-router/executor/client.d.ts.map +1 -0
- package/dist/mcp-router/executor/client.js +187 -0
- package/dist/mcp-router/executor/client.js.map +1 -0
- package/dist/mcp-router/index.d.ts +22 -0
- package/dist/mcp-router/index.d.ts.map +1 -0
- package/dist/mcp-router/index.js +18 -0
- package/dist/mcp-router/index.js.map +1 -0
- package/dist/mcp-router/output-compressor.d.ts +26 -0
- package/dist/mcp-router/output-compressor.d.ts.map +1 -0
- package/dist/mcp-router/output-compressor.js +236 -0
- package/dist/mcp-router/output-compressor.js.map +1 -0
- package/dist/mcp-router/search/fuzzy.d.ts +26 -0
- package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
- package/dist/mcp-router/search/fuzzy.js +94 -0
- package/dist/mcp-router/search/fuzzy.js.map +1 -0
- package/dist/mcp-router/server.d.ts +50 -0
- package/dist/mcp-router/server.d.ts.map +1 -0
- package/dist/mcp-router/server.js +229 -0
- package/dist/mcp-router/server.js.map +1 -0
- package/dist/mcp-router/session-stats.d.ts +37 -0
- package/dist/mcp-router/session-stats.d.ts.map +1 -0
- package/dist/mcp-router/session-stats.js +56 -0
- package/dist/mcp-router/session-stats.js.map +1 -0
- package/dist/mcp-router/tools/discover.d.ts +37 -0
- package/dist/mcp-router/tools/discover.d.ts.map +1 -0
- package/dist/mcp-router/tools/discover.js +65 -0
- package/dist/mcp-router/tools/discover.js.map +1 -0
- package/dist/mcp-router/tools/execute.d.ts +43 -0
- package/dist/mcp-router/tools/execute.d.ts.map +1 -0
- package/dist/mcp-router/tools/execute.js +103 -0
- package/dist/mcp-router/tools/execute.js.map +1 -0
- package/dist/mcp-router/types.d.ts +62 -0
- package/dist/mcp-router/types.d.ts.map +1 -0
- package/dist/mcp-router/types.js +6 -0
- package/dist/mcp-router/types.js.map +1 -0
- package/dist/memory/adaptive-context.d.ts +146 -0
- package/dist/memory/adaptive-context.d.ts.map +1 -0
- package/dist/memory/adaptive-context.js +1022 -0
- package/dist/memory/adaptive-context.js.map +1 -0
- package/dist/memory/agent-scoped-memory.d.ts +67 -0
- package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
- package/dist/memory/agent-scoped-memory.js +126 -0
- package/dist/memory/agent-scoped-memory.js.map +1 -0
- package/dist/memory/backends/base.d.ts +18 -0
- package/dist/memory/backends/base.d.ts.map +1 -0
- package/dist/memory/backends/base.js +2 -0
- package/dist/memory/backends/base.js.map +1 -0
- package/dist/memory/backends/factory.d.ts +4 -0
- package/dist/memory/backends/factory.d.ts.map +1 -0
- package/dist/memory/backends/factory.js +53 -0
- package/dist/memory/backends/factory.js.map +1 -0
- package/dist/memory/backends/github.d.ts +22 -0
- package/dist/memory/backends/github.d.ts.map +1 -0
- package/dist/memory/backends/github.js +118 -0
- package/dist/memory/backends/github.js.map +1 -0
- package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
- package/dist/memory/backends/qdrant-cloud.js +168 -0
- package/dist/memory/backends/qdrant-cloud.js.map +1 -0
- package/dist/memory/context-compressor.d.ts +74 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +289 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/correction-propagator.d.ts +44 -0
- package/dist/memory/correction-propagator.d.ts.map +1 -0
- package/dist/memory/correction-propagator.js +156 -0
- package/dist/memory/correction-propagator.js.map +1 -0
- package/dist/memory/daily-log.d.ts +67 -0
- package/dist/memory/daily-log.d.ts.map +1 -0
- package/dist/memory/daily-log.js +143 -0
- package/dist/memory/daily-log.js.map +1 -0
- package/dist/memory/dynamic-retrieval.d.ts +110 -0
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
- package/dist/memory/dynamic-retrieval.js +688 -0
- package/dist/memory/dynamic-retrieval.js.map +1 -0
- package/dist/memory/embeddings.d.ts +116 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +461 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/hierarchical-memory.d.ts +141 -0
- package/dist/memory/hierarchical-memory.d.ts.map +1 -0
- package/dist/memory/hierarchical-memory.js +477 -0
- package/dist/memory/hierarchical-memory.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +124 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +514 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/memory-maintenance.d.ts +39 -0
- package/dist/memory/memory-maintenance.d.ts.map +1 -0
- package/dist/memory/memory-maintenance.js +305 -0
- package/dist/memory/memory-maintenance.js.map +1 -0
- package/dist/memory/model-router.d.ts +102 -0
- package/dist/memory/model-router.d.ts.map +1 -0
- package/dist/memory/model-router.js +448 -0
- package/dist/memory/model-router.js.map +1 -0
- package/dist/memory/multi-view-memory.d.ts +134 -0
- package/dist/memory/multi-view-memory.d.ts.map +1 -0
- package/dist/memory/multi-view-memory.js +420 -0
- package/dist/memory/multi-view-memory.js.map +1 -0
- package/dist/memory/prepopulate.d.ts +76 -0
- package/dist/memory/prepopulate.d.ts.map +1 -0
- package/dist/memory/prepopulate.js +815 -0
- package/dist/memory/prepopulate.js.map +1 -0
- package/dist/memory/semantic-compression.d.ts +77 -0
- package/dist/memory/semantic-compression.d.ts.map +1 -0
- package/dist/memory/semantic-compression.js +348 -0
- package/dist/memory/semantic-compression.js.map +1 -0
- package/dist/memory/serverless-qdrant.d.ts +102 -0
- package/dist/memory/serverless-qdrant.d.ts.map +1 -0
- package/dist/memory/serverless-qdrant.js +369 -0
- package/dist/memory/serverless-qdrant.js.map +1 -0
- package/dist/memory/short-term/factory.d.ts +26 -0
- package/dist/memory/short-term/factory.d.ts.map +1 -0
- package/dist/memory/short-term/factory.js +28 -0
- package/dist/memory/short-term/factory.js.map +1 -0
- package/dist/memory/short-term/indexeddb.d.ts +25 -0
- package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
- package/dist/memory/short-term/indexeddb.js +64 -0
- package/dist/memory/short-term/indexeddb.js.map +1 -0
- package/dist/memory/short-term/schema.d.ts +6 -0
- package/dist/memory/short-term/schema.d.ts.map +1 -0
- package/dist/memory/short-term/schema.js +119 -0
- package/dist/memory/short-term/schema.js.map +1 -0
- package/dist/memory/short-term/sqlite.d.ts +50 -0
- package/dist/memory/short-term/sqlite.d.ts.map +1 -0
- package/dist/memory/short-term/sqlite.js +221 -0
- package/dist/memory/short-term/sqlite.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +111 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -0
- package/dist/memory/speculative-cache.js +409 -0
- package/dist/memory/speculative-cache.js.map +1 -0
- package/dist/memory/task-classifier.d.ts +34 -0
- package/dist/memory/task-classifier.d.ts.map +1 -0
- package/dist/memory/task-classifier.js +300 -0
- package/dist/memory/task-classifier.js.map +1 -0
- package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
- package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
- package/dist/memory/terminal-bench-knowledge.js +399 -0
- package/dist/memory/terminal-bench-knowledge.js.map +1 -0
- package/dist/memory/write-gate.d.ts +39 -0
- package/dist/memory/write-gate.d.ts.map +1 -0
- package/dist/memory/write-gate.js +190 -0
- package/dist/memory/write-gate.js.map +1 -0
- package/dist/models/executor.d.ts +130 -0
- package/dist/models/executor.d.ts.map +1 -0
- package/dist/models/executor.js +383 -0
- package/dist/models/executor.js.map +1 -0
- package/dist/models/index.d.ts +15 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +17 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/planner.d.ts +71 -0
- package/dist/models/planner.d.ts.map +1 -0
- package/dist/models/planner.js +344 -0
- package/dist/models/planner.js.map +1 -0
- package/dist/models/router.d.ts +75 -0
- package/dist/models/router.d.ts.map +1 -0
- package/dist/models/router.js +344 -0
- package/dist/models/router.js.map +1 -0
- package/dist/models/types.d.ts +370 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +181 -0
- package/dist/models/types.js.map +1 -0
- package/dist/tasks/coordination.d.ts +74 -0
- package/dist/tasks/coordination.d.ts.map +1 -0
- package/dist/tasks/coordination.js +237 -0
- package/dist/tasks/coordination.js.map +1 -0
- package/dist/tasks/database.d.ts +14 -0
- package/dist/tasks/database.d.ts.map +1 -0
- package/dist/tasks/database.js +128 -0
- package/dist/tasks/database.js.map +1 -0
- package/dist/tasks/index.d.ts +5 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +5 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/service.d.ts +39 -0
- package/dist/tasks/service.d.ts.map +1 -0
- package/dist/tasks/service.js +582 -0
- package/dist/tasks/service.js.map +1 -0
- package/dist/tasks/types.d.ts +224 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +64 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/types/analysis.d.ts +82 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +2 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/config.d.ts +3023 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +292 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coordination.d.ts +240 -0
- package/dist/types/coordination.d.ts.map +1 -0
- package/dist/types/coordination.js +43 -0
- package/dist/types/coordination.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/calculate-average.d.ts +15 -0
- package/dist/utils/calculate-average.d.ts.map +1 -0
- package/dist/utils/calculate-average.js +21 -0
- package/dist/utils/calculate-average.js.map +1 -0
- package/dist/utils/config-manager.d.ts +30 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +41 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/dijkstra.d.ts +17 -0
- package/dist/utils/dijkstra.d.ts.map +1 -0
- package/dist/utils/dijkstra.js +91 -0
- package/dist/utils/dijkstra.js.map +1 -0
- package/dist/utils/fetch-with-retry.d.ts +5 -0
- package/dist/utils/fetch-with-retry.d.ts.map +1 -0
- package/dist/utils/fetch-with-retry.js +61 -0
- package/dist/utils/fetch-with-retry.js.map +1 -0
- package/dist/utils/merge-claude-md.d.ts +28 -0
- package/dist/utils/merge-claude-md.d.ts.map +1 -0
- package/dist/utils/merge-claude-md.js +342 -0
- package/dist/utils/merge-claude-md.js.map +1 -0
- package/dist/utils/order-processor-refactored.d.ts +126 -0
- package/dist/utils/order-processor-refactored.d.ts.map +1 -0
- package/dist/utils/order-processor-refactored.js +165 -0
- package/dist/utils/order-processor-refactored.js.map +1 -0
- package/dist/utils/order-processor-strategy.d.ts +72 -0
- package/dist/utils/order-processor-strategy.d.ts.map +1 -0
- package/dist/utils/order-processor-strategy.js +158 -0
- package/dist/utils/order-processor-strategy.js.map +1 -0
- package/dist/utils/order-processor.d.ts +242 -0
- package/dist/utils/order-processor.d.ts.map +1 -0
- package/dist/utils/order-processor.js +370 -0
- package/dist/utils/order-processor.js.map +1 -0
- package/dist/utils/rate-limiter-simple.d.ts +58 -0
- package/dist/utils/rate-limiter-simple.d.ts.map +1 -0
- package/dist/utils/rate-limiter-simple.js +100 -0
- package/dist/utils/rate-limiter-simple.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +62 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +150 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/string-similarity.d.ts +37 -0
- package/dist/utils/string-similarity.d.ts.map +1 -0
- package/dist/utils/string-similarity.js +114 -0
- package/dist/utils/string-similarity.js.map +1 -0
- package/dist/utils/validate-json.d.ts +51 -0
- package/dist/utils/validate-json.d.ts.map +1 -0
- package/dist/utils/validate-json.js +99 -0
- package/dist/utils/validate-json.js.map +1 -0
- package/package.json +96 -0
- package/templates/CLAUDE.template.md +11 -0
- package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
- package/templates/CLAUDE_CODING.template.md +125 -0
- package/templates/CLAUDE_DROIDS.template.md +109 -0
- package/templates/CLAUDE_MEMORY.template.md +130 -0
- package/templates/CLAUDE_WORKFLOWS.template.md +136 -0
- package/templates/PROJECT.template.md +209 -0
- package/templates/SCHEMA.md +57 -0
- package/templates/archive/CLAUDE.template.root-v6.md +762 -0
- package/templates/archive/CLAUDE.template.v6.md +762 -0
- package/templates/hooks/pre-compact.sh +68 -0
- package/templates/hooks/session-start.sh +106 -0
- package/tools/agents/README.md +224 -0
- package/tools/agents/UAP/README.md +351 -0
- package/tools/agents/UAP/__init__.py +9 -0
- package/tools/agents/UAP/cli.py +675 -0
- package/tools/agents/UAP/version.py +2 -0
- package/tools/agents/benchmarks/benchmark_memory_systems.py +637 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
- package/tools/agents/config/chat_template.jinja +172 -0
- package/tools/agents/docker-compose.qdrant.yml +24 -0
- package/tools/agents/migrations/apply.py +256 -0
- package/tools/agents/scripts/fix_qwen_chat_template.py +314 -0
- package/tools/agents/scripts/init_qdrant.py +151 -0
- package/tools/agents/scripts/memory_migration.py +518 -0
- package/tools/agents/scripts/migrate_memory_to_qdrant.py +113 -0
- package/tools/agents/scripts/query_memory.py +189 -0
- package/tools/agents/scripts/qwen_tool_call_test.py +419 -0
- package/tools/agents/scripts/qwen_tool_call_wrapper.py +517 -0
- package/tools/agents/scripts/start-services.sh +96 -0
- package/tools/agents/tests/test_uap_compliance.py +257 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligent merge of existing CLAUDE.md with newly generated content
|
|
3
|
+
*
|
|
4
|
+
* Strategy:
|
|
5
|
+
* - Preserves user customizations in standard sections
|
|
6
|
+
* - Extracts valuable content from existing file
|
|
7
|
+
* - Places extracted content in appropriate new sections
|
|
8
|
+
* - Never loses information
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Parse markdown content into sections
|
|
12
|
+
*/
|
|
13
|
+
function parseSections(content) {
|
|
14
|
+
const lines = content.split('\n');
|
|
15
|
+
const sections = [];
|
|
16
|
+
let currentSection = null;
|
|
17
|
+
let currentContent = [];
|
|
18
|
+
for (let i = 0; i < lines.length; i++) {
|
|
19
|
+
const line = lines[i];
|
|
20
|
+
// Match ## headings, capturing optional emoji
|
|
21
|
+
const heading = line.match(/^##\s+([🔴⚡🤖📋🧠🌳🚀📁🏗️🔧🗄️🔐✅🔄📊⚙️🧪🏭⛔]\s*)?(.+)$/);
|
|
22
|
+
if (heading) {
|
|
23
|
+
if (currentSection) {
|
|
24
|
+
currentSection.content = currentContent.join('\n').trim();
|
|
25
|
+
currentSection.endLine = i - 1;
|
|
26
|
+
sections.push(currentSection);
|
|
27
|
+
}
|
|
28
|
+
currentSection = {
|
|
29
|
+
title: heading[2].trim(),
|
|
30
|
+
emoji: heading[1]?.trim(),
|
|
31
|
+
content: '',
|
|
32
|
+
startLine: i,
|
|
33
|
+
endLine: i,
|
|
34
|
+
};
|
|
35
|
+
currentContent = [];
|
|
36
|
+
}
|
|
37
|
+
else if (currentSection) {
|
|
38
|
+
currentContent.push(line);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (currentSection) {
|
|
42
|
+
currentSection.content = currentContent.join('\n').trim();
|
|
43
|
+
currentSection.endLine = lines.length - 1;
|
|
44
|
+
sections.push(currentSection);
|
|
45
|
+
}
|
|
46
|
+
return sections;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Extract preamble (content before first ## heading)
|
|
50
|
+
*/
|
|
51
|
+
function extractPreamble(content) {
|
|
52
|
+
const lines = content.split('\n');
|
|
53
|
+
const preamble = [];
|
|
54
|
+
for (const line of lines) {
|
|
55
|
+
if (line.match(/^##\s+/)) {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
preamble.push(line);
|
|
59
|
+
}
|
|
60
|
+
return preamble.join('\n').trim();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Standard sections managed by the template (will be replaced)
|
|
64
|
+
*/
|
|
65
|
+
const STANDARD_SECTIONS = new Set([
|
|
66
|
+
'DIRECTIVE HIERARCHY',
|
|
67
|
+
'SESSION START PROTOCOL',
|
|
68
|
+
'MULTI-AGENT COORDINATION PROTOCOL',
|
|
69
|
+
'MANDATORY DECISION LOOP',
|
|
70
|
+
'MEMORY SYSTEM',
|
|
71
|
+
'FOUR-LAYER MEMORY SYSTEM',
|
|
72
|
+
'WORKTREE WORKFLOW',
|
|
73
|
+
'PARALLEL REVIEW PROTOCOL',
|
|
74
|
+
'AUTOMATIC TRIGGERS',
|
|
75
|
+
'REPOSITORY STRUCTURE',
|
|
76
|
+
'COMPLETION PROTOCOL',
|
|
77
|
+
'COMPLETION CHECKLIST',
|
|
78
|
+
]);
|
|
79
|
+
/**
|
|
80
|
+
* Sections that contain extractable content (we'll merge content intelligently)
|
|
81
|
+
*/
|
|
82
|
+
const EXTRACTABLE_SECTIONS = new Set([
|
|
83
|
+
'TROUBLESHOOTING',
|
|
84
|
+
'QUICK REFERENCE',
|
|
85
|
+
'CONFIG FILES',
|
|
86
|
+
'ARCHITECTURE',
|
|
87
|
+
'COMPONENTS',
|
|
88
|
+
'DATABASE',
|
|
89
|
+
'AUTHENTICATION',
|
|
90
|
+
'PROJECT KNOWLEDGE',
|
|
91
|
+
'INFRASTRUCTURE',
|
|
92
|
+
]);
|
|
93
|
+
function normalizeTitle(title) {
|
|
94
|
+
return title.toUpperCase()
|
|
95
|
+
.replace(/[🔴⚡🤖📋🧠🌳🚀📁🏗️🔧🗄️🔐✅🔄📊⚙️🧪🏭⛔]/g, '')
|
|
96
|
+
.trim();
|
|
97
|
+
}
|
|
98
|
+
function isStandardSection(title) {
|
|
99
|
+
const normalized = normalizeTitle(title);
|
|
100
|
+
for (const std of STANDARD_SECTIONS) {
|
|
101
|
+
if (normalized.includes(std) || std.includes(normalized)) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
function isExtractableSection(title) {
|
|
108
|
+
const normalized = normalizeTitle(title);
|
|
109
|
+
for (const ext of EXTRACTABLE_SECTIONS) {
|
|
110
|
+
if (normalized.includes(ext) || ext.includes(normalized)) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Extract valuable content from existing sections
|
|
118
|
+
*/
|
|
119
|
+
function extractContent(sections) {
|
|
120
|
+
const result = {
|
|
121
|
+
customSections: [],
|
|
122
|
+
troubleshooting: [],
|
|
123
|
+
urls: [],
|
|
124
|
+
commands: [],
|
|
125
|
+
configFiles: [],
|
|
126
|
+
workflows: [],
|
|
127
|
+
clusters: [],
|
|
128
|
+
gotchas: [],
|
|
129
|
+
lessons: [],
|
|
130
|
+
};
|
|
131
|
+
for (const section of sections) {
|
|
132
|
+
const normalized = normalizeTitle(section.title);
|
|
133
|
+
const content = section.content;
|
|
134
|
+
// Completely custom sections - preserve entirely
|
|
135
|
+
if (!isStandardSection(section.title) && !isExtractableSection(section.title)) {
|
|
136
|
+
result.customSections.push(section);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
// Extract troubleshooting entries (table rows)
|
|
140
|
+
if (normalized.includes('TROUBLESHOOTING')) {
|
|
141
|
+
const tableRows = content.match(/^\|[^|]+\|[^|]+\|$/gm) || [];
|
|
142
|
+
for (const row of tableRows) {
|
|
143
|
+
if (!row.includes('---') && !row.toLowerCase().includes('symptom') && !row.toLowerCase().includes('solution')) {
|
|
144
|
+
result.troubleshooting.push(row);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Extract URLs
|
|
149
|
+
if (normalized.includes('QUICK REFERENCE') || normalized.includes('URL')) {
|
|
150
|
+
const urls = content.match(/https?:\/\/[^\s)>]+/g) || [];
|
|
151
|
+
result.urls.push(...urls.filter(u => !u.includes('img.shields.io')));
|
|
152
|
+
}
|
|
153
|
+
// Extract kubectl contexts/clusters
|
|
154
|
+
if (content.includes('kubectl config use-context')) {
|
|
155
|
+
const contexts = content.match(/kubectl config use-context\s+\S+.*$/gm) || [];
|
|
156
|
+
result.clusters.push(...contexts);
|
|
157
|
+
}
|
|
158
|
+
// Extract workflow files
|
|
159
|
+
if (content.includes('.yml') || content.includes('.yaml')) {
|
|
160
|
+
const workflows = content.match(/├──\s+[\w-]+\.ya?ml.*$/gm) || [];
|
|
161
|
+
result.workflows.push(...workflows);
|
|
162
|
+
}
|
|
163
|
+
// Extract config file entries
|
|
164
|
+
if (normalized.includes('CONFIG')) {
|
|
165
|
+
const configRows = content.match(/^\|\s*`[^`]+`\s*\|[^|]+\|$/gm) || [];
|
|
166
|
+
result.configFiles.push(...configRows);
|
|
167
|
+
}
|
|
168
|
+
// Extract gotchas
|
|
169
|
+
if (normalized.includes('GOTCHA') || content.includes('⚠️')) {
|
|
170
|
+
const gotchas = content.match(/^-?\s*⚠️.*$/gm) || [];
|
|
171
|
+
result.gotchas.push(...gotchas);
|
|
172
|
+
}
|
|
173
|
+
// Extract lessons
|
|
174
|
+
if (normalized.includes('LESSON') || normalized.includes('KNOWLEDGE')) {
|
|
175
|
+
const lessons = content.match(/^-\s+\*\*[^*]+\*\*:.*$/gm) || [];
|
|
176
|
+
result.lessons.push(...lessons);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Inject extracted content into appropriate sections of new content
|
|
183
|
+
*/
|
|
184
|
+
function injectExtractedContent(newSections, extracted) {
|
|
185
|
+
const result = [...newSections];
|
|
186
|
+
for (const section of result) {
|
|
187
|
+
const normalized = normalizeTitle(section.title);
|
|
188
|
+
// Inject troubleshooting entries
|
|
189
|
+
if (normalized.includes('TROUBLESHOOTING') && extracted.troubleshooting.length > 0) {
|
|
190
|
+
const existingRows = section.content.match(/^\|[^|]+\|[^|]+\|$/gm) || [];
|
|
191
|
+
const existingSet = new Set(existingRows.map(r => r.toLowerCase()));
|
|
192
|
+
const newRows = extracted.troubleshooting.filter(r => !existingSet.has(r.toLowerCase()));
|
|
193
|
+
if (newRows.length > 0) {
|
|
194
|
+
// Find table end and append
|
|
195
|
+
const tableMatch = section.content.match(/(^\|.*\|$\n?)+/m);
|
|
196
|
+
if (tableMatch) {
|
|
197
|
+
const tableEnd = tableMatch.index + tableMatch[0].length;
|
|
198
|
+
section.content =
|
|
199
|
+
section.content.slice(0, tableEnd) +
|
|
200
|
+
newRows.join('\n') + '\n' +
|
|
201
|
+
section.content.slice(tableEnd);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Inject URLs
|
|
206
|
+
if (normalized.includes('QUICK REFERENCE') && extracted.urls.length > 0) {
|
|
207
|
+
const existingUrls = new Set((section.content.match(/https?:\/\/[^\s)>]+/g) || []).map(u => u.toLowerCase()));
|
|
208
|
+
const newUrls = extracted.urls.filter(u => !existingUrls.has(u.toLowerCase()));
|
|
209
|
+
if (newUrls.length > 0 && !section.content.includes('### URLs')) {
|
|
210
|
+
section.content += '\n\n### URLs\n' + newUrls.map(u => `- ${u}`).join('\n');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Inject clusters
|
|
214
|
+
if (normalized.includes('QUICK REFERENCE') && extracted.clusters.length > 0) {
|
|
215
|
+
if (!section.content.includes('kubectl config use-context')) {
|
|
216
|
+
section.content += '\n\n### Clusters\n```bash\n' + extracted.clusters.join('\n') + '\n```';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Inject workflows
|
|
220
|
+
if (normalized.includes('QUICK REFERENCE') && extracted.workflows.length > 0) {
|
|
221
|
+
const existingWorkflows = new Set((section.content.match(/[\w-]+\.ya?ml/g) || []).map(w => w.toLowerCase()));
|
|
222
|
+
const newWorkflows = extracted.workflows.filter(w => {
|
|
223
|
+
const match = w.match(/[\w-]+\.ya?ml/);
|
|
224
|
+
return match && !existingWorkflows.has(match[0].toLowerCase());
|
|
225
|
+
});
|
|
226
|
+
if (newWorkflows.length > 0 && !section.content.includes('### Workflows')) {
|
|
227
|
+
section.content += '\n\n### Workflows\n```\n' + newWorkflows.join('\n') + '\n```';
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Inject config files
|
|
231
|
+
if (normalized.includes('CONFIG') && extracted.configFiles.length > 0) {
|
|
232
|
+
const existingFiles = new Set((section.content.match(/`[^`]+`/g) || []).map(f => f.toLowerCase()));
|
|
233
|
+
const newFiles = extracted.configFiles.filter(f => {
|
|
234
|
+
const match = f.match(/`([^`]+)`/);
|
|
235
|
+
return match && !existingFiles.has(match[0].toLowerCase());
|
|
236
|
+
});
|
|
237
|
+
if (newFiles.length > 0) {
|
|
238
|
+
section.content += '\n' + newFiles.join('\n');
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Inject gotchas into Project Knowledge
|
|
242
|
+
if (normalized.includes('PROJECT KNOWLEDGE') || normalized.includes('GOTCHA')) {
|
|
243
|
+
if (extracted.gotchas.length > 0 && !section.content.includes('### Gotchas')) {
|
|
244
|
+
section.content += '\n\n### Gotchas\n' + extracted.gotchas.join('\n');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// Inject lessons into Project Knowledge
|
|
248
|
+
if (normalized.includes('PROJECT KNOWLEDGE') || normalized.includes('LESSON')) {
|
|
249
|
+
if (extracted.lessons.length > 0 && !section.content.includes('### Lessons')) {
|
|
250
|
+
section.content += '\n\n### Lessons\n' + extracted.lessons.join('\n');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Merge existing CLAUDE.md content with newly generated content
|
|
258
|
+
*
|
|
259
|
+
* Intelligent merge strategy:
|
|
260
|
+
* 1. Use new template structure and preamble
|
|
261
|
+
* 2. Replace standard sections with new versions
|
|
262
|
+
* 3. Extract valuable content from existing file
|
|
263
|
+
* 4. Inject extracted content into appropriate new sections
|
|
264
|
+
* 5. Append completely custom sections at the end
|
|
265
|
+
*/
|
|
266
|
+
export function mergeClaudeMd(existingContent, newContent) {
|
|
267
|
+
const existingSections = parseSections(existingContent);
|
|
268
|
+
const newSections = parseSections(newContent);
|
|
269
|
+
const newPreamble = extractPreamble(newContent);
|
|
270
|
+
// Extract valuable content from existing file
|
|
271
|
+
const extracted = extractContent(existingSections);
|
|
272
|
+
// Inject extracted content into new sections
|
|
273
|
+
const mergedSections = injectExtractedContent(newSections, extracted);
|
|
274
|
+
// Build final content
|
|
275
|
+
const merged = [];
|
|
276
|
+
merged.push(newPreamble);
|
|
277
|
+
merged.push('');
|
|
278
|
+
// Add all sections from new content (with injected data)
|
|
279
|
+
for (const section of mergedSections) {
|
|
280
|
+
const emoji = section.emoji ? `${section.emoji} ` : '';
|
|
281
|
+
merged.push(`## ${emoji}${section.title}`);
|
|
282
|
+
merged.push('');
|
|
283
|
+
merged.push(section.content);
|
|
284
|
+
merged.push('');
|
|
285
|
+
merged.push('---');
|
|
286
|
+
merged.push('');
|
|
287
|
+
}
|
|
288
|
+
// Append custom sections that weren't in the template
|
|
289
|
+
if (extracted.customSections.length > 0) {
|
|
290
|
+
merged.push('<!-- Custom Sections (preserved from existing file) -->');
|
|
291
|
+
merged.push('');
|
|
292
|
+
for (const section of extracted.customSections) {
|
|
293
|
+
const emoji = section.emoji ? `${section.emoji} ` : '';
|
|
294
|
+
merged.push(`## ${emoji}${section.title}`);
|
|
295
|
+
merged.push('');
|
|
296
|
+
merged.push(section.content);
|
|
297
|
+
merged.push('');
|
|
298
|
+
merged.push('---');
|
|
299
|
+
merged.push('');
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Clean up
|
|
303
|
+
let result = merged.join('\n');
|
|
304
|
+
result = result.replace(/\n{3,}/g, '\n\n');
|
|
305
|
+
result = result.replace(/---\n*$/, '');
|
|
306
|
+
result = result.trim();
|
|
307
|
+
return result;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Validate merge result - ensure no significant content was lost
|
|
311
|
+
*/
|
|
312
|
+
export function validateMerge(original, merged) {
|
|
313
|
+
const warnings = [];
|
|
314
|
+
// Check for URLs that might have been lost
|
|
315
|
+
const originalUrls = new Set((original.match(/https?:\/\/[^\s)>]+/g) || []).filter(u => !u.includes('img.shields.io')));
|
|
316
|
+
const mergedUrls = new Set((merged.match(/https?:\/\/[^\s)>]+/g) || []));
|
|
317
|
+
for (const url of originalUrls) {
|
|
318
|
+
if (!mergedUrls.has(url)) {
|
|
319
|
+
warnings.push(`URL may be missing: ${url.slice(0, 50)}...`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Check for kubectl contexts that might have been lost
|
|
323
|
+
const originalContexts = original.match(/kubectl config use-context\s+\S+/g) || [];
|
|
324
|
+
const mergedContexts = merged.match(/kubectl config use-context\s+\S+/g) || [];
|
|
325
|
+
if (originalContexts.length > mergedContexts.length) {
|
|
326
|
+
warnings.push(`Some kubectl contexts may be missing (had ${originalContexts.length}, now ${mergedContexts.length})`);
|
|
327
|
+
}
|
|
328
|
+
// Check for custom section headers
|
|
329
|
+
const originalSections = parseSections(original);
|
|
330
|
+
const mergedSections = parseSections(merged);
|
|
331
|
+
const mergedTitles = new Set(mergedSections.map(s => normalizeTitle(s.title)));
|
|
332
|
+
for (const section of originalSections) {
|
|
333
|
+
if (!isStandardSection(section.title) && !mergedTitles.has(normalizeTitle(section.title))) {
|
|
334
|
+
warnings.push(`Custom section may be missing: ${section.title}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
valid: warnings.length === 0,
|
|
339
|
+
warnings,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=merge-claude-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-claude-md.js","sourceRoot":"","sources":["../../src/utils/merge-claude-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order Processing - Refactored using SOLID Principles
|
|
3
|
+
*
|
|
4
|
+
* This implementation follows:
|
|
5
|
+
* - Single Responsibility Principle: Each strategy handles one order type
|
|
6
|
+
* - Open/Closed Principle: New order types can be added without modifying existing code
|
|
7
|
+
* - Liskov Substitution Principle: All strategies are interchangeable
|
|
8
|
+
* - Interface Segregation Principle: Focused interfaces for specific behaviors
|
|
9
|
+
* - Dependency Inversion Principle: High-level module depends on abstractions
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Represents the possible statuses an order can have
|
|
13
|
+
*/
|
|
14
|
+
export type OrderStatus = 'pending' | 'delivered' | 'shipped' | 'active' | 'cancelled';
|
|
15
|
+
/**
|
|
16
|
+
* Represents the supported order types
|
|
17
|
+
*/
|
|
18
|
+
export type OrderType = 'digital' | 'physical' | 'subscription';
|
|
19
|
+
/**
|
|
20
|
+
* Base order interface with common properties
|
|
21
|
+
*/
|
|
22
|
+
export interface Order {
|
|
23
|
+
readonly id: string;
|
|
24
|
+
readonly type: OrderType;
|
|
25
|
+
status: OrderStatus;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Digital order with download-specific properties
|
|
29
|
+
*/
|
|
30
|
+
export interface DigitalOrder extends Order {
|
|
31
|
+
readonly type: 'digital';
|
|
32
|
+
readonly downloadUrl?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Physical order with shipping-specific properties
|
|
36
|
+
*/
|
|
37
|
+
export interface PhysicalOrder extends Order {
|
|
38
|
+
readonly type: 'physical';
|
|
39
|
+
readonly shippingAddress?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Subscription order with subscription-specific properties
|
|
43
|
+
*/
|
|
44
|
+
export interface SubscriptionOrder extends Order {
|
|
45
|
+
readonly type: 'subscription';
|
|
46
|
+
readonly subscriptionPlan?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Union type for all order types
|
|
50
|
+
*/
|
|
51
|
+
export type AnyOrder = DigitalOrder | PhysicalOrder | SubscriptionOrder;
|
|
52
|
+
/**
|
|
53
|
+
* Result of processing an order
|
|
54
|
+
*/
|
|
55
|
+
export interface ProcessingResult {
|
|
56
|
+
readonly success: boolean;
|
|
57
|
+
readonly order: AnyOrder;
|
|
58
|
+
readonly message: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Logger interface for dependency injection
|
|
62
|
+
*/
|
|
63
|
+
export interface Logger {
|
|
64
|
+
log(message: string): void;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Strategy interface for processing orders (Open/Closed Principle)
|
|
68
|
+
*/
|
|
69
|
+
export interface OrderProcessingStrategy {
|
|
70
|
+
/**
|
|
71
|
+
* Check if this strategy can handle the given order type
|
|
72
|
+
*/
|
|
73
|
+
canHandle(orderType: OrderType): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Process the order and return the result
|
|
76
|
+
*/
|
|
77
|
+
process(order: AnyOrder, logger: Logger): ProcessingResult;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Strategy for processing digital orders
|
|
81
|
+
*/
|
|
82
|
+
export declare class DigitalOrderStrategy implements OrderProcessingStrategy {
|
|
83
|
+
canHandle(orderType: OrderType): boolean;
|
|
84
|
+
process(order: AnyOrder, logger: Logger): ProcessingResult;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Strategy for processing physical orders
|
|
88
|
+
*/
|
|
89
|
+
export declare class PhysicalOrderStrategy implements OrderProcessingStrategy {
|
|
90
|
+
canHandle(orderType: OrderType): boolean;
|
|
91
|
+
process(order: AnyOrder, logger: Logger): ProcessingResult;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Strategy for processing subscription orders
|
|
95
|
+
*/
|
|
96
|
+
export declare class SubscriptionOrderStrategy implements OrderProcessingStrategy {
|
|
97
|
+
canHandle(orderType: OrderType): boolean;
|
|
98
|
+
process(order: AnyOrder, logger: Logger): ProcessingResult;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Console-based logger implementation
|
|
102
|
+
*/
|
|
103
|
+
export declare class ConsoleLogger implements Logger {
|
|
104
|
+
log(message: string): void;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Main order processor that uses strategies to handle different order types
|
|
108
|
+
*/
|
|
109
|
+
export declare class OrderProcessor {
|
|
110
|
+
private readonly strategies;
|
|
111
|
+
private readonly logger;
|
|
112
|
+
constructor(strategies: OrderProcessingStrategy[], logger: Logger);
|
|
113
|
+
/**
|
|
114
|
+
* Process an order using the appropriate strategy
|
|
115
|
+
*/
|
|
116
|
+
processOrder(order: AnyOrder): ProcessingResult;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Factory function to create a fully configured OrderProcessor
|
|
120
|
+
*/
|
|
121
|
+
export declare function createOrderProcessor(logger?: Logger): OrderProcessor;
|
|
122
|
+
/**
|
|
123
|
+
* Example usage demonstrating the refactored code
|
|
124
|
+
*/
|
|
125
|
+
export declare function exampleUsage(): void;
|
|
126
|
+
//# sourceMappingURL=order-processor-refactored.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-processor-refactored.d.ts","sourceRoot":"","sources":["../../src/utils/order-processor-refactored.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order Processing - Refactored using SOLID Principles
|
|
3
|
+
*
|
|
4
|
+
* This implementation follows:
|
|
5
|
+
* - Single Responsibility Principle: Each strategy handles one order type
|
|
6
|
+
* - Open/Closed Principle: New order types can be added without modifying existing code
|
|
7
|
+
* - Liskov Substitution Principle: All strategies are interchangeable
|
|
8
|
+
* - Interface Segregation Principle: Focused interfaces for specific behaviors
|
|
9
|
+
* - Dependency Inversion Principle: High-level module depends on abstractions
|
|
10
|
+
*/
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Strategy Implementations (Single Responsibility Principle)
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Strategy for processing digital orders
|
|
16
|
+
*/
|
|
17
|
+
export class DigitalOrderStrategy {
|
|
18
|
+
canHandle(orderType) {
|
|
19
|
+
return orderType === 'digital';
|
|
20
|
+
}
|
|
21
|
+
process(order, logger) {
|
|
22
|
+
logger.log('Sending email with download link');
|
|
23
|
+
const processedOrder = {
|
|
24
|
+
...order,
|
|
25
|
+
status: 'delivered',
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
success: true,
|
|
29
|
+
order: processedOrder,
|
|
30
|
+
message: 'Digital order delivered via email',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Strategy for processing physical orders
|
|
36
|
+
*/
|
|
37
|
+
export class PhysicalOrderStrategy {
|
|
38
|
+
canHandle(orderType) {
|
|
39
|
+
return orderType === 'physical';
|
|
40
|
+
}
|
|
41
|
+
process(order, logger) {
|
|
42
|
+
logger.log('Creating shipping label');
|
|
43
|
+
const processedOrder = {
|
|
44
|
+
...order,
|
|
45
|
+
status: 'shipped',
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
success: true,
|
|
49
|
+
order: processedOrder,
|
|
50
|
+
message: 'Physical order shipped',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Strategy for processing subscription orders
|
|
56
|
+
*/
|
|
57
|
+
export class SubscriptionOrderStrategy {
|
|
58
|
+
canHandle(orderType) {
|
|
59
|
+
return orderType === 'subscription';
|
|
60
|
+
}
|
|
61
|
+
process(order, logger) {
|
|
62
|
+
logger.log('Activating subscription');
|
|
63
|
+
const processedOrder = {
|
|
64
|
+
...order,
|
|
65
|
+
status: 'active',
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
order: processedOrder,
|
|
70
|
+
message: 'Subscription activated',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Default Logger Implementation
|
|
76
|
+
// ============================================================================
|
|
77
|
+
/**
|
|
78
|
+
* Console-based logger implementation
|
|
79
|
+
*/
|
|
80
|
+
export class ConsoleLogger {
|
|
81
|
+
log(message) {
|
|
82
|
+
console.log(message);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// Order Processor (Dependency Inversion Principle)
|
|
87
|
+
// ============================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Main order processor that uses strategies to handle different order types
|
|
90
|
+
*/
|
|
91
|
+
export class OrderProcessor {
|
|
92
|
+
strategies;
|
|
93
|
+
logger;
|
|
94
|
+
constructor(strategies, logger) {
|
|
95
|
+
this.strategies = strategies;
|
|
96
|
+
this.logger = logger;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Process an order using the appropriate strategy
|
|
100
|
+
*/
|
|
101
|
+
processOrder(order) {
|
|
102
|
+
const strategy = this.strategies.find((s) => s.canHandle(order.type));
|
|
103
|
+
if (!strategy) {
|
|
104
|
+
return {
|
|
105
|
+
success: false,
|
|
106
|
+
order,
|
|
107
|
+
message: `No strategy found for order type: ${order.type}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const result = strategy.process(order, this.logger);
|
|
111
|
+
this.logger.log(`Order processed: ${order.id}`);
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ============================================================================
|
|
116
|
+
// Factory for Easy Setup
|
|
117
|
+
// ============================================================================
|
|
118
|
+
/**
|
|
119
|
+
* Factory function to create a fully configured OrderProcessor
|
|
120
|
+
*/
|
|
121
|
+
export function createOrderProcessor(logger) {
|
|
122
|
+
const strategies = [
|
|
123
|
+
new DigitalOrderStrategy(),
|
|
124
|
+
new PhysicalOrderStrategy(),
|
|
125
|
+
new SubscriptionOrderStrategy(),
|
|
126
|
+
];
|
|
127
|
+
return new OrderProcessor(strategies, logger ?? new ConsoleLogger());
|
|
128
|
+
}
|
|
129
|
+
// ============================================================================
|
|
130
|
+
// Usage Example
|
|
131
|
+
// ============================================================================
|
|
132
|
+
/**
|
|
133
|
+
* Example usage demonstrating the refactored code
|
|
134
|
+
*/
|
|
135
|
+
export function exampleUsage() {
|
|
136
|
+
const processor = createOrderProcessor();
|
|
137
|
+
const digitalOrder = {
|
|
138
|
+
id: 'order-001',
|
|
139
|
+
type: 'digital',
|
|
140
|
+
status: 'pending',
|
|
141
|
+
downloadUrl: 'https://example.com/download/abc',
|
|
142
|
+
};
|
|
143
|
+
const physicalOrder = {
|
|
144
|
+
id: 'order-002',
|
|
145
|
+
type: 'physical',
|
|
146
|
+
status: 'pending',
|
|
147
|
+
shippingAddress: '123 Main St, City, Country',
|
|
148
|
+
};
|
|
149
|
+
const subscriptionOrder = {
|
|
150
|
+
id: 'order-003',
|
|
151
|
+
type: 'subscription',
|
|
152
|
+
status: 'pending',
|
|
153
|
+
subscriptionPlan: 'premium-monthly',
|
|
154
|
+
};
|
|
155
|
+
console.log('Processing digital order:');
|
|
156
|
+
const digitalResult = processor.processOrder(digitalOrder);
|
|
157
|
+
console.log('Result:', digitalResult);
|
|
158
|
+
console.log('\nProcessing physical order:');
|
|
159
|
+
const physicalResult = processor.processOrder(physicalOrder);
|
|
160
|
+
console.log('Result:', physicalResult);
|
|
161
|
+
console.log('\nProcessing subscription order:');
|
|
162
|
+
const subscriptionResult = processor.processOrder(subscriptionOrder);
|
|
163
|
+
console.log('Result:', subscriptionResult);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=order-processor-refactored.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-processor-refactored.js","sourceRoot":"","sources":["../../src/utils/order-processor-refactored.ts"],"names":[],"mappings":"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"}
|