kiri-mcp-server 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +101 -27
  2. package/dist/package.json +1 -1
  3. package/dist/src/client/model-cli.d.ts +12 -0
  4. package/dist/src/client/model-cli.d.ts.map +1 -0
  5. package/dist/src/client/model-cli.js +247 -0
  6. package/dist/src/client/model-cli.js.map +1 -0
  7. package/dist/src/client/proxy.js +0 -0
  8. package/dist/src/daemon/daemon.js +0 -0
  9. package/dist/src/indexer/graph-metrics.d.ts.map +1 -1
  10. package/dist/src/indexer/graph-metrics.js +16 -4
  11. package/dist/src/indexer/graph-metrics.js.map +1 -1
  12. package/dist/src/server/boost-profiles.d.ts +1 -1
  13. package/dist/src/server/boost-profiles.d.ts.map +1 -1
  14. package/dist/src/server/boost-profiles.js +22 -0
  15. package/dist/src/server/boost-profiles.js.map +1 -1
  16. package/dist/src/server/context.d.ts +2 -0
  17. package/dist/src/server/context.d.ts.map +1 -1
  18. package/dist/src/server/context.js.map +1 -1
  19. package/dist/src/server/handlers.d.ts.map +1 -1
  20. package/dist/src/server/handlers.js +25 -4
  21. package/dist/src/server/handlers.js.map +1 -1
  22. package/dist/src/server/main.js +0 -0
  23. package/dist/src/server/rpc.js +4 -4
  24. package/dist/src/server/rpc.js.map +1 -1
  25. package/dist/src/shared/utils/global-dirs.d.ts +64 -0
  26. package/dist/src/shared/utils/global-dirs.d.ts.map +1 -0
  27. package/dist/src/shared/utils/global-dirs.js +134 -0
  28. package/dist/src/shared/utils/global-dirs.js.map +1 -0
  29. package/dist/src/vss/config.d.ts +66 -0
  30. package/dist/src/vss/config.d.ts.map +1 -0
  31. package/dist/src/vss/config.js +233 -0
  32. package/dist/src/vss/config.js.map +1 -0
  33. package/dist/src/vss/index.d.ts +9 -0
  34. package/dist/src/vss/index.d.ts.map +1 -0
  35. package/dist/src/vss/index.js +9 -0
  36. package/dist/src/vss/index.js.map +1 -0
  37. package/dist/src/vss/model-downloader.d.ts +101 -0
  38. package/dist/src/vss/model-downloader.d.ts.map +1 -0
  39. package/dist/src/vss/model-downloader.js +320 -0
  40. package/dist/src/vss/model-downloader.js.map +1 -0
  41. package/dist/src/vss/provider.d.ts +132 -0
  42. package/dist/src/vss/provider.d.ts.map +1 -0
  43. package/dist/src/vss/provider.js +254 -0
  44. package/dist/src/vss/provider.js.map +1 -0
  45. package/package.json +1 -1
  46. package/dist/client/cli.js +0 -68
  47. package/dist/client/cli.js.map +0 -1
  48. package/dist/client/index.js +0 -5
  49. package/dist/client/index.js.map +0 -1
  50. package/dist/eval/metrics.js +0 -47
  51. package/dist/eval/metrics.js.map +0 -1
  52. package/dist/indexer/cli.js +0 -362
  53. package/dist/indexer/cli.js.map +0 -1
  54. package/dist/indexer/codeintel.js +0 -182
  55. package/dist/indexer/codeintel.js.map +0 -1
  56. package/dist/indexer/git.js +0 -30
  57. package/dist/indexer/git.js.map +0 -1
  58. package/dist/indexer/language.js +0 -34
  59. package/dist/indexer/language.js.map +0 -1
  60. package/dist/indexer/pipeline/filters/denylist.js +0 -71
  61. package/dist/indexer/pipeline/filters/denylist.js.map +0 -1
  62. package/dist/indexer/schema.js +0 -101
  63. package/dist/indexer/schema.js.map +0 -1
  64. package/dist/server/bootstrap.js +0 -19
  65. package/dist/server/bootstrap.js.map +0 -1
  66. package/dist/server/context.js +0 -1
  67. package/dist/server/context.js.map +0 -1
  68. package/dist/server/fallbacks/degradeController.js +0 -69
  69. package/dist/server/fallbacks/degradeController.js.map +0 -1
  70. package/dist/server/handlers.js +0 -1268
  71. package/dist/server/handlers.js.map +0 -1
  72. package/dist/server/main.js +0 -151
  73. package/dist/server/main.js.map +0 -1
  74. package/dist/server/observability/metrics.js +0 -56
  75. package/dist/server/observability/metrics.js.map +0 -1
  76. package/dist/server/observability/tracing.js +0 -58
  77. package/dist/server/observability/tracing.js.map +0 -1
  78. package/dist/server/rpc.js +0 -477
  79. package/dist/server/rpc.js.map +0 -1
  80. package/dist/server/runtime.js +0 -47
  81. package/dist/server/runtime.js.map +0 -1
  82. package/dist/server/scoring.js +0 -116
  83. package/dist/server/scoring.js.map +0 -1
  84. package/dist/server/stdio.js +0 -76
  85. package/dist/server/stdio.js.map +0 -1
  86. package/dist/shared/duckdb.js +0 -119
  87. package/dist/shared/duckdb.js.map +0 -1
  88. package/dist/shared/embedding.js +0 -98
  89. package/dist/shared/embedding.js.map +0 -1
  90. package/dist/shared/index.js +0 -9
  91. package/dist/shared/index.js.map +0 -1
  92. package/dist/shared/security/config.js +0 -64
  93. package/dist/shared/security/config.js.map +0 -1
  94. package/dist/shared/security/masker.js +0 -56
  95. package/dist/shared/security/masker.js.map +0 -1
  96. package/dist/shared/tokenizer.js +0 -4
  97. package/dist/shared/tokenizer.js.map +0 -1
  98. package/dist/shared/utils/simpleYaml.js +0 -89
  99. package/dist/shared/utils/simpleYaml.js.map +0 -1
  100. package/dist/src/server/rrf.d.ts +0 -86
  101. package/dist/src/server/rrf.d.ts.map +0 -1
  102. package/dist/src/server/rrf.js +0 -108
  103. package/dist/src/server/rrf.js.map +0 -1
  104. package/dist/src/shared/embedding/engine.d.ts +0 -38
  105. package/dist/src/shared/embedding/engine.d.ts.map +0 -1
  106. package/dist/src/shared/embedding/engine.js +0 -6
  107. package/dist/src/shared/embedding/engine.js.map +0 -1
  108. package/dist/src/shared/embedding/lsh-engine.d.ts +0 -11
  109. package/dist/src/shared/embedding/lsh-engine.d.ts.map +0 -1
  110. package/dist/src/shared/embedding/lsh-engine.js +0 -14
  111. package/dist/src/shared/embedding/lsh-engine.js.map +0 -1
  112. package/dist/src/shared/embedding/registry.d.ts +0 -25
  113. package/dist/src/shared/embedding/registry.d.ts.map +0 -1
  114. package/dist/src/shared/embedding/registry.js +0 -50
  115. package/dist/src/shared/embedding/registry.js.map +0 -1
  116. package/dist/src/shared/embedding/semantic-engine.d.ts +0 -14
  117. package/dist/src/shared/embedding/semantic-engine.d.ts.map +0 -1
  118. package/dist/src/shared/embedding/semantic-engine.js +0 -50
  119. package/dist/src/shared/embedding/semantic-engine.js.map +0 -1
  120. package/dist/src/shared/models/model-manager.d.ts +0 -38
  121. package/dist/src/shared/models/model-manager.d.ts.map +0 -1
  122. package/dist/src/shared/models/model-manager.js +0 -116
  123. package/dist/src/shared/models/model-manager.js.map +0 -1
  124. package/dist/src/shared/models/model-manifest.d.ts +0 -22
  125. package/dist/src/shared/models/model-manifest.d.ts.map +0 -1
  126. package/dist/src/shared/models/model-manifest.js +0 -24
  127. package/dist/src/shared/models/model-manifest.js.map +0 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Intelligent code context extraction for LLMs via Model Context Protocol
4
4
 
5
- [![Version](https://img.shields.io/badge/version-0.16.0-blue.svg)](package.json)
5
+ [![Version](https://img.shields.io/badge/version-0.17.0-blue.svg)](package.json)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.6-blue.svg)](https://www.typescriptlang.org/)
8
8
  [![MCP](https://img.shields.io/badge/MCP-Compatible-green.svg)](https://modelcontextprotocol.io/)
@@ -20,20 +20,22 @@
20
20
  - **📝 Phrase-Aware**: Recognizes compound terms (kebab-case, snake_case) for precise matching
21
21
  - **🔒 Concurrency-Safe** _(v0.9.7+)_: Per-database queues, canonicalized DuckDB paths, and bootstrap-safe locking prevent FTS rebuild conflicts and keep locks consistent across symlinks—even on first run
22
22
 
23
- ## 🆕 What's New in v0.16.0
23
+ ## 🆕 What's New in v0.17.0
24
24
 
25
- ### ✨ Improvements
25
+ ### ✨ New Features
26
26
 
27
- - **DuckDB client migration**: Migrated to `@duckdb/node-api` from deprecated `duckdb` package
28
- - No more native binding compilation errors with npx
29
- - Pre-built binaries for all platforms
30
- - Improved type safety and debugging support
27
+ - **`code` boost_profile**: New boost profile that strongly deprioritizes documentation and config files (95% penalty) to focus search results on actual implementation code
28
+ - Use `boost_profile: "code"` when you want to find implementation files only
31
29
 
32
- ### Previous Release (v0.15.0)
30
+ ### 🐛 Bug Fixes
33
31
 
34
- - **`snippets_get` view parameter**: Explicit retrieval strategy control (auto/symbol/lines/full)
35
- - **Co-change scoring**: Dependency graph with PageRank-like importance scoring
36
- - **Stop words & IDF weighting**: Multi-language support (en/ja) with BM25-style ranking
32
+ - **Graph metrics retry logic**: Added retry logic for transient DuckDB errors during graph metrics computation
33
+
34
+ ### Previous Releases
35
+
36
+ - **v0.16.1**: Graceful degradation for graph layer tables
37
+ - **v0.16.0**: DuckDB client migration to `@duckdb/node-api`
38
+ - **v0.15.0**: `snippets_get` view parameter, co-change scoring, stop words & IDF weighting
37
39
 
38
40
  ## ⚙️ Prerequisites
39
41
 
@@ -260,12 +262,12 @@ Tip: Avoid leading command words like `find` or `show`; instead list concrete mo
260
262
 
261
263
  **Parameters:**
262
264
 
263
- | Parameter | Type | Required | Description |
264
- | --------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
265
- | `goal` | string | Yes | Task description or question about the code |
266
- | `limit` | number | No | Max snippets to return (default: 12, max: 20) |
267
- | `compact` | boolean | No | Return only metadata without preview (default: **true** in v0.8.0+, false in v0.7) |
268
- | `boost_profile` | string | No | File type boosting: `"default"` (prioritizes src/, blacklists docs/), `"docs"` (prioritizes .md/.yaml, includes docs/ directory), `"balanced"` (equal weight for docs and impl, NEW in v0.9.10), `"none"` (no boosting) |
265
+ | Parameter | Type | Required | Description |
266
+ | --------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
267
+ | `goal` | string | Yes | Task description or question about the code |
268
+ | `limit` | number | No | Max snippets to return (default: 12, max: 20) |
269
+ | `compact` | boolean | No | Return only metadata without preview (default: **true** in v0.8.0+, false in v0.7) |
270
+ | `boost_profile` | string | No | File type boosting: `"default"` (prioritizes src/, blacklists docs/), `"code"` (strongly deprioritizes docs/config, 95% penalty), `"docs"` (prioritizes .md/.yaml, includes docs/ directory), `"balanced"` (equal weight for docs and impl), `"none"` (no boosting) |
269
271
 
270
272
  ### 2. files_search
271
273
 
@@ -302,14 +304,14 @@ Fast search across all indexed files. Supports multi-word queries, hyphenated te
302
304
 
303
305
  **Parameters:**
304
306
 
305
- | Parameter | Type | Required | Description |
306
- | --------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
307
- | `query` | string | Yes | Search keywords or phrase |
308
- | `limit` | number | No | Max results to return (default: 50, max: 200) |
309
- | `lang` | string | No | Filter by language (e.g., "typescript", "python") |
310
- | `ext` | string | No | Filter by extension (e.g., ".ts", ".md") |
311
- | `path_prefix` | string | No | Filter by path prefix (e.g., "src/auth/") |
312
- | `boost_profile` | string | No | File type boosting: `"default"` (prioritizes src/, blacklists docs/), `"docs"` **(prioritizes .md/.yaml, includes docs/ directory)**, `"none"` (no boosting) |
307
+ | Parameter | Type | Required | Description |
308
+ | --------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
309
+ | `query` | string | Yes | Search keywords or phrase |
310
+ | `limit` | number | No | Max results to return (default: 50, max: 200) |
311
+ | `lang` | string | No | Filter by language (e.g., "typescript", "python") |
312
+ | `ext` | string | No | Filter by extension (e.g., ".ts", ".md") |
313
+ | `path_prefix` | string | No | Filter by path prefix (e.g., "src/auth/") |
314
+ | `boost_profile` | string | No | File type boosting: `"default"` (prioritizes src/, blacklists docs/), `"code"` (strongly deprioritizes docs/config, 95% penalty), `"docs"` **(prioritizes .md/.yaml, includes docs/ directory)**, `"balanced"` (equal weight), `"none"` (no boosting) |
313
315
 
314
316
  ### 3. snippets_get
315
317
 
@@ -550,6 +552,10 @@ Control search ranking behavior with the `boost_profile` parameter:
550
552
  - Implementation files get 30% boost, documentation files get 50% penalty
551
553
  - Config files heavily penalized (95% reduction)
552
554
  - `docs/` directory is blacklisted
555
+ - **`"code"`** (NEW in v0.17.0): Strongly prioritizes implementation code only
556
+ - Documentation and config files get 95% penalty
557
+ - Best for finding actual implementation when you don't want docs in results
558
+ - `docs/` directory is blacklisted
553
559
  - **`"docs"`**: Prioritizes documentation files (`*.md`) over implementation
554
560
  - Documentation files get 50% boost, implementation files get 50% penalty
555
561
  - `docs/` directory is included in search results
@@ -564,6 +570,9 @@ Control search ranking behavior with the `boost_profile` parameter:
564
570
  // Find implementation files (default behavior)
565
571
  files_search({ query: "authentication", boost_profile: "default" });
566
572
 
573
+ // Find only implementation code (no docs/config in results)
574
+ files_search({ query: "authentication", boost_profile: "code" });
575
+
567
576
  // Find documentation
568
577
  files_search({ query: "setup guide", boost_profile: "docs" });
569
578
 
@@ -715,6 +724,71 @@ KIRI automatically filters sensitive files and masks sensitive values:
715
724
  pnpm unlink --global kiri-mcp-server
716
725
  ```
717
726
 
727
+ #### Stale Lock File
728
+
729
+ **Problem**: Daemon fails to start with error `Lock file already exists. Another process is indexing.`
730
+
731
+ **Root Cause**: A previous daemon process crashed or was killed without proper cleanup, leaving a stale lock file.
732
+
733
+ **Solution**:
734
+
735
+ ```bash
736
+ # Remove the stale lock file
737
+ rm -f .kiri/index.duckdb.sock.lock
738
+
739
+ # Optionally, also remove the socket file
740
+ rm -f .kiri/index.duckdb.sock
741
+
742
+ # Restart the MCP server
743
+ ```
744
+
745
+ #### Version Mismatch After Upgrade
746
+
747
+ **Problem**: After upgrading KIRI, connection fails with `Version mismatch: client X.Y.Z is incompatible with daemon A.B.C`
748
+
749
+ **Root Cause**: An old daemon process is still running after upgrading to a new version.
750
+
751
+ **Solutions**:
752
+
753
+ 1. **Kill old daemon processes**:
754
+
755
+ ```bash
756
+ pkill -f "kiri.*daemon"
757
+ ```
758
+
759
+ 2. **Clear npx cache** (if using npx):
760
+
761
+ ```bash
762
+ npx clear-npx-cache
763
+ ```
764
+
765
+ 3. **Restart the MCP connection**
766
+
767
+ #### Schema Mismatch After Upgrade (Degrade Mode)
768
+
769
+ **Problem**: After upgrading KIRI, server shows `Server is running in degrade mode` and logs show errors like `Table with name graph_metrics does not exist`
770
+
771
+ **Root Cause**: The existing index was created with an older schema version that doesn't include new tables (e.g., `graph_metrics`, `cochange`).
772
+
773
+ **Solution**:
774
+
775
+ 1. **Stop the daemon**:
776
+
777
+ ```bash
778
+ pkill -f "kiri.*daemon"
779
+ rm -f .kiri/index.duckdb.sock.lock .kiri/index.duckdb.sock
780
+ ```
781
+
782
+ 2. **Rebuild index with full schema**:
783
+
784
+ ```bash
785
+ kiri --repo . --db .kiri/index.duckdb --full
786
+ ```
787
+
788
+ 3. **Restart your MCP client**
789
+
790
+ > **Note**: The `--full` flag ensures all tables including `graph_metrics` and `cochange` are created. This is required when upgrading from versions prior to v0.15.0.
791
+
718
792
  ### Getting Help
719
793
 
720
794
  If you encounter issues not covered here:
@@ -914,8 +988,8 @@ Built with:
914
988
 
915
989
  ---
916
990
 
917
- **Status**: v0.15.0 (Beta) - Production-ready for MCP clients
991
+ **Status**: v0.17.0 (Beta) - Production-ready for MCP clients
918
992
 
919
- **New in v0.15.0**: Co-change scoring, stop words/IDF weighting, and `snippets_get` view parameter for explicit retrieval control. See [CHANGELOG.md](CHANGELOG.md) for details.
993
+ **New in v0.17.0**: `code` boost_profile for implementation-focused search. See [CHANGELOG.md](CHANGELOG.md) for details.
920
994
 
921
995
  For questions or support, please open a [GitHub issue](https://github.com/CAPHTECH/kiri/issues).
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kiri-mcp-server",
3
- "version": "0.16.0",
3
+ "version": "0.16.1",
4
4
  "description": "KIRI context extraction platform",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@9.0.0",
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * KIRI Model CLI
4
+ *
5
+ * Manages VSS models for semantic code search.
6
+ * Usage: kiri model <command> [options]
7
+ */
8
+ /**
9
+ * Main entry point
10
+ */
11
+ export declare function runModelCli(args: string[]): Promise<number>;
12
+ //# sourceMappingURL=model-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-cli.d.ts","sourceRoot":"","sources":["../../../src/client/model-cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAsPH;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCjE"}
@@ -0,0 +1,247 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * KIRI Model CLI
4
+ *
5
+ * Manages VSS models for semantic code search.
6
+ * Usage: kiri model <command> [options]
7
+ */
8
+ import { createInterface } from "node:readline";
9
+ import { getModelsDir, listInstalledModels } from "../shared/utils/global-dirs.js";
10
+ import { SUPPORTED_MODELS } from "../vss/config.js";
11
+ import { downloadModel, removeModel, getModelStatus, listAvailableModels, formatBytes, } from "../vss/model-downloader.js";
12
+ /**
13
+ * Print usage information
14
+ */
15
+ function printUsage() {
16
+ console.info(`
17
+ KIRI Model Manager - Manage VSS models for semantic code search
18
+
19
+ Usage: kiri model <command> [options]
20
+
21
+ Commands:
22
+ download <model> Download a model from HuggingFace
23
+ remove <model> Remove an installed model
24
+ list List available and installed models
25
+ status [model] Show status of installed models
26
+
27
+ Available models:
28
+ codebert-base Microsoft CodeBERT (~500MB)
29
+ unixcoder-base Microsoft UniXcoder (~500MB)
30
+
31
+ Examples:
32
+ kiri model download codebert-base
33
+ kiri model list
34
+ kiri model status
35
+ kiri model remove codebert-base
36
+
37
+ Environment variables:
38
+ KIRI_VSS_MODEL_DIR Override model storage directory (default: ~/.kiri/models)
39
+ `);
40
+ }
41
+ /**
42
+ * Create a progress bar string
43
+ */
44
+ function progressBar(percentage, width = 30) {
45
+ const filled = Math.round((percentage / 100) * width);
46
+ const empty = width - filled;
47
+ return `[${"█".repeat(filled)}${"░".repeat(empty)}]`;
48
+ }
49
+ /**
50
+ * Progress callback for download
51
+ */
52
+ function createProgressReporter() {
53
+ let lastFile = "";
54
+ return (progress) => {
55
+ if (progress.phase === "error") {
56
+ console.error(`\n❌ Error: ${progress.error}`);
57
+ return;
58
+ }
59
+ if (progress.phase === "complete" && progress.file !== lastFile) {
60
+ if (lastFile) {
61
+ process.stdout.write("\n");
62
+ }
63
+ console.info(`✅ ${progress.file}`);
64
+ lastFile = progress.file;
65
+ return;
66
+ }
67
+ if (progress.phase === "downloading") {
68
+ const bar = progressBar(progress.percentage);
69
+ const size = progress.total > 0
70
+ ? `${formatBytes(progress.downloaded)}/${formatBytes(progress.total)}`
71
+ : formatBytes(progress.downloaded);
72
+ process.stdout.write(`\r📥 ${progress.file} ${bar} ${progress.percentage}% ${size}`);
73
+ lastFile = progress.file;
74
+ }
75
+ };
76
+ }
77
+ /**
78
+ * Prompt user for confirmation
79
+ */
80
+ async function confirm(message) {
81
+ const rl = createInterface({
82
+ input: process.stdin,
83
+ output: process.stdout,
84
+ });
85
+ return new Promise((resolve) => {
86
+ rl.question(`${message} [Y/n] `, (answer) => {
87
+ rl.close();
88
+ const normalized = answer.trim().toLowerCase();
89
+ resolve(normalized === "" || normalized === "y" || normalized === "yes");
90
+ });
91
+ });
92
+ }
93
+ /**
94
+ * Download command
95
+ */
96
+ async function cmdDownload(modelName) {
97
+ if (!modelName) {
98
+ console.error("Error: Model name required");
99
+ console.info("Available models:", SUPPORTED_MODELS.join(", "));
100
+ return 1;
101
+ }
102
+ if (!SUPPORTED_MODELS.includes(modelName)) {
103
+ console.error(`Error: Unknown model "${modelName}"`);
104
+ console.info("Available models:", SUPPORTED_MODELS.join(", "));
105
+ return 1;
106
+ }
107
+ const model = modelName;
108
+ const status = getModelStatus(model);
109
+ if (status.installed) {
110
+ console.info(`Model "${model}" is already installed at ${status.path}`);
111
+ const reinstall = await confirm("Do you want to reinstall?");
112
+ if (!reinstall) {
113
+ return 0;
114
+ }
115
+ // Remove existing installation
116
+ await removeModel(model);
117
+ }
118
+ console.info(`\nDownloading ${model}...`);
119
+ console.info(`Target directory: ${getModelsDir()}\n`);
120
+ const result = await downloadModel(model, createProgressReporter());
121
+ if (result.success) {
122
+ console.info(`\n✅ Model "${model}" installed successfully`);
123
+ console.info(` Location: ${result.modelPath}`);
124
+ return 0;
125
+ }
126
+ else {
127
+ console.error(`\n❌ Failed to download model: ${result.error}`);
128
+ return 1;
129
+ }
130
+ }
131
+ /**
132
+ * Remove command
133
+ */
134
+ async function cmdRemove(modelName) {
135
+ if (!modelName) {
136
+ console.error("Error: Model name required");
137
+ return 1;
138
+ }
139
+ if (!SUPPORTED_MODELS.includes(modelName)) {
140
+ console.error(`Error: Unknown model "${modelName}"`);
141
+ return 1;
142
+ }
143
+ const model = modelName;
144
+ const status = getModelStatus(model);
145
+ if (!status.installed) {
146
+ console.info(`Model "${model}" is not installed`);
147
+ return 0;
148
+ }
149
+ const confirmed = await confirm(`Remove model "${model}" from ${status.path}?`);
150
+ if (!confirmed) {
151
+ console.info("Cancelled");
152
+ return 0;
153
+ }
154
+ const result = await removeModel(model);
155
+ if (result.success) {
156
+ console.info(`✅ Model "${model}" removed`);
157
+ return 0;
158
+ }
159
+ else {
160
+ console.error(`❌ Failed to remove model: ${result.error}`);
161
+ return 1;
162
+ }
163
+ }
164
+ /**
165
+ * List command
166
+ */
167
+ function cmdList() {
168
+ console.info("\nAvailable VSS Models:\n");
169
+ const models = listAvailableModels();
170
+ const installed = listInstalledModels();
171
+ for (const { name, info, installed: isInstalled } of models) {
172
+ const status = isInstalled ? "✅ installed" : "⬜ not installed";
173
+ console.info(` ${name}`);
174
+ console.info(` ${info.description}`);
175
+ console.info(` Size: ${info.sizeHuman} Status: ${status}`);
176
+ console.info("");
177
+ }
178
+ console.info(`Models directory: ${getModelsDir()}`);
179
+ console.info(`Installed: ${installed.length}/${models.length}`);
180
+ return 0;
181
+ }
182
+ /**
183
+ * Status command
184
+ */
185
+ function cmdStatus(modelName) {
186
+ if (modelName) {
187
+ if (!SUPPORTED_MODELS.includes(modelName)) {
188
+ console.error(`Error: Unknown model "${modelName}"`);
189
+ return 1;
190
+ }
191
+ const status = getModelStatus(modelName);
192
+ console.info(`\nModel: ${status.name}`);
193
+ console.info(`Installed: ${status.installed ? "Yes" : "No"}`);
194
+ console.info(`Path: ${status.path}`);
195
+ if (status.installed && status.sizeOnDisk !== undefined) {
196
+ console.info(`Size on disk: ${formatBytes(status.sizeOnDisk)}`);
197
+ console.info(`Files: ${status.files?.join(", ")}`);
198
+ }
199
+ return 0;
200
+ }
201
+ // Show status for all models
202
+ console.info("\nModel Status:\n");
203
+ for (const model of SUPPORTED_MODELS) {
204
+ const status = getModelStatus(model);
205
+ const icon = status.installed ? "✅" : "⬜";
206
+ const size = status.sizeOnDisk !== undefined ? formatBytes(status.sizeOnDisk) : "-";
207
+ console.info(` ${icon} ${model.padEnd(20)} ${size.padStart(10)}`);
208
+ }
209
+ console.info(`\nModels directory: ${getModelsDir()}`);
210
+ return 0;
211
+ }
212
+ /**
213
+ * Main entry point
214
+ */
215
+ export async function runModelCli(args) {
216
+ const command = args[0];
217
+ const arg1 = args[1];
218
+ switch (command) {
219
+ case "download":
220
+ return cmdDownload(arg1);
221
+ case "remove":
222
+ case "rm":
223
+ case "delete":
224
+ return cmdRemove(arg1);
225
+ case "list":
226
+ case "ls":
227
+ return cmdList();
228
+ case "status":
229
+ return cmdStatus(arg1);
230
+ case "help":
231
+ case "--help":
232
+ case "-h":
233
+ case undefined:
234
+ printUsage();
235
+ return 0;
236
+ default:
237
+ console.error(`Unknown command: ${command}`);
238
+ printUsage();
239
+ return 1;
240
+ }
241
+ }
242
+ // Run if executed directly
243
+ if (import.meta.url === `file://${process.argv[1]}`) {
244
+ const args = process.argv.slice(2);
245
+ runModelCli(args).then((code) => process.exit(code));
246
+ }
247
+ //# sourceMappingURL=model-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-cli.js","sourceRoot":"","sources":["../../../src/client/model-cli.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"graph-metrics.d.ts","sourceRoot":"","sources":["../../../src/indexer/graph-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACvC,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0D7F;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAgFf;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAyCf"}
1
+ {"version":3,"file":"graph-metrics.d.ts","sourceRoot":"","sources":["../../../src/indexer/graph-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACvC,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D7F;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAgFf;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAyCf"}
@@ -14,6 +14,7 @@
14
14
  * - Importance score (PageRank-like)
15
15
  * - Inbound closure (BFS up to depth 3)
16
16
  */
17
+ import { withRetry } from "../shared/utils/retry.js";
17
18
  const DEFAULT_CONFIG = {
18
19
  maxDepth: 3,
19
20
  dampingFactor: 0.85,
@@ -21,6 +22,17 @@ const DEFAULT_CONFIG = {
21
22
  };
22
23
  /** Minimum score floor to prevent division by zero during PageRank normalization */
23
24
  const MIN_PAGERANK_SCORE = 0.001;
25
+ /** Retry configuration for transient DuckDB errors (e.g., concurrent access) */
26
+ const DB_RETRY_OPTIONS = {
27
+ maxAttempts: 3,
28
+ delayMs: 100,
29
+ jitterMs: 50,
30
+ isRetriable: (error) => {
31
+ const msg = error instanceof Error ? error.message : String(error);
32
+ // Retry on prepared statement failures (transient lock issues)
33
+ return msg.includes("Failed to execute prepared statement");
34
+ },
35
+ };
24
36
  /**
25
37
  * Compute all graph metrics for a repository.
26
38
  * Called after dependency extraction during indexing.
@@ -47,8 +59,8 @@ export async function computeGraphMetrics(db, repoId, config = {}) {
47
59
  * Uses SQL aggregation for efficiency.
48
60
  */
49
61
  export async function computeDegreeCentrality(db, repoId) {
50
- // Clear existing metrics for this repo
51
- await db.run(`DELETE FROM graph_metrics WHERE repo_id = ?`, [repoId]);
62
+ // Clear existing metrics for this repo (with retry for transient lock issues)
63
+ await withRetry(() => db.run(`DELETE FROM graph_metrics WHERE repo_id = ?`, [repoId]), DB_RETRY_OPTIONS);
52
64
  // Compute outbound counts (files this file imports)
53
65
  await db.run(`
54
66
  INSERT INTO graph_metrics (repo_id, path, outbound_count, inbound_count, importance_score, computed_at)
@@ -99,8 +111,8 @@ export async function computeDegreeCentrality(db, repoId) {
99
111
  * Uses recursive CTE for efficient computation.
100
112
  */
101
113
  export async function precomputeInboundClosure(db, repoId, maxDepth) {
102
- // Clear existing closure for this repo
103
- await db.run(`DELETE FROM inbound_edges WHERE repo_id = ?`, [repoId]);
114
+ // Clear existing closure for this repo (with retry for transient lock issues)
115
+ await withRetry(() => db.run(`DELETE FROM inbound_edges WHERE repo_id = ?`, [repoId]), DB_RETRY_OPTIONS);
104
116
  // Use recursive CTE to compute transitive closure
105
117
  // This computes: for each file, which files import it (directly or transitively)
106
118
  await db.run(`
@@ -1 +1 @@
1
- {"version":3,"file":"graph-metrics.js","sourceRoot":"","sources":["../../../src/indexer/graph-metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph-metrics.js","sourceRoot":"","sources":["../../../src/indexer/graph-metrics.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ export interface BoostProfileConfig {
46
46
  */
47
47
  skipConfigAdditivePenalty?: boolean;
48
48
  }
49
- export type BoostProfileName = "default" | "docs" | "none" | "balanced" | "feature" | "bugfix" | "debug" | "api" | "editor" | "testfail" | "typeerror" | "vscode";
49
+ export type BoostProfileName = "default" | "docs" | "none" | "balanced" | "code" | "feature" | "bugfix" | "debug" | "api" | "editor" | "testfail" | "typeerror" | "vscode";
50
50
  /**
51
51
  * Boost profile definitions
52
52
  * Centralized configuration for all boost profiles
@@ -1 +1 @@
1
- {"version":3,"file":"boost-profiles.d.ts","sourceRoot":"","sources":["../../../src/server/boost-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B,sDAAsD;IACtD,mBAAmB,EAAE;QACnB,mDAAmD;QACnD,GAAG,EAAE,MAAM,CAAC;QACZ,oCAAoC;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,8DAA8D;QAC9D,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;;OAGG;IACH,eAAe,EAAE,cAAc,EAAE,CAAC;IAElC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,GACL,QAAQ,GACR,UAAU,GACV,WAAW,GACX,QAAQ,CAAC;AAuDb;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAkPvE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CAS1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAE1E"}
1
+ {"version":3,"file":"boost-profiles.d.ts","sourceRoot":"","sources":["../../../src/server/boost-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B,sDAAsD;IACtD,mBAAmB,EAAE;QACnB,mDAAmD;QACnD,GAAG,EAAE,MAAM,CAAC;QACZ,oCAAoC;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,8DAA8D;QAC9D,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;;OAGG;IACH,eAAe,EAAE,cAAc,EAAE,CAAC;IAElC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,GACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,GACL,QAAQ,GACR,UAAU,GACV,WAAW,GACX,QAAQ,CAAC;AAuDb;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAyQvE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CAS1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAE1E"}
@@ -124,6 +124,28 @@ export const BOOST_PROFILES = {
124
124
  },
125
125
  pathMultipliers: [],
126
126
  },
127
+ code: {
128
+ denylistOverrides: [],
129
+ fileTypeMultipliers: {
130
+ doc: 0.05, // 95% penalty for docs (stronger than default's 0.5)
131
+ impl: 1.4, // 40% boost for implementation
132
+ config: 0.05, // 95% penalty for config files
133
+ },
134
+ // Note: Order of pathMultipliers doesn't affect matching (longest prefix wins in applyPathMultipliers)
135
+ pathMultipliers: [
136
+ // Strongly suppress common root documentation files (×0.01 = 99% penalty)
137
+ { prefix: "CLAUDE.md", multiplier: 0.01 },
138
+ { prefix: "README.md", multiplier: 0.01 },
139
+ { prefix: "CHANGELOG.md", multiplier: 0.01 },
140
+ { prefix: "CONTRIBUTING.md", multiplier: 0.01 },
141
+ { prefix: "AGENTS.md", multiplier: 0.01 },
142
+ // Implementation file boosts (same as default)
143
+ { prefix: "src/components/", multiplier: 1.3 },
144
+ { prefix: "src/app/", multiplier: 1.4 },
145
+ { prefix: "src/lib/", multiplier: 1.2 },
146
+ { prefix: "src/", multiplier: 1.0 },
147
+ ],
148
+ },
127
149
  feature: {
128
150
  denylistOverrides: [],
129
151
  fileTypeMultipliers: {