heyiam 0.1.2 → 0.1.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.
- package/app/dist/assets/index-Cv-3KLuW.js +14 -0
- package/app/dist/index.html +1 -1
- package/dist/analyzer.d.ts +4 -0
- package/dist/analyzer.js +1 -0
- package/dist/analyzer.js.map +1 -1
- package/dist/bridge.js +23 -3
- package/dist/bridge.js.map +1 -1
- package/dist/llm/triage.d.ts +3 -2
- package/dist/llm/triage.js +56 -46
- package/dist/llm/triage.js.map +1 -1
- package/dist/parsers/codex.d.ts +8 -0
- package/dist/parsers/codex.js +301 -0
- package/dist/parsers/codex.js.map +1 -0
- package/dist/parsers/cursor.d.ts +89 -0
- package/dist/parsers/cursor.js +531 -0
- package/dist/parsers/cursor.js.map +1 -0
- package/dist/parsers/gemini.d.ts +28 -0
- package/dist/parsers/gemini.js +209 -0
- package/dist/parsers/gemini.js.map +1 -0
- package/dist/parsers/index.d.ts +30 -9
- package/dist/parsers/index.js +266 -12
- package/dist/parsers/index.js.map +1 -1
- package/dist/parsers/types.d.ts +2 -0
- package/dist/parsers/types.js +8 -1
- package/dist/parsers/types.js.map +1 -1
- package/dist/server.js +145 -15
- package/dist/server.js.map +1 -1
- package/package.json +10 -2
- package/app/dist/assets/index-CROJdbHw.js +0 -14
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
const IDLE_THRESHOLD_MS = 5 * 60 * 1000;
|
|
6
|
+
const GEMINI_BASE = () => join(homedir(), ".gemini", "tmp");
|
|
7
|
+
// --- File path extraction from message text ---
|
|
8
|
+
const ABS_PATH_RE = /(?:^|\s)(\/[\w./-]+\.\w+)/g;
|
|
9
|
+
const AT_REF_RE = /@([\w./-]+)/g;
|
|
10
|
+
function extractFileRefsFromText(text) {
|
|
11
|
+
const files = new Set();
|
|
12
|
+
for (const match of text.matchAll(ABS_PATH_RE)) {
|
|
13
|
+
files.add(match[1]);
|
|
14
|
+
}
|
|
15
|
+
for (const match of text.matchAll(AT_REF_RE)) {
|
|
16
|
+
files.add(match[1]);
|
|
17
|
+
}
|
|
18
|
+
return [...files];
|
|
19
|
+
}
|
|
20
|
+
// --- Parse log entries ---
|
|
21
|
+
function parseGeminiLog(raw) {
|
|
22
|
+
try {
|
|
23
|
+
const parsed = JSON.parse(raw);
|
|
24
|
+
if (!Array.isArray(parsed))
|
|
25
|
+
return [];
|
|
26
|
+
return parsed.filter((e) => typeof e === "object" &&
|
|
27
|
+
e !== null &&
|
|
28
|
+
typeof e.sessionId === "string" &&
|
|
29
|
+
typeof e.timestamp === "string");
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function groupBySession(entries) {
|
|
36
|
+
const groups = new Map();
|
|
37
|
+
for (const entry of entries) {
|
|
38
|
+
const group = groups.get(entry.sessionId) ?? [];
|
|
39
|
+
group.push(entry);
|
|
40
|
+
groups.set(entry.sessionId, group);
|
|
41
|
+
}
|
|
42
|
+
return groups;
|
|
43
|
+
}
|
|
44
|
+
// --- Convert to RawEntry[] ---
|
|
45
|
+
function toRawEntries(entries) {
|
|
46
|
+
return entries.map((e) => ({
|
|
47
|
+
type: e.type === "model" ? "assistant" : "user",
|
|
48
|
+
uuid: `${e.sessionId}-${e.messageId}`,
|
|
49
|
+
timestamp: e.timestamp,
|
|
50
|
+
sessionId: e.sessionId,
|
|
51
|
+
message: {
|
|
52
|
+
role: e.type === "model" ? "assistant" : "user",
|
|
53
|
+
content: e.message,
|
|
54
|
+
},
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
// --- Duration ---
|
|
58
|
+
function computeDuration(entries) {
|
|
59
|
+
if (entries.length === 0) {
|
|
60
|
+
return { duration_ms: 0, wall_clock_ms: 0, start_time: null, end_time: null };
|
|
61
|
+
}
|
|
62
|
+
const timestamps = entries.map((e) => new Date(e.timestamp).getTime());
|
|
63
|
+
const start_time = entries[0].timestamp;
|
|
64
|
+
const end_time = entries[entries.length - 1].timestamp;
|
|
65
|
+
if (timestamps.length < 2) {
|
|
66
|
+
return { duration_ms: 0, wall_clock_ms: 0, start_time, end_time };
|
|
67
|
+
}
|
|
68
|
+
const wall_clock_ms = timestamps[timestamps.length - 1] - timestamps[0];
|
|
69
|
+
let activeMs = 0;
|
|
70
|
+
for (let i = 1; i < timestamps.length; i++) {
|
|
71
|
+
const gap = timestamps[i] - timestamps[i - 1];
|
|
72
|
+
if (gap < IDLE_THRESHOLD_MS) {
|
|
73
|
+
activeMs += gap;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return { duration_ms: Math.max(activeMs, 0), wall_clock_ms: Math.max(wall_clock_ms, 0), start_time, end_time };
|
|
77
|
+
}
|
|
78
|
+
// --- Turns ---
|
|
79
|
+
function countTurns(entries) {
|
|
80
|
+
// Gemini only logs user messages. Each user message implies an exchange.
|
|
81
|
+
// But consecutive user messages without a model type between them
|
|
82
|
+
// are likely the same turn (follow-ups). Count each user message as a turn.
|
|
83
|
+
return entries.filter((e) => e.type === "user").length;
|
|
84
|
+
}
|
|
85
|
+
// --- Files touched ---
|
|
86
|
+
function extractFilesTouched(entries) {
|
|
87
|
+
const files = new Set();
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
for (const f of extractFileRefsFromText(entry.message)) {
|
|
90
|
+
files.add(f);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return [...files].sort();
|
|
94
|
+
}
|
|
95
|
+
// --- Analyze a single session ---
|
|
96
|
+
function analyzeSession(entries) {
|
|
97
|
+
const { duration_ms, wall_clock_ms, start_time, end_time } = computeDuration(entries);
|
|
98
|
+
const filesTouched = extractFilesTouched(entries);
|
|
99
|
+
return {
|
|
100
|
+
source: "gemini",
|
|
101
|
+
turns: countTurns(entries),
|
|
102
|
+
tool_calls: [],
|
|
103
|
+
files_touched: filesTouched,
|
|
104
|
+
duration_ms,
|
|
105
|
+
wall_clock_ms,
|
|
106
|
+
loc_stats: { loc_added: 0, loc_removed: 0, loc_net: 0, files_changed: [] },
|
|
107
|
+
raw_entries: toRawEntries(entries),
|
|
108
|
+
start_time,
|
|
109
|
+
end_time,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// --- SessionParser interface ---
|
|
113
|
+
async function detect(path) {
|
|
114
|
+
if (!path.endsWith(".json"))
|
|
115
|
+
return false;
|
|
116
|
+
try {
|
|
117
|
+
const raw = await readFile(path, "utf-8");
|
|
118
|
+
const parsed = JSON.parse(raw);
|
|
119
|
+
if (!Array.isArray(parsed) || parsed.length === 0)
|
|
120
|
+
return false;
|
|
121
|
+
const first = parsed[0];
|
|
122
|
+
return typeof first.sessionId === "string" && typeof first.messageId === "number" && typeof first.timestamp === "string";
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function parse(path) {
|
|
129
|
+
const raw = await readFile(path, "utf-8");
|
|
130
|
+
const allEntries = parseGeminiLog(raw);
|
|
131
|
+
if (allEntries.length === 0) {
|
|
132
|
+
return analyzeSession([]);
|
|
133
|
+
}
|
|
134
|
+
// If the path contains a session ID query param, filter to that session
|
|
135
|
+
// Otherwise, analyze all entries as one combined session
|
|
136
|
+
const groups = groupBySession(allEntries);
|
|
137
|
+
// For a single session request (gemini://{hash}?session={id}), filter
|
|
138
|
+
if (path.startsWith("gemini://")) {
|
|
139
|
+
const url = new URL(path);
|
|
140
|
+
const sessionId = url.searchParams.get("session");
|
|
141
|
+
if (sessionId && groups.has(sessionId)) {
|
|
142
|
+
return analyzeSession(groups.get(sessionId));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Default: merge all entries in the file (sorted by timestamp)
|
|
146
|
+
const sorted = allEntries.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
|
|
147
|
+
return analyzeSession(sorted);
|
|
148
|
+
}
|
|
149
|
+
export const geminiParser = {
|
|
150
|
+
name: "gemini",
|
|
151
|
+
detect,
|
|
152
|
+
parse,
|
|
153
|
+
};
|
|
154
|
+
// --- Discovery ---
|
|
155
|
+
export function hashProjectDir(dir) {
|
|
156
|
+
return createHash("sha256").update(dir).digest("hex");
|
|
157
|
+
}
|
|
158
|
+
export async function discoverGeminiSessions() {
|
|
159
|
+
const base = GEMINI_BASE();
|
|
160
|
+
const results = [];
|
|
161
|
+
let dirs;
|
|
162
|
+
try {
|
|
163
|
+
dirs = await readdir(base, { withFileTypes: true });
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return results;
|
|
167
|
+
}
|
|
168
|
+
for (const entry of dirs) {
|
|
169
|
+
if (!entry.isDirectory())
|
|
170
|
+
continue;
|
|
171
|
+
const logsPath = join(base, entry.name, "logs.json");
|
|
172
|
+
let raw;
|
|
173
|
+
try {
|
|
174
|
+
raw = await readFile(logsPath, "utf-8");
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const entries = parseGeminiLog(raw);
|
|
180
|
+
const groups = groupBySession(entries);
|
|
181
|
+
for (const [sessionId] of groups) {
|
|
182
|
+
results.push({
|
|
183
|
+
path: logsPath,
|
|
184
|
+
sessionId,
|
|
185
|
+
projectHash: entry.name,
|
|
186
|
+
projectDir: undefined, // resolved below if possible
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return results;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Try to resolve a project hash to a directory by hashing candidate paths.
|
|
194
|
+
* Pass known project directories (e.g., from Claude or Cursor) and this
|
|
195
|
+
* will match them against Gemini's hashes.
|
|
196
|
+
*/
|
|
197
|
+
export function resolveProjectDirs(sessions, knownDirs) {
|
|
198
|
+
const hashToDir = new Map();
|
|
199
|
+
for (const dir of knownDirs) {
|
|
200
|
+
hashToDir.set(hashProjectDir(dir), dir);
|
|
201
|
+
}
|
|
202
|
+
return sessions.map((s) => ({
|
|
203
|
+
...s,
|
|
204
|
+
projectDir: hashToDir.get(s.projectHash) ?? s.projectDir,
|
|
205
|
+
}));
|
|
206
|
+
}
|
|
207
|
+
// Re-exports for testing
|
|
208
|
+
export { parseGeminiLog, groupBySession, analyzeSession, extractFileRefsFromText };
|
|
209
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/parsers/gemini.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/index.d.ts
CHANGED
|
@@ -14,15 +14,36 @@ export interface SessionMeta {
|
|
|
14
14
|
agentRole?: string;
|
|
15
15
|
children?: SessionMeta[];
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Convert an absolute directory path to Claude Code's encoded format.
|
|
19
|
+
* "/Users/ben/Dev/heyi-am" → "-Users-ben-Dev-heyi-am"
|
|
18
20
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
21
|
+
* This encoding is lossy: `-` in directory names is indistinguishable from
|
|
22
|
+
* the `-` used as a separator (e.g. `/a/b-c` and `/a/b/c` both encode to
|
|
23
|
+
* `-a-b-c`). We accept this trade-off because Claude Code uses the same
|
|
24
|
+
* encoding for its own project directories (~/.claude/projects/-Users-...),
|
|
25
|
+
* and we must match it so sessions from different tools (Claude, Cursor,
|
|
26
|
+
* Codex, Gemini) group under the same project key. In practice, users are
|
|
27
|
+
* unlikely to have two project directories whose paths differ only by `-`
|
|
28
|
+
* vs `/`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function encodeDirPath(absolutePath: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Scan all supported tools for sessions and merge by project directory.
|
|
33
|
+
* Claude Code, Cursor, Codex, and Gemini sessions for the same directory
|
|
34
|
+
* are grouped under the same projectDir key.
|
|
27
35
|
*/
|
|
28
36
|
export declare function listSessions(basePath?: string): Promise<SessionMeta[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Merge sessions from subdirectory projects into their parent when file
|
|
39
|
+
* evidence confirms they're part of the same codebase.
|
|
40
|
+
*
|
|
41
|
+
* Example: sessions from /Dev/heyi.am/cli (encoded: -Dev-heyi-am-cli)
|
|
42
|
+
* that touch files like /Dev/heyi.am/lib/foo.ex prove they belong to the
|
|
43
|
+
* parent project /Dev/heyi.am (encoded: -Dev-heyi-am).
|
|
44
|
+
*
|
|
45
|
+
* We sample 1-2 sessions from the candidate child, parse them, and check
|
|
46
|
+
* whether files_touched reference paths outside the subdirectory. This
|
|
47
|
+
* avoids false merges (e.g., /Dev should NOT absorb /Dev/heyi.am).
|
|
48
|
+
*/
|
|
49
|
+
export declare function mergeSubdirectoryProjects(sessions: SessionMeta[], realPaths: Map<string, string>, parseFn?: (path: string) => Promise<SessionAnalysis>): Promise<SessionMeta[]>;
|
package/dist/parsers/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { readdir, readFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
+
import { execFile } from "node:child_process";
|
|
4
5
|
import { claudeParser, mapAgentRole } from "./claude.js";
|
|
5
|
-
|
|
6
|
+
import { cursorParser, discoverCursorWorkspaces, listConversations } from "./cursor.js";
|
|
7
|
+
import { codexParser, discoverCodexSessions } from "./codex.js";
|
|
8
|
+
import { geminiParser, discoverGeminiSessions } from "./gemini.js";
|
|
9
|
+
const parsers = [claudeParser, cursorParser, codexParser, geminiParser];
|
|
6
10
|
/** Detect which parser handles a given file and parse it */
|
|
7
11
|
export async function parseSession(path) {
|
|
8
12
|
for (const parser of parsers) {
|
|
@@ -12,18 +16,270 @@ export async function parseSession(path) {
|
|
|
12
16
|
}
|
|
13
17
|
throw new Error(`No parser detected for: ${path}`);
|
|
14
18
|
}
|
|
15
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Convert an absolute directory path to Claude Code's encoded format.
|
|
21
|
+
* "/Users/ben/Dev/heyi-am" → "-Users-ben-Dev-heyi-am"
|
|
16
22
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* This encoding is lossy: `-` in directory names is indistinguishable from
|
|
24
|
+
* the `-` used as a separator (e.g. `/a/b-c` and `/a/b/c` both encode to
|
|
25
|
+
* `-a-b-c`). We accept this trade-off because Claude Code uses the same
|
|
26
|
+
* encoding for its own project directories (~/.claude/projects/-Users-...),
|
|
27
|
+
* and we must match it so sessions from different tools (Claude, Cursor,
|
|
28
|
+
* Codex, Gemini) group under the same project key. In practice, users are
|
|
29
|
+
* unlikely to have two project directories whose paths differ only by `-`
|
|
30
|
+
* vs `/`.
|
|
31
|
+
*/
|
|
32
|
+
export function encodeDirPath(absolutePath) {
|
|
33
|
+
return absolutePath.replace(/[/.]/g, "-");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Scan all supported tools for sessions and merge by project directory.
|
|
37
|
+
* Claude Code, Cursor, Codex, and Gemini sessions for the same directory
|
|
38
|
+
* are grouped under the same projectDir key.
|
|
25
39
|
*/
|
|
26
40
|
export async function listSessions(basePath) {
|
|
41
|
+
const allSessions = [];
|
|
42
|
+
// 1. Claude Code sessions
|
|
43
|
+
const claudeSessions = await listClaudeSessions(basePath);
|
|
44
|
+
allSessions.push(...claudeSessions);
|
|
45
|
+
// When basePath is provided (tests, custom scan), only scan Claude sessions
|
|
46
|
+
if (basePath)
|
|
47
|
+
return allSessions;
|
|
48
|
+
// 2. Cursor sessions
|
|
49
|
+
const cursorSessions = await listCursorSessions();
|
|
50
|
+
allSessions.push(...cursorSessions);
|
|
51
|
+
// 3. Codex sessions
|
|
52
|
+
try {
|
|
53
|
+
const codexFiles = await discoverCodexSessions();
|
|
54
|
+
for (const cf of codexFiles) {
|
|
55
|
+
allSessions.push({
|
|
56
|
+
path: cf.path,
|
|
57
|
+
source: "codex",
|
|
58
|
+
sessionId: cf.sessionId,
|
|
59
|
+
projectDir: encodeDirPath(cf.cwd),
|
|
60
|
+
isSubagent: false,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch { /* codex discovery failed */ }
|
|
65
|
+
// 4. Gemini sessions
|
|
66
|
+
try {
|
|
67
|
+
const geminiFiles = await discoverGeminiSessions();
|
|
68
|
+
for (const gf of geminiFiles) {
|
|
69
|
+
const dir = gf.projectDir ?? gf.projectHash;
|
|
70
|
+
allSessions.push({
|
|
71
|
+
path: gf.path,
|
|
72
|
+
source: "gemini",
|
|
73
|
+
sessionId: gf.sessionId,
|
|
74
|
+
projectDir: encodeDirPath(dir),
|
|
75
|
+
isSubagent: false,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { /* gemini discovery failed */ }
|
|
80
|
+
// Build map of encoded projectDir → real absolute path for git checks.
|
|
81
|
+
// Cursor workspaces and Codex/Gemini sessions have real paths;
|
|
82
|
+
// Claude dirs can't be reliably decoded (lossy encoding).
|
|
83
|
+
const realPaths = new Map();
|
|
84
|
+
try {
|
|
85
|
+
for (const ws of await discoverCursorWorkspaces()) {
|
|
86
|
+
realPaths.set(encodeDirPath(ws.projectDir), ws.projectDir);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch { }
|
|
90
|
+
try {
|
|
91
|
+
for (const cf of await discoverCodexSessions()) {
|
|
92
|
+
realPaths.set(encodeDirPath(cf.cwd), cf.cwd);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch { }
|
|
96
|
+
return mergeSubdirectoryProjects(allSessions, realPaths);
|
|
97
|
+
}
|
|
98
|
+
/** Get the git remote URL for a directory, or null if not a git repo. */
|
|
99
|
+
function getGitRemote(dirPath) {
|
|
100
|
+
return new Promise(resolve => {
|
|
101
|
+
execFile("git", ["-C", dirPath, "remote", "get-url", "origin"], { timeout: 3000 }, (err, stdout) => {
|
|
102
|
+
if (err)
|
|
103
|
+
return resolve(null);
|
|
104
|
+
const url = stdout.trim();
|
|
105
|
+
resolve(url || null);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Merge sessions from subdirectory projects into their parent when file
|
|
111
|
+
* evidence confirms they're part of the same codebase.
|
|
112
|
+
*
|
|
113
|
+
* Example: sessions from /Dev/heyi.am/cli (encoded: -Dev-heyi-am-cli)
|
|
114
|
+
* that touch files like /Dev/heyi.am/lib/foo.ex prove they belong to the
|
|
115
|
+
* parent project /Dev/heyi.am (encoded: -Dev-heyi-am).
|
|
116
|
+
*
|
|
117
|
+
* We sample 1-2 sessions from the candidate child, parse them, and check
|
|
118
|
+
* whether files_touched reference paths outside the subdirectory. This
|
|
119
|
+
* avoids false merges (e.g., /Dev should NOT absorb /Dev/heyi.am).
|
|
120
|
+
*/
|
|
121
|
+
export async function mergeSubdirectoryProjects(sessions, realPaths, parseFn = parseSession) {
|
|
122
|
+
// Group by projectDir
|
|
123
|
+
const byDir = new Map();
|
|
124
|
+
for (const s of sessions) {
|
|
125
|
+
const list = byDir.get(s.projectDir) ?? [];
|
|
126
|
+
list.push(s);
|
|
127
|
+
byDir.set(s.projectDir, list);
|
|
128
|
+
}
|
|
129
|
+
const dirs = [...byDir.keys()].sort((a, b) => a.length - b.length);
|
|
130
|
+
const mergeMap = new Map(); // child → parent
|
|
131
|
+
for (let i = 0; i < dirs.length; i++) {
|
|
132
|
+
const candidate = dirs[i];
|
|
133
|
+
if (mergeMap.has(candidate))
|
|
134
|
+
continue; // already merged
|
|
135
|
+
// Find potential parents (shorter dirs that are a prefix)
|
|
136
|
+
const parents = [];
|
|
137
|
+
for (let j = 0; j < i; j++) {
|
|
138
|
+
const potential = mergeMap.get(dirs[j]) ?? dirs[j]; // follow chain
|
|
139
|
+
if (candidate.startsWith(potential + "-") && candidate !== potential) {
|
|
140
|
+
parents.push(potential);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (parents.length === 0)
|
|
144
|
+
continue;
|
|
145
|
+
// Pick the longest parent (closest ancestor)
|
|
146
|
+
const parent = parents.sort((a, b) => b.length - a.length)[0];
|
|
147
|
+
// Signal 1: git remote match — if both dirs resolve to the same repo
|
|
148
|
+
const parentReal = realPaths.get(parent);
|
|
149
|
+
const childReal = realPaths.get(candidate);
|
|
150
|
+
if (parentReal && childReal) {
|
|
151
|
+
const [parentRemote, childRemote] = await Promise.all([
|
|
152
|
+
getGitRemote(parentReal),
|
|
153
|
+
getGitRemote(childReal),
|
|
154
|
+
]);
|
|
155
|
+
if (parentRemote && childRemote && parentRemote === childRemote) {
|
|
156
|
+
mergeMap.set(candidate, parent);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Signal 2: file-change sampling — parse 1-2 sessions and check
|
|
161
|
+
// if files_touched reference paths at the parent level
|
|
162
|
+
const childSessions = byDir.get(candidate) ?? [];
|
|
163
|
+
const samples = childSessions
|
|
164
|
+
.filter(s => !s.isSubagent)
|
|
165
|
+
.slice(0, 2);
|
|
166
|
+
if (samples.length === 0)
|
|
167
|
+
continue;
|
|
168
|
+
let shouldMerge = false;
|
|
169
|
+
for (const sample of samples) {
|
|
170
|
+
try {
|
|
171
|
+
const parsed = await parseFn(sample.path);
|
|
172
|
+
// If we got a cwd from parsing, try git remote as a fallback
|
|
173
|
+
if (!shouldMerge && parsed.cwd && parentReal) {
|
|
174
|
+
const [pRemote, cRemote] = await Promise.all([
|
|
175
|
+
getGitRemote(parentReal),
|
|
176
|
+
getGitRemote(parsed.cwd),
|
|
177
|
+
]);
|
|
178
|
+
if (pRemote && cRemote && pRemote === cRemote) {
|
|
179
|
+
shouldMerge = true;
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const filePaths = parsed.files_touched.length > 0
|
|
184
|
+
? parsed.files_touched
|
|
185
|
+
: parsed.tool_calls
|
|
186
|
+
.map(tc => tc.input.file_path)
|
|
187
|
+
.filter((p) => typeof p === "string");
|
|
188
|
+
// Check if any file lives at the parent project level but outside
|
|
189
|
+
// the child's own subtree. Walk up each file's ancestors; if we hit
|
|
190
|
+
// the child's own projectDir first, this file is just inside its own
|
|
191
|
+
// project — skip it. Only count it as evidence if we reach the
|
|
192
|
+
// parent before (or without) hitting the child.
|
|
193
|
+
for (const fp of filePaths) {
|
|
194
|
+
const parts = fp.split("/").filter(Boolean);
|
|
195
|
+
let hitChild = false;
|
|
196
|
+
for (let k = parts.length - 1; k >= 2; k--) {
|
|
197
|
+
const ancestor = "/" + parts.slice(0, k).join("/");
|
|
198
|
+
const encoded = encodeDirPath(ancestor);
|
|
199
|
+
if (encoded === candidate) {
|
|
200
|
+
hitChild = true;
|
|
201
|
+
break; // file is inside child's own tree — not evidence
|
|
202
|
+
}
|
|
203
|
+
if (encoded === parent) {
|
|
204
|
+
shouldMerge = true;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (shouldMerge)
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
if (shouldMerge)
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Parsing failed — skip this sample
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (shouldMerge) {
|
|
219
|
+
mergeMap.set(candidate, parent);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Apply merges
|
|
223
|
+
if (mergeMap.size === 0)
|
|
224
|
+
return sessions;
|
|
225
|
+
return sessions.map(s => {
|
|
226
|
+
const newDir = mergeMap.get(s.projectDir);
|
|
227
|
+
if (newDir) {
|
|
228
|
+
return { ...s, projectDir: newDir };
|
|
229
|
+
}
|
|
230
|
+
return s;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
/** Discover Cursor sessions and convert to SessionMeta[] */
|
|
234
|
+
async function listCursorSessions() {
|
|
235
|
+
const sessions = [];
|
|
236
|
+
let workspaces;
|
|
237
|
+
try {
|
|
238
|
+
workspaces = await discoverCursorWorkspaces();
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return sessions;
|
|
242
|
+
}
|
|
243
|
+
// Cursor migrated conversation storage to the global cursorDiskKV table
|
|
244
|
+
// around August 2025 (composer.planMigrationToHomeDirCompleted). Sessions
|
|
245
|
+
// before this have metadata (title, date) but no recoverable content.
|
|
246
|
+
const CURSOR_DATA_CUTOFF = new Date("2025-09-01").getTime();
|
|
247
|
+
for (const ws of workspaces) {
|
|
248
|
+
const conversations = listConversations(ws);
|
|
249
|
+
for (const conv of conversations) {
|
|
250
|
+
// Skip conversations without a name — Cursor only generates names for
|
|
251
|
+
// conversations with real interaction. Unnamed ones are empty stubs.
|
|
252
|
+
if (!conv.name)
|
|
253
|
+
continue;
|
|
254
|
+
// Skip sessions before September 2025 — bubble data not available
|
|
255
|
+
if (conv.createdAt < CURSOR_DATA_CUTOFF)
|
|
256
|
+
continue;
|
|
257
|
+
// Encode metadata into the cursor:// URL so the parser can use it
|
|
258
|
+
const params = new URLSearchParams();
|
|
259
|
+
if (conv.name)
|
|
260
|
+
params.set("name", conv.name);
|
|
261
|
+
if (conv.createdAt)
|
|
262
|
+
params.set("createdAt", String(conv.createdAt));
|
|
263
|
+
if (conv.lastUpdatedAt)
|
|
264
|
+
params.set("lastUpdatedAt", String(conv.lastUpdatedAt));
|
|
265
|
+
if (conv.totalLinesAdded)
|
|
266
|
+
params.set("linesAdded", String(conv.totalLinesAdded));
|
|
267
|
+
if (conv.totalLinesRemoved)
|
|
268
|
+
params.set("linesRemoved", String(conv.totalLinesRemoved));
|
|
269
|
+
const qs = params.toString();
|
|
270
|
+
sessions.push({
|
|
271
|
+
path: `cursor://${conv.composerId}${qs ? '?' + qs : ''}`,
|
|
272
|
+
source: "cursor",
|
|
273
|
+
sessionId: conv.composerId,
|
|
274
|
+
projectDir: encodeDirPath(ws.projectDir),
|
|
275
|
+
isSubagent: false,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return sessions;
|
|
280
|
+
}
|
|
281
|
+
/** Original Claude Code session scanning, extracted from old listSessions */
|
|
282
|
+
async function listClaudeSessions(basePath) {
|
|
27
283
|
const base = basePath ?? join(homedir(), ".claude", "projects");
|
|
28
284
|
const parents = [];
|
|
29
285
|
const childrenByParentId = new Map();
|
|
@@ -48,13 +304,11 @@ export async function listSessions(basePath) {
|
|
|
48
304
|
}
|
|
49
305
|
for (const file of files) {
|
|
50
306
|
if (file.name.endsWith(".jsonl") && !file.isDirectory()) {
|
|
51
|
-
// Main session file
|
|
52
307
|
const fullPath = join(projectPath, file.name);
|
|
53
308
|
const sessionId = file.name.replace(/\.jsonl$/, "");
|
|
54
309
|
await tryAddSession(fullPath, sessionId, projectDir, false, parents);
|
|
55
310
|
}
|
|
56
311
|
else if (file.isDirectory()) {
|
|
57
|
-
// Directory name is the parent session UUID
|
|
58
312
|
const parentSessionId = file.name;
|
|
59
313
|
const children = await collectSubagents(join(projectPath, file.name), projectDir, parentSessionId);
|
|
60
314
|
if (children.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/types.d.ts
CHANGED
package/dist/parsers/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parsers/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parsers/types.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAkC;IACjE,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,YAAY;IACpB,WAAW,EAAE,aAAa;CAC3B,CAAC"}
|