kiri-mcp-server 0.16.1 → 0.17.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 (121) hide show
  1. package/README.md +57 -21
  2. package/dist/package.json +1 -1
  3. package/dist/src/client/model-cli.d.ts +12 -0
  4. package/dist/src/client/model-cli.d.ts.map +1 -0
  5. package/dist/src/client/model-cli.js +247 -0
  6. package/dist/src/client/model-cli.js.map +1 -0
  7. package/dist/src/client/proxy.js +0 -0
  8. package/dist/src/daemon/daemon.js +0 -0
  9. package/dist/src/indexer/graph-metrics.d.ts.map +1 -1
  10. package/dist/src/indexer/graph-metrics.js +16 -4
  11. package/dist/src/indexer/graph-metrics.js.map +1 -1
  12. package/dist/src/server/boost-profiles.d.ts +1 -1
  13. package/dist/src/server/boost-profiles.d.ts.map +1 -1
  14. package/dist/src/server/boost-profiles.js +22 -0
  15. package/dist/src/server/boost-profiles.js.map +1 -1
  16. package/dist/src/server/main.js +0 -0
  17. package/dist/src/server/rpc.js +4 -4
  18. package/dist/src/server/rpc.js.map +1 -1
  19. package/dist/src/shared/utils/global-dirs.d.ts +64 -0
  20. package/dist/src/shared/utils/global-dirs.d.ts.map +1 -0
  21. package/dist/src/shared/utils/global-dirs.js +134 -0
  22. package/dist/src/shared/utils/global-dirs.js.map +1 -0
  23. package/dist/src/vss/config.d.ts +66 -0
  24. package/dist/src/vss/config.d.ts.map +1 -0
  25. package/dist/src/vss/config.js +233 -0
  26. package/dist/src/vss/config.js.map +1 -0
  27. package/dist/src/vss/index.d.ts +9 -0
  28. package/dist/src/vss/index.d.ts.map +1 -0
  29. package/dist/src/vss/index.js +9 -0
  30. package/dist/src/vss/index.js.map +1 -0
  31. package/dist/src/vss/model-downloader.d.ts +101 -0
  32. package/dist/src/vss/model-downloader.d.ts.map +1 -0
  33. package/dist/src/vss/model-downloader.js +320 -0
  34. package/dist/src/vss/model-downloader.js.map +1 -0
  35. package/dist/src/vss/provider.d.ts +132 -0
  36. package/dist/src/vss/provider.d.ts.map +1 -0
  37. package/dist/src/vss/provider.js +254 -0
  38. package/dist/src/vss/provider.js.map +1 -0
  39. package/package.json +1 -1
  40. package/dist/client/cli.js +0 -68
  41. package/dist/client/cli.js.map +0 -1
  42. package/dist/client/index.js +0 -5
  43. package/dist/client/index.js.map +0 -1
  44. package/dist/eval/metrics.js +0 -47
  45. package/dist/eval/metrics.js.map +0 -1
  46. package/dist/indexer/cli.js +0 -362
  47. package/dist/indexer/cli.js.map +0 -1
  48. package/dist/indexer/codeintel.js +0 -182
  49. package/dist/indexer/codeintel.js.map +0 -1
  50. package/dist/indexer/git.js +0 -30
  51. package/dist/indexer/git.js.map +0 -1
  52. package/dist/indexer/language.js +0 -34
  53. package/dist/indexer/language.js.map +0 -1
  54. package/dist/indexer/pipeline/filters/denylist.js +0 -71
  55. package/dist/indexer/pipeline/filters/denylist.js.map +0 -1
  56. package/dist/indexer/schema.js +0 -101
  57. package/dist/indexer/schema.js.map +0 -1
  58. package/dist/server/bootstrap.js +0 -19
  59. package/dist/server/bootstrap.js.map +0 -1
  60. package/dist/server/context.js +0 -1
  61. package/dist/server/context.js.map +0 -1
  62. package/dist/server/fallbacks/degradeController.js +0 -69
  63. package/dist/server/fallbacks/degradeController.js.map +0 -1
  64. package/dist/server/handlers.js +0 -1268
  65. package/dist/server/handlers.js.map +0 -1
  66. package/dist/server/main.js +0 -151
  67. package/dist/server/main.js.map +0 -1
  68. package/dist/server/observability/metrics.js +0 -56
  69. package/dist/server/observability/metrics.js.map +0 -1
  70. package/dist/server/observability/tracing.js +0 -58
  71. package/dist/server/observability/tracing.js.map +0 -1
  72. package/dist/server/rpc.js +0 -477
  73. package/dist/server/rpc.js.map +0 -1
  74. package/dist/server/runtime.js +0 -47
  75. package/dist/server/runtime.js.map +0 -1
  76. package/dist/server/scoring.js +0 -116
  77. package/dist/server/scoring.js.map +0 -1
  78. package/dist/server/stdio.js +0 -76
  79. package/dist/server/stdio.js.map +0 -1
  80. package/dist/shared/duckdb.js +0 -119
  81. package/dist/shared/duckdb.js.map +0 -1
  82. package/dist/shared/embedding.js +0 -98
  83. package/dist/shared/embedding.js.map +0 -1
  84. package/dist/shared/index.js +0 -9
  85. package/dist/shared/index.js.map +0 -1
  86. package/dist/shared/security/config.js +0 -64
  87. package/dist/shared/security/config.js.map +0 -1
  88. package/dist/shared/security/masker.js +0 -56
  89. package/dist/shared/security/masker.js.map +0 -1
  90. package/dist/shared/tokenizer.js +0 -4
  91. package/dist/shared/tokenizer.js.map +0 -1
  92. package/dist/shared/utils/simpleYaml.js +0 -89
  93. package/dist/shared/utils/simpleYaml.js.map +0 -1
  94. package/dist/src/server/rrf.d.ts +0 -86
  95. package/dist/src/server/rrf.d.ts.map +0 -1
  96. package/dist/src/server/rrf.js +0 -108
  97. package/dist/src/server/rrf.js.map +0 -1
  98. package/dist/src/shared/embedding/engine.d.ts +0 -38
  99. package/dist/src/shared/embedding/engine.d.ts.map +0 -1
  100. package/dist/src/shared/embedding/engine.js +0 -6
  101. package/dist/src/shared/embedding/engine.js.map +0 -1
  102. package/dist/src/shared/embedding/lsh-engine.d.ts +0 -11
  103. package/dist/src/shared/embedding/lsh-engine.d.ts.map +0 -1
  104. package/dist/src/shared/embedding/lsh-engine.js +0 -14
  105. package/dist/src/shared/embedding/lsh-engine.js.map +0 -1
  106. package/dist/src/shared/embedding/registry.d.ts +0 -25
  107. package/dist/src/shared/embedding/registry.d.ts.map +0 -1
  108. package/dist/src/shared/embedding/registry.js +0 -50
  109. package/dist/src/shared/embedding/registry.js.map +0 -1
  110. package/dist/src/shared/embedding/semantic-engine.d.ts +0 -14
  111. package/dist/src/shared/embedding/semantic-engine.d.ts.map +0 -1
  112. package/dist/src/shared/embedding/semantic-engine.js +0 -50
  113. package/dist/src/shared/embedding/semantic-engine.js.map +0 -1
  114. package/dist/src/shared/models/model-manager.d.ts +0 -38
  115. package/dist/src/shared/models/model-manager.d.ts.map +0 -1
  116. package/dist/src/shared/models/model-manager.js +0 -116
  117. package/dist/src/shared/models/model-manager.js.map +0 -1
  118. package/dist/src/shared/models/model-manifest.d.ts +0 -22
  119. package/dist/src/shared/models/model-manifest.d.ts.map +0 -1
  120. package/dist/src/shared/models/model-manifest.js +0 -24
  121. package/dist/src/shared/models/model-manifest.js.map +0 -1
@@ -1,362 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { readFile, stat } from "node:fs/promises";
3
- import { join, resolve, extname } from "node:path";
4
- import { pathToFileURL } from "node:url";
5
- import { DuckDBClient } from "../shared/duckdb.js";
6
- import { generateEmbedding } from "../shared/embedding.js";
7
- import { analyzeSource, buildFallbackSnippet } from "./codeintel.js";
8
- import { getDefaultBranch, getHeadCommit, gitLsFiles } from "./git.js";
9
- import { detectLanguage } from "./language.js";
10
- import { ensureBaseSchema } from "./schema.js";
11
- const MAX_SAMPLE_BYTES = 32_768;
12
- const MAX_FILE_BYTES = 32 * 1024 * 1024; // 32MB limit to prevent memory exhaustion
13
- const SCAN_BATCH_SIZE = 100; // Process files in batches to limit memory usage
14
- function countLines(content) {
15
- if (content.length === 0) {
16
- return 0;
17
- }
18
- return content.split(/\r?\n/).length;
19
- }
20
- function isBinaryBuffer(buffer) {
21
- const sample = buffer.subarray(0, Math.min(buffer.length, MAX_SAMPLE_BYTES));
22
- if (sample.includes(0)) {
23
- return true;
24
- }
25
- const decoded = sample.toString("utf8");
26
- return decoded.includes("\uFFFD");
27
- }
28
- /**
29
- * Ensures a repository record exists in the database, creating it if necessary.
30
- * Uses ON CONFLICT with auto-increment to prevent race conditions in concurrent scenarios.
31
- *
32
- * @param db - Database client instance
33
- * @param repoRoot - Absolute path to the repository root
34
- * @param defaultBranch - Default branch name (e.g., "main", "master"), or null if unknown
35
- * @returns The repository ID (auto-generated on first insert, reused thereafter)
36
- */
37
- async function ensureRepo(db, repoRoot, defaultBranch) {
38
- // Atomically insert or update using ON CONFLICT to leverage auto-increment
39
- // This eliminates the TOCTOU race condition present in manual ID generation
40
- await db.run(`INSERT INTO repo (root, default_branch, indexed_at)
41
- VALUES (?, ?, CURRENT_TIMESTAMP)
42
- ON CONFLICT(root) DO UPDATE SET
43
- default_branch = COALESCE(excluded.default_branch, repo.default_branch)`, [repoRoot, defaultBranch]);
44
- // Fetch the ID of the existing or newly created repo
45
- const rows = await db.all("SELECT id FROM repo WHERE root = ?", [repoRoot]);
46
- if (rows.length === 0) {
47
- throw new Error("Failed to create or find repository record. Check database constraints and schema.");
48
- }
49
- const row = rows[0];
50
- if (!row) {
51
- throw new Error("Failed to retrieve repository record. Database returned empty result.");
52
- }
53
- return row.id;
54
- }
55
- async function persistBlobs(db, blobs) {
56
- if (blobs.size === 0)
57
- return;
58
- // Use bulk insert for better performance
59
- const blobArray = Array.from(blobs.values());
60
- const placeholders = blobArray.map(() => "(?, ?, ?, ?)").join(", ");
61
- const sql = `INSERT OR REPLACE INTO blob (hash, size_bytes, line_count, content) VALUES ${placeholders}`;
62
- const params = [];
63
- for (const blob of blobArray) {
64
- params.push(blob.hash, blob.sizeBytes, blob.lineCount, blob.content);
65
- }
66
- await db.run(sql, params);
67
- }
68
- async function persistTrees(db, repoId, commitHash, records) {
69
- if (records.length === 0)
70
- return;
71
- // Use bulk insert for better performance
72
- const placeholders = records.map(() => "(?, ?, ?, ?, ?, ?, ?, ?)").join(", ");
73
- const sql = `INSERT OR REPLACE INTO tree (repo_id, commit_hash, path, blob_hash, ext, lang, is_binary, mtime) VALUES ${placeholders}`;
74
- const params = [];
75
- for (const record of records) {
76
- params.push(repoId, commitHash, record.path, record.blobHash, record.ext, record.lang, record.isBinary, record.mtimeIso);
77
- }
78
- await db.run(sql, params);
79
- }
80
- async function persistFiles(db, repoId, records) {
81
- if (records.length === 0)
82
- return;
83
- // Use bulk insert for better performance
84
- const placeholders = records.map(() => "(?, ?, ?, ?, ?, ?, ?)").join(", ");
85
- const sql = `INSERT OR REPLACE INTO file (repo_id, path, blob_hash, ext, lang, is_binary, mtime) VALUES ${placeholders}`;
86
- const params = [];
87
- for (const record of records) {
88
- params.push(repoId, record.path, record.blobHash, record.ext, record.lang, record.isBinary, record.mtimeIso);
89
- }
90
- await db.run(sql, params);
91
- }
92
- async function persistSymbols(db, repoId, records) {
93
- if (records.length === 0)
94
- return;
95
- const placeholders = records.map(() => "(?, ?, ?, ?, ?, ?, ?, ?, ?)").join(", ");
96
- const sql = `
97
- INSERT OR REPLACE INTO symbol (
98
- repo_id, path, symbol_id, name, kind, range_start_line, range_end_line, signature, doc
99
- ) VALUES ${placeholders}
100
- `;
101
- const params = [];
102
- for (const record of records) {
103
- params.push(repoId, record.path, record.symbolId, record.name, record.kind, record.rangeStartLine, record.rangeEndLine, record.signature, record.doc);
104
- }
105
- await db.run(sql, params);
106
- }
107
- async function persistSnippets(db, repoId, records) {
108
- if (records.length === 0)
109
- return;
110
- const placeholders = records.map(() => "(?, ?, ?, ?, ?, ?)").join(", ");
111
- const sql = `
112
- INSERT OR REPLACE INTO snippet (
113
- repo_id, path, snippet_id, start_line, end_line, symbol_id
114
- ) VALUES ${placeholders}
115
- `;
116
- const params = [];
117
- for (const record of records) {
118
- params.push(repoId, record.path, record.snippetId, record.startLine, record.endLine, record.symbolId);
119
- }
120
- await db.run(sql, params);
121
- }
122
- async function persistDependencies(db, repoId, records) {
123
- if (records.length === 0)
124
- return;
125
- const placeholders = records.map(() => "(?, ?, ?, ?, ?)").join(", ");
126
- const sql = `
127
- INSERT OR REPLACE INTO dependency (
128
- repo_id, src_path, dst_kind, dst, rel
129
- ) VALUES ${placeholders}
130
- `;
131
- const params = [];
132
- for (const record of records) {
133
- params.push(repoId, record.srcPath, record.dstKind, record.dst, record.rel);
134
- }
135
- await db.run(sql, params);
136
- }
137
- async function persistEmbeddings(db, repoId, records) {
138
- if (records.length === 0)
139
- return;
140
- const placeholders = records.map(() => "(?, ?, ?, ?, CURRENT_TIMESTAMP)").join(", ");
141
- const sql = `
142
- INSERT OR REPLACE INTO file_embedding (
143
- repo_id, path, dims, vector_json, updated_at
144
- ) VALUES ${placeholders}
145
- `;
146
- const params = [];
147
- for (const record of records) {
148
- params.push(repoId, record.path, record.dims, JSON.stringify(record.vector));
149
- }
150
- await db.run(sql, params);
151
- }
152
- function buildCodeIntel(files, blobs) {
153
- const fileSet = new Set(files.map((file) => file.path));
154
- const symbols = [];
155
- const snippets = [];
156
- const dependencies = new Map();
157
- for (const file of files) {
158
- if (file.isBinary) {
159
- continue;
160
- }
161
- const blob = blobs.get(file.blobHash);
162
- if (!blob || blob.content === null) {
163
- continue;
164
- }
165
- const analysis = analyzeSource(file.path, file.lang, blob.content, fileSet);
166
- for (const symbol of analysis.symbols) {
167
- symbols.push({
168
- path: file.path,
169
- symbolId: symbol.symbolId,
170
- name: symbol.name,
171
- kind: symbol.kind,
172
- rangeStartLine: symbol.rangeStartLine,
173
- rangeEndLine: symbol.rangeEndLine,
174
- signature: symbol.signature,
175
- doc: symbol.doc,
176
- });
177
- }
178
- if (analysis.snippets.length > 0) {
179
- analysis.snippets.forEach((snippet, index) => {
180
- snippets.push({
181
- path: file.path,
182
- snippetId: index + 1,
183
- startLine: snippet.startLine,
184
- endLine: snippet.endLine,
185
- symbolId: snippet.symbolId,
186
- });
187
- });
188
- }
189
- else if (blob.lineCount !== null) {
190
- const fallback = buildFallbackSnippet(blob.lineCount);
191
- snippets.push({
192
- path: file.path,
193
- snippetId: 1,
194
- startLine: fallback.startLine,
195
- endLine: fallback.endLine,
196
- symbolId: fallback.symbolId,
197
- });
198
- }
199
- for (const dependency of analysis.dependencies) {
200
- const key = `${file.path}::${dependency.dstKind}::${dependency.dst}::${dependency.rel}`;
201
- if (!dependencies.has(key)) {
202
- dependencies.set(key, {
203
- srcPath: file.path,
204
- dstKind: dependency.dstKind,
205
- dst: dependency.dst,
206
- rel: dependency.rel,
207
- });
208
- }
209
- }
210
- }
211
- return { symbols, snippets, dependencies: Array.from(dependencies.values()) };
212
- }
213
- /**
214
- * scanFilesのバッチ処理版
215
- * メモリ枯渇を防ぐため、ファイルをバッチで処理する
216
- */
217
- async function scanFilesInBatches(repoRoot, paths) {
218
- const allBlobs = new Map();
219
- const allFiles = [];
220
- const allEmbeddings = [];
221
- for (let i = 0; i < paths.length; i += SCAN_BATCH_SIZE) {
222
- const batch = paths.slice(i, i + SCAN_BATCH_SIZE);
223
- const { blobs, files, embeddings } = await scanFiles(repoRoot, batch);
224
- // マージ: blobはhashでユニークなので重複排除
225
- for (const [hash, blob] of blobs) {
226
- if (!allBlobs.has(hash)) {
227
- allBlobs.set(hash, blob);
228
- }
229
- }
230
- allFiles.push(...files);
231
- allEmbeddings.push(...embeddings);
232
- // バッチデータを明示的にクリアしてGCを促す
233
- blobs.clear();
234
- }
235
- return { blobs: allBlobs, files: allFiles, embeddings: allEmbeddings };
236
- }
237
- async function scanFiles(repoRoot, paths) {
238
- const blobs = new Map();
239
- const files = [];
240
- const embeddings = [];
241
- for (const relativePath of paths) {
242
- const absolutePath = join(repoRoot, relativePath);
243
- try {
244
- const fileStat = await stat(absolutePath);
245
- if (!fileStat.isFile()) {
246
- continue;
247
- }
248
- // Check file size before reading to prevent memory exhaustion
249
- if (fileStat.size > MAX_FILE_BYTES) {
250
- console.warn(`File ${relativePath} exceeds size limit (${fileStat.size} bytes). Increase MAX_FILE_BYTES constant to include it.`);
251
- continue;
252
- }
253
- const buffer = await readFile(absolutePath);
254
- const isBinary = isBinaryBuffer(buffer);
255
- const hash = createHash("sha1").update(buffer).digest("hex");
256
- const ext = extname(relativePath) || null;
257
- const lang = ext ? detectLanguage(ext) : null;
258
- const mtimeIso = fileStat.mtime.toISOString();
259
- let content = null;
260
- let lineCount = null;
261
- if (!isBinary) {
262
- content = buffer.toString("utf8");
263
- lineCount = countLines(content);
264
- }
265
- if (!blobs.has(hash)) {
266
- blobs.set(hash, {
267
- hash,
268
- sizeBytes: buffer.length,
269
- lineCount,
270
- content,
271
- });
272
- }
273
- files.push({
274
- path: relativePath,
275
- blobHash: hash,
276
- ext,
277
- lang,
278
- isBinary,
279
- mtimeIso,
280
- });
281
- if (!isBinary && content) {
282
- const embedding = generateEmbedding(content);
283
- if (embedding) {
284
- embeddings.push({ path: relativePath, dims: embedding.dims, vector: embedding.values });
285
- }
286
- }
287
- }
288
- catch (error) {
289
- console.warn(`Cannot read ${relativePath} due to filesystem error. Fix file permissions or remove the file.`);
290
- console.warn(error);
291
- }
292
- }
293
- return { blobs, files, embeddings };
294
- }
295
- export async function runIndexer(options) {
296
- if (!options.full && options.since) {
297
- console.warn("Incremental indexing is not yet supported. Falling back to full reindex.");
298
- }
299
- const repoRoot = resolve(options.repoRoot);
300
- const databasePath = resolve(options.databasePath);
301
- const [paths, headCommit, defaultBranch] = await Promise.all([
302
- gitLsFiles(repoRoot),
303
- getHeadCommit(repoRoot),
304
- getDefaultBranch(repoRoot),
305
- ]);
306
- const { blobs, files, embeddings } = await scanFilesInBatches(repoRoot, paths);
307
- const codeIntel = buildCodeIntel(files, blobs);
308
- const db = await DuckDBClient.connect({ databasePath, ensureDirectory: true });
309
- try {
310
- await ensureBaseSchema(db);
311
- const repoId = await ensureRepo(db, repoRoot, defaultBranch);
312
- await db.transaction(async () => {
313
- await db.run("DELETE FROM tree WHERE repo_id = ?", [repoId]);
314
- await db.run("DELETE FROM file WHERE repo_id = ?", [repoId]);
315
- await db.run("DELETE FROM symbol WHERE repo_id = ?", [repoId]);
316
- await db.run("DELETE FROM snippet WHERE repo_id = ?", [repoId]);
317
- await db.run("DELETE FROM dependency WHERE repo_id = ?", [repoId]);
318
- await db.run("DELETE FROM file_embedding WHERE repo_id = ?", [repoId]);
319
- await persistBlobs(db, blobs);
320
- await persistTrees(db, repoId, headCommit, files);
321
- await persistFiles(db, repoId, files);
322
- await persistSymbols(db, repoId, codeIntel.symbols);
323
- await persistSnippets(db, repoId, codeIntel.snippets);
324
- await persistDependencies(db, repoId, codeIntel.dependencies);
325
- await persistEmbeddings(db, repoId, embeddings);
326
- // Update timestamp inside transaction to ensure atomicity
327
- if (defaultBranch) {
328
- await db.run("UPDATE repo SET indexed_at = CURRENT_TIMESTAMP, default_branch = ? WHERE id = ?", [defaultBranch, repoId]);
329
- }
330
- else {
331
- await db.run("UPDATE repo SET indexed_at = CURRENT_TIMESTAMP WHERE id = ?", [repoId]);
332
- }
333
- });
334
- }
335
- finally {
336
- await db.close();
337
- }
338
- console.info(`Indexed ${files.length} files for repo ${repoRoot} at ${databasePath} (commit ${headCommit.slice(0, 12)})`);
339
- }
340
- function parseArg(flag) {
341
- const index = process.argv.indexOf(flag);
342
- if (index >= 0) {
343
- return process.argv[index + 1];
344
- }
345
- return undefined;
346
- }
347
- if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) {
348
- const repoRoot = resolve(parseArg("--repo") ?? ".");
349
- const databasePath = resolve(parseArg("--db") ?? "var/index.duckdb");
350
- const full = process.argv.includes("--full");
351
- const since = parseArg("--since");
352
- const options = { repoRoot, databasePath, full: full || !since };
353
- if (since) {
354
- options.since = since;
355
- }
356
- runIndexer(options).catch((error) => {
357
- console.error("Failed to index repository. Retry after resolving the logged error.");
358
- console.error(error);
359
- process.exitCode = 1;
360
- });
361
- }
362
- //# sourceMappingURL=cli.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/indexer/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAyD/C,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,0CAA0C;AACnF,MAAM,eAAe,GAAG,GAAG,CAAC,CAAC,iDAAiD;AAE9E,SAAS,UAAU,CAAC,OAAe;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,UAAU,CACvB,EAAgB,EAChB,QAAgB,EAChB,aAA4B;IAE5B,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,EAAE,CAAC,GAAG,CACV;;;+EAG2E,EAC3E,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B,CAAC;IAEF,qDAAqD;IACrD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CAAiB,oCAAoC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE5F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,GAAG,CAAC,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAAgB,EAAE,KAA8B;IAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAE7B,yCAAyC;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,8EAA8E,YAAY,EAAE,CAAC;IAEzG,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAgB,EAChB,MAAc,EACd,UAAkB,EAClB,OAAqB;IAErB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,yCAAyC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,2GAA2G,YAAY,EAAE,CAAC;IAEtI,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,MAAM,EACN,UAAU,EACV,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAgB,EAChB,MAAc,EACd,OAAqB;IAErB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,yCAAyC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,8FAA8F,YAAY,EAAE,CAAC;IAEzH,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,MAAM,EACN,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAgB,EAChB,MAAc,EACd,OAAoB;IAEpB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG;;;eAGC,YAAY;GACxB,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,MAAM,EACN,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,GAAG,CACX,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,EAAgB,EAChB,MAAc,EACd,OAAqB;IAErB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG;;;eAGC,YAAY;GACxB,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,MAAM,EACN,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,QAAQ,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,EAAgB,EAChB,MAAc,EACd,OAAwB;IAExB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG;;;eAGC,YAAY;GACxB,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,EAAgB,EAChB,MAAc,EACd,OAAuB;IAEvB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG;;;eAGC,YAAY;GACxB,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CACrB,KAAmB,EACnB,KAA8B;IAE9B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACnC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5E,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC3C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,SAAS,EAAE,KAAK,GAAG,CAAC;oBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,KAAK,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;YACxF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE;oBACpB,OAAO,EAAE,IAAI,CAAC,IAAI;oBAClB,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,GAAG,EAAE,UAAU,CAAC,GAAG;oBACnB,GAAG,EAAE,UAAU,CAAC,GAAG;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAC/B,QAAgB,EAChB,KAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC/C,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,aAAa,GAAmB,EAAE,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC;QAClD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEtE,6BAA6B;QAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACxB,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAElC,wBAAwB;QACxB,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,QAAgB,EAChB,KAAe;IAEf,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YAED,8DAA8D;YAC9D,IAAI,QAAQ,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CACV,QAAQ,YAAY,wBAAwB,QAAQ,CAAC,IAAI,0DAA0D,CACpH,CAAC;gBACF,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;YAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAE9C,IAAI,OAAO,GAAkB,IAAI,CAAC;YAClC,IAAI,SAAS,GAAkB,IAAI,CAAC;YACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClC,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;oBACd,IAAI;oBACJ,SAAS,EAAE,MAAM,CAAC,MAAM;oBACxB,SAAS;oBACT,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,IAAI;gBACd,GAAG;gBACH,IAAI;gBACJ,QAAQ;gBACR,QAAQ;aACT,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC7C,IAAI,SAAS,EAAE,CAAC;oBACd,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,eAAe,YAAY,oEAAoE,CAChG,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB;IACtD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3D,UAAU,CAAC,QAAQ,CAAC;QACpB,aAAa,CAAC,QAAQ,CAAC;QACvB,gBAAgB,CAAC,QAAQ,CAAC;KAC3B,CAAC,CAAC;IAEH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE/C,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,CAAC,GAAG,CAAC,sCAAsC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,MAAM,EAAE,CAAC,GAAG,CAAC,uCAAuC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAChE,MAAM,EAAE,CAAC,GAAG,CAAC,0CAA0C,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,MAAM,EAAE,CAAC,GAAG,CAAC,8CAA8C,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,MAAM,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAEhD,0DAA0D;YAC1D,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,EAAE,CAAC,GAAG,CACV,iFAAiF,EACjF,CAAC,aAAa,EAAE,MAAM,CAAC,CACxB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,GAAG,CAAC,6DAA6D,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,IAAI,CACV,WAAW,KAAK,CAAC,MAAM,mBAAmB,QAAQ,OAAO,YAAY,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAC5G,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAElC,MAAM,OAAO,GAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACjF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACrF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,182 +0,0 @@
1
- import path from "node:path";
2
- import ts from "typescript";
3
- const SUPPORTED_LANGUAGES = new Set(["TypeScript"]);
4
- function sanitizeSignature(source, node) {
5
- const start = node.getStart(source);
6
- const endCandidate = node.forEachChild((child) => {
7
- if (ts.isBlock(child) || ts.isModuleBlock(child)) {
8
- return child.getFullStart();
9
- }
10
- return undefined;
11
- });
12
- const end = typeof endCandidate === "number" ? endCandidate : node.getEnd();
13
- const snippet = source.text.slice(start, Math.min(end, start + 200));
14
- return snippet.split(/\r?\n/)[0]?.trim().replace(/\s+/g, " ") ?? "";
15
- }
16
- function getDocComment(node) {
17
- const tags = ts.getJSDocCommentsAndTags(node);
18
- const parts = [];
19
- for (const tag of tags) {
20
- if (ts.isJSDoc(tag)) {
21
- if (typeof tag.comment === "string") {
22
- parts.push(tag.comment);
23
- }
24
- else if (Array.isArray(tag.comment)) {
25
- parts.push(tag.comment.map((part) => (typeof part === "string" ? part : part.text)).join(""));
26
- }
27
- }
28
- }
29
- if (parts.length === 0) {
30
- return null;
31
- }
32
- return parts.join("\n").trim() || null;
33
- }
34
- function toLineNumber(source, position) {
35
- return source.getLineAndCharacterOfPosition(position).line + 1;
36
- }
37
- function createSymbolRecords(source) {
38
- const results = [];
39
- const visit = (node) => {
40
- if (ts.isFunctionDeclaration(node) && node.name) {
41
- results.push({
42
- name: node.name.getText(source),
43
- kind: "function",
44
- rangeStartLine: toLineNumber(source, node.getStart(source)),
45
- rangeEndLine: toLineNumber(source, node.getEnd()),
46
- signature: sanitizeSignature(source, node),
47
- doc: getDocComment(node),
48
- });
49
- }
50
- else if (ts.isClassDeclaration(node) && node.name) {
51
- results.push({
52
- name: node.name.getText(source),
53
- kind: "class",
54
- rangeStartLine: toLineNumber(source, node.getStart(source)),
55
- rangeEndLine: toLineNumber(source, node.getEnd()),
56
- signature: sanitizeSignature(source, node),
57
- doc: getDocComment(node),
58
- });
59
- }
60
- else if (ts.isInterfaceDeclaration(node) && node.name) {
61
- results.push({
62
- name: node.name.getText(source),
63
- kind: "interface",
64
- rangeStartLine: toLineNumber(source, node.getStart(source)),
65
- rangeEndLine: toLineNumber(source, node.getEnd()),
66
- signature: sanitizeSignature(source, node),
67
- doc: getDocComment(node),
68
- });
69
- }
70
- else if (ts.isEnumDeclaration(node) && node.name) {
71
- results.push({
72
- name: node.name.getText(source),
73
- kind: "enum",
74
- rangeStartLine: toLineNumber(source, node.getStart(source)),
75
- rangeEndLine: toLineNumber(source, node.getEnd()),
76
- signature: sanitizeSignature(source, node),
77
- doc: getDocComment(node),
78
- });
79
- }
80
- else if (ts.isMethodDeclaration(node) && node.name) {
81
- const name = node.name.getText(source);
82
- results.push({
83
- name,
84
- kind: "method",
85
- rangeStartLine: toLineNumber(source, node.getStart(source)),
86
- rangeEndLine: toLineNumber(source, node.getEnd()),
87
- signature: sanitizeSignature(source, node),
88
- doc: getDocComment(node),
89
- });
90
- }
91
- ts.forEachChild(node, visit);
92
- };
93
- ts.forEachChild(source, visit);
94
- return results
95
- .sort((a, b) => a.rangeStartLine - b.rangeStartLine)
96
- .map((item, index) => ({ symbolId: index + 1, ...item }));
97
- }
98
- function normalizePathSpecifier(sourcePath, specifier, fileSet) {
99
- if (specifier.startsWith(".") || specifier.startsWith("/")) {
100
- const baseDir = path.posix.dirname(sourcePath);
101
- // Strip .js extension if present (ESM imports use .js but source files are .ts)
102
- const pathWithoutJs = specifier.endsWith(".js") ? specifier.slice(0, -3) : specifier;
103
- const joined = path.posix.normalize(path.posix.join(baseDir, pathWithoutJs));
104
- const candidates = [
105
- joined,
106
- `${joined}.ts`,
107
- `${joined}.tsx`,
108
- `${joined}.js`,
109
- `${joined}.jsx`,
110
- `${joined}/index.ts`,
111
- `${joined}/index.tsx`,
112
- ];
113
- for (const candidate of candidates) {
114
- if (fileSet.has(candidate)) {
115
- return { kind: "path", target: candidate };
116
- }
117
- }
118
- return null;
119
- }
120
- return { kind: "package", target: specifier };
121
- }
122
- function collectDependencies(sourcePath, source, fileSet) {
123
- const dependencies = new Map();
124
- const record = (kind, dst) => {
125
- const key = `${kind}:${dst}`;
126
- if (!dependencies.has(key)) {
127
- dependencies.set(key, { dstKind: kind, dst, rel: "import" });
128
- }
129
- };
130
- const visit = (node) => {
131
- if (ts.isImportDeclaration(node) &&
132
- node.moduleSpecifier &&
133
- ts.isStringLiteral(node.moduleSpecifier)) {
134
- const target = normalizePathSpecifier(sourcePath, node.moduleSpecifier.text, fileSet);
135
- if (target) {
136
- record(target.kind, target.target);
137
- }
138
- }
139
- else if (ts.isExportDeclaration(node) &&
140
- node.moduleSpecifier &&
141
- ts.isStringLiteral(node.moduleSpecifier)) {
142
- const target = normalizePathSpecifier(sourcePath, node.moduleSpecifier.text, fileSet);
143
- if (target) {
144
- record(target.kind, target.target);
145
- }
146
- }
147
- else if (ts.isCallExpression(node)) {
148
- const firstArg = node.arguments[0];
149
- if (node.expression.getText(source) === "require" &&
150
- node.arguments.length === 1 &&
151
- firstArg &&
152
- ts.isStringLiteral(firstArg)) {
153
- const target = normalizePathSpecifier(sourcePath, firstArg.text, fileSet);
154
- if (target) {
155
- record(target.kind, target.target);
156
- }
157
- }
158
- }
159
- ts.forEachChild(node, visit);
160
- };
161
- ts.forEachChild(source, visit);
162
- return Array.from(dependencies.values());
163
- }
164
- export function analyzeSource(pathInRepo, lang, content, fileSet) {
165
- const normalizedLang = lang ?? "";
166
- if (!SUPPORTED_LANGUAGES.has(normalizedLang)) {
167
- return { symbols: [], snippets: [], dependencies: [] };
168
- }
169
- const sourceFile = ts.createSourceFile(pathInRepo, content, ts.ScriptTarget.Latest, true);
170
- const symbols = createSymbolRecords(sourceFile);
171
- const snippets = symbols.map((symbol) => ({
172
- startLine: symbol.rangeStartLine,
173
- endLine: symbol.rangeEndLine,
174
- symbolId: symbol.symbolId,
175
- }));
176
- const dependencies = collectDependencies(pathInRepo, sourceFile, fileSet);
177
- return { symbols, snippets, dependencies };
178
- }
179
- export function buildFallbackSnippet(totalLines) {
180
- return { startLine: 1, endLine: totalLines, symbolId: null };
181
- }
182
- //# sourceMappingURL=codeintel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codeintel.js","sourceRoot":"","sources":["../../src/indexer/codeintel.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { promisify } from "node:util";
3
- const execFileAsync = promisify(execFile);
4
- export async function gitLsFiles(repoRoot) {
5
- const { stdout } = await execFileAsync("git", ["ls-files", "-z"], { cwd: repoRoot });
6
- return stdout
7
- .split("\0")
8
- .map((item) => item.trim())
9
- .filter((item) => item.length > 0);
10
- }
11
- export async function getHeadCommit(repoRoot) {
12
- const { stdout } = await execFileAsync("git", ["rev-parse", "HEAD"], { cwd: repoRoot });
13
- return stdout.trim();
14
- }
15
- export async function getDefaultBranch(repoRoot) {
16
- try {
17
- const { stdout } = await execFileAsync("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
18
- cwd: repoRoot,
19
- });
20
- const branch = stdout.trim();
21
- if (branch === "HEAD" || branch.length === 0) {
22
- return null;
23
- }
24
- return branch;
25
- }
26
- catch {
27
- return null;
28
- }
29
- }
30
- //# sourceMappingURL=git.js.map
@@ -1 +0,0 @@
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,34 +0,0 @@
1
- const LANGUAGE_BY_EXTENSION = {
2
- ".ts": "TypeScript",
3
- ".tsx": "TypeScript",
4
- ".js": "JavaScript",
5
- ".jsx": "JavaScript",
6
- ".json": "JSON",
7
- ".md": "Markdown",
8
- ".yml": "YAML",
9
- ".yaml": "YAML",
10
- ".py": "Python",
11
- ".rs": "Rust",
12
- ".go": "Go",
13
- ".java": "Java",
14
- ".rb": "Ruby",
15
- ".c": "C",
16
- ".h": "C",
17
- ".cpp": "C++",
18
- ".hpp": "C++",
19
- ".cc": "C++",
20
- ".hh": "C++",
21
- ".cs": "C#",
22
- ".php": "PHP",
23
- ".swift": "Swift",
24
- ".kt": "Kotlin",
25
- ".m": "Objective-C",
26
- ".mm": "Objective-C++",
27
- ".scala": "Scala",
28
- ".sh": "Shell",
29
- };
30
- export function detectLanguage(extension) {
31
- const normalized = extension.toLowerCase();
32
- return LANGUAGE_BY_EXTENSION[normalized] ?? null;
33
- }
34
- //# sourceMappingURL=language.js.map
@@ -1 +0,0 @@
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"}