@code-insights/cli 1.2.0 → 2.1.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 (159) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +101 -9
  3. package/dist/commands/config.d.ts +3 -0
  4. package/dist/commands/config.d.ts.map +1 -0
  5. package/dist/commands/config.js +130 -0
  6. package/dist/commands/config.js.map +1 -0
  7. package/dist/commands/connect.d.ts.map +1 -1
  8. package/dist/commands/connect.js +7 -1
  9. package/dist/commands/connect.js.map +1 -1
  10. package/dist/commands/init.d.ts.map +1 -1
  11. package/dist/commands/init.js +52 -0
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/install-hook.d.ts.map +1 -1
  14. package/dist/commands/install-hook.js +16 -3
  15. package/dist/commands/install-hook.js.map +1 -1
  16. package/dist/commands/open.d.ts +9 -0
  17. package/dist/commands/open.d.ts.map +1 -0
  18. package/dist/commands/open.js +59 -0
  19. package/dist/commands/open.js.map +1 -0
  20. package/dist/commands/reset.d.ts.map +1 -1
  21. package/dist/commands/reset.js +14 -1
  22. package/dist/commands/reset.js.map +1 -1
  23. package/dist/commands/stats/actions/cost.d.ts +3 -0
  24. package/dist/commands/stats/actions/cost.d.ts.map +1 -0
  25. package/dist/commands/stats/actions/cost.js +139 -0
  26. package/dist/commands/stats/actions/cost.js.map +1 -0
  27. package/dist/commands/stats/actions/error-handler.d.ts +6 -0
  28. package/dist/commands/stats/actions/error-handler.d.ts.map +1 -0
  29. package/dist/commands/stats/actions/error-handler.js +42 -0
  30. package/dist/commands/stats/actions/error-handler.js.map +1 -0
  31. package/dist/commands/stats/actions/models.d.ts +3 -0
  32. package/dist/commands/stats/actions/models.d.ts.map +1 -0
  33. package/dist/commands/stats/actions/models.js +101 -0
  34. package/dist/commands/stats/actions/models.js.map +1 -0
  35. package/dist/commands/stats/actions/overview.d.ts +3 -0
  36. package/dist/commands/stats/actions/overview.d.ts.map +1 -0
  37. package/dist/commands/stats/actions/overview.js +147 -0
  38. package/dist/commands/stats/actions/overview.js.map +1 -0
  39. package/dist/commands/stats/actions/projects.d.ts +3 -0
  40. package/dist/commands/stats/actions/projects.d.ts.map +1 -0
  41. package/dist/commands/stats/actions/projects.js +90 -0
  42. package/dist/commands/stats/actions/projects.js.map +1 -0
  43. package/dist/commands/stats/actions/today.d.ts +3 -0
  44. package/dist/commands/stats/actions/today.d.ts.map +1 -0
  45. package/dist/commands/stats/actions/today.js +118 -0
  46. package/dist/commands/stats/actions/today.js.map +1 -0
  47. package/dist/commands/stats/data/aggregation.d.ts +60 -0
  48. package/dist/commands/stats/data/aggregation.d.ts.map +1 -0
  49. package/dist/commands/stats/data/aggregation.js +614 -0
  50. package/dist/commands/stats/data/aggregation.js.map +1 -0
  51. package/dist/commands/stats/data/cache.d.ts +29 -0
  52. package/dist/commands/stats/data/cache.d.ts.map +1 -0
  53. package/dist/commands/stats/data/cache.js +197 -0
  54. package/dist/commands/stats/data/cache.js.map +1 -0
  55. package/dist/commands/stats/data/firestore.d.ts +13 -0
  56. package/dist/commands/stats/data/firestore.d.ts.map +1 -0
  57. package/dist/commands/stats/data/firestore.js +170 -0
  58. package/dist/commands/stats/data/firestore.js.map +1 -0
  59. package/dist/commands/stats/data/fuzzy-match.d.ts +5 -0
  60. package/dist/commands/stats/data/fuzzy-match.d.ts.map +1 -0
  61. package/dist/commands/stats/data/fuzzy-match.js +36 -0
  62. package/dist/commands/stats/data/fuzzy-match.js.map +1 -0
  63. package/dist/commands/stats/data/local.d.ts +12 -0
  64. package/dist/commands/stats/data/local.d.ts.map +1 -0
  65. package/dist/commands/stats/data/local.js +81 -0
  66. package/dist/commands/stats/data/local.js.map +1 -0
  67. package/dist/commands/stats/data/source.d.ts +13 -0
  68. package/dist/commands/stats/data/source.d.ts.map +1 -0
  69. package/dist/commands/stats/data/source.js +41 -0
  70. package/dist/commands/stats/data/source.js.map +1 -0
  71. package/dist/commands/stats/data/types.d.ts +229 -0
  72. package/dist/commands/stats/data/types.d.ts.map +1 -0
  73. package/dist/commands/stats/data/types.js +50 -0
  74. package/dist/commands/stats/data/types.js.map +1 -0
  75. package/dist/commands/stats/index.d.ts +3 -0
  76. package/dist/commands/stats/index.d.ts.map +1 -0
  77. package/dist/commands/stats/index.js +41 -0
  78. package/dist/commands/stats/index.js.map +1 -0
  79. package/dist/commands/stats/render/charts.d.ts +9 -0
  80. package/dist/commands/stats/render/charts.d.ts.map +1 -0
  81. package/dist/commands/stats/render/charts.js +45 -0
  82. package/dist/commands/stats/render/charts.js.map +1 -0
  83. package/dist/commands/stats/render/colors.d.ts +21 -0
  84. package/dist/commands/stats/render/colors.d.ts.map +1 -0
  85. package/dist/commands/stats/render/colors.js +47 -0
  86. package/dist/commands/stats/render/colors.js.map +1 -0
  87. package/dist/commands/stats/render/format.d.ts +10 -0
  88. package/dist/commands/stats/render/format.d.ts.map +1 -0
  89. package/dist/commands/stats/render/format.js +57 -0
  90. package/dist/commands/stats/render/format.js.map +1 -0
  91. package/dist/commands/stats/render/layout.d.ts +10 -0
  92. package/dist/commands/stats/render/layout.d.ts.map +1 -0
  93. package/dist/commands/stats/render/layout.js +48 -0
  94. package/dist/commands/stats/render/layout.js.map +1 -0
  95. package/dist/commands/stats/shared.d.ts +6 -0
  96. package/dist/commands/stats/shared.d.ts.map +1 -0
  97. package/dist/commands/stats/shared.js +26 -0
  98. package/dist/commands/stats/shared.js.map +1 -0
  99. package/dist/commands/status.d.ts.map +1 -1
  100. package/dist/commands/status.js +50 -37
  101. package/dist/commands/status.js.map +1 -1
  102. package/dist/commands/sync.d.ts +16 -1
  103. package/dist/commands/sync.d.ts.map +1 -1
  104. package/dist/commands/sync.js +196 -79
  105. package/dist/commands/sync.js.map +1 -1
  106. package/dist/commands/telemetry.d.ts +3 -0
  107. package/dist/commands/telemetry.d.ts.map +1 -0
  108. package/dist/commands/telemetry.js +106 -0
  109. package/dist/commands/telemetry.js.map +1 -0
  110. package/dist/firebase/client.d.ts +5 -0
  111. package/dist/firebase/client.d.ts.map +1 -1
  112. package/dist/firebase/client.js +5 -2
  113. package/dist/firebase/client.js.map +1 -1
  114. package/dist/index.js +21 -4
  115. package/dist/index.js.map +1 -1
  116. package/dist/parser/jsonl.js +3 -2
  117. package/dist/parser/jsonl.js.map +1 -1
  118. package/dist/providers/claude-code.d.ts.map +1 -1
  119. package/dist/providers/claude-code.js +5 -1
  120. package/dist/providers/claude-code.js.map +1 -1
  121. package/dist/providers/codex.d.ts +14 -0
  122. package/dist/providers/codex.d.ts.map +1 -0
  123. package/dist/providers/codex.js +364 -0
  124. package/dist/providers/codex.js.map +1 -0
  125. package/dist/providers/copilot-cli.d.ts +14 -0
  126. package/dist/providers/copilot-cli.d.ts.map +1 -0
  127. package/dist/providers/copilot-cli.js +363 -0
  128. package/dist/providers/copilot-cli.js.map +1 -0
  129. package/dist/providers/cursor.d.ts +27 -0
  130. package/dist/providers/cursor.d.ts.map +1 -0
  131. package/dist/providers/cursor.js +446 -0
  132. package/dist/providers/cursor.js.map +1 -0
  133. package/dist/providers/registry.d.ts +0 -4
  134. package/dist/providers/registry.d.ts.map +1 -1
  135. package/dist/providers/registry.js +9 -6
  136. package/dist/providers/registry.js.map +1 -1
  137. package/dist/types.d.ts +5 -1
  138. package/dist/types.d.ts.map +1 -1
  139. package/dist/utils/config.d.ts +10 -1
  140. package/dist/utils/config.d.ts.map +1 -1
  141. package/dist/utils/config.js +21 -0
  142. package/dist/utils/config.js.map +1 -1
  143. package/dist/utils/paths.d.ts +10 -0
  144. package/dist/utils/paths.d.ts.map +1 -0
  145. package/dist/utils/paths.js +16 -0
  146. package/dist/utils/paths.js.map +1 -0
  147. package/dist/utils/telemetry.d.ts +52 -0
  148. package/dist/utils/telemetry.d.ts.map +1 -0
  149. package/dist/utils/telemetry.js +304 -0
  150. package/dist/utils/telemetry.js.map +1 -0
  151. package/dist/utils/tips.d.ts +11 -0
  152. package/dist/utils/tips.d.ts.map +1 -0
  153. package/dist/utils/tips.js +106 -0
  154. package/dist/utils/tips.js.map +1 -0
  155. package/dist/utils/welcome.d.ts +11 -0
  156. package/dist/utils/welcome.d.ts.map +1 -0
  157. package/dist/utils/welcome.js +72 -0
  158. package/dist/utils/welcome.js.map +1 -0
  159. package/package.json +9 -2
@@ -0,0 +1,363 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ import { generateTitle, detectSessionCharacter } from '../parser/titles.js';
5
+ /**
6
+ * GitHub Copilot CLI session provider.
7
+ * Discovers and parses events.jsonl files from ~/.copilot/session-state/
8
+ */
9
+ export class CopilotCliProvider {
10
+ getProviderName() {
11
+ return 'copilot-cli';
12
+ }
13
+ async discover(options) {
14
+ const copilotHome = getCopilotHome();
15
+ if (!copilotHome)
16
+ return [];
17
+ const files = [];
18
+ // Walk session-state/ and history-session-state/ directories
19
+ for (const subdir of ['session-state', 'history-session-state']) {
20
+ const sessionsDir = path.join(copilotHome, subdir);
21
+ if (!fs.existsSync(sessionsDir))
22
+ continue;
23
+ collectEventsFiles(sessionsDir, files);
24
+ }
25
+ // Apply project filter if specified (filter by cwd from workspace.yaml)
26
+ if (options?.projectFilter) {
27
+ return filterByProject(files, options.projectFilter);
28
+ }
29
+ return files;
30
+ }
31
+ async parse(filePath) {
32
+ return parseCopilotSession(filePath);
33
+ }
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Discovery helpers
37
+ // ---------------------------------------------------------------------------
38
+ function getCopilotHome() {
39
+ const envHome = process.env.COPILOT_HOME;
40
+ if (envHome && fs.existsSync(envHome))
41
+ return envHome;
42
+ const home = os.homedir();
43
+ const defaultDir = path.join(home, '.copilot');
44
+ return fs.existsSync(defaultDir) ? defaultDir : null;
45
+ }
46
+ /**
47
+ * Collect events.jsonl files from session directories.
48
+ * Structure: session-state/{session-id}/events.jsonl
49
+ */
50
+ function collectEventsFiles(dir, files) {
51
+ let entries;
52
+ try {
53
+ entries = fs.readdirSync(dir, { withFileTypes: true });
54
+ }
55
+ catch {
56
+ return;
57
+ }
58
+ for (const entry of entries) {
59
+ if (!entry.isDirectory())
60
+ continue;
61
+ const eventsPath = path.join(dir, entry.name, 'events.jsonl');
62
+ if (fs.existsSync(eventsPath)) {
63
+ files.push(eventsPath);
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Quick-filter by project: read workspace.yaml sibling for cwd.
69
+ */
70
+ function filterByProject(files, projectFilter) {
71
+ const filtered = [];
72
+ const lowerFilter = projectFilter.toLowerCase();
73
+ for (const filePath of files) {
74
+ try {
75
+ const sessionDir = path.dirname(filePath);
76
+ const workspacePath = path.join(sessionDir, 'workspace.yaml');
77
+ if (fs.existsSync(workspacePath)) {
78
+ const yamlContent = fs.readFileSync(workspacePath, 'utf-8');
79
+ const meta = parseWorkspaceYaml(yamlContent);
80
+ const cwd = meta.cwd || '';
81
+ if (cwd.toLowerCase().includes(lowerFilter)) {
82
+ filtered.push(filePath);
83
+ continue;
84
+ }
85
+ }
86
+ // If no workspace.yaml or no cwd match, try reading first line of events.jsonl
87
+ // for session.start event with cwd
88
+ const fd = fs.openSync(filePath, 'r');
89
+ const buf = Buffer.alloc(2048);
90
+ const bytesRead = fs.readSync(fd, buf, 0, 2048, 0);
91
+ fs.closeSync(fd);
92
+ const firstLine = buf.toString('utf-8', 0, bytesRead).split('\n')[0];
93
+ const event = JSON.parse(firstLine);
94
+ const data = event.data || event;
95
+ const cwd = data.cwd || '';
96
+ if (cwd.toLowerCase().includes(lowerFilter)) {
97
+ filtered.push(filePath);
98
+ }
99
+ }
100
+ catch {
101
+ // Include files we can't quick-check
102
+ filtered.push(filePath);
103
+ }
104
+ }
105
+ return filtered;
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // workspace.yaml parser (no YAML library — simple key: value)
109
+ // ---------------------------------------------------------------------------
110
+ function parseWorkspaceYaml(content) {
111
+ const result = {};
112
+ for (const line of content.split('\n')) {
113
+ const colonIdx = line.indexOf(':');
114
+ if (colonIdx === -1)
115
+ continue;
116
+ const key = line.slice(0, colonIdx).trim();
117
+ const value = line.slice(colonIdx + 1).trim();
118
+ if (key && value)
119
+ result[key] = value;
120
+ }
121
+ return result;
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // Parser
125
+ // ---------------------------------------------------------------------------
126
+ function parseCopilotSession(filePath) {
127
+ try {
128
+ const sessionDir = path.dirname(filePath);
129
+ const sessionDirName = path.basename(sessionDir);
130
+ // Read workspace.yaml for metadata (if present)
131
+ const workspacePath = path.join(sessionDir, 'workspace.yaml');
132
+ let workspaceMeta = {};
133
+ if (fs.existsSync(workspacePath)) {
134
+ workspaceMeta = parseWorkspaceYaml(fs.readFileSync(workspacePath, 'utf-8'));
135
+ }
136
+ // Read events.jsonl
137
+ const content = fs.readFileSync(filePath, 'utf-8');
138
+ const lines = content.split('\n').filter(line => line.trim());
139
+ if (lines.length === 0)
140
+ return null;
141
+ const sessionId = `copilot:${sessionDirName}`;
142
+ let model = workspaceMeta.model || '';
143
+ let cwd = workspaceMeta.cwd || '';
144
+ let sessionName = workspaceMeta.name || '';
145
+ // Parse events
146
+ const messages = [];
147
+ let lastTimestamp = fs.statSync(filePath).mtime;
148
+ let firstTimestamp = null;
149
+ // Accumulator for current assistant turn
150
+ let currentAssistantText = '';
151
+ let currentToolCalls = [];
152
+ let currentToolResults = [];
153
+ let toolCounter = 0;
154
+ function flushAssistantTurn() {
155
+ const text = currentAssistantText.trim();
156
+ if (!text && currentToolCalls.length === 0)
157
+ return;
158
+ messages.push({
159
+ id: `copilot-assistant-${messages.length}`,
160
+ sessionId: sessionId,
161
+ type: 'assistant',
162
+ content: text.slice(0, 10000),
163
+ thinking: null,
164
+ toolCalls: [...currentToolCalls],
165
+ toolResults: [...currentToolResults],
166
+ usage: null,
167
+ timestamp: lastTimestamp,
168
+ parentId: null,
169
+ });
170
+ // Reset accumulators
171
+ currentAssistantText = '';
172
+ currentToolCalls = [];
173
+ currentToolResults = [];
174
+ }
175
+ for (const line of lines) {
176
+ let event;
177
+ try {
178
+ event = JSON.parse(line);
179
+ }
180
+ catch {
181
+ continue;
182
+ }
183
+ // Unwrap envelope: support both {type, data} and bare event formats
184
+ const eventType = event.type;
185
+ const data = (event.data || event);
186
+ // Extract timestamp if present
187
+ const ts = parseTimestamp(data);
188
+ if (ts) {
189
+ lastTimestamp = ts;
190
+ if (!firstTimestamp)
191
+ firstTimestamp = ts;
192
+ }
193
+ switch (eventType) {
194
+ case 'session.start': {
195
+ // Extract session metadata
196
+ if (!cwd && data.cwd)
197
+ cwd = data.cwd;
198
+ if (!model && data.model)
199
+ model = data.model;
200
+ if (!sessionName && data.name)
201
+ sessionName = data.name;
202
+ break;
203
+ }
204
+ case 'user.message': {
205
+ // Flush any pending assistant turn
206
+ flushAssistantTurn();
207
+ const userContent = extractText(data);
208
+ if (userContent) {
209
+ messages.push({
210
+ id: data.id || `copilot-user-${messages.length}`,
211
+ sessionId: sessionId,
212
+ type: 'user',
213
+ content: userContent.slice(0, 10000),
214
+ thinking: null,
215
+ toolCalls: [],
216
+ toolResults: [],
217
+ usage: null,
218
+ timestamp: lastTimestamp,
219
+ parentId: null,
220
+ });
221
+ }
222
+ break;
223
+ }
224
+ case 'assistant.message': {
225
+ const text = extractText(data);
226
+ if (text) {
227
+ currentAssistantText += text + '\n';
228
+ }
229
+ break;
230
+ }
231
+ case 'assistant.message_delta': {
232
+ const delta = data.delta || data.text || '';
233
+ if (delta) {
234
+ currentAssistantText += delta;
235
+ }
236
+ break;
237
+ }
238
+ case 'tool.execution_start': {
239
+ toolCounter++;
240
+ const toolName = data.toolName || data.name || 'unknown_tool';
241
+ const toolInput = (data.parameters || data.arguments || {});
242
+ currentToolCalls.push({
243
+ id: data.id || `copilot-tool-${toolCounter}`,
244
+ name: toolName,
245
+ input: toolInput,
246
+ });
247
+ break;
248
+ }
249
+ case 'tool.execution_complete': {
250
+ const toolOutput = data.output || data.result || '';
251
+ const toolId = data.id || (currentToolCalls.length > 0
252
+ ? currentToolCalls[currentToolCalls.length - 1].id
253
+ : `copilot-tool-${toolCounter}`);
254
+ if (toolOutput) {
255
+ currentToolResults.push({
256
+ toolUseId: toolId,
257
+ output: toolOutput.slice(0, 1000),
258
+ });
259
+ }
260
+ break;
261
+ }
262
+ case 'subagent.started': {
263
+ toolCounter++;
264
+ const agentName = data.name || data.agentName || 'subagent';
265
+ currentToolCalls.push({
266
+ id: data.id || `copilot-subagent-${toolCounter}`,
267
+ name: `subagent:${agentName}`,
268
+ input: (data.parameters || data.arguments || data.input || {}),
269
+ });
270
+ break;
271
+ }
272
+ case 'subagent.completed': {
273
+ const agentOutput = data.output || data.result || '';
274
+ const agentId = data.id || (currentToolCalls.length > 0
275
+ ? currentToolCalls[currentToolCalls.length - 1].id
276
+ : `copilot-subagent-${toolCounter}`);
277
+ if (agentOutput) {
278
+ currentToolResults.push({
279
+ toolUseId: agentId,
280
+ output: agentOutput.slice(0, 1000),
281
+ });
282
+ }
283
+ break;
284
+ }
285
+ case 'session.idle': {
286
+ // Turn boundary — flush accumulated assistant turn
287
+ flushAssistantTurn();
288
+ break;
289
+ }
290
+ default:
291
+ // Skip unknown event types gracefully
292
+ break;
293
+ }
294
+ }
295
+ // Flush any remaining assistant content
296
+ flushAssistantTurn();
297
+ if (messages.length === 0)
298
+ return null;
299
+ // Build session
300
+ const userMessages = messages.filter(m => m.type === 'user');
301
+ const assistantMessages = messages.filter(m => m.type === 'assistant');
302
+ const toolCallCount = messages.reduce((sum, m) => sum + m.toolCalls.length, 0);
303
+ const timestamps = messages.map(m => m.timestamp.getTime()).filter(t => t > 0);
304
+ const startedAt = timestamps.length > 0 ? new Date(Math.min(...timestamps)) : (firstTimestamp || new Date());
305
+ const endedAt = timestamps.length > 0 ? new Date(Math.max(...timestamps)) : lastTimestamp;
306
+ const projectPath = cwd || 'copilot://unknown';
307
+ const projectName = sessionName || path.basename(projectPath);
308
+ const session = {
309
+ id: sessionId,
310
+ projectPath,
311
+ projectName,
312
+ summary: null,
313
+ generatedTitle: null,
314
+ titleSource: null,
315
+ sessionCharacter: null,
316
+ startedAt,
317
+ endedAt,
318
+ messageCount: messages.length,
319
+ userMessageCount: userMessages.length,
320
+ assistantMessageCount: assistantMessages.length,
321
+ toolCallCount,
322
+ gitBranch: null,
323
+ claudeVersion: model || null,
324
+ sourceTool: 'copilot-cli',
325
+ messages,
326
+ };
327
+ // Generate title and character
328
+ const titleResult = generateTitle(session);
329
+ session.generatedTitle = titleResult.title;
330
+ session.titleSource = titleResult.source;
331
+ session.sessionCharacter = titleResult.character || detectSessionCharacter(session);
332
+ return session;
333
+ }
334
+ catch {
335
+ return null;
336
+ }
337
+ }
338
+ // ---------------------------------------------------------------------------
339
+ // Parsing helpers
340
+ // ---------------------------------------------------------------------------
341
+ function extractText(data) {
342
+ if (typeof data.text === 'string')
343
+ return data.text;
344
+ if (typeof data.content === 'string')
345
+ return data.content;
346
+ if (typeof data.message === 'string')
347
+ return data.message;
348
+ if (Array.isArray(data.content)) {
349
+ return data.content
350
+ .filter(c => c.type === 'text')
351
+ .map(c => c.text)
352
+ .join('\n');
353
+ }
354
+ return null;
355
+ }
356
+ function parseTimestamp(data) {
357
+ const ts = data.timestamp || data.createdAt || data.time;
358
+ if (!ts)
359
+ return null;
360
+ const d = new Date(ts);
361
+ return isNaN(d.getTime()) ? null : d;
362
+ }
363
+ //# sourceMappingURL=copilot-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.js","sourceRoot":"","sources":["../../src/providers/copilot-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { SessionProvider } from './types.js';
2
+ import type { ParsedSession } from '../types.js';
3
+ /**
4
+ * Cursor IDE session provider.
5
+ * Discovers and parses sessions from Cursor's SQLite databases.
6
+ *
7
+ * Cursor stores composer conversations in state.vscdb files (SQLite).
8
+ * One DB can contain multiple sessions (composers), so discover() returns
9
+ * virtual paths in the format `state.vscdb#<composerId>` — one per session.
10
+ * This keeps the SessionProvider interface unchanged (1 path = 1 session).
11
+ */
12
+ export declare class CursorProvider implements SessionProvider {
13
+ getProviderName(): string;
14
+ /**
15
+ * Discover Cursor composer sessions.
16
+ * Returns virtual paths: `<dbPath>#<composerId>` — one per session.
17
+ */
18
+ discover(options?: {
19
+ projectFilter?: string;
20
+ }): Promise<string[]>;
21
+ /**
22
+ * Parse a single Cursor session from a virtual path.
23
+ * Virtual path format: `<dbPath>#<composerId>`
24
+ */
25
+ parse(virtualPath: string): Promise<ParsedSession | null>;
26
+ }
27
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/providers/cursor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,aAAa,CAAC;AAG1E;;;;;;;;GAQG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkDvE;;;OAGG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAUhE"}