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
@@ -1,3 +1,84 @@
1
+ import { normalizeRepoPath } from "../shared/utils/path.js";
2
+ import { mergeRepoRecords } from "./migrations/repo-merger.js";
3
+ /**
4
+ * Document metadata tables migration error
5
+ * Provides detailed information about which migration step failed
6
+ */
7
+ class MigrationError extends Error {
8
+ step;
9
+ cause;
10
+ constructor(message, step, cause) {
11
+ super(message);
12
+ this.step = step;
13
+ this.cause = cause;
14
+ this.name = "MigrationError";
15
+ // Set cause for better error chaining (Node.js 16.9.0+)
16
+ if (cause) {
17
+ this.cause = cause;
18
+ }
19
+ // Capture stack trace for debugging
20
+ if (Error.captureStackTrace) {
21
+ Error.captureStackTrace(this, MigrationError);
22
+ }
23
+ }
24
+ }
25
+ /**
26
+ * Execute a migration step with error wrapping
27
+ * Catches errors and wraps them in MigrationError with step context
28
+ */
29
+ async function executeStep(step, fn) {
30
+ try {
31
+ return await fn();
32
+ }
33
+ catch (error) {
34
+ const stepName = step.replace(/_/g, " ");
35
+ throw new MigrationError(`Failed to create ${stepName}. Re-run migration or check database permissions.`, step, error instanceof Error ? error : undefined);
36
+ }
37
+ }
38
+ /**
39
+ * Validate table schema using PRAGMA table_info
40
+ * Compares actual schema with expected column definitions
41
+ *
42
+ * @param db DuckDB client
43
+ * @param tableName Table name to validate
44
+ * @param expectedColumns Expected column definitions
45
+ * @throws MigrationError if schema doesn't match expectations
46
+ */
47
+ async function validateTableSchema(db, tableName, expectedColumns, step) {
48
+ try {
49
+ // Get actual schema using PRAGMA table_info
50
+ const actualColumns = await db.all(`PRAGMA table_info('${tableName}')`);
51
+ // Build map of actual columns for lookup
52
+ const actualMap = new Map(actualColumns.map((col) => [col.name, { type: col.type.toUpperCase(), pk: col.pk > 0 }]));
53
+ // Validate each expected column
54
+ for (const expected of expectedColumns) {
55
+ const actual = actualMap.get(expected.name);
56
+ if (!actual) {
57
+ throw new Error(`Column '${expected.name}' missing in table '${tableName}'`);
58
+ }
59
+ // Normalize types for comparison (e.g., "INTEGER" vs "INT", "TEXT" vs "VARCHAR")
60
+ const expectedTypeNorm = expected.type.toUpperCase();
61
+ const actualTypeNorm = actual.type;
62
+ // Type validation with normalization
63
+ const typeMatches = expectedTypeNorm === actualTypeNorm ||
64
+ (expectedTypeNorm === "INTEGER" &&
65
+ (actualTypeNorm === "INT" || actualTypeNorm === "BIGINT")) ||
66
+ (expectedTypeNorm === "TEXT" &&
67
+ (actualTypeNorm === "VARCHAR" || actualTypeNorm === "STRING"));
68
+ if (!typeMatches) {
69
+ throw new Error(`Column '${expected.name}' in table '${tableName}' has type '${actual.type}', expected '${expected.type}'`);
70
+ }
71
+ // PRIMARY KEY validation
72
+ if (expected.pk && !actual.pk) {
73
+ throw new Error(`Column '${expected.name}' in table '${tableName}' should be PRIMARY KEY`);
74
+ }
75
+ }
76
+ }
77
+ catch (error) {
78
+ const stepName = step.replace(/_/g, " ");
79
+ throw new MigrationError(`Schema validation failed for ${stepName}. ${error instanceof Error ? error.message : "Unknown error"}`, step, error instanceof Error ? error : undefined);
80
+ }
81
+ }
1
82
  export async function ensureBaseSchema(db) {
2
83
  await db.run(`
3
84
  CREATE SEQUENCE IF NOT EXISTS repo_id_seq START 1
@@ -6,6 +87,7 @@ export async function ensureBaseSchema(db) {
6
87
  CREATE TABLE IF NOT EXISTS repo (
7
88
  id INTEGER PRIMARY KEY DEFAULT nextval('repo_id_seq'),
8
89
  root TEXT NOT NULL UNIQUE,
90
+ normalized_root TEXT,
9
91
  default_branch TEXT,
10
92
  indexed_at TIMESTAMP,
11
93
  fts_last_indexed_at TIMESTAMP,
@@ -101,6 +183,51 @@ export async function ensureBaseSchema(db) {
101
183
  PRIMARY KEY (repo_id, path)
102
184
  )
103
185
  `);
186
+ // Document metadata tables (delegated to dedicated migration function)
187
+ await ensureDocumentMetadataTables(db);
188
+ await db.run(`
189
+ CREATE TABLE IF NOT EXISTS markdown_link (
190
+ repo_id INTEGER,
191
+ src_path TEXT,
192
+ target TEXT,
193
+ resolved_path TEXT,
194
+ anchor_text TEXT,
195
+ kind TEXT,
196
+ PRIMARY KEY (repo_id, src_path, target, anchor_text)
197
+ )
198
+ `);
199
+ await db.run(`
200
+ CREATE INDEX IF NOT EXISTS idx_markdown_link_target
201
+ ON markdown_link(repo_id, resolved_path)
202
+ `);
203
+ await db.run(`
204
+ CREATE TABLE IF NOT EXISTS hint_expansion (
205
+ repo_id INTEGER,
206
+ hint_value TEXT,
207
+ expansion_kind TEXT,
208
+ target_path TEXT,
209
+ payload JSON,
210
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
211
+ )
212
+ `);
213
+ await db.run(`
214
+ CREATE INDEX IF NOT EXISTS idx_hint_expansion_repo
215
+ ON hint_expansion(repo_id, created_at)
216
+ `);
217
+ await db.run(`
218
+ CREATE TABLE IF NOT EXISTS hint_dictionary (
219
+ repo_id INTEGER,
220
+ hint_value TEXT,
221
+ target_path TEXT,
222
+ freq INTEGER DEFAULT 1,
223
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
224
+ PRIMARY KEY (repo_id, hint_value, target_path)
225
+ )
226
+ `);
227
+ await db.run(`
228
+ CREATE INDEX IF NOT EXISTS idx_hint_dictionary_repo_hint
229
+ ON hint_dictionary(repo_id, hint_value)
230
+ `);
104
231
  }
105
232
  /**
106
233
  * repoテーブルにFTSメタデータ列を追加(Phase 3マイグレーション)
@@ -148,6 +275,102 @@ export async function ensureRepoMetaColumns(db) {
148
275
  WHERE fts_last_indexed_at IS NULL
149
276
  `);
150
277
  }
278
+ /**
279
+ * Adds normalized_root column with UNIQUE index to the repo table (Phase 1: Critical #1)
280
+ *
281
+ * Migration Strategy:
282
+ * 1. Adds normalized_root column (nullable initially for backward compatibility)
283
+ * 2. Populates normalized_root from existing root values using normalizeRepoPath()
284
+ * 3. Deduplicates repos with same normalized_root (keeps lowest ID)
285
+ * 4. Creates UNIQUE index on normalized_root
286
+ *
287
+ * Deduplication Behavior:
288
+ * - When multiple repos have the same normalized_root: keeps repo with lowest ID
289
+ * - Deleted repos: All dependent data is automatically handled by foreign key constraints
290
+ * - Example: /Users/foo and /users/foo normalize to same path → keeps lower ID, deletes higher ID
291
+ * - Rationale: Lowest ID is typically the oldest/first indexed, most likely to be correct
292
+ *
293
+ * Safety Guarantees:
294
+ * - Transaction-based: All operations are atomic, rollback on failure
295
+ * - Backward compatible: Old code without normalized_root column awareness still works
296
+ * - Idempotent: Safe to run multiple times (checks for existing column and index)
297
+ * - Non-destructive: Only removes duplicate entries after careful validation
298
+ *
299
+ * Performance:
300
+ * - Backfill: O(n) where n = number of repos (typically small, <100)
301
+ * - Deduplication: O(m log m) where m = number of duplicate groups (typically 0-5)
302
+ * - Index creation: O(n log n)
303
+ *
304
+ * @param db - DuckDBクライアント
305
+ * @throws Error if migration fails (except when repo table doesn't exist yet)
306
+ */
307
+ export async function ensureNormalizedRootColumn(db) {
308
+ // Check if repo table exists first
309
+ const tables = await db.all(`SELECT table_name FROM duckdb_tables() WHERE table_name = 'repo'`);
310
+ if (tables.length === 0) {
311
+ // repo table doesn't exist yet - will be created by ensureBaseSchema()
312
+ return;
313
+ }
314
+ // 列の存在確認
315
+ const columns = await db.all(`SELECT column_name FROM duckdb_columns()
316
+ WHERE table_name = 'repo' AND column_name = 'normalized_root'`);
317
+ const hasNormalizedRoot = columns.length > 0;
318
+ // normalized_rootの追加
319
+ if (!hasNormalizedRoot) {
320
+ await db.run(`ALTER TABLE repo ADD COLUMN normalized_root TEXT`);
321
+ }
322
+ // 既存レコードのbackfill(トランザクション内で実行)
323
+ await db.transaction(async () => {
324
+ const needsBackfill = await db.all(`SELECT id, root FROM repo WHERE normalized_root IS NULL`);
325
+ if (needsBackfill.length > 0) {
326
+ // バッチ更新で高速化
327
+ for (const row of needsBackfill) {
328
+ const normalized = normalizeRepoPath(row.root);
329
+ await db.run(`UPDATE repo SET normalized_root = ? WHERE id = ?`, [normalized, row.id]);
330
+ }
331
+ }
332
+ });
333
+ // 重複排除: UNIQUE index 作成前に重複する normalized_root を統合
334
+ await db.transaction(async () => {
335
+ const duplicates = await db.all(`SELECT normalized_root, STRING_AGG(CAST(id AS VARCHAR), ',') as ids
336
+ FROM repo
337
+ WHERE normalized_root IS NOT NULL
338
+ GROUP BY normalized_root
339
+ HAVING COUNT(*) > 1`);
340
+ if (duplicates.length > 0) {
341
+ // 各重複グループについて、最小IDのレコードを残して他を削除
342
+ for (const dup of duplicates) {
343
+ const ids = dup.ids
344
+ .split(",")
345
+ .map((value) => Number.parseInt(value, 10))
346
+ .filter((id) => Number.isFinite(id))
347
+ .sort((a, b) => a - b);
348
+ if (ids.length === 0) {
349
+ continue;
350
+ }
351
+ const keepId = ids[0];
352
+ if (keepId === undefined) {
353
+ continue;
354
+ }
355
+ const deleteIds = ids.slice(1);
356
+ if (deleteIds.length === 0) {
357
+ continue;
358
+ }
359
+ await mergeRepoRecords(db, keepId, deleteIds);
360
+ }
361
+ }
362
+ });
363
+ // インデックスの存在確認
364
+ const indexes = await db.all(`SELECT index_name FROM duckdb_indexes() WHERE index_name = 'repo_normalized_root_idx'`);
365
+ // UNIQUE インデックスの作成
366
+ if (indexes.length === 0) {
367
+ // NOTE: UNIQUE制約により、同じ正規化パスを持つ複数のrepoは登録不可
368
+ // 衝突時は既存のrepoを使用するか、mergeLegacyRepoRowsで統合する
369
+ await db.run(`
370
+ CREATE UNIQUE INDEX repo_normalized_root_idx ON repo(normalized_root)
371
+ `);
372
+ }
373
+ }
151
374
  /**
152
375
  * FTS(全文検索)インデックスの作成を試行
153
376
  * @param db - DuckDBクライアント
@@ -355,6 +578,120 @@ export async function rebuildGlobalFTS(db, options = {}) {
355
578
  return false;
356
579
  }
357
580
  }
581
+ /**
582
+ * Check if document_metadata table is empty
583
+ * Used to detect if migration needs to trigger a full reindex
584
+ *
585
+ * @param db - DuckDB client
586
+ * @returns true if table exists but is empty, false otherwise
587
+ */
588
+ export async function isDocumentMetadataEmpty(db) {
589
+ // Check if document_metadata table exists
590
+ const tables = await db.all(`SELECT table_name FROM duckdb_tables() WHERE table_name = 'document_metadata'`);
591
+ if (tables.length === 0) {
592
+ // Table doesn't exist yet
593
+ return false;
594
+ }
595
+ // Count records in document_metadata table
596
+ const result = await db.all(`SELECT COUNT(*) as count FROM document_metadata`);
597
+ // Defensive: check array element exists and has valid count
598
+ const firstRow = result[0];
599
+ if (!firstRow || typeof firstRow.count !== "number") {
600
+ return false;
601
+ }
602
+ return firstRow.count === 0;
603
+ }
604
+ /**
605
+ * document_metadata関連テーブルを追加(マイグレーション+新規DB用)
606
+ * 既存DBとの互換性のため、テーブルが存在しない場合のみ作成
607
+ *
608
+ * Usage:
609
+ * - Called by ensureBaseSchema() for new databases (replaces duplicate DDL)
610
+ * - Called by CLI migration for existing databases
611
+ *
612
+ * Migration Strategy:
613
+ * 1. Check if document_metadata table exists
614
+ * 2. Create document_metadata table if missing
615
+ * 3. Create document_metadata_kv table if missing
616
+ * 4. Create index on document_metadata_kv if missing
617
+ *
618
+ * Safety Guarantees:
619
+ * - Idempotent: Safe to run multiple times (checks for existing tables/indexes)
620
+ * - Non-destructive: Only creates missing schema objects, never modifies existing data
621
+ * - Backward compatible: Old code without metadata awareness still works
622
+ *
623
+ * Performance:
624
+ * - O(1) for existence checks
625
+ * - O(1) for table creation (no data migration needed)
626
+ * - O(1) for index creation (table is initially empty)
627
+ *
628
+ * @param db - DuckDBクライアント
629
+ * @throws Error if migration fails
630
+ */
631
+ export async function ensureDocumentMetadataTables(db) {
632
+ // トランザクション境界: 3つのDDL操作を単一のatomic操作として実行
633
+ // 失敗時は自動的にロールバックされ、部分的な状態が残らない
634
+ await db.transaction(async () => {
635
+ // 1. document_metadataテーブルの存在確認
636
+ const metadataTableExists = await db.all(`SELECT table_name FROM duckdb_tables() WHERE table_name = 'document_metadata'`);
637
+ if (metadataTableExists.length === 0) {
638
+ await executeStep("metadata_table", async () => {
639
+ await db.run(`
640
+ CREATE TABLE document_metadata (
641
+ repo_id INTEGER,
642
+ path TEXT,
643
+ source TEXT,
644
+ data JSON,
645
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
646
+ PRIMARY KEY (repo_id, path, source)
647
+ )
648
+ `);
649
+ });
650
+ }
651
+ // 2. document_metadata_kvテーブルの存在確認
652
+ const kvTableExists = await db.all(`SELECT table_name FROM duckdb_tables() WHERE table_name = 'document_metadata_kv'`);
653
+ if (kvTableExists.length === 0) {
654
+ await executeStep("metadata_kv_table", async () => {
655
+ await db.run(`
656
+ CREATE TABLE document_metadata_kv (
657
+ repo_id INTEGER,
658
+ path TEXT,
659
+ source TEXT,
660
+ key TEXT,
661
+ value TEXT,
662
+ PRIMARY KEY (repo_id, path, source, key, value)
663
+ )
664
+ `);
665
+ });
666
+ }
667
+ // 3. インデックスの存在確認と作成
668
+ const indexExists = await db.all(`SELECT index_name FROM duckdb_indexes() WHERE index_name = 'idx_document_metadata_key'`);
669
+ if (indexExists.length === 0) {
670
+ await executeStep("index", async () => {
671
+ await db.run(`
672
+ CREATE INDEX idx_document_metadata_key
673
+ ON document_metadata_kv(repo_id, key)
674
+ `);
675
+ });
676
+ }
677
+ // 4. スキーマ検証: 作成されたテーブルが期待通りの構造を持つことを確認
678
+ // 検証はトランザクション内で行い、不整合があればロールバック
679
+ await validateTableSchema(db, "document_metadata", [
680
+ { name: "repo_id", type: "INTEGER" },
681
+ { name: "path", type: "TEXT" },
682
+ { name: "source", type: "TEXT" },
683
+ { name: "data", type: "JSON" },
684
+ { name: "updated_at", type: "TIMESTAMP" },
685
+ ], "metadata_table");
686
+ await validateTableSchema(db, "document_metadata_kv", [
687
+ { name: "repo_id", type: "INTEGER" },
688
+ { name: "path", type: "TEXT" },
689
+ { name: "source", type: "TEXT" },
690
+ { name: "key", type: "TEXT" },
691
+ { name: "value", type: "TEXT" },
692
+ ], "metadata_kv_table");
693
+ });
694
+ }
358
695
  /**
359
696
  * FTS dirty flagを設定(Phase 3: ウォッチモード用)
360
697
  * Note: 現在は rebuildFTSIfNeeded() の使用を推奨。この関数は将来のウォッチモード実装用に保持。
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/indexer/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/indexer/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Abbreviation expansion for path matching (ADR 003)
3
+ *
4
+ * Bridges the vocabulary gap between natural language queries and technical path names.
5
+ * Example: "database" → ["database", "db", "data"]
6
+ *
7
+ * LDE principles:
8
+ * - Pure functions (no side effects)
9
+ * - Readonly types (immutability)
10
+ * - Property-based testing
11
+ */
12
+ /**
13
+ * Abbreviation mapping (LDE: readonly, immutable)
14
+ */
15
+ export interface AbbreviationMap {
16
+ readonly canonical: string;
17
+ readonly variants: readonly string[];
18
+ }
19
+ /**
20
+ * Default abbreviation dictionary
21
+ *
22
+ * Maintenance: Add new entries as needed, alphabetically sorted by canonical
23
+ * Conflicts: Use most common meaning (e.g., "db" → "database" not "debug")
24
+ */
25
+ export declare const DEFAULT_ABBREVIATIONS: readonly AbbreviationMap[];
26
+ /**
27
+ * Expand term with common abbreviations (LDE: pure function)
28
+ *
29
+ * Matches term (case-insensitive) against abbreviation dictionary and returns
30
+ * all related forms (canonical + variants).
31
+ *
32
+ * @param term - Query term to expand (e.g., "db", "database", "config")
33
+ * @param abbreviations - Abbreviation dictionary (default: DEFAULT_ABBREVIATIONS)
34
+ * @returns Readonly array of expanded terms including canonical and all variants
35
+ *
36
+ * @example
37
+ * expandAbbreviations("db") → ["database", "db", "data"]
38
+ * expandAbbreviations("config") → ["configuration", "config", "cfg", "conf"]
39
+ * expandAbbreviations("unknown") → ["unknown"]
40
+ *
41
+ * LDE properties:
42
+ * - Pure: Same input always produces same output
43
+ * - No side effects: Doesn't modify input or global state
44
+ * - Immutable: Returns readonly array
45
+ */
46
+ export declare function expandAbbreviations(term: string, abbreviations?: readonly AbbreviationMap[]): readonly string[];
47
+ //# sourceMappingURL=abbreviations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abbreviations.d.ts","sourceRoot":"","sources":["../../../src/server/abbreviations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAqB3D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,SAAS,eAAe,EAA0B,GAChE,SAAS,MAAM,EAAE,CAenB"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Abbreviation expansion for path matching (ADR 003)
3
+ *
4
+ * Bridges the vocabulary gap between natural language queries and technical path names.
5
+ * Example: "database" → ["database", "db", "data"]
6
+ *
7
+ * LDE principles:
8
+ * - Pure functions (no side effects)
9
+ * - Readonly types (immutability)
10
+ * - Property-based testing
11
+ */
12
+ /**
13
+ * Default abbreviation dictionary
14
+ *
15
+ * Maintenance: Add new entries as needed, alphabetically sorted by canonical
16
+ * Conflicts: Use most common meaning (e.g., "db" → "database" not "debug")
17
+ */
18
+ export const DEFAULT_ABBREVIATIONS = [
19
+ { canonical: "administrator", variants: ["admin"] },
20
+ { canonical: "application", variants: ["app"] },
21
+ { canonical: "authentication", variants: ["auth"] },
22
+ { canonical: "authorization", variants: ["authz"] },
23
+ { canonical: "configuration", variants: ["config", "cfg", "conf"] },
24
+ { canonical: "controller", variants: ["ctrl"] },
25
+ { canonical: "database", variants: ["db", "data"] },
26
+ { canonical: "development", variants: ["dev"] },
27
+ { canonical: "directory", variants: ["dir"] },
28
+ { canonical: "document", variants: ["doc", "docs"] },
29
+ { canonical: "error", variants: ["err", "errors"] },
30
+ { canonical: "implementation", variants: ["impl"] },
31
+ { canonical: "manager", variants: ["mgr"] },
32
+ { canonical: "production", variants: ["prod"] },
33
+ { canonical: "repository", variants: ["repo"] },
34
+ { canonical: "service", variants: ["svc", "srv"] },
35
+ { canonical: "source", variants: ["src"] },
36
+ { canonical: "specification", variants: ["spec", "specs"] },
37
+ { canonical: "temporary", variants: ["tmp", "temp"] },
38
+ { canonical: "utilities", variants: ["util", "utils"] },
39
+ ];
40
+ /**
41
+ * Expand term with common abbreviations (LDE: pure function)
42
+ *
43
+ * Matches term (case-insensitive) against abbreviation dictionary and returns
44
+ * all related forms (canonical + variants).
45
+ *
46
+ * @param term - Query term to expand (e.g., "db", "database", "config")
47
+ * @param abbreviations - Abbreviation dictionary (default: DEFAULT_ABBREVIATIONS)
48
+ * @returns Readonly array of expanded terms including canonical and all variants
49
+ *
50
+ * @example
51
+ * expandAbbreviations("db") → ["database", "db", "data"]
52
+ * expandAbbreviations("config") → ["configuration", "config", "cfg", "conf"]
53
+ * expandAbbreviations("unknown") → ["unknown"]
54
+ *
55
+ * LDE properties:
56
+ * - Pure: Same input always produces same output
57
+ * - No side effects: Doesn't modify input or global state
58
+ * - Immutable: Returns readonly array
59
+ */
60
+ export function expandAbbreviations(term, abbreviations = DEFAULT_ABBREVIATIONS) {
61
+ const normalized = term.toLowerCase().trim();
62
+ // Find matching abbreviation map (check both canonical and variants)
63
+ const map = abbreviations.find((m) => m.canonical === normalized || m.variants.includes(normalized));
64
+ if (map) {
65
+ // Return all forms: canonical + variants
66
+ return [map.canonical, ...map.variants];
67
+ }
68
+ // No match: return original term
69
+ return [term];
70
+ }
71
+ //# sourceMappingURL=abbreviations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abbreviations.js","sourceRoot":"","sources":["../../../src/server/abbreviations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA+B;IAC/D,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;IACnE,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC7C,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;IACpD,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC3C,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;IAClD,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC1C,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAC3D,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;IACrD,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;CACxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,gBAA4C,qBAAqB;IAEjE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7C,qEAAqE;IACrE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrE,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -0,0 +1,63 @@
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 configuration
15
+ * Defines how different file types should be ranked
16
+ */
17
+ export interface BoostProfileConfig {
18
+ /**
19
+ * Directories to allow even if they match global denylist patterns.
20
+ * Example: ["docs/"] allows docs/ files despite being blacklisted by default.
21
+ * This overrides the global blacklist in applyFileTypeBoost/applyAdditiveFilePenalties.
22
+ */
23
+ denylistOverrides: string[];
24
+ /** Multiplicative factors for different file types */
25
+ fileTypeMultipliers: {
26
+ /** Documentation files (.md, .yaml, .yml, .mdc) */
27
+ doc: number;
28
+ /** Implementation files (src/**) */
29
+ impl: number;
30
+ /** Configuration files (tsconfig.json, package.json, etc.) */
31
+ config: number;
32
+ };
33
+ /**
34
+ * Path-specific multipliers (e.g., src/app/ gets higher boost than src/)
35
+ * Array is sorted by prefix length (longest first) to ensure correct matching priority
36
+ */
37
+ pathMultipliers: Array<{
38
+ prefix: string;
39
+ multiplier: number;
40
+ }>;
41
+ /**
42
+ * Skip additive penalty for config files (-1.5 score penalty)
43
+ * and only apply multiplicative penalty (e.g., 0.3x multiplier)
44
+ * @default false
45
+ */
46
+ skipConfigAdditivePenalty?: boolean;
47
+ }
48
+ export type BoostProfileName = "default" | "docs" | "none" | "balanced" | "feature" | "bugfix" | "debug" | "api" | "editor" | "testfail" | "typeerror";
49
+ /**
50
+ * Boost profile definitions
51
+ * Centralized configuration for all boost profiles
52
+ */
53
+ export declare const BOOST_PROFILES: Record<BoostProfileName, BoostProfileConfig>;
54
+ /**
55
+ * Get boost profile configuration by name
56
+ * @throws Error if profile name is invalid
57
+ */
58
+ export declare function getBoostProfile(name: BoostProfileName): BoostProfileConfig;
59
+ /**
60
+ * Check if a profile name is valid
61
+ */
62
+ export declare function isValidBoostProfile(name: string): name is BoostProfileName;
63
+ //# sourceMappingURL=boost-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boost-profiles.d.ts","sourceRoot":"","sources":["../../../src/server/boost-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B,sDAAsD;IACtD,mBAAmB,EAAE;QACnB,mDAAmD;QACnD,GAAG,EAAE,MAAM,CAAC;QACZ,oCAAoC;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,8DAA8D;QAC9D,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;;OAGG;IACH,eAAe,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/D;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,GACL,QAAQ,GACR,UAAU,GACV,WAAW,CAAC;AAEhB;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAgLvE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CAS1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAE1E"}