kiri-mcp-server 0.2.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 (212) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +399 -0
  3. package/config/default.example.yml +12 -0
  4. package/config/denylist.yml +15 -0
  5. package/config/scoring-profiles.yml +37 -0
  6. package/config/security.yml +10 -0
  7. package/dist/client/cli.js +68 -0
  8. package/dist/client/cli.js.map +1 -0
  9. package/dist/client/index.js +5 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/config/default.example.yml +12 -0
  12. package/dist/config/denylist.yml +15 -0
  13. package/dist/config/scoring-profiles.yml +37 -0
  14. package/dist/config/security.yml +10 -0
  15. package/dist/eval/metrics.js +47 -0
  16. package/dist/eval/metrics.js.map +1 -0
  17. package/dist/indexer/cli.js +362 -0
  18. package/dist/indexer/cli.js.map +1 -0
  19. package/dist/indexer/codeintel.js +182 -0
  20. package/dist/indexer/codeintel.js.map +1 -0
  21. package/dist/indexer/git.js +30 -0
  22. package/dist/indexer/git.js.map +1 -0
  23. package/dist/indexer/language.js +34 -0
  24. package/dist/indexer/language.js.map +1 -0
  25. package/dist/indexer/pipeline/filters/denylist.js +71 -0
  26. package/dist/indexer/pipeline/filters/denylist.js.map +1 -0
  27. package/dist/indexer/schema.js +101 -0
  28. package/dist/indexer/schema.js.map +1 -0
  29. package/dist/package.json +93 -0
  30. package/dist/server/bootstrap.js +19 -0
  31. package/dist/server/bootstrap.js.map +1 -0
  32. package/dist/server/context.js +2 -0
  33. package/dist/server/context.js.map +1 -0
  34. package/dist/server/fallbacks/degradeController.js +69 -0
  35. package/dist/server/fallbacks/degradeController.js.map +1 -0
  36. package/dist/server/handlers.js +800 -0
  37. package/dist/server/handlers.js.map +1 -0
  38. package/dist/server/main.js +151 -0
  39. package/dist/server/main.js.map +1 -0
  40. package/dist/server/observability/metrics.js +56 -0
  41. package/dist/server/observability/metrics.js.map +1 -0
  42. package/dist/server/observability/tracing.js +58 -0
  43. package/dist/server/observability/tracing.js.map +1 -0
  44. package/dist/server/rpc.js +477 -0
  45. package/dist/server/rpc.js.map +1 -0
  46. package/dist/server/runtime.js +47 -0
  47. package/dist/server/runtime.js.map +1 -0
  48. package/dist/server/scoring.js +111 -0
  49. package/dist/server/scoring.js.map +1 -0
  50. package/dist/server/stdio.js +76 -0
  51. package/dist/server/stdio.js.map +1 -0
  52. package/dist/shared/duckdb.js +121 -0
  53. package/dist/shared/duckdb.js.map +1 -0
  54. package/dist/shared/embedding.js +85 -0
  55. package/dist/shared/embedding.js.map +1 -0
  56. package/dist/shared/index.js +9 -0
  57. package/dist/shared/index.js.map +1 -0
  58. package/dist/shared/security/config.js +64 -0
  59. package/dist/shared/security/config.js.map +1 -0
  60. package/dist/shared/security/masker.js +56 -0
  61. package/dist/shared/security/masker.js.map +1 -0
  62. package/dist/shared/tokenizer.js +5 -0
  63. package/dist/shared/tokenizer.js.map +1 -0
  64. package/dist/shared/utils/simpleYaml.js +90 -0
  65. package/dist/shared/utils/simpleYaml.js.map +1 -0
  66. package/dist/sql/schema.sql +6 -0
  67. package/dist/src/client/cli.d.ts +3 -0
  68. package/dist/src/client/cli.d.ts.map +1 -0
  69. package/dist/src/client/cli.js +68 -0
  70. package/dist/src/client/cli.js.map +1 -0
  71. package/dist/src/client/index.d.ts +5 -0
  72. package/dist/src/client/index.d.ts.map +1 -0
  73. package/dist/src/client/index.js +5 -0
  74. package/dist/src/client/index.js.map +1 -0
  75. package/dist/src/client/proxy.d.ts +9 -0
  76. package/dist/src/client/proxy.d.ts.map +1 -0
  77. package/dist/src/client/proxy.js +198 -0
  78. package/dist/src/client/proxy.js.map +1 -0
  79. package/dist/src/client/start-daemon.d.ts +30 -0
  80. package/dist/src/client/start-daemon.d.ts.map +1 -0
  81. package/dist/src/client/start-daemon.js +175 -0
  82. package/dist/src/client/start-daemon.js.map +1 -0
  83. package/dist/src/daemon/daemon.d.ts +9 -0
  84. package/dist/src/daemon/daemon.d.ts.map +1 -0
  85. package/dist/src/daemon/daemon.js +149 -0
  86. package/dist/src/daemon/daemon.js.map +1 -0
  87. package/dist/src/daemon/lifecycle.d.ts +101 -0
  88. package/dist/src/daemon/lifecycle.d.ts.map +1 -0
  89. package/dist/src/daemon/lifecycle.js +266 -0
  90. package/dist/src/daemon/lifecycle.js.map +1 -0
  91. package/dist/src/daemon/socket.d.ts +26 -0
  92. package/dist/src/daemon/socket.d.ts.map +1 -0
  93. package/dist/src/daemon/socket.js +132 -0
  94. package/dist/src/daemon/socket.js.map +1 -0
  95. package/dist/src/eval/metrics.d.ts +23 -0
  96. package/dist/src/eval/metrics.d.ts.map +1 -0
  97. package/dist/src/eval/metrics.js +47 -0
  98. package/dist/src/eval/metrics.js.map +1 -0
  99. package/dist/src/index.d.ts +11 -0
  100. package/dist/src/index.d.ts.map +1 -0
  101. package/dist/src/index.js +11 -0
  102. package/dist/src/index.js.map +1 -0
  103. package/dist/src/indexer/cli.d.ts +9 -0
  104. package/dist/src/indexer/cli.d.ts.map +1 -0
  105. package/dist/src/indexer/cli.js +402 -0
  106. package/dist/src/indexer/cli.js.map +1 -0
  107. package/dist/src/indexer/codeintel.d.ts +28 -0
  108. package/dist/src/indexer/codeintel.d.ts.map +1 -0
  109. package/dist/src/indexer/codeintel.js +451 -0
  110. package/dist/src/indexer/codeintel.js.map +1 -0
  111. package/dist/src/indexer/git.d.ts +4 -0
  112. package/dist/src/indexer/git.d.ts.map +1 -0
  113. package/dist/src/indexer/git.js +30 -0
  114. package/dist/src/indexer/git.js.map +1 -0
  115. package/dist/src/indexer/language.d.ts +2 -0
  116. package/dist/src/indexer/language.d.ts.map +1 -0
  117. package/dist/src/indexer/language.js +34 -0
  118. package/dist/src/indexer/language.js.map +1 -0
  119. package/dist/src/indexer/pipeline/filters/denylist.d.ts +10 -0
  120. package/dist/src/indexer/pipeline/filters/denylist.d.ts.map +1 -0
  121. package/dist/src/indexer/pipeline/filters/denylist.js +71 -0
  122. package/dist/src/indexer/pipeline/filters/denylist.js.map +1 -0
  123. package/dist/src/indexer/schema.d.ts +9 -0
  124. package/dist/src/indexer/schema.d.ts.map +1 -0
  125. package/dist/src/indexer/schema.js +125 -0
  126. package/dist/src/indexer/schema.js.map +1 -0
  127. package/dist/src/indexer/watch.d.ts +97 -0
  128. package/dist/src/indexer/watch.d.ts.map +1 -0
  129. package/dist/src/indexer/watch.js +264 -0
  130. package/dist/src/indexer/watch.js.map +1 -0
  131. package/dist/src/server/bootstrap.d.ts +11 -0
  132. package/dist/src/server/bootstrap.d.ts.map +1 -0
  133. package/dist/src/server/bootstrap.js +19 -0
  134. package/dist/src/server/bootstrap.js.map +1 -0
  135. package/dist/src/server/context.d.ts +9 -0
  136. package/dist/src/server/context.d.ts.map +1 -0
  137. package/dist/src/server/context.js +2 -0
  138. package/dist/src/server/context.js.map +1 -0
  139. package/dist/src/server/fallbacks/degradeController.d.ts +24 -0
  140. package/dist/src/server/fallbacks/degradeController.d.ts.map +1 -0
  141. package/dist/src/server/fallbacks/degradeController.js +135 -0
  142. package/dist/src/server/fallbacks/degradeController.js.map +1 -0
  143. package/dist/src/server/handlers.d.ts +105 -0
  144. package/dist/src/server/handlers.d.ts.map +1 -0
  145. package/dist/src/server/handlers.js +954 -0
  146. package/dist/src/server/handlers.js.map +1 -0
  147. package/dist/src/server/indexBootstrap.d.ts +13 -0
  148. package/dist/src/server/indexBootstrap.d.ts.map +1 -0
  149. package/dist/src/server/indexBootstrap.js +109 -0
  150. package/dist/src/server/indexBootstrap.js.map +1 -0
  151. package/dist/src/server/main.d.ts +10 -0
  152. package/dist/src/server/main.d.ts.map +1 -0
  153. package/dist/src/server/main.js +217 -0
  154. package/dist/src/server/main.js.map +1 -0
  155. package/dist/src/server/observability/metrics.d.ts +35 -0
  156. package/dist/src/server/observability/metrics.d.ts.map +1 -0
  157. package/dist/src/server/observability/metrics.js +70 -0
  158. package/dist/src/server/observability/metrics.js.map +1 -0
  159. package/dist/src/server/observability/tracing.d.ts +3 -0
  160. package/dist/src/server/observability/tracing.d.ts.map +1 -0
  161. package/dist/src/server/observability/tracing.js +58 -0
  162. package/dist/src/server/observability/tracing.js.map +1 -0
  163. package/dist/src/server/rpc.d.ts +39 -0
  164. package/dist/src/server/rpc.d.ts.map +1 -0
  165. package/dist/src/server/rpc.js +551 -0
  166. package/dist/src/server/rpc.js.map +1 -0
  167. package/dist/src/server/runtime.d.ts +21 -0
  168. package/dist/src/server/runtime.d.ts.map +1 -0
  169. package/dist/src/server/runtime.js +59 -0
  170. package/dist/src/server/runtime.js.map +1 -0
  171. package/dist/src/server/scoring.d.ts +20 -0
  172. package/dist/src/server/scoring.d.ts.map +1 -0
  173. package/dist/src/server/scoring.js +112 -0
  174. package/dist/src/server/scoring.js.map +1 -0
  175. package/dist/src/server/stdio.d.ts +4 -0
  176. package/dist/src/server/stdio.d.ts.map +1 -0
  177. package/dist/src/server/stdio.js +88 -0
  178. package/dist/src/server/stdio.js.map +1 -0
  179. package/dist/src/shared/duckdb.d.ts +16 -0
  180. package/dist/src/shared/duckdb.d.ts.map +1 -0
  181. package/dist/src/shared/duckdb.js +121 -0
  182. package/dist/src/shared/duckdb.js.map +1 -0
  183. package/dist/src/shared/embedding.d.ts +19 -0
  184. package/dist/src/shared/embedding.d.ts.map +1 -0
  185. package/dist/src/shared/embedding.js +85 -0
  186. package/dist/src/shared/embedding.js.map +1 -0
  187. package/dist/src/shared/index.d.ts +3 -0
  188. package/dist/src/shared/index.d.ts.map +1 -0
  189. package/dist/src/shared/index.js +9 -0
  190. package/dist/src/shared/index.js.map +1 -0
  191. package/dist/src/shared/security/config.d.ts +23 -0
  192. package/dist/src/shared/security/config.d.ts.map +1 -0
  193. package/dist/src/shared/security/config.js +66 -0
  194. package/dist/src/shared/security/config.js.map +1 -0
  195. package/dist/src/shared/security/masker.d.ts +10 -0
  196. package/dist/src/shared/security/masker.d.ts.map +1 -0
  197. package/dist/src/shared/security/masker.js +56 -0
  198. package/dist/src/shared/security/masker.js.map +1 -0
  199. package/dist/src/shared/tokenizer.d.ts +2 -0
  200. package/dist/src/shared/tokenizer.d.ts.map +1 -0
  201. package/dist/src/shared/tokenizer.js +5 -0
  202. package/dist/src/shared/tokenizer.js.map +1 -0
  203. package/dist/src/shared/utils/lockfile.d.ts +46 -0
  204. package/dist/src/shared/utils/lockfile.d.ts.map +1 -0
  205. package/dist/src/shared/utils/lockfile.js +136 -0
  206. package/dist/src/shared/utils/lockfile.js.map +1 -0
  207. package/dist/src/shared/utils/simpleYaml.d.ts +6 -0
  208. package/dist/src/shared/utils/simpleYaml.d.ts.map +1 -0
  209. package/dist/src/shared/utils/simpleYaml.js +90 -0
  210. package/dist/src/shared/utils/simpleYaml.js.map +1 -0
  211. package/package.json +91 -0
  212. package/sql/schema.sql +6 -0
@@ -0,0 +1,59 @@
1
+ import { resolve } from "node:path";
2
+ import { tryCreateFTSIndex } from "../indexer/schema.js";
3
+ import { DuckDBClient } from "../shared/duckdb.js";
4
+ import { bootstrapServer } from "./bootstrap.js";
5
+ import { DegradeController } from "./fallbacks/degradeController.js";
6
+ import { resolveRepoId } from "./handlers.js";
7
+ import { MetricsRegistry } from "./observability/metrics.js";
8
+ export async function createServerRuntime(options) {
9
+ const bootstrapOptions = {};
10
+ if (options.securityConfigPath) {
11
+ bootstrapOptions.securityConfigPath = options.securityConfigPath;
12
+ }
13
+ if (options.securityLockPath) {
14
+ bootstrapOptions.securityLockPath = options.securityLockPath;
15
+ }
16
+ if (options.allowWriteLock !== undefined) {
17
+ bootstrapOptions.allowWriteLock = options.allowWriteLock;
18
+ }
19
+ const bootstrap = bootstrapServer(bootstrapOptions);
20
+ const databasePath = resolve(options.databasePath);
21
+ const repoRoot = resolve(options.repoRoot);
22
+ let db = null;
23
+ try {
24
+ db = await DuckDBClient.connect({ databasePath, ensureDirectory: true });
25
+ const repoId = await resolveRepoId(db, repoRoot);
26
+ // FTS拡張の利用可否を検出
27
+ const hasFTS = await tryCreateFTSIndex(db);
28
+ const context = {
29
+ db,
30
+ repoId,
31
+ features: {
32
+ fts: hasFTS,
33
+ },
34
+ };
35
+ const degrade = new DegradeController(repoRoot);
36
+ const metrics = new MetricsRegistry();
37
+ const tokens = bootstrap.security.config.sensitive_tokens ?? [];
38
+ const allowDegrade = options.allowDegrade ?? false;
39
+ return {
40
+ context,
41
+ degrade,
42
+ metrics,
43
+ tokens,
44
+ allowDegrade,
45
+ close: async () => {
46
+ if (db) {
47
+ await db.close();
48
+ }
49
+ },
50
+ };
51
+ }
52
+ catch (error) {
53
+ if (db) {
54
+ await db.close();
55
+ }
56
+ throw error;
57
+ }
58
+ }
59
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
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,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,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;AAoB7D,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,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,gBAAgB,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC3D,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;QAEjD,gBAAgB;QAChB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAkB;YAC7B,EAAE;YACF,MAAM;YACN,QAAQ,EAAE;gBACR,GAAG,EAAE,MAAM;aACZ;SACF,CAAC;QAEF,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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * スコアリングウェイトの設定
3
+ * context.bundle の候補ファイルに対するスコアリング重みを定義
4
+ */
5
+ export interface ScoringWeights {
6
+ /** テキストマッチ(キーワード検索)の重み */
7
+ textMatch: number;
8
+ /** 編集中ファイル(editing_path)の重み */
9
+ editingPath: number;
10
+ /** 依存関係の重み */
11
+ dependency: number;
12
+ /** 近接ファイル(同一ディレクトリ)の重み */
13
+ proximity: number;
14
+ /** 構造的類似度の重み(LSHベース、セマンティック埋め込みではない) */
15
+ structural: number;
16
+ }
17
+ export type ScoringProfileName = "default" | "bugfix" | "testfail" | "typeerror" | "feature";
18
+ export declare function coerceProfileName(name?: string | null): ScoringProfileName | null;
19
+ export declare function loadScoringProfile(profileName?: ScoringProfileName | null): ScoringWeights;
20
+ //# sourceMappingURL=scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../../src/server/scoring.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AA0G7F,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAOjF;AAED,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,cAAc,CAM1F"}
@@ -0,0 +1,112 @@
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", "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
+ editingPath: 2.0,
61
+ dependency: 0.5,
62
+ proximity: 0.25,
63
+ structural: 0.75,
64
+ },
65
+ bugfix: {
66
+ textMatch: 1.0,
67
+ editingPath: 1.8,
68
+ dependency: 0.7,
69
+ proximity: 0.35,
70
+ structural: 0.9,
71
+ },
72
+ testfail: {
73
+ textMatch: 1.0,
74
+ editingPath: 1.6,
75
+ dependency: 0.85,
76
+ proximity: 0.3,
77
+ structural: 0.8,
78
+ },
79
+ typeerror: {
80
+ textMatch: 1.0,
81
+ editingPath: 1.4,
82
+ dependency: 0.6,
83
+ proximity: 0.4,
84
+ structural: 0.6,
85
+ },
86
+ feature: {
87
+ textMatch: 1.0,
88
+ editingPath: 1.5,
89
+ dependency: 0.45,
90
+ proximity: 0.5,
91
+ structural: 0.7,
92
+ },
93
+ };
94
+ return profilesCache;
95
+ }
96
+ }
97
+ export function coerceProfileName(name) {
98
+ if (!name) {
99
+ return null;
100
+ }
101
+ const profiles = loadProfilesFromConfig();
102
+ const normalized = name.toLowerCase();
103
+ return normalized in profiles ? normalized : null;
104
+ }
105
+ export function loadScoringProfile(profileName) {
106
+ const profiles = loadProfilesFromConfig();
107
+ if (profileName && profileName in profiles) {
108
+ return profiles[profileName];
109
+ }
110
+ return profiles.default;
111
+ }
112
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../../src/server/scoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type CommonServerOptions } from "./runtime.js";
2
+ export type StdioServerOptions = CommonServerOptions;
3
+ export declare function startStdioServer(options: StdioServerOptions): Promise<void>;
4
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/server/stdio.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAErD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FjF"}
@@ -0,0 +1,88 @@
1
+ import { performance } from "node:perf_hooks";
2
+ import { stdin, stdout, stderr } from "node:process";
3
+ import { createInterface } from "node:readline";
4
+ import { createRpcHandler, errorResponse, validateJsonRpcRequest } from "./rpc.js";
5
+ import { createServerRuntime } from "./runtime.js";
6
+ export async function startStdioServer(options) {
7
+ const runtime = await createServerRuntime(options);
8
+ const handleRpc = createRpcHandler(runtime);
9
+ const rl = createInterface({ input: stdin, crlfDelay: Infinity });
10
+ const closeRuntime = async () => {
11
+ await runtime.close();
12
+ };
13
+ stderr.write("KIRI MCP stdio server ready\n");
14
+ await new Promise((resolve) => {
15
+ rl.on("line", (line) => {
16
+ const trimmed = line.trim();
17
+ if (!trimmed) {
18
+ return;
19
+ }
20
+ // Handle each line in a separate async context with proper error handling
21
+ (async () => {
22
+ try {
23
+ let payload;
24
+ try {
25
+ payload = JSON.parse(line);
26
+ }
27
+ catch {
28
+ const response = errorResponse(0, "Invalid JSON payload. Submit a JSON-RPC 2.0 compliant request.", -32700);
29
+ stdout.write(JSON.stringify(response) + "\n");
30
+ return;
31
+ }
32
+ const validationMessage = validateJsonRpcRequest(payload);
33
+ const hasResponseId = typeof payload.id === "string" || typeof payload.id === "number";
34
+ if (validationMessage) {
35
+ if (hasResponseId) {
36
+ const response = errorResponse(payload.id, validationMessage);
37
+ stdout.write(JSON.stringify(response) + "\n");
38
+ }
39
+ return;
40
+ }
41
+ const start = performance.now();
42
+ try {
43
+ const result = await handleRpc(payload);
44
+ if (result) {
45
+ stdout.write(JSON.stringify(result.response) + "\n");
46
+ }
47
+ }
48
+ catch (error) {
49
+ stderr.write(`Unhandled stdio RPC error: ${String(error)}\n`);
50
+ if (hasResponseId) {
51
+ const response = errorResponse(payload.id, "Unexpected server error. Inspect server logs and retry the request.");
52
+ stdout.write(JSON.stringify(response) + "\n");
53
+ }
54
+ }
55
+ finally {
56
+ const elapsed = performance.now() - start;
57
+ runtime.metrics.recordRequest(elapsed);
58
+ }
59
+ }
60
+ catch (error) {
61
+ // Safe error logging with fallback - prevents server crash if stderr fails
62
+ try {
63
+ stderr.write(`Failed to process RPC line: ${String(error)}\n`);
64
+ }
65
+ catch {
66
+ // Silent failure - better than crashing the server
67
+ // This catch prevents uncaught exceptions if stderr.write throws
68
+ }
69
+ }
70
+ })();
71
+ });
72
+ rl.once("close", async () => {
73
+ await closeRuntime();
74
+ resolve();
75
+ });
76
+ stdin.once("end", () => {
77
+ rl.close();
78
+ });
79
+ stdin.once("close", () => {
80
+ rl.close();
81
+ });
82
+ stdin.once("error", (error) => {
83
+ stderr.write(`STDIN error: ${error instanceof Error ? error.message : String(error)}\n`);
84
+ rl.close();
85
+ });
86
+ });
87
+ }
88
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/server/stdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface DuckDBClientOptions {
2
+ databasePath: string;
3
+ ensureDirectory?: boolean;
4
+ }
5
+ type QueryParams = unknown[] | Record<string, unknown>;
6
+ export declare class DuckDBClient {
7
+ private readonly database;
8
+ constructor(path: string);
9
+ static connect(options: DuckDBClientOptions): Promise<DuckDBClient>;
10
+ run(sql: string, params?: QueryParams): Promise<void>;
11
+ all<T>(sql: string, params?: QueryParams): Promise<T[]>;
12
+ transaction<T>(fn: () => Promise<T>): Promise<T>;
13
+ close(): Promise<void>;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=duckdb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb.d.ts","sourceRoot":"","sources":["../../../src/shared/duckdb.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,KAAK,WAAW,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAqBvD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;gBAEzC,IAAI,EAAE,MAAM;WAIX,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IAOnE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BzD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IA6B3D,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAchD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW7B"}
@@ -0,0 +1,121 @@
1
+ import { mkdir } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import duckdb from "duckdb";
4
+ function hasDefinedParams(params) {
5
+ return Array.isArray(params) ? params.length > 0 : Object.keys(params).length > 0;
6
+ }
7
+ function assertNoUndefined(sql, params) {
8
+ if (Array.isArray(params)) {
9
+ const index = params.findIndex((value) => value === undefined);
10
+ if (index >= 0) {
11
+ throw new Error(`Parameter ${index} is undefined for SQL: ${sql}`);
12
+ }
13
+ }
14
+ else {
15
+ for (const [key, value] of Object.entries(params)) {
16
+ if (value === undefined) {
17
+ throw new Error(`Parameter ${key} is undefined for SQL: ${sql}`);
18
+ }
19
+ }
20
+ }
21
+ }
22
+ export class DuckDBClient {
23
+ database;
24
+ constructor(path) {
25
+ this.database = new duckdb.Database(path);
26
+ }
27
+ static async connect(options) {
28
+ if (options.ensureDirectory) {
29
+ await mkdir(dirname(options.databasePath), { recursive: true });
30
+ }
31
+ return new DuckDBClient(options.databasePath);
32
+ }
33
+ async run(sql, params = []) {
34
+ assertNoUndefined(sql, params);
35
+ await new Promise((resolve, reject) => {
36
+ const callback = (err) => {
37
+ if (err) {
38
+ reject(err);
39
+ return;
40
+ }
41
+ resolve();
42
+ };
43
+ if (Array.isArray(params)) {
44
+ if (params.length > 0) {
45
+ // @ts-expect-error - duckdb.run expects rest parameters which cannot be strongly typed with unknown[]
46
+ this.database.run(sql, ...params, callback);
47
+ }
48
+ else {
49
+ this.database.run(sql, callback);
50
+ }
51
+ }
52
+ else if (hasDefinedParams(params)) {
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ this.database.run(sql, params, callback);
55
+ }
56
+ else {
57
+ this.database.run(sql, callback);
58
+ }
59
+ }).catch((error) => {
60
+ const message = error instanceof Error ? error.message : String(error);
61
+ throw new Error(`${message} | SQL: ${sql} | Params: ${JSON.stringify(params)}`);
62
+ });
63
+ }
64
+ async all(sql, params = []) {
65
+ assertNoUndefined(sql, params);
66
+ return await new Promise((resolve, reject) => {
67
+ const callback = (err, rows) => {
68
+ if (err) {
69
+ reject(err);
70
+ return;
71
+ }
72
+ resolve(rows);
73
+ };
74
+ if (Array.isArray(params)) {
75
+ if (params.length > 0) {
76
+ // @ts-expect-error - duckdb.all expects rest parameters which cannot be strongly typed with unknown[]
77
+ this.database.all(sql, ...params, callback);
78
+ }
79
+ else {
80
+ this.database.all(sql, callback);
81
+ }
82
+ }
83
+ else if (hasDefinedParams(params)) {
84
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
+ this.database.all(sql, params, callback);
86
+ }
87
+ else {
88
+ this.database.all(sql, callback);
89
+ }
90
+ }).catch((error) => {
91
+ const message = error instanceof Error ? error.message : String(error);
92
+ throw new Error(`${message} | SQL: ${sql} | Params: ${JSON.stringify(params)}`);
93
+ });
94
+ }
95
+ async transaction(fn) {
96
+ await this.run("BEGIN TRANSACTION");
97
+ try {
98
+ const result = await fn();
99
+ await this.run("COMMIT");
100
+ return result;
101
+ }
102
+ catch (error) {
103
+ await this.run("ROLLBACK").catch(() => {
104
+ // Ignore rollback errors so original error is surfaced.
105
+ });
106
+ throw error;
107
+ }
108
+ }
109
+ async close() {
110
+ await new Promise((resolve, reject) => {
111
+ this.database.close((err) => {
112
+ if (err) {
113
+ reject(err);
114
+ return;
115
+ }
116
+ resolve();
117
+ });
118
+ });
119
+ }
120
+ }
121
+ //# sourceMappingURL=duckdb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb.js","sourceRoot":"","sources":["../../../src/shared/duckdb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface EmbeddingVector {
2
+ dims: number;
3
+ values: number[];
4
+ }
5
+ export declare function generateEmbedding(text: string, dims?: number): EmbeddingVector | null;
6
+ /**
7
+ * Calculate structural similarity between two embedding vectors using cosine similarity.
8
+ * Note: This measures syntactic/structural similarity based on LSH (Locality-Sensitive Hashing),
9
+ * not semantic similarity from language models like BERT or GPT embeddings.
10
+ *
11
+ * @param a - First embedding vector
12
+ * @param b - Second embedding vector
13
+ * @returns Similarity score between 0 and 1
14
+ */
15
+ export declare function structuralSimilarity(a: number[], b: number[]): number;
16
+ /** @deprecated Use structuralSimilarity() instead. Kept for backward compatibility. */
17
+ export declare const cosineSimilarity: typeof structuralSimilarity;
18
+ export declare const EMBEDDING_DIMS = 64;
19
+ //# sourceMappingURL=embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/shared/embedding.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAyCD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAe,GAAG,eAAe,GAAG,IAAI,CAa3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAsBrE;AAED,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,6BAAuB,CAAC;AAErD,eAAO,MAAM,cAAc,KAAe,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { createHash } from "node:crypto";
2
+ const DEFAULT_DIMS = 64;
3
+ function tokenize(text) {
4
+ return text
5
+ .toLowerCase()
6
+ .split(/[^\p{L}\p{N}_]+/u)
7
+ .map((token) => token.trim())
8
+ .filter((token) => token.length > 0);
9
+ }
10
+ function hashToken(token) {
11
+ const digest = createHash("sha256").update(token).digest();
12
+ // Use the first four bytes to build a deterministic integer hash
13
+ const byte0 = digest[0] ?? 0;
14
+ const byte1 = digest[1] ?? 0;
15
+ const byte2 = digest[2] ?? 0;
16
+ const byte3 = digest[3] ?? 0;
17
+ return ((byte0 << 24) | (byte1 << 16) | (byte2 << 8) | byte3) >>> 0;
18
+ }
19
+ function applyToken(vector, token) {
20
+ const hash = hashToken(token);
21
+ const index = hash % vector.length;
22
+ const sign = (hash & 1) === 0 ? 1 : -1;
23
+ const weight = Math.log(1 + token.length);
24
+ const current = vector[index];
25
+ if (current !== undefined) {
26
+ vector[index] = current + sign * weight;
27
+ }
28
+ }
29
+ function normalize(values) {
30
+ const norm = Math.sqrt(values.reduce((sum, value) => sum + value * value, 0));
31
+ if (!Number.isFinite(norm) || norm === 0) {
32
+ return values.map(() => 0);
33
+ }
34
+ return values.map((value) => value / norm);
35
+ }
36
+ export function generateEmbedding(text, dims = DEFAULT_DIMS) {
37
+ if (!text || text.trim().length === 0) {
38
+ return null;
39
+ }
40
+ const tokens = tokenize(text);
41
+ if (tokens.length === 0) {
42
+ return null;
43
+ }
44
+ const vector = new Array(dims).fill(0);
45
+ for (const token of tokens) {
46
+ applyToken(vector, token);
47
+ }
48
+ return { dims, values: normalize(vector) };
49
+ }
50
+ /**
51
+ * Calculate structural similarity between two embedding vectors using cosine similarity.
52
+ * Note: This measures syntactic/structural similarity based on LSH (Locality-Sensitive Hashing),
53
+ * not semantic similarity from language models like BERT or GPT embeddings.
54
+ *
55
+ * @param a - First embedding vector
56
+ * @param b - Second embedding vector
57
+ * @returns Similarity score between 0 and 1
58
+ */
59
+ export function structuralSimilarity(a, b) {
60
+ const length = Math.min(a.length, b.length);
61
+ if (length === 0) {
62
+ return 0;
63
+ }
64
+ let dot = 0;
65
+ let normA = 0;
66
+ let normB = 0;
67
+ for (let i = 0; i < length; i += 1) {
68
+ const valueA = a[i];
69
+ const valueB = b[i];
70
+ if (valueA === undefined || valueB === undefined) {
71
+ continue;
72
+ }
73
+ dot += valueA * valueB;
74
+ normA += valueA * valueA;
75
+ normB += valueB * valueB;
76
+ }
77
+ if (normA === 0 || normB === 0) {
78
+ return 0;
79
+ }
80
+ return dot / Math.sqrt(normA * normB);
81
+ }
82
+ /** @deprecated Use structuralSimilarity() instead. Kept for backward compatibility. */
83
+ export const cosineSimilarity = structuralSimilarity;
84
+ export const EMBEDDING_DIMS = DEFAULT_DIMS;
85
+ //# sourceMappingURL=embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/shared/embedding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function assertCondition(condition: unknown, message: string): asserts condition;
2
+ export declare function notImplemented(feature: string): never;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/index.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAItF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAErD"}
@@ -0,0 +1,9 @@
1
+ export function assertCondition(condition, message) {
2
+ if (!condition) {
3
+ throw new Error(message);
4
+ }
5
+ }
6
+ export function notImplemented(feature) {
7
+ throw new Error(`Feature not implemented: ${feature}`);
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/index.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,SAAkB,EAAE,OAAe;IACjE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface SecurityConfig {
2
+ allowed_paths: string[];
3
+ allow_network_egress: boolean;
4
+ allow_subprocess: boolean;
5
+ sensitive_tokens: string[];
6
+ }
7
+ export interface SecurityStatus {
8
+ config: SecurityConfig;
9
+ configPath: string;
10
+ lockPath: string;
11
+ hash: string;
12
+ lockHash: string | null;
13
+ matches: boolean;
14
+ }
15
+ export declare function loadSecurityConfig(configPath?: string): {
16
+ config: SecurityConfig;
17
+ hash: string;
18
+ };
19
+ export declare function readSecurityLock(lockPath?: string): string | null;
20
+ export declare function evaluateSecurityStatus(configPath?: string, lockPath?: string): SecurityStatus;
21
+ export declare function assertSecurityBaseline(configPath?: string, lockPath?: string): SecurityStatus;
22
+ export declare function updateSecurityLock(hash: string, lockPath?: string): string;
23
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/shared/security/config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAYD,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAehG;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMjE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAY7F;AAED,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAa7F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1E"}