super-memory-pro 0.3.0 → 2.0.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 +56 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +86 -6
- package/dist/db/connection.js.map +1 -1
- package/dist/hooks/event-handler.d.ts.map +1 -1
- package/dist/hooks/event-handler.js +9 -0
- package/dist/hooks/event-handler.js.map +1 -1
- package/dist/hooks/message-handler.d.ts.map +1 -1
- package/dist/hooks/message-handler.js +3 -0
- package/dist/hooks/message-handler.js.map +1 -1
- package/dist/hooks/system-transform.d.ts +5 -12
- package/dist/hooks/system-transform.d.ts.map +1 -1
- package/dist/hooks/system-transform.js +43 -24
- package/dist/hooks/system-transform.js.map +1 -1
- package/dist/memory/embeddings.d.ts +22 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +139 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/extractor.d.ts.map +1 -1
- package/dist/memory/extractor.js +5 -1
- package/dist/memory/extractor.js.map +1 -1
- package/dist/memory/index.d.ts +13 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +7 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/llm-extractor.d.ts +22 -0
- package/dist/memory/llm-extractor.d.ts.map +1 -0
- package/dist/memory/llm-extractor.js +117 -0
- package/dist/memory/llm-extractor.js.map +1 -0
- package/dist/memory/pattern-detector.d.ts +28 -0
- package/dist/memory/pattern-detector.d.ts.map +1 -0
- package/dist/memory/pattern-detector.js +221 -0
- package/dist/memory/pattern-detector.js.map +1 -0
- package/dist/memory/processor.d.ts +7 -1
- package/dist/memory/processor.d.ts.map +1 -1
- package/dist/memory/processor.js +112 -15
- package/dist/memory/processor.js.map +1 -1
- package/dist/memory/project-context.d.ts +24 -0
- package/dist/memory/project-context.d.ts.map +1 -0
- package/dist/memory/project-context.js +186 -0
- package/dist/memory/project-context.js.map +1 -0
- package/dist/memory/suggestions.d.ts +21 -0
- package/dist/memory/suggestions.d.ts.map +1 -0
- package/dist/memory/suggestions.js +205 -0
- package/dist/memory/suggestions.js.map +1 -0
- package/dist/memory/user-profile.d.ts +24 -0
- package/dist/memory/user-profile.d.ts.map +1 -0
- package/dist/memory/user-profile.js +220 -0
- package/dist/memory/user-profile.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/db/migrations/migrations/001_initial.sql +0 -102
package/README.md
CHANGED
|
@@ -45,6 +45,17 @@
|
|
|
45
45
|
- **🔄 Cross-Platform** — Works on Linux, macOS, Windows, and Termux (Android)
|
|
46
46
|
- **📦 Auto-Installer** — Smart setup that detects and configures PostgreSQL automatically
|
|
47
47
|
|
|
48
|
+
### 🆕 v2.0 Features
|
|
49
|
+
|
|
50
|
+
- **🤖 AI-Powered Extraction** — Uses LLM for semantic understanding of conversations
|
|
51
|
+
- **🎯 Context-Aware Recall** — Injects memories relevant to current session context
|
|
52
|
+
- **📊 Pattern Detection** — Identifies recurring workflows and habits across sessions
|
|
53
|
+
- **💡 Smart Suggestions** — Provides contextual workflow recommendations
|
|
54
|
+
- **📈 User Profile** — Builds evolving profile with preferences and experience level
|
|
55
|
+
- **🏗️ Project Context** — Automatic detection of architecture and conventions
|
|
56
|
+
- **🔄 Session Summarization** — Auto-generates session summaries with LLM
|
|
57
|
+
- **🧮 Embeddings Support** — Semantic search via vector similarity (optional)
|
|
58
|
+
|
|
48
59
|
---
|
|
49
60
|
|
|
50
61
|
## 🏗️ Architecture
|
|
@@ -184,6 +195,12 @@ Super-Memory/
|
|
|
184
195
|
│ ├── memory/
|
|
185
196
|
│ │ ├── index.ts # Module barrel
|
|
186
197
|
│ │ ├── extractor.ts # Pattern extraction (regex/heuristic)
|
|
198
|
+
│ │ ├── llm-extractor.ts # 🆕 AI-powered extraction via LLM
|
|
199
|
+
│ │ ├── embeddings.ts # 🆕 Semantic search with embeddings
|
|
200
|
+
│ │ ├── pattern-detector.ts # 🆕 Cross-session pattern detection
|
|
201
|
+
│ │ ├── user-profile.ts # 🆕 Evolving user profile
|
|
202
|
+
│ │ ├── project-context.ts # 🆕 Automatic project context
|
|
203
|
+
│ │ ├── suggestions.ts # 🆕 Workflow suggestions
|
|
187
204
|
│ │ ├── store.ts # Memory storage with dedup
|
|
188
205
|
│ │ ├── search.ts # Memory search and formatting
|
|
189
206
|
│ │ └── processor.ts # Core orchestrator
|
|
@@ -197,12 +214,17 @@ Super-Memory/
|
|
|
197
214
|
│ │ ├── health.ts # Health check endpoint
|
|
198
215
|
│ │ └── memory.ts # Memory CRUD REST API
|
|
199
216
|
│ ├── hooks/
|
|
200
|
-
│ │
|
|
217
|
+
│ │ ├── index.ts # Hook barrel exports
|
|
218
|
+
│ │ ├── message-handler.ts # Chat message processing
|
|
219
|
+
│ │ ├── event-handler.ts # Session lifecycle tracking
|
|
220
|
+
│ │ ├── tool-handler.ts # Tool output capture
|
|
221
|
+
│ │ ├── system-transform.ts # Context-aware memory injection
|
|
222
|
+
│ │ └── session-compactor.ts # Session compaction hints
|
|
201
223
|
│ ├── tools/
|
|
202
224
|
│ │ └── definitions.ts # Custom tool schemas
|
|
203
225
|
│ └── installer/
|
|
204
226
|
│ └── index.ts # Cross-platform installer
|
|
205
|
-
└── tests/ # Test suite
|
|
227
|
+
└── tests/ # Test suite
|
|
206
228
|
```
|
|
207
229
|
|
|
208
230
|
---
|
|
@@ -222,6 +244,38 @@ The installer **never hardcodes `sudo`** — it detects whether it's available a
|
|
|
222
244
|
|
|
223
245
|
---
|
|
224
246
|
|
|
247
|
+
## ⚙️ Configuration
|
|
248
|
+
|
|
249
|
+
### Environment Variables
|
|
250
|
+
|
|
251
|
+
| Variable | Default | Description |
|
|
252
|
+
|----------|---------|-------------|
|
|
253
|
+
| `UM_DB_HOST` | `localhost` | PostgreSQL host |
|
|
254
|
+
| `UM_DB_PORT` | `5432` | PostgreSQL port |
|
|
255
|
+
| `UM_DB_NAME` | `ultra_memory` | Database name |
|
|
256
|
+
| `UM_DB_USER` | System user | Database user |
|
|
257
|
+
| `UM_DB_PASSWORD` | Empty | Database password |
|
|
258
|
+
| `UM_MAX_INJECTIONS` | `5` | Max memories to inject |
|
|
259
|
+
| `UM_MIN_IMPORTANCE` | `2` | Min importance level |
|
|
260
|
+
| `UM_LLM_ENABLED` | `true` | Enable AI extraction |
|
|
261
|
+
| `UM_LLM_MODEL` | `gpt-4o-mini` | LLM model to use |
|
|
262
|
+
| `UM_LLM_API_KEY` | Empty | API key for LLM |
|
|
263
|
+
| `UM_LLM_BASE_URL` | `https://api.openai.com/v1` | LLM API base URL |
|
|
264
|
+
| `UM_LLM_SUMMARIZE` | `true` | Enable session summarization |
|
|
265
|
+
|
|
266
|
+
### OpenCode Configuration
|
|
267
|
+
|
|
268
|
+
Add to your `~/.config/opencode/opencode.json`:
|
|
269
|
+
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"plugin": ["super-memory"],
|
|
273
|
+
"lsp": true
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
225
279
|
## 📄 License
|
|
226
280
|
|
|
227
281
|
This project is licensed under the **MIT License**.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CA2BzC"}
|
package/dist/config.js
CHANGED
|
@@ -21,6 +21,13 @@ export function loadConfig() {
|
|
|
21
21
|
minImportance: parseInt(process.env.UM_MIN_IMPORTANCE || '2', 10),
|
|
22
22
|
autoExtract: process.env.UM_AUTO_EXTRACT !== 'false',
|
|
23
23
|
},
|
|
24
|
+
llm: {
|
|
25
|
+
enabled: process.env.UM_LLM_ENABLED !== 'false',
|
|
26
|
+
model: process.env.UM_LLM_MODEL || 'gpt-4o-mini',
|
|
27
|
+
apiKey: process.env.UM_LLM_API_KEY || '',
|
|
28
|
+
baseUrl: process.env.UM_LLM_BASE_URL || 'https://api.openai.com/v1',
|
|
29
|
+
summarizeSessions: process.env.UM_LLM_SUMMARIZE !== 'false',
|
|
30
|
+
},
|
|
24
31
|
};
|
|
25
32
|
}
|
|
26
33
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"}
|
|
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;QACD,GAAG,EAAE;YACH,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,OAAO;YAC/C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,aAAa;YAChD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;YACxC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,2BAA2B;YACnE,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,OAAO;SAC5D;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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":"AAAA,gFAAgF;AAChF,6EAA6E;AAC7E,uEAAuE;AACvE,kFAAkF;AAElF,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,IAAI,IAAI,GAAmB,IAAI,CAAC;AAChC,IAAI,OAAO,GAAwB,IAAI,CAAC;AACxC,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,IAAI,UAAU,GAAkB,IAAI,CAAC;AACrC,IAAI,WAAW,GAAyC,IAAI,CAAC;AAE7D,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,GAAG,MAAM,CAAC;AACnB,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,MAAqB;IAC3C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAChF,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,GAAG,GAAG,CAAC;IAEpC,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;QACjB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI;QACjB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI;QACjB,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ;QACzB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI;QACjB,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ;QACzB,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,cAAc;QAC1B,iBAAiB,EAAE,MAAM;QACzB,uBAAuB,EAAE,KAAK;KAC/B,CAAC,CAAC;IAEH,wEAAwE;IACxE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,KAAK,CAAC;YACf,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,IAAI,WAAW,EAAE,CAAC;QAChB,wDAAwD;QACxD,OAAO,WAAW;YAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,GAAG,IAAI,CAAC;QACd,UAAU,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAoC,CAAC;QAEnD,2DAA2D;QAC3D,IAAI,KAAK,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QAED,UAAU,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../src/hooks/event-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../src/hooks/event-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAKjD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CA6DnD"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// updates the memory system accordingly. Fire-and-forget to never block.
|
|
4
4
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
5
5
|
import { processMessage } from '../memory/processor.js';
|
|
6
|
+
import { createSession } from '../db/queries.js';
|
|
6
7
|
/**
|
|
7
8
|
* Create a handler for the `event` hook.
|
|
8
9
|
*
|
|
@@ -37,6 +38,14 @@ export function createEventHandler() {
|
|
|
37
38
|
case 'session.created': {
|
|
38
39
|
const sessionInfo = event.properties.info;
|
|
39
40
|
console.log(`[UltraMemory] Session created: ${sessionInfo.id} (${sessionInfo.title})`);
|
|
41
|
+
// Track session in database
|
|
42
|
+
try {
|
|
43
|
+
await createSession(sessionInfo.id);
|
|
44
|
+
console.log(`[UltraMemory] Session ${sessionInfo.id} saved to database`);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.error(`[UltraMemory] Failed to save session ${sessionInfo.id}:`, err);
|
|
48
|
+
}
|
|
40
49
|
break;
|
|
41
50
|
}
|
|
42
51
|
case 'session.updated': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../../src/hooks/event-handler.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uEAAuE;AACvE,yEAAyE;AACzE,iFAAiF;AAIjF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../../src/hooks/event-handler.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uEAAuE;AACvE,yEAAyE;AACzE,iFAAiF;AAIjF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,wDAAwD;QACxD,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;YACpC,IAAI,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;oBAAE,OAAO;gBAEpC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;wBAClC,+DAA+D;wBAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;4BAAE,OAAO;wBAEtC,gDAAgD;wBAChD,MAAM,WAAW,GAAG,+BAA+B,IAAI,CAAC,OAAO,GAAG,CAAC;wBAEnE,MAAM,cAAc,CAAC,WAAW,EAAE;4BAChC,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,MAAM,EAAE,OAAO;yBAChB,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;oBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;wBAC1C,OAAO,CAAC,GAAG,CACT,kCAAkC,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,KAAK,GAAG,CAC1E,CAAC;wBACF,4BAA4B;wBAC5B,IAAI,CAAC;4BACH,MAAM,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;4BACpC,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,CAAC,EAAE,oBAAoB,CAAC,CAAC;wBAC3E,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAChF,CAAC;wBACD,MAAM;oBACR,CAAC;oBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;wBAC1C,OAAO,CAAC,GAAG,CAAC,kCAAkC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;wBAChE,MAAM;oBACR,CAAC;oBAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;wBACzB,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;wBACvC,OAAO,CAAC,GAAG,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;wBAC7D,MAAM;oBACR,CAAC;oBAED;wBACE,MAAM;gBACV,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC;QAEF,6CAA6C;QAC7C,KAAK,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF;;GAEG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;CACpB,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,eAAe,CAAC,KAAY;IACnC,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../../src/hooks/message-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAWjD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../../src/hooks/message-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAWjD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAAC,cAAc,CAAC,CA8B5D"}
|
|
@@ -26,15 +26,18 @@ export function createMessageHandler() {
|
|
|
26
26
|
try {
|
|
27
27
|
const { sessionID } = input;
|
|
28
28
|
const { parts } = output;
|
|
29
|
+
console.log(`[UltraMemory] Hook chat.message triggered for session ${sessionID}`);
|
|
29
30
|
// Filter for text-type parts and extract their content
|
|
30
31
|
const textParts = parts.filter(isTextPart);
|
|
31
32
|
const content = textParts.map((p) => p.text).join('\n').trim();
|
|
32
33
|
if (!content)
|
|
33
34
|
return;
|
|
35
|
+
console.log(`[UltraMemory] Processing message (${content.length} chars) from session ${sessionID}`);
|
|
34
36
|
await processMessage(content, {
|
|
35
37
|
sessionId: sessionID,
|
|
36
38
|
source: 'chat',
|
|
37
39
|
});
|
|
40
|
+
console.log(`[UltraMemory] Message processed for session ${sessionID}`);
|
|
38
41
|
}
|
|
39
42
|
catch (err) {
|
|
40
43
|
console.error('[UltraMemory] message-handler error:', err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../../src/hooks/message-handler.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,iFAAiF;AAIjF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,SAAS,UAAU,CAAC,IAAU;IAC5B,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7B,wDAAwD;QACxD,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;YACpC,IAAI,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;gBAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;gBAEzB,uDAAuD;gBACvD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAE/D,IAAI,CAAC,OAAO;oBAAE,OAAO;gBAErB,MAAM,cAAc,CAAC,OAAO,EAAE;oBAC5B,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../../src/hooks/message-handler.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,iFAAiF;AAIjF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,SAAS,UAAU,CAAC,IAAU;IAC5B,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7B,wDAAwD;QACxD,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;YACpC,IAAI,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;gBAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;gBAEzB,OAAO,CAAC,GAAG,CAAC,yDAAyD,SAAS,EAAE,CAAC,CAAC;gBAElF,uDAAuD;gBACvD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAE/D,IAAI,CAAC,OAAO;oBAAE,OAAO;gBAErB,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,MAAM,wBAAwB,SAAS,EAAE,CAAC,CAAC;gBACpG,MAAM,cAAc,CAAC,OAAO,EAAE;oBAC5B,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,+CAA+C,SAAS,EAAE,CAAC,CAAC;YAC1E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC;QAEF,6CAA6C;QAC7C,KAAK,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -7,18 +7,11 @@ import type { PluginConfig } from '../types.js';
|
|
|
7
7
|
* AI has cross-session context about the user, project, and preferences.
|
|
8
8
|
*
|
|
9
9
|
* **Strategy:**
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
14
|
-
*
|
|
15
|
-
* - Respects `config.memory.maxInjections` and `config.memory.minImportance`
|
|
16
|
-
* to control how many memories are injected and their quality floor.
|
|
17
|
-
* - If a Super Memory section already exists in the system prompt array
|
|
18
|
-
* (e.g. from a previous invocation), it is replaced **in-place** rather
|
|
19
|
-
* than duplicated.
|
|
20
|
-
* - All errors are caught and logged — the hook **never throws**, so it
|
|
21
|
-
* cannot crash OpenCode.
|
|
10
|
+
* - Uses sessionID to fetch session-specific memories for context-aware recall.
|
|
11
|
+
* - Falls back to broad search if session context is insufficient.
|
|
12
|
+
* - Respects `config.memory.maxInjections` and `config.memory.minImportance`.
|
|
13
|
+
* - If a Super Memory section already exists, it is replaced in-place.
|
|
14
|
+
* - All errors are caught and logged — the hook **never throws**.
|
|
22
15
|
*
|
|
23
16
|
* @param config - Resolved plugin configuration
|
|
24
17
|
* @returns - The system transform hook function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-transform.d.ts","sourceRoot":"","sources":["../../src/hooks/system-transform.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkBhD
|
|
1
|
+
{"version":3,"file":"system-transform.d.ts","sourceRoot":"","sources":["../../src/hooks/system-transform.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkBhD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,GACnB,WAAW,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAyE1D"}
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
// retrieves the most relevant stored memories and appends them as context
|
|
7
7
|
// to every LLM request.
|
|
8
8
|
import { getContextForQuery } from '../memory/processor.js';
|
|
9
|
+
import { searchMemories } from '../db/queries.js';
|
|
9
10
|
// ─── Constants ────────────────────────────────────────────────────────────
|
|
10
11
|
const MEMORY_HEADER = '[Super Memory - Relevant Context]';
|
|
11
12
|
const MEMORY_FOOTER = '[End Super Memory]';
|
|
12
13
|
/**
|
|
13
14
|
* Broad search query used to fetch general high-importance memories.
|
|
14
|
-
*
|
|
15
|
-
* requiring the current user message (which is not available in this hook).
|
|
15
|
+
* Used as fallback when session-specific context is not available.
|
|
16
16
|
*/
|
|
17
17
|
const DEFAULT_SEARCH_QUERY = 'project context preferences decisions tech stack patterns workflow conventions';
|
|
18
18
|
// ─── Hook Factory ─────────────────────────────────────────────────────────
|
|
@@ -23,42 +23,61 @@ const DEFAULT_SEARCH_QUERY = 'project context preferences decisions tech stack p
|
|
|
23
23
|
* AI has cross-session context about the user, project, and preferences.
|
|
24
24
|
*
|
|
25
25
|
* **Strategy:**
|
|
26
|
-
* -
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* -
|
|
30
|
-
*
|
|
31
|
-
* - Respects `config.memory.maxInjections` and `config.memory.minImportance`
|
|
32
|
-
* to control how many memories are injected and their quality floor.
|
|
33
|
-
* - If a Super Memory section already exists in the system prompt array
|
|
34
|
-
* (e.g. from a previous invocation), it is replaced **in-place** rather
|
|
35
|
-
* than duplicated.
|
|
36
|
-
* - All errors are caught and logged — the hook **never throws**, so it
|
|
37
|
-
* cannot crash OpenCode.
|
|
26
|
+
* - Uses sessionID to fetch session-specific memories for context-aware recall.
|
|
27
|
+
* - Falls back to broad search if session context is insufficient.
|
|
28
|
+
* - Respects `config.memory.maxInjections` and `config.memory.minImportance`.
|
|
29
|
+
* - If a Super Memory section already exists, it is replaced in-place.
|
|
30
|
+
* - All errors are caught and logged — the hook **never throws**.
|
|
38
31
|
*
|
|
39
32
|
* @param config - Resolved plugin configuration
|
|
40
33
|
* @returns - The system transform hook function
|
|
41
34
|
*/
|
|
42
35
|
export function createSystemTransform(config) {
|
|
43
|
-
return async (
|
|
36
|
+
return async (input, output) => {
|
|
44
37
|
try {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
console.log('[UltraMemory] Hook experimental.chat.system.transform triggered');
|
|
39
|
+
const sessionID = input.sessionID;
|
|
40
|
+
let context = '';
|
|
41
|
+
// Step 1: Try to get session-specific context using sessionID
|
|
42
|
+
if (sessionID) {
|
|
43
|
+
try {
|
|
44
|
+
// Search for memories from this specific session
|
|
45
|
+
const sessionMemories = await searchMemories({
|
|
46
|
+
query: '',
|
|
47
|
+
project_id: undefined,
|
|
48
|
+
limit: config.memory.maxInjections,
|
|
49
|
+
});
|
|
50
|
+
// Filter to only memories from this session
|
|
51
|
+
const sessionSpecific = sessionMemories.filter((m) => m.memory.session_id === sessionID && m.memory.importance >= config.memory.minImportance);
|
|
52
|
+
if (sessionSpecific.length > 0) {
|
|
53
|
+
const { formatMemoriesForPrompt } = await import('../memory/search.js');
|
|
54
|
+
context = formatMemoriesForPrompt(sessionSpecific);
|
|
55
|
+
console.log(`[UltraMemory] Found ${sessionSpecific.length} session-specific memories`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.error('[UltraMemory] Failed to fetch session memories:', err);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Step 2: If no session-specific context, use broad search
|
|
63
|
+
if (!context || context.trim().length === 0) {
|
|
64
|
+
console.log('[UltraMemory] Using broad search for memories');
|
|
65
|
+
context = await getContextForQuery(DEFAULT_SEARCH_QUERY, {
|
|
66
|
+
maxInjections: config.memory.maxInjections,
|
|
67
|
+
minImportance: config.memory.minImportance,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
52
70
|
// No relevant memories found — leave the system prompt unchanged.
|
|
53
71
|
if (!context || context.trim().length === 0) {
|
|
72
|
+
console.log('[UltraMemory] No relevant memories found for injection');
|
|
54
73
|
return;
|
|
55
74
|
}
|
|
75
|
+
console.log(`[UltraMemory] Injecting memories (${context.length} chars) into system prompt`);
|
|
56
76
|
// Build the memory section as a single, clean markdown block.
|
|
57
77
|
const memorySection = `\n${MEMORY_HEADER}\n${context}\n${MEMORY_FOOTER}`;
|
|
58
78
|
// Check if there is already a Super Memory section in the prompt
|
|
59
79
|
// array. If so, replace it in-place to prevent duplication across
|
|
60
|
-
// multiple hook invocations
|
|
61
|
-
// normal OpenCode operation but guards against edge cases).
|
|
80
|
+
// multiple hook invocations.
|
|
62
81
|
const existingIdx = output.system.findIndex((s) => s.includes(MEMORY_HEADER));
|
|
63
82
|
if (existingIdx >= 0) {
|
|
64
83
|
output.system[existingIdx] = memorySection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-transform.js","sourceRoot":"","sources":["../../src/hooks/system-transform.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wEAAwE;AACxE,gCAAgC;AAChC,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,wBAAwB;AAIxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"system-transform.js","sourceRoot":"","sources":["../../src/hooks/system-transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PluginConfig, MemoryRecord, MemorySearchResult } from '../types.js';
|
|
2
|
+
export interface EmbeddingResult {
|
|
3
|
+
id: string;
|
|
4
|
+
content: string;
|
|
5
|
+
similarity: number;
|
|
6
|
+
memory: MemoryRecord;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Search memories using semantic similarity with embeddings.
|
|
10
|
+
* Falls back to full-text search if embeddings fail.
|
|
11
|
+
*/
|
|
12
|
+
export declare function searchWithEmbeddings(query: string, config: PluginConfig, options?: {
|
|
13
|
+
limit?: number;
|
|
14
|
+
minSimilarity?: number;
|
|
15
|
+
projectId?: string;
|
|
16
|
+
}): Promise<MemorySearchResult[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Store an embedding for a memory record.
|
|
19
|
+
* Returns the embedding vector for caching.
|
|
20
|
+
*/
|
|
21
|
+
export declare function storeEmbedding(memoryId: string, content: string, config: PluginConfig): Promise<number[]>;
|
|
22
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/memory/embeddings.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKlF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAiED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA8D/B;AAID;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB"}
|