dexe-mcp 0.6.0 → 0.7.1
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/CHANGELOG.md +80 -0
- package/README.md +5 -3
- package/SECURITY.md +4 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -1
- package/dist/governor/adapter.d.ts +11 -5
- package/dist/governor/adapter.d.ts.map +1 -1
- package/dist/governor/adapter.js +18 -3
- package/dist/governor/adapter.js.map +1 -1
- package/dist/governor/configs/optimism.json +2 -1
- package/dist/governor/loader.d.ts +7 -0
- package/dist/governor/loader.d.ts.map +1 -1
- package/dist/governor/loader.js +4 -0
- package/dist/governor/loader.js.map +1 -1
- package/dist/governor/tools/read.js +1 -1
- package/dist/governor/tools/read.js.map +1 -1
- package/dist/lib/walletconnect.d.ts +62 -0
- package/dist/lib/walletconnect.d.ts.map +1 -0
- package/dist/lib/walletconnect.js +184 -0
- package/dist/lib/walletconnect.js.map +1 -0
- package/dist/tools/getConfig.d.ts.map +1 -1
- package/dist/tools/getConfig.js +14 -4
- package/dist/tools/getConfig.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +5 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/txSend.d.ts +2 -1
- package/dist/tools/txSend.d.ts.map +1 -1
- package/dist/tools/txSend.js +86 -3
- package/dist/tools/txSend.js.map +1 -1
- package/dist/tools/walletconnectStatus.d.ts +18 -0
- package/dist/tools/walletconnectStatus.d.ts.map +1 -0
- package/dist/tools/walletconnectStatus.js +132 -0
- package/dist/tools/walletconnectStatus.js.map +1 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,85 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.1 — 2026-05-26
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **`dexe_gov_get_quorum` returned 0 for Optimism.** OP's modified Governor keys
|
|
8
|
+
`quorum(uint256)` by *proposalId* (via its out-of-scope ProposalTypesConfigurator),
|
|
9
|
+
not by block number, so the vanilla OZ `quorum(blockNumber)` call always returned
|
|
10
|
+
0. Added a `quorumSource` config field; OP is now `"votable-supply"`, and
|
|
11
|
+
`readQuorum` derives the canonical quorum as
|
|
12
|
+
`votableSupply(block) * quorumNumerator / quorumDenominator` (verified live:
|
|
13
|
+
~22.9M OP = 76.3M votable supply × 30%). Bravo (`quorumVotes()`) and vanilla OZ
|
|
14
|
+
(`quorum(blockNumber)`) paths are unchanged; the `method` field reports which was
|
|
15
|
+
used. Found via live verification of the governor adapter against mainnet/OP RPCs.
|
|
16
|
+
|
|
17
|
+
## 0.7.0 — 2026-05-26
|
|
18
|
+
|
|
19
|
+
### WalletConnect signer mode — Phase B (C12)
|
|
20
|
+
|
|
21
|
+
Live relay session on top of Phase A's config. WalletConnect is now a working
|
|
22
|
+
keyless signer: `dexe_tx_send` forwards each tx to the operator's phone wallet,
|
|
23
|
+
which **signs and broadcasts** — the private key never enters the MCP process.
|
|
24
|
+
|
|
25
|
+
- **Dependency.** Added `@walletconnect/universal-provider` (^2.17.0). **Lazily
|
|
26
|
+
imported** inside `src/lib/walletconnect.ts` — read-only / EOA / Safe
|
|
27
|
+
deployments that never open a WC session pay no startup cost, and a missing
|
|
28
|
+
install surfaces a clear error only on `dexe_wc_connect`.
|
|
29
|
+
- **`WalletConnectManager` (`src/lib/walletconnect.ts`).** Singleton holding the
|
|
30
|
+
`UniversalProvider` + session: `connect` (returns the pairing URI, approval
|
|
31
|
+
resolves in the background), `disconnect`, `sendTransaction` (per-tx approval
|
|
32
|
+
timeout from `DEXE_WALLETCONNECT_APPROVAL_TIMEOUT_MS`), CAIP-10 account parsing.
|
|
33
|
+
- **New tools `dexe_wc_connect` + `dexe_wc_disconnect`.** `dexe_wc_status` now
|
|
34
|
+
reports live session state (`connected`, `connecting`, `account`, `chainId`,
|
|
35
|
+
`topic`, `peerName`, `expiry`, `lastError`). +2 tools (150 → **152**); still
|
|
36
|
+
19 groups.
|
|
37
|
+
- **`dexe_tx_send`.** Branches to the WalletConnect path when no hot key is set;
|
|
38
|
+
the wallet returns the tx hash and `waitConfirmations` is honoured via a
|
|
39
|
+
read-only RPC provider. Guards B6/B7/B9/B10 still run before forwarding.
|
|
40
|
+
- **`dexe_tx_status`.** Reworked to a read-only `JsonRpcProvider` so it no longer
|
|
41
|
+
requires a signer — works in `walletconnect` and `readonly` modes.
|
|
42
|
+
- **Scope.** Only `dexe_tx_send` / `dexe_tx_status` route through WalletConnect;
|
|
43
|
+
composite broadcast flows (`flow.ts` / OTC `sendOrCollect`) still require a hot
|
|
44
|
+
key (per-step phone approval on dependent sequences is impractical) — deferred.
|
|
45
|
+
- **CJS/ESM interop fix.** `getProvider()` assumed `mod.default.init`, which threw
|
|
46
|
+
`UniversalProvider.init is not a function` on the first live `dexe_wc_connect`
|
|
47
|
+
(the published package is CJS; a dynamic import nests the class under varying
|
|
48
|
+
keys). Now probes `mod.UniversalProvider` → `mod.default.UniversalProvider` →
|
|
49
|
+
`mod.default.default` → `mod.default`, with a clear error if none exposes
|
|
50
|
+
`init()`.
|
|
51
|
+
- **Tests.** `tests/walletconnect.test.ts` (8) — config gating, CAIP-10 parsing,
|
|
52
|
+
no-session guards, and a regression guard asserting the real package resolves to
|
|
53
|
+
a constructor with `init()`.
|
|
54
|
+
- **Gate cleared:** live phone-wallet round-trip on BSC testnet (chain 97) green —
|
|
55
|
+
connect → QR → MetaMask mobile approval → `dexe_tx_send` 0-value self-send →
|
|
56
|
+
status 1 → `dexe_wc_disconnect`.
|
|
57
|
+
|
|
58
|
+
### WalletConnect signer mode — Phase A (C12)
|
|
59
|
+
|
|
60
|
+
Plumbing for a fourth `signerMode`: `walletconnect`. Broadcast convenience
|
|
61
|
+
**without a hot key** — every tx is approved on the operator's phone wallet and
|
|
62
|
+
the private key never enters the MCP process. Closes the last security-hardening
|
|
63
|
+
roadmap item (C12). Phase A is **config-only**: no relay connection, no new
|
|
64
|
+
dependency (`@walletconnect/universal-provider` lands in Phase B / v0.7.0), so
|
|
65
|
+
the supply-chain surface is unchanged.
|
|
66
|
+
|
|
67
|
+
- **Config (`src/config.ts`).** Three new env vars parsed into `DexeConfig`:
|
|
68
|
+
`DEXE_WALLETCONNECT_PROJECT_ID`, `DEXE_WALLETCONNECT_RELAY_URL` (default
|
|
69
|
+
`wss://relay.walletconnect.com`), `DEXE_WALLETCONNECT_APPROVAL_TIMEOUT_MS`
|
|
70
|
+
(default `120000`, validated `> 0`).
|
|
71
|
+
- **`dexe_get_config`.** `signerMode` union extended to
|
|
72
|
+
`readonly | eoa | safe | walletconnect`. Precedence: `safe` → `eoa` →
|
|
73
|
+
`walletconnect` → `readonly` (WalletConnect wins only when no `DEXE_PRIVATE_KEY`
|
|
74
|
+
is present). New `walletConnect` report block (`projectIdConfigured`,
|
|
75
|
+
`relayUrl`, `approvalTimeoutMs`).
|
|
76
|
+
- **New tool `dexe_wc_status`** (`src/tools/walletconnectStatus.ts`). Read-only;
|
|
77
|
+
reports the resolved WalletConnect config + whether `walletconnect` is the
|
|
78
|
+
active mode. Opens no relay connection in Phase A. +1 tool (149 → 150), new
|
|
79
|
+
"WalletConnect" group (18 → 19).
|
|
80
|
+
- **Docs.** `docs/WALLETCONNECT.md` (spec + phased plan), `docs/ENVIRONMENT.md`
|
|
81
|
+
(3 vars), `SECURITY.md` (threat-model note), README + `docs/TOOLS.md` counts.
|
|
82
|
+
|
|
3
83
|
## 0.6.0 — 2026-05-26
|
|
4
84
|
|
|
5
85
|
### `gov` track
|
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ That era is ending.
|
|
|
40
40
|
|
|
41
41
|
LLMs can now reason about voting power, weigh proposals against a mandate, draft calldata, simulate execution, and ask your wallet to sign — **continuously, across every DAO you care about, all at once.** What was a UI is becoming a conversation. What was a treasurer's spreadsheet is becoming an always-on agent.
|
|
42
42
|
|
|
43
|
-
**`dexe-mcp` is the substrate that makes it real for the DeXe stack — and now for external OpenZeppelin Governor DAOs as well.** One MCP server.
|
|
43
|
+
**`dexe-mcp` is the substrate that makes it real for the DeXe stack — and now for external OpenZeppelin Governor DAOs as well.** One MCP server. 152 typed tools across 19 groups. Every flow the DeXe frontend exposes — plus a generic `dexe_gov_*` surface targeting Uniswap, Compound, and Optimism.
|
|
44
44
|
|
|
45
45
|
| | What you get |
|
|
46
46
|
|-----|------|
|
|
@@ -176,8 +176,9 @@ All optional. Tools that need a missing variable fail with a clear, actionable m
|
|
|
176
176
|
|
|
177
177
|
Full docs in [`docs/`](https://github.com/edward-arinin-web-dev/dexe-mcp/tree/main/docs):
|
|
178
178
|
|
|
179
|
-
- [**`docs/TOOLS.md`**](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/TOOLS.md) — complete catalog of all
|
|
179
|
+
- [**`docs/TOOLS.md`**](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/TOOLS.md) — complete catalog of all 152 tools, grouped, with one-line descriptions and required envs.
|
|
180
180
|
- [**`docs/GOVERNOR.md`**](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/GOVERNOR.md) — external OpenZeppelin / Bravo Governor surface (Uniswap, Compound, Optimism). Family branching, fixture map, paste-able JSON examples, Tally parity harness.
|
|
181
|
+
- [**`docs/WALLETCONNECT.md`**](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/WALLETCONNECT.md) — `walletconnect` signer mode: phone-approved broadcast with no hot key. Phase A (config) + Phase B (live relay, `dexe_wc_connect` / `dexe_wc_disconnect`, per-tx phone approval) shipped in v0.7.0, validated end-to-end with a live MetaMask-mobile round-trip on BSC testnet.
|
|
181
182
|
- [**`docs/USAGE.md`**](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/USAGE.md) — 10 worked examples (deploy DAO, create/vote/execute proposals, delegate, validator chamber, decode calldata, off-chain proposals, multicall batching). Copy-pasteable JSON.
|
|
182
183
|
- [**`docs/ENVIRONMENT.md`**](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/ENVIRONMENT.md) — env-var reference: minimum block to get started, per-category requirements, calldata vs signer mode, chain config, IPFS gateway rationale, subgraph migration, swarm-harness envs, common pitfalls.
|
|
183
184
|
- [**`docs/OTC.md`**](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/OTC.md) — multi-tier OTC sale flows (project-owner and buyer paths).
|
|
@@ -188,7 +189,7 @@ Full docs in [`docs/`](https://github.com/edward-arinin-web-dev/dexe-mcp/tree/ma
|
|
|
188
189
|
|
|
189
190
|
## Tool catalog
|
|
190
191
|
|
|
191
|
-
**
|
|
192
|
+
**152 tools, 19 groups.** Run `dexe_proposal_catalog` at runtime for the live proposal-type map. Full per-tool reference → [`docs/TOOLS.md`](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/TOOLS.md).
|
|
192
193
|
|
|
193
194
|
| Group | # | What it gives you |
|
|
194
195
|
|-------|---|------|
|
|
@@ -207,6 +208,7 @@ Full docs in [`docs/`](https://github.com/edward-arinin-web-dev/dexe-mcp/tree/ma
|
|
|
207
208
|
| **Merkle utility** | 2 | `dexe_merkle_build`, `dexe_merkle_proof` — OZ `StandardMerkleTree`-compatible. For whitelisted sales and airdrops. |
|
|
208
209
|
| **OTC composites** | 4 | Full project-owner + buyer flows over `TokenSaleProposal`: open multi-tier sale, check buyer status, buy native or with merkle proof, claim vested payouts. See [`docs/OTC.md`](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/OTC.md). |
|
|
209
210
|
| **Safe multisig** | 2 | Queue a tx in the Safe Transaction Service for owners to co-sign instead of broadcasting — `dexe_safe_info` (on-chain nonce/threshold/owners + endpoint), `dexe_safe_propose_tx` (compute `safeTxHash`, sign as owner, POST to the queue; dry-run by default). See [`docs/SAFE.md`](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/SAFE.md). |
|
|
211
|
+
| **WalletConnect** | 3 | `dexe_wc_status` (resolved config + live session state), `dexe_wc_connect` (start a session, returns a pairing URI to scan as a QR), `dexe_wc_disconnect` (tear down). Broadcast convenience without a hot key — every tx is signed and broadcast on the operator's phone, the key never enters the MCP. See [`docs/WALLETCONNECT.md`](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/WALLETCONNECT.md). |
|
|
210
212
|
| **Simulator** | 3 | `eth_call`-based preflight with decoded revert reasons — `_sim_calldata`, `_sim_proposal`, `_sim_buy`. Catch reverts before you pay gas. See [`docs/SIMULATOR.md`](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/SIMULATOR.md). |
|
|
211
213
|
| **Multi-DAO inbox + forecast** | 2 | `dexe_user_inbox` aggregates pending items (unvoted proposals, claimable rewards, locked deposits) across N DAOs. `_proposal_forecast` predicts pass rate with quorum projection + risk flags. See [`docs/INBOX.md`](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/INBOX.md). |
|
|
212
214
|
| **External Governor DAOs** | 18 | `dexe_gov_*` — read, build, simulate, and decode against OpenZeppelin Governor + Compound Bravo DAOs. Tier-1: Uniswap, Compound, Optimism. Config-only addition for new DAOs. Family-aware (OZ vs Bravo) propose / castVote / queue / execute / cancel / delegate. Eth-call dry-run + vote-impact projection. hasVoted + state + hashProposal + decode + descriptionHash utilities. Tally state-enum parity harness. See [`docs/GOVERNOR.md`](https://github.com/edward-arinin-web-dev/dexe-mcp/blob/main/docs/GOVERNOR.md). |
|
package/SECURITY.md
CHANGED
|
@@ -94,3 +94,7 @@ When signer mode is enabled (`DEXE_PRIVATE_KEY`), `dexe_tx_send` runs four opt-i
|
|
|
94
94
|
| **B10** rate limit | `DEXE_SIGNER_MAX_BROADCASTS_PER_MIN` | More than N broadcasts in a rolling 60s window. |
|
|
95
95
|
|
|
96
96
|
These are defense-in-depth, **not** a substitute for keeping the key off-host. For prod governance/treasury actions, prefer calldata mode + Safe Multisig / Ledger. See `docs/ENVIRONMENT.md` §4 for the recommended config block.
|
|
97
|
+
|
|
98
|
+
## WalletConnect signer mode (C12)
|
|
99
|
+
|
|
100
|
+
`signerMode: walletconnect` (activated by `DEXE_WALLETCONNECT_PROJECT_ID` when **no** `DEXE_PRIVATE_KEY` is set) removes the hot key from the threat model entirely: the signing key never leaves the operator's phone wallet, and **every** transaction is gated by an explicit per-tx approval on that device. The MCP process holds only a relay session, never key material. The broadcast guards above (B6/B7/B9/B10) still run on the `tx` *before* it is forwarded to the relay — the phone approval is an **additional** human gate, not a replacement. A hard approval timeout (`DEXE_WALLETCONNECT_APPROVAL_TIMEOUT_MS`, default 120 s) bounds how long a request can block. Phase A (current) ships config + the read-only `dexe_wc_status` tool only — no relay connection, no new dependency. The live session lands in v0.6.0. See `docs/WALLETCONNECT.md`.
|
package/dist/config.d.ts
CHANGED
|
@@ -43,6 +43,16 @@ export interface DexeConfig {
|
|
|
43
43
|
signerMaxValueWei?: bigint;
|
|
44
44
|
/** B10 — max broadcasts per rolling minute. Undefined = no limit. */
|
|
45
45
|
signerMaxBroadcastsPerMin?: number;
|
|
46
|
+
/**
|
|
47
|
+
* C12 — WalletConnect project id (Reown cloud.reown.com). When set and
|
|
48
|
+
* `privateKey` is absent, `signerMode` resolves to `walletconnect`: broadcast
|
|
49
|
+
* convenience without a hot key (every tx approved on the operator's phone).
|
|
50
|
+
*/
|
|
51
|
+
walletConnectProjectId?: string;
|
|
52
|
+
/** C12 — relay websocket override. Default `wss://relay.walletconnect.com`. */
|
|
53
|
+
walletConnectRelayUrl?: string;
|
|
54
|
+
/** C12 — per-tx phone-approval timeout in ms. Default 120000. */
|
|
55
|
+
walletConnectApprovalTimeoutMs?: number;
|
|
46
56
|
}
|
|
47
57
|
/**
|
|
48
58
|
* Reads environment and returns a frozen config. **Fast and side-effect-free**
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC;IAErB,uEAAuE;IACvE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,yBAAyB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC;IAErB,uEAAuE;IACvE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,+EAA+E;IAC/E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iEAAiE;IACjE,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CA+NtD;AAcD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAW9E"}
|
package/dist/config.js
CHANGED
|
@@ -163,6 +163,22 @@ export async function loadConfig() {
|
|
|
163
163
|
}
|
|
164
164
|
signerMaxBroadcastsPerMin = n;
|
|
165
165
|
}
|
|
166
|
+
// ---- C12 WalletConnect signer mode ------------------------------------
|
|
167
|
+
// Phase A: parse + expose config only. No relay connection, no dependency.
|
|
168
|
+
const walletConnectProjectId = process.env.DEXE_WALLETCONNECT_PROJECT_ID?.trim() || undefined;
|
|
169
|
+
const walletConnectRelayUrl = process.env.DEXE_WALLETCONNECT_RELAY_URL?.trim() || "wss://relay.walletconnect.com";
|
|
170
|
+
let walletConnectApprovalTimeoutMs = 120000;
|
|
171
|
+
const wcTimeoutRaw = process.env.DEXE_WALLETCONNECT_APPROVAL_TIMEOUT_MS?.trim();
|
|
172
|
+
if (wcTimeoutRaw) {
|
|
173
|
+
const n = Number(wcTimeoutRaw);
|
|
174
|
+
if (!Number.isInteger(n) || n <= 0) {
|
|
175
|
+
fatal(`DEXE_WALLETCONNECT_APPROVAL_TIMEOUT_MS must be a positive integer (ms), got: ${wcTimeoutRaw}`);
|
|
176
|
+
}
|
|
177
|
+
walletConnectApprovalTimeoutMs = n;
|
|
178
|
+
}
|
|
179
|
+
if (walletConnectProjectId) {
|
|
180
|
+
process.stderr.write(`[dexe-mcp] WalletConnect project id configured${privateKey ? " (inactive — DEXE_PRIVATE_KEY takes precedence)" : ""}\n`);
|
|
181
|
+
}
|
|
166
182
|
let forkBlock;
|
|
167
183
|
if (process.env.DEXE_FORK_BLOCK) {
|
|
168
184
|
const n = Number(process.env.DEXE_FORK_BLOCK);
|
|
@@ -188,6 +204,9 @@ export async function loadConfig() {
|
|
|
188
204
|
signerAllowlist,
|
|
189
205
|
signerMaxValueWei,
|
|
190
206
|
signerMaxBroadcastsPerMin,
|
|
207
|
+
walletConnectProjectId,
|
|
208
|
+
walletConnectRelayUrl,
|
|
209
|
+
walletConnectApprovalTimeoutMs,
|
|
191
210
|
});
|
|
192
211
|
}
|
|
193
212
|
/**
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import type { GovernorConfig } from "./loader.js";
|
|
|
13
13
|
*
|
|
14
14
|
* The canonical `ProposalState` enum order is identical across both families.
|
|
15
15
|
*/
|
|
16
|
-
export declare const GOVERNOR_OZ_READ_ABI: readonly ["function state(uint256 proposalId) view returns (uint8)", "function proposalSnapshot(uint256 proposalId) view returns (uint256)", "function proposalDeadline(uint256 proposalId) view returns (uint256)", "function proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)", "function proposalThreshold() view returns (uint256)", "function quorum(uint256 blockNumber) view returns (uint256)", "function votingDelay() view returns (uint256)", "function votingPeriod() view returns (uint256)", "function hasVoted(uint256 proposalId, address account) view returns (bool)", "function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) pure returns (uint256)", "function name() view returns (string)", "function version() view returns (string)"];
|
|
16
|
+
export declare const GOVERNOR_OZ_READ_ABI: readonly ["function state(uint256 proposalId) view returns (uint8)", "function proposalSnapshot(uint256 proposalId) view returns (uint256)", "function proposalDeadline(uint256 proposalId) view returns (uint256)", "function proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)", "function proposalThreshold() view returns (uint256)", "function quorum(uint256 blockNumber) view returns (uint256)", "function votableSupply(uint256 blockNumber) view returns (uint256)", "function votingDelay() view returns (uint256)", "function votingPeriod() view returns (uint256)", "function hasVoted(uint256 proposalId, address account) view returns (bool)", "function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) pure returns (uint256)", "function name() view returns (string)", "function version() view returns (string)"];
|
|
17
17
|
export declare const GOVERNOR_BRAVO_READ_ABI: readonly ["function state(uint256 proposalId) view returns (uint8)", "function proposals(uint256 proposalId) view returns (uint256 id, address proposer, uint256 eta, uint256 startBlock, uint256 endBlock, uint256 forVotes, uint256 againstVotes, uint256 abstainVotes, bool canceled, bool executed)", "function proposalThreshold() view returns (uint256)", "function quorumVotes() view returns (uint256)", "function votingDelay() view returns (uint256)", "function votingPeriod() view returns (uint256)", "function hasVoted(uint256 proposalId, address account) view returns (bool)", "function name() view returns (string)"];
|
|
18
18
|
export declare const IVOTES_ABI: readonly ["function getVotes(address account) view returns (uint256)", "function getPastVotes(address account, uint256 blockNumber) view returns (uint256)", "function delegates(address account) view returns (address)"];
|
|
19
19
|
/**
|
|
@@ -62,14 +62,20 @@ export interface ProposalReadout {
|
|
|
62
62
|
* the OZ-style {snapshot, deadline, votes} shape so callers don't branch.
|
|
63
63
|
*/
|
|
64
64
|
export declare function readProposal(c: Contract, cfg: GovernorConfig, proposalId: bigint): Promise<ProposalReadout>;
|
|
65
|
+
export type QuorumMethod = "quorum(blockNumber)" | "quorumVotes()" | "votableSupply(blockNumber)*ratio";
|
|
65
66
|
/**
|
|
66
|
-
* Returns the active quorum value.
|
|
67
|
-
*
|
|
68
|
-
*
|
|
67
|
+
* Returns the active quorum value. Three families:
|
|
68
|
+
* - **Bravo** (UNI, COMP): fixed `quorumVotes()` (blockNumber ignored).
|
|
69
|
+
* - **Vanilla OZ** (`quorumSource` unset / `"governor"`): `quorum(blockNumber)`.
|
|
70
|
+
* - **OP-style** (`quorumSource: "votable-supply"`): the governor's own
|
|
71
|
+
* `quorum(uint256)` is keyed by *proposalId* (via the out-of-scope
|
|
72
|
+
* ProposalTypesConfigurator) and returns 0 for a bare block number, so we
|
|
73
|
+
* derive the canonical quorum the way the governor does internally —
|
|
74
|
+
* `votableSupply(snapshot) * quorumNumerator / quorumDenominator`.
|
|
69
75
|
*/
|
|
70
76
|
export declare function readQuorum(c: Contract, cfg: GovernorConfig, blockNumber: number): Promise<{
|
|
71
77
|
quorum: bigint;
|
|
72
|
-
method:
|
|
78
|
+
method: QuorumMethod;
|
|
73
79
|
}>;
|
|
74
80
|
export interface VoteTally {
|
|
75
81
|
against: bigint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/governor/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/governor/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,oBAAoB,m5BAiBvB,CAAC;AAEX,eAAO,MAAM,uBAAuB,6mBAS1B,CAAC;AAEX,eAAO,MAAM,UAAU,4NAIb,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,kOAIlB,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EASlC,CAAC;AAEX,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,QAAQ,CAGzF;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,QAAQ,CAGtF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,CAAC,EAAE,QAAQ,EACX,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAU5C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,CAAC,EAAE,QAAQ,EACX,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED,MAAM,MAAM,YAAY,GACpB,qBAAqB,GACrB,eAAe,GACf,kCAAkC,CAAC;AAEvC;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,CAAC,EAAE,QAAQ,EACX,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CAanD;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAUjE"}
|
package/dist/governor/adapter.js
CHANGED
|
@@ -19,6 +19,10 @@ export const GOVERNOR_OZ_READ_ABI = [
|
|
|
19
19
|
"function proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)",
|
|
20
20
|
"function proposalThreshold() view returns (uint256)",
|
|
21
21
|
"function quorum(uint256 blockNumber) view returns (uint256)",
|
|
22
|
+
// OP-style governors derive quorum from the votable supply at the snapshot
|
|
23
|
+
// (see readQuorum + the `votable-supply` quorumSource). Harmless on vanilla OZ
|
|
24
|
+
// governors that lack it — only called when quorumSource is set.
|
|
25
|
+
"function votableSupply(uint256 blockNumber) view returns (uint256)",
|
|
22
26
|
"function votingDelay() view returns (uint256)",
|
|
23
27
|
"function votingPeriod() view returns (uint256)",
|
|
24
28
|
"function hasVoted(uint256 proposalId, address account) view returns (bool)",
|
|
@@ -135,15 +139,26 @@ export async function readProposal(c, cfg, proposalId) {
|
|
|
135
139
|
};
|
|
136
140
|
}
|
|
137
141
|
/**
|
|
138
|
-
* Returns the active quorum value.
|
|
139
|
-
*
|
|
140
|
-
*
|
|
142
|
+
* Returns the active quorum value. Three families:
|
|
143
|
+
* - **Bravo** (UNI, COMP): fixed `quorumVotes()` (blockNumber ignored).
|
|
144
|
+
* - **Vanilla OZ** (`quorumSource` unset / `"governor"`): `quorum(blockNumber)`.
|
|
145
|
+
* - **OP-style** (`quorumSource: "votable-supply"`): the governor's own
|
|
146
|
+
* `quorum(uint256)` is keyed by *proposalId* (via the out-of-scope
|
|
147
|
+
* ProposalTypesConfigurator) and returns 0 for a bare block number, so we
|
|
148
|
+
* derive the canonical quorum the way the governor does internally —
|
|
149
|
+
* `votableSupply(snapshot) * quorumNumerator / quorumDenominator`.
|
|
141
150
|
*/
|
|
142
151
|
export async function readQuorum(c, cfg, blockNumber) {
|
|
143
152
|
if (isBravo(cfg)) {
|
|
144
153
|
const q = await c.getFunction("quorumVotes").staticCall();
|
|
145
154
|
return { quorum: q, method: "quorumVotes()" };
|
|
146
155
|
}
|
|
156
|
+
if (cfg.quorumSource === "votable-supply") {
|
|
157
|
+
const vs = await c.getFunction("votableSupply").staticCall(blockNumber);
|
|
158
|
+
const num = BigInt(cfg.votingParams.quorumNumerator);
|
|
159
|
+
const den = BigInt(cfg.votingParams.quorumDenominator);
|
|
160
|
+
return { quorum: (vs * num) / den, method: "votableSupply(blockNumber)*ratio" };
|
|
161
|
+
}
|
|
147
162
|
const q = await c.getFunction("quorum").staticCall(blockNumber);
|
|
148
163
|
return { quorum: q, method: "quorum(blockNumber)" };
|
|
149
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/governor/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/governor/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
"type": "governor-self",
|
|
21
21
|
"id": null
|
|
22
22
|
},
|
|
23
|
+
"quorumSource": "votable-supply",
|
|
23
24
|
"explorer": {
|
|
24
25
|
"etherscanBase": "https://optimistic.etherscan.io",
|
|
25
26
|
"tallyOrgSlug": "optimism"
|
|
26
27
|
},
|
|
27
|
-
"notes": "Optimism's modified OZ Governor. ERC20Votes (OP token implements OZ-style getPastVotes). Custom ProposalTypesConfigurator is OUT OF SCOPE (research/06-execution-plan.md §6). Treated as vanilla oz-v4 surface
|
|
28
|
+
"notes": "Optimism's modified OZ Governor. ERC20Votes (OP token implements OZ-style getPastVotes). Custom ProposalTypesConfigurator is OUT OF SCOPE (research/06-execution-plan.md §6); its quorum(uint256) is keyed by proposalId and returns 0 for a bare block number, so quorumSource is 'votable-supply' — readQuorum computes votableSupply(block) * 30/100. Treated as vanilla oz-v4 surface otherwise."
|
|
28
29
|
}
|
|
@@ -30,6 +30,13 @@ export interface GovernorConfig {
|
|
|
30
30
|
type: "timelock" | "governor-self";
|
|
31
31
|
id?: string | null;
|
|
32
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* How `readQuorum` derives quorum for OZ-family governors. Omitted / "governor"
|
|
35
|
+
* → vanilla `quorum(blockNumber)`. "votable-supply" → OP-style governors whose
|
|
36
|
+
* `quorum(uint256)` is keyed by proposalId; quorum is computed as
|
|
37
|
+
* `votableSupply(block) * quorumNumerator / quorumDenominator`. Ignored for Bravo.
|
|
38
|
+
*/
|
|
39
|
+
quorumSource?: "governor" | "votable-supply";
|
|
33
40
|
explorer?: {
|
|
34
41
|
etherscanBase?: string;
|
|
35
42
|
tallyOrgSlug?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/governor/loader.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,WAAW,EAAE;QACX,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,eAAe,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACrE,QAAQ,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAYD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/governor/loader.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,WAAW,EAAE;QACX,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,eAAe,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACrE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAYD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAqEnF;AAID,wBAAgB,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAWjE;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAQnE"}
|
package/dist/governor/loader.js
CHANGED
|
@@ -56,6 +56,9 @@ export function validateGovernorConfig(raw, source) {
|
|
|
56
56
|
if (!["timelock", "governor-self"].includes(ex.type)) {
|
|
57
57
|
throw new Error(`${source}: executor.type must be timelock|governor-self`);
|
|
58
58
|
}
|
|
59
|
+
if (o.quorumSource !== undefined && !["governor", "votable-supply"].includes(o.quorumSource)) {
|
|
60
|
+
throw new Error(`${source}: quorumSource must be governor|votable-supply`);
|
|
61
|
+
}
|
|
59
62
|
return {
|
|
60
63
|
id: o.id,
|
|
61
64
|
chainId: o.chainId,
|
|
@@ -71,6 +74,7 @@ export function validateGovernorConfig(raw, source) {
|
|
|
71
74
|
quorumDenominator: typeof vp.quorumDenominator === "number" ? vp.quorumDenominator : 100,
|
|
72
75
|
},
|
|
73
76
|
executor: { type: ex.type, id: ex.id ?? null },
|
|
77
|
+
quorumSource: o.quorumSource,
|
|
74
78
|
explorer: o.explorer,
|
|
75
79
|
notes: o.notes,
|
|
76
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/governor/loader.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,wBAAwB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,QAAQ,MAAM,yBAAyB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,OAAO,QAAQ,MAAM,yBAAyB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/governor/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -113,7 +113,7 @@ function registerGetVotingPower(server, rpc) {
|
|
|
113
113
|
function registerGetQuorum(server, rpc) {
|
|
114
114
|
server.registerTool("dexe_gov_get_quorum", {
|
|
115
115
|
title: "Read Governor quorum threshold at a snapshot block",
|
|
116
|
-
description: "
|
|
116
|
+
description: "Returns the quorum threshold at a snapshot block. Bravo (UNI/COMP) → fixed quorumVotes(); vanilla OZ → quorum(blockNumber); OP-style governors (quorumSource=votable-supply, whose quorum() is keyed by proposalId) → votableSupply(block) * quorumNumerator/quorumDenominator. When blockNumber is omitted, uses the latest block. The `method` field reports which path was used; `configured` echoes the numerator/denominator for cross-check.",
|
|
117
117
|
inputSchema: {
|
|
118
118
|
governor: governorIdSchema,
|
|
119
119
|
blockNumber: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/governor/tools/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,UAAU,EACV,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpE,SAAS,EAAE,CAAC,IAAa;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,GAAG,CAAC,OAAe;IAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChF,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,QAAQ,CAAC,wEAAwE,CAAC,CAAC;AAEtF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAClC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE9G,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CACrC,CAAC;KACE,MAAM,EAAE;KACR,MAAM,CACL,CAAC,CAAC,EAAE,EAAE;IACJ,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EACD,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAC5D;KACA,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,GAAgB;IAC3E,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,4BAA4B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAiB;IAC9C,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,iLAAiL;QACnL,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,GAAG,mBAAmB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,oCAAqC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAiB,EAAE,GAAgB;IAC9D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,qDAAqD;QAC5D,WAAW,EACT,2LAA2L;QAC7L,WAAW,EAAE;YACX,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE,aAAa,CACvB,8GAA8G,CAC/G;SACF;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;gBACR,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,UAAU;gBACV,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,iCAAkC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAiB,EAAE,GAAgB;IACjE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,yCAAyC;QAChD,WAAW,EACT,2MAA2M;QAC7M,WAAW,EAAE;YACX,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EAAE,UAAU,CAAC,8BAA8B,CAAC;YACnD,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,WAAW,EAAE;iBACb,QAAQ,EAAE;iBACV,QAAQ,CAAC,uFAAuF,CAAC;SACrG;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACvC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAC9E,OAAO,EAAE,CAAC;gBACR,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,OAAO;gBACP,WAAW,EAAE,WAAW,IAAI,QAAQ;gBACpC,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE;gBAC1E,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,qCAAsC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB,EAAE,GAAgB;IAC5D,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,oDAAoD;QAC3D,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/governor/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type DexeConfig } from "../config.js";
|
|
2
|
+
export interface WcSendTx {
|
|
3
|
+
to: string;
|
|
4
|
+
data: string;
|
|
5
|
+
/** Wei value as a decimal string. */
|
|
6
|
+
value: string;
|
|
7
|
+
chainId: number;
|
|
8
|
+
/** Optional gas limit override (decimal string). */
|
|
9
|
+
gasLimit?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WcStatus {
|
|
12
|
+
connected: boolean;
|
|
13
|
+
connecting: boolean;
|
|
14
|
+
account: string | null;
|
|
15
|
+
chainId: number | null;
|
|
16
|
+
topic: string | null;
|
|
17
|
+
peerName: string | null;
|
|
18
|
+
expiry: number | null;
|
|
19
|
+
lastError: string | null;
|
|
20
|
+
}
|
|
21
|
+
export declare class WalletConnectManager {
|
|
22
|
+
private readonly config;
|
|
23
|
+
private provider?;
|
|
24
|
+
private connecting;
|
|
25
|
+
private connectedChainId?;
|
|
26
|
+
private lastError?;
|
|
27
|
+
constructor(config: DexeConfig);
|
|
28
|
+
/** WalletConnect is usable only when a project id was configured. */
|
|
29
|
+
isConfigured(): boolean;
|
|
30
|
+
/** True once the phone wallet has approved the session proposal. */
|
|
31
|
+
isConnected(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Active account address for the connected session, or null.
|
|
34
|
+
* Accounts are CAIP-10 (`eip155:<chainId>:<addr>`) — we return the bare addr.
|
|
35
|
+
*/
|
|
36
|
+
account(): string | null;
|
|
37
|
+
status(): WcStatus;
|
|
38
|
+
/**
|
|
39
|
+
* Lazily init the UniversalProvider. Throws a readable error if the optional
|
|
40
|
+
* dependency is not installed.
|
|
41
|
+
*/
|
|
42
|
+
private getProvider;
|
|
43
|
+
/**
|
|
44
|
+
* Start a session for `chainId`. Returns the pairing URI as soon as the relay
|
|
45
|
+
* emits it (the user scans this as a QR or pastes it into their wallet). The
|
|
46
|
+
* session-approval handshake completes in the background — poll `status()` /
|
|
47
|
+
* `dexe_wc_status` until `connected` flips true.
|
|
48
|
+
*/
|
|
49
|
+
connect(chainId?: number): Promise<{
|
|
50
|
+
uri: string;
|
|
51
|
+
chainId: number;
|
|
52
|
+
}>;
|
|
53
|
+
/** Tear down the active session. No-op (returns false) when not connected. */
|
|
54
|
+
disconnect(): Promise<boolean>;
|
|
55
|
+
/**
|
|
56
|
+
* Forward a transaction to the phone wallet for approval. Resolves with the
|
|
57
|
+
* broadcast tx hash once the user approves, or rejects on timeout / rejection.
|
|
58
|
+
* The wallet signs AND broadcasts — we never see a private key.
|
|
59
|
+
*/
|
|
60
|
+
sendTransaction(tx: WcSendTx): Promise<string>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=walletconnect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletconnect.d.ts","sourceRoot":"","sources":["../../src/lib/walletconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAgC7D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,MAAM,EAAE,UAAU;IAI9B,qEAAqE;IACrE,YAAY,IAAI,OAAO;IAIvB,oEAAoE;IACpE,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAOxB,MAAM,IAAI,QAAQ;IAclB;;;OAGG;YACW,WAAW;IAiDzB;;;;;OAKG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA+C1E,8EAA8E;IACxE,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAQpC;;;;OAIG;IACG,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;CA2CrD"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { resolveChain } from "../config.js";
|
|
2
|
+
export class WalletConnectManager {
|
|
3
|
+
config;
|
|
4
|
+
provider;
|
|
5
|
+
connecting = false;
|
|
6
|
+
connectedChainId;
|
|
7
|
+
lastError;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
}
|
|
11
|
+
/** WalletConnect is usable only when a project id was configured. */
|
|
12
|
+
isConfigured() {
|
|
13
|
+
return !!this.config.walletConnectProjectId;
|
|
14
|
+
}
|
|
15
|
+
/** True once the phone wallet has approved the session proposal. */
|
|
16
|
+
isConnected() {
|
|
17
|
+
return !!this.provider?.session;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Active account address for the connected session, or null.
|
|
21
|
+
* Accounts are CAIP-10 (`eip155:<chainId>:<addr>`) — we return the bare addr.
|
|
22
|
+
*/
|
|
23
|
+
account() {
|
|
24
|
+
const accounts = this.provider?.session?.namespaces?.eip155?.accounts;
|
|
25
|
+
if (!accounts || accounts.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
const parts = accounts[0].split(":");
|
|
28
|
+
return parts[parts.length - 1] ?? null;
|
|
29
|
+
}
|
|
30
|
+
status() {
|
|
31
|
+
const session = this.provider?.session;
|
|
32
|
+
return {
|
|
33
|
+
connected: !!session,
|
|
34
|
+
connecting: this.connecting,
|
|
35
|
+
account: this.account(),
|
|
36
|
+
chainId: this.connectedChainId ?? null,
|
|
37
|
+
topic: session?.topic ?? null,
|
|
38
|
+
peerName: session?.peer?.metadata?.name ?? null,
|
|
39
|
+
expiry: session?.expiry ?? null,
|
|
40
|
+
lastError: this.lastError ?? null,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Lazily init the UniversalProvider. Throws a readable error if the optional
|
|
45
|
+
* dependency is not installed.
|
|
46
|
+
*/
|
|
47
|
+
async getProvider() {
|
|
48
|
+
if (this.provider)
|
|
49
|
+
return this.provider;
|
|
50
|
+
if (!this.config.walletConnectProjectId) {
|
|
51
|
+
throw new Error("DEXE_WALLETCONNECT_PROJECT_ID not set. Get a free project id at https://cloud.reown.com to enable WalletConnect mode.");
|
|
52
|
+
}
|
|
53
|
+
let mod;
|
|
54
|
+
try {
|
|
55
|
+
mod = (await import("@walletconnect/universal-provider"));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
throw new Error("@walletconnect/universal-provider is not installed. Run `npm install @walletconnect/universal-provider` in the MCP server directory to enable WalletConnect mode.");
|
|
59
|
+
}
|
|
60
|
+
// ESM/CJS interop: the published package is CJS, so a dynamic import nests the
|
|
61
|
+
// class under varying keys depending on the loader. Probe the known shapes:
|
|
62
|
+
// mod.UniversalProvider | mod.default.UniversalProvider | mod.default.default | mod.default
|
|
63
|
+
const def = mod.default;
|
|
64
|
+
const candidate = mod.UniversalProvider ??
|
|
65
|
+
def?.UniversalProvider ??
|
|
66
|
+
def?.default ??
|
|
67
|
+
def;
|
|
68
|
+
if (!candidate || typeof candidate.init !== "function") {
|
|
69
|
+
throw new Error("@walletconnect/universal-provider loaded but UniversalProvider.init was not found (unexpected module shape).");
|
|
70
|
+
}
|
|
71
|
+
const UniversalProvider = candidate;
|
|
72
|
+
const provider = await UniversalProvider.init({
|
|
73
|
+
projectId: this.config.walletConnectProjectId,
|
|
74
|
+
relayUrl: this.config.walletConnectRelayUrl,
|
|
75
|
+
metadata: {
|
|
76
|
+
name: "dexe-mcp",
|
|
77
|
+
description: "DeXe Protocol MCP server — DAO governance via WalletConnect",
|
|
78
|
+
url: "https://github.com/edward-arinin-web-dev/dexe-mcp",
|
|
79
|
+
icons: ["https://avatars.githubusercontent.com/u/37784886"],
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
// Clear local session state when the phone ends the session out-of-band.
|
|
83
|
+
provider.on("session_delete", () => {
|
|
84
|
+
this.connectedChainId = undefined;
|
|
85
|
+
});
|
|
86
|
+
this.provider = provider;
|
|
87
|
+
return provider;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Start a session for `chainId`. Returns the pairing URI as soon as the relay
|
|
91
|
+
* emits it (the user scans this as a QR or pastes it into their wallet). The
|
|
92
|
+
* session-approval handshake completes in the background — poll `status()` /
|
|
93
|
+
* `dexe_wc_status` until `connected` flips true.
|
|
94
|
+
*/
|
|
95
|
+
async connect(chainId) {
|
|
96
|
+
if (this.isConnected()) {
|
|
97
|
+
throw new Error(`Already connected to ${this.account()} (chain ${this.connectedChainId}). Call dexe_wc_disconnect first to pair a different wallet.`);
|
|
98
|
+
}
|
|
99
|
+
const chain = resolveChain(this.config, chainId);
|
|
100
|
+
const provider = await this.getProvider();
|
|
101
|
+
this.lastError = undefined;
|
|
102
|
+
this.connecting = true;
|
|
103
|
+
return new Promise((resolveUri, rejectUri) => {
|
|
104
|
+
let uriEmitted = false;
|
|
105
|
+
const onUri = (arg) => {
|
|
106
|
+
const uri = arg?.uri ?? arg;
|
|
107
|
+
if (typeof uri === "string" && !uriEmitted) {
|
|
108
|
+
uriEmitted = true;
|
|
109
|
+
resolveUri({ uri, chainId: chain.chainId });
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
provider.once("display_uri", onUri);
|
|
113
|
+
provider
|
|
114
|
+
.connect({
|
|
115
|
+
optionalNamespaces: {
|
|
116
|
+
eip155: {
|
|
117
|
+
methods: ["eth_sendTransaction", "personal_sign", "eth_signTypedData_v4"],
|
|
118
|
+
chains: [`eip155:${chain.chainId}`],
|
|
119
|
+
events: ["chainChanged", "accountsChanged"],
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
})
|
|
123
|
+
.then(() => {
|
|
124
|
+
// Session approved by the phone wallet.
|
|
125
|
+
this.connecting = false;
|
|
126
|
+
this.connectedChainId = chain.chainId;
|
|
127
|
+
})
|
|
128
|
+
.catch((e) => {
|
|
129
|
+
this.connecting = false;
|
|
130
|
+
this.lastError = e instanceof Error ? e.message : String(e);
|
|
131
|
+
provider.removeListener?.("display_uri", onUri);
|
|
132
|
+
// If the URI never made it out, the caller is still awaiting — reject.
|
|
133
|
+
if (!uriEmitted)
|
|
134
|
+
rejectUri(e);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/** Tear down the active session. No-op (returns false) when not connected. */
|
|
139
|
+
async disconnect() {
|
|
140
|
+
if (!this.provider?.session)
|
|
141
|
+
return false;
|
|
142
|
+
await this.provider.disconnect();
|
|
143
|
+
this.connectedChainId = undefined;
|
|
144
|
+
this.connecting = false;
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Forward a transaction to the phone wallet for approval. Resolves with the
|
|
149
|
+
* broadcast tx hash once the user approves, or rejects on timeout / rejection.
|
|
150
|
+
* The wallet signs AND broadcasts — we never see a private key.
|
|
151
|
+
*/
|
|
152
|
+
async sendTransaction(tx) {
|
|
153
|
+
const provider = await this.getProvider();
|
|
154
|
+
if (!provider.session) {
|
|
155
|
+
throw new Error("WalletConnect session not established. Call dexe_wc_connect and approve on your phone first.");
|
|
156
|
+
}
|
|
157
|
+
const account = this.account();
|
|
158
|
+
if (!account)
|
|
159
|
+
throw new Error("WalletConnect session has no eip155 account.");
|
|
160
|
+
const params = [
|
|
161
|
+
{
|
|
162
|
+
from: account,
|
|
163
|
+
to: tx.to,
|
|
164
|
+
data: tx.data,
|
|
165
|
+
value: "0x" + BigInt(tx.value).toString(16),
|
|
166
|
+
...(tx.gasLimit ? { gas: "0x" + BigInt(tx.gasLimit).toString(16) } : {}),
|
|
167
|
+
},
|
|
168
|
+
];
|
|
169
|
+
const timeoutMs = this.config.walletConnectApprovalTimeoutMs ?? 120000;
|
|
170
|
+
const request = provider.request({ method: "eth_sendTransaction", params }, `eip155:${tx.chainId}`);
|
|
171
|
+
let timer;
|
|
172
|
+
const timeout = new Promise((_, reject) => {
|
|
173
|
+
timer = setTimeout(() => reject(new Error(`WalletConnect approval timed out after ${timeoutMs}ms (DEXE_WALLETCONNECT_APPROVAL_TIMEOUT_MS). The phone wallet did not approve in time.`)), timeoutMs);
|
|
174
|
+
});
|
|
175
|
+
try {
|
|
176
|
+
return await Promise.race([request, timeout]);
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
if (timer)
|
|
180
|
+
clearTimeout(timer);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=walletconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletconnect.js","sourceRoot":"","sources":["../../src/lib/walletconnect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getConfig.d.ts","sourceRoot":"","sources":["../../src/tools/getConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWtD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"getConfig.d.ts","sourceRoot":"","sources":["../../src/tools/getConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWtD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAwExG"}
|
package/dist/tools/getConfig.js
CHANGED
|
@@ -35,12 +35,17 @@ export function registerGetConfigTool(server, config, signer) {
|
|
|
35
35
|
// - "safe": key + DEXE_SAFE_TX_SERVICE_URL → dexe_safe_* can queue txs
|
|
36
36
|
// to the Safe multisig instead of broadcasting
|
|
37
37
|
// - "eoa": key set, no Safe service → dexe_tx_send broadcasts directly
|
|
38
|
+
// - "walletconnect": no key, but DEXE_WALLETCONNECT_PROJECT_ID set →
|
|
39
|
+
// txs are forwarded to the operator's phone for approval
|
|
40
|
+
// (Phase B). WC wins only when no hot key is present.
|
|
38
41
|
const safeServiceUrl = process.env.DEXE_SAFE_TX_SERVICE_URL?.trim() || undefined;
|
|
39
|
-
const signerMode =
|
|
40
|
-
?
|
|
41
|
-
: safeServiceUrl
|
|
42
|
+
const signerMode = signer.hasSigner()
|
|
43
|
+
? safeServiceUrl
|
|
42
44
|
? "safe"
|
|
43
|
-
: "eoa"
|
|
45
|
+
: "eoa"
|
|
46
|
+
: config.walletConnectProjectId
|
|
47
|
+
? "walletconnect"
|
|
48
|
+
: "readonly";
|
|
44
49
|
const result = {
|
|
45
50
|
defaultChainId: config.defaultChainId,
|
|
46
51
|
defaultChainName: CHAIN_NAMES[config.defaultChainId] ?? `chain ${config.defaultChainId}`,
|
|
@@ -52,6 +57,11 @@ export function registerGetConfigTool(server, config, signer) {
|
|
|
52
57
|
txServiceUrl: safeServiceUrl ?? null,
|
|
53
58
|
apiKeyConfigured: !!(process.env.DEXE_SAFE_API_KEY?.trim()),
|
|
54
59
|
},
|
|
60
|
+
walletConnect: {
|
|
61
|
+
projectIdConfigured: !!config.walletConnectProjectId,
|
|
62
|
+
relayUrl: config.walletConnectRelayUrl ?? null,
|
|
63
|
+
approvalTimeoutMs: config.walletConnectApprovalTimeoutMs ?? null,
|
|
64
|
+
},
|
|
55
65
|
ipfs: {
|
|
56
66
|
pinataConfigured: !!config.pinataJwt,
|
|
57
67
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getConfig.js","sourceRoot":"","sources":["../../src/tools/getConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,WAAW,GAA2B;IAC1C,CAAC,EAAE,kBAAkB;IACrB,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,cAAc;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAkB,EAAE,MAAqB;IAChG,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,6EAA6E;QAC3E,+FAA+F;QAC/F,yCAAyC,EAC3C;QACE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC9E,EACD,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;aACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,OAAO,EAAE;YACpD,SAAS,EAAE,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,cAAc;YAC9C,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;SACrC,CAAC,CAAC,CAAC;QAEN,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE;YACnC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE;YACnD,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAExC,6BAA6B;QAC7B,8EAA8E;QAC9E,6EAA6E;QAC7E,+DAA+D;QAC/D,8EAA8E;QAC9E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QACjF,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"getConfig.js","sourceRoot":"","sources":["../../src/tools/getConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmC/C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAuCvE"}
|
package/dist/tools/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { registerDaoDeployTools } from "./daoDeploy.js";
|
|
|
19
19
|
import { registerSubgraphTools } from "./subgraph.js";
|
|
20
20
|
import { registerTxTools } from "./txSend.js";
|
|
21
21
|
import { registerGetConfigTool } from "./getConfig.js";
|
|
22
|
+
import { registerWalletConnectTools } from "./walletconnectStatus.js";
|
|
22
23
|
import { registerFlowTools } from "./flow.js";
|
|
23
24
|
import { registerMerkleTools } from "./merkle.js";
|
|
24
25
|
import { registerOtcTools } from "./otc.js";
|
|
@@ -27,6 +28,7 @@ import { registerSimulateTools } from "./simulate.js";
|
|
|
27
28
|
import { registerInboxTools } from "./inbox.js";
|
|
28
29
|
import { registerPredictTools } from "./predict.js";
|
|
29
30
|
import { SignerManager } from "../lib/signer.js";
|
|
31
|
+
import { WalletConnectManager } from "../lib/walletconnect.js";
|
|
30
32
|
import { registerGovernorTools } from "../governor/index.js";
|
|
31
33
|
/**
|
|
32
34
|
* Wire every dexe-mcp tool onto the given server instance. Builds the shared
|
|
@@ -58,8 +60,10 @@ export function registerAll(server, config) {
|
|
|
58
60
|
registerInboxTools(server, ctx);
|
|
59
61
|
registerPredictTools(server, ctx);
|
|
60
62
|
const signer = new SignerManager(config);
|
|
61
|
-
|
|
63
|
+
const wc = new WalletConnectManager(config);
|
|
64
|
+
registerTxTools(server, config, signer, wc);
|
|
62
65
|
registerGetConfigTool(server, config, signer);
|
|
66
|
+
registerWalletConnectTools(server, config, signer, wc);
|
|
63
67
|
registerFlowTools(server, ctx, signer);
|
|
64
68
|
registerOtcTools(server, ctx, signer);
|
|
65
69
|
registerSafeTools(server, ctx, signer);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/txSend.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { SignerManager } from "../lib/signer.js";
|
|
3
|
+
import type { WalletConnectManager } from "../lib/walletconnect.js";
|
|
3
4
|
import { type DexeConfig } from "../config.js";
|
|
4
|
-
export declare function registerTxTools(server: McpServer, config: DexeConfig, signer: SignerManager): void;
|
|
5
|
+
export declare function registerTxTools(server: McpServer, config: DexeConfig, signer: SignerManager, wc: WalletConnectManager): void;
|
|
5
6
|
//# sourceMappingURL=txSend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txSend.d.ts","sourceRoot":"","sources":["../../src/tools/txSend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"txSend.d.ts","sourceRoot":"","sources":["../../src/tools/txSend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAG7D,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,oBAAoB,GACvB,IAAI,CAkRN"}
|
package/dist/tools/txSend.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { JsonRpcProvider } from "ethers";
|
|
2
3
|
import { resolveChain } from "../config.js";
|
|
3
4
|
import { runBroadcastGuards, BroadcastGuardError } from "../lib/broadcastGuards.js";
|
|
4
|
-
export function registerTxTools(server, config, signer) {
|
|
5
|
+
export function registerTxTools(server, config, signer, wc) {
|
|
6
|
+
// WalletConnect is the dispatch path only when there is no hot key to sign with.
|
|
7
|
+
const wcActive = () => !signer.hasSigner() && wc.isConfigured();
|
|
5
8
|
server.tool("dexe_tx_send", "Sign and broadcast a transaction using the configured DEXE_PRIVATE_KEY. " +
|
|
6
9
|
"Pass the TxPayload fields returned by any dexe_*_build_* tool. " +
|
|
7
10
|
"Waits for on-chain confirmation and returns the receipt. " +
|
|
@@ -31,6 +34,85 @@ export function registerTxTools(server, config, signer) {
|
|
|
31
34
|
.describe("Confirmations to wait (0 = fire-and-forget)"),
|
|
32
35
|
}, async ({ to, data, value, chainId, gasLimit, waitConfirmations }) => {
|
|
33
36
|
const chain = resolveChain(config, chainId);
|
|
37
|
+
// ---- WalletConnect dispatch path (no hot key) ----------------------
|
|
38
|
+
// The phone wallet signs AND broadcasts; we only see the hash. Guards
|
|
39
|
+
// (B6/B7/B9/B10) still run, keyed on the connected account as `from`.
|
|
40
|
+
if (wcActive()) {
|
|
41
|
+
if (!wc.isConnected()) {
|
|
42
|
+
return {
|
|
43
|
+
content: [
|
|
44
|
+
{
|
|
45
|
+
type: "text",
|
|
46
|
+
text: JSON.stringify({
|
|
47
|
+
status: "rejected",
|
|
48
|
+
reason: "WalletConnect mode is active but no session is connected. Call dexe_wc_connect and approve on your phone first.",
|
|
49
|
+
chainId: chain.chainId,
|
|
50
|
+
}, null, 2),
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
isError: true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const from = wc.account();
|
|
57
|
+
try {
|
|
58
|
+
await runBroadcastGuards({ to, data, value, chainId: chain.chainId, from }, config);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
if (e instanceof BroadcastGuardError) {
|
|
62
|
+
return {
|
|
63
|
+
content: [
|
|
64
|
+
{
|
|
65
|
+
type: "text",
|
|
66
|
+
text: JSON.stringify({ status: "rejected", guard: e.guard, reason: e.message, chainId: chain.chainId }, null, 2),
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
isError: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
throw e;
|
|
73
|
+
}
|
|
74
|
+
let txHash;
|
|
75
|
+
try {
|
|
76
|
+
txHash = await wc.sendTransaction({ to, data, value, chainId: chain.chainId, gasLimit });
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
return {
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: JSON.stringify({ status: "rejected", reason: e instanceof Error ? e.message : String(e), chainId: chain.chainId }, null, 2),
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
isError: true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (waitConfirmations === 0) {
|
|
90
|
+
return {
|
|
91
|
+
content: [
|
|
92
|
+
{
|
|
93
|
+
type: "text",
|
|
94
|
+
text: JSON.stringify({ txHash, from, chainId: chain.chainId, signer: "walletconnect", status: "submitted" }, null, 2),
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Wait via a read provider — WC returned the hash, the wallet broadcast it.
|
|
100
|
+
const provider = new JsonRpcProvider(chain.rpcUrl);
|
|
101
|
+
const receipt = await provider.waitForTransaction(txHash, waitConfirmations);
|
|
102
|
+
const result = receipt
|
|
103
|
+
? {
|
|
104
|
+
txHash: receipt.hash,
|
|
105
|
+
from,
|
|
106
|
+
chainId: chain.chainId,
|
|
107
|
+
signer: "walletconnect",
|
|
108
|
+
blockNumber: receipt.blockNumber,
|
|
109
|
+
gasUsed: receipt.gasUsed.toString(),
|
|
110
|
+
status: receipt.status,
|
|
111
|
+
}
|
|
112
|
+
: { txHash, from, chainId: chain.chainId, signer: "walletconnect", status: "unknown" };
|
|
113
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
114
|
+
}
|
|
115
|
+
// ---- hot-key (EOA) dispatch path -----------------------------------
|
|
34
116
|
const wallet = signer.requireSigner(chain.chainId);
|
|
35
117
|
// Signer broadcast guards (B6/B7/B9/B10) — no-ops unless their env vars
|
|
36
118
|
// are set. Run before spending any gas.
|
|
@@ -111,8 +193,9 @@ export function registerTxTools(server, config, signer) {
|
|
|
111
193
|
.describe("Chain id to look up the receipt on. Defaults to the MCP's default chain."),
|
|
112
194
|
}, async ({ txHash, chainId }) => {
|
|
113
195
|
const chain = resolveChain(config, chainId);
|
|
114
|
-
|
|
115
|
-
|
|
196
|
+
// Read-only lookup — no signer needed, so this works in WalletConnect/
|
|
197
|
+
// readonly modes too.
|
|
198
|
+
const provider = new JsonRpcProvider(chain.rpcUrl);
|
|
116
199
|
const receipt = await provider.getTransactionReceipt(txHash);
|
|
117
200
|
if (!receipt) {
|
|
118
201
|
return {
|
package/dist/tools/txSend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txSend.js","sourceRoot":"","sources":["../../src/tools/txSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"txSend.js","sourceRoot":"","sources":["../../src/tools/txSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAIzC,OAAO,EAAE,YAAY,EAAmB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEpF,MAAM,UAAU,eAAe,CAC7B,MAAiB,EACjB,MAAkB,EAClB,MAAqB,EACrB,EAAwB;IAExB,iFAAiF;IACjF,MAAM,QAAQ,GAAG,GAAY,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;IACzE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,0EAA0E;QACxE,iEAAiE;QACjE,2DAA2D;QAC3D,gJAAgJ,EAClJ;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACnE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,OAAO,CAAC,GAAG,CAAC;aACZ,QAAQ,CAAC,6BAA6B,CAAC;QAC1C,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CACP,qHAAqH,CACtH;QACH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;QAC3D,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,6CAA6C,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE;QAClE,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE5C,uEAAuE;QACvE,sEAAsE;QACtE,sEAAsE;QACtE,IAAI,QAAQ,EAAE,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,MAAM,EAAE,UAAU;gCAClB,MAAM,EACJ,iHAAiH;gCACnH,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAG,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YACtF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,mBAAmB,EAAE,CAAC;oBACrC,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EACjF,IAAI,EACJ,CAAC,CACF;6BACF;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,CAAC;YACV,CAAC;YAED,IAAI,MAAc,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAClG,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,iBAAiB,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,EACtF,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,4EAA4E;YAC5E,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,OAAO;gBACpB,CAAC,CAAC;oBACE,MAAM,EAAE,OAAO,CAAC,IAAI;oBACpB,IAAI;oBACJ,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,eAAe;oBACvB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;oBACnC,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB;gBACH,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACzF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QAED,uEAAuE;QACvE,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnD,wEAAwE;QACxE,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,kBAAkB,CACtB,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EACjE,MAAM,CACP,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,mBAAmB,EAAE,CAAC;gBACrC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,MAAM,EAAE,UAAU;gCAClB,KAAK,EAAE,CAAC,CAAC,KAAK;gCACd,MAAM,EAAE,CAAC,CAAC,OAAO;gCACjB,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;YACtC,EAAE;YACF,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC,CAAC;QAEH,IAAI,iBAAiB,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,MAAM,EAAE,EAAE,CAAC,IAAI;4BACf,IAAI,EAAE,MAAM,CAAC,OAAO;4BACpB,OAAO,EAAE,KAAK,CAAC,OAAO;4BACtB,MAAM,EAAE,WAAW;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAC9D,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,OAAO,CAAC,IAAI;YACpB,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,sEAAsE,EACtE;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC1D,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CACP,0EAA0E,CAC3E;KACJ,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,uEAAuE;QACvE,sBAAsB;QACtB,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;qBACpE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,OAAO,CAAC,IAAI;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;SAC/B,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { DexeConfig } from "../config.js";
|
|
3
|
+
import type { SignerManager } from "../lib/signer.js";
|
|
4
|
+
import type { WalletConnectManager } from "../lib/walletconnect.js";
|
|
5
|
+
/**
|
|
6
|
+
* C12 — WalletConnect tools.
|
|
7
|
+
*
|
|
8
|
+
* Phase A shipped `dexe_wc_status` as a config echo. Phase B adds the live relay
|
|
9
|
+
* session: `dexe_wc_connect` (returns a pairing URI for the phone to scan) and
|
|
10
|
+
* `dexe_wc_disconnect`, and `dexe_wc_status` now reports the live session state.
|
|
11
|
+
*
|
|
12
|
+
* WalletConnect activates as the signer only when DEXE_WALLETCONNECT_PROJECT_ID
|
|
13
|
+
* is set AND no DEXE_PRIVATE_KEY is present (a hot key, or Safe, takes
|
|
14
|
+
* precedence). When active, `dexe_tx_send` forwards every tx to the phone wallet
|
|
15
|
+
* for approval — the wallet signs and broadcasts, so no key ever enters the MCP.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerWalletConnectTools(server: McpServer, config: DexeConfig, signer: SignerManager, wc: WalletConnectManager): void;
|
|
18
|
+
//# sourceMappingURL=walletconnectStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletconnectStatus.d.ts","sourceRoot":"","sources":["../../src/tools/walletconnectStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,oBAAoB,GACvB,IAAI,CAwJN"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* C12 — WalletConnect tools.
|
|
4
|
+
*
|
|
5
|
+
* Phase A shipped `dexe_wc_status` as a config echo. Phase B adds the live relay
|
|
6
|
+
* session: `dexe_wc_connect` (returns a pairing URI for the phone to scan) and
|
|
7
|
+
* `dexe_wc_disconnect`, and `dexe_wc_status` now reports the live session state.
|
|
8
|
+
*
|
|
9
|
+
* WalletConnect activates as the signer only when DEXE_WALLETCONNECT_PROJECT_ID
|
|
10
|
+
* is set AND no DEXE_PRIVATE_KEY is present (a hot key, or Safe, takes
|
|
11
|
+
* precedence). When active, `dexe_tx_send` forwards every tx to the phone wallet
|
|
12
|
+
* for approval — the wallet signs and broadcasts, so no key ever enters the MCP.
|
|
13
|
+
*/
|
|
14
|
+
export function registerWalletConnectTools(server, config, signer, wc) {
|
|
15
|
+
const resolveSignerMode = () => {
|
|
16
|
+
const safeServiceUrl = process.env.DEXE_SAFE_TX_SERVICE_URL?.trim() || undefined;
|
|
17
|
+
return signer.hasSigner()
|
|
18
|
+
? safeServiceUrl
|
|
19
|
+
? "safe"
|
|
20
|
+
: "eoa"
|
|
21
|
+
: wc.isConfigured()
|
|
22
|
+
? "walletconnect"
|
|
23
|
+
: "readonly";
|
|
24
|
+
};
|
|
25
|
+
server.tool("dexe_wc_status", "Diagnostic: returns the resolved WalletConnect config plus the live session state " +
|
|
26
|
+
"(connected?, account, chain, topic, peer wallet, last error). Read-only. WalletConnect " +
|
|
27
|
+
"activates only when DEXE_WALLETCONNECT_PROJECT_ID is set AND no DEXE_PRIVATE_KEY is present.", {
|
|
28
|
+
chainId: z.number().int().positive().optional().describe("Unused; reserved."),
|
|
29
|
+
}, async () => {
|
|
30
|
+
const signerMode = resolveSignerMode();
|
|
31
|
+
const session = wc.status();
|
|
32
|
+
const result = {
|
|
33
|
+
signerMode,
|
|
34
|
+
active: signerMode === "walletconnect",
|
|
35
|
+
projectIdConfigured: wc.isConfigured(),
|
|
36
|
+
relayUrl: config.walletConnectRelayUrl ?? null,
|
|
37
|
+
approvalTimeoutMs: config.walletConnectApprovalTimeoutMs ?? null,
|
|
38
|
+
session,
|
|
39
|
+
note: !wc.isConfigured()
|
|
40
|
+
? "No DEXE_WALLETCONNECT_PROJECT_ID set. Get a free id at https://cloud.reown.com to enable WalletConnect mode."
|
|
41
|
+
: signerMode !== "walletconnect"
|
|
42
|
+
? "WalletConnect project id is set but inactive — DEXE_PRIVATE_KEY (or Safe) takes precedence."
|
|
43
|
+
: session.connected
|
|
44
|
+
? "Connected. dexe_tx_send will forward transactions to the phone wallet for approval."
|
|
45
|
+
: session.connecting
|
|
46
|
+
? "Pairing in progress — approve the session on your phone, then re-check status."
|
|
47
|
+
: "WalletConnect is the active signer mode. Call dexe_wc_connect to start a phone session.",
|
|
48
|
+
};
|
|
49
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
50
|
+
});
|
|
51
|
+
server.tool("dexe_wc_connect", "Start a WalletConnect session. Returns a pairing URI to render as a QR code or paste into " +
|
|
52
|
+
"the phone wallet (MetaMask / Trust / Rainbow). The session is approved on the phone; this " +
|
|
53
|
+
"tool returns as soon as the URI is ready — poll dexe_wc_status until `connected` is true. " +
|
|
54
|
+
"Requires WalletConnect to be the active signerMode (project id set, no private key).", {
|
|
55
|
+
chainId: z
|
|
56
|
+
.number()
|
|
57
|
+
.int()
|
|
58
|
+
.positive()
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("Chain to request in the session namespace. Defaults to the MCP's default chain."),
|
|
61
|
+
}, async ({ chainId }) => {
|
|
62
|
+
if (!wc.isConfigured()) {
|
|
63
|
+
return {
|
|
64
|
+
content: [
|
|
65
|
+
{
|
|
66
|
+
type: "text",
|
|
67
|
+
text: JSON.stringify({
|
|
68
|
+
status: "error",
|
|
69
|
+
reason: "WalletConnect not configured. Set DEXE_WALLETCONNECT_PROJECT_ID (https://cloud.reown.com).",
|
|
70
|
+
}, null, 2),
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
isError: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (signer.hasSigner()) {
|
|
77
|
+
return {
|
|
78
|
+
content: [
|
|
79
|
+
{
|
|
80
|
+
type: "text",
|
|
81
|
+
text: JSON.stringify({
|
|
82
|
+
status: "error",
|
|
83
|
+
reason: "DEXE_PRIVATE_KEY is set, so WalletConnect is inactive (hot key takes precedence). Unset the key to use WalletConnect mode.",
|
|
84
|
+
}, null, 2),
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
isError: true,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const { uri, chainId: resolved } = await wc.connect(chainId);
|
|
92
|
+
return {
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: "text",
|
|
96
|
+
text: JSON.stringify({
|
|
97
|
+
status: "pairing",
|
|
98
|
+
uri,
|
|
99
|
+
chainId: resolved,
|
|
100
|
+
next: "Render `uri` as a QR (e.g. https://api.qrserver.com/v1/create-qr-code/?data=<uri>) or paste into the wallet, approve, then poll dexe_wc_status.",
|
|
101
|
+
}, null, 2),
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
return {
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: "text",
|
|
111
|
+
text: JSON.stringify({ status: "error", reason: e instanceof Error ? e.message : String(e) }, null, 2),
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
isError: true,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
server.tool("dexe_wc_disconnect", "Tear down the active WalletConnect session. Safe to call when not connected (returns disconnected:false).", {
|
|
119
|
+
_placeholder: z.boolean().optional().describe("Unused; tool takes no input."),
|
|
120
|
+
}, async () => {
|
|
121
|
+
const disconnected = await wc.disconnect();
|
|
122
|
+
return {
|
|
123
|
+
content: [
|
|
124
|
+
{
|
|
125
|
+
type: "text",
|
|
126
|
+
text: JSON.stringify({ status: "ok", disconnected }, null, 2),
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=walletconnectStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletconnectStatus.js","sourceRoot":"","sources":["../../src/tools/walletconnectStatus.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dexe-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "MCP server for the DeXe Protocol — full DAO operations coverage: deploy DAOs, build every proposal type, IPFS metadata, stake/vote/delegate/execute/claim calldata. Plus dev tooling (build/test/introspect/decode).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
64
|
+
"@walletconnect/universal-provider": "^2.17.0",
|
|
64
65
|
"ethers": "^6.13.0",
|
|
65
66
|
"execa": "^9.5.0",
|
|
66
67
|
"multiformats": "^13.4.2",
|