dexe-mcp 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/.mcp.example.json +12 -2
  2. package/CHANGELOG.md +48 -0
  3. package/FUTURE.md +26 -5
  4. package/README.md +80 -195
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/bootstrap.js +10 -1
  7. package/dist/bootstrap.js.map +1 -1
  8. package/dist/config.d.ts +10 -0
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +24 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/hardhat.d.ts.map +1 -1
  13. package/dist/hardhat.js +10 -5
  14. package/dist/hardhat.js.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/lib/addresses.d.ts +57 -0
  17. package/dist/lib/addresses.d.ts.map +1 -0
  18. package/dist/lib/addresses.js +83 -0
  19. package/dist/lib/addresses.js.map +1 -0
  20. package/dist/lib/calldata.d.ts +32 -0
  21. package/dist/lib/calldata.d.ts.map +1 -0
  22. package/dist/lib/calldata.js +28 -0
  23. package/dist/lib/calldata.js.map +1 -0
  24. package/dist/lib/govEnums.d.ts +12 -0
  25. package/dist/lib/govEnums.d.ts.map +1 -0
  26. package/dist/lib/govEnums.js +35 -0
  27. package/dist/lib/govEnums.js.map +1 -0
  28. package/dist/lib/ipfs.d.ts +60 -0
  29. package/dist/lib/ipfs.d.ts.map +1 -0
  30. package/dist/lib/ipfs.js +167 -0
  31. package/dist/lib/ipfs.js.map +1 -0
  32. package/dist/lib/multicall.d.ts +33 -0
  33. package/dist/lib/multicall.d.ts.map +1 -0
  34. package/dist/lib/multicall.js +46 -0
  35. package/dist/lib/multicall.js.map +1 -0
  36. package/dist/lib/proposalCatalog.d.ts +45 -0
  37. package/dist/lib/proposalCatalog.d.ts.map +1 -0
  38. package/dist/lib/proposalCatalog.js +416 -0
  39. package/dist/lib/proposalCatalog.js.map +1 -0
  40. package/dist/lib/subgraph.d.ts +15 -0
  41. package/dist/lib/subgraph.d.ts.map +1 -0
  42. package/dist/lib/subgraph.js +37 -0
  43. package/dist/lib/subgraph.js.map +1 -0
  44. package/dist/runtime.d.ts +51 -13
  45. package/dist/runtime.d.ts.map +1 -1
  46. package/dist/runtime.js +149 -26
  47. package/dist/runtime.js.map +1 -1
  48. package/dist/tools/dao.d.ts +4 -0
  49. package/dist/tools/dao.d.ts.map +1 -0
  50. package/dist/tools/dao.js +242 -0
  51. package/dist/tools/dao.js.map +1 -0
  52. package/dist/tools/daoDeploy.d.ts +4 -0
  53. package/dist/tools/daoDeploy.d.ts.map +1 -0
  54. package/dist/tools/daoDeploy.js +323 -0
  55. package/dist/tools/daoDeploy.js.map +1 -0
  56. package/dist/tools/index.d.ts.map +1 -1
  57. package/dist/tools/index.js +24 -0
  58. package/dist/tools/index.js.map +1 -1
  59. package/dist/tools/ipfs.d.ts +6 -0
  60. package/dist/tools/ipfs.d.ts.map +1 -0
  61. package/dist/tools/ipfs.js +310 -0
  62. package/dist/tools/ipfs.js.map +1 -0
  63. package/dist/tools/proposal.d.ts +4 -0
  64. package/dist/tools/proposal.d.ts.map +1 -0
  65. package/dist/tools/proposal.js +199 -0
  66. package/dist/tools/proposal.js.map +1 -0
  67. package/dist/tools/proposalBuild.d.ts +4 -0
  68. package/dist/tools/proposalBuild.d.ts.map +1 -0
  69. package/dist/tools/proposalBuild.js +357 -0
  70. package/dist/tools/proposalBuild.js.map +1 -0
  71. package/dist/tools/proposalBuildComplex.d.ts +4 -0
  72. package/dist/tools/proposalBuildComplex.d.ts.map +1 -0
  73. package/dist/tools/proposalBuildComplex.js +700 -0
  74. package/dist/tools/proposalBuildComplex.js.map +1 -0
  75. package/dist/tools/proposalBuildInternal.d.ts +4 -0
  76. package/dist/tools/proposalBuildInternal.d.ts.map +1 -0
  77. package/dist/tools/proposalBuildInternal.js +211 -0
  78. package/dist/tools/proposalBuildInternal.js.map +1 -0
  79. package/dist/tools/proposalBuildMore.d.ts +4 -0
  80. package/dist/tools/proposalBuildMore.d.ts.map +1 -0
  81. package/dist/tools/proposalBuildMore.js +436 -0
  82. package/dist/tools/proposalBuildMore.js.map +1 -0
  83. package/dist/tools/proposalBuildOffchain.d.ts +4 -0
  84. package/dist/tools/proposalBuildOffchain.d.ts.map +1 -0
  85. package/dist/tools/proposalBuildOffchain.js +386 -0
  86. package/dist/tools/proposalBuildOffchain.js.map +1 -0
  87. package/dist/tools/read.d.ts +4 -0
  88. package/dist/tools/read.d.ts.map +1 -0
  89. package/dist/tools/read.js +353 -0
  90. package/dist/tools/read.js.map +1 -0
  91. package/dist/tools/vote.d.ts +4 -0
  92. package/dist/tools/vote.d.ts.map +1 -0
  93. package/dist/tools/vote.js +196 -0
  94. package/dist/tools/vote.js.map +1 -0
  95. package/dist/tools/voteBuild.d.ts +4 -0
  96. package/dist/tools/voteBuild.d.ts.map +1 -0
  97. package/dist/tools/voteBuild.js +563 -0
  98. package/dist/tools/voteBuild.js.map +1 -0
  99. package/package.json +9 -4
  100. package/PLAN.md +0 -132
package/dist/runtime.d.ts CHANGED
@@ -9,15 +9,20 @@
9
9
  * directly through `process.execPath`.
10
10
  */
11
11
  /**
12
- * Locate the `npm-cli.js` that ships with the currently-running Node.
12
+ * Locate a usable `npm-cli.js` on the system.
13
13
  *
14
- * Layouts we handle:
15
- * - Windows (official installer / nvm-windows):
16
- * <execDir>\node_modules\npm\bin\npm-cli.js
17
- * - Unix (nvm, homebrew, official installer):
18
- * <execDir>/../lib/node_modules/npm/bin/npm-cli.js
14
+ * Since `npm-cli.js` is plain JavaScript, any modern `node` binary can run
15
+ * it we don't need to find the npm that "ships with" the current Node.
16
+ * That matters on stripped Windows installs where `C:\Program Files\nodejs\`
17
+ * contains only `node.exe` (no bundled npm), but another Node (e.g. nvm)
18
+ * has a complete npm install elsewhere.
19
19
  *
20
- * Returns `null` if nothing is found — caller should fall back to `npm` on PATH.
20
+ * Search order:
21
+ * 1. Next to `process.execPath` (covers sane installs)
22
+ * 2. Platform-specific alternate locations (nvm / nvm-windows / npm prefix)
23
+ *
24
+ * Returns `null` if nothing is found — caller should fall back to shell
25
+ * resolution of `npm` / `npm.cmd`.
21
26
  */
22
27
  export declare function resolveNpmCli(): string | null;
23
28
  /**
@@ -25,19 +30,52 @@ export declare function resolveNpmCli(): string | null;
25
30
  * Returns `null` if `node_modules` isn't installed yet.
26
31
  */
27
32
  export declare function resolveHardhatCli(protocolPath: string): string | null;
33
+ /**
34
+ * Given the absolute path to `npm-cli.js`, derive the directory that holds
35
+ * the matching `npm.cmd`/`npx.cmd` (Windows) or `bin/npm`/`bin/npx` (Unix)
36
+ * shims. Returned directory should be **prepended** to the `PATH` of any
37
+ * child process that might invoke `npx` / `npm` internally — most notably
38
+ * `npm run <script>` children whose scripts reference `npx hardhat …`,
39
+ * which is the case for DeXe-Protocol's own `compile` / `coverage` scripts.
40
+ *
41
+ * Returns `null` if `npmCliPath` is `null` or the derived layout is
42
+ * unfamiliar (caller should leave `PATH` untouched).
43
+ */
44
+ export declare function deriveNodeBinDir(npmCliPath: string | null): string | null;
45
+ /**
46
+ * Build an `env` object that extends `process.env` with the Node shim
47
+ * directory prepended to `PATH`, so that child processes spawned by
48
+ * `npm run <script>` can resolve `npx` / `npm` even when the MCP server
49
+ * itself was launched by a stripped Node install whose PATH lacks them.
50
+ *
51
+ * Pass the returned env to `execa` / `execFile`. Idempotent — passing
52
+ * a `null` binDir returns the unchanged `process.env`.
53
+ */
54
+ export declare function envWithNodeBinDir(binDir: string | null): NodeJS.ProcessEnv;
28
55
  export declare function hasGit(): Promise<boolean>;
29
56
  /**
30
- * Describe the PATH-independent command we'd use to run `npm` / `npx`.
31
- * Returns the `[command, prefixArgs]` tuple so callers can append script args.
57
+ * Describe the command we'd use to run `npm`.
58
+ *
59
+ * Preferred form: `(process.execPath, [<absolute npm-cli.js>])` — invokes
60
+ * npm through the currently-running Node with zero PATH dependency, and
61
+ * works with `execFile` directly (no `shell: true` required).
32
62
  *
33
- * If `npm-cli.js` is found, we return `(process.execPath, [cliPath])`.
34
- * Otherwise we fall back to `("npm", [])` which requires PATHand may fail
35
- * on machines where npm isn't on the spawn PATH, but that's strictly better
36
- * than crashing at startup.
63
+ * Fallback: plain `npm` / `npm.cmd` on PATH. The `needsShell` flag tells
64
+ * the caller to set `{ shell: true }` on the spawn options without it,
65
+ * Node refuses to `execFile` a `.cmd` or `.bat` (CVE-2024-27980 fix), and
66
+ * callers get `spawn EINVAL`.
37
67
  */
38
68
  export declare function npmCommand(): {
39
69
  command: string;
40
70
  prefixArgs: string[];
71
+ needsShell: boolean;
72
+ /**
73
+ * Directory containing `npm.cmd`/`npx.cmd` (Windows) or `bin/npm`/`bin/npx`
74
+ * (Unix), paired with the `npm-cli.js` we resolved. Should be prepended
75
+ * to child PATH via `envWithNodeBinDir()` so npm scripts that invoke
76
+ * `npx foo` internally can find it.
77
+ */
78
+ binDir: string | null;
41
79
  };
42
80
  /**
43
81
  * Describe the command we'd use to run Hardhat against a given protocol path.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAa7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE;AAID,wBAAgB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAQzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAItE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAIlD"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAM7C;AA2ED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAkBzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,UAAU,CAK1E;AAID,wBAAgB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAQzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,IAAI;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgBA;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAIlD"}
package/dist/runtime.js CHANGED
@@ -1,6 +1,6 @@
1
- import { existsSync } from "node:fs";
1
+ import { existsSync, readdirSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
- import { platform } from "node:os";
3
+ import { homedir, platform } from "node:os";
4
4
  import { execFile } from "node:child_process";
5
5
  /**
6
6
  * Portable runtime helpers for spawning `npm`, `npx`, `hardhat`, and `git`
@@ -13,30 +13,92 @@ import { execFile } from "node:child_process";
13
13
  * directly through `process.execPath`.
14
14
  */
15
15
  /**
16
- * Locate the `npm-cli.js` that ships with the currently-running Node.
16
+ * Locate a usable `npm-cli.js` on the system.
17
17
  *
18
- * Layouts we handle:
19
- * - Windows (official installer / nvm-windows):
20
- * <execDir>\node_modules\npm\bin\npm-cli.js
21
- * - Unix (nvm, homebrew, official installer):
22
- * <execDir>/../lib/node_modules/npm/bin/npm-cli.js
18
+ * Since `npm-cli.js` is plain JavaScript, any modern `node` binary can run
19
+ * it we don't need to find the npm that "ships with" the current Node.
20
+ * That matters on stripped Windows installs where `C:\Program Files\nodejs\`
21
+ * contains only `node.exe` (no bundled npm), but another Node (e.g. nvm)
22
+ * has a complete npm install elsewhere.
23
23
  *
24
- * Returns `null` if nothing is found — caller should fall back to `npm` on PATH.
24
+ * Search order:
25
+ * 1. Next to `process.execPath` (covers sane installs)
26
+ * 2. Platform-specific alternate locations (nvm / nvm-windows / npm prefix)
27
+ *
28
+ * Returns `null` if nothing is found — caller should fall back to shell
29
+ * resolution of `npm` / `npm.cmd`.
25
30
  */
26
31
  export function resolveNpmCli() {
27
- const execDir = dirname(process.execPath);
28
- const candidates = platform() === "win32"
29
- ? [join(execDir, "node_modules", "npm", "bin", "npm-cli.js")]
30
- : [
31
- join(execDir, "..", "lib", "node_modules", "npm", "bin", "npm-cli.js"),
32
- join(execDir, "..", "libexec", "lib", "node_modules", "npm", "bin", "npm-cli.js"),
33
- ];
32
+ const candidates = [...primaryNpmCandidates(), ...alternateNpmCandidates()];
34
33
  for (const c of candidates) {
35
- if (existsSync(c))
34
+ if (c && existsSync(c))
36
35
  return c;
37
36
  }
38
37
  return null;
39
38
  }
39
+ function primaryNpmCandidates() {
40
+ const execDir = dirname(process.execPath);
41
+ if (platform() === "win32") {
42
+ return [join(execDir, "node_modules", "npm", "bin", "npm-cli.js")];
43
+ }
44
+ return [
45
+ join(execDir, "..", "lib", "node_modules", "npm", "bin", "npm-cli.js"),
46
+ join(execDir, "..", "libexec", "lib", "node_modules", "npm", "bin", "npm-cli.js"),
47
+ ];
48
+ }
49
+ function alternateNpmCandidates() {
50
+ const out = [];
51
+ const home = homedir();
52
+ const os = platform();
53
+ if (os === "win32") {
54
+ // nvm-windows: scan %APPDATA%\nvm\v* for the newest version that ships npm
55
+ const nvmRoots = [
56
+ process.env.NVM_HOME,
57
+ join(process.env.APPDATA || join(home, "AppData", "Roaming"), "nvm"),
58
+ ].filter((p) => !!p && existsSync(p));
59
+ for (const nvmRoot of nvmRoots) {
60
+ try {
61
+ const versions = readdirSync(nvmRoot)
62
+ .filter((d) => d.startsWith("v"))
63
+ .sort()
64
+ .reverse();
65
+ for (const v of versions) {
66
+ out.push(join(nvmRoot, v, "node_modules", "npm", "bin", "npm-cli.js"));
67
+ }
68
+ }
69
+ catch {
70
+ // ignore — unreadable nvm dir
71
+ }
72
+ }
73
+ // Per-user global prefix
74
+ out.push(join(process.env.APPDATA || join(home, "AppData", "Roaming"), "npm", "node_modules", "npm", "bin", "npm-cli.js"));
75
+ // System-wide stock install (if user later reinstalls without nvm)
76
+ out.push(join("C:\\", "Program Files", "nodejs", "node_modules", "npm", "bin", "npm-cli.js"));
77
+ }
78
+ else {
79
+ // nvm (Unix): scan ~/.nvm/versions/node/v*/lib/node_modules/npm/bin/npm-cli.js
80
+ const nvmDir = process.env.NVM_DIR || join(home, ".nvm");
81
+ const versionsDir = join(nvmDir, "versions", "node");
82
+ if (existsSync(versionsDir)) {
83
+ try {
84
+ const versions = readdirSync(versionsDir)
85
+ .filter((d) => d.startsWith("v"))
86
+ .sort()
87
+ .reverse();
88
+ for (const v of versions) {
89
+ out.push(join(versionsDir, v, "lib", "node_modules", "npm", "bin", "npm-cli.js"));
90
+ }
91
+ }
92
+ catch {
93
+ // ignore
94
+ }
95
+ }
96
+ // Homebrew
97
+ out.push("/opt/homebrew/lib/node_modules/npm/bin/npm-cli.js");
98
+ out.push("/usr/local/lib/node_modules/npm/bin/npm-cli.js");
99
+ }
100
+ return out;
101
+ }
40
102
  /**
41
103
  * Locate Hardhat's CLI entry point inside a protocol checkout.
42
104
  * Returns `null` if `node_modules` isn't installed yet.
@@ -45,6 +107,53 @@ export function resolveHardhatCli(protocolPath) {
45
107
  const p = join(protocolPath, "node_modules", "hardhat", "internal", "cli", "cli.js");
46
108
  return existsSync(p) ? p : null;
47
109
  }
110
+ /**
111
+ * Given the absolute path to `npm-cli.js`, derive the directory that holds
112
+ * the matching `npm.cmd`/`npx.cmd` (Windows) or `bin/npm`/`bin/npx` (Unix)
113
+ * shims. Returned directory should be **prepended** to the `PATH` of any
114
+ * child process that might invoke `npx` / `npm` internally — most notably
115
+ * `npm run <script>` children whose scripts reference `npx hardhat …`,
116
+ * which is the case for DeXe-Protocol's own `compile` / `coverage` scripts.
117
+ *
118
+ * Returns `null` if `npmCliPath` is `null` or the derived layout is
119
+ * unfamiliar (caller should leave `PATH` untouched).
120
+ */
121
+ export function deriveNodeBinDir(npmCliPath) {
122
+ if (!npmCliPath)
123
+ return null;
124
+ if (platform() === "win32") {
125
+ // Windows layout: <nodeRoot>\node_modules\npm\bin\npm-cli.js
126
+ // `.cmd` shims live at `<nodeRoot>\npm.cmd`, `<nodeRoot>\npx.cmd`.
127
+ // dirname x4 peels bin → npm → node_modules → nodeRoot.
128
+ const nodeRoot = dirname(dirname(dirname(dirname(npmCliPath))));
129
+ return existsSync(join(nodeRoot, "npm.cmd")) || existsSync(join(nodeRoot, "npx.cmd"))
130
+ ? nodeRoot
131
+ : null;
132
+ }
133
+ // Unix layouts (official installer / nvm / Homebrew):
134
+ // <prefix>/lib/node_modules/npm/bin/npm-cli.js
135
+ // Binaries live at `<prefix>/bin/npm` and `<prefix>/bin/npx`.
136
+ // dirname x5 peels bin → npm → node_modules → lib → prefix.
137
+ const prefix = dirname(dirname(dirname(dirname(dirname(npmCliPath)))));
138
+ const binDir = join(prefix, "bin");
139
+ return existsSync(join(binDir, "npx")) || existsSync(join(binDir, "npm")) ? binDir : null;
140
+ }
141
+ /**
142
+ * Build an `env` object that extends `process.env` with the Node shim
143
+ * directory prepended to `PATH`, so that child processes spawned by
144
+ * `npm run <script>` can resolve `npx` / `npm` even when the MCP server
145
+ * itself was launched by a stripped Node install whose PATH lacks them.
146
+ *
147
+ * Pass the returned env to `execa` / `execFile`. Idempotent — passing
148
+ * a `null` binDir returns the unchanged `process.env`.
149
+ */
150
+ export function envWithNodeBinDir(binDir) {
151
+ if (!binDir)
152
+ return { ...process.env };
153
+ const sep = platform() === "win32" ? ";" : ":";
154
+ const existing = process.env.PATH || process.env.Path || "";
155
+ return { ...process.env, PATH: `${binDir}${sep}${existing}` };
156
+ }
48
157
  /** Detect whether `git` is available on PATH. Cached per-process. */
49
158
  let gitAvailable = null;
50
159
  export function hasGit() {
@@ -58,19 +167,33 @@ export function hasGit() {
58
167
  });
59
168
  }
60
169
  /**
61
- * Describe the PATH-independent command we'd use to run `npm` / `npx`.
62
- * Returns the `[command, prefixArgs]` tuple so callers can append script args.
170
+ * Describe the command we'd use to run `npm`.
171
+ *
172
+ * Preferred form: `(process.execPath, [<absolute npm-cli.js>])` — invokes
173
+ * npm through the currently-running Node with zero PATH dependency, and
174
+ * works with `execFile` directly (no `shell: true` required).
63
175
  *
64
- * If `npm-cli.js` is found, we return `(process.execPath, [cliPath])`.
65
- * Otherwise we fall back to `("npm", [])` which requires PATHand may fail
66
- * on machines where npm isn't on the spawn PATH, but that's strictly better
67
- * than crashing at startup.
176
+ * Fallback: plain `npm` / `npm.cmd` on PATH. The `needsShell` flag tells
177
+ * the caller to set `{ shell: true }` on the spawn options without it,
178
+ * Node refuses to `execFile` a `.cmd` or `.bat` (CVE-2024-27980 fix), and
179
+ * callers get `spawn EINVAL`.
68
180
  */
69
181
  export function npmCommand() {
70
182
  const cli = resolveNpmCli();
71
- if (cli)
72
- return { command: process.execPath, prefixArgs: [cli] };
73
- return { command: platform() === "win32" ? "npm.cmd" : "npm", prefixArgs: [] };
183
+ if (cli) {
184
+ return {
185
+ command: process.execPath,
186
+ prefixArgs: [cli],
187
+ needsShell: false,
188
+ binDir: deriveNodeBinDir(cli),
189
+ };
190
+ }
191
+ return {
192
+ command: platform() === "win32" ? "npm.cmd" : "npm",
193
+ prefixArgs: [],
194
+ needsShell: platform() === "win32",
195
+ binDir: null,
196
+ };
74
197
  }
75
198
  /**
76
199
  * Describe the command we'd use to run Hardhat against a given protocol path.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;;;GASG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,UAAU,GACd,QAAQ,EAAE,KAAK,OAAO;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC,CAAC;YACE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC;YACtE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC;SAClF,CAAC;IACR,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrF,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED,qEAAqE;AACrE,IAAI,YAAY,GAAmB,IAAI,CAAC;AACxC,MAAM,UAAU,MAAM;IACpB,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5D,YAAY,GAAG,CAAC,GAAG,CAAC;YACpB,cAAc,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,YAAoB;IAEpB,MAAM,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACjE,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ToolContext } from "./context.js";
3
+ export declare function registerDaoTools(server: McpServer, ctx: ToolContext): void;
4
+ //# sourceMappingURL=dao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dao.d.ts","sourceRoot":"","sources":["../../src/tools/dao.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAwBhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAe1E"}
@@ -0,0 +1,242 @@
1
+ import { z } from "zod";
2
+ import { Contract, Interface, isAddress } from "ethers";
3
+ import { RpcProvider } from "../rpc.js";
4
+ import { AddressBook, CONTRACT_NAMES } from "../lib/addresses.js";
5
+ import { multicall } from "../lib/multicall.js";
6
+ const POOL_FACTORY_ABI = [
7
+ "function predictGovAddresses(address deployer, string poolName) view returns (tuple(address govPool, address govTokenSale, address govToken, address distributionProposal, address expertNft, address nftMultiplier))",
8
+ ];
9
+ const POOL_REGISTRY_ABI = [
10
+ "function isGovPool(address potentialPool) view returns (bool)",
11
+ ];
12
+ const GOV_POOL_ABI = [
13
+ "function getHelperContracts() view returns (address settings, address userKeeper, address validators, address poolRegistry, address votePower)",
14
+ "function getNftContracts() view returns (address nftMultiplier, address expertNft, address dexeExpertNft, address babt)",
15
+ "function descriptionURL() view returns (string)",
16
+ "function name() view returns (string)",
17
+ ];
18
+ const GOV_VALIDATORS_ABI = [
19
+ "function validatorsCount() view returns (uint256)",
20
+ ];
21
+ export function registerDaoTools(server, ctx) {
22
+ const rpc = new RpcProvider(ctx.config);
23
+ function requireBook() {
24
+ const provider = rpc.requireProvider();
25
+ return new AddressBook({
26
+ provider,
27
+ chainId: ctx.config.chainId,
28
+ registryOverride: ctx.config.registryOverride,
29
+ });
30
+ }
31
+ registerPredictAddresses(server, ctx, requireBook);
32
+ registerRegistryLookup(server, ctx, requireBook);
33
+ registerDaoInfo(server, ctx, rpc, requireBook);
34
+ }
35
+ function errorResult(message) {
36
+ return { content: [{ type: "text", text: message }], isError: true };
37
+ }
38
+ // ---------- dexe_dao_predict_addresses ----------
39
+ function registerPredictAddresses(server, ctx, requireBook) {
40
+ server.registerTool("dexe_dao_predict_addresses", {
41
+ title: "Predict addresses for a future DAO deployment",
42
+ description: "Calls `PoolFactory.predictGovAddresses(deployer, poolName)` and returns the six CREATE2-predicted addresses (govPool, govTokenSale, govToken, distributionProposal, expertNft, nftMultiplier). Useful for wiring configs before a DAO is actually deployed.",
43
+ inputSchema: {
44
+ deployer: z.string().describe("Address that will send the deployGovPool tx (tx.origin)"),
45
+ poolName: z.string().describe("Unique pool name — part of the CREATE2 salt"),
46
+ },
47
+ outputSchema: {
48
+ govPool: z.string(),
49
+ govTokenSale: z.string(),
50
+ govToken: z.string(),
51
+ distributionProposal: z.string(),
52
+ expertNft: z.string(),
53
+ nftMultiplier: z.string(),
54
+ },
55
+ }, async ({ deployer, poolName }) => {
56
+ if (!isAddress(deployer))
57
+ return errorResult(`Invalid deployer address: ${deployer}`);
58
+ if (!poolName || poolName.length === 0)
59
+ return errorResult("poolName must be non-empty");
60
+ try {
61
+ const book = requireBook();
62
+ const factoryAddr = await book.resolve(CONTRACT_NAMES.POOL_FACTORY);
63
+ const factory = new Contract(factoryAddr, POOL_FACTORY_ABI, book.provider);
64
+ const res = await factory.getFunction("predictGovAddresses").staticCall(deployer, poolName);
65
+ const structured = {
66
+ govPool: res.govPool,
67
+ govTokenSale: res.govTokenSale,
68
+ govToken: res.govToken,
69
+ distributionProposal: res.distributionProposal,
70
+ expertNft: res.expertNft,
71
+ nftMultiplier: res.nftMultiplier,
72
+ };
73
+ const text = `Predicted addresses for pool "${poolName}" deployed by ${deployer}:\n` +
74
+ ` govPool : ${structured.govPool}\n` +
75
+ ` govTokenSale : ${structured.govTokenSale}\n` +
76
+ ` govToken : ${structured.govToken}\n` +
77
+ ` distributionProposal : ${structured.distributionProposal}\n` +
78
+ ` expertNft : ${structured.expertNft}\n` +
79
+ ` nftMultiplier : ${structured.nftMultiplier}`;
80
+ return {
81
+ content: [{ type: "text", text }],
82
+ structuredContent: structured,
83
+ };
84
+ }
85
+ catch (err) {
86
+ return errorResult(`Failed to predict addresses: ${err instanceof Error ? err.message : String(err)}`);
87
+ }
88
+ });
89
+ }
90
+ // ---------- dexe_dao_registry_lookup ----------
91
+ function registerRegistryLookup(server, ctx, requireBook) {
92
+ server.registerTool("dexe_dao_registry_lookup", {
93
+ title: "Check whether an address is a DeXe GovPool",
94
+ description: "Calls `PoolRegistry.isGovPool(address)` on the configured chain. Returns true if the address is a registered DeXe DAO GovPool.",
95
+ inputSchema: {
96
+ address: z.string().describe("Candidate GovPool address"),
97
+ },
98
+ outputSchema: {
99
+ address: z.string(),
100
+ isGovPool: z.boolean(),
101
+ poolRegistry: z.string(),
102
+ chainId: z.number(),
103
+ },
104
+ }, async ({ address }) => {
105
+ if (!isAddress(address))
106
+ return errorResult(`Invalid address: ${address}`);
107
+ try {
108
+ const book = requireBook();
109
+ const registryAddr = await book.resolve(CONTRACT_NAMES.POOL_REGISTRY);
110
+ const reg = new Contract(registryAddr, POOL_REGISTRY_ABI, book.provider);
111
+ const isGov = await reg.getFunction("isGovPool").staticCall(address);
112
+ const structured = {
113
+ address,
114
+ isGovPool: isGov,
115
+ poolRegistry: registryAddr,
116
+ chainId: ctx.config.chainId,
117
+ };
118
+ return {
119
+ content: [
120
+ {
121
+ type: "text",
122
+ text: `${address} ${isGov ? "IS" : "is NOT"} a GovPool on chainId=${ctx.config.chainId} (PoolRegistry=${registryAddr}).`,
123
+ },
124
+ ],
125
+ structuredContent: structured,
126
+ };
127
+ }
128
+ catch (err) {
129
+ return errorResult(`Registry lookup failed: ${err instanceof Error ? err.message : String(err)}`);
130
+ }
131
+ });
132
+ }
133
+ // ---------- dexe_dao_info ----------
134
+ function registerDaoInfo(server, ctx, rpc, requireBook) {
135
+ server.registerTool("dexe_dao_info", {
136
+ title: "DAO overview — helpers, NFT contracts, validator count",
137
+ description: "Given a GovPool address, batch-reads helper addresses (settings/userKeeper/validators/poolRegistry/votePower), NFT contract addresses, description URL, and live validator count. One multicall RPC round-trip.",
138
+ inputSchema: {
139
+ govPool: z.string().describe("GovPool contract address"),
140
+ },
141
+ outputSchema: {
142
+ govPool: z.string(),
143
+ descriptionURL: z.string().nullable(),
144
+ helpers: z.object({
145
+ settings: z.string(),
146
+ userKeeper: z.string(),
147
+ validators: z.string(),
148
+ poolRegistry: z.string(),
149
+ votePower: z.string(),
150
+ }),
151
+ nftContracts: z.object({
152
+ nftMultiplier: z.string(),
153
+ expertNft: z.string(),
154
+ dexeExpertNft: z.string(),
155
+ babt: z.string(),
156
+ }),
157
+ validatorsCount: z.string().nullable(),
158
+ },
159
+ }, async ({ govPool }) => {
160
+ if (!isAddress(govPool))
161
+ return errorResult(`Invalid GovPool address: ${govPool}`);
162
+ try {
163
+ const provider = rpc.requireProvider();
164
+ const gpIface = new Interface(GOV_POOL_ABI);
165
+ const vIface = new Interface(GOV_VALIDATORS_ABI);
166
+ // Stage 1: helpers + nft contracts + descriptionURL
167
+ const stage1 = [
168
+ { target: govPool, iface: gpIface, method: "getHelperContracts", args: [], allowFailure: true },
169
+ { target: govPool, iface: gpIface, method: "getNftContracts", args: [], allowFailure: true },
170
+ { target: govPool, iface: gpIface, method: "descriptionURL", args: [], allowFailure: true },
171
+ ];
172
+ const [helpersR, nftR, descR] = await multicall(provider, stage1);
173
+ if (!helpersR?.success || !nftR?.success) {
174
+ return errorResult(`GovPool ${govPool} did not return helpers or NFT contracts — is it a valid GovPool? (registry lookup first via dexe_dao_registry_lookup)`);
175
+ }
176
+ const hv = helpersR.value;
177
+ const nv = nftR.value;
178
+ const helpers = {
179
+ settings: hv.settings,
180
+ userKeeper: hv.userKeeper,
181
+ validators: hv.validators,
182
+ poolRegistry: hv.poolRegistry,
183
+ votePower: hv.votePower,
184
+ };
185
+ const nftContracts = {
186
+ nftMultiplier: nv.nftMultiplier,
187
+ expertNft: nv.expertNft,
188
+ dexeExpertNft: nv.dexeExpertNft,
189
+ babt: nv.babt,
190
+ };
191
+ // Stage 2: validator count on the validators contract
192
+ let validatorsCount = null;
193
+ if (helpers.validators && isAddress(helpers.validators)) {
194
+ const [vcR] = await multicall(provider, [
195
+ {
196
+ target: helpers.validators,
197
+ iface: vIface,
198
+ method: "validatorsCount",
199
+ args: [],
200
+ allowFailure: true,
201
+ },
202
+ ]);
203
+ if (vcR?.success && vcR.value != null) {
204
+ validatorsCount = vcR.value.toString();
205
+ }
206
+ }
207
+ const descriptionURL = descR?.success && typeof descR.value === "string" ? descR.value : null;
208
+ // Use requireBook so we fail clearly if chain support is missing — even
209
+ // though dao_info doesn't otherwise need the registry.
210
+ requireBook();
211
+ const structured = {
212
+ govPool,
213
+ descriptionURL,
214
+ helpers,
215
+ nftContracts,
216
+ validatorsCount,
217
+ };
218
+ const text = `GovPool ${govPool}\n` +
219
+ ` descriptionURL: ${descriptionURL ?? "(none)"}\n` +
220
+ ` validators: ${validatorsCount ?? "?"}\n\n` +
221
+ `Helpers:\n` +
222
+ ` settings : ${helpers.settings}\n` +
223
+ ` userKeeper : ${helpers.userKeeper}\n` +
224
+ ` validators : ${helpers.validators}\n` +
225
+ ` poolRegistry : ${helpers.poolRegistry}\n` +
226
+ ` votePower : ${helpers.votePower}\n\n` +
227
+ `NFT contracts:\n` +
228
+ ` nftMultiplier : ${nftContracts.nftMultiplier}\n` +
229
+ ` expertNft : ${nftContracts.expertNft}\n` +
230
+ ` dexeExpertNft : ${nftContracts.dexeExpertNft}\n` +
231
+ ` babt : ${nftContracts.babt}`;
232
+ return {
233
+ content: [{ type: "text", text }],
234
+ structuredContent: structured,
235
+ };
236
+ }
237
+ catch (err) {
238
+ return errorResult(`dao_info failed: ${err instanceof Error ? err.message : String(err)}`);
239
+ }
240
+ });
241
+ }
242
+ //# sourceMappingURL=dao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dao.js","sourceRoot":"","sources":["../../src/tools/dao.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ToolContext } from "./context.js";
3
+ export declare function registerDaoDeployTools(server: McpServer, ctx: ToolContext): void;
4
+ //# sourceMappingURL=daoDeploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daoDeploy.d.ts","sourceRoot":"","sources":["../../src/tools/daoDeploy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA4FhD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAGhF"}