first commit

This commit is contained in:
2026-08-14 23:41:57 +08:00
commit 086803a8dd
471 changed files with 91938 additions and 0 deletions
+66
View File
@@ -0,0 +1,66 @@
package memory
// Scope identifies the memory dimension a file belongs to.
type Scope string
// Recognized scopes.
const (
ScopeGlobal Scope = "global"
ScopeProjects Scope = "projects"
ScopeSessions Scope = "sessions"
ScopeCC Scope = "cc"
)
// Type identifies the semantic kind of a memory file.
type Type string
// Recognized types.
const (
TypeUser Type = "user"
TypeFeedback Type = "feedback"
TypeProject Type = "project"
TypeReference Type = "reference"
TypeCheckpoint Type = "checkpoint"
TypeProgress Type = "progress"
TypeNotes Type = "notes"
TypeFree Type = "free"
)
// schemaDDL is the idempotent set of DDL statements that create the memory
// storage schema: the content table, its secondary indexes, the FTS5 virtual
// table (external-content mode), and the three sync triggers that keep the FTS
// index consistent with the content table. All statements use IF NOT EXISTS so
// running the migration repeatedly is safe.
const schemaDDL = `
CREATE TABLE IF NOT EXISTS memory_index (
id INTEGER PRIMARY KEY,
path TEXT NOT NULL UNIQUE,
scope TEXT NOT NULL,
scope_id TEXT NOT NULL DEFAULT '',
type TEXT NOT NULL,
body TEXT NOT NULL,
fingerprint TEXT NOT NULL,
last_indexed_at INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS memory_index_scope_idx ON memory_index (scope, scope_id);
CREATE INDEX IF NOT EXISTS memory_index_type_idx ON memory_index (type);
CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
body, content='memory_index', content_rowid='id',
tokenize='unicode61 remove_diacritics 1'
);
CREATE TRIGGER IF NOT EXISTS memory_ai AFTER INSERT ON memory_index BEGIN
INSERT INTO memory_fts(rowid, body) VALUES (new.id, new.body);
END;
CREATE TRIGGER IF NOT EXISTS memory_ad AFTER DELETE ON memory_index BEGIN
INSERT INTO memory_fts(memory_fts, rowid, body) VALUES('delete', old.id, old.body);
END;
CREATE TRIGGER IF NOT EXISTS memory_au AFTER UPDATE ON memory_index BEGIN
INSERT INTO memory_fts(memory_fts, rowid, body) VALUES('delete', old.id, old.body);
INSERT INTO memory_fts(rowid, body) VALUES (new.id, new.body);
END;
`