xtctx 0.18.2 → 0.18.4

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.
@@ -1,4 +1,4 @@
1
- import { readFile, stat } from "node:fs/promises";
1
+ import { readdir, readFile, stat } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { glob } from "glob";
@@ -114,6 +114,57 @@ export class CopilotScraper extends AbstractScraper {
114
114
  db.close();
115
115
  }
116
116
  }
117
+ // Newer VS Code keeps each chat in its own file beside the database rather
118
+ // than in the `interactive.sessions` blob, so a reader that only opened the
119
+ // database saw nothing from any recent session.
120
+ for (const dbPath of dbPaths) {
121
+ yield* this.readChatSessionFiles(dirname(dbPath), since);
122
+ }
123
+ }
124
+ /**
125
+ * Read the per-session files under `<workspace>/chatSessions/`.
126
+ *
127
+ * Two shapes live there. `.json` holds a session object directly — the same
128
+ * shape as the database blob, which is why parsing is shared. `.jsonl` wraps
129
+ * it, one record per line, under a `v` key; only the record carrying the
130
+ * session is of interest and the rest are editor bookkeeping.
131
+ *
132
+ * The `chat.ChatSessionStore.index` key in the database lists these too, but
133
+ * the directory is read directly: the files are the data, the index is a
134
+ * cache of it, and a stale index would silently hide sessions that exist.
135
+ */
136
+ async *readChatSessionFiles(workspaceDir, since) {
137
+ const sessionsDir = join(workspaceDir, "chatSessions");
138
+ let names;
139
+ try {
140
+ names = await readdir(sessionsDir);
141
+ }
142
+ catch {
143
+ // No chat-session directory: this workspace predates the format, or was
144
+ // never used for chat. Not a surprise.
145
+ return;
146
+ }
147
+ const sinceMs = since ? since.getTime() : 0;
148
+ for (const name of names) {
149
+ if (!name.endsWith(".json") && !name.endsWith(".jsonl")) {
150
+ continue;
151
+ }
152
+ const filePath = join(sessionsDir, name);
153
+ let raw;
154
+ try {
155
+ raw = await readFile(filePath, "utf-8");
156
+ }
157
+ catch (err) {
158
+ warnDrift(filePath, `chat session file unreadable: ${err.message}`, 0);
159
+ continue;
160
+ }
161
+ // The file name without its extension is the session id VS Code gave it,
162
+ // and the only identity an id-less session has.
163
+ const sessionKey = name.replace(/\.jsonl?$/, "");
164
+ for (const session of parseChatSessionFile(raw, name, filePath)) {
165
+ yield* this.readSession(session, sessionKey, filePath, sinceMs);
166
+ }
167
+ }
117
168
  }
118
169
  *readFromDb(db, dbPath, since) {
119
170
  let rawValue;
@@ -140,87 +191,114 @@ export class CopilotScraper extends AbstractScraper {
140
191
  warnDrift(dbPath, `interactive.sessions value is not valid JSON: ${err.message}`, 0);
141
192
  return;
142
193
  }
143
- if (!isRecord(sessionsMap)) {
144
- warnDrift(dbPath, `expected interactive.sessions to be an object, got ${describeType(sessionsMap)}`, 0);
194
+ // VS Code writes this key as an array, and always has on the machines
195
+ // checked: 64 workspaces, every one an array, 18 of them holding sessions.
196
+ // Requiring an object meant this reader produced nothing at all from real
197
+ // VS Code data — it only ever worked against its own fixtures. The entries
198
+ // themselves are the same shape either way, so only the container differs.
199
+ let sessionEntries;
200
+ if (Array.isArray(sessionsMap)) {
201
+ sessionEntries = sessionsMap.map((session, index) => [String(index), session]);
202
+ }
203
+ else if (isRecord(sessionsMap)) {
204
+ sessionEntries = Object.entries(sessionsMap);
205
+ }
206
+ else {
207
+ warnDrift(dbPath, `expected interactive.sessions to be an object or array, got ${describeType(sessionsMap)}`, 0);
145
208
  return;
146
209
  }
147
210
  const sinceMs = since ? since.getTime() : 0;
148
- for (const [sessionKey, rawSession] of Object.entries(sessionsMap)) {
149
- if (!isRecord(rawSession)) {
150
- warnDrift(`${dbPath}#${sessionKey}`, `session entry is not an object (got ${describeType(rawSession)})`, 0);
151
- continue;
152
- }
153
- const session = rawSession;
154
- const sessionId = session.sessionId ?? "unknown";
155
- if (session.sessionId === undefined) {
156
- warnDrift(`${dbPath}#${sessionKey}`, "session missing 'sessionId' field using fallback 'unknown'", 0);
157
- }
158
- if (session.creationDate === null || (session.creationDate !== undefined &&
159
- typeof session.creationDate !== "number" &&
160
- typeof session.creationDate !== "string")) {
161
- warnDrift(`${dbPath}#${sessionId}`, `expected 'creationDate' to be a number, got ${describeType(session.creationDate)}`, 0);
211
+ for (const [sessionKey, rawSession] of sessionEntries) {
212
+ yield* this.readSession(rawSession, sessionKey, dbPath, sinceMs);
213
+ }
214
+ }
215
+ /**
216
+ * Turn one stored session into chunks.
217
+ *
218
+ * Shared by both places VS Code keeps chat: the `interactive.sessions`
219
+ * blob in state.vscdb, and the per-session files under `chatSessions/`.
220
+ * The two differ only in where the object comes from, so the parsing —
221
+ * and every drift check in it is written once.
222
+ */
223
+ *readSession(rawSession, sessionKey, location, sinceMs) {
224
+ if (!isRecord(rawSession)) {
225
+ warnDrift(`${location}#${sessionKey}`, `session entry is not an object (got ${describeType(rawSession)})`, 0);
226
+ return;
227
+ }
228
+ const session = rawSession;
229
+ // `sessionKey` is the file name for on-disk sessions, which VS Code names
230
+ // after the session's own id. Falling back to a constant instead merged
231
+ // every id-less conversation into one `copilot:unknown` session with
232
+ // colliding message indexes — two unrelated chats interleaved as one.
233
+ const sessionId = session.sessionId ?? sessionKey ?? "unknown";
234
+ if (session.sessionId === undefined) {
235
+ warnDrift(`${location}#${sessionKey}`, "session missing 'sessionId' field — using fallback 'unknown'", 0);
236
+ }
237
+ if (session.creationDate === null || (session.creationDate !== undefined &&
238
+ typeof session.creationDate !== "number" &&
239
+ typeof session.creationDate !== "string")) {
240
+ warnDrift(`${location}#${sessionId}`, `expected 'creationDate' to be a number, got ${describeType(session.creationDate)}`, 0);
241
+ }
242
+ // Copilot only stamps a session-level creationDate — individual turns
243
+ // inherit it. Using creationDate for the scrape cursor drops whole
244
+ // sessions that existed before the cursor but gained NEW turns after
245
+ // it, causing permanent turn loss (P1 from review). Fix: emit every
246
+ // turn every cycle and rely on chunk-ID-based upsert dedupe upstream
247
+ // (the ID basis now includes messageIndex so duplicates collapse
248
+ // safely). Note: sinceMs is still referenced below so that a future
249
+ // per-turn timestamp upgrade only needs a narrow edit.
250
+ void sinceMs;
251
+ const creationDate = toDate(session.creationDate);
252
+ if (session.requests !== undefined && !Array.isArray(session.requests)) {
253
+ // Schema drift: 'requests' was renamed or retyped. This is the
254
+ // highest-risk mutation because it silently empties whole sessions.
255
+ warnDrift(`${location}#${sessionId}`, `expected 'requests' to be an array, got ${describeType(session.requests)}`, 0);
256
+ return;
257
+ }
258
+ if (!("requests" in rawSession)) {
259
+ // 'requests' is missing entirely. If any other non-whitelisted key
260
+ // looks like a request array, it's almost certainly a rename — warn.
261
+ // A truly empty pre-v1 session would have no array-shaped sibling.
262
+ const suspiciousRename = Object.entries(rawSession).find(([k, v]) => k !== "sessionId" && k !== "creationDate" && Array.isArray(v));
263
+ if (suspiciousRename) {
264
+ warnDrift(`${location}#${sessionId}`, `session has no 'requests' key; suspected rename to '${suspiciousRename[0]}'`, 0);
162
265
  }
163
- // Copilot only stamps a session-level creationDate — individual turns
164
- // inherit it. Using creationDate for the scrape cursor drops whole
165
- // sessions that existed before the cursor but gained NEW turns after
166
- // it, causing permanent turn loss (P1 from review). Fix: emit every
167
- // turn every cycle and rely on chunk-ID-based upsert dedupe upstream
168
- // (the ID basis now includes messageIndex so duplicates collapse
169
- // safely). Note: sinceMs is still referenced below so that a future
170
- // per-turn timestamp upgrade only needs a narrow edit.
171
- void sinceMs;
172
- const creationDate = toDate(session.creationDate);
173
- if (session.requests !== undefined && !Array.isArray(session.requests)) {
174
- // Schema drift: 'requests' was renamed or retyped. This is the
175
- // highest-risk mutation because it silently empties whole sessions.
176
- warnDrift(`${dbPath}#${sessionId}`, `expected 'requests' to be an array, got ${describeType(session.requests)}`, 0);
266
+ return;
267
+ }
268
+ const requests = Array.isArray(session.requests) ? session.requests : [];
269
+ let messageIndex = 0;
270
+ for (const req of requests) {
271
+ if (!isRecord(req)) {
272
+ warnDrift(`${location}#${sessionId}`, `request entry is not an object (got ${describeType(req)})`, 0);
177
273
  continue;
178
274
  }
179
- if (!("requests" in rawSession)) {
180
- // 'requests' is missing entirely. If any other non-whitelisted key
181
- // looks like a request array, it's almost certainly a rename — warn.
182
- // A truly empty pre-v1 session would have no array-shaped sibling.
183
- const suspiciousRename = Object.entries(rawSession).find(([k, v]) => k !== "sessionId" && k !== "creationDate" && Array.isArray(v));
184
- if (suspiciousRename) {
185
- warnDrift(`${dbPath}#${sessionId}`, `session has no 'requests' key; suspected rename to '${suspiciousRename[0]}'`, 0);
186
- }
275
+ if (req.isCanceled) {
276
+ // ACCEPTED_DEGRADATIONS.canceledRequest
187
277
  continue;
188
278
  }
189
- const requests = Array.isArray(session.requests) ? session.requests : [];
190
- let messageIndex = 0;
191
- for (const req of requests) {
192
- if (!isRecord(req)) {
193
- warnDrift(`${dbPath}#${sessionId}`, `request entry is not an object (got ${describeType(req)})`, 0);
194
- continue;
195
- }
196
- if (req.isCanceled) {
197
- // ACCEPTED_DEGRADATIONS.canceledRequest
198
- continue;
199
- }
200
- const userText = extractUserText(req);
201
- if (userText) {
202
- yield this.parseRaw({
203
- sessionId,
204
- role: "user",
205
- content: userText,
206
- timestamp: creationDate,
207
- model: req.model,
208
- completionType: req.agentId ? "agent" : "chat",
209
- messageIndex: messageIndex++,
210
- });
211
- }
212
- const assistantText = extractAssistantText(req);
213
- if (assistantText) {
214
- yield this.parseRaw({
215
- sessionId,
216
- role: "assistant",
217
- content: assistantText,
218
- timestamp: creationDate,
219
- model: req.model,
220
- completionType: req.agentId ? "agent" : "chat",
221
- messageIndex: messageIndex++,
222
- });
223
- }
279
+ const userText = extractUserText(req);
280
+ if (userText) {
281
+ yield this.parseRaw({
282
+ sessionId,
283
+ role: "user",
284
+ content: userText,
285
+ timestamp: creationDate,
286
+ model: req.model,
287
+ completionType: req.agentId ? "agent" : "chat",
288
+ messageIndex: messageIndex++,
289
+ });
290
+ }
291
+ const assistantText = extractAssistantText(req);
292
+ if (assistantText) {
293
+ yield this.parseRaw({
294
+ sessionId,
295
+ role: "assistant",
296
+ content: assistantText,
297
+ timestamp: creationDate,
298
+ model: req.model,
299
+ completionType: req.agentId ? "agent" : "chat",
300
+ messageIndex: messageIndex++,
301
+ });
224
302
  }
225
303
  }
226
304
  }
@@ -274,6 +352,118 @@ async function workspaceMatchesProject(workspaceDbPath, projectRoot) {
274
352
  }
275
353
  }
276
354
  /** Concatenates all text parts from a user message. */
355
+ /** A journal record: 0 replaces the whole state, 1 sets a path, 2 splices an array. */
356
+ const LOG_SNAPSHOT = 0;
357
+ const LOG_SET = 1;
358
+ const LOG_SPLICE = 2;
359
+ /**
360
+ * Rebuild a session from a `.jsonl` chat log.
361
+ *
362
+ * The file is a journal, not a list of sessions: the first record is a full
363
+ * snapshot and every record after it is one mutation — `k` is a key path, `v`
364
+ * the value, and for a splice `i` is where it goes. Reading it as "one session
365
+ * per line" found only the snapshot, whose `requests` array is empty because
366
+ * the turns arrive as later mutations, so a whole conversation read as an
367
+ * empty session and said nothing about it. One 182KB file on the machine this
368
+ * was written against holds four turns across 35 records.
369
+ *
370
+ * Turns are ordered by timestamp rather than by array position. A splice puts
371
+ * requests in the order the editor wants to draw them, which is not the order
372
+ * they happened — in that same file it places a later turn first.
373
+ */
374
+ function replayChatSessionLog(raw, location) {
375
+ let state = null;
376
+ for (const line of raw.split(/\r?\n/)) {
377
+ if (!line.trim())
378
+ continue;
379
+ let record;
380
+ try {
381
+ record = JSON.parse(line);
382
+ }
383
+ catch (err) {
384
+ warnDrift(location, `chat session line is not valid JSON: ${err.message}`, 0);
385
+ continue;
386
+ }
387
+ if (!isRecord(record))
388
+ continue;
389
+ if (record.kind === LOG_SNAPSHOT) {
390
+ state = isRecord(record.v) ? record.v : null;
391
+ continue;
392
+ }
393
+ // A mutation before any snapshot has nothing to apply to. Later records
394
+ // are still tried, in case a snapshot appears further down.
395
+ if (!state || !Array.isArray(record.k))
396
+ continue;
397
+ const path = record.k;
398
+ if (record.kind === LOG_SET) {
399
+ setAtPath(state, path, record.v);
400
+ }
401
+ else if (record.kind === LOG_SPLICE && Array.isArray(record.v)) {
402
+ const target = readAtPath(state, path);
403
+ if (Array.isArray(target)) {
404
+ if (typeof record.i === "number")
405
+ target.splice(record.i, 0, ...record.v);
406
+ else
407
+ target.push(...record.v);
408
+ }
409
+ }
410
+ }
411
+ if (!state) {
412
+ warnDrift(location, "chat session log has no snapshot record to rebuild from", 0);
413
+ return null;
414
+ }
415
+ if (Array.isArray(state.requests)) {
416
+ state.requests = sortRequestsByTime(state.requests);
417
+ }
418
+ return state;
419
+ }
420
+ /** Chronological where the data allows it, original order otherwise. */
421
+ function sortRequestsByTime(requests) {
422
+ const timed = requests.every((request) => isRecord(request) && typeof request.timestamp === "number");
423
+ if (!timed)
424
+ return requests;
425
+ return [...requests].sort((left, right) => (left.timestamp ?? 0) -
426
+ (right.timestamp ?? 0));
427
+ }
428
+ function readAtPath(root, path) {
429
+ let node = root;
430
+ for (const key of path) {
431
+ if (node === null || typeof node !== "object")
432
+ return undefined;
433
+ node = node[key];
434
+ }
435
+ return node;
436
+ }
437
+ function setAtPath(root, path, value) {
438
+ if (path.length === 0)
439
+ return;
440
+ const parent = readAtPath(root, path.slice(0, -1));
441
+ if (parent === null || typeof parent !== "object")
442
+ return;
443
+ parent[path[path.length - 1]] = value;
444
+ }
445
+ /**
446
+ * Pull the session objects out of one `chatSessions/` file.
447
+ *
448
+ * `.json` holds a session directly. `.jsonl` is a journal and is replayed.
449
+ *
450
+ * A file that does not parse is worth a warning: it is named like a session and
451
+ * sits where sessions live, so if it cannot be read something has changed.
452
+ */
453
+ export function* parseChatSessionFile(raw, name, location) {
454
+ if (name.endsWith(".jsonl")) {
455
+ const session = replayChatSessionLog(raw, location);
456
+ if (session)
457
+ yield session;
458
+ return;
459
+ }
460
+ try {
461
+ yield JSON.parse(raw);
462
+ }
463
+ catch (err) {
464
+ warnDrift(location, `chat session file is not valid JSON: ${err.message}`, 0);
465
+ }
466
+ }
277
467
  function extractUserText(req) {
278
468
  const parts = req.message?.parts;
279
469
  if (!Array.isArray(parts)) {
@@ -1 +1 @@
1
- {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/scrapers/copilot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/scrapers/copilot.ts"],"names":[],"mappings":"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"}
@@ -38,8 +38,40 @@ export declare class CursorScraper extends AbstractScraper<CursorChunk> {
38
38
  scrape(since?: Date): AsyncIterable<CursorChunk>;
39
39
  fullSync(): AsyncIterable<CursorChunk>;
40
40
  private readAllMessages;
41
+ /**
42
+ * Read conversations that globalStorage holds but no workspace lists.
43
+ *
44
+ * A workspace only keeps a composer in `composer.composerData` for as long as
45
+ * it cares to; globalStorage keeps the conversation. On one machine that was
46
+ * 165 referenced against 593 stored, so discovery through workspaces alone
47
+ * could not reach most of the history that exists.
48
+ *
49
+ * Attribution is the whole difficulty. A workspace-referenced composer
50
+ * belongs to that workspace's folder, and nothing else has to be decided. An
51
+ * orphan has no workspace, so it is attributed only by file paths recorded
52
+ * inside it. That is deliberately strict: matching on any mention of a
53
+ * project's name is what once handed one project another project's private
54
+ * transcripts, and a conversation that cannot be placed is skipped rather
55
+ * than guessed at.
56
+ */
57
+ private readUnreferencedComposers;
41
58
  private readWorkspaceComposers;
42
59
  private readComposerMessages;
43
60
  private resolveWorkspaceDatabasePaths;
44
61
  }
62
+ /**
63
+ * Whether a composer records a file inside the given project.
64
+ *
65
+ * Fails closed: a conversation with no recorded location is not attributed to
66
+ * anything, matching the project boundary the other readers hold to.
67
+ */
68
+ export declare function composerMentionsProject(composer: unknown, projectRoot: string): boolean;
69
+ /**
70
+ * globalStorage for a configured store path.
71
+ *
72
+ * The store is normally `<user>/workspaceStorage`, but it can also be pointed
73
+ * at a single workspace directory inside it, which is what the tests do and
74
+ * what a `storePath` override may do. Both resolve to the same sibling.
75
+ */
76
+ export declare function globalStoragePathForStore(storePath: string): string | null;
45
77
  //# sourceMappingURL=cursor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/scrapers/cursor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAA0B,MAAM,WAAW,CAAC;AAWpE;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAChC,iEAAiE;;IAEjE,2DAA2D;;IAE3D,wEAAwE;;IAExE,gDAAgD;;IAEhD,mEAAmE;;CAEpE,CAAC;AAmCF,qBAAa,aAAc,SAAQ,eAAe,CAAC,WAAW,CAAC;IAI3D,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL/B,QAAQ,CAAC,IAAI,YAAY;gBAGN,eAAe,EAAE,MAAM,EACxC,QAAQ,EAAE,MAAM,EACC,WAAW,CAAC,EAAE,MAAM,YAAA;IAKvC;;;;;;;;;;;OAWG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAqChC,aAAa,IAAI,MAAM,EAAE;IAIlB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC;IAMhD,QAAQ,IAAI,aAAa,CAAC,WAAW,CAAC;YAI9B,eAAe;IA2C9B,OAAO,CAAC,sBAAsB;IAyD9B,OAAO,CAAE,oBAAoB;YA+If,6BAA6B;CA+B5C"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/scrapers/cursor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAA0B,MAAM,WAAW,CAAC;AAWpE;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAChC,iEAAiE;;IAEjE,2DAA2D;;IAE3D,wEAAwE;;IAExE,gDAAgD;;IAEhD,mEAAmE;;CAEpE,CAAC;AAmCF,qBAAa,aAAc,SAAQ,eAAe,CAAC,WAAW,CAAC;IAI3D,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL/B,QAAQ,CAAC,IAAI,YAAY;gBAGN,eAAe,EAAE,MAAM,EACxC,QAAQ,EAAE,MAAM,EACC,WAAW,CAAC,EAAE,MAAM,YAAA;IAKvC;;;;;;;;;;;OAWG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAqChC,aAAa,IAAI,MAAM,EAAE;IAIlB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC;IAMhD,QAAQ,IAAI,aAAa,CAAC,WAAW,CAAC;YAI9B,eAAe;IAyD9B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAE,yBAAyB;IAmGlC,OAAO,CAAC,sBAAsB;IAyD9B,OAAO,CAAE,oBAAoB;YA+If,6BAA6B;CA+B5C;AAmDD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAEvF;AA+BD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1E"}