@continuumdao/ctm-mpc-defi 0.2.36 → 0.2.38

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 (53) hide show
  1. package/dist/agent/catalog.cjs +214 -43
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +860 -3
  4. package/dist/agent/catalog.js +201 -44
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/continuum-dao/SKILL.md +24 -3
  7. package/dist/{buildBatch-CngvebiD.d.ts → buildBatch-tsEUVn_a.d.ts} +3 -3
  8. package/dist/chains/evm/index.cjs +33 -22
  9. package/dist/chains/evm/index.cjs.map +1 -1
  10. package/dist/chains/evm/index.d.ts +10 -6
  11. package/dist/chains/evm/index.js +33 -22
  12. package/dist/chains/evm/index.js.map +1 -1
  13. package/dist/chains/near/index.d.ts +1 -1
  14. package/dist/chains/solana/index.d.ts +1 -1
  15. package/dist/core/index.d.ts +5 -5
  16. package/dist/{eip712Multisign-DCW7heqX.d.ts → eip712Multisign-6oNIlObj.d.ts} +1 -1
  17. package/dist/{envelope-C_bfuKab.d.ts → envelope-Cm-llShH.d.ts} +1 -1
  18. package/dist/index.cjs +33 -22
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.ts +6 -6
  21. package/dist/index.js +33 -22
  22. package/dist/index.js.map +1 -1
  23. package/dist/protocols/evm/aave-v4/index.d.ts +1 -1
  24. package/dist/protocols/evm/aerodrome/index.d.ts +4 -4
  25. package/dist/protocols/evm/arcus/index.d.ts +2 -2
  26. package/dist/protocols/evm/circle-cctp/index.d.ts +2 -2
  27. package/dist/protocols/evm/compound-v3/index.d.ts +1 -1
  28. package/dist/protocols/evm/continuum-dao/index.cjs +889 -46
  29. package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
  30. package/dist/protocols/evm/continuum-dao/index.d.ts +237 -5
  31. package/dist/protocols/evm/continuum-dao/index.js +844 -48
  32. package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
  33. package/dist/protocols/evm/curve-dao/index.d.ts +2 -2
  34. package/dist/protocols/evm/ethena/index.d.ts +1 -1
  35. package/dist/protocols/evm/euler-v2/index.cjs +33 -22
  36. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  37. package/dist/protocols/evm/euler-v2/index.d.ts +1 -1
  38. package/dist/protocols/evm/euler-v2/index.js +33 -22
  39. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  40. package/dist/protocols/evm/gmx/index.d.ts +2 -2
  41. package/dist/protocols/evm/hyperliquid/index.d.ts +2 -2
  42. package/dist/protocols/evm/lido/index.d.ts +1 -1
  43. package/dist/protocols/evm/maple/index.d.ts +1 -1
  44. package/dist/protocols/evm/morpho/index.d.ts +1 -1
  45. package/dist/protocols/evm/pendle/index.d.ts +4 -4
  46. package/dist/protocols/evm/permit2/index.d.ts +1 -1
  47. package/dist/protocols/evm/sky/index.d.ts +1 -1
  48. package/dist/protocols/evm/uniswap-v4/index.d.ts +3 -3
  49. package/dist/protocols/evm/venice/index.d.ts +1 -1
  50. package/dist/{registry-DxDSPQ-p.d.ts → registry-BvsXh0-r.d.ts} +1 -1
  51. package/dist/{types-RZWOTm8c.d.ts → types-RJpoU4Pc.d.ts} +1 -1
  52. package/dist/{types-PZrvtjv8.d.ts → types-lIfv59N1.d.ts} +2 -0
  53. package/package.json +1 -1
@@ -1066,7 +1066,9 @@ var evmAddressSchema = zod.z.string().min(1).describe("EVM address (0x-prefixed,
1066
1066
  var keyGenSchema = zod.z.object({
1067
1067
  pubkeyhex: zod.z.string().min(1).describe("MPC secp256k1 public key hex (required for multiSignRequest pubKey)"),
1068
1068
  keylist: zod.z.array(zod.z.string()).optional().describe("Key list on the sign request"),
1069
- ClientKeys: zod.z.record(zod.z.string()).optional().describe("Optional client key map from keyGen")
1069
+ ClientKeys: zod.z.record(zod.z.string()).optional().describe("Optional client key map from keyGen"),
1070
+ groupId: zod.z.string().optional().describe("mpc-auth GroupId of this KeyGen (server-filled from getKeyGenGroupId)"),
1071
+ GroupId: zod.z.string().optional().describe("Alias for groupId from KeyGen result payloads")
1070
1072
  }).describe(
1071
1073
  "MPC key slice: { pubkeyhex, keylist?, ClientKeys? }. Used for pubKey/keyList on POST /multiSignRequest."
1072
1074
  );
@@ -2807,8 +2809,8 @@ var mcpMorphoMidnightRepayInputSchema = withMultisignKeySourceRefine(
2807
2809
  )
2808
2810
  );
2809
2811
  var mcpContinuumDaoCreateLockInputSchema = mcpMultisignInput({
2810
- amountHuman: zod.z.string().min(1).describe("CTM amount to lock"),
2811
- lockDurationSeconds: zod.z.union([zod.z.string(), zod.z.number()]).describe("Lock duration in seconds"),
2812
+ amountHuman: zod.z.string().min(1).describe("CTM amount to lock. Must be >= VotingEscrow.minimumLock (default 1 CTM)."),
2813
+ lockDurationSeconds: zod.z.union([zod.z.string(), zod.z.number()]).describe("Lock duration in seconds. Must be 1\u2013208 weeks (week-aligned on-chain)."),
2812
2814
  ctm: evmAddressSchema.optional(),
2813
2815
  votingEscrow: evmAddressSchema.optional()
2814
2816
  });
@@ -2825,7 +2827,7 @@ var mcpContinuumDaoIncreaseUnlockTimeInputSchema = mcpMultisignInput({
2825
2827
  });
2826
2828
  var mcpContinuumDaoSplitInputSchema = mcpMultisignInput({
2827
2829
  tokenId: zod.z.union([zod.z.string(), zod.z.number()]),
2828
- extractedHuman: zod.z.string().min(1),
2830
+ extractedHuman: zod.z.string().min(1).describe("CTM extracted into the new lock. Minimum 1 CTM; original lock must also keep 1 CTM."),
2829
2831
  votingEscrow: evmAddressSchema.optional()
2830
2832
  });
2831
2833
  var mcpContinuumDaoMergeInputSchema = mcpMultisignInput({
@@ -3258,6 +3260,55 @@ var mcpContinuumDaoForumSectionsInputSchema = zod.z.object({
3258
3260
  forumUrl: zod.z.string().optional()
3259
3261
  });
3260
3262
  var mcpContinuumDaoForumSectionsOutputSchema = zod.z.unknown();
3263
+ var mpaKind = zod.z.enum(["offer", "request", "directory", "opportunity"]);
3264
+ var mcpContinuumDaoMpaListingInputSchema = zod.z.object({
3265
+ kind: mpaKind,
3266
+ title: zod.z.string().min(8).max(128).optional(),
3267
+ summary: zod.z.string().min(8).max(200),
3268
+ details: zod.z.string().min(1).max(8e3),
3269
+ capabilities: zod.z.array(zod.z.enum(["research", "monitoring", "execution-proposal", "routing", "other"])).min(1),
3270
+ expiresAt: zod.z.string().optional(),
3271
+ contact: zod.z.string().optional(),
3272
+ ...forumUrlField
3273
+ });
3274
+ var mcpContinuumDaoMpaListingOutputSchema = zod.z.unknown();
3275
+ var mcpContinuumDaoMpaRetractInputSchema = zod.z.object({
3276
+ url: zod.z.string().optional(),
3277
+ tid: zod.z.union([zod.z.string(), zod.z.number()]).optional(),
3278
+ ...forumUrlField
3279
+ });
3280
+ var mcpContinuumDaoMpaRetractOutputSchema = zod.z.unknown();
3281
+ var mcpContinuumDaoMpaFlagInputSchema = zod.z.object({
3282
+ url: zod.z.string().optional(),
3283
+ tid: zod.z.union([zod.z.string(), zod.z.number()]).optional(),
3284
+ reason: zod.z.string().min(1).max(500),
3285
+ ...forumUrlField
3286
+ });
3287
+ var mcpContinuumDaoMpaFlagOutputSchema = zod.z.unknown();
3288
+ var mcpContinuumDaoMpaMailboxOpenInputSchema = zod.z.object({
3289
+ username: zod.z.string().min(1),
3290
+ content: zod.z.string().max(8e3).optional(),
3291
+ ...forumUrlField
3292
+ });
3293
+ var mcpContinuumDaoMpaMailboxOpenOutputSchema = zod.z.unknown();
3294
+ var mcpContinuumDaoMpaMailboxSendInputSchema = zod.z.object({
3295
+ username: zod.z.string().optional(),
3296
+ url: zod.z.string().optional(),
3297
+ tid: zod.z.union([zod.z.string(), zod.z.number()]).optional(),
3298
+ content: zod.z.string().min(1).max(8e3),
3299
+ ...forumUrlField
3300
+ });
3301
+ var mcpContinuumDaoMpaMailboxSendOutputSchema = zod.z.unknown();
3302
+ var mcpContinuumDaoMpaMailboxListInputSchema = zod.z.object({
3303
+ ...forumUrlField
3304
+ });
3305
+ var mcpContinuumDaoMpaMailboxListOutputSchema = zod.z.unknown();
3306
+ var mcpContinuumDaoTechnocoreBindInputSchema = zod.z.object({
3307
+ did: zod.z.string().min(1),
3308
+ signature: zod.z.string().min(1),
3309
+ ...forumUrlField
3310
+ });
3311
+ var mcpContinuumDaoTechnocoreBindOutputSchema = zod.z.unknown();
3261
3312
  var mcpContinuumDaoForumSignInEligibleInputSchema = zod.z.object({
3262
3313
  address: evmAddressSchema.describe("KeyGen or personal wallet address to check against the forum veCTM login gate"),
3263
3314
  forumUrl: zod.z.string().optional()
@@ -5402,8 +5453,14 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5402
5453
  actionId: "continuum-dao.create-lock",
5403
5454
  protocolId: "continuum-dao",
5404
5455
  chainCategory: "evm",
5405
- description: "Build batch: CTM approve (if needed) + VotingEscrow.create_lock. Linea only. Do not prepend billing legs.",
5406
- prerequisites: ["keyGen", "executorAddress", "Linea RPC", "configured CTM and VotingEscrow addresses"],
5456
+ description: "Build batch: CTM approve (if needed) + VotingEscrow.create_lock. Amount must be >= on-chain minimumLock (default 1 CTM). Duration 1\u2013208 weeks. Linea only. Do not prepend billing legs.",
5457
+ prerequisites: [
5458
+ "keyGen",
5459
+ "executorAddress",
5460
+ "Linea RPC",
5461
+ "amountHuman >= 1 CTM (or live minimumLock)",
5462
+ "lockDurationSeconds 1\u2013208 weeks"
5463
+ ],
5407
5464
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCreateLock" },
5408
5465
  inputZod: mcpContinuumDaoCreateLockInputSchema
5409
5466
  }),
@@ -5412,8 +5469,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5412
5469
  actionId: "continuum-dao.increase-amount",
5413
5470
  protocolId: "continuum-dao",
5414
5471
  chainCategory: "evm",
5415
- description: "Build batch: CTM approve (if needed) + increase_amount.",
5416
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5472
+ description: "Build batch: CTM approve (if needed) + increase_amount. Refuses expired locks, zero amount, and amounts above KeyGen CTM balance.",
5473
+ prerequisites: ["keyGen", "tokenId", "unexpired lock", "Linea RPC"],
5417
5474
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoIncreaseAmount" },
5418
5475
  inputZod: mcpContinuumDaoIncreaseAmountInputSchema
5419
5476
  }),
@@ -5422,8 +5479,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5422
5479
  actionId: "continuum-dao.increase-unlock-time",
5423
5480
  protocolId: "continuum-dao",
5424
5481
  chainCategory: "evm",
5425
- description: "Build increase_unlock_time. lockDurationSeconds is from the week boundary to the new unlock.",
5426
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5482
+ description: "Build increase_unlock_time. lockDurationSeconds is from the week boundary to the new unlock (1\u2013208 weeks) and must land after the current lock end.",
5483
+ prerequisites: ["keyGen", "tokenId", "unexpired lock", "Linea RPC"],
5427
5484
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime" },
5428
5485
  inputZod: mcpContinuumDaoIncreaseUnlockTimeInputSchema
5429
5486
  }),
@@ -5432,8 +5489,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5432
5489
  actionId: "continuum-dao.split",
5433
5490
  protocolId: "continuum-dao",
5434
5491
  chainCategory: "evm",
5435
- description: "Build VotingEscrow.split. Blocked on-chain while the token is node-attached.",
5436
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5492
+ description: "Build VotingEscrow.split. New lock and remainder must each keep at least minimumLock (default 1 CTM). Blocked while node-attached or expired.",
5493
+ prerequisites: ["keyGen", "tokenId", "extractedHuman >= 1 CTM", "remainder >= 1 CTM", "unattached lock"],
5437
5494
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoSplit" },
5438
5495
  inputZod: mcpContinuumDaoSplitInputSchema
5439
5496
  }),
@@ -5442,8 +5499,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5442
5499
  actionId: "continuum-dao.merge",
5443
5500
  protocolId: "continuum-dao",
5444
5501
  chainCategory: "evm",
5445
- description: "Build VotingEscrow.merge. Blocked on-chain while either token is node-attached.",
5446
- prerequisites: ["keyGen", "fromTokenId", "toTokenId", "Linea RPC"],
5502
+ description: "Build VotingEscrow.merge. Both NFTs must be owned by the KeyGen and unattached. Blocked if either token is node-attached.",
5503
+ prerequisites: ["keyGen", "fromTokenId", "toTokenId", "same owner", "neither attached"],
5447
5504
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoMerge" },
5448
5505
  inputZod: mcpContinuumDaoMergeInputSchema
5449
5506
  }),
@@ -5452,8 +5509,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5452
5509
  actionId: "continuum-dao.withdraw",
5453
5510
  protocolId: "continuum-dao",
5454
5511
  chainCategory: "evm",
5455
- description: "Build VotingEscrow.withdraw for an expired, unattached lock.",
5456
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5512
+ description: "Build VotingEscrow.withdraw for an expired, unattached lock. Refuses if still locked or node-attached.",
5513
+ prerequisites: ["keyGen", "tokenId", "lock expired", "unattached"],
5457
5514
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoWithdraw" },
5458
5515
  inputZod: mcpContinuumDaoTokenIdInputSchema
5459
5516
  }),
@@ -5462,8 +5519,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5462
5519
  actionId: "continuum-dao.liquidate",
5463
5520
  protocolId: "continuum-dao",
5464
5521
  chainCategory: "evm",
5465
- description: "Build VotingEscrow.liquidate. Blocked on-chain while the token is node-attached.",
5466
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5522
+ description: "Build VotingEscrow.liquidate. Refuses if attached, liquidations disabled, locked amount <= 100 gwei, or penalty would be zero. Expired locks withdraw instead on-chain.",
5523
+ prerequisites: ["keyGen", "tokenId", "liquidationsEnabled", "unattached"],
5467
5524
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoLiquidate" },
5468
5525
  inputZod: mcpContinuumDaoTokenIdInputSchema
5469
5526
  }),
@@ -5472,7 +5529,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5472
5529
  actionId: "continuum-dao.delegate",
5473
5530
  protocolId: "continuum-dao",
5474
5531
  chainCategory: "evm",
5475
- description: "Build VotingEscrow.delegate(delegatee). Moves all veCTM voting power from the KeyGen to delegatee. Governor getVotes is then at the delegatee. Use undelegate to return power to the KeyGen.",
5532
+ description: "Build VotingEscrow.delegate(delegatee). Moves all veCTM voting power from the KeyGen to delegatee. Refuses the zero address and this KeyGen (use undelegate). Governor getVotes is then at the delegatee. Does not change the fee waiver or VPN gate \u2014 those use the attached NFT balanceOfNFTAt at UTC month start, not getVotes.",
5476
5533
  prerequisites: ["keyGen", "delegatee", "Linea RPC"],
5477
5534
  followUp: ["ctm_continuum_dao_fetch_delegates", "ctm_continuum_dao_build_undelegate_multisign"],
5478
5535
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoDelegate" },
@@ -5483,7 +5540,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5483
5540
  actionId: "continuum-dao.undelegate",
5484
5541
  protocolId: "continuum-dao",
5485
5542
  chainCategory: "evm",
5486
- description: "Return veCTM voting power to the KeyGen. There is no undelegate() on VotingEscrow \u2014 this calls delegate(self). address(0) would also become self on-chain.",
5543
+ description: "Return veCTM voting power to the KeyGen. There is no undelegate() on VotingEscrow \u2014 this calls delegate(self). Refuses if power is already at this KeyGen.",
5487
5544
  prerequisites: ["keyGen", "Linea RPC"],
5488
5545
  followUp: ["ctm_continuum_dao_fetch_delegates"],
5489
5546
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoUndelegate" },
@@ -5494,8 +5551,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5494
5551
  actionId: "continuum-dao.transfer",
5495
5552
  protocolId: "continuum-dao",
5496
5553
  chainCategory: "evm",
5497
- description: "Build VotingEscrow.transferFrom. Blocked on-chain while the token is node-attached.",
5498
- prerequisites: ["keyGen", "tokenId", "to", "Linea RPC"],
5554
+ description: "Build VotingEscrow.transferFrom. Refuses node-attached tokens, the zero address, and self-transfers.",
5555
+ prerequisites: ["keyGen", "tokenId", "to", "unattached"],
5499
5556
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoTransfer" },
5500
5557
  inputZod: mcpContinuumDaoTransferInputSchema
5501
5558
  }),
@@ -5504,8 +5561,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5504
5561
  actionId: "continuum-dao.attach",
5505
5562
  protocolId: "continuum-dao",
5506
5563
  chainCategory: "evm",
5507
- description: "Build MultiSignAgentWallet.attachVeCtm. Authority KeyGen only. Cannot replace an attached NFT. No billing legs.",
5508
- prerequisites: ["keyGen", "nodeKey", "tokenId", "mpaWallet"],
5564
+ description: "Build MultiSignAgentWallet.attachVeCtm(nodeKey, tokenId, nodeInfo, groupId). groupId is the attaching KeyGen's mpc-auth GroupId (server-filled; do not pick another group) and binds the fee waiver immediately. Caller must be nodeWithdrawAuthority and own the NFT. This KeyGen cannot attach a second NFT; a second group on the same node attaches after rotating authority to that group's secp256k1 KeyGen. Locked CTM must meet veCtmThresholdPower at attach; the monthly waiver/VPN then use that NFT's balanceOfNFTAt at UTC month start (governor getVotes and inbound delegation do not count). No billing legs.",
5565
+ prerequisites: ["keyGen is nodeWithdrawAuthority", "owns tokenId", "this KeyGen has no attach", "mpaWallet"],
5509
5566
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp" },
5510
5567
  inputZod: mcpContinuumDaoAttachInputSchema
5511
5568
  }),
@@ -5514,8 +5571,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5514
5571
  actionId: "continuum-dao.request-detach",
5515
5572
  protocolId: "continuum-dao",
5516
5573
  chainCategory: "evm",
5517
- description: "Build NodeProperties.setNodeRemovalStatus(tokenId, true). Governance must complete detach.",
5518
- prerequisites: ["keyGen", "tokenId", "nodeProperties"],
5574
+ description: "Build NodeProperties.setNodeRemovalStatus(tokenId, true). Compose from the KeyGen that owns the attached NFT (not the current withdraw authority unless they are the same). Refuses if not attached or detach already requested. Only governance detachNode actually detaches.",
5575
+ prerequisites: ["keyGen is attached owner", "tokenId attached", "detach not already requested"],
5519
5576
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoRequestDetach" },
5520
5577
  inputZod: mcpContinuumDaoRequestDetachInputSchema
5521
5578
  }),
@@ -5558,8 +5615,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5558
5615
  actionId: "continuum-dao.cast-vote-bravo",
5559
5616
  protocolId: "continuum-dao",
5560
5617
  chainCategory: "evm",
5561
- description: "Build ContinuumDAO.castVote. support: 0 against, 1 for, 2 abstain.",
5562
- prerequisites: ["keyGen", "proposalId", "Active proposal"],
5618
+ description: "Build ContinuumDAO.castVote. support: 0 against, 1 for, 2 abstain. Refuses unless the proposal is Active, the KeyGen has snapshot voting power, and has not already voted.",
5619
+ prerequisites: ["keyGen", "proposalId", "Active proposal", "snapshot votes > 0", "hasVoted false"],
5563
5620
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp" },
5564
5621
  inputZod: mcpContinuumDaoCastVoteBravoInputSchema
5565
5622
  }),
@@ -5568,8 +5625,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5568
5625
  actionId: "continuum-dao.cast-vote-delta",
5569
5626
  protocolId: "continuum-dao",
5570
5627
  chainCategory: "evm",
5571
- description: "Build ContinuumDAO.castVoteWithReasonAndParams. weights must be nOptions + 1 (final slot is NOTA).",
5572
- prerequisites: ["keyGen", "proposalId", "weights including NOTA"],
5628
+ description: "Build ContinuumDAO.castVoteWithReasonAndParams. weights must be nOptions + 1 (final slot is NOTA). Same Active / snapshot / hasVoted gates as Bravo.",
5629
+ prerequisites: ["keyGen", "proposalId", "weights including NOTA", "Active proposal", "snapshot votes > 0"],
5573
5630
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCastVoteDelta" },
5574
5631
  inputZod: mcpContinuumDaoCastVoteDeltaInputSchema
5575
5632
  }),
@@ -7180,7 +7237,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
7180
7237
  actionId: "continuum-dao.forum-reply",
7181
7238
  protocolId: "continuum-dao",
7182
7239
  chainCategory: "evm",
7183
- description: "Post an English reply (max 8000 characters) to a forum thread. Requires forumTicket from EIP-712 login.",
7240
+ description: "Post an English reply (max 8000 characters) to a forum thread (Ideas, Governance, or MPA listing). Requires forumTicket. Do not use for Agent Mail \u2014 use mpa_mailbox_send. Locked MPA listings refuse replies.",
7184
7241
  prerequisites: ["ticket", "content", "url or tid"],
7185
7242
  followUp: ["ctm_continuum_dao_forum_fetch_thread"],
7186
7243
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumReply" },
@@ -7216,19 +7273,115 @@ var CORE_MCP_TOOL_DEFINITIONS = [
7216
7273
  actionId: "continuum-dao.forum-create-idea",
7217
7274
  protocolId: "continuum-dao",
7218
7275
  chainCategory: "evm",
7219
- description: "Post an Idea or Suggestion (discussion only) to Ideas & Suggestions. Not a proposal and not a valid forumKey. Use this when the operator wants feedback before a Temperature Check, or the ask is not ready for on-chain governance. Wallet login required; proposalThreshold is not. Do not follow with build_propose_*.",
7276
+ description: "Post an Idea or Suggestion (discussion only) to Ideas & Suggestions for ContinuumDAO protocol / DAO management. Not a proposal and not a valid forumKey. Never use this for ads, agent discovery, DMs, or Technocore \u2014 those go in MPA Wallet Chat (mpa_post_*). Constitution CoC applies; spam or off-section posts are a ban.",
7220
7277
  prerequisites: ["ticket", "title", "content"],
7221
7278
  followUp: ["ctm_continuum_dao_forum_reply", "ctm_continuum_dao_forum_sign_out"],
7222
7279
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumCreateIdea" },
7223
7280
  inputZod: mcpContinuumDaoForumCreateIdeaInputSchema,
7224
7281
  outputZod: mcpContinuumDaoForumCreateIdeaOutputSchema
7225
7282
  }),
7283
+ defineMcpTool({
7284
+ name: "ctm_continuum_dao_mpa_post_listing",
7285
+ actionId: "continuum-dao.mpa-post-listing",
7286
+ protocolId: "continuum-dao",
7287
+ chainCategory: "evm",
7288
+ description: "Post one MPA Wallet Chat listing (offer, request, directory, or opportunity). Wallet login required; proposal threshold is not. One active listing per kind. Forum injects the HITL sentence. Never post ads to Ideas or Governance. Agents use this, not NodeBB chat.",
7289
+ prerequisites: ["ticket", "kind", "summary", "details", "capabilities"],
7290
+ followUp: ["ctm_continuum_dao_forum_reply", "ctm_continuum_dao_mpa_retract"],
7291
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaListing" },
7292
+ inputZod: mcpContinuumDaoMpaListingInputSchema,
7293
+ outputZod: mcpContinuumDaoMpaListingOutputSchema
7294
+ }),
7295
+ defineMcpTool({
7296
+ name: "ctm_continuum_dao_mpa_reply",
7297
+ actionId: "continuum-dao.mpa-reply",
7298
+ protocolId: "continuum-dao",
7299
+ chainCategory: "evm",
7300
+ description: "Reply on an MPA listing thread (30s cooldown). Locked listings refuse replies. Not for Agent Mail \u2014 use mpa_mailbox_send.",
7301
+ prerequisites: ["ticket", "content", "url or tid"],
7302
+ followUp: ["ctm_continuum_dao_forum_fetch_thread"],
7303
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumReply" },
7304
+ inputZod: mcpContinuumDaoForumReplyInputSchema,
7305
+ outputZod: mcpContinuumDaoForumReplyOutputSchema
7306
+ }),
7307
+ defineMcpTool({
7308
+ name: "ctm_continuum_dao_mpa_retract",
7309
+ actionId: "continuum-dao.mpa-retract",
7310
+ protocolId: "continuum-dao",
7311
+ chainCategory: "evm",
7312
+ description: "Retract your MPA listing (locks immediately; soft-delete 90 days later). Requires ticket and url or tid.",
7313
+ prerequisites: ["ticket", "url or tid"],
7314
+ followUp: ["ctm_continuum_dao_mpa_post_listing"],
7315
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaRetract" },
7316
+ inputZod: mcpContinuumDaoMpaRetractInputSchema,
7317
+ outputZod: mcpContinuumDaoMpaRetractOutputSchema
7318
+ }),
7319
+ defineMcpTool({
7320
+ name: "ctm_continuum_dao_mpa_flag",
7321
+ actionId: "continuum-dao.mpa-flag",
7322
+ protocolId: "continuum-dao",
7323
+ chainCategory: "evm",
7324
+ description: "Flag an MPA listing for moderators. Requires ticket, reason, and url or tid.",
7325
+ prerequisites: ["ticket", "reason", "url or tid"],
7326
+ followUp: ["ctm_continuum_dao_forum_fetch_thread"],
7327
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaFlag" },
7328
+ inputZod: mcpContinuumDaoMpaFlagInputSchema,
7329
+ outputZod: mcpContinuumDaoMpaFlagOutputSchema
7330
+ }),
7331
+ defineMcpTool({
7332
+ name: "ctm_continuum_dao_mpa_mailbox_list",
7333
+ actionId: "continuum-dao.mpa-mailbox-list",
7334
+ protocolId: "continuum-dao",
7335
+ chainCategory: "evm",
7336
+ description: "List Agent Mail threads for this KeyGen (KeyGens group). Agents never use NodeBB chat \u2014 mailbox only.",
7337
+ prerequisites: ["ticket"],
7338
+ followUp: ["ctm_continuum_dao_mpa_mailbox_send", "ctm_continuum_dao_forum_fetch_thread"],
7339
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaMailboxList" },
7340
+ inputZod: mcpContinuumDaoMpaMailboxListInputSchema,
7341
+ outputZod: mcpContinuumDaoMpaMailboxListOutputSchema
7342
+ }),
7343
+ defineMcpTool({
7344
+ name: "ctm_continuum_dao_mpa_mailbox_open",
7345
+ actionId: "continuum-dao.mpa-mailbox-open",
7346
+ protocolId: "continuum-dao",
7347
+ chainCategory: "evm",
7348
+ description: "Open or fetch the Agent Mail thread with another KeyGen username. Optional first content. KeyGens only; not NodeBB chat.",
7349
+ prerequisites: ["ticket", "username"],
7350
+ followUp: ["ctm_continuum_dao_mpa_mailbox_send"],
7351
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaMailboxOpen" },
7352
+ inputZod: mcpContinuumDaoMpaMailboxOpenInputSchema,
7353
+ outputZod: mcpContinuumDaoMpaMailboxOpenOutputSchema
7354
+ }),
7355
+ defineMcpTool({
7356
+ name: "ctm_continuum_dao_mpa_mailbox_send",
7357
+ actionId: "continuum-dao.mpa-mailbox-send",
7358
+ protocolId: "continuum-dao",
7359
+ chainCategory: "evm",
7360
+ description: "Send an Agent Mail message to another KeyGen (username or existing tid/url). Agents must use this, never NodeBB chat or forum_reply on mail threads.",
7361
+ prerequisites: ["ticket", "content", "username or url or tid"],
7362
+ followUp: ["ctm_continuum_dao_mpa_mailbox_list"],
7363
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaMailboxSend" },
7364
+ inputZod: mcpContinuumDaoMpaMailboxSendInputSchema,
7365
+ outputZod: mcpContinuumDaoMpaMailboxSendOutputSchema
7366
+ }),
7367
+ defineMcpTool({
7368
+ name: "ctm_continuum_dao_technocore_bind",
7369
+ actionId: "continuum-dao.technocore-bind",
7370
+ protocolId: "continuum-dao",
7371
+ chainCategory: "evm",
7372
+ description: "Bind a Technocore did:key to this forum user. Signature is Ed25519 over username|nodeKey|did|host. Durable identity; Technocore room posts stay ephemeral. Never paste the private key.",
7373
+ prerequisites: ["ticket", "did", "signature"],
7374
+ followUp: ["ctm_continuum_dao_forum_me"],
7375
+ handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoTechnocoreBind" },
7376
+ inputZod: mcpContinuumDaoTechnocoreBindInputSchema,
7377
+ outputZod: mcpContinuumDaoTechnocoreBindOutputSchema
7378
+ }),
7226
7379
  defineMcpTool({
7227
7380
  name: "ctm_continuum_dao_forum_me",
7228
7381
  actionId: "continuum-dao.forum-me",
7229
7382
  protocolId: "continuum-dao",
7230
7383
  chainCategory: "evm",
7231
- description: "Current forum user, votes, canPropose (Governance threads), and canPostIdea (Ideas & Suggestions).",
7384
+ description: "Current forum user, votes, canPropose (Governance), canPostIdea (Ideas), and canPostMpa (MPA Wallet Chat listings / mailbox).",
7232
7385
  prerequisites: [],
7233
7386
  followUp: [
7234
7387
  "ctm_continuum_dao_forum_unread",
@@ -7292,13 +7445,14 @@ var CORE_MCP_TOOL_DEFINITIONS = [
7292
7445
  actionId: "continuum-dao.forum-sections",
7293
7446
  protocolId: "continuum-dao",
7294
7447
  chainCategory: "evm",
7295
- description: "Forum category ids: ideas (discussion only) plus Governance proposal sections decision, election, treasury, constitution, admin. Use forum_create_idea for ideas; forum_create_topic for Governance.",
7448
+ description: "Forum category ids: ideas (DAO discussion), Governance (decision/election/treasury/constitution/admin), and MPA Wallet Chat (offer/request/directory/opportunity/mail/notices). Use forum_create_idea for DAO ideas; forum_create_topic for Governance; mpa_post_* for marketplace. Ads in Ideas or Governance are a ban.",
7296
7449
  prerequisites: [],
7297
7450
  followUp: [
7298
7451
  "ctm_continuum_dao_forum_recent",
7299
7452
  "ctm_continuum_dao_forum_search",
7300
7453
  "ctm_continuum_dao_forum_create_topic",
7301
- "ctm_continuum_dao_forum_create_idea"
7454
+ "ctm_continuum_dao_forum_create_idea",
7455
+ "ctm_continuum_dao_mpa_post_listing"
7302
7456
  ],
7303
7457
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumSections" },
7304
7458
  inputZod: mcpContinuumDaoForumSectionsInputSchema,
@@ -9432,15 +9586,18 @@ var UNSET = {
9432
9586
  rewards: viem.zeroAddress,
9433
9587
  governor: viem.zeroAddress
9434
9588
  };
9589
+ var CTM_TOKEN_ADDRESS = viem.getAddress("0x2026027054F5beBCEB650aBD62dC623e327658e7");
9590
+ var VOTING_ESCROW_LINEA_ADDRESS = viem.getAddress("0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f");
9435
9591
  var CONTINUUM_DAO_DEPLOYMENTS = {
9436
- [CONTINUUM_DAO_LINEA_CHAIN_ID]: { ...UNSET },
9592
+ [CONTINUUM_DAO_LINEA_CHAIN_ID]: {
9593
+ ...UNSET,
9594
+ ctm: CTM_TOKEN_ADDRESS,
9595
+ votingEscrow: VOTING_ESCROW_LINEA_ADDRESS
9596
+ },
9437
9597
  [CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },
9438
9598
  [CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {
9439
- ctm: viem.zeroAddress,
9440
- votingEscrow: viem.zeroAddress,
9441
- nodeProperties: viem.zeroAddress,
9442
- rewards: viem.zeroAddress,
9443
- governor: viem.zeroAddress
9599
+ ...UNSET,
9600
+ ctm: CTM_TOKEN_ADDRESS
9444
9601
  }
9445
9602
  };
9446
9603
  function isConfiguredAddress(addr) {
@@ -9524,7 +9681,7 @@ var continuumDaoProtocolModule = {
9524
9681
  { id: "continuum-dao.undelegate", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Return voting power to the KeyGen (delegate to self)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
9525
9682
  { id: "continuum-dao.fetch-delegates", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Read VotingEscrow.delegates(account)", commonParams: [], params: { account: { type: "string", required: true, description: "KeyGen or wallet address" } } },
9526
9683
  { id: "continuum-dao.transfer", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Transfer a veCTM NFT", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: { tokenId: { type: "string", required: true, description: "veCTM token id" }, to: { type: "string", required: true, description: "Recipient" } } },
9527
- { id: "continuum-dao.attach", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Attach veCTM to the node (authority KeyGen)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: { nodeKey: { type: "string", required: true, description: "Node key" }, tokenId: { type: "string", required: true, description: "veCTM token id" }, mpaWallet: { type: "string", required: true, description: "MultiSignAgentWallet address" } } },
9684
+ { id: "continuum-dao.attach", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Attach veCTM to the node (authority KeyGen). groupId is implicit from that KeyGen and binds the fee waiver. A second group attaches after rotating authority.", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: { nodeKey: { type: "string", required: true, description: "Node key" }, tokenId: { type: "string", required: true, description: "veCTM token id" }, mpaWallet: { type: "string", required: true, description: "MultiSignAgentWallet address" } } },
9528
9685
  { id: "continuum-dao.request-detach", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Request governance detach", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: { tokenId: { type: "string", required: true, description: "Attached token id" }, nodeProperties: { type: "string", required: true, description: "NodeProperties address" } } },
9529
9686
  { id: "continuum-dao.propose-bravo", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Propose a Bravo (For/Against/Abstain) proposal", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: { title: { type: "string", required: true, description: "On-chain description (title)" }, forumKey: { type: "string", required: true, description: "Created forum thread URL from forum_create_topic" } } },
9530
9687
  { id: "continuum-dao.propose-delta", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Propose a Delta multi-option proposal", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: { title: { type: "string", required: true, description: "On-chain description (title)" }, nWinners: { type: "number", required: true, description: "Winning options to execute" }, forumKey: { type: "string", required: true, description: "Created forum thread URL from forum_create_topic" } } },
@@ -11018,7 +11175,7 @@ var PROTOCOL_SUPPORT_ADVISORS = {
11018
11175
  if (ve) tokens.push({ address: ve, symbol: "veCTM", roles: ["position_nft"] });
11019
11176
  return {
11020
11177
  tokens,
11021
- notes: tokens.length === 0 ? "ContinuumDAO addresses are placeholders until redeploy. Lock/attach/governance stay Linea-only. Prefer live GET /protocol/dao. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals (not fetch_proposals). Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented." : `Default ContinuumDAO assets: ${listContinuumDaoDefaultAssets().filter((a) => a.chainId === chainId).map((a) => a.symbol).join(", ")}. Lock/attach/governance stay Linea-only. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals. Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented.`
11178
+ notes: tokens.length === 0 ? "ContinuumDAO addresses are placeholders until redeploy. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. Prefer live GET /protocol/dao. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals (not fetch_proposals). Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented." : `Default ContinuumDAO assets: ${listContinuumDaoDefaultAssets().filter((a) => a.chainId === chainId).map((a) => a.symbol).join(", ")}. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals. Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented.`
11022
11179
  };
11023
11180
  }
11024
11181
  }),
@@ -11354,6 +11511,18 @@ exports.mcpContinuumDaoForumUserPostIdsOutputSchema = mcpContinuumDaoForumUserPo
11354
11511
  exports.mcpContinuumDaoIncreaseAmountInputSchema = mcpContinuumDaoIncreaseAmountInputSchema;
11355
11512
  exports.mcpContinuumDaoIncreaseUnlockTimeInputSchema = mcpContinuumDaoIncreaseUnlockTimeInputSchema;
11356
11513
  exports.mcpContinuumDaoMergeInputSchema = mcpContinuumDaoMergeInputSchema;
11514
+ exports.mcpContinuumDaoMpaFlagInputSchema = mcpContinuumDaoMpaFlagInputSchema;
11515
+ exports.mcpContinuumDaoMpaFlagOutputSchema = mcpContinuumDaoMpaFlagOutputSchema;
11516
+ exports.mcpContinuumDaoMpaListingInputSchema = mcpContinuumDaoMpaListingInputSchema;
11517
+ exports.mcpContinuumDaoMpaListingOutputSchema = mcpContinuumDaoMpaListingOutputSchema;
11518
+ exports.mcpContinuumDaoMpaMailboxListInputSchema = mcpContinuumDaoMpaMailboxListInputSchema;
11519
+ exports.mcpContinuumDaoMpaMailboxListOutputSchema = mcpContinuumDaoMpaMailboxListOutputSchema;
11520
+ exports.mcpContinuumDaoMpaMailboxOpenInputSchema = mcpContinuumDaoMpaMailboxOpenInputSchema;
11521
+ exports.mcpContinuumDaoMpaMailboxOpenOutputSchema = mcpContinuumDaoMpaMailboxOpenOutputSchema;
11522
+ exports.mcpContinuumDaoMpaMailboxSendInputSchema = mcpContinuumDaoMpaMailboxSendInputSchema;
11523
+ exports.mcpContinuumDaoMpaMailboxSendOutputSchema = mcpContinuumDaoMpaMailboxSendOutputSchema;
11524
+ exports.mcpContinuumDaoMpaRetractInputSchema = mcpContinuumDaoMpaRetractInputSchema;
11525
+ exports.mcpContinuumDaoMpaRetractOutputSchema = mcpContinuumDaoMpaRetractOutputSchema;
11357
11526
  exports.mcpContinuumDaoProposalIdInputSchema = mcpContinuumDaoProposalIdInputSchema;
11358
11527
  exports.mcpContinuumDaoProposeBravoInputSchema = mcpContinuumDaoProposeBravoInputSchema;
11359
11528
  exports.mcpContinuumDaoProposeDeltaInputSchema = mcpContinuumDaoProposeDeltaInputSchema;
@@ -11361,6 +11530,8 @@ exports.mcpContinuumDaoRegisterProposalInputSchema = mcpContinuumDaoRegisterProp
11361
11530
  exports.mcpContinuumDaoRegisterProposalOutputSchema = mcpContinuumDaoRegisterProposalOutputSchema;
11362
11531
  exports.mcpContinuumDaoRequestDetachInputSchema = mcpContinuumDaoRequestDetachInputSchema;
11363
11532
  exports.mcpContinuumDaoSplitInputSchema = mcpContinuumDaoSplitInputSchema;
11533
+ exports.mcpContinuumDaoTechnocoreBindInputSchema = mcpContinuumDaoTechnocoreBindInputSchema;
11534
+ exports.mcpContinuumDaoTechnocoreBindOutputSchema = mcpContinuumDaoTechnocoreBindOutputSchema;
11364
11535
  exports.mcpContinuumDaoTokenIdInputSchema = mcpContinuumDaoTokenIdInputSchema;
11365
11536
  exports.mcpContinuumDaoTransferInputSchema = mcpContinuumDaoTransferInputSchema;
11366
11537
  exports.mcpContinuumDaoUndelegateInputSchema = mcpContinuumDaoUndelegateInputSchema;