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.
- package/README.md +94 -7
- package/dist/client/cli.js +68 -0
- package/dist/client/cli.js.map +1 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/eval/metrics.js +47 -0
- package/dist/eval/metrics.js.map +1 -0
- package/dist/indexer/cli.js +362 -0
- package/dist/indexer/cli.js.map +1 -0
- package/dist/indexer/codeintel.js +182 -0
- package/dist/indexer/codeintel.js.map +1 -0
- package/dist/indexer/git.js +30 -0
- package/dist/indexer/git.js.map +1 -0
- package/dist/indexer/language.js +34 -0
- package/dist/indexer/language.js.map +1 -0
- package/dist/indexer/pipeline/filters/denylist.js +71 -0
- package/dist/indexer/pipeline/filters/denylist.js.map +1 -0
- package/dist/indexer/schema.js +101 -0
- package/dist/indexer/schema.js.map +1 -0
- package/dist/package.json +11 -1
- package/dist/server/bootstrap.js +19 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/context.js +1 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fallbacks/degradeController.js +69 -0
- package/dist/server/fallbacks/degradeController.js.map +1 -0
- package/dist/server/handlers.js +1268 -0
- package/dist/server/handlers.js.map +1 -0
- package/dist/server/main.js +151 -0
- package/dist/server/main.js.map +1 -0
- package/dist/server/observability/metrics.js +56 -0
- package/dist/server/observability/metrics.js.map +1 -0
- package/dist/server/observability/tracing.js +58 -0
- package/dist/server/observability/tracing.js.map +1 -0
- package/dist/server/rpc.js +477 -0
- package/dist/server/rpc.js.map +1 -0
- package/dist/server/runtime.js +47 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/scoring.js +116 -0
- package/dist/server/scoring.js.map +1 -0
- package/dist/server/stdio.js +76 -0
- package/dist/server/stdio.js.map +1 -0
- package/dist/shared/duckdb.js +119 -0
- package/dist/shared/duckdb.js.map +1 -0
- package/dist/shared/embedding.js +98 -0
- package/dist/shared/embedding.js.map +1 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/security/config.js +64 -0
- package/dist/shared/security/config.js.map +1 -0
- package/dist/shared/security/masker.js +56 -0
- package/dist/shared/security/masker.js.map +1 -0
- package/dist/shared/tokenizer.js +4 -0
- package/dist/shared/tokenizer.js.map +1 -0
- package/dist/shared/utils/simpleYaml.js +89 -0
- package/dist/shared/utils/simpleYaml.js.map +1 -0
- package/dist/src/client/proxy.js +2 -1
- package/dist/src/client/proxy.js.map +1 -1
- package/dist/src/client/start-daemon.d.ts.map +1 -1
- package/dist/src/client/start-daemon.js +2 -1
- package/dist/src/client/start-daemon.js.map +1 -1
- package/dist/src/daemon/daemon.js +6 -4
- package/dist/src/daemon/daemon.js.map +1 -1
- package/dist/src/daemon/socket.d.ts +6 -4
- package/dist/src/daemon/socket.d.ts.map +1 -1
- package/dist/src/daemon/socket.js +62 -18
- package/dist/src/daemon/socket.js.map +1 -1
- package/dist/src/indexer/cli.d.ts +1 -0
- package/dist/src/indexer/cli.d.ts.map +1 -1
- package/dist/src/indexer/cli.js +503 -257
- package/dist/src/indexer/cli.js.map +1 -1
- package/dist/src/indexer/codeintel.d.ts +1 -1
- package/dist/src/indexer/codeintel.d.ts.map +1 -1
- package/dist/src/indexer/codeintel.js +296 -3
- package/dist/src/indexer/codeintel.js.map +1 -1
- package/dist/src/indexer/dart/analyze.d.ts +29 -0
- package/dist/src/indexer/dart/analyze.d.ts.map +1 -0
- package/dist/src/indexer/dart/analyze.js +452 -0
- package/dist/src/indexer/dart/analyze.js.map +1 -0
- package/dist/src/indexer/dart/client.d.ts +113 -0
- package/dist/src/indexer/dart/client.d.ts.map +1 -0
- package/dist/src/indexer/dart/client.js +444 -0
- package/dist/src/indexer/dart/client.js.map +1 -0
- package/dist/src/indexer/dart/config.d.ts +36 -0
- package/dist/src/indexer/dart/config.d.ts.map +1 -0
- package/dist/src/indexer/dart/config.js +62 -0
- package/dist/src/indexer/dart/config.js.map +1 -0
- package/dist/src/indexer/dart/dependencies.d.ts +17 -0
- package/dist/src/indexer/dart/dependencies.d.ts.map +1 -0
- package/dist/src/indexer/dart/dependencies.js +102 -0
- package/dist/src/indexer/dart/dependencies.js.map +1 -0
- package/dist/src/indexer/dart/pathKey.d.ts +40 -0
- package/dist/src/indexer/dart/pathKey.d.ts.map +1 -0
- package/dist/src/indexer/dart/pathKey.js +72 -0
- package/dist/src/indexer/dart/pathKey.js.map +1 -0
- package/dist/src/indexer/dart/poolGate.d.ts +57 -0
- package/dist/src/indexer/dart/poolGate.d.ts.map +1 -0
- package/dist/src/indexer/dart/poolGate.js +87 -0
- package/dist/src/indexer/dart/poolGate.js.map +1 -0
- package/dist/src/indexer/dart/sdk.d.ts +40 -0
- package/dist/src/indexer/dart/sdk.d.ts.map +1 -0
- package/dist/src/indexer/dart/sdk.js +167 -0
- package/dist/src/indexer/dart/sdk.js.map +1 -0
- package/dist/src/indexer/dart/transform.d.ts +17 -0
- package/dist/src/indexer/dart/transform.d.ts.map +1 -0
- package/dist/src/indexer/dart/transform.js +157 -0
- package/dist/src/indexer/dart/transform.js.map +1 -0
- package/dist/src/indexer/dart/types.d.ts +137 -0
- package/dist/src/indexer/dart/types.d.ts.map +1 -0
- package/dist/src/indexer/dart/types.js +5 -0
- package/dist/src/indexer/dart/types.js.map +1 -0
- package/dist/src/indexer/git.d.ts +1 -0
- package/dist/src/indexer/git.d.ts.map +1 -1
- package/dist/src/indexer/git.js +8 -0
- package/dist/src/indexer/git.js.map +1 -1
- package/dist/src/indexer/language.d.ts.map +1 -1
- package/dist/src/indexer/language.js +1 -0
- package/dist/src/indexer/language.js.map +1 -1
- package/dist/src/indexer/queue.d.ts +19 -0
- package/dist/src/indexer/queue.d.ts.map +1 -0
- package/dist/src/indexer/queue.js +50 -0
- package/dist/src/indexer/queue.js.map +1 -0
- package/dist/src/indexer/schema.d.ts +61 -1
- package/dist/src/indexer/schema.d.ts.map +1 -1
- package/dist/src/indexer/schema.js +253 -2
- package/dist/src/indexer/schema.js.map +1 -1
- package/dist/src/indexer/watch.d.ts +21 -0
- package/dist/src/indexer/watch.d.ts.map +1 -1
- package/dist/src/indexer/watch.js +189 -28
- package/dist/src/indexer/watch.js.map +1 -1
- package/dist/src/server/context.d.ts +7 -0
- package/dist/src/server/context.d.ts.map +1 -1
- package/dist/src/server/handlers.d.ts.map +1 -1
- package/dist/src/server/handlers.js +87 -4
- package/dist/src/server/handlers.js.map +1 -1
- package/dist/src/server/indexBootstrap.d.ts.map +1 -1
- package/dist/src/server/indexBootstrap.js +4 -1
- package/dist/src/server/indexBootstrap.js.map +1 -1
- package/dist/src/server/main.js +0 -0
- package/dist/src/server/runtime.d.ts.map +1 -1
- package/dist/src/server/runtime.js +45 -6
- package/dist/src/server/runtime.js.map +1 -1
- package/dist/src/shared/duckdb.d.ts.map +1 -1
- package/dist/src/shared/duckdb.js +9 -0
- package/dist/src/shared/duckdb.js.map +1 -1
- package/dist/src/shared/utils/path.d.ts +46 -0
- package/dist/src/shared/utils/path.d.ts.map +1 -0
- package/dist/src/shared/utils/path.js +94 -0
- package/dist/src/shared/utils/path.js.map +1 -0
- package/dist/src/shared/utils/socket.d.ts +61 -0
- package/dist/src/shared/utils/socket.d.ts.map +1 -0
- package/dist/src/shared/utils/socket.js +156 -0
- package/dist/src/shared/utils/socket.js.map +1 -0
- package/package.json +11 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dart Analysis Server を使った Dart ファイル解析のエントリポイント
|
|
3
|
+
*/
|
|
4
|
+
import type { SymbolRecord, SnippetRecord, DependencyRecord } from "../codeintel.js";
|
|
5
|
+
/**
|
|
6
|
+
* Dart ファイルを解析してシンボル・スニペット・依存関係を抽出
|
|
7
|
+
*
|
|
8
|
+
* Fix #5: status フィールドを追加してエラーをリトライ可能にする
|
|
9
|
+
*
|
|
10
|
+
* @param filePath - ファイルパス(相対パスの場合は workspaceRoot からの相対パス)
|
|
11
|
+
* @param content - ファイル内容
|
|
12
|
+
* @param workspaceRoot - ワークスペースルート(絶対パス)
|
|
13
|
+
* @returns { symbols, snippets, dependencies, status, error? }
|
|
14
|
+
*/
|
|
15
|
+
export declare function analyzeDartSource(filePath: string, content: string, workspaceRoot: string): Promise<{
|
|
16
|
+
symbols: SymbolRecord[];
|
|
17
|
+
snippets: SnippetRecord[];
|
|
18
|
+
dependencies: DependencyRecord[];
|
|
19
|
+
status: "success" | "error" | "sdk_unavailable";
|
|
20
|
+
error?: string;
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* 全クライアントのクリーンアップ
|
|
24
|
+
*
|
|
25
|
+
* プロセス終了時やインデクサー終了時に呼ぶ
|
|
26
|
+
* 全てのワークスペースのクライアントを強制的に dispose する
|
|
27
|
+
*/
|
|
28
|
+
export declare function cleanup(): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=analyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../../src/indexer/dart/analyze.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA+TrF;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IACT,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,iBAAiB,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAkDD;AAKD;;;;;GAKG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAwE7C"}
|
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dart Analysis Server を使った Dart ファイル解析のエントリポイント
|
|
3
|
+
*/
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { DartAnalysisClient } from "./client.js";
|
|
6
|
+
import { parseMaxClients, parseClientWaitMs, parseIdleTtlMs } from "./config.js";
|
|
7
|
+
import { normalizeWorkspaceKey } from "./pathKey.js";
|
|
8
|
+
import { createCapacityLimiter } from "./poolGate.js";
|
|
9
|
+
import { isDartSdkAvailable } from "./sdk.js";
|
|
10
|
+
import { outlineToSymbols } from "./transform.js";
|
|
11
|
+
const clients = new Map();
|
|
12
|
+
// Fix #2: アイドルTTL (デフォルト: 60秒、環境変数で調整可能)
|
|
13
|
+
// Fix #6: ?? 演算子を使用して IDLE_TTL_MS=0 でTTLを無効化可能にする
|
|
14
|
+
// Fix #20 (Codex Critical Review Round 3): Extracted to config.ts for testability
|
|
15
|
+
const IDLE_TTL_MS = parseIdleTtlMs();
|
|
16
|
+
// Fix #4: 最大クライアント数制限(デフォルト: 8、環境変数で調整可能)
|
|
17
|
+
// 大規模モノレポでメモリ枯渇を防ぐため、LRU evictionを実施
|
|
18
|
+
// Fix #18 (Codex Critical Review Round 3): Validate MAX_CLIENTS to prevent NaN
|
|
19
|
+
// Extracted to config.ts for testability
|
|
20
|
+
const MAX_CLIENTS = parseMaxClients();
|
|
21
|
+
// Fix #1: Client wait timeout (default: 10000ms = 10 seconds)
|
|
22
|
+
// Extracted to config.ts for testability
|
|
23
|
+
const DART_ANALYSIS_CLIENT_WAIT_MS = parseClientWaitMs();
|
|
24
|
+
// Fix #1 & #2: Pool capacity limiter to enforce MAX_CLIENTS
|
|
25
|
+
const poolLimiter = createCapacityLimiter(MAX_CLIENTS);
|
|
26
|
+
// Fix #24 (Codex Critical Review Round 4): Shutdown flag to prevent client respawn during cleanup
|
|
27
|
+
let isShuttingDown = false;
|
|
28
|
+
/**
|
|
29
|
+
* Dart Analysis Client の取得(参照カウント方式)
|
|
30
|
+
*
|
|
31
|
+
* 進行中のリクエストがあるクライアントは dispose されず、
|
|
32
|
+
* 全ての参照が解放されるまで維持される
|
|
33
|
+
*
|
|
34
|
+
* @param workspaceRoot - ワークスペースルート(リポジトリパス)
|
|
35
|
+
* @returns DartAnalysisClient インスタンス
|
|
36
|
+
*/
|
|
37
|
+
async function acquireClient(workspaceRoot) {
|
|
38
|
+
// Fix #24 (Codex Critical Review Round 4): Check shutdown flag
|
|
39
|
+
if (isShuttingDown) {
|
|
40
|
+
throw new Error(`[acquireClient] System is shutting down. Cannot acquire new clients for ${workspaceRoot}.`);
|
|
41
|
+
}
|
|
42
|
+
// Fix #3: Normalize workspace path for Windows case-insensitivity
|
|
43
|
+
const workspaceKey = normalizeWorkspaceKey(workspaceRoot);
|
|
44
|
+
let entry = clients.get(workspaceKey);
|
|
45
|
+
// Fix #9 (Codex Critical Review): Track whether this call acquired a permit
|
|
46
|
+
// to prevent double release when concurrent requests wait on existing initPromise
|
|
47
|
+
let didAcquirePermit = false;
|
|
48
|
+
if (!entry) {
|
|
49
|
+
// Fix #10 (Codex Critical Review): Try LRU eviction BEFORE acquire()
|
|
50
|
+
// This ensures eviction actually runs when pool is full, instead of timing out
|
|
51
|
+
if (clients.size >= MAX_CLIENTS) {
|
|
52
|
+
// Find least recently used idle client
|
|
53
|
+
let lruWorkspace = null;
|
|
54
|
+
let oldestTime = Infinity;
|
|
55
|
+
for (const [ws, ent] of clients.entries()) {
|
|
56
|
+
if (ent.refs === 0 && ent.lastUsed < oldestTime) {
|
|
57
|
+
oldestTime = ent.lastUsed;
|
|
58
|
+
lruWorkspace = ws;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Evict LRU client synchronously to free up permit slot
|
|
62
|
+
if (lruWorkspace) {
|
|
63
|
+
const lruEntry = clients.get(lruWorkspace);
|
|
64
|
+
if (lruEntry.idleTimer) {
|
|
65
|
+
clearTimeout(lruEntry.idleTimer);
|
|
66
|
+
}
|
|
67
|
+
// Fix #28 (Codex Critical Review Round 5): Check delete() return value to prevent double eviction
|
|
68
|
+
const wasDeleted = clients.delete(lruWorkspace);
|
|
69
|
+
if (wasDeleted) {
|
|
70
|
+
// Only this thread successfully deleted the entry
|
|
71
|
+
console.log(`[acquireClient] Evicting LRU client for ${lruWorkspace} (pool size: ${MAX_CLIENTS})`);
|
|
72
|
+
// Dispose synchronously and release permit immediately
|
|
73
|
+
await lruEntry.client.dispose({ timeoutMs: 2000 }).catch((error) => {
|
|
74
|
+
console.error(`[acquireClient] Failed to dispose LRU client for ${lruWorkspace}:`, error);
|
|
75
|
+
});
|
|
76
|
+
poolLimiter.release(); // Free up slot for new client
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Another thread already evicted this client - this is safe, just retry
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Fix #1 & #2: Acquire pool permit before creating new client
|
|
84
|
+
// This enforces MAX_CLIENTS limit and provides waiting queue with timeout
|
|
85
|
+
await poolLimiter.acquire({ timeoutMs: DART_ANALYSIS_CLIENT_WAIT_MS });
|
|
86
|
+
didAcquirePermit = true; // Mark that we acquired a permit
|
|
87
|
+
// Re-check after await (another request might have created the same client)
|
|
88
|
+
entry = clients.get(workspaceKey);
|
|
89
|
+
if (entry) {
|
|
90
|
+
// Client was created by concurrent request - release permit and use existing
|
|
91
|
+
poolLimiter.release();
|
|
92
|
+
didAcquirePermit = false; // We released it
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Fix #23 (Codex Critical Review Round 4): Retry LRU eviction if pool is still full
|
|
96
|
+
// Instead of immediately throwing, try to evict idle clients and retry
|
|
97
|
+
while (clients.size >= MAX_CLIENTS) {
|
|
98
|
+
// Find least recently used idle client
|
|
99
|
+
let lruWorkspace = null;
|
|
100
|
+
let oldestTime = Infinity;
|
|
101
|
+
for (const [ws, ent] of clients.entries()) {
|
|
102
|
+
if (ent.refs === 0 && ent.lastUsed < oldestTime) {
|
|
103
|
+
oldestTime = ent.lastUsed;
|
|
104
|
+
lruWorkspace = ws;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (lruWorkspace) {
|
|
108
|
+
// Evict LRU client to make space
|
|
109
|
+
const lruEntry = clients.get(lruWorkspace);
|
|
110
|
+
if (lruEntry.idleTimer) {
|
|
111
|
+
clearTimeout(lruEntry.idleTimer);
|
|
112
|
+
}
|
|
113
|
+
// Fix #28 (Codex Critical Review Round 5): Check delete() return value to prevent double eviction
|
|
114
|
+
const wasDeleted = clients.delete(lruWorkspace);
|
|
115
|
+
if (wasDeleted) {
|
|
116
|
+
// Only this thread successfully deleted the entry
|
|
117
|
+
console.log(`[acquireClient] Pool full after acquire, evicting LRU client for ${lruWorkspace}`);
|
|
118
|
+
await lruEntry.client.dispose({ timeoutMs: 2000 }).catch((error) => {
|
|
119
|
+
console.error(`[acquireClient] Failed to dispose LRU client for ${lruWorkspace}:`, error);
|
|
120
|
+
});
|
|
121
|
+
// Note: We don't release permit here because we already acquired one
|
|
122
|
+
break; // Exit retry loop - we made space
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Another thread already evicted this client - retry with updated state
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// No idle clients available - all clients are active
|
|
131
|
+
poolLimiter.release();
|
|
132
|
+
didAcquirePermit = false;
|
|
133
|
+
throw new Error(`[acquireClient] Dart Analysis Server pool is full with ${MAX_CLIENTS} active clients. ` +
|
|
134
|
+
`Cannot create new client for workspace ${workspaceRoot}. ` +
|
|
135
|
+
`Consider increasing DART_ANALYSIS_MAX_CLIENTS or reducing concurrent indexing.`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Create new client only if we still don't have one
|
|
139
|
+
const client = new DartAnalysisClient({
|
|
140
|
+
workspaceRoots: [workspaceRoot],
|
|
141
|
+
});
|
|
142
|
+
entry = {
|
|
143
|
+
client,
|
|
144
|
+
refs: 1, // Fix #12 (Codex Critical Review): Reserve immediately to prevent LRU race
|
|
145
|
+
initPromise: client.initialize().then(() => client),
|
|
146
|
+
idleTimer: null, // Fix #2: アイドルタイマー初期化
|
|
147
|
+
lastUsed: Date.now(), // Fix #2: 最終使用時刻初期化
|
|
148
|
+
};
|
|
149
|
+
clients.set(workspaceKey, entry);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Fix #2: アイドルタイマーをクリア(再利用時)
|
|
153
|
+
if (entry.idleTimer) {
|
|
154
|
+
clearTimeout(entry.idleTimer);
|
|
155
|
+
entry.idleTimer = null;
|
|
156
|
+
}
|
|
157
|
+
// Fix #3: 初期化を待つ(失敗時はエントリを削除してリトライ可能にする)
|
|
158
|
+
// Fix #17 (Codex Critical Review Round 3): Track concurrent waiters for refs accounting
|
|
159
|
+
const waitingOnInit = entry.initPromise !== null && !didAcquirePermit;
|
|
160
|
+
if (waitingOnInit) {
|
|
161
|
+
// Concurrent request waiting on initialization - increment refs
|
|
162
|
+
entry.refs += 1;
|
|
163
|
+
}
|
|
164
|
+
if (entry.initPromise) {
|
|
165
|
+
try {
|
|
166
|
+
await entry.initPromise;
|
|
167
|
+
entry.initPromise = null;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
// 初期化失敗: エントリを削除して次回リトライ可能にする
|
|
171
|
+
clients.delete(workspaceKey);
|
|
172
|
+
// Fix #3: skipShutdown で即時強制終了(二重タイムアウト回避)
|
|
173
|
+
await entry.client.dispose({ skipShutdown: true }).catch(() => { });
|
|
174
|
+
// Fix #17: Roll back refs increment for waiting requests
|
|
175
|
+
if (waitingOnInit) {
|
|
176
|
+
// Entry was deleted, no need to decrement
|
|
177
|
+
}
|
|
178
|
+
// Fix #9 (Codex Critical Review): Only release if WE acquired the permit
|
|
179
|
+
// Concurrent requests waiting on initPromise didn't acquire permits
|
|
180
|
+
if (didAcquirePermit) {
|
|
181
|
+
poolLimiter.release();
|
|
182
|
+
}
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Fix #12: Entry exists and is initialized - increment refs for this acquisition
|
|
188
|
+
entry.refs += 1;
|
|
189
|
+
}
|
|
190
|
+
entry.lastUsed = Date.now(); // Fix #2: 最終使用時刻更新
|
|
191
|
+
return entry.client;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Dart Analysis Client の解放(参照カウント + アイドルTTL方式)
|
|
195
|
+
*
|
|
196
|
+
* Fix #2: 参照カウントが 0 になったら即座に dispose せず、アイドルTTL後に dispose
|
|
197
|
+
* これによりファイル毎のサーバー再起動を回避し、性能を大幅に改善
|
|
198
|
+
*
|
|
199
|
+
* @param workspaceRoot - ワークスペースルート(リポジトリパス)
|
|
200
|
+
*/
|
|
201
|
+
function releaseClient(workspaceRoot) {
|
|
202
|
+
// Fix #3: Normalize workspace path for Windows case-insensitivity
|
|
203
|
+
const workspaceKey = normalizeWorkspaceKey(workspaceRoot);
|
|
204
|
+
const entry = clients.get(workspaceKey);
|
|
205
|
+
if (!entry) {
|
|
206
|
+
console.warn(`[releaseClient] No entry found for ${workspaceRoot}`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
entry.refs -= 1;
|
|
210
|
+
// Fix #14 (Codex Critical Review): Defensive check for refs underflow
|
|
211
|
+
if (entry.refs < 0) {
|
|
212
|
+
console.error(`[releaseClient] refs underflow for ${workspaceRoot}: ${entry.refs}. ` +
|
|
213
|
+
`This indicates a bug in acquire/release pairing.`);
|
|
214
|
+
entry.refs = 0;
|
|
215
|
+
}
|
|
216
|
+
// Fix #2: refs が 0 になったらアイドルタイマーを起動(即座に dispose しない)
|
|
217
|
+
// Fix #20 (Codex Critical Review Round 3): IDLE_TTL_MS=0 means "disable TTL" (unlimited hold)
|
|
218
|
+
// Fix #22 (Codex Critical Review Round 4): Check queue depth - if waiters exist, skip TTL and release immediately
|
|
219
|
+
if (entry.refs === 0) {
|
|
220
|
+
const stats = poolLimiter.stats();
|
|
221
|
+
// If there are waiters in the queue, skip TTL and release permit immediately
|
|
222
|
+
if (stats.queueDepth > 0) {
|
|
223
|
+
console.log(`[releaseClient] Pool has ${stats.queueDepth} waiters, disposing idle client for ${workspaceRoot} immediately`);
|
|
224
|
+
clients.delete(workspaceKey);
|
|
225
|
+
entry.client
|
|
226
|
+
.dispose({ timeoutMs: 2000 })
|
|
227
|
+
.catch((error) => {
|
|
228
|
+
console.error(`[releaseClient] Failed to dispose client for ${workspaceRoot}:`, error);
|
|
229
|
+
})
|
|
230
|
+
.finally(() => {
|
|
231
|
+
poolLimiter.release();
|
|
232
|
+
});
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (IDLE_TTL_MS === 0) {
|
|
236
|
+
// TTL disabled: keep client alive indefinitely (LRU will handle eviction if pool full)
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const delay = Math.max(1, IDLE_TTL_MS);
|
|
240
|
+
entry.idleTimer = setTimeout(() => {
|
|
241
|
+
// タイムアウト時に再度 refs をチェック(タイマー中に再取得された可能性)
|
|
242
|
+
if (entry.refs === 0) {
|
|
243
|
+
console.log(`[releaseClient] Disposing idle client for ${workspaceRoot}`);
|
|
244
|
+
clients.delete(workspaceKey);
|
|
245
|
+
entry.client
|
|
246
|
+
.dispose({ timeoutMs: 2000 })
|
|
247
|
+
.catch((error) => {
|
|
248
|
+
console.error(`[releaseClient] Failed to dispose client for ${workspaceRoot}:`, error);
|
|
249
|
+
})
|
|
250
|
+
.finally(() => {
|
|
251
|
+
// Fix #1: Release pool permit after disposal
|
|
252
|
+
poolLimiter.release();
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}, delay);
|
|
256
|
+
// Fix #1: Node.jsがタイマー待ちでハングしないように unref() を呼ぶ
|
|
257
|
+
// これによりCLIプロセスがアイドルタイマーを待たずに終了できる
|
|
258
|
+
entry.idleTimer.unref();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Dart ファイルを解析してシンボル・スニペット・依存関係を抽出
|
|
263
|
+
*
|
|
264
|
+
* Fix #5: status フィールドを追加してエラーをリトライ可能にする
|
|
265
|
+
*
|
|
266
|
+
* @param filePath - ファイルパス(相対パスの場合は workspaceRoot からの相対パス)
|
|
267
|
+
* @param content - ファイル内容
|
|
268
|
+
* @param workspaceRoot - ワークスペースルート(絶対パス)
|
|
269
|
+
* @returns { symbols, snippets, dependencies, status, error? }
|
|
270
|
+
*/
|
|
271
|
+
export async function analyzeDartSource(filePath, content, workspaceRoot) {
|
|
272
|
+
// Dart SDK が利用できない場合は空の結果を返す
|
|
273
|
+
if (!isDartSdkAvailable()) {
|
|
274
|
+
console.warn(`[analyzeDartSource] Dart SDK not available, skipping analysis for ${filePath}`);
|
|
275
|
+
return { symbols: [], snippets: [], dependencies: [], status: "sdk_unavailable" };
|
|
276
|
+
}
|
|
277
|
+
// Analysis Server は絶対パスを要求するため、相対パスの場合は絶対パスに変換
|
|
278
|
+
const absoluteFilePath = path.isAbsolute(filePath)
|
|
279
|
+
? filePath
|
|
280
|
+
: path.resolve(workspaceRoot, filePath);
|
|
281
|
+
// Fix #26 (Codex Critical Review Round 4): Wrap acquireClient in try/catch to prevent index rollback
|
|
282
|
+
// Pool errors and initialization failures should not bubble up and rollback entire repository index
|
|
283
|
+
let client = null;
|
|
284
|
+
try {
|
|
285
|
+
// クライアントを取得(参照カウント増加)
|
|
286
|
+
client = await acquireClient(workspaceRoot);
|
|
287
|
+
const payload = await client.analyzeFile(absoluteFilePath, content);
|
|
288
|
+
const { symbols, snippets } = outlineToSymbols(payload.outline, content);
|
|
289
|
+
// Phase 3 (disabled): 依存関係を取得
|
|
290
|
+
// TODO: analysis.getLibraryDependencies は workspace 全体の依存関係を返すため、
|
|
291
|
+
// ファイル単位の依存関係を正しく取得できない。
|
|
292
|
+
// Phase 4 で analysis.getOutline から import/export ディレクティブを抽出するか、
|
|
293
|
+
// analysis.getNavigation を使用した実装に切り替える必要がある。
|
|
294
|
+
// 現在は誤ったデータを返さないために空配列を返す。
|
|
295
|
+
const dependencies = [];
|
|
296
|
+
return { symbols, snippets, dependencies, status: "success" };
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
console.error(`[analyzeDartSource] Failed to analyze ${absoluteFilePath}:`, error);
|
|
300
|
+
// Fix #5: エラー時はstatusとerrorフィールドを返して呼び出し元がリトライ可能にする
|
|
301
|
+
// Fix #26: This now includes pool acquisition errors and initialization failures
|
|
302
|
+
return {
|
|
303
|
+
symbols: [],
|
|
304
|
+
snippets: [],
|
|
305
|
+
dependencies: [],
|
|
306
|
+
status: "error",
|
|
307
|
+
error: error instanceof Error ? error.message : String(error),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
finally {
|
|
311
|
+
// Fix #26: Only release if client was successfully acquired
|
|
312
|
+
if (client) {
|
|
313
|
+
releaseClient(workspaceRoot);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Fix #13 (Codex Critical Review): Re-entrancy guard for cleanup()
|
|
318
|
+
let cleanupInProgress = false;
|
|
319
|
+
/**
|
|
320
|
+
* 全クライアントのクリーンアップ
|
|
321
|
+
*
|
|
322
|
+
* プロセス終了時やインデクサー終了時に呼ぶ
|
|
323
|
+
* 全てのワークスペースのクライアントを強制的に dispose する
|
|
324
|
+
*/
|
|
325
|
+
export async function cleanup() {
|
|
326
|
+
// Fix #13: Prevent concurrent/double cleanup
|
|
327
|
+
if (cleanupInProgress) {
|
|
328
|
+
console.warn("[cleanup] Already in progress, skipping duplicate call");
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
cleanupInProgress = true;
|
|
332
|
+
// Fix #24 (Codex Critical Review Round 4): Set shutdown flag to prevent new client acquisitions
|
|
333
|
+
isShuttingDown = true;
|
|
334
|
+
try {
|
|
335
|
+
const disposePromises = [];
|
|
336
|
+
const entriesToCleanup = Array.from(clients.entries()); // Snapshot
|
|
337
|
+
// Fix #13: Delete all entries immediately to prevent concurrent acquireClient() access
|
|
338
|
+
clients.clear();
|
|
339
|
+
// Fix #30 (Codex Critical Review Round 5): Check pool state before releasing permits
|
|
340
|
+
// to prevent available permits from exceeding maxCapacity
|
|
341
|
+
const poolStats = poolLimiter.stats();
|
|
342
|
+
const permitsToRelease = Math.min(entriesToCleanup.length, poolStats.maxCapacity - poolStats.available);
|
|
343
|
+
if (permitsToRelease < entriesToCleanup.length) {
|
|
344
|
+
console.warn(`[cleanup] Pool has ${poolStats.available}/${poolStats.maxCapacity} available permits. ` +
|
|
345
|
+
`Only releasing ${permitsToRelease} of ${entriesToCleanup.length} to prevent overflow.`);
|
|
346
|
+
}
|
|
347
|
+
let releasedCount = 0;
|
|
348
|
+
for (const [workspaceRoot, entry] of entriesToCleanup) {
|
|
349
|
+
// Fix #2: アイドルタイマーをクリア
|
|
350
|
+
if (entry.idleTimer) {
|
|
351
|
+
clearTimeout(entry.idleTimer);
|
|
352
|
+
entry.idleTimer = null;
|
|
353
|
+
}
|
|
354
|
+
// Fix #8 (Codex Critical Review): cleanup() で各クライアント dispose 後に permit を release
|
|
355
|
+
// これにより cleanup() 後も poolLimiter が正常に機能し、再利用可能になる
|
|
356
|
+
const disposeAndRelease = async () => {
|
|
357
|
+
try {
|
|
358
|
+
if (entry.initPromise) {
|
|
359
|
+
const client = await entry.initPromise;
|
|
360
|
+
await client.dispose({ timeoutMs: 2000 });
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
await entry.client.dispose({ timeoutMs: 2000 });
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
console.error(`[cleanup] Failed to dispose client for ${workspaceRoot}:`, error);
|
|
368
|
+
}
|
|
369
|
+
finally {
|
|
370
|
+
// Fix #30: Only release if we haven't exceeded the safe count
|
|
371
|
+
if (releasedCount < permitsToRelease) {
|
|
372
|
+
poolLimiter.release();
|
|
373
|
+
releasedCount++;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
disposePromises.push(disposeAndRelease());
|
|
378
|
+
}
|
|
379
|
+
await Promise.allSettled(disposePromises);
|
|
380
|
+
}
|
|
381
|
+
finally {
|
|
382
|
+
cleanupInProgress = false;
|
|
383
|
+
// Fix #24: Reset shutdown flag after cleanup completes (allows re-initialization in tests)
|
|
384
|
+
isShuttingDown = false;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Fix #1: プロセスライフサイクルフックの登録
|
|
389
|
+
*
|
|
390
|
+
* beforeExit/シグナルハンドラで非同期 cleanup を実行し、
|
|
391
|
+
* exit フォールバックでは同期的な強制終了のみ行う
|
|
392
|
+
*
|
|
393
|
+
* Fix #29 (Codex Critical Review Round 5): Guard against multiple registrations
|
|
394
|
+
*/
|
|
395
|
+
let lifecycleHooksRegistered = false;
|
|
396
|
+
function registerDartLifecycleHooks() {
|
|
397
|
+
// Fix #29: Prevent duplicate registration in test environments with vi.resetModules()
|
|
398
|
+
if (lifecycleHooksRegistered) {
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
lifecycleHooksRegistered = true;
|
|
402
|
+
let cleanupInProgress = false;
|
|
403
|
+
const gracefulShutdown = async (signal) => {
|
|
404
|
+
if (cleanupInProgress) {
|
|
405
|
+
return; // 二重実行防止
|
|
406
|
+
}
|
|
407
|
+
cleanupInProgress = true;
|
|
408
|
+
console.log(`[DartLifecycle] Received ${signal}, cleaning up Analysis Server processes...`);
|
|
409
|
+
try {
|
|
410
|
+
await cleanup();
|
|
411
|
+
console.log(`[DartLifecycle] Cleanup completed successfully`);
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
console.error(`[DartLifecycle] Cleanup failed:`, error);
|
|
415
|
+
}
|
|
416
|
+
finally {
|
|
417
|
+
// Fix #29: Set exit code instead of calling process.exit() from library code
|
|
418
|
+
// Let the parent application handle exit
|
|
419
|
+
if (signal !== "beforeExit") {
|
|
420
|
+
process.exitCode = signal === "SIGTERM" ? 0 : 1;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
// Fix #1: beforeExit で非同期 cleanup
|
|
425
|
+
process.once("beforeExit", () => gracefulShutdown("beforeExit"));
|
|
426
|
+
// Fix #1: シグナルハンドラ
|
|
427
|
+
process.once("SIGINT", () => gracefulShutdown("SIGINT"));
|
|
428
|
+
process.once("SIGTERM", () => gracefulShutdown("SIGTERM"));
|
|
429
|
+
process.once("SIGQUIT", () => gracefulShutdown("SIGQUIT"));
|
|
430
|
+
// Fix #1: 未捕捉例外時のクリーンアップ
|
|
431
|
+
process.once("uncaughtException", async (error) => {
|
|
432
|
+
console.error(`[DartLifecycle] Uncaught exception:`, error);
|
|
433
|
+
await gracefulShutdown("uncaughtException");
|
|
434
|
+
process.exit(1);
|
|
435
|
+
});
|
|
436
|
+
// Fix #1: exit フォールバック - 同期的な強制終了のみ
|
|
437
|
+
process.once("exit", () => {
|
|
438
|
+
// 非同期処理は実行されないため、同期的にプロセスを強制終了
|
|
439
|
+
for (const [, entry] of clients.entries()) {
|
|
440
|
+
try {
|
|
441
|
+
entry.client.forceKill();
|
|
442
|
+
}
|
|
443
|
+
catch {
|
|
444
|
+
// exit時なのでエラーは無視
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
clients.clear();
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
// Fix #1: ライフサイクルフックを登録
|
|
451
|
+
registerDartLifecycleHooks();
|
|
452
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../../src/indexer/dart/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DartAnalysisClient: Dart Analysis Server との JSON-RPC 通信クライアント
|
|
3
|
+
*/
|
|
4
|
+
import type { GetLibraryDependenciesResult, DartAnalysisPayload } from "./types.js";
|
|
5
|
+
export interface DartAnalysisClientOptions {
|
|
6
|
+
workspaceRoots: string[];
|
|
7
|
+
logPath?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DisposeOptions {
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
skipShutdown?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* DAPProtocolError: Analysis Server プロトコルエラー
|
|
15
|
+
*/
|
|
16
|
+
export declare class DAPProtocolError extends Error {
|
|
17
|
+
code?: number | undefined;
|
|
18
|
+
data?: unknown | undefined;
|
|
19
|
+
constructor(message: string, code?: number | undefined, data?: unknown | undefined);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* DartAnalysisClient: Dart Analysis Server プロセス管理と JSON-RPC 通信
|
|
23
|
+
*/
|
|
24
|
+
export declare class DartAnalysisClient {
|
|
25
|
+
private options;
|
|
26
|
+
private process;
|
|
27
|
+
private readline;
|
|
28
|
+
private requestId;
|
|
29
|
+
private pendingRequests;
|
|
30
|
+
private serverVersion;
|
|
31
|
+
private initialized;
|
|
32
|
+
private initializePromise;
|
|
33
|
+
private fileQueues;
|
|
34
|
+
constructor(options: DartAnalysisClientOptions);
|
|
35
|
+
/**
|
|
36
|
+
* Analysis Server プロセスを起動し初期化する
|
|
37
|
+
*
|
|
38
|
+
* 並行呼び出しを安全に処理: 既に初期化中の場合は同じPromiseを返す
|
|
39
|
+
*
|
|
40
|
+
* @throws MissingToolError - Dart SDK が見つからない場合
|
|
41
|
+
* @throws DAPProtocolError - サーバー起動失敗時
|
|
42
|
+
*/
|
|
43
|
+
initialize(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* ファイルを解析してシンボル情報を取得(MVP版)
|
|
46
|
+
*
|
|
47
|
+
* Fix #2: 同一ファイルの並列解析でオーバーレイ競合を防ぐため、
|
|
48
|
+
* ファイル単位でリクエストをシリアライズ
|
|
49
|
+
*
|
|
50
|
+
* @param filePath - 解析対象ファイルの絶対パス
|
|
51
|
+
* @param content - ファイル内容
|
|
52
|
+
* @returns DartAnalysisPayload
|
|
53
|
+
*/
|
|
54
|
+
analyzeFile(filePath: string, content: string): Promise<DartAnalysisPayload>;
|
|
55
|
+
/**
|
|
56
|
+
* ライブラリの依存関係を取得(Phase 3)
|
|
57
|
+
*
|
|
58
|
+
* @param _filePath - 解析対象ファイルの絶対パス (現在未使用: workspace全体の依存関係を返すため)
|
|
59
|
+
* @returns GetLibraryDependenciesResult
|
|
60
|
+
*/
|
|
61
|
+
getLibraryDependencies(_filePath: string): Promise<GetLibraryDependenciesResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Analysis Server プロセスを終了
|
|
64
|
+
*
|
|
65
|
+
* Fix #3: dispose に options パラメータを追加して柔軟な終了処理を実現
|
|
66
|
+
*
|
|
67
|
+
* @param options - 終了オプション
|
|
68
|
+
* @param options.timeoutMs - Graceful shutdown timeout (デフォルト: 5000ms)
|
|
69
|
+
* @param options.skipShutdown - server.shutdown RPC をスキップして即時強制終了
|
|
70
|
+
*/
|
|
71
|
+
dispose(options?: DisposeOptions): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Fix #1 & #3: プロセスを同期的に強制終了
|
|
74
|
+
*
|
|
75
|
+
* exit フォールバックや緊急時に使用
|
|
76
|
+
* Windows対応: SIGKILLは存在しないため、プラットフォーム別に処理
|
|
77
|
+
*/
|
|
78
|
+
forceKill(): void;
|
|
79
|
+
/**
|
|
80
|
+
* JSON-RPC リクエスト送信
|
|
81
|
+
*
|
|
82
|
+
* Fix #3: タイムアウト時間を可変にして dispose や初期化での短縮タイムアウトを実現
|
|
83
|
+
*
|
|
84
|
+
* @param method - RPC メソッド名
|
|
85
|
+
* @param params - RPC パラメータ
|
|
86
|
+
* @param timeoutMs - タイムアウト時間(デフォルト: 30000ms)
|
|
87
|
+
*/
|
|
88
|
+
private sendRequest;
|
|
89
|
+
/**
|
|
90
|
+
* サーバーからのメッセージを処理
|
|
91
|
+
*/
|
|
92
|
+
private handleMessage;
|
|
93
|
+
/**
|
|
94
|
+
* レスポンス処理
|
|
95
|
+
*/
|
|
96
|
+
private handleResponse;
|
|
97
|
+
/**
|
|
98
|
+
* 通知処理
|
|
99
|
+
*/
|
|
100
|
+
private handleNotification;
|
|
101
|
+
/**
|
|
102
|
+
* 全ての pending リクエストを reject
|
|
103
|
+
*/
|
|
104
|
+
private rejectAllPending;
|
|
105
|
+
/**
|
|
106
|
+
* プロセス状態をクリーンアップ(Fix #1: crash recovery用)
|
|
107
|
+
*
|
|
108
|
+
* dispose() とは異なり、server.shutdown を送らずに状態のみリセット。
|
|
109
|
+
* プロセスクラッシュ後の再初期化を可能にする。
|
|
110
|
+
*/
|
|
111
|
+
private cleanupState;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/indexer/dart/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAMV,4BAA4B,EAC5B,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAQpB,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IAGhC,IAAI,CAAC,EAAE,MAAM;IACb,IAAI,CAAC,EAAE,OAAO;gBAFrB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,IAAI,CAAC,EAAE,OAAO,YAAA;CAKxB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IA0BjB,OAAO,CAAC,OAAO;IAzB3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAOnB;IACJ,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAA8B;IAGvD,OAAO,CAAC,UAAU,CAOd;gBAEgB,OAAO,EAAE,yBAAyB;IAEtD;;;;;;;OAOG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4FjC;;;;;;;;;OASG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkFlF;;;;;OAKG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAatF;;;;;;;;OAQG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDtD;;;;;OAKG;IACH,SAAS,IAAI,IAAI;IA4BjB;;;;;;;;OAQG;YACW,WAAW;IA+BzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CAOrB"}
|