super-memory-pro 0.2.0 β 0.3.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 +30 -35
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/db/connection.d.ts +31 -3
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +144 -7
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrations/migrations/001_initial.sql +102 -0
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/memory/processor.d.ts.map +1 -1
- package/dist/memory/processor.js +3 -0
- package/dist/memory/processor.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +24 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
<img src="https://img.shields.io/github/license/luftwaffe66/Super-Memory" alt="License"/>
|
|
17
17
|
<img src="https://img.shields.io/badge/OpenCode-Plugin-8B5CF6" alt="OpenCode Plugin"/>
|
|
18
18
|
<img src="https://img.shields.io/badge/status-alpha-yellow" alt="Status"/>
|
|
19
|
+
<img src="https://img.shields.io/npm/v/super-memory-pro?style=for-the-badge&logo=npm&color=CB3837" alt="npm"/>
|
|
20
|
+
</p>
|
|
21
|
+
<p>
|
|
22
|
+
<strong>π¦ <a href="https://www.npmjs.com/package/super-memory-pro">super-memory-pro</a> on npm</strong>
|
|
19
23
|
</p>
|
|
20
24
|
|
|
21
25
|
<img src="super-memory-opencode.png" alt="Super Memory Banner" width="100%"/>
|
|
@@ -45,41 +49,32 @@
|
|
|
45
49
|
|
|
46
50
|
## ποΈ Architecture
|
|
47
51
|
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
β β ββββββββββ¬βββββββββ β β
|
|
75
|
-
β ββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ β
|
|
76
|
-
β β β
|
|
77
|
-
β ββββββββΌβββββββ β
|
|
78
|
-
β β PostgreSQL β β
|
|
79
|
-
β β (ultra_memo-β β
|
|
80
|
-
β β ry DB) β β
|
|
81
|
-
β βββββββββββββββ β
|
|
82
|
-
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
52
|
+
```mermaid
|
|
53
|
+
graph TB
|
|
54
|
+
subgraph OpenCode["OpenCode"]
|
|
55
|
+
direction TB
|
|
56
|
+
subgraph Plugin["Super Memory Plugin"]
|
|
57
|
+
direction TB
|
|
58
|
+
Hooks["Hooks<br/><br/>chat.message<br/>event<br/>tool.execute.after<br/>system.transform<br/>session.compacting"]
|
|
59
|
+
Tools["Tools<br/><br/>mem_save<br/>mem_search<br/>mem_forget<br/>mem_stats"]
|
|
60
|
+
API["Express API<br/><br/>GET /health<br/>POST /api/memory<br/>GET /api/memory/:id<br/>PUT /api/memory/:id<br/>DELETE /api/memory/:id<br/>GET /api/memory/search<br/>GET /api/memory/stats"]
|
|
61
|
+
Processor["Memory Processor<br/><br/>Extract β Store β Recall<br/><br/>Dedup Β· FTS Β· Ranking"]
|
|
62
|
+
end
|
|
63
|
+
DB[("PostgreSQL<br/>ultra_memory")]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
Hooks --> Processor
|
|
67
|
+
Tools --> Processor
|
|
68
|
+
API --> Processor
|
|
69
|
+
Processor --> DB
|
|
70
|
+
|
|
71
|
+
style OpenCode fill:#1a1a2e,color:#fff,stroke:#16213e
|
|
72
|
+
style Plugin fill:#0f3460,color:#fff,stroke:#16213e
|
|
73
|
+
style DB fill:#1b4332,color:#fff,stroke:#2d6a4f
|
|
74
|
+
style Hooks fill:#1a5276,color:#fff,stroke:#2980b9
|
|
75
|
+
style Tools fill:#1a5276,color:#fff,stroke:#2980b9
|
|
76
|
+
style API fill:#1a5276,color:#fff,stroke:#2980b9
|
|
77
|
+
style Processor fill:#2471a3,color:#fff,stroke:#3498db
|
|
83
78
|
```
|
|
84
79
|
|
|
85
80
|
---
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAoBzC"}
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { userInfo } from 'node:os';
|
|
1
2
|
/**
|
|
2
3
|
* Load configuration from environment variables with sensible defaults.
|
|
3
4
|
*/
|
|
@@ -7,7 +8,7 @@ export function loadConfig() {
|
|
|
7
8
|
host: process.env.UM_DB_HOST || 'localhost',
|
|
8
9
|
port: parseInt(process.env.UM_DB_PORT || '5432', 10),
|
|
9
10
|
database: process.env.UM_DB_NAME || 'ultra_memory',
|
|
10
|
-
user: process.env.UM_DB_USER || process.env.USER || 'postgres',
|
|
11
|
+
user: process.env.UM_DB_USER || process.env.USER || userInfo().username || 'postgres',
|
|
11
12
|
password: process.env.UM_DB_PASSWORD || '',
|
|
12
13
|
maxConnections: parseInt(process.env.UM_DB_POOL_MAX || '10', 10),
|
|
13
14
|
},
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,EAAE,EAAE;YACF,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;YAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,EAAE,EAAE,CAAC;YACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,cAAc;YAClD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,QAAQ,IAAI,UAAU;YACrF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;YAC1C,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,EAAE,CAAC;SACjE;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,kBAAkB;YACzE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW;SAChD;QACD,MAAM,EAAE;YACN,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,GAAG,EAAE,EAAE,CAAC;YACjE,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,GAAG,EAAE,EAAE,CAAC;YACjE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;SACrD;KACF,CAAC;AACJ,CAAC"}
|
package/dist/db/connection.d.ts
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
1
|
import pg from 'pg';
|
|
2
2
|
import type { PluginConfig } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Store the resolved config for later lazy initialisation.
|
|
5
|
+
* Must be called once before any async DB operation.
|
|
6
|
+
*/
|
|
7
|
+
export declare function initConfig(config: PluginConfig): void;
|
|
3
8
|
/**
|
|
4
9
|
* Create and return the PostgreSQL connection pool.
|
|
5
|
-
*
|
|
10
|
+
* Synchronous β does not test the connection. Safe to call multiple times.
|
|
6
11
|
*/
|
|
7
12
|
export declare function getPool(config?: PluginConfig): pg.Pool;
|
|
8
13
|
/**
|
|
9
|
-
*
|
|
14
|
+
* Test whether the DB pool is currently in a healthy state.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isReady(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Return the last initialisation error message, or null.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLastError(): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Ensure the database is ready: pool connected, database exists, migrations run.
|
|
23
|
+
*
|
|
24
|
+
* Idempotent and thread-safe (callers that arrive while a connection is in
|
|
25
|
+
* progress will wait). Returns `true` when the database is usable.
|
|
26
|
+
*
|
|
27
|
+
* This is called automatically by `startBackgroundRetry()` and re-invoked
|
|
28
|
+
* whenever a connection error occurs.
|
|
29
|
+
*/
|
|
30
|
+
export declare function ensureDbReady(): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Cancel any pending retry timer (e.g. on dispose).
|
|
33
|
+
*/
|
|
34
|
+
export declare function cancelRetry(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Quick health check. Returns `true` if the database is reachable right now.
|
|
10
37
|
*/
|
|
11
38
|
export declare function healthCheck(): Promise<boolean>;
|
|
12
39
|
/**
|
|
@@ -14,7 +41,8 @@ export declare function healthCheck(): Promise<boolean>;
|
|
|
14
41
|
*/
|
|
15
42
|
export declare function closePool(): Promise<void>;
|
|
16
43
|
/**
|
|
17
|
-
* Connect to
|
|
44
|
+
* Connect to the `postgres` admin database (used by the installer and
|
|
45
|
+
* auto-creation logic).
|
|
18
46
|
*/
|
|
19
47
|
export declare function createAdminPool(config: PluginConfig): pg.Pool;
|
|
20
48
|
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -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":"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"}
|
package/dist/db/connection.js
CHANGED
|
@@ -1,13 +1,36 @@
|
|
|
1
|
+
// βββ PostgreSQL Connection Pool ββββββββββββββββββββββββββββββββββββββββββββββ
|
|
2
|
+
// Lazily initialised with automatic retry, database creation, and migration.
|
|
3
|
+
// The plugin never blocks on DB β every operation degrades gracefully.
|
|
4
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
1
5
|
import pg from 'pg';
|
|
6
|
+
import { runMigrations } from './migrations.js';
|
|
2
7
|
let pool = null;
|
|
8
|
+
let _config = null;
|
|
9
|
+
let _ready = false;
|
|
10
|
+
let _connecting = false;
|
|
11
|
+
let _lastError = null;
|
|
12
|
+
let _retryTimer = null;
|
|
13
|
+
// βββ Configuration βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
14
|
+
/**
|
|
15
|
+
* Store the resolved config for later lazy initialisation.
|
|
16
|
+
* Must be called once before any async DB operation.
|
|
17
|
+
*/
|
|
18
|
+
export function initConfig(config) {
|
|
19
|
+
_config = config;
|
|
20
|
+
}
|
|
21
|
+
// βββ Pool Lifecycle ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
3
22
|
/**
|
|
4
23
|
* Create and return the PostgreSQL connection pool.
|
|
5
|
-
*
|
|
24
|
+
* Synchronous β does not test the connection. Safe to call multiple times.
|
|
6
25
|
*/
|
|
7
26
|
export function getPool(config) {
|
|
8
27
|
if (pool)
|
|
9
28
|
return pool;
|
|
10
|
-
const cfg = config;
|
|
29
|
+
const cfg = config ?? _config;
|
|
30
|
+
if (!cfg)
|
|
31
|
+
throw new Error('[UltraMemory] getPool() called before initConfig()');
|
|
32
|
+
if (_config === null)
|
|
33
|
+
_config = cfg;
|
|
11
34
|
pool = new pg.Pool({
|
|
12
35
|
host: cfg.db.host,
|
|
13
36
|
port: cfg.db.port,
|
|
@@ -18,16 +41,124 @@ export function getPool(config) {
|
|
|
18
41
|
idleTimeoutMillis: 30_000,
|
|
19
42
|
connectionTimeoutMillis: 5_000,
|
|
20
43
|
});
|
|
44
|
+
// On pool-level error, reset ready state so the next operation retries.
|
|
21
45
|
pool.on('error', (err) => {
|
|
22
46
|
console.error('[UltraMemory] PostgreSQL pool error:', err.message);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
47
|
+
if (_ready) {
|
|
48
|
+
_ready = false;
|
|
49
|
+
scheduleRetry();
|
|
50
|
+
}
|
|
26
51
|
});
|
|
27
52
|
return pool;
|
|
28
53
|
}
|
|
29
54
|
/**
|
|
30
|
-
*
|
|
55
|
+
* Test whether the DB pool is currently in a healthy state.
|
|
56
|
+
*/
|
|
57
|
+
export function isReady() {
|
|
58
|
+
return _ready && pool !== null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Return the last initialisation error message, or null.
|
|
62
|
+
*/
|
|
63
|
+
export function getLastError() {
|
|
64
|
+
return _lastError;
|
|
65
|
+
}
|
|
66
|
+
// βββ Lazy Initialisation βββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
67
|
+
/**
|
|
68
|
+
* Ensure the database is ready: pool connected, database exists, migrations run.
|
|
69
|
+
*
|
|
70
|
+
* Idempotent and thread-safe (callers that arrive while a connection is in
|
|
71
|
+
* progress will wait). Returns `true` when the database is usable.
|
|
72
|
+
*
|
|
73
|
+
* This is called automatically by `startBackgroundRetry()` and re-invoked
|
|
74
|
+
* whenever a connection error occurs.
|
|
75
|
+
*/
|
|
76
|
+
export async function ensureDbReady() {
|
|
77
|
+
if (_ready)
|
|
78
|
+
return true;
|
|
79
|
+
if (!_config)
|
|
80
|
+
return false;
|
|
81
|
+
if (_connecting) {
|
|
82
|
+
// Another caller is already connecting β wait for them.
|
|
83
|
+
while (_connecting)
|
|
84
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
85
|
+
return _ready;
|
|
86
|
+
}
|
|
87
|
+
_connecting = true;
|
|
88
|
+
try {
|
|
89
|
+
const p = getPool(_config);
|
|
90
|
+
await p.query('SELECT 1');
|
|
91
|
+
await runMigrations(p);
|
|
92
|
+
_ready = true;
|
|
93
|
+
_lastError = null;
|
|
94
|
+
console.log('[UltraMemory] Database ready');
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
const pgErr = err;
|
|
99
|
+
// Code 3D000 = database does not exist β try to create it.
|
|
100
|
+
if (pgErr?.code === '3D000') {
|
|
101
|
+
return handleMissingDatabase(err);
|
|
102
|
+
}
|
|
103
|
+
_lastError = err instanceof Error ? err.message : String(err);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
_connecting = false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Called when the target database does not exist yet.
|
|
112
|
+
* Creates it via the admin database (postgres), then retries.
|
|
113
|
+
*/
|
|
114
|
+
async function handleMissingDatabase(_originalErr) {
|
|
115
|
+
console.log('[UltraMemory] Database does not exist β attempting to create it');
|
|
116
|
+
try {
|
|
117
|
+
const adminPool = createAdminPool(_config);
|
|
118
|
+
// Quote-safe database name
|
|
119
|
+
const dbName = _config.db.database.replace(/"/g, '""');
|
|
120
|
+
await adminPool.query(`CREATE DATABASE "${dbName}"`);
|
|
121
|
+
await adminPool.end();
|
|
122
|
+
closePool();
|
|
123
|
+
// Retry connection
|
|
124
|
+
const p = getPool(_config);
|
|
125
|
+
await p.query('SELECT 1');
|
|
126
|
+
await runMigrations(p);
|
|
127
|
+
_ready = true;
|
|
128
|
+
_lastError = null;
|
|
129
|
+
console.log('[UltraMemory] Database created and ready');
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
_lastError = err instanceof Error ? err.message : String(err);
|
|
134
|
+
console.error('[UltraMemory] Failed to create database:', _lastError);
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// βββ Retry Logic βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
139
|
+
/**
|
|
140
|
+
* Schedule a background retry attempt after a short delay.
|
|
141
|
+
*/
|
|
142
|
+
function scheduleRetry() {
|
|
143
|
+
if (_retryTimer)
|
|
144
|
+
return; // already scheduled
|
|
145
|
+
_retryTimer = setTimeout(async () => {
|
|
146
|
+
_retryTimer = null;
|
|
147
|
+
await ensureDbReady();
|
|
148
|
+
}, 5_000);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Cancel any pending retry timer (e.g. on dispose).
|
|
152
|
+
*/
|
|
153
|
+
export function cancelRetry() {
|
|
154
|
+
if (_retryTimer) {
|
|
155
|
+
clearTimeout(_retryTimer);
|
|
156
|
+
_retryTimer = null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// βββ Health βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
160
|
+
/**
|
|
161
|
+
* Quick health check. Returns `true` if the database is reachable right now.
|
|
31
162
|
*/
|
|
32
163
|
export async function healthCheck() {
|
|
33
164
|
if (!pool)
|
|
@@ -40,17 +171,23 @@ export async function healthCheck() {
|
|
|
40
171
|
return false;
|
|
41
172
|
}
|
|
42
173
|
}
|
|
174
|
+
// βββ Cleanup ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
43
175
|
/**
|
|
44
176
|
* Gracefully close the connection pool.
|
|
45
177
|
*/
|
|
46
178
|
export async function closePool() {
|
|
179
|
+
cancelRetry();
|
|
47
180
|
if (pool) {
|
|
48
181
|
await pool.end();
|
|
49
182
|
pool = null;
|
|
50
183
|
}
|
|
184
|
+
_ready = false;
|
|
185
|
+
_connecting = false;
|
|
51
186
|
}
|
|
187
|
+
// βββ Admin Connection (for DB creation) ββββββββββββββββββββββββββββββββββββββ
|
|
52
188
|
/**
|
|
53
|
-
* Connect to
|
|
189
|
+
* Connect to the `postgres` admin database (used by the installer and
|
|
190
|
+
* auto-creation logic).
|
|
54
191
|
*/
|
|
55
192
|
export function createAdminPool(config) {
|
|
56
193
|
return new pg.Pool({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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
|
+
$$;
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
import { tool } from '@opencode-ai/plugin';
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
import { loadConfig } from './config.js';
|
|
8
|
-
import {
|
|
9
|
-
import { runMigrations } from './db/migrations.js';
|
|
8
|
+
import { initConfig, closePool, ensureDbReady } from './db/connection.js';
|
|
10
9
|
import { createServer } from './server/index.js';
|
|
11
10
|
import { createMessageHandler } from './hooks/message-handler.js';
|
|
12
11
|
import { createEventHandler } from './hooks/event-handler.js';
|
|
@@ -26,17 +25,19 @@ const pluginModule = {
|
|
|
26
25
|
id: 'super-memory',
|
|
27
26
|
server: async (_input, _options) => {
|
|
28
27
|
const config = loadConfig();
|
|
29
|
-
// ββ Initialise database
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
// ββ Initialise database (lazy β retries in background) βββββββββββββββ
|
|
29
|
+
initConfig(config);
|
|
30
|
+
// Kick off the first connection attempt immediately (fire-and-forget).
|
|
31
|
+
// If it fails, the connection module will retry automatically every 5 s
|
|
32
|
+
// until the database becomes available.
|
|
33
|
+
ensureDbReady().then((ok) => {
|
|
34
|
+
if (ok) {
|
|
35
|
+
console.log('[UltraMemory] Database connected on first attempt');
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
37
|
+
else {
|
|
38
|
+
console.log('[UltraMemory] Database not available yet β will retry in background');
|
|
39
|
+
}
|
|
40
|
+
});
|
|
40
41
|
// ββ Start Express server ββββββββββββββββββββββββββββββββββββββββββββββ
|
|
41
42
|
try {
|
|
42
43
|
serverHandle = await createServer(config);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kEAAkE;AAClE,+CAA+C;AAC/C,+EAA+E;AAE/E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,aAAa,CAAC;AAS9D,OAAO,EAAmD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAQlG,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC,CA+GzB;AAID,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
|
package/dist/memory/processor.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// βββ Memory Processor ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
2
2
|
// Orchestrator that combines extraction, storage, and search.
|
|
3
3
|
// This is the primary entry point for the memory system.
|
|
4
|
+
import { ensureDbReady } from '../db/connection.js';
|
|
4
5
|
import { extractTechStack, extractDecisions, extractUserPreferences, extractPatterns, classifyContent, } from './extractor.js';
|
|
5
6
|
import { storeMemories } from './store.js';
|
|
6
7
|
import { searchRelevantMemories, formatMemoriesForPrompt } from './search.js';
|
|
@@ -31,6 +32,8 @@ export async function processMessage(content, metadata) {
|
|
|
31
32
|
}
|
|
32
33
|
const { sessionId, projectId, source } = metadata;
|
|
33
34
|
try {
|
|
35
|
+
// Lazy-init the database (fire-and-forget β errors are caught below).
|
|
36
|
+
await ensureDbReady();
|
|
34
37
|
// Step 1: Run all extractors
|
|
35
38
|
const [techStack, decisions, preferences, patterns] = await Promise.all([
|
|
36
39
|
safeExtract(() => extractTechStack(content)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8DAA8D;AAC9D,yDAAyD;
|
|
1
|
+
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA8BnE;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1E,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA8BrB;AAID;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAuCrB;AAID;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACpB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CA2BrB;AAID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC5B,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CA4BrB"}
|
package/dist/tools/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Actual implementations of mem_save, mem_search, mem_forget, mem_stats.
|
|
3
3
|
// These are called by the tool definitions in definitions.ts.
|
|
4
4
|
import { createMemory, searchMemories, deleteMemory, getMemoryStats } from '../db/queries.js';
|
|
5
|
+
import { ensureDbReady } from '../db/connection.js';
|
|
5
6
|
// βββ Helpers βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
6
7
|
/**
|
|
7
8
|
* Derive a stable project ID from a worktree directory path.
|
|
@@ -15,6 +16,17 @@ function deriveProjectId(worktree) {
|
|
|
15
16
|
return 'default';
|
|
16
17
|
return last.toLowerCase().replace(/[^a-z0-9_-]/g, '_');
|
|
17
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Ensure the database is ready before proceeding.
|
|
21
|
+
* Returns an error ToolResult if the database is unavailable.
|
|
22
|
+
*/
|
|
23
|
+
async function requireDbReady() {
|
|
24
|
+
const ok = await ensureDbReady();
|
|
25
|
+
if (ok)
|
|
26
|
+
return null;
|
|
27
|
+
const err = `Database is not available. Make sure PostgreSQL is running.`;
|
|
28
|
+
return { title: 'Database Unavailable', output: `β οΈ ${err}` };
|
|
29
|
+
}
|
|
18
30
|
// βββ mem_save ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
19
31
|
/**
|
|
20
32
|
* Save a memory explicitly via tool call.
|
|
@@ -22,6 +34,9 @@ function deriveProjectId(worktree) {
|
|
|
22
34
|
*/
|
|
23
35
|
export async function executeMemSave(args, context) {
|
|
24
36
|
try {
|
|
37
|
+
const dbError = await requireDbReady();
|
|
38
|
+
if (dbError)
|
|
39
|
+
return dbError;
|
|
25
40
|
const memoryType = (args.type || 'explicit');
|
|
26
41
|
const importance = args.importance ?? 3;
|
|
27
42
|
const memory = await createMemory({
|
|
@@ -54,6 +69,9 @@ export async function executeMemSave(args, context) {
|
|
|
54
69
|
*/
|
|
55
70
|
export async function executeMemSearch(args, context) {
|
|
56
71
|
try {
|
|
72
|
+
const dbError = await requireDbReady();
|
|
73
|
+
if (dbError)
|
|
74
|
+
return dbError;
|
|
57
75
|
const limit = args.limit ?? 10;
|
|
58
76
|
const results = await searchMemories({
|
|
59
77
|
query: args.query,
|
|
@@ -93,6 +111,9 @@ export async function executeMemSearch(args, context) {
|
|
|
93
111
|
*/
|
|
94
112
|
export async function executeMemForget(args, _context) {
|
|
95
113
|
try {
|
|
114
|
+
const dbError = await requireDbReady();
|
|
115
|
+
if (dbError)
|
|
116
|
+
return dbError;
|
|
96
117
|
const deleted = await deleteMemory(args.id);
|
|
97
118
|
if (!deleted) {
|
|
98
119
|
return {
|
|
@@ -122,6 +143,9 @@ export async function executeMemForget(args, _context) {
|
|
|
122
143
|
*/
|
|
123
144
|
export async function executeMemStats(_args, _context) {
|
|
124
145
|
try {
|
|
146
|
+
const dbError = await requireDbReady();
|
|
147
|
+
if (dbError)
|
|
148
|
+
return dbError;
|
|
125
149
|
const stats = await getMemoryStats();
|
|
126
150
|
if (stats.length === 0) {
|
|
127
151
|
return {
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AACzE,8DAA8D;AAI9D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.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.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"description": "Ultra-persistent memory plugin for OpenCode β learn, remember, and recall across sessions",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"opencode",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"scripts": {
|
|
37
|
-
"build": "tsc && cp -r src/db/migrations dist/db/migrations",
|
|
37
|
+
"build": "node node_modules/typescript/bin/tsc && cp -r src/db/migrations dist/db/migrations",
|
|
38
38
|
"dev": "tsx watch src/index.ts",
|
|
39
39
|
"install:plugin": "tsx src/installer/index.ts",
|
|
40
|
-
"test": "vitest run",
|
|
40
|
+
"test": "node node_modules/vitest/vitest.mjs run",
|
|
41
41
|
"test:watch": "vitest",
|
|
42
42
|
"typecheck": "tsc --noEmit",
|
|
43
43
|
"clean": "rm -rf dist"
|