@swarmify/agents-cli 1.7.1 → 1.8.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.
- package/dist/commands/sessions.d.ts +3 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +171 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/index.js +74 -27
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/exec.test.js +16 -0
- package/dist/lib/__tests__/exec.test.js.map +1 -1
- package/dist/lib/exec.d.ts.map +1 -1
- package/dist/lib/exec.js +4 -0
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/session/discover.d.ts +16 -0
- package/dist/lib/session/discover.d.ts.map +1 -0
- package/dist/lib/session/discover.js +376 -0
- package/dist/lib/session/discover.js.map +1 -0
- package/dist/lib/session/parse.d.ts +14 -0
- package/dist/lib/session/parse.d.ts.map +1 -0
- package/dist/lib/session/parse.js +479 -0
- package/dist/lib/session/parse.js.map +1 -0
- package/dist/lib/session/render.d.ts +21 -0
- package/dist/lib/session/render.d.ts.map +1 -0
- package/dist/lib/session/render.js +170 -0
- package/dist/lib/session/render.js.map +1 -0
- package/dist/lib/session/types.d.ts +28 -0
- package/dist/lib/session/types.d.ts.map +1 -0
- package/dist/lib/session/types.js +2 -0
- package/dist/lib/session/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
import * as crypto from 'crypto';
|
|
5
|
+
import * as readline from 'readline';
|
|
6
|
+
import { SESSION_AGENTS } from './types.js';
|
|
7
|
+
const HOME = os.homedir();
|
|
8
|
+
/**
|
|
9
|
+
* Discover sessions across all installed agents.
|
|
10
|
+
* Returns SessionMeta[] sorted by timestamp descending (most recent first).
|
|
11
|
+
*/
|
|
12
|
+
export async function discoverSessions(options) {
|
|
13
|
+
const agents = options?.agent ? [options.agent] : SESSION_AGENTS;
|
|
14
|
+
const limit = options?.limit ?? 50;
|
|
15
|
+
const results = await Promise.all(agents.map(agent => {
|
|
16
|
+
switch (agent) {
|
|
17
|
+
case 'claude': return discoverClaudeSessions();
|
|
18
|
+
case 'codex': return discoverCodexSessions();
|
|
19
|
+
case 'gemini': return discoverGeminiSessions();
|
|
20
|
+
}
|
|
21
|
+
}));
|
|
22
|
+
let sessions = results.flat();
|
|
23
|
+
// Filter by project (case-insensitive substring match)
|
|
24
|
+
if (options?.project) {
|
|
25
|
+
const query = options.project.toLowerCase();
|
|
26
|
+
sessions = sessions.filter(s => s.project?.toLowerCase().includes(query));
|
|
27
|
+
}
|
|
28
|
+
// Sort by timestamp descending
|
|
29
|
+
sessions.sort((a, b) => {
|
|
30
|
+
const ta = new Date(a.timestamp).getTime() || 0;
|
|
31
|
+
const tb = new Date(b.timestamp).getTime() || 0;
|
|
32
|
+
return tb - ta;
|
|
33
|
+
});
|
|
34
|
+
return sessions.slice(0, limit);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve a session by full or short ID from the full index.
|
|
38
|
+
*/
|
|
39
|
+
export function resolveSessionById(sessions, idQuery) {
|
|
40
|
+
const query = idQuery.toLowerCase();
|
|
41
|
+
// Exact match first
|
|
42
|
+
const exact = sessions.filter(s => s.id.toLowerCase() === query);
|
|
43
|
+
if (exact.length > 0)
|
|
44
|
+
return exact;
|
|
45
|
+
// Prefix match
|
|
46
|
+
return sessions.filter(s => s.id.toLowerCase().startsWith(query));
|
|
47
|
+
}
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Claude
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
async function discoverClaudeSessions() {
|
|
52
|
+
const projectsDir = path.join(HOME, '.claude', 'projects');
|
|
53
|
+
if (!fs.existsSync(projectsDir))
|
|
54
|
+
return [];
|
|
55
|
+
const sessions = [];
|
|
56
|
+
let projectDirs;
|
|
57
|
+
try {
|
|
58
|
+
projectDirs = fs.readdirSync(projectsDir);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
for (const dirName of projectDirs) {
|
|
64
|
+
const dirPath = path.join(projectsDir, dirName);
|
|
65
|
+
const stat = safeStatSync(dirPath);
|
|
66
|
+
if (!stat?.isDirectory())
|
|
67
|
+
continue;
|
|
68
|
+
let files;
|
|
69
|
+
try {
|
|
70
|
+
files = fs.readdirSync(dirPath).filter(f => f.endsWith('.jsonl'));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
for (const file of files) {
|
|
76
|
+
const filePath = path.join(dirPath, file);
|
|
77
|
+
const sessionId = file.replace('.jsonl', '');
|
|
78
|
+
try {
|
|
79
|
+
const meta = await readClaudeMeta(filePath, sessionId);
|
|
80
|
+
if (meta) {
|
|
81
|
+
sessions.push(meta);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Skip unreadable files
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return sessions;
|
|
90
|
+
}
|
|
91
|
+
async function readClaudeMeta(filePath, sessionId) {
|
|
92
|
+
const lines = await readFirstLines(filePath, 5);
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
let parsed;
|
|
95
|
+
try {
|
|
96
|
+
parsed = JSON.parse(line);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// Look for first user or assistant line with timestamp/cwd
|
|
102
|
+
if ((parsed.type === 'user' || parsed.type === 'assistant') && parsed.timestamp) {
|
|
103
|
+
const cwd = parsed.cwd || '';
|
|
104
|
+
return {
|
|
105
|
+
id: sessionId,
|
|
106
|
+
shortId: sessionId.slice(0, 8),
|
|
107
|
+
agent: 'claude',
|
|
108
|
+
timestamp: parsed.timestamp,
|
|
109
|
+
project: cwd ? path.basename(cwd) : undefined,
|
|
110
|
+
cwd,
|
|
111
|
+
filePath,
|
|
112
|
+
gitBranch: parsed.gitBranch || undefined,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Fallback: use file mtime
|
|
117
|
+
const stat = safeStatSync(filePath);
|
|
118
|
+
return {
|
|
119
|
+
id: sessionId,
|
|
120
|
+
shortId: sessionId.slice(0, 8),
|
|
121
|
+
agent: 'claude',
|
|
122
|
+
timestamp: stat ? stat.mtime.toISOString() : new Date().toISOString(),
|
|
123
|
+
filePath,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Codex
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
async function discoverCodexSessions() {
|
|
130
|
+
const sessionsDir = path.join(HOME, '.codex', 'sessions');
|
|
131
|
+
if (!fs.existsSync(sessionsDir))
|
|
132
|
+
return [];
|
|
133
|
+
const sessions = [];
|
|
134
|
+
const jsonlFiles = walkForFiles(sessionsDir, '.jsonl', 200);
|
|
135
|
+
for (const filePath of jsonlFiles) {
|
|
136
|
+
try {
|
|
137
|
+
const meta = await readCodexMeta(filePath);
|
|
138
|
+
if (meta)
|
|
139
|
+
sessions.push(meta);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Skip unreadable files
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return sessions;
|
|
146
|
+
}
|
|
147
|
+
async function readCodexMeta(filePath) {
|
|
148
|
+
const lines = await readFirstLines(filePath, 1);
|
|
149
|
+
if (lines.length === 0)
|
|
150
|
+
return null;
|
|
151
|
+
let parsed;
|
|
152
|
+
try {
|
|
153
|
+
parsed = JSON.parse(lines[0]);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
if (parsed.type !== 'session_meta')
|
|
159
|
+
return null;
|
|
160
|
+
const payload = parsed.payload || {};
|
|
161
|
+
const sessionId = payload.id || '';
|
|
162
|
+
if (!sessionId)
|
|
163
|
+
return null;
|
|
164
|
+
const cwd = payload.cwd || '';
|
|
165
|
+
return {
|
|
166
|
+
id: sessionId,
|
|
167
|
+
shortId: sessionId.slice(0, 8),
|
|
168
|
+
agent: 'codex',
|
|
169
|
+
timestamp: payload.timestamp || parsed.timestamp || new Date().toISOString(),
|
|
170
|
+
project: cwd ? path.basename(cwd) : undefined,
|
|
171
|
+
cwd,
|
|
172
|
+
filePath,
|
|
173
|
+
gitBranch: payload.git?.branch || undefined,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
// Gemini
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
async function discoverGeminiSessions() {
|
|
180
|
+
const tmpDir = path.join(HOME, '.gemini', 'tmp');
|
|
181
|
+
if (!fs.existsSync(tmpDir))
|
|
182
|
+
return [];
|
|
183
|
+
// Build project hash -> name map
|
|
184
|
+
const projectMap = buildGeminiProjectMap();
|
|
185
|
+
const sessions = [];
|
|
186
|
+
let hashDirs;
|
|
187
|
+
try {
|
|
188
|
+
hashDirs = fs.readdirSync(tmpDir);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return [];
|
|
192
|
+
}
|
|
193
|
+
for (const hashDir of hashDirs) {
|
|
194
|
+
const chatsDir = path.join(tmpDir, hashDir, 'chats');
|
|
195
|
+
if (!fs.existsSync(chatsDir))
|
|
196
|
+
continue;
|
|
197
|
+
let chatFiles;
|
|
198
|
+
try {
|
|
199
|
+
chatFiles = fs.readdirSync(chatsDir).filter(f => f.endsWith('.json'));
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
for (const file of chatFiles) {
|
|
205
|
+
const filePath = path.join(chatsDir, file);
|
|
206
|
+
try {
|
|
207
|
+
const meta = readGeminiMeta(filePath, hashDir, projectMap);
|
|
208
|
+
if (meta)
|
|
209
|
+
sessions.push(meta);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Skip unreadable files
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return sessions;
|
|
217
|
+
}
|
|
218
|
+
function readGeminiMeta(filePath, hashDir, projectMap) {
|
|
219
|
+
// Read the first ~2KB to get top-level fields without parsing entire messages array
|
|
220
|
+
const fd = fs.openSync(filePath, 'r');
|
|
221
|
+
const buf = Buffer.alloc(2048);
|
|
222
|
+
const bytesRead = fs.readSync(fd, buf, 0, 2048, 0);
|
|
223
|
+
fs.closeSync(fd);
|
|
224
|
+
const header = buf.toString('utf-8', 0, bytesRead);
|
|
225
|
+
// Extract fields via regex (avoids parsing potentially huge messages array)
|
|
226
|
+
const sessionId = extractJsonField(header, 'sessionId');
|
|
227
|
+
const startTime = extractJsonField(header, 'startTime');
|
|
228
|
+
const projectHash = extractJsonField(header, 'projectHash');
|
|
229
|
+
if (!sessionId)
|
|
230
|
+
return null;
|
|
231
|
+
// Resolve project name from hash
|
|
232
|
+
const projectInfo = projectMap.get(projectHash || hashDir);
|
|
233
|
+
const project = projectInfo?.name || hashDir.slice(0, 12);
|
|
234
|
+
const cwd = projectInfo?.path;
|
|
235
|
+
// Count messages roughly by counting occurrences of "type":" in the full file size
|
|
236
|
+
const stat = safeStatSync(filePath);
|
|
237
|
+
return {
|
|
238
|
+
id: sessionId,
|
|
239
|
+
shortId: sessionId.slice(0, 8),
|
|
240
|
+
agent: 'gemini',
|
|
241
|
+
timestamp: startTime || (stat ? stat.mtime.toISOString() : new Date().toISOString()),
|
|
242
|
+
project,
|
|
243
|
+
cwd,
|
|
244
|
+
filePath,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function buildGeminiProjectMap() {
|
|
248
|
+
const map = new Map();
|
|
249
|
+
const projectsJsonPath = path.join(HOME, '.gemini', 'projects.json');
|
|
250
|
+
if (!fs.existsSync(projectsJsonPath))
|
|
251
|
+
return map;
|
|
252
|
+
try {
|
|
253
|
+
const data = JSON.parse(fs.readFileSync(projectsJsonPath, 'utf-8'));
|
|
254
|
+
const projects = data.projects;
|
|
255
|
+
if (typeof projects === 'object' && projects !== null) {
|
|
256
|
+
if (Array.isArray(projects)) {
|
|
257
|
+
// Array format: ["path1", "path2"]
|
|
258
|
+
for (const p of projects) {
|
|
259
|
+
if (typeof p === 'string') {
|
|
260
|
+
const hash = sha256(p);
|
|
261
|
+
map.set(hash, { name: path.basename(p), path: p });
|
|
262
|
+
// Also try the raw directory name
|
|
263
|
+
map.set(p, { name: path.basename(p), path: p });
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// Object format: {path: name}
|
|
269
|
+
for (const [p, name] of Object.entries(projects)) {
|
|
270
|
+
const hash = sha256(p);
|
|
271
|
+
map.set(hash, { name: String(name), path: p });
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
// Ignore parse errors
|
|
278
|
+
}
|
|
279
|
+
// Also check ~/.gemini/history/*/.project_root for additional mappings
|
|
280
|
+
const historyDir = path.join(HOME, '.gemini', 'history');
|
|
281
|
+
if (fs.existsSync(historyDir)) {
|
|
282
|
+
try {
|
|
283
|
+
for (const name of fs.readdirSync(historyDir)) {
|
|
284
|
+
const rootFile = path.join(historyDir, name, '.project_root');
|
|
285
|
+
if (fs.existsSync(rootFile)) {
|
|
286
|
+
try {
|
|
287
|
+
const projectPath = fs.readFileSync(rootFile, 'utf-8').trim();
|
|
288
|
+
if (projectPath) {
|
|
289
|
+
const hash = sha256(projectPath);
|
|
290
|
+
map.set(hash, { name, path: projectPath });
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
// Skip
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// Skip
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return map;
|
|
304
|
+
}
|
|
305
|
+
// ---------------------------------------------------------------------------
|
|
306
|
+
// Utilities
|
|
307
|
+
// ---------------------------------------------------------------------------
|
|
308
|
+
function readFirstLines(filePath, maxLines) {
|
|
309
|
+
return new Promise((resolve) => {
|
|
310
|
+
const lines = [];
|
|
311
|
+
const stream = fs.createReadStream(filePath, { encoding: 'utf-8' });
|
|
312
|
+
const rl = readline.createInterface({ input: stream, crlfDelay: Infinity });
|
|
313
|
+
rl.on('line', (line) => {
|
|
314
|
+
if (line.trim()) {
|
|
315
|
+
lines.push(line);
|
|
316
|
+
}
|
|
317
|
+
if (lines.length >= maxLines) {
|
|
318
|
+
rl.close();
|
|
319
|
+
stream.destroy();
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
rl.on('close', () => resolve(lines));
|
|
323
|
+
rl.on('error', () => resolve(lines));
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Walk a directory recursively for files with a given extension.
|
|
328
|
+
* Returns at most `limit` files, sorted by mtime descending.
|
|
329
|
+
*/
|
|
330
|
+
function walkForFiles(dir, ext, limit) {
|
|
331
|
+
const results = [];
|
|
332
|
+
function walk(d, depth) {
|
|
333
|
+
if (depth > 5)
|
|
334
|
+
return; // Prevent deep recursion
|
|
335
|
+
let entries;
|
|
336
|
+
try {
|
|
337
|
+
entries = fs.readdirSync(d);
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
for (const entry of entries) {
|
|
343
|
+
const full = path.join(d, entry);
|
|
344
|
+
const stat = safeStatSync(full);
|
|
345
|
+
if (!stat)
|
|
346
|
+
continue;
|
|
347
|
+
if (stat.isDirectory()) {
|
|
348
|
+
walk(full, depth + 1);
|
|
349
|
+
}
|
|
350
|
+
else if (entry.endsWith(ext)) {
|
|
351
|
+
results.push({ path: full, mtime: stat.mtimeMs });
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
walk(dir, 0);
|
|
356
|
+
// Sort by mtime descending and limit
|
|
357
|
+
results.sort((a, b) => b.mtime - a.mtime);
|
|
358
|
+
return results.slice(0, limit).map(r => r.path);
|
|
359
|
+
}
|
|
360
|
+
function extractJsonField(text, field) {
|
|
361
|
+
const re = new RegExp(`"${field}"\\s*:\\s*"([^"]*)"`, 'i');
|
|
362
|
+
const match = text.match(re);
|
|
363
|
+
return match ? match[1] : '';
|
|
364
|
+
}
|
|
365
|
+
function sha256(input) {
|
|
366
|
+
return crypto.createHash('sha256').update(input).digest('hex');
|
|
367
|
+
}
|
|
368
|
+
function safeStatSync(p) {
|
|
369
|
+
try {
|
|
370
|
+
return fs.statSync(p);
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
return null;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/lib/session/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SessionAgentId, SessionEvent } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Auto-detect agent type from file path and parse the session.
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseSession(filePath: string, agent?: SessionAgentId): SessionEvent[];
|
|
6
|
+
export declare function detectAgent(filePath: string): SessionAgentId | null;
|
|
7
|
+
/**
|
|
8
|
+
* Summarize a tool_use into a one-liner string.
|
|
9
|
+
*/
|
|
10
|
+
export declare function summarizeToolUse(tool: string, args?: Record<string, any>): string;
|
|
11
|
+
export declare function parseClaude(filePath: string): SessionEvent[];
|
|
12
|
+
export declare function parseCodex(filePath: string): SessionEvent[];
|
|
13
|
+
export declare function parseGemini(filePath: string): SessionEvent[];
|
|
14
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/lib/session/parse.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE,CAWrF;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CA4CjF;AAgBD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CA+I5D;AAMD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CA2H3D;AAMD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CA2G5D"}
|