kiri-mcp-server 0.9.9 → 0.11.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 (130) hide show
  1. package/README.md +60 -7
  2. package/config/scoring-profiles.yml +82 -35
  3. package/dist/config/scoring-profiles.yml +82 -35
  4. package/dist/package.json +12 -1
  5. package/dist/src/client/proxy.js +81 -12
  6. package/dist/src/client/proxy.js.map +1 -1
  7. package/dist/src/daemon/daemon.js +91 -14
  8. package/dist/src/daemon/daemon.js.map +1 -1
  9. package/dist/src/indexer/cli.d.ts.map +1 -1
  10. package/dist/src/indexer/cli.js +712 -98
  11. package/dist/src/indexer/cli.js.map +1 -1
  12. package/dist/src/indexer/git.d.ts.map +1 -1
  13. package/dist/src/indexer/git.js +41 -3
  14. package/dist/src/indexer/git.js.map +1 -1
  15. package/dist/src/indexer/migrations/repo-merger.d.ts +33 -0
  16. package/dist/src/indexer/migrations/repo-merger.d.ts.map +1 -0
  17. package/dist/src/indexer/migrations/repo-merger.js +67 -0
  18. package/dist/src/indexer/migrations/repo-merger.js.map +1 -0
  19. package/dist/src/indexer/schema.d.ts +66 -0
  20. package/dist/src/indexer/schema.d.ts.map +1 -1
  21. package/dist/src/indexer/schema.js +337 -0
  22. package/dist/src/indexer/schema.js.map +1 -1
  23. package/dist/src/server/abbreviations.d.ts +47 -0
  24. package/dist/src/server/abbreviations.d.ts.map +1 -0
  25. package/dist/src/server/abbreviations.js +71 -0
  26. package/dist/src/server/abbreviations.js.map +1 -0
  27. package/dist/src/server/boost-profiles.d.ts +63 -0
  28. package/dist/src/server/boost-profiles.d.ts.map +1 -0
  29. package/dist/src/server/boost-profiles.js +202 -0
  30. package/dist/src/server/boost-profiles.js.map +1 -0
  31. package/dist/src/server/config.d.ts +45 -0
  32. package/dist/src/server/config.d.ts.map +1 -0
  33. package/dist/src/server/config.js +146 -0
  34. package/dist/src/server/config.js.map +1 -0
  35. package/dist/src/server/context.d.ts +29 -0
  36. package/dist/src/server/context.d.ts.map +1 -1
  37. package/dist/src/server/context.js +26 -1
  38. package/dist/src/server/context.js.map +1 -1
  39. package/dist/src/server/handlers/snippets-get.d.ts +36 -0
  40. package/dist/src/server/handlers/snippets-get.d.ts.map +1 -0
  41. package/dist/src/server/handlers/snippets-get.js +120 -0
  42. package/dist/src/server/handlers/snippets-get.js.map +1 -0
  43. package/dist/src/server/handlers.d.ts +35 -22
  44. package/dist/src/server/handlers.d.ts.map +1 -1
  45. package/dist/src/server/handlers.js +1993 -414
  46. package/dist/src/server/handlers.js.map +1 -1
  47. package/dist/src/server/indexBootstrap.d.ts.map +1 -1
  48. package/dist/src/server/indexBootstrap.js +49 -2
  49. package/dist/src/server/indexBootstrap.js.map +1 -1
  50. package/dist/src/server/main.d.ts.map +1 -1
  51. package/dist/src/server/main.js +119 -30
  52. package/dist/src/server/main.js.map +1 -1
  53. package/dist/src/server/profile-selector.d.ts +33 -0
  54. package/dist/src/server/profile-selector.d.ts.map +1 -0
  55. package/dist/src/server/profile-selector.js +291 -0
  56. package/dist/src/server/profile-selector.js.map +1 -0
  57. package/dist/src/server/rpc.d.ts.map +1 -1
  58. package/dist/src/server/rpc.js +61 -12
  59. package/dist/src/server/rpc.js.map +1 -1
  60. package/dist/src/server/rrf.d.ts +86 -0
  61. package/dist/src/server/rrf.d.ts.map +1 -0
  62. package/dist/src/server/rrf.js +108 -0
  63. package/dist/src/server/rrf.js.map +1 -0
  64. package/dist/src/server/runtime.d.ts.map +1 -1
  65. package/dist/src/server/runtime.js +14 -4
  66. package/dist/src/server/runtime.js.map +1 -1
  67. package/dist/src/server/scoring.d.ts +7 -1
  68. package/dist/src/server/scoring.d.ts.map +1 -1
  69. package/dist/src/server/scoring.js +121 -2
  70. package/dist/src/server/scoring.js.map +1 -1
  71. package/dist/src/server/services/index.d.ts +24 -0
  72. package/dist/src/server/services/index.d.ts.map +1 -0
  73. package/dist/src/server/services/index.js +20 -0
  74. package/dist/src/server/services/index.js.map +1 -0
  75. package/dist/src/server/services/repo-repository.d.ts +61 -0
  76. package/dist/src/server/services/repo-repository.d.ts.map +1 -0
  77. package/dist/src/server/services/repo-repository.js +93 -0
  78. package/dist/src/server/services/repo-repository.js.map +1 -0
  79. package/dist/src/server/services/repo-resolver.d.ts +28 -0
  80. package/dist/src/server/services/repo-resolver.d.ts.map +1 -0
  81. package/dist/src/server/services/repo-resolver.js +62 -0
  82. package/dist/src/server/services/repo-resolver.js.map +1 -0
  83. package/dist/src/shared/cli/args.d.ts +70 -0
  84. package/dist/src/shared/cli/args.d.ts.map +1 -0
  85. package/dist/src/shared/cli/args.js +84 -0
  86. package/dist/src/shared/cli/args.js.map +1 -0
  87. package/dist/src/shared/duckdb.d.ts.map +1 -1
  88. package/dist/src/shared/duckdb.js +21 -1
  89. package/dist/src/shared/duckdb.js.map +1 -1
  90. package/dist/src/shared/embedding/engine.d.ts +38 -0
  91. package/dist/src/shared/embedding/engine.d.ts.map +1 -0
  92. package/dist/src/shared/embedding/engine.js +6 -0
  93. package/dist/src/shared/embedding/engine.js.map +1 -0
  94. package/dist/src/shared/embedding/lsh-engine.d.ts +11 -0
  95. package/dist/src/shared/embedding/lsh-engine.d.ts.map +1 -0
  96. package/dist/src/shared/embedding/lsh-engine.js +14 -0
  97. package/dist/src/shared/embedding/lsh-engine.js.map +1 -0
  98. package/dist/src/shared/embedding/registry.d.ts +25 -0
  99. package/dist/src/shared/embedding/registry.d.ts.map +1 -0
  100. package/dist/src/shared/embedding/registry.js +50 -0
  101. package/dist/src/shared/embedding/registry.js.map +1 -0
  102. package/dist/src/shared/embedding/semantic-engine.d.ts +14 -0
  103. package/dist/src/shared/embedding/semantic-engine.d.ts.map +1 -0
  104. package/dist/src/shared/embedding/semantic-engine.js +50 -0
  105. package/dist/src/shared/embedding/semantic-engine.js.map +1 -0
  106. package/dist/src/shared/fs/safePath.d.ts +7 -0
  107. package/dist/src/shared/fs/safePath.d.ts.map +1 -0
  108. package/dist/src/shared/fs/safePath.js +23 -0
  109. package/dist/src/shared/fs/safePath.js.map +1 -0
  110. package/dist/src/shared/models/model-manager.d.ts +38 -0
  111. package/dist/src/shared/models/model-manager.d.ts.map +1 -0
  112. package/dist/src/shared/models/model-manager.js +116 -0
  113. package/dist/src/shared/models/model-manager.js.map +1 -0
  114. package/dist/src/shared/models/model-manifest.d.ts +22 -0
  115. package/dist/src/shared/models/model-manifest.d.ts.map +1 -0
  116. package/dist/src/shared/models/model-manifest.js +24 -0
  117. package/dist/src/shared/models/model-manifest.js.map +1 -0
  118. package/dist/src/shared/utils/glob.d.ts +5 -0
  119. package/dist/src/shared/utils/glob.d.ts.map +1 -0
  120. package/dist/src/shared/utils/glob.js +22 -0
  121. package/dist/src/shared/utils/glob.js.map +1 -0
  122. package/dist/src/shared/utils/retry.d.ts +8 -0
  123. package/dist/src/shared/utils/retry.d.ts.map +1 -0
  124. package/dist/src/shared/utils/retry.js +20 -0
  125. package/dist/src/shared/utils/retry.js.map +1 -0
  126. package/dist/src/shared/utils/validation.d.ts +14 -0
  127. package/dist/src/shared/utils/validation.d.ts.map +1 -0
  128. package/dist/src/shared/utils/validation.js +22 -0
  129. package/dist/src/shared/utils/validation.js.map +1 -0
  130. package/package.json +29 -20
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Boost Profile Configurations
3
+ *
4
+ * This module provides centralized configuration for boost_profile options.
5
+ * Each profile defines how different file types should be ranked in search results.
6
+ *
7
+ * Profiles:
8
+ * - default: Prioritizes implementation files over documentation
9
+ * - docs: Prioritizes documentation over implementation
10
+ * - balanced: Equal weight for both docs and implementation
11
+ * - none: No file type boosting (pure keyword scoring)
12
+ */
13
+ /**
14
+ * Boost profile definitions
15
+ * Centralized configuration for all boost profiles
16
+ */
17
+ export const BOOST_PROFILES = {
18
+ default: {
19
+ denylistOverrides: [],
20
+ fileTypeMultipliers: {
21
+ doc: 0.5, // 50% penalty for docs
22
+ impl: 1.3, // 30% boost for implementation
23
+ config: 0.05, // 95% penalty for config files
24
+ },
25
+ // ✅ Sorted by prefix length (longest first) for correct matching priority
26
+ pathMultipliers: [
27
+ { prefix: "src/components/", multiplier: 1.3 },
28
+ { prefix: "src/app/", multiplier: 1.4 },
29
+ { prefix: "src/lib/", multiplier: 1.2 },
30
+ { prefix: "src/", multiplier: 1.0 },
31
+ ],
32
+ },
33
+ docs: {
34
+ denylistOverrides: ["docs/"],
35
+ fileTypeMultipliers: {
36
+ doc: 1.5, // 50% boost for docs
37
+ impl: 0.5, // 50% penalty for implementation
38
+ config: 0.05, // Config files still penalized
39
+ },
40
+ pathMultipliers: [], // No path-specific boosts in docs mode
41
+ },
42
+ balanced: {
43
+ denylistOverrides: ["docs/"],
44
+ fileTypeMultipliers: {
45
+ doc: 1.0, // No penalty for docs
46
+ impl: 1.0, // No boost for implementation
47
+ // Config files in balanced mode are considered more relevant for understanding
48
+ // a project's structure alongside its documentation. Therefore, we use a
49
+ // higher multiplier (0.3x vs 0.05x in default) to keep them accessible.
50
+ config: 0.3,
51
+ },
52
+ pathMultipliers: [], // No path-specific boosts in balanced mode
53
+ // Skip additive penalty (-1.5) for config files; use only multiplicative penalty.
54
+ // This prevents config files from being completely deprioritized in balanced searches
55
+ // where understanding project setup is often as important as code/docs.
56
+ skipConfigAdditivePenalty: true,
57
+ },
58
+ none: {
59
+ denylistOverrides: [],
60
+ fileTypeMultipliers: {
61
+ doc: 1.0, // No penalty/boost
62
+ impl: 1.0, // No penalty/boost
63
+ config: 1.0, // No penalty/boost
64
+ },
65
+ pathMultipliers: [],
66
+ },
67
+ feature: {
68
+ denylistOverrides: [],
69
+ fileTypeMultipliers: {
70
+ doc: 0.65, // Docs penalty
71
+ impl: 1.25, // Implementation boost
72
+ config: 0.05, // Config penalty
73
+ },
74
+ pathMultipliers: [
75
+ { prefix: "src/server/handlers/", multiplier: 2.5 }, // 新機能ハンドラー
76
+ { prefix: "src/indexer/pipeline/", multiplier: 2.3 }, // パイプライン機能
77
+ { prefix: "src/server/", multiplier: 2.0 },
78
+ { prefix: "src/indexer/", multiplier: 1.8 },
79
+ { prefix: "src/shared/", multiplier: 1.6 },
80
+ { prefix: "scripts/assay/", multiplier: 1.5 }, // 評価スクリプト
81
+ { prefix: "src/", multiplier: 0.7 }, // 抑制: 0.8 → 0.7
82
+ ],
83
+ },
84
+ bugfix: {
85
+ denylistOverrides: [],
86
+ fileTypeMultipliers: {
87
+ doc: 0.65, // Docs penalty
88
+ impl: 1.2, // Implementation boost
89
+ config: 0.05, // Config penalty
90
+ },
91
+ pathMultipliers: [
92
+ { prefix: "src/shared/security/", multiplier: 2.5 }, // セキュリティ修正
93
+ { prefix: "src/shared/utils/", multiplier: 2.3 }, // ユーティリティ修正
94
+ { prefix: "src/server/fallbacks/", multiplier: 2.2 }, // フォールバック
95
+ { prefix: "src/shared/", multiplier: 2.0 },
96
+ { prefix: "src/server/", multiplier: 1.8 },
97
+ { prefix: "src/indexer/", multiplier: 1.6 },
98
+ { prefix: "tests/", multiplier: 1.5 }, // バグ再現テスト
99
+ { prefix: "src/", multiplier: 0.7 }, // 抑制: 0.8 → 0.7
100
+ ],
101
+ },
102
+ debug: {
103
+ denylistOverrides: [],
104
+ fileTypeMultipliers: {
105
+ doc: 0.65, // Docs penalty
106
+ impl: 1.25, // Implementation boost
107
+ config: 0.05, // Config penalty
108
+ },
109
+ pathMultipliers: [
110
+ { prefix: "src/server/observability/", multiplier: 2.5 }, // 監視・トレース
111
+ { prefix: "src/shared/utils/retry.ts", multiplier: 2.4 }, // リトライロジック
112
+ { prefix: "src/server/fallbacks/", multiplier: 2.3 }, // デグレード制御
113
+ { prefix: "src/shared/utils/", multiplier: 2.0 },
114
+ { prefix: "scripts/diag/", multiplier: 1.8 }, // 診断スクリプト
115
+ { prefix: "src/server/", multiplier: 1.6 },
116
+ { prefix: "tests/", multiplier: 1.5 },
117
+ { prefix: "src/", multiplier: 0.7 }, // 抑制: 0.8 → 0.7
118
+ ],
119
+ },
120
+ api: {
121
+ denylistOverrides: ["docs/"],
122
+ fileTypeMultipliers: {
123
+ doc: 0.65, // Docs penalty
124
+ impl: 1.2, // Implementation boost
125
+ config: 0.05, // Config penalty
126
+ },
127
+ pathMultipliers: [
128
+ { prefix: "src/api/", multiplier: 2.5 }, // 強化: 1.4 → 2.5
129
+ { prefix: "src/routes/", multiplier: 2.3 },
130
+ { prefix: "src/controllers/", multiplier: 2.0 },
131
+ { prefix: "src/middleware/", multiplier: 1.8 },
132
+ { prefix: "src/app/", multiplier: 1.3 },
133
+ { prefix: "src/", multiplier: 0.7 }, // 抑制: 1.0 → 0.7
134
+ ],
135
+ },
136
+ editor: {
137
+ denylistOverrides: [],
138
+ fileTypeMultipliers: {
139
+ doc: 0.65, // Docs penalty
140
+ impl: 1.2, // Implementation boost
141
+ config: 0.05, // Config penalty
142
+ },
143
+ pathMultipliers: [
144
+ { prefix: "src/components/", multiplier: 2.2 }, // 強化: 1.3 → 2.2
145
+ { prefix: "src/editor/", multiplier: 2.5 },
146
+ { prefix: "src/ui/", multiplier: 2.0 },
147
+ { prefix: "src/views/", multiplier: 2.0 },
148
+ { prefix: "src/app/", multiplier: 1.5 },
149
+ { prefix: "src/", multiplier: 0.7 }, // 抑制: 1.0 → 0.7
150
+ ],
151
+ },
152
+ testfail: {
153
+ denylistOverrides: [],
154
+ fileTypeMultipliers: {
155
+ doc: 0.65, // Docs penalty
156
+ impl: 1.2, // Implementation boost
157
+ config: 0.05, // Config penalty
158
+ },
159
+ pathMultipliers: [
160
+ { prefix: "tests/", multiplier: 2.5 }, // 強化: 1.5 → 2.5
161
+ { prefix: "test/", multiplier: 2.5 }, // 強化: 1.5 → 2.5
162
+ { prefix: "__tests__/", multiplier: 2.5 },
163
+ { prefix: "spec/", multiplier: 2.3 },
164
+ { prefix: "src/", multiplier: 0.5 }, // 大幅抑制: 1.0 → 0.5
165
+ ],
166
+ },
167
+ typeerror: {
168
+ denylistOverrides: [],
169
+ fileTypeMultipliers: {
170
+ doc: 0.65, // Docs penalty
171
+ impl: 1.2, // Implementation boost
172
+ config: 0.05, // Config penalty
173
+ },
174
+ pathMultipliers: [
175
+ { prefix: "src/types/", multiplier: 3.0 }, // 強化: 1.4 → 3.0
176
+ { prefix: "types/", multiplier: 3.0 }, // 強化: 1.4 → 3.0
177
+ { prefix: "@types/", multiplier: 2.8 },
178
+ { prefix: "src/interfaces/", multiplier: 2.5 },
179
+ { prefix: "src/models/", multiplier: 1.8 },
180
+ { prefix: "src/", multiplier: 0.6 }, // 抑制: 1.0 → 0.6
181
+ ],
182
+ },
183
+ };
184
+ /**
185
+ * Get boost profile configuration by name
186
+ * @throws Error if profile name is invalid
187
+ */
188
+ export function getBoostProfile(name) {
189
+ const profile = BOOST_PROFILES[name];
190
+ if (!profile) {
191
+ throw new Error(`Invalid boost profile: "${name}". ` +
192
+ `Valid profiles are: ${Object.keys(BOOST_PROFILES).join(", ")}`);
193
+ }
194
+ return profile;
195
+ }
196
+ /**
197
+ * Check if a profile name is valid
198
+ */
199
+ export function isValidBoostProfile(name) {
200
+ return name in BOOST_PROFILES;
201
+ }
202
+ //# sourceMappingURL=boost-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boost-profiles.js","sourceRoot":"","sources":["../../../src/server/boost-profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface ServerConfig {
2
+ features: {
3
+ suppressNonCode: boolean;
4
+ suppressFinalResults: boolean;
5
+ clampSnippets: boolean;
6
+ snippetWindow: number;
7
+ };
8
+ hints: {
9
+ enabled: boolean;
10
+ priority: {
11
+ textMultiplier: number;
12
+ pathMultiplier: number;
13
+ baseBonus: number;
14
+ };
15
+ directory: {
16
+ enabled: boolean;
17
+ limit: number;
18
+ maxFiles: number;
19
+ };
20
+ dependency: {
21
+ enabled: boolean;
22
+ outLimit: number;
23
+ inLimit: number;
24
+ };
25
+ semantic: {
26
+ enabled: boolean;
27
+ limit: number;
28
+ dirCandidateLimit: number;
29
+ threshold: number;
30
+ };
31
+ substring: {
32
+ enabled: boolean;
33
+ limit: number;
34
+ boost: number;
35
+ };
36
+ perHintLimit: number;
37
+ dbQueryLimit: number;
38
+ };
39
+ penalties: {
40
+ pathMissDelta: number;
41
+ largeFileDelta: number;
42
+ };
43
+ }
44
+ export declare function loadServerConfig(): ServerConfig;
45
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/server/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,eAAe,EAAE,OAAO,CAAC;QACzB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE;YACR,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;YACvB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,UAAU,EAAE;YACV,OAAO,EAAE,OAAO,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,QAAQ,EAAE;YACR,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,iBAAiB,EAAE,MAAM,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AA6ED,wBAAgB,gBAAgB,IAAI,YAAY,CAiF/C"}
@@ -0,0 +1,146 @@
1
+ import process from "node:process";
2
+ let cachedConfig = null;
3
+ function envFlagEnabled(value, defaultEnabled) {
4
+ if (value === undefined) {
5
+ return defaultEnabled;
6
+ }
7
+ const normalized = value.trim().toLowerCase();
8
+ return normalized !== "0" && normalized !== "false" && normalized !== "off";
9
+ }
10
+ function parseEnvNumber(value, fallback) {
11
+ if (value === undefined) {
12
+ return fallback;
13
+ }
14
+ const parsed = Number.parseInt(value, 10);
15
+ if (Number.isFinite(parsed) && parsed >= 0) {
16
+ return parsed;
17
+ }
18
+ return fallback;
19
+ }
20
+ function parseEnvFloat(value, fallback) {
21
+ if (value === undefined) {
22
+ return fallback;
23
+ }
24
+ const parsed = Number.parseFloat(value);
25
+ if (Number.isFinite(parsed)) {
26
+ return parsed;
27
+ }
28
+ return fallback;
29
+ }
30
+ function validateServerConfig(config) {
31
+ const { features, hints, penalties } = config;
32
+ if (features.snippetWindow < 8) {
33
+ throw new Error("snippetWindow must be >= 8 to keep bundle context useful");
34
+ }
35
+ if (hints.priority.textMultiplier <= 0 || hints.priority.pathMultiplier <= 0) {
36
+ throw new Error("Hint priority multipliers must be positive numbers");
37
+ }
38
+ if (hints.priority.baseBonus <= 0) {
39
+ throw new Error("Hint priority base bonus must be positive");
40
+ }
41
+ if (hints.directory.limit < 0 || hints.directory.maxFiles < 1) {
42
+ throw new Error("Directory hint limits must be non-negative and maxFiles >= 1");
43
+ }
44
+ if (hints.dependency.outLimit < 0 || hints.dependency.inLimit < 0) {
45
+ throw new Error("Dependency hint limits must be non-negative");
46
+ }
47
+ if (hints.semantic.limit < 0 || hints.semantic.dirCandidateLimit < 1) {
48
+ throw new Error("Semantic hint limits must be non-negative and candidate limit >= 1");
49
+ }
50
+ if (hints.semantic.threshold <= 0 || hints.semantic.threshold > 1) {
51
+ throw new Error("Semantic hint threshold must be within (0, 1]");
52
+ }
53
+ if (hints.perHintLimit < 0) {
54
+ throw new Error("Per-hint limit must be >= 0");
55
+ }
56
+ if (hints.enabled && hints.perHintLimit < 1) {
57
+ throw new Error("Per-hint limit must be >= 1 when hints are enabled");
58
+ }
59
+ if (hints.dbQueryLimit < 0) {
60
+ throw new Error("Hint DB query budget must be >= 0");
61
+ }
62
+ if (hints.enabled && hints.dbQueryLimit < 1) {
63
+ throw new Error("Hint DB query budget must be >= 1 when hints are enabled");
64
+ }
65
+ if (hints.substring.limit < 0) {
66
+ throw new Error("Substring hint limit must be non-negative");
67
+ }
68
+ if (penalties.pathMissDelta > 0 || penalties.largeFileDelta > 0) {
69
+ throw new Error("Penalty deltas should be <= 0 (they reduce scores)");
70
+ }
71
+ }
72
+ export function loadServerConfig() {
73
+ if (cachedConfig) {
74
+ return cachedConfig;
75
+ }
76
+ const suppressNonCode = envFlagEnabled(process.env.KIRI_SUPPRESS_NON_CODE, true);
77
+ const suppressFinalResults = envFlagEnabled(process.env.KIRI_SUPPRESS_FINAL_RESULTS, true);
78
+ const clampSnippets = envFlagEnabled(process.env.KIRI_CLAMP_SNIPPETS, true);
79
+ const snippetWindow = Math.max(8, parseEnvNumber(process.env.KIRI_SNIPPET_WINDOW, 16));
80
+ const directoryEnabled = envFlagEnabled(process.env.KIRI_HINT_ENABLE_DIR, false);
81
+ const dependencyEnabled = envFlagEnabled(process.env.KIRI_HINT_ENABLE_DEP, false);
82
+ const semanticEnabled = envFlagEnabled(process.env.KIRI_HINT_ENABLE_SEM, false);
83
+ const substringEnabled = envFlagEnabled(process.env.KIRI_HINT_ENABLE_SUBSTRING, true);
84
+ const hintsEnabled = directoryEnabled || dependencyEnabled || semanticEnabled;
85
+ const config = {
86
+ features: {
87
+ suppressNonCode,
88
+ suppressFinalResults,
89
+ clampSnippets,
90
+ snippetWindow,
91
+ },
92
+ hints: {
93
+ enabled: hintsEnabled,
94
+ priority: {
95
+ textMultiplier: parseEnvFloat(process.env.KIRI_HINT_TEXT_MULTIPLIER, 6),
96
+ pathMultiplier: parseEnvFloat(process.env.KIRI_HINT_PATH_MULTIPLIER, 2),
97
+ baseBonus: parseEnvFloat(process.env.KIRI_HINT_BASE_BONUS, 5),
98
+ },
99
+ directory: {
100
+ enabled: directoryEnabled,
101
+ limit: directoryEnabled
102
+ ? Math.max(0, parseEnvNumber(process.env.KIRI_HINT_NEAR_LIMIT_DIR, 2))
103
+ : 0,
104
+ maxFiles: Math.max(1, parseEnvNumber(process.env.KIRI_HINT_NEAR_MAX_FILES, 10)),
105
+ },
106
+ dependency: {
107
+ enabled: dependencyEnabled,
108
+ outLimit: dependencyEnabled
109
+ ? Math.max(0, parseEnvNumber(process.env.KIRI_HINT_DEP_OUT_LIMIT, 1))
110
+ : 0,
111
+ inLimit: dependencyEnabled
112
+ ? Math.max(0, parseEnvNumber(process.env.KIRI_HINT_DEP_IN_LIMIT, 1))
113
+ : 0,
114
+ },
115
+ semantic: {
116
+ enabled: semanticEnabled,
117
+ limit: semanticEnabled
118
+ ? Math.max(0, parseEnvNumber(process.env.KIRI_HINT_SEM_LIMIT, 2))
119
+ : 0,
120
+ dirCandidateLimit: Math.max(1, parseEnvNumber(process.env.KIRI_HINT_SEM_DIR_CANDIDATES, 20)),
121
+ threshold: parseEnvFloat(process.env.KIRI_HINT_SEM_THRESHOLD, 0.65),
122
+ },
123
+ substring: {
124
+ enabled: substringEnabled,
125
+ limit: substringEnabled
126
+ ? Math.max(0, parseEnvNumber(process.env.KIRI_HINT_SUBSTRING_LIMIT, 3))
127
+ : 0,
128
+ boost: parseEnvFloat(process.env.KIRI_HINT_SUBSTRING_BOOST, 3),
129
+ },
130
+ perHintLimit: hintsEnabled
131
+ ? Math.max(1, parseEnvNumber(process.env.KIRI_HINT_PER_HINT_LIMIT, 6))
132
+ : 0,
133
+ dbQueryLimit: hintsEnabled
134
+ ? Math.max(1, parseEnvNumber(process.env.KIRI_HINT_DB_QUERY_LIMIT, 12))
135
+ : 0,
136
+ },
137
+ penalties: {
138
+ pathMissDelta: parseEnvFloat(process.env.KIRI_PATH_MISS_DELTA, -0.5),
139
+ largeFileDelta: parseEnvFloat(process.env.KIRI_LARGE_FILE_DELTA, -0.8),
140
+ },
141
+ };
142
+ validateServerConfig(config);
143
+ cachedConfig = config;
144
+ return config;
145
+ }
146
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/server/config.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,47 @@
1
1
  import { DuckDBClient } from "../shared/duckdb.js";
2
2
  import { WarningManager } from "./rpc.js";
3
+ import { ServerServices } from "./services/index.js";
3
4
  export interface FtsStatusCache {
4
5
  ready: boolean;
5
6
  schemaExists: boolean;
6
7
  anyDirty: boolean;
7
8
  lastChecked: number;
8
9
  }
10
+ export interface TableAvailability {
11
+ hasMetadataTables: boolean;
12
+ hasLinkTable: boolean;
13
+ hasHintLog: boolean;
14
+ hasHintDictionary: boolean;
15
+ }
9
16
  export interface ServerContext {
10
17
  db: DuckDBClient;
11
18
  repoId: number;
19
+ services: ServerServices;
12
20
  features?: {
13
21
  fts?: boolean;
14
22
  };
15
23
  ftsStatusCache?: FtsStatusCache;
24
+ tableAvailability: TableAvailability;
16
25
  warningManager: WarningManager;
17
26
  }
27
+ /**
28
+ * createServerContext
29
+ *
30
+ * ServerContext を生成するファクトリ関数。
31
+ * テストや複数のエントリポイントで共通の初期化パスを提供する。
32
+ *
33
+ * @param options - コンテキスト初期化オプション
34
+ * @returns 初期化された ServerContext
35
+ */
36
+ export declare function createServerContext(options: {
37
+ db: DuckDBClient;
38
+ repoId: number;
39
+ services: ServerServices;
40
+ features?: {
41
+ fts?: boolean;
42
+ };
43
+ ftsStatusCache?: FtsStatusCache;
44
+ tableAvailability: TableAvailability;
45
+ warningManager: WarningManager;
46
+ }): ServerContext;
18
47
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/server/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,YAAY,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;IACF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;CAChC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/server/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,YAAY,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;IACF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,EAAE,EAAE,YAAY,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,cAAc,CAAC;CAChC,GAAG,aAAa,CAmBhB"}
@@ -1,2 +1,27 @@
1
- export {};
1
+ /**
2
+ * createServerContext
3
+ *
4
+ * ServerContext を生成するファクトリ関数。
5
+ * テストや複数のエントリポイントで共通の初期化パスを提供する。
6
+ *
7
+ * @param options - コンテキスト初期化オプション
8
+ * @returns 初期化された ServerContext
9
+ */
10
+ export function createServerContext(options) {
11
+ const context = {
12
+ db: options.db,
13
+ repoId: options.repoId,
14
+ services: options.services,
15
+ tableAvailability: options.tableAvailability,
16
+ warningManager: options.warningManager,
17
+ };
18
+ // exactOptionalPropertyTypes: true を満たすため、undefined の場合は代入しない
19
+ if (options.features !== undefined) {
20
+ context.features = options.features;
21
+ }
22
+ if (options.ftsStatusCache !== undefined) {
23
+ context.ftsStatusCache = options.ftsStatusCache;
24
+ }
25
+ return context;
26
+ }
2
27
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/server/context.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/server/context.ts"],"names":[],"mappings":"AA+BA;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAQnC;IACC,MAAM,OAAO,GAAkB;QAC7B,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;IAEF,8DAA8D;IAC9D,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAClD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { ServerContext } from "../context.js";
2
+ /**
3
+ * snippets_get tool のパラメータ
4
+ */
5
+ export interface SnippetsGetParams {
6
+ path: string;
7
+ start_line?: number;
8
+ end_line?: number;
9
+ compact?: boolean;
10
+ includeLineNumbers?: boolean;
11
+ }
12
+ /**
13
+ * snippets_get tool のレスポンス
14
+ */
15
+ export interface SnippetResult {
16
+ path: string;
17
+ startLine: number;
18
+ endLine: number;
19
+ content?: string;
20
+ totalLines: number;
21
+ symbolName: string | null;
22
+ symbolKind: string | null;
23
+ }
24
+ /**
25
+ * snippets_get MCP Tool Handler
26
+ *
27
+ * 指定されたファイルパスから、シンボル境界を考慮したコードスニペットを取得する。
28
+ * start_line/end_line が指定されていない場合、最適なシンボル(関数、クラスなど)を自動選択する。
29
+ *
30
+ * @param context - サーバーコンテキスト(DB、repoId等)
31
+ * @param params - snippets_get パラメータ
32
+ * @returns スニペット結果
33
+ * @throws Error ファイルが見つからない、バイナリファイル、コンテンツが利用不可の場合
34
+ */
35
+ export declare function snippetsGet(context: ServerContext, params: SnippetsGetParams): Promise<SnippetResult>;
36
+ //# sourceMappingURL=snippets-get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippets-get.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/snippets-get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAmDD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,aAAa,CAAC,CAmHxB"}