sdl-mcp 0.7.0 → 0.7.2

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 (44) hide show
  1. package/README.md +116 -9
  2. package/config/sdlmcp.config.example.json +57 -92
  3. package/config/sdlmcp.config.schema.json +3 -2
  4. package/dist/config/types.d.ts +56 -56
  5. package/dist/config/types.js +8 -8
  6. package/dist/config/types.js.map +1 -1
  7. package/dist/graph/prefetch-model.d.ts.map +1 -1
  8. package/dist/graph/prefetch-model.js +18 -1
  9. package/dist/graph/prefetch-model.js.map +1 -1
  10. package/dist/graph/prefetch.d.ts +2 -1
  11. package/dist/graph/prefetch.d.ts.map +1 -1
  12. package/dist/graph/prefetch.js +16 -0
  13. package/dist/graph/prefetch.js.map +1 -1
  14. package/dist/indexer/indexer.d.ts +3 -0
  15. package/dist/indexer/indexer.d.ts.map +1 -1
  16. package/dist/indexer/indexer.js +205 -24
  17. package/dist/indexer/indexer.js.map +1 -1
  18. package/dist/indexer/rustIndexer.d.ts.map +1 -1
  19. package/dist/indexer/rustIndexer.js +3 -4
  20. package/dist/indexer/rustIndexer.js.map +1 -1
  21. package/dist/indexer/treesitter/grammarLoader.d.ts.map +1 -1
  22. package/dist/indexer/treesitter/grammarLoader.js +32 -46
  23. package/dist/indexer/treesitter/grammarLoader.js.map +1 -1
  24. package/dist/mcp/tools/code.d.ts.map +1 -1
  25. package/dist/mcp/tools/code.js +25 -0
  26. package/dist/mcp/tools/code.js.map +1 -1
  27. package/dist/mcp/tools/delta.d.ts.map +1 -1
  28. package/dist/mcp/tools/delta.js +11 -1
  29. package/dist/mcp/tools/delta.js.map +1 -1
  30. package/dist/mcp/tools/prRisk.d.ts.map +1 -1
  31. package/dist/mcp/tools/prRisk.js +6 -0
  32. package/dist/mcp/tools/prRisk.js.map +1 -1
  33. package/dist/mcp/tools/repo.d.ts.map +1 -1
  34. package/dist/mcp/tools/repo.js +10 -0
  35. package/dist/mcp/tools/repo.js.map +1 -1
  36. package/dist/mcp/tools/slice.d.ts.map +1 -1
  37. package/dist/mcp/tools/slice.js +19 -0
  38. package/dist/mcp/tools/slice.js.map +1 -1
  39. package/dist/mcp/tools/symbol.d.ts.map +1 -1
  40. package/dist/mcp/tools/symbol.js +12 -1
  41. package/dist/mcp/tools/symbol.js.map +1 -1
  42. package/dist/ts/diagnostics.js +1 -1
  43. package/dist/ts/diagnostics.js.map +1 -1
  44. package/package.json +125 -122
package/README.md CHANGED
@@ -6,7 +6,12 @@
6
6
 
7
7
  # SDL-MCP
8
8
 
9
- [![npm version](https://img.shields.io/npm/v/sdl-mcp.svg)](https://www.npmjs.com/package/sdl-mcp) [![npm downloads](https://img.shields.io/npm/dm/sdl-mcp.svg)](https://www.npmjs.com/package/sdl-mcp)
9
+ ![npm version](https://img.shields.io/npm/v/sdl-mcp.svg) ![npm downloads](https://img.shields.io/npm/dm/sdl-mcp.svg) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/GlitterKill/sdl-mcp/ci.yml?label=CI%20Builds)
10
+ ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/GlitterKill/sdl-mcp/publish-native.yml?label=Rust%20Indexer%20Builds) ![GitHub commit activity](https://img.shields.io/github/commit-activity/w/GlitterKill/sdl-mcp)
11
+
12
+
13
+
14
+
10
15
 
11
16
  <div align="right">
12
17
  <details>
@@ -42,20 +47,122 @@ Instead of opening large files first, SDL-MCP indexes repositories into symbol c
42
47
  - Faster iteration through incremental indexing and refresh workflows
43
48
  - Works across TypeScript, JavaScript, Python, Go, Java, C#, C, C++, PHP, Rust, Kotlin, and Shell
44
49
 
45
- ## ChatGPT-5.3-Codex XHigh Overview
50
+ ## Claude Opus 4.6 High Overview
51
+
52
+ Question: "Review the code for SDL-MCP and explain to potential new users what this MCP server does and the benefits of
53
+ using it."
54
+
55
+ Response: "# What is SDL-MCP?
56
+
57
+ **SDL-MCP** (Symbol Delta Ledger - Model Context Protocol) is an MCP server that fundamentally changes how AI coding
58
+ assistants interact with your codebase. Instead of dumping entire files into the AI's context window, SDL-MCP provides
59
+ a structured, token-efficient way to give AI agents exactly the code context they need — and nothing more.
60
+
61
+ ---
62
+
63
+ ## The Problem It Solves
64
+
65
+ When AI assistants like Claude work with code, they typically read entire files — sometimes many files — to understand
66
+ enough context to help you. This is wasteful:
67
+
68
+ - **Context windows fill up fast.** A modest codebase can easily exceed token limits.
69
+ - **Irrelevant code dilutes focus.** The AI spends tokens processing code unrelated to your task.
70
+ - **No awareness of what changed.** Every interaction starts from scratch with no incremental understanding.
71
+
72
+ SDL-MCP addresses all three by maintaining a **persistent, indexed understanding** of your codebase and serving
73
+ context through a 4-rung escalation ladder.
74
+
75
+ ---
76
+
77
+ ## How It Works
78
+
79
+ ### 1. Symbol Indexing
80
+
81
+ SDL-MCP parses your TypeScript/JavaScript codebase using tree-sitter (or an optional Rust native indexer) and extracts
82
+ every function, class, interface, type, and variable into **Symbol Cards** — compact metadata records containing the
83
+ symbol's signature, a brief summary, dependency edges, and metrics like fan-in/out.
84
+
85
+ The stats speak for themselves: this repository has **11,475 symbols** across **1,553 files** with **261,813
86
+ dependency edges** tracked. A full card dump would cost ~2.3M tokens. The overview costs **825 tokens** — a **2,782x
87
+ compression ratio**.
88
+
89
+ ### 2. The Context Ladder (4 Rungs)
90
+
91
+ Instead of "here's the whole file," SDL-MCP provides context in escalating detail:
92
+
93
+ | Rung | What You Get | Token Cost | When Used |
94
+ |------|-------------|------------|-----------|
95
+ | **Symbol Cards** | Name, signature, summary, dependencies | ~50 tokens | Always start here |
96
+ | **Skeleton IR** | Signatures + control flow, bodies elided | ~200 tokens | Understanding structure |
97
+ | **Hot-Path Excerpt** | Only lines matching specific identifiers | ~500 tokens | Finding specific logic |
98
+ | **Full Code Window** | Complete source (gated, requires justification) | ~2,000 tokens | Last resort |
99
+
100
+ Most questions can be answered at rungs 1-2 without ever reading raw code.
101
+
102
+ ### 3. Graph Slices
103
+
104
+ When an AI needs to understand context around a task, SDL-MCP builds a **task-scoped subgraph** — a slice of related
105
+ symbols connected by call, import, and config edges, scored by relevance and bounded by a token budget. This means the
106
+ AI gets the 20-30 most relevant symbols for a task, not an arbitrary directory listing.
107
+
108
+ ### 4. Delta Packs
109
+
110
+ When code changes, SDL-MCP computes **diffs at the symbol level** — not line-level diffs, but semantic changes to
111
+ signatures, invariants, and side effects. It also computes a **blast radius**: which other symbols are affected by the
112
+ change, ranked by proximity and importance.
113
+
114
+ ### 5. Proof-of-Need Gating
115
+
116
+ Raw code access requires justification. The AI must specify *why* it needs the code, *what identifiers* it expects to
117
+ find, and *how many lines* it needs. Requests are audited. This prevents lazy "just read the whole file" patterns and
118
+ keeps token usage disciplined.
119
+
120
+ ---
121
+
122
+ ## Key Benefits
123
+
124
+ **For AI-assisted development:**
125
+
126
+ - **10-50x fewer tokens** per coding task compared to reading raw files
127
+ - **More relevant context** — graph-based slicing finds related code that directory-based approaches miss
128
+ - **Incremental understanding** — delta packs mean the AI doesn't re-read unchanged code
129
+ - **Audit trail** — every raw code access is logged with justification
130
+
131
+ **For large codebases:**
132
+
133
+ - Scales to thousands of files without blowing context windows
134
+ - Symbol-level tracking survives whitespace changes and trivial refactors
135
+ - SQLite-backed persistence means indexing happens once, not every session
136
+
137
+ **For teams:**
138
+
139
+ - Consistent context governance via configurable policies
140
+ - Blast radius analysis shows the ripple effects of changes before they land
141
+ - Works as a standard MCP server — compatible with any MCP-capable client
142
+
143
+ ---
46
144
 
47
- Question: "Review code and explain what this MCP server does and the benefits of using it."
145
+ ## Practical Setup
48
146
 
49
- Response: "SDLMCP is a Model Context Protocol (MCP) server that turns your codebase into a queryable, versioned knowledge system for AI agents. Instead of “reading files,” agents interact with a set of structured tools that can register repositories, index them, and retrieve precise, high-signal context about what matters for a task.
147
+ SDL-MCP runs as a CLI with 5 commands:
50
148
 
51
- At its core, SDL‑MCP builds and maintains a SQLite-backed symbol ledger: it indexes files, extracts symbols (names, kinds, locations, signatures, summaries), and records dependency relationships like imports and call edges. That foundation enables fast, repeatable navigation from a question (“where is this used?”) to the exact set of relevant code elements, without the noise and cost of full-file context.
149
+ ```bash
150
+ sdl-mcp init # Create config + database
151
+ sdl-mcp index # Index your repositories
152
+ sdl-mcp serve # Start the MCP server (stdio or HTTP)
153
+ sdl-mcp doctor # Health check
154
+ sdl-mcp version # Version info
52
155
 
53
- On top of the ledger, SDL‑MCP provides practical developer workflows as tools: search for symbols, fetch a detailed “symbol card,” and automatically build focused graph slices that capture the most relevant surrounding code for a given task. It also supports deltas and blast-radius analysis between versions, plus PR risk analysis to help
54
- prioritize what to review and what to test.
156
+ Once running, any MCP client (Claude Code, Claude Desktop, etc.) connects to it and gains access to 13 tools for
157
+ navigating your codebase efficiently.
55
158
 
56
- SDL‑MCP is built for responsible code access. When raw code is necessary, it offers graduated options—skeleton views (structure without full bodies), hot-path excerpts (only matching identifiers with context), and a policy-gated “need window” request for full code. Policies enforce limits and require intent signals (like identifiers), reducing overexposure while still enabling effective debugging when it’s justified.
159
+ ---
160
+ In Summary
57
161
 
58
- The result is faster, cheaper, and safer agent assistance: less token burn, more relevant context, clearer change impact, and better governance through auditing of tool calls and policy decisions. It’s a code-intelligence layer that makes AI collaboration feel less like “chatting with a repo” and more like using a purpose-built engineering assistant."
162
+ SDL-MCP is a code context server that treats your codebase like a searchable knowledge graph rather than a pile of
163
+ text files. It gives AI assistants surgical access to exactly what they need, dramatically reducing token waste while
164
+ improving the quality of code understanding. Think of it as giving your AI a proper IDE-level understanding of your
165
+ code, rather than having it grep through files."
59
166
 
60
167
  ## Quick Start
61
168
 
@@ -1,4 +1,6 @@
1
1
  {
2
+ "$schema": "./sdlmcp.config.schema.json",
3
+
2
4
  "repos": [
3
5
  {
4
6
  "repoId": "my-repo",
@@ -12,118 +14,43 @@
12
14
  "**/coverage/**"
13
15
  ],
14
16
  "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"
17
+ "ts", "tsx", "js", "jsx",
18
+ "py", "go", "java", "cs",
19
+ "c", "cpp", "php", "rs",
20
+ "kt", "sh"
29
21
  ],
30
22
  "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
- ]
23
+ "includeNodeModulesTypes": true,
24
+ "packageJsonPath": null,
25
+ "tsconfigPath": null,
26
+ "workspaceGlobs": null
106
27
  }
107
28
  ],
29
+
108
30
  "dbPath": "./data/sdlmcp.sqlite",
31
+
109
32
  "policy": {
110
33
  "maxWindowLines": 180,
111
34
  "maxWindowTokens": 1400,
112
35
  "requireIdentifiers": true,
113
36
  "allowBreakGlass": true
114
37
  },
38
+
115
39
  "redaction": {
116
40
  "enabled": true,
117
41
  "includeDefaults": true,
118
42
  "patterns": []
119
43
  },
44
+
120
45
  "indexing": {
121
- "concurrency": 4,
46
+ "concurrency": 8,
122
47
  "enableFileWatching": true,
123
48
  "maxWatchedFiles": 25000,
49
+ "workerPoolSize": null,
124
50
  "engine": "typescript",
125
51
  "watchDebounceMs": 300
126
52
  },
53
+
127
54
  "slice": {
128
55
  "defaultMaxCards": 60,
129
56
  "defaultMaxTokens": 12000,
@@ -133,6 +60,15 @@
133
60
  "config": 0.8
134
61
  }
135
62
  },
63
+
64
+ "diagnostics": {
65
+ "enabled": true,
66
+ "mode": "tsLS",
67
+ "maxErrors": 50,
68
+ "timeoutMs": 2000,
69
+ "scope": "changedFiles"
70
+ },
71
+
136
72
  "cache": {
137
73
  "enabled": true,
138
74
  "symbolCardMaxEntries": 2000,
@@ -140,8 +76,15 @@
140
76
  "graphSliceMaxEntries": 1000,
141
77
  "graphSliceMaxSizeBytes": 52428800
142
78
  },
79
+
80
+ "plugins": {
81
+ "paths": [],
82
+ "enabled": true,
83
+ "strictVersioning": true
84
+ },
85
+
143
86
  "semantic": {
144
- "enabled": false,
87
+ "enabled": true,
145
88
  "alpha": 0.6,
146
89
  "provider": "mock",
147
90
  "model": "all-MiniLM-L6-v2",
@@ -150,11 +93,33 @@
150
93
  "summaryApiKey": null,
151
94
  "summaryApiBaseUrl": null,
152
95
  "summaryMaxConcurrency": 5,
153
- "summaryBatchSize": 20
96
+ "summaryBatchSize": 20,
97
+ "ann": {
98
+ "enabled": false,
99
+ "m": 16,
100
+ "efConstruction": 200,
101
+ "efSearch": 50,
102
+ "maxElements": 200000
103
+ }
154
104
  },
105
+
155
106
  "prefetch": {
156
107
  "enabled": true,
157
108
  "maxBudgetPercent": 20,
158
109
  "warmTopN": 50
110
+ },
111
+
112
+ "tracing": {
113
+ "enabled": false,
114
+ "serviceName": "sdl-mcp",
115
+ "exporterType": "console",
116
+ "otlpEndpoint": null,
117
+ "sampleRate": 1.0
118
+ },
119
+
120
+ "parallelScorer": {
121
+ "enabled": false,
122
+ "poolSize": null,
123
+ "minBatchSize": null
159
124
  }
160
125
  }
@@ -410,7 +410,8 @@
410
410
  "properties": {
411
411
  "enabled": {
412
412
  "type": "boolean",
413
- "default": false
413
+ "description": "Enable semantic reranking in symbol search",
414
+ "default": true
414
415
  },
415
416
  "alpha": {
416
417
  "type": "number",
@@ -506,7 +507,7 @@
506
507
  }
507
508
  },
508
509
  "default": {
509
- "enabled": false,
510
+ "enabled": true,
510
511
  "alpha": 0.6,
511
512
  "provider": "mock",
512
513
  "model": "all-MiniLM-L6-v2",
@@ -7,9 +7,9 @@ export declare const RepoConfigSchema: z.ZodObject<{
7
7
  languages: z.ZodDefault<z.ZodArray<z.ZodEnum<["ts", "tsx", "js", "jsx", "py", "go", "java", "cs", "c", "cpp", "php", "rs", "kt", "sh"]>, "many">>;
8
8
  maxFileBytes: z.ZodDefault<z.ZodNumber>;
9
9
  includeNodeModulesTypes: z.ZodDefault<z.ZodBoolean>;
10
- packageJsonPath: z.ZodOptional<z.ZodString>;
11
- tsconfigPath: z.ZodOptional<z.ZodString>;
12
- workspaceGlobs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
10
+ packageJsonPath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
+ tsconfigPath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
+ workspaceGlobs: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
13
13
  }, "strip", z.ZodTypeAny, {
14
14
  repoId: string;
15
15
  rootPath: string;
@@ -17,9 +17,9 @@ export declare const RepoConfigSchema: z.ZodObject<{
17
17
  languages: ("ts" | "tsx" | "js" | "jsx" | "py" | "go" | "java" | "cs" | "c" | "cpp" | "php" | "rs" | "kt" | "sh")[];
18
18
  maxFileBytes: number;
19
19
  includeNodeModulesTypes: boolean;
20
- packageJsonPath?: string | undefined;
21
- tsconfigPath?: string | undefined;
22
- workspaceGlobs?: string[] | undefined;
20
+ packageJsonPath?: string | null | undefined;
21
+ tsconfigPath?: string | null | undefined;
22
+ workspaceGlobs?: string[] | null | undefined;
23
23
  }, {
24
24
  repoId: string;
25
25
  rootPath: string;
@@ -27,9 +27,9 @@ export declare const RepoConfigSchema: z.ZodObject<{
27
27
  languages?: ("ts" | "tsx" | "js" | "jsx" | "py" | "go" | "java" | "cs" | "c" | "cpp" | "php" | "rs" | "kt" | "sh")[] | undefined;
28
28
  maxFileBytes?: number | undefined;
29
29
  includeNodeModulesTypes?: boolean | undefined;
30
- packageJsonPath?: string | undefined;
31
- tsconfigPath?: string | undefined;
32
- workspaceGlobs?: string[] | undefined;
30
+ packageJsonPath?: string | null | undefined;
31
+ tsconfigPath?: string | null | undefined;
32
+ workspaceGlobs?: string[] | null | undefined;
33
33
  }>;
34
34
  export type RepoConfig = z.infer<typeof RepoConfigSchema>;
35
35
  export declare const PolicyConfigSchema: z.ZodObject<{
@@ -100,7 +100,7 @@ export declare const IndexingConfigSchema: z.ZodObject<{
100
100
  concurrency: z.ZodDefault<z.ZodNumber>;
101
101
  enableFileWatching: z.ZodDefault<z.ZodBoolean>;
102
102
  maxWatchedFiles: z.ZodDefault<z.ZodNumber>;
103
- workerPoolSize: z.ZodOptional<z.ZodNumber>;
103
+ workerPoolSize: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
104
104
  engine: z.ZodDefault<z.ZodEnum<["typescript", "rust"]>>;
105
105
  watchDebounceMs: z.ZodDefault<z.ZodNumber>;
106
106
  }, "strip", z.ZodTypeAny, {
@@ -109,12 +109,12 @@ export declare const IndexingConfigSchema: z.ZodObject<{
109
109
  maxWatchedFiles: number;
110
110
  engine: "typescript" | "rust";
111
111
  watchDebounceMs: number;
112
- workerPoolSize?: number | undefined;
112
+ workerPoolSize?: number | null | undefined;
113
113
  }, {
114
114
  concurrency?: number | undefined;
115
115
  enableFileWatching?: boolean | undefined;
116
116
  maxWatchedFiles?: number | undefined;
117
- workerPoolSize?: number | undefined;
117
+ workerPoolSize?: number | null | undefined;
118
118
  engine?: "typescript" | "rust" | undefined;
119
119
  watchDebounceMs?: number | undefined;
120
120
  }>;
@@ -326,34 +326,34 @@ export declare const TracingConfigSchema: z.ZodObject<{
326
326
  enabled: z.ZodDefault<z.ZodBoolean>;
327
327
  serviceName: z.ZodDefault<z.ZodString>;
328
328
  exporterType: z.ZodDefault<z.ZodEnum<["console", "otlp", "memory"]>>;
329
- otlpEndpoint: z.ZodOptional<z.ZodString>;
329
+ otlpEndpoint: z.ZodOptional<z.ZodNullable<z.ZodString>>;
330
330
  sampleRate: z.ZodDefault<z.ZodNumber>;
331
331
  }, "strip", z.ZodTypeAny, {
332
332
  enabled: boolean;
333
333
  serviceName: string;
334
334
  exporterType: "console" | "otlp" | "memory";
335
335
  sampleRate: number;
336
- otlpEndpoint?: string | undefined;
336
+ otlpEndpoint?: string | null | undefined;
337
337
  }, {
338
338
  enabled?: boolean | undefined;
339
339
  serviceName?: string | undefined;
340
340
  exporterType?: "console" | "otlp" | "memory" | undefined;
341
- otlpEndpoint?: string | undefined;
341
+ otlpEndpoint?: string | null | undefined;
342
342
  sampleRate?: number | undefined;
343
343
  }>;
344
344
  export type TracingConfig = z.infer<typeof TracingConfigSchema>;
345
345
  export declare const ParallelScorerConfigSchema: z.ZodObject<{
346
346
  enabled: z.ZodDefault<z.ZodBoolean>;
347
- poolSize: z.ZodOptional<z.ZodNumber>;
348
- minBatchSize: z.ZodOptional<z.ZodNumber>;
347
+ poolSize: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
348
+ minBatchSize: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
349
349
  }, "strip", z.ZodTypeAny, {
350
350
  enabled: boolean;
351
- poolSize?: number | undefined;
352
- minBatchSize?: number | undefined;
351
+ poolSize?: number | null | undefined;
352
+ minBatchSize?: number | null | undefined;
353
353
  }, {
354
354
  enabled?: boolean | undefined;
355
- poolSize?: number | undefined;
356
- minBatchSize?: number | undefined;
355
+ poolSize?: number | null | undefined;
356
+ minBatchSize?: number | null | undefined;
357
357
  }>;
358
358
  export type ParallelScorerConfig = z.infer<typeof ParallelScorerConfigSchema>;
359
359
  export declare const AppConfigSchema: z.ZodObject<{
@@ -364,9 +364,9 @@ export declare const AppConfigSchema: z.ZodObject<{
364
364
  languages: z.ZodDefault<z.ZodArray<z.ZodEnum<["ts", "tsx", "js", "jsx", "py", "go", "java", "cs", "c", "cpp", "php", "rs", "kt", "sh"]>, "many">>;
365
365
  maxFileBytes: z.ZodDefault<z.ZodNumber>;
366
366
  includeNodeModulesTypes: z.ZodDefault<z.ZodBoolean>;
367
- packageJsonPath: z.ZodOptional<z.ZodString>;
368
- tsconfigPath: z.ZodOptional<z.ZodString>;
369
- workspaceGlobs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
367
+ packageJsonPath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
368
+ tsconfigPath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
369
+ workspaceGlobs: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
370
370
  }, "strip", z.ZodTypeAny, {
371
371
  repoId: string;
372
372
  rootPath: string;
@@ -374,9 +374,9 @@ export declare const AppConfigSchema: z.ZodObject<{
374
374
  languages: ("ts" | "tsx" | "js" | "jsx" | "py" | "go" | "java" | "cs" | "c" | "cpp" | "php" | "rs" | "kt" | "sh")[];
375
375
  maxFileBytes: number;
376
376
  includeNodeModulesTypes: boolean;
377
- packageJsonPath?: string | undefined;
378
- tsconfigPath?: string | undefined;
379
- workspaceGlobs?: string[] | undefined;
377
+ packageJsonPath?: string | null | undefined;
378
+ tsconfigPath?: string | null | undefined;
379
+ workspaceGlobs?: string[] | null | undefined;
380
380
  }, {
381
381
  repoId: string;
382
382
  rootPath: string;
@@ -384,9 +384,9 @@ export declare const AppConfigSchema: z.ZodObject<{
384
384
  languages?: ("ts" | "tsx" | "js" | "jsx" | "py" | "go" | "java" | "cs" | "c" | "cpp" | "php" | "rs" | "kt" | "sh")[] | undefined;
385
385
  maxFileBytes?: number | undefined;
386
386
  includeNodeModulesTypes?: boolean | undefined;
387
- packageJsonPath?: string | undefined;
388
- tsconfigPath?: string | undefined;
389
- workspaceGlobs?: string[] | undefined;
387
+ packageJsonPath?: string | null | undefined;
388
+ tsconfigPath?: string | null | undefined;
389
+ workspaceGlobs?: string[] | null | undefined;
390
390
  }>, "many">;
391
391
  dbPath: z.ZodString;
392
392
  policy: z.ZodObject<{
@@ -442,7 +442,7 @@ export declare const AppConfigSchema: z.ZodObject<{
442
442
  concurrency: z.ZodDefault<z.ZodNumber>;
443
443
  enableFileWatching: z.ZodDefault<z.ZodBoolean>;
444
444
  maxWatchedFiles: z.ZodDefault<z.ZodNumber>;
445
- workerPoolSize: z.ZodOptional<z.ZodNumber>;
445
+ workerPoolSize: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
446
446
  engine: z.ZodDefault<z.ZodEnum<["typescript", "rust"]>>;
447
447
  watchDebounceMs: z.ZodDefault<z.ZodNumber>;
448
448
  }, "strip", z.ZodTypeAny, {
@@ -451,12 +451,12 @@ export declare const AppConfigSchema: z.ZodObject<{
451
451
  maxWatchedFiles: number;
452
452
  engine: "typescript" | "rust";
453
453
  watchDebounceMs: number;
454
- workerPoolSize?: number | undefined;
454
+ workerPoolSize?: number | null | undefined;
455
455
  }, {
456
456
  concurrency?: number | undefined;
457
457
  enableFileWatching?: boolean | undefined;
458
458
  maxWatchedFiles?: number | undefined;
459
- workerPoolSize?: number | undefined;
459
+ workerPoolSize?: number | null | undefined;
460
460
  engine?: "typescript" | "rust" | undefined;
461
461
  watchDebounceMs?: number | undefined;
462
462
  }>>;
@@ -628,33 +628,33 @@ export declare const AppConfigSchema: z.ZodObject<{
628
628
  enabled: z.ZodDefault<z.ZodBoolean>;
629
629
  serviceName: z.ZodDefault<z.ZodString>;
630
630
  exporterType: z.ZodDefault<z.ZodEnum<["console", "otlp", "memory"]>>;
631
- otlpEndpoint: z.ZodOptional<z.ZodString>;
631
+ otlpEndpoint: z.ZodOptional<z.ZodNullable<z.ZodString>>;
632
632
  sampleRate: z.ZodDefault<z.ZodNumber>;
633
633
  }, "strip", z.ZodTypeAny, {
634
634
  enabled: boolean;
635
635
  serviceName: string;
636
636
  exporterType: "console" | "otlp" | "memory";
637
637
  sampleRate: number;
638
- otlpEndpoint?: string | undefined;
638
+ otlpEndpoint?: string | null | undefined;
639
639
  }, {
640
640
  enabled?: boolean | undefined;
641
641
  serviceName?: string | undefined;
642
642
  exporterType?: "console" | "otlp" | "memory" | undefined;
643
- otlpEndpoint?: string | undefined;
643
+ otlpEndpoint?: string | null | undefined;
644
644
  sampleRate?: number | undefined;
645
645
  }>>;
646
646
  parallelScorer: z.ZodOptional<z.ZodObject<{
647
647
  enabled: z.ZodDefault<z.ZodBoolean>;
648
- poolSize: z.ZodOptional<z.ZodNumber>;
649
- minBatchSize: z.ZodOptional<z.ZodNumber>;
648
+ poolSize: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
649
+ minBatchSize: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
650
650
  }, "strip", z.ZodTypeAny, {
651
651
  enabled: boolean;
652
- poolSize?: number | undefined;
653
- minBatchSize?: number | undefined;
652
+ poolSize?: number | null | undefined;
653
+ minBatchSize?: number | null | undefined;
654
654
  }, {
655
655
  enabled?: boolean | undefined;
656
- poolSize?: number | undefined;
657
- minBatchSize?: number | undefined;
656
+ poolSize?: number | null | undefined;
657
+ minBatchSize?: number | null | undefined;
658
658
  }>>;
659
659
  }, "strip", z.ZodTypeAny, {
660
660
  repos: {
@@ -664,9 +664,9 @@ export declare const AppConfigSchema: z.ZodObject<{
664
664
  languages: ("ts" | "tsx" | "js" | "jsx" | "py" | "go" | "java" | "cs" | "c" | "cpp" | "php" | "rs" | "kt" | "sh")[];
665
665
  maxFileBytes: number;
666
666
  includeNodeModulesTypes: boolean;
667
- packageJsonPath?: string | undefined;
668
- tsconfigPath?: string | undefined;
669
- workspaceGlobs?: string[] | undefined;
667
+ packageJsonPath?: string | null | undefined;
668
+ tsconfigPath?: string | null | undefined;
669
+ workspaceGlobs?: string[] | null | undefined;
670
670
  }[];
671
671
  dbPath: string;
672
672
  policy: {
@@ -699,7 +699,7 @@ export declare const AppConfigSchema: z.ZodObject<{
699
699
  maxWatchedFiles: number;
700
700
  engine: "typescript" | "rust";
701
701
  watchDebounceMs: number;
702
- workerPoolSize?: number | undefined;
702
+ workerPoolSize?: number | null | undefined;
703
703
  } | undefined;
704
704
  diagnostics?: {
705
705
  enabled: boolean;
@@ -749,12 +749,12 @@ export declare const AppConfigSchema: z.ZodObject<{
749
749
  serviceName: string;
750
750
  exporterType: "console" | "otlp" | "memory";
751
751
  sampleRate: number;
752
- otlpEndpoint?: string | undefined;
752
+ otlpEndpoint?: string | null | undefined;
753
753
  } | undefined;
754
754
  parallelScorer?: {
755
755
  enabled: boolean;
756
- poolSize?: number | undefined;
757
- minBatchSize?: number | undefined;
756
+ poolSize?: number | null | undefined;
757
+ minBatchSize?: number | null | undefined;
758
758
  } | undefined;
759
759
  }, {
760
760
  repos: {
@@ -764,9 +764,9 @@ export declare const AppConfigSchema: z.ZodObject<{
764
764
  languages?: ("ts" | "tsx" | "js" | "jsx" | "py" | "go" | "java" | "cs" | "c" | "cpp" | "php" | "rs" | "kt" | "sh")[] | undefined;
765
765
  maxFileBytes?: number | undefined;
766
766
  includeNodeModulesTypes?: boolean | undefined;
767
- packageJsonPath?: string | undefined;
768
- tsconfigPath?: string | undefined;
769
- workspaceGlobs?: string[] | undefined;
767
+ packageJsonPath?: string | null | undefined;
768
+ tsconfigPath?: string | null | undefined;
769
+ workspaceGlobs?: string[] | null | undefined;
770
770
  }[];
771
771
  dbPath: string;
772
772
  policy: {
@@ -797,7 +797,7 @@ export declare const AppConfigSchema: z.ZodObject<{
797
797
  concurrency?: number | undefined;
798
798
  enableFileWatching?: boolean | undefined;
799
799
  maxWatchedFiles?: number | undefined;
800
- workerPoolSize?: number | undefined;
800
+ workerPoolSize?: number | null | undefined;
801
801
  engine?: "typescript" | "rust" | undefined;
802
802
  watchDebounceMs?: number | undefined;
803
803
  } | undefined;
@@ -848,13 +848,13 @@ export declare const AppConfigSchema: z.ZodObject<{
848
848
  enabled?: boolean | undefined;
849
849
  serviceName?: string | undefined;
850
850
  exporterType?: "console" | "otlp" | "memory" | undefined;
851
- otlpEndpoint?: string | undefined;
851
+ otlpEndpoint?: string | null | undefined;
852
852
  sampleRate?: number | undefined;
853
853
  } | undefined;
854
854
  parallelScorer?: {
855
855
  enabled?: boolean | undefined;
856
- poolSize?: number | undefined;
857
- minBatchSize?: number | undefined;
856
+ poolSize?: number | null | undefined;
857
+ minBatchSize?: number | null | undefined;
858
858
  } | undefined;
859
859
  }>;
860
860
  export type AppConfig = z.infer<typeof AppConfigSchema>;