@akiojin/gwt 3.1.0 → 3.1.2

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 (65) hide show
  1. package/README.ja.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/cli/ui/components/App.d.ts.map +1 -1
  4. package/dist/cli/ui/components/App.js +8 -8
  5. package/dist/cli/ui/components/App.js.map +1 -1
  6. package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +1 -1
  7. package/dist/cli/ui/components/screens/BranchListScreen.js +9 -5
  8. package/dist/cli/ui/components/screens/BranchListScreen.js.map +1 -1
  9. package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -1
  10. package/dist/cli/ui/utils/branchFormatter.js +2 -2
  11. package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/utils/session/common.d.ts +100 -0
  15. package/dist/utils/session/common.d.ts.map +1 -0
  16. package/dist/utils/session/common.js +417 -0
  17. package/dist/utils/session/common.js.map +1 -0
  18. package/dist/utils/session/index.d.ts +16 -0
  19. package/dist/utils/session/index.d.ts.map +1 -0
  20. package/dist/utils/session/index.js +20 -0
  21. package/dist/utils/session/index.js.map +1 -0
  22. package/dist/utils/session/parsers/claude.d.ts +56 -0
  23. package/dist/utils/session/parsers/claude.d.ts.map +1 -0
  24. package/dist/utils/session/parsers/claude.js +178 -0
  25. package/dist/utils/session/parsers/claude.js.map +1 -0
  26. package/dist/utils/session/parsers/codex.d.ts +37 -0
  27. package/dist/utils/session/parsers/codex.d.ts.map +1 -0
  28. package/dist/utils/session/parsers/codex.js +113 -0
  29. package/dist/utils/session/parsers/codex.js.map +1 -0
  30. package/dist/utils/session/parsers/gemini.d.ts +22 -0
  31. package/dist/utils/session/parsers/gemini.d.ts.map +1 -0
  32. package/dist/utils/session/parsers/gemini.js +81 -0
  33. package/dist/utils/session/parsers/gemini.js.map +1 -0
  34. package/dist/utils/session/parsers/index.d.ts +8 -0
  35. package/dist/utils/session/parsers/index.d.ts.map +1 -0
  36. package/dist/utils/session/parsers/index.js +12 -0
  37. package/dist/utils/session/parsers/index.js.map +1 -0
  38. package/dist/utils/session/parsers/qwen.d.ts +21 -0
  39. package/dist/utils/session/parsers/qwen.d.ts.map +1 -0
  40. package/dist/utils/session/parsers/qwen.js +36 -0
  41. package/dist/utils/session/parsers/qwen.js.map +1 -0
  42. package/dist/utils/session/types.d.ts +38 -0
  43. package/dist/utils/session/types.d.ts.map +1 -0
  44. package/dist/utils/session/types.js +5 -0
  45. package/dist/utils/session/types.js.map +1 -0
  46. package/dist/utils/session.d.ts +14 -79
  47. package/dist/utils/session.d.ts.map +1 -1
  48. package/dist/utils/session.js +14 -585
  49. package/dist/utils/session.js.map +1 -1
  50. package/package.json +1 -1
  51. package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +40 -1
  52. package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +1 -1
  53. package/src/cli/ui/components/App.tsx +10 -8
  54. package/src/cli/ui/components/screens/BranchListScreen.tsx +8 -6
  55. package/src/cli/ui/utils/branchFormatter.ts +2 -3
  56. package/src/index.ts +1 -1
  57. package/src/utils/session/common.ts +446 -0
  58. package/src/utils/session/index.ts +46 -0
  59. package/src/utils/session/parsers/claude.ts +233 -0
  60. package/src/utils/session/parsers/codex.ts +135 -0
  61. package/src/utils/session/parsers/gemini.ts +94 -0
  62. package/src/utils/session/parsers/index.ts +28 -0
  63. package/src/utils/session/parsers/qwen.ts +54 -0
  64. package/src/utils/session/types.ts +42 -0
  65. package/src/utils/session.ts +14 -755
@@ -1,588 +1,17 @@
1
- import path from "node:path";
2
- import { homedir } from "node:os";
3
- import { readdir, readFile, stat } from "node:fs/promises";
4
- const UUID_REGEX = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
5
1
  /**
6
- * Validates that a string is a properly formatted UUID session ID.
7
- * @param id - The string to validate
8
- * @returns true if the string is a valid UUID format
2
+ * Session utilities - backward compatibility layer
3
+ *
4
+ * This file re-exports all session-related functions and types from the
5
+ * modularized session directory structure. Existing imports from this file
6
+ * will continue to work without modification.
7
+ *
8
+ * For new code, consider importing directly from:
9
+ * - ./session/types.js - Type definitions
10
+ * - ./session/common.js - Common utilities
11
+ * - ./session/parsers/claude.js - Claude-specific functions
12
+ * - ./session/parsers/codex.js - Codex-specific functions
13
+ * - ./session/parsers/gemini.js - Gemini-specific functions
14
+ * - ./session/parsers/qwen.js - Qwen-specific functions
9
15
  */
10
- export function isValidUuidSessionId(id) {
11
- return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id);
12
- }
13
- function pickSessionIdFromObject(obj) {
14
- if (!obj || typeof obj !== "object")
15
- return null;
16
- const candidate = obj;
17
- const keys = ["sessionId", "session_id", "id", "conversation_id"];
18
- for (const key of keys) {
19
- const value = candidate[key];
20
- if (typeof value === "string" && value.trim().length > 0) {
21
- const trimmed = value.trim();
22
- // Only accept values that are valid UUIDs to avoid picking up arbitrary strings
23
- if (isValidUuidSessionId(trimmed)) {
24
- return trimmed;
25
- }
26
- }
27
- }
28
- return null;
29
- }
30
- function pickCwdFromObject(obj) {
31
- if (!obj || typeof obj !== "object")
32
- return null;
33
- const candidate = obj;
34
- const keys = [
35
- "cwd",
36
- "workingDirectory",
37
- "workdir",
38
- "directory",
39
- "projectPath",
40
- ];
41
- for (const key of keys) {
42
- const value = candidate[key];
43
- if (typeof value === "string" && value.trim().length > 0) {
44
- return value;
45
- }
46
- }
47
- // Check nested payload object (for Codex session format)
48
- const payload = candidate["payload"];
49
- if (payload && typeof payload === "object") {
50
- const nested = pickCwdFromObject(payload);
51
- if (nested)
52
- return nested;
53
- }
54
- return null;
55
- }
56
- function pickSessionIdFromText(content) {
57
- // Try whole content as JSON
58
- try {
59
- const parsed = JSON.parse(content);
60
- const fromObject = pickSessionIdFromObject(parsed);
61
- if (fromObject)
62
- return fromObject;
63
- }
64
- catch {
65
- // ignore
66
- }
67
- // Try JSONL lines
68
- const lines = content.split(/\r?\n/);
69
- for (const line of lines) {
70
- const trimmed = line.trim();
71
- if (!trimmed)
72
- continue;
73
- try {
74
- const parsedLine = JSON.parse(trimmed);
75
- const fromLine = pickSessionIdFromObject(parsedLine);
76
- if (fromLine)
77
- return fromLine;
78
- }
79
- catch {
80
- // ignore
81
- }
82
- const match = trimmed.match(UUID_REGEX);
83
- if (match)
84
- return match[0];
85
- }
86
- // Fallback: find any UUID in the whole text
87
- const match = content.match(UUID_REGEX);
88
- return match ? match[0] : null;
89
- }
90
- async function findLatestFile(dir, filter) {
91
- try {
92
- const entries = await readdir(dir, { withFileTypes: true });
93
- const files = entries.filter((e) => e.isFile()).map((e) => e.name);
94
- const filtered = files.filter(filter);
95
- if (!filtered.length)
96
- return null;
97
- const withStats = await Promise.all(filtered.map(async (name) => {
98
- const fullPath = path.join(dir, name);
99
- try {
100
- const info = await stat(fullPath);
101
- return { fullPath, mtime: info.mtimeMs };
102
- }
103
- catch {
104
- return null;
105
- }
106
- }));
107
- const valid = withStats.filter((entry) => Boolean(entry));
108
- if (!valid.length)
109
- return null;
110
- valid.sort((a, b) => b.mtime - a.mtime);
111
- return valid[0]?.fullPath ?? null;
112
- }
113
- catch {
114
- return null;
115
- }
116
- }
117
- async function findNewestSessionIdFromDir(dir, recursive, options = {}) {
118
- try {
119
- const files = [];
120
- const processDir = async (currentDir) => {
121
- const currentEntries = await readdir(currentDir, { withFileTypes: true });
122
- for (const entry of currentEntries) {
123
- const fullPath = path.join(currentDir, entry.name);
124
- if (entry.isDirectory()) {
125
- if (recursive) {
126
- await processDir(fullPath);
127
- }
128
- continue;
129
- }
130
- if (!entry.isFile())
131
- continue;
132
- if (!entry.name.endsWith(".json") && !entry.name.endsWith(".jsonl"))
133
- continue;
134
- try {
135
- const info = await stat(fullPath);
136
- files.push({ fullPath, mtime: info.mtimeMs });
137
- }
138
- catch {
139
- // ignore unreadable
140
- }
141
- }
142
- };
143
- await processDir(dir);
144
- // Apply since/until filters clearly
145
- const filtered = files.filter((f) => {
146
- if (options.since !== undefined && f.mtime < options.since)
147
- return false;
148
- if (options.until !== undefined && f.mtime > options.until)
149
- return false;
150
- return true;
151
- });
152
- if (!filtered.length)
153
- return null;
154
- // Sort by mtime descending (newest first)
155
- let pool = filtered.sort((a, b) => b.mtime - a.mtime);
156
- // Apply preferClosestTo window if specified
157
- const ref = options.preferClosestTo;
158
- if (typeof ref === "number") {
159
- const window = options.windowMs ?? 30 * 60 * 1000;
160
- const withinWindow = pool.filter((f) => Math.abs(f.mtime - ref) <= window);
161
- if (withinWindow.length) {
162
- pool = withinWindow.sort((a, b) => b.mtime - a.mtime);
163
- }
164
- }
165
- for (const file of pool) {
166
- const id = await readSessionIdFromFile(file.fullPath);
167
- if (id)
168
- return { id, mtime: file.mtime };
169
- }
170
- }
171
- catch {
172
- // ignore
173
- }
174
- return null;
175
- }
176
- async function readSessionIdFromFile(filePath) {
177
- try {
178
- // Priority 1: Use filename UUID (most reliable for Claude session files)
179
- // Claude session files are named with their session ID: {uuid}.jsonl
180
- const basename = path.basename(filePath);
181
- const filenameWithoutExt = basename.replace(/\.(json|jsonl)$/i, "");
182
- if (isValidUuidSessionId(filenameWithoutExt)) {
183
- return filenameWithoutExt;
184
- }
185
- // Priority 2: Extract from file content (for other formats)
186
- const content = await readFile(filePath, "utf-8");
187
- const fromContent = pickSessionIdFromText(content);
188
- if (fromContent)
189
- return fromContent;
190
- // Priority 3: Fallback to any UUID in filename
191
- const filenameMatch = basename.match(UUID_REGEX);
192
- return filenameMatch ? filenameMatch[0] : null;
193
- }
194
- catch {
195
- return null;
196
- }
197
- }
198
- async function readSessionInfoFromFile(filePath) {
199
- try {
200
- const content = await readFile(filePath, "utf-8");
201
- try {
202
- const parsed = JSON.parse(content);
203
- const id = pickSessionIdFromObject(parsed);
204
- const cwd = pickCwdFromObject(parsed);
205
- if (id || cwd)
206
- return { id, cwd };
207
- }
208
- catch {
209
- // ignore
210
- }
211
- const lines = content.split(/\r?\n/);
212
- for (const line of lines) {
213
- const trimmed = line.trim();
214
- if (!trimmed)
215
- continue;
216
- try {
217
- const parsedLine = JSON.parse(trimmed);
218
- const id = pickSessionIdFromObject(parsedLine);
219
- const cwd = pickCwdFromObject(parsedLine);
220
- if (id || cwd)
221
- return { id, cwd };
222
- }
223
- catch {
224
- // ignore
225
- }
226
- }
227
- // Fallback: filename UUID
228
- const filenameMatch = path.basename(filePath).match(UUID_REGEX);
229
- if (filenameMatch)
230
- return { id: filenameMatch[0], cwd: null };
231
- }
232
- catch {
233
- // ignore unreadable
234
- }
235
- return { id: null, cwd: null };
236
- }
237
- async function collectFilesRecursive(dir, filter) {
238
- const results = [];
239
- try {
240
- const entries = await readdir(dir, { withFileTypes: true });
241
- for (const entry of entries) {
242
- const fullPath = path.join(dir, entry.name);
243
- if (entry.isDirectory()) {
244
- const nested = await collectFilesRecursive(fullPath, filter);
245
- results.push(...nested);
246
- }
247
- else if (entry.isFile() && filter(entry.name)) {
248
- try {
249
- const info = await stat(fullPath);
250
- results.push({ fullPath, mtime: info.mtimeMs });
251
- }
252
- catch {
253
- // ignore unreadable file
254
- }
255
- }
256
- }
257
- }
258
- catch {
259
- // ignore unreadable directory
260
- }
261
- return results;
262
- }
263
- export async function findLatestCodexSession(options = {}) {
264
- // Codex CLI respects CODEX_HOME. Default is ~/.codex.
265
- const codexHome = process.env.CODEX_HOME ?? path.join(homedir(), ".codex");
266
- const baseDir = path.join(codexHome, "sessions");
267
- const candidates = await collectFilesRecursive(baseDir, (name) => name.endsWith(".json") || name.endsWith(".jsonl"));
268
- if (!candidates.length)
269
- return null;
270
- const sinceFiltered = options.since
271
- ? candidates.filter((c) => c.mtime >= options.since)
272
- : candidates;
273
- const bounded = options.until !== undefined
274
- ? sinceFiltered.filter((c) => c.mtime <= options.until)
275
- : sinceFiltered;
276
- const hasWindow = options.since !== undefined || options.until !== undefined;
277
- const pool = bounded.length ? bounded : hasWindow ? [] : sinceFiltered;
278
- if (!pool.length)
279
- return null;
280
- const ref = options.preferClosestTo;
281
- const window = options.windowMs ?? 30 * 60 * 1000; // 30 minutes default
282
- const ordered = [...pool].sort((a, b) => {
283
- if (typeof ref === "number") {
284
- const da = Math.abs(a.mtime - ref);
285
- const db = Math.abs(b.mtime - ref);
286
- if (da === db)
287
- return b.mtime - a.mtime;
288
- if (da <= window || db <= window)
289
- return da - db;
290
- }
291
- return b.mtime - a.mtime;
292
- });
293
- for (const file of ordered) {
294
- // Priority 1: Extract session ID from filename (most reliable for Codex)
295
- // Codex filenames follow pattern: rollout-YYYY-MM-DDTHH-MM-SS-{uuid}.jsonl
296
- const filenameMatch = path.basename(file.fullPath).match(UUID_REGEX);
297
- if (filenameMatch) {
298
- const sessionId = filenameMatch[0];
299
- // If cwd filtering is needed, read file content to check cwd
300
- if (options.cwd) {
301
- const info = await readSessionInfoFromFile(file.fullPath);
302
- if (info.cwd &&
303
- // Match if: exact match, session cwd starts with options.cwd,
304
- // or options.cwd starts with session cwd (for worktree subdirectories)
305
- (info.cwd === options.cwd ||
306
- info.cwd.startsWith(options.cwd) ||
307
- options.cwd.startsWith(info.cwd))) {
308
- return { id: sessionId, mtime: file.mtime };
309
- }
310
- continue; // cwd doesn't match, try next file
311
- }
312
- return { id: sessionId, mtime: file.mtime };
313
- }
314
- // Priority 2: Fallback to reading file content if filename lacks UUID
315
- const info = await readSessionInfoFromFile(file.fullPath);
316
- if (!info.id)
317
- continue;
318
- if (options.cwd) {
319
- if (info.cwd &&
320
- // Match if: exact match, session cwd starts with options.cwd,
321
- // or options.cwd starts with session cwd (for worktree subdirectories)
322
- (info.cwd === options.cwd ||
323
- info.cwd.startsWith(options.cwd) ||
324
- options.cwd.startsWith(info.cwd))) {
325
- return { id: info.id, mtime: file.mtime };
326
- }
327
- continue;
328
- }
329
- return { id: info.id, mtime: file.mtime };
330
- }
331
- return null;
332
- }
333
- export async function findLatestCodexSessionId(options = {}) {
334
- const found = await findLatestCodexSession(options);
335
- return found?.id ?? null;
336
- }
337
- export async function waitForCodexSessionId(options) {
338
- const timeoutMs = options.timeoutMs ?? 120_000;
339
- const pollIntervalMs = options.pollIntervalMs ?? 2_000;
340
- const deadline = Date.now() + timeoutMs;
341
- while (Date.now() < deadline) {
342
- const found = await findLatestCodexSession({
343
- since: options.startedAt,
344
- preferClosestTo: options.startedAt,
345
- windowMs: 10 * 60 * 1000,
346
- cwd: options.cwd ?? null,
347
- });
348
- if (found?.id)
349
- return found.id;
350
- await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
351
- }
352
- return null;
353
- }
354
- export function encodeClaudeProjectPath(cwd) {
355
- // Normalize to forward slashes, drop drive colon, replace / and _ with -
356
- const normalized = cwd.replace(/\\/g, "/").replace(/:/g, "");
357
- return normalized.replace(/_/g, "-").replace(/\//g, "-");
358
- }
359
- function generateClaudeProjectPathCandidates(cwd) {
360
- const base = encodeClaudeProjectPath(cwd);
361
- const dotToDash = cwd
362
- .replace(/\\/g, "/")
363
- .replace(/:/g, "")
364
- .replace(/\./g, "-")
365
- .replace(/_/g, "-")
366
- .replace(/\//g, "-");
367
- const collapsed = dotToDash.replace(/-+/g, "-");
368
- const candidates = [base, dotToDash, collapsed];
369
- return Array.from(new Set(candidates));
370
- }
371
- export async function findLatestClaudeSessionId(cwd, options = {}) {
372
- const found = await findLatestClaudeSession(cwd, options);
373
- return found?.id ?? null;
374
- }
375
- export async function findLatestClaudeSession(cwd, options = {}) {
376
- const rootCandidates = [];
377
- if (process.env.CLAUDE_CONFIG_DIR) {
378
- rootCandidates.push(process.env.CLAUDE_CONFIG_DIR);
379
- }
380
- rootCandidates.push(path.join(homedir(), ".claude"), path.join(homedir(), ".config", "claude"));
381
- const encodedPaths = generateClaudeProjectPathCandidates(cwd);
382
- for (const claudeRoot of rootCandidates) {
383
- for (const encoded of encodedPaths) {
384
- const projectDir = path.join(claudeRoot, "projects", encoded);
385
- const sessionsDir = path.join(projectDir, "sessions");
386
- // 1) Look under sessions/ (official location) - prefer newest file with valid ID
387
- const session = await findNewestSessionIdFromDir(sessionsDir, false, options);
388
- if (session)
389
- return session;
390
- // 2) Look directly under project dir and subdirs (some versions emit files at root)
391
- const rootSession = await findNewestSessionIdFromDir(projectDir, true, options);
392
- if (rootSession)
393
- return rootSession;
394
- }
395
- }
396
- // Fallback: parse ~/.claude/history.jsonl (Claude Code global history)
397
- try {
398
- const historyPath = path.join(homedir(), ".claude", "history.jsonl");
399
- const content = await readFile(historyPath, "utf-8");
400
- const lines = content.split(/\r?\n/).filter(Boolean);
401
- for (let i = lines.length - 1; i >= 0; i -= 1) {
402
- try {
403
- const line = lines[i] ?? "";
404
- const parsed = JSON.parse(line);
405
- const project = typeof parsed.project === "string" ? parsed.project : null;
406
- const sessionId = typeof parsed.sessionId === "string" ? parsed.sessionId : null;
407
- if (project &&
408
- sessionId &&
409
- (project === cwd || cwd.startsWith(project))) {
410
- return { id: sessionId, mtime: Date.now() };
411
- }
412
- }
413
- catch {
414
- // ignore malformed lines
415
- }
416
- }
417
- }
418
- catch {
419
- // ignore if history not present
420
- }
421
- return null;
422
- }
423
- export async function waitForClaudeSessionId(cwd, options = {}) {
424
- const timeoutMs = options.timeoutMs ?? 120_000;
425
- const pollIntervalMs = options.pollIntervalMs ?? 2_000;
426
- const deadline = Date.now() + timeoutMs;
427
- while (Date.now() < deadline) {
428
- const opt = {};
429
- if (options.since !== undefined)
430
- opt.since = options.since;
431
- if (options.until !== undefined)
432
- opt.until = options.until;
433
- if (options.preferClosestTo !== undefined)
434
- opt.preferClosestTo = options.preferClosestTo;
435
- if (options.windowMs !== undefined)
436
- opt.windowMs = options.windowMs;
437
- const found = await findLatestClaudeSession(cwd, opt);
438
- if (found?.id)
439
- return found.id;
440
- await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
441
- }
442
- return null;
443
- }
444
- async function findLatestNestedSessionFile(baseDir, subPath, predicate) {
445
- try {
446
- const entries = await readdir(baseDir);
447
- if (!entries.length)
448
- return null;
449
- const candidates = [];
450
- for (const entry of entries) {
451
- const dirPath = path.join(baseDir, entry, ...subPath);
452
- const latest = await findLatestFile(dirPath, predicate);
453
- if (latest) {
454
- try {
455
- const info = await stat(latest);
456
- candidates.push({ fullPath: latest, mtime: info.mtimeMs });
457
- }
458
- catch {
459
- // ignore
460
- }
461
- }
462
- }
463
- if (!candidates.length)
464
- return null;
465
- candidates.sort((a, b) => b.mtime - a.mtime);
466
- return candidates[0]?.fullPath ?? null;
467
- }
468
- catch {
469
- return null;
470
- }
471
- }
472
- export async function findLatestGeminiSession(_cwd, options = {}) {
473
- // Gemini stores sessions/logs under ~/.gemini/tmp/<project_hash>/(chats|logs).json
474
- const baseDir = path.join(homedir(), ".gemini", "tmp");
475
- const files = await collectFilesRecursive(baseDir, (name) => name.endsWith(".json") || name.endsWith(".jsonl"));
476
- if (!files.length)
477
- return null;
478
- let pool = files;
479
- if (options.since !== undefined) {
480
- pool = pool.filter((f) => f.mtime >= options.since);
481
- }
482
- if (options.until !== undefined) {
483
- pool = pool.filter((f) => f.mtime <= options.until);
484
- }
485
- const hasWindow = options.since !== undefined || options.until !== undefined;
486
- if (!pool.length) {
487
- if (!hasWindow) {
488
- pool = files;
489
- }
490
- else {
491
- return null;
492
- }
493
- }
494
- const ref = options.preferClosestTo;
495
- const window = options.windowMs ?? 30 * 60 * 1000;
496
- pool = pool.slice().sort((a, b) => {
497
- if (typeof ref === "number") {
498
- const da = Math.abs(a.mtime - ref);
499
- const db = Math.abs(b.mtime - ref);
500
- if (da === db)
501
- return b.mtime - a.mtime;
502
- if (da <= window || db <= window)
503
- return da - db;
504
- }
505
- return b.mtime - a.mtime;
506
- });
507
- for (const file of pool) {
508
- const info = await readSessionInfoFromFile(file.fullPath);
509
- if (!info.id)
510
- continue;
511
- if (options.cwd) {
512
- if (info.cwd &&
513
- (info.cwd === options.cwd || info.cwd.startsWith(options.cwd))) {
514
- return { id: info.id, mtime: file.mtime };
515
- }
516
- continue;
517
- }
518
- return { id: info.id, mtime: file.mtime };
519
- }
520
- return null;
521
- }
522
- export async function findLatestGeminiSessionId(cwd, options = {}) {
523
- const normalized = {};
524
- if (options.since !== undefined)
525
- normalized.since = options.since;
526
- if (options.until !== undefined)
527
- normalized.until = options.until;
528
- if (options.preferClosestTo !== undefined)
529
- normalized.preferClosestTo = options.preferClosestTo;
530
- if (options.windowMs !== undefined)
531
- normalized.windowMs = options.windowMs;
532
- const found = await findLatestGeminiSession(cwd, {
533
- ...normalized,
534
- cwd: options.cwd ?? cwd,
535
- });
536
- return found?.id ?? null;
537
- }
538
- export async function findLatestQwenSessionId(_cwd) {
539
- // Qwen stores checkpoints/saves under ~/.qwen/tmp/<project_hash>/
540
- const baseDir = path.join(homedir(), ".qwen", "tmp");
541
- const latest = (await findLatestNestedSessionFile(baseDir, [], (name) => name.endsWith(".json") || name.endsWith(".jsonl"))) ??
542
- (await findLatestNestedSessionFile(baseDir, ["checkpoints"], (name) => name.endsWith(".json") || name.endsWith(".ckpt")));
543
- if (!latest)
544
- return null;
545
- const fromContent = await readSessionIdFromFile(latest);
546
- if (fromContent)
547
- return fromContent;
548
- // Fallback: use filename (without extension) as tag
549
- return path.basename(latest).replace(/\.[^.]+$/, "");
550
- }
551
- /**
552
- * Returns the list of possible Claude root directories.
553
- */
554
- function getClaudeRootCandidates() {
555
- const roots = [];
556
- if (process.env.CLAUDE_CONFIG_DIR) {
557
- roots.push(process.env.CLAUDE_CONFIG_DIR);
558
- }
559
- roots.push(path.join(homedir(), ".claude"), path.join(homedir(), ".config", "claude"));
560
- return roots;
561
- }
562
- /**
563
- * Checks if a Claude session file exists for the given session ID and worktree path.
564
- * @param sessionId - The session ID to check
565
- * @param worktreePath - The worktree path (used to determine project encoding)
566
- * @returns true if a session file exists for this ID
567
- */
568
- export async function claudeSessionFileExists(sessionId, worktreePath) {
569
- if (!isValidUuidSessionId(sessionId)) {
570
- return false;
571
- }
572
- const encodedPaths = generateClaudeProjectPathCandidates(worktreePath);
573
- const roots = getClaudeRootCandidates();
574
- for (const root of roots) {
575
- for (const enc of encodedPaths) {
576
- const candidate = path.join(root, "projects", enc, `${sessionId}.jsonl`);
577
- try {
578
- await stat(candidate);
579
- return true;
580
- }
581
- catch {
582
- // continue to next candidate
583
- }
584
- }
585
- }
586
- return false;
587
- }
16
+ export * from "./session/index.js";
588
17
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akiojin/gwt",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "description": "Interactive Git worktree manager for Claude Code with graphical branch selection",
5
5
  "main": "dist/index.js",
6
6
  "bin": {