@tryglen/cli 0.24.10 → 0.26.1

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 (86) hide show
  1. package/README.md +55 -28
  2. package/dist/_utils/cli-error.d.ts +1 -0
  3. package/dist/_utils/cli-error.js.map +1 -1
  4. package/dist/_utils/config.d.ts +7 -0
  5. package/dist/_utils/config.js +7 -0
  6. package/dist/_utils/config.js.map +1 -1
  7. package/dist/_utils/parse-cursor-db.js +2 -0
  8. package/dist/_utils/parse-cursor-db.js.map +1 -1
  9. package/dist/_utils/refresh-control-state.d.ts +3 -0
  10. package/dist/_utils/refresh-control-state.js +24 -0
  11. package/dist/_utils/refresh-control-state.js.map +1 -0
  12. package/dist/_utils/sync-mode-from-server.d.ts +1 -2
  13. package/dist/_utils/sync-mode-from-server.js +28 -13
  14. package/dist/_utils/sync-mode-from-server.js.map +1 -1
  15. package/dist/bin.js +10 -0
  16. package/dist/bin.js.map +1 -1
  17. package/dist/commands/ingest.js +8 -4
  18. package/dist/commands/ingest.js.map +1 -1
  19. package/dist/commands/org.js +51 -4
  20. package/dist/commands/org.js.map +1 -1
  21. package/dist/commands/session-start.js +5 -1
  22. package/dist/commands/session-start.js.map +1 -1
  23. package/dist/commands/set-mode.d.ts +3 -4
  24. package/dist/commands/set-mode.js +20 -15
  25. package/dist/commands/set-mode.js.map +1 -1
  26. package/dist/commands/takeover/_utils/agent-paths.d.ts +6 -0
  27. package/dist/commands/takeover/_utils/agent-paths.js +23 -0
  28. package/dist/commands/takeover/_utils/agent-paths.js.map +1 -0
  29. package/dist/commands/takeover/_utils/archive-codex-desktop-thread.d.ts +5 -0
  30. package/dist/commands/takeover/_utils/archive-codex-desktop-thread.js +63 -0
  31. package/dist/commands/takeover/_utils/archive-codex-desktop-thread.js.map +1 -0
  32. package/dist/commands/takeover/_utils/canonical-digest.d.ts +5 -0
  33. package/dist/commands/takeover/_utils/canonical-digest.js +4 -0
  34. package/dist/commands/takeover/_utils/canonical-digest.js.map +1 -0
  35. package/dist/commands/takeover/_utils/codex-desktop-recovery.d.ts +16 -0
  36. package/dist/commands/takeover/_utils/codex-desktop-recovery.js +102 -0
  37. package/dist/commands/takeover/_utils/codex-desktop-recovery.js.map +1 -0
  38. package/dist/commands/takeover/_utils/context-fit.d.ts +18 -0
  39. package/dist/commands/takeover/_utils/context-fit.js +30 -0
  40. package/dist/commands/takeover/_utils/context-fit.js.map +1 -0
  41. package/dist/commands/takeover/_utils/cursor-store.d.ts +49 -0
  42. package/dist/commands/takeover/_utils/cursor-store.js +359 -0
  43. package/dist/commands/takeover/_utils/cursor-store.js.map +1 -0
  44. package/dist/commands/takeover/_utils/import-codex-desktop-thread.d.ts +14 -0
  45. package/dist/commands/takeover/_utils/import-codex-desktop-thread.js +293 -0
  46. package/dist/commands/takeover/_utils/import-codex-desktop-thread.js.map +1 -0
  47. package/dist/commands/takeover/_utils/launch-desktop-url.d.ts +4 -0
  48. package/dist/commands/takeover/_utils/launch-desktop-url.js +40 -0
  49. package/dist/commands/takeover/_utils/launch-desktop-url.js.map +1 -0
  50. package/dist/commands/takeover/_utils/native-file.d.ts +14 -0
  51. package/dist/commands/takeover/_utils/native-file.js +105 -0
  52. package/dist/commands/takeover/_utils/native-file.js.map +1 -0
  53. package/dist/commands/takeover/_utils/probe-agent.d.ts +20 -0
  54. package/dist/commands/takeover/_utils/probe-agent.js +37 -0
  55. package/dist/commands/takeover/_utils/probe-agent.js.map +1 -0
  56. package/dist/commands/takeover/_utils/provenance-context.d.ts +7 -0
  57. package/dist/commands/takeover/_utils/provenance-context.js +12 -0
  58. package/dist/commands/takeover/_utils/provenance-context.js.map +1 -0
  59. package/dist/commands/takeover/_utils/staged-session.d.ts +64 -0
  60. package/dist/commands/takeover/_utils/staged-session.js +30 -0
  61. package/dist/commands/takeover/_utils/staged-session.js.map +1 -0
  62. package/dist/commands/takeover/_utils/write-claude-desktop-session.d.ts +47 -0
  63. package/dist/commands/takeover/_utils/write-claude-desktop-session.js +24 -0
  64. package/dist/commands/takeover/_utils/write-claude-desktop-session.js.map +1 -0
  65. package/dist/commands/takeover/_utils/write-claude-session.d.ts +53 -0
  66. package/dist/commands/takeover/_utils/write-claude-session.js +132 -0
  67. package/dist/commands/takeover/_utils/write-claude-session.js.map +1 -0
  68. package/dist/commands/takeover/_utils/write-codex-desktop-session.d.ts +96 -0
  69. package/dist/commands/takeover/_utils/write-codex-desktop-session.js +272 -0
  70. package/dist/commands/takeover/_utils/write-codex-desktop-session.js.map +1 -0
  71. package/dist/commands/takeover/_utils/write-codex-session.d.ts +52 -0
  72. package/dist/commands/takeover/_utils/write-codex-session.js +117 -0
  73. package/dist/commands/takeover/_utils/write-codex-session.js.map +1 -0
  74. package/dist/commands/takeover/_utils/write-cursor-session.d.ts +57 -0
  75. package/dist/commands/takeover/_utils/write-cursor-session.js +174 -0
  76. package/dist/commands/takeover/_utils/write-cursor-session.js.map +1 -0
  77. package/dist/commands/takeover/_utils/write-pi-session.d.ts +52 -0
  78. package/dist/commands/takeover/_utils/write-pi-session.js +173 -0
  79. package/dist/commands/takeover/_utils/write-pi-session.js.map +1 -0
  80. package/dist/commands/takeover/index.d.ts +21 -0
  81. package/dist/commands/takeover/index.js +201 -0
  82. package/dist/commands/takeover/index.js.map +1 -0
  83. package/dist/commands/takeover/takeover.schema.d.ts +24 -0
  84. package/dist/commands/takeover/takeover.schema.js +66 -0
  85. package/dist/commands/takeover/takeover.schema.js.map +1 -0
  86. package/package.json +1 -1
@@ -0,0 +1,359 @@
1
+ import { existsSync } from "node:fs";
2
+ import { copyFile, mkdtemp, readFile, readdir, rm, } from "node:fs/promises";
3
+ import { homedir, tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { pathToFileURL } from "node:url";
6
+ import { causeOf, cliErr } from "../../../_utils/cli-error.js";
7
+ import { err, fromPromise, ok } from "../../../_utils/result.js";
8
+ import { runBin } from "../../../_utils/run-bin.js";
9
+ const loadSqlite = async () => {
10
+ try {
11
+ const specifier = "node:sqlite";
12
+ const sqlite = (await import(specifier));
13
+ return sqlite.DatabaseSync ?? null;
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ };
19
+ const cursorRoot = () => process.env.GLEN_CURSOR_USER_DATA ??
20
+ (process.platform === "darwin"
21
+ ? join(homedir(), "Library", "Application Support", "Cursor")
22
+ : process.platform === "win32"
23
+ ? join(process.env.APPDATA ?? "", "Cursor")
24
+ : join(homedir(), ".config", "Cursor"));
25
+ const databaseFiles = (path) => ["", "-wal", "-shm"]
26
+ .map((suffix) => ({ path: `${path}${suffix}`, suffix }))
27
+ .filter((file) => existsSync(file.path));
28
+ const copyDatabaseFiles = (source, destination) => Promise.all(databaseFiles(source).map((file) => copyFile(file.path, `${destination}${file.suffix}`)));
29
+ const workspaceDb = async (workspace) => {
30
+ if (process.env.GLEN_CURSOR_WORKSPACE_DB)
31
+ return process.env.GLEN_CURSOR_WORKSPACE_DB;
32
+ const root = join(cursorRoot(), "User", "workspaceStorage");
33
+ const directories = await fromPromise(readdir(root, { withFileTypes: true }));
34
+ if (!directories.ok)
35
+ return null;
36
+ const expected = pathToFileURL(workspace).href.replace(/\/$/, "");
37
+ const matches = await Promise.all(directories.value
38
+ .filter((entry) => entry.isDirectory())
39
+ .map(async (entry) => {
40
+ const directory = join(root, entry.name);
41
+ const raw = await fromPromise(readFile(join(directory, "workspace.json"), "utf8"));
42
+ if (!raw.ok)
43
+ return null;
44
+ try {
45
+ const parsed = JSON.parse(raw.value);
46
+ return typeof parsed.folder === "string" &&
47
+ parsed.folder.replace(/\/$/, "") === expected
48
+ ? join(directory, "state.vscdb")
49
+ : null;
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }));
55
+ return matches.find((match) => match !== null) ?? null;
56
+ };
57
+ const cursorIsRunning = () => {
58
+ if (process.env.GLEN_CURSOR_TEST_CLOSED === "1")
59
+ return false;
60
+ if (process.platform === "win32") {
61
+ const listed = runBin("tasklist", ["/FI", "IMAGENAME eq Cursor.exe"], {
62
+ timeoutMs: 3000,
63
+ });
64
+ return listed.ok && /Cursor\.exe/i.test(listed.value.stdout);
65
+ }
66
+ return runBin("pgrep", ["-f", "Cursor(.app/Contents/MacOS/Cursor)?"], {
67
+ timeoutMs: 3000,
68
+ }).ok;
69
+ };
70
+ const schemaSupported = (db) => {
71
+ const tables = new Set(db
72
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table'")
73
+ .all()
74
+ .map((row) => row.name)
75
+ .filter((name) => typeof name === "string"));
76
+ if (!tables.has("cursorDiskKV") || !tables.has("composerHeaders"))
77
+ return false;
78
+ const headerColumns = new Set(db
79
+ .prepare("PRAGMA table_info(composerHeaders)")
80
+ .all()
81
+ .map((row) => row.name)
82
+ .filter((name) => typeof name === "string"));
83
+ return [
84
+ "composerId",
85
+ "workspaceId",
86
+ "createdAt",
87
+ "lastUpdatedAt",
88
+ "isArchived",
89
+ "isSubagent",
90
+ "recency",
91
+ "checkpointAt",
92
+ "value",
93
+ ].every((column) => headerColumns.has(column));
94
+ };
95
+ const mutate = (db, input) => {
96
+ db.prepare("INSERT INTO cursorDiskKV(key, value) VALUES (?, ?)").run(`composerData:${input.sessionId}`, input.composer);
97
+ const insertBubble = db.prepare("INSERT INTO cursorDiskKV(key, value) VALUES (?, ?)");
98
+ for (const bubble of input.bubbles)
99
+ insertBubble.run(bubble.key, bubble.value);
100
+ db.prepare("INSERT INTO composerHeaders(composerId, workspaceId, createdAt, lastUpdatedAt, isArchived, isSubagent, recency, checkpointAt, value) VALUES (?, ?, ?, ?, 0, 0, ?, NULL, ?)").run(input.sessionId, input.workspaceId, input.now, input.now, input.now, input.header);
101
+ db.prepare("INSERT OR REPLACE INTO workspace_db.ItemTable(key, value) VALUES (?, ?)").run("composer.composerData", input.workspaceIndex);
102
+ };
103
+ const attach = (db, path) => db.exec(`ATTACH DATABASE '${path.replaceAll("'", "''")}' AS workspace_db`);
104
+ const cursorStore = {
105
+ async locate(workspace) {
106
+ const globalDb = process.env.GLEN_CURSOR_GLOBAL_DB ??
107
+ join(cursorRoot(), "User", "globalStorage", "state.vscdb");
108
+ const matched = await workspaceDb(workspace);
109
+ if (!existsSync(globalDb) || !matched || !existsSync(matched))
110
+ return err(cliErr({
111
+ what: "Cursor has not initialized this workspace for local chat history",
112
+ path: matched ?? globalDb,
113
+ remedy: "open this folder in Cursor once, close Cursor completely, then retry the takeover",
114
+ }));
115
+ return ok({
116
+ globalDb,
117
+ workspaceDb: matched,
118
+ workspaceId: matched.split(/[\\/]/).at(-2) ?? "",
119
+ });
120
+ },
121
+ async probe(paths) {
122
+ if ((Number(process.versions.node.split(".")[0]) || 0) < 22)
123
+ return err(cliErr({
124
+ what: "Cursor takeover needs Node.js 22.5 or newer",
125
+ remedy: "run the takeover with Node.js 22.5+; no database was changed",
126
+ }));
127
+ if (cursorIsRunning())
128
+ return err(cliErr({
129
+ what: "Cursor is still running",
130
+ remedy: "quit every Cursor window and wait a moment, then retry; no database was changed",
131
+ }));
132
+ const DatabaseSync = await loadSqlite();
133
+ if (!DatabaseSync)
134
+ return err(cliErr({
135
+ what: "this Node.js runtime does not provide node:sqlite",
136
+ remedy: "run the takeover with Node.js 22.5+",
137
+ }));
138
+ const checked = (() => {
139
+ try {
140
+ const global = new DatabaseSync(paths.globalDb, { readOnly: true });
141
+ const workspace = new DatabaseSync(paths.workspaceDb, {
142
+ readOnly: true,
143
+ });
144
+ const supported = schemaSupported(global) &&
145
+ workspace
146
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='ItemTable'")
147
+ .get() !== undefined;
148
+ global.close();
149
+ workspace.close();
150
+ return supported;
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ })();
156
+ return checked
157
+ ? ok(undefined)
158
+ : err(cliErr({
159
+ what: "this Cursor local-history schema is not supported",
160
+ remedy: "update Glen and Cursor, then retry; no database was changed",
161
+ }));
162
+ },
163
+ async stage(paths, input) {
164
+ const safe = await this.probe(paths);
165
+ if (!safe.ok)
166
+ return safe;
167
+ const directory = await fromPromise(mkdtemp(join(tmpdir(), "glen-cursor-takeover-")));
168
+ if (!directory.ok)
169
+ return err(cliErr({
170
+ what: "could not create Cursor takeover staging",
171
+ why: causeOf(directory.error),
172
+ remedy: "check temporary-directory permissions, then retry",
173
+ }));
174
+ const globalCopy = join(directory.value, "global.vscdb");
175
+ const workspaceCopy = join(directory.value, "workspace.vscdb");
176
+ const copied = await fromPromise(Promise.all([
177
+ copyDatabaseFiles(paths.globalDb, globalCopy),
178
+ copyDatabaseFiles(paths.workspaceDb, workspaceCopy),
179
+ ]));
180
+ if (!copied.ok) {
181
+ await rm(directory.value, { recursive: true, force: true });
182
+ return err(cliErr({
183
+ what: "could not copy the Cursor databases for staging",
184
+ why: causeOf(copied.error),
185
+ remedy: "confirm Cursor is closed and the databases are readable",
186
+ }));
187
+ }
188
+ const DatabaseSync = await loadSqlite();
189
+ if (!DatabaseSync) {
190
+ await rm(directory.value, { recursive: true, force: true });
191
+ return err(cliErr({
192
+ what: "node:sqlite became unavailable",
193
+ remedy: "retry with Node.js 22.5+",
194
+ }));
195
+ }
196
+ const written = (() => {
197
+ try {
198
+ const global = new DatabaseSync(globalCopy);
199
+ attach(global, workspaceCopy);
200
+ global.exec("BEGIN IMMEDIATE");
201
+ const storedIndex = global
202
+ .prepare("SELECT value FROM workspace_db.ItemTable WHERE key = 'composer.composerData'")
203
+ .get()?.value;
204
+ const parsedIndex = (() => {
205
+ try {
206
+ const value = typeof storedIndex === "string"
207
+ ? JSON.parse(storedIndex)
208
+ : null;
209
+ return value !== null && typeof value === "object"
210
+ ? value
211
+ : {};
212
+ }
213
+ catch {
214
+ return {};
215
+ }
216
+ })();
217
+ mutate(global, {
218
+ ...input,
219
+ workspaceIndex: JSON.stringify({
220
+ ...parsedIndex,
221
+ selectedComposerIds: [input.sessionId],
222
+ lastFocusedComposerIds: [input.sessionId],
223
+ hasMigratedComposerData: true,
224
+ hasMigratedMultipleComposers: true,
225
+ }),
226
+ });
227
+ global.exec("COMMIT");
228
+ global.close();
229
+ return ok(undefined);
230
+ }
231
+ catch (error) {
232
+ return err(error);
233
+ }
234
+ })();
235
+ if (!written.ok) {
236
+ await rm(directory.value, { recursive: true, force: true });
237
+ return err(cliErr({
238
+ what: "could not stage the Cursor conversation",
239
+ why: causeOf(written.error),
240
+ remedy: "update Glen and Cursor, then retry",
241
+ }));
242
+ }
243
+ return ok({ path: directory.value });
244
+ },
245
+ async install(paths, stagedDirectory, sessionId) {
246
+ const safe = await this.probe(paths);
247
+ if (!safe.ok)
248
+ return safe;
249
+ const suffix = new Date().toISOString().replace(/[:.]/g, "-");
250
+ const backupSets = [paths.globalDb, paths.workspaceDb].map((source) => ({
251
+ source,
252
+ destination: `${source}.glen-takeover-${suffix}.bak`,
253
+ }));
254
+ const backups = backupSets.flatMap(({ source, destination }) => databaseFiles(source).map((file) => `${destination}${file.suffix}`));
255
+ const backedUp = await fromPromise(Promise.all(backupSets.map(({ source, destination }) => copyDatabaseFiles(source, destination))));
256
+ if (!backedUp.ok)
257
+ return err(cliErr({
258
+ what: "could not back up Cursor before takeover",
259
+ why: causeOf(backedUp.error),
260
+ remedy: "check disk space and database permissions, then retry",
261
+ }));
262
+ const DatabaseSync = await loadSqlite();
263
+ if (!DatabaseSync)
264
+ return err(cliErr({
265
+ what: "node:sqlite became unavailable",
266
+ remedy: "retry with Node.js 22.5+",
267
+ }));
268
+ const applied = (() => {
269
+ try {
270
+ const stagedGlobal = new DatabaseSync(join(stagedDirectory, "global.vscdb"), { readOnly: true });
271
+ const stagedWorkspace = new DatabaseSync(join(stagedDirectory, "workspace.vscdb"), { readOnly: true });
272
+ const composer = stagedGlobal
273
+ .prepare("SELECT value FROM cursorDiskKV WHERE key = ?")
274
+ .get(`composerData:${sessionId}`)?.value;
275
+ const bubbles = stagedGlobal
276
+ .prepare("SELECT key, value FROM cursorDiskKV WHERE key LIKE ?")
277
+ .all(`bubbleId:${sessionId}:%`);
278
+ const header = stagedGlobal
279
+ .prepare("SELECT * FROM composerHeaders WHERE composerId = ?")
280
+ .get(sessionId);
281
+ const workspaceIndex = stagedWorkspace
282
+ .prepare("SELECT value FROM ItemTable WHERE key = 'composer.composerData'")
283
+ .get()?.value;
284
+ stagedGlobal.close();
285
+ stagedWorkspace.close();
286
+ if (typeof composer !== "string" ||
287
+ !header ||
288
+ typeof workspaceIndex !== "string")
289
+ return err(new Error("staged Cursor rows are incomplete"));
290
+ const global = new DatabaseSync(paths.globalDb);
291
+ try {
292
+ attach(global, paths.workspaceDb);
293
+ global.exec("BEGIN IMMEDIATE");
294
+ const existing = global
295
+ .prepare("SELECT value FROM cursorDiskKV WHERE key = ?")
296
+ .get(`composerData:${sessionId}`)?.value;
297
+ const existingHeader = global
298
+ .prepare("SELECT value FROM composerHeaders WHERE composerId = ?")
299
+ .get(sessionId)?.value;
300
+ const existingBubbles = global
301
+ .prepare("SELECT key, value FROM cursorDiskKV WHERE key LIKE ? ORDER BY key")
302
+ .all(`bubbleId:${sessionId}:%`);
303
+ const expectedBubbles = [...bubbles].sort((first, second) => String(first.key).localeCompare(String(second.key)));
304
+ const existingMatches = existing === composer &&
305
+ existingHeader === header.value &&
306
+ JSON.stringify(existingBubbles) === JSON.stringify(expectedBubbles);
307
+ if (existing !== undefined && !existingMatches) {
308
+ global.exec("ROLLBACK");
309
+ global.close();
310
+ return err(new Error("destination composer already exists with different content"));
311
+ }
312
+ if (existing === undefined) {
313
+ global
314
+ .prepare("INSERT INTO cursorDiskKV(key, value) VALUES (?, ?)")
315
+ .run(`composerData:${sessionId}`, composer);
316
+ const insertBubble = global.prepare("INSERT INTO cursorDiskKV(key, value) VALUES (?, ?)");
317
+ for (const bubble of bubbles)
318
+ insertBubble.run(bubble.key, bubble.value);
319
+ global
320
+ .prepare("INSERT INTO composerHeaders(composerId, workspaceId, createdAt, lastUpdatedAt, isArchived, isSubagent, recency, checkpointAt, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")
321
+ .run(header.composerId, header.workspaceId, header.createdAt, header.lastUpdatedAt, header.isArchived, header.isSubagent, header.recency, header.checkpointAt ?? null, header.value);
322
+ }
323
+ global
324
+ .prepare("INSERT OR REPLACE INTO workspace_db.ItemTable(key, value) VALUES ('composer.composerData', ?)")
325
+ .run(workspaceIndex);
326
+ global.exec("COMMIT");
327
+ global.close();
328
+ return ok(undefined);
329
+ }
330
+ catch (error) {
331
+ try {
332
+ global.exec("ROLLBACK");
333
+ }
334
+ catch {
335
+ // A failed BEGIN or an auto-rolled-back SQLite error has no active transaction.
336
+ }
337
+ global.close();
338
+ return err(error);
339
+ }
340
+ }
341
+ catch (error) {
342
+ return err(error);
343
+ }
344
+ })();
345
+ return applied.ok
346
+ ? ok({ backups })
347
+ : err(cliErr({
348
+ what: "Cursor takeover rolled back before completion",
349
+ why: causeOf(applied.error),
350
+ path: backups.join(" and "),
351
+ remedy: "keep the backups, confirm Cursor is closed, and retry; no existing conversation was overwritten",
352
+ }));
353
+ },
354
+ async cleanup(path) {
355
+ await rm(path, { recursive: true, force: true });
356
+ },
357
+ };
358
+ export { cursorStore };
359
+ //# sourceMappingURL=cursor-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-store.js","sourceRoot":"","sources":["../../../../src/commands/takeover/_utils/cursor-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type CliError } from "../../../_utils/cli-error.js";
2
+ import { type Result } from "../../../_utils/result.js";
3
+ declare const importCodexDesktopThread: (input: {
4
+ readonly binary: string;
5
+ readonly workspace: string;
6
+ readonly name: string | null;
7
+ readonly sessionPath: string;
8
+ readonly messages: readonly {
9
+ readonly role: "user" | "assistant";
10
+ readonly content: string;
11
+ }[];
12
+ readonly provenanceItem: Record<string, unknown>;
13
+ }) => Promise<Result<string, CliError>>;
14
+ export { importCodexDesktopThread };