cccmemory 1.8.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 +21 -0
- package/README.md +349 -0
- package/dist/ConversationMemory.d.ts +231 -0
- package/dist/ConversationMemory.d.ts.map +1 -0
- package/dist/ConversationMemory.js +357 -0
- package/dist/ConversationMemory.js.map +1 -0
- package/dist/cache/QueryCache.d.ts +215 -0
- package/dist/cache/QueryCache.d.ts.map +1 -0
- package/dist/cache/QueryCache.js +294 -0
- package/dist/cache/QueryCache.js.map +1 -0
- package/dist/cli/commands.d.ts +9 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +954 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +16 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +361 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/context/ContextInjector.d.ts +38 -0
- package/dist/context/ContextInjector.d.ts.map +1 -0
- package/dist/context/ContextInjector.js +235 -0
- package/dist/context/ContextInjector.js.map +1 -0
- package/dist/documentation/CodeAnalyzer.d.ts +29 -0
- package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
- package/dist/documentation/CodeAnalyzer.js +122 -0
- package/dist/documentation/CodeAnalyzer.js.map +1 -0
- package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
- package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
- package/dist/documentation/ConversationAnalyzer.js +157 -0
- package/dist/documentation/ConversationAnalyzer.js.map +1 -0
- package/dist/documentation/CrossReferencer.d.ts +67 -0
- package/dist/documentation/CrossReferencer.d.ts.map +1 -0
- package/dist/documentation/CrossReferencer.js +247 -0
- package/dist/documentation/CrossReferencer.js.map +1 -0
- package/dist/documentation/DocumentationGenerator.d.ts +22 -0
- package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
- package/dist/documentation/DocumentationGenerator.js +57 -0
- package/dist/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/documentation/MarkdownFormatter.d.ts +26 -0
- package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
- package/dist/documentation/MarkdownFormatter.js +301 -0
- package/dist/documentation/MarkdownFormatter.js.map +1 -0
- package/dist/documentation/types.d.ts +176 -0
- package/dist/documentation/types.d.ts.map +1 -0
- package/dist/documentation/types.js +5 -0
- package/dist/documentation/types.js.map +1 -0
- package/dist/embeddings/ConfigManager.d.ts +46 -0
- package/dist/embeddings/ConfigManager.d.ts.map +1 -0
- package/dist/embeddings/ConfigManager.js +177 -0
- package/dist/embeddings/ConfigManager.js.map +1 -0
- package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
- package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingConfig.js +132 -0
- package/dist/embeddings/EmbeddingConfig.js.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.js +157 -0
- package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
- package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingProvider.js +6 -0
- package/dist/embeddings/EmbeddingProvider.js.map +1 -0
- package/dist/embeddings/ModelRegistry.d.ts +48 -0
- package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
- package/dist/embeddings/ModelRegistry.js +170 -0
- package/dist/embeddings/ModelRegistry.js.map +1 -0
- package/dist/embeddings/VectorStore.d.ts +114 -0
- package/dist/embeddings/VectorStore.d.ts.map +1 -0
- package/dist/embeddings/VectorStore.js +393 -0
- package/dist/embeddings/VectorStore.js.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
- package/dist/handoff/SessionHandoffStore.d.ts +80 -0
- package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
- package/dist/handoff/SessionHandoffStore.js +314 -0
- package/dist/handoff/SessionHandoffStore.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +157 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/memory/WorkingMemoryStore.d.ts +83 -0
- package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
- package/dist/memory/WorkingMemoryStore.js +318 -0
- package/dist/memory/WorkingMemoryStore.js.map +1 -0
- package/dist/memory/types.d.ts +192 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/parsers/CodexConversationParser.d.ts +51 -0
- package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
- package/dist/parsers/CodexConversationParser.js +301 -0
- package/dist/parsers/CodexConversationParser.js.map +1 -0
- package/dist/parsers/ConversationParser.d.ts +286 -0
- package/dist/parsers/ConversationParser.d.ts.map +1 -0
- package/dist/parsers/ConversationParser.js +795 -0
- package/dist/parsers/ConversationParser.js.map +1 -0
- package/dist/parsers/DecisionExtractor.d.ts +144 -0
- package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
- package/dist/parsers/DecisionExtractor.js +434 -0
- package/dist/parsers/DecisionExtractor.js.map +1 -0
- package/dist/parsers/GitIntegrator.d.ts +156 -0
- package/dist/parsers/GitIntegrator.d.ts.map +1 -0
- package/dist/parsers/GitIntegrator.js +348 -0
- package/dist/parsers/GitIntegrator.js.map +1 -0
- package/dist/parsers/MistakeExtractor.d.ts +151 -0
- package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
- package/dist/parsers/MistakeExtractor.js +460 -0
- package/dist/parsers/MistakeExtractor.js.map +1 -0
- package/dist/parsers/RequirementsExtractor.d.ts +166 -0
- package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
- package/dist/parsers/RequirementsExtractor.js +338 -0
- package/dist/parsers/RequirementsExtractor.js.map +1 -0
- package/dist/realtime/ConversationWatcher.d.ts +87 -0
- package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
- package/dist/realtime/ConversationWatcher.js +204 -0
- package/dist/realtime/ConversationWatcher.js.map +1 -0
- package/dist/realtime/IncrementalParser.d.ts +83 -0
- package/dist/realtime/IncrementalParser.d.ts.map +1 -0
- package/dist/realtime/IncrementalParser.js +232 -0
- package/dist/realtime/IncrementalParser.js.map +1 -0
- package/dist/realtime/LiveExtractor.d.ts +72 -0
- package/dist/realtime/LiveExtractor.d.ts.map +1 -0
- package/dist/realtime/LiveExtractor.js +288 -0
- package/dist/realtime/LiveExtractor.js.map +1 -0
- package/dist/search/SemanticSearch.d.ts +121 -0
- package/dist/search/SemanticSearch.d.ts.map +1 -0
- package/dist/search/SemanticSearch.js +823 -0
- package/dist/search/SemanticSearch.js.map +1 -0
- package/dist/storage/BackupManager.d.ts +58 -0
- package/dist/storage/BackupManager.d.ts.map +1 -0
- package/dist/storage/BackupManager.js +223 -0
- package/dist/storage/BackupManager.js.map +1 -0
- package/dist/storage/ConversationStorage.d.ts +341 -0
- package/dist/storage/ConversationStorage.d.ts.map +1 -0
- package/dist/storage/ConversationStorage.js +792 -0
- package/dist/storage/ConversationStorage.js.map +1 -0
- package/dist/storage/DeletionService.d.ts +70 -0
- package/dist/storage/DeletionService.d.ts.map +1 -0
- package/dist/storage/DeletionService.js +253 -0
- package/dist/storage/DeletionService.js.map +1 -0
- package/dist/storage/GlobalIndex.d.ts +133 -0
- package/dist/storage/GlobalIndex.d.ts.map +1 -0
- package/dist/storage/GlobalIndex.js +310 -0
- package/dist/storage/GlobalIndex.js.map +1 -0
- package/dist/storage/SQLiteManager.d.ts +114 -0
- package/dist/storage/SQLiteManager.d.ts.map +1 -0
- package/dist/storage/SQLiteManager.js +636 -0
- package/dist/storage/SQLiteManager.js.map +1 -0
- package/dist/storage/migrations.d.ts +54 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +285 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/schema.sql +436 -0
- package/dist/tools/ToolDefinitions.d.ts +946 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +937 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolHandlers.d.ts +791 -0
- package/dist/tools/ToolHandlers.d.ts.map +1 -0
- package/dist/tools/ToolHandlers.js +3262 -0
- package/dist/tools/ToolHandlers.js.map +1 -0
- package/dist/types/ToolTypes.d.ts +824 -0
- package/dist/types/ToolTypes.d.ts.map +1 -0
- package/dist/types/ToolTypes.js +6 -0
- package/dist/types/ToolTypes.js.map +1 -0
- package/dist/utils/Logger.d.ts +70 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +131 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/McpConfig.d.ts +54 -0
- package/dist/utils/McpConfig.d.ts.map +1 -0
- package/dist/utils/McpConfig.js +136 -0
- package/dist/utils/McpConfig.js.map +1 -0
- package/dist/utils/ProjectMigration.d.ts +82 -0
- package/dist/utils/ProjectMigration.d.ts.map +1 -0
- package/dist/utils/ProjectMigration.js +416 -0
- package/dist/utils/ProjectMigration.js.map +1 -0
- package/dist/utils/constants.d.ts +75 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +105 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/safeJson.d.ts +37 -0
- package/dist/utils/safeJson.d.ts.map +1 -0
- package/dist/utils/safeJson.js +48 -0
- package/dist/utils/safeJson.js.map +1 -0
- package/dist/utils/sanitization.d.ts +45 -0
- package/dist/utils/sanitization.d.ts.map +1 -0
- package/dist/utils/sanitization.js +153 -0
- package/dist/utils/sanitization.js.map +1 -0
- package/dist/utils/worktree.d.ts +15 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +86 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +98 -0
- package/scripts/changelog-check.sh +62 -0
- package/scripts/check-node.js +17 -0
- package/scripts/dev-config.js +56 -0
- package/scripts/postinstall.js +117 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working Memory Store
|
|
3
|
+
*
|
|
4
|
+
* A key-value store for facts, decisions, and context that persists
|
|
5
|
+
* across conversation boundaries. Enables Claude to "remember" things
|
|
6
|
+
* explicitly and retrieve them later.
|
|
7
|
+
*/
|
|
8
|
+
import type { Database } from "better-sqlite3";
|
|
9
|
+
import type { WorkingMemoryItem, RememberOptions, RecallOptions, SemanticRecallOptions, SemanticRecallResult } from "./types.js";
|
|
10
|
+
export declare class WorkingMemoryStore {
|
|
11
|
+
private db;
|
|
12
|
+
constructor(db: Database);
|
|
13
|
+
/**
|
|
14
|
+
* Store a fact/decision/context in working memory
|
|
15
|
+
*/
|
|
16
|
+
remember(options: RememberOptions): WorkingMemoryItem;
|
|
17
|
+
/**
|
|
18
|
+
* Recall a specific item by key
|
|
19
|
+
*/
|
|
20
|
+
recall(key: string, projectPath: string): WorkingMemoryItem | null;
|
|
21
|
+
/**
|
|
22
|
+
* Recall items matching options
|
|
23
|
+
*/
|
|
24
|
+
recallMany(options: RecallOptions): WorkingMemoryItem[];
|
|
25
|
+
/**
|
|
26
|
+
* Semantic search across working memory using FTS
|
|
27
|
+
*/
|
|
28
|
+
recallRelevant(options: SemanticRecallOptions): SemanticRecallResult[];
|
|
29
|
+
/**
|
|
30
|
+
* Forget (delete) a memory item by key
|
|
31
|
+
*/
|
|
32
|
+
forget(key: string, projectPath: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Forget all items for a project
|
|
35
|
+
*/
|
|
36
|
+
forgetAll(projectPath: string): number;
|
|
37
|
+
/**
|
|
38
|
+
* List all memory items for a project
|
|
39
|
+
*/
|
|
40
|
+
list(projectPath: string, options?: {
|
|
41
|
+
tags?: string[];
|
|
42
|
+
limit?: number;
|
|
43
|
+
offset?: number;
|
|
44
|
+
}): WorkingMemoryItem[];
|
|
45
|
+
/**
|
|
46
|
+
* Get count of items for a project
|
|
47
|
+
*/
|
|
48
|
+
count(projectPath: string): number;
|
|
49
|
+
/**
|
|
50
|
+
* Get a single item by ID
|
|
51
|
+
*/
|
|
52
|
+
private getById;
|
|
53
|
+
/**
|
|
54
|
+
* Convert database row to WorkingMemoryItem
|
|
55
|
+
*/
|
|
56
|
+
private rowToItem;
|
|
57
|
+
/**
|
|
58
|
+
* Clean up expired items
|
|
59
|
+
*/
|
|
60
|
+
private cleanupExpired;
|
|
61
|
+
/**
|
|
62
|
+
* Insert into FTS index
|
|
63
|
+
*/
|
|
64
|
+
private insertFts;
|
|
65
|
+
/**
|
|
66
|
+
* Update FTS index
|
|
67
|
+
*/
|
|
68
|
+
private updateFts;
|
|
69
|
+
/**
|
|
70
|
+
* Delete from FTS index
|
|
71
|
+
*/
|
|
72
|
+
private deleteFts;
|
|
73
|
+
/**
|
|
74
|
+
* Escape FTS query for safe matching
|
|
75
|
+
*/
|
|
76
|
+
private escapeFtsQuery;
|
|
77
|
+
/**
|
|
78
|
+
* Normalize BM25 rank to a similarity score (0-1)
|
|
79
|
+
* BM25 returns negative scores, lower is better
|
|
80
|
+
*/
|
|
81
|
+
private normalizeRank;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=WorkingMemoryStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkingMemoryStore.d.ts","sourceRoot":"","sources":["../../src/memory/WorkingMemoryStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAW;gBAET,EAAE,EAAE,QAAQ;IAIxB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,iBAAiB;IAyErD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAmBlE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,EAAE;IA8CvD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,EAAE;IAgCtE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAiBjD;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAiBtC;;OAEG;IACH,IAAI,CACF,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7D,iBAAiB,EAAE;IA8BtB;;OAEG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAYlC;;OAEG;IACH,OAAO,CAAC,OAAO;IAYf;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,SAAS;IAmBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAgBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAKtB"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working Memory Store
|
|
3
|
+
*
|
|
4
|
+
* A key-value store for facts, decisions, and context that persists
|
|
5
|
+
* across conversation boundaries. Enables Claude to "remember" things
|
|
6
|
+
* explicitly and retrieve them later.
|
|
7
|
+
*/
|
|
8
|
+
import { nanoid } from "nanoid";
|
|
9
|
+
export class WorkingMemoryStore {
|
|
10
|
+
db;
|
|
11
|
+
constructor(db) {
|
|
12
|
+
this.db = db;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Store a fact/decision/context in working memory
|
|
16
|
+
*/
|
|
17
|
+
remember(options) {
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
const id = nanoid();
|
|
20
|
+
const expiresAt = options.ttl ? now + options.ttl * 1000 : null;
|
|
21
|
+
// Check if key already exists for this project
|
|
22
|
+
const existing = this.db
|
|
23
|
+
.prepare("SELECT id FROM working_memory WHERE project_path = ? AND key = ?")
|
|
24
|
+
.get(options.projectPath, options.key);
|
|
25
|
+
if (existing) {
|
|
26
|
+
// Update existing
|
|
27
|
+
this.db
|
|
28
|
+
.prepare(`UPDATE working_memory
|
|
29
|
+
SET value = ?, context = ?, tags = ?, session_id = ?, updated_at = ?, expires_at = ?
|
|
30
|
+
WHERE id = ?`)
|
|
31
|
+
.run(options.value, options.context || null, options.tags ? JSON.stringify(options.tags) : null, options.sessionId || null, now, expiresAt, existing.id);
|
|
32
|
+
// Update FTS
|
|
33
|
+
this.updateFts(existing.id, options.key, options.value, options.context);
|
|
34
|
+
return this.getById(existing.id);
|
|
35
|
+
}
|
|
36
|
+
// Insert new
|
|
37
|
+
this.db
|
|
38
|
+
.prepare(`INSERT INTO working_memory
|
|
39
|
+
(id, key, value, context, tags, session_id, project_path, created_at, updated_at, expires_at)
|
|
40
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
41
|
+
.run(id, options.key, options.value, options.context || null, options.tags ? JSON.stringify(options.tags) : null, options.sessionId || null, options.projectPath, now, now, expiresAt);
|
|
42
|
+
// Insert into FTS
|
|
43
|
+
this.insertFts(id, options.key, options.value, options.context);
|
|
44
|
+
return {
|
|
45
|
+
id,
|
|
46
|
+
key: options.key,
|
|
47
|
+
value: options.value,
|
|
48
|
+
context: options.context,
|
|
49
|
+
tags: options.tags || [],
|
|
50
|
+
sessionId: options.sessionId,
|
|
51
|
+
projectPath: options.projectPath,
|
|
52
|
+
createdAt: now,
|
|
53
|
+
updatedAt: now,
|
|
54
|
+
expiresAt: expiresAt || undefined,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Recall a specific item by key
|
|
59
|
+
*/
|
|
60
|
+
recall(key, projectPath) {
|
|
61
|
+
// First, clean up expired items
|
|
62
|
+
this.cleanupExpired();
|
|
63
|
+
const row = this.db
|
|
64
|
+
.prepare(`SELECT * FROM working_memory
|
|
65
|
+
WHERE project_path = ? AND key = ?
|
|
66
|
+
AND (expires_at IS NULL OR expires_at > ?)`)
|
|
67
|
+
.get(projectPath, key, Date.now());
|
|
68
|
+
if (!row) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
return this.rowToItem(row);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Recall items matching options
|
|
75
|
+
*/
|
|
76
|
+
recallMany(options) {
|
|
77
|
+
// First, clean up expired items
|
|
78
|
+
if (!options.includeExpired) {
|
|
79
|
+
this.cleanupExpired();
|
|
80
|
+
}
|
|
81
|
+
let sql = "SELECT * FROM working_memory WHERE 1=1";
|
|
82
|
+
const params = [];
|
|
83
|
+
if (options.projectPath) {
|
|
84
|
+
sql += " AND project_path = ?";
|
|
85
|
+
params.push(options.projectPath);
|
|
86
|
+
}
|
|
87
|
+
if (options.key) {
|
|
88
|
+
sql += " AND key = ?";
|
|
89
|
+
params.push(options.key);
|
|
90
|
+
}
|
|
91
|
+
if (options.sessionId) {
|
|
92
|
+
sql += " AND session_id = ?";
|
|
93
|
+
params.push(options.sessionId);
|
|
94
|
+
}
|
|
95
|
+
if (!options.includeExpired) {
|
|
96
|
+
sql += " AND (expires_at IS NULL OR expires_at > ?)";
|
|
97
|
+
params.push(Date.now());
|
|
98
|
+
}
|
|
99
|
+
sql += " ORDER BY updated_at DESC";
|
|
100
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
101
|
+
// Filter by tags in JavaScript (JSON array in SQLite)
|
|
102
|
+
let items = rows.map((row) => this.rowToItem(row));
|
|
103
|
+
const filterTags = options.tags;
|
|
104
|
+
if (filterTags && filterTags.length > 0) {
|
|
105
|
+
items = items.filter((item) => filterTags.some((tag) => item.tags.includes(tag)));
|
|
106
|
+
}
|
|
107
|
+
return items;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Semantic search across working memory using FTS
|
|
111
|
+
*/
|
|
112
|
+
recallRelevant(options) {
|
|
113
|
+
// First, clean up expired items
|
|
114
|
+
this.cleanupExpired();
|
|
115
|
+
const limit = options.limit || 10;
|
|
116
|
+
// Use FTS5 for text search
|
|
117
|
+
const ftsResults = this.db
|
|
118
|
+
.prepare(`SELECT wm.*,
|
|
119
|
+
bm25(working_memory_fts) as rank
|
|
120
|
+
FROM working_memory_fts fts
|
|
121
|
+
JOIN working_memory wm ON wm.id = fts.id
|
|
122
|
+
WHERE working_memory_fts MATCH ?
|
|
123
|
+
AND wm.project_path = ?
|
|
124
|
+
AND (wm.expires_at IS NULL OR wm.expires_at > ?)
|
|
125
|
+
ORDER BY rank
|
|
126
|
+
LIMIT ?`)
|
|
127
|
+
.all(this.escapeFtsQuery(options.query), options.projectPath, Date.now(), limit);
|
|
128
|
+
return ftsResults.map((row) => ({
|
|
129
|
+
...this.rowToItem(row),
|
|
130
|
+
similarity: this.normalizeRank(row.rank),
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Forget (delete) a memory item by key
|
|
135
|
+
*/
|
|
136
|
+
forget(key, projectPath) {
|
|
137
|
+
const item = this.recall(key, projectPath);
|
|
138
|
+
if (!item) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
// Delete from FTS first
|
|
142
|
+
this.deleteFts(item.id);
|
|
143
|
+
// Delete from main table
|
|
144
|
+
const result = this.db
|
|
145
|
+
.prepare("DELETE FROM working_memory WHERE project_path = ? AND key = ?")
|
|
146
|
+
.run(projectPath, key);
|
|
147
|
+
return result.changes > 0;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Forget all items for a project
|
|
151
|
+
*/
|
|
152
|
+
forgetAll(projectPath) {
|
|
153
|
+
// Get all IDs first for FTS cleanup
|
|
154
|
+
const items = this.db
|
|
155
|
+
.prepare("SELECT id FROM working_memory WHERE project_path = ?")
|
|
156
|
+
.all(projectPath);
|
|
157
|
+
for (const item of items) {
|
|
158
|
+
this.deleteFts(item.id);
|
|
159
|
+
}
|
|
160
|
+
const result = this.db
|
|
161
|
+
.prepare("DELETE FROM working_memory WHERE project_path = ?")
|
|
162
|
+
.run(projectPath);
|
|
163
|
+
return result.changes;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* List all memory items for a project
|
|
167
|
+
*/
|
|
168
|
+
list(projectPath, options) {
|
|
169
|
+
// First, clean up expired items
|
|
170
|
+
this.cleanupExpired();
|
|
171
|
+
const limit = options?.limit || 100;
|
|
172
|
+
const offset = options?.offset || 0;
|
|
173
|
+
const rows = this.db
|
|
174
|
+
.prepare(`SELECT * FROM working_memory
|
|
175
|
+
WHERE project_path = ?
|
|
176
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
177
|
+
ORDER BY updated_at DESC
|
|
178
|
+
LIMIT ? OFFSET ?`)
|
|
179
|
+
.all(projectPath, Date.now(), limit, offset);
|
|
180
|
+
let items = rows.map((row) => this.rowToItem(row));
|
|
181
|
+
// Filter by tags if specified
|
|
182
|
+
const listTags = options?.tags;
|
|
183
|
+
if (listTags && listTags.length > 0) {
|
|
184
|
+
items = items.filter((item) => listTags.some((tag) => item.tags.includes(tag)));
|
|
185
|
+
}
|
|
186
|
+
return items;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get count of items for a project
|
|
190
|
+
*/
|
|
191
|
+
count(projectPath) {
|
|
192
|
+
const result = this.db
|
|
193
|
+
.prepare(`SELECT COUNT(*) as count FROM working_memory
|
|
194
|
+
WHERE project_path = ?
|
|
195
|
+
AND (expires_at IS NULL OR expires_at > ?)`)
|
|
196
|
+
.get(projectPath, Date.now());
|
|
197
|
+
return result.count;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get a single item by ID
|
|
201
|
+
*/
|
|
202
|
+
getById(id) {
|
|
203
|
+
const row = this.db
|
|
204
|
+
.prepare("SELECT * FROM working_memory WHERE id = ?")
|
|
205
|
+
.get(id);
|
|
206
|
+
if (!row) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
return this.rowToItem(row);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Convert database row to WorkingMemoryItem
|
|
213
|
+
*/
|
|
214
|
+
rowToItem(row) {
|
|
215
|
+
return {
|
|
216
|
+
id: row.id,
|
|
217
|
+
key: row.key,
|
|
218
|
+
value: row.value,
|
|
219
|
+
context: row.context || undefined,
|
|
220
|
+
tags: row.tags ? JSON.parse(row.tags) : [],
|
|
221
|
+
sessionId: row.session_id || undefined,
|
|
222
|
+
projectPath: row.project_path,
|
|
223
|
+
createdAt: row.created_at,
|
|
224
|
+
updatedAt: row.updated_at,
|
|
225
|
+
expiresAt: row.expires_at || undefined,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Clean up expired items
|
|
230
|
+
*/
|
|
231
|
+
cleanupExpired() {
|
|
232
|
+
const now = Date.now();
|
|
233
|
+
// Get expired IDs for FTS cleanup
|
|
234
|
+
const expired = this.db
|
|
235
|
+
.prepare("SELECT id FROM working_memory WHERE expires_at IS NOT NULL AND expires_at <= ?")
|
|
236
|
+
.all(now);
|
|
237
|
+
for (const item of expired) {
|
|
238
|
+
this.deleteFts(item.id);
|
|
239
|
+
}
|
|
240
|
+
// Delete expired items
|
|
241
|
+
this.db
|
|
242
|
+
.prepare("DELETE FROM working_memory WHERE expires_at IS NOT NULL AND expires_at <= ?")
|
|
243
|
+
.run(now);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Insert into FTS index
|
|
247
|
+
*/
|
|
248
|
+
insertFts(id, key, value, context) {
|
|
249
|
+
try {
|
|
250
|
+
this.db
|
|
251
|
+
.prepare(`INSERT INTO working_memory_fts(id, key, value, context)
|
|
252
|
+
VALUES (?, ?, ?, ?)`)
|
|
253
|
+
.run(id, key, value, context || "");
|
|
254
|
+
}
|
|
255
|
+
catch (_error) {
|
|
256
|
+
// FTS insert can fail if table doesn't exist yet
|
|
257
|
+
// Silently ignore - search will fall back to non-FTS
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Update FTS index
|
|
262
|
+
*/
|
|
263
|
+
updateFts(id, key, value, context) {
|
|
264
|
+
try {
|
|
265
|
+
// Delete old entry
|
|
266
|
+
this.deleteFts(id);
|
|
267
|
+
// Insert new entry
|
|
268
|
+
this.insertFts(id, key, value, context);
|
|
269
|
+
}
|
|
270
|
+
catch (_error) {
|
|
271
|
+
// Silently ignore FTS errors
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Delete from FTS index
|
|
276
|
+
*/
|
|
277
|
+
deleteFts(id) {
|
|
278
|
+
try {
|
|
279
|
+
this.db
|
|
280
|
+
.prepare("DELETE FROM working_memory_fts WHERE id = ?")
|
|
281
|
+
.run(id);
|
|
282
|
+
}
|
|
283
|
+
catch (_error) {
|
|
284
|
+
// Silently ignore FTS errors
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Escape FTS query for safe matching
|
|
289
|
+
*/
|
|
290
|
+
escapeFtsQuery(query) {
|
|
291
|
+
// Escape special FTS5 characters and wrap in quotes for phrase matching
|
|
292
|
+
// Also handle simple word queries
|
|
293
|
+
const words = query
|
|
294
|
+
.split(/\s+/)
|
|
295
|
+
.filter((w) => w.length > 0)
|
|
296
|
+
.map((word) => {
|
|
297
|
+
// Remove special characters that could break FTS
|
|
298
|
+
const cleaned = word.replace(/['"(){}[\]:*^~\\-]/g, "");
|
|
299
|
+
return cleaned;
|
|
300
|
+
})
|
|
301
|
+
.filter((w) => w.length > 0);
|
|
302
|
+
if (words.length === 0) {
|
|
303
|
+
return '""';
|
|
304
|
+
}
|
|
305
|
+
// Join with OR for broad matching
|
|
306
|
+
return words.map((w) => `"${w}"`).join(" OR ");
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Normalize BM25 rank to a similarity score (0-1)
|
|
310
|
+
* BM25 returns negative scores, lower is better
|
|
311
|
+
*/
|
|
312
|
+
normalizeRank(rank) {
|
|
313
|
+
// Convert negative BM25 score to positive similarity
|
|
314
|
+
// Typical BM25 scores range from -50 to 0
|
|
315
|
+
return Math.max(0, Math.min(1, 1 + rank / 50));
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=WorkingMemoryStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkingMemoryStore.js","sourceRoot":"","sources":["../../src/memory/WorkingMemoryStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working Memory Types
|
|
3
|
+
*
|
|
4
|
+
* Types for the working memory store that allows Claude to remember
|
|
5
|
+
* facts, decisions, and context across conversation boundaries.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* A single item stored in working memory
|
|
9
|
+
*/
|
|
10
|
+
export interface WorkingMemoryItem {
|
|
11
|
+
id: string;
|
|
12
|
+
key: string;
|
|
13
|
+
value: string;
|
|
14
|
+
context?: string;
|
|
15
|
+
tags: string[];
|
|
16
|
+
sessionId?: string;
|
|
17
|
+
projectPath: string;
|
|
18
|
+
createdAt: number;
|
|
19
|
+
updatedAt: number;
|
|
20
|
+
expiresAt?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Database row representation of a working memory item
|
|
24
|
+
*/
|
|
25
|
+
export interface WorkingMemoryRow {
|
|
26
|
+
id: string;
|
|
27
|
+
key: string;
|
|
28
|
+
value: string;
|
|
29
|
+
context: string | null;
|
|
30
|
+
tags: string | null;
|
|
31
|
+
session_id: string | null;
|
|
32
|
+
project_path: string;
|
|
33
|
+
created_at: number;
|
|
34
|
+
updated_at: number;
|
|
35
|
+
expires_at: number | null;
|
|
36
|
+
embedding: Buffer | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Options for storing a memory item
|
|
40
|
+
*/
|
|
41
|
+
export interface RememberOptions {
|
|
42
|
+
key: string;
|
|
43
|
+
value: string;
|
|
44
|
+
context?: string;
|
|
45
|
+
tags?: string[];
|
|
46
|
+
sessionId?: string;
|
|
47
|
+
projectPath: string;
|
|
48
|
+
ttl?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Options for recalling memory items
|
|
52
|
+
*/
|
|
53
|
+
export interface RecallOptions {
|
|
54
|
+
key?: string;
|
|
55
|
+
tags?: string[];
|
|
56
|
+
sessionId?: string;
|
|
57
|
+
projectPath?: string;
|
|
58
|
+
includeExpired?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Options for semantic recall
|
|
62
|
+
*/
|
|
63
|
+
export interface SemanticRecallOptions {
|
|
64
|
+
query: string;
|
|
65
|
+
projectPath: string;
|
|
66
|
+
limit?: number;
|
|
67
|
+
threshold?: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Result from semantic recall with similarity score
|
|
71
|
+
*/
|
|
72
|
+
export interface SemanticRecallResult extends WorkingMemoryItem {
|
|
73
|
+
similarity: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Session handoff document for transferring context between conversations
|
|
77
|
+
*/
|
|
78
|
+
export interface SessionHandoff {
|
|
79
|
+
id: string;
|
|
80
|
+
fromSessionId: string;
|
|
81
|
+
projectPath: string;
|
|
82
|
+
createdAt: number;
|
|
83
|
+
decisions: HandoffDecision[];
|
|
84
|
+
activeFiles: ActiveFile[];
|
|
85
|
+
pendingTasks: PendingTask[];
|
|
86
|
+
workingMemory: WorkingMemoryItem[];
|
|
87
|
+
contextSummary: string;
|
|
88
|
+
resumedBy?: string;
|
|
89
|
+
resumedAt?: number;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Decision included in a handoff
|
|
93
|
+
*/
|
|
94
|
+
export interface HandoffDecision {
|
|
95
|
+
id: string;
|
|
96
|
+
text: string;
|
|
97
|
+
rationale?: string;
|
|
98
|
+
context?: string;
|
|
99
|
+
timestamp: number;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* File that was actively worked on
|
|
103
|
+
*/
|
|
104
|
+
export interface ActiveFile {
|
|
105
|
+
path: string;
|
|
106
|
+
lastAction: "read" | "edit" | "create" | "delete";
|
|
107
|
+
summary?: string;
|
|
108
|
+
timestamp: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Task that was in progress
|
|
112
|
+
*/
|
|
113
|
+
export interface PendingTask {
|
|
114
|
+
description: string;
|
|
115
|
+
status: "in_progress" | "blocked" | "pending";
|
|
116
|
+
context?: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Database row for session handoff
|
|
120
|
+
*/
|
|
121
|
+
export interface SessionHandoffRow {
|
|
122
|
+
id: string;
|
|
123
|
+
from_session_id: string;
|
|
124
|
+
project_path: string;
|
|
125
|
+
created_at: number;
|
|
126
|
+
handoff_data: string;
|
|
127
|
+
resumed_by_session_id: string | null;
|
|
128
|
+
resumed_at: number | null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Live checkpoint for real-time session tracking
|
|
132
|
+
*/
|
|
133
|
+
export interface SessionCheckpoint {
|
|
134
|
+
id: string;
|
|
135
|
+
sessionId: string;
|
|
136
|
+
projectPath: string;
|
|
137
|
+
checkpointNumber: number;
|
|
138
|
+
createdAt: number;
|
|
139
|
+
decisions: HandoffDecision[];
|
|
140
|
+
activeFiles: ActiveFile[];
|
|
141
|
+
taskState?: Record<string, unknown>;
|
|
142
|
+
contextSummary: string;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Database row for session checkpoint
|
|
146
|
+
*/
|
|
147
|
+
export interface SessionCheckpointRow {
|
|
148
|
+
id: string;
|
|
149
|
+
session_id: string;
|
|
150
|
+
project_path: string;
|
|
151
|
+
checkpoint_number: number;
|
|
152
|
+
created_at: number;
|
|
153
|
+
decisions: string;
|
|
154
|
+
active_files: string;
|
|
155
|
+
task_state: string | null;
|
|
156
|
+
context_summary: string;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Configuration for real-time watching
|
|
160
|
+
*/
|
|
161
|
+
export interface RealtimeConfig {
|
|
162
|
+
enabled: boolean;
|
|
163
|
+
watchPaths: string[];
|
|
164
|
+
extractionInterval: number;
|
|
165
|
+
checkpointInterval: number;
|
|
166
|
+
autoRemember: {
|
|
167
|
+
decisions: boolean;
|
|
168
|
+
fileEdits: boolean;
|
|
169
|
+
errors: boolean;
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Context injection result
|
|
174
|
+
*/
|
|
175
|
+
export interface InjectedContext {
|
|
176
|
+
handoff?: SessionHandoff;
|
|
177
|
+
decisions: HandoffDecision[];
|
|
178
|
+
memory: WorkingMemoryItem[];
|
|
179
|
+
recentFiles: ActiveFile[];
|
|
180
|
+
summary: string;
|
|
181
|
+
tokenEstimate: number;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Options for context injection
|
|
185
|
+
*/
|
|
186
|
+
export interface ContextInjectionOptions {
|
|
187
|
+
query?: string;
|
|
188
|
+
projectPath: string;
|
|
189
|
+
maxTokens?: number;
|
|
190
|
+
sources?: Array<"history" | "decisions" | "memory" | "handoffs">;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex Conversation Parser for MCP integration.
|
|
3
|
+
*
|
|
4
|
+
* This parser reads conversation history from Codex's storage location
|
|
5
|
+
* (~/.codex/sessions) and converts it to the same format as ConversationParser.
|
|
6
|
+
*
|
|
7
|
+
* Codex stores conversations in a date-hierarchical structure:
|
|
8
|
+
* ~/.codex/sessions/YYYY/MM/DD/rollout-{timestamp}-{uuid}.jsonl
|
|
9
|
+
*
|
|
10
|
+
* Each line in a Codex session file has the structure:
|
|
11
|
+
* {
|
|
12
|
+
* timestamp: string,
|
|
13
|
+
* type: "session_meta" | "response_item" | "event_msg" | "turn_context",
|
|
14
|
+
* payload: { ... }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const parser = new CodexConversationParser();
|
|
20
|
+
* const result = parser.parseSessions('/Users/username/.codex');
|
|
21
|
+
* console.error(`Parsed ${result.conversations.length} Codex sessions`);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import type { ParseResult } from "./ConversationParser.js";
|
|
25
|
+
/**
|
|
26
|
+
* Parser for Codex conversation history.
|
|
27
|
+
*
|
|
28
|
+
* Converts Codex session files into the same format as ConversationParser
|
|
29
|
+
* so they can be stored in the same database and searched together.
|
|
30
|
+
*/
|
|
31
|
+
export declare class CodexConversationParser {
|
|
32
|
+
/**
|
|
33
|
+
* Parse all Codex sessions.
|
|
34
|
+
*
|
|
35
|
+
* Recursively scans the sessions directory for JSONL files and parses them.
|
|
36
|
+
*
|
|
37
|
+
* @param codexPath - Path to Codex home directory (default: ~/.codex)
|
|
38
|
+
* @param sessionId - Optional specific session ID to parse
|
|
39
|
+
* @returns ParseResult with all extracted entities
|
|
40
|
+
*/
|
|
41
|
+
parseSession(codexPath: string, sessionId?: string, lastIndexedMs?: number): ParseResult;
|
|
42
|
+
/**
|
|
43
|
+
* Recursively find all .jsonl session files.
|
|
44
|
+
*/
|
|
45
|
+
private findSessionFiles;
|
|
46
|
+
/**
|
|
47
|
+
* Parse a single Codex session file.
|
|
48
|
+
*/
|
|
49
|
+
private parseSessionFile;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=CodexConversationParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexConversationParser.d.ts","sourceRoot":"","sources":["../../src/parsers/CodexConversationParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EAOV,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAwCjC;;;;;GAKG;AACH,qBAAa,uBAAuB;IAClC;;;;;;;;OAQG;IACH,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,WAAW;IA0Fd;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA6KzB"}
|