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.
- package/.mcp.example.json +12 -2
- package/CHANGELOG.md +48 -0
- package/FUTURE.md +26 -5
- package/README.md +80 -195
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +10 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -1
- package/dist/config.js.map +1 -1
- package/dist/hardhat.d.ts.map +1 -1
- package/dist/hardhat.js +10 -5
- package/dist/hardhat.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/addresses.d.ts +57 -0
- package/dist/lib/addresses.d.ts.map +1 -0
- package/dist/lib/addresses.js +83 -0
- package/dist/lib/addresses.js.map +1 -0
- package/dist/lib/calldata.d.ts +32 -0
- package/dist/lib/calldata.d.ts.map +1 -0
- package/dist/lib/calldata.js +28 -0
- package/dist/lib/calldata.js.map +1 -0
- package/dist/lib/govEnums.d.ts +12 -0
- package/dist/lib/govEnums.d.ts.map +1 -0
- package/dist/lib/govEnums.js +35 -0
- package/dist/lib/govEnums.js.map +1 -0
- package/dist/lib/ipfs.d.ts +60 -0
- package/dist/lib/ipfs.d.ts.map +1 -0
- package/dist/lib/ipfs.js +167 -0
- package/dist/lib/ipfs.js.map +1 -0
- package/dist/lib/multicall.d.ts +33 -0
- package/dist/lib/multicall.d.ts.map +1 -0
- package/dist/lib/multicall.js +46 -0
- package/dist/lib/multicall.js.map +1 -0
- package/dist/lib/proposalCatalog.d.ts +45 -0
- package/dist/lib/proposalCatalog.d.ts.map +1 -0
- package/dist/lib/proposalCatalog.js +416 -0
- package/dist/lib/proposalCatalog.js.map +1 -0
- package/dist/lib/subgraph.d.ts +15 -0
- package/dist/lib/subgraph.d.ts.map +1 -0
- package/dist/lib/subgraph.js +37 -0
- package/dist/lib/subgraph.js.map +1 -0
- package/dist/runtime.d.ts +51 -13
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +149 -26
- package/dist/runtime.js.map +1 -1
- package/dist/tools/dao.d.ts +4 -0
- package/dist/tools/dao.d.ts.map +1 -0
- package/dist/tools/dao.js +242 -0
- package/dist/tools/dao.js.map +1 -0
- package/dist/tools/daoDeploy.d.ts +4 -0
- package/dist/tools/daoDeploy.d.ts.map +1 -0
- package/dist/tools/daoDeploy.js +323 -0
- package/dist/tools/daoDeploy.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +24 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ipfs.d.ts +6 -0
- package/dist/tools/ipfs.d.ts.map +1 -0
- package/dist/tools/ipfs.js +310 -0
- package/dist/tools/ipfs.js.map +1 -0
- package/dist/tools/proposal.d.ts +4 -0
- package/dist/tools/proposal.d.ts.map +1 -0
- package/dist/tools/proposal.js +199 -0
- package/dist/tools/proposal.js.map +1 -0
- package/dist/tools/proposalBuild.d.ts +4 -0
- package/dist/tools/proposalBuild.d.ts.map +1 -0
- package/dist/tools/proposalBuild.js +357 -0
- package/dist/tools/proposalBuild.js.map +1 -0
- package/dist/tools/proposalBuildComplex.d.ts +4 -0
- package/dist/tools/proposalBuildComplex.d.ts.map +1 -0
- package/dist/tools/proposalBuildComplex.js +700 -0
- package/dist/tools/proposalBuildComplex.js.map +1 -0
- package/dist/tools/proposalBuildInternal.d.ts +4 -0
- package/dist/tools/proposalBuildInternal.d.ts.map +1 -0
- package/dist/tools/proposalBuildInternal.js +211 -0
- package/dist/tools/proposalBuildInternal.js.map +1 -0
- package/dist/tools/proposalBuildMore.d.ts +4 -0
- package/dist/tools/proposalBuildMore.d.ts.map +1 -0
- package/dist/tools/proposalBuildMore.js +436 -0
- package/dist/tools/proposalBuildMore.js.map +1 -0
- package/dist/tools/proposalBuildOffchain.d.ts +4 -0
- package/dist/tools/proposalBuildOffchain.d.ts.map +1 -0
- package/dist/tools/proposalBuildOffchain.js +386 -0
- package/dist/tools/proposalBuildOffchain.js.map +1 -0
- package/dist/tools/read.d.ts +4 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +353 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/vote.d.ts +4 -0
- package/dist/tools/vote.d.ts.map +1 -0
- package/dist/tools/vote.js +196 -0
- package/dist/tools/vote.js.map +1 -0
- package/dist/tools/voteBuild.d.ts +4 -0
- package/dist/tools/voteBuild.d.ts.map +1 -0
- package/dist/tools/voteBuild.js +563 -0
- package/dist/tools/voteBuild.js.map +1 -0
- package/package.json +9 -4
- 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
|
|
12
|
+
* Locate a usable `npm-cli.js` on the system.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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
|
-
*
|
|
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
|
|
31
|
-
*
|
|
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
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
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.
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AAEH
|
|
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
|
|
16
|
+
* Locate a usable `npm-cli.js` on the system.
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
|
62
|
-
*
|
|
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
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
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 {
|
|
73
|
-
|
|
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.
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|