squish-memory 0.9.3 → 1.0.1
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/.env.mcp.example +14 -11
- package/CHANGELOG.md +68 -0
- package/README.md +82 -9
- package/bin/squish-add.mjs +32 -0
- package/bin/squish-rm.mjs +21 -0
- package/config/plugin-manifest.json +152 -0
- package/config/plugin-manifest.schema.json +244 -0
- package/config/settings.json +51 -0
- package/dist/algorithms/{merge/analytics → analytics}/token-estimator.d.ts +1 -1
- package/dist/algorithms/analytics/token-estimator.d.ts.map +1 -0
- package/dist/algorithms/{merge/analytics → analytics}/token-estimator.js +3 -3
- package/dist/algorithms/analytics/token-estimator.js.map +1 -0
- package/dist/algorithms/detection/hash-filters.d.ts.map +1 -0
- package/dist/algorithms/detection/hash-filters.js.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/semantic-ranker.d.ts +1 -1
- package/dist/algorithms/detection/semantic-ranker.d.ts.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/semantic-ranker.js +1 -1
- package/dist/algorithms/detection/semantic-ranker.js.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/two-stage-detector.d.ts +1 -1
- package/dist/algorithms/detection/two-stage-detector.d.ts.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/two-stage-detector.js +4 -4
- package/dist/algorithms/detection/two-stage-detector.js.map +1 -0
- package/dist/algorithms/handlers/approve-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/approve-merge.js +4 -4
- package/dist/algorithms/handlers/approve-merge.js.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.d.ts +1 -1
- package/dist/algorithms/handlers/detect-duplicates.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.js +55 -75
- package/dist/algorithms/handlers/detect-duplicates.js.map +1 -0
- package/dist/algorithms/handlers/get-stats.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/get-stats.js +3 -3
- package/dist/algorithms/handlers/get-stats.js.map +1 -0
- package/dist/algorithms/handlers/list-proposals.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/list-proposals.js +3 -3
- package/dist/algorithms/handlers/list-proposals.js.map +1 -0
- package/dist/algorithms/handlers/preview-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/preview-merge.js +3 -3
- package/dist/algorithms/handlers/preview-merge.js.map +1 -0
- package/dist/algorithms/handlers/reject-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/reject-merge.js +3 -3
- package/dist/algorithms/handlers/reject-merge.js.map +1 -0
- package/dist/algorithms/handlers/reverse-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.js +3 -3
- package/dist/algorithms/handlers/reverse-merge.js.map +1 -0
- package/dist/algorithms/{merge/safety → safety}/safety-checks.d.ts +1 -1
- package/dist/algorithms/safety/safety-checks.d.ts.map +1 -0
- package/dist/algorithms/safety/safety-checks.js +179 -0
- package/dist/algorithms/safety/safety-checks.js.map +1 -0
- package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.d.ts +1 -1
- package/dist/algorithms/strategies/merge-strategies.d.ts.map +1 -0
- package/dist/algorithms/strategies/merge-strategies.js.map +1 -0
- package/dist/algorithms/utils/response-builder.d.ts +28 -0
- package/dist/algorithms/utils/response-builder.d.ts.map +1 -0
- package/dist/algorithms/utils/response-builder.js +37 -0
- package/dist/algorithms/utils/response-builder.js.map +1 -0
- package/dist/api/web/web.d.ts.map +1 -1
- package/dist/api/web/web.js +452 -472
- package/dist/api/web/web.js.map +1 -1
- package/dist/commands/mcp-server.js +7 -3
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/config.d.ts +10 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +102 -55
- package/dist/config.js.map +1 -1
- package/dist/core/associations.js +2 -2
- package/dist/core/associations.js.map +1 -1
- package/dist/core/embeddings.d.ts +1 -1
- package/dist/core/embeddings.d.ts.map +1 -1
- package/dist/core/embeddings.js +10 -67
- package/dist/core/embeddings.js.map +1 -1
- package/dist/core/layers/generator.d.ts +25 -0
- package/dist/core/layers/generator.d.ts.map +1 -0
- package/dist/core/layers/generator.js +76 -0
- package/dist/core/layers/generator.js.map +1 -0
- package/dist/core/local-embeddings.d.ts +3 -11
- package/dist/core/local-embeddings.d.ts.map +1 -1
- package/dist/core/local-embeddings.js +2 -76
- package/dist/core/local-embeddings.js.map +1 -1
- package/dist/core/mcp/tools.d.ts.map +1 -1
- package/dist/core/mcp/tools.js +71 -0
- package/dist/core/mcp/tools.js.map +1 -1
- package/dist/core/memory/context-collector.d.ts.map +1 -1
- package/dist/core/memory/context-collector.js +3 -2
- package/dist/core/memory/context-collector.js.map +1 -1
- package/dist/core/memory/feedback-tracker.d.ts.map +1 -1
- package/dist/core/memory/feedback-tracker.js +10 -6
- package/dist/core/memory/feedback-tracker.js.map +1 -1
- package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/core/memory/hybrid-retrieval.js +49 -1
- package/dist/core/memory/hybrid-retrieval.js.map +1 -1
- package/dist/core/memory/hybrid-search.d.ts.map +1 -1
- package/dist/core/memory/hybrid-search.js +32 -39
- package/dist/core/memory/hybrid-search.js.map +1 -1
- package/dist/core/memory/memories.d.ts.map +1 -1
- package/dist/core/memory/memories.js +1 -7
- package/dist/core/memory/memories.js.map +1 -1
- package/dist/core/memory/progressive-disclosure.d.ts.map +1 -1
- package/dist/core/memory/progressive-disclosure.js.map +1 -1
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/stats.js +5 -5
- package/dist/core/namespaces/index.d.ts +71 -0
- package/dist/core/namespaces/index.d.ts.map +1 -0
- package/dist/core/namespaces/index.js +305 -0
- package/dist/core/namespaces/index.js.map +1 -0
- package/dist/core/namespaces/uri-parser.d.ts +31 -0
- package/dist/core/namespaces/uri-parser.d.ts.map +1 -0
- package/dist/core/namespaces/uri-parser.js +74 -0
- package/dist/core/namespaces/uri-parser.js.map +1 -0
- package/dist/core/observations.d.ts.map +1 -1
- package/dist/core/observations.js +3 -12
- package/dist/core/observations.js.map +1 -1
- package/dist/core/projects.d.ts.map +1 -1
- package/dist/core/projects.js +0 -12
- package/dist/core/projects.js.map +1 -1
- package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -1
- package/dist/core/scheduler/cron-scheduler.js +26 -7
- package/dist/core/scheduler/cron-scheduler.js.map +1 -1
- package/dist/core/scheduler/job-runner.js +8 -5
- package/dist/core/scheduler/job-runner.js.map +1 -1
- package/dist/core/search/conversations.js +33 -33
- package/dist/core/session-hooks/self-iteration-job.d.ts +20 -0
- package/dist/core/session-hooks/self-iteration-job.d.ts.map +1 -0
- package/dist/core/session-hooks/self-iteration-job.js +282 -0
- package/dist/core/session-hooks/self-iteration-job.js.map +1 -0
- package/dist/core/session-hooks/session-hooks.d.ts +18 -0
- package/dist/core/session-hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/session-hooks/session-hooks.js +58 -0
- package/dist/core/session-hooks/session-hooks.js.map +1 -0
- package/dist/core/tracing/collector.d.ts +111 -0
- package/dist/core/tracing/collector.d.ts.map +1 -0
- package/dist/core/tracing/collector.js +350 -0
- package/dist/core/tracing/collector.js.map +1 -0
- package/dist/core/tracing/visualizer.d.ts +32 -0
- package/dist/core/tracing/visualizer.d.ts.map +1 -0
- package/dist/core/tracing/visualizer.js +165 -0
- package/dist/core/tracing/visualizer.js.map +1 -0
- package/dist/db/adapter.d.ts +6 -1
- package/dist/db/adapter.d.ts.map +1 -1
- package/dist/db/adapter.js +54 -126
- package/dist/db/adapter.js.map +1 -1
- package/dist/db/bootstrap.js +477 -477
- package/dist/db/index.d.ts +5 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/drizzle/schema-sqlite.d.ts +384 -0
- package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
- package/dist/drizzle/schema-sqlite.js +65 -0
- package/dist/drizzle/schema-sqlite.js.map +1 -1
- package/dist/drizzle/schema.d.ts +368 -0
- package/dist/drizzle/schema.d.ts.map +1 -1
- package/dist/drizzle/schema.js +63 -0
- package/dist/drizzle/schema.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +101 -62
- package/dist/index.js.map +1 -1
- package/generated/mcp/manifest.json +23 -0
- package/generated/mcp/mcp-servers.json +25 -0
- package/generated/mcp/mcporter.json +34 -0
- package/generated/mcp/openclaw-memory-qmd.json +17 -0
- package/generated/mcp/runtime.json +12 -0
- package/package.json +70 -28
- package/packages/plugin-claude-code/README.md +73 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +35 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +1 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +191 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +1 -0
- package/packages/plugin-claude-code/package.json +31 -0
- package/packages/plugin-openclaw/README.md +70 -0
- package/packages/plugin-openclaw/dist/index.d.ts +49 -0
- package/packages/plugin-openclaw/dist/index.d.ts.map +1 -0
- package/packages/plugin-openclaw/dist/index.js +262 -0
- package/packages/plugin-openclaw/dist/index.js.map +1 -0
- package/packages/plugin-openclaw/openclaw.plugin.json +94 -0
- package/packages/plugin-openclaw/package.json +31 -0
- package/packages/plugin-opencode/install.mjs +217 -0
- package/packages/plugin-opencode/package.json +21 -0
- package/scripts/dependency-manager.mjs +217 -0
- package/scripts/detect-clients.mjs +78 -0
- package/scripts/install-interactive.mjs +674 -0
- package/scripts/install-plugin.mjs +415 -0
- package/scripts/test-interactive.mjs +131 -0
- package/commands/managed-sync.ts +0 -69
- package/commands/mcp-server.ts +0 -519
- package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +0 -1
- package/dist/algorithms/merge/analytics/token-estimator.js.map +0 -1
- package/dist/algorithms/merge/detection/hash-filters.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/hash-filters.js.map +0 -1
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/semantic-ranker.js.map +0 -1
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/two-stage-detector.js.map +0 -1
- package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/approve-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/detect-duplicates.js.map +0 -1
- package/dist/algorithms/merge/handlers/get-stats.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/get-stats.js.map +0 -1
- package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/list-proposals.js.map +0 -1
- package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/preview-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/reject-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/reverse-merge.js.map +0 -1
- package/dist/algorithms/merge/safety/safety-checks.d.ts.map +0 -1
- package/dist/algorithms/merge/safety/safety-checks.js +0 -215
- package/dist/algorithms/merge/safety/safety-checks.js.map +0 -1
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +0 -1
- package/dist/algorithms/merge/strategies/merge-strategies.js.map +0 -1
- package/dist/core/embeddings/qmd-provider.d.ts +0 -65
- package/dist/core/embeddings/qmd-provider.d.ts.map +0 -1
- package/dist/core/embeddings/qmd-provider.js +0 -133
- package/dist/core/embeddings/qmd-provider.js.map +0 -1
- package/scripts/init-dirs.ts +0 -15
- /package/dist/algorithms/{merge/detection → detection}/hash-filters.d.ts +0 -0
- /package/dist/algorithms/{merge/detection → detection}/hash-filters.js +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/approve-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/get-stats.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/list-proposals.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/preview-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/reject-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.js +0 -0
package/dist/db/bootstrap.js
CHANGED
|
@@ -6,531 +6,531 @@ import { getDataDir } from '../config.js';
|
|
|
6
6
|
* SQLite uses INTEGER 0/1 for boolean values (no native boolean type)
|
|
7
7
|
* PostgreSQL uses native BOOLEAN type
|
|
8
8
|
*/
|
|
9
|
-
const sqliteSchemaSql = `
|
|
10
|
-
PRAGMA foreign_keys = ON;
|
|
11
|
-
|
|
12
|
-
CREATE TABLE IF NOT EXISTS users (
|
|
13
|
-
id TEXT PRIMARY KEY,
|
|
14
|
-
external_id TEXT UNIQUE,
|
|
15
|
-
name TEXT,
|
|
16
|
-
email TEXT,
|
|
17
|
-
preferences TEXT,
|
|
18
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
19
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
CREATE TABLE IF NOT EXISTS projects (
|
|
23
|
-
id TEXT PRIMARY KEY,
|
|
24
|
-
name TEXT NOT NULL,
|
|
25
|
-
path TEXT NOT NULL,
|
|
26
|
-
description TEXT,
|
|
27
|
-
metadata TEXT,
|
|
28
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
29
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);
|
|
33
|
-
|
|
34
|
-
CREATE TABLE IF NOT EXISTS memories (
|
|
35
|
-
id TEXT PRIMARY KEY,
|
|
36
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
37
|
-
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
38
|
-
type TEXT NOT NULL,
|
|
39
|
-
content TEXT NOT NULL,
|
|
40
|
-
summary TEXT,
|
|
41
|
-
embedding_json TEXT,
|
|
42
|
-
embedding BLOB,
|
|
43
|
-
source TEXT,
|
|
44
|
-
confidence INTEGER DEFAULT 100,
|
|
45
|
-
tags TEXT,
|
|
46
|
-
metadata TEXT,
|
|
47
|
-
is_private INTEGER DEFAULT 0,
|
|
48
|
-
has_secrets INTEGER DEFAULT 0,
|
|
49
|
-
relevance_score INTEGER DEFAULT 50,
|
|
50
|
-
is_active INTEGER DEFAULT 1,
|
|
51
|
-
expires_at INTEGER,
|
|
52
|
-
access_count INTEGER DEFAULT 0,
|
|
53
|
-
last_accessed_at INTEGER,
|
|
54
|
-
is_merged INTEGER DEFAULT 0,
|
|
55
|
-
merged_into_id TEXT,
|
|
56
|
-
merged_at INTEGER,
|
|
57
|
-
is_canonical INTEGER DEFAULT 0,
|
|
58
|
-
merge_source_ids TEXT,
|
|
59
|
-
is_mergeable INTEGER DEFAULT 1,
|
|
60
|
-
merge_version INTEGER DEFAULT 1,
|
|
61
|
-
importance_score INTEGER DEFAULT 50,
|
|
62
|
-
importance_decay_rate INTEGER DEFAULT 30,
|
|
63
|
-
last_importance_recalc INTEGER,
|
|
64
|
-
consolidated_into TEXT,
|
|
65
|
-
consolidated_at INTEGER,
|
|
66
|
-
is_consolidated INTEGER DEFAULT 0,
|
|
67
|
-
sector TEXT DEFAULT 'episodic',
|
|
68
|
-
tier TEXT DEFAULT 'hot',
|
|
69
|
-
context_status TEXT DEFAULT 'out-of-context',
|
|
70
|
-
decay_rate INTEGER DEFAULT 30,
|
|
71
|
-
coactivation_score INTEGER DEFAULT 0,
|
|
72
|
-
last_decay_at INTEGER DEFAULT (strftime('%s','now')),
|
|
73
|
-
agent_id TEXT,
|
|
74
|
-
agent_role TEXT,
|
|
75
|
-
visibility_scope TEXT DEFAULT 'private',
|
|
76
|
-
is_protected INTEGER DEFAULT 0,
|
|
77
|
-
is_pinned INTEGER DEFAULT 0,
|
|
78
|
-
is_immutable INTEGER DEFAULT 0,
|
|
79
|
-
write_scope TEXT,
|
|
80
|
-
read_scope TEXT,
|
|
81
|
-
triggered_by TEXT,
|
|
82
|
-
capture_reason TEXT,
|
|
83
|
-
last_used_at INTEGER,
|
|
84
|
-
usage_count INTEGER DEFAULT 0,
|
|
85
|
-
valid_from INTEGER,
|
|
86
|
-
valid_to INTEGER,
|
|
87
|
-
superseded_by TEXT,
|
|
88
|
-
version INTEGER DEFAULT 1,
|
|
89
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
90
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
CREATE INDEX IF NOT EXISTS memories_project_idx ON memories(project_id);
|
|
94
|
-
CREATE INDEX IF NOT EXISTS memories_type_idx ON memories(type);
|
|
95
|
-
CREATE INDEX IF NOT EXISTS memories_created_idx ON memories(created_at);
|
|
96
|
-
CREATE INDEX IF NOT EXISTS memories_tags_idx ON memories(tags);
|
|
97
|
-
|
|
98
|
-
CREATE TABLE IF NOT EXISTS memory_associations (
|
|
99
|
-
id TEXT PRIMARY KEY,
|
|
100
|
-
from_memory_id TEXT NOT NULL,
|
|
101
|
-
to_memory_id TEXT NOT NULL,
|
|
102
|
-
association_type TEXT NOT NULL,
|
|
103
|
-
weight REAL DEFAULT 1,
|
|
104
|
-
coactivation_count INTEGER DEFAULT 1,
|
|
105
|
-
metadata TEXT,
|
|
106
|
-
last_coactivated_at INTEGER,
|
|
107
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
108
|
-
UNIQUE(from_memory_id, to_memory_id)
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
CREATE TABLE IF NOT EXISTS conversations (
|
|
112
|
-
id TEXT PRIMARY KEY,
|
|
113
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
114
|
-
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
115
|
-
session_id TEXT NOT NULL,
|
|
116
|
-
title TEXT,
|
|
117
|
-
summary TEXT,
|
|
118
|
-
message_count INTEGER DEFAULT 0,
|
|
119
|
-
token_count INTEGER DEFAULT 0,
|
|
120
|
-
started_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
121
|
-
ended_at INTEGER,
|
|
122
|
-
metadata TEXT,
|
|
123
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
124
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
CREATE INDEX IF NOT EXISTS conversations_project_idx ON conversations(project_id);
|
|
128
|
-
CREATE INDEX IF NOT EXISTS conversations_session_idx ON conversations(session_id);
|
|
129
|
-
CREATE INDEX IF NOT EXISTS conversations_started_idx ON conversations(started_at);
|
|
130
|
-
|
|
131
|
-
CREATE TABLE IF NOT EXISTS messages (
|
|
132
|
-
id TEXT PRIMARY KEY,
|
|
133
|
-
conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
134
|
-
role TEXT NOT NULL,
|
|
135
|
-
content TEXT NOT NULL,
|
|
136
|
-
embedding_json TEXT,
|
|
137
|
-
token_count INTEGER,
|
|
138
|
-
tool_calls TEXT,
|
|
139
|
-
metadata TEXT,
|
|
140
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
141
|
-
);
|
|
142
|
-
|
|
143
|
-
CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages(conversation_id);
|
|
144
|
-
CREATE INDEX IF NOT EXISTS messages_role_idx ON messages(role);
|
|
145
|
-
CREATE INDEX IF NOT EXISTS messages_created_idx ON messages(created_at);
|
|
146
|
-
|
|
147
|
-
CREATE TABLE IF NOT EXISTS observations (
|
|
148
|
-
id TEXT PRIMARY KEY,
|
|
149
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
150
|
-
conversation_id TEXT REFERENCES conversations(id) ON DELETE SET NULL,
|
|
151
|
-
type TEXT NOT NULL,
|
|
152
|
-
action TEXT NOT NULL,
|
|
153
|
-
target TEXT,
|
|
154
|
-
summary TEXT NOT NULL,
|
|
155
|
-
details TEXT,
|
|
156
|
-
embedding_json TEXT,
|
|
157
|
-
category TEXT,
|
|
158
|
-
importance INTEGER DEFAULT 50,
|
|
159
|
-
metadata TEXT,
|
|
160
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
CREATE INDEX IF NOT EXISTS observations_project_idx ON observations(project_id);
|
|
164
|
-
CREATE INDEX IF NOT EXISTS observations_type_idx ON observations(type);
|
|
165
|
-
CREATE INDEX IF NOT EXISTS observations_action_idx ON observations(action);
|
|
166
|
-
CREATE INDEX IF NOT EXISTS observations_created_idx ON observations(created_at);
|
|
167
|
-
|
|
168
|
-
CREATE TABLE IF NOT EXISTS entities (
|
|
169
|
-
id TEXT PRIMARY KEY,
|
|
170
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
171
|
-
name TEXT NOT NULL,
|
|
172
|
-
type TEXT NOT NULL,
|
|
173
|
-
description TEXT,
|
|
174
|
-
embedding_json TEXT,
|
|
175
|
-
properties TEXT,
|
|
176
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
177
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
CREATE INDEX IF NOT EXISTS entities_project_idx ON entities(project_id);
|
|
181
|
-
CREATE INDEX IF NOT EXISTS entities_type_idx ON entities(type);
|
|
182
|
-
CREATE INDEX IF NOT EXISTS entities_name_idx ON entities(name);
|
|
183
|
-
|
|
184
|
-
CREATE TABLE IF NOT EXISTS entity_relations (
|
|
185
|
-
id TEXT PRIMARY KEY,
|
|
186
|
-
from_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
187
|
-
to_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
188
|
-
type TEXT NOT NULL,
|
|
189
|
-
weight INTEGER DEFAULT 1,
|
|
190
|
-
properties TEXT,
|
|
191
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
192
|
-
);
|
|
193
|
-
|
|
194
|
-
CREATE INDEX IF NOT EXISTS relations_from_idx ON entity_relations(from_entity_id);
|
|
195
|
-
CREATE INDEX IF NOT EXISTS relations_to_idx ON entity_relations(to_entity_id);
|
|
196
|
-
CREATE INDEX IF NOT EXISTS relations_type_idx ON entity_relations(type);
|
|
197
|
-
|
|
198
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
|
|
199
|
-
content,
|
|
200
|
-
tags,
|
|
201
|
-
content='memories',
|
|
202
|
-
content_rowid='rowid'
|
|
203
|
-
);
|
|
204
|
-
|
|
205
|
-
CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
|
|
206
|
-
INSERT INTO memories_fts(rowid, content, tags)
|
|
207
|
-
VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
|
|
208
|
-
END;
|
|
209
|
-
|
|
210
|
-
CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
|
|
211
|
-
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
|
|
212
|
-
VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
|
|
213
|
-
END;
|
|
214
|
-
|
|
215
|
-
CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
|
|
216
|
-
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
|
|
217
|
-
VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
|
|
218
|
-
INSERT INTO memories_fts(rowid, content, tags)
|
|
219
|
-
VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
|
|
220
|
-
END;
|
|
221
|
-
|
|
222
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
|
|
223
|
-
content,
|
|
224
|
-
content='messages',
|
|
225
|
-
content_rowid='rowid'
|
|
226
|
-
);
|
|
227
|
-
|
|
228
|
-
CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
|
|
229
|
-
INSERT INTO messages_fts(rowid, content)
|
|
230
|
-
VALUES (new.rowid, new.content);
|
|
231
|
-
END;
|
|
232
|
-
|
|
233
|
-
CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
|
|
234
|
-
INSERT INTO messages_fts(messages_fts, rowid, content)
|
|
235
|
-
VALUES ('delete', old.rowid, old.content);
|
|
236
|
-
END;
|
|
237
|
-
|
|
238
|
-
CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
|
|
239
|
-
INSERT INTO messages_fts(messages_fts, rowid, content)
|
|
240
|
-
VALUES ('delete', old.rowid, old.content);
|
|
241
|
-
INSERT INTO messages_fts(rowid, content)
|
|
242
|
-
VALUES (new.rowid, new.content);
|
|
243
|
-
END;
|
|
244
|
-
|
|
245
|
-
CREATE TABLE IF NOT EXISTS core_memory (
|
|
246
|
-
id TEXT PRIMARY KEY,
|
|
247
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
248
|
-
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
249
|
-
section TEXT NOT NULL,
|
|
250
|
-
content TEXT NOT NULL DEFAULT '',
|
|
251
|
-
size_bytes INTEGER DEFAULT 0 NOT NULL,
|
|
252
|
-
tokens_estimate INTEGER DEFAULT 0 NOT NULL,
|
|
253
|
-
version INTEGER DEFAULT 1 NOT NULL,
|
|
254
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
255
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
CREATE INDEX IF NOT EXISTS core_memory_project_idx ON core_memory(project_id);
|
|
259
|
-
CREATE INDEX IF NOT EXISTS core_memory_user_idx ON core_memory(user_id);
|
|
260
|
-
CREATE INDEX IF NOT EXISTS core_memory_section_idx ON core_memory(section);
|
|
261
|
-
|
|
262
|
-
CREATE TABLE IF NOT EXISTS context_sessions (
|
|
263
|
-
id TEXT PRIMARY KEY,
|
|
264
|
-
session_id TEXT NOT NULL UNIQUE,
|
|
265
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
266
|
-
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
267
|
-
loaded_memory_ids TEXT,
|
|
268
|
-
token_budget INTEGER DEFAULT 8000 NOT NULL,
|
|
269
|
-
tokens_used INTEGER DEFAULT 0 NOT NULL,
|
|
270
|
-
core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
271
|
-
loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
272
|
-
metadata TEXT,
|
|
273
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
274
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
275
|
-
);
|
|
276
|
-
|
|
277
|
-
CREATE INDEX IF NOT EXISTS context_sessions_session_idx ON context_sessions(session_id);
|
|
278
|
-
CREATE INDEX IF NOT EXISTS context_sessions_project_idx ON context_sessions(project_id);
|
|
279
|
-
CREATE INDEX IF NOT EXISTS context_sessions_created_idx ON context_sessions(created_at);
|
|
280
|
-
|
|
281
|
-
-- v0.8.0: Memory Merge Tables
|
|
282
|
-
CREATE TABLE IF NOT EXISTS memory_merge_proposals (
|
|
283
|
-
id TEXT PRIMARY KEY,
|
|
284
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
285
|
-
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
286
|
-
source_memory_ids TEXT NOT NULL,
|
|
287
|
-
proposed_content TEXT NOT NULL,
|
|
288
|
-
proposed_summary TEXT,
|
|
289
|
-
proposed_tags TEXT,
|
|
290
|
-
proposed_metadata TEXT,
|
|
291
|
-
detection_method TEXT NOT NULL,
|
|
292
|
-
similarity_score TEXT NOT NULL,
|
|
293
|
-
confidence_level TEXT NOT NULL,
|
|
294
|
-
merge_reason TEXT NOT NULL,
|
|
295
|
-
conflict_warnings TEXT,
|
|
296
|
-
status TEXT DEFAULT 'pending' NOT NULL,
|
|
297
|
-
reviewed_at INTEGER,
|
|
298
|
-
review_notes TEXT,
|
|
299
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
300
|
-
expires_at INTEGER
|
|
301
|
-
);
|
|
302
|
-
|
|
303
|
-
CREATE INDEX IF NOT EXISTS memory_merge_proposals_project_status_idx ON memory_merge_proposals(project_id, status);
|
|
304
|
-
CREATE INDEX IF NOT EXISTS memory_merge_proposals_created_at_idx ON memory_merge_proposals(created_at);
|
|
305
|
-
|
|
306
|
-
CREATE TABLE IF NOT EXISTS memory_merge_history (
|
|
307
|
-
id TEXT PRIMARY KEY,
|
|
308
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
309
|
-
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
310
|
-
proposal_id TEXT REFERENCES memory_merge_proposals(id) ON DELETE SET NULL,
|
|
311
|
-
source_memory_ids TEXT NOT NULL,
|
|
312
|
-
canonical_memory_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
313
|
-
source_memories_snapshot TEXT NOT NULL,
|
|
314
|
-
merge_strategy TEXT NOT NULL,
|
|
315
|
-
tokens_saved INTEGER,
|
|
316
|
-
is_reversed INTEGER DEFAULT 0,
|
|
317
|
-
reversed_at INTEGER,
|
|
318
|
-
reversed_by TEXT,
|
|
319
|
-
merged_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
320
|
-
);
|
|
321
|
-
|
|
322
|
-
CREATE TABLE IF NOT EXISTS memory_hash_cache (
|
|
323
|
-
memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
324
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
325
|
-
simhash TEXT,
|
|
326
|
-
minhash TEXT,
|
|
327
|
-
content_hash TEXT NOT NULL,
|
|
328
|
-
last_updated INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
329
|
-
);
|
|
330
|
-
|
|
331
|
-
CREATE INDEX IF NOT EXISTS memory_hash_cache_project_id_idx ON memory_hash_cache(project_id);
|
|
332
|
-
CREATE INDEX IF NOT EXISTS memory_hash_cache_simhash_idx ON memory_hash_cache(simhash);
|
|
9
|
+
const sqliteSchemaSql = `
|
|
10
|
+
PRAGMA foreign_keys = ON;
|
|
11
|
+
|
|
12
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
13
|
+
id TEXT PRIMARY KEY,
|
|
14
|
+
external_id TEXT UNIQUE,
|
|
15
|
+
name TEXT,
|
|
16
|
+
email TEXT,
|
|
17
|
+
preferences TEXT,
|
|
18
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
19
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
name TEXT NOT NULL,
|
|
25
|
+
path TEXT NOT NULL,
|
|
26
|
+
description TEXT,
|
|
27
|
+
metadata TEXT,
|
|
28
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
29
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);
|
|
33
|
+
|
|
34
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
35
|
+
id TEXT PRIMARY KEY,
|
|
36
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
37
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
38
|
+
type TEXT NOT NULL,
|
|
39
|
+
content TEXT NOT NULL,
|
|
40
|
+
summary TEXT,
|
|
41
|
+
embedding_json TEXT,
|
|
42
|
+
embedding BLOB,
|
|
43
|
+
source TEXT,
|
|
44
|
+
confidence INTEGER DEFAULT 100,
|
|
45
|
+
tags TEXT,
|
|
46
|
+
metadata TEXT,
|
|
47
|
+
is_private INTEGER DEFAULT 0,
|
|
48
|
+
has_secrets INTEGER DEFAULT 0,
|
|
49
|
+
relevance_score INTEGER DEFAULT 50,
|
|
50
|
+
is_active INTEGER DEFAULT 1,
|
|
51
|
+
expires_at INTEGER,
|
|
52
|
+
access_count INTEGER DEFAULT 0,
|
|
53
|
+
last_accessed_at INTEGER,
|
|
54
|
+
is_merged INTEGER DEFAULT 0,
|
|
55
|
+
merged_into_id TEXT,
|
|
56
|
+
merged_at INTEGER,
|
|
57
|
+
is_canonical INTEGER DEFAULT 0,
|
|
58
|
+
merge_source_ids TEXT,
|
|
59
|
+
is_mergeable INTEGER DEFAULT 1,
|
|
60
|
+
merge_version INTEGER DEFAULT 1,
|
|
61
|
+
importance_score INTEGER DEFAULT 50,
|
|
62
|
+
importance_decay_rate INTEGER DEFAULT 30,
|
|
63
|
+
last_importance_recalc INTEGER,
|
|
64
|
+
consolidated_into TEXT,
|
|
65
|
+
consolidated_at INTEGER,
|
|
66
|
+
is_consolidated INTEGER DEFAULT 0,
|
|
67
|
+
sector TEXT DEFAULT 'episodic',
|
|
68
|
+
tier TEXT DEFAULT 'hot',
|
|
69
|
+
context_status TEXT DEFAULT 'out-of-context',
|
|
70
|
+
decay_rate INTEGER DEFAULT 30,
|
|
71
|
+
coactivation_score INTEGER DEFAULT 0,
|
|
72
|
+
last_decay_at INTEGER DEFAULT (strftime('%s','now')),
|
|
73
|
+
agent_id TEXT,
|
|
74
|
+
agent_role TEXT,
|
|
75
|
+
visibility_scope TEXT DEFAULT 'private',
|
|
76
|
+
is_protected INTEGER DEFAULT 0,
|
|
77
|
+
is_pinned INTEGER DEFAULT 0,
|
|
78
|
+
is_immutable INTEGER DEFAULT 0,
|
|
79
|
+
write_scope TEXT,
|
|
80
|
+
read_scope TEXT,
|
|
81
|
+
triggered_by TEXT,
|
|
82
|
+
capture_reason TEXT,
|
|
83
|
+
last_used_at INTEGER,
|
|
84
|
+
usage_count INTEGER DEFAULT 0,
|
|
85
|
+
valid_from INTEGER,
|
|
86
|
+
valid_to INTEGER,
|
|
87
|
+
superseded_by TEXT,
|
|
88
|
+
version INTEGER DEFAULT 1,
|
|
89
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
90
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
CREATE INDEX IF NOT EXISTS memories_project_idx ON memories(project_id);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS memories_type_idx ON memories(type);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS memories_created_idx ON memories(created_at);
|
|
96
|
+
CREATE INDEX IF NOT EXISTS memories_tags_idx ON memories(tags);
|
|
97
|
+
|
|
98
|
+
CREATE TABLE IF NOT EXISTS memory_associations (
|
|
99
|
+
id TEXT PRIMARY KEY,
|
|
100
|
+
from_memory_id TEXT NOT NULL,
|
|
101
|
+
to_memory_id TEXT NOT NULL,
|
|
102
|
+
association_type TEXT NOT NULL,
|
|
103
|
+
weight REAL DEFAULT 1,
|
|
104
|
+
coactivation_count INTEGER DEFAULT 1,
|
|
105
|
+
metadata TEXT,
|
|
106
|
+
last_coactivated_at INTEGER,
|
|
107
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
108
|
+
UNIQUE(from_memory_id, to_memory_id)
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
CREATE TABLE IF NOT EXISTS conversations (
|
|
112
|
+
id TEXT PRIMARY KEY,
|
|
113
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
114
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
115
|
+
session_id TEXT NOT NULL,
|
|
116
|
+
title TEXT,
|
|
117
|
+
summary TEXT,
|
|
118
|
+
message_count INTEGER DEFAULT 0,
|
|
119
|
+
token_count INTEGER DEFAULT 0,
|
|
120
|
+
started_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
121
|
+
ended_at INTEGER,
|
|
122
|
+
metadata TEXT,
|
|
123
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
124
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
CREATE INDEX IF NOT EXISTS conversations_project_idx ON conversations(project_id);
|
|
128
|
+
CREATE INDEX IF NOT EXISTS conversations_session_idx ON conversations(session_id);
|
|
129
|
+
CREATE INDEX IF NOT EXISTS conversations_started_idx ON conversations(started_at);
|
|
130
|
+
|
|
131
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
132
|
+
id TEXT PRIMARY KEY,
|
|
133
|
+
conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
134
|
+
role TEXT NOT NULL,
|
|
135
|
+
content TEXT NOT NULL,
|
|
136
|
+
embedding_json TEXT,
|
|
137
|
+
token_count INTEGER,
|
|
138
|
+
tool_calls TEXT,
|
|
139
|
+
metadata TEXT,
|
|
140
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages(conversation_id);
|
|
144
|
+
CREATE INDEX IF NOT EXISTS messages_role_idx ON messages(role);
|
|
145
|
+
CREATE INDEX IF NOT EXISTS messages_created_idx ON messages(created_at);
|
|
146
|
+
|
|
147
|
+
CREATE TABLE IF NOT EXISTS observations (
|
|
148
|
+
id TEXT PRIMARY KEY,
|
|
149
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
150
|
+
conversation_id TEXT REFERENCES conversations(id) ON DELETE SET NULL,
|
|
151
|
+
type TEXT NOT NULL,
|
|
152
|
+
action TEXT NOT NULL,
|
|
153
|
+
target TEXT,
|
|
154
|
+
summary TEXT NOT NULL,
|
|
155
|
+
details TEXT,
|
|
156
|
+
embedding_json TEXT,
|
|
157
|
+
category TEXT,
|
|
158
|
+
importance INTEGER DEFAULT 50,
|
|
159
|
+
metadata TEXT,
|
|
160
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
CREATE INDEX IF NOT EXISTS observations_project_idx ON observations(project_id);
|
|
164
|
+
CREATE INDEX IF NOT EXISTS observations_type_idx ON observations(type);
|
|
165
|
+
CREATE INDEX IF NOT EXISTS observations_action_idx ON observations(action);
|
|
166
|
+
CREATE INDEX IF NOT EXISTS observations_created_idx ON observations(created_at);
|
|
167
|
+
|
|
168
|
+
CREATE TABLE IF NOT EXISTS entities (
|
|
169
|
+
id TEXT PRIMARY KEY,
|
|
170
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
171
|
+
name TEXT NOT NULL,
|
|
172
|
+
type TEXT NOT NULL,
|
|
173
|
+
description TEXT,
|
|
174
|
+
embedding_json TEXT,
|
|
175
|
+
properties TEXT,
|
|
176
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
177
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE INDEX IF NOT EXISTS entities_project_idx ON entities(project_id);
|
|
181
|
+
CREATE INDEX IF NOT EXISTS entities_type_idx ON entities(type);
|
|
182
|
+
CREATE INDEX IF NOT EXISTS entities_name_idx ON entities(name);
|
|
183
|
+
|
|
184
|
+
CREATE TABLE IF NOT EXISTS entity_relations (
|
|
185
|
+
id TEXT PRIMARY KEY,
|
|
186
|
+
from_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
187
|
+
to_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
188
|
+
type TEXT NOT NULL,
|
|
189
|
+
weight INTEGER DEFAULT 1,
|
|
190
|
+
properties TEXT,
|
|
191
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
CREATE INDEX IF NOT EXISTS relations_from_idx ON entity_relations(from_entity_id);
|
|
195
|
+
CREATE INDEX IF NOT EXISTS relations_to_idx ON entity_relations(to_entity_id);
|
|
196
|
+
CREATE INDEX IF NOT EXISTS relations_type_idx ON entity_relations(type);
|
|
197
|
+
|
|
198
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
|
|
199
|
+
content,
|
|
200
|
+
tags,
|
|
201
|
+
content='memories',
|
|
202
|
+
content_rowid='rowid'
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
|
|
206
|
+
INSERT INTO memories_fts(rowid, content, tags)
|
|
207
|
+
VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
|
|
208
|
+
END;
|
|
209
|
+
|
|
210
|
+
CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
|
|
211
|
+
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
|
|
212
|
+
VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
|
|
213
|
+
END;
|
|
214
|
+
|
|
215
|
+
CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
|
|
216
|
+
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
|
|
217
|
+
VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
|
|
218
|
+
INSERT INTO memories_fts(rowid, content, tags)
|
|
219
|
+
VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
|
|
220
|
+
END;
|
|
221
|
+
|
|
222
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
|
|
223
|
+
content,
|
|
224
|
+
content='messages',
|
|
225
|
+
content_rowid='rowid'
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
|
|
229
|
+
INSERT INTO messages_fts(rowid, content)
|
|
230
|
+
VALUES (new.rowid, new.content);
|
|
231
|
+
END;
|
|
232
|
+
|
|
233
|
+
CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
|
|
234
|
+
INSERT INTO messages_fts(messages_fts, rowid, content)
|
|
235
|
+
VALUES ('delete', old.rowid, old.content);
|
|
236
|
+
END;
|
|
237
|
+
|
|
238
|
+
CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
|
|
239
|
+
INSERT INTO messages_fts(messages_fts, rowid, content)
|
|
240
|
+
VALUES ('delete', old.rowid, old.content);
|
|
241
|
+
INSERT INTO messages_fts(rowid, content)
|
|
242
|
+
VALUES (new.rowid, new.content);
|
|
243
|
+
END;
|
|
244
|
+
|
|
245
|
+
CREATE TABLE IF NOT EXISTS core_memory (
|
|
246
|
+
id TEXT PRIMARY KEY,
|
|
247
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
248
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
249
|
+
section TEXT NOT NULL,
|
|
250
|
+
content TEXT NOT NULL DEFAULT '',
|
|
251
|
+
size_bytes INTEGER DEFAULT 0 NOT NULL,
|
|
252
|
+
tokens_estimate INTEGER DEFAULT 0 NOT NULL,
|
|
253
|
+
version INTEGER DEFAULT 1 NOT NULL,
|
|
254
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
255
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
CREATE INDEX IF NOT EXISTS core_memory_project_idx ON core_memory(project_id);
|
|
259
|
+
CREATE INDEX IF NOT EXISTS core_memory_user_idx ON core_memory(user_id);
|
|
260
|
+
CREATE INDEX IF NOT EXISTS core_memory_section_idx ON core_memory(section);
|
|
261
|
+
|
|
262
|
+
CREATE TABLE IF NOT EXISTS context_sessions (
|
|
263
|
+
id TEXT PRIMARY KEY,
|
|
264
|
+
session_id TEXT NOT NULL UNIQUE,
|
|
265
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
266
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
267
|
+
loaded_memory_ids TEXT,
|
|
268
|
+
token_budget INTEGER DEFAULT 8000 NOT NULL,
|
|
269
|
+
tokens_used INTEGER DEFAULT 0 NOT NULL,
|
|
270
|
+
core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
271
|
+
loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
272
|
+
metadata TEXT,
|
|
273
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
274
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
CREATE INDEX IF NOT EXISTS context_sessions_session_idx ON context_sessions(session_id);
|
|
278
|
+
CREATE INDEX IF NOT EXISTS context_sessions_project_idx ON context_sessions(project_id);
|
|
279
|
+
CREATE INDEX IF NOT EXISTS context_sessions_created_idx ON context_sessions(created_at);
|
|
280
|
+
|
|
281
|
+
-- v0.8.0: Memory Merge Tables
|
|
282
|
+
CREATE TABLE IF NOT EXISTS memory_merge_proposals (
|
|
283
|
+
id TEXT PRIMARY KEY,
|
|
284
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
285
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
286
|
+
source_memory_ids TEXT NOT NULL,
|
|
287
|
+
proposed_content TEXT NOT NULL,
|
|
288
|
+
proposed_summary TEXT,
|
|
289
|
+
proposed_tags TEXT,
|
|
290
|
+
proposed_metadata TEXT,
|
|
291
|
+
detection_method TEXT NOT NULL,
|
|
292
|
+
similarity_score TEXT NOT NULL,
|
|
293
|
+
confidence_level TEXT NOT NULL,
|
|
294
|
+
merge_reason TEXT NOT NULL,
|
|
295
|
+
conflict_warnings TEXT,
|
|
296
|
+
status TEXT DEFAULT 'pending' NOT NULL,
|
|
297
|
+
reviewed_at INTEGER,
|
|
298
|
+
review_notes TEXT,
|
|
299
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
300
|
+
expires_at INTEGER
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
CREATE INDEX IF NOT EXISTS memory_merge_proposals_project_status_idx ON memory_merge_proposals(project_id, status);
|
|
304
|
+
CREATE INDEX IF NOT EXISTS memory_merge_proposals_created_at_idx ON memory_merge_proposals(created_at);
|
|
305
|
+
|
|
306
|
+
CREATE TABLE IF NOT EXISTS memory_merge_history (
|
|
307
|
+
id TEXT PRIMARY KEY,
|
|
308
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
309
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
310
|
+
proposal_id TEXT REFERENCES memory_merge_proposals(id) ON DELETE SET NULL,
|
|
311
|
+
source_memory_ids TEXT NOT NULL,
|
|
312
|
+
canonical_memory_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
313
|
+
source_memories_snapshot TEXT NOT NULL,
|
|
314
|
+
merge_strategy TEXT NOT NULL,
|
|
315
|
+
tokens_saved INTEGER,
|
|
316
|
+
is_reversed INTEGER DEFAULT 0,
|
|
317
|
+
reversed_at INTEGER,
|
|
318
|
+
reversed_by TEXT,
|
|
319
|
+
merged_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
320
|
+
);
|
|
321
|
+
|
|
322
|
+
CREATE TABLE IF NOT EXISTS memory_hash_cache (
|
|
323
|
+
memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
324
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
325
|
+
simhash TEXT,
|
|
326
|
+
minhash TEXT,
|
|
327
|
+
content_hash TEXT NOT NULL,
|
|
328
|
+
last_updated INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
CREATE INDEX IF NOT EXISTS memory_hash_cache_project_id_idx ON memory_hash_cache(project_id);
|
|
332
|
+
CREATE INDEX IF NOT EXISTS memory_hash_cache_simhash_idx ON memory_hash_cache(simhash);
|
|
333
333
|
`;
|
|
334
334
|
const postgresStatements = [
|
|
335
335
|
`CREATE EXTENSION IF NOT EXISTS pgcrypto;`,
|
|
336
336
|
`CREATE EXTENSION IF NOT EXISTS vector;`,
|
|
337
337
|
`CREATE EXTENSION IF NOT EXISTS pg_trgm;`,
|
|
338
|
-
`CREATE TABLE IF NOT EXISTS users (
|
|
339
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
340
|
-
external_id TEXT UNIQUE,
|
|
341
|
-
name TEXT,
|
|
342
|
-
email TEXT,
|
|
343
|
-
preferences JSONB,
|
|
344
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
345
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
338
|
+
`CREATE TABLE IF NOT EXISTS users (
|
|
339
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
340
|
+
external_id TEXT UNIQUE,
|
|
341
|
+
name TEXT,
|
|
342
|
+
email TEXT,
|
|
343
|
+
preferences JSONB,
|
|
344
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
345
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
346
346
|
);`,
|
|
347
|
-
`CREATE TABLE IF NOT EXISTS projects (
|
|
348
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
349
|
-
name TEXT NOT NULL,
|
|
350
|
-
path TEXT NOT NULL,
|
|
351
|
-
description TEXT,
|
|
352
|
-
metadata JSONB,
|
|
353
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
354
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
347
|
+
`CREATE TABLE IF NOT EXISTS projects (
|
|
348
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
349
|
+
name TEXT NOT NULL,
|
|
350
|
+
path TEXT NOT NULL,
|
|
351
|
+
description TEXT,
|
|
352
|
+
metadata JSONB,
|
|
353
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
354
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
355
355
|
);`,
|
|
356
356
|
`CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);`,
|
|
357
|
-
`CREATE TABLE IF NOT EXISTS memories (
|
|
358
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
359
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
360
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
361
|
-
type TEXT NOT NULL,
|
|
362
|
-
content TEXT NOT NULL,
|
|
363
|
-
summary TEXT,
|
|
364
|
-
embedding vector(1536),
|
|
365
|
-
source TEXT,
|
|
366
|
-
confidence INTEGER DEFAULT 100,
|
|
367
|
-
tags TEXT[],
|
|
368
|
-
metadata JSONB,
|
|
369
|
-
is_active BOOLEAN DEFAULT TRUE,
|
|
370
|
-
expires_at TIMESTAMPTZ,
|
|
371
|
-
access_count INTEGER DEFAULT 0,
|
|
372
|
-
last_accessed_at TIMESTAMPTZ,
|
|
373
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
374
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
357
|
+
`CREATE TABLE IF NOT EXISTS memories (
|
|
358
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
359
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
360
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
361
|
+
type TEXT NOT NULL,
|
|
362
|
+
content TEXT NOT NULL,
|
|
363
|
+
summary TEXT,
|
|
364
|
+
embedding vector(1536),
|
|
365
|
+
source TEXT,
|
|
366
|
+
confidence INTEGER DEFAULT 100,
|
|
367
|
+
tags TEXT[],
|
|
368
|
+
metadata JSONB,
|
|
369
|
+
is_active BOOLEAN DEFAULT TRUE,
|
|
370
|
+
expires_at TIMESTAMPTZ,
|
|
371
|
+
access_count INTEGER DEFAULT 0,
|
|
372
|
+
last_accessed_at TIMESTAMPTZ,
|
|
373
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
374
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
375
375
|
);`,
|
|
376
376
|
`CREATE INDEX IF NOT EXISTS memories_project_idx ON memories(project_id);`,
|
|
377
377
|
`CREATE INDEX IF NOT EXISTS memories_type_idx ON memories(type);`,
|
|
378
378
|
`CREATE INDEX IF NOT EXISTS memories_created_idx ON memories(created_at);`,
|
|
379
379
|
`CREATE INDEX IF NOT EXISTS memories_tags_idx ON memories USING GIN(tags);`,
|
|
380
380
|
`CREATE INDEX IF NOT EXISTS memories_content_trgm_idx ON memories USING GIN (content gin_trgm_ops);`,
|
|
381
|
-
`CREATE TABLE IF NOT EXISTS conversations (
|
|
382
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
383
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
384
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
385
|
-
session_id TEXT NOT NULL,
|
|
386
|
-
title TEXT,
|
|
387
|
-
summary TEXT,
|
|
388
|
-
message_count INTEGER DEFAULT 0,
|
|
389
|
-
token_count INTEGER DEFAULT 0,
|
|
390
|
-
started_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
391
|
-
ended_at TIMESTAMPTZ,
|
|
392
|
-
metadata JSONB,
|
|
393
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
394
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
381
|
+
`CREATE TABLE IF NOT EXISTS conversations (
|
|
382
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
383
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
384
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
385
|
+
session_id TEXT NOT NULL,
|
|
386
|
+
title TEXT,
|
|
387
|
+
summary TEXT,
|
|
388
|
+
message_count INTEGER DEFAULT 0,
|
|
389
|
+
token_count INTEGER DEFAULT 0,
|
|
390
|
+
started_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
391
|
+
ended_at TIMESTAMPTZ,
|
|
392
|
+
metadata JSONB,
|
|
393
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
394
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
395
395
|
);`,
|
|
396
396
|
`CREATE INDEX IF NOT EXISTS conversations_project_idx ON conversations(project_id);`,
|
|
397
397
|
`CREATE INDEX IF NOT EXISTS conversations_session_idx ON conversations(session_id);`,
|
|
398
398
|
`CREATE INDEX IF NOT EXISTS conversations_started_idx ON conversations(started_at);`,
|
|
399
|
-
`CREATE TABLE IF NOT EXISTS messages (
|
|
400
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
401
|
-
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
402
|
-
role TEXT NOT NULL,
|
|
403
|
-
content TEXT NOT NULL,
|
|
404
|
-
embedding vector(1536),
|
|
405
|
-
token_count INTEGER,
|
|
406
|
-
tool_calls JSONB,
|
|
407
|
-
metadata JSONB,
|
|
408
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
399
|
+
`CREATE TABLE IF NOT EXISTS messages (
|
|
400
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
401
|
+
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
402
|
+
role TEXT NOT NULL,
|
|
403
|
+
content TEXT NOT NULL,
|
|
404
|
+
embedding vector(1536),
|
|
405
|
+
token_count INTEGER,
|
|
406
|
+
tool_calls JSONB,
|
|
407
|
+
metadata JSONB,
|
|
408
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
409
409
|
);`,
|
|
410
410
|
`CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages(conversation_id);`,
|
|
411
411
|
`CREATE INDEX IF NOT EXISTS messages_role_idx ON messages(role);`,
|
|
412
412
|
`CREATE INDEX IF NOT EXISTS messages_created_idx ON messages(created_at);`,
|
|
413
413
|
`CREATE INDEX IF NOT EXISTS messages_content_trgm_idx ON messages USING GIN (content gin_trgm_ops);`,
|
|
414
|
-
`CREATE TABLE IF NOT EXISTS observations (
|
|
415
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
416
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
417
|
-
conversation_id UUID REFERENCES conversations(id) ON DELETE SET NULL,
|
|
418
|
-
type TEXT NOT NULL,
|
|
419
|
-
action TEXT NOT NULL,
|
|
420
|
-
target TEXT,
|
|
421
|
-
summary TEXT NOT NULL,
|
|
422
|
-
details JSONB,
|
|
423
|
-
embedding vector(1536),
|
|
424
|
-
category TEXT,
|
|
425
|
-
importance INTEGER DEFAULT 50,
|
|
426
|
-
metadata JSONB,
|
|
427
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
414
|
+
`CREATE TABLE IF NOT EXISTS observations (
|
|
415
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
416
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
417
|
+
conversation_id UUID REFERENCES conversations(id) ON DELETE SET NULL,
|
|
418
|
+
type TEXT NOT NULL,
|
|
419
|
+
action TEXT NOT NULL,
|
|
420
|
+
target TEXT,
|
|
421
|
+
summary TEXT NOT NULL,
|
|
422
|
+
details JSONB,
|
|
423
|
+
embedding vector(1536),
|
|
424
|
+
category TEXT,
|
|
425
|
+
importance INTEGER DEFAULT 50,
|
|
426
|
+
metadata JSONB,
|
|
427
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
428
428
|
);`,
|
|
429
429
|
`CREATE INDEX IF NOT EXISTS observations_project_idx ON observations(project_id);`,
|
|
430
430
|
`CREATE INDEX IF NOT EXISTS observations_type_idx ON observations(type);`,
|
|
431
431
|
`CREATE INDEX IF NOT EXISTS observations_action_idx ON observations(action);`,
|
|
432
432
|
`CREATE INDEX IF NOT EXISTS observations_created_idx ON observations(created_at);`,
|
|
433
|
-
`CREATE TABLE IF NOT EXISTS entities (
|
|
434
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
435
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
436
|
-
name TEXT NOT NULL,
|
|
437
|
-
type TEXT NOT NULL,
|
|
438
|
-
description TEXT,
|
|
439
|
-
embedding vector(1536),
|
|
440
|
-
properties JSONB,
|
|
441
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
442
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
433
|
+
`CREATE TABLE IF NOT EXISTS entities (
|
|
434
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
435
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
436
|
+
name TEXT NOT NULL,
|
|
437
|
+
type TEXT NOT NULL,
|
|
438
|
+
description TEXT,
|
|
439
|
+
embedding vector(1536),
|
|
440
|
+
properties JSONB,
|
|
441
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
442
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
443
443
|
);`,
|
|
444
444
|
`CREATE INDEX IF NOT EXISTS entities_project_idx ON entities(project_id);`,
|
|
445
445
|
`CREATE INDEX IF NOT EXISTS entities_type_idx ON entities(type);`,
|
|
446
446
|
`CREATE INDEX IF NOT EXISTS entities_name_idx ON entities(name);`,
|
|
447
|
-
`CREATE TABLE IF NOT EXISTS entity_relations (
|
|
448
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
449
|
-
from_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
450
|
-
to_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
451
|
-
type TEXT NOT NULL,
|
|
452
|
-
weight INTEGER DEFAULT 1,
|
|
453
|
-
properties JSONB,
|
|
454
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
447
|
+
`CREATE TABLE IF NOT EXISTS entity_relations (
|
|
448
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
449
|
+
from_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
450
|
+
to_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
451
|
+
type TEXT NOT NULL,
|
|
452
|
+
weight INTEGER DEFAULT 1,
|
|
453
|
+
properties JSONB,
|
|
454
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
455
455
|
);`,
|
|
456
456
|
`CREATE INDEX IF NOT EXISTS relations_from_idx ON entity_relations(from_entity_id);`,
|
|
457
457
|
`CREATE INDEX IF NOT EXISTS relations_to_idx ON entity_relations(to_entity_id);`,
|
|
458
458
|
`CREATE INDEX IF NOT EXISTS relations_type_idx ON entity_relations(type);`,
|
|
459
|
-
`CREATE TABLE IF NOT EXISTS core_memory (
|
|
460
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
461
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
462
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
463
|
-
section TEXT NOT NULL,
|
|
464
|
-
content TEXT NOT NULL DEFAULT '',
|
|
465
|
-
size_bytes INTEGER DEFAULT 0 NOT NULL,
|
|
466
|
-
version INTEGER DEFAULT 1 NOT NULL,
|
|
467
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
468
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
459
|
+
`CREATE TABLE IF NOT EXISTS core_memory (
|
|
460
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
461
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
462
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
463
|
+
section TEXT NOT NULL,
|
|
464
|
+
content TEXT NOT NULL DEFAULT '',
|
|
465
|
+
size_bytes INTEGER DEFAULT 0 NOT NULL,
|
|
466
|
+
version INTEGER DEFAULT 1 NOT NULL,
|
|
467
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
468
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
469
469
|
);`,
|
|
470
470
|
`CREATE INDEX IF NOT EXISTS core_memory_project_idx ON core_memory(project_id);`,
|
|
471
471
|
`CREATE INDEX IF NOT EXISTS core_memory_user_idx ON core_memory(user_id);`,
|
|
472
472
|
`CREATE INDEX IF NOT EXISTS core_memory_section_idx ON core_memory(section);`,
|
|
473
|
-
`CREATE TABLE IF NOT EXISTS context_sessions (
|
|
474
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
475
|
-
session_id TEXT NOT NULL UNIQUE,
|
|
476
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
477
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
478
|
-
loaded_memory_ids JSONB,
|
|
479
|
-
token_budget INTEGER DEFAULT 8000 NOT NULL,
|
|
480
|
-
tokens_used INTEGER DEFAULT 0 NOT NULL,
|
|
481
|
-
core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
482
|
-
loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
483
|
-
metadata JSONB,
|
|
484
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
485
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
473
|
+
`CREATE TABLE IF NOT EXISTS context_sessions (
|
|
474
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
475
|
+
session_id TEXT NOT NULL UNIQUE,
|
|
476
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
477
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
478
|
+
loaded_memory_ids JSONB,
|
|
479
|
+
token_budget INTEGER DEFAULT 8000 NOT NULL,
|
|
480
|
+
tokens_used INTEGER DEFAULT 0 NOT NULL,
|
|
481
|
+
core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
482
|
+
loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
483
|
+
metadata JSONB,
|
|
484
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
485
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
486
486
|
);`,
|
|
487
487
|
`CREATE INDEX IF NOT EXISTS context_sessions_session_idx ON context_sessions(session_id);`,
|
|
488
488
|
`CREATE INDEX IF NOT EXISTS context_sessions_project_idx ON context_sessions(project_id);`,
|
|
489
489
|
`CREATE INDEX IF NOT EXISTS context_sessions_created_idx ON context_sessions(created_at);`,
|
|
490
|
-
`CREATE TABLE IF NOT EXISTS memory_merge_proposals (
|
|
491
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
492
|
-
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
493
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
494
|
-
source_memory_ids TEXT NOT NULL,
|
|
495
|
-
proposed_content TEXT NOT NULL,
|
|
496
|
-
proposed_summary TEXT,
|
|
497
|
-
proposed_tags TEXT[],
|
|
498
|
-
proposed_metadata JSONB,
|
|
499
|
-
detection_method TEXT NOT NULL,
|
|
500
|
-
similarity_score TEXT NOT NULL,
|
|
501
|
-
confidence_level TEXT NOT NULL,
|
|
502
|
-
merge_reason TEXT NOT NULL,
|
|
503
|
-
conflict_warnings JSONB,
|
|
504
|
-
status TEXT DEFAULT 'pending' NOT NULL,
|
|
505
|
-
reviewed_at TIMESTAMPTZ,
|
|
506
|
-
review_notes TEXT,
|
|
507
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
508
|
-
expires_at TIMESTAMPTZ
|
|
490
|
+
`CREATE TABLE IF NOT EXISTS memory_merge_proposals (
|
|
491
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
492
|
+
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
493
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
494
|
+
source_memory_ids TEXT NOT NULL,
|
|
495
|
+
proposed_content TEXT NOT NULL,
|
|
496
|
+
proposed_summary TEXT,
|
|
497
|
+
proposed_tags TEXT[],
|
|
498
|
+
proposed_metadata JSONB,
|
|
499
|
+
detection_method TEXT NOT NULL,
|
|
500
|
+
similarity_score TEXT NOT NULL,
|
|
501
|
+
confidence_level TEXT NOT NULL,
|
|
502
|
+
merge_reason TEXT NOT NULL,
|
|
503
|
+
conflict_warnings JSONB,
|
|
504
|
+
status TEXT DEFAULT 'pending' NOT NULL,
|
|
505
|
+
reviewed_at TIMESTAMPTZ,
|
|
506
|
+
review_notes TEXT,
|
|
507
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
508
|
+
expires_at TIMESTAMPTZ
|
|
509
509
|
);`,
|
|
510
510
|
`CREATE INDEX IF NOT EXISTS memory_merge_proposals_project_status_idx ON memory_merge_proposals(project_id, status);`,
|
|
511
511
|
`CREATE INDEX IF NOT EXISTS memory_merge_proposals_created_at_idx ON memory_merge_proposals(created_at);`,
|
|
512
|
-
`CREATE TABLE IF NOT EXISTS memory_merge_history (
|
|
513
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
514
|
-
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
515
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
516
|
-
proposal_id UUID REFERENCES memory_merge_proposals(id) ON DELETE SET NULL,
|
|
517
|
-
source_memory_ids TEXT NOT NULL,
|
|
518
|
-
canonical_memory_id UUID NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
519
|
-
source_memories_snapshot JSONB NOT NULL,
|
|
520
|
-
merge_strategy TEXT NOT NULL,
|
|
521
|
-
tokens_saved INTEGER,
|
|
522
|
-
is_reversed BOOLEAN DEFAULT FALSE,
|
|
523
|
-
reversed_at TIMESTAMPTZ,
|
|
524
|
-
reversed_by UUID,
|
|
525
|
-
merged_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
512
|
+
`CREATE TABLE IF NOT EXISTS memory_merge_history (
|
|
513
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
514
|
+
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
515
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
516
|
+
proposal_id UUID REFERENCES memory_merge_proposals(id) ON DELETE SET NULL,
|
|
517
|
+
source_memory_ids TEXT NOT NULL,
|
|
518
|
+
canonical_memory_id UUID NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
519
|
+
source_memories_snapshot JSONB NOT NULL,
|
|
520
|
+
merge_strategy TEXT NOT NULL,
|
|
521
|
+
tokens_saved INTEGER,
|
|
522
|
+
is_reversed BOOLEAN DEFAULT FALSE,
|
|
523
|
+
reversed_at TIMESTAMPTZ,
|
|
524
|
+
reversed_by UUID,
|
|
525
|
+
merged_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
526
526
|
);`,
|
|
527
|
-
`CREATE TABLE IF NOT EXISTS memory_hash_cache (
|
|
528
|
-
memory_id UUID PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
529
|
-
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
530
|
-
simhash TEXT,
|
|
531
|
-
minhash TEXT,
|
|
532
|
-
content_hash TEXT NOT NULL,
|
|
533
|
-
last_updated TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
527
|
+
`CREATE TABLE IF NOT EXISTS memory_hash_cache (
|
|
528
|
+
memory_id UUID PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
529
|
+
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
530
|
+
simhash TEXT,
|
|
531
|
+
minhash TEXT,
|
|
532
|
+
content_hash TEXT NOT NULL,
|
|
533
|
+
last_updated TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
534
534
|
);`,
|
|
535
535
|
`CREATE INDEX IF NOT EXISTS memory_hash_cache_project_id_idx ON memory_hash_cache(project_id);`,
|
|
536
536
|
`CREATE INDEX IF NOT EXISTS memory_hash_cache_simhash_idx ON memory_hash_cache(simhash);`
|