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.
Files changed (56) hide show
  1. package/README.md +56 -2
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +7 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/db/connection.d.ts.map +1 -1
  6. package/dist/db/connection.js +86 -6
  7. package/dist/db/connection.js.map +1 -1
  8. package/dist/hooks/event-handler.d.ts.map +1 -1
  9. package/dist/hooks/event-handler.js +9 -0
  10. package/dist/hooks/event-handler.js.map +1 -1
  11. package/dist/hooks/message-handler.d.ts.map +1 -1
  12. package/dist/hooks/message-handler.js +3 -0
  13. package/dist/hooks/message-handler.js.map +1 -1
  14. package/dist/hooks/system-transform.d.ts +5 -12
  15. package/dist/hooks/system-transform.d.ts.map +1 -1
  16. package/dist/hooks/system-transform.js +43 -24
  17. package/dist/hooks/system-transform.js.map +1 -1
  18. package/dist/memory/embeddings.d.ts +22 -0
  19. package/dist/memory/embeddings.d.ts.map +1 -0
  20. package/dist/memory/embeddings.js +139 -0
  21. package/dist/memory/embeddings.js.map +1 -0
  22. package/dist/memory/extractor.d.ts.map +1 -1
  23. package/dist/memory/extractor.js +5 -1
  24. package/dist/memory/extractor.js.map +1 -1
  25. package/dist/memory/index.d.ts +13 -1
  26. package/dist/memory/index.d.ts.map +1 -1
  27. package/dist/memory/index.js +7 -1
  28. package/dist/memory/index.js.map +1 -1
  29. package/dist/memory/llm-extractor.d.ts +22 -0
  30. package/dist/memory/llm-extractor.d.ts.map +1 -0
  31. package/dist/memory/llm-extractor.js +117 -0
  32. package/dist/memory/llm-extractor.js.map +1 -0
  33. package/dist/memory/pattern-detector.d.ts +28 -0
  34. package/dist/memory/pattern-detector.d.ts.map +1 -0
  35. package/dist/memory/pattern-detector.js +221 -0
  36. package/dist/memory/pattern-detector.js.map +1 -0
  37. package/dist/memory/processor.d.ts +7 -1
  38. package/dist/memory/processor.d.ts.map +1 -1
  39. package/dist/memory/processor.js +112 -15
  40. package/dist/memory/processor.js.map +1 -1
  41. package/dist/memory/project-context.d.ts +24 -0
  42. package/dist/memory/project-context.d.ts.map +1 -0
  43. package/dist/memory/project-context.js +186 -0
  44. package/dist/memory/project-context.js.map +1 -0
  45. package/dist/memory/suggestions.d.ts +21 -0
  46. package/dist/memory/suggestions.d.ts.map +1 -0
  47. package/dist/memory/suggestions.js +205 -0
  48. package/dist/memory/suggestions.js.map +1 -0
  49. package/dist/memory/user-profile.d.ts +24 -0
  50. package/dist/memory/user-profile.d.ts.map +1 -0
  51. package/dist/memory/user-profile.js +220 -0
  52. package/dist/memory/user-profile.js.map +1 -0
  53. package/dist/types.d.ts +8 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +5 -5
  56. 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
- │ │ └── ... # OpenCode hook handlers (WIP)
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 (WIP)
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**.
@@ -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,CAoBzC"}
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
@@ -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":"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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"}
@@ -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;AAIjD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAsDnD"}
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;AAExD;;;;;;;;;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,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
+ {"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,CA0B5D"}
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;YACL,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"}
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
- * - The hook input does **not** include the current user message, so we
11
- * use a broad search query (`DEFAULT_SEARCH_QUERY`) to fetch high-
12
- * importance memories across all types.
13
- * - The `model` parameter is ignored memories are injected regardless
14
- * of which LLM is being used.
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;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,GACnB,WAAW,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAwC1D"}
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
- * Uses broad, inclusive terms to match across all memory types without
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
- * - The hook input does **not** include the current user message, so we
27
- * use a broad search query (`DEFAULT_SEARCH_QUERY`) to fetch high-
28
- * importance memories across all types.
29
- * - The `model` parameter is ignored memories are injected regardless
30
- * of which LLM is being used.
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 (_input, output) => {
36
+ return async (input, output) => {
44
37
  try {
45
- // Fetch relevant memories using a broad query. This ensures the AI
46
- // always receives context about the project, user preferences, tech
47
- // stack, decisions, and workflows regardless of the current message.
48
- const context = await getContextForQuery(DEFAULT_SEARCH_QUERY, {
49
- maxInjections: config.memory.maxInjections,
50
- minImportance: config.memory.minImportance,
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 (defensive — should not happen in
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;AAE5D,6EAA6E;AAE7E,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAC1D,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C;;;;GAIG;AACH,MAAM,oBAAoB,GACxB,gFAAgF,CAAC;AAEnF,6EAA6E;AAE7E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB;IAEpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,mEAAmE;YACnE,oEAAoE;YACpE,qEAAqE;YACrE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,oBAAoB,EAAE;gBAC7D,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa;gBAC1C,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa;aAC3C,CAAC,CAAC;YAEH,kEAAkE;YAClE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,8DAA8D;YAC9D,MAAM,aAAa,GAAG,KAAK,aAAa,KAAK,OAAO,KAAK,aAAa,EAAE,CAAC;YAEzE,iEAAiE;YACjE,kEAAkE;YAClE,8DAA8D;YAC9D,4DAA4D;YAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAChD,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC1B,CAAC;YAEF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wDAAwD;YACxD,OAAO,CAAC,KAAK,CACX,2DAA2D,EAC3D,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,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"}