mem-os-python 1.6.27__py3-none-any.whl
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.
- mem_os_python-1.6.27.dist-info/METADATA +1032 -0
- mem_os_python-1.6.27.dist-info/RECORD +253 -0
- mem_os_python-1.6.27.dist-info/WHEEL +4 -0
- mem_os_python-1.6.27.dist-info/entry_points.txt +2 -0
- mem_os_python-1.6.27.dist-info/licenses/LICENSE +21 -0
- memos/__init__.py +16 -0
- memos/_js/adapters/anthropic.d.ts +279 -0
- memos/_js/adapters/anthropic.d.ts.map +1 -0
- memos/_js/adapters/anthropic.js +348 -0
- memos/_js/adapters/anthropic.js.map +1 -0
- memos/_js/adapters/base.d.ts +10 -0
- memos/_js/adapters/base.d.ts.map +1 -0
- memos/_js/adapters/base.js +2 -0
- memos/_js/adapters/base.js.map +1 -0
- memos/_js/adapters/openai.d.ts +264 -0
- memos/_js/adapters/openai.d.ts.map +1 -0
- memos/_js/adapters/openai.js +342 -0
- memos/_js/adapters/openai.js.map +1 -0
- memos/_js/apps/explorer.d.ts +244 -0
- memos/_js/apps/explorer.d.ts.map +1 -0
- memos/_js/apps/explorer.js +738 -0
- memos/_js/apps/explorer.js.map +1 -0
- memos/_js/citations.d.ts +65 -0
- memos/_js/citations.d.ts.map +1 -0
- memos/_js/citations.js +143 -0
- memos/_js/citations.js.map +1 -0
- memos/_js/cli-browse.d.ts +3 -0
- memos/_js/cli-browse.d.ts.map +1 -0
- memos/_js/cli-browse.js +129 -0
- memos/_js/cli-browse.js.map +1 -0
- memos/_js/cli-completion.d.ts +31 -0
- memos/_js/cli-completion.d.ts.map +1 -0
- memos/_js/cli-completion.js +340 -0
- memos/_js/cli-completion.js.map +1 -0
- memos/_js/cli-help.d.ts +18 -0
- memos/_js/cli-help.d.ts.map +1 -0
- memos/_js/cli-help.js +357 -0
- memos/_js/cli-help.js.map +1 -0
- memos/_js/cli.d.ts +28 -0
- memos/_js/cli.d.ts.map +1 -0
- memos/_js/cli.js +2880 -0
- memos/_js/cli.js.map +1 -0
- memos/_js/compression.d.ts +25 -0
- memos/_js/compression.d.ts.map +1 -0
- memos/_js/compression.js +319 -0
- memos/_js/compression.js.map +1 -0
- memos/_js/confidence-machine.d.ts +99 -0
- memos/_js/confidence-machine.d.ts.map +1 -0
- memos/_js/confidence-machine.js +222 -0
- memos/_js/confidence-machine.js.map +1 -0
- memos/_js/context-pack.d.ts +506 -0
- memos/_js/context-pack.d.ts.map +1 -0
- memos/_js/context-pack.js +1435 -0
- memos/_js/context-pack.js.map +1 -0
- memos/_js/contradictions.d.ts +160 -0
- memos/_js/contradictions.d.ts.map +1 -0
- memos/_js/contradictions.js +255 -0
- memos/_js/contradictions.js.map +1 -0
- memos/_js/dashboard.d.ts +30 -0
- memos/_js/dashboard.d.ts.map +1 -0
- memos/_js/dashboard.js +302 -0
- memos/_js/dashboard.js.map +1 -0
- memos/_js/ebbinghaus.d.ts +29 -0
- memos/_js/ebbinghaus.d.ts.map +1 -0
- memos/_js/ebbinghaus.js +32 -0
- memos/_js/ebbinghaus.js.map +1 -0
- memos/_js/embedding-queue.d.ts +190 -0
- memos/_js/embedding-queue.d.ts.map +1 -0
- memos/_js/embedding-queue.js +316 -0
- memos/_js/embedding-queue.js.map +1 -0
- memos/_js/embeddings.d.ts +187 -0
- memos/_js/embeddings.d.ts.map +1 -0
- memos/_js/embeddings.js +633 -0
- memos/_js/embeddings.js.map +1 -0
- memos/_js/entity-extraction.d.ts +54 -0
- memos/_js/entity-extraction.d.ts.map +1 -0
- memos/_js/entity-extraction.js +325 -0
- memos/_js/entity-extraction.js.map +1 -0
- memos/_js/entity-index.d.ts +93 -0
- memos/_js/entity-index.d.ts.map +1 -0
- memos/_js/entity-index.js +165 -0
- memos/_js/entity-index.js.map +1 -0
- memos/_js/event-memory.d.ts +147 -0
- memos/_js/event-memory.d.ts.map +1 -0
- memos/_js/event-memory.js +290 -0
- memos/_js/event-memory.js.map +1 -0
- memos/_js/external-import.d.ts +98 -0
- memos/_js/external-import.d.ts.map +1 -0
- memos/_js/external-import.js +669 -0
- memos/_js/external-import.js.map +1 -0
- memos/_js/fidelity.d.ts +367 -0
- memos/_js/fidelity.d.ts.map +1 -0
- memos/_js/fidelity.js +911 -0
- memos/_js/fidelity.js.map +1 -0
- memos/_js/graph-expansion.d.ts +119 -0
- memos/_js/graph-expansion.d.ts.map +1 -0
- memos/_js/graph-expansion.js +213 -0
- memos/_js/graph-expansion.js.map +1 -0
- memos/_js/graph-mermaid.d.ts +13 -0
- memos/_js/graph-mermaid.d.ts.map +1 -0
- memos/_js/graph-mermaid.js +32 -0
- memos/_js/graph-mermaid.js.map +1 -0
- memos/_js/graph.d.ts +170 -0
- memos/_js/graph.d.ts.map +1 -0
- memos/_js/graph.js +482 -0
- memos/_js/graph.js.map +1 -0
- memos/_js/harness.d.ts +63 -0
- memos/_js/harness.d.ts.map +1 -0
- memos/_js/harness.js +93 -0
- memos/_js/harness.js.map +1 -0
- memos/_js/importance.d.ts +118 -0
- memos/_js/importance.d.ts.map +1 -0
- memos/_js/importance.js +144 -0
- memos/_js/importance.js.map +1 -0
- memos/_js/index.d.ts +51 -0
- memos/_js/index.d.ts.map +1 -0
- memos/_js/index.js +53 -0
- memos/_js/index.js.map +1 -0
- memos/_js/mcp.d.ts +58 -0
- memos/_js/mcp.d.ts.map +1 -0
- memos/_js/mcp.js +1853 -0
- memos/_js/mcp.js.map +1 -0
- memos/_js/memory.d.ts +1762 -0
- memos/_js/memory.d.ts.map +1 -0
- memos/_js/memory.js +6283 -0
- memos/_js/memory.js.map +1 -0
- memos/_js/procedural.d.ts +74 -0
- memos/_js/procedural.d.ts.map +1 -0
- memos/_js/procedural.js +125 -0
- memos/_js/procedural.js.map +1 -0
- memos/_js/project-config.d.ts +68 -0
- memos/_js/project-config.d.ts.map +1 -0
- memos/_js/project-config.js +59 -0
- memos/_js/project-config.js.map +1 -0
- memos/_js/proof-of-forgetting.d.ts +57 -0
- memos/_js/proof-of-forgetting.d.ts.map +1 -0
- memos/_js/proof-of-forgetting.js +80 -0
- memos/_js/proof-of-forgetting.js.map +1 -0
- memos/_js/provenance.d.ts +122 -0
- memos/_js/provenance.d.ts.map +1 -0
- memos/_js/provenance.js +182 -0
- memos/_js/provenance.js.map +1 -0
- memos/_js/quarantine-commands.d.ts +23 -0
- memos/_js/quarantine-commands.d.ts.map +1 -0
- memos/_js/quarantine-commands.js +42 -0
- memos/_js/quarantine-commands.js.map +1 -0
- memos/_js/quarantine.d.ts +120 -0
- memos/_js/quarantine.d.ts.map +1 -0
- memos/_js/quarantine.js +873 -0
- memos/_js/quarantine.js.map +1 -0
- memos/_js/redact.d.ts +12 -0
- memos/_js/redact.d.ts.map +1 -0
- memos/_js/redact.js +26 -0
- memos/_js/redact.js.map +1 -0
- memos/_js/repl.d.ts +57 -0
- memos/_js/repl.d.ts.map +1 -0
- memos/_js/repl.js +295 -0
- memos/_js/repl.js.map +1 -0
- memos/_js/rerank-local.d.ts +61 -0
- memos/_js/rerank-local.d.ts.map +1 -0
- memos/_js/rerank-local.js +210 -0
- memos/_js/rerank-local.js.map +1 -0
- memos/_js/retain-filter.d.ts +98 -0
- memos/_js/retain-filter.d.ts.map +1 -0
- memos/_js/retain-filter.js +232 -0
- memos/_js/retain-filter.js.map +1 -0
- memos/_js/retrieval.d.ts +265 -0
- memos/_js/retrieval.d.ts.map +1 -0
- memos/_js/retrieval.js +1018 -0
- memos/_js/retrieval.js.map +1 -0
- memos/_js/revert.d.ts +77 -0
- memos/_js/revert.d.ts.map +1 -0
- memos/_js/revert.js +252 -0
- memos/_js/revert.js.map +1 -0
- memos/_js/scope.d.ts +30 -0
- memos/_js/scope.d.ts.map +1 -0
- memos/_js/scope.js +71 -0
- memos/_js/scope.js.map +1 -0
- memos/_js/semantic-screen.d.ts +152 -0
- memos/_js/semantic-screen.d.ts.map +1 -0
- memos/_js/semantic-screen.js +290 -0
- memos/_js/semantic-screen.js.map +1 -0
- memos/_js/session-hooks.d.ts +127 -0
- memos/_js/session-hooks.d.ts.map +1 -0
- memos/_js/session-hooks.js +482 -0
- memos/_js/session-hooks.js.map +1 -0
- memos/_js/storage/sqlite.d.ts +427 -0
- memos/_js/storage/sqlite.d.ts.map +1 -0
- memos/_js/storage/sqlite.js +2428 -0
- memos/_js/storage/sqlite.js.map +1 -0
- memos/_js/sync.d.ts +213 -0
- memos/_js/sync.d.ts.map +1 -0
- memos/_js/sync.js +389 -0
- memos/_js/sync.js.map +1 -0
- memos/_js/tamper-log.d.ts +98 -0
- memos/_js/tamper-log.d.ts.map +1 -0
- memos/_js/tamper-log.js +327 -0
- memos/_js/tamper-log.js.map +1 -0
- memos/_js/temporal.d.ts +92 -0
- memos/_js/temporal.d.ts.map +1 -0
- memos/_js/temporal.js +536 -0
- memos/_js/temporal.js.map +1 -0
- memos/_js/time-travel.d.ts +38 -0
- memos/_js/time-travel.d.ts.map +1 -0
- memos/_js/time-travel.js +46 -0
- memos/_js/time-travel.js.map +1 -0
- memos/_js/timestamp-format.d.ts +18 -0
- memos/_js/timestamp-format.d.ts.map +1 -0
- memos/_js/timestamp-format.js +52 -0
- memos/_js/timestamp-format.js.map +1 -0
- memos/_js/triple-extraction.d.ts +31 -0
- memos/_js/triple-extraction.d.ts.map +1 -0
- memos/_js/triple-extraction.js +116 -0
- memos/_js/triple-extraction.js.map +1 -0
- memos/_js/types.d.ts +2474 -0
- memos/_js/types.d.ts.map +1 -0
- memos/_js/types.js +20 -0
- memos/_js/types.js.map +1 -0
- memos/_js/updater.d.ts +95 -0
- memos/_js/updater.d.ts.map +1 -0
- memos/_js/updater.js +268 -0
- memos/_js/updater.js.map +1 -0
- memos/_js/version.d.ts +17 -0
- memos/_js/version.d.ts.map +1 -0
- memos/_js/version.js +34 -0
- memos/_js/version.js.map +1 -0
- memos/_js/vision/clip-query-cache.d.ts +58 -0
- memos/_js/vision/clip-query-cache.d.ts.map +1 -0
- memos/_js/vision/clip-query-cache.js +79 -0
- memos/_js/vision/clip-query-cache.js.map +1 -0
- memos/_js/vision/clip.d.ts +113 -0
- memos/_js/vision/clip.d.ts.map +1 -0
- memos/_js/vision/clip.js +224 -0
- memos/_js/vision/clip.js.map +1 -0
- memos/_js/vision/fake-clip.d.ts +55 -0
- memos/_js/vision/fake-clip.d.ts.map +1 -0
- memos/_js/vision/fake-clip.js +122 -0
- memos/_js/vision/fake-clip.js.map +1 -0
- memos/_js/vision/index.d.ts +15 -0
- memos/_js/vision/index.d.ts.map +1 -0
- memos/_js/vision/index.js +13 -0
- memos/_js/vision/index.js.map +1 -0
- memos/_js/vision/store.d.ts +137 -0
- memos/_js/vision/store.d.ts.map +1 -0
- memos/_js/vision/store.js +383 -0
- memos/_js/vision/store.js.map +1 -0
- memos/adapters/__init__.py +0 -0
- memos/adapters/crewai.py +385 -0
- memos/adapters/langchain.py +301 -0
- memos/adapters/ollama.py +396 -0
- memos/server/__init__.py +0 -0
- memos/server/main.py +547 -0
- memos/server/routes.py +360 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite-backed storage adapter for MemOS.
|
|
3
|
+
*
|
|
4
|
+
* Uses `better-sqlite3` for synchronous, high-performance local persistence.
|
|
5
|
+
* Full-text search is powered by SQLite FTS5.
|
|
6
|
+
*
|
|
7
|
+
* @module @memos/storage/sqlite
|
|
8
|
+
*/
|
|
9
|
+
import Database from "better-sqlite3";
|
|
10
|
+
import type { StorageAdapter, ContradictionRecord, ContradictionStatus, NewProceduralLesson, ProceduralLesson, MemoryNode, NewTamperLogEntry, TamperLogEntry, MemoryEdge, SearchFilter, ScoredMemory, GraphSnapshot, UpdateMemoryInput, EdgeRelation, EmbeddingVector, EmbeddingRecordInfo } from "../types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Default database path: `~/.memos/memos.db`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function defaultDbPath(): string;
|
|
15
|
+
/** How the semantic leg chooses which stored vectors to score. */
|
|
16
|
+
export type SemanticScanMode = "exact" | "prefilter";
|
|
17
|
+
/**
|
|
18
|
+
* Telemetry for the most recent `querySimilarEmbeddings` call. Lets
|
|
19
|
+
* callers (and tests) see which parts of the scan actually ran without
|
|
20
|
+
* depending on wall-clock timings, which are useless in CI.
|
|
21
|
+
*/
|
|
22
|
+
export interface SemanticScanStats {
|
|
23
|
+
/** Candidate ids selected by SQL for the scan. */
|
|
24
|
+
candidates: number;
|
|
25
|
+
/** Candidates served straight from the in-memory vector cache. */
|
|
26
|
+
cacheHits: number;
|
|
27
|
+
/**
|
|
28
|
+
* Squared norms computed during the scan — one per vector hydrated
|
|
29
|
+
* from SQLite. `0` means every norm was already cached, which is the
|
|
30
|
+
* steady state for a warm store.
|
|
31
|
+
*/
|
|
32
|
+
normComputations: number;
|
|
33
|
+
/**
|
|
34
|
+
* Candidates that fell back to the legacy JSON-stored-vector path:
|
|
35
|
+
* never cached, so their vector AND norm are re-parsed on every query.
|
|
36
|
+
* Non-zero only for databases written before the float32 BLOB format.
|
|
37
|
+
*/
|
|
38
|
+
legacyRows: number;
|
|
39
|
+
/** Candidates dropped by the coarse prefilter (0 in `"exact"` mode). */
|
|
40
|
+
prefilterSkipped: number;
|
|
41
|
+
/** Candidates exactly rescored after the prefilter. */
|
|
42
|
+
rescored: number;
|
|
43
|
+
/** True when the scan stopped early because a perfect match was found. */
|
|
44
|
+
earlyExit: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Tokenize a natural-language query into individually quoted FTS5
|
|
48
|
+
* terms.
|
|
49
|
+
*
|
|
50
|
+
* The query is split on non-alphanumeric boundaries, lowercased, and
|
|
51
|
+
* function words are dropped. Each surviving term is double-quoted
|
|
52
|
+
* (escaping any embedded quote) so FTS5 special characters cannot
|
|
53
|
+
* inject syntax.
|
|
54
|
+
*
|
|
55
|
+
* If stopword removal empties the query (e.g. "what is it"), the raw
|
|
56
|
+
* tokens are used instead so the search never degrades to a
|
|
57
|
+
* match-everything no-op.
|
|
58
|
+
*
|
|
59
|
+
* @param query — Raw user query text.
|
|
60
|
+
* @returns Quoted FTS5 terms, e.g. `['"dark"', '"mode"']`.
|
|
61
|
+
*/
|
|
62
|
+
export declare function buildFtsTerms(query: string): string[];
|
|
63
|
+
/**
|
|
64
|
+
* Build an FTS5 MATCH expression from a natural-language query.
|
|
65
|
+
*
|
|
66
|
+
* Terms are joined with `operator` — `" AND "` for precision (every
|
|
67
|
+
* term must appear) or `" OR "` for recall (any term may appear).
|
|
68
|
+
*
|
|
69
|
+
* @param query — Raw user query text.
|
|
70
|
+
* @param operator — Join operator between terms. Default `" AND "`.
|
|
71
|
+
* @returns An FTS5 MATCH expression, e.g. `"dark" AND "mode"`.
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildFtsQuery(query: string, operator?: " AND " | " OR "): string;
|
|
74
|
+
/**
|
|
75
|
+
* SQLite storage implementation.
|
|
76
|
+
*/
|
|
77
|
+
export declare class SQLiteStorage implements StorageAdapter {
|
|
78
|
+
private db;
|
|
79
|
+
private cipherKey;
|
|
80
|
+
private readonly path;
|
|
81
|
+
private readonly wal;
|
|
82
|
+
/**
|
|
83
|
+
* Per-id access count delta buffer. Batched into a single UPDATE per
|
|
84
|
+
* id on a 500 ms debounce. Removes the read-modify-write write that
|
|
85
|
+
* was previously amplified to a `SET access_count = access_count + 1`
|
|
86
|
+
* on every `getNode` call. See {@link flushAccessCounts}.
|
|
87
|
+
*/
|
|
88
|
+
private readonly accessBuffer;
|
|
89
|
+
private accessFlushTimer;
|
|
90
|
+
private accessFlushIntervalMs;
|
|
91
|
+
/**
|
|
92
|
+
* Create a new SQLiteStorage instance.
|
|
93
|
+
*
|
|
94
|
+
* @param path — Filesystem path to the `.db` file.
|
|
95
|
+
* @param wal — Enable WAL journal mode (recommended).
|
|
96
|
+
*/
|
|
97
|
+
constructor(path: string, wal?: boolean, options?: {
|
|
98
|
+
vectorCacheEntries?: number;
|
|
99
|
+
cipherKey?: string;
|
|
100
|
+
/**
|
|
101
|
+
* How `querySimilarEmbeddings` picks which stored vectors to score.
|
|
102
|
+
* `"exact"` (default) scores every candidate. `"prefilter"` ranks
|
|
103
|
+
* candidates with a coarse prefix projection first and exactly
|
|
104
|
+
* rescodes only the top-N — bounded work at large corpus sizes, * APPROXIMATE (a true neighbour ranked below the cutoff can be
|
|
105
|
+
* missed). Set via `MemOSConfig.storageOptions.semanticScan`.
|
|
106
|
+
*/
|
|
107
|
+
semanticScan?: SemanticScanMode;
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Open the database file, switching to the cipher-capable driver and
|
|
111
|
+
* applying `PRAGMA key` when encryption is configured. The key MUST be
|
|
112
|
+
* set before any other statement on an encrypted database.
|
|
113
|
+
*/
|
|
114
|
+
private openDatabase;
|
|
115
|
+
/**
|
|
116
|
+
* Open the database and create tables / indices if they do not exist.
|
|
117
|
+
*/
|
|
118
|
+
init(): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* One-time backfill: for every node, read the JSON `tags` column and
|
|
121
|
+
* ensure each tag exists in `node_tags`. Idempotent thanks to
|
|
122
|
+
* `INSERT OR IGNORE`. Runs inside a single transaction so a 100k-node
|
|
123
|
+
* database finishes in well under a second on a warm cache.
|
|
124
|
+
*/
|
|
125
|
+
private migrateBackfillNodeTags;
|
|
126
|
+
/**
|
|
127
|
+
* One-time backfill of the `entity_index` inverted table for pre-existing
|
|
128
|
+
* rows (databases created before the table existed). Idempotent — nodes
|
|
129
|
+
* already present in the index are skipped. Delegates to
|
|
130
|
+
* `src/entity-index.ts`, which prefers each row's stored
|
|
131
|
+
* `metadata.entities` (canonicalized with the deployment's aliases at
|
|
132
|
+
* write time) and falls back to extracting from content.
|
|
133
|
+
*/
|
|
134
|
+
private migrateBackfillEntityIndex;
|
|
135
|
+
/**
|
|
136
|
+
* Replace the `node_tags` rows for a single node. Used after
|
|
137
|
+
* `saveNode` / `updateNode` to keep the join table in lockstep with
|
|
138
|
+
* the JSON column.
|
|
139
|
+
*
|
|
140
|
+
* Runs inside the caller's transaction (saveNode/updateNode wrap their
|
|
141
|
+
* write + this call in one `db.transaction`) and reuses cached prepared
|
|
142
|
+
* statements — previously each call paid two uncached `db.prepare()`
|
|
143
|
+
* parses plus its own transaction commit.
|
|
144
|
+
*/
|
|
145
|
+
private writeNodeTags;
|
|
146
|
+
/**
|
|
147
|
+
* ── item2: entity leg ── mirror a node's entities into the
|
|
148
|
+
* `entity_index` inverted table, keeping it in lockstep with the node
|
|
149
|
+
* row (the entity analogue of `writeNodeTags`). Runs inside the
|
|
150
|
+
* caller's transaction (`saveNode` / `updateNode`).
|
|
151
|
+
*
|
|
152
|
+
* Prefers the write-time canonicalized `metadata.entities` — `MemOS.store`
|
|
153
|
+
* canonicalizes with the deployment's `entityAliases`, so reusing it
|
|
154
|
+
* keeps the index consistent with query-time canonicalization. Falls
|
|
155
|
+
* back to extracting from content (built-in aliases) for rows written
|
|
156
|
+
* straight through storage.
|
|
157
|
+
*/
|
|
158
|
+
private writeNodeEntities;
|
|
159
|
+
/**
|
|
160
|
+
* Migration-safe column addition. Checks if column exists before ALTER TABLE.
|
|
161
|
+
* SQLite does not support ALTER TABLE IF NOT EXISTS, so we check pragmatically.
|
|
162
|
+
*/
|
|
163
|
+
private migrateAddColumn;
|
|
164
|
+
saveNode(node: MemoryNode): Promise<MemoryNode>;
|
|
165
|
+
getNode(id: string): Promise<MemoryNode | null>;
|
|
166
|
+
/**
|
|
167
|
+
* Record a read access. Routes through the same debounced
|
|
168
|
+
* `accessBuffer` as `getNode`, so a search that touches the top N
|
|
169
|
+
* results costs one coalesced UPDATE per id instead of a
|
|
170
|
+
* read-modify-write per hit — and, critically, does NOT stamp
|
|
171
|
+
* `updated_at`.
|
|
172
|
+
*/
|
|
173
|
+
recordAccess(id: string): void;
|
|
174
|
+
private bufferAccess;
|
|
175
|
+
private scheduleAccessFlush;
|
|
176
|
+
/** Drain the buffered access counters to SQLite. */
|
|
177
|
+
flushAccessCounts(): void;
|
|
178
|
+
peekNode(id: string): Promise<MemoryNode | null>;
|
|
179
|
+
evictLeastImportant(): Promise<string | null>;
|
|
180
|
+
updateNode(id: string, input: UpdateMemoryInput): Promise<MemoryNode | null>;
|
|
181
|
+
deleteNode(id: string): Promise<boolean>;
|
|
182
|
+
appendTamperEntry(entry: NewTamperLogEntry): Promise<TamperLogEntry>;
|
|
183
|
+
readTamperLog(): Promise<TamperLogEntry[]>;
|
|
184
|
+
saveEdge(edge: MemoryEdge): Promise<MemoryEdge>;
|
|
185
|
+
/**
|
|
186
|
+
* Batch-insert multiple edges in a single transaction.
|
|
187
|
+
* Uses a cached prepared statement — ~10x faster than calling
|
|
188
|
+
* saveEdge() in a loop for 10+ edges.
|
|
189
|
+
*/
|
|
190
|
+
saveEdgesBatch(edges: MemoryEdge[]): Promise<MemoryEdge[]>;
|
|
191
|
+
/**
|
|
192
|
+
* Prepared statement cache. better-sqlite3 caches at the C++ level,
|
|
193
|
+
* but the JS Statement wrapper is still recreated on each prepare()
|
|
194
|
+
* call. Caching the JS object avoids that overhead on hot paths.
|
|
195
|
+
*/
|
|
196
|
+
private readonly stmtCache;
|
|
197
|
+
private getPreparedStatement;
|
|
198
|
+
getEdge(id: string): Promise<MemoryEdge | null>;
|
|
199
|
+
deleteEdge(id: string): Promise<boolean>;
|
|
200
|
+
/**
|
|
201
|
+
* Close (invalidate) the currently-valid edges incident to a node by
|
|
202
|
+
* stamping `valid_to`. Rows are updated, never deleted — as-of reads at
|
|
203
|
+
* earlier timestamps still return them. Returns the number of edges closed.
|
|
204
|
+
*/
|
|
205
|
+
closeEdgesForNode(nodeId: string, validTo: number): Promise<number>;
|
|
206
|
+
queryNodes(filter?: SearchFilter): Promise<ScoredMemory[]>;
|
|
207
|
+
saveEmbedding(nodeId: string, vector: EmbeddingVector, model: string): Promise<void>;
|
|
208
|
+
getEmbeddingInfo(nodeId: string): Promise<EmbeddingRecordInfo | null>;
|
|
209
|
+
/**
|
|
210
|
+
* Bulk-fetch stored embedding vectors for the given node ids —
|
|
211
|
+
* the write-time contradiction scan's bounded neighbor lookup.
|
|
212
|
+
* Cache hits are zero-cost; misses are fetched in chunks of 500
|
|
213
|
+
* (SQLite bound-parameter limits). Returns only ids with a stored
|
|
214
|
+
* vector.
|
|
215
|
+
*/
|
|
216
|
+
getEmbeddingVectors(nodeIds: string[]): Promise<Map<string, EmbeddingVector>>;
|
|
217
|
+
/**
|
|
218
|
+
* Record a contradiction pair. Node ids are canonicalized (sorted)
|
|
219
|
+
* so the UNIQUE(node_a, node_b) constraint dedups reversed pairs;
|
|
220
|
+
* INSERT OR IGNORE makes repeat detection idempotent.
|
|
221
|
+
*/
|
|
222
|
+
addContradiction(nodeA: string, nodeB: string, status?: ContradictionStatus): Promise<ContradictionRecord>;
|
|
223
|
+
/**
|
|
224
|
+
* Bounded read-time lookup: recorded contradiction pairs where
|
|
225
|
+
* node_a OR node_b is in `nodeIds`. Empty input returns [] without
|
|
226
|
+
* touching the database.
|
|
227
|
+
*/
|
|
228
|
+
getContradictionPairsFor(nodeIds: string[]): Promise<ContradictionRecord[]>;
|
|
229
|
+
updateContradictionStatus(id: string, status: ContradictionStatus): Promise<void>;
|
|
230
|
+
private rowToContradiction;
|
|
231
|
+
saveProceduralLesson(input: NewProceduralLesson): Promise<ProceduralLesson>;
|
|
232
|
+
getProceduralLesson(id: string): Promise<ProceduralLesson | null>;
|
|
233
|
+
updateProceduralLesson(id: string, patch: Partial<ProceduralLesson>): Promise<ProceduralLesson | null>;
|
|
234
|
+
listProceduralLessons(namespace?: string): Promise<ProceduralLesson[]>;
|
|
235
|
+
private rowToProceduralLesson;
|
|
236
|
+
/**
|
|
237
|
+
* Bounded id-prefix lookup backing citation resolution. Dashes in
|
|
238
|
+
* stored ids are ignored so `[mem:a3f9]` matches `a3f9c2e1-…`.
|
|
239
|
+
*/
|
|
240
|
+
findNodesByIdPrefix(prefix: string): Promise<MemoryNode[]>;
|
|
241
|
+
getAllEmbeddingInfos(): Promise<Array<{
|
|
242
|
+
nodeId: string;
|
|
243
|
+
} & EmbeddingRecordInfo>>;
|
|
244
|
+
getAllEmbeddings(): Promise<Array<{
|
|
245
|
+
nodeId: string;
|
|
246
|
+
vector: EmbeddingVector;
|
|
247
|
+
model: string;
|
|
248
|
+
}>>;
|
|
249
|
+
setNodeNamespace(id: string, namespace: string): Promise<void>;
|
|
250
|
+
querySimilarEmbeddings(vector: EmbeddingVector, filter: SearchFilter | undefined, limit: number, threshold?: number, model?: string): Promise<ScoredMemory[]>;
|
|
251
|
+
/**
|
|
252
|
+
* Query image memories by CLIP vector similarity.
|
|
253
|
+
*
|
|
254
|
+
* Identical scoring to `querySimilarEmbeddings` — the scan loop is
|
|
255
|
+
* table-agnostic — but runs against `image_embeddings` and filters on
|
|
256
|
+
* model + dimensions, so a text-space vector can never be scored
|
|
257
|
+
* against a CLIP query (or vice versa).
|
|
258
|
+
*
|
|
259
|
+
* The hook for image→image search is already here: pass an
|
|
260
|
+
* *image-encoded* query and the same call returns the nearest
|
|
261
|
+
* neighbouring images ("more like this screenshot").
|
|
262
|
+
*/
|
|
263
|
+
querySimilarImages(vector: EmbeddingVector, filter: SearchFilter | undefined, limit: number, threshold?: number, model?: string): Promise<ScoredMemory[]>;
|
|
264
|
+
/**
|
|
265
|
+
* The shared semantic scan. `space` selects the vector table
|
|
266
|
+
* (`embeddings` vs `image_embeddings`) AND the vectorCache namespace,
|
|
267
|
+
* so the two spaces can never cross even when one nodeId carries both.
|
|
268
|
+
*/
|
|
269
|
+
private scanSimilar;
|
|
270
|
+
/**
|
|
271
|
+
* Rank candidate ids by cosine against a strided prefix projection of
|
|
272
|
+
* each stored vector (opt-in prefilter path). The projection is built
|
|
273
|
+
* once per stored row and cached with it, so repeat queries pay only
|
|
274
|
+
* the `dims / PREFILTER_STRIDE` dot product per candidate.
|
|
275
|
+
*
|
|
276
|
+
* Approximate by design: it orders candidates, it does not certify
|
|
277
|
+
* them. Callers must rescore the survivors exactly.
|
|
278
|
+
*/
|
|
279
|
+
private rankByProjection;
|
|
280
|
+
/**
|
|
281
|
+
* Strided prefix projection used by the prefilter. Built lazily on the
|
|
282
|
+
* first prefilter query so the exact path never pays for it.
|
|
283
|
+
*/
|
|
284
|
+
private project;
|
|
285
|
+
getEmbeddingModelCounts(): Promise<Array<{
|
|
286
|
+
model: string;
|
|
287
|
+
count: number;
|
|
288
|
+
}>>;
|
|
289
|
+
deleteEmbeddingsByModel(model: string): Promise<number>;
|
|
290
|
+
saveImageEmbedding(nodeId: string, vector: EmbeddingVector, model: string): Promise<void>;
|
|
291
|
+
getImageEmbeddingInfo(nodeId: string): Promise<EmbeddingRecordInfo | null>;
|
|
292
|
+
getAllImageEmbeddings(): Promise<Array<{
|
|
293
|
+
nodeId: string;
|
|
294
|
+
vector: EmbeddingVector;
|
|
295
|
+
model: string;
|
|
296
|
+
}>>;
|
|
297
|
+
getImageEmbeddingModelCounts(): Promise<Array<{
|
|
298
|
+
model: string;
|
|
299
|
+
count: number;
|
|
300
|
+
}>>;
|
|
301
|
+
deleteImageEmbedding(nodeId: string): Promise<boolean>;
|
|
302
|
+
deleteImageEmbeddingsByModel(model: string): Promise<number>;
|
|
303
|
+
queryEdges(filter?: {
|
|
304
|
+
sourceId?: string;
|
|
305
|
+
targetId?: string;
|
|
306
|
+
relation?: EdgeRelation;
|
|
307
|
+
validAt?: number;
|
|
308
|
+
}): Promise<MemoryEdge[]>;
|
|
309
|
+
getGraph(): Promise<GraphSnapshot>;
|
|
310
|
+
/**
|
|
311
|
+
* Bitemporal as-of graph read: nodes and edges whose validity interval
|
|
312
|
+
* covers `atTime` (unix ms). Predicates mirror the existing as-of read
|
|
313
|
+
* paths exactly — nodes use `valid_to >= ?` (see the `validAt` search
|
|
314
|
+
* filter), edges use strict `valid_to > ?` (see `queryEdges`).
|
|
315
|
+
*/
|
|
316
|
+
getGraphAtTime(atTime: number): Promise<GraphSnapshot>;
|
|
317
|
+
setTTL(id: string, seconds: number): Promise<void>;
|
|
318
|
+
clearTTL(id: string): Promise<void>;
|
|
319
|
+
sweepExpired(): Promise<number>;
|
|
320
|
+
queryNodesByTag(tag: string): Promise<MemoryNode[]>;
|
|
321
|
+
/**
|
|
322
|
+
* ── item2: entity leg ── candidate generation for hybrid search: node
|
|
323
|
+
* ids whose indexed entities intersect `entities`, ranked by number of
|
|
324
|
+
* matched entities (desc), node id tiebreak. Backed by the
|
|
325
|
+
* `entity_index` inverted table — O(indexed entities), no content scan.
|
|
326
|
+
*/
|
|
327
|
+
searchByEntities(entities: string[], limit: number): Promise<Array<{
|
|
328
|
+
nodeId: string;
|
|
329
|
+
matches: number;
|
|
330
|
+
}>>;
|
|
331
|
+
/**
|
|
332
|
+
* Per-harness memory counts for `memos harness list`. Legacy and
|
|
333
|
+
* unattributed rows read as `"unknown"` via the column default.
|
|
334
|
+
*/
|
|
335
|
+
getHarnessCounts(): Promise<Array<{
|
|
336
|
+
harness: string;
|
|
337
|
+
count: number;
|
|
338
|
+
}>>;
|
|
339
|
+
/**
|
|
340
|
+
* Full node snapshot for harness merges (`memos harness merge
|
|
341
|
+
* --from`). Returns EVERYTHING — including historical (superseded)
|
|
342
|
+
* and quarantined rows — so the merge preserves the bitemporal
|
|
343
|
+
* version ledger verbatim. Read-only; the merge writes through the
|
|
344
|
+
* target storage's normal save path.
|
|
345
|
+
*/
|
|
346
|
+
listAllNodes(): Promise<MemoryNode[]>;
|
|
347
|
+
/**
|
|
348
|
+
* Full edge snapshot for harness merges. Endpoints are remapped by
|
|
349
|
+
* the merge when node ids collide in the target.
|
|
350
|
+
*/
|
|
351
|
+
listAllEdges(): Promise<MemoryEdge[]>;
|
|
352
|
+
deleteAllNodes(): Promise<void>;
|
|
353
|
+
close(): Promise<void>;
|
|
354
|
+
private rowToNode;
|
|
355
|
+
private rowToEdge;
|
|
356
|
+
/**
|
|
357
|
+
* In-process parsed-vector cache (nodeId -> vector + derived norms).
|
|
358
|
+
* The semantic leg otherwise re-fetches EVERY stored vector BLOB from
|
|
359
|
+
* SQLite on every query (tens of MB of memcpy per query on large
|
|
360
|
+
* stores). Writes go through this class, so invalidation is exact;
|
|
361
|
+
* external writers are not tracked (single-process deployments are the
|
|
362
|
+
* supported shape — the Python bridge runs one Node process).
|
|
363
|
+
*
|
|
364
|
+
* The entry bundles the squared L2 norm with the vector: it is
|
|
365
|
+
* computed once per stored row instead of once per query, and it is
|
|
366
|
+
* invalidated by the same `set`/eviction/clear that invalidates the
|
|
367
|
+
* vector itself, so it can never disagree with the stored row.
|
|
368
|
+
*/
|
|
369
|
+
private vectorCache;
|
|
370
|
+
private vectorCacheMaxEntries;
|
|
371
|
+
private semanticScanMode;
|
|
372
|
+
private vectorCacheGet;
|
|
373
|
+
private vectorCacheSet;
|
|
374
|
+
/**
|
|
375
|
+
* Telemetry for the last `querySimilarEmbeddings` call. Read-only: the
|
|
376
|
+
* scan fills it in, nothing else mutates it.
|
|
377
|
+
*/
|
|
378
|
+
private semanticScanTelemetry;
|
|
379
|
+
/** Scan telemetry for the most recent semantic query. */
|
|
380
|
+
get semanticScanStats(): SemanticScanStats;
|
|
381
|
+
private lookupStoredVector;
|
|
382
|
+
/**
|
|
383
|
+
* Zero-copy Float32Array view over a float32 BLOB. Byte-order and values
|
|
384
|
+
* are identical to `parseEmbedding`'s BLOB branch; alignment is guarded
|
|
385
|
+
* (Node Buffers are 8-byte aligned from the pool, but a sliced view may
|
|
386
|
+
* not be 4-byte aligned — those fall back to `parseEmbedding`).
|
|
387
|
+
*/
|
|
388
|
+
private parseEmbeddingF32;
|
|
389
|
+
private parseEmbedding;
|
|
390
|
+
private serializeEmbedding;
|
|
391
|
+
private mapSortField;
|
|
392
|
+
private buildTagFilter;
|
|
393
|
+
private buildMetadataFilter;
|
|
394
|
+
/**
|
|
395
|
+
* Namespace/scope predicate shared by the FTS and structured query
|
|
396
|
+
* paths. Covers exact (`namespace`), multi (`namespaces`), and
|
|
397
|
+
* hierarchical (`namespacePrefix`) constraints. When
|
|
398
|
+
* `includeSharedScope` is set, the shared `default` namespace is OR'd
|
|
399
|
+
* in — a scoped read always sees shared memories (company-brain
|
|
400
|
+
* container semantics). Returns null when no namespace constraint is
|
|
401
|
+
* present (unscoped searches are untouched).
|
|
402
|
+
*/
|
|
403
|
+
private buildNamespaceCondition;
|
|
404
|
+
/**
|
|
405
|
+
* Scoped-space inventory: every namespace with its live memory count.
|
|
406
|
+
* Powers `memos scope list`.
|
|
407
|
+
*/
|
|
408
|
+
listNamespaces(): Promise<Array<{
|
|
409
|
+
namespace: string;
|
|
410
|
+
count: number;
|
|
411
|
+
}>>;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Load the cipher-capable driver (an API-compatible better-sqlite3 fork
|
|
415
|
+
* with multiple-cipher support). Kept optional: installs without it keep
|
|
416
|
+
* the default plaintext driver and never load this module. Exported for
|
|
417
|
+
* the `memos encrypt` / `memos decrypt` CLI commands.
|
|
418
|
+
*/
|
|
419
|
+
export declare function loadCipherDriver(): typeof Database;
|
|
420
|
+
/**
|
|
421
|
+
* Encrypt a plaintext database in place. The original file is preserved
|
|
422
|
+
* as `<path>.plaintext.bak`. Uses the standard sqlcipher_export recipe.
|
|
423
|
+
* Returns the backup path.
|
|
424
|
+
*/
|
|
425
|
+
export declare function encryptDatabase(dbPath: string, key: string): Promise<string>;
|
|
426
|
+
export declare function decryptDatabase(dbPath: string, key: string): Promise<string>;
|
|
427
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
|