engram-mcp-server 1.7.2 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +194 -358
  3. package/dist/constants.d.ts +21 -0
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +47 -1
  6. package/dist/constants.js.map +1 -1
  7. package/dist/database.d.ts +1 -1
  8. package/dist/database.d.ts.map +1 -1
  9. package/dist/database.js +47 -16
  10. package/dist/database.js.map +1 -1
  11. package/dist/global-db.d.ts.map +1 -1
  12. package/dist/global-db.js +3 -0
  13. package/dist/global-db.js.map +1 -1
  14. package/dist/index.js +3 -2
  15. package/dist/index.js.map +1 -1
  16. package/dist/installer/config-writer.d.ts +31 -10
  17. package/dist/installer/config-writer.d.ts.map +1 -1
  18. package/dist/installer/config-writer.js +79 -15
  19. package/dist/installer/config-writer.js.map +1 -1
  20. package/dist/installer/ide-configs.d.ts +9 -0
  21. package/dist/installer/ide-configs.d.ts.map +1 -1
  22. package/dist/installer/ide-configs.js +7 -19
  23. package/dist/installer/ide-configs.js.map +1 -1
  24. package/dist/installer/ide-detector.d.ts +10 -6
  25. package/dist/installer/ide-detector.d.ts.map +1 -1
  26. package/dist/installer/ide-detector.js +32 -7
  27. package/dist/installer/ide-detector.js.map +1 -1
  28. package/dist/installer/index.d.ts.map +1 -1
  29. package/dist/installer/index.js +25 -6
  30. package/dist/installer/index.js.map +1 -1
  31. package/dist/utils.d.ts +4 -1
  32. package/dist/utils.d.ts.map +1 -1
  33. package/dist/utils.js +149 -13
  34. package/dist/utils.js.map +1 -1
  35. package/package.json +2 -3
  36. package/scripts/fix-mcp-config.js +0 -23
  37. package/scripts/inject-release-notes.js +0 -67
  38. package/scripts/install-mcp.js +0 -175
@@ -7,6 +7,15 @@ export interface IdeDefinition {
7
7
  requiresType: boolean;
8
8
  /** Whether Windows requires cmd /c wrapper for npx */
9
9
  requiresCmdWrapper: boolean;
10
+ /**
11
+ * FLAW-4 FIX: IDE-native variable for the current workspace/project root.
12
+ * When set, the installer injects `--project-root=<var>` into the MCP args
13
+ * so the server receives the actual workspace path at spawn time, bypassing
14
+ * all heuristic detection.
15
+ *
16
+ * Examples: "${workspaceFolder}" (VS Code/Cursor), "${SolutionDir}" (VS)
17
+ */
18
+ workspaceVar?: string;
10
19
  scopes: {
11
20
  global?: string[];
12
21
  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,MAAM,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,yEAAyE;QACzE,GAAG,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CA6JrD,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
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,MAAM,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,yEAAyE;QACzE,GAAG,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAiJrD,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -27,20 +27,16 @@ export const IDE_CONFIGS = {
27
27
  // ─── VS Code forks ──────────────────────────────────────────────
28
28
  vscode: {
29
29
  name: "VS Code (Copilot)",
30
- // Confirmed: VS Code uses "servers" key, not "mcpServers".
31
- // Source: https://code.visualstudio.com/docs/copilot/customization/mcp-servers
32
30
  configKey: "servers",
33
31
  requiresType: true,
34
32
  requiresCmdWrapper: false,
33
+ // FLAW-4 FIX: VS Code expands ${workspaceFolder} at spawn time — ensures
34
+ // the server always receives the correct project root without heuristics.
35
+ workspaceVar: "${workspaceFolder}",
35
36
  scopes: {
36
- // Global user config. APPDATA now resolves correctly on all OSes:
37
- // Windows : %APPDATA%\Code\User\mcp.json
38
- // macOS : ~/Library/Application Support/Code/User/mcp.json
39
- // Linux : ~/.config/Code/User/mcp.json
40
37
  global: [
41
38
  path.join(APPDATA, "Code", "User", "mcp.json"),
42
39
  ],
43
- // Workspace-level: .vscode/mcp.json in project root.
44
40
  localDirs: [".vscode"],
45
41
  },
46
42
  },
@@ -49,14 +45,12 @@ export const IDE_CONFIGS = {
49
45
  configKey: "mcpServers",
50
46
  requiresType: false,
51
47
  requiresCmdWrapper: false,
48
+ // FLAW-4 FIX: Cursor also expands ${workspaceFolder}
49
+ workspaceVar: "${workspaceFolder}",
52
50
  scopes: {
53
- // Confirmed: ~/.cursor/mcp.json is the cross-platform global path.
54
- // Source: https://cursor.com/docs/context/mcp
55
- // The old APPDATA/Cursor/mcp.json fallback was wrong on every OS.
56
51
  global: [
57
52
  path.join(HOME, ".cursor", "mcp.json"),
58
53
  ],
59
- // Project-level: .cursor/mcp.json in project root.
60
54
  localDirs: [".cursor"],
61
55
  },
62
56
  },
@@ -120,19 +114,13 @@ export const IDE_CONFIGS = {
120
114
  // ─── Microsoft ──────────────────────────────────────────────────
121
115
  visualstudio: {
122
116
  name: "Visual Studio 2022/2026",
123
- // FIXED: Visual Studio uses "servers" key, not "mcpServers".
124
- // Source: https://learn.microsoft.com/en-us/visualstudio/ide/mcp-servers
125
- // Every official example uses { "servers": { ... } }.
126
117
  configKey: "servers",
127
118
  requiresType: false,
128
119
  requiresCmdWrapper: false,
120
+ // FLAW-4 FIX: Visual Studio expands ${SolutionDir} at spawn time
121
+ workspaceVar: "${SolutionDir}",
129
122
  scopes: {
130
- // Global: %USERPROFILE%\.mcp.json (confirmed in MS docs)
131
123
  global: [path.join(HOME, ".mcp.json")],
132
- // Local options (VS checks in order):
133
- // <SOLUTIONDIR>\.mcp.json ← primary (source-controlled)
134
- // <SOLUTIONDIR>\.vs\mcp.json ← VS-specific (user-local)
135
- // localDirs[0] drives the interactive menu; "" → .mcp.json in cwd.
136
124
  localDirs: ["", ".vs"],
137
125
  },
138
126
  },
@@ -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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"}
@@ -11,14 +11,18 @@ export declare function detectCurrentIde(): string | null;
11
11
  /**
12
12
  * Scan all IDE_CONFIGS to find which IDEs appear to be installed on this machine.
13
13
  *
14
- * An IDE is considered present if:
15
- * - Its global config file already exists (previously configured), OR
16
- * - The parent directory of its global config file exists (IDE installed, not yet configured)
14
+ * FLAW-9 FIX: The old code treated "parent dir exists" as a detection signal,
15
+ * causing false positives for:
16
+ * - Visual Studio: ~/.mcp.json parent is HOME always exists
17
+ * - Cline: parent is %APPDATA%\Code\... which exists when VS Code is installed
17
18
  *
18
- * This is filesystem-based it works regardless of which IDE launched the terminal.
19
- * Most developers have several IDEs installed simultaneously; this function finds them all.
19
+ * New rule: an IDE is detected only when:
20
+ * (a) Its config file itself exists (previously configured), OR
21
+ * (b) Its parent dir is at least 2 path segments deeper than a known root
22
+ * (HOME or APPDATA) AND exists — this filters out shallow paths like
23
+ * ~/.mcp.json whose parent is just the home directory.
20
24
  *
21
- * Returns IDE keys in IDE_CONFIGS definition order.
25
+ * An IDE is considered present if any of its global paths passes these checks.
22
26
  */
23
27
  export declare function detectInstalledIdes(): string[];
24
28
  //# sourceMappingURL=ide-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ide-detector.d.ts","sourceRoot":"","sources":["../../src/installer/ide-detector.ts"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAkDhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAU9C"}
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"}
@@ -2,6 +2,7 @@
2
2
  // Engram MCP Server — IDE Environment Detection
3
3
  // ============================================================================
4
4
  import fs from "fs";
5
+ import os from "os";
5
6
  import path from "path";
6
7
  import { IDE_CONFIGS } from "./ide-configs.js";
7
8
  /**
@@ -69,24 +70,48 @@ export function detectCurrentIde() {
69
70
  /**
70
71
  * Scan all IDE_CONFIGS to find which IDEs appear to be installed on this machine.
71
72
  *
72
- * An IDE is considered present if:
73
- * - Its global config file already exists (previously configured), OR
74
- * - The parent directory of its global config file exists (IDE installed, not yet configured)
73
+ * FLAW-9 FIX: The old code treated "parent dir exists" as a detection signal,
74
+ * causing false positives for:
75
+ * - Visual Studio: ~/.mcp.json parent is HOME always exists
76
+ * - Cline: parent is %APPDATA%\Code\... which exists when VS Code is installed
75
77
  *
76
- * This is filesystem-based it works regardless of which IDE launched the terminal.
77
- * Most developers have several IDEs installed simultaneously; this function finds them all.
78
+ * New rule: an IDE is detected only when:
79
+ * (a) Its config file itself exists (previously configured), OR
80
+ * (b) Its parent dir is at least 2 path segments deeper than a known root
81
+ * (HOME or APPDATA) AND exists — this filters out shallow paths like
82
+ * ~/.mcp.json whose parent is just the home directory.
78
83
  *
79
- * Returns IDE keys in IDE_CONFIGS definition order.
84
+ * An IDE is considered present if any of its global paths passes these checks.
80
85
  */
81
86
  export function detectInstalledIdes() {
87
+ const HOME = os.homedir();
88
+ const APPDATA = process.env.APPDATA ?? path.join(HOME, "AppData", "Roaming");
89
+ // "shallow" roots — their direct children are not reliable IDE signals
90
+ const shallowRoots = new Set([
91
+ normalisePath(HOME),
92
+ normalisePath(APPDATA),
93
+ normalisePath(path.join(HOME, ".config")),
94
+ ]);
95
+ function isReliableParent(configPath) {
96
+ const parent = normalisePath(path.dirname(configPath));
97
+ // If the parent IS a shallow root, the file living directly there
98
+ // (e.g. ~/.mcp.json) is not a reliable "IDE installed" signal
99
+ if (shallowRoots.has(parent))
100
+ return false;
101
+ // Otherwise the dir being present is a reasonable signal
102
+ return fs.existsSync(path.dirname(configPath));
103
+ }
82
104
  const found = [];
83
105
  for (const [id, ide] of Object.entries(IDE_CONFIGS)) {
84
106
  if (!ide.scopes.global)
85
107
  continue;
86
- const isPresent = ide.scopes.global.some(p => fs.existsSync(p) || fs.existsSync(path.dirname(p)));
108
+ const isPresent = ide.scopes.global.some(p => fs.existsSync(p) || isReliableParent(p));
87
109
  if (isPresent)
88
110
  found.push(id);
89
111
  }
90
112
  return found;
91
113
  }
114
+ function normalisePath(p) {
115
+ return p.replace(/\\/g, "/").replace(/\/$/, "");
116
+ }
92
117
  //# sourceMappingURL=ide-detector.js.map
@@ -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,iBAoXhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAuCA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,iBAqYhD"}
@@ -6,7 +6,7 @@ import path from "path";
6
6
  import readline from "readline";
7
7
  import { fileURLToPath } from "url";
8
8
  import { IDE_CONFIGS } from "./ide-configs.js";
9
- import { addToConfig, removeFromConfig, makeEngramEntry, readJson, getInstallerVersion } from "./config-writer.js";
9
+ import { addToConfig, removeFromConfig, makeEngramEntry, readJson, getInstallerVersion, ConfigParseError } from "./config-writer.js";
10
10
  import { detectCurrentIde, detectInstalledIdes } from "./ide-detector.js";
11
11
  // ─── Helpers ─────────────────────────────────────────────────────────
12
12
  function isTTY() {
@@ -97,9 +97,16 @@ Examples:
97
97
  const foundPath = ide.scopes.global.find(p => fs.existsSync(p));
98
98
  if (foundPath) {
99
99
  detected = true;
100
- const config = readJson(foundPath);
101
- if (config?.[ide.configKey]?.engram)
102
- installed = true;
100
+ try {
101
+ const config = readJson(foundPath);
102
+ if (config?.[ide.configKey]?.engram)
103
+ installed = true;
104
+ }
105
+ catch (e) {
106
+ if (e instanceof ConfigParseError) {
107
+ console.warn(` ⚠️ ${foundPath} — invalid JSON (run 'engram install' to repair)`);
108
+ }
109
+ }
103
110
  }
104
111
  else if (ide.scopes.global.find(p => fs.existsSync(path.dirname(p)))) {
105
112
  detected = true;
@@ -173,8 +180,20 @@ Examples:
173
180
  console.log(` ${id.padEnd(14)} (not detected)`);
174
181
  continue;
175
182
  }
176
- const config = readJson(foundPath);
177
- const entry = config?.[ide.configKey]?.engram;
183
+ let entry = null;
184
+ try {
185
+ const config = readJson(foundPath);
186
+ entry = config?.[ide.configKey]?.engram ?? null;
187
+ }
188
+ catch (e) {
189
+ if (e instanceof ConfigParseError) {
190
+ console.log(` ${id.padEnd(14)} ${foundPath}`);
191
+ console.log(` ${" ".repeat(7)} ⚠️ Invalid JSON in config — run 'engram install' to repair`);
192
+ console.log();
193
+ continue;
194
+ }
195
+ throw e;
196
+ }
178
197
  if (!entry) {
179
198
  console.log(` ${id.padEnd(14)} ${foundPath}`);
180
199
  console.log(` ${"".padEnd(14)} Not installed`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -21,7 +21,10 @@ export declare function coerceStringArray(): z.ZodEffects<z.ZodArray<z.ZodString
21
21
  */
22
22
  export declare function normalizePath(filePath: string, projectRoot?: string): string;
23
23
  /**
24
- * Auto-detect the project root by walking up from cwd looking for marker files.
24
+ * Auto-detect the project root using a 6-tier priority chain.
25
+ *
26
+ * @param startDir Starting directory for filesystem walk (default: cwd)
27
+ * @returns Absolute path to the detected or fallback project root
25
28
  */
26
29
  export declare function findProjectRoot(startDir?: string): string;
27
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,qEAOhC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAA4B,EACtC,UAAU,GAAE,MAA8B,GACzC,MAAM,EAAE,CAiDV;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAUvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAK7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAOhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,MAAM,GAAG,UAAmB,GAAG,MAAM,CAM1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUlF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWjF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,qEAOhC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5E;AA0DD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAqGzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAA4B,EACtC,UAAU,GAAE,MAA8B,GACzC,MAAM,EAAE,CAiDV;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAUvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAK7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAOhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,MAAM,GAAG,UAAmB,GAAG,MAAM,CAM1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUlF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWjF"}
package/dist/utils.js CHANGED
@@ -4,9 +4,10 @@
4
4
  import { execSync } from "child_process";
5
5
  import { createHash } from "crypto";
6
6
  import * as fs from "fs";
7
+ import * as os from "os";
7
8
  import * as path from "path";
8
9
  import { z } from "zod";
9
- import { EXCLUDED_DIRS, LAYER_PATTERNS, MAX_FILE_TREE_DEPTH, MAX_FILE_TREE_ENTRIES, PROJECT_MARKERS, } from "./constants.js";
10
+ import { BLOCKED_PATH_PATTERNS, EXCLUDED_DIRS, LAYER_PATTERNS, MAX_FILE_TREE_DEPTH, MAX_FILE_TREE_ENTRIES, SOFT_PROJECT_MARKERS, STRONG_PROJECT_MARKERS, } from "./constants.js";
10
11
  /**
11
12
  * Zod preprocessor that accepts either a real string array OR a JSON-string-
12
13
  * encoded array (e.g. '["a","b"]'). Required because some MCP clients (including
@@ -48,27 +49,162 @@ export function normalizePath(filePath, projectRoot) {
48
49
  p = p.replace(/\/$/, "");
49
50
  return p;
50
51
  }
52
+ // ============================================================================
53
+ // FLAW-1 FIX: Smart project root detection
54
+ //
55
+ // Priority chain (first hit wins):
56
+ // 0. --project-root=<path> CLI arg (highest — explicit IDE config)
57
+ // 1. ENGRAM_PROJECT_ROOT env var
58
+ // 2. PROJECT_ROOT env var
59
+ // 3. git rev-parse --show-toplevel (authoritative for git repos)
60
+ // 4. Walk up — STRONG markers only (.git, .engram) — never ambiguous
61
+ // 5. Walk up — SOFT markers (package.json etc) skipping BLOCKED paths
62
+ // 6. ~/.engram/global/ fallback (never crashes; logged as warning)
63
+ //
64
+ // Additional enhancements requested:
65
+ // • --project-root flag: IDEs and users can bake the workspace path into
66
+ // the MCP spawn command so detection is never needed.
67
+ // • git command detection: `git rev-parse --show-toplevel` is the most
68
+ // reliable way to find the real project root — it follows git worktrees
69
+ // and submodules correctly.
70
+ // • Logged resolution: the resolved path + method are always logged so
71
+ // users can validate what Engram chose.
72
+ // ============================================================================
73
+ /** Returns the normalised path with OS separators replaced by forward slashes. */
74
+ function normStr(p) {
75
+ return p.replace(/\\/g, "/");
76
+ }
77
+ /**
78
+ * Check whether a directory path matches any known non-project blocked pattern.
79
+ * Used to reject IDE install dirs, npm globals, and OS system dirs.
80
+ */
81
+ function isBlockedPath(dirPath) {
82
+ const n = normStr(dirPath);
83
+ return BLOCKED_PATH_PATTERNS.some(re => re.test(n));
84
+ }
85
+ /**
86
+ * Try `git rev-parse --show-toplevel` from startDir.
87
+ * Returns the git root if found, null otherwise.
88
+ * This is the most authoritative detection method — it follows worktrees,
89
+ * submodules, and nested git repos correctly.
90
+ */
91
+ function detectGitRoot(startDir) {
92
+ try {
93
+ const result = execSync("git rev-parse --show-toplevel", {
94
+ cwd: startDir,
95
+ encoding: "utf-8",
96
+ timeout: 3000,
97
+ stdio: ["pipe", "pipe", "pipe"],
98
+ }).trim();
99
+ return result || null;
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
51
105
  /**
52
- * Auto-detect the project root by walking up from cwd looking for marker files.
106
+ * Auto-detect the project root using a 6-tier priority chain.
107
+ *
108
+ * @param startDir Starting directory for filesystem walk (default: cwd)
109
+ * @returns Absolute path to the detected or fallback project root
53
110
  */
54
111
  export function findProjectRoot(startDir) {
55
- // 1. Explicit env var
56
- if (process.env.ENGRAM_PROJECT_ROOT)
57
- return process.env.ENGRAM_PROJECT_ROOT;
58
- if (process.env.PROJECT_ROOT)
59
- return process.env.PROJECT_ROOT;
60
- // 2. Walk up directory tree
61
- let dir = startDir || process.cwd();
112
+ const cwd = startDir || process.cwd();
113
+ // ── Tier 0: --project-root=<path> CLI arg ────────────────────────────────
114
+ // Highest priority: explicit instruction from IDE config or user.
115
+ for (const arg of process.argv) {
116
+ if (arg.startsWith("--project-root=")) {
117
+ const val = arg.slice("--project-root=".length).trim();
118
+ if (val) {
119
+ const resolved = path.resolve(val);
120
+ console.error(`[Engram] [INFO] Project root ← --project-root arg: ${resolved}`);
121
+ return resolved;
122
+ }
123
+ }
124
+ // Also handle separate --project-root <path> style
125
+ if (arg === "--project-root") {
126
+ const idx = process.argv.indexOf(arg);
127
+ const next = process.argv[idx + 1];
128
+ if (next && !next.startsWith("-")) {
129
+ const resolved = path.resolve(next);
130
+ console.error(`[Engram] [INFO] Project root ← --project-root arg: ${resolved}`);
131
+ return resolved;
132
+ }
133
+ }
134
+ }
135
+ // ── Tier 1+2: Explicit env vars ────────────────────────────────────────────
136
+ if (process.env.ENGRAM_PROJECT_ROOT) {
137
+ const resolved = path.resolve(process.env.ENGRAM_PROJECT_ROOT);
138
+ console.error(`[Engram] [INFO] Project root ← ENGRAM_PROJECT_ROOT: ${resolved}`);
139
+ return resolved;
140
+ }
141
+ if (process.env.PROJECT_ROOT) {
142
+ const resolved = path.resolve(process.env.PROJECT_ROOT);
143
+ console.error(`[Engram] [INFO] Project root ← PROJECT_ROOT env: ${resolved}`);
144
+ return resolved;
145
+ }
146
+ // ── Tier 3: git rev-parse --show-toplevel ───────────────────────────────
147
+ // Most reliable: git knows the real project boundary, including worktrees.
148
+ // Blocked paths are checked so we don't accept a git repo that is the IDE
149
+ // install dir itself (unlikely but possible with developer setups).
150
+ const gitRoot = detectGitRoot(cwd);
151
+ if (gitRoot && !isBlockedPath(gitRoot)) {
152
+ console.error(`[Engram] [INFO] Project root ← git: ${gitRoot}`);
153
+ return gitRoot;
154
+ }
155
+ // ── Tier 4: Walk up — STRONG markers only (.git, .engram) ────────────
156
+ // .git and .engram are never present in IDE install dirs; always safe.
157
+ let dir = cwd;
62
158
  while (dir !== path.dirname(dir)) {
63
- for (const marker of PROJECT_MARKERS) {
159
+ for (const marker of STRONG_PROJECT_MARKERS) {
64
160
  if (fs.existsSync(path.join(dir, marker))) {
65
- return dir;
161
+ if (!isBlockedPath(dir)) {
162
+ console.error(`[Engram] [INFO] Project root ← strong marker (${marker}): ${dir}`);
163
+ return dir;
164
+ }
66
165
  }
67
166
  }
68
167
  dir = path.dirname(dir);
69
168
  }
70
- // 3. Fallback to cwd
71
- return process.cwd();
169
+ // ── Tier 5: Walk up — SOFT markers, skip blocked paths ────────────────
170
+ // package.json etc. are checked, but only for dirs that don't look like
171
+ // IDE install dirs, npm globals, or OS system directories.
172
+ // Also reject dirs whose package.json has name === "engram-mcp-server"
173
+ // (running from our own source tree).
174
+ dir = cwd;
175
+ while (dir !== path.dirname(dir)) {
176
+ if (!isBlockedPath(dir)) {
177
+ for (const marker of SOFT_PROJECT_MARKERS) {
178
+ if (fs.existsSync(path.join(dir, marker))) {
179
+ // Extra guard: our own package — skip it
180
+ if (marker === "package.json") {
181
+ try {
182
+ const pkg = JSON.parse(fs.readFileSync(path.join(dir, "package.json"), "utf-8"));
183
+ if (pkg?.name === "engram-mcp-server") {
184
+ dir = path.dirname(dir);
185
+ continue;
186
+ }
187
+ }
188
+ catch { /* malformed package.json — skip */ }
189
+ }
190
+ console.error(`[Engram] [INFO] Project root ← soft marker (${marker}): ${dir}`);
191
+ return dir;
192
+ }
193
+ }
194
+ }
195
+ dir = path.dirname(dir);
196
+ }
197
+ // ── Tier 6: Global home fallback ────────────────────────────────────
198
+ // Nothing found — use a safe per-user global dir rather than cwd.
199
+ // This guarantees the server is always usable even from unknown environments.
200
+ const globalFallback = path.join(os.homedir(), ".engram", "global");
201
+ try {
202
+ fs.mkdirSync(globalFallback, { recursive: true });
203
+ }
204
+ catch { /* best-effort */ }
205
+ console.error(`[Engram] [WARN] No project root found — using global memory at ${globalFallback}.\n` +
206
+ ` Set ENGRAM_PROJECT_ROOT or pass --project-root=<path> to override.`);
207
+ return globalFallback;
72
208
  }
73
209
  /**
74
210
  * Scan the project file tree, respecting exclusions and depth limits.
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,WAAoB;IAClE,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAErC,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEzB,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,sBAAsB;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5E,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAE9D,4BAA4B;IAC5B,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACpC,OAAO,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC1C,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,qBAAqB;IACrB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,WAAmB,mBAAmB,EACtC,aAAqB,qBAAqB;IAE1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,6DAA6D;IAC7D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAuB;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAE3C,SAAS,IAAI,CAAC,GAAW,EAAE,KAAa;QACtC,IAAI,KAAK,GAAG,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU;YAAE,OAAO;QAE3D,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU;gBAAE,MAAM;YACtC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YAEhE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,UAAU,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAkB,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,OAAe;IAC7D,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,WAAW,YAAY,OAAO,EAAE,EAAE;YACvD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAa,EAAE,QAAgB,EAAE;IACnF,OAAO,UAAU,CACf,WAAW,EACX,8BAA8B,KAAK,sCAAsC,KAAK,EAAE,CACjF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAa;IAC/D,OAAO,UAAU,CAAC,WAAW,EAAE,qBAAqB,KAAK,eAAe,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,KAAa;IACnE,MAAM,MAAM,GAAG,UAAU,CACvB,WAAW,EACX,4BAA4B,KAAK,kCAAkC,CACpE,CAAC;IACF,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,UAAU,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,OAAO,UAAU,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAI,IAA+B,EAAE,QAAW;IAC3E,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,SAA8B,MAAM;IAChF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,0DAA0D;IAC1D,OAAO,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,SAAiB;IACrD,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,WAAoB;IACjE,IAAI,CAAC;QACH,MAAM,QAAQ,GACZ,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;YAClC,CAAC,CAAC,QAAQ,CAAC;QACf,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,WAAoB;IAChE,IAAI,CAAC;QACH,MAAM,QAAQ,GACZ,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;YAClC,CAAC,CAAC,QAAQ,CAAC;QACf,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}