opencode-memory-plugin 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -0
- package/dist/compression/compressor.d.ts +86 -0
- package/dist/compression/compressor.d.ts.map +1 -0
- package/dist/compression/compressor.js +142 -0
- package/dist/compression/compressor.js.map +1 -0
- package/dist/compression/parser.d.ts +73 -0
- package/dist/compression/parser.d.ts.map +1 -0
- package/dist/compression/parser.js +139 -0
- package/dist/compression/parser.js.map +1 -0
- package/dist/compression/pipeline.d.ts +73 -0
- package/dist/compression/pipeline.d.ts.map +1 -0
- package/dist/compression/pipeline.js +205 -0
- package/dist/compression/pipeline.js.map +1 -0
- package/dist/compression/privacy.d.ts +8 -0
- package/dist/compression/privacy.d.ts.map +1 -0
- package/dist/compression/privacy.js +30 -0
- package/dist/compression/privacy.js.map +1 -0
- package/dist/compression/prompts.d.ts +24 -0
- package/dist/compression/prompts.d.ts.map +1 -0
- package/dist/compression/prompts.js +106 -0
- package/dist/compression/prompts.js.map +1 -0
- package/dist/compression/quality.d.ts +48 -0
- package/dist/compression/quality.d.ts.map +1 -0
- package/dist/compression/quality.js +159 -0
- package/dist/compression/quality.js.map +1 -0
- package/dist/config.d.ts +114 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +265 -0
- package/dist/config.js.map +1 -0
- package/dist/context/generator.d.ts +28 -0
- package/dist/context/generator.d.ts.map +1 -0
- package/dist/context/generator.js +80 -0
- package/dist/context/generator.js.map +1 -0
- package/dist/hooks/chat-message.d.ts +14 -0
- package/dist/hooks/chat-message.d.ts.map +1 -0
- package/dist/hooks/chat-message.js +35 -0
- package/dist/hooks/chat-message.js.map +1 -0
- package/dist/hooks/compaction.d.ts +13 -0
- package/dist/hooks/compaction.d.ts.map +1 -0
- package/dist/hooks/compaction.js +22 -0
- package/dist/hooks/compaction.js.map +1 -0
- package/dist/hooks/events.d.ts +52 -0
- package/dist/hooks/events.d.ts.map +1 -0
- package/dist/hooks/events.js +138 -0
- package/dist/hooks/events.js.map +1 -0
- package/dist/hooks/system-transform.d.ts +14 -0
- package/dist/hooks/system-transform.d.ts.map +1 -0
- package/dist/hooks/system-transform.js +26 -0
- package/dist/hooks/system-transform.js.map +1 -0
- package/dist/hooks/tool-after.d.ts +26 -0
- package/dist/hooks/tool-after.d.ts.map +1 -0
- package/dist/hooks/tool-after.js +88 -0
- package/dist/hooks/tool-after.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +60 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +91 -0
- package/dist/logger.js.map +1 -0
- package/dist/storage/db.d.ts +22 -0
- package/dist/storage/db.d.ts.map +1 -0
- package/dist/storage/db.js +198 -0
- package/dist/storage/db.js.map +1 -0
- package/dist/storage/schema.d.ts +2473 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +100 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/storage/store.d.ts +376 -0
- package/dist/storage/store.d.ts.map +1 -0
- package/dist/storage/store.js +1025 -0
- package/dist/storage/store.js.map +1 -0
- package/dist/tools/memory-forget.d.ts +11 -0
- package/dist/tools/memory-forget.d.ts.map +1 -0
- package/dist/tools/memory-forget.js +249 -0
- package/dist/tools/memory-forget.js.map +1 -0
- package/dist/tools/memory-get.d.ts +10 -0
- package/dist/tools/memory-get.d.ts.map +1 -0
- package/dist/tools/memory-get.js +50 -0
- package/dist/tools/memory-get.js.map +1 -0
- package/dist/tools/memory-search.d.ts +11 -0
- package/dist/tools/memory-search.d.ts.map +1 -0
- package/dist/tools/memory-search.js +38 -0
- package/dist/tools/memory-search.js.map +1 -0
- package/dist/tools/memory-stats.d.ts +39 -0
- package/dist/tools/memory-stats.d.ts.map +1 -0
- package/dist/tools/memory-stats.js +121 -0
- package/dist/tools/memory-stats.js.map +1 -0
- package/dist/tools/memory-timeline.d.ts +10 -0
- package/dist/tools/memory-timeline.d.ts.map +1 -0
- package/dist/tools/memory-timeline.js +49 -0
- package/dist/tools/memory-timeline.js.map +1 -0
- package/dist/types.d.ts +178 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +130 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +308 -0
- package/dist/utils.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Database } from "bun:sqlite";
|
|
2
|
+
import { type BunSQLiteDatabase } from "drizzle-orm/bun-sqlite";
|
|
3
|
+
import type { schema } from "./schema";
|
|
4
|
+
export interface MemoryDatabase {
|
|
5
|
+
sqlite: Database;
|
|
6
|
+
db: BunSQLiteDatabase<typeof schema>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Creates the SQLite database and ensures the schema exists.
|
|
10
|
+
*
|
|
11
|
+
* @param dbPath - SQLite file path.
|
|
12
|
+
* @returns The initialized SQLite client and Drizzle database.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createMemoryDatabase(dbPath: string): Promise<MemoryDatabase>;
|
|
15
|
+
/**
|
|
16
|
+
* Ensures that all regular tables, indexes, and FTS objects exist.
|
|
17
|
+
*
|
|
18
|
+
* @param sqlite - Raw SQLite client.
|
|
19
|
+
* @returns Nothing.
|
|
20
|
+
*/
|
|
21
|
+
export declare function ensureSchema(sqlite: Database): void;
|
|
22
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAGtC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,CAAA;IAChB,EAAE,EAAE,iBAAiB,CAAC,OAAO,MAAM,CAAC,CAAA;CACrC;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAclF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CA2KnD"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { Database } from "bun:sqlite";
|
|
2
|
+
import { drizzle } from "drizzle-orm/bun-sqlite";
|
|
3
|
+
import { ensureParentDirectory } from "../utils";
|
|
4
|
+
/**
|
|
5
|
+
* Creates the SQLite database and ensures the schema exists.
|
|
6
|
+
*
|
|
7
|
+
* @param dbPath - SQLite file path.
|
|
8
|
+
* @returns The initialized SQLite client and Drizzle database.
|
|
9
|
+
*/
|
|
10
|
+
export async function createMemoryDatabase(dbPath) {
|
|
11
|
+
await ensureParentDirectory(dbPath);
|
|
12
|
+
const sqlite = new Database(dbPath, { create: true });
|
|
13
|
+
sqlite.exec("PRAGMA journal_mode = WAL;");
|
|
14
|
+
sqlite.exec("PRAGMA busy_timeout = 5000;");
|
|
15
|
+
sqlite.exec("PRAGMA foreign_keys = ON;");
|
|
16
|
+
ensureSchema(sqlite);
|
|
17
|
+
return {
|
|
18
|
+
sqlite,
|
|
19
|
+
db: drizzle({ client: sqlite }),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Ensures that all regular tables, indexes, and FTS objects exist.
|
|
24
|
+
*
|
|
25
|
+
* @param sqlite - Raw SQLite client.
|
|
26
|
+
* @returns Nothing.
|
|
27
|
+
*/
|
|
28
|
+
export function ensureSchema(sqlite) {
|
|
29
|
+
sqlite.exec(`
|
|
30
|
+
CREATE TABLE IF NOT EXISTS observations (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
project_id TEXT NOT NULL,
|
|
33
|
+
project_root TEXT NOT NULL,
|
|
34
|
+
session_id TEXT NOT NULL,
|
|
35
|
+
type TEXT NOT NULL,
|
|
36
|
+
title TEXT NOT NULL,
|
|
37
|
+
subtitle TEXT,
|
|
38
|
+
narrative TEXT NOT NULL,
|
|
39
|
+
facts TEXT NOT NULL DEFAULT '[]',
|
|
40
|
+
concepts TEXT NOT NULL DEFAULT '[]',
|
|
41
|
+
files_involved TEXT NOT NULL DEFAULT '[]',
|
|
42
|
+
raw_token_count INTEGER NOT NULL DEFAULT 0,
|
|
43
|
+
compressed_token_count INTEGER NOT NULL DEFAULT 0,
|
|
44
|
+
tool_name TEXT,
|
|
45
|
+
model_used TEXT,
|
|
46
|
+
quality TEXT NOT NULL DEFAULT 'high',
|
|
47
|
+
raw_fallback TEXT,
|
|
48
|
+
created_at INTEGER NOT NULL
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE INDEX IF NOT EXISTS observations_project_created_idx
|
|
52
|
+
ON observations(project_id, created_at DESC);
|
|
53
|
+
|
|
54
|
+
CREATE INDEX IF NOT EXISTS observations_session_idx
|
|
55
|
+
ON observations(session_id);
|
|
56
|
+
|
|
57
|
+
CREATE INDEX IF NOT EXISTS observations_type_idx
|
|
58
|
+
ON observations(type);
|
|
59
|
+
|
|
60
|
+
CREATE INDEX IF NOT EXISTS observations_quality_idx
|
|
61
|
+
ON observations(quality);
|
|
62
|
+
|
|
63
|
+
CREATE TABLE IF NOT EXISTS session_summaries (
|
|
64
|
+
id TEXT PRIMARY KEY,
|
|
65
|
+
project_id TEXT NOT NULL,
|
|
66
|
+
project_root TEXT NOT NULL,
|
|
67
|
+
session_id TEXT NOT NULL,
|
|
68
|
+
requested TEXT,
|
|
69
|
+
investigated TEXT,
|
|
70
|
+
learned TEXT,
|
|
71
|
+
completed TEXT,
|
|
72
|
+
next_steps TEXT,
|
|
73
|
+
observation_count INTEGER NOT NULL DEFAULT 0,
|
|
74
|
+
model_used TEXT,
|
|
75
|
+
created_at INTEGER NOT NULL
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
CREATE UNIQUE INDEX IF NOT EXISTS session_summaries_session_unique_idx
|
|
79
|
+
ON session_summaries(project_id, session_id);
|
|
80
|
+
|
|
81
|
+
CREATE INDEX IF NOT EXISTS session_summaries_created_idx
|
|
82
|
+
ON session_summaries(project_id, created_at DESC);
|
|
83
|
+
|
|
84
|
+
CREATE TABLE IF NOT EXISTS pending_messages (
|
|
85
|
+
id TEXT PRIMARY KEY,
|
|
86
|
+
project_id TEXT NOT NULL,
|
|
87
|
+
project_root TEXT NOT NULL,
|
|
88
|
+
session_id TEXT NOT NULL,
|
|
89
|
+
tool_name TEXT NOT NULL,
|
|
90
|
+
title TEXT,
|
|
91
|
+
raw_content TEXT NOT NULL,
|
|
92
|
+
raw_metadata TEXT,
|
|
93
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
94
|
+
retry_count INTEGER NOT NULL DEFAULT 0,
|
|
95
|
+
error_message TEXT,
|
|
96
|
+
created_at INTEGER NOT NULL,
|
|
97
|
+
processed_at INTEGER
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
CREATE INDEX IF NOT EXISTS pending_messages_status_created_idx
|
|
101
|
+
ON pending_messages(project_id, status, created_at ASC);
|
|
102
|
+
|
|
103
|
+
CREATE INDEX IF NOT EXISTS pending_messages_session_idx
|
|
104
|
+
ON pending_messages(session_id);
|
|
105
|
+
|
|
106
|
+
CREATE TABLE IF NOT EXISTS user_prompts (
|
|
107
|
+
id TEXT PRIMARY KEY,
|
|
108
|
+
project_id TEXT NOT NULL,
|
|
109
|
+
project_root TEXT NOT NULL,
|
|
110
|
+
session_id TEXT NOT NULL,
|
|
111
|
+
message_id TEXT NOT NULL,
|
|
112
|
+
content TEXT NOT NULL,
|
|
113
|
+
created_at INTEGER NOT NULL
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
CREATE UNIQUE INDEX IF NOT EXISTS user_prompts_message_unique_idx
|
|
117
|
+
ON user_prompts(message_id);
|
|
118
|
+
|
|
119
|
+
CREATE INDEX IF NOT EXISTS user_prompts_session_idx
|
|
120
|
+
ON user_prompts(project_id, session_id, created_at DESC);
|
|
121
|
+
|
|
122
|
+
CREATE TABLE IF NOT EXISTS deletion_log (
|
|
123
|
+
id TEXT PRIMARY KEY,
|
|
124
|
+
project_id TEXT NOT NULL,
|
|
125
|
+
project_root TEXT NOT NULL,
|
|
126
|
+
timestamp INTEGER NOT NULL,
|
|
127
|
+
criteria TEXT NOT NULL,
|
|
128
|
+
count INTEGER NOT NULL,
|
|
129
|
+
initiator TEXT NOT NULL
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
CREATE INDEX IF NOT EXISTS deletion_log_timestamp_idx
|
|
133
|
+
ON deletion_log(project_id, timestamp DESC);
|
|
134
|
+
|
|
135
|
+
CREATE TABLE IF NOT EXISTS tool_usage_stats (
|
|
136
|
+
id TEXT PRIMARY KEY,
|
|
137
|
+
project_id TEXT NOT NULL,
|
|
138
|
+
project_root TEXT NOT NULL,
|
|
139
|
+
session_id TEXT NOT NULL,
|
|
140
|
+
tool_name TEXT NOT NULL,
|
|
141
|
+
call_count INTEGER NOT NULL DEFAULT 1,
|
|
142
|
+
created_at INTEGER NOT NULL
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
CREATE INDEX IF NOT EXISTS tool_usage_stats_session_tool_idx
|
|
146
|
+
ON tool_usage_stats(project_id, session_id, tool_name);
|
|
147
|
+
`);
|
|
148
|
+
try {
|
|
149
|
+
sqlite.exec("ALTER TABLE observations ADD COLUMN quality TEXT NOT NULL DEFAULT 'high';");
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
void 0;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
sqlite.exec("ALTER TABLE observations ADD COLUMN raw_fallback TEXT;");
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
void 0;
|
|
159
|
+
}
|
|
160
|
+
sqlite.exec(`
|
|
161
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS observations_fts USING fts5(
|
|
162
|
+
title,
|
|
163
|
+
subtitle,
|
|
164
|
+
narrative,
|
|
165
|
+
facts,
|
|
166
|
+
concepts,
|
|
167
|
+
files_involved,
|
|
168
|
+
content='observations',
|
|
169
|
+
content_rowid='rowid',
|
|
170
|
+
tokenize='unicode61 remove_diacritics 2'
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
CREATE TRIGGER IF NOT EXISTS observations_ai
|
|
174
|
+
AFTER INSERT ON observations
|
|
175
|
+
BEGIN
|
|
176
|
+
INSERT INTO observations_fts(rowid, title, subtitle, narrative, facts, concepts, files_involved)
|
|
177
|
+
VALUES (new.rowid, new.title, new.subtitle, new.narrative, new.facts, new.concepts, new.files_involved);
|
|
178
|
+
END;
|
|
179
|
+
|
|
180
|
+
CREATE TRIGGER IF NOT EXISTS observations_ad
|
|
181
|
+
AFTER DELETE ON observations
|
|
182
|
+
BEGIN
|
|
183
|
+
INSERT INTO observations_fts(observations_fts, rowid, title, subtitle, narrative, facts, concepts, files_involved)
|
|
184
|
+
VALUES ('delete', old.rowid, old.title, old.subtitle, old.narrative, old.facts, old.concepts, old.files_involved);
|
|
185
|
+
END;
|
|
186
|
+
|
|
187
|
+
CREATE TRIGGER IF NOT EXISTS observations_au
|
|
188
|
+
AFTER UPDATE ON observations
|
|
189
|
+
BEGIN
|
|
190
|
+
INSERT INTO observations_fts(observations_fts, rowid, title, subtitle, narrative, facts, concepts, files_involved)
|
|
191
|
+
VALUES ('delete', old.rowid, old.title, old.subtitle, old.narrative, old.facts, old.concepts, old.files_involved);
|
|
192
|
+
INSERT INTO observations_fts(rowid, title, subtitle, narrative, facts, concepts, files_involved)
|
|
193
|
+
VALUES (new.rowid, new.title, new.subtitle, new.narrative, new.facts, new.concepts, new.files_involved);
|
|
194
|
+
END;
|
|
195
|
+
`);
|
|
196
|
+
sqlite.exec(`INSERT INTO observations_fts(observations_fts) VALUES('rebuild');`);
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAA0B,MAAM,wBAAwB,CAAA;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAOhD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAEnC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACzC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IAC1C,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IAExC,YAAY,CAAC,MAAM,CAAC,CAAA;IAEpB,OAAO;QACL,MAAM;QACN,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;KAChC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgB;IAC3C,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsHX,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;IAC1F,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,CAAA;IACR,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,CAAA;IACR,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCX,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;AAClF,CAAC"}
|