@aeriondyseti/vector-memory-mcp 1.1.0-dev.2 → 1.1.0-dev.5
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 +24 -11
- package/dist/package.json +1 -2
- package/dist/src/config/index.d.ts +17 -10
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js +25 -11
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/db/conversation.repository.d.ts +26 -0
- package/dist/src/db/conversation.repository.d.ts.map +1 -0
- package/dist/src/db/conversation.repository.js +72 -0
- package/dist/src/db/conversation.repository.js.map +1 -0
- package/dist/src/db/conversation.schema.d.ts +4 -0
- package/dist/src/db/conversation.schema.d.ts.map +1 -0
- package/dist/src/db/conversation.schema.js +15 -0
- package/dist/src/db/conversation.schema.js.map +1 -0
- package/dist/src/db/lancedb-utils.d.ts +13 -3
- package/dist/src/db/lancedb-utils.d.ts.map +1 -1
- package/dist/src/db/lancedb-utils.js +36 -7
- package/dist/src/db/lancedb-utils.js.map +1 -1
- package/dist/src/db/memory.repository.d.ts +1 -0
- package/dist/src/db/memory.repository.d.ts.map +1 -1
- package/dist/src/db/memory.repository.js +18 -7
- package/dist/src/db/memory.repository.js.map +1 -1
- package/dist/src/http/server.d.ts.map +1 -1
- package/dist/src/http/server.js +38 -24
- package/dist/src/http/server.js.map +1 -1
- package/dist/src/index.js +7 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/handlers.d.ts +3 -3
- package/dist/src/mcp/handlers.d.ts.map +1 -1
- package/dist/src/mcp/handlers.js +128 -145
- package/dist/src/mcp/handlers.js.map +1 -1
- package/dist/src/mcp/tools.d.ts +2 -2
- package/dist/src/mcp/tools.d.ts.map +1 -1
- package/dist/src/mcp/tools.js +53 -24
- package/dist/src/mcp/tools.js.map +1 -1
- package/dist/src/services/conversation.service.d.ts +38 -0
- package/dist/src/services/conversation.service.d.ts.map +1 -0
- package/dist/src/services/conversation.service.js +252 -0
- package/dist/src/services/conversation.service.js.map +1 -0
- package/dist/src/services/memory.service.d.ts +10 -27
- package/dist/src/services/memory.service.d.ts.map +1 -1
- package/dist/src/services/memory.service.js +94 -94
- package/dist/src/services/memory.service.js.map +1 -1
- package/dist/src/services/parsers/claude-code.parser.d.ts +8 -0
- package/dist/src/services/parsers/claude-code.parser.d.ts.map +1 -0
- package/dist/src/services/parsers/claude-code.parser.js +191 -0
- package/dist/src/services/parsers/claude-code.parser.js.map +1 -0
- package/dist/src/services/parsers/types.d.ts +9 -0
- package/dist/src/services/parsers/types.d.ts.map +1 -0
- package/dist/src/services/parsers/types.js +2 -0
- package/dist/src/services/parsers/types.js.map +1 -0
- package/dist/src/types/conversation.d.ts +99 -0
- package/dist/src/types/conversation.d.ts.map +1 -0
- package/dist/src/types/conversation.js +2 -0
- package/dist/src/types/conversation.js.map +1 -0
- package/package.json +1 -2
- package/src/config/index.ts +39 -21
- package/src/db/conversation.repository.ts +120 -0
- package/src/db/conversation.schema.ts +33 -0
- package/src/db/lancedb-utils.ts +35 -7
- package/src/db/memory.repository.ts +18 -7
- package/src/http/server.ts +43 -25
- package/src/index.ts +10 -11
- package/src/mcp/handlers.ts +144 -151
- package/src/mcp/tools.ts +54 -25
- package/src/services/conversation.service.ts +354 -0
- package/src/services/memory.service.ts +136 -119
- package/src/services/parsers/claude-code.parser.ts +242 -0
- package/src/services/parsers/types.ts +14 -0
- package/src/types/conversation.ts +108 -0
- package/dist/src/db/conversation-history.repository.d.ts +0 -24
- package/dist/src/db/conversation-history.repository.d.ts.map +0 -1
- package/dist/src/db/conversation-history.repository.js +0 -184
- package/dist/src/db/conversation-history.repository.js.map +0 -1
- package/dist/src/db/conversation-history.schema.d.ts +0 -10
- package/dist/src/db/conversation-history.schema.d.ts.map +0 -1
- package/dist/src/db/conversation-history.schema.js +0 -31
- package/dist/src/db/conversation-history.schema.js.map +0 -1
- package/dist/src/services/conversation-history.service.d.ts +0 -64
- package/dist/src/services/conversation-history.service.d.ts.map +0 -1
- package/dist/src/services/conversation-history.service.js +0 -244
- package/dist/src/services/conversation-history.service.js.map +0 -1
- package/dist/src/services/session-parser.d.ts +0 -59
- package/dist/src/services/session-parser.d.ts.map +0 -1
- package/dist/src/services/session-parser.js +0 -147
- package/dist/src/services/session-parser.js.map +0 -1
- package/dist/src/types/conversation-history.d.ts +0 -74
- package/dist/src/types/conversation-history.d.ts.map +0 -1
- package/dist/src/types/conversation-history.js +0 -2
- package/dist/src/types/conversation-history.js.map +0 -1
- package/hooks/session-start.ts +0 -100
- package/src/db/conversation-history.repository.ts +0 -255
- package/src/db/conversation-history.schema.ts +0 -40
- package/src/services/conversation-history.service.ts +0 -320
- package/src/services/session-parser.ts +0 -232
- package/src/types/conversation-history.ts +0 -82
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ A local-first MCP server that provides vector-based memory storage. Uses local e
|
|
|
14
14
|
- **Local & Private** - All embeddings generated locally, data stored in local LanceDB
|
|
15
15
|
- **Semantic Search** - Vector similarity search with configurable scoring
|
|
16
16
|
- **Batch Operations** - Store, update, delete, and retrieve multiple memories at once
|
|
17
|
-
- **Session
|
|
17
|
+
- **Session Waypoints** - Save and restore project context between sessions
|
|
18
18
|
- **MCP Native** - Standard protocol, works with any MCP-compatible client
|
|
19
19
|
|
|
20
20
|
---
|
|
@@ -61,8 +61,12 @@ Restart your MCP client. You now have access to:
|
|
|
61
61
|
| `get_memories` | Retrieve memories by ID (accepts array) |
|
|
62
62
|
| `update_memories` | Update existing memories |
|
|
63
63
|
| `delete_memories` | Remove memories (accepts array) |
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
64
|
+
| `report_memory_usefulness` | Vote on whether a memory was useful |
|
|
65
|
+
| `set_waypoint` | Save session context for later |
|
|
66
|
+
| `get_waypoint` | Restore session context |
|
|
67
|
+
| `index_conversations` | Index Claude Code session logs as searchable history |
|
|
68
|
+
| `list_indexed_sessions` | Browse indexed conversation sessions |
|
|
69
|
+
| `reindex_session` | Force reindex of a specific session |
|
|
66
70
|
|
|
67
71
|
---
|
|
68
72
|
|
|
@@ -80,23 +84,32 @@ You: "What did we decide about the database?"
|
|
|
80
84
|
Assistant: [calls search_memories with relevant query]
|
|
81
85
|
```
|
|
82
86
|
|
|
83
|
-
**Session
|
|
87
|
+
**Session waypoints:**
|
|
84
88
|
```
|
|
85
89
|
You: "Save context for next session"
|
|
86
|
-
Assistant: [calls
|
|
90
|
+
Assistant: [calls set_waypoint with summary, completed items, next steps]
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Conversation history** (requires `--enable-history`):
|
|
94
|
+
```
|
|
95
|
+
You: "What did we discuss about the API design last week?"
|
|
96
|
+
Assistant: [calls search_memories with history_only: true, history_before/after filters]
|
|
87
97
|
```
|
|
88
98
|
|
|
89
99
|
---
|
|
90
100
|
|
|
91
101
|
## Configuration
|
|
92
102
|
|
|
93
|
-
|
|
103
|
+
CLI flags:
|
|
94
104
|
|
|
95
|
-
|
|
|
96
|
-
|
|
97
|
-
| `
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
105
|
+
| Flag | Default | Description |
|
|
106
|
+
|------|---------|-------------|
|
|
107
|
+
| `--db-file`, `-d` | `.vector-memory/memories.db` | Database location |
|
|
108
|
+
| `--port`, `-p` | `3271` | HTTP server port |
|
|
109
|
+
| `--no-http` | *(HTTP enabled)* | Disable HTTP/SSE transport |
|
|
110
|
+
| `--enable-history` | *(disabled)* | Enable conversation history indexing |
|
|
111
|
+
| `--history-path` | *(auto-detect)* | Path to session log directory |
|
|
112
|
+
| `--history-weight` | `0.75` | Weight for history results in unified search |
|
|
100
113
|
|
|
101
114
|
---
|
|
102
115
|
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aeriondyseti/vector-memory-mcp",
|
|
3
|
-
"version": "1.1.0-dev.
|
|
3
|
+
"version": "1.1.0-dev.5",
|
|
4
4
|
"description": "A zero-configuration RAG memory server for MCP clients",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
"dist",
|
|
12
12
|
"src",
|
|
13
13
|
"scripts",
|
|
14
|
-
"hooks",
|
|
15
14
|
"README.md",
|
|
16
15
|
"LICENSE"
|
|
17
16
|
],
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
export declare const VERSION: string;
|
|
2
2
|
export type TransportMode = "stdio" | "http" | "both";
|
|
3
|
+
export interface ConversationHistoryConfig {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
sessionLogPath: string | null;
|
|
6
|
+
historyWeight: number;
|
|
7
|
+
chunkOverlap: number;
|
|
8
|
+
maxChunkMessages: number;
|
|
9
|
+
indexSubagents: boolean;
|
|
10
|
+
}
|
|
3
11
|
export interface Config {
|
|
4
12
|
dbPath: string;
|
|
5
13
|
embeddingModel: string;
|
|
@@ -8,27 +16,26 @@ export interface Config {
|
|
|
8
16
|
httpHost: string;
|
|
9
17
|
enableHttp: boolean;
|
|
10
18
|
transportMode: TransportMode;
|
|
11
|
-
conversationHistory:
|
|
12
|
-
enabled: boolean;
|
|
13
|
-
sessionPath: string | null;
|
|
14
|
-
historyWeight: number;
|
|
15
|
-
};
|
|
19
|
+
conversationHistory: ConversationHistoryConfig;
|
|
16
20
|
}
|
|
17
21
|
export interface ConfigOverrides {
|
|
18
22
|
dbPath?: string;
|
|
19
23
|
httpPort?: number;
|
|
20
24
|
enableHttp?: boolean;
|
|
21
25
|
transportMode?: TransportMode;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
historyWeight?: number;
|
|
26
|
-
};
|
|
26
|
+
enableHistory?: boolean;
|
|
27
|
+
historyPath?: string;
|
|
28
|
+
historyWeight?: number;
|
|
27
29
|
}
|
|
28
30
|
export declare function loadConfig(overrides?: ConfigOverrides): Config;
|
|
29
31
|
/**
|
|
30
32
|
* Parse CLI arguments into config overrides.
|
|
31
33
|
*/
|
|
32
34
|
export declare function parseCliArgs(argv: string[]): ConfigOverrides;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve the session log path for conversation history indexing.
|
|
37
|
+
* Returns the configured path, or auto-detects Claude Code's session directory.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveSessionLogPath(config: ConversationHistoryConfig): string;
|
|
33
40
|
export declare const config: Config;
|
|
34
41
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAAsB,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,yBAAyB,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAgB,UAAU,CAAC,SAAS,GAAE,eAAoB,GAAG,MAAM,CAsBlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAyB5D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAO/E;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
package/dist/src/config/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import arg from "arg";
|
|
2
|
+
import { homedir } from "os";
|
|
2
3
|
import { isAbsolute, join } from "path";
|
|
3
4
|
import packageJson from "../../package.json" with { type: "json" };
|
|
4
5
|
export const VERSION = packageJson.version;
|
|
@@ -24,9 +25,12 @@ export function loadConfig(overrides = {}) {
|
|
|
24
25
|
enableHttp,
|
|
25
26
|
transportMode,
|
|
26
27
|
conversationHistory: {
|
|
27
|
-
enabled: overrides.
|
|
28
|
-
|
|
29
|
-
historyWeight: overrides.
|
|
28
|
+
enabled: overrides.enableHistory ?? false,
|
|
29
|
+
sessionLogPath: overrides.historyPath ?? null,
|
|
30
|
+
historyWeight: overrides.historyWeight ?? 0.75,
|
|
31
|
+
chunkOverlap: 1,
|
|
32
|
+
maxChunkMessages: 10,
|
|
33
|
+
indexSubagents: false,
|
|
30
34
|
},
|
|
31
35
|
};
|
|
32
36
|
}
|
|
@@ -38,8 +42,9 @@ export function parseCliArgs(argv) {
|
|
|
38
42
|
"--db-file": String,
|
|
39
43
|
"--port": Number,
|
|
40
44
|
"--no-http": Boolean,
|
|
41
|
-
"--
|
|
42
|
-
"--
|
|
45
|
+
"--enable-history": Boolean,
|
|
46
|
+
"--history-path": String,
|
|
47
|
+
"--history-weight": Number,
|
|
43
48
|
// Aliases
|
|
44
49
|
"-d": "--db-file",
|
|
45
50
|
"-p": "--port",
|
|
@@ -48,14 +53,23 @@ export function parseCliArgs(argv) {
|
|
|
48
53
|
dbPath: args["--db-file"],
|
|
49
54
|
httpPort: args["--port"],
|
|
50
55
|
enableHttp: args["--no-http"] ? false : undefined,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
sessionPath: args["--session-path"],
|
|
55
|
-
}
|
|
56
|
-
: undefined,
|
|
56
|
+
enableHistory: args["--enable-history"] ?? undefined,
|
|
57
|
+
historyPath: args["--history-path"],
|
|
58
|
+
historyWeight: args["--history-weight"],
|
|
57
59
|
};
|
|
58
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the session log path for conversation history indexing.
|
|
63
|
+
* Returns the configured path, or auto-detects Claude Code's session directory.
|
|
64
|
+
*/
|
|
65
|
+
export function resolveSessionLogPath(config) {
|
|
66
|
+
if (config.sessionLogPath) {
|
|
67
|
+
return resolvePath(config.sessionLogPath);
|
|
68
|
+
}
|
|
69
|
+
// Auto-detect Claude Code session log directory
|
|
70
|
+
const claudeProjectsDir = join(homedir(), ".claude", "projects");
|
|
71
|
+
return claudeProjectsDir;
|
|
72
|
+
}
|
|
59
73
|
// Default config for imports that don't use CLI args
|
|
60
74
|
export const config = loadConfig();
|
|
61
75
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEnE,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as lancedb from "@lancedb/lancedb";
|
|
2
|
+
import type { ConversationHybridRow, HistoryFilters } from "../types/conversation.js";
|
|
3
|
+
export declare class ConversationRepository {
|
|
4
|
+
private db;
|
|
5
|
+
private tablePromise;
|
|
6
|
+
private ensureFtsIndex;
|
|
7
|
+
private getReranker;
|
|
8
|
+
constructor(db: lancedb.Connection);
|
|
9
|
+
private getTable;
|
|
10
|
+
private rowToConversationHybridRow;
|
|
11
|
+
insertBatch(rows: Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
vector: number[];
|
|
14
|
+
content: string;
|
|
15
|
+
metadata: string;
|
|
16
|
+
created_at: number;
|
|
17
|
+
session_id: string;
|
|
18
|
+
role: string;
|
|
19
|
+
message_index_start: number;
|
|
20
|
+
message_index_end: number;
|
|
21
|
+
project: string;
|
|
22
|
+
}>): Promise<void>;
|
|
23
|
+
deleteBySessionId(sessionId: string): Promise<void>;
|
|
24
|
+
findHybrid(embedding: number[], query: string, limit: number, filters?: HistoryFilters): Promise<ConversationHybridRow[]>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=conversation.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.repository.d.ts","sourceRoot":"","sources":["../../../src/db/conversation.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAM5C,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,0BAA0B,CAAC;AASlC,qBAAa,sBAAsB;IASrB,OAAO,CAAC,EAAE;IARtB,OAAO,CAAC,YAAY,CAA+B;IAGnD,OAAO,CAAC,cAAc,CAAyC;IAG/D,OAAO,CAAC,WAAW,CAAyB;gBAExB,EAAE,EAAE,OAAO,CAAC,UAAU;IAE1C,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,0BAA0B;IAa5B,WAAW,CACf,IAAI,EAAE,KAAK,CAAC;QACV,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,GACD,OAAO,CAAC,IAAI,CAAC;IAQV,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,UAAU,CACd,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,qBAAqB,EAAE,CAAC;CA+BpC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { CONVERSATION_TABLE_NAME, conversationSchema, } from "./conversation.schema.js";
|
|
2
|
+
import { getOrCreateTable, createFtsMutex, createRerankerMutex, escapeSql, safeParseJsonObject, } from "./lancedb-utils.js";
|
|
3
|
+
export class ConversationRepository {
|
|
4
|
+
db;
|
|
5
|
+
tablePromise = null;
|
|
6
|
+
// FTS index mutex — recreated after data mutations to force re-check
|
|
7
|
+
ensureFtsIndex = createFtsMutex(() => this.getTable());
|
|
8
|
+
// Cached reranker — k=60 is constant, no need to recreate per search
|
|
9
|
+
getReranker = createRerankerMutex();
|
|
10
|
+
constructor(db) {
|
|
11
|
+
this.db = db;
|
|
12
|
+
}
|
|
13
|
+
getTable() {
|
|
14
|
+
if (!this.tablePromise) {
|
|
15
|
+
this.tablePromise = getOrCreateTable(this.db, CONVERSATION_TABLE_NAME, conversationSchema).catch((err) => {
|
|
16
|
+
this.tablePromise = null;
|
|
17
|
+
throw err;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return this.tablePromise;
|
|
21
|
+
}
|
|
22
|
+
rowToConversationHybridRow(row) {
|
|
23
|
+
const metadata = safeParseJsonObject(row.metadata);
|
|
24
|
+
return {
|
|
25
|
+
id: row.id,
|
|
26
|
+
content: row.content,
|
|
27
|
+
metadata,
|
|
28
|
+
createdAt: new Date(row.created_at),
|
|
29
|
+
rrfScore: row._relevance_score ?? 0,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async insertBatch(rows) {
|
|
33
|
+
if (rows.length === 0)
|
|
34
|
+
return;
|
|
35
|
+
const table = await this.getTable();
|
|
36
|
+
await table.add(rows);
|
|
37
|
+
// Reset FTS mutex so index existence is re-verified after new data
|
|
38
|
+
this.ensureFtsIndex = createFtsMutex(() => this.getTable());
|
|
39
|
+
}
|
|
40
|
+
async deleteBySessionId(sessionId) {
|
|
41
|
+
const table = await this.getTable();
|
|
42
|
+
await table.delete(`session_id = '${escapeSql(sessionId)}'`);
|
|
43
|
+
this.ensureFtsIndex = createFtsMutex(() => this.getTable());
|
|
44
|
+
}
|
|
45
|
+
async findHybrid(embedding, query, limit, filters) {
|
|
46
|
+
await this.ensureFtsIndex();
|
|
47
|
+
const table = await this.getTable();
|
|
48
|
+
const reranker = await this.getReranker();
|
|
49
|
+
let queryBuilder = table
|
|
50
|
+
.query()
|
|
51
|
+
.nearestTo(embedding)
|
|
52
|
+
.fullTextSearch(query)
|
|
53
|
+
.rerank(reranker);
|
|
54
|
+
const conditions = [];
|
|
55
|
+
if (filters?.sessionId)
|
|
56
|
+
conditions.push(`session_id = '${escapeSql(filters.sessionId)}'`);
|
|
57
|
+
if (filters?.role)
|
|
58
|
+
conditions.push(`role = '${escapeSql(filters.role)}'`);
|
|
59
|
+
if (filters?.project)
|
|
60
|
+
conditions.push(`project = '${escapeSql(filters.project)}'`);
|
|
61
|
+
if (filters?.after)
|
|
62
|
+
conditions.push(`created_at > ${filters.after.getTime()}`);
|
|
63
|
+
if (filters?.before)
|
|
64
|
+
conditions.push(`created_at < ${filters.before.getTime()}`);
|
|
65
|
+
if (conditions.length > 0) {
|
|
66
|
+
queryBuilder = queryBuilder.where(conditions.join(" AND "));
|
|
67
|
+
}
|
|
68
|
+
const results = await queryBuilder.limit(limit).toArray();
|
|
69
|
+
return results.map((row) => this.rowToConversationHybridRow(row));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=conversation.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.repository.js","sourceRoot":"","sources":["../../../src/db/conversation.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.schema.d.ts","sourceRoot":"","sources":["../../../src/db/conversation.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAQP,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAE9D,eAAO,MAAM,kBAAkB,aAmB7B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Schema, Field, FixedSizeList, Float32, Utf8, Timestamp, TimeUnit, Int32, } from "apache-arrow";
|
|
2
|
+
export const CONVERSATION_TABLE_NAME = "conversation_history";
|
|
3
|
+
export const conversationSchema = new Schema([
|
|
4
|
+
new Field("id", new Utf8(), false),
|
|
5
|
+
new Field("vector", new FixedSizeList(384, new Field("item", new Float32(), false)), false),
|
|
6
|
+
new Field("content", new Utf8(), false),
|
|
7
|
+
new Field("metadata", new Utf8(), false), // JSON string
|
|
8
|
+
new Field("created_at", new Timestamp(TimeUnit.MILLISECOND), false),
|
|
9
|
+
new Field("session_id", new Utf8(), false),
|
|
10
|
+
new Field("role", new Utf8(), false),
|
|
11
|
+
new Field("message_index_start", new Int32(), false),
|
|
12
|
+
new Field("message_index_end", new Int32(), false),
|
|
13
|
+
new Field("project", new Utf8(), false),
|
|
14
|
+
]);
|
|
15
|
+
//# sourceMappingURL=conversation.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.schema.js","sourceRoot":"","sources":["../../../src/db/conversation.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,EACL,aAAa,EACb,OAAO,EACP,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,GACN,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,uBAAuB,GAAG,sBAAsB,CAAC;AAE9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC;IAC3C,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;IAClC,IAAI,KAAK,CACP,QAAQ,EACR,IAAI,aAAa,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,EAC/D,KAAK,CACN;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;IACvC,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,cAAc;IACxD,IAAI,KAAK,CACP,YAAY,EACZ,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC,KAAK,CACN;IACD,IAAI,KAAK,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;IACpC,IAAI,KAAK,CAAC,qBAAqB,EAAE,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC;IACpD,IAAI,KAAK,CAAC,mBAAmB,EAAE,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC;IAClD,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;CACxC,CAAC,CAAC"}
|
|
@@ -2,15 +2,25 @@ import * as lancedb from "@lancedb/lancedb";
|
|
|
2
2
|
import { rerankers, type Table } from "@lancedb/lancedb";
|
|
3
3
|
import type { Schema } from "apache-arrow";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Escape a string value for safe interpolation into LanceDB/DataFusion SQL WHERE clauses.
|
|
6
|
+
*
|
|
7
|
+
* DataFusion uses ANSI SQL string literal rules:
|
|
8
|
+
* - String literals are delimited by single quotes
|
|
9
|
+
* - Single quotes within strings are escaped by doubling: ' -> ''
|
|
10
|
+
* - Backslashes are NOT escape characters (treated literally)
|
|
7
11
|
*/
|
|
8
|
-
export declare function
|
|
12
|
+
export declare function escapeSql(value: string): string;
|
|
13
|
+
/** Default k parameter for Reciprocal Rank Fusion reranking. */
|
|
14
|
+
export declare const RRF_K = 60;
|
|
9
15
|
/**
|
|
10
16
|
* Converts LanceDB's Arrow Vector type to a plain number[].
|
|
11
17
|
* LanceDB returns an Arrow Vector object which is iterable but not an array.
|
|
12
18
|
*/
|
|
13
19
|
export declare function arrowVectorToArray(value: unknown): number[];
|
|
20
|
+
/**
|
|
21
|
+
* Safely parse a JSON string into an object, returning an empty object on failure.
|
|
22
|
+
*/
|
|
23
|
+
export declare function safeParseJsonObject(raw: string): Record<string, unknown>;
|
|
14
24
|
/**
|
|
15
25
|
* Opens an existing table or creates it with the given schema.
|
|
16
26
|
* Does NOT cache — callers should cache the returned Table if desired.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lancedb-utils.d.ts","sourceRoot":"","sources":["../../../src/db/lancedb-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAS,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"lancedb-utils.d.ts","sourceRoot":"","sources":["../../../src/db/lancedb-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAS,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,gEAAgE;AAChE,eAAO,MAAM,KAAK,KAAK,CAAC;AAExB;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAI3D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMxE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,OAAO,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC,CAgBhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAC7B,MAAM,OAAO,CAAC,IAAI,CAAC,CA0BrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,GAAE,MAAc,GAChB,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAYtC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { Index, rerankers } from "@lancedb/lancedb";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Escape a string value for safe interpolation into LanceDB/DataFusion SQL WHERE clauses.
|
|
4
|
+
*
|
|
5
|
+
* DataFusion uses ANSI SQL string literal rules:
|
|
6
|
+
* - String literals are delimited by single quotes
|
|
7
|
+
* - Single quotes within strings are escaped by doubling: ' -> ''
|
|
8
|
+
* - Backslashes are NOT escape characters (treated literally)
|
|
5
9
|
*/
|
|
6
|
-
export function
|
|
10
|
+
export function escapeSql(value) {
|
|
7
11
|
return value.replace(/'/g, "''");
|
|
8
12
|
}
|
|
13
|
+
/** Default k parameter for Reciprocal Rank Fusion reranking. */
|
|
14
|
+
export const RRF_K = 60;
|
|
9
15
|
/**
|
|
10
16
|
* Converts LanceDB's Arrow Vector type to a plain number[].
|
|
11
17
|
* LanceDB returns an Arrow Vector object which is iterable but not an array.
|
|
@@ -15,16 +21,39 @@ export function arrowVectorToArray(value) {
|
|
|
15
21
|
? value
|
|
16
22
|
: Array.from(value);
|
|
17
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Safely parse a JSON string into an object, returning an empty object on failure.
|
|
26
|
+
*/
|
|
27
|
+
export function safeParseJsonObject(raw) {
|
|
28
|
+
try {
|
|
29
|
+
return JSON.parse(raw);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
18
35
|
/**
|
|
19
36
|
* Opens an existing table or creates it with the given schema.
|
|
20
37
|
* Does NOT cache — callers should cache the returned Table if desired.
|
|
21
38
|
*/
|
|
22
39
|
export async function getOrCreateTable(db, name, schema) {
|
|
23
|
-
|
|
24
|
-
|
|
40
|
+
try {
|
|
41
|
+
return await db.openTable(name);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// Only proceed to create if the table was not found
|
|
45
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
46
|
+
if (!message.includes("was not found") && !message.includes("does not exist")) {
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
return await db.createTable(name, [], { schema });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Another caller may have created it concurrently
|
|
25
55
|
return await db.openTable(name);
|
|
26
56
|
}
|
|
27
|
-
return await db.createTable(name, [], { schema });
|
|
28
57
|
}
|
|
29
58
|
/**
|
|
30
59
|
* Creates a mutex-guarded function that ensures an FTS index exists on a table's content column.
|
|
@@ -62,7 +91,7 @@ export function createFtsMutex(getTable) {
|
|
|
62
91
|
* Creates a promise-mutex for RRFReranker instantiation.
|
|
63
92
|
* Same pattern as createFtsMutex: create once, cache forever, reset on error.
|
|
64
93
|
*/
|
|
65
|
-
export function createRerankerMutex(k =
|
|
94
|
+
export function createRerankerMutex(k = RRF_K) {
|
|
66
95
|
let promise = null;
|
|
67
96
|
return () => {
|
|
68
97
|
if (!promise) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lancedb-utils.js","sourceRoot":"","sources":["../../../src/db/lancedb-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAc,MAAM,kBAAkB,CAAC;AAGhE
|
|
1
|
+
{"version":3,"file":"lancedb-utils.js","sourceRoot":"","sources":["../../../src/db/lancedb-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ export declare class MemoryRepository {
|
|
|
24
24
|
insert(memory: Memory): Promise<void>;
|
|
25
25
|
upsert(memory: Memory): Promise<void>;
|
|
26
26
|
findById(id: string): Promise<Memory | null>;
|
|
27
|
+
findByIds(ids: string[]): Promise<Memory[]>;
|
|
27
28
|
markDeleted(id: string): Promise<boolean>;
|
|
28
29
|
/**
|
|
29
30
|
* Performs hybrid search combining vector similarity and full-text search.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.repository.d.ts","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAI5C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IAUf,OAAO,CAAC,EAAE;IARtB,OAAO,CAAC,gBAAgB,CAA8B;IAGtD,OAAO,CAAC,cAAc,CAAsB;IAG5C,OAAO,CAAC,WAAW,CAAyB;gBAExB,EAAE,EAAE,OAAO,CAAC,UAAU;YAI5B,QAAQ;IAWtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAavB;;;OAGG;YACW,qBAAqB;IAqBnC;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBb,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBrC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAW5C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB/C;;;;;;;;OAQG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAsB1F"}
|
|
1
|
+
{"version":3,"file":"memory.repository.d.ts","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAI5C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IAUf,OAAO,CAAC,EAAE;IARtB,OAAO,CAAC,gBAAgB,CAA8B;IAGtD,OAAO,CAAC,cAAc,CAAsB;IAG5C,OAAO,CAAC,WAAW,CAAyB;gBAExB,EAAE,EAAE,OAAO,CAAC,UAAU;YAI5B,QAAQ;IAWtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAavB;;;OAGG;YACW,qBAAqB;IAqBnC;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBb,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBrC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAW5C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW3C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB/C;;;;;;;;OAQG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAsB1F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TABLE_NAME, memorySchema } from "./schema.js";
|
|
2
|
-
import { arrowVectorToArray, createFtsMutex, createRerankerMutex,
|
|
2
|
+
import { arrowVectorToArray, createFtsMutex, createRerankerMutex, escapeSql, safeParseJsonObject } from "./lancedb-utils.js";
|
|
3
3
|
import { DELETED_TOMBSTONE, } from "../types/memory.js";
|
|
4
4
|
export class MemoryRepository {
|
|
5
5
|
db;
|
|
@@ -66,7 +66,7 @@ export class MemoryRepository {
|
|
|
66
66
|
id: row.id,
|
|
67
67
|
content: row.content,
|
|
68
68
|
embedding: arrowVectorToArray(row.vector),
|
|
69
|
-
metadata:
|
|
69
|
+
metadata: safeParseJsonObject(row.metadata),
|
|
70
70
|
createdAt: new Date(row.created_at),
|
|
71
71
|
updatedAt: new Date(row.updated_at),
|
|
72
72
|
supersededBy: row.superseded_by,
|
|
@@ -96,12 +96,12 @@ export class MemoryRepository {
|
|
|
96
96
|
}
|
|
97
97
|
async upsert(memory) {
|
|
98
98
|
const table = await this.getTable();
|
|
99
|
-
const existing = await table.query().where(`id = '${
|
|
99
|
+
const existing = await table.query().where(`id = '${escapeSql(memory.id)}'`).limit(1).toArray();
|
|
100
100
|
if (existing.length === 0) {
|
|
101
101
|
return await this.insert(memory);
|
|
102
102
|
}
|
|
103
103
|
await table.update({
|
|
104
|
-
where: `id = '${
|
|
104
|
+
where: `id = '${escapeSql(memory.id)}'`,
|
|
105
105
|
values: {
|
|
106
106
|
vector: memory.embedding,
|
|
107
107
|
content: memory.content,
|
|
@@ -117,22 +117,33 @@ export class MemoryRepository {
|
|
|
117
117
|
}
|
|
118
118
|
async findById(id) {
|
|
119
119
|
const table = await this.getTable();
|
|
120
|
-
const results = await table.query().where(`id = '${
|
|
120
|
+
const results = await table.query().where(`id = '${escapeSql(id)}'`).limit(1).toArray();
|
|
121
121
|
if (results.length === 0) {
|
|
122
122
|
return null;
|
|
123
123
|
}
|
|
124
124
|
return this.rowToMemory(results[0]);
|
|
125
125
|
}
|
|
126
|
+
async findByIds(ids) {
|
|
127
|
+
if (ids.length === 0)
|
|
128
|
+
return [];
|
|
129
|
+
const table = await this.getTable();
|
|
130
|
+
const inList = ids.map((id) => `'${escapeSql(id)}'`).join(", ");
|
|
131
|
+
const results = await table
|
|
132
|
+
.query()
|
|
133
|
+
.where(`id IN (${inList})`)
|
|
134
|
+
.toArray();
|
|
135
|
+
return results.map((row) => this.rowToMemory(row));
|
|
136
|
+
}
|
|
126
137
|
async markDeleted(id) {
|
|
127
138
|
const table = await this.getTable();
|
|
128
139
|
// Verify existence first to match previous behavior (return false if not found)
|
|
129
|
-
const existing = await table.query().where(`id = '${
|
|
140
|
+
const existing = await table.query().where(`id = '${escapeSql(id)}'`).limit(1).toArray();
|
|
130
141
|
if (existing.length === 0) {
|
|
131
142
|
return false;
|
|
132
143
|
}
|
|
133
144
|
const now = Date.now();
|
|
134
145
|
await table.update({
|
|
135
|
-
where: `id = '${
|
|
146
|
+
where: `id = '${escapeSql(id)}'`,
|
|
136
147
|
values: {
|
|
137
148
|
superseded_by: DELETED_TOMBSTONE,
|
|
138
149
|
updated_at: now,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.repository.js","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.repository.js","sourceRoot":"","sources":["../../../src/db/memory.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC7H,OAAO,EAGL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,gBAAgB;IAUP;IATpB,6EAA6E;IACrE,gBAAgB,GAAyB,IAAI,CAAC;IAEtD,2FAA2F;IACnF,cAAc,CAAsB;IAE5C,qEAAqE;IAC7D,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAE5C,YAAoB,EAAsB;QAAtB,OAAE,GAAF,EAAE,CAAoB;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,8CAA8C;QAC9C,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,KAAY;QAClC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACxE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,qBAAqB,CAAC,KAAY;QAC9C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAyC,EAAE,CAAC;QAE5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAA4B;QAC9C,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,OAAO,EAAE,GAAG,CAAC,OAAiB;YAC9B,SAAS,EAAE,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;YACzC,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,QAAkB,CAAC;YACrD,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAoB,CAAC;YAC7C,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAoB,CAAC;YAC7C,YAAY,EAAE,GAAG,CAAC,aAA8B;YAChD,UAAU,EAAG,GAAG,CAAC,UAAqB,IAAI,CAAC;YAC3C,WAAW,EAAG,GAAG,CAAC,YAAuB,IAAI,CAAC;YAC9C,YAAY,EAAE,GAAG,CAAC,aAAa;gBAC7B,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAuB,CAAC;gBACvC,CAAC,CAAC,IAAI;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,CAAC,GAAG,CAAC;YACd;gBACE,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,MAAM,EAAE,MAAM,CAAC,SAAS;gBACxB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACzC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtC,aAAa,EAAE,MAAM,CAAC,YAAY;gBAClC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,IAAI;aACtD;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAEhG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,KAAK,EAAE,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;YACvC,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM,CAAC,SAAS;gBACxB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACzC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtC,aAAa,EAAE,MAAM,CAAC,YAAY;gBAClC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,IAAI;aACtD;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAExF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAA4B,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAa;QAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,KAAK;aACxB,KAAK,EAAE;aACP,KAAK,CAAC,UAAU,MAAM,GAAG,CAAC;aAC1B,OAAO,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAA8B,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,gFAAgF;QAChF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACzF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,KAAK,EAAE,SAAS,SAAS,CAAC,EAAE,CAAC,GAAG;YAChC,MAAM,EAAE;gBACN,aAAa,EAAE,iBAAiB;gBAChC,UAAU,EAAE,GAAG;aAChB;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CAAC,SAAmB,EAAE,KAAa,EAAE,KAAa;QAChE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAE1C,MAAM,OAAO,GAAG,MAAM,KAAK;aACxB,KAAK,EAAE;aACP,SAAS,CAAC,SAAS,CAAC;aACpB,cAAc,CAAC,KAAK,CAAC;aACrB,MAAM,CAAC,QAAQ,CAAC;aAChB,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,EAAE,CAAC;QAEb,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAA8B,CAAC,CAAC;YAChE,OAAO;gBACL,GAAG,MAAM;gBACT,QAAQ,EAAG,GAAG,CAAC,gBAA2B,IAAI,CAAC;aAChD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAqDjD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAqDjD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA2KhF;AAED,wBAAsB,eAAe,CACnC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC7C"}
|