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.
- package/LICENSE +661 -0
- package/README.md +140 -0
- package/data/model-pricing.json +113 -0
- package/dist/cost-calculator.d.ts +49 -0
- package/dist/cost-calculator.d.ts.map +1 -0
- package/dist/cost-calculator.js +429 -0
- package/dist/cost-calculator.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/dist/projects-service.d.ts +106 -0
- package/dist/projects-service.d.ts.map +1 -0
- package/dist/projects-service.js +317 -0
- package/dist/projects-service.js.map +1 -0
- package/dist/session-cache-store.d.ts +48 -0
- package/dist/session-cache-store.d.ts.map +1 -0
- package/dist/session-cache-store.js +231 -0
- package/dist/session-cache-store.js.map +1 -0
- package/dist/session-cache.d.ts +266 -0
- package/dist/session-cache.d.ts.map +1 -0
- package/dist/session-cache.js +1294 -0
- package/dist/session-cache.js.map +1 -0
- package/dist/session-parser.d.ts +265 -0
- package/dist/session-parser.d.ts.map +1 -0
- package/dist/session-parser.js +555 -0
- package/dist/session-parser.js.map +1 -0
- package/dist/session-reader.d.ts +87 -0
- package/dist/session-reader.d.ts.map +1 -0
- package/dist/session-reader.js +279 -0
- package/dist/session-reader.js.map +1 -0
- package/dist/tasks-service.d.ts +100 -0
- package/dist/tasks-service.d.ts.map +1 -0
- package/dist/tasks-service.js +290 -0
- package/dist/tasks-service.js.map +1 -0
- package/dist/teams-service.d.ts +30 -0
- package/dist/teams-service.d.ts.map +1 -0
- package/dist/teams-service.js +85 -0
- package/dist/teams-service.js.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/path-utils.d.ts +80 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +355 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Path utilities for Claude CLI Manager
|
|
4
|
+
* Handles path encoding/decoding for session storage
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.legacyEncodeProjectPath = legacyEncodeProjectPath;
|
|
41
|
+
exports.encodePath = encodePath;
|
|
42
|
+
exports.decodePath = decodePath;
|
|
43
|
+
exports.getDataDir = getDataDir;
|
|
44
|
+
exports.getClaudeConfigDir = getClaudeConfigDir;
|
|
45
|
+
exports.getProjectsDir = getProjectsDir;
|
|
46
|
+
exports.getSessionFilePath = getSessionFilePath;
|
|
47
|
+
exports.getProjectStorageDir = getProjectStorageDir;
|
|
48
|
+
exports.transformPaths = transformPaths;
|
|
49
|
+
exports.normalizePath = normalizePath;
|
|
50
|
+
exports.isAbsolutePath = isAbsolutePath;
|
|
51
|
+
exports.getRelativePath = getRelativePath;
|
|
52
|
+
exports.extractProjectPath = extractProjectPath;
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
const os = __importStar(require("os"));
|
|
55
|
+
const fs = __importStar(require("fs"));
|
|
56
|
+
/**
|
|
57
|
+
* Encode a project path using Claude Code's legacy dash-replacement method.
|
|
58
|
+
* Cross-platform: handles both / and \ separators, and removes colons.
|
|
59
|
+
* Linux: /home/user/project -> -home-user-project
|
|
60
|
+
* macOS: /Users/admin/project -> -Users-admin-project
|
|
61
|
+
* Windows: C:\home\project -> C--home-project (colon and backslashes become dashes)
|
|
62
|
+
*/
|
|
63
|
+
function legacyEncodeProjectPath(projectPath) {
|
|
64
|
+
return projectPath.replace(/[:\\/]/g, '-');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Encode a path for use in Claude session storage
|
|
68
|
+
* Uses URL-safe Base64 encoding to handle paths with dashes/special characters
|
|
69
|
+
* Example: /home/ubuntu/my-project -> aG9tZS91YnVudHUvbXktcHJvamVjdA
|
|
70
|
+
*
|
|
71
|
+
* Note: This uses a different encoding than the legacy dash-replacement method
|
|
72
|
+
* to avoid collisions where /home/my-project and /home/my/project would
|
|
73
|
+
* both encode to the same string.
|
|
74
|
+
*/
|
|
75
|
+
function encodePath(absolutePath) {
|
|
76
|
+
// Remove leading slash for encoding
|
|
77
|
+
const pathWithoutLeadingSlash = absolutePath.replace(/^\//, '');
|
|
78
|
+
// Use URL-safe Base64 encoding (replace +/ with -_)
|
|
79
|
+
const base64 = Buffer.from(pathWithoutLeadingSlash, 'utf-8').toString('base64');
|
|
80
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Decode an encoded path back to absolute path
|
|
84
|
+
* Supports both new Base64 encoding and legacy dash-replacement format
|
|
85
|
+
* Example: aG9tZS91YnVudHUvbXktcHJvamVjdA -> /home/ubuntu/my-project
|
|
86
|
+
* Example: -home-ubuntu-my-project -> /home/ubuntu/my-project (legacy)
|
|
87
|
+
*/
|
|
88
|
+
function decodePath(encodedPath) {
|
|
89
|
+
// Check if this looks like legacy encoding:
|
|
90
|
+
// Legacy format: -home-ubuntu-project (starts with dash, all lowercase, dashes as separators)
|
|
91
|
+
// Base64 format: aG9tZS91YnVudHUvbXktcHJvamVjdA (mixed case, may contain underscores)
|
|
92
|
+
//
|
|
93
|
+
// Legacy format characteristics:
|
|
94
|
+
// 1. Starts with '-' (representing root /)
|
|
95
|
+
// 2. Contains only lowercase letters, numbers, and dashes
|
|
96
|
+
// 3. No underscores (which are used in URL-safe Base64)
|
|
97
|
+
// 4. No uppercase letters (which appear in Base64)
|
|
98
|
+
const isLikelyLegacy = /^-[a-z0-9-]*$/.test(encodedPath) && !encodedPath.includes('_');
|
|
99
|
+
// Windows legacy format: C--home-project (drive letter + -- for colon, dashes for backslashes)
|
|
100
|
+
// Pattern: single uppercase letter followed by -- (from C:\ -> C--)
|
|
101
|
+
// No underscore guard needed: ^[A-Z]-- is a sufficient discriminator — no valid
|
|
102
|
+
// Base64-encoded printable-ASCII path can produce this pattern.
|
|
103
|
+
const isWindowsLegacy = /^[A-Z]--/.test(encodedPath);
|
|
104
|
+
if (isWindowsLegacy) {
|
|
105
|
+
// Windows legacy decoding: C--home-lm-assist -> C:\home\lm-assist
|
|
106
|
+
// The drive letter and colon come from the first char + '--' pattern
|
|
107
|
+
const driveLetter = encodedPath[0];
|
|
108
|
+
const rest = encodedPath.slice(2); // Skip drive letter and first dash (from colon)
|
|
109
|
+
// rest starts with '-' (from backslash after colon), e.g., '-home-lm-assist'
|
|
110
|
+
return decodeWindowsPathWithFilesystemCheck(driveLetter, rest);
|
|
111
|
+
}
|
|
112
|
+
if (isLikelyLegacy) {
|
|
113
|
+
// Legacy decoding with filesystem verification
|
|
114
|
+
// Problem: -home-ubuntu-sample-project could be:
|
|
115
|
+
// /home/ubuntu/sample-project or /home/ubuntu/sample/project
|
|
116
|
+
// Solution: Try to find the actual path that exists on the filesystem
|
|
117
|
+
return decodePathWithFilesystemCheck(encodedPath);
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
// Restore URL-safe Base64 to standard Base64
|
|
121
|
+
let base64 = encodedPath.replace(/-/g, '+').replace(/_/g, '/');
|
|
122
|
+
// Add padding if needed
|
|
123
|
+
const padding = base64.length % 4;
|
|
124
|
+
if (padding > 0) {
|
|
125
|
+
base64 += '='.repeat(4 - padding);
|
|
126
|
+
}
|
|
127
|
+
const decoded = Buffer.from(base64, 'base64').toString('utf-8');
|
|
128
|
+
// Validate the decoded result looks like a path (should contain valid path characters)
|
|
129
|
+
if (decoded && !decoded.includes('\0') && decoded.length > 0 && /^[a-zA-Z0-9/_.-]+$/.test(decoded)) {
|
|
130
|
+
return '/' + decoded;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Fall through to legacy decoding
|
|
135
|
+
}
|
|
136
|
+
// Fallback to legacy decoding (handles edge cases)
|
|
137
|
+
if (encodedPath.startsWith('-')) {
|
|
138
|
+
return decodePathWithFilesystemCheck(encodedPath);
|
|
139
|
+
}
|
|
140
|
+
return '/' + encodedPath.replace(/-/g, '/');
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Decode a legacy dash-encoded path by checking which interpretation exists on disk
|
|
144
|
+
* For -home-ubuntu-sample-project, tries paths in order:
|
|
145
|
+
* 1. /home/ubuntu/sample-project (least slashes - most dashes preserved)
|
|
146
|
+
* 2. /home/ubuntu/sample/project (more slashes)
|
|
147
|
+
* Falls back to all-slashes interpretation if no path exists
|
|
148
|
+
*/
|
|
149
|
+
function decodePathWithFilesystemCheck(encodedPath) {
|
|
150
|
+
// Remove leading dash and split by dash
|
|
151
|
+
const parts = encodedPath.replace(/^-/, '').split('-');
|
|
152
|
+
// Build path progressively, checking filesystem at each level
|
|
153
|
+
// We want to find the interpretation where the most dashes are preserved
|
|
154
|
+
// (i.e., fewest directory levels that still exists on disk)
|
|
155
|
+
// Start building from root
|
|
156
|
+
let currentPath = '';
|
|
157
|
+
let partIndex = 0;
|
|
158
|
+
while (partIndex < parts.length) {
|
|
159
|
+
const part = parts[partIndex];
|
|
160
|
+
const testPath = currentPath + '/' + part;
|
|
161
|
+
// Check if this path exists as a directory
|
|
162
|
+
try {
|
|
163
|
+
const stat = fs.statSync(testPath);
|
|
164
|
+
if (stat.isDirectory()) {
|
|
165
|
+
// This level exists, continue
|
|
166
|
+
currentPath = testPath;
|
|
167
|
+
partIndex++;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// Path doesn't exist, try combining with remaining parts
|
|
173
|
+
}
|
|
174
|
+
// Current part doesn't exist as a directory
|
|
175
|
+
// Try combining remaining parts with dashes to see if that exists
|
|
176
|
+
if (partIndex < parts.length) {
|
|
177
|
+
// Try progressively combining parts with dashes
|
|
178
|
+
for (let endIndex = parts.length; endIndex > partIndex; endIndex--) {
|
|
179
|
+
const combinedPart = parts.slice(partIndex, endIndex).join('-');
|
|
180
|
+
const combinedPath = currentPath + '/' + combinedPart;
|
|
181
|
+
try {
|
|
182
|
+
const stat = fs.statSync(combinedPath);
|
|
183
|
+
if (stat.isDirectory() || stat.isFile()) {
|
|
184
|
+
// Found a valid path with dashes preserved
|
|
185
|
+
currentPath = combinedPath;
|
|
186
|
+
partIndex = endIndex;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Continue trying shorter combinations
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// If no combination worked, just add this part and continue
|
|
195
|
+
if (partIndex < parts.length && !currentPath.endsWith('/' + parts[partIndex])) {
|
|
196
|
+
currentPath = currentPath + '/' + parts[partIndex];
|
|
197
|
+
partIndex++;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// If we didn't build a valid path, fall back to all-slashes interpretation
|
|
202
|
+
if (!currentPath || currentPath === '/') {
|
|
203
|
+
return '/' + parts.join('/');
|
|
204
|
+
}
|
|
205
|
+
return currentPath;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Decode a Windows legacy dash-encoded path by checking which interpretation exists on disk.
|
|
209
|
+
* For C--home-lm-assist, the drive letter and rest are split by the caller.
|
|
210
|
+
* rest = '-home-lm-assist' (leading dash from backslash after colon)
|
|
211
|
+
* We reconstruct C:\ + path using filesystem checks to resolve dash ambiguity.
|
|
212
|
+
*/
|
|
213
|
+
function decodeWindowsPathWithFilesystemCheck(driveLetter, rest) {
|
|
214
|
+
// rest starts with '-' (from backslash), e.g., '-home-lm-assist'
|
|
215
|
+
const parts = rest.replace(/^-/, '').split('-');
|
|
216
|
+
const driveRoot = driveLetter + ':\\';
|
|
217
|
+
// Build path progressively, checking filesystem at each level
|
|
218
|
+
let currentPath = driveRoot;
|
|
219
|
+
let partIndex = 0;
|
|
220
|
+
while (partIndex < parts.length) {
|
|
221
|
+
const part = parts[partIndex];
|
|
222
|
+
const testPath = path.join(currentPath, part);
|
|
223
|
+
// Check if this path exists as a directory
|
|
224
|
+
try {
|
|
225
|
+
const stat = fs.statSync(testPath);
|
|
226
|
+
if (stat.isDirectory()) {
|
|
227
|
+
currentPath = testPath;
|
|
228
|
+
partIndex++;
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Path doesn't exist, try combining with remaining parts
|
|
234
|
+
}
|
|
235
|
+
// Try combining remaining parts with dashes to see if that exists
|
|
236
|
+
if (partIndex < parts.length) {
|
|
237
|
+
let found = false;
|
|
238
|
+
for (let endIndex = parts.length; endIndex > partIndex; endIndex--) {
|
|
239
|
+
const combinedPart = parts.slice(partIndex, endIndex).join('-');
|
|
240
|
+
const combinedPath = path.join(currentPath, combinedPart);
|
|
241
|
+
try {
|
|
242
|
+
const stat = fs.statSync(combinedPath);
|
|
243
|
+
if (stat.isDirectory() || stat.isFile()) {
|
|
244
|
+
currentPath = combinedPath;
|
|
245
|
+
partIndex = endIndex;
|
|
246
|
+
found = true;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// Continue trying shorter combinations
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (!found) {
|
|
255
|
+
currentPath = path.join(currentPath, parts[partIndex]);
|
|
256
|
+
partIndex++;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return currentPath;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get the lm-assist data directory
|
|
264
|
+
* Default: ~/.lm-assist
|
|
265
|
+
* Can be overridden with LM_ASSIST_DATA_DIR env var
|
|
266
|
+
* All lm-assist owned data lives here (knowledge, milestones, vectors, cache, etc.)
|
|
267
|
+
*/
|
|
268
|
+
function getDataDir() {
|
|
269
|
+
return process.env.LM_ASSIST_DATA_DIR || path.join(os.homedir(), '.lm-assist');
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get the Claude config directory
|
|
273
|
+
* Default: ~/.claude
|
|
274
|
+
* Can be overridden with CLAUDE_CONFIG_DIR env var
|
|
275
|
+
*/
|
|
276
|
+
function getClaudeConfigDir() {
|
|
277
|
+
return process.env.CLAUDE_CONFIG_DIR || path.join(os.homedir(), '.claude');
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get the projects directory
|
|
281
|
+
* Default: ~/.claude/projects
|
|
282
|
+
*/
|
|
283
|
+
function getProjectsDir(configDir) {
|
|
284
|
+
return path.join(configDir || getClaudeConfigDir(), 'projects');
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get the session file path for a project and session ID
|
|
288
|
+
*/
|
|
289
|
+
function getSessionFilePath(projectPath, sessionId, configDir) {
|
|
290
|
+
const projectsDir = getProjectsDir(configDir);
|
|
291
|
+
const encodedProject = encodePath(projectPath);
|
|
292
|
+
return path.join(projectsDir, encodedProject, `${sessionId}.jsonl`);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get the project directory in Claude storage
|
|
296
|
+
*/
|
|
297
|
+
function getProjectStorageDir(projectPath, configDir) {
|
|
298
|
+
const projectsDir = getProjectsDir(configDir);
|
|
299
|
+
const encodedProject = encodePath(projectPath);
|
|
300
|
+
return path.join(projectsDir, encodedProject);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Transform paths in content for migration
|
|
304
|
+
* Example: Transform all /home/ubuntu to /home/opc
|
|
305
|
+
*/
|
|
306
|
+
function transformPaths(content, transforms) {
|
|
307
|
+
let result = content;
|
|
308
|
+
for (const { from, to } of transforms) {
|
|
309
|
+
result = result.replace(new RegExp(escapeRegex(from), 'g'), to);
|
|
310
|
+
}
|
|
311
|
+
return result;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Escape special regex characters
|
|
315
|
+
*/
|
|
316
|
+
function escapeRegex(str) {
|
|
317
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Normalize a path (resolve ~, ., ..)
|
|
321
|
+
*/
|
|
322
|
+
function normalizePath(inputPath) {
|
|
323
|
+
if (inputPath.startsWith('~')) {
|
|
324
|
+
inputPath = path.join(os.homedir(), inputPath.slice(1));
|
|
325
|
+
}
|
|
326
|
+
return path.resolve(inputPath);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Check if a path is absolute
|
|
330
|
+
*/
|
|
331
|
+
function isAbsolutePath(inputPath) {
|
|
332
|
+
return path.isAbsolute(inputPath) || inputPath.startsWith('~');
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Get relative path from project root
|
|
336
|
+
*/
|
|
337
|
+
function getRelativePath(absolutePath, projectRoot) {
|
|
338
|
+
return path.relative(projectRoot, absolutePath);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Extract project path from encoded storage path
|
|
342
|
+
*/
|
|
343
|
+
function extractProjectPath(storagePath) {
|
|
344
|
+
const projectsDir = getProjectsDir();
|
|
345
|
+
if (!storagePath.startsWith(projectsDir)) {
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
const relativePath = storagePath.substring(projectsDir.length + 1);
|
|
349
|
+
const parts = relativePath.split(path.sep);
|
|
350
|
+
if (parts.length === 0) {
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
return decodePath(parts[0]);
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=path-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/utils/path-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-sessions",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Read Claude Code session data (sessions, projects, tasks, teams, costs) without running lm-assist",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/",
|
|
9
|
+
"data/"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"clean": "rm -rf dist",
|
|
14
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"claude",
|
|
18
|
+
"claude-code",
|
|
19
|
+
"sessions",
|
|
20
|
+
"jsonl",
|
|
21
|
+
"parser"
|
|
22
|
+
],
|
|
23
|
+
"author": "langmartai",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/langmartai/claude-sessions.git"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=18.0.0"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"lmdb": "^3.5.1"
|
|
34
|
+
},
|
|
35
|
+
"optionalDependencies": {
|
|
36
|
+
"chokidar": "^5.0.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^20.10.0",
|
|
40
|
+
"typescript": "^5.3.0"
|
|
41
|
+
}
|
|
42
|
+
}
|