kiri-mcp-server 0.9.6 → 0.9.9

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 (154) hide show
  1. package/README.md +94 -7
  2. package/dist/client/cli.js +68 -0
  3. package/dist/client/cli.js.map +1 -0
  4. package/dist/client/index.js +5 -0
  5. package/dist/client/index.js.map +1 -0
  6. package/dist/eval/metrics.js +47 -0
  7. package/dist/eval/metrics.js.map +1 -0
  8. package/dist/indexer/cli.js +362 -0
  9. package/dist/indexer/cli.js.map +1 -0
  10. package/dist/indexer/codeintel.js +182 -0
  11. package/dist/indexer/codeintel.js.map +1 -0
  12. package/dist/indexer/git.js +30 -0
  13. package/dist/indexer/git.js.map +1 -0
  14. package/dist/indexer/language.js +34 -0
  15. package/dist/indexer/language.js.map +1 -0
  16. package/dist/indexer/pipeline/filters/denylist.js +71 -0
  17. package/dist/indexer/pipeline/filters/denylist.js.map +1 -0
  18. package/dist/indexer/schema.js +101 -0
  19. package/dist/indexer/schema.js.map +1 -0
  20. package/dist/package.json +11 -1
  21. package/dist/server/bootstrap.js +19 -0
  22. package/dist/server/bootstrap.js.map +1 -0
  23. package/dist/server/context.js +1 -0
  24. package/dist/server/context.js.map +1 -0
  25. package/dist/server/fallbacks/degradeController.js +69 -0
  26. package/dist/server/fallbacks/degradeController.js.map +1 -0
  27. package/dist/server/handlers.js +1268 -0
  28. package/dist/server/handlers.js.map +1 -0
  29. package/dist/server/main.js +151 -0
  30. package/dist/server/main.js.map +1 -0
  31. package/dist/server/observability/metrics.js +56 -0
  32. package/dist/server/observability/metrics.js.map +1 -0
  33. package/dist/server/observability/tracing.js +58 -0
  34. package/dist/server/observability/tracing.js.map +1 -0
  35. package/dist/server/rpc.js +477 -0
  36. package/dist/server/rpc.js.map +1 -0
  37. package/dist/server/runtime.js +47 -0
  38. package/dist/server/runtime.js.map +1 -0
  39. package/dist/server/scoring.js +116 -0
  40. package/dist/server/scoring.js.map +1 -0
  41. package/dist/server/stdio.js +76 -0
  42. package/dist/server/stdio.js.map +1 -0
  43. package/dist/shared/duckdb.js +119 -0
  44. package/dist/shared/duckdb.js.map +1 -0
  45. package/dist/shared/embedding.js +98 -0
  46. package/dist/shared/embedding.js.map +1 -0
  47. package/dist/shared/index.js +9 -0
  48. package/dist/shared/index.js.map +1 -0
  49. package/dist/shared/security/config.js +64 -0
  50. package/dist/shared/security/config.js.map +1 -0
  51. package/dist/shared/security/masker.js +56 -0
  52. package/dist/shared/security/masker.js.map +1 -0
  53. package/dist/shared/tokenizer.js +4 -0
  54. package/dist/shared/tokenizer.js.map +1 -0
  55. package/dist/shared/utils/simpleYaml.js +89 -0
  56. package/dist/shared/utils/simpleYaml.js.map +1 -0
  57. package/dist/src/client/proxy.js +2 -1
  58. package/dist/src/client/proxy.js.map +1 -1
  59. package/dist/src/client/start-daemon.d.ts.map +1 -1
  60. package/dist/src/client/start-daemon.js +2 -1
  61. package/dist/src/client/start-daemon.js.map +1 -1
  62. package/dist/src/daemon/daemon.js +6 -4
  63. package/dist/src/daemon/daemon.js.map +1 -1
  64. package/dist/src/daemon/socket.d.ts +6 -4
  65. package/dist/src/daemon/socket.d.ts.map +1 -1
  66. package/dist/src/daemon/socket.js +62 -18
  67. package/dist/src/daemon/socket.js.map +1 -1
  68. package/dist/src/indexer/cli.d.ts +1 -0
  69. package/dist/src/indexer/cli.d.ts.map +1 -1
  70. package/dist/src/indexer/cli.js +503 -257
  71. package/dist/src/indexer/cli.js.map +1 -1
  72. package/dist/src/indexer/codeintel.d.ts +1 -1
  73. package/dist/src/indexer/codeintel.d.ts.map +1 -1
  74. package/dist/src/indexer/codeintel.js +296 -3
  75. package/dist/src/indexer/codeintel.js.map +1 -1
  76. package/dist/src/indexer/dart/analyze.d.ts +29 -0
  77. package/dist/src/indexer/dart/analyze.d.ts.map +1 -0
  78. package/dist/src/indexer/dart/analyze.js +452 -0
  79. package/dist/src/indexer/dart/analyze.js.map +1 -0
  80. package/dist/src/indexer/dart/client.d.ts +113 -0
  81. package/dist/src/indexer/dart/client.d.ts.map +1 -0
  82. package/dist/src/indexer/dart/client.js +444 -0
  83. package/dist/src/indexer/dart/client.js.map +1 -0
  84. package/dist/src/indexer/dart/config.d.ts +36 -0
  85. package/dist/src/indexer/dart/config.d.ts.map +1 -0
  86. package/dist/src/indexer/dart/config.js +62 -0
  87. package/dist/src/indexer/dart/config.js.map +1 -0
  88. package/dist/src/indexer/dart/dependencies.d.ts +17 -0
  89. package/dist/src/indexer/dart/dependencies.d.ts.map +1 -0
  90. package/dist/src/indexer/dart/dependencies.js +102 -0
  91. package/dist/src/indexer/dart/dependencies.js.map +1 -0
  92. package/dist/src/indexer/dart/pathKey.d.ts +40 -0
  93. package/dist/src/indexer/dart/pathKey.d.ts.map +1 -0
  94. package/dist/src/indexer/dart/pathKey.js +72 -0
  95. package/dist/src/indexer/dart/pathKey.js.map +1 -0
  96. package/dist/src/indexer/dart/poolGate.d.ts +57 -0
  97. package/dist/src/indexer/dart/poolGate.d.ts.map +1 -0
  98. package/dist/src/indexer/dart/poolGate.js +87 -0
  99. package/dist/src/indexer/dart/poolGate.js.map +1 -0
  100. package/dist/src/indexer/dart/sdk.d.ts +40 -0
  101. package/dist/src/indexer/dart/sdk.d.ts.map +1 -0
  102. package/dist/src/indexer/dart/sdk.js +167 -0
  103. package/dist/src/indexer/dart/sdk.js.map +1 -0
  104. package/dist/src/indexer/dart/transform.d.ts +17 -0
  105. package/dist/src/indexer/dart/transform.d.ts.map +1 -0
  106. package/dist/src/indexer/dart/transform.js +157 -0
  107. package/dist/src/indexer/dart/transform.js.map +1 -0
  108. package/dist/src/indexer/dart/types.d.ts +137 -0
  109. package/dist/src/indexer/dart/types.d.ts.map +1 -0
  110. package/dist/src/indexer/dart/types.js +5 -0
  111. package/dist/src/indexer/dart/types.js.map +1 -0
  112. package/dist/src/indexer/git.d.ts +1 -0
  113. package/dist/src/indexer/git.d.ts.map +1 -1
  114. package/dist/src/indexer/git.js +8 -0
  115. package/dist/src/indexer/git.js.map +1 -1
  116. package/dist/src/indexer/language.d.ts.map +1 -1
  117. package/dist/src/indexer/language.js +1 -0
  118. package/dist/src/indexer/language.js.map +1 -1
  119. package/dist/src/indexer/queue.d.ts +19 -0
  120. package/dist/src/indexer/queue.d.ts.map +1 -0
  121. package/dist/src/indexer/queue.js +50 -0
  122. package/dist/src/indexer/queue.js.map +1 -0
  123. package/dist/src/indexer/schema.d.ts +61 -1
  124. package/dist/src/indexer/schema.d.ts.map +1 -1
  125. package/dist/src/indexer/schema.js +253 -2
  126. package/dist/src/indexer/schema.js.map +1 -1
  127. package/dist/src/indexer/watch.d.ts +21 -0
  128. package/dist/src/indexer/watch.d.ts.map +1 -1
  129. package/dist/src/indexer/watch.js +189 -28
  130. package/dist/src/indexer/watch.js.map +1 -1
  131. package/dist/src/server/context.d.ts +7 -0
  132. package/dist/src/server/context.d.ts.map +1 -1
  133. package/dist/src/server/handlers.d.ts.map +1 -1
  134. package/dist/src/server/handlers.js +87 -4
  135. package/dist/src/server/handlers.js.map +1 -1
  136. package/dist/src/server/indexBootstrap.d.ts.map +1 -1
  137. package/dist/src/server/indexBootstrap.js +4 -1
  138. package/dist/src/server/indexBootstrap.js.map +1 -1
  139. package/dist/src/server/main.js +0 -0
  140. package/dist/src/server/runtime.d.ts.map +1 -1
  141. package/dist/src/server/runtime.js +45 -6
  142. package/dist/src/server/runtime.js.map +1 -1
  143. package/dist/src/shared/duckdb.d.ts.map +1 -1
  144. package/dist/src/shared/duckdb.js +9 -0
  145. package/dist/src/shared/duckdb.js.map +1 -1
  146. package/dist/src/shared/utils/path.d.ts +46 -0
  147. package/dist/src/shared/utils/path.d.ts.map +1 -0
  148. package/dist/src/shared/utils/path.js +94 -0
  149. package/dist/src/shared/utils/path.js.map +1 -0
  150. package/dist/src/shared/utils/socket.d.ts +61 -0
  151. package/dist/src/shared/utils/socket.d.ts.map +1 -0
  152. package/dist/src/shared/utils/socket.js +156 -0
  153. package/dist/src/shared/utils/socket.js.map +1 -0
  154. package/package.json +11 -1
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Dart Analysis Server の Outline から KIRI の SymbolRecord への変換
3
+ */
4
+ /**
5
+ * Outline を SymbolRecord と SnippetRecord に変換
6
+ *
7
+ * @param outline - Analysis Server の Outline
8
+ * @param content - ファイルの内容(行番号計算用)
9
+ * @returns { symbols, snippets }
10
+ */
11
+ export function outlineToSymbols(outline, content) {
12
+ const symbols = [];
13
+ // offset → line 変換のための行開始位置配列を事前構築
14
+ const lineStarts = buildLineStartsArray(content);
15
+ function visit(node) {
16
+ const kind = mapElementKind(node.element.kind);
17
+ if (kind) {
18
+ const startLine = offsetToLine(lineStarts, node.offset);
19
+ const endLine = offsetToLine(lineStarts, node.offset + node.length);
20
+ symbols.push({
21
+ name: node.element.name,
22
+ kind,
23
+ rangeStartLine: startLine,
24
+ rangeEndLine: endLine,
25
+ signature: buildSignature(node),
26
+ doc: node.element.dartdoc ?? null,
27
+ });
28
+ }
29
+ // 子要素を再帰的に処理
30
+ node.children?.forEach(visit);
31
+ }
32
+ visit(outline);
33
+ // symbolId を採番
34
+ const symbolRecords = symbols
35
+ .sort((a, b) => a.rangeStartLine - b.rangeStartLine)
36
+ .map((item, index) => ({ symbolId: index + 1, ...item }));
37
+ // snippets を生成(各シンボルの範囲に対応)
38
+ const snippets = symbolRecords.map((symbol) => ({
39
+ startLine: symbol.rangeStartLine,
40
+ endLine: symbol.rangeEndLine,
41
+ symbolId: symbol.symbolId,
42
+ }));
43
+ return { symbols: symbolRecords, snippets };
44
+ }
45
+ /**
46
+ * Dart ElementKind を KIRI の symbol kind にマッピング
47
+ *
48
+ * Phase 2: EXTENSION_TYPE, OPERATOR, TYPE_ALIAS を追加
49
+ */
50
+ function mapElementKind(kind) {
51
+ switch (kind) {
52
+ case "CLASS":
53
+ case "CLASS_TYPE_ALIAS":
54
+ case "ENUM":
55
+ case "MIXIN":
56
+ case "EXTENSION":
57
+ case "EXTENSION_TYPE": // Phase 2: Dart 3.0+ extension type
58
+ return "class";
59
+ case "FUNCTION":
60
+ case "METHOD":
61
+ case "GETTER":
62
+ case "SETTER":
63
+ case "CONSTRUCTOR":
64
+ case "OPERATOR": // Phase 2: operator overloading
65
+ return "function";
66
+ case "FIELD":
67
+ case "TOP_LEVEL_VARIABLE":
68
+ case "ENUM_CONSTANT":
69
+ return "property";
70
+ case "FUNCTION_TYPE_ALIAS":
71
+ case "TYPE_ALIAS": // Phase 2: type Foo = Bar;
72
+ return "type";
73
+ case "LIBRARY":
74
+ case "COMPILATION_UNIT":
75
+ // KIRI ではファイル単位なので個別に記録しない
76
+ return null;
77
+ case "PARAMETER":
78
+ case "TYPE_PARAMETER":
79
+ case "UNIT_TEST_GROUP":
80
+ case "UNIT_TEST_TEST":
81
+ case "UNKNOWN":
82
+ // これらの要素は個別にシンボルとして記録しない
83
+ return null;
84
+ default:
85
+ // その他の要素は無視
86
+ return null;
87
+ }
88
+ }
89
+ /**
90
+ * Outline からシグネチャ文字列を生成
91
+ *
92
+ * 形式: {returnType} {name}{typeParameters}{parameters}
93
+ */
94
+ function buildSignature(node) {
95
+ const element = node.element;
96
+ const parts = [];
97
+ // 返り値の型
98
+ if (element.returnType) {
99
+ parts.push(element.returnType);
100
+ }
101
+ // 名前
102
+ parts.push(element.name);
103
+ // 型パラメータ
104
+ if (element.typeParameters) {
105
+ parts.push(element.typeParameters);
106
+ }
107
+ // パラメータ
108
+ if (element.parameters) {
109
+ parts.push(element.parameters);
110
+ }
111
+ const signature = parts.join(" ").trim();
112
+ // シグネチャが名前だけの場合は null を返す(フィールドなど)
113
+ return signature === element.name ? null : signature;
114
+ }
115
+ /**
116
+ * ファイル内容から各行の開始オフセット配列を構築
117
+ *
118
+ * メモリ効率改善: Map(O(n))の代わりに配列(O(m))を使用(n=ファイルサイズ、m=行数)
119
+ *
120
+ * @param content - ファイル内容
121
+ * @returns 各行の開始オフセット配列(0-based offset, 1-based line number)
122
+ */
123
+ function buildLineStartsArray(content) {
124
+ const lineStarts = [0]; // 1行目は offset 0 から開始
125
+ for (let i = 0; i < content.length; i++) {
126
+ if (content[i] === "\n") {
127
+ lineStarts.push(i + 1); // 改行の次の文字が次の行の開始
128
+ }
129
+ }
130
+ return lineStarts;
131
+ }
132
+ /**
133
+ * オフセットから行番号を二分探索で取得
134
+ *
135
+ * 時間計算量: O(log m) (m=行数)
136
+ *
137
+ * @param lineStarts - 各行の開始オフセット配列
138
+ * @param offset - 検索対象のオフセット(0-based)
139
+ * @returns 行番号(1-based)
140
+ */
141
+ function offsetToLine(lineStarts, offset) {
142
+ // 二分探索: offset 以下の最大のインデックスを探す
143
+ let left = 0;
144
+ let right = lineStarts.length - 1;
145
+ while (left < right) {
146
+ const mid = Math.floor((left + right + 1) / 2);
147
+ if (lineStarts[mid] <= offset) {
148
+ left = mid;
149
+ }
150
+ else {
151
+ right = mid - 1;
152
+ }
153
+ }
154
+ // インデックスは0-based、行番号は1-basedなので+1
155
+ return left + 1;
156
+ }
157
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../src/indexer/dart/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * TypeScript interfaces for Dart Analysis Server JSON-RPC protocol
3
+ */
4
+ export interface RpcRequest<TParams = unknown> {
5
+ id: string;
6
+ method: string;
7
+ params: TParams;
8
+ }
9
+ export interface RpcResponse<TResult = unknown> {
10
+ id: string;
11
+ result?: TResult;
12
+ error?: RpcError;
13
+ }
14
+ export interface RpcError {
15
+ code: number;
16
+ message: string;
17
+ data?: unknown;
18
+ }
19
+ export interface RpcNotification<TParams = unknown> {
20
+ event: string;
21
+ params: TParams;
22
+ }
23
+ /**
24
+ * analysis.updateContent のパラメータ
25
+ */
26
+ export interface UpdateContentParams {
27
+ files: Record<string, ContentOverlayChange>;
28
+ }
29
+ export type ContentOverlayChange = AddContentOverlay | RemoveContentOverlay;
30
+ export interface AddContentOverlay {
31
+ type: "add";
32
+ content: string;
33
+ }
34
+ export interface RemoveContentOverlay {
35
+ type: "remove";
36
+ }
37
+ /**
38
+ * analysis.getOutline のレスポンス
39
+ */
40
+ export interface GetOutlineResult {
41
+ outline: Outline;
42
+ }
43
+ export interface Outline {
44
+ kind: string;
45
+ name?: string;
46
+ offset: number;
47
+ length: number;
48
+ element: OutlineElement;
49
+ children?: Outline[];
50
+ }
51
+ export interface OutlineElement {
52
+ kind: string;
53
+ name: string;
54
+ parameters?: string;
55
+ returnType?: string;
56
+ typeParameters?: string;
57
+ location?: ElementLocation;
58
+ dartdoc?: string;
59
+ }
60
+ export interface ElementLocation {
61
+ file: string;
62
+ offset: number;
63
+ length: number;
64
+ startLine: number;
65
+ startColumn: number;
66
+ endLine?: number;
67
+ endColumn?: number;
68
+ }
69
+ /**
70
+ * analysis.getNavigation のレスポンス
71
+ */
72
+ export interface GetNavigationResult {
73
+ files: string[];
74
+ targets: NavigationTarget[];
75
+ regions: NavigationRegion[];
76
+ }
77
+ export interface NavigationTarget {
78
+ kind: string;
79
+ fileIndex: number;
80
+ offset: number;
81
+ length: number;
82
+ startLine: number;
83
+ startColumn: number;
84
+ }
85
+ export interface NavigationRegion {
86
+ offset: number;
87
+ length: number;
88
+ targets: number[];
89
+ }
90
+ /**
91
+ * analysis.getLibraryDependencies のレスポンス
92
+ */
93
+ export interface GetLibraryDependenciesResult {
94
+ libraries: string[];
95
+ packageMap: Record<string, string[]>;
96
+ }
97
+ /**
98
+ * server.connected 通知
99
+ */
100
+ export interface ServerConnectedParams {
101
+ version: string;
102
+ pid: number;
103
+ sessionId?: string;
104
+ }
105
+ /**
106
+ * server.error 通知
107
+ */
108
+ export interface ServerErrorParams {
109
+ isFatal: boolean;
110
+ message: string;
111
+ stackTrace: string;
112
+ }
113
+ /**
114
+ * analysis.errors 通知
115
+ */
116
+ export interface AnalysisErrorsParams {
117
+ file: string;
118
+ errors: AnalysisError[];
119
+ }
120
+ export interface AnalysisError {
121
+ severity: "INFO" | "WARNING" | "ERROR";
122
+ type: string;
123
+ location: ElementLocation;
124
+ message: string;
125
+ correction?: string;
126
+ code?: string;
127
+ }
128
+ export type ElementKind = "CLASS" | "CLASS_TYPE_ALIAS" | "COMPILATION_UNIT" | "CONSTRUCTOR" | "ENUM" | "ENUM_CONSTANT" | "EXTENSION" | "EXTENSION_TYPE" | "FIELD" | "FUNCTION" | "FUNCTION_TYPE_ALIAS" | "GETTER" | "LIBRARY" | "METHOD" | "MIXIN" | "OPERATOR" | "PARAMETER" | "SETTER" | "TOP_LEVEL_VARIABLE" | "TYPE_ALIAS" | "TYPE_PARAMETER" | "UNIT_TEST_GROUP" | "UNIT_TEST_TEST" | "UNKNOWN";
129
+ /**
130
+ * DartAnalysisClient が返す解析結果のペイロード
131
+ */
132
+ export interface DartAnalysisPayload {
133
+ outline: Outline;
134
+ navigation?: GetNavigationResult;
135
+ dependencies?: GetLibraryDependenciesResult;
136
+ }
137
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/indexer/dart/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * TypeScript interfaces for Dart Analysis Server JSON-RPC protocol
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/indexer/dart/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,4 +1,5 @@
1
1
  export declare function gitLsFiles(repoRoot: string): Promise<string[]>;
2
2
  export declare function getHeadCommit(repoRoot: string): Promise<string>;
3
3
  export declare function getDefaultBranch(repoRoot: string): Promise<string | null>;
4
+ export declare function gitDiffNameOnly(repoRoot: string, sinceRef: string): Promise<string[]>;
4
5
  //# sourceMappingURL=git.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/indexer/git.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMpE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa/E"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/indexer/git.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMpE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa/E;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAO3F"}
@@ -27,4 +27,12 @@ export async function getDefaultBranch(repoRoot) {
27
27
  return null;
28
28
  }
29
29
  }
30
+ export async function gitDiffNameOnly(repoRoot, sinceRef) {
31
+ const args = ["diff", "--name-only", "-z", "--diff-filter=ACDMRTUXB", sinceRef, "HEAD"];
32
+ const { stdout } = await execFileAsync("git", args, { cwd: repoRoot });
33
+ return stdout
34
+ .split("\0")
35
+ .map((item) => item.trim())
36
+ .filter((item) => item.length > 0);
37
+ }
30
38
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/indexer/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE;YACnF,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/indexer/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE;YACnF,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,QAAgB;IACtE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvE,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../../src/indexer/language.ts"],"names":[],"mappings":"AA8BA,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D"}
1
+ {"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../../src/indexer/language.ts"],"names":[],"mappings":"AA+BA,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D"}
@@ -19,6 +19,7 @@ const LANGUAGE_BY_EXTENSION = {
19
19
  ".cc": "C++",
20
20
  ".hh": "C++",
21
21
  ".cs": "C#",
22
+ ".dart": "Dart",
22
23
  ".php": "PHP",
23
24
  ".swift": "Swift",
24
25
  ".kt": "Kotlin",
@@ -1 +1 @@
1
- {"version":3,"file":"language.js","sourceRoot":"","sources":["../../../src/indexer/language.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAA2B;IACpD,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,qBAAqB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"language.js","sourceRoot":"","sources":["../../../src/indexer/language.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAA2B;IACpD,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,qBAAqB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import PQueue from "p-queue";
2
+ /**
3
+ * 指定されたdatabasePath用のキューを取得(初回はconcurrency=1で作成)
4
+ *
5
+ * @param databasePath - DuckDBファイルパス
6
+ * @returns databasePath専用のキュー
7
+ */
8
+ export declare function getIndexerQueue(databasePath: string): PQueue;
9
+ /**
10
+ * テスト用: 特定databasePathのキューをクリア
11
+ *
12
+ * @param databasePath - クリア対象のパス
13
+ */
14
+ export declare function clearQueue(databasePath: string): void;
15
+ /**
16
+ * テスト用: すべてのキューをクリア
17
+ */
18
+ export declare function clearAllQueues(): void;
19
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/indexer/queue.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAmB7B;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
@@ -0,0 +1,50 @@
1
+ import PQueue from "p-queue";
2
+ /**
3
+ * DuckDB single-writer制約対応: databasePathごとにindexer実行をキューイング
4
+ *
5
+ * 背景:
6
+ * - DuckDBは1ファイル1ライターのみサポート
7
+ * - fts_status/generation追加でALTER TABLE + 全件UPDATEが実行され、接続時間が延長
8
+ * - 複数indexer並列実行時にカタログ競合が発生し、repo table消失やデータ損失が起きる
9
+ *
10
+ * 解決策:
11
+ * - 同じdatabasePathに対するrunIndexer()呼び出しを直列化
12
+ * - p-queue (concurrency: 1) でファイルごとに排他制御
13
+ *
14
+ * @see Critical Review Fix #5 - Concurrency test failures
15
+ */
16
+ const queueMap = new Map();
17
+ /**
18
+ * 指定されたdatabasePath用のキューを取得(初回はconcurrency=1で作成)
19
+ *
20
+ * @param databasePath - DuckDBファイルパス
21
+ * @returns databasePath専用のキュー
22
+ */
23
+ export function getIndexerQueue(databasePath) {
24
+ if (!queueMap.has(databasePath)) {
25
+ queueMap.set(databasePath, new PQueue({ concurrency: 1 }));
26
+ }
27
+ return queueMap.get(databasePath);
28
+ }
29
+ /**
30
+ * テスト用: 特定databasePathのキューをクリア
31
+ *
32
+ * @param databasePath - クリア対象のパス
33
+ */
34
+ export function clearQueue(databasePath) {
35
+ const queue = queueMap.get(databasePath);
36
+ if (queue) {
37
+ queue.clear();
38
+ queueMap.delete(databasePath);
39
+ }
40
+ }
41
+ /**
42
+ * テスト用: すべてのキューをクリア
43
+ */
44
+ export function clearAllQueues() {
45
+ for (const queue of queueMap.values()) {
46
+ queue.clear();
47
+ }
48
+ queueMap.clear();
49
+ }
50
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/indexer/queue.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B;;;;;;;;;;;;;GAaG;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB;IAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,YAAoB;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IACD,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -1,9 +1,69 @@
1
1
  import { DuckDBClient } from "../shared/duckdb.js";
2
2
  export declare function ensureBaseSchema(db: DuckDBClient): Promise<void>;
3
+ /**
4
+ * repoテーブルにFTSメタデータ列を追加(Phase 3マイグレーション)
5
+ * 既存DBとの互換性のため、列が存在しない場合のみ追加
6
+ * @param db - DuckDBクライアント
7
+ * @throws Error if migration fails (except when repo table doesn't exist yet)
8
+ */
9
+ export declare function ensureRepoMetaColumns(db: DuckDBClient): Promise<void>;
3
10
  /**
4
11
  * FTS(全文検索)インデックスの作成を試行
5
12
  * @param db - DuckDBクライアント
13
+ * @param forceRebuild - 強制的に再構築する場合true
6
14
  * @returns FTS拡張が利用可能な場合true、それ以外false
7
15
  */
8
- export declare function tryCreateFTSIndex(db: DuckDBClient): Promise<boolean>;
16
+ export declare function tryCreateFTSIndex(db: DuckDBClient, forceRebuild?: boolean): Promise<boolean>;
17
+ /**
18
+ * FTSスキーマの存在を確認
19
+ * @param db - DuckDBクライアント
20
+ * @returns スキーマが存在する場合true
21
+ */
22
+ export declare function checkFTSSchemaExists(db: DuckDBClient): Promise<boolean>;
23
+ /**
24
+ * FTS拡張の利用可能性のみをチェック(Phase 2: サーバー起動時用)
25
+ * インデックスの作成は行わず、存在確認のみ
26
+ * @param db - DuckDBクライアント
27
+ * @returns FTS拡張がロード可能でインデックスが存在する場合true
28
+ */
29
+ export declare function checkFTSAvailability(db: DuckDBClient): Promise<boolean>;
30
+ /**
31
+ * dirty flagに基づいてFTSインデックスを条件付きで再構築(Phase 2+3: インデクサー用)
32
+ *
33
+ * @deprecated The `repoId` parameter is currently ignored due to global FTS architecture.
34
+ * Use `rebuildGlobalFTS()` instead for clearer intent. This signature will be removed in v2.0.
35
+ *
36
+ * NOTE: DuckDB FTS index is GLOBAL (one fts_main_blob schema for entire blob table).
37
+ * We check if ANY repo is dirty to avoid partial corruption in multi-repo environments.
38
+ * Future improvement: migrate to dedicated fts_metadata table (see Codex design proposal).
39
+ *
40
+ * @param db - DuckDBクライアント
41
+ * @param repoId - リポジトリID (⚠️ IGNORED: FTS is global, not per-repo)
42
+ * @param forceFTS - FTS再構築を強制する場合true
43
+ * @returns FTSが利用可能な場合true
44
+ */
45
+ export declare function rebuildFTSIfNeeded(db: DuckDBClient, repoId: number, forceFTS?: boolean): Promise<boolean>;
46
+ /**
47
+ * グローバルFTSインデックスを再構築(Fix #4: New API without misleading repoId parameter)
48
+ *
49
+ * NOTE: DuckDB FTS index is GLOBAL (one fts_main_blob schema for entire blob table).
50
+ * This function rebuilds FTS for all repos in the database, with proper status tracking
51
+ * and generation-based dirty flag management to prevent lost concurrent updates.
52
+ *
53
+ * @param db - DuckDBクライアント
54
+ * @param options - オプション設定
55
+ * @param options.forceFTS - FTS再構築を強制する場合true
56
+ * @returns FTSが利用可能な場合true
57
+ */
58
+ export declare function rebuildGlobalFTS(db: DuckDBClient, options?: {
59
+ forceFTS?: boolean;
60
+ }): Promise<boolean>;
61
+ /**
62
+ * FTS dirty flagを設定(Phase 3: ウォッチモード用)
63
+ * Note: 現在は rebuildFTSIfNeeded() の使用を推奨。この関数は将来のウォッチモード実装用に保持。
64
+ * @param db - DuckDBクライアント
65
+ * @param repoId - リポジトリID
66
+ * @throws Error if database update fails
67
+ */
68
+ export declare function setFTSDirty(db: DuckDBClient, repoId: number): Promise<void>;
9
69
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/indexer/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8GtE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB1E"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/indexer/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHtE;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD3E;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAoChG;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAU7E;AA8BD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAW7E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,UAAQ,GACf,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,YAAY,EAChB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,OAAO,CAAC,OAAO,CAAC,CAkGlB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjF"}