sdl-mcp 0.6.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 +132 -0
- package/config/benchmark.ci.config.json +86 -0
- package/config/benchmark.ci.windows.config.json +86 -0
- package/config/benchmark.config.example.json +86 -0
- package/config/benchmark.config.json +86 -0
- package/config/sdlmcp.config.example.json +139 -0
- package/config/sdlmcp.config.json +48 -0
- package/config/sdlmcp.config.schema.json +381 -0
- package/dist/agent/evidence.d.ts +18 -0
- package/dist/agent/evidence.d.ts.map +1 -0
- package/dist/agent/evidence.js +107 -0
- package/dist/agent/evidence.js.map +1 -0
- package/dist/agent/executor.d.ts +28 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +261 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/index.d.ts +6 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +6 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +14 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +108 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/planner.d.ts +21 -0
- package/dist/agent/planner.d.ts.map +1 -0
- package/dist/agent/planner.js +153 -0
- package/dist/agent/planner.js.map +1 -0
- package/dist/agent/types.d.ts +86 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/benchmark/index.d.ts +4 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +4 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/benchmark/regression.d.ts +40 -0
- package/dist/benchmark/regression.d.ts.map +1 -0
- package/dist/benchmark/regression.js +199 -0
- package/dist/benchmark/regression.js.map +1 -0
- package/dist/benchmark/smoothing.d.ts +40 -0
- package/dist/benchmark/smoothing.d.ts.map +1 -0
- package/dist/benchmark/smoothing.js +121 -0
- package/dist/benchmark/smoothing.js.map +1 -0
- package/dist/benchmark/threshold.d.ts +64 -0
- package/dist/benchmark/threshold.d.ts.map +1 -0
- package/dist/benchmark/threshold.js +173 -0
- package/dist/benchmark/threshold.js.map +1 -0
- package/dist/cli/argParsing.d.ts +34 -0
- package/dist/cli/argParsing.d.ts.map +1 -0
- package/dist/cli/argParsing.js +329 -0
- package/dist/cli/argParsing.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +16 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +412 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +218 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/export.d.ts +12 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +70 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/import.d.ts +10 -0
- package/dist/cli/commands/import.d.ts.map +1 -0
- package/dist/cli/commands/import.js +40 -0
- package/dist/cli/commands/import.js.map +1 -0
- package/dist/cli/commands/index.d.ts +3 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +89 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +221 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/pull.d.ts +11 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/commands/pull.js +47 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +3 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +72 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/version.d.ts +3 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +24 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +213 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/logging.d.ts +10 -0
- package/dist/cli/logging.d.ts.map +1 -0
- package/dist/cli/logging.js +48 -0
- package/dist/cli/logging.js.map +1 -0
- package/dist/cli/transport/http.d.ts +3 -0
- package/dist/cli/transport/http.d.ts.map +1 -0
- package/dist/cli/transport/http.js +106 -0
- package/dist/cli/transport/http.js.map +1 -0
- package/dist/cli/transport/stdio.d.ts +3 -0
- package/dist/cli/transport/stdio.d.ts.map +1 -0
- package/dist/cli/transport/stdio.js +6 -0
- package/dist/cli/transport/stdio.js.map +1 -0
- package/dist/cli/types.d.ts +41 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/code/gate.d.ts +11 -0
- package/dist/code/gate.d.ts.map +1 -0
- package/dist/code/gate.js +134 -0
- package/dist/code/gate.js.map +1 -0
- package/dist/code/hotpath.d.ts +17 -0
- package/dist/code/hotpath.d.ts.map +1 -0
- package/dist/code/hotpath.js +200 -0
- package/dist/code/hotpath.js.map +1 -0
- package/dist/code/redact.d.ts +19 -0
- package/dist/code/redact.d.ts.map +1 -0
- package/dist/code/redact.js +92 -0
- package/dist/code/redact.js.map +1 -0
- package/dist/code/skeleton.d.ts +32 -0
- package/dist/code/skeleton.d.ts.map +1 -0
- package/dist/code/skeleton.js +610 -0
- package/dist/code/skeleton.js.map +1 -0
- package/dist/code/windows.d.ts +18 -0
- package/dist/code/windows.d.ts.map +1 -0
- package/dist/code/windows.js +236 -0
- package/dist/code/windows.js.map +1 -0
- package/dist/config/constants.d.ts +340 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +379 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/loadConfig.d.ts +3 -0
- package/dist/config/loadConfig.d.ts.map +1 -0
- package/dist/config/loadConfig.js +71 -0
- package/dist/config/loadConfig.js.map +1 -0
- package/dist/config/types.d.ts +509 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +139 -0
- package/dist/config/types.js.map +1 -0
- package/dist/db/db.d.ts +4 -0
- package/dist/db/db.d.ts.map +1 -0
- package/dist/db/db.js +47 -0
- package/dist/db/db.js.map +1 -0
- package/dist/db/migrations.d.ts +15 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +81 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +440 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +1054 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +132 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +2 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/delta/blastRadius.d.ts +24 -0
- package/dist/delta/blastRadius.d.ts.map +1 -0
- package/dist/delta/blastRadius.js +239 -0
- package/dist/delta/blastRadius.js.map +1 -0
- package/dist/delta/diff.d.ts +16 -0
- package/dist/delta/diff.d.ts.map +1 -0
- package/dist/delta/diff.js +236 -0
- package/dist/delta/diff.js.map +1 -0
- package/dist/delta/versioning.d.ts +11 -0
- package/dist/delta/versioning.d.ts.map +1 -0
- package/dist/delta/versioning.js +68 -0
- package/dist/delta/versioning.js.map +1 -0
- package/dist/graph/buildGraph.d.ts +12 -0
- package/dist/graph/buildGraph.d.ts.map +1 -0
- package/dist/graph/buildGraph.js +81 -0
- package/dist/graph/buildGraph.js.map +1 -0
- package/dist/graph/cache.d.ts +111 -0
- package/dist/graph/cache.d.ts.map +1 -0
- package/dist/graph/cache.js +237 -0
- package/dist/graph/cache.js.map +1 -0
- package/dist/graph/metrics.d.ts +12 -0
- package/dist/graph/metrics.d.ts.map +1 -0
- package/dist/graph/metrics.js +253 -0
- package/dist/graph/metrics.js.map +1 -0
- package/dist/graph/minHeap.d.ts +91 -0
- package/dist/graph/minHeap.d.ts.map +1 -0
- package/dist/graph/minHeap.js +159 -0
- package/dist/graph/minHeap.js.map +1 -0
- package/dist/graph/overview.d.ts +22 -0
- package/dist/graph/overview.d.ts.map +1 -0
- package/dist/graph/overview.js +379 -0
- package/dist/graph/overview.js.map +1 -0
- package/dist/graph/score.d.ts +27 -0
- package/dist/graph/score.d.ts.map +1 -0
- package/dist/graph/score.js +214 -0
- package/dist/graph/score.js.map +1 -0
- package/dist/graph/slice.d.ts +51 -0
- package/dist/graph/slice.d.ts.map +1 -0
- package/dist/graph/slice.js +1047 -0
- package/dist/graph/slice.js.map +1 -0
- package/dist/graph/sliceCache.d.ts +33 -0
- package/dist/graph/sliceCache.d.ts.map +1 -0
- package/dist/graph/sliceCache.js +140 -0
- package/dist/graph/sliceCache.js.map +1 -0
- package/dist/indexer/adapter/BaseAdapter.d.ts +29 -0
- package/dist/indexer/adapter/BaseAdapter.d.ts.map +1 -0
- package/dist/indexer/adapter/BaseAdapter.js +97 -0
- package/dist/indexer/adapter/BaseAdapter.js.map +1 -0
- package/dist/indexer/adapter/LanguageAdapter.d.ts +20 -0
- package/dist/indexer/adapter/LanguageAdapter.d.ts.map +1 -0
- package/dist/indexer/adapter/LanguageAdapter.js +2 -0
- package/dist/indexer/adapter/LanguageAdapter.js.map +1 -0
- package/dist/indexer/adapter/adapters.d.ts +57 -0
- package/dist/indexer/adapter/adapters.d.ts.map +1 -0
- package/dist/indexer/adapter/adapters.js +129 -0
- package/dist/indexer/adapter/adapters.js.map +1 -0
- package/dist/indexer/adapter/c.d.ts +18 -0
- package/dist/indexer/adapter/c.d.ts.map +1 -0
- package/dist/indexer/adapter/c.js +443 -0
- package/dist/indexer/adapter/c.js.map +1 -0
- package/dist/indexer/adapter/cpp.d.ts +18 -0
- package/dist/indexer/adapter/cpp.d.ts.map +1 -0
- package/dist/indexer/adapter/cpp.js +493 -0
- package/dist/indexer/adapter/cpp.js.map +1 -0
- package/dist/indexer/adapter/csharp.d.ts +48 -0
- package/dist/indexer/adapter/csharp.d.ts.map +1 -0
- package/dist/indexer/adapter/csharp.js +638 -0
- package/dist/indexer/adapter/csharp.js.map +1 -0
- package/dist/indexer/adapter/go.d.ts +14 -0
- package/dist/indexer/adapter/go.d.ts.map +1 -0
- package/dist/indexer/adapter/go.js +400 -0
- package/dist/indexer/adapter/go.js.map +1 -0
- package/dist/indexer/adapter/index.d.ts +14 -0
- package/dist/indexer/adapter/index.d.ts.map +1 -0
- package/dist/indexer/adapter/index.js +13 -0
- package/dist/indexer/adapter/index.js.map +1 -0
- package/dist/indexer/adapter/java.d.ts +14 -0
- package/dist/indexer/adapter/java.d.ts.map +1 -0
- package/dist/indexer/adapter/java.js +391 -0
- package/dist/indexer/adapter/java.js.map +1 -0
- package/dist/indexer/adapter/kotlin.d.ts +18 -0
- package/dist/indexer/adapter/kotlin.d.ts.map +1 -0
- package/dist/indexer/adapter/kotlin.js +599 -0
- package/dist/indexer/adapter/kotlin.js.map +1 -0
- package/dist/indexer/adapter/php.d.ts +18 -0
- package/dist/indexer/adapter/php.d.ts.map +1 -0
- package/dist/indexer/adapter/php.js +574 -0
- package/dist/indexer/adapter/php.js.map +1 -0
- package/dist/indexer/adapter/plugin/index.d.ts +3 -0
- package/dist/indexer/adapter/plugin/index.d.ts.map +1 -0
- package/dist/indexer/adapter/plugin/index.js +3 -0
- package/dist/indexer/adapter/plugin/index.js.map +1 -0
- package/dist/indexer/adapter/plugin/loader.d.ts +13 -0
- package/dist/indexer/adapter/plugin/loader.d.ts.map +1 -0
- package/dist/indexer/adapter/plugin/loader.js +154 -0
- package/dist/indexer/adapter/plugin/loader.js.map +1 -0
- package/dist/indexer/adapter/plugin/types.d.ts +76 -0
- package/dist/indexer/adapter/plugin/types.d.ts.map +1 -0
- package/dist/indexer/adapter/plugin/types.js +47 -0
- package/dist/indexer/adapter/plugin/types.js.map +1 -0
- package/dist/indexer/adapter/python.d.ts +14 -0
- package/dist/indexer/adapter/python.d.ts.map +1 -0
- package/dist/indexer/adapter/python.js +511 -0
- package/dist/indexer/adapter/python.js.map +1 -0
- package/dist/indexer/adapter/registry.d.ts +17 -0
- package/dist/indexer/adapter/registry.d.ts.map +1 -0
- package/dist/indexer/adapter/registry.js +134 -0
- package/dist/indexer/adapter/registry.js.map +1 -0
- package/dist/indexer/adapter/rust.d.ts +18 -0
- package/dist/indexer/adapter/rust.d.ts.map +1 -0
- package/dist/indexer/adapter/rust.js +709 -0
- package/dist/indexer/adapter/rust.js.map +1 -0
- package/dist/indexer/adapter/shell.d.ts +18 -0
- package/dist/indexer/adapter/shell.d.ts.map +1 -0
- package/dist/indexer/adapter/shell.js +345 -0
- package/dist/indexer/adapter/shell.js.map +1 -0
- package/dist/indexer/adapter/typescript.d.ts +14 -0
- package/dist/indexer/adapter/typescript.d.ts.map +1 -0
- package/dist/indexer/adapter/typescript.js +31 -0
- package/dist/indexer/adapter/typescript.js.map +1 -0
- package/dist/indexer/configEdges.d.ts +30 -0
- package/dist/indexer/configEdges.d.ts.map +1 -0
- package/dist/indexer/configEdges.js +260 -0
- package/dist/indexer/configEdges.js.map +1 -0
- package/dist/indexer/fileScanner.d.ts +16 -0
- package/dist/indexer/fileScanner.d.ts.map +1 -0
- package/dist/indexer/fileScanner.js +90 -0
- package/dist/indexer/fileScanner.js.map +1 -0
- package/dist/indexer/fingerprints.d.ts +23 -0
- package/dist/indexer/fingerprints.d.ts.map +1 -0
- package/dist/indexer/fingerprints.js +97 -0
- package/dist/indexer/fingerprints.js.map +1 -0
- package/dist/indexer/indexer.d.ts +58 -0
- package/dist/indexer/indexer.d.ts.map +1 -0
- package/dist/indexer/indexer.js +1229 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/indexer/summaries.d.ts +5 -0
- package/dist/indexer/summaries.d.ts.map +1 -0
- package/dist/indexer/summaries.js +331 -0
- package/dist/indexer/summaries.js.map +1 -0
- package/dist/indexer/treesitter/extractCalls.d.ts +40 -0
- package/dist/indexer/treesitter/extractCalls.d.ts.map +1 -0
- package/dist/indexer/treesitter/extractCalls.js +561 -0
- package/dist/indexer/treesitter/extractCalls.js.map +1 -0
- package/dist/indexer/treesitter/extractImports.d.ts +12 -0
- package/dist/indexer/treesitter/extractImports.d.ts.map +1 -0
- package/dist/indexer/treesitter/extractImports.js +184 -0
- package/dist/indexer/treesitter/extractImports.js.map +1 -0
- package/dist/indexer/treesitter/extractSymbols.d.ts +24 -0
- package/dist/indexer/treesitter/extractSymbols.d.ts.map +1 -0
- package/dist/indexer/treesitter/extractSymbols.js +389 -0
- package/dist/indexer/treesitter/extractSymbols.js.map +1 -0
- package/dist/indexer/treesitter/grammarLoader.d.ts +6 -0
- package/dist/indexer/treesitter/grammarLoader.d.ts.map +1 -0
- package/dist/indexer/treesitter/grammarLoader.js +125 -0
- package/dist/indexer/treesitter/grammarLoader.js.map +1 -0
- package/dist/indexer/treesitter/symbolUtils.d.ts +4 -0
- package/dist/indexer/treesitter/symbolUtils.d.ts.map +1 -0
- package/dist/indexer/treesitter/symbolUtils.js +26 -0
- package/dist/indexer/treesitter/symbolUtils.js.map +1 -0
- package/dist/indexer/treesitter/tsTreesitter.d.ts +9 -0
- package/dist/indexer/treesitter/tsTreesitter.d.ts.map +1 -0
- package/dist/indexer/treesitter/tsTreesitter.js +54 -0
- package/dist/indexer/treesitter/tsTreesitter.js.map +1 -0
- package/dist/indexer/treesitter/types.d.ts +19 -0
- package/dist/indexer/treesitter/types.d.ts.map +1 -0
- package/dist/indexer/treesitter/types.js +7 -0
- package/dist/indexer/treesitter/types.js.map +1 -0
- package/dist/indexer/ts/tsParser.d.ts +20 -0
- package/dist/indexer/ts/tsParser.d.ts.map +1 -0
- package/dist/indexer/ts/tsParser.js +114 -0
- package/dist/indexer/ts/tsParser.js.map +1 -0
- package/dist/indexer/worker.d.ts +2 -0
- package/dist/indexer/worker.d.ts.map +1 -0
- package/dist/indexer/worker.js +59 -0
- package/dist/indexer/worker.js.map +1 -0
- package/dist/indexer/workerPool.d.ts +20 -0
- package/dist/indexer/workerPool.d.ts.map +1 -0
- package/dist/indexer/workerPool.js +93 -0
- package/dist/indexer/workerPool.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +111 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/errors.d.ts +40 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +66 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/resources.d.ts +24 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +140 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/telemetry.d.ts +67 -0
- package/dist/mcp/telemetry.d.ts.map +1 -0
- package/dist/mcp/telemetry.js +128 -0
- package/dist/mcp/telemetry.js.map +1 -0
- package/dist/mcp/tools/agent.d.ts +241 -0
- package/dist/mcp/tools/agent.d.ts.map +1 -0
- package/dist/mcp/tools/agent.js +113 -0
- package/dist/mcp/tools/agent.js.map +1 -0
- package/dist/mcp/tools/code.d.ts +32 -0
- package/dist/mcp/tools/code.d.ts.map +1 -0
- package/dist/mcp/tools/code.js +388 -0
- package/dist/mcp/tools/code.js.map +1 -0
- package/dist/mcp/tools/delta.d.ts +12 -0
- package/dist/mcp/tools/delta.d.ts.map +1 -0
- package/dist/mcp/tools/delta.js +82 -0
- package/dist/mcp/tools/delta.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +3 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +35 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/policy.d.ts +20 -0
- package/dist/mcp/tools/policy.d.ts.map +1 -0
- package/dist/mcp/tools/policy.js +67 -0
- package/dist/mcp/tools/policy.js.map +1 -0
- package/dist/mcp/tools/prRisk.d.ts +34 -0
- package/dist/mcp/tools/prRisk.d.ts.map +1 -0
- package/dist/mcp/tools/prRisk.js +304 -0
- package/dist/mcp/tools/prRisk.js.map +1 -0
- package/dist/mcp/tools/repo.d.ts +46 -0
- package/dist/mcp/tools/repo.d.ts.map +1 -0
- package/dist/mcp/tools/repo.js +224 -0
- package/dist/mcp/tools/repo.js.map +1 -0
- package/dist/mcp/tools/slice.d.ts +44 -0
- package/dist/mcp/tools/slice.d.ts.map +1 -0
- package/dist/mcp/tools/slice.js +688 -0
- package/dist/mcp/tools/slice.js.map +1 -0
- package/dist/mcp/tools/symbol.d.ts +21 -0
- package/dist/mcp/tools/symbol.d.ts.map +1 -0
- package/dist/mcp/tools/symbol.js +416 -0
- package/dist/mcp/tools/symbol.js.map +1 -0
- package/dist/mcp/tools.d.ts +6003 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +932 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +500 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/policy/engine.d.ts +21 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +477 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/types.d.ts +73 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +12 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +136 -0
- package/dist/server.js.map +1 -0
- package/dist/sync/pull.d.ts +4 -0
- package/dist/sync/pull.d.ts.map +1 -0
- package/dist/sync/pull.js +113 -0
- package/dist/sync/pull.js.map +1 -0
- package/dist/sync/sync.d.ts +6 -0
- package/dist/sync/sync.d.ts.map +1 -0
- package/dist/sync/sync.js +244 -0
- package/dist/sync/sync.js.map +1 -0
- package/dist/sync/types.d.ts +136 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +2 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/ts/diagnostics.d.ts +61 -0
- package/dist/ts/diagnostics.d.ts.map +1 -0
- package/dist/ts/diagnostics.js +259 -0
- package/dist/ts/diagnostics.js.map +1 -0
- package/dist/ts/mapping.d.ts +27 -0
- package/dist/ts/mapping.d.ts.map +1 -0
- package/dist/ts/mapping.js +68 -0
- package/dist/ts/mapping.js.map +1 -0
- package/dist/util/asyncFs.d.ts +103 -0
- package/dist/util/asyncFs.d.ts.map +1 -0
- package/dist/util/asyncFs.js +133 -0
- package/dist/util/asyncFs.js.map +1 -0
- package/dist/util/concurrency.d.ts +77 -0
- package/dist/util/concurrency.d.ts.map +1 -0
- package/dist/util/concurrency.js +146 -0
- package/dist/util/concurrency.js.map +1 -0
- package/dist/util/depLabels.d.ts +3 -0
- package/dist/util/depLabels.d.ts.map +1 -0
- package/dist/util/depLabels.js +19 -0
- package/dist/util/depLabels.js.map +1 -0
- package/dist/util/findPackageRoot.d.ts +7 -0
- package/dist/util/findPackageRoot.d.ts.map +1 -0
- package/dist/util/findPackageRoot.js +21 -0
- package/dist/util/findPackageRoot.js.map +1 -0
- package/dist/util/hashing.d.ts +9 -0
- package/dist/util/hashing.d.ts.map +1 -0
- package/dist/util/hashing.js +37 -0
- package/dist/util/hashing.js.map +1 -0
- package/dist/util/logger.d.ts +14 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +51 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/paths.d.ts +6 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +79 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.d.ts.map +1 -0
- package/dist/util/time.js +20 -0
- package/dist/util/time.js.map +1 -0
- package/dist/util/tokenize.d.ts +5 -0
- package/dist/util/tokenize.d.ts.map +1 -0
- package/dist/util/tokenize.js +30 -0
- package/dist/util/tokenize.js.map +1 -0
- package/dist/util/truncation.d.ts +38 -0
- package/dist/util/truncation.d.ts.map +1 -0
- package/dist/util/truncation.js +259 -0
- package/dist/util/truncation.js.map +1 -0
- package/migrations/.gitkeep +1 -0
- package/migrations/0001_init.sql +61 -0
- package/migrations/0002_edges_indexes.sql +2 -0
- package/migrations/0003_versions.sql +22 -0
- package/migrations/0004_metrics_audit.sql +23 -0
- package/migrations/0005_slice_handles.sql +15 -0
- package/migrations/0006_content_addressed.sql +29 -0
- package/migrations/0007_add_language_to_symbols.sql +28 -0
- package/migrations/0008_performance_indexes.sql +21 -0
- package/migrations/0009_fix_edge_fks.sql +37 -0
- package/migrations/0010_standardize_fks.sql +35 -0
- package/migrations/0011_add_directory_column.sql +20 -0
- package/migrations/0012_symbol_references.sql +16 -0
- package/migrations/0013_sync_artifacts.sql +17 -0
- package/package.json +107 -0
- package/templates/CLAUDE.md.template +179 -0
- package/templates/README.md +228 -0
- package/templates/claude-code.json +54 -0
- package/templates/codex.json +55 -0
- package/templates/gemini.json +66 -0
- package/templates/opencode.json +90 -0
- package/templates/plugin-template/LICENSE +21 -0
- package/templates/plugin-template/README.md +309 -0
- package/templates/plugin-template/index.ts +160 -0
- package/templates/plugin-template/package.json +31 -0
- package/templates/plugin-template/test/plugin.test.ts +186 -0
- package/templates/plugin-template/tsconfig.json +21 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async file system operations with concurrency control.
|
|
3
|
+
*
|
|
4
|
+
* Wraps Node.js fs operations with async/await and applies
|
|
5
|
+
* concurrency limits to prevent resource exhaustion.
|
|
6
|
+
*/
|
|
7
|
+
import { ConcurrencyLimiter } from "./concurrency.js";
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for async file operations.
|
|
10
|
+
*/
|
|
11
|
+
export interface AsyncFsConfig {
|
|
12
|
+
/**
|
|
13
|
+
* Maximum concurrent file read operations.
|
|
14
|
+
*/
|
|
15
|
+
maxConcurrentReads?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum concurrent file stat operations.
|
|
18
|
+
*/
|
|
19
|
+
maxConcurrentStats?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Concurrency limiter instance (optional, overrides maxConcurrent settings).
|
|
22
|
+
*/
|
|
23
|
+
limiter?: ConcurrencyLimiter;
|
|
24
|
+
}
|
|
25
|
+
declare class AsyncFsOperations {
|
|
26
|
+
private readLimiter;
|
|
27
|
+
private statLimiter;
|
|
28
|
+
constructor(config?: AsyncFsConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Reads a file's content asynchronously with concurrency control.
|
|
31
|
+
*
|
|
32
|
+
* @param filePath - Path to the file to read
|
|
33
|
+
* @param encoding - File encoding (default: "utf-8")
|
|
34
|
+
* @returns Promise that resolves with file content
|
|
35
|
+
*/
|
|
36
|
+
readFile(filePath: string, encoding?: BufferEncoding): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Gets file statistics asynchronously with concurrency control.
|
|
39
|
+
*
|
|
40
|
+
* @param filePath - Path to the file
|
|
41
|
+
* @returns Promise that resolves with file stats
|
|
42
|
+
*/
|
|
43
|
+
stat(filePath: string): Promise<import("fs").Stats>;
|
|
44
|
+
/**
|
|
45
|
+
* Checks if a file exists asynchronously.
|
|
46
|
+
*
|
|
47
|
+
* @param filePath - Path to check
|
|
48
|
+
* @returns Promise that resolves with true if file exists
|
|
49
|
+
*/
|
|
50
|
+
exists(filePath: string): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Checks if a file is readable asynchronously.
|
|
53
|
+
*
|
|
54
|
+
* @param filePath - Path to check
|
|
55
|
+
* @returns Promise that resolves with true if file is readable
|
|
56
|
+
*/
|
|
57
|
+
isReadable(filePath: string): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Gets file size asynchronously with caching hint.
|
|
60
|
+
*
|
|
61
|
+
* @param filePath - Path to the file
|
|
62
|
+
* @returns Promise that resolves with file size in bytes
|
|
63
|
+
*/
|
|
64
|
+
getFileSize(filePath: string): Promise<number>;
|
|
65
|
+
/**
|
|
66
|
+
* Gets file modification time asynchronously.
|
|
67
|
+
*
|
|
68
|
+
* @param filePath - Path to the file
|
|
69
|
+
* @returns Promise that resolves with modification timestamp
|
|
70
|
+
*/
|
|
71
|
+
getMtime(filePath: string): Promise<Date>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Creates a new async file system operations instance with optional config.
|
|
75
|
+
*
|
|
76
|
+
* @param config - Optional configuration
|
|
77
|
+
* @returns New AsyncFsOperations instance
|
|
78
|
+
*/
|
|
79
|
+
export declare function createAsyncFsOperations(config?: AsyncFsConfig): AsyncFsOperations;
|
|
80
|
+
/**
|
|
81
|
+
* Convenience function to read a file with concurrency control.
|
|
82
|
+
*
|
|
83
|
+
* @param filePath - Path to the file
|
|
84
|
+
* @param encoding - File encoding
|
|
85
|
+
* @returns Promise that resolves with file content
|
|
86
|
+
*/
|
|
87
|
+
export declare function readFileAsync(filePath: string, encoding?: BufferEncoding): Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* Convenience function to get file stats with concurrency control.
|
|
90
|
+
*
|
|
91
|
+
* @param filePath - Path to the file
|
|
92
|
+
* @returns Promise that resolves with file stats
|
|
93
|
+
*/
|
|
94
|
+
export declare function statAsync(filePath: string): Promise<import("fs").Stats>;
|
|
95
|
+
/**
|
|
96
|
+
* Convenience function to check if file exists asynchronously.
|
|
97
|
+
*
|
|
98
|
+
* @param filePath - Path to check
|
|
99
|
+
* @returns Promise that resolves with true if file exists
|
|
100
|
+
*/
|
|
101
|
+
export declare function existsAsync(filePath: string): Promise<boolean>;
|
|
102
|
+
export {};
|
|
103
|
+
//# sourceMappingURL=asyncFs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncFs.d.ts","sourceRoot":"","sources":["../../src/util/asyncFs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,cAAM,iBAAiB;IACrB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,GAAE,aAAkB;IAoBtC;;;;;;OAMG;IACG,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,cAAwB,GACjC,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;;OAKG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,KAAK,CAAC;IAIzD;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAShD;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASpD;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpD;;;;;OAKG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIhD;AAID;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,CAAC,EAAE,aAAa,GACrB,iBAAiB,CAEnB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,KAAK,CAAC,CAE7E;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async file system operations with concurrency control.
|
|
3
|
+
*
|
|
4
|
+
* Wraps Node.js fs operations with async/await and applies
|
|
5
|
+
* concurrency limits to prevent resource exhaustion.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile, stat, access, constants } from "fs/promises";
|
|
8
|
+
import { ConcurrencyLimiter } from "./concurrency.js";
|
|
9
|
+
class AsyncFsOperations {
|
|
10
|
+
readLimiter;
|
|
11
|
+
statLimiter;
|
|
12
|
+
constructor(config = {}) {
|
|
13
|
+
const { maxConcurrentReads = 10, maxConcurrentStats = 10, limiter, } = config;
|
|
14
|
+
this.readLimiter =
|
|
15
|
+
limiter ??
|
|
16
|
+
new ConcurrencyLimiter({
|
|
17
|
+
maxConcurrency: maxConcurrentReads,
|
|
18
|
+
});
|
|
19
|
+
this.statLimiter =
|
|
20
|
+
limiter ??
|
|
21
|
+
new ConcurrencyLimiter({
|
|
22
|
+
maxConcurrency: maxConcurrentStats,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Reads a file's content asynchronously with concurrency control.
|
|
27
|
+
*
|
|
28
|
+
* @param filePath - Path to the file to read
|
|
29
|
+
* @param encoding - File encoding (default: "utf-8")
|
|
30
|
+
* @returns Promise that resolves with file content
|
|
31
|
+
*/
|
|
32
|
+
async readFile(filePath, encoding = "utf-8") {
|
|
33
|
+
return this.readLimiter.run(() => readFile(filePath, encoding));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Gets file statistics asynchronously with concurrency control.
|
|
37
|
+
*
|
|
38
|
+
* @param filePath - Path to the file
|
|
39
|
+
* @returns Promise that resolves with file stats
|
|
40
|
+
*/
|
|
41
|
+
async stat(filePath) {
|
|
42
|
+
return this.statLimiter.run(() => stat(filePath));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Checks if a file exists asynchronously.
|
|
46
|
+
*
|
|
47
|
+
* @param filePath - Path to check
|
|
48
|
+
* @returns Promise that resolves with true if file exists
|
|
49
|
+
*/
|
|
50
|
+
async exists(filePath) {
|
|
51
|
+
try {
|
|
52
|
+
await access(filePath, constants.F_OK);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Checks if a file is readable asynchronously.
|
|
61
|
+
*
|
|
62
|
+
* @param filePath - Path to check
|
|
63
|
+
* @returns Promise that resolves with true if file is readable
|
|
64
|
+
*/
|
|
65
|
+
async isReadable(filePath) {
|
|
66
|
+
try {
|
|
67
|
+
await access(filePath, constants.R_OK);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Gets file size asynchronously with caching hint.
|
|
76
|
+
*
|
|
77
|
+
* @param filePath - Path to the file
|
|
78
|
+
* @returns Promise that resolves with file size in bytes
|
|
79
|
+
*/
|
|
80
|
+
async getFileSize(filePath) {
|
|
81
|
+
const stats = await this.stat(filePath);
|
|
82
|
+
return stats.size;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Gets file modification time asynchronously.
|
|
86
|
+
*
|
|
87
|
+
* @param filePath - Path to the file
|
|
88
|
+
* @returns Promise that resolves with modification timestamp
|
|
89
|
+
*/
|
|
90
|
+
async getMtime(filePath) {
|
|
91
|
+
const stats = await this.stat(filePath);
|
|
92
|
+
return stats.mtime;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const defaultInstance = new AsyncFsOperations();
|
|
96
|
+
/**
|
|
97
|
+
* Creates a new async file system operations instance with optional config.
|
|
98
|
+
*
|
|
99
|
+
* @param config - Optional configuration
|
|
100
|
+
* @returns New AsyncFsOperations instance
|
|
101
|
+
*/
|
|
102
|
+
export function createAsyncFsOperations(config) {
|
|
103
|
+
return new AsyncFsOperations(config);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Convenience function to read a file with concurrency control.
|
|
107
|
+
*
|
|
108
|
+
* @param filePath - Path to the file
|
|
109
|
+
* @param encoding - File encoding
|
|
110
|
+
* @returns Promise that resolves with file content
|
|
111
|
+
*/
|
|
112
|
+
export async function readFileAsync(filePath, encoding) {
|
|
113
|
+
return defaultInstance.readFile(filePath, encoding);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Convenience function to get file stats with concurrency control.
|
|
117
|
+
*
|
|
118
|
+
* @param filePath - Path to the file
|
|
119
|
+
* @returns Promise that resolves with file stats
|
|
120
|
+
*/
|
|
121
|
+
export async function statAsync(filePath) {
|
|
122
|
+
return defaultInstance.stat(filePath);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Convenience function to check if file exists asynchronously.
|
|
126
|
+
*
|
|
127
|
+
* @param filePath - Path to check
|
|
128
|
+
* @returns Promise that resolves with true if file exists
|
|
129
|
+
*/
|
|
130
|
+
export async function existsAsync(filePath) {
|
|
131
|
+
return defaultInstance.exists(filePath);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=asyncFs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncFs.js","sourceRoot":"","sources":["../../src/util/asyncFs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concurrency limiter utility for controlling parallel operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides a simple semaphore-based mechanism to limit the number of
|
|
5
|
+
* concurrent operations, preventing resource exhaustion and improving
|
|
6
|
+
* performance under load.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const limiter = new ConcurrencyLimiter(4); // Limit to 4 concurrent operations
|
|
11
|
+
* await limiter.run(() => readFileAsync(path));
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export interface ConcurrencyLimiterOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Maximum number of concurrent operations allowed.
|
|
17
|
+
*/
|
|
18
|
+
maxConcurrency: number;
|
|
19
|
+
/**
|
|
20
|
+
* Optional timeout for queued operations in milliseconds.
|
|
21
|
+
* If not provided, operations wait indefinitely.
|
|
22
|
+
*/
|
|
23
|
+
queueTimeoutMs?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class ConcurrencyLimiter {
|
|
26
|
+
private maxConcurrency;
|
|
27
|
+
private queueTimeoutMs;
|
|
28
|
+
private activeCount;
|
|
29
|
+
private queue;
|
|
30
|
+
constructor(options: ConcurrencyLimiterOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Executes a task within the concurrency limit.
|
|
33
|
+
*
|
|
34
|
+
* @param task - Async function to execute
|
|
35
|
+
* @param timeoutMs - Optional timeout override for this specific task
|
|
36
|
+
* @returns Promise that resolves with the task's result
|
|
37
|
+
*/
|
|
38
|
+
run<T>(task: () => Promise<T>, timeoutMs?: number): Promise<T>;
|
|
39
|
+
private executeTask;
|
|
40
|
+
private processQueue;
|
|
41
|
+
/**
|
|
42
|
+
* Gets current statistics about the limiter.
|
|
43
|
+
*
|
|
44
|
+
* @returns Object with active count and queue length
|
|
45
|
+
*/
|
|
46
|
+
getStats(): {
|
|
47
|
+
active: number;
|
|
48
|
+
queued: number;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Clears all pending tasks from the queue.
|
|
52
|
+
*
|
|
53
|
+
* @param error - Optional error to reject all queued tasks with
|
|
54
|
+
*/
|
|
55
|
+
clearQueue(error?: Error): void;
|
|
56
|
+
/**
|
|
57
|
+
* Waits for all active tasks to complete.
|
|
58
|
+
*
|
|
59
|
+
* @returns Promise that resolves when no tasks are active
|
|
60
|
+
*/
|
|
61
|
+
drain(): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Creates a limiter for file system operations.
|
|
65
|
+
*
|
|
66
|
+
* @param concurrency - Maximum concurrent file operations
|
|
67
|
+
* @returns Configured ConcurrencyLimiter
|
|
68
|
+
*/
|
|
69
|
+
export declare function createFileIOLimiter(concurrency: number): ConcurrencyLimiter;
|
|
70
|
+
/**
|
|
71
|
+
* Creates a limiter for database operations.
|
|
72
|
+
*
|
|
73
|
+
* @param concurrency - Maximum concurrent database queries
|
|
74
|
+
* @returns Configured ConcurrencyLimiter
|
|
75
|
+
*/
|
|
76
|
+
export declare function createDbIOLimiter(concurrency: number): ConcurrencyLimiter;
|
|
77
|
+
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/util/concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAIV;gBAES,OAAO,EAAE,yBAAyB;IAW9C;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAoCtD,WAAW;IAyBzB,OAAO,CAAC,YAAY;IAWpB;;;;OAIG;IACH,QAAQ,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAO9C;;;;OAIG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAU/B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAI3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAIzE"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concurrency limiter utility for controlling parallel operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides a simple semaphore-based mechanism to limit the number of
|
|
5
|
+
* concurrent operations, preventing resource exhaustion and improving
|
|
6
|
+
* performance under load.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const limiter = new ConcurrencyLimiter(4); // Limit to 4 concurrent operations
|
|
11
|
+
* await limiter.run(() => readFileAsync(path));
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export class ConcurrencyLimiter {
|
|
15
|
+
maxConcurrency;
|
|
16
|
+
queueTimeoutMs;
|
|
17
|
+
activeCount;
|
|
18
|
+
queue;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
if (options.maxConcurrency < 1) {
|
|
21
|
+
throw new Error("maxConcurrency must be at least 1");
|
|
22
|
+
}
|
|
23
|
+
this.maxConcurrency = options.maxConcurrency;
|
|
24
|
+
this.queueTimeoutMs = options.queueTimeoutMs;
|
|
25
|
+
this.activeCount = 0;
|
|
26
|
+
this.queue = [];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Executes a task within the concurrency limit.
|
|
30
|
+
*
|
|
31
|
+
* @param task - Async function to execute
|
|
32
|
+
* @param timeoutMs - Optional timeout override for this specific task
|
|
33
|
+
* @returns Promise that resolves with the task's result
|
|
34
|
+
*/
|
|
35
|
+
async run(task, timeoutMs) {
|
|
36
|
+
if (this.activeCount < this.maxConcurrency) {
|
|
37
|
+
return this.executeTask(task, timeoutMs);
|
|
38
|
+
}
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
const timeout = timeoutMs ?? this.queueTimeoutMs ?? undefined;
|
|
41
|
+
let timeoutHandle;
|
|
42
|
+
const item = {
|
|
43
|
+
resolve: resolve,
|
|
44
|
+
reject,
|
|
45
|
+
task: () => {
|
|
46
|
+
if (timeoutHandle) {
|
|
47
|
+
clearTimeout(timeoutHandle);
|
|
48
|
+
}
|
|
49
|
+
return task();
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
if (timeout) {
|
|
53
|
+
timeoutHandle = setTimeout(() => {
|
|
54
|
+
const index = this.queue.indexOf(item);
|
|
55
|
+
if (index !== -1) {
|
|
56
|
+
this.queue.splice(index, 1);
|
|
57
|
+
}
|
|
58
|
+
reject(new Error(`ConcurrencyLimiter queue timeout after ${timeout}ms`));
|
|
59
|
+
}, timeout);
|
|
60
|
+
}
|
|
61
|
+
this.queue.push(item);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async executeTask(task, timeoutMs) {
|
|
65
|
+
this.activeCount++;
|
|
66
|
+
try {
|
|
67
|
+
if (timeoutMs) {
|
|
68
|
+
return await Promise.race([
|
|
69
|
+
task(),
|
|
70
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Task timeout after ${timeoutMs}ms`)), timeoutMs)),
|
|
71
|
+
]);
|
|
72
|
+
}
|
|
73
|
+
return await task();
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
this.activeCount--;
|
|
77
|
+
this.processQueue();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
processQueue() {
|
|
81
|
+
while (this.queue.length > 0 && this.activeCount < this.maxConcurrency) {
|
|
82
|
+
const item = this.queue.shift();
|
|
83
|
+
if (item) {
|
|
84
|
+
this.executeTask(item.task)
|
|
85
|
+
.then((result) => item.resolve(result))
|
|
86
|
+
.catch((error) => item.reject(error));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets current statistics about the limiter.
|
|
92
|
+
*
|
|
93
|
+
* @returns Object with active count and queue length
|
|
94
|
+
*/
|
|
95
|
+
getStats() {
|
|
96
|
+
return {
|
|
97
|
+
active: this.activeCount,
|
|
98
|
+
queued: this.queue.length,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Clears all pending tasks from the queue.
|
|
103
|
+
*
|
|
104
|
+
* @param error - Optional error to reject all queued tasks with
|
|
105
|
+
*/
|
|
106
|
+
clearQueue(error) {
|
|
107
|
+
const errorToUse = error ?? new Error("ConcurrencyLimiter queue cleared");
|
|
108
|
+
for (const item of this.queue) {
|
|
109
|
+
item.reject(errorToUse);
|
|
110
|
+
}
|
|
111
|
+
this.queue.length = 0;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Waits for all active tasks to complete.
|
|
115
|
+
*
|
|
116
|
+
* @returns Promise that resolves when no tasks are active
|
|
117
|
+
*/
|
|
118
|
+
async drain() {
|
|
119
|
+
while (this.activeCount > 0 || this.queue.length > 0) {
|
|
120
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Creates a limiter for file system operations.
|
|
126
|
+
*
|
|
127
|
+
* @param concurrency - Maximum concurrent file operations
|
|
128
|
+
* @returns Configured ConcurrencyLimiter
|
|
129
|
+
*/
|
|
130
|
+
export function createFileIOLimiter(concurrency) {
|
|
131
|
+
return new ConcurrencyLimiter({
|
|
132
|
+
maxConcurrency: concurrency,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Creates a limiter for database operations.
|
|
137
|
+
*
|
|
138
|
+
* @param concurrency - Maximum concurrent database queries
|
|
139
|
+
* @returns Configured ConcurrencyLimiter
|
|
140
|
+
*/
|
|
141
|
+
export function createDbIOLimiter(concurrency) {
|
|
142
|
+
return new ConcurrencyLimiter({
|
|
143
|
+
maxConcurrency: concurrency,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=concurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/util/concurrency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depLabels.d.ts","sourceRoot":"","sources":["../../src/util/depLabels.ts"],"names":[],"mappings":"AAIA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CActF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DEP_LABEL_MAX_LENGTH } from "../config/constants.js";
|
|
2
|
+
const OPAQUE_SYMBOL_ID_PATTERN = /^[a-f0-9]{64}$/i;
|
|
3
|
+
export function isOpaqueSymbolIdRef(value) {
|
|
4
|
+
return OPAQUE_SYMBOL_ID_PATTERN.test(value);
|
|
5
|
+
}
|
|
6
|
+
export function pickDepLabel(targetId, targetName) {
|
|
7
|
+
if (targetName && targetName.length > 0) {
|
|
8
|
+
return targetName.length > DEP_LABEL_MAX_LENGTH
|
|
9
|
+
? targetName.slice(0, DEP_LABEL_MAX_LENGTH)
|
|
10
|
+
: targetName;
|
|
11
|
+
}
|
|
12
|
+
if (isOpaqueSymbolIdRef(targetId)) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return targetId.length > DEP_LABEL_MAX_LENGTH
|
|
16
|
+
? targetId.slice(0, DEP_LABEL_MAX_LENGTH)
|
|
17
|
+
: targetId;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=depLabels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depLabels.js","sourceRoot":"","sources":["../../src/util/depLabels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAEnD,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,UAAmB;IAChE,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC,MAAM,GAAG,oBAAoB;YAC7C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;YAC3C,CAAC,CAAC,UAAU,CAAC;IACjB,CAAC;IAED,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,GAAG,oBAAoB;QAC3C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;QACzC,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the nearest directory at/above startDir that contains package.json.
|
|
3
|
+
* This lets compiled code (dist/...) locate repo resources (config/, migrations/, etc.)
|
|
4
|
+
* without relying on fragile relative paths.
|
|
5
|
+
*/
|
|
6
|
+
export declare function findPackageRoot(startDir: string, maxDepth?: number): string;
|
|
7
|
+
//# sourceMappingURL=findPackageRoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findPackageRoot.d.ts","sourceRoot":"","sources":["../../src/util/findPackageRoot.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,CAW/E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { dirname, resolve } from "path";
|
|
3
|
+
/**
|
|
4
|
+
* Find the nearest directory at/above startDir that contains package.json.
|
|
5
|
+
* This lets compiled code (dist/...) locate repo resources (config/, migrations/, etc.)
|
|
6
|
+
* without relying on fragile relative paths.
|
|
7
|
+
*/
|
|
8
|
+
export function findPackageRoot(startDir, maxDepth = 10) {
|
|
9
|
+
let dir = resolve(startDir);
|
|
10
|
+
for (let i = 0; i < maxDepth; i++) {
|
|
11
|
+
if (existsSync(resolve(dir, "package.json"))) {
|
|
12
|
+
return dir;
|
|
13
|
+
}
|
|
14
|
+
const parent = dirname(dir);
|
|
15
|
+
if (parent === dir)
|
|
16
|
+
break;
|
|
17
|
+
dir = parent;
|
|
18
|
+
}
|
|
19
|
+
return resolve(startDir);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=findPackageRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findPackageRoot.js","sourceRoot":"","sources":["../../src/util/findPackageRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAExC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,WAAmB,EAAE;IACrE,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SymbolCard } from "../mcp/types.js";
|
|
2
|
+
export type NormalizedValue = null | string | number | boolean | NormalizedValue[] | {
|
|
3
|
+
[key: string]: NormalizedValue;
|
|
4
|
+
};
|
|
5
|
+
export declare function hashContent(content: string): string;
|
|
6
|
+
export declare function generateSymbolId(repoId: string, relPath: string, kind: string, name: string, astFingerprint: string): string;
|
|
7
|
+
export declare function normalizeCard(card: SymbolCard): NormalizedValue;
|
|
8
|
+
export declare function hashCard(card: SymbolCard): string;
|
|
9
|
+
//# sourceMappingURL=hashing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../src/util/hashing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,MAAM,eAAe,GACvB,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,eAAe,EAAE,GACjB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;AAEvC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,MAAM,CAGR;AA4BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAE/D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAIjD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as crypto from "crypto";
|
|
2
|
+
export function hashContent(content) {
|
|
3
|
+
return crypto.createHash("sha256").update(content).digest("hex");
|
|
4
|
+
}
|
|
5
|
+
export function generateSymbolId(repoId, relPath, kind, name, astFingerprint) {
|
|
6
|
+
const combined = `${repoId}:${relPath}:${kind}:${name}:${astFingerprint}`;
|
|
7
|
+
return crypto.createHash("sha256").update(combined).digest("hex");
|
|
8
|
+
}
|
|
9
|
+
function normalizeObject(obj) {
|
|
10
|
+
if (obj === null || obj === undefined) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
if (Array.isArray(obj)) {
|
|
14
|
+
return obj.map(normalizeObject);
|
|
15
|
+
}
|
|
16
|
+
if (typeof obj === "object" && obj !== null) {
|
|
17
|
+
const normalized = {};
|
|
18
|
+
const sortedKeys = Object.keys(obj).sort();
|
|
19
|
+
for (const key of sortedKeys) {
|
|
20
|
+
const value = obj[key];
|
|
21
|
+
if (value !== undefined) {
|
|
22
|
+
normalized[key] = normalizeObject(value);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return normalized;
|
|
26
|
+
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
export function normalizeCard(card) {
|
|
30
|
+
return normalizeObject(card);
|
|
31
|
+
}
|
|
32
|
+
export function hashCard(card) {
|
|
33
|
+
const normalized = normalizeCard(card);
|
|
34
|
+
const canonical = JSON.stringify(normalized);
|
|
35
|
+
return hashContent(canonical);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=hashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.js","sourceRoot":"","sources":["../../src/util/hashing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAWjC,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,OAAe,EACf,IAAY,EACZ,IAAY,EACZ,cAAsB;IAEtB,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;IAC1E,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAoC,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,UAAU,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,GAAsB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
2
|
+
declare class Logger {
|
|
3
|
+
private level;
|
|
4
|
+
constructor(level?: LogLevel);
|
|
5
|
+
private shouldLog;
|
|
6
|
+
setLevel(level: LogLevel): void;
|
|
7
|
+
debug(message: string, meta?: Record<string, unknown>): void;
|
|
8
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
9
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
10
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
11
|
+
}
|
|
12
|
+
export declare const logger: Logger;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAe3D,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAAW;gBAEZ,KAAK,GAAE,QAAiB;IAIpC,OAAO,CAAC,SAAS;IAKjB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAO5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAO3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAO3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAM7D;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|