@sherwoodagent/cli 0.89.2 → 0.89.3

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 (58) hide show
  1. package/dist/{agent-K5ZKUS47.js → agent-QU2OSWS4.js} +4 -4
  2. package/dist/{chat-QVDOCCJN.js → chat-EVRY5BV3.js} +5 -5
  3. package/dist/{chunk-QEX2TWJV.js → chunk-2SIUEMPV.js} +2 -2
  4. package/dist/{chunk-TWJXGEBZ.js → chunk-5XMQQ4LX.js} +2 -2
  5. package/dist/{chunk-MIW4CBSU.js → chunk-6KXITNND.js} +2 -2
  6. package/dist/{chunk-JLOROS5V.js → chunk-74QYNLJE.js} +2 -2
  7. package/dist/{chunk-VD65GJOY.js → chunk-DQZJULNP.js} +2 -2
  8. package/dist/{chunk-Z53JZORT.js → chunk-I7NYU4JB.js} +28 -4
  9. package/dist/chunk-I7NYU4JB.js.map +1 -0
  10. package/dist/{chunk-LVGYGXAV.js → chunk-KPTKX226.js} +2 -2
  11. package/dist/{chunk-VVCSD2M6.js → chunk-KXUA5BEH.js} +2 -2
  12. package/dist/{chunk-TGWTRG3V.js → chunk-NJNK6GTJ.js} +3 -3
  13. package/dist/{chunk-H6AJMPLT.js → chunk-UCULHATO.js} +3 -3
  14. package/dist/{chunk-OYP35TFK.js → chunk-WAF3JU5J.js} +3 -3
  15. package/dist/{chunk-6IC2NRED.js → chunk-WIUPOQNS.js} +2 -2
  16. package/dist/{client-DA434B67.js → client-3BFK7TNL.js} +2 -2
  17. package/dist/{eas-F6KOWI4W.js → eas-YTAAJSLU.js} +3 -3
  18. package/dist/{governor-6HCXMRIA.js → governor-53PNPDCZ.js} +3 -3
  19. package/dist/{identity-2JEZE7DV.js → identity-462SMK5H.js} +4 -4
  20. package/dist/index.js +157 -37
  21. package/dist/index.js.map +1 -1
  22. package/dist/{launchpad-XM4546BO.js → launchpad-LHMBN4TV.js} +3 -3
  23. package/dist/{lighter-preflight-7J3IO27F.js → lighter-preflight-TSLSSYWI.js} +2 -2
  24. package/dist/{price-4FGWEPKX.js → price-QKOARHS4.js} +3 -3
  25. package/dist/{providers-XEEFKITN.js → providers-22A42FKP.js} +3 -3
  26. package/dist/{research-CJOSSD4U.js → research-3L3BTHWY.js} +5 -5
  27. package/dist/{session-775NKMGH.js → session-27X337LQ.js} +6 -6
  28. package/dist/{trade-PCK3LONN.js → trade-6Q7VCDEA.js} +9 -9
  29. package/dist/{vault-NLMVWYDF.js → vault-TQWUWBSG.js} +5 -5
  30. package/dist/{xmtp-H5GTOJ43.js → xmtp-EOMKXRTB.js} +3 -3
  31. package/package.json +1 -1
  32. package/dist/chunk-Z53JZORT.js.map +0 -1
  33. /package/dist/{agent-K5ZKUS47.js.map → agent-QU2OSWS4.js.map} +0 -0
  34. /package/dist/{chat-QVDOCCJN.js.map → chat-EVRY5BV3.js.map} +0 -0
  35. /package/dist/{chunk-QEX2TWJV.js.map → chunk-2SIUEMPV.js.map} +0 -0
  36. /package/dist/{chunk-TWJXGEBZ.js.map → chunk-5XMQQ4LX.js.map} +0 -0
  37. /package/dist/{chunk-MIW4CBSU.js.map → chunk-6KXITNND.js.map} +0 -0
  38. /package/dist/{chunk-JLOROS5V.js.map → chunk-74QYNLJE.js.map} +0 -0
  39. /package/dist/{chunk-VD65GJOY.js.map → chunk-DQZJULNP.js.map} +0 -0
  40. /package/dist/{chunk-LVGYGXAV.js.map → chunk-KPTKX226.js.map} +0 -0
  41. /package/dist/{chunk-VVCSD2M6.js.map → chunk-KXUA5BEH.js.map} +0 -0
  42. /package/dist/{chunk-TGWTRG3V.js.map → chunk-NJNK6GTJ.js.map} +0 -0
  43. /package/dist/{chunk-H6AJMPLT.js.map → chunk-UCULHATO.js.map} +0 -0
  44. /package/dist/{chunk-OYP35TFK.js.map → chunk-WAF3JU5J.js.map} +0 -0
  45. /package/dist/{chunk-6IC2NRED.js.map → chunk-WIUPOQNS.js.map} +0 -0
  46. /package/dist/{client-DA434B67.js.map → client-3BFK7TNL.js.map} +0 -0
  47. /package/dist/{eas-F6KOWI4W.js.map → eas-YTAAJSLU.js.map} +0 -0
  48. /package/dist/{governor-6HCXMRIA.js.map → governor-53PNPDCZ.js.map} +0 -0
  49. /package/dist/{identity-2JEZE7DV.js.map → identity-462SMK5H.js.map} +0 -0
  50. /package/dist/{launchpad-XM4546BO.js.map → launchpad-LHMBN4TV.js.map} +0 -0
  51. /package/dist/{lighter-preflight-7J3IO27F.js.map → lighter-preflight-TSLSSYWI.js.map} +0 -0
  52. /package/dist/{price-4FGWEPKX.js.map → price-QKOARHS4.js.map} +0 -0
  53. /package/dist/{providers-XEEFKITN.js.map → providers-22A42FKP.js.map} +0 -0
  54. /package/dist/{research-CJOSSD4U.js.map → research-3L3BTHWY.js.map} +0 -0
  55. /package/dist/{session-775NKMGH.js.map → session-27X337LQ.js.map} +0 -0
  56. /package/dist/{trade-PCK3LONN.js.map → trade-6Q7VCDEA.js.map} +0 -0
  57. /package/dist/{vault-NLMVWYDF.js.map → vault-TQWUWBSG.js.map} +0 -0
  58. /package/dist/{xmtp-H5GTOJ43.js.map → xmtp-EOMKXRTB.js.map} +0 -0
package/dist/index.js CHANGED
@@ -15,14 +15,14 @@ import {
15
15
  checkApiKeyValid,
16
16
  listModels,
17
17
  provisionApiKey
18
- } from "./chunk-JLOROS5V.js";
18
+ } from "./chunk-74QYNLJE.js";
19
19
  import {
20
20
  createFund,
21
21
  getActiveFunds,
22
22
  getFund,
23
23
  subdomainExists,
24
24
  updateMetadata
25
- } from "./chunk-VD65GJOY.js";
25
+ } from "./chunk-DQZJULNP.js";
26
26
  import {
27
27
  FORK_UNOBSERVABLE_REASON,
28
28
  LIGHTER_API_PROFILES,
@@ -54,8 +54,8 @@ import {
54
54
  removeDepositor,
55
55
  setAgentFeeBps,
56
56
  setVaultAddress
57
- } from "./chunk-OYP35TFK.js";
58
- import "./chunk-TGWTRG3V.js";
57
+ } from "./chunk-WAF3JU5J.js";
58
+ import "./chunk-NJNK6GTJ.js";
59
59
  import {
60
60
  CL_DEFAULTS,
61
61
  DEFAULT_FEE_TIER,
@@ -89,7 +89,7 @@ import {
89
89
  selectBestFeeTier,
90
90
  twapTickFromCumulatives,
91
91
  v3SingleHopExtraData
92
- } from "./chunk-MIW4CBSU.js";
92
+ } from "./chunk-6KXITNND.js";
93
93
  import {
94
94
  DEFAULT_ISSUING_CHAIN_ID,
95
95
  STRATEGY_FACTORY_ABI,
@@ -123,7 +123,7 @@ import {
123
123
  registerIdentityCommands,
124
124
  stripVidTag,
125
125
  verifyVidTag
126
- } from "./chunk-H6AJMPLT.js";
126
+ } from "./chunk-UCULHATO.js";
127
127
  import {
128
128
  fetchMetadata,
129
129
  mergeFundMetadata,
@@ -138,13 +138,13 @@ import {
138
138
  queryJoinRequests,
139
139
  revokeJoinRequest,
140
140
  stripReferrerPrefix
141
- } from "./chunk-QEX2TWJV.js";
141
+ } from "./chunk-2SIUEMPV.js";
142
142
  import {
143
143
  resolveFund,
144
144
  resolveVaultFund,
145
145
  searchFundAcrossChains,
146
146
  setTextRecord
147
- } from "./chunk-LVGYGXAV.js";
147
+ } from "./chunk-KPTKX226.js";
148
148
  import {
149
149
  PROPOSAL_STATE,
150
150
  PROPOSAL_STATES,
@@ -183,7 +183,7 @@ import {
183
183
  setVotingPeriod,
184
184
  settleProposal,
185
185
  vote
186
- } from "./chunk-TWJXGEBZ.js";
186
+ } from "./chunk-5XMQQ4LX.js";
187
187
  import {
188
188
  LIGHTER_DEFAULT_API_KEY_INDEX,
189
189
  LIGHTER_MAX_DEPOSIT,
@@ -206,7 +206,7 @@ import {
206
206
  } from "./chunk-TCUSM4V7.js";
207
207
  import {
208
208
  addLaunchpadTemplateOptions
209
- } from "./chunk-VVCSD2M6.js";
209
+ } from "./chunk-KXUA5BEH.js";
210
210
  import {
211
211
  CLAIM_SETTLE_BUFFER_SECONDS,
212
212
  DEFAULT_DEADLINE_MARGIN_SECONDS,
@@ -247,7 +247,7 @@ import {
247
247
  sendTxWithRetry,
248
248
  waitForReceipt,
249
249
  writeContractWithRetry
250
- } from "./chunk-Z53JZORT.js";
250
+ } from "./chunk-I7NYU4JB.js";
251
251
  import {
252
252
  DEFAULT_NETWORK,
253
253
  VALID_NETWORKS,
@@ -1984,7 +1984,7 @@ function registerStrategyProposeCommands(strategy2) {
1984
1984
  }
1985
1985
  }
1986
1986
  if (templateKey === "lighter-perp") {
1987
- const { runLighterProposePreflight } = await import("./lighter-preflight-7J3IO27F.js");
1987
+ const { runLighterProposePreflight } = await import("./lighter-preflight-TSLSSYWI.js");
1988
1988
  await runLighterProposePreflight(vault, opts, maxDrawdownBps);
1989
1989
  }
1990
1990
  } catch (err) {
@@ -1992,7 +1992,7 @@ function registerStrategyProposeCommands(strategy2) {
1992
1992
  process.exit(1);
1993
1993
  }
1994
1994
  if (!opts.agent) opts.agent = proposer;
1995
- const { parseDuration: parseDuration3, getGovernorOf: getGovernorOf2 } = await import("./governor-6HCXMRIA.js");
1995
+ const { parseDuration: parseDuration3, getGovernorOf: getGovernorOf2 } = await import("./governor-53PNPDCZ.js");
1996
1996
  const strategyDuration2 = parseDuration3(opts.duration);
1997
1997
  const chainId = getChain().id;
1998
1998
  try {
@@ -2110,7 +2110,7 @@ function registerStrategyProposeCommands(strategy2) {
2110
2110
  }
2111
2111
  }
2112
2112
  if (templateKey === "lighter-perp") {
2113
- const { runLighterProposePreflight } = await import("./lighter-preflight-7J3IO27F.js");
2113
+ const { runLighterProposePreflight } = await import("./lighter-preflight-TSLSSYWI.js");
2114
2114
  await runLighterProposePreflight(vault, opts, maxDrawdownBps);
2115
2115
  }
2116
2116
  preflightSpinner.succeed("Preflight OK");
@@ -2227,9 +2227,9 @@ function registerStrategyProposeCommands(strategy2) {
2227
2227
  console.error(chalk4.red("Missing --name or --duration. Use --write-calls to skip proposal submission."));
2228
2228
  process.exit(1);
2229
2229
  }
2230
- const { propose: propose2 } = await import("./governor-6HCXMRIA.js");
2230
+ const { propose: propose2 } = await import("./governor-53PNPDCZ.js");
2231
2231
  const { pinJSON } = await import("./ipfs-M56BLMCW.js");
2232
- const { parseDuration: parseDuration2 } = await import("./governor-6HCXMRIA.js");
2232
+ const { parseDuration: parseDuration2 } = await import("./governor-53PNPDCZ.js");
2233
2233
  const strategyDuration = parseDuration2(opts.duration);
2234
2234
  const metaSpinner = ora2("Pinning metadata to IPFS...").start();
2235
2235
  let metadataURI;
@@ -2261,7 +2261,7 @@ function registerStrategyProposeCommands(strategy2) {
2261
2261
  metadataURI = `data:application/json;base64,${Buffer.from(inline).toString("base64")}`;
2262
2262
  }
2263
2263
  try {
2264
- const { getAgentFeeBps: getAgentFeeBps2 } = await import("./vault-NLMVWYDF.js");
2264
+ const { getAgentFeeBps: getAgentFeeBps2 } = await import("./vault-TQWUWBSG.js");
2265
2265
  const feeBps = await getAgentFeeBps2(vault);
2266
2266
  console.log(
2267
2267
  chalk4.yellow(
@@ -2312,7 +2312,7 @@ function registerStrategyProposeCommands(strategy2) {
2312
2312
  console.log(chalk4.yellow(` asset.approve(${clone}, <repaymentAmount>)`));
2313
2313
  }
2314
2314
  if (templateKey === "lighter-perp") {
2315
- const { lighterNextSteps } = await import("./lighter-preflight-7J3IO27F.js");
2315
+ const { lighterNextSteps } = await import("./lighter-preflight-TSLSSYWI.js");
2316
2316
  console.log();
2317
2317
  for (const line of lighterNextSteps(clone)) console.log(chalk4.yellow(line));
2318
2318
  }
@@ -2584,7 +2584,7 @@ function registerStrategyTemplateCommands(strategy2) {
2584
2584
  let prices = [];
2585
2585
  let priceSource = null;
2586
2586
  try {
2587
- const { getTokenPricesInAsset } = await import("./price-4FGWEPKX.js");
2587
+ const { getTokenPricesInAsset } = await import("./price-QKOARHS4.js");
2588
2588
  prices = await getTokenPricesInAsset({
2589
2589
  tokens: allocations.map((a, i) => ({
2590
2590
  token: a.token,
@@ -3001,7 +3001,7 @@ function registerVeniceCommands(program2) {
3001
3001
  console.log(chalk6.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
3002
3002
  console.log(chalk6.dim(" Saved to ~/.sherwood/config.json"));
3003
3003
  try {
3004
- const { createVeniceProvisionAttestation, getEasScanUrl } = await import("./eas-F6KOWI4W.js");
3004
+ const { createVeniceProvisionAttestation, getEasScanUrl } = await import("./eas-YTAAJSLU.js");
3005
3005
  const attestation = await createVeniceProvisionAttestation(account.address);
3006
3006
  if (attestation) {
3007
3007
  console.log(chalk6.dim(` Attested: ${getEasScanUrl(attestation.uid)}`));
@@ -3357,7 +3357,7 @@ ${opts.prompt}`;
3357
3357
  console.log(chalk6.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
3358
3358
  }
3359
3359
  try {
3360
- const { createVeniceInferenceAttestation, getEasScanUrl } = await import("./eas-F6KOWI4W.js");
3360
+ const { createVeniceInferenceAttestation, getEasScanUrl } = await import("./eas-YTAAJSLU.js");
3361
3361
  const { keccak256: keccak2562, toHex, isAddress: isAddr } = await import("viem");
3362
3362
  const { getChainContracts: getChainContracts2 } = await import("./config-UZ2GIXAO.js");
3363
3363
  const { getChain: getActiveChain } = await import("./network-EZ5X2BF7.js");
@@ -4356,8 +4356,8 @@ function printSimulationResult(result, callType) {
4356
4356
  }
4357
4357
  async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
4358
4358
  try {
4359
- const xmtp = await import("./xmtp-H5GTOJ43.js");
4360
- const { getAccount: getAccount2 } = await import("./client-DA434B67.js");
4359
+ const xmtp = await import("./xmtp-EOMKXRTB.js");
4360
+ const { getAccount: getAccount2 } = await import("./client-3BFK7TNL.js");
4361
4361
  const group = await xmtp.getGroup("", subdomain);
4362
4362
  const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
4363
4363
  const criticals = allRisks.filter((r) => r.level === "critical");
@@ -5858,6 +5858,20 @@ var VAULT_QUEUE_ABI = [
5858
5858
  inputs: [],
5859
5859
  outputs: [{ name: "", type: "address" }]
5860
5860
  },
5861
+ {
5862
+ name: "redemptionsLocked",
5863
+ type: "function",
5864
+ stateMutability: "view",
5865
+ inputs: [],
5866
+ outputs: [{ name: "", type: "bool" }]
5867
+ },
5868
+ {
5869
+ name: "depositsLocked",
5870
+ type: "function",
5871
+ stateMutability: "view",
5872
+ inputs: [],
5873
+ outputs: [{ name: "", type: "bool" }]
5874
+ },
5861
5875
  {
5862
5876
  type: "event",
5863
5877
  name: "DepositRequested",
@@ -5938,6 +5952,103 @@ var QUEUE_ABI = [
5938
5952
  }
5939
5953
  ];
5940
5954
  var KIND_LABELS = ["Redeem", "Deposit"];
5955
+ var KIND_REDEEM = 0;
5956
+ var NEVER_STAMPS = /* @__PURE__ */ new Set([
5957
+ PROPOSAL_STATE.Rejected,
5958
+ PROPOSAL_STATE.Expired,
5959
+ PROPOSAL_STATE.Cancelled,
5960
+ PROPOSAL_STATE.Settled
5961
+ ]);
5962
+ function classifyRequest(args) {
5963
+ const { request: r, stamped, proposalState } = args;
5964
+ if (r.claimed) return { kind: "claimed" };
5965
+ if (r.cancelled) return { kind: "cancelled" };
5966
+ if (r.kind === KIND_REDEEM) {
5967
+ if (!stamped) {
5968
+ if (proposalState !== void 0 && NEVER_STAMPS.has(proposalState)) {
5969
+ return { kind: "stranded", pid: r.pid, state: PROPOSAL_STATES[proposalState] ?? `state ${proposalState}` };
5970
+ }
5971
+ return { kind: "waiting", pid: r.pid };
5972
+ }
5973
+ return args.redemptionsLocked ? { kind: "locked" } : { kind: "claimable" };
5974
+ }
5975
+ return args.depositsLocked ? { kind: "locked" } : { kind: "claimable" };
5976
+ }
5977
+ function formatRequestStatus(status) {
5978
+ switch (status.kind) {
5979
+ case "claimed":
5980
+ return "claimed";
5981
+ case "cancelled":
5982
+ return "cancelled";
5983
+ case "claimable":
5984
+ return "claimable";
5985
+ case "waiting":
5986
+ return `waiting for pid ${status.pid} to settle`;
5987
+ case "stranded":
5988
+ return `stranded (pid ${status.pid} ended ${status.state} \u2014 cancel it)`;
5989
+ case "locked":
5990
+ return "waiting for vault to unlock";
5991
+ }
5992
+ }
5993
+ function claimRefusal(status, vault, id) {
5994
+ const cancelCmd = `sherwood queue cancel --vault ${vault} --id ${id}`;
5995
+ switch (status.kind) {
5996
+ case "claimable":
5997
+ return void 0;
5998
+ case "claimed":
5999
+ return `Request #${id} has already been claimed.`;
6000
+ case "cancelled":
6001
+ return `Request #${id} was cancelled \u2014 its escrow was already returned.`;
6002
+ case "stranded":
6003
+ return `Request #${id} is stranded: pid ${status.pid} ended ${status.state} without settling, so no claim price will ever be stamped (claim would revert NotSettled).
6004
+ Get the shares back with:
6005
+ ${cancelCmd}
6006
+ then redeem directly.`;
6007
+ case "waiting":
6008
+ return `Request #${id} is waiting for pid ${status.pid} to settle \u2014 no claim price is stamped yet (claim would revert NotSettled). Retry after it settles.
6009
+ If pid ${status.pid} ends Rejected/Expired/Cancelled instead, run:
6010
+ ${cancelCmd}`;
6011
+ case "locked":
6012
+ return `Request #${id} cannot be claimed while the vault is locked by an open proposal (claim would revert VaultLocked). Retry once it settles.`;
6013
+ }
6014
+ }
6015
+ async function loadRequestStatuses(vault, queue, requests) {
6016
+ const client = getPublicClient();
6017
+ const [redemptionsLocked, depositsLocked] = await Promise.all([
6018
+ client.readContract({ address: vault, abi: VAULT_QUEUE_ABI, functionName: "redemptionsLocked" }),
6019
+ client.readContract({ address: vault, abi: VAULT_QUEUE_ABI, functionName: "depositsLocked" })
6020
+ ]);
6021
+ const pids = [
6022
+ ...new Set(
6023
+ requests.filter((r) => r.kind === KIND_REDEEM && !r.claimed && !r.cancelled).map((r) => r.pid)
6024
+ )
6025
+ ];
6026
+ const stampedByPid = /* @__PURE__ */ new Map();
6027
+ const stateByPid = /* @__PURE__ */ new Map();
6028
+ await Promise.all(
6029
+ pids.map(async (pid) => {
6030
+ const sp = await client.readContract({
6031
+ address: queue,
6032
+ abi: QUEUE_ABI,
6033
+ functionName: "getSettlePrice",
6034
+ args: [pid]
6035
+ });
6036
+ stampedByPid.set(pid, sp.stamped);
6037
+ if (!sp.stamped) {
6038
+ stateByPid.set(pid, await getProposalState(vault, pid).catch(() => void 0));
6039
+ }
6040
+ })
6041
+ );
6042
+ return requests.map(
6043
+ (request) => classifyRequest({
6044
+ request,
6045
+ stamped: stampedByPid.get(request.pid) ?? false,
6046
+ proposalState: stateByPid.get(request.pid),
6047
+ redemptionsLocked,
6048
+ depositsLocked
6049
+ })
6050
+ );
6051
+ }
5941
6052
  function resolveVaultAddress(opt) {
5942
6053
  if (!opt || !isAddress10(opt)) {
5943
6054
  console.error(chalk10.red(`Invalid or missing --vault address: ${opt ?? "(none)"}`));
@@ -6097,9 +6208,17 @@ function registerQueueCommands(program2) {
6097
6208
  const vault = resolveVaultAddress(opts.vault);
6098
6209
  const account = getAccount();
6099
6210
  const id = BigInt(opts.id);
6100
- const spinner = ora7(`Claiming request #${id}...`).start();
6211
+ const spinner = ora7(`Checking request #${id}...`).start();
6101
6212
  try {
6102
6213
  const queueAddr = await getQueueAddress(vault);
6214
+ const [status] = await loadRequestStatuses(vault, queueAddr, [await readRequest(queueAddr, id)]);
6215
+ const refusal = claimRefusal(status, vault, id);
6216
+ if (refusal) {
6217
+ spinner.fail(`Not claimable: ${formatRequestStatus(status)}`);
6218
+ console.error(chalk10.yellow(refusal));
6219
+ process.exit(1);
6220
+ }
6221
+ spinner.text = `Claiming request #${id}...`;
6103
6222
  const hash = await writeContractWithRetry({
6104
6223
  account,
6105
6224
  chain: getChain(),
@@ -6164,20 +6283,21 @@ function registerQueueCommands(program2) {
6164
6283
  return;
6165
6284
  }
6166
6285
  const requests = await Promise.all(ids.map((id) => readRequest(queueAddr, id)));
6286
+ const statuses = await loadRequestStatuses(vault, queueAddr, requests);
6167
6287
  spinner.stop();
6168
6288
  console.log();
6169
6289
  console.log(chalk10.bold(`Queue requests (${ids.length}) \u2014 ${account.address}`));
6170
- console.log(chalk10.dim("\u2500".repeat(72)));
6290
+ console.log(chalk10.dim("\u2500".repeat(100)));
6171
6291
  console.log(
6172
6292
  chalk10.dim(
6173
- ` ${"id".padEnd(6)}${"kind".padEnd(9)}${"amount".padEnd(26)}${"pid".padEnd(6)}${"claimed".padEnd(9)}cancelled`
6293
+ ` ${"id".padEnd(6)}${"kind".padEnd(9)}${"amount".padEnd(26)}${"pid".padEnd(6)}${"claimed".padEnd(9)}${"cancelled".padEnd(11)}status`
6174
6294
  )
6175
6295
  );
6176
6296
  ids.forEach((id, i) => {
6177
6297
  const r = requests[i];
6178
6298
  const label = KIND_LABELS[r.kind] ?? `kind ${r.kind}`;
6179
6299
  console.log(
6180
- ` ${String(id).padEnd(6)}${label.padEnd(9)}${String(r.amount).padEnd(26)}${String(r.pid).padEnd(6)}${String(r.claimed).padEnd(9)}${r.cancelled}`
6300
+ ` ${String(id).padEnd(6)}${label.padEnd(9)}${String(r.amount).padEnd(26)}${String(r.pid).padEnd(6)}${String(r.claimed).padEnd(9)}${String(r.cancelled).padEnd(11)}${formatRequestStatus(statuses[i])}`
6181
6301
  );
6182
6302
  });
6183
6303
  console.log();
@@ -9969,9 +10089,9 @@ try {
9969
10089
  } catch {
9970
10090
  }
9971
10091
  var require2 = createRequire(import.meta.url);
9972
- var CLI_VERSION = "0.89.2";
10092
+ var CLI_VERSION = "0.89.3";
9973
10093
  async function loadXmtp() {
9974
- return import("./xmtp-H5GTOJ43.js");
10094
+ return import("./xmtp-EOMKXRTB.js");
9975
10095
  }
9976
10096
  async function loadCron() {
9977
10097
  return import("./cron-E3UAZF5B.js");
@@ -10642,7 +10762,7 @@ vaultCmd.command("add").description("Register an agent on a vault (creator only)
10642
10762
  agentId = BigInt(opts.agentId);
10643
10763
  } else {
10644
10764
  spinner.text = "Looking up ERC-8004 identity from wallet...";
10645
- const { lookupAgentIdByWallet } = await import("./identity-2JEZE7DV.js");
10765
+ const { lookupAgentIdByWallet } = await import("./identity-462SMK5H.js");
10646
10766
  const resolved = await lookupAgentIdByWallet(agentWallet);
10647
10767
  if (resolved === null) {
10648
10768
  spinner.fail("Agent wallet does not own an ERC-8004 identity NFT");
@@ -11345,7 +11465,7 @@ vaultCmd.command("redeem").description("Redeem vault shares for the underlying a
11345
11465
  var strategy = program.command("strategy").description("Strategy templates \u2014 list, clone, propose");
11346
11466
  registerStrategyTemplateCommands(strategy);
11347
11467
  program.command("providers").description("List available providers (research + swap routing)").action(async () => {
11348
- const { listProviders } = await import("./providers-XEEFKITN.js");
11468
+ const { listProviders } = await import("./providers-22A42FKP.js");
11349
11469
  for (const info2 of listProviders()) {
11350
11470
  console.log(`
11351
11471
  ${info2.name} (${info2.type})`);
@@ -11355,7 +11475,7 @@ ${info2.name} (${info2.type})`);
11355
11475
  }
11356
11476
  });
11357
11477
  try {
11358
- const { registerChatCommands } = await import("./chat-QVDOCCJN.js");
11478
+ const { registerChatCommands } = await import("./chat-EVRY5BV3.js");
11359
11479
  registerChatCommands(program);
11360
11480
  } catch {
11361
11481
  program.command("chat <name> [action] [actionArgs...]").description("Vault chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
@@ -11365,7 +11485,7 @@ try {
11365
11485
  process.exit(1);
11366
11486
  });
11367
11487
  }
11368
- var { registerSessionCommands } = await import("./session-775NKMGH.js");
11488
+ var { registerSessionCommands } = await import("./session-27X337LQ.js");
11369
11489
  registerSessionCommands(program);
11370
11490
  registerVeniceCommands(program);
11371
11491
  registerAllowanceCommands(program);
@@ -11374,15 +11494,15 @@ registerProposalCommands(program);
11374
11494
  registerQueueCommands(program);
11375
11495
  registerGovernorCommands(program);
11376
11496
  registerGuardianCommands(program);
11377
- var { registerResearchCommands } = await import("./research-CJOSSD4U.js");
11497
+ var { registerResearchCommands } = await import("./research-3L3BTHWY.js");
11378
11498
  registerResearchCommands(program);
11379
- var { registerAgentCommands } = await import("./agent-K5ZKUS47.js");
11499
+ var { registerAgentCommands } = await import("./agent-QU2OSWS4.js");
11380
11500
  registerAgentCommands(program);
11381
- var { registerTradeCommands } = await import("./trade-PCK3LONN.js");
11501
+ var { registerTradeCommands } = await import("./trade-6Q7VCDEA.js");
11382
11502
  registerTradeCommands(program);
11383
11503
  registerGridCommand(program);
11384
11504
  registerLighterCommands(program);
11385
- var { registerLaunchpadCommands } = await import("./launchpad-XM4546BO.js");
11505
+ var { registerLaunchpadCommands } = await import("./launchpad-LHMBN4TV.js");
11386
11506
  registerLaunchpadCommands(program);
11387
11507
  var configCmd = program.command("config");
11388
11508
  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 vault 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").option("--anthropic-api-key <key>", "Anthropic Claude API key (for LLM judge)").option("--xmtp-group <subdomain:groupId>", "Cache an XMTP group ID for a vault (e.g. my-vault:abc123)").action((opts) => {