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.
Files changed (77) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +11 -6
  3. package/dist/cli/init.d.ts +6 -0
  4. package/dist/cli/init.d.ts.map +1 -1
  5. package/dist/cli/init.js +64 -2
  6. package/dist/cli/init.js.map +1 -1
  7. package/dist/config.d.ts +13 -0
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +12 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/diag/checks.d.ts.map +1 -1
  12. package/dist/diag/checks.js +29 -0
  13. package/dist/diag/checks.js.map +1 -1
  14. package/dist/env/schema.d.ts +14 -0
  15. package/dist/env/schema.d.ts.map +1 -1
  16. package/dist/env/schema.js +14 -0
  17. package/dist/env/schema.js.map +1 -1
  18. package/dist/index.js +7 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/preflight.d.ts +133 -0
  21. package/dist/lib/preflight.d.ts.map +1 -0
  22. package/dist/lib/preflight.js +239 -0
  23. package/dist/lib/preflight.js.map +1 -0
  24. package/dist/lib/proposalBuilders.d.ts +50 -0
  25. package/dist/lib/proposalBuilders.d.ts.map +1 -0
  26. package/dist/lib/proposalBuilders.js +311 -0
  27. package/dist/lib/proposalBuilders.js.map +1 -0
  28. package/dist/lib/stateStore.d.ts +63 -0
  29. package/dist/lib/stateStore.d.ts.map +1 -0
  30. package/dist/lib/stateStore.js +128 -0
  31. package/dist/lib/stateStore.js.map +1 -0
  32. package/dist/lib/time.d.ts +16 -0
  33. package/dist/lib/time.d.ts.map +1 -0
  34. package/dist/lib/time.js +24 -0
  35. package/dist/lib/time.js.map +1 -0
  36. package/dist/tools/daoCreate.d.ts +6 -0
  37. package/dist/tools/daoCreate.d.ts.map +1 -0
  38. package/dist/tools/daoCreate.js +155 -0
  39. package/dist/tools/daoCreate.js.map +1 -0
  40. package/dist/tools/daoDeploy.d.ts +394 -0
  41. package/dist/tools/daoDeploy.d.ts.map +1 -1
  42. package/dist/tools/daoDeploy.js +393 -422
  43. package/dist/tools/daoDeploy.js.map +1 -1
  44. package/dist/tools/doctor.d.ts.map +1 -1
  45. package/dist/tools/doctor.js +15 -0
  46. package/dist/tools/doctor.js.map +1 -1
  47. package/dist/tools/flow.d.ts +13 -2
  48. package/dist/tools/flow.d.ts.map +1 -1
  49. package/dist/tools/flow.js +97 -16
  50. package/dist/tools/flow.js.map +1 -1
  51. package/dist/tools/gate.d.ts +28 -0
  52. package/dist/tools/gate.d.ts.map +1 -0
  53. package/dist/tools/gate.js +295 -0
  54. package/dist/tools/gate.js.map +1 -0
  55. package/dist/tools/index.d.ts.map +1 -1
  56. package/dist/tools/index.js +14 -1
  57. package/dist/tools/index.js.map +1 -1
  58. package/dist/tools/operationalContext.d.ts +6 -0
  59. package/dist/tools/operationalContext.d.ts.map +1 -0
  60. package/dist/tools/operationalContext.js +122 -0
  61. package/dist/tools/operationalContext.js.map +1 -0
  62. package/dist/tools/otc.d.ts.map +1 -1
  63. package/dist/tools/otc.js +3 -0
  64. package/dist/tools/otc.js.map +1 -1
  65. package/dist/tools/proposalBuildMore.d.ts +69 -0
  66. package/dist/tools/proposalBuildMore.d.ts.map +1 -1
  67. package/dist/tools/proposalBuildMore.js +3 -2
  68. package/dist/tools/proposalBuildMore.js.map +1 -1
  69. package/dist/tools/subgraph.d.ts.map +1 -1
  70. package/dist/tools/subgraph.js +3 -0
  71. package/dist/tools/subgraph.js.map +1 -1
  72. package/package.json +2 -1
  73. package/skills/dexe-create-dao/SKILL.md +99 -0
  74. package/skills/dexe-create-proposal/SKILL.md +84 -0
  75. package/skills/dexe-otc/SKILL.md +73 -0
  76. package/skills/dexe-setup/SKILL.md +108 -0
  77. 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;AAqC/C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA0CvE"}
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"}
@@ -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);
@@ -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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"}
@@ -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":"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"}
@@ -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;AA6BpD;;;;;;;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,CAypBN"}
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,