engram-mcp-server 1.2.9 → 1.4.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 +119 -23
- package/dist/constants.d.ts +11 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +13 -0
- package/dist/constants.js.map +1 -1
- package/dist/database.d.ts +9 -0
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +16 -0
- package/dist/database.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/installer/config-writer.d.ts +11 -2
- package/dist/installer/config-writer.d.ts.map +1 -1
- package/dist/installer/config-writer.js +28 -3
- package/dist/installer/config-writer.js.map +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +91 -22
- package/dist/installer/index.js.map +1 -1
- package/dist/repositories/changes.repo.d.ts.map +1 -1
- package/dist/repositories/changes.repo.js +5 -3
- package/dist/repositories/changes.repo.js.map +1 -1
- package/dist/repositories/config.repo.d.ts +5 -0
- package/dist/repositories/config.repo.d.ts.map +1 -1
- package/dist/repositories/config.repo.js +8 -0
- package/dist/repositories/config.repo.js.map +1 -1
- package/dist/repositories/decisions.repo.d.ts +8 -0
- package/dist/repositories/decisions.repo.d.ts.map +1 -1
- package/dist/repositories/decisions.repo.js +23 -0
- package/dist/repositories/decisions.repo.js.map +1 -1
- package/dist/repositories/file-notes.repo.d.ts +9 -0
- package/dist/repositories/file-notes.repo.d.ts.map +1 -1
- package/dist/repositories/file-notes.repo.js +22 -4
- package/dist/repositories/file-notes.repo.js.map +1 -1
- package/dist/response.d.ts +1 -0
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js.map +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/update.service.d.ts +29 -0
- package/dist/services/update.service.d.ts.map +1 -0
- package/dist/services/update.service.js +166 -0
- package/dist/services/update.service.js.map +1 -0
- package/dist/tools/backup.d.ts.map +1 -1
- package/dist/tools/backup.js +20 -45
- package/dist/tools/backup.js.map +1 -1
- package/dist/tools/changes.d.ts.map +1 -1
- package/dist/tools/changes.js +24 -33
- package/dist/tools/changes.js.map +1 -1
- package/dist/tools/compaction.d.ts.map +1 -1
- package/dist/tools/compaction.js +19 -72
- package/dist/tools/compaction.js.map +1 -1
- package/dist/tools/conventions.d.ts.map +1 -1
- package/dist/tools/conventions.js +9 -18
- package/dist/tools/conventions.js.map +1 -1
- package/dist/tools/decisions.d.ts.map +1 -1
- package/dist/tools/decisions.js +71 -45
- package/dist/tools/decisions.js.map +1 -1
- package/dist/tools/export-import.d.ts.map +1 -1
- package/dist/tools/export-import.js +21 -35
- package/dist/tools/export-import.js.map +1 -1
- package/dist/tools/file-notes.d.ts.map +1 -1
- package/dist/tools/file-notes.js +58 -36
- package/dist/tools/file-notes.js.map +1 -1
- package/dist/tools/intelligence.d.ts.map +1 -1
- package/dist/tools/intelligence.js +109 -164
- package/dist/tools/intelligence.js.map +1 -1
- package/dist/tools/milestones.d.ts.map +1 -1
- package/dist/tools/milestones.js +6 -10
- package/dist/tools/milestones.js.map +1 -1
- package/dist/tools/scheduler.d.ts.map +1 -1
- package/dist/tools/scheduler.js +42 -89
- package/dist/tools/scheduler.js.map +1 -1
- package/dist/tools/sessions.d.ts.map +1 -1
- package/dist/tools/sessions.js +131 -226
- package/dist/tools/sessions.js.map +1 -1
- package/dist/tools/stats.d.ts.map +1 -1
- package/dist/tools/stats.js +169 -8
- package/dist/tools/stats.js.map +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +9 -20
- package/dist/tools/tasks.js.map +1 -1
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +18 -0
- package/dist/utils.js.map +1 -1
- package/package.json +60 -55
- package/scripts/inject-release-notes.js +66 -0
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
- [Overview](#overview)
|
|
20
20
|
- [Why Engram?](#why-engram)
|
|
21
21
|
- [Installation (Auto & Manual)](#installation)
|
|
22
|
-
- [✨ What's New in v1.
|
|
22
|
+
- [✨ What's New in v1.4.0](#-whats-new-in-v140)
|
|
23
23
|
- [Features](#features)
|
|
24
24
|
- [Architecture](#architecture)
|
|
25
25
|
- [Tools Reference](#tools-reference)
|
|
@@ -50,13 +50,16 @@ Engram solves this by providing a **persistent brain** using a native SQLite (WA
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## ✨ What's New in v1.
|
|
53
|
+
## ✨ What's New in v1.4.0
|
|
54
54
|
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
-
|
|
55
|
+
- **Version-Tracked Installs:** Every IDE config entry is now stamped with `_engram_version`. The installer detects four distinct states — fresh install, already up to date, upgrade from a known version, and legacy adoption (pre-tracking era entries) — and reports each one clearly.
|
|
56
|
+
- **Background Auto-Update Check:** Engram silently checks for new versions after server startup using a fire-and-forget async check (never blocks startup or any tool call). If a newer version is found, the agent is notified via `engram_start_session` and can tell the user.
|
|
57
|
+
- **User-Controlled Update Flow:** Users choose how to act on an update via agent commands — update now, skip this version forever, postpone for N days (`7d`, `2w`, `1m`), or disable checks entirely. Nothing is automatic; the user is always in control.
|
|
58
|
+
- **Two-Source Changelog Delivery:** Update notifications include the release changelog fetched from the npm registry (primary) or GitHub Releases API (fallback). Both sources are tried with a 5-second timeout; network failures are silent.
|
|
59
|
+
- **`--check` CLI Flag:** `npx -y engram-mcp-server install --check` shows the installed version for each detected IDE, compares against npm latest, and correctly handles pre-release scenarios (running ahead of the published version).
|
|
60
|
+
- **`engram_stats` Version & Update Status:** Stats now include `server_version`, `update_status` (available version + releases URL if an update is pending), `auto_update_check` state, and `last_update_check` timestamp.
|
|
61
|
+
- **`engram_config` Update Keys:** Four new configurable keys — `auto_update_check`, `auto_update_skip_version`, `auto_update_remind_after` (accepts durations like `7d`, `2w`, `1m`), and `auto_update_notify_level` (`"major"` | `"minor"` | `"patch"`).
|
|
62
|
+
- **Pre-publish Release Notes Injection:** A new `scripts/inject-release-notes.js` script runs automatically before every `npm publish`. It extracts the current version's section from `RELEASE_NOTES.md` and injects it into `package.json`, enabling single-HTTP-call changelog delivery via the npm registry API.
|
|
60
63
|
|
|
61
64
|
---
|
|
62
65
|
|
|
@@ -93,6 +96,11 @@ npx -y engram-mcp-server install --ide vscode --yes
|
|
|
93
96
|
npx -y engram-mcp-server install --remove --ide claudecode
|
|
94
97
|
```
|
|
95
98
|
|
|
99
|
+
**Check installed version vs npm latest:**
|
|
100
|
+
```bash
|
|
101
|
+
npx -y engram-mcp-server install --check
|
|
102
|
+
```
|
|
103
|
+
|
|
96
104
|
### Option 2: Global Install (Windows Fallback)
|
|
97
105
|
|
|
98
106
|
If `npx -y engram-mcp-server --install` fails on Windows, install globally first then run the installer:
|
|
@@ -257,22 +265,26 @@ In the extension settings → MCP Servers:
|
|
|
257
265
|
graph TB
|
|
258
266
|
AI([AI Agent / IDE])
|
|
259
267
|
MCP([MCP Protocol Server])
|
|
260
|
-
|
|
268
|
+
NPM([npm Registry / GitHub])
|
|
269
|
+
|
|
261
270
|
subgraph Core Services
|
|
262
271
|
TS[Task Service]
|
|
263
272
|
CS[Compaction Service]
|
|
264
273
|
GS[Git Tracking Service]
|
|
265
274
|
ES[Event Trigger Service]
|
|
275
|
+
US[Update Service]
|
|
266
276
|
end
|
|
267
|
-
|
|
277
|
+
|
|
268
278
|
subgraph Data Layer
|
|
269
279
|
DB[(SQLite WAL)]
|
|
270
280
|
FTS[FTS5 Search Index]
|
|
271
281
|
end
|
|
272
|
-
|
|
282
|
+
|
|
273
283
|
AI <-->|JSON-RPC| MCP
|
|
274
|
-
MCP --> TS & CS & GS & ES
|
|
284
|
+
MCP --> TS & CS & GS & ES & US
|
|
275
285
|
TS & CS & GS & ES --> DB
|
|
286
|
+
US -->|async, fire-and-forget| NPM
|
|
287
|
+
US --> DB
|
|
276
288
|
DB --> FTS
|
|
277
289
|
```
|
|
278
290
|
|
|
@@ -304,6 +316,8 @@ Engram exposes 30+ tools. Here are the core highlights of what an agent can do f
|
|
|
304
316
|
| `engram_search` | FTS5-powered full-text search across all memories. |
|
|
305
317
|
| `engram_scan_project` | Scan and cache project structure automatically. |
|
|
306
318
|
| `engram_backup` | Create a database backup to any synced folder. |
|
|
319
|
+
| `engram_config` | Read or update runtime configuration values. |
|
|
320
|
+
| `engram_health` | Run database health checks and report diagnostics. |
|
|
307
321
|
|
|
308
322
|
*(Run the agent and ask to list available tools for the complete reference).*
|
|
309
323
|
|
|
@@ -311,27 +325,109 @@ Engram exposes 30+ tools. Here are the core highlights of what an agent can do f
|
|
|
311
325
|
|
|
312
326
|
## Using with AI Agents
|
|
313
327
|
|
|
314
|
-
|
|
328
|
+
Add the following to your agent's system prompt or custom instructions (Cursor Rules, `.github/copilot-instructions.md`, `CLAUDE.md`, etc.). The goal is to ensure the agent consults Engram *before* doing work — not just after — which is where most of the token and time savings come from.
|
|
315
329
|
|
|
316
330
|
```text
|
|
317
|
-
You have access to Engram, a persistent memory MCP server.
|
|
331
|
+
You have access to Engram, a persistent memory MCP server. It stores everything
|
|
332
|
+
learned about this project across all sessions: file notes, architectural decisions,
|
|
333
|
+
conventions, tasks, and change history. Use it to avoid re-reading files you have
|
|
334
|
+
already analysed, re-debating settled decisions, and re-discovering known context.
|
|
335
|
+
|
|
336
|
+
━━━ SESSION START ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
337
|
+
|
|
338
|
+
ALWAYS call engram_start_session first — before reading any file or taking any action.
|
|
339
|
+
Act on everything it returns:
|
|
340
|
+
|
|
341
|
+
previous_session.summary → Read this immediately. Do not re-explore what is already known.
|
|
342
|
+
active_decisions → These are binding. Follow them; do not re-debate them.
|
|
343
|
+
To change one, supersede it with a new engram_record_decision call.
|
|
344
|
+
active_conventions → Enforce these in every file you touch this session.
|
|
345
|
+
open_tasks → These are pending work items. Ask the user which to focus on if unclear.
|
|
346
|
+
update_available (if set) → Immediately tell the user:
|
|
347
|
+
"Engram v{available_version} is available (you have {installed_version}).
|
|
348
|
+
Changes: {changelog}
|
|
349
|
+
Would you like to update, skip this version, or postpone?"
|
|
350
|
+
Then act on their choice:
|
|
351
|
+
Update → instruct them to run: npx -y engram-mcp-server install
|
|
352
|
+
Skip → engram_config action=set key=auto_update_skip_version value={version}
|
|
353
|
+
Postpone 7d → engram_config action=set key=auto_update_remind_after value=7d
|
|
354
|
+
Disable → engram_config action=set key=auto_update_check value=false
|
|
355
|
+
|
|
356
|
+
━━━ BEFORE READING OR REVIEWING ANY FILE ━━━━━━━━━━━━━━━━━━━
|
|
357
|
+
|
|
358
|
+
ALWAYS check Engram before opening a file:
|
|
359
|
+
|
|
360
|
+
engram_get_file_notes({ file_paths: ["path/to/file.ts"] })
|
|
361
|
+
|
|
362
|
+
If notes EXIST:
|
|
363
|
+
Use the stored purpose, dependencies, layer, and complexity to answer
|
|
364
|
+
questions or orient yourself WITHOUT reading the file.
|
|
365
|
+
Only open the file when you need the actual source code for editing or
|
|
366
|
+
a detailed line-by-line analysis.
|
|
367
|
+
|
|
368
|
+
If notes DO NOT EXIST:
|
|
369
|
+
1. Read the file.
|
|
370
|
+
2. Immediately call engram_set_file_notes with:
|
|
371
|
+
file_path, purpose, dependencies, dependents, layer, complexity, notes
|
|
372
|
+
3. For multiple files reviewed in one pass, batch them in a single call.
|
|
373
|
+
|
|
374
|
+
If notes are STALE (you see evidence the file changed significantly since
|
|
375
|
+
the notes were last recorded — e.g., from git log or change history):
|
|
376
|
+
Re-read the file and update the notes.
|
|
377
|
+
|
|
378
|
+
Rule: Never read a file you have already analysed in a previous session
|
|
379
|
+
without first checking whether Engram already knows it.
|
|
380
|
+
|
|
381
|
+
━━━ BEFORE MAKING ANY DESIGN DECISION ━━━━━━━━━━━━━━━━━━━━━━
|
|
382
|
+
|
|
383
|
+
Before choosing an implementation approach, search for an existing decision:
|
|
384
|
+
|
|
385
|
+
engram_search({ query: "relevant keywords", scope: "decisions" })
|
|
386
|
+
|
|
387
|
+
If a matching decision EXISTS → follow it.
|
|
388
|
+
If you believe it should change → explain why, then supersede it:
|
|
389
|
+
engram_record_decision({ decision: "...", supersedes: <id> })
|
|
390
|
+
|
|
391
|
+
If NO decision exists → make the call and record it:
|
|
392
|
+
engram_record_decision({ decision, rationale, affected_files, tags })
|
|
393
|
+
|
|
394
|
+
━━━ WHEN MODIFYING FILES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
395
|
+
|
|
396
|
+
After every meaningful change, record it. Batch where possible:
|
|
397
|
+
|
|
398
|
+
engram_record_change({ changes: [{
|
|
399
|
+
file_path,
|
|
400
|
+
change_type, // created | modified | refactored | deleted | renamed | moved | config_changed
|
|
401
|
+
description, // What changed AND why — not just the action. Future sessions read this.
|
|
402
|
+
impact_scope // local | module | cross_module | global
|
|
403
|
+
}]})
|
|
318
404
|
|
|
319
|
-
|
|
320
|
-
This loads your context: previous session summary, changes, decisions, conventions, and tasks.
|
|
405
|
+
━━━ WHEN YOU DON'T KNOW SOMETHING ━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
321
406
|
|
|
322
|
-
|
|
323
|
-
|
|
407
|
+
Before asking the user, search Engram first. The user may have already explained
|
|
408
|
+
this to a previous session:
|
|
324
409
|
|
|
325
|
-
|
|
410
|
+
engram_search({ query: "keywords" }) ← general search
|
|
411
|
+
engram_scan_project() ← project structure questions
|
|
412
|
+
engram_get_decisions() ← architecture / approach questions
|
|
413
|
+
engram_get_conventions() ← style / pattern questions
|
|
414
|
+
engram_get_file_notes({ file_paths: [] }) ← what is known about specific files
|
|
326
415
|
|
|
327
|
-
|
|
328
|
-
rationale, and affected files.
|
|
416
|
+
━━━ SESSION END ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
329
417
|
|
|
330
|
-
|
|
418
|
+
Before ending every session:
|
|
331
419
|
|
|
332
|
-
|
|
420
|
+
1. Record all file changes not yet recorded (engram_record_change).
|
|
421
|
+
2. Create tasks for anything incomplete or blocked:
|
|
422
|
+
engram_create_task({ title, description, priority })
|
|
423
|
+
3. Call engram_end_session with a summary that includes:
|
|
424
|
+
• Exactly what was done — file names, function names, specific changes made
|
|
425
|
+
• What is pending or blocked, and why
|
|
426
|
+
• Any new patterns, gotchas, or constraints discovered this session
|
|
427
|
+
• Which tasks were completed or partially done
|
|
333
428
|
|
|
334
|
-
|
|
429
|
+
A precise summary is what allows the next session to start immediately
|
|
430
|
+
without re-reading files or re-asking the user for context.
|
|
335
431
|
```
|
|
336
432
|
|
|
337
433
|
---
|
package/dist/constants.d.ts
CHANGED
|
@@ -17,5 +17,16 @@ export declare const DEFAULT_RETENTION_DAYS = 90;
|
|
|
17
17
|
export declare const MAX_BACKUP_COUNT = 10;
|
|
18
18
|
export declare const EXCLUDED_DIRS: Set<string>;
|
|
19
19
|
export declare const PROJECT_MARKERS: string[];
|
|
20
|
+
export declare const NPM_REGISTRY_URL = "https://registry.npmjs.org/engram-mcp-server/latest";
|
|
21
|
+
export declare const GITHUB_REPO = "keggan-std/Engram";
|
|
22
|
+
export declare const GITHUB_RELEASES_URL = "https://github.com/keggan-std/Engram/releases";
|
|
23
|
+
export declare const GITHUB_RELEASES_API_URL = "https://api.github.com/repos/keggan-std/Engram/releases/latest";
|
|
24
|
+
export declare const CFG_AUTO_UPDATE_CHECK = "auto_update_check";
|
|
25
|
+
export declare const CFG_AUTO_UPDATE_LAST_CHECK = "auto_update_last_check";
|
|
26
|
+
export declare const CFG_AUTO_UPDATE_AVAILABLE = "auto_update_available";
|
|
27
|
+
export declare const CFG_AUTO_UPDATE_CHANGELOG = "auto_update_changelog";
|
|
28
|
+
export declare const CFG_AUTO_UPDATE_SKIP_VERSION = "auto_update_skip_version";
|
|
29
|
+
export declare const CFG_AUTO_UPDATE_REMIND_AFTER = "auto_update_remind_after";
|
|
30
|
+
export declare const CFG_AUTO_UPDATE_NOTIFY_LEVEL = "auto_update_notify_level";
|
|
20
31
|
export declare const LAYER_PATTERNS: Record<string, RegExp[]>;
|
|
21
32
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,cAAc,EAAE,MAAqB,CAAC;AACnD,eAAO,MAAM,WAAW,WAAW,CAAC;AAGpC,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,UAAU,IAAI,CAAC;AAG5B,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAGnC,eAAO,MAAM,aAAa,aAqBxB,CAAC;AAGH,eAAO,MAAM,eAAe,UAmB3B,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAYnD,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,cAAc,EAAE,MAAqB,CAAC;AACnD,eAAO,MAAM,WAAW,WAAW,CAAC;AAGpC,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,UAAU,IAAI,CAAC;AAG5B,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAGnC,eAAO,MAAM,aAAa,aAqBxB,CAAC;AAGH,eAAO,MAAM,eAAe,UAmB3B,CAAC;AAGF,eAAO,MAAM,gBAAgB,wDAAwD,CAAC;AACtF,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,mBAAmB,kDAAkD,CAAC;AACnF,eAAO,MAAM,uBAAuB,mEAAmE,CAAC;AAGxG,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,0BAA0B,2BAA2B,CAAC;AACnE,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AACjE,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AACjE,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AAGvE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAYnD,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -69,6 +69,19 @@ export const PROJECT_MARKERS = [
|
|
|
69
69
|
"Gemfile",
|
|
70
70
|
"composer.json",
|
|
71
71
|
];
|
|
72
|
+
// Update check
|
|
73
|
+
export const NPM_REGISTRY_URL = "https://registry.npmjs.org/engram-mcp-server/latest";
|
|
74
|
+
export const GITHUB_REPO = "keggan-std/Engram";
|
|
75
|
+
export const GITHUB_RELEASES_URL = "https://github.com/keggan-std/Engram/releases";
|
|
76
|
+
export const GITHUB_RELEASES_API_URL = "https://api.github.com/repos/keggan-std/Engram/releases/latest";
|
|
77
|
+
// Config keys — update management
|
|
78
|
+
export const CFG_AUTO_UPDATE_CHECK = "auto_update_check";
|
|
79
|
+
export const CFG_AUTO_UPDATE_LAST_CHECK = "auto_update_last_check";
|
|
80
|
+
export const CFG_AUTO_UPDATE_AVAILABLE = "auto_update_available";
|
|
81
|
+
export const CFG_AUTO_UPDATE_CHANGELOG = "auto_update_changelog";
|
|
82
|
+
export const CFG_AUTO_UPDATE_SKIP_VERSION = "auto_update_skip_version";
|
|
83
|
+
export const CFG_AUTO_UPDATE_REMIND_AFTER = "auto_update_remind_after";
|
|
84
|
+
export const CFG_AUTO_UPDATE_NOTIFY_LEVEL = "auto_update_notify_level"; // "major" | "minor" | "patch"
|
|
72
85
|
// Architecture layer detection patterns
|
|
73
86
|
export const LAYER_PATTERNS = {
|
|
74
87
|
ui: [/\/(ui|views?|screens?|pages?|components?|widgets?)\//i, /\.(jsx|tsx|vue|svelte)$/],
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/database.d.ts
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import type { Database as DatabaseType } from "better-sqlite3";
|
|
2
2
|
import { type Repositories } from "./repositories/index.js";
|
|
3
|
+
import { CompactionService, ProjectScanService, GitService, EventTriggerService, UpdateService } from "./services/index.js";
|
|
4
|
+
export interface Services {
|
|
5
|
+
compaction: CompactionService;
|
|
6
|
+
scan: ProjectScanService;
|
|
7
|
+
git: GitService;
|
|
8
|
+
events: EventTriggerService;
|
|
9
|
+
update: UpdateService;
|
|
10
|
+
}
|
|
3
11
|
export declare function initDatabase(projectRoot: string): Promise<DatabaseType>;
|
|
4
12
|
export declare function getDb(): DatabaseType;
|
|
5
13
|
export declare function getRepos(): Repositories;
|
|
14
|
+
export declare function getServices(): Services;
|
|
6
15
|
export declare function getProjectRoot(): string;
|
|
7
16
|
export declare function getDbPath(): string;
|
|
8
17
|
/**
|
package/dist/database.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK/D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK/D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG5H,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,kBAAkB,CAAC;IACzB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,aAAa,CAAC;CACvB;AAUD,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAgC7E;AAED,wBAAgB,KAAK,IAAI,YAAY,CAGpC;AAED,wBAAgB,QAAQ,IAAI,YAAY,CAGvC;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAGtC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAkBD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAIvF;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK5F;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAI/E;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,GAAG,IAAI,CAQvF;AAID,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAGnD;AAED,wBAAgB,uBAAuB,IAAI;IACzC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;CAC1E,GAAG,IAAI,CAWP;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAIjC"}
|
package/dist/database.js
CHANGED
|
@@ -7,8 +7,11 @@ import * as path from "path";
|
|
|
7
7
|
import { DB_DIR_NAME, DB_FILE_NAME, BACKUP_DIR_NAME } from "./constants.js";
|
|
8
8
|
import { runMigrations } from "./migrations.js";
|
|
9
9
|
import { createRepositories } from "./repositories/index.js";
|
|
10
|
+
import { CompactionService, ProjectScanService, GitService, EventTriggerService, UpdateService } from "./services/index.js";
|
|
11
|
+
import { SERVER_VERSION } from "./constants.js";
|
|
10
12
|
let _db = null;
|
|
11
13
|
let _repos = null;
|
|
14
|
+
let _services = null;
|
|
12
15
|
let _projectRoot = process.cwd();
|
|
13
16
|
let _dbPath = "";
|
|
14
17
|
// ─── Initialization ──────────────────────────────────────────────────
|
|
@@ -29,6 +32,14 @@ export async function initDatabase(projectRoot) {
|
|
|
29
32
|
runMigrations(_db);
|
|
30
33
|
// Initialize repositories
|
|
31
34
|
_repos = createRepositories(_db);
|
|
35
|
+
// Initialize services
|
|
36
|
+
_services = {
|
|
37
|
+
compaction: new CompactionService(_db, _repos),
|
|
38
|
+
scan: new ProjectScanService(_repos),
|
|
39
|
+
git: new GitService(projectRoot),
|
|
40
|
+
events: new EventTriggerService(_repos),
|
|
41
|
+
update: new UpdateService(_repos, SERVER_VERSION),
|
|
42
|
+
};
|
|
32
43
|
return _db;
|
|
33
44
|
}
|
|
34
45
|
export function getDb() {
|
|
@@ -41,6 +52,11 @@ export function getRepos() {
|
|
|
41
52
|
throw new Error("Repositories not initialized. Call initDatabase() first.");
|
|
42
53
|
return _repos;
|
|
43
54
|
}
|
|
55
|
+
export function getServices() {
|
|
56
|
+
if (!_services)
|
|
57
|
+
throw new Error("Services not initialized. Call initDatabase() first.");
|
|
58
|
+
return _services;
|
|
59
|
+
}
|
|
44
60
|
export function getProjectRoot() {
|
|
45
61
|
return _projectRoot;
|
|
46
62
|
}
|
package/dist/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AACzE,+EAA+E;AAE/E,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -40,6 +40,7 @@ async function main() {
|
|
|
40
40
|
if (args.includes("install") ||
|
|
41
41
|
args.includes("--install") ||
|
|
42
42
|
args.includes("--list") ||
|
|
43
|
+
args.includes("--check") ||
|
|
43
44
|
args.includes("--help") ||
|
|
44
45
|
args.includes("-h") ||
|
|
45
46
|
args.includes("--version") ||
|
|
@@ -86,6 +87,14 @@ async function main() {
|
|
|
86
87
|
const transport = new StdioServerTransport();
|
|
87
88
|
await server.connect(transport);
|
|
88
89
|
}
|
|
90
|
+
// ─── Schedule background update check ───────────────────────────
|
|
91
|
+
// Fire-and-forget — never blocks startup or any tool call.
|
|
92
|
+
// Results are stored in the config repo and surfaced on the next engram_start_session.
|
|
93
|
+
try {
|
|
94
|
+
const { getServices } = await import("./database.js");
|
|
95
|
+
getServices().update.scheduleCheck();
|
|
96
|
+
}
|
|
97
|
+
catch { /* update check is best-effort */ }
|
|
89
98
|
}
|
|
90
99
|
// ─── Run ──────────────────────────────────────────────────────────────
|
|
91
100
|
main().catch((error) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,+EAA+E;AAC/E,EAAE;AACF,2DAA2D;AAC3D,2DAA2D;AAC3D,2DAA2D;AAC3D,2DAA2D;AAC3D,2DAA2D;AAC3D,2DAA2D;AAC3D,EAAE;AACF,kDAAkD;AAClD,wCAAwC;AACxC,EAAE;AACF,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAkB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,qBAAqB;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,yEAAyE;AAEzE,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,yEAAyE;IACzE,IACE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EACnB,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAEzC,sBAAsB;IACtB,YAAY,CAAC,WAAW,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,CAAC,2BAA2B,WAAW,oBAAoB,CAAC,CAAC;IAErE,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,oEAAoE;IAEpE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAO,kDAAkD;IACtF,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAQ,kCAAkC;IACtE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAM,kDAAkD;IACtF,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAM,iCAAiC;IACrE,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAI,qDAAqD;IACzF,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAU,sCAAsC;IAC1E,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAE,qDAAqD;IACzF,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAS,QAAQ;IAC5C,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAQ,gCAAgC;IACpE,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAK,mCAAmC;IACvE,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAE,iBAAiB;IACrD,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAI,iBAAiB;IACrD,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAK,8DAA8D;IAElG,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,KAAK,cAAc,yBAAyB,CAAC,CAAC;IAErE,oEAAoE;IAEpE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC;IAE9D,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,iCAAiC;QACjC,GAAG,CAAC,IAAI,CAAC,sBAAsB,aAAa,0BAA0B,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { IdeDefinition } from "./ide-configs.js";
|
|
2
|
+
/** Read the installed package version (used to stamp _engram_version in IDE configs). */
|
|
3
|
+
export declare function getInstallerVersion(): string;
|
|
2
4
|
/**
|
|
3
5
|
* Generate the Engram server entry tailored to a specific IDE's requirements.
|
|
6
|
+
* Includes _engram_version so the installer can detect upgrades and legacy installs.
|
|
4
7
|
*/
|
|
5
8
|
export declare function makeEngramEntry(ide: IdeDefinition): Record<string, any>;
|
|
6
9
|
/**
|
|
@@ -11,12 +14,18 @@ export declare function readJson(filePath: string): Record<string, any> | null;
|
|
|
11
14
|
* Write a JSON config file, creating parent directories if needed.
|
|
12
15
|
*/
|
|
13
16
|
export declare function writeJson(filePath: string, data: any): void;
|
|
17
|
+
export type InstallResult = "added" | "upgraded" | "exists" | "legacy-upgraded";
|
|
14
18
|
/**
|
|
15
19
|
* Add or update the Engram entry in a config file.
|
|
16
20
|
* Uses the IDE's configKey ("mcpServers" or "servers") to write the correct JSON structure.
|
|
17
|
-
*
|
|
21
|
+
*
|
|
22
|
+
* Returns:
|
|
23
|
+
* "added" — fresh install, no prior entry
|
|
24
|
+
* "exists" — already installed at the same version, no changes made
|
|
25
|
+
* "upgraded" — updated from an older tracked version to the current one
|
|
26
|
+
* "legacy-upgraded" — entry existed but had no _engram_version (pre-tracking era), now stamped
|
|
18
27
|
*/
|
|
19
|
-
export declare function addToConfig(configPath: string, ide: IdeDefinition):
|
|
28
|
+
export declare function addToConfig(configPath: string, ide: IdeDefinition): InstallResult;
|
|
20
29
|
/**
|
|
21
30
|
* Remove the Engram entry from a config file.
|
|
22
31
|
* Returns true if the entry was found and removed, false if not present.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/installer/config-writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/installer/config-writer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,yFAAyF;AACzF,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAqBvE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAMrE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAG3D;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAEhF;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,aAAa,CA2BjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAgBhF"}
|
|
@@ -3,8 +3,21 @@
|
|
|
3
3
|
// ============================================================================
|
|
4
4
|
import fs from "fs";
|
|
5
5
|
import path from "path";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
/** Read the installed package version (used to stamp _engram_version in IDE configs). */
|
|
8
|
+
export function getInstallerVersion() {
|
|
9
|
+
try {
|
|
10
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const pkgPath = path.resolve(__dirname, "../../package.json");
|
|
12
|
+
return JSON.parse(fs.readFileSync(pkgPath, "utf-8")).version;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return "unknown";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
6
18
|
/**
|
|
7
19
|
* Generate the Engram server entry tailored to a specific IDE's requirements.
|
|
20
|
+
* Includes _engram_version so the installer can detect upgrades and legacy installs.
|
|
8
21
|
*/
|
|
9
22
|
export function makeEngramEntry(ide) {
|
|
10
23
|
const entry = {};
|
|
@@ -21,6 +34,8 @@ export function makeEngramEntry(ide) {
|
|
|
21
34
|
entry.command = "npx";
|
|
22
35
|
entry.args = ["-y", "engram-mcp-server"];
|
|
23
36
|
}
|
|
37
|
+
// Version stamp — used by the installer to detect upgrades and legacy installs
|
|
38
|
+
entry._engram_version = getInstallerVersion();
|
|
24
39
|
return entry;
|
|
25
40
|
}
|
|
26
41
|
/**
|
|
@@ -44,7 +59,12 @@ export function writeJson(filePath, data) {
|
|
|
44
59
|
/**
|
|
45
60
|
* Add or update the Engram entry in a config file.
|
|
46
61
|
* Uses the IDE's configKey ("mcpServers" or "servers") to write the correct JSON structure.
|
|
47
|
-
*
|
|
62
|
+
*
|
|
63
|
+
* Returns:
|
|
64
|
+
* "added" — fresh install, no prior entry
|
|
65
|
+
* "exists" — already installed at the same version, no changes made
|
|
66
|
+
* "upgraded" — updated from an older tracked version to the current one
|
|
67
|
+
* "legacy-upgraded" — entry existed but had no _engram_version (pre-tracking era), now stamped
|
|
48
68
|
*/
|
|
49
69
|
export function addToConfig(configPath, ide) {
|
|
50
70
|
let config = readJson(configPath) || {};
|
|
@@ -52,14 +72,19 @@ export function addToConfig(configPath, ide) {
|
|
|
52
72
|
if (!config[key])
|
|
53
73
|
config[key] = {};
|
|
54
74
|
const newEntry = makeEngramEntry(ide);
|
|
75
|
+
const currentVersion = newEntry._engram_version;
|
|
55
76
|
if (config[key].engram) {
|
|
56
|
-
|
|
77
|
+
const existingVersion = config[key].engram._engram_version;
|
|
78
|
+
// Same version already installed — nothing to do
|
|
79
|
+
if (existingVersion === currentVersion) {
|
|
57
80
|
return "exists";
|
|
58
81
|
}
|
|
82
|
+
// Upgrade (known older version) or legacy adoption (no _engram_version)
|
|
59
83
|
config[key].engram = newEntry;
|
|
60
84
|
writeJson(configPath, config);
|
|
61
|
-
return "
|
|
85
|
+
return existingVersion ? "upgraded" : "legacy-upgraded";
|
|
62
86
|
}
|
|
87
|
+
// No prior entry at all — fresh install
|
|
63
88
|
config[key].engram = newEntry;
|
|
64
89
|
writeJson(configPath, config);
|
|
65
90
|
return "added";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/installer/config-writer.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/installer/config-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAsCA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,iBAuQhD"}
|