claude-sessions 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +140 -0
  3. package/data/model-pricing.json +113 -0
  4. package/dist/cost-calculator.d.ts +49 -0
  5. package/dist/cost-calculator.d.ts.map +1 -0
  6. package/dist/cost-calculator.js +429 -0
  7. package/dist/cost-calculator.js.map +1 -0
  8. package/dist/index.d.ts +28 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +65 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/projects-service.d.ts +106 -0
  13. package/dist/projects-service.d.ts.map +1 -0
  14. package/dist/projects-service.js +317 -0
  15. package/dist/projects-service.js.map +1 -0
  16. package/dist/session-cache-store.d.ts +48 -0
  17. package/dist/session-cache-store.d.ts.map +1 -0
  18. package/dist/session-cache-store.js +231 -0
  19. package/dist/session-cache-store.js.map +1 -0
  20. package/dist/session-cache.d.ts +266 -0
  21. package/dist/session-cache.d.ts.map +1 -0
  22. package/dist/session-cache.js +1294 -0
  23. package/dist/session-cache.js.map +1 -0
  24. package/dist/session-parser.d.ts +265 -0
  25. package/dist/session-parser.d.ts.map +1 -0
  26. package/dist/session-parser.js +555 -0
  27. package/dist/session-parser.js.map +1 -0
  28. package/dist/session-reader.d.ts +87 -0
  29. package/dist/session-reader.d.ts.map +1 -0
  30. package/dist/session-reader.js +279 -0
  31. package/dist/session-reader.js.map +1 -0
  32. package/dist/tasks-service.d.ts +100 -0
  33. package/dist/tasks-service.d.ts.map +1 -0
  34. package/dist/tasks-service.js +290 -0
  35. package/dist/tasks-service.js.map +1 -0
  36. package/dist/teams-service.d.ts +30 -0
  37. package/dist/teams-service.d.ts.map +1 -0
  38. package/dist/teams-service.js +85 -0
  39. package/dist/teams-service.js.map +1 -0
  40. package/dist/types.d.ts +87 -0
  41. package/dist/types.d.ts.map +1 -0
  42. package/dist/types.js +7 -0
  43. package/dist/types.js.map +1 -0
  44. package/dist/utils/path-utils.d.ts +80 -0
  45. package/dist/utils/path-utils.d.ts.map +1 -0
  46. package/dist/utils/path-utils.js +355 -0
  47. package/dist/utils/path-utils.js.map +1 -0
  48. package/package.json +42 -0
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Session Cache Layer — LMDB-backed
3
+ *
4
+ * Provides efficient caching for Claude Code session JSONL files.
5
+ * Uses LMDB (memory-mapped database) as the storage backend for
6
+ * instant reads with zero warmup on server startup.
7
+ *
8
+ * Key optimizations:
9
+ * 1. LMDB memory-mapped reads — sync ~0ms via OS page cache
10
+ * 2. Incremental parsing — only parse new lines when file grows (append-only)
11
+ * 3. Line index tracking for efficient delta updates
12
+ * 4. Separate sub-database for raw messages (optional, large)
13
+ * 5. Async batched writes via lmdb-js
14
+ */
15
+ export type PromptType = 'user' | 'command' | 'command_output' | 'system_caveat' | 'hook_result';
16
+ export interface CachedUserPrompt {
17
+ turnIndex: number;
18
+ lineIndex: number;
19
+ text: string;
20
+ images?: number;
21
+ timestamp?: string;
22
+ promptType?: PromptType;
23
+ }
24
+ export declare function classifyUserPrompt(text: string, isMeta?: boolean): PromptType;
25
+ export declare function isRealUserPrompt(prompt: CachedUserPrompt): boolean;
26
+ export interface CachedToolUse {
27
+ id: string;
28
+ name: string;
29
+ input: any;
30
+ turnIndex: number;
31
+ lineIndex: number;
32
+ }
33
+ export interface CachedResponse {
34
+ turnIndex: number;
35
+ lineIndex: number;
36
+ text: string;
37
+ isApiError?: boolean;
38
+ requestId?: string;
39
+ }
40
+ export interface CachedThinkingBlock {
41
+ turnIndex: number;
42
+ lineIndex: number;
43
+ thinking: string;
44
+ }
45
+ export interface CachedTask {
46
+ id: string;
47
+ subject: string;
48
+ description?: string;
49
+ activeForm?: string;
50
+ status: 'pending' | 'in_progress' | 'completed' | 'deleted';
51
+ blocks: string[];
52
+ blockedBy: string[];
53
+ owner?: string;
54
+ metadata?: Record<string, unknown>;
55
+ turnIndex: number;
56
+ lineIndex: number;
57
+ }
58
+ export interface CachedTodo {
59
+ content: string;
60
+ status: 'pending' | 'in_progress' | 'completed';
61
+ activeForm: string;
62
+ lineIndex: number;
63
+ }
64
+ export interface CachedPlan {
65
+ toolUseId: string;
66
+ status: 'entering' | 'approved';
67
+ planFile?: string;
68
+ planTitle?: string;
69
+ planSummary?: string;
70
+ allowedPrompts?: Array<{
71
+ tool: string;
72
+ prompt: string;
73
+ }>;
74
+ turnIndex: number;
75
+ lineIndex: number;
76
+ }
77
+ export interface CachedSubagent {
78
+ agentId: string;
79
+ toolUseId: string;
80
+ type: string;
81
+ prompt: string;
82
+ description?: string;
83
+ model?: string;
84
+ turnIndex: number;
85
+ lineIndex: number;
86
+ userPromptIndex: number;
87
+ parentUuid?: string;
88
+ startedAt?: string;
89
+ completedAt?: string;
90
+ status: string;
91
+ result?: string;
92
+ runInBackground?: boolean;
93
+ }
94
+ export interface CachedUsage {
95
+ inputTokens: number;
96
+ outputTokens: number;
97
+ cacheCreationInputTokens: number;
98
+ cacheReadInputTokens: number;
99
+ }
100
+ export interface CachedModelUsage {
101
+ inputTokens: number;
102
+ outputTokens: number;
103
+ cacheCreationInputTokens: number;
104
+ cacheReadInputTokens: number;
105
+ costUsd: number;
106
+ messageCount: number;
107
+ }
108
+ export interface SessionCacheData {
109
+ version: number;
110
+ sessionId: string;
111
+ filePath: string;
112
+ fileSize: number;
113
+ fileMtime: number;
114
+ lastLineIndex: number;
115
+ lastTurnIndex: number;
116
+ lastByteOffset?: number;
117
+ createdAt: number;
118
+ cwd: string;
119
+ model: string;
120
+ claudeCodeVersion: string;
121
+ permissionMode: string;
122
+ tools: string[];
123
+ mcpServers: Array<{
124
+ name: string;
125
+ status: string;
126
+ }>;
127
+ systemPrompt?: string;
128
+ userPrompts: CachedUserPrompt[];
129
+ toolUses: CachedToolUse[];
130
+ responses: CachedResponse[];
131
+ thinkingBlocks: CachedThinkingBlock[];
132
+ tasks: CachedTask[];
133
+ todos: CachedTodo[];
134
+ subagents: CachedSubagent[];
135
+ subagentProgress: any[];
136
+ plans: CachedPlan[];
137
+ teamName?: string;
138
+ allTeams: string[];
139
+ teamOperations: Array<{
140
+ operation: 'spawnTeam' | 'cleanup';
141
+ teamName?: string;
142
+ description?: string;
143
+ turnIndex: number;
144
+ lineIndex: number;
145
+ }>;
146
+ teamMessages: Array<{
147
+ messageType: 'message' | 'broadcast' | 'shutdown_request' | 'shutdown_response' | 'plan_approval_response';
148
+ recipient?: string;
149
+ content?: string;
150
+ summary?: string;
151
+ requestId?: string;
152
+ approve?: boolean;
153
+ turnIndex: number;
154
+ lineIndex: number;
155
+ }>;
156
+ numTurns: number;
157
+ durationMs: number;
158
+ durationApiMs: number;
159
+ totalCostUsd: number;
160
+ cumulativeCostUsd: number;
161
+ usage: CachedUsage;
162
+ modelUsage: Record<string, CachedModelUsage>;
163
+ result?: string;
164
+ errors?: string[];
165
+ success: boolean;
166
+ forkedFromSessionId?: string;
167
+ forkPointUuid?: string;
168
+ firstTimestamp?: string;
169
+ lastTimestamp?: string;
170
+ }
171
+ export interface RawMessagesCache {
172
+ version: number;
173
+ sessionId: string;
174
+ fileSize: number;
175
+ fileMtime: number;
176
+ lastLineIndex: number;
177
+ lastByteOffset?: number;
178
+ messages: Array<any & {
179
+ lineIndex: number;
180
+ }>;
181
+ }
182
+ export declare class SessionCache {
183
+ private store;
184
+ private watcher;
185
+ private watchedPaths;
186
+ private pendingUpdates;
187
+ private updateDebounceMs;
188
+ private isWatching;
189
+ private onChangeCallbacks;
190
+ private onFileEventCallbacks;
191
+ constructor(cacheDir?: string);
192
+ onSessionChange(cb: (sessionId: string, cacheData: SessionCacheData) => void): void;
193
+ onFileEvent(cb: (event: 'add' | 'change' | 'unlink', filePath: string) => void): void;
194
+ private fireFileEvent;
195
+ private fireOnChange;
196
+ /**
197
+ * Start watching session directories for file changes.
198
+ * Requires chokidar to be installed (optional dependency).
199
+ * Returns false if chokidar is not available.
200
+ */
201
+ startWatching(projectPaths?: string[]): boolean;
202
+ stopWatching(): void;
203
+ private scheduleUpdate;
204
+ warmCache(filePath: string): Promise<void>;
205
+ warmProjectCache(projectPath: string): Promise<{
206
+ warmed: number;
207
+ errors: number;
208
+ }>;
209
+ getCacheStats(): {
210
+ memoryCacheSize: number;
211
+ rawMemoryCacheSize: number;
212
+ isWatching: boolean;
213
+ watchedPaths: string[];
214
+ pendingUpdates: number;
215
+ lmdb: {
216
+ sessionCount: number;
217
+ rawCount: number;
218
+ };
219
+ };
220
+ private isCacheValid;
221
+ private parseNewLines;
222
+ private mergeNewMessages;
223
+ private createInitialCache;
224
+ getSessionDataFromMemory(sessionPath: string): SessionCacheData | null;
225
+ getSessionData(sessionPath: string): Promise<SessionCacheData | null>;
226
+ getRawMessages(sessionPath: string): Promise<Array<any & {
227
+ lineIndex: number;
228
+ }> | null>;
229
+ private isRawCacheValid;
230
+ private parseRawNewLines;
231
+ getSessionDataSync(sessionPath: string): SessionCacheData | null;
232
+ clearCache(sessionPath: string): void;
233
+ clearAllCaches(): void;
234
+ compactCache(): Promise<{
235
+ beforeSize: number;
236
+ afterSize: number;
237
+ }>;
238
+ getAllSessionsFromCache(): Array<{
239
+ sessionId: string;
240
+ filePath: string;
241
+ cacheData: SessionCacheData;
242
+ }>;
243
+ getProjectSessionsFromCache(projectPath: string): Array<{
244
+ sessionId: string;
245
+ filePath: string;
246
+ cacheData: SessionCacheData;
247
+ }>;
248
+ getPerProjectCosts(): Map<string, number>;
249
+ getRawMessagesSync(sessionPath: string): Array<any & {
250
+ lineIndex: number;
251
+ }> | null;
252
+ getSubagentSessionsFromCache(projectPath: string, sessionId: string): Array<{
253
+ filePath: string;
254
+ cacheData: SessionCacheData;
255
+ }>;
256
+ isProjectCached(projectPath: string): boolean;
257
+ getStats(): {
258
+ memoryCacheSize: number;
259
+ diskCacheCount: number;
260
+ diskCacheSize: number;
261
+ };
262
+ close(): void;
263
+ }
264
+ export declare function createSessionCache(cacheDir?: string): SessionCache;
265
+ export default SessionCache;
266
+ //# sourceMappingURL=session-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache.d.ts","sourceRoot":"","sources":["../src/session-cache.ts"],"names":[],"mappings":"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"}