@sherwoodagent/cli 0.25.1 → 0.25.2

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 (31) hide show
  1. package/dist/{chat-52PWNH7Y.js → chat-MYRUIM54.js} +4 -4
  2. package/dist/{chunk-JEVBC7DV.js → chunk-2SNPCWB4.js} +2 -2
  3. package/dist/{chunk-7PCI3WHQ.js → chunk-2UP63CYI.js} +2 -2
  4. package/dist/{chunk-QBNWBWD3.js → chunk-G6LOQCM3.js} +81 -2
  5. package/dist/chunk-G6LOQCM3.js.map +1 -0
  6. package/dist/{chunk-VQIFAXUY.js → chunk-L5RWZSET.js} +2 -2
  7. package/dist/{chunk-ZPLUJT4V.js → chunk-O7QIRMJO.js} +26 -1
  8. package/dist/chunk-O7QIRMJO.js.map +1 -0
  9. package/dist/{eas-YZIHYQAI.js → eas-DGLNPNWX.js} +3 -3
  10. package/dist/{governor-YPDAOT3S.js → governor-3PINJ2X2.js} +3 -3
  11. package/dist/index.js +71 -17
  12. package/dist/index.js.map +1 -1
  13. package/dist/{price-SWNEGWO4.js → price-76BEXJDI.js} +2 -2
  14. package/dist/{research-PH77VSE4.js → research-FIX3U4LG.js} +3 -3
  15. package/dist/{session-NMA4RLKC.js → session-6DJ4A2Q3.js} +5 -5
  16. package/dist/{trade-N2A74UPX.js → trade-MDVM4XFF.js} +6 -6
  17. package/dist/{xmtp-YNOGIZ4G.js → xmtp-64CYLVLO.js} +3 -3
  18. package/package.json +1 -1
  19. package/dist/chunk-QBNWBWD3.js.map +0 -1
  20. package/dist/chunk-ZPLUJT4V.js.map +0 -1
  21. /package/dist/{chat-52PWNH7Y.js.map → chat-MYRUIM54.js.map} +0 -0
  22. /package/dist/{chunk-JEVBC7DV.js.map → chunk-2SNPCWB4.js.map} +0 -0
  23. /package/dist/{chunk-7PCI3WHQ.js.map → chunk-2UP63CYI.js.map} +0 -0
  24. /package/dist/{chunk-VQIFAXUY.js.map → chunk-L5RWZSET.js.map} +0 -0
  25. /package/dist/{eas-YZIHYQAI.js.map → eas-DGLNPNWX.js.map} +0 -0
  26. /package/dist/{governor-YPDAOT3S.js.map → governor-3PINJ2X2.js.map} +0 -0
  27. /package/dist/{price-SWNEGWO4.js.map → price-76BEXJDI.js.map} +0 -0
  28. /package/dist/{research-PH77VSE4.js.map → research-FIX3U4LG.js.map} +0 -0
  29. /package/dist/{session-NMA4RLKC.js.map → session-6DJ4A2Q3.js.map} +0 -0
  30. /package/dist/{trade-N2A74UPX.js.map → trade-MDVM4XFF.js.map} +0 -0
  31. /package/dist/{xmtp-YNOGIZ4G.js.map → xmtp-64CYLVLO.js.map} +0 -0
package/dist/index.js CHANGED
@@ -6,17 +6,20 @@ import {
6
6
  executeBatch,
7
7
  getAssetDecimals,
8
8
  getBalance,
9
+ getShareBalance,
9
10
  getVaultAddress,
10
11
  getVaultInfo,
11
12
  isAgent,
12
13
  preflightDeposit,
14
+ preflightRedeem,
15
+ redeem,
13
16
  registerAgent,
14
17
  removeDepositor,
15
18
  resolveSyndicate,
16
19
  resolveVaultSyndicate,
17
20
  setTextRecord,
18
21
  setVaultAddress
19
- } from "./chunk-QBNWBWD3.js";
22
+ } from "./chunk-G6LOQCM3.js";
20
23
  import {
21
24
  UniswapProvider,
22
25
  applySlippage,
@@ -27,7 +30,7 @@ import {
27
30
  getQuote,
28
31
  listModels,
29
32
  provisionApiKey
30
- } from "./chunk-VQIFAXUY.js";
33
+ } from "./chunk-L5RWZSET.js";
31
34
  import {
32
35
  PROPOSAL_STATE,
33
36
  PROPOSAL_STATES,
@@ -58,7 +61,7 @@ import {
58
61
  setVotingPeriod,
59
62
  settleProposal,
60
63
  vote
61
- } from "./chunk-7PCI3WHQ.js";
64
+ } from "./chunk-2UP63CYI.js";
62
65
  import {
63
66
  fetchMetadata,
64
67
  uploadMetadata
@@ -72,7 +75,7 @@ import {
72
75
  queryJoinRequests,
73
76
  revokeAttestation,
74
77
  stripReferrerPrefix
75
- } from "./chunk-JEVBC7DV.js";
78
+ } from "./chunk-2SNPCWB4.js";
76
79
  import {
77
80
  AERODROME,
78
81
  AGENT_REGISTRY,
@@ -93,7 +96,7 @@ import {
93
96
  UNISWAP,
94
97
  VENICE,
95
98
  VENICE_STAKING_ABI
96
- } from "./chunk-ZPLUJT4V.js";
99
+ } from "./chunk-O7QIRMJO.js";
97
100
  import {
98
101
  formatContractError,
99
102
  getAccount,
@@ -139,7 +142,7 @@ import {
139
142
  import { config as loadDotenv } from "dotenv";
140
143
  import { createRequire } from "module";
141
144
  import { Command, Option } from "commander";
142
- import { parseUnits as parseUnits5, isAddress as isAddress5 } from "viem";
145
+ import { parseUnits as parseUnits5, formatUnits as formatUnits5, isAddress as isAddress5 } from "viem";
143
146
  import chalk8 from "chalk";
144
147
  import ora7 from "ora";
145
148
  import { input, confirm, select } from "@inquirer/prompts";
@@ -1293,9 +1296,9 @@ function registerStrategyTemplateCommands(strategy2) {
1293
1296
  console.error(chalk.red("Missing --name, --performance-fee, or --duration. Use --write-calls to skip proposal submission."));
1294
1297
  process.exit(1);
1295
1298
  }
1296
- const { propose: propose2 } = await import("./governor-YPDAOT3S.js");
1299
+ const { propose: propose2 } = await import("./governor-3PINJ2X2.js");
1297
1300
  const { pinJSON } = await import("./ipfs-22YLNQ2C.js");
1298
- const { parseDuration: parseDuration2 } = await import("./governor-YPDAOT3S.js");
1301
+ const { parseDuration: parseDuration2 } = await import("./governor-3PINJ2X2.js");
1299
1302
  const performanceFeeBps = BigInt(opts.performanceFee);
1300
1303
  if (performanceFeeBps < 0n || performanceFeeBps > 10000n) {
1301
1304
  console.error(chalk.red("--performance-fee must be 0-10000 (basis points)"));
@@ -1403,7 +1406,7 @@ function registerStrategyTemplateCommands(strategy2) {
1403
1406
  let prices = [];
1404
1407
  let priceSource = null;
1405
1408
  try {
1406
- const { getTokenPricesInAsset } = await import("./price-SWNEGWO4.js");
1409
+ const { getTokenPricesInAsset } = await import("./price-76BEXJDI.js");
1407
1410
  prices = await getTokenPricesInAsset({
1408
1411
  tokens: allocations.map((a, i) => ({
1409
1412
  token: a.token,
@@ -1950,7 +1953,7 @@ function registerVeniceCommands(program2) {
1950
1953
  console.log(chalk2.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
1951
1954
  console.log(chalk2.dim(" Saved to ~/.sherwood/config.json"));
1952
1955
  try {
1953
- const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-YZIHYQAI.js");
1956
+ const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-DGLNPNWX.js");
1954
1957
  const { uid } = await createVeniceProvisionAttestation(account.address);
1955
1958
  if (uid !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
1956
1959
  console.log(chalk2.dim(` Attested: ${getEasScanUrl2(uid)}`));
@@ -2101,7 +2104,7 @@ ${opts.prompt}`;
2101
2104
  console.log(chalk2.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
2102
2105
  }
2103
2106
  try {
2104
- const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-YZIHYQAI.js");
2107
+ const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-DGLNPNWX.js");
2105
2108
  const { keccak256, toHex, isAddress: isAddr } = await import("viem");
2106
2109
  const { getChainContracts: getChainContracts2 } = await import("./config-YXZKPSZB.js");
2107
2110
  const { getChain: getActiveChain } = await import("./network-QEMP3DSP.js");
@@ -3233,7 +3236,7 @@ function printSimulationResult(result, callType) {
3233
3236
  }
3234
3237
  async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
3235
3238
  try {
3236
- const xmtp = await import("./xmtp-YNOGIZ4G.js");
3239
+ const xmtp = await import("./xmtp-64CYLVLO.js");
3237
3240
  const { getAccount: getAccount2 } = await import("./client-CWQFYZ5Z.js");
3238
3241
  const group = await xmtp.getGroup("", subdomain);
3239
3242
  const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
@@ -3926,7 +3929,7 @@ try {
3926
3929
  var require2 = createRequire(import.meta.url);
3927
3930
  var { version: CLI_VERSION } = require2("../package.json");
3928
3931
  async function loadXmtp() {
3929
- return import("./xmtp-YNOGIZ4G.js");
3932
+ return import("./xmtp-64CYLVLO.js");
3930
3933
  }
3931
3934
  async function loadCron() {
3932
3935
  return import("./cron-EOULYO3R.js");
@@ -4886,6 +4889,57 @@ vaultCmd.command("balance").description("Show LP share balance and asset value")
4886
4889
  process.exit(1);
4887
4890
  }
4888
4891
  });
4892
+ vaultCmd.command("redeem").description("Redeem vault shares for the underlying asset (ERC-4626)").option("--vault <address>", "Vault address (default: from config)").option("--shares <amount>", "Shares to redeem in whole-share units (default: all)").option("--receiver <address>", "Receiver of the underlying asset (default: your wallet)").action(async (opts) => {
4893
+ resolveVault(opts);
4894
+ const assetDecimals = await getAssetDecimals();
4895
+ const shareDecimals = assetDecimals * 2;
4896
+ let shares;
4897
+ try {
4898
+ if (opts.shares) {
4899
+ shares = parseUnits5(opts.shares, shareDecimals);
4900
+ } else {
4901
+ shares = await getShareBalance();
4902
+ if (shares === 0n) {
4903
+ console.error(chalk8.red("\n \u2716 No shares to redeem.\n"));
4904
+ process.exit(1);
4905
+ }
4906
+ }
4907
+ } catch (err) {
4908
+ console.error(chalk8.red(`
4909
+ \u2716 ${err instanceof Error ? err.message : String(err)}
4910
+ `));
4911
+ process.exit(1);
4912
+ }
4913
+ if (opts.receiver && !isAddress5(opts.receiver)) {
4914
+ console.error(chalk8.red(`
4915
+ \u2716 Invalid receiver address: ${opts.receiver}
4916
+ `));
4917
+ process.exit(1);
4918
+ }
4919
+ try {
4920
+ await preflightRedeem(shares);
4921
+ } catch (err) {
4922
+ console.error(chalk8.red(`
4923
+ \u2716 ${err instanceof Error ? err.message : String(err)}
4924
+ `));
4925
+ process.exit(1);
4926
+ }
4927
+ const sharesDisplay = formatUnits5(shares, shareDecimals);
4928
+ const spinner = ora7(`Redeeming ${sharesDisplay} shares...`).start();
4929
+ try {
4930
+ const { hash, assetsOut } = await redeem(
4931
+ shares,
4932
+ opts.receiver
4933
+ );
4934
+ spinner.succeed(`Redeemed: ${hash}`);
4935
+ console.log(chalk8.dim(` ${getExplorerUrl(hash)}`));
4936
+ console.log(` Assets received: ${formatUnits5(assetsOut, assetDecimals)}`);
4937
+ } catch (err) {
4938
+ spinner.fail("Redeem failed");
4939
+ console.error(chalk8.red(formatContractError(err)));
4940
+ process.exit(1);
4941
+ }
4942
+ });
4889
4943
  var strategy = program.command("strategy").description("Strategy templates \u2014 list, clone, propose");
4890
4944
  registerStrategyTemplateCommands(strategy);
4891
4945
  program.command("providers").description("List available DeFi providers").action(async () => {
@@ -4900,7 +4954,7 @@ ${info.name} (${info.type})`);
4900
4954
  }
4901
4955
  });
4902
4956
  try {
4903
- const { registerChatCommands } = await import("./chat-52PWNH7Y.js");
4957
+ const { registerChatCommands } = await import("./chat-MYRUIM54.js");
4904
4958
  registerChatCommands(program);
4905
4959
  } catch {
4906
4960
  program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
@@ -4910,16 +4964,16 @@ try {
4910
4964
  process.exit(1);
4911
4965
  });
4912
4966
  }
4913
- var { registerSessionCommands } = await import("./session-NMA4RLKC.js");
4967
+ var { registerSessionCommands } = await import("./session-6DJ4A2Q3.js");
4914
4968
  registerSessionCommands(program);
4915
4969
  registerVeniceCommands(program);
4916
4970
  registerAllowanceCommands(program);
4917
4971
  registerIdentityCommands(program);
4918
4972
  registerProposalCommands(program);
4919
4973
  registerGovernorCommands(program);
4920
- var { registerResearchCommands } = await import("./research-PH77VSE4.js");
4974
+ var { registerResearchCommands } = await import("./research-FIX3U4LG.js");
4921
4975
  registerResearchCommands(program);
4922
- var { registerTradeCommands } = await import("./trade-N2A74UPX.js");
4976
+ var { registerTradeCommands } = await import("./trade-MDVM4XFF.js");
4923
4977
  registerTradeCommands(program);
4924
4978
  var configCmd = program.command("config");
4925
4979
  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").option("--notify-to <id>", "Destination for cron summaries (Telegram chat ID, phone, etc.)").option("--uniswap-api-key <key>", "Uniswap Trading API key (from developers.uniswap.org)").option("--venice-api-key <key>", "Venice AI inference API key").action((opts) => {