claude-sessions 0.1.0

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 (48) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +140 -0
  3. package/data/model-pricing.json +113 -0
  4. package/dist/cost-calculator.d.ts +49 -0
  5. package/dist/cost-calculator.d.ts.map +1 -0
  6. package/dist/cost-calculator.js +429 -0
  7. package/dist/cost-calculator.js.map +1 -0
  8. package/dist/index.d.ts +28 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +65 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/projects-service.d.ts +106 -0
  13. package/dist/projects-service.d.ts.map +1 -0
  14. package/dist/projects-service.js +317 -0
  15. package/dist/projects-service.js.map +1 -0
  16. package/dist/session-cache-store.d.ts +48 -0
  17. package/dist/session-cache-store.d.ts.map +1 -0
  18. package/dist/session-cache-store.js +231 -0
  19. package/dist/session-cache-store.js.map +1 -0
  20. package/dist/session-cache.d.ts +266 -0
  21. package/dist/session-cache.d.ts.map +1 -0
  22. package/dist/session-cache.js +1294 -0
  23. package/dist/session-cache.js.map +1 -0
  24. package/dist/session-parser.d.ts +265 -0
  25. package/dist/session-parser.d.ts.map +1 -0
  26. package/dist/session-parser.js +555 -0
  27. package/dist/session-parser.js.map +1 -0
  28. package/dist/session-reader.d.ts +87 -0
  29. package/dist/session-reader.d.ts.map +1 -0
  30. package/dist/session-reader.js +279 -0
  31. package/dist/session-reader.js.map +1 -0
  32. package/dist/tasks-service.d.ts +100 -0
  33. package/dist/tasks-service.d.ts.map +1 -0
  34. package/dist/tasks-service.js +290 -0
  35. package/dist/tasks-service.js.map +1 -0
  36. package/dist/teams-service.d.ts +30 -0
  37. package/dist/teams-service.d.ts.map +1 -0
  38. package/dist/teams-service.js +85 -0
  39. package/dist/teams-service.js.map +1 -0
  40. package/dist/types.d.ts +87 -0
  41. package/dist/types.d.ts.map +1 -0
  42. package/dist/types.js +7 -0
  43. package/dist/types.js.map +1 -0
  44. package/dist/utils/path-utils.d.ts +80 -0
  45. package/dist/utils/path-utils.d.ts.map +1 -0
  46. package/dist/utils/path-utils.js +355 -0
  47. package/dist/utils/path-utils.js.map +1 -0
  48. package/package.json +42 -0
@@ -0,0 +1,555 @@
1
+ "use strict";
2
+ /**
3
+ * Session Parser
4
+ *
5
+ * Core JSONL parsing for Claude Code sessions.
6
+ * Extracted from AgentSessionStore — pure data parsing with no EventEmitter,
7
+ * no server-side dependencies, no SDK session management.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.SessionParser = void 0;
44
+ exports.getFileActionCategory = getFileActionCategory;
45
+ exports.summarizeFileChanges = summarizeFileChanges;
46
+ exports.parseCompactMessageSummary = parseCompactMessageSummary;
47
+ exports.convertCacheToSessionData = convertCacheToSessionData;
48
+ exports.createSessionParser = createSessionParser;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const os = __importStar(require("os"));
52
+ const readline = __importStar(require("readline"));
53
+ const path_utils_1 = require("./utils/path-utils");
54
+ const cost_calculator_1 = require("./cost-calculator");
55
+ // ============================================================================
56
+ // Helper functions
57
+ // ============================================================================
58
+ function getFileActionCategory(command) {
59
+ const cmd = command.toLowerCase();
60
+ if (/\b(cat|head|tail|less|more|read|view)\b/.test(cmd))
61
+ return 'read';
62
+ if (/\b(write|edit|sed|awk|tee|mv|cp|rm|mkdir|touch|chmod)\b/.test(cmd))
63
+ return 'write';
64
+ if (/\b(node|python|npm|yarn|pnpm|cargo|go|make|gcc|bash|sh|zsh)\b/.test(cmd))
65
+ return 'execute';
66
+ if (/\b(grep|rg|find|fd|ag|ack|locate|which|where)\b/.test(cmd))
67
+ return 'search';
68
+ if (/\b(cd|ls|pwd|tree|du|df|stat)\b/.test(cmd))
69
+ return 'navigation';
70
+ return 'other';
71
+ }
72
+ function summarizeFileChanges(changes) {
73
+ const byCategory = {
74
+ read: 0,
75
+ write: 0,
76
+ execute: 0,
77
+ search: 0,
78
+ navigation: 0,
79
+ other: 0,
80
+ };
81
+ const affectedFiles = new Set();
82
+ for (const change of changes) {
83
+ byCategory[change.action]++;
84
+ affectedFiles.add(change.path);
85
+ }
86
+ return {
87
+ totalChanges: changes.length,
88
+ byCategory,
89
+ affectedFiles: Array.from(affectedFiles),
90
+ };
91
+ }
92
+ function parseCompactMessageSummary(summary) {
93
+ const lines = summary.split('\n').filter(l => l.trim());
94
+ const role = summary.includes('assistant') ? 'assistant' : 'user';
95
+ return {
96
+ role,
97
+ text: lines.join('\n'),
98
+ };
99
+ }
100
+ /**
101
+ * Convert LMDB cache data to the public ClaudeSessionData format.
102
+ */
103
+ function convertCacheToSessionData(cache, sessionId, filePath, stats) {
104
+ // Convert user prompts — pass ALL through with promptType (matching original behavior)
105
+ const userPrompts = cache.userPrompts.map(p => ({
106
+ turnIndex: p.turnIndex,
107
+ lineIndex: p.lineIndex,
108
+ text: p.text,
109
+ images: p.images,
110
+ timestamp: p.timestamp,
111
+ promptType: p.promptType,
112
+ }));
113
+ const toolUses = cache.toolUses.map(t => ({
114
+ id: t.id,
115
+ name: t.name,
116
+ input: t.input,
117
+ turnIndex: t.turnIndex,
118
+ lineIndex: t.lineIndex,
119
+ }));
120
+ const tasks = cache.tasks.map(t => ({
121
+ id: t.id,
122
+ subject: t.subject,
123
+ description: t.description,
124
+ activeForm: t.activeForm,
125
+ status: t.status,
126
+ blocks: t.blocks,
127
+ blockedBy: t.blockedBy,
128
+ owner: t.owner,
129
+ }));
130
+ const subagentInvocations = cache.subagents.map(s => ({
131
+ toolUseId: s.toolUseId,
132
+ type: s.type,
133
+ prompt: s.prompt,
134
+ description: s.description,
135
+ model: s.model,
136
+ turnIndex: s.turnIndex,
137
+ lineIndex: s.lineIndex,
138
+ userPromptIndex: s.userPromptIndex,
139
+ status: s.status,
140
+ startedAt: s.startedAt,
141
+ completedAt: s.completedAt,
142
+ result: s.result,
143
+ agentId: s.agentId || undefined,
144
+ runInBackground: s.runInBackground,
145
+ }));
146
+ // Determine session status with time-based heuristics (matching original behavior)
147
+ const lastTimestamp = cache.lastTimestamp ? new Date(cache.lastTimestamp) : null;
148
+ const now = Date.now();
149
+ const msSinceModified = now - stats.mtime.getTime();
150
+ const msSinceLastActivity = lastTimestamp ? now - lastTimestamp.getTime() : Infinity;
151
+ const msSinceActivity = Math.min(msSinceModified, msSinceLastActivity);
152
+ const RUNNING_THRESHOLD = 60_000; // 1 minute
153
+ const IDLE_THRESHOLD = 10 * 60_000; // 10 minutes
154
+ const hasResultMessage = cache.result !== undefined || cache.durationMs > 0;
155
+ const hasAssistantResponse = cache.responses.length > 0;
156
+ let status;
157
+ let isActive;
158
+ if (hasResultMessage && cache.success) {
159
+ status = 'completed';
160
+ isActive = false;
161
+ }
162
+ else if (hasResultMessage && cache.errors && cache.errors.length > 0) {
163
+ status = 'error';
164
+ isActive = false;
165
+ }
166
+ else if (msSinceActivity < RUNNING_THRESHOLD) {
167
+ status = 'running';
168
+ isActive = true;
169
+ }
170
+ else if (hasAssistantResponse && msSinceActivity >= IDLE_THRESHOLD) {
171
+ status = 'completed';
172
+ isActive = false;
173
+ }
174
+ else if (msSinceActivity < IDLE_THRESHOLD) {
175
+ status = 'idle';
176
+ isActive = false;
177
+ }
178
+ else {
179
+ status = 'stale';
180
+ isActive = false;
181
+ }
182
+ // Per-model usage breakdown
183
+ const modelUsage = cache.modelUsage && Object.keys(cache.modelUsage).length > 0
184
+ ? Object.fromEntries(Object.entries(cache.modelUsage).map(([k, v]) => [k, { ...v }]))
185
+ : undefined;
186
+ return {
187
+ sessionId: cache.sessionId || sessionId,
188
+ filePath,
189
+ projectPath: cache.cwd,
190
+ fileSize: stats.size,
191
+ lastModified: stats.mtime,
192
+ model: cache.model,
193
+ cwd: cache.cwd,
194
+ claudeCodeVersion: cache.claudeCodeVersion,
195
+ permissionMode: cache.permissionMode,
196
+ tools: cache.tools,
197
+ mcpServers: cache.mcpServers,
198
+ messages: [],
199
+ userPrompts,
200
+ toolUses,
201
+ tasks,
202
+ subagentInvocations,
203
+ status,
204
+ numTurns: cache.numTurns,
205
+ totalCostUsd: cache.totalCostUsd || cache.cumulativeCostUsd || 0,
206
+ durationMs: cache.durationMs,
207
+ usage: cache.usage,
208
+ modelUsage,
209
+ isActive,
210
+ lastActivityAt: lastTimestamp || undefined,
211
+ result: cache.result,
212
+ errors: cache.errors,
213
+ success: cache.success,
214
+ forkedFromSessionId: cache.forkedFromSessionId,
215
+ };
216
+ }
217
+ // ============================================================================
218
+ // SessionParser
219
+ // ============================================================================
220
+ /**
221
+ * Pure data parser for Claude Code sessions.
222
+ * No EventEmitter, no file watchers, no server dependencies.
223
+ */
224
+ class SessionParser {
225
+ configDir;
226
+ costCalculator;
227
+ constructor(options) {
228
+ this.configDir = options?.configDir || path.join(os.homedir(), '.claude');
229
+ this.costCalculator = new cost_calculator_1.CostCalculator();
230
+ }
231
+ getProjectDir(cwd) {
232
+ const projectKey = (0, path_utils_1.legacyEncodeProjectPath)(cwd);
233
+ return path.join(this.configDir, 'projects', projectKey);
234
+ }
235
+ getSessionFilePath(sessionId, cwd) {
236
+ if (cwd) {
237
+ const filePath = path.join(this.getProjectDir(cwd), `${sessionId}.jsonl`);
238
+ if (fs.existsSync(filePath))
239
+ return filePath;
240
+ }
241
+ // Search across all projects
242
+ const projectsDir = path.join(this.configDir, 'projects');
243
+ if (!fs.existsSync(projectsDir))
244
+ return null;
245
+ const dirs = fs.readdirSync(projectsDir, { withFileTypes: true });
246
+ for (const dir of dirs) {
247
+ if (!dir.isDirectory())
248
+ continue;
249
+ const filePath = path.join(projectsDir, dir.name, `${sessionId}.jsonl`);
250
+ if (fs.existsSync(filePath))
251
+ return filePath;
252
+ }
253
+ return null;
254
+ }
255
+ /**
256
+ * Parse a session JSONL file into structured data.
257
+ */
258
+ async parseSession(sessionId, cwd) {
259
+ const filePath = this.getSessionFilePath(sessionId, cwd);
260
+ if (!filePath)
261
+ return null;
262
+ const stats = fs.statSync(filePath);
263
+ const messages = [];
264
+ const fileStream = fs.createReadStream(filePath);
265
+ const rl = readline.createInterface({
266
+ input: fileStream,
267
+ crlfDelay: Infinity,
268
+ });
269
+ let lineIndex = 0;
270
+ for await (const line of rl) {
271
+ if (line.trim()) {
272
+ try {
273
+ const msg = JSON.parse(line);
274
+ messages.push({ ...msg, lineIndex });
275
+ }
276
+ catch {
277
+ // Skip invalid JSON
278
+ }
279
+ }
280
+ lineIndex++;
281
+ }
282
+ // Extract structured data from messages
283
+ const userPrompts = [];
284
+ const toolUses = [];
285
+ const tasks = [];
286
+ const subagentInvocations = [];
287
+ let sessionModel;
288
+ let sessionCwd;
289
+ let claudeCodeVersion;
290
+ let permissionMode;
291
+ let tools;
292
+ let mcpServers;
293
+ let status = 'unknown';
294
+ let numTurns = 0;
295
+ let totalCostUsd = 0;
296
+ let durationMs = 0;
297
+ let result;
298
+ let errors;
299
+ let success = false;
300
+ let forkedFromSessionId;
301
+ let usage = { inputTokens: 0, outputTokens: 0, cacheCreationInputTokens: 0, cacheReadInputTokens: 0 };
302
+ let turnIndex = 0;
303
+ for (const msg of messages) {
304
+ if (msg.type === 'system' && msg.subtype === 'init') {
305
+ sessionModel = msg.model;
306
+ sessionCwd = msg.cwd;
307
+ claudeCodeVersion = msg.claude_code_version;
308
+ permissionMode = msg.permissionMode;
309
+ tools = msg.tools;
310
+ mcpServers = msg.mcp_servers;
311
+ }
312
+ if (msg.type === 'user') {
313
+ const content = msg.message?.content;
314
+ let text = '';
315
+ let images = 0;
316
+ if (Array.isArray(content)) {
317
+ for (const block of content) {
318
+ if (block.type === 'text')
319
+ text += block.text;
320
+ if (block.type === 'image')
321
+ images++;
322
+ }
323
+ }
324
+ else if (typeof content === 'string') {
325
+ text = content;
326
+ }
327
+ if (text && !text.trimStart().startsWith('<')) {
328
+ userPrompts.push({
329
+ turnIndex,
330
+ lineIndex: msg.lineIndex || 0,
331
+ text,
332
+ images: images > 0 ? images : undefined,
333
+ timestamp: msg.timestamp,
334
+ });
335
+ }
336
+ }
337
+ if (msg.type === 'assistant') {
338
+ turnIndex++;
339
+ numTurns++;
340
+ if (msg.message?.model) {
341
+ sessionModel = msg.message.model;
342
+ }
343
+ const content = msg.message?.content;
344
+ if (Array.isArray(content)) {
345
+ for (const block of content) {
346
+ if (block.type === 'tool_use' && block.id && block.name) {
347
+ toolUses.push({
348
+ id: block.id,
349
+ name: block.name,
350
+ input: block.input,
351
+ turnIndex,
352
+ lineIndex: msg.lineIndex || 0,
353
+ });
354
+ if (block.name === 'Task' && block.input) {
355
+ subagentInvocations.push({
356
+ toolUseId: block.id,
357
+ type: block.input.subagent_type || block.input.type || 'general-purpose',
358
+ prompt: block.input.prompt || '',
359
+ description: block.input.description,
360
+ model: block.input.model,
361
+ turnIndex,
362
+ lineIndex: msg.lineIndex || 0,
363
+ userPromptIndex: Math.max(0, userPrompts.length - 1),
364
+ status: 'pending',
365
+ startedAt: msg.timestamp,
366
+ runInBackground: block.input.run_in_background,
367
+ });
368
+ }
369
+ }
370
+ }
371
+ }
372
+ if (msg.message?.usage) {
373
+ const u = msg.message.usage;
374
+ usage.inputTokens += u.input_tokens || 0;
375
+ usage.outputTokens += u.output_tokens || 0;
376
+ usage.cacheCreationInputTokens += u.cache_creation_input_tokens || 0;
377
+ usage.cacheReadInputTokens += u.cache_read_input_tokens || 0;
378
+ }
379
+ }
380
+ if (msg.type === 'result') {
381
+ result = msg.result;
382
+ success = msg.subtype === 'success';
383
+ status = success ? 'completed' : 'error';
384
+ if (msg.error) {
385
+ errors = [msg.error];
386
+ }
387
+ if (msg.total_cost_usd)
388
+ totalCostUsd = msg.total_cost_usd;
389
+ if (msg.duration_ms)
390
+ durationMs = msg.duration_ms;
391
+ if (msg.usage) {
392
+ usage = {
393
+ inputTokens: msg.usage.input_tokens || 0,
394
+ outputTokens: msg.usage.output_tokens || 0,
395
+ cacheCreationInputTokens: msg.usage.cache_creation_input_tokens || 0,
396
+ cacheReadInputTokens: msg.usage.cache_read_input_tokens || 0,
397
+ };
398
+ }
399
+ }
400
+ }
401
+ // If no result message, estimate cost from usage
402
+ if (!totalCostUsd && usage.inputTokens > 0) {
403
+ totalCostUsd = this.costCalculator.calculateCost(usage, sessionModel || '').totalCost;
404
+ }
405
+ // If no result message, try to determine status using time-based heuristics
406
+ if (status === 'unknown') {
407
+ const now = Date.now();
408
+ const msSinceModified = now - stats.mtime.getTime();
409
+ if (msSinceModified < 60_000) {
410
+ status = 'running';
411
+ }
412
+ else if (msSinceModified < 10 * 60_000) {
413
+ status = 'idle';
414
+ }
415
+ else {
416
+ status = 'stale';
417
+ }
418
+ }
419
+ return {
420
+ sessionId,
421
+ filePath,
422
+ projectPath: sessionCwd,
423
+ fileSize: stats.size,
424
+ lastModified: stats.mtime,
425
+ model: sessionModel,
426
+ cwd: sessionCwd,
427
+ claudeCodeVersion,
428
+ permissionMode,
429
+ tools,
430
+ mcpServers,
431
+ messages,
432
+ userPrompts,
433
+ toolUses,
434
+ tasks,
435
+ subagentInvocations,
436
+ status,
437
+ numTurns,
438
+ totalCostUsd,
439
+ durationMs,
440
+ usage,
441
+ result,
442
+ errors,
443
+ success,
444
+ forkedFromSessionId,
445
+ };
446
+ }
447
+ /**
448
+ * Get the conversation in a simplified format.
449
+ */
450
+ async getConversation(options) {
451
+ const sessionData = await this.parseSession(options.sessionId, options.cwd);
452
+ if (!sessionData)
453
+ return null;
454
+ const messages = [];
455
+ const toolDetail = options.toolDetail || 'summary';
456
+ const includeThinking = options.includeThinking ?? false;
457
+ for (const msg of sessionData.messages) {
458
+ if (msg.type === 'system' && msg.subtype === 'init') {
459
+ messages.push({
460
+ role: 'system',
461
+ content: `Session started (model: ${msg.model || 'unknown'})`,
462
+ timestamp: msg.timestamp,
463
+ lineIndex: msg.lineIndex,
464
+ });
465
+ }
466
+ if (msg.type === 'user') {
467
+ const content = msg.message?.content;
468
+ let text = '';
469
+ if (Array.isArray(content)) {
470
+ for (const block of content) {
471
+ if (block.type === 'text')
472
+ text += block.text;
473
+ }
474
+ }
475
+ else if (typeof content === 'string') {
476
+ text = content;
477
+ }
478
+ if (text) {
479
+ messages.push({
480
+ role: 'user',
481
+ content: text,
482
+ timestamp: msg.timestamp,
483
+ lineIndex: msg.lineIndex,
484
+ });
485
+ }
486
+ }
487
+ if (msg.type === 'assistant') {
488
+ const content = msg.message?.content;
489
+ let text = '';
490
+ let thinking = '';
491
+ const toolCalls = [];
492
+ if (Array.isArray(content)) {
493
+ for (const block of content) {
494
+ if (block.type === 'text')
495
+ text += block.text;
496
+ if (block.type === 'thinking' && includeThinking) {
497
+ thinking += block.thinking;
498
+ }
499
+ if (block.type === 'tool_use' && toolDetail !== 'none') {
500
+ toolCalls.push({
501
+ id: block.id || '',
502
+ name: block.name || '',
503
+ input: toolDetail === 'full' ? block.input : undefined,
504
+ });
505
+ }
506
+ }
507
+ }
508
+ const convMsg = {
509
+ role: 'assistant',
510
+ content: text,
511
+ timestamp: msg.timestamp,
512
+ lineIndex: msg.lineIndex,
513
+ model: msg.message?.model,
514
+ };
515
+ if (toolCalls.length > 0)
516
+ convMsg.toolCalls = toolCalls;
517
+ if (thinking)
518
+ convMsg.thinking = thinking;
519
+ if (msg.message?.usage) {
520
+ convMsg.usage = {
521
+ inputTokens: msg.message.usage.input_tokens || 0,
522
+ outputTokens: msg.message.usage.output_tokens || 0,
523
+ };
524
+ }
525
+ messages.push(convMsg);
526
+ }
527
+ if (msg.type === 'result') {
528
+ messages.push({
529
+ role: 'result',
530
+ content: msg.result || (msg.error ? `Error: ${msg.error}` : 'Session ended'),
531
+ timestamp: msg.timestamp,
532
+ lineIndex: msg.lineIndex,
533
+ });
534
+ }
535
+ }
536
+ const finalMessages = options.maxMessages
537
+ ? messages.slice(-options.maxMessages)
538
+ : messages;
539
+ return {
540
+ sessionId: options.sessionId,
541
+ messages: finalMessages,
542
+ metadata: {
543
+ model: sessionData.model,
544
+ totalCost: sessionData.totalCostUsd,
545
+ numTurns: sessionData.numTurns,
546
+ status: sessionData.status,
547
+ },
548
+ };
549
+ }
550
+ }
551
+ exports.SessionParser = SessionParser;
552
+ function createSessionParser(options) {
553
+ return new SessionParser(options);
554
+ }
555
+ //# sourceMappingURL=session-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-parser.js","sourceRoot":"","sources":["../src/session-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Session Reader
3
+ *
4
+ * Read-only access to session files in ~/.claude/projects/.
5
+ * Provides low-level JSONL file discovery and reading.
6
+ */
7
+ /**
8
+ * Summary info about a session (for listing)
9
+ */
10
+ export interface SessionSummary {
11
+ sessionId: string;
12
+ projectPath: string;
13
+ projectKey: string;
14
+ lastModified: Date;
15
+ sizeBytes: number;
16
+ }
17
+ /**
18
+ * Detailed info about a session
19
+ */
20
+ export interface SessionInfo extends SessionSummary {
21
+ model?: string;
22
+ numTurns?: number;
23
+ totalCostUsd?: number;
24
+ status?: 'active' | 'completed' | 'error';
25
+ result?: string;
26
+ durationMs?: number;
27
+ }
28
+ /**
29
+ * Project info (from raw session files)
30
+ */
31
+ export interface ProjectInfo {
32
+ key: string;
33
+ path: string;
34
+ sessionCount: number;
35
+ lastActivity: Date;
36
+ }
37
+ /**
38
+ * Subagent file metadata
39
+ */
40
+ export interface SubagentFileInfo {
41
+ agentId: string;
42
+ sessionId: string;
43
+ filePath: string;
44
+ lastModified: Date;
45
+ sizeBytes: number;
46
+ }
47
+ /**
48
+ * Configuration for SessionReader
49
+ */
50
+ export interface SessionReaderConfig {
51
+ /** Override config directory (default: ~/.claude) */
52
+ configDir?: string;
53
+ /** Default working directory for project resolution */
54
+ defaultCwd?: string;
55
+ }
56
+ /**
57
+ * Read-only access to session files.
58
+ *
59
+ * Sessions are stored in ~/.claude/projects/{projectKey}/ as JSONL files.
60
+ * This class provides methods to:
61
+ * - List sessions and projects
62
+ * - Read session data (messages, tool uses, etc.)
63
+ * - Access conversation history
64
+ * - Read subagent session files
65
+ */
66
+ export declare class SessionReader {
67
+ private configDir;
68
+ private defaultCwd?;
69
+ constructor(config?: SessionReaderConfig);
70
+ getProjectsDir(): string;
71
+ cwdToProjectKey(cwd: string): string;
72
+ getProjectDir(cwd?: string): string;
73
+ getSessionFilePath(sessionId: string, cwd?: string): string;
74
+ listSessions(cwd?: string): SessionSummary[];
75
+ listSessionsWithDetails(cwd?: string): SessionInfo[];
76
+ listProjects(): ProjectInfo[];
77
+ sessionExists(sessionId: string, cwd?: string): boolean;
78
+ listSubagentFiles(sessionId?: string, cwd?: string): SubagentFileInfo[];
79
+ readSessionLines(sessionId: string, cwd?: string): Promise<string[]>;
80
+ readSessionLinesFrom(sessionId: string, fromLineIndex: number, cwd?: string, limit?: number): Promise<{
81
+ lines: string[];
82
+ totalLines: number;
83
+ }>;
84
+ parseJsonlLine<T = unknown>(line: string): T | null;
85
+ }
86
+ export declare function createSessionReader(config?: SessionReaderConfig): SessionReader;
87
+ //# sourceMappingURL=session-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-reader.d.ts","sourceRoot":"","sources":["../src/session-reader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,CAAC,EAAE,mBAAmB;IAKxC,cAAc,IAAI,MAAM;IAIxB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIpC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAMnC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAI3D,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;IAgC5C,uBAAuB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IA+CpD,YAAY,IAAI,WAAW,EAAE;IAsC7B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAKvD,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAuDjE,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBpE,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAYnD,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;CAOpD;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,aAAa,CAE/E"}