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 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,CAoD3G;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"}
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":"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"}
@@ -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":"AAQA,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,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,CAiNrD,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
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":"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"}
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,CAkDhD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CA4B9C"}
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
- if (!ide.scopes.global)
126
+ const globalPaths = resolveIdeGlobalPaths(ide);
127
+ if (!globalPaths.length)
107
128
  continue;
108
- const isPresent = ide.scopes.global.some(p => fs.existsSync(p) || isReliableParent(p));
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":"AAuCA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,iBA0ehD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AA2KA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,iBAmmBhD"}
@@ -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
- if (ide.scopes.global) {
99
- const foundPath = ide.scopes.global.find(p => fs.existsSync(p));
100
- if (foundPath) {
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(foundPath);
104
- if (config?.[ide.configKey]?.engram)
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(` ⚠️ ${foundPath} — invalid JSON (run 'engram install' to repair)`);
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 usesColor = process.stdout.isTTY ?? false;
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
- let npmLatest = null;
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: use first found path. If none found, keep a not-found placeholder so
217
- // "detected config but no engram entry" stays distinct from "IDE not present at all".
218
- if (ide.scopes.global?.length) {
219
- let found = false;
220
- for (const gp of ide.scopes.global) {
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
- found = true;
225
- break;
339
+ anyFound = true;
226
340
  }
227
341
  }
228
- if (!found)
229
- entries.push({ state: "not-found", scope: "global", filePath: ide.scopes.global[0] });
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
- if (ide.scopes.global) {
357
- for (const configPath of ide.scopes.global) {
358
- if (fs.existsSync(configPath)) {
359
- if (removeFromConfig(configPath, ide)) {
360
- console.log(`✅ Removed Engram from ${configPath}`);
361
- removed = true;
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
- console.log("\n🧠 Engram MCP Installer\n");
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
- console.log(`🔍 Detected environment: ${IDE_CONFIGS[currentIde].name}`);
392
- if (otherDetected.length > 0) {
393
- console.log(` Also found : ${otherDetected.map(id => IDE_CONFIGS[id].name).join(", ")}`);
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 to current IDE first, then all other detected IDEs automatically.
397
- await performInstallationForIde(currentIde, IDE_CONFIGS[currentIde], true, universalMode, forceGlobal);
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
- const targetIds = [currentIde, ...otherDetected];
404
- const targetNames = targetIds.map(id => IDE_CONFIGS[id].name).join(", ");
405
- const prompt = otherDetected.length > 0
406
- ? ` Install Engram for all ${targetIds.length} IDEs (${targetNames})? [Y/n]: `
407
- : ` Install Engram for this IDE? [Y/n]: `;
408
- const ans = await askQuestion(prompt);
409
- if (ans.trim().toLowerCase() !== 'n') {
410
- for (const id of targetIds) {
411
- await performInstallationForIde(id, IDE_CONFIGS[id], false, universalMode, forceGlobal);
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
- return;
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
- console.log("");
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
- else if (nonInteractive) {
418
- // No terminal env var match — fall back to filesystem scan.
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 menu
435
- console.log("Where would you like to configure the Engram MCP server?\n");
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
- console.log(` ${index + 1}. ${IDE_CONFIGS[key].name}`);
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 allOpt = ideKeys.length + 1;
441
- const customOpt = ideKeys.length + 2;
442
- // Show which IDEs were actually found on this machine so the user knows
443
- // what "ALL detected" will cover before they pick that option.
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 === allOpt) {
457
- // Prefer detected IDEs; fall back to all if none found.
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
- // Custom: use mcpServers format as safe default
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(customPath.trim(), customIde, universalMode);
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("\nInvalid selection. Exiting.");
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 file locations:`);
519
- console.log(` 1. Global — writes to your user-level IDE config (all projects use this MCP)`);
520
- console.log(` 2. Local — writes to a config file inside a specific project folder`);
521
- console.log(`\n Note: This only controls WHERE the MCP is registered, not where Engram stores`);
522
- console.log(` its database. The database is always placed at your project root automatically.`);
523
- const scopeAns = await askQuestion("Select scope [1-2] (default 1): ");
524
- if (scopeAns.trim() === "2") {
525
- targetScope = "local";
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 = "global";
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
- const configPath = ide.scopes.global.find((p) => fs.existsSync(p)) || ide.scopes.global[0];
536
- await installToPath(configPath, ide, universal, globalIdeKey);
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 solutionDir = await askQuestion(`Enter the absolute path to your ${ide.name} project directory:\n [${cwd}]: `);
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(resolvedDir, localDirPrefix, configFileName);
553
- await installToPath(configPath, ide, universal);
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":"AAAA,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAE/E,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrI,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEjG,wEAAwE;AAExE,SAAS,KAAK;IACV,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,4EAA4E;AAE5E,KAAK,UAAU,WAAW,CAAC,KAAa;IACpC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACX,gDAAgD;QAChD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QACnD,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,wEAAwE;AAExE,SAAS,UAAU;IACf,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;IAChD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO;QACH,IAAI,EAAI,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAI,CAAC,CAAC;QACpC,GAAG,EAAK,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAI,CAAC,CAAC;QACpC,KAAK,EAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAG,CAAC,CAAC;QACpC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAG,CAAC,CAAC;QACpC,IAAI,EAAI,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAG,CAAC,CAAC;QACpC,IAAI,EAAI,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAG,CAAC,CAAC;KACvC,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACnC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAC7F,OAAO,CAAC,CAAC;AACb,CAAC;AAED,uEAAuE;AAEvE;;;GAGG;AACH,SAAS,2BAA2B,CAAC,QAAgB;IACjD,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACrC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACzE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC7C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACvE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACrE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACjE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACzE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAClG,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACzE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACxE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,8CAA8C,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC3G,CAAC;AAED,wEAAwE;AAExE,KAAK,UAAU,cAAc;IACzB,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,qDAAqD,EAAE;YAC3E,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE;SACjD,CAAC,CAAC;QACH,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACT,OAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,EAA8B,CAAA,CAAC,SAAS,CAAY,CAAC;QAChF,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AAChB,CAAC;AAUD,SAAS,uBAAuB,CAAC,GAAkB;IAC/C,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC/C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QACzC,IAAI,MAA+B,CAAC;QACpC,IAAI,CAAC;YAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAA4B,CAAC;QAAC,CAAC;QACjE,OAAO,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,YAAY,gBAAgB;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;YAChF,MAAM,CAAC,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAA4C,CAAC;QAC7F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAChD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,KAAK,QAAQ;mBACd,MAAM,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;mBAC5C,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,IAAK,EAAE,CAAC,IAAiB,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;QACH,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YACrC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE,eAAe,IAAI,GAAG,CAAC,EAAE,CAAC;QACvG,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;IAClD,CAAC;IACD,mBAAmB;IACnB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAClF,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;gBAAE,SAAS;YACjC,IAAI,MAA+B,CAAC;YACpC,IAAI,CAAC;gBAAC,MAAM,GAAG,QAAQ,CAAC,EAAE,CAA4B,CAAC;YAAC,CAAC;YACzD,OAAO,CAAC,EAAE,CAAC;gBACP,IAAI,CAAC,YAAY,gBAAgB;oBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;gBACpF,MAAM,CAAC,CAAC;YACZ,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAA4C,CAAC;YAC7F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAChD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,KAAK,QAAQ;uBACd,MAAM,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;uBAC5C,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,IAAK,EAAE,CAAC,IAAiB,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChH,CAAC,CAAC,CAAC;YACH,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;gBACrC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE,eAAe,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3G,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACtD,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC;AACpF,CAAC;AAED,wEAAwE;AAExE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC7C,mFAAmF;IACnF,+EAA+E;IAC/E,oFAAoF;IACpF,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,WAAW,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;YAClE,IAAI,MAAM,EAAE,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;gBAC3F,OAAO,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;YAC1G,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjF,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE9C,oEAAoE;IACpE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,sBAAsB,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,oEAAoE;IACpE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC;wBACI,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;IAoBzC,QAAQ;;;;;;;;;CASX,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,oEAAoE;IACpE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAE/C,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACrB,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;oBAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;wBACrB,0FAA0F;wBAC1F,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;4BAAE,QAAQ,GAAG,IAAI,CAAC;wBAClE,SAAS;oBACb,CAAC;oBACD,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,SAAS;wBAAE,MAAM,CAAC,qDAAqD;oBAC3E,IAAI,CAAC;wBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAA4B,CAAC;wBACvD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAA4C,CAAC;wBAC7F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;4BAC9C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;4BACxB,OAAO,CAAC,KAAK,QAAQ;mCACd,MAAM,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;mCAC5C,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,IAAK,EAAE,CAAC,IAAiB,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAChH,CAAC,CAAC,CAAC;wBACH,IAAI,SAAS;4BAAE,SAAS,GAAG,IAAI,CAAC;oBACpC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACT,IAAI,CAAC,YAAY,gBAAgB,EAAE,CAAC;4BAChC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,kDAAkD,CAAC,CAAC;wBAChF,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5E,MAAM,WAAW,GAAG,SAAS;gBACzB,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,QAAQ;oBACN,CAAC,CAAC,2BAA2B;oBAC7B,CAAC,CAAC,aAAa,CAAC;YAExB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,UAAU,KAAK,WAAW,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACvH,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,4EAA4E;IAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,0EAA0E;QAC1E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;QAC9D,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE1B,0EAA0E;QAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,2BAA2B,CAAC,gCAAgC,CAAC,CAAC;QAC/F,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAC;QAEzC,MAAM,OAAO,GAAM,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,CAAC,SAAS,CAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC3C,CAAC,CAAC,OAAO,GAAI,CAAC,CAAE,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;gBACzC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;oBACvC,CAAC,CAAiB,MAAM,CAAC,OAAO,SAAS,eAAe,CAAC,CAAC;QAE3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC;QACxF,IAAI,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAUtD,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,KAAyB,EAAE,GAAkB,EAAe,EAAE;YAClG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAC7E,IAAI,MAA+B,CAAC;YACpC,IAAI,CAAC;gBAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAA4B,CAAC;YAAC,CAAC;YAC/D,OAAO,CAAC,EAAE,CAAC;gBACP,IAAI,CAAC,YAAY,gBAAgB;oBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;gBACrF,MAAM,CAAC,CAAC;YACZ,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAA4C,CAAC;YAC7F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAChD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,KAAK,QAAQ;uBACd,MAAM,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;uBAC5C,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,IAAK,EAAE,CAAC,IAAiB,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW;gBAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,EAAE,eAAe,IAAI,GAAG,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAO,SAAS,IAAI,cAAc,CAAC;YAC5C,MAAM,SAAS,GAAG,gBAAgB,KAAK,GAAG,CAAC;YAC3C,MAAM,IAAI,GAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YAClE,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;gBACjC,CAAC,CAAC,SAAS,CAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;oBACzC,CAAC,CAAc,MAAM,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;gBAC1D,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC3D,CAAC,CAAC;QAIF,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAChD,MAAM,OAAO,GAAkB,EAAE,CAAC;YAElC,qEAAqE;YACrE,wEAAwE;YACxE,wEAAwE;YACxE,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBACtD,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBAC/C,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;oBAC3B,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;oBAC1C,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;wBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAAC,QAAQ,GAAG,IAAI,CAAC;oBAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;oBAClC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpF,CAAC;YACL,CAAC;YAED,4EAA4E;YAC5E,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;gBAC/B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBAClF,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;oBACzC,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW;wBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;YACL,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,0EAA0E;QAC1E,IAAI,cAAc,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,iBAAiB,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC;QAEzF,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAEjC,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;YAEhE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAClE,gBAAgB,EAAE,CAAC;gBACnB,SAAS;YACb,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO;oBAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;oBAChD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAEjB,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW;oBAAE,SAAS;gBAEtC,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oBACzD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;oBAClD,eAAe,GAAG,IAAI,CAAC;oBACvB,SAAS;gBACb,CAAC;gBACD,IAAI,CAAC,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;oBACzF,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;oBAClD,SAAS;gBACb,CAAC;gBACD,YAAY;gBACZ,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC9F,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,IAAI,YAAY,EAAE,CAAC;gBACf,cAAc,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAI,OAAyB,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CACvG,CAAC;gBACF,IAAI,WAAW;oBAAE,eAAe,EAAE,CAAC;YACvC,CAAC;iBAAM,IAAI,eAAe,EAAE,CAAC;gBACzB,iBAAiB,EAAE,CAAC;YACxB,CAAC;QACL,CAAC;QAED,0EAA0E;QAC1E,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,cAAc;YAAK,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,cAAc,YAAY,CAAC,CAAC,CAAC;QACjF,IAAI,eAAe;YAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,eAAe,cAAc,CAAC,CAAC,CAAC;QACtF,IAAI,iBAAiB;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,iBAAiB,gBAAgB,CAAC,CAAC;QACjF,IAAI,gBAAgB;YAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,eAAe,CAAC,CAAC,CAAC;QAElF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,eAAe,GAAG,CAAC,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAGD,oEAAoE;IACpE,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG;YACf,aAAa;YACb,4EAA4E;YAC5E,2EAA2E;YAC3E,4DAA4D;YAC5D,EAAE;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,oEAAoE;IACpE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC/C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,IAAI,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;oBACnD,OAAO,GAAG,IAAI,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,iBAAiB,SAAS,eAAe,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,yBAAyB,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAC/G,OAAO;IACX,CAAC;IAED,oEAAoE;IACpE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IAC9D,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAE1B,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAElE,IAAI,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAErD,oEAAoE;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B;QAEzE,oEAAoE;QACpE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QAErG,iBAAiB;QACjB,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC9G,MAAM,GAAG,GAAG,SAAS,IAAI,cAAc,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7F,MAAM,aAAa,GAAG,KAAK;gBACvB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,cAAc,YAAY,CAAC;gBAC9F,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,KAAK,aAAa,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,SAAS,IAAI,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,cAAc,EAAE,CAAC;YACjB,2DAA2D;YAC3D,MAAM,yBAAyB,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;YACnF,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;gBAC7B,MAAM,yBAAyB,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;YAC3F,CAAC;YACD,OAAO;QACX,CAAC;QAED,oEAAoE;QACpE,MAAM,WAAW,GAA0D,EAAE,CAAC;QAE9E,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,SAAS,IAAI,cAAc,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,gBAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9F,IAAI,KAAK,EAAE,CAAC;gBACR,WAAW,CAAC,IAAI,CAAC;oBACb,KAAK,EAAE,qBAAqB,cAAc,OAAO,GAAG,CAAC,IAAI,EAAE;oBAC3D,MAAM,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,UAAW,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC;iBAC/F,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,IAAI,CAAC;oBACb,KAAK,EAAE,gCAAgC,GAAG,CAAC,IAAI,EAAE;oBACjD,MAAM,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,UAAW,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC;iBAC/F,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,qBAAqB,GAAG,CAAC,IAAI,EAAE;gBACtC,MAAM,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,UAAW,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC;aAC/F,CAAC,CAAC;QACP,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,oCAAoC;YAC3C,MAAM,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,wFAAwF,CAAC,CAAC;gBAC/H,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;oBAC9C,OAAO;gBACX,CAAC;gBACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,mDAAmD;gBACnD,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;uBAC7D,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC3D,MAAM,cAAc,GAAG,SAAS;oBAC5B,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;oBACjF,CAAC,CAAC,UAAU,CAAC;gBACjB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,2CAA2C,YAAY,EAAE,CAAC,CAAC;oBACvE,OAAO,CAAC,GAAG,CAAC,cAAc,cAAc,yBAAyB,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM,SAAS,GAAkB;oBAC7B,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,YAAY;oBACvB,YAAY,EAAE,KAAK;oBACnB,kBAAkB,EAAE,KAAK;oBACzB,MAAM,EAAE,EAAE;iBACb,CAAC;gBACF,MAAM,aAAa,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YAClE,CAAC;SACJ,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,yCAAyC,aAAa,CAAC,MAAM,YAAY;gBAChF,MAAM,EAAE,KAAK,IAAI,EAAE;oBACf,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;oBAC1C,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;wBAC5B,MAAM,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,WAAW;4BACzC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;4BACpB,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;wBAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC;oBACH,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;oBACxC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,+BAA+B,CAAC,CAAC;oBAC1D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAC7B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,iBAAiB,MAAM,KAAK,CAAC,CAAC;oBAC5D,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;oBACpC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;wBAAE,OAAO;oBAClC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;wBAChB,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;4BAC7B,MAAM,yBAAyB,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;wBAC5F,CAAC;oBACL,CAAC;yBAAM,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;wBAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;wBACpC,MAAM,yBAAyB,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;oBAClG,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;oBACxC,CAAC;gBACL,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;SACpE,CAAC,CAAC;QAEH,oEAAoE;QACpE,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,iBAAiB,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;YAC7D,sEAAsE;YACtE,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACpB,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO;IACX,CAAC;IAED,oEAAoE;IACpE,IAAI,cAAc,EAAE,CAAC;QACjB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,8BAA8B,cAAc,IAAI,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,MAAM,sBAAsB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1H,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;gBAC3B,MAAM,yBAAyB,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;YAC3F,CAAC;YACD,OAAO;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,qEAAqE;IACrE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,4CAA4C,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,sCAAsC,CAAC,IAAI,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,WAAW;YACzC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;YACpB,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,eAAe;gBAC/B,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;gBACjB,CAAC,CAAC,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,iBAAiB,SAAS,KAAK,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3C,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,wFAAwF,CAAC,CAAC;QAC/H,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAkB;YAC7B,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,YAAY;YACvB,YAAY,EAAE,KAAK;YACnB,kBAAkB,EAAE,KAAK;YACzB,MAAM,EAAE,EAAE;SACb,CAAC;QACF,MAAM,aAAa,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,yBAAyB,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAC9G,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,wEAAwE;AAExE,KAAK,UAAU,yBAAyB,CAAC,EAAU,EAAE,GAAkB,EAAE,cAAuB,EAAE,SAAS,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK;IACpI,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/E,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAExG,6FAA6F;IAC7F,yGAAyG;IACzG,8FAA8F;IAC9F,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,oEAAoE,CAAC,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IAC7F,CAAC;IAED,yDAAyD;IACzD,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5C,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG;YACvC,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,oCAAoC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,WAAW,eAAe,CAAC,CAAC;IAC3E,CAAC;IAED,4EAA4E;IAC5E,oEAAoE;IACpE,IAAI,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAEtD,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;QAChC,qDAAqD;QACrD,WAAW,GAAG,QAAQ,CAAC;IAC3B,CAAC;SAAM,IAAI,aAAa,IAAI,cAAc,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,uCAAuC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,4CAA4C,CAAC,CAAC;QACjF,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC1B,WAAW,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,WAAW,GAAG,OAAO,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,IAAI,WAAW,KAAK,QAAQ,IAAI,cAAc,EAAE,CAAC;QAC7C,4EAA4E;QAC5E,+EAA+E;QAC/E,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvD,4EAA4E;QAC5E,gFAAgF;QAChF,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,iDAAiD,CAAC,CAAC;YACpF,CAAC;iBAAM,CAAC;gBACJ,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAChC,MAAM,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;gBAClE,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC;YACrG,MAAM,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;SAAM,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,cAAc,EAAE,CAAC;YACjB,8BAA8B;YAC9B,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,SAAU,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAClG,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;YAC5E,MAAM,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,SAAU,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAClG,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;YAE/E,IAAI,WAAW,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,8BAA8B,WAAW,CAAC,IAAI,MAAM,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACzF,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,IAAI,CAAC,CAAC;gBAC5D,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,mDAAmD,CAAC,CAAC;gBAC1F,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;oBACzC,OAAO;gBACX,CAAC;qBAAM,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;oBACrF,2BAA2B;oBAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;oBAChF,MAAM,aAAa,CAAC,gBAAgB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBACtD,OAAO;gBACX,CAAC;gBACD,MAAM,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACJ,2CAA2C;gBAC3C,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,4BAA4B,GAAG,CAAC,IAAI,2BAA2B,GAAG,KAAK,CAAC,CAAC;gBAC/G,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC;gBAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;gBAChF,MAAM,aAAa,CAAC,gBAAgB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,sCAAsC,CAAC,CAAC;IACzE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,GAAkB,EAAE,SAAS,GAAG,KAAK,EAAE,MAAe;IACnG,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAE5C,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACrB,UAAU,GAAG,WAAW,cAAc,yBAAyB,CAAC;QACpE,CAAC;aAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,UAAU,GAAG,gBAAgB,cAAc,EAAE,CAAC;QAClD,CAAC;aAAM,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;YACtC,UAAU,GAAG,4EAA4E,cAAc,EAAE,CAAC;QAC9G,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,UAAU,GAAG,yBAAyB,cAAc,kBAAkB,CAAC;QAC3E,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "engram-mcp-server",
3
- "version": "1.11.0",
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.11.0 — Developer Experience: Params Coercion, Observations & Session Efficiency\n\n**Released:** v1.11.0 — March 6, 2026\n\n## Overview\n\nv1.11.0 is a focused developer-experience release addressing the top pain points found during a systematic DX audit. It eliminates an entire class of MCP client serialization errors, adds a lightweight `record_observation` action as a semantic alternative to misusing `record_decision`, and cuts session-start token overhead by ~40%. Six bug fixes are included. Zero breaking changes.\n\n557 tests pass. Schema migrated to V24.\n\n---\n\n## What's New\n\n### Params Coercion Full Coverage (WS3)\n\nAll MCP clients (VS Code Copilot, Cursor, Claude Desktop, universal mode) can now pass arrays without errors. Previously 9 Zod fields were missing coercion, causing intermittent `\"must be object\"` or silent parse failures at ~20% failure rate on complex calls.\n\n**Fixed fields:**\n\n| Tool | Field | Type |\n|------|-------|------|\n| `record_decisions_batch` | `decisions[].tags` | `string[]` |\n| `record_decisions_batch` | `decisions[].affected_files` | `string[]` |\n| `checkpoint` | `relevant_files` | `string[]` |\n| `agent_sync` | `specializations` | `string[]` |\n| `create_task` / `update_task` | `depends_on` | `number[]` |\n| `update_task` | `blocked_by`, `add_blocks`, `add_blocked_by` | `number[]` |\n| `export` (admin) | `ids` | `number[]` |\n\n**New utility:** `coerceNumberArray()` in `src/utils.ts` mirrors `coerceStringArray()` for integer array fields.\n\n**Universal mode fix (critical):** `HandlerCapturer` bypasses Zod `z.preprocess()` transforms entirely, so all per-field coercions were silently skipped in universal mode. A new `coerceParams()` function in `src/modes/universal.ts` now pre-processes params before dispatch, handling JSON-stringified arrays and nested object arrays.\n\n### New Action: `record_observation` (WS2)\n\nA semantically correct, lightweight action for factual observations no `rationale` required.\n\n```js\nengram_memory({\n action: \"record_observation\",\n observation: \"The FTS5 index is rebuilt on every migration run\",\n context: \"src/migrations.ts\",\n category: \"codebase\", // codebase | behavior | performance | dependency | general\n tags: [\"fts\", \"migrations\"],\n source: \"agent\" // agent | user | automated\n})\n```\n\nRetrieve with:\n```js\nengram_memory({ action: \"get_observations\", session_id: 42, category: \"codebase\", limit: 20 })\n```\n\nObservations are included in `search` when `scope` is `\"all\"` or `\"observations\"`. Full-text search supported via FTS5 (`fts_observations` virtual table, schema V24).\n\n**Why this matters:** Agents were forced to misuse `record_decision` for factual notes (no rationale needed). `record_observation` is the correct semantic type: lighter than a decision, heavier than a file note.\n\n### Session Verbosity Overhaul (WS1)\n\nThe `summary` verbosity tier has been restructured to reduce session-start output by ~40% (from ~800 to ~500 tokens) while making all content available on-demand.\n\n**Changes:**\n\n| Setting | Before | After |\n|---------|--------|-------|\n| Max decisions shown | 5 (120-char each) | 3 (80-char each) |\n| Max conventions shown | 10 | 6 |\n| Max changes shown | 5 (with timestamp) | 3 (no timestamp) |\n| `git_log` in response | Included | Removed (use `what_changed`) |\n| `counts` object | Absent | Added |\n\nNew `counts` object in every `summary` response:\n```json\n{\n \"counts\": {\n \"decisions\": 18,\n \"conventions\": 6,\n \"tasks\": 4,\n \"changes\": 47,\n \"files\": 129\n }\n}\n```\n\n`minimal` tier now includes `top_decision` and `top_task` so agents get actionable context even in the lowest-verbosity tier.\n\nAll cap values extracted to named constants in `src/constants.ts` for easy tuning.\n\n### Bug Fixes (WS4)\n\n- **`dump` finding persistence**: The `dump` action's `finding` hint previously generated a fake ephemeral ID and stored nothing to the database. It now persists to the new `observations` table.\n- **Session end observation count**: `session end` stats now include `observations_recorded` alongside changes, decisions, and tasks.\n\n### Instance Visibility System\n\nInstance enrollment in the dashboard discovery service is now permanent across restarts. Previously, instances would lose their enrollment on server restart and require re-registration. The dashboard now reliably discovers all registered instances without polling gaps.\n\n---\n\n## Schema\n\n**V24** adds:\n\n```sql\nCREATE TABLE observations (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n session_id INTEGER,\n timestamp TEXT NOT NULL,\n observation TEXT NOT NULL,\n context TEXT,\n category TEXT DEFAULT 'general',\n tags TEXT,\n source TEXT,\n FOREIGN KEY (session_id) REFERENCES sessions(id)\n);\nCREATE INDEX idx_observations_session ON observations(session_id);\nCREATE INDEX idx_observations_category ON observations(category);\n-- FTS5 virtual table\nCREATE VIRTUAL TABLE fts_observations USING fts5(observation, context, content='observations', content_rowid='id');\n```\n\n---\n\n## Agent Instructions Update\n\nThe `.github/copilot-instructions.md` (and global `CLAUDE.md`) has been updated:\n\n- Documents `coerceNumberArray()` for integer array Zod fields\n- Documents the `record_observation` / `get_observations` actions in the tool catalog\n- Clarifies universal mode Zod preprocessing behaviour\n\n---\n\n## Upgrade\n\nNo configuration changes required. The schema migration runs automatically on first start. All existing data is preserved.\n\n```bash\nnpx -y engram-mcp-server install\n```\n\n---",
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",