engram-mcp-server 1.11.0 → 1.12.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 +26 -3
- package/dist/installer/config-writer.d.ts.map +1 -1
- package/dist/installer/config-writer.js +4 -0
- package/dist/installer/config-writer.js.map +1 -1
- package/dist/installer/ide-configs.d.ts +13 -0
- package/dist/installer/ide-configs.d.ts.map +1 -1
- package/dist/installer/ide-configs.js +42 -0
- package/dist/installer/ide-configs.js.map +1 -1
- package/dist/installer/ide-detector.d.ts +7 -0
- package/dist/installer/ide-detector.d.ts.map +1 -1
- package/dist/installer/ide-detector.js +23 -2
- package/dist/installer/ide-detector.js.map +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +408 -123
- package/dist/installer/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|
|
46
46
|
**Engram** is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that gives AI coding agents persistent memory across sessions. Instead of re-reading files, re-discovering architecture, and re-learning conventions every time a session starts, the agent calls `engram_session(action:"start")` and instantly receives everything it needs.
|
|
47
47
|
|
|
48
|
-
It operates seamlessly as a background brain for popular AI tools like **Claude Code**, **Claude Desktop**, **Cursor**, **Windsurf**, **Cline**, **Trae IDE**, **Antigravity IDE**, and **GitHub Copilot** (VS Code & Visual Studio).
|
|
48
|
+
It operates seamlessly as a background brain for popular AI tools like **Claude Code**, **Claude Desktop**, **Cursor**, **Windsurf**, **Cline**, **Trae IDE**, **Antigravity IDE**, **Android Studio**, and **GitHub Copilot** (VS Code & Visual Studio).
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
@@ -194,7 +194,7 @@ npm install -g engram-mcp-server
|
|
|
194
194
|
engram install --ide <your-ide>
|
|
195
195
|
```
|
|
196
196
|
|
|
197
|
-
Available `--ide` values: `vscode`, `cursor`, `windsurf`, `antigravity`, `claudecode`, `claudedesktop`, `visualstudio`, `cline`, `roocode`, `geminicli`, `firebasestudio`, `trae`, `jetbrains`
|
|
197
|
+
Available `--ide` values: `vscode`, `cursor`, `windsurf`, `antigravity`, `claudecode`, `claudedesktop`, `visualstudio`, `cline`, `roocode`, `geminicli`, `firebasestudio`, `trae`, `jetbrains`, `androidstudio`
|
|
198
198
|
|
|
199
199
|
> **Note:** During install you may see `npm warn deprecated prebuild-install@7.1.3`. This is a cosmetic warning from a transitive dependency used to download SQLite prebuilt binaries. It does not affect functionality and is safe to ignore.
|
|
200
200
|
|
|
@@ -291,7 +291,7 @@ Engram maintains a **SQLite database** — one per project — that stores all a
|
|
|
291
291
|
|
|
292
292
|
If you prefer to configure manually, find your IDE below. Each entry shows the correct config file path and JSON format.
|
|
293
293
|
|
|
294
|
-
> **Config key note:** VS Code, Visual Studio, and JetBrains use `"servers"` as the top-level key. All other IDEs use `"mcpServers"`.
|
|
294
|
+
> **Config key note:** VS Code, Visual Studio, and JetBrains use `"servers"` as the top-level key. All other IDEs (including Android Studio) use `"mcpServers"`.
|
|
295
295
|
|
|
296
296
|
<details>
|
|
297
297
|
<summary><strong>VS Code (GitHub Copilot)</strong></summary>
|
|
@@ -662,6 +662,29 @@ Open the Cline extension settings → MCP Servers, or edit the settings file dir
|
|
|
662
662
|
|
|
663
663
|
</details>
|
|
664
664
|
|
|
665
|
+
<details>
|
|
666
|
+
<summary><strong>Android Studio</strong></summary>
|
|
667
|
+
|
|
668
|
+
**Global** — `%APPDATA%\Google\AndroidStudio<version>\mcp.json` (Windows) or `~/Library/Application Support/Google/AndroidStudio<version>/mcp.json` (Mac):
|
|
669
|
+
|
|
670
|
+
The installer automatically discovers all installed Android Studio versions and writes to each one.
|
|
671
|
+
|
|
672
|
+
```json
|
|
673
|
+
{
|
|
674
|
+
"mcpServers": {
|
|
675
|
+
"engram": {
|
|
676
|
+
"command": "npx",
|
|
677
|
+
"args": ["-y", "engram-mcp-server", "--project-root=/absolute/path/to/your/project"],
|
|
678
|
+
"enabled": true
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
> Android Studio requires `"enabled": true` in each MCP server entry. The config path is version-specific (e.g., `AndroidStudio2024.3`, `AndroidStudio2025.1`). The installer's `--check` flag shows the status of all discovered versions.
|
|
685
|
+
|
|
686
|
+
</details>
|
|
687
|
+
|
|
665
688
|
### Verifying Your Installation
|
|
666
689
|
|
|
667
690
|
After installing, verify Engram is working by running:
|
|
@@ -1 +1 @@
|
|
|
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;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAe5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,UAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,
|
|
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;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAe5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,UAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAyD3G;AAED;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aACX,QAAQ,EAAE,MAAM;aAAkB,KAAK,EAAE,OAAO;gBAAhD,QAAQ,EAAE,MAAM,EAAkB,KAAK,EAAE,OAAO;CAI/E;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAQrE;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;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,UAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CA2CrH;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAgBhF"}
|
|
@@ -89,6 +89,10 @@ export function makeEngramEntry(ide, universal = false, ideKey) {
|
|
|
89
89
|
if (universal) {
|
|
90
90
|
entry._engram_mode = "universal";
|
|
91
91
|
}
|
|
92
|
+
// IDE-specific extra fields (e.g. Android Studio requires "enabled": true)
|
|
93
|
+
if (ide.extraEntryFields) {
|
|
94
|
+
Object.assign(entry, ide.extraEntryFields);
|
|
95
|
+
}
|
|
92
96
|
return entry;
|
|
93
97
|
}
|
|
94
98
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/installer/config-writer.ts"],"names":[],"mappings":"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"}
|
|
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;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IAC/B,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,mEAAmE;QACnE,KAAK,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,0BAA0B,CAAC,EAAE,CAAC;YAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAA6B,CAAC;gBACxF,IAAI,GAAG;oBAAE,OAAO,GAAG,CAAC;YACxB,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,GAAkB,EAAE,SAAS,GAAG,KAAK,EAAE,MAAe;IAClF,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,6CAA6C;IAC7C,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,aAAa;IACb,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IACD,uEAAuE;IACvE,yEAAyE;IACzE,4EAA4E;IAC5E,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACxD,CAAC;IAEH,oFAAoF;IACpF,mFAAmF;IACnF,0DAA0D;IAC1D,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAEC,4DAA4D;IAC5D,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,KAAK,CAAC,GAAG,GAAG,EAAE,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,eAAe,GAAG,mBAAmB,EAAE,CAAC;IAC9C,IAAI,SAAS,EAAE,CAAC;QACZ,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC;IACrC,CAAC;IAED,2EAA2E;IAC3E,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACX;IAAkC;IAA9D,YAA4B,QAAgB,EAAkB,KAAc;QACxE,KAAK,CAAC,kCAAkC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;QADtC,aAAQ,GAAR,QAAQ,CAAQ;QAAkB,UAAK,GAAL,KAAK,CAAS;QAExE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,kCAAkC;IAC7E,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,2DAA2D;QAC3D,MAAM,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAS;IACjD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAID;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,GAAkB,EAAE,SAAS,GAAG,KAAK,EAAE,MAAe;IAClG,IAAI,MAA2B,CAAC;IAChC,IAAI,CAAC;QACD,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,IAAI,CAAC,YAAY,gBAAgB,EAAE,CAAC;YAChC,0CAA0C;YAC1C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,UAAU,GAAG,YAAY,EAAE,MAAM,CAAC;YAClD,IAAI,CAAC;gBAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,sBAAsB,UAAU,yBAAyB,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC5E,MAAM,GAAG,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAEnC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAyB,CAAC;IAE1D,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,eAAqC,CAAC;QAEjF,iDAAiD;QACjD,IAAI,eAAe,KAAK,cAAc,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,wEAAwE;QACxE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC5D,CAAC;IAED,wCAAwC;IACxC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,GAAkB;IACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IAEvC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAE1B,6BAA6B;IAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -24,6 +24,19 @@ export interface IdeDefinition {
|
|
|
24
24
|
* literal placeholder string would be passed to the server and silently ignored.
|
|
25
25
|
*/
|
|
26
26
|
envVar?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Dynamic global path resolver — used for IDEs with versioned config directories
|
|
29
|
+
* (e.g. Android Studio: AndroidStudio2025.3.2\mcp.json).
|
|
30
|
+
* When set, this function is called at install time to enumerate all matching paths
|
|
31
|
+
* on the current machine instead of using a hardcoded `scopes.global` array.
|
|
32
|
+
* Returns an array of absolute config file paths (may be empty if IDE not installed).
|
|
33
|
+
*/
|
|
34
|
+
resolveGlobalPaths?: () => string[];
|
|
35
|
+
/**
|
|
36
|
+
* Extra fields to merge into each server entry written by the installer.
|
|
37
|
+
* Used for IDE-specific required fields (e.g. Android Studio requires `enabled: true`).
|
|
38
|
+
*/
|
|
39
|
+
extraEntryFields?: Record<string, unknown>;
|
|
27
40
|
scopes: {
|
|
28
41
|
global?: string[];
|
|
29
42
|
localDirs?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-configs.d.ts","sourceRoot":"","sources":["../../src/installer/ide-configs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ide-configs.d.ts","sourceRoot":"","sources":["../../src/installer/ide-configs.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,UAAU,SAA+B,CAAC;AAqBhD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,SAAS,EAAE,YAAY,GAAG,SAAS,CAAC;IACpC,yDAAyD;IACzD,YAAY,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,yEAAyE;QACzE,GAAG,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAyPrD,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// ============================================================================
|
|
2
2
|
// Engram MCP Server — IDE Configuration Definitions
|
|
3
3
|
// ============================================================================
|
|
4
|
+
import fs from "fs";
|
|
4
5
|
import path from "path";
|
|
5
6
|
import os from "os";
|
|
6
7
|
const HOME = os.homedir();
|
|
@@ -229,6 +230,47 @@ export const IDE_CONFIGS = {
|
|
|
229
230
|
],
|
|
230
231
|
},
|
|
231
232
|
},
|
|
233
|
+
// ─── Android Studio ─────────────────────────────────────────────
|
|
234
|
+
androidstudio: {
|
|
235
|
+
name: "Android Studio (Gemini)",
|
|
236
|
+
// Confirmed: uses "mcpServers" key (user-verified from actual mcp.json).
|
|
237
|
+
// Despite official docs only mentioning HTTP transport, Android Studio DOES
|
|
238
|
+
// read stdio configs (command/args) from this file — HTTP UI flow is separate.
|
|
239
|
+
// Source: user-verified on Windows — actual mcp.json entries use command/args.
|
|
240
|
+
configKey: "mcpServers",
|
|
241
|
+
requiresType: false,
|
|
242
|
+
requiresCmdWrapper: false,
|
|
243
|
+
// Android Studio requires `enabled: true` in each MCP server entry.
|
|
244
|
+
// Without it, the server may be ignored by Gemini Agent mode.
|
|
245
|
+
extraEntryFields: { enabled: true },
|
|
246
|
+
// Config path is versioned: %APPDATA%\Google\AndroidStudio<VERSION>\mcp.json
|
|
247
|
+
// Multiple versions can coexist. `resolveGlobalPaths` discovers all of them
|
|
248
|
+
// via directory listing at install time instead of hardcoding a single path.
|
|
249
|
+
resolveGlobalPaths: () => {
|
|
250
|
+
const baseDir = IS_WINDOWS
|
|
251
|
+
? path.join(APPDATA, "Google")
|
|
252
|
+
: IS_MAC
|
|
253
|
+
? path.join(HOME, "Library", "Application Support", "Google")
|
|
254
|
+
: path.join(HOME, ".config", "Google");
|
|
255
|
+
if (!fs.existsSync(baseDir))
|
|
256
|
+
return [];
|
|
257
|
+
try {
|
|
258
|
+
return fs
|
|
259
|
+
.readdirSync(baseDir, { withFileTypes: true })
|
|
260
|
+
.filter(d => d.isDirectory() && d.name.startsWith("AndroidStudio"))
|
|
261
|
+
.map(d => path.join(baseDir, d.name, "mcp.json"));
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
return [];
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
scopes: {
|
|
268
|
+
// scopes.global is intentionally empty — resolveGlobalPaths() handles discovery.
|
|
269
|
+
// localDirs is also empty — Android Studio reads only its own config dir,
|
|
270
|
+
// not project-level config files.
|
|
271
|
+
global: [],
|
|
272
|
+
},
|
|
273
|
+
},
|
|
232
274
|
};
|
|
233
275
|
export { IS_WINDOWS };
|
|
234
276
|
//# sourceMappingURL=ide-configs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-configs.js","sourceRoot":"","sources":["../../src/installer/ide-configs.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;AAE/E,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAChD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,GAAW,UAAU;IAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,MAAM;QACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,CAAC;QACnD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,sBAAsB;
|
|
1
|
+
{"version":3,"file":"ide-configs.js","sourceRoot":"","sources":["../../src/installer/ide-configs.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
* 3. PATH / VSCODE_CWD string matching (fallback, fragile)
|
|
9
9
|
*/
|
|
10
10
|
export declare function detectCurrentIde(): string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the effective list of global config file paths for an IDE.
|
|
13
|
+
* For most IDEs this is just `ide.scopes.global`.
|
|
14
|
+
* For IDEs with `resolveGlobalPaths` (e.g. Android Studio with versioned dirs)
|
|
15
|
+
* that function is called instead, returning all discovered install paths.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveIdeGlobalPaths(ide: import("./ide-configs.js").IdeDefinition): string[];
|
|
11
18
|
/**
|
|
12
19
|
* Scan all IDE_CONFIGS to find which IDEs appear to be installed on this machine.
|
|
13
20
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-detector.d.ts","sourceRoot":"","sources":["../../src/installer/ide-detector.ts"],"names":[],"mappings":"AASA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ide-detector.d.ts","sourceRoot":"","sources":["../../src/installer/ide-detector.ts"],"names":[],"mappings":"AASA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CA4DhD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,kBAAkB,EAAE,aAAa,GAAG,MAAM,EAAE,CAG7F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CA6B9C"}
|
|
@@ -24,6 +24,15 @@ export function detectCurrentIde() {
|
|
|
24
24
|
if (env.VSINSTALLDIR || env.VisualStudioVersion)
|
|
25
25
|
return "visualstudio";
|
|
26
26
|
// ─── JetBrains detection ─────────────────────────────────────────
|
|
27
|
+
// Android Studio is IntelliJ-based — check it BEFORE generic JetBrains.
|
|
28
|
+
// STUDIO_VM_OPTIONS is set by Android Studio's JVM launcher.
|
|
29
|
+
// Also catch running inside Android Studio terminal via JetBrains JediTerm
|
|
30
|
+
// combined with ANDROID_HOME/ANDROID_SDK_ROOT being set.
|
|
31
|
+
if (env.STUDIO_VM_OPTIONS)
|
|
32
|
+
return "androidstudio";
|
|
33
|
+
if (env.TERMINAL_EMULATOR?.includes("JetBrains") &&
|
|
34
|
+
(env.ANDROID_HOME || env.ANDROID_SDK_ROOT))
|
|
35
|
+
return "androidstudio";
|
|
27
36
|
if (env.JETBRAINS_IDE || env.TERMINAL_EMULATOR?.includes("JetBrains"))
|
|
28
37
|
return "jetbrains";
|
|
29
38
|
// ─── VS Code family detection ────────────────────────────────────
|
|
@@ -67,6 +76,17 @@ export function detectCurrentIde() {
|
|
|
67
76
|
}
|
|
68
77
|
return null;
|
|
69
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Resolve the effective list of global config file paths for an IDE.
|
|
81
|
+
* For most IDEs this is just `ide.scopes.global`.
|
|
82
|
+
* For IDEs with `resolveGlobalPaths` (e.g. Android Studio with versioned dirs)
|
|
83
|
+
* that function is called instead, returning all discovered install paths.
|
|
84
|
+
*/
|
|
85
|
+
export function resolveIdeGlobalPaths(ide) {
|
|
86
|
+
if (ide.resolveGlobalPaths)
|
|
87
|
+
return ide.resolveGlobalPaths();
|
|
88
|
+
return ide.scopes.global ?? [];
|
|
89
|
+
}
|
|
70
90
|
/**
|
|
71
91
|
* Scan all IDE_CONFIGS to find which IDEs appear to be installed on this machine.
|
|
72
92
|
*
|
|
@@ -103,9 +123,10 @@ export function detectInstalledIdes() {
|
|
|
103
123
|
}
|
|
104
124
|
const found = [];
|
|
105
125
|
for (const [id, ide] of Object.entries(IDE_CONFIGS)) {
|
|
106
|
-
|
|
126
|
+
const globalPaths = resolveIdeGlobalPaths(ide);
|
|
127
|
+
if (!globalPaths.length)
|
|
107
128
|
continue;
|
|
108
|
-
const isPresent =
|
|
129
|
+
const isPresent = globalPaths.some(p => fs.existsSync(p) || isReliableParent(p));
|
|
109
130
|
if (isPresent)
|
|
110
131
|
found.push(id);
|
|
111
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-detector.js","sourceRoot":"","sources":["../../src/installer/ide-detector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ide-detector.js","sourceRoot":"","sources":["../../src/installer/ide-detector.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":"AA2KA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,iBAmmBhD"}
|
package/dist/installer/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import readline from "readline";
|
|
|
7
7
|
import { fileURLToPath } from "url";
|
|
8
8
|
import { IDE_CONFIGS } from "./ide-configs.js";
|
|
9
9
|
import { addToConfig, removeFromConfig, makeEngramEntry, readJson, getInstallerVersion, ConfigParseError } from "./config-writer.js";
|
|
10
|
-
import { detectCurrentIde, detectInstalledIdes } from "./ide-detector.js";
|
|
10
|
+
import { detectCurrentIde, detectInstalledIdes, resolveIdeGlobalPaths } from "./ide-detector.js";
|
|
11
11
|
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
12
12
|
function isTTY() {
|
|
13
13
|
return !!(process.stdin.isTTY && process.stdout.isTTY);
|
|
@@ -27,6 +27,136 @@ async function askQuestion(query) {
|
|
|
27
27
|
resolve(ans);
|
|
28
28
|
}));
|
|
29
29
|
}
|
|
30
|
+
// ─── ANSI color helpers (reusable) ───────────────────────────────────
|
|
31
|
+
function makeColors() {
|
|
32
|
+
const usesColor = process.stdout.isTTY ?? false;
|
|
33
|
+
const clr = (code, t) => usesColor ? `\x1b[${code}m${t}\x1b[0m` : t;
|
|
34
|
+
return {
|
|
35
|
+
bold: (t) => clr("1", t),
|
|
36
|
+
dim: (t) => clr("2", t),
|
|
37
|
+
green: (t) => clr("32", t),
|
|
38
|
+
yellow: (t) => clr("33", t),
|
|
39
|
+
cyan: (t) => clr("36", t),
|
|
40
|
+
gray: (t) => clr("90", t),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function semverCmp(a, b) {
|
|
44
|
+
const pa = a.split(".").map(Number), pb = b.split(".").map(Number);
|
|
45
|
+
for (let i = 0; i < 3; i++) {
|
|
46
|
+
const d = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
47
|
+
if (d !== 0)
|
|
48
|
+
return d;
|
|
49
|
+
}
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
// ─── Project root detection (for display purposes) ──────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Walk up from startDir looking for project root markers.
|
|
55
|
+
* Returns the detected root and what signal was found.
|
|
56
|
+
*/
|
|
57
|
+
function detectProjectRootForDisplay(startDir) {
|
|
58
|
+
let dir = startDir;
|
|
59
|
+
for (let i = 0; i < 10; i++) {
|
|
60
|
+
if (fs.existsSync(path.join(dir, ".git")))
|
|
61
|
+
return { root: dir, evidence: "git repository", confidence: "high" };
|
|
62
|
+
if (fs.existsSync(path.join(dir, "package.json")))
|
|
63
|
+
return { root: dir, evidence: "package.json", confidence: "high" };
|
|
64
|
+
if (fs.existsSync(path.join(dir, "Cargo.toml")))
|
|
65
|
+
return { root: dir, evidence: "Cargo.toml", confidence: "high" };
|
|
66
|
+
if (fs.existsSync(path.join(dir, "go.mod")))
|
|
67
|
+
return { root: dir, evidence: "go.mod", confidence: "high" };
|
|
68
|
+
if (fs.existsSync(path.join(dir, "pyproject.toml")))
|
|
69
|
+
return { root: dir, evidence: "pyproject.toml", confidence: "high" };
|
|
70
|
+
if (fs.existsSync(path.join(dir, "build.gradle")) || fs.existsSync(path.join(dir, "build.gradle.kts")))
|
|
71
|
+
return { root: dir, evidence: "Gradle project", confidence: "high" };
|
|
72
|
+
if (fs.existsSync(path.join(dir, "pom.xml")))
|
|
73
|
+
return { root: dir, evidence: "Maven project", confidence: "high" };
|
|
74
|
+
if (fs.existsSync(path.join(dir, ".engram")))
|
|
75
|
+
return { root: dir, evidence: "existing .engram directory", confidence: "high" };
|
|
76
|
+
const parent = path.dirname(dir);
|
|
77
|
+
if (parent === dir)
|
|
78
|
+
break;
|
|
79
|
+
dir = parent;
|
|
80
|
+
}
|
|
81
|
+
return { root: startDir, evidence: "current directory (no project markers found)", confidence: "low" };
|
|
82
|
+
}
|
|
83
|
+
// ─── Fetch npm latest version ────────────────────────────────────────
|
|
84
|
+
async function fetchNpmLatest() {
|
|
85
|
+
try {
|
|
86
|
+
const controller = new AbortController();
|
|
87
|
+
const timer = setTimeout(() => controller.abort(), 5_000);
|
|
88
|
+
const res = await fetch("https://registry.npmjs.org/engram-mcp-server/latest", {
|
|
89
|
+
signal: controller.signal,
|
|
90
|
+
headers: { "User-Agent": "engram-mcp-server" },
|
|
91
|
+
});
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
if (res.ok) {
|
|
94
|
+
return (await res.json())["version"];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch { /* network error — best effort */ }
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
function resolveIdeInstallStatus(ide) {
|
|
101
|
+
const globalPaths = resolveIdeGlobalPaths(ide);
|
|
102
|
+
for (const configPath of globalPaths) {
|
|
103
|
+
if (!fs.existsSync(configPath))
|
|
104
|
+
continue;
|
|
105
|
+
let config;
|
|
106
|
+
try {
|
|
107
|
+
config = readJson(configPath);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
if (e instanceof ConfigParseError)
|
|
111
|
+
return { state: "invalid-json", configPath };
|
|
112
|
+
throw e;
|
|
113
|
+
}
|
|
114
|
+
const serverMap = (config?.[ide.configKey] ?? {});
|
|
115
|
+
const instanceKey = Object.keys(serverMap).find(k => {
|
|
116
|
+
const en = serverMap[k];
|
|
117
|
+
return k === "engram"
|
|
118
|
+
|| String(en?.command ?? "").includes("engram")
|
|
119
|
+
|| (Array.isArray(en?.args) && en.args.some((a) => String(a).includes("engram")));
|
|
120
|
+
});
|
|
121
|
+
if (instanceKey) {
|
|
122
|
+
const entry = serverMap[instanceKey];
|
|
123
|
+
return { state: "installed", configPath, installedVersion: String(entry?._engram_version ?? "?") };
|
|
124
|
+
}
|
|
125
|
+
return { state: "not-installed", configPath };
|
|
126
|
+
}
|
|
127
|
+
// Check local dirs
|
|
128
|
+
const cwd = process.cwd();
|
|
129
|
+
if (ide.scopes.localDirs?.length) {
|
|
130
|
+
for (const dir of ide.scopes.localDirs) {
|
|
131
|
+
const localFile = ide.scopes.localFile ?? (dir === "" ? ".mcp.json" : "mcp.json");
|
|
132
|
+
const lp = path.join(cwd, dir, localFile);
|
|
133
|
+
if (!fs.existsSync(lp))
|
|
134
|
+
continue;
|
|
135
|
+
let config;
|
|
136
|
+
try {
|
|
137
|
+
config = readJson(lp);
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
if (e instanceof ConfigParseError)
|
|
141
|
+
return { state: "invalid-json", configPath: lp };
|
|
142
|
+
throw e;
|
|
143
|
+
}
|
|
144
|
+
const serverMap = (config?.[ide.configKey] ?? {});
|
|
145
|
+
const instanceKey = Object.keys(serverMap).find(k => {
|
|
146
|
+
const en = serverMap[k];
|
|
147
|
+
return k === "engram"
|
|
148
|
+
|| String(en?.command ?? "").includes("engram")
|
|
149
|
+
|| (Array.isArray(en?.args) && en.args.some((a) => String(a).includes("engram")));
|
|
150
|
+
});
|
|
151
|
+
if (instanceKey) {
|
|
152
|
+
const entry = serverMap[instanceKey];
|
|
153
|
+
return { state: "installed", configPath: lp, installedVersion: String(entry?._engram_version ?? "?") };
|
|
154
|
+
}
|
|
155
|
+
return { state: "not-installed", configPath: lp };
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return { state: "not-found", configPath: globalPaths[0] ?? "(no config path)" };
|
|
159
|
+
}
|
|
30
160
|
// ─── Main Entry Point ────────────────────────────────────────────────
|
|
31
161
|
export async function runInstaller(args) {
|
|
32
162
|
// Detect if npx resolved to the local source directory instead of the npm package.
|
|
@@ -95,24 +225,36 @@ Examples:
|
|
|
95
225
|
for (const [id, ide] of Object.entries(IDE_CONFIGS)) {
|
|
96
226
|
let detected = false;
|
|
97
227
|
let installed = false;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
228
|
+
const globalPaths = resolveIdeGlobalPaths(ide);
|
|
229
|
+
if (globalPaths.length) {
|
|
230
|
+
for (const gp of globalPaths) {
|
|
231
|
+
if (!fs.existsSync(gp)) {
|
|
232
|
+
// Config file doesn't exist — check if its parent dir does (IDE present but unconfigured)
|
|
233
|
+
if (!detected && fs.existsSync(path.dirname(gp)))
|
|
234
|
+
detected = true;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
101
237
|
detected = true;
|
|
238
|
+
if (installed)
|
|
239
|
+
break; // Already found an install, no need to keep scanning
|
|
102
240
|
try {
|
|
103
|
-
const config = readJson(
|
|
104
|
-
|
|
241
|
+
const config = readJson(gp);
|
|
242
|
+
const serverMap = (config?.[ide.configKey] ?? {});
|
|
243
|
+
const hasEngram = Object.keys(serverMap).some(k => {
|
|
244
|
+
const en = serverMap[k];
|
|
245
|
+
return k === "engram"
|
|
246
|
+
|| String(en?.command ?? "").includes("engram")
|
|
247
|
+
|| (Array.isArray(en?.args) && en.args.some((a) => String(a).includes("engram")));
|
|
248
|
+
});
|
|
249
|
+
if (hasEngram)
|
|
105
250
|
installed = true;
|
|
106
251
|
}
|
|
107
252
|
catch (e) {
|
|
108
253
|
if (e instanceof ConfigParseError) {
|
|
109
|
-
console.warn(` ⚠️ ${
|
|
254
|
+
console.warn(` ⚠️ ${gp} — invalid JSON (run 'engram install' to repair)`);
|
|
110
255
|
}
|
|
111
256
|
}
|
|
112
257
|
}
|
|
113
|
-
else if (ide.scopes.global.find(p => fs.existsSync(path.dirname(p)))) {
|
|
114
|
-
detected = true;
|
|
115
|
-
}
|
|
116
258
|
}
|
|
117
259
|
const scopeLabel = ide.scopes.localDirs ? " (Global / Local)" : " (Global)";
|
|
118
260
|
const statusLabel = installed
|
|
@@ -134,40 +276,11 @@ Examples:
|
|
|
134
276
|
const currentVersion = getInstallerVersion();
|
|
135
277
|
const cwd = process.cwd();
|
|
136
278
|
// ── ANSI color helpers (TTY only) ──────────────────────────────────────
|
|
137
|
-
const
|
|
138
|
-
const clr = (code, t) => usesColor ? `\x1b[${code}m${t}\x1b[0m` : t;
|
|
139
|
-
const bold = (t) => clr("1", t);
|
|
140
|
-
const dim = (t) => clr("2", t);
|
|
141
|
-
const green = (t) => clr("32", t);
|
|
142
|
-
const yellow = (t) => clr("33", t);
|
|
143
|
-
const cyan = (t) => clr("36", t);
|
|
144
|
-
const gray = (t) => clr("90", t);
|
|
279
|
+
const { bold, dim, green, yellow, cyan, gray } = makeColors();
|
|
145
280
|
const hr = "─".repeat(66);
|
|
146
|
-
const semverCmp = (a, b) => {
|
|
147
|
-
const pa = a.split(".").map(Number), pb = b.split(".").map(Number);
|
|
148
|
-
for (let i = 0; i < 3; i++) {
|
|
149
|
-
const d = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
150
|
-
if (d !== 0)
|
|
151
|
-
return d;
|
|
152
|
-
}
|
|
153
|
-
return 0;
|
|
154
|
-
};
|
|
155
281
|
// ── Fetch npm latest ───────────────────────────────────────────────────
|
|
156
282
|
process.stdout.write(`\n ${bold("Engram Installation Check")}\n\n Checking npm registry...`);
|
|
157
|
-
|
|
158
|
-
try {
|
|
159
|
-
const controller = new AbortController();
|
|
160
|
-
const timer = setTimeout(() => controller.abort(), 5_000);
|
|
161
|
-
const res = await fetch("https://registry.npmjs.org/engram-mcp-server/latest", {
|
|
162
|
-
signal: controller.signal,
|
|
163
|
-
headers: { "User-Agent": "engram-mcp-server" },
|
|
164
|
-
});
|
|
165
|
-
clearTimeout(timer);
|
|
166
|
-
if (res.ok) {
|
|
167
|
-
npmLatest = (await res.json())["version"];
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
catch { /* network error — best effort */ }
|
|
283
|
+
const npmLatest = await fetchNpmLatest();
|
|
171
284
|
const selfCmp = npmLatest ? semverCmp(currentVersion, npmLatest) : 0;
|
|
172
285
|
const selfStatus = !npmLatest ? gray("(npm unreachable)")
|
|
173
286
|
: selfCmp > 0 ? yellow("⚡ pre-release")
|
|
@@ -213,20 +326,22 @@ Examples:
|
|
|
213
326
|
const results = [];
|
|
214
327
|
for (const [, ide] of Object.entries(IDE_CONFIGS)) {
|
|
215
328
|
const entries = [];
|
|
216
|
-
// Global:
|
|
217
|
-
//
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
329
|
+
// Global: for IDEs with resolveGlobalPaths (e.g. Android Studio with
|
|
330
|
+
// multiple version-specific configs), show ALL found paths. For regular
|
|
331
|
+
// IDEs with a single global path, this naturally resolves to one entry.
|
|
332
|
+
if (ide.scopes.global?.length || ide.resolveGlobalPaths) {
|
|
333
|
+
const globalPaths = resolveIdeGlobalPaths(ide);
|
|
334
|
+
let anyFound = false;
|
|
335
|
+
for (const gp of globalPaths) {
|
|
221
336
|
const e = resolveEntry(gp, "global", ide);
|
|
222
337
|
if (e.state !== "not-found") {
|
|
223
338
|
entries.push(e);
|
|
224
|
-
|
|
225
|
-
break;
|
|
339
|
+
anyFound = true;
|
|
226
340
|
}
|
|
227
341
|
}
|
|
228
|
-
if (!
|
|
229
|
-
entries.push({ state: "not-found", scope: "global", filePath:
|
|
342
|
+
if (!anyFound && globalPaths.length) {
|
|
343
|
+
entries.push({ state: "not-found", scope: "global", filePath: globalPaths[0] });
|
|
344
|
+
}
|
|
230
345
|
}
|
|
231
346
|
// Local: scan each dir relative to CWD; add only files that actually exist.
|
|
232
347
|
if (ide.scopes.localDirs?.length) {
|
|
@@ -353,13 +468,12 @@ Examples:
|
|
|
353
468
|
}
|
|
354
469
|
const ide = IDE_CONFIGS[targetIde];
|
|
355
470
|
let removed = false;
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
}
|
|
471
|
+
const globalPaths = resolveIdeGlobalPaths(ide);
|
|
472
|
+
for (const configPath of globalPaths) {
|
|
473
|
+
if (fs.existsSync(configPath)) {
|
|
474
|
+
if (removeFromConfig(configPath, ide)) {
|
|
475
|
+
console.log(`✅ Removed Engram from ${configPath}`);
|
|
476
|
+
removed = true;
|
|
363
477
|
}
|
|
364
478
|
}
|
|
365
479
|
}
|
|
@@ -380,43 +494,177 @@ Examples:
|
|
|
380
494
|
return;
|
|
381
495
|
}
|
|
382
496
|
// ─── Auto-detect + interactive menu ──────────────────────────────
|
|
383
|
-
|
|
497
|
+
const { bold, dim, green, yellow, cyan, gray } = makeColors();
|
|
498
|
+
const currentVersion = getInstallerVersion();
|
|
499
|
+
const hr = "─".repeat(60);
|
|
384
500
|
const currentIde = detectCurrentIde();
|
|
385
|
-
// Filesystem scan — finds all IDEs installed on this machine regardless of
|
|
386
|
-
// which one launched the terminal. Most devs run VS Code, Cursor, Claude Code
|
|
387
|
-
// and others side-by-side; we should install to all of them in one pass.
|
|
388
501
|
const allDetected = detectInstalledIdes();
|
|
389
502
|
const otherDetected = allDetected.filter(id => id !== currentIde);
|
|
390
503
|
if (currentIde && IDE_CONFIGS[currentIde]) {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
504
|
+
const ide = IDE_CONFIGS[currentIde];
|
|
505
|
+
const status = resolveIdeInstallStatus(ide);
|
|
506
|
+
const cwd = process.cwd();
|
|
507
|
+
const projectInfo = detectProjectRootForDisplay(cwd);
|
|
508
|
+
// ── Fetch npm latest for version comparison ──────────────────────
|
|
509
|
+
process.stdout.write(`\n ${gray("Checking npm registry...")}`);
|
|
510
|
+
const npmLatest = await fetchNpmLatest();
|
|
511
|
+
process.stdout.write(`\r${" ".repeat(40)}\r`); // Clear the checking line
|
|
512
|
+
// ── Status panel ─────────────────────────────────────────────────
|
|
513
|
+
console.log(`\n ${gray(hr)}`);
|
|
514
|
+
console.log(` ${bold("🧠 Engram MCP Installer")} ${gray("v" + currentVersion)}`);
|
|
515
|
+
console.log(` ${gray(hr)}`);
|
|
516
|
+
console.log(` Detected IDE : ${bold(ide.name)}`);
|
|
517
|
+
console.log(` Config file : ${gray(status.configPath)}`);
|
|
518
|
+
console.log(` Database root : ${gray(projectInfo.root)} ${dim("(" + projectInfo.evidence + ")")}`);
|
|
519
|
+
// Version status
|
|
520
|
+
if (status.state === "installed" && status.installedVersion) {
|
|
521
|
+
const ver = status.installedVersion === "?" ? gray("v? (pre-tracking)") : cyan("v" + status.installedVersion);
|
|
522
|
+
const ref = npmLatest ?? currentVersion;
|
|
523
|
+
const isOld = status.installedVersion === "?" || semverCmp(status.installedVersion, ref) < 0;
|
|
524
|
+
const versionStatus = isOld
|
|
525
|
+
? npmLatest ? yellow(`⬆ v${npmLatest} available`) : yellow(`⬆ v${currentVersion} available`)
|
|
526
|
+
: green("✅ up to date");
|
|
527
|
+
console.log(` Installed : ${ver} ${versionStatus}`);
|
|
528
|
+
}
|
|
529
|
+
else if (status.state === "not-installed") {
|
|
530
|
+
console.log(` Installed : ${dim("not installed")}`);
|
|
531
|
+
}
|
|
532
|
+
else if (status.state === "invalid-json") {
|
|
533
|
+
console.log(` Installed : ${yellow("⚠ config has invalid JSON")}`);
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
console.log(` Installed : ${dim("no config file found")}`);
|
|
537
|
+
}
|
|
538
|
+
if (npmLatest && semverCmp(currentVersion, npmLatest) < 0) {
|
|
539
|
+
console.log(` npm latest : ${cyan("v" + npmLatest)}`);
|
|
394
540
|
}
|
|
541
|
+
console.log(` ${gray(hr)}\n`);
|
|
395
542
|
if (nonInteractive) {
|
|
396
|
-
// Install
|
|
397
|
-
await performInstallationForIde(currentIde,
|
|
543
|
+
// Install/update current IDE, then all other detected IDEs
|
|
544
|
+
await performInstallationForIde(currentIde, ide, true, universalMode, forceGlobal);
|
|
398
545
|
for (const id of otherDetected) {
|
|
399
546
|
await performInstallationForIde(id, IDE_CONFIGS[id], true, universalMode, forceGlobal);
|
|
400
547
|
}
|
|
401
548
|
return;
|
|
402
549
|
}
|
|
403
|
-
|
|
404
|
-
const
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
550
|
+
// ── Build menu options ───────────────────────────────────────────
|
|
551
|
+
const menuOptions = [];
|
|
552
|
+
if (status.state === "installed") {
|
|
553
|
+
const ref = npmLatest ?? currentVersion;
|
|
554
|
+
const isOld = status.installedVersion === "?" || semverCmp(status.installedVersion, ref) < 0;
|
|
555
|
+
if (isOld) {
|
|
556
|
+
menuOptions.push({
|
|
557
|
+
label: `Update Engram to v${currentVersion} in ${ide.name}`,
|
|
558
|
+
action: () => performInstallationForIde(currentIde, ide, false, universalMode, forceGlobal),
|
|
559
|
+
});
|
|
412
560
|
}
|
|
413
|
-
|
|
561
|
+
else {
|
|
562
|
+
menuOptions.push({
|
|
563
|
+
label: `Reinstall / repair Engram in ${ide.name}`,
|
|
564
|
+
action: () => performInstallationForIde(currentIde, ide, false, universalMode, forceGlobal),
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
menuOptions.push({
|
|
570
|
+
label: `Install Engram in ${ide.name}`,
|
|
571
|
+
action: () => performInstallationForIde(currentIde, ide, false, universalMode, forceGlobal),
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
menuOptions.push({
|
|
575
|
+
label: "Enter a custom config directory...",
|
|
576
|
+
action: async () => {
|
|
577
|
+
const customPath = await askQuestion(" Enter the path to the directory containing (or to create) the MCP config file:\n > ");
|
|
578
|
+
if (!customPath.trim()) {
|
|
579
|
+
console.log(" No path provided. Cancelled.");
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
const resolvedPath = path.resolve(customPath.trim());
|
|
583
|
+
// Check if the path already has an mcp config file
|
|
584
|
+
const hasConfig = fs.existsSync(path.join(resolvedPath, "mcp.json"))
|
|
585
|
+
|| fs.existsSync(path.join(resolvedPath, ".mcp.json"));
|
|
586
|
+
const configFileName = hasConfig
|
|
587
|
+
? (fs.existsSync(path.join(resolvedPath, "mcp.json")) ? "mcp.json" : ".mcp.json")
|
|
588
|
+
: "mcp.json";
|
|
589
|
+
const configFilePath = path.join(resolvedPath, configFileName);
|
|
590
|
+
if (!hasConfig) {
|
|
591
|
+
console.log(`\n ℹ️ No existing MCP config found at ${resolvedPath}`);
|
|
592
|
+
console.log(` A new ${configFileName} will be created there.`);
|
|
593
|
+
}
|
|
594
|
+
const customIde = {
|
|
595
|
+
name: "Custom Path",
|
|
596
|
+
configKey: "mcpServers",
|
|
597
|
+
requiresType: false,
|
|
598
|
+
requiresCmdWrapper: false,
|
|
599
|
+
scopes: {},
|
|
600
|
+
};
|
|
601
|
+
await installToPath(configFilePath, customIde, universalMode);
|
|
602
|
+
},
|
|
603
|
+
});
|
|
604
|
+
if (otherDetected.length > 0) {
|
|
605
|
+
menuOptions.push({
|
|
606
|
+
label: `Install to other IDEs on this system (${otherDetected.length} found)...`,
|
|
607
|
+
action: async () => {
|
|
608
|
+
console.log("\n Other detected IDEs:\n");
|
|
609
|
+
otherDetected.forEach((id, i) => {
|
|
610
|
+
const oStatus = resolveIdeInstallStatus(IDE_CONFIGS[id]);
|
|
611
|
+
const stLabel = oStatus.state === "installed"
|
|
612
|
+
? green("installed")
|
|
613
|
+
: dim("not installed");
|
|
614
|
+
console.log(` ${i + 1}. ${IDE_CONFIGS[id].name} ${stLabel}`);
|
|
615
|
+
});
|
|
616
|
+
const allIdx = otherDetected.length + 1;
|
|
617
|
+
console.log(` ${allIdx}. Install to ALL of the above`);
|
|
618
|
+
console.log(` 0. Cancel`);
|
|
619
|
+
const ans = await askQuestion(`\n Select [0-${allIdx}]: `);
|
|
620
|
+
const ch = parseInt(ans.trim(), 10);
|
|
621
|
+
if (isNaN(ch) || ch === 0)
|
|
622
|
+
return;
|
|
623
|
+
if (ch === allIdx) {
|
|
624
|
+
for (const id of otherDetected) {
|
|
625
|
+
await performInstallationForIde(id, IDE_CONFIGS[id], false, universalMode, forceGlobal);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
else if (ch >= 1 && ch <= otherDetected.length) {
|
|
629
|
+
const selId = otherDetected[ch - 1];
|
|
630
|
+
await performInstallationForIde(selId, IDE_CONFIGS[selId], false, universalMode, forceGlobal);
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
console.log(" Invalid selection.");
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
});
|
|
414
637
|
}
|
|
415
|
-
|
|
638
|
+
menuOptions.push({
|
|
639
|
+
label: "Cancel",
|
|
640
|
+
action: async () => { console.log(" Installation cancelled."); },
|
|
641
|
+
});
|
|
642
|
+
// ── Print menu ───────────────────────────────────────────────────
|
|
643
|
+
console.log(" What would you like to do?\n");
|
|
644
|
+
menuOptions.forEach((opt, i) => {
|
|
645
|
+
console.log(` ${i + 1}. ${opt.label}`);
|
|
646
|
+
});
|
|
647
|
+
const ans = await askQuestion(`\n Select [1-${menuOptions.length}]: `);
|
|
648
|
+
const choice = parseInt(ans.trim(), 10);
|
|
649
|
+
if (isNaN(choice) || choice < 1 || choice > menuOptions.length) {
|
|
650
|
+
// Default to first option (install/update) if user just presses Enter
|
|
651
|
+
if (ans.trim() === "") {
|
|
652
|
+
await menuOptions[0].action();
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
console.log(" Invalid selection. Exiting.");
|
|
656
|
+
process.exit(1);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
else {
|
|
660
|
+
await menuOptions[choice - 1].action();
|
|
661
|
+
}
|
|
662
|
+
return;
|
|
416
663
|
}
|
|
417
|
-
|
|
418
|
-
|
|
664
|
+
// ── No IDE detected from environment ─────────────────────────────
|
|
665
|
+
if (nonInteractive) {
|
|
419
666
|
if (allDetected.length > 0) {
|
|
667
|
+
console.log(`\n🧠 Engram MCP Installer v${currentVersion}\n`);
|
|
420
668
|
console.log(`🔍 Found ${allDetected.length} installed IDE(s): ${allDetected.map(id => IDE_CONFIGS[id].name).join(", ")}`);
|
|
421
669
|
for (const id of allDetected) {
|
|
422
670
|
await performInstallationForIde(id, IDE_CONFIGS[id], true, universalMode, forceGlobal);
|
|
@@ -431,42 +679,39 @@ Examples:
|
|
|
431
679
|
console.error("\n Run 'engram install --list' to see detection status.");
|
|
432
680
|
process.exit(1);
|
|
433
681
|
}
|
|
434
|
-
// Interactive
|
|
435
|
-
console.log(
|
|
682
|
+
// ── Interactive fall-through: no IDE detected, show full list ─────
|
|
683
|
+
console.log(`\n ${gray(hr)}`);
|
|
684
|
+
console.log(` ${bold("🧠 Engram MCP Installer")} ${gray("v" + currentVersion)}`);
|
|
685
|
+
console.log(` ${gray(hr)}`);
|
|
686
|
+
console.log(` ${dim("No IDE detected from terminal environment.")}`);
|
|
687
|
+
console.log(` ${dim("Select an IDE to install Engram for:")}\n`);
|
|
436
688
|
const ideKeys = Object.keys(IDE_CONFIGS);
|
|
437
689
|
ideKeys.forEach((key, index) => {
|
|
438
|
-
|
|
690
|
+
const oStatus = resolveIdeInstallStatus(IDE_CONFIGS[key]);
|
|
691
|
+
const stLabel = oStatus.state === "installed"
|
|
692
|
+
? green("installed")
|
|
693
|
+
: oStatus.state === "not-installed"
|
|
694
|
+
? dim("detected")
|
|
695
|
+
: "";
|
|
696
|
+
console.log(` ${(index + 1).toString().padStart(2)}. ${IDE_CONFIGS[key].name} ${stLabel}`);
|
|
439
697
|
});
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
const allOptLabel = allDetected.length > 0
|
|
445
|
-
? `Install to ALL detected IDEs (${allDetected.map(id => IDE_CONFIGS[id].name).join(", ")})`
|
|
446
|
-
: `Install to ALL IDEs (none detected — will attempt all)`;
|
|
447
|
-
console.log(` ${allOpt}. ${allOptLabel}`);
|
|
448
|
-
console.log(` ${customOpt}. Custom config path...`);
|
|
449
|
-
console.log(` 0. Cancel`);
|
|
450
|
-
const answer = await askQuestion(`\nSelect an option [0-${customOpt}]: `);
|
|
698
|
+
const customOpt = ideKeys.length + 1;
|
|
699
|
+
console.log(` ${customOpt.toString().padStart(2)}. Custom config directory...`);
|
|
700
|
+
console.log(` 0. Cancel`);
|
|
701
|
+
const answer = await askQuestion(`\n Select [0-${customOpt}]: `);
|
|
451
702
|
const choice = parseInt(answer.trim(), 10);
|
|
452
703
|
if (isNaN(choice) || choice === 0) {
|
|
453
|
-
console.log("Installation cancelled.");
|
|
704
|
+
console.log(" Installation cancelled.");
|
|
454
705
|
process.exit(0);
|
|
455
706
|
}
|
|
456
|
-
if (choice ===
|
|
457
|
-
|
|
458
|
-
const targets = allDetected.length > 0 ? allDetected : Object.keys(IDE_CONFIGS);
|
|
459
|
-
for (const id of targets) {
|
|
460
|
-
await performInstallationForIde(id, IDE_CONFIGS[id], true, universalMode, forceGlobal);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
else if (choice === customOpt) {
|
|
464
|
-
const customPath = await askQuestion("Enter the absolute path to your MCP config JSON file: ");
|
|
707
|
+
if (choice === customOpt) {
|
|
708
|
+
const customPath = await askQuestion(" Enter the path to the directory containing (or to create) the MCP config file:\n > ");
|
|
465
709
|
if (!customPath.trim()) {
|
|
466
|
-
console.log("No path provided. Exiting.");
|
|
710
|
+
console.log(" No path provided. Exiting.");
|
|
467
711
|
process.exit(1);
|
|
468
712
|
}
|
|
469
|
-
|
|
713
|
+
const resolvedPath = path.resolve(customPath.trim());
|
|
714
|
+
const configFilePath = path.join(resolvedPath, "mcp.json");
|
|
470
715
|
const customIde = {
|
|
471
716
|
name: "Custom Path",
|
|
472
717
|
configKey: "mcpServers",
|
|
@@ -474,21 +719,21 @@ Examples:
|
|
|
474
719
|
requiresCmdWrapper: false,
|
|
475
720
|
scopes: {},
|
|
476
721
|
};
|
|
477
|
-
await installToPath(
|
|
722
|
+
await installToPath(configFilePath, customIde, universalMode);
|
|
478
723
|
}
|
|
479
724
|
else if (choice >= 1 && choice <= ideKeys.length) {
|
|
480
725
|
const selectedKey = ideKeys[choice - 1];
|
|
481
726
|
await performInstallationForIde(selectedKey, IDE_CONFIGS[selectedKey], false, universalMode, forceGlobal);
|
|
482
727
|
}
|
|
483
728
|
else {
|
|
484
|
-
console.log("\
|
|
729
|
+
console.log("\n Invalid selection. Exiting.");
|
|
485
730
|
process.exit(1);
|
|
486
731
|
}
|
|
487
732
|
}
|
|
488
733
|
// ─── Per-IDE Installation ────────────────────────────────────────────
|
|
489
734
|
async function performInstallationForIde(id, ide, nonInteractive, universal = false, forceGlobal = false) {
|
|
490
735
|
const supportsLocal = ide.scopes?.localDirs && ide.scopes.localDirs.length > 0;
|
|
491
|
-
const supportsGlobal = ide.scopes?.global && ide.scopes.global.length > 0;
|
|
736
|
+
const supportsGlobal = (ide.scopes?.global && ide.scopes.global.length > 0) || !!ide.resolveGlobalPaths;
|
|
492
737
|
// JetBrains: the global config path is community-sourced and not confirmed by official docs.
|
|
493
738
|
// Official JetBrains MCP config is managed via Settings | Tools | AI Assistant | Model Context Protocol.
|
|
494
739
|
// We attempt the file path as a best-effort fallback; a warning ensures users know to verify.
|
|
@@ -515,25 +760,40 @@ async function performInstallationForIde(id, ide, nonInteractive, universal = fa
|
|
|
515
760
|
targetScope = "global";
|
|
516
761
|
}
|
|
517
762
|
else if (supportsLocal && supportsGlobal && !nonInteractive) {
|
|
518
|
-
console.log(`\n${ide.name} supports two MCP config
|
|
519
|
-
console.log(`
|
|
520
|
-
console.log(`
|
|
521
|
-
console.log(`\n Note: This
|
|
522
|
-
console.log(` its database. The database is always
|
|
523
|
-
const scopeAns = await askQuestion("Select scope [1-2] (default
|
|
524
|
-
if (scopeAns.trim() === "
|
|
525
|
-
targetScope = "
|
|
763
|
+
console.log(`\n ${ide.name} supports two MCP config locations:\n`);
|
|
764
|
+
console.log(` 1. Global — user-level IDE config (all projects share this MCP server)`);
|
|
765
|
+
console.log(` 2. Local — project-specific config file (recommended)`);
|
|
766
|
+
console.log(`\n Note: This controls WHERE the MCP entry is registered, not where Engram`);
|
|
767
|
+
console.log(` stores its database. The database is always per-project automatically.\n`);
|
|
768
|
+
const scopeAns = await askQuestion(" Select scope [1-2] (default 2 — local): ");
|
|
769
|
+
if (scopeAns.trim() === "1") {
|
|
770
|
+
targetScope = "global";
|
|
526
771
|
}
|
|
527
772
|
else {
|
|
528
|
-
targetScope = "
|
|
773
|
+
targetScope = "local";
|
|
529
774
|
}
|
|
530
775
|
}
|
|
531
776
|
if (targetScope === "global" && supportsGlobal) {
|
|
532
777
|
// Global installs on IDEs without workspaceVar get --ide=<id> so the server
|
|
533
778
|
// opens a per-IDE DB shard (memory-{id}.db) instead of competing on memory.db.
|
|
534
779
|
const globalIdeKey = ide.workspaceVar ? undefined : id;
|
|
535
|
-
|
|
536
|
-
|
|
780
|
+
// For IDEs with versioned config dirs (e.g. Android Studio), install to ALL
|
|
781
|
+
// found versions; for regular IDEs pick the first existing path or the default.
|
|
782
|
+
if (ide.resolveGlobalPaths) {
|
|
783
|
+
const allPaths = ide.resolveGlobalPaths();
|
|
784
|
+
if (allPaths.length === 0) {
|
|
785
|
+
console.log(`\n⚠️ ${ide.name} — no config directories found on this machine.`);
|
|
786
|
+
}
|
|
787
|
+
else {
|
|
788
|
+
for (const configPath of allPaths) {
|
|
789
|
+
await installToPath(configPath, ide, universal, globalIdeKey);
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
else {
|
|
794
|
+
const configPath = ide.scopes.global.find((p) => fs.existsSync(p)) || ide.scopes.global[0];
|
|
795
|
+
await installToPath(configPath, ide, universal, globalIdeKey);
|
|
796
|
+
}
|
|
537
797
|
}
|
|
538
798
|
else if (targetScope === "local") {
|
|
539
799
|
if (nonInteractive) {
|
|
@@ -545,12 +805,37 @@ async function performInstallationForIde(id, ide, nonInteractive, universal = fa
|
|
|
545
805
|
}
|
|
546
806
|
else {
|
|
547
807
|
const cwd = process.cwd();
|
|
548
|
-
const
|
|
549
|
-
const resolvedDir = solutionDir.trim() || cwd;
|
|
808
|
+
const projectInfo = detectProjectRootForDisplay(cwd);
|
|
550
809
|
const localDirPrefix = ide.scopes.localDirs[0];
|
|
551
810
|
const configFileName = ide.scopes.localFile ?? (localDirPrefix === "" ? ".mcp.json" : "mcp.json");
|
|
552
|
-
const configPath = path.join(
|
|
553
|
-
|
|
811
|
+
const configPath = path.join(projectInfo.root, localDirPrefix, configFileName);
|
|
812
|
+
if (projectInfo.confidence === "high") {
|
|
813
|
+
console.log(`\n Detected project root: ${projectInfo.root} (${projectInfo.evidence})`);
|
|
814
|
+
console.log(` Config will be written to: ${configPath}\n`);
|
|
815
|
+
const confirmAns = await askQuestion(" Is this correct? [Y/n / enter different path]: ");
|
|
816
|
+
const trimmed = confirmAns.trim();
|
|
817
|
+
if (trimmed.toLowerCase() === "n") {
|
|
818
|
+
console.log(" Installation cancelled.");
|
|
819
|
+
return;
|
|
820
|
+
}
|
|
821
|
+
else if (trimmed && trimmed.toLowerCase() !== "y" && trimmed.toLowerCase() !== "yes") {
|
|
822
|
+
// User typed a custom path
|
|
823
|
+
const resolvedDir = path.resolve(trimmed);
|
|
824
|
+
const customConfigPath = path.join(resolvedDir, localDirPrefix, configFileName);
|
|
825
|
+
await installToPath(customConfigPath, ide, universal);
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
await installToPath(configPath, ide, universal);
|
|
829
|
+
}
|
|
830
|
+
else {
|
|
831
|
+
// Low confidence — ask the user explicitly
|
|
832
|
+
console.log(`\n ⚠️ Could not detect a project root from the current directory.`);
|
|
833
|
+
console.log(` (no .git, package.json, or other project markers found)\n`);
|
|
834
|
+
const solutionDir = await askQuestion(` Enter the path to your ${ide.name} project directory:\n [${cwd}]: `);
|
|
835
|
+
const resolvedDir = solutionDir.trim() || cwd;
|
|
836
|
+
const customConfigPath = path.join(resolvedDir, localDirPrefix, configFileName);
|
|
837
|
+
await installToPath(customConfigPath, ide, universal);
|
|
838
|
+
}
|
|
554
839
|
}
|
|
555
840
|
}
|
|
556
841
|
else if (!supportsGlobal && !supportsLocal) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "engram-mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Engram — Persistent Memory Cortex for AI coding agents. Gives agents session continuity, change tracking, decision logging, and project intelligence across sessions.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"type": "git",
|
|
16
16
|
"url": "git+https://github.com/keggan-std/Engram.git"
|
|
17
17
|
},
|
|
18
|
-
"releaseNotes": "# v1.
|
|
18
|
+
"releaseNotes": "# v1.12.0 — Android Studio Support + Installer UX Redesign\n\n**Released:** v1.12.0 — March 6, 2026\n\n## Overview\n\nv1.12.0 adds Android Studio as the 14th supported IDE and completely redesigns the interactive installer experience. The installer now auto-detects the current IDE and shows a focused status panel instead of prompting to install across all IDEs. Project root detection, scope defaults, and multi-version config handling are all improved. Zero breaking changes. No schema migration.\n\n557 tests pass.\n\n---\n\n## What's New\n\n### Android Studio MCP Support (14th IDE)\n\nAndroid Studio now has full stdio-based MCP support via the installer. Despite official docs describing HTTP-only transport, real-world testing confirms stdio transport works identically to other JetBrains-family IDEs.\n\n**Key details:**\n\n- **Version-specific config discovery** — `resolveGlobalPaths()` globs `%APPDATA%\\Google\\AndroidStudio*\\mcp.json` (Windows) / `~/Library/Application Support/Google/AndroidStudio*/mcp.json` (Mac), finding all installed versions automatically\n- **Install writes to ALL discovered versions** — e.g., AndroidStudio2024.1, 2024.2, 2024.3, 2025.1\n- **`enabled: true` required** — Android Studio requires this field in each MCP server entry; the installer adds it automatically via `extraEntryFields`\n- **Environment detection** — `STUDIO_VM_OPTIONS` env var identifies when the installer is running from within Android Studio\n- **Config key** — uses `\"mcpServers\"` (not `\"servers\"`)\n\n```bash\nnpx -y engram-mcp-server install --ide androidstudio\n```\n\n### Installer UX Redesign\n\nThe interactive installer has been completely rebuilt with a modern, focused experience:\n\n**Focused Status Panel** — When an IDE is detected from the terminal environment, the installer shows a compact status panel with all relevant information instead of asking \"install for all IDEs?\":\n\n```\n ──────────────────────────────────────────────────────────────\n 🧠 Engram MCP Installer v1.12.0\n ──────────────────────────────────────────────────────────────\n Detected IDE : VS Code (GitHub Copilot)\n Config file : C:\\Users\\dev\\.vscode\\mcp.json\n Database root : C:\\Users\\dev\\my-project (git repository)\n Installed : v1.11.0 ⬆ v1.12.0 available\n ──────────────────────────────────────────────────────────────\n\n What would you like to do?\n\n 1. Update Engram to v1.12.0 in VS Code (GitHub Copilot)\n 2. Enter a custom config directory...\n 3. Install to other IDEs on this system (3 found)...\n 4. Cancel\n```\n\n**Project Root Auto-Detection** — When installing to a local (project-level) config, the installer walks up from cwd looking for project markers (`.git`, `package.json`, `Cargo.toml`, `go.mod`, `pyproject.toml`, `build.gradle`, `pom.xml`, `.engram`). If found with high confidence, it pre-fills the path and asks for confirmation. Users can accept, reject, or type a different path.\n\n**Scope Default Fixed** — The scope prompt now defaults to **local** (project-level), matching Decision #20. Previously it defaulted to global, contradicting the recommended configuration.\n\n**Improved `--check` Output** — `--check` now shows ALL version-specific global config paths for IDEs like Android Studio (previously only showed the first found path and stopped).\n\n**Improved `--list` Detection** — `--list` now uses the same robust engram detection logic as the rest of the installer (checks `command` and `args` fields for \"engram\", not just the exact key name).\n\n### Code Quality\n\n- Extracted shared helpers from the installer monolith: `makeColors()`, `semverCmp()`, `fetchNpmLatest()`, `detectProjectRootForDisplay()`, `resolveIdeInstallStatus()`\n- Centralized `resolveIdeGlobalPaths()` in `ide-detector.ts` — single source of truth for resolving global paths including `resolveGlobalPaths()` dynamic discovery\n- `IdeDefinition` interface extended with `resolveGlobalPaths?()` and `extraEntryFields?` for IDE-specific customization\n- `makeEngramEntry()` now spreads `ide.extraEntryFields` into the config entry\n\n---\n\n## Files Changed\n\n| File | Change |\n|------|--------|\n| `src/installer/ide-configs.ts` | Added `resolveGlobalPaths`, `extraEntryFields` to `IdeDefinition`; added `androidstudio` entry with glob discovery |\n| `src/installer/ide-detector.ts` | Added `resolveIdeGlobalPaths()` export; Android Studio detection via `STUDIO_VM_OPTIONS` |\n| `src/installer/config-writer.ts` | `makeEngramEntry()` spreads `ide.extraEntryFields` |\n| `src/installer/index.ts` | Full UX redesign: status panel, project root detection, scope fix, menu system, shared helpers |\n| `tests/installer/installer.test.ts` | Updated scope assertion for `resolveGlobalPaths` |\n| `README.md` | Added Android Studio to overview, `--ide` values, config key note; added manual config section |\n| `llms.txt` | Added Android Studio to compatible IDE list |\n\n---\n\n## Upgrade\n\nNo configuration changes required. No schema migration.\n\n```bash\nnpx -y engram-mcp-server install\n```\n\n---",
|
|
19
19
|
"scripts": {
|
|
20
20
|
"build": "tsc",
|
|
21
21
|
"prepack": "node scripts/inject-release-notes.js && npm run clean && npm run build",
|