sdl-mcp 0.6.3 → 0.6.6

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.
Files changed (155) hide show
  1. package/README.md +56 -38
  2. package/config/sdlmcp.config.example.json +16 -2
  3. package/config/sdlmcp.config.json +153 -0
  4. package/config/sdlmcp.config.json.sample +15 -2
  5. package/config/sdlmcp.config.schema.json +76 -2
  6. package/dist/benchmark/edgeAccuracy.d.ts +10 -0
  7. package/dist/benchmark/edgeAccuracy.d.ts.map +1 -0
  8. package/dist/benchmark/edgeAccuracy.js +106 -0
  9. package/dist/benchmark/edgeAccuracy.js.map +1 -0
  10. package/dist/benchmark/threshold.d.ts.map +1 -1
  11. package/dist/benchmark/threshold.js +14 -3
  12. package/dist/benchmark/threshold.js.map +1 -1
  13. package/dist/cli/argParsing.d.ts +3 -1
  14. package/dist/cli/argParsing.d.ts.map +1 -1
  15. package/dist/cli/argParsing.js +175 -0
  16. package/dist/cli/argParsing.js.map +1 -1
  17. package/dist/cli/commands/benchmark.d.ts +2 -0
  18. package/dist/cli/commands/benchmark.d.ts.map +1 -1
  19. package/dist/cli/commands/benchmark.js +147 -10
  20. package/dist/cli/commands/benchmark.js.map +1 -1
  21. package/dist/cli/commands/doctor.d.ts.map +1 -1
  22. package/dist/cli/commands/doctor.js +52 -0
  23. package/dist/cli/commands/doctor.js.map +1 -1
  24. package/dist/cli/commands/health.d.ts +3 -0
  25. package/dist/cli/commands/health.d.ts.map +1 -0
  26. package/dist/cli/commands/health.js +45 -0
  27. package/dist/cli/commands/health.js.map +1 -0
  28. package/dist/cli/commands/index.d.ts.map +1 -1
  29. package/dist/cli/commands/index.js +13 -2
  30. package/dist/cli/commands/index.js.map +1 -1
  31. package/dist/cli/commands/init.d.ts +6 -0
  32. package/dist/cli/commands/init.d.ts.map +1 -1
  33. package/dist/cli/commands/init.js +371 -67
  34. package/dist/cli/commands/init.js.map +1 -1
  35. package/dist/cli/commands/serve.d.ts.map +1 -1
  36. package/dist/cli/commands/serve.js +14 -1
  37. package/dist/cli/commands/serve.js.map +1 -1
  38. package/dist/cli/commands/summary.d.ts +3 -0
  39. package/dist/cli/commands/summary.d.ts.map +1 -0
  40. package/dist/cli/commands/summary.js +59 -0
  41. package/dist/cli/commands/summary.js.map +1 -0
  42. package/dist/cli/index.js +75 -25
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/transport/http.d.ts.map +1 -1
  45. package/dist/cli/transport/http.js +369 -71
  46. package/dist/cli/transport/http.js.map +1 -1
  47. package/dist/cli/types.d.ts +18 -0
  48. package/dist/cli/types.d.ts.map +1 -1
  49. package/dist/config/constants.d.ts +20 -0
  50. package/dist/config/constants.d.ts.map +1 -1
  51. package/dist/config/constants.js +20 -0
  52. package/dist/config/constants.js.map +1 -1
  53. package/dist/config/types.d.ts +106 -0
  54. package/dist/config/types.d.ts.map +1 -1
  55. package/dist/config/types.js +22 -2
  56. package/dist/config/types.js.map +1 -1
  57. package/dist/db/queries.d.ts +31 -1
  58. package/dist/db/queries.d.ts.map +1 -1
  59. package/dist/db/queries.js +93 -1
  60. package/dist/db/queries.js.map +1 -1
  61. package/dist/db/schema.d.ts +27 -0
  62. package/dist/db/schema.d.ts.map +1 -1
  63. package/dist/graph/prefetch-model.d.ts +13 -0
  64. package/dist/graph/prefetch-model.d.ts.map +1 -0
  65. package/dist/graph/prefetch-model.js +30 -0
  66. package/dist/graph/prefetch-model.js.map +1 -0
  67. package/dist/graph/prefetch.d.ts +35 -0
  68. package/dist/graph/prefetch.d.ts.map +1 -0
  69. package/dist/graph/prefetch.js +208 -0
  70. package/dist/graph/prefetch.js.map +1 -0
  71. package/dist/graph/slice.d.ts +7 -3
  72. package/dist/graph/slice.d.ts.map +1 -1
  73. package/dist/graph/slice.js +175 -20
  74. package/dist/graph/slice.js.map +1 -1
  75. package/dist/indexer/adapter/LanguageAdapter.d.ts +20 -0
  76. package/dist/indexer/adapter/LanguageAdapter.d.ts.map +1 -1
  77. package/dist/indexer/adapter/go.d.ts +2 -0
  78. package/dist/indexer/adapter/go.d.ts.map +1 -1
  79. package/dist/indexer/adapter/go.js +54 -2
  80. package/dist/indexer/adapter/go.js.map +1 -1
  81. package/dist/indexer/adapter/java.d.ts +2 -0
  82. package/dist/indexer/adapter/java.d.ts.map +1 -1
  83. package/dist/indexer/adapter/java.js +47 -1
  84. package/dist/indexer/adapter/java.js.map +1 -1
  85. package/dist/indexer/adapter/python.d.ts +2 -0
  86. package/dist/indexer/adapter/python.d.ts.map +1 -1
  87. package/dist/indexer/adapter/python.js +44 -0
  88. package/dist/indexer/adapter/python.js.map +1 -1
  89. package/dist/indexer/edge-confidence.d.ts +14 -0
  90. package/dist/indexer/edge-confidence.d.ts.map +1 -0
  91. package/dist/indexer/edge-confidence.js +31 -0
  92. package/dist/indexer/edge-confidence.js.map +1 -0
  93. package/dist/indexer/embeddings-local.d.ts +6 -0
  94. package/dist/indexer/embeddings-local.d.ts.map +1 -0
  95. package/dist/indexer/embeddings-local.js +20 -0
  96. package/dist/indexer/embeddings-local.js.map +1 -0
  97. package/dist/indexer/embeddings.d.ts +31 -0
  98. package/dist/indexer/embeddings.d.ts.map +1 -0
  99. package/dist/indexer/embeddings.js +179 -0
  100. package/dist/indexer/embeddings.js.map +1 -0
  101. package/dist/indexer/indexer.d.ts +26 -1
  102. package/dist/indexer/indexer.d.ts.map +1 -1
  103. package/dist/indexer/indexer.js +819 -243
  104. package/dist/indexer/indexer.js.map +1 -1
  105. package/dist/indexer/summary-generator.d.ts +21 -0
  106. package/dist/indexer/summary-generator.d.ts.map +1 -0
  107. package/dist/indexer/summary-generator.js +48 -0
  108. package/dist/indexer/summary-generator.js.map +1 -0
  109. package/dist/indexer/ts/tsParser.d.ts +4 -1
  110. package/dist/indexer/ts/tsParser.d.ts.map +1 -1
  111. package/dist/indexer/ts/tsParser.js +32 -3
  112. package/dist/indexer/ts/tsParser.js.map +1 -1
  113. package/dist/mcp/health.d.ts +31 -0
  114. package/dist/mcp/health.d.ts.map +1 -0
  115. package/dist/mcp/health.js +106 -0
  116. package/dist/mcp/health.js.map +1 -0
  117. package/dist/mcp/summary.d.ts +21 -0
  118. package/dist/mcp/summary.d.ts.map +1 -0
  119. package/dist/mcp/summary.js +290 -0
  120. package/dist/mcp/summary.js.map +1 -0
  121. package/dist/mcp/telemetry.d.ts +64 -0
  122. package/dist/mcp/telemetry.d.ts.map +1 -1
  123. package/dist/mcp/telemetry.js +89 -0
  124. package/dist/mcp/telemetry.js.map +1 -1
  125. package/dist/mcp/tools/agent.d.ts +4 -4
  126. package/dist/mcp/tools/delta.d.ts.map +1 -1
  127. package/dist/mcp/tools/delta.js +2 -0
  128. package/dist/mcp/tools/delta.js.map +1 -1
  129. package/dist/mcp/tools/index.d.ts.map +1 -1
  130. package/dist/mcp/tools/index.js +3 -0
  131. package/dist/mcp/tools/index.js.map +1 -1
  132. package/dist/mcp/tools/prRisk.d.ts +1 -1
  133. package/dist/mcp/tools/repo.d.ts.map +1 -1
  134. package/dist/mcp/tools/repo.js +32 -1
  135. package/dist/mcp/tools/repo.js.map +1 -1
  136. package/dist/mcp/tools/slice.d.ts.map +1 -1
  137. package/dist/mcp/tools/slice.js +12 -1
  138. package/dist/mcp/tools/slice.js.map +1 -1
  139. package/dist/mcp/tools/summary.d.ts +3 -0
  140. package/dist/mcp/tools/summary.d.ts.map +1 -0
  141. package/dist/mcp/tools/summary.js +19 -0
  142. package/dist/mcp/tools/summary.js.map +1 -0
  143. package/dist/mcp/tools/symbol.d.ts.map +1 -1
  144. package/dist/mcp/tools/symbol.js +75 -8
  145. package/dist/mcp/tools/symbol.js.map +1 -1
  146. package/dist/mcp/tools.d.ts +904 -141
  147. package/dist/mcp/tools.d.ts.map +1 -1
  148. package/dist/mcp/tools.js +123 -2
  149. package/dist/mcp/tools.js.map +1 -1
  150. package/dist/mcp/types.d.ts +87 -1
  151. package/dist/mcp/types.d.ts.map +1 -1
  152. package/migrations/0014_add_edge_confidence.sql +19 -0
  153. package/migrations/0015_add_edge_resolution_strategy.sql +5 -0
  154. package/migrations/0016_symbol_embeddings.sql +14 -0
  155. package/package.json +5 -4
package/README.md CHANGED
@@ -71,35 +71,45 @@ Or run without global install:
71
71
  npx --yes sdl-mcp@latest version
72
72
  ```
73
73
 
74
- ### Initialize and Run
75
-
76
- ```bash
77
- # Tip: If you are using npx, replace `sdl-mcp` with `npx --yes sdl-mcp@latest`.
78
- # 1) Create config (defaults to user-global path)
79
- sdl-mcp init --client codex
80
-
81
- # 2) Validate environment
82
- sdl-mcp doctor
83
-
84
- # 3) Build the symbol ledger
85
- sdl-mcp index
86
-
87
- # 4) Start MCP server (stdio for coding agents)
88
- sdl-mcp serve --stdio
89
- ```
74
+ ### Configure and Initialize
75
+
76
+ ```bash
77
+ # Tip: If you are using npx, replace `sdl-mcp` with `npx --yes sdl-mcp@latest`.
78
+ # 1) Set config location variable then open a new terminal
79
+ setx SDL_CONFIG_HOME "C:\[your path]"
80
+
81
+ # 2) One-line non-interactive setup (includes inline index + doctor)
82
+ sdl-mcp init -y --auto-index --config "C:\[same path as SDL_CONFIG_HOME]"
83
+
84
+ # 3) Start MCP server (stdio for coding agents)
85
+ sdl-mcp serve --stdio
86
+
87
+ # Optional: start HTTP transport for graph explorer + REST endpoints
88
+ sdl-mcp serve --http --host localhost --port 3000
89
+
90
+ # Optional: disable watch mode if your environment has watcher instability
91
+ sdl-mcp serve --stdio --no-watch
92
+
93
+ # 4) Copy the agent instructions from agent-workflows.md and paste them in the AGENTS.md file for your project.
94
+ ```
90
95
 
91
96
  ## Core Feature Set
92
97
 
93
98
  - Multi-language repository indexing with tree-sitter adapters
94
99
  - Symbol cards with signatures, deps, metrics, and versioning
95
- - Graph slices with handles, leases, refresh, and spillover
96
- - Delta analysis and blast radius support
97
- - Code access ladder: `getSkeleton` -> `getHotPath` -> `needWindow`
98
- - Policy management (`sdl.policy.get` / `sdl.policy.set`)
99
- - Repository overview and hotspot inspection (`sdl.repo.overview`)
100
- - PR risk analysis (`sdl.pr.risk.analyze`)
101
- - Agent orchestration tool (`sdl.agent.orchestrate`)
102
- - Sync artifact export/import/pull workflows
100
+ - Graph slices with handles, leases, refresh, and spillover
101
+ - Delta analysis and blast radius support
102
+ - Semantic symbol search reranking (`sdl.symbol.search` with `semantic: true`)
103
+ - Optional generated symbol summaries (`semantic.generateSummaries`)
104
+ - Code access ladder: `getSkeleton` -> `getHotPath` -> `needWindow`
105
+ - Policy management (`sdl.policy.get` / `sdl.policy.set`)
106
+ - Repository overview and hotspot inspection (`sdl.repo.overview`)
107
+ - PR risk analysis (`sdl.pr.risk.analyze`)
108
+ - Agent orchestration tool (`sdl.agent.orchestrate`)
109
+ - Predictive prefetch heuristics with status metrics (`prefetchStats`)
110
+ - Graph HTTP surface and browser explorer (`/api/graph/*`, `/ui/graph`)
111
+ - VSCode extension MVP in `sdl-mcp-vscode/`
112
+ - Sync artifact export/import/pull workflows
103
113
 
104
114
  ## CLI Commands
105
115
 
@@ -109,15 +119,18 @@ sdl-mcp serve --stdio
109
119
  - `serve` - run MCP server (`--stdio` or `--http`)
110
120
  - `export` - export sync artifact
111
121
  - `import` - import sync artifact
112
- - `pull` - pull by version/commit with fallback behavior
113
- - `benchmark:ci` - run CI benchmark and threshold checks
114
- - `version` - show version and environment info
122
+ - `pull` - pull by version/commit with fallback behavior
123
+ - `benchmark:ci` - run CI benchmark checks, including edge-accuracy regression gating
124
+ - `summary` - generate token-bounded copy/paste context summaries
125
+ - `health` - compute composite index health score and badge/json output
126
+ - `version` - show version and environment info
115
127
 
116
128
  ## MCP Tools
117
129
 
118
130
  - Repository: `sdl.repo.register`, `sdl.repo.status`, `sdl.repo.overview`, `sdl.index.refresh`
119
- - Symbols: `sdl.symbol.search`, `sdl.symbol.getCard`
120
- - Slice: `sdl.slice.build`, `sdl.slice.refresh`, `sdl.slice.spillover.get`
131
+ - Symbols: `sdl.symbol.search`, `sdl.symbol.getCard`
132
+ - Context: `sdl.context.summary`
133
+ - Slice: `sdl.slice.build`, `sdl.slice.refresh`, `sdl.slice.spillover.get`
121
134
  - Delta: `sdl.delta.get`
122
135
  - Code: `sdl.code.needWindow`, `sdl.code.getSkeleton`, `sdl.code.getHotPath`
123
136
  - Policy: `sdl.policy.get`, `sdl.policy.set`
@@ -131,10 +144,11 @@ See: [MCP Tools Reference](./docs/mcp-tools-reference.md)
131
144
  - [Getting Started](./docs/getting-started.md)
132
145
  - [CLI Reference](./docs/cli-reference.md)
133
146
  - [MCP Tools Reference](./docs/mcp-tools-reference.md)
134
- - [Configuration Reference](./docs/configuration-reference.md)
135
- - [Agent Workflows](./docs/agent-workflows.md)
136
- - [Troubleshooting](./docs/troubleshooting.md)
137
- - [Legacy User Guide](./docs/USER_GUIDE.md)
147
+ - [Configuration Reference](./docs/configuration-reference.md)
148
+ - [Agent Workflows](./docs/agent-workflows.md)
149
+ - [Troubleshooting](./docs/troubleshooting.md)
150
+ - [VSCode Extension README](./sdl-mcp-vscode/README.md)
151
+ - [Legacy User Guide](./docs/USER_GUIDE.md)
138
152
 
139
153
  ## Development
140
154
 
@@ -145,11 +159,15 @@ npm run lint
145
159
  npm test
146
160
  ```
147
161
 
148
- Benchmark tooling (npm scripts):
149
-
150
- - `npm run benchmark:real`
151
- - `npm run benchmark:matrix`
152
- - `npm run benchmark:sweep`
162
+ Benchmark tooling (npm scripts):
163
+
164
+ - `npm run benchmark:real`
165
+ - `npm run benchmark:matrix`
166
+ - `npm run benchmark:sweep`
167
+
168
+ Phase A benchmark lockfile:
169
+
170
+ - `scripts/benchmark/phase-a-benchmark-lock.json` pins TS/Python/Tier-3 repos for reproducible baseline runs.
153
171
 
154
172
  ## License
155
173
 
@@ -27,7 +27,8 @@
27
27
  "kt",
28
28
  "sh"
29
29
  ],
30
- "maxFileBytes": 2000000
30
+ "maxFileBytes": 2000000,
31
+ "includeNodeModulesTypes": true
31
32
  },
32
33
  {
33
34
  "repoId": "zod-oss",
@@ -118,7 +119,8 @@
118
119
  },
119
120
  "indexing": {
120
121
  "concurrency": 4,
121
- "enableFileWatching": false
122
+ "enableFileWatching": true,
123
+ "maxWatchedFiles": 25000
122
124
  },
123
125
  "slice": {
124
126
  "defaultMaxCards": 60,
@@ -135,5 +137,17 @@
135
137
  "symbolCardMaxSizeBytes": 104857600,
136
138
  "graphSliceMaxEntries": 1000,
137
139
  "graphSliceMaxSizeBytes": 52428800
140
+ },
141
+ "semantic": {
142
+ "enabled": false,
143
+ "alpha": 0.6,
144
+ "provider": "mock",
145
+ "model": "all-MiniLM-L6-v2",
146
+ "generateSummaries": false
147
+ },
148
+ "prefetch": {
149
+ "enabled": false,
150
+ "maxBudgetPercent": 20,
151
+ "warmTopN": 50
138
152
  }
139
153
  }
@@ -0,0 +1,153 @@
1
+ {
2
+ "repos": [
3
+ {
4
+ "repoId": "my-repo",
5
+ "rootPath": ".",
6
+ "ignore": [
7
+ "**/node_modules/**",
8
+ "**/dist/**",
9
+ "**/.next/**",
10
+ "**/build/**",
11
+ "**/.git/**",
12
+ "**/coverage/**"
13
+ ],
14
+ "languages": [
15
+ "ts",
16
+ "tsx",
17
+ "js",
18
+ "jsx",
19
+ "py",
20
+ "go",
21
+ "java",
22
+ "cs",
23
+ "c",
24
+ "cpp",
25
+ "php",
26
+ "rs",
27
+ "kt",
28
+ "sh"
29
+ ],
30
+ "maxFileBytes": 2000000,
31
+ "includeNodeModulesTypes": true
32
+ },
33
+ {
34
+ "repoId": "zod-oss",
35
+ "rootPath": ".tmp/external-benchmarks/zod-oss",
36
+ "ignore": [
37
+ "**/node_modules/**",
38
+ "**/dist/**",
39
+ "**/lib/**",
40
+ "**/coverage/**",
41
+ "**/*.test.ts",
42
+ "**/*.spec.ts"
43
+ ],
44
+ "languages": [
45
+ "ts",
46
+ "tsx",
47
+ "js"
48
+ ]
49
+ },
50
+ {
51
+ "repoId": "preact-oss",
52
+ "rootPath": ".tmp/external-benchmarks/preact-oss",
53
+ "ignore": [
54
+ "**/node_modules/**",
55
+ "**/dist/**",
56
+ "**/build/**",
57
+ "**/coverage/**",
58
+ "**/*.test.ts",
59
+ "**/*.spec.ts",
60
+ "**/*.test.tsx",
61
+ "**/*.spec.tsx"
62
+ ],
63
+ "languages": [
64
+ "ts",
65
+ "tsx",
66
+ "js",
67
+ "jsx"
68
+ ]
69
+ },
70
+ {
71
+ "repoId": "flask-oss",
72
+ "rootPath": ".tmp/external-benchmarks/flask-oss",
73
+ "ignore": [
74
+ "**/.venv/**",
75
+ "**/venv/**",
76
+ "**/__pycache__/**",
77
+ "**/.pytest_cache/**",
78
+ "**/build/**",
79
+ "**/dist/**",
80
+ "**/*.pyc",
81
+ "**/tests/**"
82
+ ],
83
+ "languages": [
84
+ "py"
85
+ ]
86
+ },
87
+ {
88
+ "repoId": "ansible-lint-oss",
89
+ "rootPath": ".tmp/external-benchmarks/ansible-lint-oss",
90
+ "ignore": [
91
+ "**/.venv/**",
92
+ "**/venv/**",
93
+ "**/__pycache__/**",
94
+ "**/.pytest_cache/**",
95
+ "**/build/**",
96
+ "**/dist/**",
97
+ "**/*.pyc",
98
+ "**/test/**",
99
+ "**/tests/**",
100
+ "**/.tox/**"
101
+ ],
102
+ "languages": [
103
+ "py",
104
+ "sh"
105
+ ]
106
+ }
107
+ ],
108
+ "dbPath": "./data/sdlmcp.sqlite",
109
+ "policy": {
110
+ "maxWindowLines": 180,
111
+ "maxWindowTokens": 1400,
112
+ "requireIdentifiers": true,
113
+ "allowBreakGlass": true
114
+ },
115
+ "redaction": {
116
+ "enabled": true,
117
+ "includeDefaults": true,
118
+ "patterns": []
119
+ },
120
+ "indexing": {
121
+ "concurrency": 4,
122
+ "enableFileWatching": true,
123
+ "maxWatchedFiles": 25000
124
+ },
125
+ "slice": {
126
+ "defaultMaxCards": 60,
127
+ "defaultMaxTokens": 12000,
128
+ "edgeWeights": {
129
+ "call": 1.0,
130
+ "import": 0.6,
131
+ "config": 0.8
132
+ }
133
+ },
134
+ "cache": {
135
+ "enabled": true,
136
+ "symbolCardMaxEntries": 2000,
137
+ "symbolCardMaxSizeBytes": 104857600,
138
+ "graphSliceMaxEntries": 1000,
139
+ "graphSliceMaxSizeBytes": 52428800
140
+ },
141
+ "semantic": {
142
+ "enabled": false,
143
+ "alpha": 0.6,
144
+ "provider": "mock",
145
+ "model": "all-MiniLM-L6-v2",
146
+ "generateSummaries": false
147
+ },
148
+ "prefetch": {
149
+ "enabled": false,
150
+ "maxBudgetPercent": 20,
151
+ "warmTopN": 50
152
+ }
153
+ }
@@ -44,7 +44,8 @@
44
44
  },
45
45
  "indexing": {
46
46
  "concurrency": 8,
47
- "enableFileWatching": false
47
+ "enableFileWatching": true,
48
+ "maxWatchedFiles": 25000
48
49
  },
49
50
  "slice": {
50
51
  "defaultMaxCards": 60,
@@ -54,5 +55,17 @@
54
55
  "import": 0.6,
55
56
  "config": 0.8
56
57
  }
58
+ },
59
+ "semantic": {
60
+ "enabled": false,
61
+ "alpha": 0.6,
62
+ "provider": "mock",
63
+ "model": "all-MiniLM-L6-v2",
64
+ "generateSummaries": false
65
+ },
66
+ "prefetch": {
67
+ "enabled": false,
68
+ "maxBudgetPercent": 20,
69
+ "warmTopN": 50
57
70
  }
58
- }
71
+ }
@@ -80,6 +80,11 @@
80
80
  "minimum": 1,
81
81
  "default": 2000000
82
82
  },
83
+ "includeNodeModulesTypes": {
84
+ "type": "boolean",
85
+ "description": "Include node_modules/@types declarations in TypeScript call resolution (excluding @types/node)",
86
+ "default": true
87
+ },
83
88
  "packageJsonPath": {
84
89
  "type": "string",
85
90
  "description": "Optional path to package.json (auto-detected if not provided)"
@@ -196,7 +201,13 @@
196
201
  "enableFileWatching": {
197
202
  "type": "boolean",
198
203
  "description": "Enable automatic reindexing on file changes",
199
- "default": false
204
+ "default": true
205
+ },
206
+ "maxWatchedFiles": {
207
+ "type": "integer",
208
+ "description": "Maximum candidate source files allowed for watcher startup",
209
+ "minimum": 1,
210
+ "default": 25000
200
211
  },
201
212
  "workerPoolSize": {
202
213
  "type": "integer",
@@ -207,7 +218,8 @@
207
218
  },
208
219
  "default": {
209
220
  "concurrency": 8,
210
- "enableFileWatching": false
221
+ "enableFileWatching": true,
222
+ "maxWatchedFiles": 25000
211
223
  }
212
224
  },
213
225
  "slice": {
@@ -376,6 +388,68 @@
376
388
  "enabled": true,
377
389
  "strictVersioning": true
378
390
  }
391
+ },
392
+ "semantic": {
393
+ "type": "object",
394
+ "description": "Semantic retrieval and generated summary configuration",
395
+ "properties": {
396
+ "enabled": {
397
+ "type": "boolean",
398
+ "default": false
399
+ },
400
+ "alpha": {
401
+ "type": "number",
402
+ "minimum": 0,
403
+ "maximum": 1,
404
+ "default": 0.6
405
+ },
406
+ "provider": {
407
+ "type": "string",
408
+ "enum": ["api", "local", "mock"],
409
+ "default": "mock"
410
+ },
411
+ "model": {
412
+ "type": "string",
413
+ "default": "all-MiniLM-L6-v2"
414
+ },
415
+ "generateSummaries": {
416
+ "type": "boolean",
417
+ "default": false
418
+ }
419
+ },
420
+ "default": {
421
+ "enabled": false,
422
+ "alpha": 0.6,
423
+ "provider": "mock",
424
+ "model": "all-MiniLM-L6-v2",
425
+ "generateSummaries": false
426
+ }
427
+ },
428
+ "prefetch": {
429
+ "type": "object",
430
+ "description": "Predictive prefetch configuration",
431
+ "properties": {
432
+ "enabled": {
433
+ "type": "boolean",
434
+ "default": false
435
+ },
436
+ "maxBudgetPercent": {
437
+ "type": "integer",
438
+ "minimum": 1,
439
+ "maximum": 100,
440
+ "default": 20
441
+ },
442
+ "warmTopN": {
443
+ "type": "integer",
444
+ "minimum": 1,
445
+ "default": 50
446
+ }
447
+ },
448
+ "default": {
449
+ "enabled": false,
450
+ "maxBudgetPercent": 20,
451
+ "warmTopN": 50
452
+ }
379
453
  }
380
454
  }
381
455
  }
@@ -0,0 +1,10 @@
1
+ export interface EdgeAccuracyScore {
2
+ language: string;
3
+ cases: number;
4
+ precision: number;
5
+ recall: number;
6
+ f1: number;
7
+ strategyAccuracy: number;
8
+ }
9
+ export declare function evaluateEdgeAccuracySuite(): EdgeAccuracyScore[];
10
+ //# sourceMappingURL=edgeAccuracy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edgeAccuracy.d.ts","sourceRoot":"","sources":["../../src/benchmark/edgeAccuracy.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAmFD,wBAAgB,yBAAyB,IAAI,iBAAiB,EAAE,CAsD/D"}
@@ -0,0 +1,106 @@
1
+ import { readFileSync } from "fs";
2
+ import { join } from "path";
3
+ import { PythonAdapter } from "../indexer/adapter/python.js";
4
+ import { GoAdapter } from "../indexer/adapter/go.js";
5
+ import { JavaAdapter } from "../indexer/adapter/java.js";
6
+ function buildCall(calleeIdentifier) {
7
+ return {
8
+ callerNodeId: "benchmark:caller",
9
+ calleeIdentifier,
10
+ isResolved: false,
11
+ callType: "function",
12
+ range: {
13
+ startLine: 1,
14
+ startCol: 0,
15
+ endLine: 1,
16
+ endCol: 1,
17
+ },
18
+ };
19
+ }
20
+ function toStringMap(source) {
21
+ return new Map(Object.entries(source));
22
+ }
23
+ function toNamespaceMap(source) {
24
+ const out = new Map();
25
+ for (const [key, value] of Object.entries(source)) {
26
+ out.set(key, new Map(Object.entries(value)));
27
+ }
28
+ return out;
29
+ }
30
+ function loadFixture() {
31
+ const path = join(process.cwd(), "tests/benchmark/edge-accuracy/cases.json");
32
+ return JSON.parse(readFileSync(path, "utf-8"));
33
+ }
34
+ function buildContext(input) {
35
+ return {
36
+ call: buildCall(input.call),
37
+ importedNameToSymbolIds: toStringMap(input.importedNameToSymbolIds),
38
+ namespaceImports: toNamespaceMap(input.namespaceImports),
39
+ nameToSymbolIds: toStringMap(input.nameToSymbolIds),
40
+ };
41
+ }
42
+ function getResolver(language) {
43
+ switch (language) {
44
+ case "python":
45
+ return new PythonAdapter();
46
+ case "go":
47
+ return new GoAdapter();
48
+ case "java":
49
+ return new JavaAdapter();
50
+ default:
51
+ return null;
52
+ }
53
+ }
54
+ function computeF1(precision, recall) {
55
+ if (precision <= 0 || recall <= 0) {
56
+ return 0;
57
+ }
58
+ return (2 * precision * recall) / (precision + recall);
59
+ }
60
+ export function evaluateEdgeAccuracySuite() {
61
+ const fixture = loadFixture();
62
+ const byLanguage = new Map();
63
+ for (const scenario of fixture.cases) {
64
+ const list = byLanguage.get(scenario.language) ?? [];
65
+ list.push(scenario);
66
+ byLanguage.set(scenario.language, list);
67
+ }
68
+ const scores = [];
69
+ for (const [language, scenarios] of byLanguage) {
70
+ const adapter = getResolver(language);
71
+ let truePositives = 0;
72
+ let predictedPositives = 0;
73
+ let expectedPositives = 0;
74
+ let strategyMatches = 0;
75
+ for (const scenario of scenarios) {
76
+ const result = adapter?.resolveCall?.(buildContext(scenario)) ?? null;
77
+ const predictedResolved = Boolean(result?.isResolved);
78
+ if (scenario.expectedResolved) {
79
+ expectedPositives += 1;
80
+ }
81
+ if (predictedResolved) {
82
+ predictedPositives += 1;
83
+ }
84
+ if (scenario.expectedResolved && predictedResolved) {
85
+ truePositives += 1;
86
+ }
87
+ const predictedStrategy = result?.strategy ?? "unresolved";
88
+ if (predictedStrategy === scenario.expectedStrategy) {
89
+ strategyMatches += 1;
90
+ }
91
+ }
92
+ const precision = predictedPositives > 0 ? truePositives / predictedPositives : 0;
93
+ const recall = expectedPositives > 0 ? truePositives / expectedPositives : 0;
94
+ const f1 = computeF1(precision, recall);
95
+ scores.push({
96
+ language,
97
+ cases: scenarios.length,
98
+ precision,
99
+ recall,
100
+ f1,
101
+ strategyAccuracy: scenarios.length > 0 ? strategyMatches / scenarios.length : 0,
102
+ });
103
+ }
104
+ return scores.sort((a, b) => a.language.localeCompare(b.language));
105
+ }
106
+ //# sourceMappingURL=edgeAccuracy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edgeAccuracy.js","sourceRoot":"","sources":["../../src/benchmark/edgeAccuracy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"threshold.d.ts","sourceRoot":"","sources":["../../src/benchmark/threshold.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;IAC9C,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,OAAO,EAAE,iBAAiB,CAAC;QAC3B,WAAW,EAAE,iBAAiB,CAAC;QAC/B,eAAe,EAAE,iBAAiB,CAAC;QACnC,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACzC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAsB;gBAE5B,UAAU,EAAE,mBAAmB;IAI3C,QAAQ,CACN,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,yBAAyB;IAuC5B,OAAO,CAAC,cAAc;CAyGvB;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAG3E;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAmDpC;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,GACf,IAAI,CAON"}
1
+ {"version":3,"file":"threshold.d.ts","sourceRoot":"","sources":["../../src/benchmark/threshold.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;IAC9C,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,OAAO,EAAE,iBAAiB,CAAC;QAC3B,WAAW,EAAE,iBAAiB,CAAC;QAC/B,eAAe,EAAE,iBAAiB,CAAC;QACnC,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACzC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAsB;gBAE5B,UAAU,EAAE,mBAAmB;IAI3C,QAAQ,CACN,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,yBAAyB;IAuC5B,OAAO,CAAC,cAAc;CAyGvB;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAG3E;AAoBD,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAmDpC;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,GACf,IAAI,CAON"}
@@ -119,6 +119,17 @@ export function loadThresholdConfig(configPath) {
119
119
  const content = readFileSync(configPath, "utf-8");
120
120
  return JSON.parse(content);
121
121
  }
122
+ function normalizeBaselineDerivedMetrics(metrics) {
123
+ const normalized = { ...metrics };
124
+ const indexTimePerFile = normalized.indexTimePerFile;
125
+ const symbolsPerFile = normalized.symbolsPerFile;
126
+ if (typeof indexTimePerFile === "number" &&
127
+ typeof symbolsPerFile === "number" &&
128
+ symbolsPerFile > 0) {
129
+ normalized.indexTimePerSymbol = indexTimePerFile / symbolsPerFile;
130
+ }
131
+ return normalized;
132
+ }
122
133
  export function loadBaselineMetrics(baselinePath) {
123
134
  if (!existsSync(baselinePath)) {
124
135
  return undefined;
@@ -127,7 +138,7 @@ export function loadBaselineMetrics(baselinePath) {
127
138
  const baseline = JSON.parse(content);
128
139
  if (baseline.metrics) {
129
140
  const metrics = baseline.metrics;
130
- return {
141
+ return normalizeBaselineDerivedMetrics({
131
142
  indexTimePerFile: metrics.indexTimePerFile,
132
143
  indexTimePerSymbol: metrics.indexTimePerSymbol,
133
144
  sliceBuildTimeMs: metrics.sliceBuildTimeMs,
@@ -138,7 +149,7 @@ export function loadBaselineMetrics(baselinePath) {
138
149
  exportedSymbolRatio: metrics.exportedSymbolRatio,
139
150
  avgCardTokens: metrics.avgCardTokens,
140
151
  avgSkeletonTokens: metrics.avgSkeletonTokens,
141
- };
152
+ });
142
153
  }
143
154
  if (baseline.results && baseline.results[0]) {
144
155
  const result = baseline.results[0];
@@ -159,7 +170,7 @@ export function loadBaselineMetrics(baselinePath) {
159
170
  metrics.avgCardTokens = result.sdlMcp.avgCardTokens;
160
171
  metrics.avgSkeletonTokens = result.sdlMcp.avgSkeletonTokens;
161
172
  }
162
- return metrics;
173
+ return normalizeBaselineDerivedMetrics(metrics);
163
174
  }
164
175
  return undefined;
165
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"threshold.js","sourceRoot":"","sources":["../../src/benchmark/threshold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threshold.js","sourceRoot":"","sources":["../../src/benchmark/threshold.ts"],"names":[],"mappings":"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"}