kiri-mcp-server 0.16.1 → 0.18.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 (164) hide show
  1. package/README.md +65 -22
  2. package/dist/package.json +4 -2
  3. package/dist/src/client/proxy.js +0 -0
  4. package/dist/src/daemon/daemon.js +0 -0
  5. package/dist/src/indexer/codeintel/dart/adapter.d.ts +36 -0
  6. package/dist/src/indexer/codeintel/dart/adapter.d.ts.map +1 -0
  7. package/dist/src/indexer/codeintel/dart/adapter.js +60 -0
  8. package/dist/src/indexer/codeintel/dart/adapter.js.map +1 -0
  9. package/dist/src/indexer/codeintel/dart/index.d.ts +7 -0
  10. package/dist/src/indexer/codeintel/dart/index.d.ts.map +1 -0
  11. package/dist/src/indexer/codeintel/dart/index.js +7 -0
  12. package/dist/src/indexer/codeintel/dart/index.js.map +1 -0
  13. package/dist/src/indexer/codeintel/index.d.ts +30 -0
  14. package/dist/src/indexer/codeintel/index.d.ts.map +1 -0
  15. package/dist/src/indexer/codeintel/index.js +32 -0
  16. package/dist/src/indexer/codeintel/index.js.map +1 -0
  17. package/dist/src/indexer/codeintel/java/analyzer.d.ts +22 -0
  18. package/dist/src/indexer/codeintel/java/analyzer.d.ts.map +1 -0
  19. package/dist/src/indexer/codeintel/java/analyzer.js +281 -0
  20. package/dist/src/indexer/codeintel/java/analyzer.js.map +1 -0
  21. package/dist/src/indexer/codeintel/java/index.d.ts +7 -0
  22. package/dist/src/indexer/codeintel/java/index.d.ts.map +1 -0
  23. package/dist/src/indexer/codeintel/java/index.js +7 -0
  24. package/dist/src/indexer/codeintel/java/index.js.map +1 -0
  25. package/dist/src/indexer/codeintel/php/analyzer.d.ts +23 -0
  26. package/dist/src/indexer/codeintel/php/analyzer.d.ts.map +1 -0
  27. package/dist/src/indexer/codeintel/php/analyzer.js +342 -0
  28. package/dist/src/indexer/codeintel/php/analyzer.js.map +1 -0
  29. package/dist/src/indexer/codeintel/php/index.d.ts +7 -0
  30. package/dist/src/indexer/codeintel/php/index.d.ts.map +1 -0
  31. package/dist/src/indexer/codeintel/php/index.js +7 -0
  32. package/dist/src/indexer/codeintel/php/index.js.map +1 -0
  33. package/dist/src/indexer/codeintel/registry.d.ts +76 -0
  34. package/dist/src/indexer/codeintel/registry.d.ts.map +1 -0
  35. package/dist/src/indexer/codeintel/registry.js +127 -0
  36. package/dist/src/indexer/codeintel/registry.js.map +1 -0
  37. package/dist/src/indexer/codeintel/rust/analyzer.d.ts +14 -0
  38. package/dist/src/indexer/codeintel/rust/analyzer.d.ts.map +1 -0
  39. package/dist/src/indexer/codeintel/rust/analyzer.js +388 -0
  40. package/dist/src/indexer/codeintel/rust/analyzer.js.map +1 -0
  41. package/dist/src/indexer/codeintel/rust/index.d.ts +5 -0
  42. package/dist/src/indexer/codeintel/rust/index.d.ts.map +1 -0
  43. package/dist/src/indexer/codeintel/rust/index.js +5 -0
  44. package/dist/src/indexer/codeintel/rust/index.js.map +1 -0
  45. package/dist/src/indexer/codeintel/swift/analyzer.d.ts +22 -0
  46. package/dist/src/indexer/codeintel/swift/analyzer.d.ts.map +1 -0
  47. package/dist/src/indexer/codeintel/swift/analyzer.js +271 -0
  48. package/dist/src/indexer/codeintel/swift/analyzer.js.map +1 -0
  49. package/dist/src/indexer/codeintel/swift/index.d.ts +7 -0
  50. package/dist/src/indexer/codeintel/swift/index.d.ts.map +1 -0
  51. package/dist/src/indexer/codeintel/swift/index.js +7 -0
  52. package/dist/src/indexer/codeintel/swift/index.js.map +1 -0
  53. package/dist/src/indexer/codeintel/types.d.ts +114 -0
  54. package/dist/src/indexer/codeintel/types.d.ts.map +1 -0
  55. package/dist/src/indexer/codeintel/types.js +13 -0
  56. package/dist/src/indexer/codeintel/types.js.map +1 -0
  57. package/dist/src/indexer/codeintel/typescript/analyzer.d.ts +22 -0
  58. package/dist/src/indexer/codeintel/typescript/analyzer.d.ts.map +1 -0
  59. package/dist/{indexer/codeintel.js → src/indexer/codeintel/typescript/analyzer.js} +62 -34
  60. package/dist/src/indexer/codeintel/typescript/analyzer.js.map +1 -0
  61. package/dist/src/indexer/codeintel/typescript/index.d.ts +7 -0
  62. package/dist/src/indexer/codeintel/typescript/index.d.ts.map +1 -0
  63. package/dist/src/indexer/codeintel/typescript/index.js +7 -0
  64. package/dist/src/indexer/codeintel/typescript/index.js.map +1 -0
  65. package/dist/src/indexer/codeintel/utils.d.ts +91 -0
  66. package/dist/src/indexer/codeintel/utils.d.ts.map +1 -0
  67. package/dist/src/indexer/codeintel/utils.js +145 -0
  68. package/dist/src/indexer/codeintel/utils.js.map +1 -0
  69. package/dist/src/indexer/codeintel.d.ts +33 -26
  70. package/dist/src/indexer/codeintel.d.ts.map +1 -1
  71. package/dist/src/indexer/codeintel.js +56 -1078
  72. package/dist/src/indexer/codeintel.js.map +1 -1
  73. package/dist/src/indexer/graph-metrics.d.ts.map +1 -1
  74. package/dist/src/indexer/graph-metrics.js +16 -4
  75. package/dist/src/indexer/graph-metrics.js.map +1 -1
  76. package/dist/src/server/boost-profiles.d.ts +1 -1
  77. package/dist/src/server/boost-profiles.d.ts.map +1 -1
  78. package/dist/src/server/boost-profiles.js +22 -0
  79. package/dist/src/server/boost-profiles.js.map +1 -1
  80. package/dist/src/server/main.js +0 -0
  81. package/dist/src/server/rpc.js +4 -4
  82. package/dist/src/server/rpc.js.map +1 -1
  83. package/package.json +10 -2
  84. package/dist/client/cli.js +0 -68
  85. package/dist/client/cli.js.map +0 -1
  86. package/dist/client/index.js +0 -5
  87. package/dist/client/index.js.map +0 -1
  88. package/dist/eval/metrics.js +0 -47
  89. package/dist/eval/metrics.js.map +0 -1
  90. package/dist/indexer/cli.js +0 -362
  91. package/dist/indexer/cli.js.map +0 -1
  92. package/dist/indexer/codeintel.js.map +0 -1
  93. package/dist/indexer/git.js +0 -30
  94. package/dist/indexer/git.js.map +0 -1
  95. package/dist/indexer/language.js +0 -34
  96. package/dist/indexer/language.js.map +0 -1
  97. package/dist/indexer/pipeline/filters/denylist.js +0 -71
  98. package/dist/indexer/pipeline/filters/denylist.js.map +0 -1
  99. package/dist/indexer/schema.js +0 -101
  100. package/dist/indexer/schema.js.map +0 -1
  101. package/dist/server/bootstrap.js +0 -19
  102. package/dist/server/bootstrap.js.map +0 -1
  103. package/dist/server/context.js +0 -1
  104. package/dist/server/context.js.map +0 -1
  105. package/dist/server/fallbacks/degradeController.js +0 -69
  106. package/dist/server/fallbacks/degradeController.js.map +0 -1
  107. package/dist/server/handlers.js +0 -1268
  108. package/dist/server/handlers.js.map +0 -1
  109. package/dist/server/main.js +0 -151
  110. package/dist/server/main.js.map +0 -1
  111. package/dist/server/observability/metrics.js +0 -56
  112. package/dist/server/observability/metrics.js.map +0 -1
  113. package/dist/server/observability/tracing.js +0 -58
  114. package/dist/server/observability/tracing.js.map +0 -1
  115. package/dist/server/rpc.js +0 -477
  116. package/dist/server/rpc.js.map +0 -1
  117. package/dist/server/runtime.js +0 -47
  118. package/dist/server/runtime.js.map +0 -1
  119. package/dist/server/scoring.js +0 -116
  120. package/dist/server/scoring.js.map +0 -1
  121. package/dist/server/stdio.js +0 -76
  122. package/dist/server/stdio.js.map +0 -1
  123. package/dist/shared/duckdb.js +0 -119
  124. package/dist/shared/duckdb.js.map +0 -1
  125. package/dist/shared/embedding.js +0 -98
  126. package/dist/shared/embedding.js.map +0 -1
  127. package/dist/shared/index.js +0 -9
  128. package/dist/shared/index.js.map +0 -1
  129. package/dist/shared/security/config.js +0 -64
  130. package/dist/shared/security/config.js.map +0 -1
  131. package/dist/shared/security/masker.js +0 -56
  132. package/dist/shared/security/masker.js.map +0 -1
  133. package/dist/shared/tokenizer.js +0 -4
  134. package/dist/shared/tokenizer.js.map +0 -1
  135. package/dist/shared/utils/simpleYaml.js +0 -89
  136. package/dist/shared/utils/simpleYaml.js.map +0 -1
  137. package/dist/src/server/rrf.d.ts +0 -86
  138. package/dist/src/server/rrf.d.ts.map +0 -1
  139. package/dist/src/server/rrf.js +0 -108
  140. package/dist/src/server/rrf.js.map +0 -1
  141. package/dist/src/shared/embedding/engine.d.ts +0 -38
  142. package/dist/src/shared/embedding/engine.d.ts.map +0 -1
  143. package/dist/src/shared/embedding/engine.js +0 -6
  144. package/dist/src/shared/embedding/engine.js.map +0 -1
  145. package/dist/src/shared/embedding/lsh-engine.d.ts +0 -11
  146. package/dist/src/shared/embedding/lsh-engine.d.ts.map +0 -1
  147. package/dist/src/shared/embedding/lsh-engine.js +0 -14
  148. package/dist/src/shared/embedding/lsh-engine.js.map +0 -1
  149. package/dist/src/shared/embedding/registry.d.ts +0 -25
  150. package/dist/src/shared/embedding/registry.d.ts.map +0 -1
  151. package/dist/src/shared/embedding/registry.js +0 -50
  152. package/dist/src/shared/embedding/registry.js.map +0 -1
  153. package/dist/src/shared/embedding/semantic-engine.d.ts +0 -14
  154. package/dist/src/shared/embedding/semantic-engine.d.ts.map +0 -1
  155. package/dist/src/shared/embedding/semantic-engine.js +0 -50
  156. package/dist/src/shared/embedding/semantic-engine.js.map +0 -1
  157. package/dist/src/shared/models/model-manager.d.ts +0 -38
  158. package/dist/src/shared/models/model-manager.d.ts.map +0 -1
  159. package/dist/src/shared/models/model-manager.js +0 -116
  160. package/dist/src/shared/models/model-manager.js.map +0 -1
  161. package/dist/src/shared/models/model-manifest.d.ts +0 -22
  162. package/dist/src/shared/models/model-manifest.d.ts.map +0 -1
  163. package/dist/src/shared/models/model-manifest.js +0 -24
  164. package/dist/src/shared/models/model-manifest.js.map +0 -1
@@ -1,477 +0,0 @@
1
- import packageJson from "../../package.json" with { type: "json" };
2
- import { maskValue } from "../shared/security/masker.js";
3
- import { contextBundle, depsClosure, filesSearch, semanticRerank, snippetsGet, } from "./handlers.js";
4
- import { withSpan } from "./observability/tracing.js";
5
- const SERVER_INFO = {
6
- name: "kiri",
7
- version: typeof packageJson?.version === "string" ? packageJson.version : "0.0.0",
8
- };
9
- const TOOL_DESCRIPTORS = [
10
- {
11
- name: "context.bundle",
12
- description: "対話ゴールから関連コードコンテキストを抽出します。",
13
- inputSchema: {
14
- type: "object",
15
- required: ["goal"],
16
- additionalProperties: true,
17
- properties: {
18
- goal: { type: "string", description: "解決したいタスクやゴールの説明。" },
19
- limit: {
20
- type: "number",
21
- minimum: 1,
22
- maximum: 20,
23
- description: "返却するスニペット数の上限。既定は12。",
24
- },
25
- profile: { type: "string", description: "評価プロファイル名。" },
26
- artifacts: {
27
- type: "object",
28
- additionalProperties: true,
29
- properties: {
30
- editing_path: { type: "string", description: "現在編集中のファイルパス。" },
31
- failing_tests: {
32
- type: "array",
33
- items: { type: "string" },
34
- description: "失敗しているテストケース名。",
35
- },
36
- last_diff: { type: "string", description: "直近の差分内容。" },
37
- },
38
- },
39
- },
40
- },
41
- },
42
- {
43
- name: "semantic.rerank",
44
- description: "事前候補に対してセマンティック類似度で再ランキングします。",
45
- inputSchema: {
46
- type: "object",
47
- required: ["text", "candidates"],
48
- additionalProperties: true,
49
- properties: {
50
- text: { type: "string", description: "クエリやゴールの本文。" },
51
- candidates: {
52
- type: "array",
53
- items: {
54
- type: "object",
55
- required: ["path"],
56
- additionalProperties: true,
57
- properties: {
58
- path: { type: "string" },
59
- score: { type: "number" },
60
- },
61
- },
62
- },
63
- k: { type: "number", minimum: 1, description: "上位何件を返すか。" },
64
- profile: { type: "string" },
65
- },
66
- },
67
- },
68
- {
69
- name: "files.search",
70
- description: "全文検索インデックスからファイルを検索します。",
71
- inputSchema: {
72
- type: "object",
73
- required: ["query"],
74
- additionalProperties: true,
75
- properties: {
76
- query: { type: "string" },
77
- lang: { type: "string" },
78
- ext: { type: "string" },
79
- path_prefix: { type: "string" },
80
- limit: { type: "number", minimum: 1, maximum: 200 },
81
- },
82
- },
83
- },
84
- {
85
- name: "snippets.get",
86
- description: "指定ファイルのコードスニペットを取得します。",
87
- inputSchema: {
88
- type: "object",
89
- required: ["path"],
90
- additionalProperties: true,
91
- properties: {
92
- path: { type: "string" },
93
- start_line: { type: "number", minimum: 0 },
94
- end_line: { type: "number", minimum: 0 },
95
- },
96
- },
97
- },
98
- {
99
- name: "deps.closure",
100
- description: "依存関係グラフから近傍ノードを取得します。",
101
- inputSchema: {
102
- type: "object",
103
- required: ["path"],
104
- additionalProperties: true,
105
- properties: {
106
- path: { type: "string" },
107
- max_depth: { type: "number", minimum: 0 },
108
- direction: { type: "string", enum: ["outbound", "inbound"] },
109
- include_packages: { type: "boolean" },
110
- },
111
- },
112
- },
113
- ];
114
- const INITIALIZE_PAYLOAD = {
115
- protocolVersion: "2024-11-05",
116
- serverInfo: SERVER_INFO,
117
- capabilities: {
118
- tools: {},
119
- resources: {},
120
- },
121
- };
122
- function parseFilesSearchParams(input) {
123
- // params が省略された場合や null の場合はエラー
124
- if (!input || typeof input !== "object") {
125
- throw new Error("params must be an object.");
126
- }
127
- const record = input;
128
- // 必須パラメータ: query(string)
129
- if (record.query === undefined || record.query === null) {
130
- throw new Error("params.query is required.");
131
- }
132
- if (typeof record.query !== "string") {
133
- throw new Error("params.query must be a string.");
134
- }
135
- const params = { query: record.query };
136
- // オプションパラメータ: 厳密に型チェック(型が正しくない場合はエラー)
137
- if (record.limit !== undefined) {
138
- if (typeof record.limit !== "number" || !Number.isFinite(record.limit)) {
139
- throw new Error("params.limit must be a finite number when provided.");
140
- }
141
- if (record.limit < 1 || record.limit > 200) {
142
- throw new Error("params.limit must be between 1 and 200.");
143
- }
144
- params.limit = Math.floor(record.limit);
145
- }
146
- if (record.lang !== undefined) {
147
- if (typeof record.lang !== "string") {
148
- throw new Error("params.lang must be a string when provided.");
149
- }
150
- params.lang = record.lang;
151
- }
152
- if (record.ext !== undefined) {
153
- if (typeof record.ext !== "string") {
154
- throw new Error("params.ext must be a string when provided.");
155
- }
156
- params.ext = record.ext;
157
- }
158
- if (record.path_prefix !== undefined) {
159
- if (typeof record.path_prefix !== "string") {
160
- throw new Error("params.path_prefix must be a string when provided.");
161
- }
162
- params.path_prefix = record.path_prefix;
163
- }
164
- return params;
165
- }
166
- function parseSnippetsGetParams(input) {
167
- if (!input || typeof input !== "object") {
168
- throw new Error("params must be an object.");
169
- }
170
- const record = input;
171
- if (record.path === undefined || record.path === null) {
172
- throw new Error("params.path is required.");
173
- }
174
- if (typeof record.path !== "string") {
175
- throw new Error("params.path must be a string.");
176
- }
177
- const params = { path: record.path };
178
- if (record.start_line !== undefined) {
179
- if (typeof record.start_line !== "number" || !Number.isFinite(record.start_line)) {
180
- throw new Error("params.start_line must be a finite number when provided.");
181
- }
182
- if (record.start_line < 0) {
183
- throw new Error("params.start_line must be non-negative.");
184
- }
185
- params.start_line = Math.floor(record.start_line);
186
- }
187
- if (record.end_line !== undefined) {
188
- if (typeof record.end_line !== "number" || !Number.isFinite(record.end_line)) {
189
- throw new Error("params.end_line must be a finite number when provided.");
190
- }
191
- if (record.end_line < 0) {
192
- throw new Error("params.end_line must be non-negative.");
193
- }
194
- params.end_line = Math.floor(record.end_line);
195
- }
196
- return params;
197
- }
198
- function parseDepsClosureParams(input) {
199
- if (!input || typeof input !== "object") {
200
- throw new Error("params must be an object.");
201
- }
202
- const record = input;
203
- if (record.path === undefined || record.path === null) {
204
- throw new Error("params.path is required.");
205
- }
206
- if (typeof record.path !== "string") {
207
- throw new Error("params.path must be a string.");
208
- }
209
- const params = { path: record.path };
210
- if (record.max_depth !== undefined) {
211
- if (typeof record.max_depth !== "number" || !Number.isFinite(record.max_depth)) {
212
- throw new Error("params.max_depth must be a finite number when provided.");
213
- }
214
- if (record.max_depth < 0) {
215
- throw new Error("params.max_depth must be non-negative.");
216
- }
217
- params.max_depth = Math.floor(record.max_depth);
218
- }
219
- if (record.direction !== undefined) {
220
- if (record.direction !== "inbound" && record.direction !== "outbound") {
221
- throw new Error('params.direction must be either "inbound" or "outbound" when provided.');
222
- }
223
- params.direction = record.direction;
224
- }
225
- if (record.include_packages !== undefined) {
226
- if (typeof record.include_packages !== "boolean") {
227
- throw new Error("params.include_packages must be a boolean when provided.");
228
- }
229
- params.include_packages = record.include_packages;
230
- }
231
- return params;
232
- }
233
- function parseContextBundleParams(input) {
234
- if (!input || typeof input !== "object") {
235
- throw new Error("params must be an object.");
236
- }
237
- const record = input;
238
- if (record.goal === undefined || record.goal === null) {
239
- throw new Error("params.goal is required.");
240
- }
241
- if (typeof record.goal !== "string") {
242
- throw new Error("params.goal must be a string.");
243
- }
244
- const params = { goal: record.goal };
245
- if (record.limit !== undefined) {
246
- if (typeof record.limit !== "number" || !Number.isFinite(record.limit)) {
247
- throw new Error("params.limit must be a finite number when provided.");
248
- }
249
- if (record.limit < 1 || record.limit > 20) {
250
- throw new Error("params.limit must be between 1 and 20.");
251
- }
252
- params.limit = Math.floor(record.limit);
253
- }
254
- if (record.artifacts !== undefined) {
255
- if (typeof record.artifacts !== "object" || record.artifacts === null) {
256
- throw new Error("params.artifacts must be an object when provided.");
257
- }
258
- const artifactsRecord = record.artifacts;
259
- const artifacts = {};
260
- if (artifactsRecord.editing_path !== undefined) {
261
- if (typeof artifactsRecord.editing_path !== "string") {
262
- throw new Error("params.artifacts.editing_path must be a string when provided.");
263
- }
264
- artifacts.editing_path = artifactsRecord.editing_path;
265
- }
266
- if (artifactsRecord.failing_tests !== undefined) {
267
- if (!Array.isArray(artifactsRecord.failing_tests)) {
268
- throw new Error("params.artifacts.failing_tests must be an array when provided.");
269
- }
270
- const failingTests = [];
271
- for (const test of artifactsRecord.failing_tests) {
272
- if (typeof test !== "string") {
273
- throw new Error("All items in params.artifacts.failing_tests must be strings.");
274
- }
275
- failingTests.push(test);
276
- }
277
- if (failingTests.length > 0) {
278
- artifacts.failing_tests = failingTests;
279
- }
280
- }
281
- if (artifactsRecord.last_diff !== undefined) {
282
- if (typeof artifactsRecord.last_diff !== "string") {
283
- throw new Error("params.artifacts.last_diff must be a string when provided.");
284
- }
285
- artifacts.last_diff = artifactsRecord.last_diff;
286
- }
287
- if (artifacts.editing_path || artifacts.failing_tests || artifacts.last_diff) {
288
- params.artifacts = artifacts;
289
- }
290
- }
291
- if (record.profile !== undefined) {
292
- if (typeof record.profile !== "string") {
293
- throw new Error("params.profile must be a string when provided.");
294
- }
295
- params.profile = record.profile;
296
- }
297
- return params;
298
- }
299
- function parseSemanticRerankParams(input) {
300
- if (!input || typeof input !== "object") {
301
- throw new Error("params must be an object.");
302
- }
303
- const record = input;
304
- if (record.text === undefined || record.text === null) {
305
- throw new Error("params.text is required.");
306
- }
307
- if (typeof record.text !== "string") {
308
- throw new Error("params.text must be a string.");
309
- }
310
- if (record.candidates === undefined || record.candidates === null) {
311
- throw new Error("params.candidates is required.");
312
- }
313
- if (!Array.isArray(record.candidates)) {
314
- throw new Error("params.candidates must be an array.");
315
- }
316
- const candidates = [];
317
- for (const candidate of record.candidates) {
318
- if (!candidate || typeof candidate !== "object") {
319
- throw new Error("Each candidate must be an object.");
320
- }
321
- const candidateRecord = candidate;
322
- if (typeof candidateRecord.path !== "string" || candidateRecord.path.length === 0) {
323
- throw new Error("Each candidate.path must be a non-empty string.");
324
- }
325
- const candidateInput = {
326
- path: candidateRecord.path,
327
- };
328
- if (candidateRecord.score !== undefined) {
329
- if (typeof candidateRecord.score !== "number" || !Number.isFinite(candidateRecord.score)) {
330
- throw new Error("candidate.score must be a finite number when provided.");
331
- }
332
- candidateInput.score = candidateRecord.score;
333
- }
334
- candidates.push(candidateInput);
335
- }
336
- const params = {
337
- text: record.text,
338
- candidates,
339
- };
340
- if (record.k !== undefined) {
341
- if (typeof record.k !== "number" || !Number.isFinite(record.k)) {
342
- throw new Error("params.k must be a finite number when provided.");
343
- }
344
- if (record.k < 1) {
345
- throw new Error("params.k must be at least 1.");
346
- }
347
- params.k = Math.floor(record.k);
348
- }
349
- if (record.profile !== undefined) {
350
- if (typeof record.profile !== "string") {
351
- throw new Error("params.profile must be a string when provided.");
352
- }
353
- params.profile = record.profile;
354
- }
355
- return params;
356
- }
357
- export function successResponse(id, result) {
358
- return { jsonrpc: "2.0", id, result };
359
- }
360
- export function errorResponse(id, message, code = -32603) {
361
- return { jsonrpc: "2.0", id, error: { code, message } };
362
- }
363
- export function validateJsonRpcRequest(payload) {
364
- if (payload.jsonrpc !== "2.0" || typeof payload.method !== "string") {
365
- return "Malformed JSON-RPC request. Provide method and jsonrpc=2.0.";
366
- }
367
- return null;
368
- }
369
- export function createRpcHandler(dependencies) {
370
- const { context, degrade, metrics, tokens, allowDegrade } = dependencies;
371
- return async (payload) => {
372
- // JSON-RPC リクエストの検証(最初に実施)
373
- const validationMessage = validateJsonRpcRequest(payload);
374
- if (validationMessage) {
375
- return {
376
- statusCode: 400,
377
- response: errorResponse(payload.id ?? null, validationMessage),
378
- };
379
- }
380
- try {
381
- let result;
382
- switch (payload.method) {
383
- case "initialize": {
384
- result = INITIALIZE_PAYLOAD;
385
- break;
386
- }
387
- case "tools/list": {
388
- result = { tools: TOOL_DESCRIPTORS };
389
- break;
390
- }
391
- case "context.bundle": {
392
- const params = parseContextBundleParams(payload.params);
393
- const handler = async () => await withSpan("context.bundle", async () => await contextBundle(context, params));
394
- result = await degrade.withResource(handler, "duckdb:context.bundle");
395
- break;
396
- }
397
- case "semantic.rerank": {
398
- const params = parseSemanticRerankParams(payload.params);
399
- const handler = async () => await withSpan("semantic.rerank", async () => await semanticRerank(context, params));
400
- result = await degrade.withResource(handler, "duckdb:semantic.rerank");
401
- break;
402
- }
403
- case "files.search": {
404
- const params = parseFilesSearchParams(payload.params);
405
- if (degrade.current.active && allowDegrade) {
406
- result = {
407
- hits: degrade.search(params.query, params.limit ?? 20).map((hit) => ({
408
- path: hit.path,
409
- preview: hit.preview,
410
- matchLine: hit.matchLine,
411
- lang: null,
412
- ext: null,
413
- score: 0,
414
- })),
415
- degrade: true,
416
- };
417
- }
418
- else {
419
- const handler = async () => await withSpan("files.search", async () => await filesSearch(context, params));
420
- result = await degrade.withResource(handler, "duckdb:files.search");
421
- }
422
- break;
423
- }
424
- case "snippets.get": {
425
- const params = parseSnippetsGetParams(payload.params);
426
- const handler = async () => await withSpan("snippets.get", async () => await snippetsGet(context, params));
427
- result = await degrade.withResource(handler, "duckdb:snippets.get");
428
- break;
429
- }
430
- case "deps.closure": {
431
- const params = parseDepsClosureParams(payload.params);
432
- const handler = async () => await withSpan("deps.closure", async () => await depsClosure(context, params));
433
- result = await degrade.withResource(handler, "duckdb:deps.closure");
434
- break;
435
- }
436
- default: {
437
- return {
438
- statusCode: 404,
439
- response: errorResponse(payload.id ?? null, "Requested method is not available. Use context.bundle, semantic.rerank, files.search, snippets.get, or deps.closure."),
440
- };
441
- }
442
- }
443
- const masked = maskValue(result, { tokens });
444
- if (masked.applied > 0) {
445
- metrics.recordMask(masked.applied);
446
- }
447
- return {
448
- statusCode: 200,
449
- response: successResponse(payload.id ?? null, masked.masked),
450
- };
451
- }
452
- catch (error) {
453
- if (degrade.current.active && !allowDegrade) {
454
- return {
455
- statusCode: 503,
456
- response: errorResponse(payload.id ?? null, "Backend degraded and --allow-degrade not set. Restore DuckDB availability or restart server."),
457
- };
458
- }
459
- if (degrade.current.active && allowDegrade) {
460
- return {
461
- statusCode: 503,
462
- response: errorResponse(payload.id ?? null, degrade.current.reason
463
- ? `Backend degraded due to ${degrade.current.reason}. Only files.search is operational.`
464
- : "Backend degraded. Only files.search is operational."),
465
- };
466
- }
467
- const message = error instanceof Error
468
- ? error.message
469
- : "Unknown error occurred. Inspect server logs and retry the request.";
470
- return {
471
- statusCode: 500,
472
- response: errorResponse(payload.id ?? null, message),
473
- };
474
- }
475
- };
476
- }
477
- //# sourceMappingURL=rpc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/server/rpc.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- import { resolve } from "node:path";
2
- import { DuckDBClient } from "../shared/duckdb.js";
3
- import { bootstrapServer } from "./bootstrap.js";
4
- import { DegradeController } from "./fallbacks/degradeController.js";
5
- import { resolveRepoId } from "./handlers.js";
6
- import { MetricsRegistry } from "./observability/metrics.js";
7
- export async function createServerRuntime(options) {
8
- const bootstrapOptions = {};
9
- if (options.securityConfigPath) {
10
- bootstrapOptions.securityConfigPath = options.securityConfigPath;
11
- }
12
- if (options.securityLockPath) {
13
- bootstrapOptions.securityLockPath = options.securityLockPath;
14
- }
15
- const bootstrap = bootstrapServer(bootstrapOptions);
16
- const databasePath = resolve(options.databasePath);
17
- const repoRoot = resolve(options.repoRoot);
18
- let db = null;
19
- try {
20
- db = await DuckDBClient.connect({ databasePath, ensureDirectory: true });
21
- const repoId = await resolveRepoId(db, repoRoot);
22
- const context = { db, repoId };
23
- const degrade = new DegradeController(repoRoot);
24
- const metrics = new MetricsRegistry();
25
- const tokens = bootstrap.security.config.sensitive_tokens ?? [];
26
- const allowDegrade = options.allowDegrade ?? false;
27
- return {
28
- context,
29
- degrade,
30
- metrics,
31
- tokens,
32
- allowDegrade,
33
- close: async () => {
34
- if (db) {
35
- await db.close();
36
- }
37
- },
38
- };
39
- }
40
- catch (error) {
41
- if (db) {
42
- await db.close();
43
- }
44
- throw error;
45
- }
46
- }
47
- //# sourceMappingURL=runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAyB,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAmB7D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA4B;IACpE,MAAM,gBAAgB,GAAqB,EAAE,CAAC;IAC9C,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,gBAAgB,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,gBAAgB,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAC/D,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,EAAE,GAAwB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,GAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAChE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QAEnD,OAAO;YACL,OAAO;YACP,OAAO;YACP,OAAO;YACP,MAAM;YACN,YAAY;YACZ,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,IAAI,EAAE,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,116 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { parseSimpleYaml } from "../shared/utils/simpleYaml.js";
5
- // プロファイルキャッシュ(起動時に一度だけロード)
6
- let profilesCache = null;
7
- /**
8
- * スコアリングウェイトの妥当性を検証
9
- * すべてのウェイトが非負の有限数であることを確認
10
- */
11
- function validateWeights(weights, profileName) {
12
- if (typeof weights !== "object" || weights === null) {
13
- throw new Error(`Profile '${profileName}' must be an object`);
14
- }
15
- const required = ["textMatch", "pathMatch", "editingPath", "dependency", "proximity", "structural"];
16
- const obj = weights;
17
- for (const key of required) {
18
- const value = obj[key];
19
- if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
20
- throw new Error(`Profile '${profileName}' has invalid ${key}: ${String(value)}. Must be a non-negative finite number.`);
21
- }
22
- }
23
- return weights;
24
- }
25
- function loadProfilesFromConfig() {
26
- if (profilesCache) {
27
- return profilesCache;
28
- }
29
- try {
30
- // 環境変数でカスタムパスを指定可能
31
- // 本番環境(npm install)では dist/config/ を、開発環境では config/ を参照
32
- const configPath = process.env.KIRI_SCORING_CONFIG ??
33
- join(fileURLToPath(import.meta.url), "../../config/scoring-profiles.yml");
34
- const configContent = readFileSync(configPath, "utf-8");
35
- const parsed = parseSimpleYaml(configContent);
36
- // 必須プロファイルの検証とウェイトのバリデーション
37
- const requiredProfiles = [
38
- "default",
39
- "bugfix",
40
- "testfail",
41
- "typeerror",
42
- "feature",
43
- ];
44
- const validated = {};
45
- for (const profile of requiredProfiles) {
46
- if (!parsed[profile]) {
47
- throw new Error(`Missing required scoring profile: ${profile}`);
48
- }
49
- validated[profile] = validateWeights(parsed[profile], profile);
50
- }
51
- profilesCache = validated;
52
- return profilesCache;
53
- }
54
- catch (error) {
55
- console.warn("Failed to load scoring profiles from config, using fallback defaults", error);
56
- // フォールバック: ハードコードされたデフォルト値
57
- profilesCache = {
58
- default: {
59
- textMatch: 1.0,
60
- pathMatch: 1.5,
61
- editingPath: 2.0,
62
- dependency: 0.5,
63
- proximity: 0.25,
64
- structural: 0.75,
65
- },
66
- bugfix: {
67
- textMatch: 1.0,
68
- pathMatch: 1.5,
69
- editingPath: 1.8,
70
- dependency: 0.7,
71
- proximity: 0.35,
72
- structural: 0.9,
73
- },
74
- testfail: {
75
- textMatch: 1.0,
76
- pathMatch: 1.5,
77
- editingPath: 1.6,
78
- dependency: 0.85,
79
- proximity: 0.3,
80
- structural: 0.8,
81
- },
82
- typeerror: {
83
- textMatch: 1.0,
84
- pathMatch: 1.5,
85
- editingPath: 1.4,
86
- dependency: 0.6,
87
- proximity: 0.4,
88
- structural: 0.6,
89
- },
90
- feature: {
91
- textMatch: 1.0,
92
- pathMatch: 1.5,
93
- editingPath: 1.5,
94
- dependency: 0.45,
95
- proximity: 0.5,
96
- structural: 0.7,
97
- },
98
- };
99
- return profilesCache;
100
- }
101
- }
102
- export function coerceProfileName(name) {
103
- if (!name) {
104
- return null;
105
- }
106
- const profiles = loadProfilesFromConfig();
107
- const normalized = name.toLowerCase();
108
- return normalized in profiles ? normalized : null;
109
- }
110
- export function loadScoringProfile(profileName) {
111
- const profiles = loadProfilesFromConfig();
112
- if (profileName && profileName in profiles) {
113
- return profiles[profileName];
114
- }
115
- return profiles.default;
116
- }