claude-code-history 0.2.2
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 +400 -0
- package/dist/cli/commands/export.d.ts +11 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +119 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/list.d.ts +11 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +79 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +11 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +144 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/search.d.ts +11 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +94 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/view.d.ts +11 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +67 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/formatters/pager.d.ts +25 -0
- package/dist/cli/formatters/pager.d.ts.map +1 -0
- package/dist/cli/formatters/pager.js +119 -0
- package/dist/cli/formatters/pager.js.map +1 -0
- package/dist/cli/formatters/search.d.ts +38 -0
- package/dist/cli/formatters/search.d.ts.map +1 -0
- package/dist/cli/formatters/search.js +119 -0
- package/dist/cli/formatters/search.js.map +1 -0
- package/dist/cli/formatters/session.d.ts +24 -0
- package/dist/cli/formatters/session.d.ts.map +1 -0
- package/dist/cli/formatters/session.js +247 -0
- package/dist/cli/formatters/session.js.map +1 -0
- package/dist/cli/formatters/table.d.ts +25 -0
- package/dist/cli/formatters/table.d.ts.map +1 -0
- package/dist/cli/formatters/table.js +126 -0
- package/dist/cli/formatters/table.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/config.d.ts +62 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +65 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/cli/utils/errors.d.ts +86 -0
- package/dist/cli/utils/errors.d.ts.map +1 -0
- package/dist/cli/utils/errors.js +129 -0
- package/dist/cli/utils/errors.js.map +1 -0
- package/dist/cli/utils/output.d.ts +74 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +113 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/lib/config.d.ts +44 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +60 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +40 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +61 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/export.d.ts +70 -0
- package/dist/lib/export.d.ts.map +1 -0
- package/dist/lib/export.js +241 -0
- package/dist/lib/export.js.map +1 -0
- package/dist/lib/index.d.ts +16 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +33 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/migrate.d.ts +50 -0
- package/dist/lib/migrate.d.ts.map +1 -0
- package/dist/lib/migrate.js +274 -0
- package/dist/lib/migrate.js.map +1 -0
- package/dist/lib/parser.d.ts +67 -0
- package/dist/lib/parser.d.ts.map +1 -0
- package/dist/lib/parser.js +321 -0
- package/dist/lib/parser.js.map +1 -0
- package/dist/lib/platform.d.ts +51 -0
- package/dist/lib/platform.d.ts.map +1 -0
- package/dist/lib/platform.js +94 -0
- package/dist/lib/platform.js.map +1 -0
- package/dist/lib/search.d.ts +39 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +217 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/session.d.ts +59 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +326 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/types.d.ts +280 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session discovery and retrieval for claude-code-history library.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to list, filter, and retrieve Claude Code sessions.
|
|
5
|
+
*/
|
|
6
|
+
import { readdir, stat } from 'fs/promises';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { resolveConfig, paginate, createPagination } from './config.js';
|
|
9
|
+
import { getProjectsPath, decodeProjectPath, extractSessionId, isAgentSessionFile, extractAgentId, isUUID, } from './platform.js';
|
|
10
|
+
import { parseSessionFile, parseSessionMetadata } from './parser.js';
|
|
11
|
+
import { DataNotFoundError, SessionNotFoundError } from './errors.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Session Discovery
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Check if Claude Code data directory exists.
|
|
17
|
+
* @param dataPath - Path to check
|
|
18
|
+
* @throws DataNotFoundError if directory doesn't exist
|
|
19
|
+
*/
|
|
20
|
+
async function validateDataPath(dataPath) {
|
|
21
|
+
try {
|
|
22
|
+
const stats = await stat(dataPath);
|
|
23
|
+
if (!stats.isDirectory()) {
|
|
24
|
+
throw new DataNotFoundError(dataPath);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error.code === 'ENOENT') {
|
|
29
|
+
throw new DataNotFoundError(dataPath);
|
|
30
|
+
}
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Discover all session files in the Claude Code data directory.
|
|
36
|
+
* @param config - Resolved configuration
|
|
37
|
+
* @returns Array of session info objects
|
|
38
|
+
*/
|
|
39
|
+
async function discoverSessions(config) {
|
|
40
|
+
const projectsPath = getProjectsPath(config.dataPath);
|
|
41
|
+
const sessions = [];
|
|
42
|
+
// Check if projects directory exists
|
|
43
|
+
try {
|
|
44
|
+
await stat(projectsPath);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// No projects directory = no sessions
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
// Read all project directories
|
|
51
|
+
const projectDirs = await readdir(projectsPath);
|
|
52
|
+
for (const encodedPath of projectDirs) {
|
|
53
|
+
const projectDir = join(projectsPath, encodedPath);
|
|
54
|
+
// Skip if not a directory
|
|
55
|
+
try {
|
|
56
|
+
const dirStats = await stat(projectDir);
|
|
57
|
+
if (!dirStats.isDirectory())
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
// Decode project path
|
|
64
|
+
const projectPath = decodeProjectPath(encodedPath);
|
|
65
|
+
// Apply workspace filter if specified
|
|
66
|
+
if (config.workspace && projectPath !== config.workspace) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Read session files in this project
|
|
70
|
+
const files = await readdir(projectDir);
|
|
71
|
+
for (const filename of files) {
|
|
72
|
+
const sessionId = extractSessionId(filename);
|
|
73
|
+
if (!sessionId)
|
|
74
|
+
continue; // Skip non-session files
|
|
75
|
+
const filePath = join(projectDir, filename);
|
|
76
|
+
const isAgent = isAgentSessionFile(filename);
|
|
77
|
+
const agentId = isAgent ? extractAgentId(filename) : null;
|
|
78
|
+
// Get file modification time for sorting
|
|
79
|
+
try {
|
|
80
|
+
const fileStats = await stat(filePath);
|
|
81
|
+
sessions.push({
|
|
82
|
+
id: sessionId,
|
|
83
|
+
filePath,
|
|
84
|
+
projectPath,
|
|
85
|
+
encodedPath,
|
|
86
|
+
isAgent,
|
|
87
|
+
agentId,
|
|
88
|
+
modifiedTime: fileStats.mtime,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Skip files we can't stat
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return sessions;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Find agent sessions linked to a main session.
|
|
101
|
+
* @param _mainSessionId - The main session ID (reserved for future use)
|
|
102
|
+
* @param allSessions - All discovered sessions
|
|
103
|
+
* @returns Array of agent IDs linked to this session
|
|
104
|
+
*/
|
|
105
|
+
function findLinkedAgentIds(_mainSessionId, allSessions) {
|
|
106
|
+
// Agent sessions in the same project directory with matching patterns
|
|
107
|
+
// For now, we return agent sessions from the same project
|
|
108
|
+
// A more sophisticated approach would parse the main session to find Task tool results
|
|
109
|
+
return allSessions
|
|
110
|
+
.filter((s) => s.isAgent && s.agentId !== null)
|
|
111
|
+
.map((s) => s.agentId);
|
|
112
|
+
}
|
|
113
|
+
// =============================================================================
|
|
114
|
+
// Session Listing
|
|
115
|
+
// =============================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Build a SessionSummary from session info and metadata.
|
|
118
|
+
*/
|
|
119
|
+
async function buildSessionSummary(info, allSessions) {
|
|
120
|
+
const { data: metadata } = await parseSessionMetadata(info.filePath);
|
|
121
|
+
// Find linked agent sessions (for main sessions only)
|
|
122
|
+
const agentIds = info.isAgent ? [] : findLinkedAgentIds(info.id, allSessions);
|
|
123
|
+
return {
|
|
124
|
+
id: info.id,
|
|
125
|
+
projectPath: info.projectPath,
|
|
126
|
+
summary: metadata.summary,
|
|
127
|
+
timestamp: metadata.firstTimestamp ?? info.modifiedTime,
|
|
128
|
+
lastActivityAt: metadata.lastTimestamp ?? info.modifiedTime,
|
|
129
|
+
messageCount: metadata.messageCount,
|
|
130
|
+
agentIds,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* List all sessions with pagination.
|
|
135
|
+
*
|
|
136
|
+
* Sessions are sorted by most recent activity first (descending timestamp).
|
|
137
|
+
* Agent sessions are excluded from the main list (they're linked via agentIds).
|
|
138
|
+
*
|
|
139
|
+
* @param config - Optional configuration for filtering and pagination
|
|
140
|
+
* @returns Paginated list of session summaries
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* // List first 10 sessions
|
|
145
|
+
* const result = await listSessions({ limit: 10 });
|
|
146
|
+
*
|
|
147
|
+
* // List sessions for a specific workspace
|
|
148
|
+
* const result = await listSessions({ workspace: '/path/to/project' });
|
|
149
|
+
*
|
|
150
|
+
* // Paginate through results
|
|
151
|
+
* const page2 = await listSessions({ limit: 10, offset: 10 });
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
export async function listSessions(config) {
|
|
155
|
+
const resolved = resolveConfig(config);
|
|
156
|
+
// Validate data path exists
|
|
157
|
+
await validateDataPath(resolved.dataPath);
|
|
158
|
+
// Discover all sessions
|
|
159
|
+
const allSessions = await discoverSessions(resolved);
|
|
160
|
+
// Filter out agent sessions from main list (they're accessed via agentIds)
|
|
161
|
+
const mainSessions = allSessions.filter((s) => !s.isAgent);
|
|
162
|
+
// Sort by modification time descending (most recent first)
|
|
163
|
+
mainSessions.sort((a, b) => b.modifiedTime.getTime() - a.modifiedTime.getTime());
|
|
164
|
+
// Build summaries for paginated subset
|
|
165
|
+
const paginatedInfos = paginate(mainSessions, resolved);
|
|
166
|
+
const summaries = [];
|
|
167
|
+
for (const info of paginatedInfos) {
|
|
168
|
+
const summary = await buildSessionSummary(info, allSessions);
|
|
169
|
+
summaries.push(summary);
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
data: summaries,
|
|
173
|
+
pagination: createPagination(mainSessions.length, resolved),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// =============================================================================
|
|
177
|
+
// Session Retrieval
|
|
178
|
+
// =============================================================================
|
|
179
|
+
/**
|
|
180
|
+
* Get a session by index or UUID.
|
|
181
|
+
*
|
|
182
|
+
* @param identifier - Zero-based index or session UUID
|
|
183
|
+
* @param config - Optional configuration
|
|
184
|
+
* @returns Full session with all messages
|
|
185
|
+
* @throws SessionNotFoundError if session doesn't exist
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```typescript
|
|
189
|
+
* // Get most recent session by index
|
|
190
|
+
* const session = await getSession(0);
|
|
191
|
+
*
|
|
192
|
+
* // Get session by UUID
|
|
193
|
+
* const session = await getSession('abc123-def456-...');
|
|
194
|
+
*
|
|
195
|
+
* // Get session from specific workspace
|
|
196
|
+
* const session = await getSession(0, { workspace: '/path/to/project' });
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export async function getSession(identifier, config) {
|
|
200
|
+
const resolved = resolveConfig(config);
|
|
201
|
+
// Validate data path exists
|
|
202
|
+
await validateDataPath(resolved.dataPath);
|
|
203
|
+
// Discover all sessions
|
|
204
|
+
const allSessions = await discoverSessions(resolved);
|
|
205
|
+
// Filter out agent sessions
|
|
206
|
+
const mainSessions = allSessions.filter((s) => !s.isAgent);
|
|
207
|
+
// Sort by modification time descending (most recent first)
|
|
208
|
+
mainSessions.sort((a, b) => b.modifiedTime.getTime() - a.modifiedTime.getTime());
|
|
209
|
+
let targetSession;
|
|
210
|
+
if (typeof identifier === 'number') {
|
|
211
|
+
// Get by index
|
|
212
|
+
if (identifier < 0 || identifier >= mainSessions.length) {
|
|
213
|
+
throw new SessionNotFoundError(identifier);
|
|
214
|
+
}
|
|
215
|
+
targetSession = mainSessions[identifier];
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// Get by UUID - auto-detect if it's a UUID or agent ID
|
|
219
|
+
if (isUUID(identifier)) {
|
|
220
|
+
targetSession = mainSessions.find((s) => s.id === identifier);
|
|
221
|
+
}
|
|
222
|
+
else if (identifier.startsWith('agent-')) {
|
|
223
|
+
// Looking for an agent session
|
|
224
|
+
targetSession = allSessions.find((s) => s.id === identifier);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
// Try partial match on UUID
|
|
228
|
+
targetSession = mainSessions.find((s) => s.id.startsWith(identifier));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Check if session was found
|
|
232
|
+
if (!targetSession) {
|
|
233
|
+
throw new SessionNotFoundError(identifier);
|
|
234
|
+
}
|
|
235
|
+
// Parse full session
|
|
236
|
+
const { data: messages } = await parseSessionFile(targetSession.filePath);
|
|
237
|
+
// Extract metadata from messages
|
|
238
|
+
const metadata = extractSessionMetadataFromMessages(messages, targetSession);
|
|
239
|
+
// Find linked agent IDs
|
|
240
|
+
const agentIds = targetSession.isAgent ? [] : findLinkedAgentIds(targetSession.id, allSessions);
|
|
241
|
+
return {
|
|
242
|
+
id: targetSession.id,
|
|
243
|
+
encodedPath: targetSession.encodedPath,
|
|
244
|
+
projectPath: targetSession.projectPath,
|
|
245
|
+
summary: metadata.summary,
|
|
246
|
+
timestamp: metadata.timestamp,
|
|
247
|
+
lastActivityAt: metadata.lastActivityAt,
|
|
248
|
+
messageCount: messages.filter((m) => m.type === 'user' || m.type === 'assistant').length,
|
|
249
|
+
version: metadata.version,
|
|
250
|
+
gitBranch: metadata.gitBranch,
|
|
251
|
+
agentIds,
|
|
252
|
+
messages,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Extract metadata from parsed messages.
|
|
257
|
+
*/
|
|
258
|
+
function extractSessionMetadataFromMessages(messages, info) {
|
|
259
|
+
let summary = null;
|
|
260
|
+
const version = '';
|
|
261
|
+
let gitBranch = null;
|
|
262
|
+
let firstTimestamp = null;
|
|
263
|
+
let lastTimestamp = null;
|
|
264
|
+
for (const msg of messages) {
|
|
265
|
+
// Extract summary
|
|
266
|
+
if (msg.type === 'summary') {
|
|
267
|
+
summary = msg.summary;
|
|
268
|
+
}
|
|
269
|
+
// Track timestamps
|
|
270
|
+
if (msg.type === 'user' || msg.type === 'assistant') {
|
|
271
|
+
if (!firstTimestamp || msg.timestamp < firstTimestamp) {
|
|
272
|
+
firstTimestamp = msg.timestamp;
|
|
273
|
+
}
|
|
274
|
+
if (!lastTimestamp || msg.timestamp > lastTimestamp) {
|
|
275
|
+
lastTimestamp = msg.timestamp;
|
|
276
|
+
}
|
|
277
|
+
// Extract git branch from user messages
|
|
278
|
+
if (msg.type === 'user') {
|
|
279
|
+
gitBranch ??= msg.gitBranch;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
summary,
|
|
285
|
+
timestamp: firstTimestamp ?? info.modifiedTime,
|
|
286
|
+
lastActivityAt: lastTimestamp ?? info.modifiedTime,
|
|
287
|
+
version,
|
|
288
|
+
gitBranch,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get an agent session by ID.
|
|
293
|
+
*
|
|
294
|
+
* @param agentId - Agent ID (e.g., 'abc1234' or 'agent-abc1234')
|
|
295
|
+
* @param config - Optional configuration
|
|
296
|
+
* @returns Full agent session with all messages
|
|
297
|
+
* @throws SessionNotFoundError if agent session doesn't exist
|
|
298
|
+
*/
|
|
299
|
+
export async function getAgentSession(agentId, config) {
|
|
300
|
+
// Normalize agent ID format
|
|
301
|
+
const normalizedId = agentId.startsWith('agent-') ? agentId : `agent-${agentId}`;
|
|
302
|
+
const resolved = resolveConfig(config);
|
|
303
|
+
await validateDataPath(resolved.dataPath);
|
|
304
|
+
const allSessions = await discoverSessions(resolved);
|
|
305
|
+
const agentSession = allSessions.find((s) => s.id === normalizedId);
|
|
306
|
+
if (!agentSession) {
|
|
307
|
+
throw new SessionNotFoundError(agentId);
|
|
308
|
+
}
|
|
309
|
+
// Parse full session
|
|
310
|
+
const { data: messages } = await parseSessionFile(agentSession.filePath);
|
|
311
|
+
const metadata = extractSessionMetadataFromMessages(messages, agentSession);
|
|
312
|
+
return {
|
|
313
|
+
id: agentSession.id,
|
|
314
|
+
encodedPath: agentSession.encodedPath,
|
|
315
|
+
projectPath: agentSession.projectPath,
|
|
316
|
+
summary: metadata.summary,
|
|
317
|
+
timestamp: metadata.timestamp,
|
|
318
|
+
lastActivityAt: metadata.lastActivityAt,
|
|
319
|
+
messageCount: messages.filter((m) => m.type === 'user' || m.type === 'assistant').length,
|
|
320
|
+
version: metadata.version,
|
|
321
|
+
gitBranch: metadata.gitBranch,
|
|
322
|
+
agentIds: [],
|
|
323
|
+
messages,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAuB,MAAM,aAAa,CAAC;AAC7F,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAiBtE,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAAC,MAAsB;IACpD,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,+BAA+B;IAC/B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAEhD,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAEnD,0BAA0B;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;gBAAE,SAAS;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,sBAAsB;QACtB,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEnD,sCAAsC;QACtC,IAAI,MAAM,CAAC,SAAS,IAAI,WAAW,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YACzD,SAAS;QACX,CAAC;QAED,qCAAqC;QACrC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAExC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS;gBAAE,SAAS,CAAC,yBAAyB;YAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1D,yCAAyC;YACzC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEvC,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,SAAS;oBACb,QAAQ;oBACR,WAAW;oBACX,WAAW;oBACX,OAAO;oBACP,OAAO;oBACP,YAAY,EAAE,SAAS,CAAC,KAAK;iBAC9B,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;gBAC3B,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,cAAsB,EAAE,WAA0B;IAC5E,sEAAsE;IACtE,0DAA0D;IAC1D,uFAAuF;IACvF,OAAO,WAAW;SACf,MAAM,CAAC,CAAC,CAAC,EAA0C,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;SACtF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,IAAiB,EACjB,WAA0B;IAE1B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErE,sDAAsD;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAE9E,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY;QACvD,cAAc,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY;QAC3D,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAsB;IAEtB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEvC,4BAA4B;IAC5B,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1C,wBAAwB;IACxB,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAErD,2EAA2E;IAC3E,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE3D,2DAA2D;IAC3D,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjF,uCAAuC;IACvC,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7D,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAA2B,EAC3B,MAAsB;IAEtB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEvC,4BAA4B;IAC5B,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1C,wBAAwB;IACxB,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAErD,4BAA4B;IAC5B,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE3D,2DAA2D;IAC3D,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjF,IAAI,aAAsC,CAAC;IAE3C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,eAAe;QACf,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACxD,MAAM,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QACD,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACvB,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,+BAA+B;YAC/B,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,qBAAqB;IACrB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE1E,iCAAiC;IACjC,MAAM,QAAQ,GAAG,kCAAkC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE7E,wBAAwB;IACxB,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEhG,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM;QACxF,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kCAAkC,CACzC,QAAmB,EACnB,IAAiB;IAQjB,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,cAAc,GAAgB,IAAI,CAAC;IACvC,IAAI,aAAa,GAAgB,IAAI,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,kBAAkB;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,mBAAmB;QACnB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpD,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,GAAG,cAAc,EAAE,CAAC;gBACtD,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,SAAS,GAAG,aAAa,EAAE,CAAC;gBACpD,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC;YAChC,CAAC;YAED,wCAAwC;YACxC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,SAAS,KAAK,GAAG,CAAC,SAAS,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,SAAS,EAAE,cAAc,IAAI,IAAI,CAAC,YAAY;QAC9C,cAAc,EAAE,aAAa,IAAI,IAAI,CAAC,YAAY;QAClD,OAAO;QACP,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,MAAsB;IAC3E,4BAA4B;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC;IAEjF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IAEpE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,qBAAqB;IACrB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,kCAAkC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE5E,OAAO;QACL,EAAE,EAAE,YAAY,CAAC,EAAE;QACnB,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM;QACxF,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,QAAQ,EAAE,EAAE;QACZ,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Library Types
|
|
3
|
+
*
|
|
4
|
+
* TypeScript interfaces for claude-code-history library.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for library functions.
|
|
8
|
+
*/
|
|
9
|
+
export interface LibraryConfig {
|
|
10
|
+
/** Custom Claude Code data directory path. Auto-detected if not provided. */
|
|
11
|
+
dataPath?: string;
|
|
12
|
+
/** Filter sessions by workspace/project path. */
|
|
13
|
+
workspace?: string;
|
|
14
|
+
/** Maximum number of results to return. Default: 50 */
|
|
15
|
+
limit?: number;
|
|
16
|
+
/** Number of results to skip (for pagination). Default: 0 */
|
|
17
|
+
offset?: number;
|
|
18
|
+
/** Number of context lines for search results. Default: 2 */
|
|
19
|
+
context?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Lightweight session metadata for listing.
|
|
23
|
+
*/
|
|
24
|
+
export interface SessionSummary {
|
|
25
|
+
/** Session UUID */
|
|
26
|
+
id: string;
|
|
27
|
+
/** Decoded project path (e.g., /Users/name/project) */
|
|
28
|
+
projectPath: string;
|
|
29
|
+
/** Human-readable session title */
|
|
30
|
+
summary: string | null;
|
|
31
|
+
/** Session start time */
|
|
32
|
+
timestamp: Date;
|
|
33
|
+
/** Most recent message time */
|
|
34
|
+
lastActivityAt: Date;
|
|
35
|
+
/** Total message count */
|
|
36
|
+
messageCount: number;
|
|
37
|
+
/** Linked agent session IDs */
|
|
38
|
+
agentIds: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Full session with all messages.
|
|
42
|
+
*/
|
|
43
|
+
export interface Session extends SessionSummary {
|
|
44
|
+
/** Encoded directory name */
|
|
45
|
+
encodedPath: string;
|
|
46
|
+
/** Claude Code version */
|
|
47
|
+
version: string;
|
|
48
|
+
/** Git branch at session start */
|
|
49
|
+
gitBranch: string | null;
|
|
50
|
+
/** All messages in the session */
|
|
51
|
+
messages: Message[];
|
|
52
|
+
}
|
|
53
|
+
/** Message type discriminator */
|
|
54
|
+
export type MessageType = 'user' | 'assistant' | 'summary' | 'file-history-snapshot';
|
|
55
|
+
/**
|
|
56
|
+
* Base message structure.
|
|
57
|
+
*/
|
|
58
|
+
export interface BaseMessage {
|
|
59
|
+
/** Unique message identifier */
|
|
60
|
+
uuid: string;
|
|
61
|
+
/** Parent message UUID (for threading) */
|
|
62
|
+
parentUuid: string | null;
|
|
63
|
+
/** Message type discriminator */
|
|
64
|
+
type: MessageType;
|
|
65
|
+
/** When message was created */
|
|
66
|
+
timestamp: Date;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* User message or tool result.
|
|
70
|
+
*/
|
|
71
|
+
export interface UserMessage extends BaseMessage {
|
|
72
|
+
type: 'user';
|
|
73
|
+
role: 'user';
|
|
74
|
+
content: string | ToolResultContent[];
|
|
75
|
+
cwd: string;
|
|
76
|
+
gitBranch: string | null;
|
|
77
|
+
isSidechain: boolean;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Assistant (Claude) response.
|
|
81
|
+
*/
|
|
82
|
+
export interface AssistantMessage extends BaseMessage {
|
|
83
|
+
type: 'assistant';
|
|
84
|
+
role: 'assistant';
|
|
85
|
+
model: string;
|
|
86
|
+
content: AssistantContent[];
|
|
87
|
+
stopReason: string | null;
|
|
88
|
+
usage: TokenUsage;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Session summary entry.
|
|
92
|
+
*/
|
|
93
|
+
export interface SummaryMessage extends BaseMessage {
|
|
94
|
+
type: 'summary';
|
|
95
|
+
summary: string;
|
|
96
|
+
leafUuid: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* File history snapshot entry.
|
|
100
|
+
*/
|
|
101
|
+
export interface FileHistorySnapshotMessage extends BaseMessage {
|
|
102
|
+
type: 'file-history-snapshot';
|
|
103
|
+
messageId: string;
|
|
104
|
+
snapshot: FileSnapshot;
|
|
105
|
+
}
|
|
106
|
+
/** Union of all message types */
|
|
107
|
+
export type Message = UserMessage | AssistantMessage | SummaryMessage | FileHistorySnapshotMessage;
|
|
108
|
+
/** Text content block */
|
|
109
|
+
export interface TextContent {
|
|
110
|
+
type: 'text';
|
|
111
|
+
text: string;
|
|
112
|
+
}
|
|
113
|
+
/** Tool use (invocation) content */
|
|
114
|
+
export interface ToolUseContent {
|
|
115
|
+
type: 'tool_use';
|
|
116
|
+
id: string;
|
|
117
|
+
name: string;
|
|
118
|
+
input: Record<string, unknown>;
|
|
119
|
+
}
|
|
120
|
+
/** Thinking/reasoning content */
|
|
121
|
+
export interface ThinkingContent {
|
|
122
|
+
type: 'thinking';
|
|
123
|
+
thinking: string;
|
|
124
|
+
}
|
|
125
|
+
/** Union of assistant content types */
|
|
126
|
+
export type AssistantContent = TextContent | ToolUseContent | ThinkingContent;
|
|
127
|
+
/** Tool result content */
|
|
128
|
+
export interface ToolResultContent {
|
|
129
|
+
type: 'tool_result';
|
|
130
|
+
tool_use_id: string;
|
|
131
|
+
content: string;
|
|
132
|
+
is_error?: boolean;
|
|
133
|
+
}
|
|
134
|
+
/** Token usage metrics */
|
|
135
|
+
export interface TokenUsage {
|
|
136
|
+
inputTokens: number;
|
|
137
|
+
outputTokens: number;
|
|
138
|
+
cacheCreationInputTokens: number;
|
|
139
|
+
cacheReadInputTokens: number;
|
|
140
|
+
}
|
|
141
|
+
/** File snapshot for history tracking */
|
|
142
|
+
export interface FileSnapshot {
|
|
143
|
+
messageId: string;
|
|
144
|
+
timestamp: Date;
|
|
145
|
+
trackedFileBackups: Record<string, FileBackup>;
|
|
146
|
+
}
|
|
147
|
+
/** Individual file backup entry */
|
|
148
|
+
export interface FileBackup {
|
|
149
|
+
backupFileName: string;
|
|
150
|
+
version: number;
|
|
151
|
+
backupTime: Date;
|
|
152
|
+
}
|
|
153
|
+
/** Pagination metadata */
|
|
154
|
+
export interface Pagination {
|
|
155
|
+
/** Total number of matching items */
|
|
156
|
+
total: number;
|
|
157
|
+
/** Items per page */
|
|
158
|
+
limit: number;
|
|
159
|
+
/** Current offset */
|
|
160
|
+
offset: number;
|
|
161
|
+
/** Whether more results exist */
|
|
162
|
+
hasMore: boolean;
|
|
163
|
+
}
|
|
164
|
+
/** Paginated result wrapper */
|
|
165
|
+
export interface PaginatedResult<T> {
|
|
166
|
+
/** Result items */
|
|
167
|
+
data: T[];
|
|
168
|
+
/** Pagination metadata */
|
|
169
|
+
pagination: Pagination;
|
|
170
|
+
}
|
|
171
|
+
/** Search result match */
|
|
172
|
+
export interface SearchMatch {
|
|
173
|
+
/** Session containing the match */
|
|
174
|
+
sessionId: string;
|
|
175
|
+
/** Session summary for context */
|
|
176
|
+
sessionSummary: string | null;
|
|
177
|
+
/** Project path */
|
|
178
|
+
projectPath: string;
|
|
179
|
+
/** Message UUID containing match */
|
|
180
|
+
messageUuid: string;
|
|
181
|
+
/** Message type (user/assistant) */
|
|
182
|
+
messageType: 'user' | 'assistant';
|
|
183
|
+
/** Matched text */
|
|
184
|
+
match: string;
|
|
185
|
+
/** Surrounding context lines */
|
|
186
|
+
context: string[];
|
|
187
|
+
/** Line number in message content */
|
|
188
|
+
lineNumber: number;
|
|
189
|
+
}
|
|
190
|
+
/** Migration configuration for specific sessions */
|
|
191
|
+
export interface MigrateConfig {
|
|
192
|
+
/** Session(s) to migrate - index or UUID, single or array */
|
|
193
|
+
sessions: number | string | (number | string)[];
|
|
194
|
+
/** Destination workspace path */
|
|
195
|
+
destination: string;
|
|
196
|
+
/** Migration mode. Default: 'copy' */
|
|
197
|
+
mode?: 'copy' | 'move';
|
|
198
|
+
}
|
|
199
|
+
/** Migration configuration for entire workspace */
|
|
200
|
+
export interface MigrateWorkspaceConfig {
|
|
201
|
+
/** Source workspace path */
|
|
202
|
+
source: string;
|
|
203
|
+
/** Destination workspace path */
|
|
204
|
+
destination: string;
|
|
205
|
+
/** Migration mode. Default: 'copy' */
|
|
206
|
+
mode?: 'copy' | 'move';
|
|
207
|
+
}
|
|
208
|
+
/** Migration error detail */
|
|
209
|
+
export interface MigrateError {
|
|
210
|
+
sessionId: string;
|
|
211
|
+
error: string;
|
|
212
|
+
}
|
|
213
|
+
/** Migration result */
|
|
214
|
+
export interface MigrateResult {
|
|
215
|
+
/** Number of successfully migrated sessions */
|
|
216
|
+
successCount: number;
|
|
217
|
+
/** Number of failed migrations */
|
|
218
|
+
failedCount: number;
|
|
219
|
+
/** Error details for failed migrations */
|
|
220
|
+
errors: MigrateError[];
|
|
221
|
+
}
|
|
222
|
+
/** Raw JSONL entry from Claude Code session file */
|
|
223
|
+
export interface RawSessionEntry {
|
|
224
|
+
type: string;
|
|
225
|
+
uuid?: string;
|
|
226
|
+
parentUuid?: string | null;
|
|
227
|
+
timestamp?: string;
|
|
228
|
+
sessionId?: string;
|
|
229
|
+
agentId?: string;
|
|
230
|
+
cwd?: string;
|
|
231
|
+
gitBranch?: string | null;
|
|
232
|
+
version?: string;
|
|
233
|
+
userType?: string;
|
|
234
|
+
isSidechain?: boolean;
|
|
235
|
+
isMeta?: boolean;
|
|
236
|
+
message?: RawMessage;
|
|
237
|
+
summary?: string;
|
|
238
|
+
leafUuid?: string;
|
|
239
|
+
messageId?: string;
|
|
240
|
+
snapshot?: RawFileSnapshot;
|
|
241
|
+
}
|
|
242
|
+
/** Raw message from JSONL */
|
|
243
|
+
export interface RawMessage {
|
|
244
|
+
role: string;
|
|
245
|
+
model?: string;
|
|
246
|
+
id?: string;
|
|
247
|
+
type?: string;
|
|
248
|
+
content: unknown;
|
|
249
|
+
stop_reason?: string | null;
|
|
250
|
+
usage?: RawTokenUsage;
|
|
251
|
+
}
|
|
252
|
+
/** Raw token usage from JSONL */
|
|
253
|
+
export interface RawTokenUsage {
|
|
254
|
+
input_tokens: number;
|
|
255
|
+
output_tokens: number;
|
|
256
|
+
cache_creation_input_tokens: number;
|
|
257
|
+
cache_read_input_tokens: number;
|
|
258
|
+
}
|
|
259
|
+
/** Raw file snapshot from JSONL */
|
|
260
|
+
export interface RawFileSnapshot {
|
|
261
|
+
messageId: string;
|
|
262
|
+
timestamp: string;
|
|
263
|
+
trackedFileBackups: Record<string, {
|
|
264
|
+
backupFileName: string;
|
|
265
|
+
version: number;
|
|
266
|
+
backupTime: string;
|
|
267
|
+
}>;
|
|
268
|
+
}
|
|
269
|
+
/** Parse result with warnings */
|
|
270
|
+
export interface ParseResult<T> {
|
|
271
|
+
data: T;
|
|
272
|
+
warnings: ParseWarning[];
|
|
273
|
+
}
|
|
274
|
+
/** Parse warning for invalid lines */
|
|
275
|
+
export interface ParseWarning {
|
|
276
|
+
line: number;
|
|
277
|
+
error: string;
|
|
278
|
+
content?: string;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|