sdl-mcp 0.11.6 → 0.11.8
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/README.md +17 -244
- package/config/sdlmcp.config.example.json +6 -1
- package/config/sdlmcp.config.json +1 -0
- package/config/sdlmcp.config.schema.json +71 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/agent/context-engine.d.ts.map +1 -1
- package/dist/agent/context-engine.js +4 -1
- package/dist/agent/context-engine.js.map +1 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +4 -6
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +26 -20
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/tool-actions.d.ts.map +1 -1
- package/dist/cli/commands/tool-actions.js +27 -27
- package/dist/cli/commands/tool-actions.js.map +1 -1
- package/dist/code/hotpath.d.ts +2 -1
- package/dist/code/hotpath.d.ts.map +1 -1
- package/dist/code/hotpath.js +31 -5
- package/dist/code/hotpath.js.map +1 -1
- package/dist/code-mode/action-catalog.d.ts.map +1 -1
- package/dist/code-mode/action-catalog.js +18 -3
- package/dist/code-mode/action-catalog.js.map +1 -1
- package/dist/code-mode/index.d.ts.map +1 -1
- package/dist/code-mode/index.js +27 -10
- package/dist/code-mode/index.js.map +1 -1
- package/dist/code-mode/manual-generator.d.ts.map +1 -1
- package/dist/code-mode/manual-generator.js +12 -18
- package/dist/code-mode/manual-generator.js.map +1 -1
- package/dist/code-mode/transforms.d.ts.map +1 -1
- package/dist/code-mode/transforms.js +6 -1
- package/dist/code-mode/transforms.js.map +1 -1
- package/dist/code-mode/types.d.ts +21 -0
- package/dist/code-mode/types.d.ts.map +1 -1
- package/dist/code-mode/types.js +2 -2
- package/dist/code-mode/types.js.map +1 -1
- package/dist/code-mode/workflow-executor.d.ts.map +1 -1
- package/dist/code-mode/workflow-executor.js +179 -12
- package/dist/code-mode/workflow-executor.js.map +1 -1
- package/dist/code-mode/workflow-parser.d.ts +2 -2
- package/dist/code-mode/workflow-parser.d.ts.map +1 -1
- package/dist/code-mode/workflow-parser.js +2 -2
- package/dist/code-mode/workflow-parser.js.map +1 -1
- package/dist/code-mode/workflow-truncation.d.ts +1 -1
- package/dist/code-mode/workflow-truncation.d.ts.map +1 -1
- package/dist/code-mode/workflow-truncation.js +84 -18
- package/dist/code-mode/workflow-truncation.js.map +1 -1
- package/dist/config/admin-metadata.js +2 -2
- package/dist/config/admin-metadata.js.map +1 -1
- package/dist/config/loadConfig.js +4 -4
- package/dist/config/loadConfig.js.map +1 -1
- package/dist/config/types.d.ts +109 -4
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +64 -13
- package/dist/config/types.js.map +1 -1
- package/dist/db/ladybug-edges.d.ts +1 -0
- package/dist/db/ladybug-edges.d.ts.map +1 -1
- package/dist/db/ladybug-edges.js +77 -7
- package/dist/db/ladybug-edges.js.map +1 -1
- package/dist/db/ladybug-processes.d.ts +13 -0
- package/dist/db/ladybug-processes.d.ts.map +1 -1
- package/dist/db/ladybug-processes.js +34 -0
- package/dist/db/ladybug-processes.js.map +1 -1
- package/dist/db/ladybug-scip.d.ts +2 -2
- package/dist/db/ladybug-scip.d.ts.map +1 -1
- package/dist/db/ladybug-scip.js +3 -3
- package/dist/db/ladybug-scip.js.map +1 -1
- package/dist/db/ladybug-symbols.d.ts +1 -0
- package/dist/db/ladybug-symbols.d.ts.map +1 -1
- package/dist/db/ladybug-symbols.js +150 -0
- package/dist/db/ladybug-symbols.js.map +1 -1
- package/dist/db/ladybug.js +2 -2
- package/dist/db/ladybug.js.map +1 -1
- package/dist/delta/blastRadius.d.ts +6 -1
- package/dist/delta/blastRadius.d.ts.map +1 -1
- package/dist/delta/blastRadius.js +137 -29
- package/dist/delta/blastRadius.js.map +1 -1
- package/dist/domain/types.d.ts +13 -0
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/gateway/descriptions.js +1 -1
- package/dist/gateway/descriptions.js.map +1 -1
- package/dist/gateway/router.d.ts.map +1 -1
- package/dist/gateway/router.js +1 -6
- package/dist/gateway/router.js.map +1 -1
- package/dist/gateway/schemas.d.ts +20 -10
- package/dist/gateway/schemas.d.ts.map +1 -1
- package/dist/gateway/schemas.js +54 -19
- package/dist/gateway/schemas.js.map +1 -1
- package/dist/graph/minHeap.d.ts +13 -0
- package/dist/graph/minHeap.d.ts.map +1 -1
- package/dist/graph/minHeap.js +14 -2
- package/dist/graph/minHeap.js.map +1 -1
- package/dist/graph/slice/beam-search-engine.d.ts +1 -0
- package/dist/graph/slice/beam-search-engine.d.ts.map +1 -1
- package/dist/graph/slice/beam-search-engine.js +12 -3
- package/dist/graph/slice/beam-search-engine.js.map +1 -1
- package/dist/graph/slice/start-node-resolver.d.ts.map +1 -1
- package/dist/graph/slice/start-node-resolver.js +8 -7
- package/dist/graph/slice/start-node-resolver.js.map +1 -1
- package/dist/graph/slice.d.ts.map +1 -1
- package/dist/graph/slice.js +4 -0
- package/dist/graph/slice.js.map +1 -1
- package/dist/indexer/adapter/cpp.d.ts.map +1 -1
- package/dist/indexer/adapter/cpp.js +4 -4
- package/dist/indexer/adapter/cpp.js.map +1 -1
- package/dist/indexer/adapter/csharp.js +1 -1
- package/dist/indexer/adapter/csharp.js.map +1 -1
- package/dist/indexer/adapter/generic-tree-sitter.d.ts +32 -0
- package/dist/indexer/adapter/generic-tree-sitter.d.ts.map +1 -0
- package/dist/indexer/adapter/generic-tree-sitter.js +138 -0
- package/dist/indexer/adapter/generic-tree-sitter.js.map +1 -0
- package/dist/indexer/adapter/go.d.ts.map +1 -1
- package/dist/indexer/adapter/go.js +4 -14
- package/dist/indexer/adapter/go.js.map +1 -1
- package/dist/indexer/adapter/php.d.ts.map +1 -1
- package/dist/indexer/adapter/php.js +8 -4
- package/dist/indexer/adapter/php.js.map +1 -1
- package/dist/indexer/adapter/python.d.ts.map +1 -1
- package/dist/indexer/adapter/python.js +4 -0
- package/dist/indexer/adapter/python.js.map +1 -1
- package/dist/indexer/adapter/rust.d.ts.map +1 -1
- package/dist/indexer/adapter/rust.js +8 -0
- package/dist/indexer/adapter/rust.js.map +1 -1
- package/dist/indexer/adapter/shell.d.ts.map +1 -1
- package/dist/indexer/adapter/shell.js +4 -0
- package/dist/indexer/adapter/shell.js.map +1 -1
- package/dist/indexer/derived-refresh-queue.d.ts +2 -2
- package/dist/indexer/derived-refresh-queue.js +3 -3
- package/dist/indexer/fileScanner.d.ts.map +1 -1
- package/dist/indexer/fileScanner.js +33 -0
- package/dist/indexer/fileScanner.js.map +1 -1
- package/dist/indexer/indexer.d.ts +17 -1
- package/dist/indexer/indexer.d.ts.map +1 -1
- package/dist/indexer/indexer.js +415 -265
- package/dist/indexer/indexer.js.map +1 -1
- package/dist/indexer/language-packs.d.ts +18 -0
- package/dist/indexer/language-packs.d.ts.map +1 -0
- package/dist/indexer/language-packs.js +435 -0
- package/dist/indexer/language-packs.js.map +1 -0
- package/dist/indexer/language.d.ts.map +1 -1
- package/dist/indexer/language.js +35 -0
- package/dist/indexer/language.js.map +1 -1
- package/dist/indexer/parser/early-exit.d.ts.map +1 -1
- package/dist/indexer/parser/early-exit.js +3 -1
- package/dist/indexer/parser/early-exit.js.map +1 -1
- package/dist/indexer/parser/rust-process-file.d.ts.map +1 -1
- package/dist/indexer/parser/rust-process-file.js +3 -1
- package/dist/indexer/parser/rust-process-file.js.map +1 -1
- package/dist/indexer/provider-first/executor.d.ts +38 -1
- package/dist/indexer/provider-first/executor.d.ts.map +1 -1
- package/dist/indexer/provider-first/executor.js +541 -18
- package/dist/indexer/provider-first/executor.js.map +1 -1
- package/dist/indexer/provider-first/index.d.ts +2 -2
- package/dist/indexer/provider-first/index.d.ts.map +1 -1
- package/dist/indexer/provider-first/index.js +1 -1
- package/dist/indexer/provider-first/index.js.map +1 -1
- package/dist/indexer/provider-first/lsp-normalizer.d.ts +30 -0
- package/dist/indexer/provider-first/lsp-normalizer.d.ts.map +1 -0
- package/dist/indexer/provider-first/lsp-normalizer.js +233 -0
- package/dist/indexer/provider-first/lsp-normalizer.js.map +1 -0
- package/dist/indexer/provider-first/materializer.d.ts +7 -2
- package/dist/indexer/provider-first/materializer.d.ts.map +1 -1
- package/dist/indexer/provider-first/materializer.js +91 -42
- package/dist/indexer/provider-first/materializer.js.map +1 -1
- package/dist/indexer/provider-first/planner.d.ts.map +1 -1
- package/dist/indexer/provider-first/planner.js +16 -12
- package/dist/indexer/provider-first/planner.js.map +1 -1
- package/dist/indexer/provider-first/scip-normalizer.d.ts.map +1 -1
- package/dist/indexer/provider-first/scip-normalizer.js +68 -11
- package/dist/indexer/provider-first/scip-normalizer.js.map +1 -1
- package/dist/indexer/provider-first/shadow-build.js +1 -1
- package/dist/indexer/provider-first/shadow-build.js.map +1 -1
- package/dist/indexer/provider-first/shadow-finalization.js +1 -1
- package/dist/indexer/provider-first/shadow-finalization.js.map +1 -1
- package/dist/indexer/provider-first/source-call-proof.d.ts.map +1 -1
- package/dist/indexer/provider-first/source-call-proof.js +110 -11
- package/dist/indexer/provider-first/source-call-proof.js.map +1 -1
- package/dist/indexer/treesitter/extractCalls.d.ts +1 -1
- package/dist/indexer/treesitter/extractCalls.d.ts.map +1 -1
- package/dist/indexer/treesitter/extractCalls.js +41 -12
- package/dist/indexer/treesitter/extractCalls.js.map +1 -1
- package/dist/indexer/treesitter/grammarLoader.d.ts +2 -1
- package/dist/indexer/treesitter/grammarLoader.d.ts.map +1 -1
- package/dist/indexer/treesitter/grammarLoader.js +43 -2
- package/dist/indexer/treesitter/grammarLoader.js.map +1 -1
- package/dist/indexer/watcher.d.ts +19 -1
- package/dist/indexer/watcher.d.ts.map +1 -1
- package/dist/indexer/watcher.js +337 -83
- package/dist/indexer/watcher.js.map +1 -1
- package/dist/indexer/watchman-binary.d.ts +22 -0
- package/dist/indexer/watchman-binary.d.ts.map +1 -0
- package/dist/indexer/watchman-binary.js +115 -0
- package/dist/indexer/watchman-binary.js.map +1 -0
- package/dist/indexer/watchman-provider.d.ts +154 -0
- package/dist/indexer/watchman-provider.d.ts.map +1 -0
- package/dist/indexer/watchman-provider.js +450 -0
- package/dist/indexer/watchman-provider.js.map +1 -0
- package/dist/indexer/worker.d.ts.map +1 -1
- package/dist/indexer/worker.js +6 -1
- package/dist/indexer/worker.js.map +1 -1
- package/dist/indexer/workerPool.d.ts +2 -0
- package/dist/indexer/workerPool.d.ts.map +1 -1
- package/dist/indexer/workerPool.js +6 -1
- package/dist/indexer/workerPool.js.map +1 -1
- package/dist/main.js +20 -2
- package/dist/main.js.map +1 -1
- package/dist/mcp/savings-meter.d.ts.map +1 -1
- package/dist/mcp/savings-meter.js +17 -1
- package/dist/mcp/savings-meter.js.map +1 -1
- package/dist/mcp/server-instructions.js +3 -3
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/telemetry.d.ts +13 -0
- package/dist/mcp/telemetry.d.ts.map +1 -1
- package/dist/mcp/telemetry.js +3 -0
- package/dist/mcp/telemetry.js.map +1 -1
- package/dist/mcp/tool-call-formatter.d.ts.map +1 -1
- package/dist/mcp/tool-call-formatter.js +26 -1
- package/dist/mcp/tool-call-formatter.js.map +1 -1
- package/dist/mcp/tools/code.d.ts.map +1 -1
- package/dist/mcp/tools/code.js +10 -2
- package/dist/mcp/tools/code.js.map +1 -1
- package/dist/mcp/tools/context.d.ts.map +1 -1
- package/dist/mcp/tools/context.js +8 -0
- package/dist/mcp/tools/context.js.map +1 -1
- package/dist/mcp/tools/file-read.d.ts.map +1 -1
- package/dist/mcp/tools/file-read.js +23 -7
- package/dist/mcp/tools/file-read.js.map +1 -1
- package/dist/mcp/tools/repo.d.ts.map +1 -1
- package/dist/mcp/tools/repo.js +35 -7
- package/dist/mcp/tools/repo.js.map +1 -1
- package/dist/mcp/tools/response.d.ts.map +1 -1
- package/dist/mcp/tools/response.js +1 -0
- package/dist/mcp/tools/response.js.map +1 -1
- package/dist/mcp/tools/runtime-query.d.ts.map +1 -1
- package/dist/mcp/tools/runtime-query.js +8 -1
- package/dist/mcp/tools/runtime-query.js.map +1 -1
- package/dist/mcp/tools/runtime.d.ts.map +1 -1
- package/dist/mcp/tools/runtime.js +162 -129
- package/dist/mcp/tools/runtime.js.map +1 -1
- package/dist/mcp/tools/symbol.d.ts.map +1 -1
- package/dist/mcp/tools/symbol.js +3 -0
- package/dist/mcp/tools/symbol.js.map +1 -1
- package/dist/mcp/tools/tool-descriptors.d.ts.map +1 -1
- package/dist/mcp/tools/tool-descriptors.js +1 -8
- package/dist/mcp/tools/tool-descriptors.js.map +1 -1
- package/dist/mcp/tools.d.ts +91 -9
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +83 -25
- package/dist/mcp/tools.js.map +1 -1
- package/dist/observability/aggregator.d.ts +31 -0
- package/dist/observability/aggregator.d.ts.map +1 -1
- package/dist/observability/aggregator.js +130 -1
- package/dist/observability/aggregator.js.map +1 -1
- package/dist/observability/event-tap.d.ts +11 -0
- package/dist/observability/event-tap.d.ts.map +1 -1
- package/dist/observability/event-tap.js.map +1 -1
- package/dist/observability/index.d.ts +2 -2
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/service.d.ts +2 -1
- package/dist/observability/service.d.ts.map +1 -1
- package/dist/observability/service.js +16 -0
- package/dist/observability/service.js.map +1 -1
- package/dist/observability/types.d.ts +45 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js.map +1 -1
- package/dist/retrieval/orchestrator.d.ts.map +1 -1
- package/dist/retrieval/orchestrator.js +35 -7
- package/dist/retrieval/orchestrator.js.map +1 -1
- package/dist/runtime/artifacts.d.ts +32 -11
- package/dist/runtime/artifacts.d.ts.map +1 -1
- package/dist/runtime/artifacts.js +84 -11
- package/dist/runtime/artifacts.js.map +1 -1
- package/dist/runtime/response-artifacts.d.ts +1 -0
- package/dist/runtime/response-artifacts.d.ts.map +1 -1
- package/dist/runtime/response-artifacts.js +53 -0
- package/dist/runtime/response-artifacts.js.map +1 -1
- package/dist/runtime/types.d.ts +5 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/scip/ingestion.d.ts +8 -38
- package/dist/scip/ingestion.d.ts.map +1 -1
- package/dist/scip/ingestion.js +61 -221
- package/dist/scip/ingestion.js.map +1 -1
- package/dist/scip/kind-mapping.d.ts +2 -0
- package/dist/scip/kind-mapping.d.ts.map +1 -1
- package/dist/scip/kind-mapping.js +20 -0
- package/dist/scip/kind-mapping.js.map +1 -1
- package/dist/scip/scip-io-runner.d.ts +4 -0
- package/dist/scip/scip-io-runner.d.ts.map +1 -1
- package/dist/scip/scip-io-runner.js +41 -11
- package/dist/scip/scip-io-runner.js.map +1 -1
- package/dist/semantic/enrichment.d.ts.map +1 -1
- package/dist/semantic/enrichment.js +15 -134
- package/dist/semantic/enrichment.js.map +1 -1
- package/dist/semantic/providers/lsp/client.d.ts +3 -1
- package/dist/semantic/providers/lsp/client.d.ts.map +1 -1
- package/dist/semantic/providers/lsp/client.js +231 -23
- package/dist/semantic/providers/lsp/client.js.map +1 -1
- package/dist/semantic/providers/lsp/runner.d.ts +2 -1
- package/dist/semantic/providers/lsp/runner.d.ts.map +1 -1
- package/dist/semantic/providers/lsp/runner.js +1 -0
- package/dist/semantic/providers/lsp/runner.js.map +1 -1
- package/dist/ui/config.js +2 -2
- package/dist/ui/config.js.map +1 -1
- package/dist/ui/observability.css +10 -0
- package/dist/ui/observability.html +30 -0
- package/dist/ui/observability.js +47 -0
- package/dist/ui/observability.js.map +1 -1
- package/dist/util/logger.d.ts.map +1 -1
- package/dist/util/logger.js +11 -3
- package/dist/util/logger.js.map +1 -1
- package/dist/util/runtime-identity.d.ts +8 -0
- package/dist/util/runtime-identity.d.ts.map +1 -1
- package/dist/util/runtime-identity.js +41 -0
- package/dist/util/runtime-identity.js.map +1 -1
- package/package.json +20 -10
- package/scripts/postinstall-watchman.mjs +136 -0
- package/scripts/postinstall.mjs +3 -2
- package/templates/GEMINI.md.template +6 -2
- package/templates/OPENCODE.md.template +7 -1
- package/templates/SDL.md +105 -28
- package/dist/mcp/tools/scip.d.ts +0 -10
- package/dist/mcp/tools/scip.d.ts.map +0 -1
- package/dist/mcp/tools/scip.js +0 -59
- package/dist/mcp/tools/scip.js.map +0 -1
- package/dist/scip/cleanup.d.ts +0 -35
- package/dist/scip/cleanup.d.ts.map +0 -1
- package/dist/scip/cleanup.js +0 -76
- package/dist/scip/cleanup.js.map +0 -1
package/README.md
CHANGED
|
@@ -38,33 +38,7 @@ SDL-MCP fixes this. It indexes your codebase into a searchable **symbol graph**
|
|
|
38
38
|
|
|
39
39
|
## How it works — in 30 seconds
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
43
|
-
flowchart TD
|
|
44
|
-
Codebase["Your Codebase"]
|
|
45
|
-
Indexer["Indexer<br/>12 languages<br/>Rust native or Tree-sitter fallback"]
|
|
46
|
-
Graph["LadybugDB graph<br/>symbols, edges, metrics, versions"]
|
|
47
|
-
MCP["Current MCP surfaces<br/>33 flat, 6 gateway, 4 Code Mode"]
|
|
48
|
-
CLI["13 CLI commands"]
|
|
49
|
-
HTTP["HTTP API and graph UI"]
|
|
50
|
-
Agent["AI coding agent<br/>Claude Code, Claude Desktop, Cursor, Windsurf, Codex, Gemini"]
|
|
51
|
-
|
|
52
|
-
Codebase e1@--> Indexer
|
|
53
|
-
Indexer e2@--> Graph
|
|
54
|
-
Graph e3@--> MCP
|
|
55
|
-
Graph e4@--> CLI
|
|
56
|
-
Graph e5@--> HTTP
|
|
57
|
-
MCP e6@--> Agent
|
|
58
|
-
|
|
59
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
60
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
61
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
62
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
63
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
64
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
65
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
66
|
-
class e1,e2,e3,e4,e5,e6 animate;
|
|
67
|
-
```
|
|
41
|
+

|
|
68
42
|
|
|
69
43
|
1. **Index once** — SDL-MCP parses every symbol in your repo and stores it as a compact metadata record (a "Symbol Card") in a graph database
|
|
70
44
|
2. **Query efficiently** — Agents use MCP tools to search, slice, and retrieve exactly the context they need
|
|
@@ -117,27 +91,7 @@ Point your MCP client at the server and the agent gains access to SDL-MCP's curr
|
|
|
117
91
|
|
|
118
92
|
The core innovation. Named after the adjustable aperture that controls light flow in optics, the Iris Gate Ladder lets agents dial their context "aperture" from a pinhole to wide-open.
|
|
119
93
|
|
|
120
|
-
|
|
121
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
122
|
-
flowchart TB
|
|
123
|
-
R1["~100 tokens<br/>Rung 1: Symbol Card<br/>Name, signature, summary, dependencies, metrics"]
|
|
124
|
-
R2["~300 tokens<br/>Rung 2: Skeleton IR<br/>Signatures and control flow with bodies elided"]
|
|
125
|
-
R3["~600 tokens<br/>Rung 3: Hot-Path Excerpt<br/>Identifier-focused lines with context"]
|
|
126
|
-
R4["~2,000 tokens<br/>Rung 4: Raw Code Window<br/>Policy-gated full source"]
|
|
127
|
-
|
|
128
|
-
R1 e1@--> R2
|
|
129
|
-
R2 e2@--> R3
|
|
130
|
-
R3 e3@--> R4
|
|
131
|
-
|
|
132
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
133
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
134
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
135
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
136
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
137
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
138
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
139
|
-
class e1,e2,e3 animate;
|
|
140
|
-
```
|
|
94
|
+

|
|
141
95
|
|
|
142
96
|
> **Most questions are answered at Rungs 1-2** without ever reading raw code. That's where the token savings come from.
|
|
143
97
|
|
|
@@ -168,41 +122,7 @@ flowchart TB
|
|
|
168
122
|
|
|
169
123
|
Every function, class, interface, type, and variable becomes a **Symbol Card**: a compact metadata record (~100 tokens) containing everything an agent needs to _understand_ a symbol without reading its code.
|
|
170
124
|
|
|
171
|
-
|
|
172
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
173
|
-
flowchart TB
|
|
174
|
-
Card["Symbol Card: validateToken"]
|
|
175
|
-
Kind["Kind: function (exported)"]
|
|
176
|
-
File["File: src/auth/jwt.ts:42-67"]
|
|
177
|
-
Signature["Signature: (token: string, opts?: ValidateOpts) -> Promise<DecodedToken>"]
|
|
178
|
-
Summary["Summary: validates JWT signature and expiration"]
|
|
179
|
-
Invariants["Invariants: throws on expired token"]
|
|
180
|
-
SideEffects["Side effects: logs to audit trail"]
|
|
181
|
-
Deps["Dependencies: verifySignature, checkExpiry, jsonwebtoken, AuditLogger"]
|
|
182
|
-
Metrics["Metrics: fan-in 12, fan-out 4, churn 3/30d"]
|
|
183
|
-
Context["Context: auth-module, request-pipeline, auth.test.ts"]
|
|
184
|
-
ETag["ETag: a7f3c2..."]
|
|
185
|
-
|
|
186
|
-
Card e1@--> Kind
|
|
187
|
-
Kind e2@--> File
|
|
188
|
-
File e3@--> Signature
|
|
189
|
-
Signature e4@--> Summary
|
|
190
|
-
Summary e5@--> Invariants
|
|
191
|
-
Invariants e6@--> SideEffects
|
|
192
|
-
SideEffects e7@--> Deps
|
|
193
|
-
Deps e8@--> Metrics
|
|
194
|
-
Metrics e9@--> Context
|
|
195
|
-
Context e10@--> ETag
|
|
196
|
-
|
|
197
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
198
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
199
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
200
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
201
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
202
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
203
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
204
|
-
class e1,e2,e3,e4,e5,e6,e7,e8,e9,e10 animate;
|
|
205
|
-
```
|
|
125
|
+

|
|
206
126
|
|
|
207
127
|
Cards include **confidence-scored call resolution** (the pass-2 resolver traces imports, aliases, barrel re-exports, and tagged templates to produce accurate dependency edges), **community detection** (cluster membership), and **call-chain tracing** (process participation with entry/intermediate/exit roles).
|
|
208
128
|
|
|
@@ -222,27 +142,7 @@ Cards include **confidence-scored call resolution** (the pass-2 resolver traces
|
|
|
222
142
|
|
|
223
143
|
Instead of reading files in the same directory, SDL-MCP follows the _dependency graph_. Starting from symbols relevant to your task, it traverses weighted edges (call: 1.0, config: 0.8, import: 0.6), scores each symbol by relevance, and returns the N most important within a token budget.
|
|
224
144
|
|
|
225
|
-
|
|
226
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
227
|
-
flowchart TD
|
|
228
|
-
Task["Task: Fix the auth middleware"] e1@--> Slice["sdl.slice.build"]
|
|
229
|
-
Slice e2@--> Auth["authenticate"]
|
|
230
|
-
Slice e3@--> Validate["validateToken"]
|
|
231
|
-
Slice e4@--> Config["JwtConfig"]
|
|
232
|
-
Auth e5@--> Hash["hashPassword"]
|
|
233
|
-
Validate e6@--> User["getUserById"]
|
|
234
|
-
Config e7@--> Env["envLoader"]
|
|
235
|
-
Env e8@-. frontier outside budget .-> Frontier["spillover frontier"]
|
|
236
|
-
|
|
237
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
238
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
239
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
240
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
241
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
242
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
243
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
244
|
-
class e1,e2,e3,e4,e5,e6,e7,e8 animate;
|
|
245
|
-
```
|
|
145
|
+

|
|
246
146
|
|
|
247
147
|
Slices have handles, leases, refresh (delta-only updates), and spillover (paged overflow). You can also skip the symbol search entirely — pass a `taskText` string and SDL-MCP auto-discovers the relevant entry symbols.
|
|
248
148
|
|
|
@@ -261,39 +161,7 @@ Slices have handles, leases, refresh (delta-only updates), and spillover (paged
|
|
|
261
161
|
|
|
262
162
|
`git diff` tells you what lines changed. SDL-MCP tells you what that change _means_ and who's affected.
|
|
263
163
|
|
|
264
|
-
|
|
265
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
266
|
-
flowchart TD
|
|
267
|
-
Change["Modified validateToken() signature"]
|
|
268
|
-
Sig["signatureDiff<br/>added options?: object"]
|
|
269
|
-
Inv["invariantDiff<br/>added throws on expired"]
|
|
270
|
-
Fx["sideEffectDiff<br/>added logs to audit trail"]
|
|
271
|
-
Blast["Blast radius"]
|
|
272
|
-
A1["authenticate()<br/>distance 1"]
|
|
273
|
-
A2["refreshSession()<br/>distance 1"]
|
|
274
|
-
A3["AuthMiddleware<br/>distance 2"]
|
|
275
|
-
A4["auth.test.ts<br/>re-run recommended"]
|
|
276
|
-
|
|
277
|
-
Change e1@--> Sig
|
|
278
|
-
Change e2@--> Inv
|
|
279
|
-
Change e3@--> Fx
|
|
280
|
-
Sig e4@--> Blast
|
|
281
|
-
Inv e5@--> Blast
|
|
282
|
-
Fx e6@--> Blast
|
|
283
|
-
Blast e7@--> A1
|
|
284
|
-
Blast e8@--> A2
|
|
285
|
-
Blast e9@--> A3
|
|
286
|
-
Blast e10@--> A4
|
|
287
|
-
|
|
288
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
289
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
290
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
291
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
292
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
293
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
294
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
295
|
-
class e1,e2,e3,e4,e5,e6,e7,e8,e9,e10 animate;
|
|
296
|
-
```
|
|
164
|
+

|
|
297
165
|
|
|
298
166
|
**PR risk analysis** (`sdl.pr.risk.analyze`) wraps this into a scored assessment with findings, evidence, and test recommendations. **Fan-in trend analysis** detects "amplifier" symbols whose growing dependency count means changes ripple further over time.
|
|
299
167
|
|
|
@@ -312,24 +180,7 @@ flowchart TD
|
|
|
312
180
|
|
|
313
181
|
SDL-MCP doesn't wait for you to save. As you type in your editor, buffer updates are pushed to an in-memory overlay store, parsed in the background, and merged with the durable database. Search, cards, and slices reflect your _current_ code, not your last save.
|
|
314
182
|
|
|
315
|
-
|
|
316
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
317
|
-
flowchart LR
|
|
318
|
-
Editor["Editor keystrokes"] e1@--> Push["sdl.buffer.push"]
|
|
319
|
-
Push e2@--> Overlay["Overlay store"]
|
|
320
|
-
Overlay e3@--> Reads["Merged reads<br/>search, cards, slices"]
|
|
321
|
-
Overlay e4@--> Persist["save / idle checkpoint"]
|
|
322
|
-
Persist e5@--> DB["LadybugDB durable graph"]
|
|
323
|
-
|
|
324
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
325
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
326
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
327
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
328
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
329
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
330
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
331
|
-
class e1,e2,e3,e4,e5 animate;
|
|
332
|
-
```
|
|
183
|
+

|
|
333
184
|
|
|
334
185
|
**Why it matters:**
|
|
335
186
|
|
|
@@ -404,27 +255,7 @@ Run tests, linters, and scripts through SDL-MCP's governance layer instead of un
|
|
|
404
255
|
|
|
405
256
|
Agents forget everything between sessions. SDL-MCP fixes this with an **opt-in graph-backed memory system** that lets agents store decisions, bugfix context, and task notes linked directly to the symbols and files they relate to. Memory is **disabled by default** and must be explicitly enabled in the configuration. When enabled, memories are stored both in the graph database (for fast querying) and as checked-in markdown files (for version control and team sharing).
|
|
406
257
|
|
|
407
|
-
|
|
408
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
409
|
-
flowchart LR
|
|
410
|
-
Session1["Agent session 1<br/>records bugfix memory"] e1@--> Store["sdl.memory.store"]
|
|
411
|
-
Store e2@--> Graph["LadybugDB memory node"]
|
|
412
|
-
Store e3@--> Files[".sdl-memory/bugfixes/<id>.md"]
|
|
413
|
-
Graph e4@--> Link1["MEMORY_OF -> authenticate()"]
|
|
414
|
-
Graph e5@--> Link2["HAS_MEMORY -> repo"]
|
|
415
|
-
Session2["Agent session 2"] e6@--> Surface["sdl.memory.surface"]
|
|
416
|
-
Surface e7@--> Graph
|
|
417
|
-
Graph e8@--> Recall["Relevant memory surfaced<br/>race condition fix in authenticate()"]
|
|
418
|
-
|
|
419
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
420
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
421
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
422
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
423
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
424
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
425
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
426
|
-
class e1,e2,e3,e4,e5,e6,e7,e8 animate;
|
|
427
|
-
```
|
|
258
|
+

|
|
428
259
|
|
|
429
260
|
When enabled, memories are **automatically surfaced** inside graph slices — when an agent builds a slice touching symbols with linked memories, those memories appear alongside the cards. During re-indexing, memories linked to changed symbols are **flagged as stale**, prompting agents to review and update them. Four MCP tools (`store`, `query`, `remove`, `surface`) provide full CRUD plus intelligent ranking by confidence, recency, and symbol overlap. Memory tools are only available when memory is enabled in the configuration.
|
|
430
261
|
|
|
@@ -442,33 +273,16 @@ When enabled, memories are **automatically surfaced** inside graph slices — wh
|
|
|
442
273
|
|
|
443
274
|
### SCIP Integration — Compiler-Grade Cross-References
|
|
444
275
|
|
|
445
|
-
Tree-sitter gives SDL-MCP fast, syntax-level symbol extraction across the
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
449
|
-
flowchart LR
|
|
450
|
-
Compiler["Compiler / Type Checker"] e1@--> SCIP[".scip index file"]
|
|
451
|
-
SCIP e2@--> Ingest["sdl.scip.ingest"]
|
|
452
|
-
Ingest e3@--> Upgrade["Heuristic edges → exact edges"]
|
|
453
|
-
Ingest e4@--> External["External dependency nodes"]
|
|
454
|
-
Ingest e5@--> Implements["implements edges"]
|
|
455
|
-
|
|
456
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
457
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
458
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
459
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
460
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
461
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
462
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
463
|
-
class e1,e2,e3,e4,e5 animate;
|
|
464
|
-
```
|
|
276
|
+
Tree-sitter gives SDL-MCP fast, syntax-level symbol extraction across the built-in TypeScript/JavaScript, Python, Go, Java, C#, C/C++, Rust, and Kotlin surface. PHP and Shell/Bash are explicit opt-in language packs for LSP provider-first work and are not enabled by default. SCIP (Source Code Intelligence Protocol) supplies **compiler-grade cross-references** from tools like scip-typescript, scip-go, and rust-analyzer. When `scip.enabled` is true, SDL-MCP uses provider-first indexing to materialize those facts directly, with legacy parsing retained only for uncovered or provider-unusable files.
|
|
277
|
+
|
|
278
|
+

|
|
465
279
|
|
|
466
280
|
**Why it matters:**
|
|
467
281
|
|
|
468
282
|
- Upgrades heuristic call resolution to **compiler-verified exact edges** (confidence 0.95)
|
|
469
283
|
- External dependencies (npm packages, Go modules, crate deps) become searchable graph nodes
|
|
470
284
|
- Interface/trait implementations tracked via `implements` edges
|
|
471
|
-
-
|
|
285
|
+
- Provider-first indexing keeps SCIP/LSP facts owned by the provider path; legacy indexing does not ingest `.scip` overlays
|
|
472
286
|
- Complementary: tree-sitter provides structure, SCIP provides semantic precision
|
|
473
287
|
|
|
474
288
|
[SCIP Integration Deep Dive →](./docs/feature-deep-dives/scip-integration.md)
|
|
@@ -515,21 +329,7 @@ Features include typed argument coercion (string, number, boolean, string[], jso
|
|
|
515
329
|
|
|
516
330
|
The tool gateway projects the 35 gateway-routable SDL actions into **4 namespace-scoped tools** (`sdl.query`, `sdl.code`, `sdl.repo`, `sdl.agent`), reducing `tools/list` overhead from the full flat schema surface to a compact gateway surface.
|
|
517
331
|
|
|
518
|
-
|
|
519
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
520
|
-
flowchart LR
|
|
521
|
-
Before["Flat mode<br/>38 tools<br/>2 universal + 36 flat"] e1@--> After["Gateway mode<br/>6 tools<br/>2 universal + 4 gateway"]
|
|
522
|
-
After e2@--> Savings["Smaller tools/list payload<br/>lower agent startup overhead"]
|
|
523
|
-
|
|
524
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
525
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
526
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
527
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
528
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
529
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
530
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
531
|
-
class e1,e2 animate;
|
|
532
|
-
```
|
|
332
|
+

|
|
533
333
|
|
|
534
334
|
Each gateway tool accepts an `action` discriminator field (e.g., `{ action: "symbol.search", repoId: "x", query: "auth" }`) and routes to the same handlers with double Zod validation. Thin wire schemas in `tools/list` keep the registration compact while full validation happens server-side. The flat-only `sdl.file.write` action remains outside gateway mode today.
|
|
535
335
|
|
|
@@ -622,9 +422,6 @@ The generated source of truth is [`docs/generated/tool-inventory.md`](./docs/gen
|
|
|
622
422
|
<tr><td><code>sdl.workflow</code></td><td>Multi-step operations with budget tracking, ETag caching, and transforms</td></tr>
|
|
623
423
|
<tr><td><code>sdl.manual</code></td><td>Self-documentation — query usage guide, action schemas, output format reference</td></tr>
|
|
624
424
|
|
|
625
|
-
<tr><td><strong>SCIP</strong></td>
|
|
626
|
-
<td><code>sdl.scip.ingest</code></td><td>Ingest a pre-built SCIP index for compiler-grade cross-references (with dry-run support)</td></tr>
|
|
627
|
-
|
|
628
425
|
<tr><td rowspan="2"><strong>File</strong></td>
|
|
629
426
|
<td><code>sdl.file.read</code></td><td>Read non-indexed files (configs, docs, templates) with line-range, search, or JSON-path modes</td></tr>
|
|
630
427
|
<tr><td><code>sdl.file.write</code></td><td>Policy-aware write helper for non-indexed files and templates</td></tr>
|
|
@@ -655,7 +452,7 @@ The generated source of truth is [`docs/generated/tool-inventory.md`](./docs/gen
|
|
|
655
452
|
| `sdl-mcp info` | Runtime diagnostics — version, Node.js, platform, database, config |
|
|
656
453
|
| `sdl-mcp summary` | Generate copy/paste context summaries from the CLI |
|
|
657
454
|
| `sdl-mcp health` | Compute composite health score with badge/JSON output |
|
|
658
|
-
| `sdl-mcp benchmark` | Run CI regression benchmarks |
|
|
455
|
+
| `sdl-mcp benchmark:ci` | Run CI regression benchmarks |
|
|
659
456
|
| `sdl-mcp export` | Export sync artifact |
|
|
660
457
|
| `sdl-mcp import` | Import sync artifact |
|
|
661
458
|
| `sdl-mcp pull` | Pull by version/commit with fallback |
|
|
@@ -712,32 +509,7 @@ A **VSCode extension** (`sdl-mcp-vscode/`) provides live buffer integration for
|
|
|
712
509
|
|
|
713
510
|
## System Architecture
|
|
714
511
|
|
|
715
|
-
|
|
716
|
-
%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
|
|
717
|
-
flowchart TD
|
|
718
|
-
Clients["MCP clients<br/>Claude Code, Claude Desktop, Cursor, Windsurf, Codex, Gemini"]
|
|
719
|
-
Gateway["Tool gateway<br/>sdl.query, sdl.code, sdl.repo, sdl.agent"]
|
|
720
|
-
Flat["Flat tools and optional code-mode surfaces"]
|
|
721
|
-
Policy["Policy engine<br/>proof-of-need, budgets, audit logging"]
|
|
722
|
-
Graph["LadybugDB graph<br/>symbols, edges, files, versions, memories"]
|
|
723
|
-
Indexer["Indexer pipeline<br/>Rust native or Tree-sitter fallback<br/>pass 1, pass 2, semantic enrichment"]
|
|
724
|
-
|
|
725
|
-
Clients e1@--> Gateway
|
|
726
|
-
Clients e2@--> Flat
|
|
727
|
-
Gateway e3@--> Policy
|
|
728
|
-
Flat e4@--> Policy
|
|
729
|
-
Policy e5@--> Graph
|
|
730
|
-
Indexer e6@--> Graph
|
|
731
|
-
|
|
732
|
-
classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
|
|
733
|
-
classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
|
|
734
|
-
classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
|
|
735
|
-
classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
|
|
736
|
-
classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
|
|
737
|
-
classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
|
|
738
|
-
classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
|
|
739
|
-
class e1,e2,e3,e4,e5,e6 animate;
|
|
740
|
-
```
|
|
512
|
+

|
|
741
513
|
|
|
742
514
|
[Full Architecture Documentation →](./docs/architecture.md)
|
|
743
515
|
|
|
@@ -771,7 +543,8 @@ flowchart TD
|
|
|
771
543
|
| [Governance & Policy](./docs/feature-deep-dives/governance-policy.md) | Proof-of-need gating, audit logging, runtime sandboxing |
|
|
772
544
|
| [Agent Context](./docs/feature-deep-dives/agent-context.md) | Task-shaped context retrieval, feedback loops, portable context summaries |
|
|
773
545
|
| [Context Modes](./docs/feature-deep-dives/context-modes.md) | Precise vs broad retrieval, adaptive symbol ranking, benchmark trade-offs |
|
|
774
|
-
| [Indexing & Languages](./docs/feature-deep-dives/indexing-languages.md) | Rust/TS engines, two-pass architecture,
|
|
546
|
+
| [Indexing & Languages](./docs/feature-deep-dives/indexing-languages.md) | Rust/TS engines, two-pass architecture, built-in and opt-in language support |
|
|
547
|
+
| [Language Provider Support](./docs/feature-deep-dives/language-provider-support.md) | Language chart for adapters, parser install mode, SCIP/LSP status, and validation |
|
|
775
548
|
| [Provider-First Indexing](./docs/feature-deep-dives/provider-first-indexing.md) | SCIP/LSP-first planning, provider facts, shadow DB readiness, fallback boundaries |
|
|
776
549
|
| [Runtime Execution](./docs/feature-deep-dives/runtime-execution.md) | Sandboxed subprocess execution with governance |
|
|
777
550
|
| [CLI Tool Access](./docs/feature-deep-dives/cli-tool-access.md) | Direct CLI access to 36 action aliases, output formats, stdin piping, scripting |
|
|
@@ -780,7 +553,7 @@ flowchart TD
|
|
|
780
553
|
| [Semantic Embeddings Setup](./docs/feature-deep-dives/semantic-embeddings-setup.md) | Dependencies, model installation, provider configuration, tier-by-tier setup |
|
|
781
554
|
| [Code Mode](./docs/feature-deep-dives/code-mode.md) | `sdl.context`, `sdl.workflow`, action discovery, manual reference, one-call workflows |
|
|
782
555
|
| [Development Memories](./docs/feature-deep-dives/development-memories.md) | Graph-backed cross-session memory, file sync, staleness detection, auto-surfacing |
|
|
783
|
-
| [SCIP Integration](./docs/feature-deep-dives/scip-integration.md) |
|
|
556
|
+
| [SCIP Integration](./docs/feature-deep-dives/scip-integration.md) | Provider-first compiler-grade cross-references, external deps, implements edges |
|
|
784
557
|
| [Token Savings Meter](./docs/feature-deep-dives/token-savings-meter.md) | Per-call meter, session summaries, lifetime tracking, `sdl.usage.stats` |
|
|
785
558
|
|
|
786
559
|
<br/>
|
|
@@ -86,10 +86,15 @@
|
|
|
86
86
|
"mode": "primaryWithCaps",
|
|
87
87
|
"workspaceSymbolLimit": 5000,
|
|
88
88
|
"documentSymbolFileLimit": 500,
|
|
89
|
+
"documentSymbolTimeoutMs": 10000,
|
|
90
|
+
"documentSymbolFailureLimit": 20,
|
|
91
|
+
"documentSymbolCollectionTimeoutMs": 120000,
|
|
89
92
|
"referenceCandidateLimit": 200,
|
|
90
|
-
"diagnosticsLimit": 5000
|
|
93
|
+
"diagnosticsLimit": 5000,
|
|
94
|
+
"diagnosticsTimeoutMs": 5000
|
|
91
95
|
}
|
|
92
96
|
},
|
|
97
|
+
"watchProvider": "auto",
|
|
93
98
|
"concurrency": 8,
|
|
94
99
|
"enableFileWatching": true,
|
|
95
100
|
"maxWatchedFiles": 25000,
|
|
@@ -70,7 +70,12 @@
|
|
|
70
70
|
"php",
|
|
71
71
|
"rs",
|
|
72
72
|
"kt",
|
|
73
|
-
"sh"
|
|
73
|
+
"sh",
|
|
74
|
+
"powershell",
|
|
75
|
+
"ruby",
|
|
76
|
+
"lua",
|
|
77
|
+
"dart",
|
|
78
|
+
"swift"
|
|
74
79
|
]
|
|
75
80
|
},
|
|
76
81
|
"default": [
|
|
@@ -333,6 +338,24 @@
|
|
|
333
338
|
"maximum": 50000,
|
|
334
339
|
"default": 500
|
|
335
340
|
},
|
|
341
|
+
"documentSymbolTimeoutMs": {
|
|
342
|
+
"type": "integer",
|
|
343
|
+
"minimum": 500,
|
|
344
|
+
"maximum": 300000,
|
|
345
|
+
"default": 10000
|
|
346
|
+
},
|
|
347
|
+
"documentSymbolFailureLimit": {
|
|
348
|
+
"type": "integer",
|
|
349
|
+
"minimum": 1,
|
|
350
|
+
"maximum": 100000,
|
|
351
|
+
"default": 20
|
|
352
|
+
},
|
|
353
|
+
"documentSymbolCollectionTimeoutMs": {
|
|
354
|
+
"type": "integer",
|
|
355
|
+
"minimum": 1000,
|
|
356
|
+
"maximum": 1800000,
|
|
357
|
+
"default": 120000
|
|
358
|
+
},
|
|
336
359
|
"referenceCandidateLimit": {
|
|
337
360
|
"type": "integer",
|
|
338
361
|
"minimum": 0,
|
|
@@ -344,14 +367,24 @@
|
|
|
344
367
|
"minimum": 0,
|
|
345
368
|
"maximum": 100000,
|
|
346
369
|
"default": 5000
|
|
370
|
+
},
|
|
371
|
+
"diagnosticsTimeoutMs": {
|
|
372
|
+
"type": "integer",
|
|
373
|
+
"minimum": 500,
|
|
374
|
+
"maximum": 300000,
|
|
375
|
+
"default": 5000
|
|
347
376
|
}
|
|
348
377
|
},
|
|
349
378
|
"default": {
|
|
350
379
|
"mode": "primaryWithCaps",
|
|
351
380
|
"workspaceSymbolLimit": 5000,
|
|
352
381
|
"documentSymbolFileLimit": 500,
|
|
382
|
+
"documentSymbolTimeoutMs": 10000,
|
|
383
|
+
"documentSymbolFailureLimit": 20,
|
|
384
|
+
"documentSymbolCollectionTimeoutMs": 120000,
|
|
353
385
|
"referenceCandidateLimit": 200,
|
|
354
|
-
"diagnosticsLimit": 5000
|
|
386
|
+
"diagnosticsLimit": 5000,
|
|
387
|
+
"diagnosticsTimeoutMs": 5000
|
|
355
388
|
}
|
|
356
389
|
}
|
|
357
390
|
},
|
|
@@ -363,11 +396,21 @@
|
|
|
363
396
|
"mode": "primaryWithCaps",
|
|
364
397
|
"workspaceSymbolLimit": 5000,
|
|
365
398
|
"documentSymbolFileLimit": 500,
|
|
399
|
+
"documentSymbolTimeoutMs": 10000,
|
|
400
|
+
"documentSymbolFailureLimit": 20,
|
|
401
|
+
"documentSymbolCollectionTimeoutMs": 120000,
|
|
366
402
|
"referenceCandidateLimit": 200,
|
|
367
|
-
"diagnosticsLimit": 5000
|
|
403
|
+
"diagnosticsLimit": 5000,
|
|
404
|
+
"diagnosticsTimeoutMs": 5000
|
|
368
405
|
}
|
|
369
406
|
}
|
|
370
407
|
},
|
|
408
|
+
"watchProvider": {
|
|
409
|
+
"type": "string",
|
|
410
|
+
"description": "File watcher event source. auto tries Watchman, then Chokidar, then fs.watch. Explicit providers fail visibly when unavailable.",
|
|
411
|
+
"enum": ["auto", "watchman", "chokidar", "fsWatch"],
|
|
412
|
+
"default": "auto"
|
|
413
|
+
},
|
|
371
414
|
"concurrency": {
|
|
372
415
|
"type": "integer",
|
|
373
416
|
"description": "Number of concurrent indexing workers",
|
|
@@ -474,10 +517,15 @@
|
|
|
474
517
|
"mode": "primaryWithCaps",
|
|
475
518
|
"workspaceSymbolLimit": 5000,
|
|
476
519
|
"documentSymbolFileLimit": 500,
|
|
520
|
+
"documentSymbolTimeoutMs": 10000,
|
|
521
|
+
"documentSymbolFailureLimit": 20,
|
|
522
|
+
"documentSymbolCollectionTimeoutMs": 120000,
|
|
477
523
|
"referenceCandidateLimit": 200,
|
|
478
|
-
"diagnosticsLimit": 5000
|
|
524
|
+
"diagnosticsLimit": 5000,
|
|
525
|
+
"diagnosticsTimeoutMs": 5000
|
|
479
526
|
}
|
|
480
527
|
},
|
|
528
|
+
"watchProvider": "auto",
|
|
481
529
|
"concurrency": 8,
|
|
482
530
|
"enableFileWatching": true,
|
|
483
531
|
"maxWatchedFiles": 25000,
|
|
@@ -1160,6 +1208,24 @@
|
|
|
1160
1208
|
"default": []
|
|
1161
1209
|
},
|
|
1162
1210
|
"readiness": { "type": "string" },
|
|
1211
|
+
"documentSessionMode": {
|
|
1212
|
+
"type": "string",
|
|
1213
|
+
"enum": ["workspace", "document"]
|
|
1214
|
+
},
|
|
1215
|
+
"documentSymbolRetryCount": {
|
|
1216
|
+
"type": "integer",
|
|
1217
|
+
"minimum": 0,
|
|
1218
|
+
"maximum": 10
|
|
1219
|
+
},
|
|
1220
|
+
"documentSymbolRetryDelayMs": {
|
|
1221
|
+
"type": "integer",
|
|
1222
|
+
"minimum": 0,
|
|
1223
|
+
"maximum": 120000
|
|
1224
|
+
},
|
|
1225
|
+
"env": {
|
|
1226
|
+
"type": "object",
|
|
1227
|
+
"additionalProperties": { "type": "string" }
|
|
1228
|
+
},
|
|
1163
1229
|
"initializationOptions": { "type": "object" }
|
|
1164
1230
|
}
|
|
1165
1231
|
},
|
|
@@ -1778,7 +1844,7 @@
|
|
|
1778
1844
|
},
|
|
1779
1845
|
"cleanupAfterIngest": {
|
|
1780
1846
|
"type": "boolean",
|
|
1781
|
-
"description": "
|
|
1847
|
+
"description": "Deprecated compatibility field for legacy post-refresh SCIP ingest cleanup. Provider-first does not delete generated indexes after collection.",
|
|
1782
1848
|
"default": true
|
|
1783
1849
|
},
|
|
1784
1850
|
"cacheGeneratedIndexes": {
|