recall-player 1.0.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 (108) hide show
  1. package/README.md +238 -0
  2. package/backend/dist/db/connection.d.ts +47 -0
  3. package/backend/dist/db/connection.d.ts.map +1 -0
  4. package/backend/dist/db/connection.js +88 -0
  5. package/backend/dist/db/connection.js.map +1 -0
  6. package/backend/dist/db/queries.d.ts +172 -0
  7. package/backend/dist/db/queries.d.ts.map +1 -0
  8. package/backend/dist/db/queries.js +436 -0
  9. package/backend/dist/db/queries.js.map +1 -0
  10. package/backend/dist/db/schema.d.ts +100 -0
  11. package/backend/dist/db/schema.d.ts.map +1 -0
  12. package/backend/dist/db/schema.js +6 -0
  13. package/backend/dist/db/schema.js.map +1 -0
  14. package/backend/dist/db/transcript-connection.d.ts +57 -0
  15. package/backend/dist/db/transcript-connection.d.ts.map +1 -0
  16. package/backend/dist/db/transcript-connection.js +112 -0
  17. package/backend/dist/db/transcript-connection.js.map +1 -0
  18. package/backend/dist/db/transcript-queries.d.ts +152 -0
  19. package/backend/dist/db/transcript-queries.d.ts.map +1 -0
  20. package/backend/dist/db/transcript-queries.js +706 -0
  21. package/backend/dist/db/transcript-queries.js.map +1 -0
  22. package/backend/dist/db/transcript-schema.d.ts +143 -0
  23. package/backend/dist/db/transcript-schema.d.ts.map +1 -0
  24. package/backend/dist/db/transcript-schema.js +10 -0
  25. package/backend/dist/db/transcript-schema.js.map +1 -0
  26. package/backend/dist/index.d.ts +2 -0
  27. package/backend/dist/index.d.ts.map +1 -0
  28. package/backend/dist/index.js +96 -0
  29. package/backend/dist/index.js.map +1 -0
  30. package/backend/dist/parser/agent-detector.d.ts +76 -0
  31. package/backend/dist/parser/agent-detector.d.ts.map +1 -0
  32. package/backend/dist/parser/agent-detector.js +281 -0
  33. package/backend/dist/parser/agent-detector.js.map +1 -0
  34. package/backend/dist/parser/base-parser.d.ts +123 -0
  35. package/backend/dist/parser/base-parser.d.ts.map +1 -0
  36. package/backend/dist/parser/base-parser.js +364 -0
  37. package/backend/dist/parser/base-parser.js.map +1 -0
  38. package/backend/dist/parser/claude-parser.d.ts +78 -0
  39. package/backend/dist/parser/claude-parser.d.ts.map +1 -0
  40. package/backend/dist/parser/claude-parser.js +247 -0
  41. package/backend/dist/parser/claude-parser.js.map +1 -0
  42. package/backend/dist/parser/codex-parser.d.ts +128 -0
  43. package/backend/dist/parser/codex-parser.d.ts.map +1 -0
  44. package/backend/dist/parser/codex-parser.js +371 -0
  45. package/backend/dist/parser/codex-parser.js.map +1 -0
  46. package/backend/dist/parser/gemini-parser.d.ts +107 -0
  47. package/backend/dist/parser/gemini-parser.d.ts.map +1 -0
  48. package/backend/dist/parser/gemini-parser.js +360 -0
  49. package/backend/dist/parser/gemini-parser.js.map +1 -0
  50. package/backend/dist/parser/parser-factory.d.ts +83 -0
  51. package/backend/dist/parser/parser-factory.d.ts.map +1 -0
  52. package/backend/dist/parser/parser-factory.js +163 -0
  53. package/backend/dist/parser/parser-factory.js.map +1 -0
  54. package/backend/dist/parser/session-indexer.d.ts +79 -0
  55. package/backend/dist/parser/session-indexer.d.ts.map +1 -0
  56. package/backend/dist/parser/session-indexer.js +558 -0
  57. package/backend/dist/parser/session-indexer.js.map +1 -0
  58. package/backend/dist/parser/timeline-builder.d.ts +7 -0
  59. package/backend/dist/parser/timeline-builder.d.ts.map +1 -0
  60. package/backend/dist/parser/timeline-builder.js +334 -0
  61. package/backend/dist/parser/timeline-builder.js.map +1 -0
  62. package/backend/dist/parser/transcript-parser.d.ts +25 -0
  63. package/backend/dist/parser/transcript-parser.d.ts.map +1 -0
  64. package/backend/dist/parser/transcript-parser.js +137 -0
  65. package/backend/dist/parser/transcript-parser.js.map +1 -0
  66. package/backend/dist/routes/commentary.d.ts +33 -0
  67. package/backend/dist/routes/commentary.d.ts.map +1 -0
  68. package/backend/dist/routes/commentary.js +153 -0
  69. package/backend/dist/routes/commentary.js.map +1 -0
  70. package/backend/dist/routes/import.d.ts +3 -0
  71. package/backend/dist/routes/import.d.ts.map +1 -0
  72. package/backend/dist/routes/import.js +220 -0
  73. package/backend/dist/routes/import.js.map +1 -0
  74. package/backend/dist/routes/sessions.d.ts +3 -0
  75. package/backend/dist/routes/sessions.d.ts.map +1 -0
  76. package/backend/dist/routes/sessions.js +393 -0
  77. package/backend/dist/routes/sessions.js.map +1 -0
  78. package/backend/dist/server.d.ts +25 -0
  79. package/backend/dist/server.d.ts.map +1 -0
  80. package/backend/dist/server.js +110 -0
  81. package/backend/dist/server.js.map +1 -0
  82. package/backend/dist/services/example-import.d.ts +20 -0
  83. package/backend/dist/services/example-import.d.ts.map +1 -0
  84. package/backend/dist/services/example-import.js +93 -0
  85. package/backend/dist/services/example-import.js.map +1 -0
  86. package/backend/dist/services/file-watcher.d.ts +22 -0
  87. package/backend/dist/services/file-watcher.d.ts.map +1 -0
  88. package/backend/dist/services/file-watcher.js +141 -0
  89. package/backend/dist/services/file-watcher.js.map +1 -0
  90. package/backend/dist/services/import-cli.d.ts +11 -0
  91. package/backend/dist/services/import-cli.d.ts.map +1 -0
  92. package/backend/dist/services/import-cli.js +171 -0
  93. package/backend/dist/services/import-cli.js.map +1 -0
  94. package/backend/dist/services/transcript-importer.d.ts +98 -0
  95. package/backend/dist/services/transcript-importer.d.ts.map +1 -0
  96. package/backend/dist/services/transcript-importer.js +342 -0
  97. package/backend/dist/services/transcript-importer.js.map +1 -0
  98. package/backend/dist/types/transcript.d.ts +174 -0
  99. package/backend/dist/types/transcript.d.ts.map +1 -0
  100. package/backend/dist/types/transcript.js +8 -0
  101. package/backend/dist/types/transcript.js.map +1 -0
  102. package/backend/package.json +40 -0
  103. package/backend/public/.gitkeep +0 -0
  104. package/backend/public/assets/index-D8IP1zNL.css +1 -0
  105. package/backend/public/assets/index-GtkMiMqE.js +69 -0
  106. package/backend/public/index.html +14 -0
  107. package/bin/recall.js +43 -0
  108. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-queries.js","sourceRoot":"","sources":["../../src/db/transcript-queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * TypeScript types for transcript database schema
3
+ *
4
+ * This module defines the schema for persisting Claude Code session transcripts
5
+ * to SQLite. The database stores parsed playback frames, tool executions, and
6
+ * file diffs for fast querying without re-parsing .jsonl files.
7
+ */
8
+ import type { SessionMetadata, PlaybackFrame } from '../types/transcript';
9
+ /**
10
+ * Database row for session_metadata table
11
+ * Stores high-level session info for fast listing/filtering
12
+ */
13
+ export interface SessionMetadataRow {
14
+ session_id: string;
15
+ slug: string;
16
+ project: string;
17
+ agent_type: string;
18
+ start_time: string;
19
+ end_time: string | null;
20
+ duration_seconds: number | null;
21
+ event_count: number;
22
+ frame_count: number;
23
+ cwd: string;
24
+ first_user_message: string | null;
25
+ parsed_at: string;
26
+ }
27
+ /**
28
+ * Database row for playback_frames table
29
+ * Stores core playback data for session replay
30
+ */
31
+ export interface PlaybackFrameRow {
32
+ id: string;
33
+ session_id: string;
34
+ frame_type: 'user_message' | 'claude_thinking' | 'claude_response' | 'tool_execution';
35
+ timestamp_ms: number;
36
+ duration_ms: number | null;
37
+ user_message_text: string | null;
38
+ thinking_text: string | null;
39
+ thinking_signature: string | null;
40
+ response_text: string | null;
41
+ cwd: string;
42
+ files_read: string | null;
43
+ files_modified: string | null;
44
+ agent_type: string;
45
+ }
46
+ /**
47
+ * Database row for tool_executions table
48
+ * Stores tool call details (Bash, Read, Write, Edit, etc.)
49
+ */
50
+ export interface ToolExecutionRow {
51
+ id: string;
52
+ frame_id: string;
53
+ tool_name: string;
54
+ tool_input: string;
55
+ output_content: string;
56
+ is_error: number;
57
+ exit_code: number | null;
58
+ }
59
+ /**
60
+ * Database row for file_diffs table
61
+ * Stores file edits (Edit/Write tool operations)
62
+ */
63
+ export interface FileDiffRow {
64
+ id: string;
65
+ tool_execution_id: string;
66
+ file_path: string;
67
+ old_content: string | null;
68
+ new_content: string;
69
+ language: string;
70
+ }
71
+ /**
72
+ * Database row for parsing_status table
73
+ * Tracks import progress for bulk imports
74
+ */
75
+ export interface ParsingStatusRow {
76
+ session_id: string;
77
+ transcript_file_path: string;
78
+ total_entries: number;
79
+ frames_created: number;
80
+ status: 'pending' | 'completed' | 'failed';
81
+ started_at: string;
82
+ completed_at: string | null;
83
+ error_message: string | null;
84
+ }
85
+ /**
86
+ * API Response types
87
+ */
88
+ export interface TranscriptSessionListResponse {
89
+ sessions: SessionMetadata[];
90
+ total: number;
91
+ offset: number;
92
+ limit: number;
93
+ }
94
+ export interface TranscriptSessionDetailsResponse {
95
+ session: SessionMetadata;
96
+ frameCount: number;
97
+ toolExecutionCount: number;
98
+ fileDiffCount: number;
99
+ }
100
+ export interface TranscriptFramesResponse {
101
+ frames: PlaybackFrame[];
102
+ total: number;
103
+ offset: number;
104
+ limit: number;
105
+ sessionId: string;
106
+ }
107
+ export interface ImportStatusResponse {
108
+ status: 'idle' | 'importing' | 'completed' | 'failed';
109
+ totalSessions: number;
110
+ completedSessions: number;
111
+ failedSessions: number;
112
+ currentSession?: string;
113
+ startedAt?: string;
114
+ completedAt?: string;
115
+ errorMessage?: string;
116
+ }
117
+ /**
118
+ * API Query parameters
119
+ */
120
+ export interface TranscriptSessionListQuery {
121
+ offset?: number;
122
+ limit?: number;
123
+ project?: string;
124
+ agent?: 'claude' | 'codex' | 'gemini' | 'unknown';
125
+ dateStart?: string;
126
+ dateEnd?: string;
127
+ }
128
+ export interface TranscriptFramesQuery {
129
+ offset?: number;
130
+ limit?: number;
131
+ afterTimestamp?: number;
132
+ frameTypes?: string;
133
+ }
134
+ /**
135
+ * Import job configuration
136
+ */
137
+ export interface ImportJobConfig {
138
+ sourcePath?: string;
139
+ parallel?: number;
140
+ skipExisting?: boolean;
141
+ onProgress?: (completed: number, total: number) => void;
142
+ }
143
+ //# sourceMappingURL=transcript-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-schema.d.ts","sourceRoot":"","sources":["../../src/db/transcript-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript types for transcript database schema
4
+ *
5
+ * This module defines the schema for persisting Claude Code session transcripts
6
+ * to SQLite. The database stores parsed playback frames, tool executions, and
7
+ * file diffs for fast querying without re-parsing .jsonl files.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=transcript-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-schema.js","sourceRoot":"","sources":["../../src/db/transcript-schema.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // @ts-nocheck - Functions used in closure confuse TS strict mode
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ const server_1 = require("./server");
9
+ const connection_1 = require("./db/connection");
10
+ const transcript_connection_1 = require("./db/transcript-connection");
11
+ const transcript_queries_1 = require("./db/transcript-queries");
12
+ const file_watcher_1 = require("./services/file-watcher");
13
+ // Load environment variables
14
+ dotenv_1.default.config();
15
+ const PORT = process.env.PORT || 3001;
16
+ const AUTO_WATCH = process.env.AUTO_WATCH !== 'false'; // Default: enabled
17
+ /**
18
+ * Start the server
19
+ */
20
+ function start() {
21
+ try {
22
+ // Test claude-mem database connection
23
+ console.log('Testing claude-mem database connection...');
24
+ const db = (0, connection_1.getDbInstance)();
25
+ const result = db.prepare('SELECT COUNT(*) as count FROM sdk_sessions').get();
26
+ console.log(`✅ Claude-mem database: ${result.count} sessions found`);
27
+ // Initialize transcript database
28
+ console.log('Initializing transcript database...');
29
+ (0, transcript_queries_1.initializeTranscriptSchema)();
30
+ const transcriptDb = (0, transcript_connection_1.getTranscriptDbInstance)();
31
+ const transcriptResult = transcriptDb.prepare('SELECT COUNT(*) as count FROM session_metadata').get();
32
+ console.log(`✅ Transcript database: ${transcriptResult.count} sessions imported`);
33
+ console.log(` Location: ${(0, transcript_connection_1.getTranscriptDbPath)()}`);
34
+ // Start file watcher
35
+ if (AUTO_WATCH) {
36
+ console.log('Starting file watcher for auto-import...');
37
+ (0, file_watcher_1.startWatcher)();
38
+ console.log(`✅ File watcher: monitoring ~/.claude/projects/`);
39
+ }
40
+ else {
41
+ console.log('⏸️ File watcher disabled (AUTO_WATCH=false)');
42
+ }
43
+ // Create Express app
44
+ const app = (0, server_1.createServer)();
45
+ // Start listening
46
+ const server = app.listen(PORT, () => {
47
+ console.log(`\n🚀 Recall Server`);
48
+ console.log(`📡 Server running on http://localhost:${PORT}`);
49
+ console.log(`💾 Claude-mem DB: ~/.claude-mem/claude-mem.db`);
50
+ console.log(`💾 Transcript DB: ${(0, transcript_connection_1.getTranscriptDbPath)()}`);
51
+ console.log(`\nAPI Endpoints:`);
52
+ console.log(` GET /api/health`);
53
+ console.log(` GET /api/sessions?source=filesystem|db`);
54
+ console.log(` GET /api/sessions/:id`);
55
+ console.log(` GET /api/sessions/:id/frames?source=filesystem|db`);
56
+ console.log(` GET /api/sessions/:id/events`);
57
+ console.log(` POST /api/import/start`);
58
+ console.log(` GET /api/import/status`);
59
+ console.log(` GET /api/import/stats`);
60
+ console.log(` POST /api/import/single`);
61
+ console.log(`\nPress Ctrl+C to stop\n`);
62
+ });
63
+ // Graceful shutdown
64
+ const shutdown = () => {
65
+ server.close(() => {
66
+ console.log('✅ HTTP server closed');
67
+ // Stop file watcher
68
+ if (AUTO_WATCH) {
69
+ (0, file_watcher_1.stopWatcher)();
70
+ console.log('✅ File watcher stopped');
71
+ }
72
+ // Close database connections
73
+ (0, connection_1.closeDatabase)();
74
+ console.log('✅ Claude-mem database closed');
75
+ (0, transcript_connection_1.closeTranscriptDatabase)();
76
+ console.log('✅ Transcript database closed');
77
+ process.exit(0);
78
+ });
79
+ };
80
+ process.on('SIGTERM', () => {
81
+ console.log('\n⏹️ SIGTERM received, shutting down gracefully...');
82
+ shutdown();
83
+ });
84
+ process.on('SIGINT', () => {
85
+ console.log('\n⏹️ SIGINT received, shutting down gracefully...');
86
+ shutdown();
87
+ });
88
+ }
89
+ catch (error) {
90
+ console.error('❌ Failed to start server:', error);
91
+ process.exit(1);
92
+ }
93
+ }
94
+ // Start the server
95
+ start();
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Agent Detection Module
3
+ *
4
+ * Detects which AI coding agent produced a session file
5
+ * based on file path patterns and content signatures.
6
+ */
7
+ /**
8
+ * Supported AI coding agent types
9
+ */
10
+ export type AgentType = 'claude' | 'codex' | 'gemini' | 'unknown';
11
+ /**
12
+ * Agent detection result with metadata
13
+ */
14
+ export interface AgentInfo {
15
+ type: AgentType;
16
+ version?: string;
17
+ sessionPath: string;
18
+ }
19
+ /**
20
+ * Agent directory configuration
21
+ */
22
+ export interface AgentDirConfig {
23
+ type: AgentType;
24
+ baseDir: string;
25
+ sessionSubdir?: string;
26
+ filePattern: RegExp;
27
+ }
28
+ /**
29
+ * Get default session directories for each agent
30
+ */
31
+ export declare function getAgentSessionDirs(): Map<AgentType, string>;
32
+ /**
33
+ * Get all agent directory configurations
34
+ */
35
+ export declare function getAgentConfigs(): AgentDirConfig[];
36
+ /**
37
+ * Detect agent type from file path
38
+ *
39
+ * Uses path patterns to identify the agent:
40
+ * - `~/.claude/projects/**` → Claude
41
+ * - `~/.codex/sessions/**` → Codex
42
+ * - `~/.gemini/sessions/**` → Gemini
43
+ *
44
+ * @param filePath - Absolute path to session file
45
+ * @returns Detected agent type
46
+ */
47
+ export declare function detectAgentFromPath(filePath: string): AgentType;
48
+ /**
49
+ * Detect agent type from JSONL content
50
+ *
51
+ * Analyzes the structure and fields of entries to identify the agent:
52
+ * - Claude: Has `thinking` blocks with `signature`, uses Anthropic tool format
53
+ * - Codex: Uses OpenAI function calling format, may have `model: "o1"` or similar
54
+ * - Gemini: Has Gemini-specific model identifiers
55
+ *
56
+ * @param firstEntry - First parsed JSON entry from the file
57
+ * @returns Detected agent type
58
+ */
59
+ export declare function detectAgentFromContent(firstEntry: any): AgentType;
60
+ /**
61
+ * Get full agent info from file path and optional content
62
+ *
63
+ * @param filePath - Path to session file
64
+ * @param firstEntry - Optional first entry for content-based detection
65
+ * @returns AgentInfo with type, version, and path
66
+ */
67
+ export declare function getAgentInfo(filePath: string, firstEntry?: any): AgentInfo;
68
+ /**
69
+ * Get display name for agent type
70
+ */
71
+ export declare function getAgentDisplayName(type: AgentType): string;
72
+ /**
73
+ * Get agent badge color for UI
74
+ */
75
+ export declare function getAgentBadgeColor(type: AgentType): string;
76
+ //# sourceMappingURL=agent-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-detector.d.ts","sourceRoot":"","sources":["../../src/parser/agent-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAQ5D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,cAAc,EAAE,CAqBlD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CA4B/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,GAAG,GAAG,SAAS,CA6BjE;AAyFD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,GAAG,SAAS,CAoB1E;AA4CD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAQ3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAQ1D"}
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Detection Module
4
+ *
5
+ * Detects which AI coding agent produced a session file
6
+ * based on file path patterns and content signatures.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getAgentSessionDirs = getAgentSessionDirs;
13
+ exports.getAgentConfigs = getAgentConfigs;
14
+ exports.detectAgentFromPath = detectAgentFromPath;
15
+ exports.detectAgentFromContent = detectAgentFromContent;
16
+ exports.getAgentInfo = getAgentInfo;
17
+ exports.getAgentDisplayName = getAgentDisplayName;
18
+ exports.getAgentBadgeColor = getAgentBadgeColor;
19
+ const path_1 = __importDefault(require("path"));
20
+ const os_1 = __importDefault(require("os"));
21
+ /**
22
+ * Get default session directories for each agent
23
+ */
24
+ function getAgentSessionDirs() {
25
+ const homeDir = os_1.default.homedir();
26
+ return new Map([
27
+ ['claude', path_1.default.join(homeDir, '.claude', 'projects')],
28
+ ['codex', path_1.default.join(homeDir, '.codex', 'sessions')],
29
+ ['gemini', path_1.default.join(homeDir, '.gemini', 'tmp')],
30
+ ]);
31
+ }
32
+ /**
33
+ * Get all agent directory configurations
34
+ */
35
+ function getAgentConfigs() {
36
+ const homeDir = os_1.default.homedir();
37
+ return [
38
+ {
39
+ type: 'claude',
40
+ baseDir: path_1.default.join(homeDir, '.claude', 'projects'),
41
+ filePattern: /\.jsonl$/,
42
+ },
43
+ {
44
+ type: 'codex',
45
+ baseDir: path_1.default.join(homeDir, '.codex', 'sessions'),
46
+ filePattern: /\.jsonl$/,
47
+ },
48
+ {
49
+ type: 'gemini',
50
+ baseDir: path_1.default.join(homeDir, '.gemini', 'tmp'),
51
+ sessionSubdir: 'chats',
52
+ filePattern: /^session-.*\.json$/,
53
+ },
54
+ ];
55
+ }
56
+ /**
57
+ * Detect agent type from file path
58
+ *
59
+ * Uses path patterns to identify the agent:
60
+ * - `~/.claude/projects/**` → Claude
61
+ * - `~/.codex/sessions/**` → Codex
62
+ * - `~/.gemini/sessions/**` → Gemini
63
+ *
64
+ * @param filePath - Absolute path to session file
65
+ * @returns Detected agent type
66
+ */
67
+ function detectAgentFromPath(filePath) {
68
+ const normalizedPath = path_1.default.normalize(filePath);
69
+ // Check for Claude path pattern
70
+ if (normalizedPath.includes(`${path_1.default.sep}.claude${path_1.default.sep}`) ||
71
+ normalizedPath.includes('/.claude/')) {
72
+ return 'claude';
73
+ }
74
+ // Check for Codex path pattern
75
+ if (normalizedPath.includes(`${path_1.default.sep}.codex${path_1.default.sep}`) ||
76
+ normalizedPath.includes('/.codex/')) {
77
+ return 'codex';
78
+ }
79
+ // Check for Gemini path pattern (future)
80
+ if (normalizedPath.includes(`${path_1.default.sep}.gemini${path_1.default.sep}`) ||
81
+ normalizedPath.includes('/.gemini/')) {
82
+ return 'gemini';
83
+ }
84
+ return 'unknown';
85
+ }
86
+ /**
87
+ * Detect agent type from JSONL content
88
+ *
89
+ * Analyzes the structure and fields of entries to identify the agent:
90
+ * - Claude: Has `thinking` blocks with `signature`, uses Anthropic tool format
91
+ * - Codex: Uses OpenAI function calling format, may have `model: "o1"` or similar
92
+ * - Gemini: Has Gemini-specific model identifiers
93
+ *
94
+ * @param firstEntry - First parsed JSON entry from the file
95
+ * @returns Detected agent type
96
+ */
97
+ function detectAgentFromContent(firstEntry) {
98
+ if (!firstEntry || typeof firstEntry !== 'object') {
99
+ return 'unknown';
100
+ }
101
+ // Claude detection: Look for Anthropic-specific patterns
102
+ // - Has thinking blocks with signatures
103
+ // - Uses tool_use/tool_result format
104
+ // - Has sessionId in Claude's UUID format
105
+ if (hasClaudeSignatures(firstEntry)) {
106
+ return 'claude';
107
+ }
108
+ // Codex detection: Look for OpenAI-specific patterns
109
+ // - Uses function_call or tool_calls format
110
+ // - Model names like "o1", "o3", "gpt-4", etc.
111
+ // - Different message structure
112
+ if (hasCodexSignatures(firstEntry)) {
113
+ return 'codex';
114
+ }
115
+ // Gemini detection: Look for Google-specific patterns
116
+ // - Model names like "gemini-pro", "gemini-ultra"
117
+ // - Google-specific tool format
118
+ if (hasGeminiSignatures(firstEntry)) {
119
+ return 'gemini';
120
+ }
121
+ return 'unknown';
122
+ }
123
+ /**
124
+ * Check for Claude-specific content signatures
125
+ */
126
+ function hasClaudeSignatures(entry) {
127
+ // Check for Claude's sessionId format (UUID-like)
128
+ if (entry.sessionId && /^[a-f0-9-]{36}$/i.test(entry.sessionId)) {
129
+ return true;
130
+ }
131
+ // Check for thinking blocks with signature
132
+ const content = entry.message?.content;
133
+ if (Array.isArray(content)) {
134
+ for (const block of content) {
135
+ if (block.type === 'thinking' && block.signature) {
136
+ return true;
137
+ }
138
+ // Claude-specific tool_use format with id
139
+ if (block.type === 'tool_use' && block.id && block.name) {
140
+ return true;
141
+ }
142
+ }
143
+ }
144
+ // Check for Claude-specific fields
145
+ if (entry.cwd !== undefined && entry.uuid !== undefined) {
146
+ return true;
147
+ }
148
+ return false;
149
+ }
150
+ /**
151
+ * Check for Codex/OpenAI-specific content signatures
152
+ */
153
+ function hasCodexSignatures(entry) {
154
+ // Check for OpenAI model names
155
+ const model = entry.model || entry.metadata?.model;
156
+ if (model && /^(o1|o3|gpt-4|gpt-3\.5|davinci|codex)/i.test(model)) {
157
+ return true;
158
+ }
159
+ // Check for OpenAI function calling format
160
+ if (entry.function_call || entry.tool_calls) {
161
+ return true;
162
+ }
163
+ // Check for choices array (OpenAI response format)
164
+ if (entry.choices && Array.isArray(entry.choices)) {
165
+ return true;
166
+ }
167
+ // Check for OpenAI-specific message format
168
+ const message = entry.message || entry;
169
+ if (message.role && message.tool_calls && Array.isArray(message.tool_calls)) {
170
+ for (const tc of message.tool_calls) {
171
+ if (tc.type === 'function' && tc.function?.name) {
172
+ return true;
173
+ }
174
+ }
175
+ }
176
+ return false;
177
+ }
178
+ /**
179
+ * Check for Gemini-specific content signatures
180
+ */
181
+ function hasGeminiSignatures(entry) {
182
+ // Check for Gemini model names
183
+ const model = entry.model || entry.metadata?.model;
184
+ if (model && /^gemini/i.test(model)) {
185
+ return true;
186
+ }
187
+ // Check for Google-specific structures
188
+ if (entry.candidates && Array.isArray(entry.candidates)) {
189
+ return true;
190
+ }
191
+ // Check for Gemini tool format
192
+ if (entry.functionCalls || entry.toolConfig) {
193
+ return true;
194
+ }
195
+ return false;
196
+ }
197
+ /**
198
+ * Get full agent info from file path and optional content
199
+ *
200
+ * @param filePath - Path to session file
201
+ * @param firstEntry - Optional first entry for content-based detection
202
+ * @returns AgentInfo with type, version, and path
203
+ */
204
+ function getAgentInfo(filePath, firstEntry) {
205
+ // Try path-based detection first (faster)
206
+ let type = detectAgentFromPath(filePath);
207
+ // Fall back to content-based detection if path is ambiguous
208
+ if (type === 'unknown' && firstEntry) {
209
+ type = detectAgentFromContent(firstEntry);
210
+ }
211
+ // Extract version if available
212
+ let version;
213
+ if (firstEntry) {
214
+ version = extractAgentVersion(firstEntry, type);
215
+ }
216
+ return {
217
+ type,
218
+ version,
219
+ sessionPath: filePath,
220
+ };
221
+ }
222
+ /**
223
+ * Extract agent/model version from entry
224
+ */
225
+ function extractAgentVersion(entry, agentType) {
226
+ // Look for model field in various locations
227
+ const model = entry.model ||
228
+ entry.metadata?.model ||
229
+ entry.claudeVersion ||
230
+ entry.metadata?.claudeVersion;
231
+ if (model) {
232
+ return String(model);
233
+ }
234
+ // Agent-specific version extraction
235
+ switch (agentType) {
236
+ case 'claude':
237
+ // Claude may have version in different places
238
+ if (entry.metadata?.claudeVersion) {
239
+ return entry.metadata.claudeVersion;
240
+ }
241
+ break;
242
+ case 'codex':
243
+ // OpenAI model from response
244
+ if (entry.model) {
245
+ return entry.model;
246
+ }
247
+ break;
248
+ case 'gemini':
249
+ // Gemini model name
250
+ if (entry.model) {
251
+ return entry.model;
252
+ }
253
+ break;
254
+ }
255
+ return undefined;
256
+ }
257
+ /**
258
+ * Get display name for agent type
259
+ */
260
+ function getAgentDisplayName(type) {
261
+ const names = {
262
+ claude: 'Claude',
263
+ codex: 'Codex',
264
+ gemini: 'Gemini',
265
+ unknown: 'Unknown',
266
+ };
267
+ return names[type];
268
+ }
269
+ /**
270
+ * Get agent badge color for UI
271
+ */
272
+ function getAgentBadgeColor(type) {
273
+ const colors = {
274
+ claude: '#D97706', // Orange/amber for Claude
275
+ codex: '#059669', // Green for Codex/OpenAI
276
+ gemini: '#2563EB', // Blue for Gemini
277
+ unknown: '#6B7280', // Gray for unknown
278
+ };
279
+ return colors[type];
280
+ }
281
+ //# sourceMappingURL=agent-detector.js.map