@sherwoodagent/cli 0.56.1 → 0.57.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.
Files changed (37) hide show
  1. package/dist/{abis-VYJH7B2L.js → abis-6WBNN4S6.js} +2 -2
  2. package/dist/{agent-ATD6ECCO.js → agent-GKHZEPOT.js} +2 -2
  3. package/dist/{chat-5CSPCFX5.js → chat-VNO7DEAW.js} +5 -5
  4. package/dist/{chunk-TALLIFWJ.js → chunk-5GMVY7I7.js} +2 -2
  5. package/dist/{chunk-PN4BFLPG.js → chunk-OUJGZM46.js} +4 -29
  6. package/dist/chunk-OUJGZM46.js.map +1 -0
  7. package/dist/{chunk-FUH5ZDXH.js → chunk-QWX2COXX.js} +11 -35
  8. package/dist/chunk-QWX2COXX.js.map +1 -0
  9. package/dist/{chunk-DXYG6LQK.js → chunk-SWFKOMIQ.js} +2 -2
  10. package/dist/{chunk-TFFGRZYY.js → chunk-UNDR57AG.js} +2 -2
  11. package/dist/{chunk-3A4AHXJU.js → chunk-WGKOO4AO.js} +2 -2
  12. package/dist/{eas-5USBAM5N.js → eas-GYJRAPRP.js} +3 -3
  13. package/dist/{governor-YALHFEM5.js → governor-XXSQZAB5.js} +3 -7
  14. package/dist/index.js +69 -55
  15. package/dist/index.js.map +1 -1
  16. package/dist/{price-VZZMUI2O.js → price-RMYO6EB5.js} +2 -2
  17. package/dist/{research-MI5HEOHK.js → research-UFXKZGOG.js} +3 -3
  18. package/dist/{session-KDLIRS6B.js → session-7V3HX72A.js} +5 -5
  19. package/dist/{trade-6MFDEJSC.js → trade-ZXB3UAMH.js} +6 -6
  20. package/dist/{xmtp-T5J2R4OY.js → xmtp-DYJ4M7DA.js} +3 -3
  21. package/package.json +1 -1
  22. package/dist/chunk-FUH5ZDXH.js.map +0 -1
  23. package/dist/chunk-PN4BFLPG.js.map +0 -1
  24. /package/dist/{abis-VYJH7B2L.js.map → abis-6WBNN4S6.js.map} +0 -0
  25. /package/dist/{agent-ATD6ECCO.js.map → agent-GKHZEPOT.js.map} +0 -0
  26. /package/dist/{chat-5CSPCFX5.js.map → chat-VNO7DEAW.js.map} +0 -0
  27. /package/dist/{chunk-TALLIFWJ.js.map → chunk-5GMVY7I7.js.map} +0 -0
  28. /package/dist/{chunk-DXYG6LQK.js.map → chunk-SWFKOMIQ.js.map} +0 -0
  29. /package/dist/{chunk-TFFGRZYY.js.map → chunk-UNDR57AG.js.map} +0 -0
  30. /package/dist/{chunk-3A4AHXJU.js.map → chunk-WGKOO4AO.js.map} +0 -0
  31. /package/dist/{eas-5USBAM5N.js.map → eas-GYJRAPRP.js.map} +0 -0
  32. /package/dist/{governor-YALHFEM5.js.map → governor-XXSQZAB5.js.map} +0 -0
  33. /package/dist/{price-VZZMUI2O.js.map → price-RMYO6EB5.js.map} +0 -0
  34. /package/dist/{research-MI5HEOHK.js.map → research-UFXKZGOG.js.map} +0 -0
  35. /package/dist/{session-KDLIRS6B.js.map → session-7V3HX72A.js.map} +0 -0
  36. /package/dist/{trade-6MFDEJSC.js.map → trade-ZXB3UAMH.js.map} +0 -0
  37. /package/dist/{xmtp-T5J2R4OY.js.map → xmtp-DYJ4M7DA.js.map} +0 -0
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  encodeSwapPath,
16
16
  getMultiHopQuote,
17
17
  getQuote
18
- } from "./chunk-TALLIFWJ.js";
18
+ } from "./chunk-5GMVY7I7.js";
19
19
  import {
20
20
  chatCompletion,
21
21
  checkApiKeyValid,
@@ -32,14 +32,14 @@ import {
32
32
  queryJoinRequests,
33
33
  revokeJoinRequest,
34
34
  stripReferrerPrefix
35
- } from "./chunk-DXYG6LQK.js";
35
+ } from "./chunk-SWFKOMIQ.js";
36
36
  import {
37
37
  createSyndicate,
38
38
  getActiveSyndicates,
39
39
  getSyndicate,
40
40
  subdomainExists,
41
41
  updateMetadata
42
- } from "./chunk-3A4AHXJU.js";
42
+ } from "./chunk-WGKOO4AO.js";
43
43
  import {
44
44
  approveDepositor,
45
45
  deposit,
@@ -63,12 +63,11 @@ import {
63
63
  searchSyndicateAcrossChains,
64
64
  setTextRecord,
65
65
  setVaultAddress
66
- } from "./chunk-TFFGRZYY.js";
66
+ } from "./chunk-UNDR57AG.js";
67
67
  import {
68
68
  PROPOSAL_STATE,
69
69
  PROPOSAL_STATES,
70
70
  VOTE_TYPE,
71
- bindProposalAdapter,
72
71
  cancelProposal,
73
72
  emergencyCancel,
74
73
  emergencySettle,
@@ -96,7 +95,7 @@ import {
96
95
  setVotingPeriod,
97
96
  settleProposal,
98
97
  vote
99
- } from "./chunk-PN4BFLPG.js";
98
+ } from "./chunk-OUJGZM46.js";
100
99
  import {
101
100
  AERODROME,
102
101
  AGENT_REGISTRY,
@@ -161,7 +160,7 @@ import {
161
160
  SWAP_ROUTER_EXACT_INPUT_SINGLE_ABI,
162
161
  SYNDICATE_VAULT_ABI,
163
162
  VENICE_STAKING_ABI
164
- } from "./chunk-FUH5ZDXH.js";
163
+ } from "./chunk-QWX2COXX.js";
165
164
  import {
166
165
  fetchMetadata,
167
166
  uploadMetadata
@@ -1539,9 +1538,9 @@ function registerStrategyTemplateCommands(strategy2) {
1539
1538
  console.error(chalk.red("Missing --name, --performance-fee, or --duration. Use --write-calls to skip proposal submission."));
1540
1539
  process.exit(1);
1541
1540
  }
1542
- const { propose: propose2, bindProposalAdapter: bindProposalAdapter2 } = await import("./governor-YALHFEM5.js");
1541
+ const { propose: propose2 } = await import("./governor-XXSQZAB5.js");
1543
1542
  const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
1544
- const { parseDuration: parseDuration2 } = await import("./governor-YALHFEM5.js");
1543
+ const { parseDuration: parseDuration2 } = await import("./governor-XXSQZAB5.js");
1545
1544
  const performanceFeeBps = BigInt(opts.performanceFee);
1546
1545
  if (performanceFeeBps < 0n || performanceFeeBps > 10000n) {
1547
1546
  console.error(chalk.red("--performance-fee must be 0-10000 (basis points)"));
@@ -1570,18 +1569,17 @@ function registerStrategyTemplateCommands(strategy2) {
1570
1569
  process.exit(1);
1571
1570
  }
1572
1571
  const proposeSpinner = ora("Submitting proposal...").start();
1573
- let createdProposalId = null;
1574
1572
  try {
1575
1573
  const { hash, proposalId } = await propose2(
1576
1574
  vault,
1575
+ clone,
1577
1576
  metadataURI,
1578
1577
  performanceFeeBps,
1579
1578
  strategyDuration,
1580
1579
  executeCalls,
1581
1580
  settleCalls
1582
1581
  );
1583
- createdProposalId = proposalId;
1584
- proposeSpinner.succeed(`Proposal #${proposalId} created`);
1582
+ proposeSpinner.succeed(`Proposal #${proposalId} created \u2014 strategy=${clone} set on proposal`);
1585
1583
  console.log(`Proposal #${proposalId}`);
1586
1584
  console.log(chalk.dim(` Tx: ${getExplorerUrl(hash)}`));
1587
1585
  console.log(chalk.dim(` Clone: ${clone}`));
@@ -1590,18 +1588,6 @@ function registerStrategyTemplateCommands(strategy2) {
1590
1588
  console.error(chalk.red(formatContractError(err)));
1591
1589
  process.exit(1);
1592
1590
  }
1593
- if (createdProposalId !== null) {
1594
- const bindSpinner = ora("Binding adapter for live NAV...").start();
1595
- try {
1596
- const bindHash = await bindProposalAdapter2(createdProposalId, clone);
1597
- bindSpinner.succeed("Adapter bound \u2014 live deposits/withdraws enabled during strategy");
1598
- console.log(chalk.dim(` Tx: ${getExplorerUrl(bindHash)}`));
1599
- } catch (err) {
1600
- bindSpinner.warn(
1601
- `Adapter bind skipped (${formatContractError(err)}) \u2014 strategy will use queue-only redemptions`
1602
- );
1603
- }
1604
- }
1605
1591
  if (templateKey === "venice-inference") {
1606
1592
  console.log();
1607
1593
  console.log(chalk.yellow("Next steps:"));
@@ -1662,7 +1648,7 @@ function registerStrategyTemplateCommands(strategy2) {
1662
1648
  let prices = [];
1663
1649
  let priceSource = null;
1664
1650
  try {
1665
- const { getTokenPricesInAsset } = await import("./price-VZZMUI2O.js");
1651
+ const { getTokenPricesInAsset } = await import("./price-RMYO6EB5.js");
1666
1652
  prices = await getTokenPricesInAsset({
1667
1653
  tokens: allocations.map((a, i) => ({
1668
1654
  token: a.token,
@@ -2092,7 +2078,7 @@ function registerVeniceCommands(program2) {
2092
2078
  console.log(chalk2.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
2093
2079
  console.log(chalk2.dim(" Saved to ~/.sherwood/config.json"));
2094
2080
  try {
2095
- const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-5USBAM5N.js");
2081
+ const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-GYJRAPRP.js");
2096
2082
  const { uid } = await createVeniceProvisionAttestation(account.address);
2097
2083
  if (uid !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
2098
2084
  console.log(chalk2.dim(` Attested: ${getEasScanUrl2(uid)}`));
@@ -2448,7 +2434,7 @@ ${opts.prompt}`;
2448
2434
  console.log(chalk2.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
2449
2435
  }
2450
2436
  try {
2451
- const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-5USBAM5N.js");
2437
+ const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-GYJRAPRP.js");
2452
2438
  const { keccak256: keccak2562, toHex, isAddress: isAddr } = await import("viem");
2453
2439
  const { getChainContracts: getChainContracts2 } = await import("./config-REASKDIK.js");
2454
2440
  const { getChain: getActiveChain } = await import("./network-3ZU7UBDU.js");
@@ -2933,10 +2919,49 @@ function registerIdentityCommands(program2) {
2933
2919
  } catch {
2934
2920
  console.log(` Saved ID: #${savedId} ${chalk4.red("(token not found)")}`);
2935
2921
  }
2922
+ console.log();
2923
+ } else if (balance > 0n) {
2924
+ console.log(` Saved ID: ${chalk4.yellow("none (but this wallet owns NFTs \u2014 listing below)")}`);
2925
+ console.log();
2926
+ const lookupSpinner = ora4("Resolving owned token IDs via Agent0 SDK...").start();
2927
+ try {
2928
+ const sdk = getAgent0SDK();
2929
+ const results = await sdk.searchAgents({
2930
+ walletAddress: account.address,
2931
+ chains: [getChain().id]
2932
+ });
2933
+ lookupSpinner.stop();
2934
+ if (results.length === 0) {
2935
+ console.log(chalk4.dim(" No agents resolved for this wallet on the active chain."));
2936
+ console.log(chalk4.dim(" If you minted on a different chain, try:"));
2937
+ console.log(chalk4.dim(" sherwood identity find --wallet " + account.address + " --all-chains"));
2938
+ } else {
2939
+ console.log(chalk4.bold(` Owned identities on this chain (${results.length}):`));
2940
+ for (const a of results) {
2941
+ const idStr = String(a.agentId);
2942
+ const tokenId = idStr.includes(":") ? idStr.split(":")[1] : idStr;
2943
+ console.log(` ${chalk4.bold(`#${tokenId}`)} ${a.name || chalk4.dim("(no name)")}`);
2944
+ }
2945
+ console.log();
2946
+ console.log(chalk4.green(" Bind one to this machine:"));
2947
+ if (results.length === 1) {
2948
+ const idStr = String(results[0].agentId);
2949
+ const tokenId = idStr.includes(":") ? idStr.split(":")[1] : idStr;
2950
+ console.log(chalk4.dim(` sherwood identity load --id ${tokenId}`));
2951
+ } else {
2952
+ console.log(chalk4.dim(" sherwood identity load --id <tokenId>"));
2953
+ }
2954
+ }
2955
+ } catch (err) {
2956
+ lookupSpinner.warn("Could not resolve owned token IDs via Agent0 SDK");
2957
+ console.log(chalk4.dim(` ${err.message}`));
2958
+ console.log(chalk4.dim(" Try: sherwood identity find --wallet " + account.address));
2959
+ }
2960
+ console.log();
2936
2961
  } else {
2937
2962
  console.log(` Saved ID: ${chalk4.dim("none \u2014 run 'sherwood identity mint --name <name>'")}`);
2963
+ console.log();
2938
2964
  }
2939
- console.log();
2940
2965
  } catch (err) {
2941
2966
  spinner.fail("Failed to check identity");
2942
2967
  console.error(chalk4.red(formatContractError(err)));
@@ -3624,7 +3649,7 @@ function printSimulationResult(result, callType) {
3624
3649
  }
3625
3650
  async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
3626
3651
  try {
3627
- const xmtp = await import("./xmtp-T5J2R4OY.js");
3652
+ const xmtp = await import("./xmtp-DYJ4M7DA.js");
3628
3653
  const { getAccount: getAccount2 } = await import("./client-UHHCB6EZ.js");
3629
3654
  const group = await xmtp.getGroup("", subdomain);
3630
3655
  const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
@@ -3810,7 +3835,15 @@ function registerProposalCommands(program2) {
3810
3835
  }
3811
3836
  }
3812
3837
  const spinner = ora5({ text: W2("Submitting proposal..."), color: "green" }).start();
3813
- const result = await propose(vault, metadataURI, performanceFeeBps, strategyDuration, executeCalls, settleCalls);
3838
+ const result = await propose(
3839
+ vault,
3840
+ "0x0000000000000000000000000000000000000000",
3841
+ metadataURI,
3842
+ performanceFeeBps,
3843
+ strategyDuration,
3844
+ executeCalls,
3845
+ settleCalls
3846
+ );
3814
3847
  spinner.succeed(G2("Proposal submitted"));
3815
3848
  console.log();
3816
3849
  console.log(LABEL2(" \u25C6 Proposal Created"));
@@ -3996,25 +4029,6 @@ function registerProposalCommands(program2) {
3996
4029
  process.exit(1);
3997
4030
  }
3998
4031
  });
3999
- proposal.command("bind-adapter").description("Bind a strategy clone to a proposal for live NAV (proposer-only, Draft or Pending, before any co-proposer approval)").requiredOption("--id <proposalId>", "Proposal ID").requiredOption("--adapter <address>", "Strategy clone address").action(async (opts) => {
4000
- try {
4001
- const proposalId = parseBigIntArg(opts.id, "proposal ID");
4002
- if (!isAddress4(opts.adapter)) {
4003
- console.error(chalk6.red("Invalid adapter address"));
4004
- process.exit(1);
4005
- }
4006
- const adapter = opts.adapter;
4007
- const spinner = ora5("Binding adapter...").start();
4008
- const hash = await bindProposalAdapter(proposalId, adapter);
4009
- spinner.succeed(G2("Adapter bound \u2014 live deposits/withdraws enabled"));
4010
- console.log(DIM2(` ${getExplorerUrl(hash)}`));
4011
- console.log();
4012
- } catch (err) {
4013
- console.error(chalk6.red(`
4014
- \u2716 ${formatContractError(err)}`));
4015
- process.exit(1);
4016
- }
4017
- });
4018
4032
  proposal.command("execute").description("Execute an approved proposal").requiredOption("--id <proposalId>", "Proposal ID").option("--dry-run", "Simulate execution without sending a transaction").action(async (opts) => {
4019
4033
  try {
4020
4034
  const proposalId = parseBigIntArg(opts.id, "proposal ID");
@@ -7105,7 +7119,7 @@ try {
7105
7119
  var require2 = createRequire(import.meta.url);
7106
7120
  var { version: CLI_VERSION } = require2("../package.json");
7107
7121
  async function loadXmtp() {
7108
- return import("./xmtp-T5J2R4OY.js");
7122
+ return import("./xmtp-DYJ4M7DA.js");
7109
7123
  }
7110
7124
  async function loadCron() {
7111
7125
  return import("./cron-EOULYO3R.js");
@@ -8255,7 +8269,7 @@ ${info.name} (${info.type})`);
8255
8269
  }
8256
8270
  });
8257
8271
  try {
8258
- const { registerChatCommands } = await import("./chat-5CSPCFX5.js");
8272
+ const { registerChatCommands } = await import("./chat-VNO7DEAW.js");
8259
8273
  registerChatCommands(program);
8260
8274
  } catch {
8261
8275
  program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
@@ -8265,7 +8279,7 @@ try {
8265
8279
  process.exit(1);
8266
8280
  });
8267
8281
  }
8268
- var { registerSessionCommands } = await import("./session-KDLIRS6B.js");
8282
+ var { registerSessionCommands } = await import("./session-7V3HX72A.js");
8269
8283
  registerSessionCommands(program);
8270
8284
  registerVeniceCommands(program);
8271
8285
  registerAllowanceCommands(program);
@@ -8273,11 +8287,11 @@ registerIdentityCommands(program);
8273
8287
  registerProposalCommands(program);
8274
8288
  registerGovernorCommands(program);
8275
8289
  registerGuardianCommands(program);
8276
- var { registerResearchCommands } = await import("./research-MI5HEOHK.js");
8290
+ var { registerResearchCommands } = await import("./research-UFXKZGOG.js");
8277
8291
  registerResearchCommands(program);
8278
- var { registerAgentCommands } = await import("./agent-ATD6ECCO.js");
8292
+ var { registerAgentCommands } = await import("./agent-GKHZEPOT.js");
8279
8293
  registerAgentCommands(program);
8280
- var { registerTradeCommands } = await import("./trade-6MFDEJSC.js");
8294
+ var { registerTradeCommands } = await import("./trade-ZXB3UAMH.js");
8281
8295
  registerTradeCommands(program);
8282
8296
  registerGridCommand(program);
8283
8297
  var configCmd = program.command("config");