@continuumdao/ctm-mpc-defi 0.2.45 → 0.2.47
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 +455 -131
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1331 -27
- package/dist/agent/catalog.js +452 -132
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/continuum-dao/SKILL.md +11 -6
- package/dist/protocols/evm/continuum-dao/index.cjs +3902 -2523
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +3641 -11
- package/dist/protocols/evm/continuum-dao/index.js +3832 -2443
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -43,9 +43,9 @@ Do **not** answer from `ctm_continuum_dao_fetch_proposals` or backend `status` a
|
|
|
43
43
|
- **`unknown`** — no on-chain overlay (missing governor/RPC, or a failed `state` read). Do not call these live.
|
|
44
44
|
4. If `overlay` is `backend-only`, say you could not confirm live Governor state.
|
|
45
45
|
|
|
46
|
-
For one proposal, call `ctm_continuum_dao_explain_proposal` and read `briefing` aloud (every action / Delta option, no-ops labeled signaling
|
|
46
|
+
For one proposal, call `ctm_continuum_dao_explain_proposal` and read `briefing` aloud (every action / Delta option, no-ops labeled signaling). `network.c3governor` is always present; call C3 out only when `network.name` is not Linea. Catalog ids **-2** and **-1** are the two proposals on the superseded Linea governor `0x4800F9f1dC1b6daCA841B71E0531F547D374168E`. Do not vote from this protocol skill.
|
|
47
47
|
|
|
48
|
-
Operator presentation and vote policy live in the node catalogue (mpc-config): load skills **`continuum-dao-proposals`** and **`continuum-dao-vote-policy`** via `agent_load_skill`. To **create** a proposal in chat, load **`continuum-dao-compose-proposal`** (interactive only). Cron must never propose or load that skill — vote and governor Join only.
|
|
48
|
+
Operator presentation and vote policy live in the node catalogue (mpc-config): load skills **`continuum-dao-proposals`** and **`continuum-dao-vote-policy`** via `agent_load_skill`. To **create** or **draft** a proposal in chat, load **`continuum-dao-compose-proposal`** (interactive only). Load MCP servers **etherscan** (official V2) and **foundry** first. That skill interviews type → per-action contract + function → `etherscan__get_contract_abi` + `ctm_continuum_dao_compose_proposal_action` (ABI + type-check) → input table → offer `ctm_continuum_dao_simulate_proposal` and run the returned **Foundry forge scripts** (`foundry__create_solidity_file` then `foundry__forge_script` on a Linea fork, no `--broadcast`) for both the preferred KeyGen and any other EOA. Isolated `eth_call` / `cast call` is not the execute sim. Cron must never propose or load that skill — vote and governor Join only.
|
|
49
49
|
|
|
50
50
|
When a proposal has a `forumKey`, fetch that thread (`ctm_continuum_dao_forum_resolve` then `forum_fetch_thread` / `forum_fetch_post`) before voting. Check `section` on the thread against the proposal type. List recent posts with `forum_recent` (`hours` or `since`; privilege-filtered, whole forum; id, title, username, createdAt), or find matching posts with `forum_search` (title of a new thread or body text, case-insensitive; optional `hours` / `since`), then `forum_fetch_post` on a returned `id`. Walk a user's posts with `forum_user_post_ids` then `forum_fetch_post`. Writes need a `ticket` from forum EIP-712 login. `forum_unread` / `forum_mark_read` / `forum_mark_unread` are **interactive inbox** tools (NodeBB Unread is per topic). Confirm before `forum_mark_read` with `all: true`. `forum_delete` is **admin/moderator only** (not the post owner): exactly one of `pid`, `tid`/`url`, or `username`; optional `hours` / `since` (default all). Confirm with the operator before deleting. Never from cron.
|
|
51
51
|
|
|
@@ -64,8 +64,9 @@ When a proposal has a `forumKey`, fetch that thread (`ctm_continuum_dao_forum_re
|
|
|
64
64
|
1. `forum_sign_in_eligible` then `build_forum_sign_in_multisign` (if no ticket).
|
|
65
65
|
2. If it is only an idea: `forum_create_idea`. Stop (no propose).
|
|
66
66
|
3. If it is a proposal: `forum_create_topic` with the matching Governance `section` (proposal-threshold veCTM). Keep the returned `url`.
|
|
67
|
-
4. `
|
|
68
|
-
5.
|
|
67
|
+
4. Compose actions with `ctm_continuum_dao_compose_proposal_action` (prefer ABI from `etherscan__get_contract_abi` with chainid 59144/59141, type-check values, preview table). Then offer `ctm_continuum_dao_simulate_proposal` — pass `account` for another EOA, or `keyGenId` / omit `account` for the preferred KeyGen. Write `foundry.files` and run `foundry__forge_script` on a Linea fork with no `--broadcast`. Do **not** treat isolated `eth_call` as success. Do **not** submit if `ok` is false or a forge script reverts.
|
|
68
|
+
5. `build_propose_bravo_multisign` or `build_propose_delta_multisign` with that `url` as `forumKey` (KeyGen submit only). These builders refuse a reverting `propose()` or (when the RPC supports it) sequential `eth_simulateV1` execute. Sequential execute still requires the forge scripts above.
|
|
69
|
+
6. After the propose tx is mined, `register_proposal` with the same `forumKey`.
|
|
69
70
|
|
|
70
71
|
`forumKey` must match `/topic/:tid` or `/t/:tid` on forum.continuumdao.org. Builders and `register_proposal` throw otherwise.
|
|
71
72
|
|
|
@@ -78,7 +79,9 @@ Forum KeyGen sign-in is EIP-712 multi-sign (no EVM tx). Always check eligibility
|
|
|
78
79
|
|
|
79
80
|
Forum sign-in and sign-out are **agent/MCP only**. There is no Sign in / Sign out control in the node-app Compose header.
|
|
80
81
|
|
|
81
|
-
Propose builders
|
|
82
|
+
Propose builders **hard-fail** if `getVotes(KeyGen) <` live `proposalThreshold()` — no sign request is created. On-chain rule (vectm `ContinuumDAO`): `max(1000 ether, 1% of past total voting power)`. Do not hardcode `1000`. The standalone simulate tool only **warns** when a different `account` is short.
|
|
83
|
+
|
|
84
|
+
`build_propose_*` dry-runs `propose()` from the preferred signer KeyGen and refuses a revert or a short `getVotes`. `ctm_continuum_dao_simulate_proposal` is the same voting-power + `propose()` dry-run for a **different** `account` (draft / committee EOA) without submitting. It always reads `getVotes(account)` vs live `proposalThreshold()`; if the address is short, the result includes `warning` — read that aloud (Committee is not exempt). Both paths return `foundry.files`: a propose script (prank the proposer) and sequential execute scripts (prank the governor; no timelock). Bravo is one execute script; Delta is one file per option. Later actions in the same `run()` see earlier state. Isolated `eth_call` / `cast call` cannot do that. `forumKey` is not required on the standalone simulate tool.
|
|
82
85
|
|
|
83
86
|
## Tools
|
|
84
87
|
|
|
@@ -97,6 +100,8 @@ Propose builders read live `proposalThreshold()` and refuse if `getVotes(KeyGen)
|
|
|
97
100
|
| Transfer NFT | `ctm_continuum_dao_build_transfer_multisign` |
|
|
98
101
|
| Attach veCTM | `ctm_continuum_dao_build_attach_multisign` |
|
|
99
102
|
| Request detach | `ctm_continuum_dao_build_request_detach_multisign` |
|
|
103
|
+
| Compose / validate a proposal action (ABI + types + table) | `ctm_continuum_dao_compose_proposal_action` |
|
|
104
|
+
| Simulate proposal (draft / any EOA) | `ctm_continuum_dao_simulate_proposal` |
|
|
100
105
|
| Propose Bravo | `ctm_continuum_dao_build_propose_bravo_multisign` |
|
|
101
106
|
| Propose Delta | `ctm_continuum_dao_build_propose_delta_multisign` |
|
|
102
107
|
| Vote Bravo | `ctm_continuum_dao_build_cast_vote_bravo_multisign` |
|
|
@@ -155,6 +160,6 @@ Attach and `increase_unlock_time` are unpaid (no month activation, no `globalNon
|
|
|
155
160
|
|
|
156
161
|
Attached locks block transfer / merge / split / withdraw / liquidate on-chain (`checkNotAttached`).
|
|
157
162
|
|
|
158
|
-
Propose and vote use `getVotes` at the **KeyGen** address. If the KeyGen has delegated away (`fetch_delegates` → `self: false`), that power sits with the delegatee until `build_undelegate_multisign` (on-chain this is `delegate(self)`; there is no `undelegate()`). Attach-to-node is unrelated. Propose requires `getVotes(keyAddress) >= proposalThreshold()`. The live threshold is `max(1000e18 ve power, 1% of total voting power)`, not a flat 1000. `ctm_continuum_dao_build_propose_*` throws if the KeyGen is below the live bar.
|
|
163
|
+
Propose and vote use `getVotes` at the **KeyGen** address. If the KeyGen has delegated away (`fetch_delegates` → `self: false`), that power sits with the delegatee until `build_undelegate_multisign` (on-chain this is `delegate(self)`; there is no `undelegate()`). Attach-to-node is unrelated. Propose requires `getVotes(keyAddress) >= proposalThreshold()`. The live threshold is `max(1000e18 ve power, 1% of total voting power)`, not a flat 1000. `ctm_continuum_dao_build_propose_*` **hard-fails** (throws, no sign request) if the KeyGen is below the live bar. `ctm_continuum_dao_simulate_proposal` on another address only sets `warning`.
|
|
159
164
|
|
|
160
165
|
All `ctm_continuum_dao_build_*_multisign` tools return `{ requestId }` on success (shared gas/submit section appended by the server).
|