super-memory-pro 0.3.0 → 0.3.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAYhD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAErD;AAID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,EAAE,CAAC,IAAI,CA4BtD;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAID;;;;;;;;GAQG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAgCtD;AAyFD;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAID;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAQpD;AAID;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ/C;AAmDD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,EAAE,CAAC,IAAI,CAU7D"}
|
package/dist/db/connection.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Lazily initialised with automatic retry, database creation, and migration.
|
|
3
3
|
// The plugin never blocks on DB — every operation degrades gracefully.
|
|
4
4
|
// ───────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
import { execSync } from 'node:child_process';
|
|
5
6
|
import pg from 'pg';
|
|
6
7
|
import { runMigrations } from './migrations.js';
|
|
7
8
|
let pool = null;
|
|
@@ -109,18 +110,58 @@ export async function ensureDbReady() {
|
|
|
109
110
|
}
|
|
110
111
|
/**
|
|
111
112
|
* Called when the target database does not exist yet.
|
|
112
|
-
* Creates it
|
|
113
|
+
* Creates it using multiple strategies (mirrors the installer logic):
|
|
114
|
+
* 1. node-postgres admin pool (same user)
|
|
115
|
+
* 2. CLI `createdb` (if available)
|
|
116
|
+
* 3. `sudo -u postgres createdb` (last resort)
|
|
113
117
|
*/
|
|
114
118
|
async function handleMissingDatabase(_originalErr) {
|
|
115
119
|
console.log('[UltraMemory] Database does not exist — attempting to create it');
|
|
120
|
+
const dbName = _config.db.database;
|
|
121
|
+
// ── Strategy 1: node-postgres admin pool ──────────────────────────────
|
|
116
122
|
try {
|
|
117
123
|
const adminPool = createAdminPool(_config);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
await adminPool.query(`CREATE DATABASE "${dbName}"`);
|
|
124
|
+
const quotedName = dbName.replace(/"/g, '""');
|
|
125
|
+
await adminPool.query(`CREATE DATABASE "${quotedName}"`);
|
|
121
126
|
await adminPool.end();
|
|
122
127
|
closePool();
|
|
123
|
-
|
|
128
|
+
return await reconnectAndMigrate();
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
132
|
+
console.warn('[UltraMemory] node-postgres create failed:', msg);
|
|
133
|
+
// Fall through to CLI strategies
|
|
134
|
+
}
|
|
135
|
+
// ── Strategy 2: CLI createdb ──────────────────────────────────────────
|
|
136
|
+
const cliResult = runCommand(`createdb "${dbName}" 2>/dev/null`);
|
|
137
|
+
if (cliResult.exitCode === 0) {
|
|
138
|
+
console.log('[UltraMemory] Database created via createdb');
|
|
139
|
+
closePool();
|
|
140
|
+
return await reconnectAndMigrate();
|
|
141
|
+
}
|
|
142
|
+
// ── Strategy 3: sudo -u postgres createdb ─────────────────────────────
|
|
143
|
+
const sudoResult = runCommand(`sudo -u postgres createdb "${dbName}" 2>/dev/null`);
|
|
144
|
+
if (sudoResult.exitCode === 0) {
|
|
145
|
+
console.log('[UltraMemory] Database created via sudo');
|
|
146
|
+
closePool();
|
|
147
|
+
return await reconnectAndMigrate();
|
|
148
|
+
}
|
|
149
|
+
// ── All strategies failed ─────────────────────────────────────────────
|
|
150
|
+
const currentUser = getSystemUser();
|
|
151
|
+
_lastError =
|
|
152
|
+
`Failed to create database '${dbName}'.\n` +
|
|
153
|
+
` Tried: node-postgres SQL, createdb, sudo -u postgres createdb\n` +
|
|
154
|
+
` Fix: Run 'ALTER USER ${currentUser} CREATEDB;' as PostgreSQL superuser,\n` +
|
|
155
|
+
` or run the installer: npm run install:plugin`;
|
|
156
|
+
console.error('[UltraMemory]', _lastError);
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Reconnect to the newly created database and run migrations.
|
|
161
|
+
* Shared helper for handleMissingDatabase strategies.
|
|
162
|
+
*/
|
|
163
|
+
async function reconnectAndMigrate() {
|
|
164
|
+
try {
|
|
124
165
|
const p = getPool(_config);
|
|
125
166
|
await p.query('SELECT 1');
|
|
126
167
|
await runMigrations(p);
|
|
@@ -131,7 +172,7 @@ async function handleMissingDatabase(_originalErr) {
|
|
|
131
172
|
}
|
|
132
173
|
catch (err) {
|
|
133
174
|
_lastError = err instanceof Error ? err.message : String(err);
|
|
134
|
-
console.error('[UltraMemory]
|
|
175
|
+
console.error('[UltraMemory] Database created but connection failed:', _lastError);
|
|
135
176
|
return false;
|
|
136
177
|
}
|
|
137
178
|
}
|
|
@@ -184,6 +225,45 @@ export async function closePool() {
|
|
|
184
225
|
_ready = false;
|
|
185
226
|
_connecting = false;
|
|
186
227
|
}
|
|
228
|
+
// ─── Shell Command Runner ────────────────────────────────────────────────────
|
|
229
|
+
/**
|
|
230
|
+
* Run a shell command and return stdout/stderr/exitCode.
|
|
231
|
+
* Used for CLI fallbacks when node-postgres lacks permissions.
|
|
232
|
+
*/
|
|
233
|
+
function runCommand(command, timeout = 30_000) {
|
|
234
|
+
try {
|
|
235
|
+
const stdout = execSync(command, {
|
|
236
|
+
encoding: 'utf-8',
|
|
237
|
+
timeout,
|
|
238
|
+
windowsHide: true,
|
|
239
|
+
stdio: 'pipe',
|
|
240
|
+
});
|
|
241
|
+
return { stdout: stdout.trim(), stderr: '', exitCode: 0 };
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
const e = err;
|
|
245
|
+
return {
|
|
246
|
+
stdout: (e.stdout?.toString() ?? '').trim(),
|
|
247
|
+
stderr: (e.stderr?.toString() ?? '').trim(),
|
|
248
|
+
exitCode: e.status ?? 1,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get the current system username.
|
|
254
|
+
* Falls back from $USER env var to `whoami` to 'postgres' default.
|
|
255
|
+
*/
|
|
256
|
+
function getSystemUser() {
|
|
257
|
+
if (process.env.USER)
|
|
258
|
+
return process.env.USER;
|
|
259
|
+
if (process.env.USERNAME)
|
|
260
|
+
return process.env.USERNAME;
|
|
261
|
+
const result = runCommand('whoami 2>/dev/null');
|
|
262
|
+
if (result.exitCode === 0 && result.stdout) {
|
|
263
|
+
return result.stdout;
|
|
264
|
+
}
|
|
265
|
+
return 'postgres';
|
|
266
|
+
}
|
|
187
267
|
// ─── Admin Connection (for DB creation) ──────────────────────────────────────
|
|
188
268
|
/**
|
|
189
269
|
* Connect to the `postgres` admin database (used by the installer and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "super-memory-pro",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.1",
|
|
5
5
|
"description": "Ultra-persistent memory plugin for OpenCode — learn, remember, and recall across sessions",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"opencode",
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
-- Ultra Memory: Initial Schema
|
|
2
|
-
-- Creates core tables for persistent memory storage
|
|
3
|
-
|
|
4
|
-
-- Migration tracking table
|
|
5
|
-
CREATE TABLE IF NOT EXISTS _migrations (
|
|
6
|
-
id SERIAL PRIMARY KEY,
|
|
7
|
-
name TEXT NOT NULL UNIQUE,
|
|
8
|
-
applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
-- Projects table
|
|
12
|
-
CREATE TABLE IF NOT EXISTS projects (
|
|
13
|
-
id TEXT PRIMARY KEY,
|
|
14
|
-
name TEXT NOT NULL,
|
|
15
|
-
path TEXT,
|
|
16
|
-
description TEXT,
|
|
17
|
-
tech_stack JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
18
|
-
conventions JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
19
|
-
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
20
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
21
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
-- Sessions table
|
|
25
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
26
|
-
id TEXT PRIMARY KEY,
|
|
27
|
-
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
28
|
-
summary TEXT,
|
|
29
|
-
message_count INTEGER NOT NULL DEFAULT 0,
|
|
30
|
-
tokens_used INTEGER NOT NULL DEFAULT 0,
|
|
31
|
-
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
32
|
-
ended_at TIMESTAMPTZ,
|
|
33
|
-
metadata JSONB NOT NULL DEFAULT '{}'::jsonb
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
-- Core memories table
|
|
37
|
-
CREATE TABLE IF NOT EXISTS memories (
|
|
38
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
39
|
-
memory_type TEXT NOT NULL CHECK (memory_type IN (
|
|
40
|
-
'user_profile',
|
|
41
|
-
'tech_stack',
|
|
42
|
-
'project_context',
|
|
43
|
-
'session',
|
|
44
|
-
'pattern',
|
|
45
|
-
'decision',
|
|
46
|
-
'explicit'
|
|
47
|
-
)),
|
|
48
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
49
|
-
session_id TEXT REFERENCES sessions(id) ON DELETE SET NULL,
|
|
50
|
-
key TEXT NOT NULL,
|
|
51
|
-
value JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
52
|
-
content TEXT NOT NULL,
|
|
53
|
-
importance INTEGER NOT NULL DEFAULT 1 CHECK (importance BETWEEN 1 AND 5),
|
|
54
|
-
source TEXT NOT NULL DEFAULT 'auto',
|
|
55
|
-
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
56
|
-
access_count INTEGER NOT NULL DEFAULT 0,
|
|
57
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
58
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
59
|
-
last_accessed_at TIMESTAMPTZ,
|
|
60
|
-
-- Full-text search vector
|
|
61
|
-
search_vector TSVECTOR GENERATED ALWAYS AS (
|
|
62
|
-
to_tsvector('english', coalesce(content, ''))
|
|
63
|
-
) STORED,
|
|
64
|
-
-- Unique constraint: one key per type per project
|
|
65
|
-
UNIQUE (memory_type, project_id, key)
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
-- Indexes
|
|
69
|
-
CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(memory_type);
|
|
70
|
-
CREATE INDEX IF NOT EXISTS idx_memories_project ON memories(project_id);
|
|
71
|
-
CREATE INDEX IF NOT EXISTS idx_memories_key ON memories(key);
|
|
72
|
-
CREATE INDEX IF NOT EXISTS idx_memories_importance ON memories(importance DESC);
|
|
73
|
-
CREATE INDEX IF NOT EXISTS idx_memories_fts ON memories USING GIN(search_vector);
|
|
74
|
-
CREATE INDEX IF NOT EXISTS idx_memories_created ON memories(created_at DESC);
|
|
75
|
-
CREATE INDEX IF NOT EXISTS idx_memories_last_access ON memories(last_accessed_at DESC NULLS LAST);
|
|
76
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project_id);
|
|
77
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_started ON sessions(started_at DESC);
|
|
78
|
-
|
|
79
|
-
-- Updated_at trigger function
|
|
80
|
-
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
81
|
-
RETURNS TRIGGER AS $$
|
|
82
|
-
BEGIN
|
|
83
|
-
NEW.updated_at = NOW();
|
|
84
|
-
RETURN NEW;
|
|
85
|
-
END;
|
|
86
|
-
$$ LANGUAGE plpgsql;
|
|
87
|
-
|
|
88
|
-
-- Apply trigger to tables
|
|
89
|
-
DO $$
|
|
90
|
-
BEGIN
|
|
91
|
-
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_projects_updated_at') THEN
|
|
92
|
-
CREATE TRIGGER update_projects_updated_at
|
|
93
|
-
BEFORE UPDATE ON projects
|
|
94
|
-
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
95
|
-
END IF;
|
|
96
|
-
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_memories_updated_at') THEN
|
|
97
|
-
CREATE TRIGGER update_memories_updated_at
|
|
98
|
-
BEFORE UPDATE ON memories
|
|
99
|
-
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
100
|
-
END IF;
|
|
101
|
-
END;
|
|
102
|
-
$$;
|