dexe-mcp 0.11.0 → 0.14.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/CHANGELOG.md +109 -0
- package/README.md +11 -6
- package/dist/cli/init.d.ts +6 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +64 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -1
- package/dist/diag/checks.d.ts.map +1 -1
- package/dist/diag/checks.js +29 -0
- package/dist/diag/checks.js.map +1 -1
- package/dist/env/schema.d.ts +14 -0
- package/dist/env/schema.d.ts.map +1 -1
- package/dist/env/schema.js +14 -0
- package/dist/env/schema.js.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/preflight.d.ts +133 -0
- package/dist/lib/preflight.d.ts.map +1 -0
- package/dist/lib/preflight.js +239 -0
- package/dist/lib/preflight.js.map +1 -0
- package/dist/lib/proposalBuilders.d.ts +50 -0
- package/dist/lib/proposalBuilders.d.ts.map +1 -0
- package/dist/lib/proposalBuilders.js +311 -0
- package/dist/lib/proposalBuilders.js.map +1 -0
- package/dist/lib/stateStore.d.ts +63 -0
- package/dist/lib/stateStore.d.ts.map +1 -0
- package/dist/lib/stateStore.js +128 -0
- package/dist/lib/stateStore.js.map +1 -0
- package/dist/lib/time.d.ts +16 -0
- package/dist/lib/time.d.ts.map +1 -0
- package/dist/lib/time.js +24 -0
- package/dist/lib/time.js.map +1 -0
- package/dist/tools/daoCreate.d.ts +6 -0
- package/dist/tools/daoCreate.d.ts.map +1 -0
- package/dist/tools/daoCreate.js +155 -0
- package/dist/tools/daoCreate.js.map +1 -0
- package/dist/tools/daoDeploy.d.ts +394 -0
- package/dist/tools/daoDeploy.d.ts.map +1 -1
- package/dist/tools/daoDeploy.js +393 -422
- package/dist/tools/daoDeploy.js.map +1 -1
- package/dist/tools/doctor.d.ts.map +1 -1
- package/dist/tools/doctor.js +15 -0
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/flow.d.ts +13 -2
- package/dist/tools/flow.d.ts.map +1 -1
- package/dist/tools/flow.js +97 -16
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/gate.d.ts +28 -0
- package/dist/tools/gate.d.ts.map +1 -0
- package/dist/tools/gate.js +295 -0
- package/dist/tools/gate.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +14 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/operationalContext.d.ts +6 -0
- package/dist/tools/operationalContext.d.ts.map +1 -0
- package/dist/tools/operationalContext.js +122 -0
- package/dist/tools/operationalContext.js.map +1 -0
- package/dist/tools/otc.d.ts.map +1 -1
- package/dist/tools/otc.js +3 -0
- package/dist/tools/otc.js.map +1 -1
- package/dist/tools/proposalBuildMore.d.ts +69 -0
- package/dist/tools/proposalBuildMore.d.ts.map +1 -1
- package/dist/tools/proposalBuildMore.js +3 -2
- package/dist/tools/proposalBuildMore.js.map +1 -1
- package/dist/tools/subgraph.d.ts.map +1 -1
- package/dist/tools/subgraph.js +3 -0
- package/dist/tools/subgraph.js.map +1 -1
- package/package.json +2 -1
- package/skills/dexe-create-dao/SKILL.md +99 -0
- package/skills/dexe-create-proposal/SKILL.md +84 -0
- package/skills/dexe-otc/SKILL.md +73 -0
- package/skills/dexe-setup/SKILL.md +108 -0
- package/skills/dexe-vote-execute/SKILL.md +64 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Toolset gating (Phase 2 / v0.13.0). Registering all 156 tools unconditionally
|
|
3
|
+
* costs ~50K tokens (~206 KB) of `tools/list` per session. `DEXE_TOOLSETS`
|
|
4
|
+
* selects named profiles so a default session loads a slim subset.
|
|
5
|
+
*
|
|
6
|
+
* `TOOLSETS` maps a profile name → the exact tool names it enables. Sets may
|
|
7
|
+
* overlap; the active allowlist is their union. `full` is special — it bypasses
|
|
8
|
+
* filtering entirely (registers everything). The union of all named sets equals
|
|
9
|
+
* the full 156-tool surface (asserted in tests/tools/gate.test.ts), so every
|
|
10
|
+
* tool is reachable under at least one non-`full` profile.
|
|
11
|
+
*
|
|
12
|
+
* Applied as a one-line wrap in `registerAll()` — the wrapped server proxies
|
|
13
|
+
* `registerTool`/`tool`, dropping any name not in the active allowlist. The 30+
|
|
14
|
+
* register files are unchanged.
|
|
15
|
+
*/
|
|
16
|
+
// ── core: the everyday flow surface (~one session's worth) ──────────────────
|
|
17
|
+
const CORE = [
|
|
18
|
+
"dexe_context",
|
|
19
|
+
"dexe_doctor",
|
|
20
|
+
"dexe_get_config",
|
|
21
|
+
// composite signing flows
|
|
22
|
+
"dexe_proposal_create",
|
|
23
|
+
"dexe_proposal_vote_and_execute",
|
|
24
|
+
"dexe_dao_create",
|
|
25
|
+
// OTC composites
|
|
26
|
+
"dexe_otc_dao_open_sale",
|
|
27
|
+
"dexe_otc_buyer_status",
|
|
28
|
+
"dexe_otc_buyer_buy",
|
|
29
|
+
"dexe_otc_buyer_claim_all",
|
|
30
|
+
"dexe_otc_list_sales_for_dao",
|
|
31
|
+
// broadcast + walletconnect
|
|
32
|
+
"dexe_tx_send",
|
|
33
|
+
"dexe_tx_status",
|
|
34
|
+
"dexe_wc_status",
|
|
35
|
+
"dexe_wc_connect",
|
|
36
|
+
"dexe_wc_disconnect",
|
|
37
|
+
// key vote builders (deposit/withdraw/vote/execute/approve) + power read
|
|
38
|
+
"dexe_vote_build_deposit",
|
|
39
|
+
"dexe_vote_build_withdraw",
|
|
40
|
+
"dexe_vote_build_vote",
|
|
41
|
+
"dexe_vote_build_execute",
|
|
42
|
+
"dexe_vote_build_erc20_approve",
|
|
43
|
+
"dexe_vote_user_power",
|
|
44
|
+
// IPFS upload essentials + avatar
|
|
45
|
+
"dexe_ipfs_upload_file",
|
|
46
|
+
"dexe_ipfs_upload_avatar",
|
|
47
|
+
"dexe_ipfs_upload_proposal_metadata",
|
|
48
|
+
"dexe_dao_generate_avatar",
|
|
49
|
+
// common reads
|
|
50
|
+
"dexe_read_treasury",
|
|
51
|
+
"dexe_read_settings",
|
|
52
|
+
"dexe_proposal_state",
|
|
53
|
+
"dexe_proposal_list",
|
|
54
|
+
"dexe_proposal_catalog",
|
|
55
|
+
"dexe_dao_info",
|
|
56
|
+
"dexe_dao_registry_lookup",
|
|
57
|
+
"dexe_dao_predict_addresses",
|
|
58
|
+
];
|
|
59
|
+
// ── proposals: every builder + the offchain/auth surface + proposal IPFS ────
|
|
60
|
+
const PROPOSALS = [
|
|
61
|
+
// proposalBuild.ts
|
|
62
|
+
"dexe_proposal_catalog",
|
|
63
|
+
"dexe_proposal_build_external",
|
|
64
|
+
"dexe_proposal_build_internal",
|
|
65
|
+
"dexe_proposal_build_custom_abi",
|
|
66
|
+
"dexe_proposal_build_offchain",
|
|
67
|
+
"dexe_proposal_build_token_transfer",
|
|
68
|
+
// proposalBuildComplex.ts
|
|
69
|
+
"dexe_proposal_build_token_distribution",
|
|
70
|
+
"dexe_proposal_build_token_sale_multi",
|
|
71
|
+
"dexe_proposal_build_token_sale",
|
|
72
|
+
"dexe_proposal_build_token_sale_whitelist",
|
|
73
|
+
"dexe_proposal_build_token_sale_recover",
|
|
74
|
+
"dexe_proposal_build_create_staking_tier",
|
|
75
|
+
"dexe_proposal_build_change_math_model",
|
|
76
|
+
"dexe_proposal_build_modify_dao_profile",
|
|
77
|
+
"dexe_proposal_build_blacklist",
|
|
78
|
+
"dexe_proposal_build_reward_multiplier",
|
|
79
|
+
"dexe_proposal_build_apply_to_dao",
|
|
80
|
+
"dexe_proposal_build_new_proposal_type",
|
|
81
|
+
// proposalBuildInternal.ts
|
|
82
|
+
"dexe_proposal_build_change_validator_balances",
|
|
83
|
+
"dexe_proposal_build_change_validator_settings",
|
|
84
|
+
"dexe_proposal_build_monthly_withdraw",
|
|
85
|
+
"dexe_proposal_build_offchain_internal_proposal",
|
|
86
|
+
// proposalBuildMore.ts
|
|
87
|
+
"dexe_proposal_build_change_voting_settings",
|
|
88
|
+
"dexe_proposal_build_manage_validators",
|
|
89
|
+
"dexe_proposal_build_add_expert",
|
|
90
|
+
"dexe_proposal_build_remove_expert",
|
|
91
|
+
"dexe_proposal_build_withdraw_treasury",
|
|
92
|
+
"dexe_proposal_build_delegate_to_expert",
|
|
93
|
+
"dexe_proposal_build_revoke_from_expert",
|
|
94
|
+
// proposalBuildOffchain.ts (+ backend auth)
|
|
95
|
+
"dexe_auth_request_nonce",
|
|
96
|
+
"dexe_auth_login_request",
|
|
97
|
+
"dexe_proposal_build_offchain_single_option",
|
|
98
|
+
"dexe_proposal_build_offchain_multi_option",
|
|
99
|
+
"dexe_proposal_build_offchain_for_against",
|
|
100
|
+
"dexe_proposal_build_offchain_settings",
|
|
101
|
+
"dexe_offchain_build_vote",
|
|
102
|
+
"dexe_offchain_build_cancel_vote",
|
|
103
|
+
// IPFS writes proposals need
|
|
104
|
+
"dexe_ipfs_upload_proposal_metadata",
|
|
105
|
+
"dexe_ipfs_upload_dao_metadata",
|
|
106
|
+
"dexe_ipfs_upload_file",
|
|
107
|
+
"dexe_ipfs_update_dao_metadata",
|
|
108
|
+
];
|
|
109
|
+
// ── read: chain + subgraph reads, inbox/forecast/risk, IPFS reads ───────────
|
|
110
|
+
const READ = [
|
|
111
|
+
// read.ts
|
|
112
|
+
"dexe_read_multicall",
|
|
113
|
+
"dexe_read_treasury",
|
|
114
|
+
"dexe_read_validators",
|
|
115
|
+
"dexe_read_settings",
|
|
116
|
+
"dexe_read_expert_status",
|
|
117
|
+
"dexe_read_token_sale_tiers",
|
|
118
|
+
"dexe_read_token_sale_user",
|
|
119
|
+
"dexe_read_distribution_status",
|
|
120
|
+
"dexe_read_staking_info",
|
|
121
|
+
"dexe_read_privacy_policy_status",
|
|
122
|
+
// subgraph.ts
|
|
123
|
+
"dexe_read_dao_list",
|
|
124
|
+
"dexe_read_dao_members",
|
|
125
|
+
"dexe_read_delegation_map",
|
|
126
|
+
"dexe_read_validator_list",
|
|
127
|
+
"dexe_read_user_activity",
|
|
128
|
+
"dexe_read_dao_experts",
|
|
129
|
+
"dexe_otc_list_sales_for_dao",
|
|
130
|
+
// proposal.ts
|
|
131
|
+
"dexe_proposal_state",
|
|
132
|
+
"dexe_proposal_list",
|
|
133
|
+
"dexe_proposal_voters",
|
|
134
|
+
// inbox / predict / risk
|
|
135
|
+
"dexe_user_inbox",
|
|
136
|
+
"dexe_proposal_forecast",
|
|
137
|
+
"dexe_proposal_risk_assess",
|
|
138
|
+
// dao.ts
|
|
139
|
+
"dexe_dao_info",
|
|
140
|
+
"dexe_dao_registry_lookup",
|
|
141
|
+
"dexe_dao_predict_addresses",
|
|
142
|
+
// IPFS reads
|
|
143
|
+
"dexe_ipfs_fetch",
|
|
144
|
+
"dexe_ipfs_cid_info",
|
|
145
|
+
"dexe_ipfs_cid_for_json",
|
|
146
|
+
];
|
|
147
|
+
// ── vote: every direct vote/stake/delegate/execute/claim builder ────────────
|
|
148
|
+
const VOTE = [
|
|
149
|
+
"dexe_vote_build_erc20_approve",
|
|
150
|
+
"dexe_vote_build_deposit",
|
|
151
|
+
"dexe_vote_build_withdraw",
|
|
152
|
+
"dexe_vote_build_delegate",
|
|
153
|
+
"dexe_vote_build_undelegate",
|
|
154
|
+
"dexe_vote_build_vote",
|
|
155
|
+
"dexe_vote_build_cancel_vote",
|
|
156
|
+
"dexe_vote_build_validator_vote",
|
|
157
|
+
"dexe_vote_build_validator_cancel_vote",
|
|
158
|
+
"dexe_vote_build_move_to_validators",
|
|
159
|
+
"dexe_vote_build_execute",
|
|
160
|
+
"dexe_vote_build_claim_rewards",
|
|
161
|
+
"dexe_vote_build_claim_micropool_rewards",
|
|
162
|
+
"dexe_vote_build_nft_multiplier_lock",
|
|
163
|
+
"dexe_vote_build_nft_multiplier_unlock",
|
|
164
|
+
"dexe_vote_build_token_sale_buy",
|
|
165
|
+
"dexe_vote_build_token_sale_claim",
|
|
166
|
+
"dexe_vote_build_token_sale_vesting_withdraw",
|
|
167
|
+
"dexe_vote_build_distribution_claim",
|
|
168
|
+
"dexe_vote_build_staking_stake",
|
|
169
|
+
"dexe_vote_build_staking_claim",
|
|
170
|
+
"dexe_vote_build_staking_claim_all",
|
|
171
|
+
"dexe_vote_build_staking_reclaim",
|
|
172
|
+
"dexe_vote_build_privacy_policy_sign",
|
|
173
|
+
"dexe_vote_build_privacy_policy_agree",
|
|
174
|
+
"dexe_vote_build_multicall",
|
|
175
|
+
"dexe_vote_user_power",
|
|
176
|
+
"dexe_vote_get_votes",
|
|
177
|
+
];
|
|
178
|
+
// ── governor: external OpenZeppelin/Bravo Governor surface ───────────────────
|
|
179
|
+
const GOVERNOR = [
|
|
180
|
+
"dexe_gov_build_propose",
|
|
181
|
+
"dexe_gov_build_vote_cast",
|
|
182
|
+
"dexe_gov_build_queue",
|
|
183
|
+
"dexe_gov_build_execute",
|
|
184
|
+
"dexe_gov_build_delegate",
|
|
185
|
+
"dexe_gov_get_state",
|
|
186
|
+
"dexe_gov_has_voted",
|
|
187
|
+
"dexe_gov_build_cancel",
|
|
188
|
+
"dexe_gov_decode_calldata",
|
|
189
|
+
"dexe_gov_hash_description",
|
|
190
|
+
"dexe_gov_hash_proposal",
|
|
191
|
+
"dexe_gov_list_governors",
|
|
192
|
+
"dexe_gov_get_proposal",
|
|
193
|
+
"dexe_gov_get_voting_power",
|
|
194
|
+
"dexe_gov_get_quorum",
|
|
195
|
+
"dexe_gov_get_proposal_threshold",
|
|
196
|
+
"dexe_gov_simulate_proposal",
|
|
197
|
+
"dexe_gov_simulate_vote_impact",
|
|
198
|
+
];
|
|
199
|
+
// ── dev: Solidity dev tooling, introspection, decode, sim, merkle, safe, deploy
|
|
200
|
+
const DEV = [
|
|
201
|
+
// build.ts
|
|
202
|
+
"dexe_compile",
|
|
203
|
+
"dexe_test",
|
|
204
|
+
"dexe_coverage",
|
|
205
|
+
"dexe_lint",
|
|
206
|
+
// introspect.ts
|
|
207
|
+
"dexe_list_contracts",
|
|
208
|
+
"dexe_get_abi",
|
|
209
|
+
"dexe_get_methods",
|
|
210
|
+
"dexe_get_selectors",
|
|
211
|
+
"dexe_find_selector",
|
|
212
|
+
"dexe_get_natspec",
|
|
213
|
+
"dexe_get_source",
|
|
214
|
+
// gov.ts (decode + gov-state read + introspection)
|
|
215
|
+
"dexe_decode_calldata",
|
|
216
|
+
"dexe_decode_proposal",
|
|
217
|
+
"dexe_read_gov_state",
|
|
218
|
+
"dexe_list_gov_contract_types",
|
|
219
|
+
// simulate.ts
|
|
220
|
+
"dexe_sim_calldata",
|
|
221
|
+
"dexe_sim_proposal",
|
|
222
|
+
"dexe_sim_buy",
|
|
223
|
+
// merkle.ts
|
|
224
|
+
"dexe_merkle_build",
|
|
225
|
+
"dexe_merkle_proof",
|
|
226
|
+
// safe.ts
|
|
227
|
+
"dexe_safe_info",
|
|
228
|
+
"dexe_safe_propose_tx",
|
|
229
|
+
// low-level deploy (dexe_dao_create is the recommended composite in `core`)
|
|
230
|
+
"dexe_dao_build_deploy",
|
|
231
|
+
];
|
|
232
|
+
export const TOOLSETS = {
|
|
233
|
+
core: new Set(CORE),
|
|
234
|
+
proposals: new Set(PROPOSALS),
|
|
235
|
+
read: new Set(READ),
|
|
236
|
+
vote: new Set(VOTE),
|
|
237
|
+
governor: new Set(GOVERNOR),
|
|
238
|
+
dev: new Set(DEV),
|
|
239
|
+
};
|
|
240
|
+
/** Default profiles when `DEXE_TOOLSETS` is unset (breaking change in v0.13.0). */
|
|
241
|
+
export const DEFAULT_TOOLSETS = ["core", "proposals"];
|
|
242
|
+
/**
|
|
243
|
+
* Resolve the requested profiles into a concrete allowlist. An explicit `full`
|
|
244
|
+
* OR any unknown set name → `full` (register everything) so a typo never
|
|
245
|
+
* silently strips the toolset. Pure — no side effects.
|
|
246
|
+
*/
|
|
247
|
+
export function resolveToolsets(requested) {
|
|
248
|
+
const req = requested.length > 0 ? [...requested] : [...DEFAULT_TOOLSETS];
|
|
249
|
+
const unknown = req.filter((s) => s !== "full" && !(s in TOOLSETS));
|
|
250
|
+
if (req.includes("full") || unknown.length > 0) {
|
|
251
|
+
return { names: null, unknown, full: true, requested: req };
|
|
252
|
+
}
|
|
253
|
+
const names = new Set();
|
|
254
|
+
for (const s of req)
|
|
255
|
+
for (const n of TOOLSETS[s])
|
|
256
|
+
names.add(n);
|
|
257
|
+
return { names, unknown, full: false, requested: req };
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Wrap `server` so tool registrations for names outside the active allowlist
|
|
261
|
+
* are dropped. Returns the original server unchanged when the active profile is
|
|
262
|
+
* `full`. Emits a one-line stderr banner. Call once in `registerAll`.
|
|
263
|
+
*/
|
|
264
|
+
export function applyToolGate(server, config) {
|
|
265
|
+
const resolved = resolveToolsets(config.toolsets ?? [...DEFAULT_TOOLSETS]);
|
|
266
|
+
if (resolved.unknown.length > 0) {
|
|
267
|
+
process.stderr.write(`[dexe-mcp] unknown DEXE_TOOLSETS: [${resolved.unknown.join(", ")}] — loading all tools (full). ` +
|
|
268
|
+
`Valid sets: ${Object.keys(TOOLSETS).join(", ")}, full.\n`);
|
|
269
|
+
}
|
|
270
|
+
if (resolved.full) {
|
|
271
|
+
process.stderr.write(`[dexe-mcp] toolsets: full — all tools loaded.\n`);
|
|
272
|
+
return server;
|
|
273
|
+
}
|
|
274
|
+
const allow = resolved.names;
|
|
275
|
+
process.stderr.write(`[dexe-mcp] toolsets: [${resolved.requested.join(", ")}] → ${allow.size} tools loaded ` +
|
|
276
|
+
`(set DEXE_TOOLSETS=full to load all, or add sets: ${Object.keys(TOOLSETS).join(", ")}).\n`);
|
|
277
|
+
const wrap = (fn) => (name, ...rest) => {
|
|
278
|
+
if (typeof name === "string" && !allow.has(name))
|
|
279
|
+
return undefined;
|
|
280
|
+
return fn(name, ...rest);
|
|
281
|
+
};
|
|
282
|
+
return new Proxy(server, {
|
|
283
|
+
get(target, prop, receiver) {
|
|
284
|
+
if (prop === "registerTool" || prop === "tool") {
|
|
285
|
+
const original = Reflect.get(target, prop, receiver);
|
|
286
|
+
if (typeof original !== "function")
|
|
287
|
+
return original;
|
|
288
|
+
return wrap(original.bind(target));
|
|
289
|
+
}
|
|
290
|
+
const v = Reflect.get(target, prop, receiver);
|
|
291
|
+
return typeof v === "function" ? v.bind(target) : v;
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/tools/gate.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;AAyC/C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAoDvE"}
|
package/dist/tools/index.js
CHANGED
|
@@ -22,6 +22,9 @@ import { registerGetConfigTool } from "./getConfig.js";
|
|
|
22
22
|
import { registerDoctorTool } from "./doctor.js";
|
|
23
23
|
import { registerWalletConnectTools } from "./walletconnectStatus.js";
|
|
24
24
|
import { registerFlowTools } from "./flow.js";
|
|
25
|
+
import { registerDaoCreateTools } from "./daoCreate.js";
|
|
26
|
+
import { registerOperationalContextTools } from "./operationalContext.js";
|
|
27
|
+
import { StateStore } from "../lib/stateStore.js";
|
|
25
28
|
import { registerMerkleTools } from "./merkle.js";
|
|
26
29
|
import { registerOtcTools } from "./otc.js";
|
|
27
30
|
import { registerSafeTools } from "./safe.js";
|
|
@@ -32,12 +35,18 @@ import { registerRiskTools } from "./risk.js";
|
|
|
32
35
|
import { SignerManager } from "../lib/signer.js";
|
|
33
36
|
import { WalletConnectManager } from "../lib/walletconnect.js";
|
|
34
37
|
import { registerGovernorTools } from "../governor/index.js";
|
|
38
|
+
import { applyToolGate } from "./gate.js";
|
|
35
39
|
/**
|
|
36
40
|
* Wire every dexe-mcp tool onto the given server instance. Builds the shared
|
|
37
41
|
* ToolContext (artifacts cache, hardhat runner, selector index) once so all
|
|
38
42
|
* tools share state.
|
|
39
43
|
*/
|
|
40
44
|
export function registerAll(server, config) {
|
|
45
|
+
// Phase 2: gate tool registration by the active DEXE_TOOLSETS profile. The
|
|
46
|
+
// wrapped server drops any tool name not in the active allowlist; `full`
|
|
47
|
+
// returns the server unchanged. Every register* call below sees the gate, so
|
|
48
|
+
// no register file changes. Reassigning the param keeps it a one-line wrap.
|
|
49
|
+
server = applyToolGate(server, config);
|
|
41
50
|
const artifacts = new Artifacts(config);
|
|
42
51
|
const runner = new HardhatRunner(config);
|
|
43
52
|
const selectors = new SelectorIndex(artifacts);
|
|
@@ -64,12 +73,16 @@ export function registerAll(server, config) {
|
|
|
64
73
|
registerRiskTools(server, ctx);
|
|
65
74
|
const signer = new SignerManager(config);
|
|
66
75
|
const wc = new WalletConnectManager(config);
|
|
76
|
+
// Phase 3 — persistent operational state (known DAOs / recent proposals).
|
|
77
|
+
const state = new StateStore(config.statePath);
|
|
67
78
|
registerTxTools(server, config, signer, wc);
|
|
68
79
|
registerGetConfigTool(server, config, signer);
|
|
69
80
|
// Diagnostics — call dexe_doctor first when env-related failures show up.
|
|
70
81
|
registerDoctorTool(server, config);
|
|
71
82
|
registerWalletConnectTools(server, config, signer, wc);
|
|
72
|
-
registerFlowTools(server, ctx, signer);
|
|
83
|
+
registerFlowTools(server, ctx, signer, state);
|
|
84
|
+
registerDaoCreateTools(server, ctx, signer, state);
|
|
85
|
+
registerOperationalContextTools(server, config, signer, state);
|
|
73
86
|
registerOtcTools(server, ctx, signer);
|
|
74
87
|
registerSafeTools(server, ctx, signer);
|
|
75
88
|
registerSimulateTools(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":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
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 { StateStore } from "../lib/stateStore.js";
|
|
5
|
+
export declare function registerOperationalContextTools(server: McpServer, config: DexeConfig, signer: SignerManager, state: StateStore): void;
|
|
6
|
+
//# sourceMappingURL=operationalContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operationalContext.d.ts","sourceRoot":"","sources":["../../src/tools/operationalContext.ts"],"names":[],"mappings":"AAEA,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,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAsEjE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,GAChB,IAAI,CAqEN"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Contract } from "ethers";
|
|
3
|
+
import { RpcProvider } from "../rpc.js";
|
|
4
|
+
import { maskUrl } from "../lib/redact.js";
|
|
5
|
+
/**
|
|
6
|
+
* `dexe_context` (Phase 3 / v0.14.0) — the "who/where am I" call. One read that
|
|
7
|
+
* orients an agent at session start: signer + mode, active/configured chains,
|
|
8
|
+
* env readiness, and the persisted operational state (DAOs deployed and
|
|
9
|
+
* proposals broadcast in prior sessions) so work doesn't start from zero.
|
|
10
|
+
*
|
|
11
|
+
* `context.ts` is taken by the ToolContext type, hence `operationalContext.ts`.
|
|
12
|
+
*/
|
|
13
|
+
const CHAIN_NAMES = {
|
|
14
|
+
1: "Ethereum mainnet",
|
|
15
|
+
56: "BSC mainnet",
|
|
16
|
+
97: "BSC testnet",
|
|
17
|
+
137: "Polygon mainnet",
|
|
18
|
+
8453: "Base mainnet",
|
|
19
|
+
42161: "Arbitrum One",
|
|
20
|
+
};
|
|
21
|
+
const GOV_HELPERS_ABI = [
|
|
22
|
+
"function getHelperContracts() view returns (address settings, address userKeeper, address validators, address poolRegistry, address votePower)",
|
|
23
|
+
];
|
|
24
|
+
const USER_KEEPER_ABI = [
|
|
25
|
+
"function tokenBalance(address voter, uint8 voteType) view returns (uint256 balance, uint256 ownedBalance)",
|
|
26
|
+
];
|
|
27
|
+
function signerMode(config, signer) {
|
|
28
|
+
const safeServiceUrl = process.env.DEXE_SAFE_TX_SERVICE_URL?.trim() || undefined;
|
|
29
|
+
return signer.hasSigner()
|
|
30
|
+
? safeServiceUrl
|
|
31
|
+
? "safe"
|
|
32
|
+
: "eoa"
|
|
33
|
+
: config.walletConnectProjectId
|
|
34
|
+
? "walletconnect"
|
|
35
|
+
: "readonly";
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Best-effort deposited voting power for a DAO: getHelperContracts → userKeeper
|
|
39
|
+
* → tokenBalance(user,0).balance − ownedBalance. Returns null on any failure
|
|
40
|
+
* (no RPC, unregistered pool, revert) — this is a convenience readout, never a
|
|
41
|
+
* hard dependency.
|
|
42
|
+
*/
|
|
43
|
+
async function depositedPowerFor(rpc, dao, user) {
|
|
44
|
+
try {
|
|
45
|
+
const pr = rpc.tryProvider(dao.chainId);
|
|
46
|
+
if ("error" in pr)
|
|
47
|
+
return null;
|
|
48
|
+
const provider = pr.ok;
|
|
49
|
+
const keeper = dao.userKeeper ??
|
|
50
|
+
(await new Contract(dao.govPool, GOV_HELPERS_ABI, provider)
|
|
51
|
+
.getFunction("getHelperContracts")
|
|
52
|
+
.staticCall())[1];
|
|
53
|
+
if (!keeper)
|
|
54
|
+
return null;
|
|
55
|
+
const [balance, owned] = (await new Contract(keeper, USER_KEEPER_ABI, provider)
|
|
56
|
+
.getFunction("tokenBalance")
|
|
57
|
+
.staticCall(user, 0));
|
|
58
|
+
return (balance - owned).toString();
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export function registerOperationalContextTools(server, config, signer, state) {
|
|
65
|
+
const rpc = new RpcProvider(config);
|
|
66
|
+
server.tool("dexe_context", "Operational context for the current session — CALL THIS FIRST. Returns the signer address + mode, " +
|
|
67
|
+
"the active/configured chains, env-readiness (RPC/IPFS/subgraph/signer), and the persisted state: DAOs you " +
|
|
68
|
+
"deployed and proposals you broadcast in prior sessions (via dexe_dao_create / dexe_proposal_create), plus your " +
|
|
69
|
+
"deposited voting power in the most recent DAO. Read-only; never writes.", {
|
|
70
|
+
includeDepositedPower: z
|
|
71
|
+
.boolean()
|
|
72
|
+
.default(true)
|
|
73
|
+
.describe("Read deposited voting power for the most recent DAO (one extra RPC call). Set false to skip."),
|
|
74
|
+
}, async ({ includeDepositedPower = true }) => {
|
|
75
|
+
const st = state.getState();
|
|
76
|
+
const chains = [...config.chains.values()]
|
|
77
|
+
.sort((a, b) => a.chainId - b.chainId)
|
|
78
|
+
.map((c) => ({
|
|
79
|
+
chainId: c.chainId,
|
|
80
|
+
name: CHAIN_NAMES[c.chainId] ?? `chain ${c.chainId}`,
|
|
81
|
+
rpcUrl: maskUrl(c.rpcUrl),
|
|
82
|
+
isDefault: c.chainId === config.defaultChainId,
|
|
83
|
+
}));
|
|
84
|
+
const mode = signerMode(config, signer);
|
|
85
|
+
const address = signer.hasSigner() ? signer.getAddress() : null;
|
|
86
|
+
// Deposited power for the last DAO (best-effort, opt-out).
|
|
87
|
+
let lastDaoPower = null;
|
|
88
|
+
const last = st.knownDaos[0];
|
|
89
|
+
if (includeDepositedPower && last && address) {
|
|
90
|
+
lastDaoPower = {
|
|
91
|
+
govPool: last.govPool,
|
|
92
|
+
chainId: last.chainId,
|
|
93
|
+
depositedPower: await depositedPowerFor(rpc, last, address),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const result = {
|
|
97
|
+
signer: { mode, address },
|
|
98
|
+
chain: {
|
|
99
|
+
defaultChainId: config.defaultChainId,
|
|
100
|
+
defaultChainName: CHAIN_NAMES[config.defaultChainId] ?? `chain ${config.defaultChainId}`,
|
|
101
|
+
configured: chains,
|
|
102
|
+
lastUsedChainId: st.lastChainId ?? null,
|
|
103
|
+
},
|
|
104
|
+
env: {
|
|
105
|
+
rpcConfigured: config.chains.size > 0,
|
|
106
|
+
ipfsUploads: !!config.pinataJwt,
|
|
107
|
+
subgraphReads: !!config.subgraphPoolsUrl,
|
|
108
|
+
backendOffchain: !!process.env.DEXE_BACKEND_API_URL?.trim(),
|
|
109
|
+
toolsets: config.toolsets,
|
|
110
|
+
},
|
|
111
|
+
knownDaos: st.knownDaos,
|
|
112
|
+
recentProposals: st.recentProposals,
|
|
113
|
+
walletLabels: st.walletLabels,
|
|
114
|
+
lastDaoPower,
|
|
115
|
+
hint: st.knownDaos.length === 0
|
|
116
|
+
? "No DAOs recorded yet. Deploy one with dexe_dao_create (testnet chain 97) or pass a govPool explicitly."
|
|
117
|
+
: `Most recent DAO: ${st.knownDaos[0].name} (${st.knownDaos[0].govPool}) on chain ${st.knownDaos[0].chainId}.`,
|
|
118
|
+
};
|
|
119
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=operationalContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operationalContext.js","sourceRoot":"","sources":["../../src/tools/operationalContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAKlC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;;;;;;GAOG;AAEH,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,MAAM,eAAe,GAAG;IACtB,gJAAgJ;CACjJ,CAAC;AACF,MAAM,eAAe,GAAG;IACtB,2GAA2G;CAC5G,CAAC;AAEF,SAAS,UAAU,CAAC,MAAkB,EAAE,MAAqB;IAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACjF,OAAO,MAAM,CAAC,SAAS,EAAE;QACvB,CAAC,CAAC,cAAc;YACd,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,KAAK;QACT,CAAC,CAAC,MAAM,CAAC,sBAAsB;YAC7B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,UAAU,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,iBAAiB,CAC9B,GAAgB,EAChB,GAAa,EACb,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GACV,GAAG,CAAC,UAAU;YACb,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC;iBACzD,WAAW,CAAC,oBAAoB,CAAC;iBACjC,UAAU,EAAE,CAAc,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC;aAC5E,WAAW,CAAC,cAAc,CAAC;aAC3B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAqB,CAAC;QAC5C,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAiB,EACjB,MAAkB,EAClB,MAAqB,EACrB,KAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,oGAAoG;QAClG,4GAA4G;QAC5G,iHAAiH;QACjH,yEAAyE,EAC3E;QACE,qBAAqB,EAAE,CAAC;aACrB,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,8FAA8F,CAAC;KAC5G,EACD,KAAK,EAAE,EAAE,qBAAqB,GAAG,IAAI,EAAE,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAE5B,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,EAAE,CAAC,CAAC;YACX,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,OAAO,EAAE;YACpD,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACzB,SAAS,EAAE,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,cAAc;SAC/C,CAAC,CAAC,CAAC;QAEN,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,2DAA2D;QAC3D,IAAI,YAAY,GAA+E,IAAI,CAAC;QACpG,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,qBAAqB,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YAC7C,YAAY,GAAG;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,cAAc,EAAE,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YACzB,KAAK,EAAE;gBACL,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,cAAc,EAAE;gBACxF,UAAU,EAAE,MAAM;gBAClB,eAAe,EAAE,EAAE,CAAC,WAAW,IAAI,IAAI;aACxC;YACD,GAAG,EAAE;gBACH,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;gBACrC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS;gBAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB;gBACxC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE;gBAC3D,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B;YACD,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,eAAe,EAAE,EAAE,CAAC,eAAe;YACnC,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,YAAY;YACZ,IAAI,EACF,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBACvB,CAAC,CAAC,wGAAwG;gBAC1G,CAAC,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,OAAO,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,OAAO,GAAG;SACtH,CAAC;QAEF,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;IACzF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/otc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otc.d.ts","sourceRoot":"","sources":["../../src/tools/otc.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"otc.d.ts","sourceRoot":"","sources":["../../src/tools/otc.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA8BpD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAKvB,CAAC;AAEN,eAAO,MAAM,uBAAuB,8xBAAuG,CAAC;AAoC5I;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,+CAA+C,CAAC;AAE7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,SAAS,CAQX;AA8DD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CA2pBN"}
|
package/dist/tools/otc.js
CHANGED
|
@@ -9,6 +9,7 @@ import { PinataClient } from "../lib/ipfs.js";
|
|
|
9
9
|
import { buildAddressMerkleTree, computeLeafHash, verifyProof, } from "../lib/merkleTree.js";
|
|
10
10
|
import { simulateCalldata } from "./simulate.js";
|
|
11
11
|
import { parseUintString } from "../lib/amount.js";
|
|
12
|
+
import { unixToUtc } from "../lib/time.js";
|
|
12
13
|
function errorResult(message) {
|
|
13
14
|
return { content: [{ type: "text", text: message }], isError: true };
|
|
14
15
|
}
|
|
@@ -386,6 +387,8 @@ export function registerOtcTools(server, ctx, signer) {
|
|
|
386
387
|
saleTokenAddress: tier.saleTokenAddress,
|
|
387
388
|
saleStartTime: tier.saleStartTime,
|
|
388
389
|
saleEndTime: tier.saleEndTime,
|
|
390
|
+
saleStartTimeUTC: unixToUtc(tier.saleStartTime),
|
|
391
|
+
saleEndTimeUTC: unixToUtc(tier.saleEndTime),
|
|
389
392
|
totalTokenProvided: tier.totalTokenProvided,
|
|
390
393
|
totalSold: tv.tierInfo.totalSold,
|
|
391
394
|
isOff: tv.tierInfo.isOff,
|