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":"AAKA,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;AA4CD;;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;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,EAAE,CAAC,IAAI,CAU7D"}
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"}
@@ -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 via the admin database (postgres), then retries.
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
- // Quote-safe database name
119
- const dbName = _config.db.database.replace(/"/g, '""');
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
- // Retry connection
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] Failed to create database:', _lastError);
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.0",
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
- $$;