devrage 0.0.4 → 0.5.3
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/dist/cli.js +2436 -210
- package/dist/cli.js.map +4 -4
- package/dist/lib/adapters/amp.d.ts.map +1 -1
- package/dist/lib/adapters/amp.js +171 -7
- package/dist/lib/adapters/amp.js.map +1 -1
- package/dist/lib/adapters/claude.d.ts.map +1 -1
- package/dist/lib/adapters/claude.js +147 -49
- package/dist/lib/adapters/claude.js.map +1 -1
- package/dist/lib/adapters/cline.d.ts.map +1 -1
- package/dist/lib/adapters/cline.js +17 -12
- package/dist/lib/adapters/cline.js.map +1 -1
- package/dist/lib/adapters/codex.d.ts.map +1 -1
- package/dist/lib/adapters/codex.js +169 -14
- package/dist/lib/adapters/codex.js.map +1 -1
- package/dist/lib/adapters/cursor.d.ts +3 -0
- package/dist/lib/adapters/cursor.d.ts.map +1 -0
- package/dist/lib/adapters/cursor.js +540 -0
- package/dist/lib/adapters/cursor.js.map +1 -0
- package/dist/lib/adapters/index.d.ts +61 -0
- package/dist/lib/adapters/index.d.ts.map +1 -1
- package/dist/lib/adapters/index.js +2 -0
- package/dist/lib/adapters/index.js.map +1 -1
- package/dist/lib/adapters/opencode.d.ts.map +1 -1
- package/dist/lib/adapters/opencode.js +96 -16
- package/dist/lib/adapters/opencode.js.map +1 -1
- package/dist/lib/adapters/pi.d.ts.map +1 -1
- package/dist/lib/adapters/pi.js +113 -11
- package/dist/lib/adapters/pi.js.map +1 -1
- package/dist/lib/adapters/zed.d.ts.map +1 -1
- package/dist/lib/adapters/zed.js +18 -11
- package/dist/lib/adapters/zed.js.map +1 -1
- package/dist/lib/detector/index.d.ts.map +1 -1
- package/dist/lib/detector/index.js +12 -6
- package/dist/lib/detector/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/lib/index.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readdir } from "node:fs/promises";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
/**
|
|
6
|
+
* Reads Cursor's VS Code-style state stores read-only. Extraction is limited to
|
|
7
|
+
* known AI keys and confident user-authored message shapes; unreadable DBs skip.
|
|
8
|
+
*/
|
|
9
|
+
const CANDIDATE_KEY_PREFIXES = [
|
|
10
|
+
"bubbleId:",
|
|
11
|
+
"composerData:",
|
|
12
|
+
"composer.composerData",
|
|
13
|
+
"aiService.prompts",
|
|
14
|
+
"aiService.generations",
|
|
15
|
+
"workbench.panel.composerChatViewPane.",
|
|
16
|
+
];
|
|
17
|
+
const STATE_TABLES = ["ItemTable", "cursorDiskKV"];
|
|
18
|
+
export function cursorAdapter() {
|
|
19
|
+
return {
|
|
20
|
+
name: "cursor",
|
|
21
|
+
async *messages(options) {
|
|
22
|
+
const stores = await discoverCursorStateStores();
|
|
23
|
+
for (const store of stores) {
|
|
24
|
+
yield* parseCursorStore(store, options);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
async *usage(options) {
|
|
28
|
+
const stores = await discoverCursorStateStores();
|
|
29
|
+
for (const store of stores) {
|
|
30
|
+
yield* parseCursorUsageStore(store, options);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async function discoverCursorStateStores() {
|
|
36
|
+
const stores = [];
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
for (const userDir of getCursorUserDirs()) {
|
|
39
|
+
if (!existsSync(userDir)) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const globalState = join(userDir, "globalStorage", "state.vscdb");
|
|
43
|
+
if (existsSync(globalState) && !seen.has(globalState)) {
|
|
44
|
+
seen.add(globalState);
|
|
45
|
+
stores.push({ path: globalState, scope: "global" });
|
|
46
|
+
}
|
|
47
|
+
const workspaceRoot = join(userDir, "workspaceStorage");
|
|
48
|
+
let workspaceIds = [];
|
|
49
|
+
try {
|
|
50
|
+
workspaceIds = await readdir(workspaceRoot);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
for (const workspaceId of workspaceIds) {
|
|
56
|
+
const statePath = join(workspaceRoot, workspaceId, "state.vscdb");
|
|
57
|
+
if (existsSync(statePath) && !seen.has(statePath)) {
|
|
58
|
+
seen.add(statePath);
|
|
59
|
+
stores.push({ path: statePath, scope: "workspace", project: workspaceId });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return stores;
|
|
64
|
+
}
|
|
65
|
+
function getCursorUserDirs() {
|
|
66
|
+
const configHome = envOrDefault("XDG_CONFIG_HOME", join(homedir(), ".config"));
|
|
67
|
+
const appData = envOrDefault("APPDATA", join(homedir(), "AppData", "Roaming"));
|
|
68
|
+
return uniqueStrings([
|
|
69
|
+
join(homedir(), "Library", "Application Support", "Cursor", "User"),
|
|
70
|
+
join(configHome, "Cursor", "User"),
|
|
71
|
+
join(appData, "Cursor", "User"),
|
|
72
|
+
]);
|
|
73
|
+
}
|
|
74
|
+
async function* parseCursorStore(store, options) {
|
|
75
|
+
const db = await openCursorDb(store.path);
|
|
76
|
+
if (!db) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const rows = readStateRows(db);
|
|
81
|
+
const seen = new Set();
|
|
82
|
+
for (const row of rows) {
|
|
83
|
+
try {
|
|
84
|
+
if (!isCandidateKey(row.key)) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const parsed = parseJsonValue(row.value);
|
|
88
|
+
if (parsed === undefined) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
for (const message of extractCursorMessages(parsed, row.key)) {
|
|
92
|
+
const text = message.text.trim();
|
|
93
|
+
if (!isLikelyMessageText(text)) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (options?.since && message.timestamp) {
|
|
97
|
+
const timestamp = new Date(message.timestamp);
|
|
98
|
+
if (Number.isFinite(timestamp.getTime()) && timestamp < options.since) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const session = message.session ?? `${store.scope}:${row.key}`;
|
|
103
|
+
const dedupeKey = `${session}\u0000${message.timestamp ?? ""}\u0000${text}`;
|
|
104
|
+
if (seen.has(dedupeKey)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
seen.add(dedupeKey);
|
|
108
|
+
yield {
|
|
109
|
+
text,
|
|
110
|
+
timestamp: message.timestamp,
|
|
111
|
+
session,
|
|
112
|
+
project: store.project,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
db.close();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function* parseCursorUsageStore(store, options) {
|
|
126
|
+
const db = await openCursorDb(store.path);
|
|
127
|
+
if (!db) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const rows = readStateRows(db);
|
|
132
|
+
const composerModels = collectComposerModels(rows);
|
|
133
|
+
const seen = new Set();
|
|
134
|
+
for (const row of rows) {
|
|
135
|
+
try {
|
|
136
|
+
if (!row.key.startsWith("bubbleId:")) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const parsed = parseJsonValue(row.value);
|
|
140
|
+
const usage = extractCursorBubbleUsage(parsed, row.key, composerModels);
|
|
141
|
+
if (!usage) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (options?.since && usage.timestamp) {
|
|
145
|
+
const timestamp = new Date(usage.timestamp);
|
|
146
|
+
if (Number.isFinite(timestamp.getTime()) && timestamp < options.since) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const dedupeKey = `${usage.session ?? ""}\u0000${usage.timestamp ?? ""}\u0000${usage.model ?? ""}\u0000${usage.inputTokens}\u0000${usage.outputTokens}`;
|
|
151
|
+
if (seen.has(dedupeKey)) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
seen.add(dedupeKey);
|
|
155
|
+
yield usage;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
db.close();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function openCursorDb(dbPath) {
|
|
167
|
+
try {
|
|
168
|
+
const BetterSqlite3 = await import("better-sqlite3");
|
|
169
|
+
const Ctor = BetterSqlite3.default ?? BetterSqlite3;
|
|
170
|
+
return new Ctor(dbPath, { readonly: true });
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function readStateRows(db) {
|
|
177
|
+
const rows = [];
|
|
178
|
+
try {
|
|
179
|
+
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type = 'table'").all();
|
|
180
|
+
const availableTables = new Set(tables.flatMap((table) => stringValue(table.name) ?? []));
|
|
181
|
+
for (const table of STATE_TABLES) {
|
|
182
|
+
if (!availableTables.has(table)) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const columns = db.prepare(`PRAGMA table_info("${table}")`).all();
|
|
186
|
+
const columnNames = new Set(columns.flatMap((column) => stringValue(column.name) ?? []));
|
|
187
|
+
if (!columnNames.has("key") || !columnNames.has("value")) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const tableRows = db.prepare(`SELECT key, value FROM "${table}"`).all();
|
|
191
|
+
rows.push(...tableRows.flatMap((row) => typeof row.key === "string" ? [{ key: row.key, value: row.value }] : []));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return rows;
|
|
196
|
+
}
|
|
197
|
+
return rows;
|
|
198
|
+
}
|
|
199
|
+
function isCandidateKey(key) {
|
|
200
|
+
return CANDIDATE_KEY_PREFIXES.some((prefix) => key === prefix || key.startsWith(prefix));
|
|
201
|
+
}
|
|
202
|
+
function parseJsonValue(value) {
|
|
203
|
+
const raw = decodeStateValue(value);
|
|
204
|
+
if (!raw) {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
const parsed = JSON.parse(raw);
|
|
209
|
+
if (typeof parsed !== "string") {
|
|
210
|
+
return parsed;
|
|
211
|
+
}
|
|
212
|
+
const trimmed = parsed.trim();
|
|
213
|
+
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) {
|
|
214
|
+
return parsed;
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
return JSON.parse(trimmed);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return parsed;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function decodeStateValue(value) {
|
|
228
|
+
if (typeof value === "string") {
|
|
229
|
+
return value;
|
|
230
|
+
}
|
|
231
|
+
if (Buffer.isBuffer(value)) {
|
|
232
|
+
return value.toString("utf-8");
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
function extractCursorMessages(root, rowKey) {
|
|
237
|
+
if (rowKey.startsWith("bubbleId:")) {
|
|
238
|
+
const message = extractCursorBubbleMessage(root, rowKey);
|
|
239
|
+
return message ? [message] : [];
|
|
240
|
+
}
|
|
241
|
+
const messages = [];
|
|
242
|
+
collectRoleMessages(root, messages);
|
|
243
|
+
if (rowKey.startsWith("aiService.prompts") || rowKey.startsWith("aiService.generations")) {
|
|
244
|
+
collectPromptMessages(root, messages);
|
|
245
|
+
}
|
|
246
|
+
return uniqueMessages(messages);
|
|
247
|
+
}
|
|
248
|
+
function extractCursorBubbleMessage(root, rowKey) {
|
|
249
|
+
const record = asRecord(root);
|
|
250
|
+
if (!record || numberValue(record["type"]) !== 1) {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
const text = firstTextField(record, ["text", "richText"]);
|
|
254
|
+
if (!text) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
text,
|
|
259
|
+
timestamp: extractTimestamp(record),
|
|
260
|
+
session: cursorBubbleSession(rowKey) ?? extractSession(record),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function collectComposerModels(rows) {
|
|
264
|
+
const models = new Map();
|
|
265
|
+
for (const row of rows) {
|
|
266
|
+
if (!row.key.startsWith("composerData:")) {
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
const parsed = parseJsonValue(row.value);
|
|
270
|
+
const record = asRecord(parsed);
|
|
271
|
+
if (!record) {
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
const composerId = stringValue(record["composerId"]) ?? row.key.slice("composerData:".length);
|
|
275
|
+
const model = extractCursorModel(record);
|
|
276
|
+
if (composerId && model) {
|
|
277
|
+
models.set(composerId, model);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return models;
|
|
281
|
+
}
|
|
282
|
+
function extractCursorBubbleUsage(root, rowKey, composerModels) {
|
|
283
|
+
const record = asRecord(root);
|
|
284
|
+
if (!record || numberValue(record["type"]) !== 2) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
const tokenCount = asRecord(record["tokenCount"]);
|
|
288
|
+
if (!tokenCount) {
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
const inputTokens = numberValue(tokenCount["inputTokens"] ?? tokenCount["input"]);
|
|
292
|
+
const outputTokens = numberValue(tokenCount["outputTokens"] ?? tokenCount["output"]);
|
|
293
|
+
const cacheReadTokens = numberValue(tokenCount["cacheReadTokens"] ?? tokenCount["cacheRead"]);
|
|
294
|
+
const cacheWriteTokens = numberValue(tokenCount["cacheWriteTokens"] ?? tokenCount["cacheWrite"]);
|
|
295
|
+
if (inputTokens + outputTokens + cacheReadTokens + cacheWriteTokens === 0) {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
const composerId = cursorBubbleSession(rowKey);
|
|
299
|
+
const model = extractCursorModel(record) ?? (composerId ? composerModels.get(composerId) : undefined);
|
|
300
|
+
return {
|
|
301
|
+
agent: "cursor",
|
|
302
|
+
model,
|
|
303
|
+
timestamp: extractTimestamp(record),
|
|
304
|
+
session: composerId ?? extractSession(record),
|
|
305
|
+
inputTokens,
|
|
306
|
+
outputTokens,
|
|
307
|
+
reasoningTokens: numberValue(tokenCount["reasoningTokens"] ?? tokenCount["reasoning"]),
|
|
308
|
+
cacheReadTokens,
|
|
309
|
+
cacheWriteTokens,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
function extractCursorModel(record) {
|
|
313
|
+
const direct = firstStringField(record, ["model", "modelName", "modelId"]);
|
|
314
|
+
if (direct) {
|
|
315
|
+
return direct;
|
|
316
|
+
}
|
|
317
|
+
for (const field of ["modelInfo", "modelConfig"]) {
|
|
318
|
+
const modelRecord = asRecord(record[field]);
|
|
319
|
+
if (!modelRecord) {
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
const nested = firstStringField(modelRecord, ["modelName", "modelId", "id", "name"]);
|
|
323
|
+
if (nested && nested !== "default") {
|
|
324
|
+
return nested;
|
|
325
|
+
}
|
|
326
|
+
const selected = modelRecord["selectedModels"];
|
|
327
|
+
if (Array.isArray(selected)) {
|
|
328
|
+
for (const item of selected) {
|
|
329
|
+
const itemRecord = asRecord(item);
|
|
330
|
+
const selectedModel = itemRecord
|
|
331
|
+
? firstStringField(itemRecord, ["modelId", "modelName", "id", "name"])
|
|
332
|
+
: undefined;
|
|
333
|
+
if (selectedModel && selectedModel !== "default") {
|
|
334
|
+
return selectedModel;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (nested) {
|
|
339
|
+
return nested;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
344
|
+
function cursorBubbleSession(rowKey) {
|
|
345
|
+
const [, composerId] = rowKey.split(":");
|
|
346
|
+
return composerId?.trim() || undefined;
|
|
347
|
+
}
|
|
348
|
+
function collectRoleMessages(value, messages, inheritedSession, depth = 0) {
|
|
349
|
+
if (depth > 12) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
if (Array.isArray(value)) {
|
|
353
|
+
for (const item of value) {
|
|
354
|
+
collectRoleMessages(item, messages, inheritedSession, depth + 1);
|
|
355
|
+
}
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const record = asRecord(value);
|
|
359
|
+
if (!record) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
const session = extractSession(record) ?? inheritedSession;
|
|
363
|
+
if (isUserAuthored(record)) {
|
|
364
|
+
const text = extractMessageText(record);
|
|
365
|
+
if (text) {
|
|
366
|
+
messages.push({ text, timestamp: extractTimestamp(record), session });
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
for (const child of Object.values(record)) {
|
|
370
|
+
if (typeof child === "object" && child !== null) {
|
|
371
|
+
collectRoleMessages(child, messages, session, depth + 1);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function collectPromptMessages(value, messages, inheritedSession, depth = 0) {
|
|
376
|
+
if (depth > 12) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
if (typeof value === "string") {
|
|
380
|
+
messages.push({ text: value, session: inheritedSession });
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
if (Array.isArray(value)) {
|
|
384
|
+
for (const item of value) {
|
|
385
|
+
collectPromptMessages(item, messages, inheritedSession, depth + 1);
|
|
386
|
+
}
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const record = asRecord(value);
|
|
390
|
+
if (!record) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const session = extractSession(record) ?? inheritedSession;
|
|
394
|
+
const prompt = firstTextField(record, [
|
|
395
|
+
"prompt",
|
|
396
|
+
"userPrompt",
|
|
397
|
+
"originalPrompt",
|
|
398
|
+
"currentPrompt",
|
|
399
|
+
"query",
|
|
400
|
+
"input",
|
|
401
|
+
]);
|
|
402
|
+
if (prompt && !isAssistantAuthored(record)) {
|
|
403
|
+
messages.push({ text: prompt, timestamp: extractTimestamp(record), session });
|
|
404
|
+
}
|
|
405
|
+
for (const child of Object.values(record)) {
|
|
406
|
+
if (typeof child === "object" && child !== null) {
|
|
407
|
+
collectPromptMessages(child, messages, session, depth + 1);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
function isUserAuthored(record) {
|
|
412
|
+
return ["role", "speaker", "sender", "author", "source", "from", "type", "kind"].some((field) => actorIsUser(record[field]));
|
|
413
|
+
}
|
|
414
|
+
function isAssistantAuthored(record) {
|
|
415
|
+
return ["role", "speaker", "sender", "author", "source", "from", "type", "kind"].some((field) => actorIsAssistant(record[field]));
|
|
416
|
+
}
|
|
417
|
+
function actorIsUser(value) {
|
|
418
|
+
const actor = actorString(value);
|
|
419
|
+
return actor === "user" || actor === "human" || actor === "usermessage";
|
|
420
|
+
}
|
|
421
|
+
function actorIsAssistant(value) {
|
|
422
|
+
const actor = actorString(value);
|
|
423
|
+
return actor === "assistant" || actor === "ai" || actor === "assistantmessage";
|
|
424
|
+
}
|
|
425
|
+
function actorString(value) {
|
|
426
|
+
if (typeof value === "string") {
|
|
427
|
+
return value.toLowerCase().replace(/[^a-z]/g, "");
|
|
428
|
+
}
|
|
429
|
+
const record = asRecord(value);
|
|
430
|
+
if (!record) {
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
433
|
+
for (const field of ["role", "type", "name"]) {
|
|
434
|
+
if (typeof record[field] === "string") {
|
|
435
|
+
return record[field].toLowerCase().replace(/[^a-z]/g, "");
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
function extractMessageText(record) {
|
|
441
|
+
return firstTextField(record, ["text", "content", "message", "prompt", "query", "input"]);
|
|
442
|
+
}
|
|
443
|
+
function firstTextField(record, fields) {
|
|
444
|
+
for (const field of fields) {
|
|
445
|
+
const text = contentToText(record[field]);
|
|
446
|
+
if (text) {
|
|
447
|
+
return text;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return null;
|
|
451
|
+
}
|
|
452
|
+
function firstStringField(record, fields) {
|
|
453
|
+
for (const field of fields) {
|
|
454
|
+
const value = stringValue(record[field]);
|
|
455
|
+
if (value) {
|
|
456
|
+
return value;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return undefined;
|
|
460
|
+
}
|
|
461
|
+
function contentToText(value) {
|
|
462
|
+
if (typeof value === "string") {
|
|
463
|
+
return value;
|
|
464
|
+
}
|
|
465
|
+
if (Array.isArray(value)) {
|
|
466
|
+
const parts = value.map(contentToText).filter((part) => Boolean(part));
|
|
467
|
+
return parts.length > 0 ? parts.join(" ") : null;
|
|
468
|
+
}
|
|
469
|
+
const record = asRecord(value);
|
|
470
|
+
if (!record) {
|
|
471
|
+
return null;
|
|
472
|
+
}
|
|
473
|
+
return firstTextField(record, ["text", "content", "message", "value"]);
|
|
474
|
+
}
|
|
475
|
+
function extractTimestamp(record) {
|
|
476
|
+
for (const field of ["timestamp", "createdAt", "updatedAt", "time", "created", "date", "ts"]) {
|
|
477
|
+
const timestamp = normalizeTimestamp(record[field]);
|
|
478
|
+
if (timestamp) {
|
|
479
|
+
return timestamp;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return undefined;
|
|
483
|
+
}
|
|
484
|
+
function normalizeTimestamp(value) {
|
|
485
|
+
if (typeof value === "string") {
|
|
486
|
+
const date = new Date(value);
|
|
487
|
+
return Number.isFinite(date.getTime()) ? date.toISOString() : undefined;
|
|
488
|
+
}
|
|
489
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
490
|
+
const milliseconds = value > 1_000_000_000_000 ? value : value * 1000;
|
|
491
|
+
const date = new Date(milliseconds);
|
|
492
|
+
return Number.isFinite(date.getTime()) ? date.toISOString() : undefined;
|
|
493
|
+
}
|
|
494
|
+
return undefined;
|
|
495
|
+
}
|
|
496
|
+
function extractSession(record) {
|
|
497
|
+
for (const field of ["conversationId", "composerId", "sessionId", "chatId", "threadId", "id"]) {
|
|
498
|
+
const value = record[field];
|
|
499
|
+
if (typeof value === "string" && value.trim()) {
|
|
500
|
+
return value;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
return undefined;
|
|
504
|
+
}
|
|
505
|
+
function isLikelyMessageText(text) {
|
|
506
|
+
return text.length > 0 && !text.startsWith("<environment_context>");
|
|
507
|
+
}
|
|
508
|
+
function uniqueMessages(messages) {
|
|
509
|
+
const seen = new Set();
|
|
510
|
+
const unique = [];
|
|
511
|
+
for (const message of messages) {
|
|
512
|
+
const key = `${message.session ?? ""}\u0000${message.timestamp ?? ""}\u0000${message.text}`;
|
|
513
|
+
if (seen.has(key)) {
|
|
514
|
+
continue;
|
|
515
|
+
}
|
|
516
|
+
seen.add(key);
|
|
517
|
+
unique.push(message);
|
|
518
|
+
}
|
|
519
|
+
return unique;
|
|
520
|
+
}
|
|
521
|
+
function uniqueStrings(values) {
|
|
522
|
+
return Array.from(new Set(values));
|
|
523
|
+
}
|
|
524
|
+
function envOrDefault(name, fallback) {
|
|
525
|
+
const value = process.env[name];
|
|
526
|
+
return value && value.trim() ? value : fallback;
|
|
527
|
+
}
|
|
528
|
+
function numberValue(value) {
|
|
529
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
530
|
+
}
|
|
531
|
+
function stringValue(value) {
|
|
532
|
+
return typeof value === "string" && value.trim() ? value : undefined;
|
|
533
|
+
}
|
|
534
|
+
function asRecord(value) {
|
|
535
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
return value;
|
|
539
|
+
}
|
|
540
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/adapters/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;GAGG;AAEH,MAAM,sBAAsB,GAAG;IAC7B,WAAW;IACX,eAAe;IACf,uBAAuB;IACvB,mBAAmB;IACnB,uBAAuB;IACvB,uCAAuC;CACxC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAmBnD,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAwB;YACtC,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YAEjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,KAAK,CAAC,CAAC,KAAK,CAAC,OAAwB;YACnC,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YAEjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB;IACtC,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QACxD,IAAI,YAAY,GAAa,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;YAClE,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/E,OAAO,aAAa,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC;QACnE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,gBAAgB,CAC9B,KAAuB,EACvB,OAAwB;IAExB,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,SAAS;gBACX,CAAC;gBAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBAED,KAAK,MAAM,OAAO,IAAI,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC/B,SAAS;oBACX,CAAC;oBAED,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;wBACxC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;4BACtE,SAAS;wBACX,CAAC;oBACH,CAAC;oBAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;oBAC/D,MAAM,SAAS,GAAG,GAAG,OAAO,SAAS,OAAO,CAAC,SAAS,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;oBAC5E,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBACxB,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAEpB,MAAM;wBACJ,IAAI;wBACJ,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,OAAO;wBACP,OAAO,EAAE,KAAK,CAAC,OAAO;qBACvB,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,qBAAqB,CACnC,KAAuB,EACvB,OAAwB;IAExB,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrC,SAAS;gBACX,CAAC;gBAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;gBACxE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,SAAS;gBACX,CAAC;gBAED,IAAI,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACtC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC5C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;wBACtE,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,SAAS,KAAK,CAAC,SAAS,IAAI,EAAE,SAAS,KAAK,CAAC,KAAK,IAAI,EAAE,SAAS,KAAK,CAAC,WAAW,SAAS,KAAK,CAAC,YAAY,EAAE,CAAC;gBACxJ,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxB,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAEpB,MAAM,KAAK,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAc;IACxC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC;QACpD,OAAO,IAAK,IAAiF,CAC3F,MAAM,EACN,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EAAqC;IAC1D,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,EAEjF,CAAC;QACJ,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE1F,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,sBAAsB,KAAK,IAAI,CAAC,CAAC,GAAG,EAAyB,CAAC;YACzF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,2BAA2B,KAAK,GAAG,CAAC,CAAC,GAAG,EAGlE,CAAC;YACJ,IAAI,CAAC,IAAI,CACP,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3B,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CACxE,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAa,EAAE,MAAc;IAC1D,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEpC,IAAI,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzF,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAa,EAAE,MAAc;IAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAgB;IAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAa,EACb,MAAc,EACd,cAAmC;IAEnC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9F,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IACjG,IAAI,WAAW,GAAG,YAAY,GAAG,eAAe,GAAG,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GACT,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE1F,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,KAAK;QACL,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,UAAU,IAAI,cAAc,CAAC,MAAM,CAAC;QAC7C,WAAW;QACX,YAAY;QACZ,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QACtF,eAAe;QACf,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA+B;IACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3E,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACrF,IAAI,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,aAAa,GAAG,UAAU;oBAC9B,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;oBACtE,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,aAAa,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oBACjD,OAAO,aAAa,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACzC,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAc,EACd,QAA4B,EAC5B,gBAAyB,EACzB,KAAK,GAAG,CAAC;IAET,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC;IAC3D,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,QAA4B,EAC5B,gBAAyB,EACzB,KAAK,GAAG,CAAC;IAET,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC;IAC3D,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE;QACpC,QAAQ;QACR,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B;IACrD,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9F,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA+B;IAC1D,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9F,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,aAAa,CAAC;AAC1E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,kBAAkB,CAAC;AACjF,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA+B;IACzD,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B,EAAE,MAAgB;IACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA+B,EAAE,MAAgB;IACzE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACvF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA+B;IACvD,KAAK,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QAC7F,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B;IACrD,KAAK,MAAM,KAAK,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;QAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,cAAc,CAAC,QAA4B;IAClD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,SAAS,OAAO,CAAC,SAAS,IAAI,EAAE,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5F,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,QAAgB;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAgC,CAAC;AAC1C,CAAC"}
|
|
@@ -4,10 +4,71 @@ export interface Message {
|
|
|
4
4
|
session?: string;
|
|
5
5
|
project?: string;
|
|
6
6
|
}
|
|
7
|
+
export interface CostModelSummary {
|
|
8
|
+
model: string;
|
|
9
|
+
provider?: string;
|
|
10
|
+
requests: number;
|
|
11
|
+
estimatedCost: number;
|
|
12
|
+
billedCost: number;
|
|
13
|
+
pricingSource: PricingSource;
|
|
14
|
+
unpricedRequests: number;
|
|
15
|
+
inputTokens: number;
|
|
16
|
+
outputTokens: number;
|
|
17
|
+
reasoningTokens: number;
|
|
18
|
+
cacheReadTokens: number;
|
|
19
|
+
cacheWriteTokens: number;
|
|
20
|
+
}
|
|
21
|
+
export interface CostDaySummary {
|
|
22
|
+
day: string;
|
|
23
|
+
requests: number;
|
|
24
|
+
estimatedCost: number;
|
|
25
|
+
billedCost: number;
|
|
26
|
+
unpricedRequests: number;
|
|
27
|
+
inputTokens: number;
|
|
28
|
+
outputTokens: number;
|
|
29
|
+
reasoningTokens: number;
|
|
30
|
+
cacheReadTokens: number;
|
|
31
|
+
cacheWriteTokens: number;
|
|
32
|
+
models: CostModelSummary[];
|
|
33
|
+
}
|
|
34
|
+
export type PricingSource = "catalog" | "stale-catalog" | "fallback" | "stored" | "unknown" | "mixed";
|
|
35
|
+
export interface PricingMetadata {
|
|
36
|
+
source: "catalog" | "stale-catalog" | "fallback";
|
|
37
|
+
fetchedAt?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface CostSummary {
|
|
40
|
+
requests: number;
|
|
41
|
+
estimatedCost: number;
|
|
42
|
+
billedCost: number;
|
|
43
|
+
unpricedRequests: number;
|
|
44
|
+
inputTokens: number;
|
|
45
|
+
outputTokens: number;
|
|
46
|
+
reasoningTokens: number;
|
|
47
|
+
cacheReadTokens: number;
|
|
48
|
+
cacheWriteTokens: number;
|
|
49
|
+
models: CostModelSummary[];
|
|
50
|
+
days: CostDaySummary[];
|
|
51
|
+
pricing: PricingMetadata;
|
|
52
|
+
}
|
|
53
|
+
export interface UsageRecord {
|
|
54
|
+
agent: string;
|
|
55
|
+
provider?: string;
|
|
56
|
+
model?: string;
|
|
57
|
+
timestamp?: string;
|
|
58
|
+
session?: string;
|
|
59
|
+
billedCost?: number;
|
|
60
|
+
inputTokens: number;
|
|
61
|
+
outputTokens: number;
|
|
62
|
+
reasoningTokens: number;
|
|
63
|
+
cacheReadTokens: number;
|
|
64
|
+
cacheWriteTokens: number;
|
|
65
|
+
}
|
|
7
66
|
export interface Adapter {
|
|
8
67
|
name: string;
|
|
9
68
|
/** Discover and yield all user messages from local session storage */
|
|
10
69
|
messages(options?: AdapterOptions): AsyncGenerator<Message>;
|
|
70
|
+
/** Discover and yield token/cost accounting rows when the agent exposes them */
|
|
71
|
+
usage?(options?: AdapterOptions): AsyncGenerator<UsageRecord>;
|
|
11
72
|
}
|
|
12
73
|
export interface AdapterOptions {
|
|
13
74
|
since?: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,14 @@ import { ampAdapter } from "./amp";
|
|
|
2
2
|
import { claudeAdapter } from "./claude";
|
|
3
3
|
import { clineAdapter } from "./cline";
|
|
4
4
|
import { codexAdapter } from "./codex";
|
|
5
|
+
import { cursorAdapter } from "./cursor";
|
|
5
6
|
import { opencodeAdapter } from "./opencode";
|
|
6
7
|
import { piAdapter } from "./pi";
|
|
7
8
|
import { zedAdapter } from "./zed";
|
|
8
9
|
const ADAPTERS = {
|
|
9
10
|
claude: claudeAdapter,
|
|
10
11
|
codex: codexAdapter,
|
|
12
|
+
cursor: cursorAdapter,
|
|
11
13
|
opencode: opencodeAdapter,
|
|
12
14
|
amp: ampAdapter,
|
|
13
15
|
cline: clineAdapter,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA4FnC,MAAM,QAAQ,GAAkC;IAC9C,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,eAAe;IACzB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,YAAY;IACnB,EAAE,EAAE,SAAS;IACb,GAAG,EAAE,UAAU;CAChB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC"}
|