@sherwoodagent/cli 0.9.0 → 0.10.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.
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  queryApprovals,
11
11
  queryJoinRequests,
12
12
  revokeAttestation
13
- } from "./chunk-HKZONPXW.js";
13
+ } from "./chunk-DTSTJUZH.js";
14
14
  import {
15
15
  approveDepositor,
16
16
  deposit,
@@ -28,7 +28,7 @@ import {
28
28
  setTextRecord,
29
29
  setVaultAddress,
30
30
  simulateBatch
31
- } from "./chunk-Q37V65B6.js";
31
+ } from "./chunk-3EBFJLQR.js";
32
32
  import {
33
33
  AGENT_REGISTRY,
34
34
  EAS_SCHEMAS,
@@ -44,7 +44,7 @@ import {
44
44
  UNISWAP_QUOTER_V2_ABI,
45
45
  VENICE,
46
46
  VENICE_STAKING_ABI
47
- } from "./chunk-OUES74ID.js";
47
+ } from "./chunk-SGYOOHML.js";
48
48
  import {
49
49
  VALID_NETWORKS,
50
50
  cacheGroupId,
@@ -1687,6 +1687,7 @@ import { readFileSync } from "fs";
1687
1687
 
1688
1688
  // src/lib/governor.ts
1689
1689
  var PROPOSAL_STATES = [
1690
+ "Draft",
1690
1691
  "Pending",
1691
1692
  "Approved",
1692
1693
  "Rejected",
@@ -1695,6 +1696,21 @@ var PROPOSAL_STATES = [
1695
1696
  "Settled",
1696
1697
  "Cancelled"
1697
1698
  ];
1699
+ var PROPOSAL_STATE = {
1700
+ Draft: 0,
1701
+ Pending: 1,
1702
+ Approved: 2,
1703
+ Rejected: 3,
1704
+ Expired: 4,
1705
+ Executed: 5,
1706
+ Settled: 6,
1707
+ Cancelled: 7
1708
+ };
1709
+ var VOTE_TYPE = {
1710
+ For: 0,
1711
+ Against: 1,
1712
+ Abstain: 2
1713
+ };
1698
1714
  function parseDuration(input2) {
1699
1715
  const match = input2.match(/^(\d+)(d|h|m|s)?$/);
1700
1716
  if (!match) throw new Error(`Invalid duration: ${input2}`);
@@ -1797,7 +1813,7 @@ async function getCapitalSnapshot(proposalId) {
1797
1813
  args: [proposalId]
1798
1814
  });
1799
1815
  }
1800
- async function propose(vault, metadataURI, performanceFeeBps, strategyDuration, calls, splitIndex) {
1816
+ async function propose(vault, metadataURI, performanceFeeBps, strategyDuration, calls, splitIndex, coProposers = []) {
1801
1817
  const wallet = getWalletClient();
1802
1818
  const client = getPublicClient();
1803
1819
  const hash = await wallet.writeContract({
@@ -1806,7 +1822,7 @@ async function propose(vault, metadataURI, performanceFeeBps, strategyDuration,
1806
1822
  address: getGovernorAddress(),
1807
1823
  abi: SYNDICATE_GOVERNOR_ABI,
1808
1824
  functionName: "propose",
1809
- args: [vault, metadataURI, performanceFeeBps, strategyDuration, calls, splitIndex]
1825
+ args: [vault, metadataURI, performanceFeeBps, strategyDuration, calls, splitIndex, coProposers]
1810
1826
  });
1811
1827
  const receipt = await client.waitForTransactionReceipt({ hash });
1812
1828
  let proposalId;
@@ -2119,7 +2135,7 @@ function registerProposalCommands(program2) {
2119
2135
  process.exit(1);
2120
2136
  }
2121
2137
  });
2122
- proposal.command("list").description("List proposals").option("--vault <address>", "Filter by vault").option("--state <filter>", "Filter by state: pending, approved, executed, settled, all", "all").action(async (opts) => {
2138
+ proposal.command("list").description("List proposals").option("--vault <address>", "Filter by vault").option("--state <filter>", "Filter by state: draft, pending, approved, executed, settled, all", "all").action(async (opts) => {
2123
2139
  const spinner = ora5("Loading proposals...").start();
2124
2140
  try {
2125
2141
  const count = await proposalCount();
@@ -2214,8 +2230,9 @@ function registerProposalCommands(program2) {
2214
2230
  console.log(LABEL(" Votes"));
2215
2231
  console.log(W(` For: ${formatShares(p.votesFor)}`));
2216
2232
  console.log(W(` Against: ${formatShares(p.votesAgainst)}`));
2233
+ console.log(W(` Abstain: ${formatShares(p.votesAbstain)}`));
2217
2234
  console.log(W(` Quorum: ${quorumNeeded}`));
2218
- if (state === 4 || state === 5) {
2235
+ if (state === PROPOSAL_STATE.Executed || state === PROPOSAL_STATE.Settled) {
2219
2236
  try {
2220
2237
  const cap = await getCapitalSnapshot(id);
2221
2238
  console.log();
@@ -2239,15 +2256,20 @@ function registerProposalCommands(program2) {
2239
2256
  process.exit(1);
2240
2257
  }
2241
2258
  });
2242
- proposal.command("vote").description("Cast a vote on a pending proposal").requiredOption("--id <proposalId>", "Proposal ID").requiredOption("--support <yes|no>", "Vote direction: yes or no").action(async (opts) => {
2259
+ proposal.command("vote").description("Cast a vote on a pending proposal").requiredOption("--id <proposalId>", "Proposal ID").requiredOption("--support <for|against|abstain>", "Vote direction: for, against, or abstain").action(async (opts) => {
2243
2260
  try {
2244
2261
  const proposalId = parseBigIntArg(opts.id, "proposal ID");
2245
- const support = opts.support.toLowerCase() === "yes";
2262
+ const supportRaw = String(opts.support).toLowerCase();
2263
+ const support = supportRaw === "yes" || supportRaw === "for" ? VOTE_TYPE.For : supportRaw === "no" || supportRaw === "against" ? VOTE_TYPE.Against : supportRaw === "abstain" ? VOTE_TYPE.Abstain : null;
2264
+ if (support === null) {
2265
+ console.error(chalk5.red(`Invalid support value "${opts.support}". Use for|against|abstain.`));
2266
+ process.exit(1);
2267
+ }
2246
2268
  const account = getAccount();
2247
2269
  const spinner = ora5("Loading proposal...").start();
2248
2270
  const p = await getProposal(proposalId);
2249
2271
  const state = await getProposalState(proposalId);
2250
- if (state !== 0) {
2272
+ if (state !== PROPOSAL_STATE.Pending) {
2251
2273
  spinner.fail(`Proposal is ${PROPOSAL_STATES[state] || "Unknown"}, not Pending`);
2252
2274
  process.exit(1);
2253
2275
  }
@@ -2263,7 +2285,9 @@ function registerProposalCommands(program2) {
2263
2285
  SEP();
2264
2286
  console.log(W(` Proposal: #${proposalId}`));
2265
2287
  console.log(W(` Vault: ${G(p.vault)}`));
2266
- console.log(W(` Support: ${support ? G("YES") : chalk5.red("NO")}`));
2288
+ console.log(W(
2289
+ ` Support: ${support === VOTE_TYPE.For ? G("FOR") : support === VOTE_TYPE.Against ? chalk5.red("AGAINST") : DIM("ABSTAIN")}`
2290
+ ));
2267
2291
  console.log(W(` Weight: ${formatShares(weight)} shares`));
2268
2292
  SEP();
2269
2293
  const voteSpinner = ora5({ text: W("Submitting vote..."), color: "green" }).start();
@@ -2282,7 +2306,7 @@ function registerProposalCommands(program2) {
2282
2306
  const proposalId = parseBigIntArg(opts.id, "proposal ID");
2283
2307
  const spinner = ora5("Loading proposal...").start();
2284
2308
  const state = await getProposalState(proposalId);
2285
- if (state !== 1) {
2309
+ if (state !== PROPOSAL_STATE.Approved) {
2286
2310
  spinner.fail(`Proposal is ${PROPOSAL_STATES[state] || "Unknown"}, not Approved`);
2287
2311
  process.exit(1);
2288
2312
  }
@@ -2309,7 +2333,7 @@ function registerProposalCommands(program2) {
2309
2333
  const spinner = ora5("Loading proposal...").start();
2310
2334
  const p = await getProposal(proposalId);
2311
2335
  const state = await getProposalState(proposalId);
2312
- if (state !== 4) {
2336
+ if (state !== PROPOSAL_STATE.Executed) {
2313
2337
  spinner.fail(`Proposal is ${PROPOSAL_STATES[state] || "Unknown"}, not Executed`);
2314
2338
  process.exit(1);
2315
2339
  }
@@ -2348,7 +2372,7 @@ function registerProposalCommands(program2) {
2348
2372
  const proposalId = parseBigIntArg(opts.id, "proposal ID");
2349
2373
  const spinner = ora5("Loading proposal...").start();
2350
2374
  const state = await getProposalState(proposalId);
2351
- if (state === 5 || state === 6) {
2375
+ if (state === PROPOSAL_STATE.Settled || state === PROPOSAL_STATE.Cancelled) {
2352
2376
  spinner.fail(`Proposal is already ${PROPOSAL_STATES[state]}`);
2353
2377
  process.exit(1);
2354
2378
  }
@@ -2358,7 +2382,7 @@ function registerProposalCommands(program2) {
2358
2382
  hash = await emergencyCancel(proposalId);
2359
2383
  spinner.succeed(G("Emergency cancelled"));
2360
2384
  } else {
2361
- if (state !== 0 && state !== 1) {
2385
+ if (state !== PROPOSAL_STATE.Draft && state !== PROPOSAL_STATE.Pending) {
2362
2386
  spinner.fail(`Proposal is ${PROPOSAL_STATES[state] || "Unknown"} \u2014 use --emergency for non-pending/approved`);
2363
2387
  process.exit(1);
2364
2388
  }
@@ -2502,7 +2526,7 @@ try {
2502
2526
  } catch {
2503
2527
  }
2504
2528
  async function loadXmtp() {
2505
- return import("./xmtp-S4VRXMFK.js");
2529
+ return import("./xmtp-JC5AUYRG.js");
2506
2530
  }
2507
2531
  var G3 = chalk7.green;
2508
2532
  var W3 = chalk7.white;
@@ -3277,7 +3301,7 @@ ${info.name} (${info.type})`);
3277
3301
  }
3278
3302
  });
3279
3303
  try {
3280
- const { registerChatCommands } = await import("./chat-BNYWD3EL.js");
3304
+ const { registerChatCommands } = await import("./chat-4Q7G3DFO.js");
3281
3305
  registerChatCommands(program);
3282
3306
  } catch {
3283
3307
  program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
@@ -3287,14 +3311,14 @@ try {
3287
3311
  process.exit(1);
3288
3312
  });
3289
3313
  }
3290
- var { registerSessionCommands } = await import("./session-QQSHCGNK.js");
3314
+ var { registerSessionCommands } = await import("./session-FVFIACYW.js");
3291
3315
  registerSessionCommands(program);
3292
3316
  registerVeniceCommands(program);
3293
3317
  registerAllowanceCommands(program);
3294
3318
  registerIdentityCommands(program);
3295
3319
  registerProposalCommands(program);
3296
3320
  registerGovernorCommands(program);
3297
- var { registerResearchCommands } = await import("./research-57SKO27M.js");
3321
+ var { registerResearchCommands } = await import("./research-3XEIOMDP.js");
3298
3322
  registerResearchCommands(program);
3299
3323
  var configCmd = program.command("config");
3300
3324
  configCmd.command("set").description("Save settings to ~/.sherwood/config.json (persists across sessions)").option("--private-key <key>", "Wallet private key (0x-prefixed)").option("--vault <address>", "Default SyndicateVault address").option("--rpc <url>", "Custom RPC URL for the active --chain network").action((opts) => {