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.
- package/README.md +238 -0
- package/backend/dist/db/connection.d.ts +47 -0
- package/backend/dist/db/connection.d.ts.map +1 -0
- package/backend/dist/db/connection.js +88 -0
- package/backend/dist/db/connection.js.map +1 -0
- package/backend/dist/db/queries.d.ts +172 -0
- package/backend/dist/db/queries.d.ts.map +1 -0
- package/backend/dist/db/queries.js +436 -0
- package/backend/dist/db/queries.js.map +1 -0
- package/backend/dist/db/schema.d.ts +100 -0
- package/backend/dist/db/schema.d.ts.map +1 -0
- package/backend/dist/db/schema.js +6 -0
- package/backend/dist/db/schema.js.map +1 -0
- package/backend/dist/db/transcript-connection.d.ts +57 -0
- package/backend/dist/db/transcript-connection.d.ts.map +1 -0
- package/backend/dist/db/transcript-connection.js +112 -0
- package/backend/dist/db/transcript-connection.js.map +1 -0
- package/backend/dist/db/transcript-queries.d.ts +152 -0
- package/backend/dist/db/transcript-queries.d.ts.map +1 -0
- package/backend/dist/db/transcript-queries.js +706 -0
- package/backend/dist/db/transcript-queries.js.map +1 -0
- package/backend/dist/db/transcript-schema.d.ts +143 -0
- package/backend/dist/db/transcript-schema.d.ts.map +1 -0
- package/backend/dist/db/transcript-schema.js +10 -0
- package/backend/dist/db/transcript-schema.js.map +1 -0
- package/backend/dist/index.d.ts +2 -0
- package/backend/dist/index.d.ts.map +1 -0
- package/backend/dist/index.js +96 -0
- package/backend/dist/index.js.map +1 -0
- package/backend/dist/parser/agent-detector.d.ts +76 -0
- package/backend/dist/parser/agent-detector.d.ts.map +1 -0
- package/backend/dist/parser/agent-detector.js +281 -0
- package/backend/dist/parser/agent-detector.js.map +1 -0
- package/backend/dist/parser/base-parser.d.ts +123 -0
- package/backend/dist/parser/base-parser.d.ts.map +1 -0
- package/backend/dist/parser/base-parser.js +364 -0
- package/backend/dist/parser/base-parser.js.map +1 -0
- package/backend/dist/parser/claude-parser.d.ts +78 -0
- package/backend/dist/parser/claude-parser.d.ts.map +1 -0
- package/backend/dist/parser/claude-parser.js +247 -0
- package/backend/dist/parser/claude-parser.js.map +1 -0
- package/backend/dist/parser/codex-parser.d.ts +128 -0
- package/backend/dist/parser/codex-parser.d.ts.map +1 -0
- package/backend/dist/parser/codex-parser.js +371 -0
- package/backend/dist/parser/codex-parser.js.map +1 -0
- package/backend/dist/parser/gemini-parser.d.ts +107 -0
- package/backend/dist/parser/gemini-parser.d.ts.map +1 -0
- package/backend/dist/parser/gemini-parser.js +360 -0
- package/backend/dist/parser/gemini-parser.js.map +1 -0
- package/backend/dist/parser/parser-factory.d.ts +83 -0
- package/backend/dist/parser/parser-factory.d.ts.map +1 -0
- package/backend/dist/parser/parser-factory.js +163 -0
- package/backend/dist/parser/parser-factory.js.map +1 -0
- package/backend/dist/parser/session-indexer.d.ts +79 -0
- package/backend/dist/parser/session-indexer.d.ts.map +1 -0
- package/backend/dist/parser/session-indexer.js +558 -0
- package/backend/dist/parser/session-indexer.js.map +1 -0
- package/backend/dist/parser/timeline-builder.d.ts +7 -0
- package/backend/dist/parser/timeline-builder.d.ts.map +1 -0
- package/backend/dist/parser/timeline-builder.js +334 -0
- package/backend/dist/parser/timeline-builder.js.map +1 -0
- package/backend/dist/parser/transcript-parser.d.ts +25 -0
- package/backend/dist/parser/transcript-parser.d.ts.map +1 -0
- package/backend/dist/parser/transcript-parser.js +137 -0
- package/backend/dist/parser/transcript-parser.js.map +1 -0
- package/backend/dist/routes/commentary.d.ts +33 -0
- package/backend/dist/routes/commentary.d.ts.map +1 -0
- package/backend/dist/routes/commentary.js +153 -0
- package/backend/dist/routes/commentary.js.map +1 -0
- package/backend/dist/routes/import.d.ts +3 -0
- package/backend/dist/routes/import.d.ts.map +1 -0
- package/backend/dist/routes/import.js +220 -0
- package/backend/dist/routes/import.js.map +1 -0
- package/backend/dist/routes/sessions.d.ts +3 -0
- package/backend/dist/routes/sessions.d.ts.map +1 -0
- package/backend/dist/routes/sessions.js +393 -0
- package/backend/dist/routes/sessions.js.map +1 -0
- package/backend/dist/server.d.ts +25 -0
- package/backend/dist/server.d.ts.map +1 -0
- package/backend/dist/server.js +110 -0
- package/backend/dist/server.js.map +1 -0
- package/backend/dist/services/example-import.d.ts +20 -0
- package/backend/dist/services/example-import.d.ts.map +1 -0
- package/backend/dist/services/example-import.js +93 -0
- package/backend/dist/services/example-import.js.map +1 -0
- package/backend/dist/services/file-watcher.d.ts +22 -0
- package/backend/dist/services/file-watcher.d.ts.map +1 -0
- package/backend/dist/services/file-watcher.js +141 -0
- package/backend/dist/services/file-watcher.js.map +1 -0
- package/backend/dist/services/import-cli.d.ts +11 -0
- package/backend/dist/services/import-cli.d.ts.map +1 -0
- package/backend/dist/services/import-cli.js +171 -0
- package/backend/dist/services/import-cli.js.map +1 -0
- package/backend/dist/services/transcript-importer.d.ts +98 -0
- package/backend/dist/services/transcript-importer.d.ts.map +1 -0
- package/backend/dist/services/transcript-importer.js +342 -0
- package/backend/dist/services/transcript-importer.js.map +1 -0
- package/backend/dist/types/transcript.d.ts +174 -0
- package/backend/dist/types/transcript.d.ts.map +1 -0
- package/backend/dist/types/transcript.js +8 -0
- package/backend/dist/types/transcript.js.map +1 -0
- package/backend/package.json +40 -0
- package/backend/public/.gitkeep +0 -0
- package/backend/public/assets/index-D8IP1zNL.css +1 -0
- package/backend/public/assets/index-GtkMiMqE.js +69 -0
- package/backend/public/index.html +14 -0
- package/bin/recall.js +43 -0
- 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 @@
|
|
|
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
|