dexe-mcp 0.1.5 → 0.3.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 (111) hide show
  1. package/.mcp.example.json +12 -2
  2. package/CHANGELOG.md +84 -0
  3. package/FUTURE.md +26 -5
  4. package/README.md +105 -197
  5. package/dist/config.d.ts +12 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +34 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/index.js +16 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/addresses.d.ts +57 -0
  12. package/dist/lib/addresses.d.ts.map +1 -0
  13. package/dist/lib/addresses.js +83 -0
  14. package/dist/lib/addresses.js.map +1 -0
  15. package/dist/lib/calldata.d.ts +32 -0
  16. package/dist/lib/calldata.d.ts.map +1 -0
  17. package/dist/lib/calldata.js +28 -0
  18. package/dist/lib/calldata.js.map +1 -0
  19. package/dist/lib/govEnums.d.ts +12 -0
  20. package/dist/lib/govEnums.d.ts.map +1 -0
  21. package/dist/lib/govEnums.js +35 -0
  22. package/dist/lib/govEnums.js.map +1 -0
  23. package/dist/lib/ipfs.d.ts +60 -0
  24. package/dist/lib/ipfs.d.ts.map +1 -0
  25. package/dist/lib/ipfs.js +168 -0
  26. package/dist/lib/ipfs.js.map +1 -0
  27. package/dist/lib/markdownToSlate.d.ts +39 -0
  28. package/dist/lib/markdownToSlate.d.ts.map +1 -0
  29. package/dist/lib/markdownToSlate.js +203 -0
  30. package/dist/lib/markdownToSlate.js.map +1 -0
  31. package/dist/lib/multicall.d.ts +33 -0
  32. package/dist/lib/multicall.d.ts.map +1 -0
  33. package/dist/lib/multicall.js +46 -0
  34. package/dist/lib/multicall.js.map +1 -0
  35. package/dist/lib/proposalCatalog.d.ts +45 -0
  36. package/dist/lib/proposalCatalog.d.ts.map +1 -0
  37. package/dist/lib/proposalCatalog.js +416 -0
  38. package/dist/lib/proposalCatalog.js.map +1 -0
  39. package/dist/lib/signer.d.ts +12 -0
  40. package/dist/lib/signer.d.ts.map +1 -0
  41. package/dist/lib/signer.js +31 -0
  42. package/dist/lib/signer.js.map +1 -0
  43. package/dist/lib/subgraph.d.ts +15 -0
  44. package/dist/lib/subgraph.d.ts.map +1 -0
  45. package/dist/lib/subgraph.js +42 -0
  46. package/dist/lib/subgraph.js.map +1 -0
  47. package/dist/tools/dao.d.ts +4 -0
  48. package/dist/tools/dao.d.ts.map +1 -0
  49. package/dist/tools/dao.js +242 -0
  50. package/dist/tools/dao.js.map +1 -0
  51. package/dist/tools/daoDeploy.d.ts +4 -0
  52. package/dist/tools/daoDeploy.d.ts.map +1 -0
  53. package/dist/tools/daoDeploy.js +573 -0
  54. package/dist/tools/daoDeploy.js.map +1 -0
  55. package/dist/tools/flow.d.ts +5 -0
  56. package/dist/tools/flow.d.ts.map +1 -0
  57. package/dist/tools/flow.js +451 -0
  58. package/dist/tools/flow.js.map +1 -0
  59. package/dist/tools/index.d.ts.map +1 -1
  60. package/dist/tools/index.js +32 -0
  61. package/dist/tools/index.js.map +1 -1
  62. package/dist/tools/ipfs.d.ts +6 -0
  63. package/dist/tools/ipfs.d.ts.map +1 -0
  64. package/dist/tools/ipfs.js +376 -0
  65. package/dist/tools/ipfs.js.map +1 -0
  66. package/dist/tools/proposal.d.ts +4 -0
  67. package/dist/tools/proposal.d.ts.map +1 -0
  68. package/dist/tools/proposal.js +217 -0
  69. package/dist/tools/proposal.js.map +1 -0
  70. package/dist/tools/proposalBuild.d.ts +4 -0
  71. package/dist/tools/proposalBuild.d.ts.map +1 -0
  72. package/dist/tools/proposalBuild.js +372 -0
  73. package/dist/tools/proposalBuild.js.map +1 -0
  74. package/dist/tools/proposalBuildComplex.d.ts +4 -0
  75. package/dist/tools/proposalBuildComplex.d.ts.map +1 -0
  76. package/dist/tools/proposalBuildComplex.js +766 -0
  77. package/dist/tools/proposalBuildComplex.js.map +1 -0
  78. package/dist/tools/proposalBuildInternal.d.ts +4 -0
  79. package/dist/tools/proposalBuildInternal.d.ts.map +1 -0
  80. package/dist/tools/proposalBuildInternal.js +224 -0
  81. package/dist/tools/proposalBuildInternal.js.map +1 -0
  82. package/dist/tools/proposalBuildMore.d.ts +4 -0
  83. package/dist/tools/proposalBuildMore.d.ts.map +1 -0
  84. package/dist/tools/proposalBuildMore.js +457 -0
  85. package/dist/tools/proposalBuildMore.js.map +1 -0
  86. package/dist/tools/proposalBuildOffchain.d.ts +4 -0
  87. package/dist/tools/proposalBuildOffchain.d.ts.map +1 -0
  88. package/dist/tools/proposalBuildOffchain.js +389 -0
  89. package/dist/tools/proposalBuildOffchain.js.map +1 -0
  90. package/dist/tools/read.d.ts +4 -0
  91. package/dist/tools/read.d.ts.map +1 -0
  92. package/dist/tools/read.js +580 -0
  93. package/dist/tools/read.js.map +1 -0
  94. package/dist/tools/subgraph.d.ts +4 -0
  95. package/dist/tools/subgraph.d.ts.map +1 -0
  96. package/dist/tools/subgraph.js +404 -0
  97. package/dist/tools/subgraph.js.map +1 -0
  98. package/dist/tools/txSend.d.ts +5 -0
  99. package/dist/tools/txSend.d.ts.map +1 -0
  100. package/dist/tools/txSend.js +87 -0
  101. package/dist/tools/txSend.js.map +1 -0
  102. package/dist/tools/vote.d.ts +4 -0
  103. package/dist/tools/vote.d.ts.map +1 -0
  104. package/dist/tools/vote.js +196 -0
  105. package/dist/tools/vote.js.map +1 -0
  106. package/dist/tools/voteBuild.d.ts +4 -0
  107. package/dist/tools/voteBuild.d.ts.map +1 -0
  108. package/dist/tools/voteBuild.js +983 -0
  109. package/dist/tools/voteBuild.js.map +1 -0
  110. package/package.json +18 -5
  111. package/PLAN.md +0 -132
@@ -0,0 +1,416 @@
1
+ export const PROPOSAL_CATALOG = [
2
+ // ---------- External (on-chain, call GovPool.createProposal, needs IPFS) ----------
3
+ {
4
+ id: "external.modify_dao_profile",
5
+ category: "external",
6
+ name: "Modify DAO Profile",
7
+ formPath: "src/forms/createProposal/external/ModifyDaoProfileForm",
8
+ effect: "Update DAO descriptionURL pointer",
9
+ target: "GovPool.editDescriptionURL(string)",
10
+ needsIpfs: true,
11
+ gating: [],
12
+ mcpTool: "dexe_proposal_build_modify_dao_profile",
13
+ implemented: true,
14
+ },
15
+ {
16
+ id: "external.change_voting_settings",
17
+ category: "external",
18
+ name: "Change Voting Settings",
19
+ formPath: "src/forms/createProposal/external/ChangeVotingSettingsForm",
20
+ effect: "Add or edit ProposalSettings on GovSettings (quorum, duration, etc.)",
21
+ target: "GovSettings.addSettings / editSettings (encoded as actionsOnFor)",
22
+ needsIpfs: true,
23
+ gating: [],
24
+ mcpTool: "dexe_proposal_build_change_voting_settings",
25
+ implemented: true,
26
+ },
27
+ {
28
+ id: "external.token_distribution",
29
+ category: "external",
30
+ name: "Token Distribution",
31
+ formPath: "src/forms/createProposal/external/TokenDistributionForm",
32
+ effect: "Distribute tokens via DistributionProposal.execute(proposalId, token, amount)",
33
+ target: "DistributionProposal.execute(uint256,address,uint256)",
34
+ needsIpfs: true,
35
+ gating: [],
36
+ mcpTool: "dexe_proposal_build_token_distribution",
37
+ implemented: true,
38
+ },
39
+ {
40
+ id: "external.token_sale",
41
+ category: "external",
42
+ name: "Token Sale (create tier)",
43
+ formPath: "src/forms/createProposal/external/TokenSaleForm",
44
+ effect: "Launch a new token sale tier",
45
+ target: "TokenSaleProposal.createTiers(ITier[])",
46
+ needsIpfs: true,
47
+ gating: [],
48
+ mcpTool: "dexe_proposal_build_token_sale",
49
+ implemented: true,
50
+ },
51
+ {
52
+ id: "external.token_transfer",
53
+ category: "external",
54
+ name: "Token Transfer (treasury → address)",
55
+ formPath: "src/forms/createProposal/external/TokenTransferForm",
56
+ effect: "Transfer ERC20 from DAO treasury to a single recipient",
57
+ target: "ERC20.transfer (as actionsOnFor on the token contract)",
58
+ needsIpfs: true,
59
+ gating: [],
60
+ mcpTool: "dexe_proposal_build_token_transfer",
61
+ implemented: true,
62
+ },
63
+ {
64
+ id: "external.token_sale_recover",
65
+ category: "external",
66
+ name: "Recover Token Sale",
67
+ formPath: "src/forms/createProposal/external/TokenSaleRecoverForm",
68
+ effect: "Recover unsold tokens from tiers",
69
+ target: "TokenSaleProposal.recover(uint256[] tierIds)",
70
+ needsIpfs: true,
71
+ gating: [],
72
+ mcpTool: "dexe_proposal_build_token_sale_recover",
73
+ implemented: true,
74
+ },
75
+ {
76
+ id: "external.withdraw_treasury",
77
+ category: "external",
78
+ name: "Withdraw from Treasury",
79
+ formPath: "src/forms/createProposal/external/WithdrawForm",
80
+ effect: "Withdraw native or ERC20 from DAO treasury",
81
+ target: "GovPool.withdraw(receiver, amount, nftIds) — treasury lives on GovPool itself",
82
+ needsIpfs: true,
83
+ gating: [],
84
+ mcpTool: "dexe_proposal_build_withdraw_treasury",
85
+ implemented: true,
86
+ },
87
+ {
88
+ id: "external.manage_validators",
89
+ category: "external",
90
+ name: "Manage Validators (add/remove/balance)",
91
+ formPath: "src/forms/createProposal/external/ManageValidatorsForm",
92
+ effect: "Direct call to GovValidators.changeBalances(balances, users). Set balance=0 to remove.",
93
+ target: "GovValidators.changeBalances(uint256[], address[])",
94
+ needsIpfs: true,
95
+ gating: [],
96
+ mcpTool: "dexe_proposal_build_manage_validators",
97
+ implemented: true,
98
+ },
99
+ {
100
+ id: "external.delegate_tokens_to_expert",
101
+ category: "external",
102
+ name: "Delegate Tokens to Expert",
103
+ formPath: "src/forms/createProposal/external/DelegateOrRevokeTokensForm",
104
+ effect: "Delegate DAO treasury tokens/NFTs to an expert address",
105
+ target: "GovPool.delegateTreasury(delegatee, amount, nftIds)",
106
+ needsIpfs: true,
107
+ gating: ["expert"],
108
+ mcpTool: "dexe_proposal_build_delegate_to_expert",
109
+ implemented: true,
110
+ },
111
+ {
112
+ id: "external.revoke_tokens_from_expert",
113
+ category: "external",
114
+ name: "Revoke Tokens from Expert",
115
+ formPath: "src/forms/createProposal/external/DelegateOrRevokeTokensForm",
116
+ effect: "Undelegate treasury tokens/NFTs from an expert",
117
+ target: "GovPool.undelegateTreasury(delegatee, amount, nftIds)",
118
+ needsIpfs: true,
119
+ gating: ["expert"],
120
+ mcpTool: "dexe_proposal_build_revoke_from_expert",
121
+ implemented: true,
122
+ },
123
+ {
124
+ id: "external.validators_allocation",
125
+ category: "external",
126
+ name: "Validators Allocation",
127
+ formPath: "src/forms/createProposal/external/ValidatorsAllocationForm",
128
+ effect: "Reallocate validator stake weights (use manage_validators wrapper)",
129
+ target: "GovValidators.changeBalances",
130
+ needsIpfs: true,
131
+ gating: ["validator"],
132
+ mcpTool: "dexe_proposal_build_manage_validators",
133
+ implemented: true,
134
+ },
135
+ {
136
+ id: "external.add_local_expert",
137
+ category: "external",
138
+ name: "Add Local Expert",
139
+ formPath: "src/forms/createProposal/external/ExpertApplicationForm",
140
+ effect: "Grant local-expert role to an address (mint ExpertNft)",
141
+ target: "ExpertNft.mint(address, uri) — scope='local'",
142
+ needsIpfs: true,
143
+ gating: ["expert"],
144
+ mcpTool: "dexe_proposal_build_add_expert",
145
+ implemented: true,
146
+ },
147
+ {
148
+ id: "external.add_global_expert",
149
+ category: "external",
150
+ name: "Add Global Expert",
151
+ formPath: "src/forms/createProposal/external/ExpertApplicationForm",
152
+ effect: "Grant global-expert role (DeXe-wide)",
153
+ target: "DeXeExpertNft.mint(address, uri) — scope='global'",
154
+ needsIpfs: true,
155
+ gating: ["expert"],
156
+ mcpTool: "dexe_proposal_build_add_expert",
157
+ implemented: true,
158
+ },
159
+ {
160
+ id: "external.remove_local_expert",
161
+ category: "external",
162
+ name: "Remove Local Expert",
163
+ formPath: "src/forms/createProposal/external/ExpertRemovalForm",
164
+ effect: "Revoke local-expert role (burn ExpertNft)",
165
+ target: "ExpertNft.burn(address) — scope='local'",
166
+ needsIpfs: true,
167
+ gating: ["expert"],
168
+ mcpTool: "dexe_proposal_build_remove_expert",
169
+ implemented: true,
170
+ },
171
+ {
172
+ id: "external.remove_global_expert",
173
+ category: "external",
174
+ name: "Remove Global Expert",
175
+ formPath: "src/forms/createProposal/external/ExpertRemovalForm",
176
+ effect: "Revoke global-expert role (burn DeXeExpertNft)",
177
+ target: "DeXeExpertNft.burn(address) — scope='global'",
178
+ needsIpfs: true,
179
+ gating: ["expert"],
180
+ mcpTool: "dexe_proposal_build_remove_expert",
181
+ implemented: true,
182
+ },
183
+ {
184
+ id: "external.reward_multiplier",
185
+ category: "external",
186
+ name: "Reward Multiplier (set address / set URI / mint)",
187
+ formPath: "src/forms/createProposal/external/RewardMultiplierForm",
188
+ effect: "Manage reward-multiplier NFT (3 modes)",
189
+ target: "GovPool.setNftMultiplierAddress / ERC721Multiplier.setURI / .mint",
190
+ needsIpfs: true,
191
+ gating: ["expert"],
192
+ mcpTool: "dexe_proposal_build_reward_multiplier",
193
+ implemented: true,
194
+ },
195
+ {
196
+ id: "external.apply_to_dao",
197
+ category: "external",
198
+ name: "Apply to DAO",
199
+ formPath: "src/forms/createProposal/external/ApplyToDaoForm",
200
+ effect: "Grant tokens from DAO treasury (transfer + optional mint for shortfall)",
201
+ target: "ERC20.transfer [+ ERC20Gov.mint if needed]",
202
+ needsIpfs: true,
203
+ gating: [],
204
+ mcpTool: "dexe_proposal_build_apply_to_dao",
205
+ implemented: true,
206
+ },
207
+ {
208
+ id: "external.blacklist",
209
+ category: "external",
210
+ name: "Blacklist Management",
211
+ formPath: "src/forms/createProposal/external/BlacklistManagementForm",
212
+ effect: "Add/remove addresses from ERC20Gov blacklist (1-2 actions)",
213
+ target: "ERC20Gov.blacklist(address[], bool)",
214
+ needsIpfs: true,
215
+ gating: [],
216
+ mcpTool: "dexe_proposal_build_blacklist",
217
+ implemented: true,
218
+ },
219
+ {
220
+ id: "external.custom_abi",
221
+ category: "external",
222
+ name: "Arbitrary Contract Call (ABI)",
223
+ formPath: "src/forms/createProposal/external/AbiForm",
224
+ effect: "User supplies target + method + args; we ABI-encode",
225
+ target: "Any contract (user-specified)",
226
+ needsIpfs: true,
227
+ gating: [],
228
+ mcpTool: "dexe_proposal_build_custom_abi",
229
+ implemented: true,
230
+ },
231
+ {
232
+ id: "external.manual_calldata",
233
+ category: "external",
234
+ name: "Manual Calldata Entry",
235
+ formPath: "src/forms/createProposal/external/ManualForm",
236
+ effect: "Raw {target, callData, value}[] — no encoding",
237
+ target: "Any",
238
+ needsIpfs: true,
239
+ gating: [],
240
+ mcpTool: "dexe_proposal_build_external",
241
+ implemented: true,
242
+ },
243
+ {
244
+ id: "external.new_proposal_type",
245
+ category: "external",
246
+ name: "Create Custom Proposal Type (settings template)",
247
+ formPath: "src/forms/createProposal/external/NewProposalTypeForm",
248
+ effect: "Register new ProposalSettings + executor binding (2 actions)",
249
+ target: "GovSettings.addSettings + GovSettings.changeExecutors",
250
+ needsIpfs: true,
251
+ gating: [],
252
+ mcpTool: "dexe_proposal_build_new_proposal_type",
253
+ implemented: true,
254
+ },
255
+ {
256
+ id: "external.change_math_model",
257
+ category: "external",
258
+ name: "Change Proposal Math Model",
259
+ formPath: "src/forms/createProposal/external/ChangeMathModelForm",
260
+ effect: "Swap voting-power math contract (linear / polynomial / custom)",
261
+ target: "GovPool.changeVotePower(address)",
262
+ needsIpfs: true,
263
+ gating: [],
264
+ mcpTool: "dexe_proposal_build_change_math_model",
265
+ implemented: true,
266
+ },
267
+ {
268
+ id: "external.enable_staking",
269
+ category: "external",
270
+ name: "Enable Staking",
271
+ formPath: "src/forms/createProposal/external/EnableStakingForm",
272
+ effect: "Frontend routes this via `new_proposal_type` — register settings + bind StakingProposal executor",
273
+ target: "GovSettings.addSettings + changeExecutors (via new_proposal_type)",
274
+ needsIpfs: true,
275
+ gating: [],
276
+ mcpTool: "dexe_proposal_build_new_proposal_type",
277
+ implemented: true,
278
+ },
279
+ {
280
+ id: "external.create_staking_tier",
281
+ category: "external",
282
+ name: "Create Staking",
283
+ formPath: "src/forms/createProposal/external/CreateStakingTierForm",
284
+ effect: "Create a staking pool (reward token + duration)",
285
+ target: "StakingProposal.createStaking(address,uint256,uint256,uint256,string)",
286
+ needsIpfs: true,
287
+ gating: [],
288
+ mcpTool: "dexe_proposal_build_create_staking_tier",
289
+ implemented: true,
290
+ },
291
+ // ---------- Internal (GovValidators.createInternalProposal) ----------
292
+ {
293
+ id: "internal.change_validator_balances",
294
+ category: "internal",
295
+ name: "Change Validator Balances",
296
+ formPath: "src/forms/createProposal/internal/ManageValidatorsForm",
297
+ effect: "Directly change validator stake amounts (type 0). Set balance=0 to remove.",
298
+ target: "GovValidators.createInternalProposal(type=0, url, data) — data=changeBalances(balances,users)",
299
+ needsIpfs: true,
300
+ gating: ["validator"],
301
+ mcpTool: "dexe_proposal_build_change_validator_balances",
302
+ implemented: true,
303
+ },
304
+ {
305
+ id: "internal.change_validator_settings",
306
+ category: "internal",
307
+ name: "Change Validator Settings",
308
+ formPath: "src/forms/createProposal/internal/ChangeVotingSettingsForm",
309
+ effect: "Change validator voting duration / executionDelay / quorum (type 1)",
310
+ target: "GovValidators.createInternalProposal(type=1, url, data) — data=changeSettings(duration,executionDelay,quorum)",
311
+ needsIpfs: true,
312
+ gating: ["validator"],
313
+ mcpTool: "dexe_proposal_build_change_validator_settings",
314
+ implemented: true,
315
+ },
316
+ {
317
+ id: "internal.monthly_withdraw",
318
+ category: "internal",
319
+ name: "Monthly Validator Withdraw",
320
+ formPath: "src/forms/createProposal/internal/MonthlyWithdrawForm",
321
+ effect: "Pay validators from treasury (multi-token supported) (type 2)",
322
+ target: "GovValidators.createInternalProposal(type=2, url, data) — data=monthlyWithdraw(tokens[],amounts[],destination)",
323
+ needsIpfs: true,
324
+ gating: ["validator"],
325
+ mcpTool: "dexe_proposal_build_monthly_withdraw",
326
+ implemented: true,
327
+ },
328
+ {
329
+ id: "internal.offchain_proposal",
330
+ category: "internal",
331
+ name: "Off-chain Internal Proposal (validators vote on off-chain result)",
332
+ formPath: "src/forms/createProposal/internal/EmptyTxForm",
333
+ effect: "Validators vote to attest an off-chain result (type 3, empty data bytes)",
334
+ target: "GovValidators.createInternalProposal(type=3, url, 0x)",
335
+ needsIpfs: true,
336
+ gating: ["validator"],
337
+ mcpTool: "dexe_proposal_build_offchain_internal_proposal",
338
+ implemented: true,
339
+ },
340
+ // ---------- Off-chain (DeXe backend API, no on-chain tx) ----------
341
+ {
342
+ id: "offchain.single_option",
343
+ category: "offchain",
344
+ name: "Single-option Off-chain Voting",
345
+ formPath: "src/forms/createProposal/offchain/TypedProposaForm",
346
+ effect: "Pick one of N options, tallied off-chain",
347
+ target: "POST /integrations/voting/proposals (voting_type=one_of)",
348
+ needsIpfs: false,
349
+ gating: [],
350
+ mcpTool: "dexe_proposal_build_offchain_single_option",
351
+ implemented: true,
352
+ },
353
+ {
354
+ id: "offchain.multi_option",
355
+ category: "offchain",
356
+ name: "Multi-option Off-chain Voting",
357
+ formPath: "src/forms/createProposal/offchain/TypedProposaForm",
358
+ effect: "Pick any subset of N options",
359
+ target: "POST /integrations/voting/proposals (voting_type=multiple_of)",
360
+ needsIpfs: false,
361
+ gating: [],
362
+ mcpTool: "dexe_proposal_build_offchain_multi_option",
363
+ implemented: true,
364
+ },
365
+ {
366
+ id: "offchain.for_against",
367
+ category: "offchain",
368
+ name: "For/Against Off-chain Voting",
369
+ formPath: "src/forms/createProposal/offchain/TypedProposaForm",
370
+ effect: "Binary vote (default labels: For / Against)",
371
+ target: "POST /integrations/voting/proposals (voting_type=for_against)",
372
+ needsIpfs: false,
373
+ gating: [],
374
+ mcpTool: "dexe_proposal_build_offchain_for_against",
375
+ implemented: true,
376
+ },
377
+ {
378
+ id: "offchain.change_voting_settings",
379
+ category: "offchain",
380
+ name: "Change Off-chain Voting Settings",
381
+ formPath: "src/forms/createProposal/offchain/ChangeVotingSettingsForm",
382
+ effect: "Update DAO-wide off-chain voting parameters",
383
+ target: "POST /integrations/voting/proposals (attributes.type=edit_proposal_type)",
384
+ needsIpfs: false,
385
+ gating: [],
386
+ mcpTool: "dexe_proposal_build_offchain_settings",
387
+ implemented: true,
388
+ },
389
+ {
390
+ id: "offchain.new_template",
391
+ category: "offchain",
392
+ name: "Save Voting Template",
393
+ formPath: "src/forms/createProposal/offchain/NewTemplateForm",
394
+ effect: "Persist a reusable voting-template record",
395
+ target: "POST /integrations/voting/proposals (attributes.type=create_proposal_type)",
396
+ needsIpfs: false,
397
+ gating: [],
398
+ mcpTool: "dexe_proposal_build_offchain_settings",
399
+ implemented: true,
400
+ },
401
+ ];
402
+ /** Metadata JSON shape used by the frontend for every external proposal. */
403
+ export const EXTERNAL_METADATA_SHAPE = {
404
+ proposalName: "string (required)",
405
+ proposalDescription: "string (required, markdown/slate)",
406
+ category: "string (e.g. 'Token Transfer', 'Manage Validators')",
407
+ isMeta: "boolean (default false)",
408
+ changes: "object (type-specific structured payload for indexing, optional)",
409
+ };
410
+ export const INTERNAL_METADATA_SHAPE = {
411
+ proposalName: "string (required)",
412
+ proposalDescription: "string",
413
+ category: "string (ValidatorBalances | ValidatorSettings | MonthlyWithdraw | Offchain)",
414
+ changes: "object (type-specific)",
415
+ };
416
+ //# sourceMappingURL=proposalCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposalCatalog.js","sourceRoot":"","sources":["../../src/lib/proposalCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Wallet } from "ethers";
2
+ import type { DexeConfig } from "../config.js";
3
+ export declare class SignerManager {
4
+ private wallet;
5
+ private readonly key;
6
+ private readonly rpcUrl;
7
+ constructor(config: DexeConfig);
8
+ hasSigner(): boolean;
9
+ getAddress(): string;
10
+ requireSigner(): Wallet;
11
+ }
12
+ //# sourceMappingURL=signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/lib/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBAEhC,MAAM,EAAE,UAAU;IAK9B,SAAS,IAAI,OAAO;IAIpB,UAAU,IAAI,MAAM;IAIpB,aAAa,IAAI,MAAM;CAgBxB"}
@@ -0,0 +1,31 @@
1
+ import { JsonRpcProvider, Wallet } from "ethers";
2
+ export class SignerManager {
3
+ wallet = null;
4
+ key;
5
+ rpcUrl;
6
+ constructor(config) {
7
+ this.key = config.privateKey;
8
+ this.rpcUrl = config.rpcUrl;
9
+ }
10
+ hasSigner() {
11
+ return !!this.key;
12
+ }
13
+ getAddress() {
14
+ return this.requireSigner().address;
15
+ }
16
+ requireSigner() {
17
+ if (!this.key) {
18
+ const dexeEnvKeys = Object.keys(process.env).filter(k => k.startsWith("DEXE_")).join(", ");
19
+ throw new Error(`DEXE_PRIVATE_KEY not set. Available DEXE_* env vars: [${dexeEnvKeys}]. Configure it in MCP server env to enable transaction signing.`);
20
+ }
21
+ if (!this.wallet) {
22
+ if (!this.rpcUrl) {
23
+ throw new Error("DEXE_RPC_URL required when DEXE_PRIVATE_KEY is set.");
24
+ }
25
+ const provider = new JsonRpcProvider(this.rpcUrl);
26
+ this.wallet = new Wallet(this.key, provider);
27
+ }
28
+ return this.wallet;
29
+ }
30
+ }
31
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/lib/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGjD,MAAM,OAAO,aAAa;IAChB,MAAM,GAAkB,IAAI,CAAC;IACpB,GAAG,CAAqB;IACxB,MAAM,CAAqB;IAE5C,YAAY,MAAkB;QAC5B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,SAAS;QACP,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3F,MAAM,IAAI,KAAK,CACb,yDAAyD,WAAW,kEAAkE,CACvI,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Minimal GraphQL fetcher for The Graph subgraphs. Uses global `fetch` (Node
3
+ * 18+). We avoid `graphql-request` as a dep for now — the calls we make are
4
+ * simple enough.
5
+ */
6
+ export interface GqlResponse<T> {
7
+ data?: T;
8
+ errors?: Array<{
9
+ message: string;
10
+ }>;
11
+ }
12
+ export declare function gqlRequest<T>(endpoint: string, query: string, variables?: Record<string, unknown>): Promise<T>;
13
+ /** Ported from frontend gov-pools subgraph `proposalInteractions` query. */
14
+ export declare const PROPOSAL_INTERACTIONS_QUERY = "\n query ProposalInteractions($proposalId: String!, $first: Int!, $skip: Int!) {\n proposalInteractions(\n where: { proposal: $proposalId }\n first: $first\n skip: $skip\n orderBy: timestamp\n orderDirection: desc\n ) {\n id\n hash\n timestamp\n interactionType\n totalVote\n voter {\n id\n voter {\n id\n }\n }\n }\n }\n";
15
+ //# sourceMappingURL=subgraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph.d.ts","sourceRoot":"","sources":["../../src/lib/subgraph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrC;AAED,wBAAsB,UAAU,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED,4EAA4E;AAC5E,eAAO,MAAM,2BAA2B,2aAsBvC,CAAC"}
@@ -0,0 +1,42 @@
1
+ export async function gqlRequest(endpoint, query, variables) {
2
+ const res = await fetch(endpoint, {
3
+ method: "POST",
4
+ headers: { "Content-Type": "application/json" },
5
+ body: JSON.stringify({ query, variables }),
6
+ });
7
+ if (!res.ok) {
8
+ throw new Error(`Subgraph HTTP ${res.status} ${res.statusText}`);
9
+ }
10
+ const body = (await res.json());
11
+ if (body.errors?.length) {
12
+ throw new Error(`Subgraph errors: ${body.errors.map((e) => e.message).join("; ")}`);
13
+ }
14
+ if (!body.data)
15
+ throw new Error("Subgraph returned empty data");
16
+ return body.data;
17
+ }
18
+ /** Ported from frontend gov-pools subgraph `proposalInteractions` query. */
19
+ export const PROPOSAL_INTERACTIONS_QUERY = /* GraphQL */ `
20
+ query ProposalInteractions($proposalId: String!, $first: Int!, $skip: Int!) {
21
+ proposalInteractions(
22
+ where: { proposal: $proposalId }
23
+ first: $first
24
+ skip: $skip
25
+ orderBy: timestamp
26
+ orderDirection: desc
27
+ ) {
28
+ id
29
+ hash
30
+ timestamp
31
+ interactionType
32
+ totalVote
33
+ voter {
34
+ id
35
+ voter {
36
+ id
37
+ }
38
+ }
39
+ }
40
+ }
41
+ `;
42
+ //# sourceMappingURL=subgraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../src/lib/subgraph.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,KAAa,EACb,SAAmC;IAEnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC3C,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBxD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ToolContext } from "./context.js";
3
+ export declare function registerDaoTools(server: McpServer, ctx: ToolContext): void;
4
+ //# sourceMappingURL=dao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dao.d.ts","sourceRoot":"","sources":["../../src/tools/dao.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAwBhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAe1E"}