@continuumdao/ctm-mpc-defi 0.2.52 → 0.2.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/catalog.cjs +44 -20
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +21 -0
- package/dist/agent/catalog.js +44 -20
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/continuum-dao/SKILL.md +4 -4
- package/dist/protocols/evm/continuum-dao/index.cjs +305 -44
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +110 -9
- package/dist/protocols/evm/continuum-dao/index.js +298 -44
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/package.json +1 -1
package/dist/agent/catalog.cjs
CHANGED
|
@@ -573,7 +573,7 @@ function listContinuumDaoDefaultAssets() {
|
|
|
573
573
|
}
|
|
574
574
|
return out;
|
|
575
575
|
}
|
|
576
|
-
var CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, CTM_TOKEN_DECIMALS, UNSET, CTM_TOKEN_ADDRESS, VOTING_ESCROW_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, CONTINUUM_DAO_DEPLOYMENTS;
|
|
576
|
+
var CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, CTM_TOKEN_DECIMALS, UNSET, CTM_TOKEN_ADDRESS, VOTING_ESCROW_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS, CONTINUUM_DAO_DEPLOYMENTS;
|
|
577
577
|
var init_constants2 = __esm({
|
|
578
578
|
"src/protocols/evm/continuum-dao/constants.ts"() {
|
|
579
579
|
CONTINUUM_DAO_PROTOCOL_ID = "continuum-dao";
|
|
@@ -599,18 +599,14 @@ var init_constants2 = __esm({
|
|
|
599
599
|
viem.getAddress("0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f");
|
|
600
600
|
viem.getAddress("0x176211869cA2b568f2A7D4EE941E073a821EE1ff");
|
|
601
601
|
CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID = "continuum-dao-marketplace";
|
|
602
|
-
viem.getAddress("0x76FF2CB03175900F1D83328C82D27EA9aeaF2355");
|
|
602
|
+
CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS = viem.getAddress("0x76FF2CB03175900F1D83328C82D27EA9aeaF2355");
|
|
603
603
|
viem.getAddress("0x4800F9f1dC1b6daCA841B71E0531F547D374168E");
|
|
604
|
-
[
|
|
605
|
-
viem.getAddress("0xd23eecBe0362F36b254F774C274823Cbfc482a10"),
|
|
606
|
-
viem.getAddress("0x482cdCbdd72ef307997153Ee7eb627B7a2348d34"),
|
|
607
|
-
viem.getAddress("0x14C189354702b7f2aC7b19e61522A41632226BD8")
|
|
608
|
-
];
|
|
609
604
|
CONTINUUM_DAO_DEPLOYMENTS = {
|
|
610
605
|
[CONTINUUM_DAO_LINEA_CHAIN_ID]: {
|
|
611
606
|
...UNSET,
|
|
612
607
|
ctm: CTM_TOKEN_ADDRESS,
|
|
613
|
-
votingEscrow: VOTING_ESCROW_LINEA_ADDRESS
|
|
608
|
+
votingEscrow: VOTING_ESCROW_LINEA_ADDRESS,
|
|
609
|
+
governor: CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS
|
|
614
610
|
},
|
|
615
611
|
[CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },
|
|
616
612
|
[CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {
|
|
@@ -620,6 +616,20 @@ var init_constants2 = __esm({
|
|
|
620
616
|
};
|
|
621
617
|
}
|
|
622
618
|
});
|
|
619
|
+
var init_committeeList = __esm({
|
|
620
|
+
"src/protocols/evm/continuum-dao/committeeList.ts"() {
|
|
621
|
+
}
|
|
622
|
+
});
|
|
623
|
+
var init_proposalCatalog = __esm({
|
|
624
|
+
"src/protocols/evm/continuum-dao/proposalCatalog.ts"() {
|
|
625
|
+
({
|
|
626
|
+
name: "linea",
|
|
627
|
+
label: "Linea",
|
|
628
|
+
chainId: "59144",
|
|
629
|
+
c3governor: viem.getAddress("0x58B610a359c870E0fc941139821a51F5aa23f14E")
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
});
|
|
623
633
|
var init_forum = __esm({
|
|
624
634
|
"src/protocols/evm/continuum-dao/forum.ts"() {
|
|
625
635
|
}
|
|
@@ -1285,7 +1295,11 @@ var multisignOutputSchema = zod.z.object({
|
|
|
1285
1295
|
bodyForSign: zod.z.record(zod.z.unknown()).describe(
|
|
1286
1296
|
"POST body fields without clientSig: keyList, pubKey, msgHash, msgRaw, destinationChainID, purpose, extraJSON, proposalTxParams (batch), messageHashes/messageRawBatch when N>1 txs."
|
|
1287
1297
|
),
|
|
1288
|
-
messageToSign: zod.z.string().describe("JSON.stringify(bodyForSign) \u2014 exact string to sign before adding clientSig.")
|
|
1298
|
+
messageToSign: zod.z.string().describe("JSON.stringify(bodyForSign) \u2014 exact string to sign before adding clientSig."),
|
|
1299
|
+
proposalCatalog: zod.z.object({
|
|
1300
|
+
payload: zod.z.record(zod.z.unknown()),
|
|
1301
|
+
canonical: zod.z.string()
|
|
1302
|
+
}).optional().describe("Unsigned POST /proposals/create body and the canonical string to sign before the multisign is submitted.")
|
|
1289
1303
|
}).describe(
|
|
1290
1304
|
"Unsigned mpc-auth multiSignRequest payload from protocol builders (used internally before management submit)."
|
|
1291
1305
|
);
|
|
@@ -3300,8 +3314,11 @@ var govOptionSchema = zod.z.object({
|
|
|
3300
3314
|
var forumTopicKeyField = zod.z.string().min(1).describe(
|
|
3301
3315
|
"URL of the Governance forum thread created first with ctm_continuum_dao_forum_create_topic (decision / election / treasury / constitution / admin). Must be /topic/:tid or /t/:tid. Ideas threads and the homepage are refused."
|
|
3302
3316
|
);
|
|
3317
|
+
var proposalTypeField = zod.z.number().int().min(0).max(4).describe("0 Admin, 1 Constitution, 2 Decision, 3 Election, 4 Treasury. Must match the forum thread section.");
|
|
3303
3318
|
var mcpContinuumDaoProposeBravoInputSchema = mcpMultisignInput({
|
|
3304
3319
|
title: zod.z.string().min(1).max(128),
|
|
3320
|
+
description: zod.z.string().describe("Catalog description stored by POST /proposals/create."),
|
|
3321
|
+
type: proposalTypeField,
|
|
3305
3322
|
actions: zod.z.array(govActionSchema).optional(),
|
|
3306
3323
|
governor: evmAddressSchema.optional(),
|
|
3307
3324
|
noOpTarget: evmAddressSchema.optional(),
|
|
@@ -3310,6 +3327,8 @@ var mcpContinuumDaoProposeBravoInputSchema = mcpMultisignInput({
|
|
|
3310
3327
|
});
|
|
3311
3328
|
var mcpContinuumDaoProposeDeltaInputSchema = mcpMultisignInput({
|
|
3312
3329
|
title: zod.z.string().min(1).max(128),
|
|
3330
|
+
description: zod.z.string().describe("Catalog description stored by POST /proposals/create."),
|
|
3331
|
+
type: proposalTypeField,
|
|
3313
3332
|
options: zod.z.array(govOptionSchema).min(2),
|
|
3314
3333
|
nWinners: zod.z.union([zod.z.string(), zod.z.number()]),
|
|
3315
3334
|
governor: evmAddressSchema.optional(),
|
|
@@ -3692,6 +3711,7 @@ var mcpContinuumDaoRegisterProposalInputSchema = zod.z.object({
|
|
|
3692
3711
|
forumKey: forumTopicKeyField,
|
|
3693
3712
|
type: zod.z.number().int().min(0).max(4),
|
|
3694
3713
|
configuration: zod.z.union([zod.z.literal(0), zod.z.literal(1)]),
|
|
3714
|
+
nWinners: zod.z.number().int().min(0).optional(),
|
|
3695
3715
|
actions: zod.z.array(zod.z.unknown()).optional(),
|
|
3696
3716
|
options: zod.z.array(zod.z.unknown()).optional()
|
|
3697
3717
|
});
|
|
@@ -4021,12 +4041,14 @@ var mcpContinuumDaoForumSignInEligibleOutputSchema = zod.z.object({
|
|
|
4021
4041
|
tokenId: zod.z.string().optional()
|
|
4022
4042
|
});
|
|
4023
4043
|
var mcpContinuumDaoForumSignInInputSchema = mcpMultisignInput({
|
|
4024
|
-
nodeKey: zod.z.string().optional().describe(
|
|
4044
|
+
nodeKey: zod.z.string().optional().describe(
|
|
4045
|
+
"Node key bound to this KeyGen. Always required on KeyGen forum sign-in, including when username is a custom name. The server fills it from this node when omitted. useNodeKeyUsername does not replace it."
|
|
4046
|
+
),
|
|
4025
4047
|
username: zod.z.string().min(2).max(16).regex(/^[A-Za-z0-9._-]+$/).optional().describe(
|
|
4026
4048
|
"Custom forum username for a wallet or a KeyGen. Ask the operator before calling. 2\u201316 letters, numbers, . _ -."
|
|
4027
4049
|
),
|
|
4028
4050
|
useNodeKeyUsername: zod.z.boolean().optional().describe(
|
|
4029
|
-
"Set true only after the operator declines a custom username. The forum assigns the first 16 characters of nodeKey."
|
|
4051
|
+
"Set true only after the operator declines a custom username. The forum assigns the first 16 characters of nodeKey as the username. Still pass nodeKey."
|
|
4030
4052
|
),
|
|
4031
4053
|
forumUrl: zod.z.string().optional()
|
|
4032
4054
|
});
|
|
@@ -7104,7 +7126,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7104
7126
|
actionId: "continuum-dao.propose-bravo",
|
|
7105
7127
|
protocolId: "continuum-dao",
|
|
7106
7128
|
chainCategory: "evm",
|
|
7107
|
-
description: "Build ContinuumDAO.propose for a Bravo (For/Against/Abstain) proposal
|
|
7129
|
+
description: "Build ContinuumDAO.propose for a Bravo (For/Against/Abstain) proposal and POST /proposals/create (pendingOnChain) before the multi-sign request is submitted. Requires description and type (0\u20134) matching the forum section. Refuses if getVotes(KeyGen) < live proposalThreshold(), the forum section does not match type, or propose() reverts. forumKey must be a Governance thread from ctm_continuum_dao_forum_create_topic. Ideas threads and the homepage are refused. Empty actions insert a no-op to the KeyGen address. Linea only. No billing legs. register_proposal is only a retry if this POST failed.",
|
|
7108
7130
|
prerequisites: [
|
|
7109
7131
|
"keyGen",
|
|
7110
7132
|
"Linea RPC",
|
|
@@ -7113,7 +7135,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7113
7135
|
"forumKey from forum_create_topic",
|
|
7114
7136
|
"governor-executed actions must simulate without revert"
|
|
7115
7137
|
],
|
|
7116
|
-
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP
|
|
7138
|
+
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP],
|
|
7117
7139
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoProposeBravo" },
|
|
7118
7140
|
inputZod: mcpContinuumDaoProposeBravoInputSchema
|
|
7119
7141
|
}),
|
|
@@ -7122,7 +7144,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7122
7144
|
actionId: "continuum-dao.propose-delta",
|
|
7123
7145
|
protocolId: "continuum-dao",
|
|
7124
7146
|
chainCategory: "evm",
|
|
7125
|
-
description: "Build ContinuumDAO.propose for a Delta multi-option proposal
|
|
7147
|
+
description: "Build ContinuumDAO.propose for a Delta multi-option proposal and POST /proposals/create (pendingOnChain) before the multi-sign request is submitted. Requires description and type (0\u20134) matching the forum section. Refuses if getVotes(KeyGen) < live proposalThreshold(), the forum section does not match type, or propose() reverts. forumKey must be a Governance thread from ctm_continuum_dao_forum_create_topic. Empty options get a no-op so indices increment. Linea only. No billing legs.",
|
|
7126
7148
|
prerequisites: [
|
|
7127
7149
|
"keyGen",
|
|
7128
7150
|
"at least 2 options",
|
|
@@ -7131,7 +7153,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7131
7153
|
"forumKey from forum_create_topic",
|
|
7132
7154
|
"governor-executed actions must simulate without revert"
|
|
7133
7155
|
],
|
|
7134
|
-
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP
|
|
7156
|
+
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP],
|
|
7135
7157
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp" },
|
|
7136
7158
|
inputZod: mcpContinuumDaoProposeDeltaInputSchema
|
|
7137
7159
|
}),
|
|
@@ -7180,11 +7202,11 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7180
7202
|
actionId: "continuum-dao.forum-sign-in",
|
|
7181
7203
|
protocolId: "continuum-dao",
|
|
7182
7204
|
chainCategory: "evm",
|
|
7183
|
-
description: "Build an EIP-712 forum login multi-sign (no EVM tx). Refuses when this node already has a live forum session for the KeyGen (getForumSession plus forum_me loggedIn) and returns that ticket instead of creating a sign request. Checks current balanceOfNFT on an owned or attached veCTM against MultiSignAgentWallet.veCtmThresholdPower and refuses if that power is short, so other nodes never enter the sign loop. Ask the operator for a custom username (2\u201316 letters, numbers, . _ -) and pass it as username. If they decline, set useNodeKeyUsername true
|
|
7205
|
+
description: "Build an EIP-712 forum login multi-sign (no EVM tx). Refuses when this node already has a live forum session for the KeyGen (getForumSession plus forum_me loggedIn) and returns that ticket instead of creating a sign request. Checks current balanceOfNFT on an owned or attached veCTM against MultiSignAgentWallet.veCtmThresholdPower and refuses if that power is short, so other nodes never enter the sign loop. Always include nodeKey from this node; a custom username does not omit it. Ask the operator for a custom username (2\u201316 letters, numbers, . _ -) and pass it as username. If they decline, set useNodeKeyUsername true; the forum assigns the first 16 characters of the node key as the username. After Get Sig, node-app stores the ticket on the node. The forum stores the verified node key on that user, including when the user already exists, which is what allows MPA Wallet Chat.",
|
|
7184
7206
|
prerequisites: [
|
|
7185
7207
|
"keyGen",
|
|
7186
7208
|
"current balanceOfNFT on an owned or attached veCTM at or above MultiSignAgentWallet.veCtmThresholdPower",
|
|
7187
|
-
"username from the operator
|
|
7209
|
+
"nodeKey from this node, plus username from the operator or useNodeKeyUsername"
|
|
7188
7210
|
],
|
|
7189
7211
|
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP, "ctm_continuum_dao_forum_me"],
|
|
7190
7212
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoForumSignIn" },
|
|
@@ -9403,7 +9425,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
9403
9425
|
actionId: "continuum-dao.register-proposal",
|
|
9404
9426
|
protocolId: "continuum-dao",
|
|
9405
9427
|
chainCategory: "evm",
|
|
9406
|
-
description: "POST /proposals/create
|
|
9428
|
+
description: "Retry POST /proposals/create when the propose tool\u2019s optimistic catalog write failed. The node signs with Ed25519. Does not revert a chain tx.",
|
|
9407
9429
|
prerequisites: ["onchainId from hashProposal or ProposalCreated", "title", "proposer", "forumKey", "type", "configuration"],
|
|
9408
9430
|
followUp: [],
|
|
9409
9431
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoRegisterProposal" },
|
|
@@ -9667,7 +9689,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
9667
9689
|
actionId: "continuum-dao.forum-me",
|
|
9668
9690
|
protocolId: "continuum-dao",
|
|
9669
9691
|
chainCategory: "evm",
|
|
9670
|
-
description: "Current forum user, votes, canPropose (Governance), canPostIdea (Ideas), and canPostMpa (MPA Wallet Chat listings / mailbox).",
|
|
9692
|
+
description: "Current forum user, votes, canPropose (Governance), canPostIdea (Ideas), and canPostMpa (MPA Wallet Chat listings / mailbox). canPropose is governor getVotes(address, clock-1) >= proposalThreshold(). Null votes means that read failed \u2014 do not say the KeyGen has no veCTM. Attachment is get_ve_ctm_attach_status, not this flag.",
|
|
9671
9693
|
prerequisites: [],
|
|
9672
9694
|
followUp: [
|
|
9673
9695
|
"ctm_continuum_dao_forum_unread",
|
|
@@ -12355,6 +12377,8 @@ var continuumDaoMarketplaceProtocolModule = {
|
|
|
12355
12377
|
|
|
12356
12378
|
// src/protocols/evm/continuum-dao/index.ts
|
|
12357
12379
|
init_constants2();
|
|
12380
|
+
init_committeeList();
|
|
12381
|
+
init_proposalCatalog();
|
|
12358
12382
|
init_governance();
|
|
12359
12383
|
init_simulateProposal();
|
|
12360
12384
|
init_foundryProposalScript();
|
|
@@ -14363,7 +14387,7 @@ var PROTOCOL_SUPPORT_ADVISORS = {
|
|
|
14363
14387
|
if (ve) tokens.push({ address: ve, symbol: "veCTM", roles: ["position_nft"] });
|
|
14364
14388
|
return {
|
|
14365
14389
|
tokens,
|
|
14366
|
-
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). After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. 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.
|
|
14390
|
+
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). After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. 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. build_propose_* writes POST /proposals/create before the multi-sign request; register_proposal is only a retry. 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. After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. 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. build_propose_* writes POST /proposals/create before the multi-sign request; register_proposal is only a retry. Queue is not implemented.`
|
|
14367
14391
|
};
|
|
14368
14392
|
}
|
|
14369
14393
|
}),
|