claude-code-smart-fork 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +21 -0
  3. package/README.md +317 -0
  4. package/README.zh-CN.md +45 -0
  5. package/dist/cli/index.d.ts +8 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +351 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/core/__tests__/embedding.test.d.ts +2 -0
  10. package/dist/core/__tests__/embedding.test.d.ts.map +1 -0
  11. package/dist/core/__tests__/embedding.test.js +90 -0
  12. package/dist/core/__tests__/embedding.test.js.map +1 -0
  13. package/dist/core/config.d.ts +19 -0
  14. package/dist/core/config.d.ts.map +1 -0
  15. package/dist/core/config.js +105 -0
  16. package/dist/core/config.js.map +1 -0
  17. package/dist/core/embedding.d.ts +28 -0
  18. package/dist/core/embedding.d.ts.map +1 -0
  19. package/dist/core/embedding.js +137 -0
  20. package/dist/core/embedding.js.map +1 -0
  21. package/dist/core/fork-detector.d.ts +38 -0
  22. package/dist/core/fork-detector.d.ts.map +1 -0
  23. package/dist/core/fork-detector.js +234 -0
  24. package/dist/core/fork-detector.js.map +1 -0
  25. package/dist/core/session-manager.d.ts +77 -0
  26. package/dist/core/session-manager.d.ts.map +1 -0
  27. package/dist/core/session-manager.js +525 -0
  28. package/dist/core/session-manager.js.map +1 -0
  29. package/dist/core/vector-store.d.ts +47 -0
  30. package/dist/core/vector-store.d.ts.map +1 -0
  31. package/dist/core/vector-store.js +204 -0
  32. package/dist/core/vector-store.js.map +1 -0
  33. package/dist/index.d.ts +6 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +10 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/integrations/claude-code.d.ts +53 -0
  38. package/dist/integrations/claude-code.d.ts.map +1 -0
  39. package/dist/integrations/claude-code.js +277 -0
  40. package/dist/integrations/claude-code.js.map +1 -0
  41. package/dist/types/index.d.ts +106 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/index.js +6 -0
  44. package/dist/types/index.js.map +1 -0
  45. package/package.json +79 -0
@@ -0,0 +1,525 @@
1
+ "use strict";
2
+ /**
3
+ * Session Manager - Handles session indexing, storage, and forking
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.SessionManager = void 0;
40
+ const fs = __importStar(require("fs/promises"));
41
+ const path = __importStar(require("path"));
42
+ const uuid_1 = require("uuid");
43
+ const config_1 = require("./config");
44
+ const embedding_1 = require("./embedding");
45
+ const vector_store_1 = require("./vector-store");
46
+ const child_process_1 = require("child_process");
47
+ class SessionManager {
48
+ embeddingService;
49
+ vectorStore;
50
+ initialized = false;
51
+ constructor() {
52
+ this.embeddingService = new embedding_1.EmbeddingService();
53
+ this.vectorStore = new vector_store_1.VectorStore();
54
+ }
55
+ async initialize() {
56
+ if (this.initialized)
57
+ return;
58
+ const config = config_1.configManager.get();
59
+ await this.embeddingService.initialize(config.embedding);
60
+ await this.vectorStore.initialize(config.vectorStore);
61
+ // Ensure sessions directory exists
62
+ await fs.mkdir(config.storage.sessionsDir, { recursive: true });
63
+ this.initialized = true;
64
+ }
65
+ /**
66
+ * Index the current Claude Code session with full conversation history
67
+ */
68
+ async indexCurrentSession(options = {}) {
69
+ await this.initialize();
70
+ const sessionId = (0, uuid_1.v4)();
71
+ const projectPath = process.cwd();
72
+ const projectName = path.basename(projectPath);
73
+ // Use provided conversation history or extract from Claude Code context
74
+ const conversationHistory = options.conversationHistory || await this.extractConversationHistory();
75
+ // Convert conversation history to legacy message format for compatibility
76
+ const messages = this.conversationToMessages(conversationHistory);
77
+ // Generate summary if not provided
78
+ const summary = options.summary || await this.generateSummaryFromConversation(conversationHistory);
79
+ // Extract key topics
80
+ const keyTopics = this.extractKeyTopicsFromConversation(conversationHistory);
81
+ // Create session object
82
+ const session = {
83
+ id: sessionId,
84
+ projectPath,
85
+ projectName,
86
+ createdAt: Date.now(),
87
+ updatedAt: Date.now(),
88
+ messages,
89
+ summary,
90
+ tags: options.tags || [],
91
+ conversationHistory
92
+ };
93
+ // Generate embedding for the session (include both user and assistant content)
94
+ const sessionText = this.conversationToText(conversationHistory);
95
+ session.embedding = await this.embeddingService.embed(sessionText);
96
+ // Save full session
97
+ await this.saveSession(session);
98
+ // Index for searching
99
+ const sessionIndex = {
100
+ id: sessionId,
101
+ projectPath,
102
+ projectName,
103
+ createdAt: session.createdAt,
104
+ updatedAt: session.updatedAt,
105
+ messageCount: messages.length,
106
+ summary,
107
+ tags: options.tags || [],
108
+ keyTopics,
109
+ embedding: session.embedding
110
+ };
111
+ await this.vectorStore.upsert(sessionIndex);
112
+ return session;
113
+ }
114
+ /**
115
+ * Fork to a historical session
116
+ */
117
+ async forkToSession(sessionId) {
118
+ await this.initialize();
119
+ const session = await this.loadSession(sessionId);
120
+ if (!session) {
121
+ throw new Error(`Session ${sessionId} not found`);
122
+ }
123
+ // 1. Change to the project directory
124
+ if (session.projectPath !== process.cwd()) {
125
+ console.log(`Changing directory to: ${session.projectPath}`);
126
+ process.chdir(session.projectPath);
127
+ }
128
+ // 2. Restore git branch if possible
129
+ try {
130
+ const currentBranch = (0, child_process_1.execSync)('git branch --show-current', {
131
+ encoding: 'utf-8',
132
+ cwd: session.projectPath
133
+ });
134
+ // Store current context before switching
135
+ const forkContext = {
136
+ sourceSessionId: this.getCurrentSessionId(),
137
+ targetSessionId: sessionId,
138
+ preservedContext: {
139
+ files: await this.getOpenFiles(),
140
+ environment: { ...process.env },
141
+ gitBranch: currentBranch.trim()
142
+ }
143
+ };
144
+ // Save fork context
145
+ await this.saveForkContext(forkContext);
146
+ }
147
+ catch {
148
+ // Not a git repository or git not available
149
+ }
150
+ // 3. Open relevant files from the session
151
+ const filesToOpen = this.extractFilesFromSession(session);
152
+ for (const file of filesToOpen.slice(0, 5)) {
153
+ const filePath = path.join(session.projectPath, file);
154
+ try {
155
+ await fs.access(filePath);
156
+ console.log(`📄 ${file}`);
157
+ }
158
+ catch {
159
+ // File doesn't exist
160
+ }
161
+ }
162
+ // 4. Display session summary and conversation history
163
+ console.log('\n📋 Session Summary:');
164
+ console.log(session.summary);
165
+ // Display full conversation history
166
+ console.log('\n💬 Conversation History:');
167
+ console.log('─'.repeat(60));
168
+ const history = session.conversationHistory || this.messagesToConversation(session.messages);
169
+ history.forEach((turn, index) => {
170
+ console.log(`\n[${index + 1}] 👤 User:`);
171
+ console.log(turn.userMessage.content);
172
+ if (turn.assistantMessage) {
173
+ console.log(`\n 🤖 Assistant:`);
174
+ // Truncate long assistant responses for display
175
+ const content = turn.assistantMessage.content;
176
+ const displayContent = content.length > 500
177
+ ? content.substring(0, 500) + '\n... (truncated)'
178
+ : content;
179
+ console.log(displayContent);
180
+ }
181
+ // Show tool calls if any
182
+ if (turn.assistantMessage?.toolCalls && turn.assistantMessage.toolCalls.length > 0) {
183
+ console.log(` 🔧 Tool calls: ${turn.assistantMessage.toolCalls.map(t => t.type).join(', ')}`);
184
+ }
185
+ console.log('─'.repeat(60));
186
+ });
187
+ console.log(`\n✨ Total turns: ${history.length}`);
188
+ console.log('💡 You can continue the conversation from here.\n');
189
+ // 5. Set environment variable to indicate forked session
190
+ process.env.SMART_FORK_SESSION_ID = sessionId;
191
+ process.env.SMART_FORK_ORIGINAL_CWD = process.cwd();
192
+ }
193
+ /**
194
+ * List all indexed sessions
195
+ */
196
+ async listSessions(projectPath) {
197
+ await this.initialize();
198
+ const allSessions = await this.vectorStore.getAll();
199
+ if (projectPath) {
200
+ return allSessions.filter(s => s.projectPath === projectPath);
201
+ }
202
+ return allSessions;
203
+ }
204
+ /**
205
+ * Export session to a file
206
+ */
207
+ async exportSession(sessionId, outputPath) {
208
+ const session = await this.loadSession(sessionId);
209
+ if (!session) {
210
+ throw new Error(`Session ${sessionId} not found`);
211
+ }
212
+ const targetPath = outputPath || path.join(process.cwd(), `session-${sessionId.slice(0, 8)}.json`);
213
+ await fs.writeFile(targetPath, JSON.stringify(session, null, 2));
214
+ return targetPath;
215
+ }
216
+ /**
217
+ * Import session from a file
218
+ */
219
+ async importSession(filePath) {
220
+ const content = await fs.readFile(filePath, 'utf-8');
221
+ const session = JSON.parse(content);
222
+ // Re-index the session
223
+ const summary = session.summary || `Session in ${session.projectName}`;
224
+ await this.vectorStore.upsert({
225
+ id: session.id,
226
+ projectPath: session.projectPath,
227
+ projectName: session.projectName,
228
+ createdAt: session.createdAt,
229
+ updatedAt: Date.now(),
230
+ messageCount: session.messages.length,
231
+ summary: summary,
232
+ tags: session.tags,
233
+ keyTopics: this.extractKeyTopics(session.messages),
234
+ embedding: session.embedding || await this.embeddingService.embed(this.sessionToText(session))
235
+ });
236
+ await this.saveSession(session);
237
+ return session;
238
+ }
239
+ // Private helper methods for conversation history
240
+ /**
241
+ * Extract conversation history from various sources
242
+ */
243
+ async extractConversationHistory() {
244
+ const turns = [];
245
+ // Try to read from Claude Code's conversation log
246
+ const claudeConvPath = path.join(process.env.HOME || process.env.USERPROFILE || '', '.claude', 'projects', this.sanitizePath(process.cwd()), 'conversation.json');
247
+ try {
248
+ const content = await fs.readFile(claudeConvPath, 'utf-8');
249
+ const logData = JSON.parse(content);
250
+ if (Array.isArray(logData.conversation)) {
251
+ turns.push(...logData.conversation.map((turn) => ({
252
+ id: turn.id || (0, uuid_1.v4)(),
253
+ timestamp: turn.timestamp || Date.now(),
254
+ userMessage: {
255
+ content: turn.userMessage?.content || '',
256
+ metadata: turn.userMessage?.metadata
257
+ },
258
+ assistantMessage: turn.assistantMessage ? {
259
+ content: turn.assistantMessage.content || '',
260
+ toolCalls: turn.assistantMessage.toolCalls,
261
+ metadata: turn.assistantMessage.metadata
262
+ } : undefined
263
+ })));
264
+ }
265
+ }
266
+ catch {
267
+ // Conversation log not available, fallback to legacy message format
268
+ const messages = await this.extractMessages();
269
+ return this.messagesToConversation(messages);
270
+ }
271
+ // If no conversation found, create a placeholder
272
+ if (turns.length === 0) {
273
+ turns.push({
274
+ id: (0, uuid_1.v4)(),
275
+ timestamp: Date.now(),
276
+ userMessage: {
277
+ content: `Working in ${process.cwd()}`
278
+ }
279
+ });
280
+ }
281
+ return turns;
282
+ }
283
+ /**
284
+ * Convert conversation turns to legacy message format
285
+ */
286
+ conversationToMessages(turns) {
287
+ const messages = [];
288
+ for (const turn of turns) {
289
+ // Add user message
290
+ messages.push({
291
+ id: `${turn.id}-user`,
292
+ role: 'user',
293
+ content: turn.userMessage.content,
294
+ timestamp: turn.timestamp,
295
+ metadata: turn.userMessage.metadata
296
+ });
297
+ // Add assistant message if exists
298
+ if (turn.assistantMessage) {
299
+ messages.push({
300
+ id: `${turn.id}-assistant`,
301
+ role: 'assistant',
302
+ content: turn.assistantMessage.content,
303
+ timestamp: turn.timestamp + 1,
304
+ metadata: turn.assistantMessage.metadata
305
+ });
306
+ }
307
+ }
308
+ return messages;
309
+ }
310
+ /**
311
+ * Convert legacy messages to conversation turns
312
+ */
313
+ messagesToConversation(messages) {
314
+ const turns = [];
315
+ let currentTurn = {};
316
+ for (const message of messages) {
317
+ if (message.role === 'user') {
318
+ // Save previous turn if exists
319
+ if (currentTurn.id) {
320
+ turns.push(currentTurn);
321
+ }
322
+ // Start new turn
323
+ currentTurn = {
324
+ id: message.id.replace('-user', ''),
325
+ timestamp: message.timestamp,
326
+ userMessage: {
327
+ content: message.content,
328
+ metadata: message.metadata
329
+ }
330
+ };
331
+ }
332
+ else if (message.role === 'assistant' && currentTurn.id) {
333
+ currentTurn.assistantMessage = {
334
+ content: message.content,
335
+ metadata: message.metadata
336
+ };
337
+ }
338
+ }
339
+ // Don't forget the last turn
340
+ if (currentTurn.id) {
341
+ turns.push(currentTurn);
342
+ }
343
+ return turns;
344
+ }
345
+ /**
346
+ * Convert conversation to text for embedding
347
+ */
348
+ conversationToText(turns) {
349
+ const parts = [];
350
+ for (const turn of turns) {
351
+ parts.push(`User: ${turn.userMessage.content}`);
352
+ if (turn.assistantMessage) {
353
+ parts.push(`Assistant: ${turn.assistantMessage.content}`);
354
+ }
355
+ }
356
+ return parts.join('\n\n');
357
+ }
358
+ /**
359
+ * Generate summary from conversation
360
+ */
361
+ async generateSummaryFromConversation(turns) {
362
+ if (turns.length === 0) {
363
+ return `Session in ${path.basename(process.cwd())}`;
364
+ }
365
+ // Use the first user message as summary basis
366
+ const firstUserMessage = turns[0].userMessage.content;
367
+ const summary = firstUserMessage.length > 200
368
+ ? firstUserMessage.substring(0, 200) + '...'
369
+ : firstUserMessage;
370
+ return summary;
371
+ }
372
+ /**
373
+ * Extract key topics from conversation
374
+ */
375
+ extractKeyTopicsFromConversation(turns) {
376
+ const allText = turns
377
+ .map(t => `${t.userMessage.content} ${t.assistantMessage?.content || ''}`)
378
+ .join(' ');
379
+ // Simple keyword extraction
380
+ const words = allText.toLowerCase()
381
+ .replace(/[^\w\s]/g, ' ')
382
+ .split(/\s+/)
383
+ .filter(w => w.length > 3);
384
+ const frequency = {};
385
+ words.forEach(word => {
386
+ frequency[word] = (frequency[word] || 0) + 1;
387
+ });
388
+ return Object.entries(frequency)
389
+ .sort((a, b) => b[1] - a[1])
390
+ .slice(0, 10)
391
+ .map(([word]) => word);
392
+ }
393
+ /**
394
+ * Sanitize path for use in file names
395
+ */
396
+ sanitizePath(filePath) {
397
+ return filePath.replace(/[:\/\\]/g, '_');
398
+ }
399
+ // Legacy helper methods
400
+ async extractMessages() {
401
+ const messages = [];
402
+ // Try to read from Claude Code's message log
403
+ const claudeLogPath = path.join(process.env.HOME || process.env.USERPROFILE || '', '.claude', 'messages.json');
404
+ try {
405
+ const content = await fs.readFile(claudeLogPath, 'utf-8');
406
+ const logData = JSON.parse(content);
407
+ if (Array.isArray(logData.messages)) {
408
+ messages.push(...logData.messages.map((m) => ({
409
+ id: m.id || (0, uuid_1.v4)(),
410
+ role: m.role,
411
+ content: m.content,
412
+ timestamp: m.timestamp || Date.now(),
413
+ metadata: m.metadata
414
+ })));
415
+ }
416
+ }
417
+ catch {
418
+ // Log file not available, try alternative methods
419
+ }
420
+ // If no messages found, create a placeholder
421
+ if (messages.length === 0) {
422
+ messages.push({
423
+ id: (0, uuid_1.v4)(),
424
+ role: 'user',
425
+ content: `Working in ${process.cwd()}`,
426
+ timestamp: Date.now()
427
+ });
428
+ }
429
+ return messages;
430
+ }
431
+ async generateSummary(messages) {
432
+ // Use the first user message as summary, or combine recent messages
433
+ const userMessages = messages.filter(m => m.role === 'user');
434
+ if (userMessages.length > 0) {
435
+ const firstMsg = userMessages[0].content;
436
+ return firstMsg.length > 200
437
+ ? firstMsg.substring(0, 200) + '...'
438
+ : firstMsg;
439
+ }
440
+ return `Session in ${path.basename(process.cwd())}`;
441
+ }
442
+ extractKeyTopics(messages) {
443
+ const allText = messages.map(m => m.content).join(' ');
444
+ // Simple keyword extraction
445
+ const words = allText.toLowerCase()
446
+ .replace(/[^\w\s]/g, ' ')
447
+ .split(/\s+/)
448
+ .filter(w => w.length > 3);
449
+ const frequency = {};
450
+ words.forEach(word => {
451
+ frequency[word] = (frequency[word] || 0) + 1;
452
+ });
453
+ return Object.entries(frequency)
454
+ .sort((a, b) => b[1] - a[1])
455
+ .slice(0, 10)
456
+ .map(([word]) => word);
457
+ }
458
+ sessionToText(session) {
459
+ const parts = [
460
+ `Project: ${session.projectName}`,
461
+ `Path: ${session.projectPath}`,
462
+ `Summary: ${session.summary}`,
463
+ `Tags: ${session.tags.join(', ')}`,
464
+ `Messages:`,
465
+ ...session.messages.map(m => `${m.role}: ${m.content}`)
466
+ ];
467
+ return parts.join('\n');
468
+ }
469
+ async saveSession(session) {
470
+ const sessionsDir = config_1.configManager.getSessionsDir();
471
+ const sessionPath = path.join(sessionsDir, `${session.id}.json`);
472
+ await fs.writeFile(sessionPath, JSON.stringify(session, null, 2));
473
+ }
474
+ async loadSession(sessionId) {
475
+ const sessionsDir = config_1.configManager.getSessionsDir();
476
+ const sessionPath = path.join(sessionsDir, `${sessionId}.json`);
477
+ try {
478
+ const content = await fs.readFile(sessionPath, 'utf-8');
479
+ return JSON.parse(content);
480
+ }
481
+ catch {
482
+ return null;
483
+ }
484
+ }
485
+ async saveForkContext(context) {
486
+ const forkPath = path.join(config_1.configManager.getSessionsDir(), 'fork-context.json');
487
+ await fs.writeFile(forkPath, JSON.stringify(context, null, 2));
488
+ }
489
+ getCurrentSessionId() {
490
+ return process.env.SMART_FORK_SESSION_ID || 'unknown';
491
+ }
492
+ async getOpenFiles() {
493
+ // Try to detect currently open files
494
+ // This could be integrated with VS Code, cursor, or other editors
495
+ const openFiles = [];
496
+ // Check for VS Code
497
+ try {
498
+ // VS Code state is in different locations depending on OS
499
+ // This is a simplified version
500
+ const vscodePath = path.join(process.env.HOME || process.env.USERPROFILE || '', '.config', 'Code', 'Global Storage', 'state.vscdb');
501
+ // Actual implementation would parse the VS Code state
502
+ }
503
+ catch {
504
+ // VS Code not detected
505
+ }
506
+ return openFiles;
507
+ }
508
+ extractFilesFromSession(session) {
509
+ const files = new Set();
510
+ session.messages.forEach(msg => {
511
+ // Extract file paths from message content
512
+ const fileMatches = msg.content.match(/[\w\-./]+\.(ts|js|tsx|jsx|py|go|rs|java|cpp|c|h|md|json|yaml|yml)/g);
513
+ if (fileMatches) {
514
+ fileMatches.forEach(f => files.add(f));
515
+ }
516
+ // Extract from metadata if available
517
+ if (msg.metadata?.filePaths) {
518
+ msg.metadata.filePaths.forEach(f => files.add(f));
519
+ }
520
+ });
521
+ return Array.from(files);
522
+ }
523
+ }
524
+ exports.SessionManager = SessionManager;
525
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Vector Store - Handles storage and retrieval of session embeddings
3
+ * Supports multiple backends: local JSON, Chroma, Pinecone
4
+ */
5
+ import type { SessionIndex, Config } from '../types';
6
+ interface SearchParams {
7
+ vector: number[];
8
+ limit: number;
9
+ filter?: Record<string, any>;
10
+ }
11
+ interface SearchResult {
12
+ session: SessionIndex;
13
+ score: number;
14
+ }
15
+ export declare class VectorStore {
16
+ private config;
17
+ private localData;
18
+ private initialized;
19
+ initialize(config: Config['vectorStore']): Promise<void>;
20
+ /**
21
+ * Add or update a session in the vector store
22
+ */
23
+ upsert(session: SessionIndex): Promise<void>;
24
+ /**
25
+ * Search for similar sessions
26
+ */
27
+ search(params: SearchParams): Promise<SearchResult[]>;
28
+ /**
29
+ * Delete a session from the store
30
+ */
31
+ delete(sessionId: string): Promise<void>;
32
+ /**
33
+ * Get all sessions
34
+ */
35
+ getAll(): Promise<SessionIndex[]>;
36
+ private loadLocalData;
37
+ private saveLocalData;
38
+ private upsertLocal;
39
+ private searchLocal;
40
+ private upsertChroma;
41
+ private searchChroma;
42
+ private upsertPinecone;
43
+ private searchPinecone;
44
+ private cosineSimilarity;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=vector-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/core/vector-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGrD,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,WAAW,CAAS;IAEtB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9D;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlD;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAe3D;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAYzB,aAAa;YAkBb,aAAa;YAab,WAAW;IAKzB,OAAO,CAAC,WAAW;YA0BL,YAAY;YAMZ,YAAY;YAKZ,cAAc;YAMd,cAAc;IAK5B,OAAO,CAAC,gBAAgB;CAazB"}