@sherwoodagent/cli 0.90.1 → 0.90.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 (57) hide show
  1. package/dist/{agent-DLLONQ76.js → agent-LVDMPKHK.js} +4 -4
  2. package/dist/{chat-FSAHNEIY.js → chat-HS7OIE2Y.js} +5 -5
  3. package/dist/{chunk-UKWKI4UC.js → chunk-5G4SESMO.js} +45 -6
  4. package/dist/chunk-5G4SESMO.js.map +1 -0
  5. package/dist/{chunk-DCQELFSU.js → chunk-6H6EFHDS.js} +2 -2
  6. package/dist/{chunk-WKOTF5H6.js → chunk-7GITFGA4.js} +2 -2
  7. package/dist/{chunk-25VV4W6X.js → chunk-D5Y73ITZ.js} +2 -2
  8. package/dist/{chunk-RITIB5RY.js → chunk-FS5DXFRG.js} +2 -2
  9. package/dist/{chunk-WTPIXSGL.js → chunk-G3LPD43A.js} +2 -2
  10. package/dist/{chunk-OFGBQAUM.js → chunk-IDMSU2X4.js} +3 -3
  11. package/dist/{chunk-QQJAM24N.js → chunk-IXU23PP5.js} +3 -3
  12. package/dist/{chunk-43TG4FOX.js → chunk-POTFZJYN.js} +2 -2
  13. package/dist/{chunk-YJEBZJ7Y.js → chunk-RYKETWBU.js} +3 -1
  14. package/dist/{chunk-QBOBGQQV.js → chunk-V6XUXLJF.js} +2 -2
  15. package/dist/{chunk-PTWYREL2.js → chunk-WJWLM5QE.js} +3 -3
  16. package/dist/{client-IFQ2TMCY.js → client-4CKVYBRP.js} +2 -2
  17. package/dist/{eas-KVH644YY.js → eas-JOU76WZ2.js} +3 -3
  18. package/dist/{governor-L7FTXIAC.js → governor-4XHJ52H4.js} +3 -3
  19. package/dist/{identity-ZMHBCTOK.js → identity-3BLNFZ42.js} +4 -4
  20. package/dist/index.js +33 -33
  21. package/dist/{launchpad-CEUSWTXH.js → launchpad-ZVC7Z5JJ.js} +5 -3
  22. package/dist/{lighter-preflight-YOVDIULH.js → lighter-preflight-ERF425PP.js} +2 -2
  23. package/dist/{price-GZEQNKAF.js → price-4QVQAIHX.js} +3 -3
  24. package/dist/{providers-3PSOZI6R.js → providers-P27BDYZ2.js} +3 -3
  25. package/dist/{research-C4W7C5S6.js → research-N2R76ELJ.js} +5 -5
  26. package/dist/{session-LIMD5AG5.js → session-ZIJYGOAT.js} +6 -6
  27. package/dist/{trade-U5TZIZHF.js → trade-2J555BS7.js} +9 -9
  28. package/dist/{vault-SV7UAREO.js → vault-WC7AS7SM.js} +5 -5
  29. package/dist/{xmtp-TOPGDWX3.js → xmtp-NJXD7T7E.js} +3 -3
  30. package/package.json +1 -1
  31. package/dist/chunk-UKWKI4UC.js.map +0 -1
  32. /package/dist/{agent-DLLONQ76.js.map → agent-LVDMPKHK.js.map} +0 -0
  33. /package/dist/{chat-FSAHNEIY.js.map → chat-HS7OIE2Y.js.map} +0 -0
  34. /package/dist/{chunk-DCQELFSU.js.map → chunk-6H6EFHDS.js.map} +0 -0
  35. /package/dist/{chunk-WKOTF5H6.js.map → chunk-7GITFGA4.js.map} +0 -0
  36. /package/dist/{chunk-25VV4W6X.js.map → chunk-D5Y73ITZ.js.map} +0 -0
  37. /package/dist/{chunk-RITIB5RY.js.map → chunk-FS5DXFRG.js.map} +0 -0
  38. /package/dist/{chunk-WTPIXSGL.js.map → chunk-G3LPD43A.js.map} +0 -0
  39. /package/dist/{chunk-OFGBQAUM.js.map → chunk-IDMSU2X4.js.map} +0 -0
  40. /package/dist/{chunk-QQJAM24N.js.map → chunk-IXU23PP5.js.map} +0 -0
  41. /package/dist/{chunk-43TG4FOX.js.map → chunk-POTFZJYN.js.map} +0 -0
  42. /package/dist/{chunk-YJEBZJ7Y.js.map → chunk-RYKETWBU.js.map} +0 -0
  43. /package/dist/{chunk-QBOBGQQV.js.map → chunk-V6XUXLJF.js.map} +0 -0
  44. /package/dist/{chunk-PTWYREL2.js.map → chunk-WJWLM5QE.js.map} +0 -0
  45. /package/dist/{client-IFQ2TMCY.js.map → client-4CKVYBRP.js.map} +0 -0
  46. /package/dist/{eas-KVH644YY.js.map → eas-JOU76WZ2.js.map} +0 -0
  47. /package/dist/{governor-L7FTXIAC.js.map → governor-4XHJ52H4.js.map} +0 -0
  48. /package/dist/{identity-ZMHBCTOK.js.map → identity-3BLNFZ42.js.map} +0 -0
  49. /package/dist/{launchpad-CEUSWTXH.js.map → launchpad-ZVC7Z5JJ.js.map} +0 -0
  50. /package/dist/{lighter-preflight-YOVDIULH.js.map → lighter-preflight-ERF425PP.js.map} +0 -0
  51. /package/dist/{price-GZEQNKAF.js.map → price-4QVQAIHX.js.map} +0 -0
  52. /package/dist/{providers-3PSOZI6R.js.map → providers-P27BDYZ2.js.map} +0 -0
  53. /package/dist/{research-C4W7C5S6.js.map → research-N2R76ELJ.js.map} +0 -0
  54. /package/dist/{session-LIMD5AG5.js.map → session-ZIJYGOAT.js.map} +0 -0
  55. /package/dist/{trade-U5TZIZHF.js.map → trade-2J555BS7.js.map} +0 -0
  56. /package/dist/{vault-SV7UAREO.js.map → vault-WC7AS7SM.js.map} +0 -0
  57. /package/dist/{xmtp-TOPGDWX3.js.map → xmtp-NJXD7T7E.js.map} +0 -0
package/dist/index.js CHANGED
@@ -15,17 +15,17 @@ import {
15
15
  checkApiKeyValid,
16
16
  listModels,
17
17
  provisionApiKey
18
- } from "./chunk-WTPIXSGL.js";
18
+ } from "./chunk-G3LPD43A.js";
19
19
  import {
20
20
  createFund,
21
21
  getActiveFunds,
22
22
  getFund,
23
23
  subdomainExists,
24
24
  updateMetadata
25
- } from "./chunk-43TG4FOX.js";
25
+ } from "./chunk-POTFZJYN.js";
26
26
  import {
27
27
  addLaunchpadTemplateOptions
28
- } from "./chunk-UKWKI4UC.js";
28
+ } from "./chunk-5G4SESMO.js";
29
29
  import {
30
30
  FORK_UNOBSERVABLE_REASON,
31
31
  LIGHTER_API_PROFILES,
@@ -57,8 +57,8 @@ import {
57
57
  removeDepositor,
58
58
  setAgentFeeBps,
59
59
  setVaultAddress
60
- } from "./chunk-OFGBQAUM.js";
61
- import "./chunk-QQJAM24N.js";
60
+ } from "./chunk-IDMSU2X4.js";
61
+ import "./chunk-IXU23PP5.js";
62
62
  import {
63
63
  CL_DEFAULTS,
64
64
  DEFAULT_FEE_TIER,
@@ -92,7 +92,7 @@ import {
92
92
  selectBestFeeTier,
93
93
  twapTickFromCumulatives,
94
94
  v3SingleHopExtraData
95
- } from "./chunk-WKOTF5H6.js";
95
+ } from "./chunk-7GITFGA4.js";
96
96
  import {
97
97
  CLAIM_SETTLE_BUFFER_SECONDS,
98
98
  DEFAULT_DEADLINE_MARGIN_SECONDS,
@@ -142,7 +142,7 @@ import {
142
142
  registerIdentityCommands,
143
143
  stripVidTag,
144
144
  verifyVidTag
145
- } from "./chunk-PTWYREL2.js";
145
+ } from "./chunk-WJWLM5QE.js";
146
146
  import {
147
147
  emitCalldata,
148
148
  isCalldataOnly,
@@ -157,13 +157,13 @@ import {
157
157
  queryJoinRequests,
158
158
  revokeJoinRequest,
159
159
  stripReferrerPrefix
160
- } from "./chunk-RITIB5RY.js";
160
+ } from "./chunk-FS5DXFRG.js";
161
161
  import {
162
162
  resolveFund,
163
163
  resolveVaultFund,
164
164
  searchFundAcrossChains,
165
165
  setTextRecord
166
- } from "./chunk-DCQELFSU.js";
166
+ } from "./chunk-6H6EFHDS.js";
167
167
  import {
168
168
  PROPOSAL_STATE,
169
169
  PROPOSAL_STATES,
@@ -202,7 +202,7 @@ import {
202
202
  setVotingPeriod,
203
203
  settleProposal,
204
204
  vote
205
- } from "./chunk-QBOBGQQV.js";
205
+ } from "./chunk-V6XUXLJF.js";
206
206
  import {
207
207
  AERODROME,
208
208
  LAUNCH_ADAPTERS,
@@ -223,7 +223,7 @@ import {
223
223
  sendTxWithRetry,
224
224
  waitForReceipt,
225
225
  writeContractWithRetry
226
- } from "./chunk-YJEBZJ7Y.js";
226
+ } from "./chunk-RYKETWBU.js";
227
227
  import {
228
228
  DEFAULT_NETWORK,
229
229
  VALID_NETWORKS,
@@ -2034,7 +2034,7 @@ function registerStrategyProposeCommands(strategy2) {
2034
2034
  }
2035
2035
  }
2036
2036
  if (templateKey === "lighter-perp") {
2037
- const { runLighterProposePreflight } = await import("./lighter-preflight-YOVDIULH.js");
2037
+ const { runLighterProposePreflight } = await import("./lighter-preflight-ERF425PP.js");
2038
2038
  await runLighterProposePreflight(vault, opts, maxDrawdownBps);
2039
2039
  }
2040
2040
  } catch (err) {
@@ -2042,7 +2042,7 @@ function registerStrategyProposeCommands(strategy2) {
2042
2042
  process.exit(1);
2043
2043
  }
2044
2044
  if (!opts.agent) opts.agent = proposer;
2045
- const { parseDuration: parseDuration3, getGovernorOf: getGovernorOf2 } = await import("./governor-L7FTXIAC.js");
2045
+ const { parseDuration: parseDuration3, getGovernorOf: getGovernorOf2 } = await import("./governor-4XHJ52H4.js");
2046
2046
  const strategyDuration2 = parseDuration3(opts.duration);
2047
2047
  const chainId = getChain().id;
2048
2048
  try {
@@ -2171,7 +2171,7 @@ function registerStrategyProposeCommands(strategy2) {
2171
2171
  }
2172
2172
  }
2173
2173
  if (templateKey === "lighter-perp") {
2174
- const { runLighterProposePreflight } = await import("./lighter-preflight-YOVDIULH.js");
2174
+ const { runLighterProposePreflight } = await import("./lighter-preflight-ERF425PP.js");
2175
2175
  await runLighterProposePreflight(vault, opts, maxDrawdownBps);
2176
2176
  }
2177
2177
  preflightSpinner.succeed("Preflight OK");
@@ -2288,9 +2288,9 @@ function registerStrategyProposeCommands(strategy2) {
2288
2288
  console.error(chalk4.red("Missing --name or --duration. Use --write-calls to skip proposal submission."));
2289
2289
  process.exit(1);
2290
2290
  }
2291
- const { propose: propose2 } = await import("./governor-L7FTXIAC.js");
2291
+ const { propose: propose2 } = await import("./governor-4XHJ52H4.js");
2292
2292
  const { pinJSON } = await import("./ipfs-M56BLMCW.js");
2293
- const { parseDuration: parseDuration2 } = await import("./governor-L7FTXIAC.js");
2293
+ const { parseDuration: parseDuration2 } = await import("./governor-4XHJ52H4.js");
2294
2294
  const strategyDuration = parseDuration2(opts.duration);
2295
2295
  const metaSpinner = ora2("Pinning metadata to IPFS...").start();
2296
2296
  let metadataURI;
@@ -2322,7 +2322,7 @@ function registerStrategyProposeCommands(strategy2) {
2322
2322
  metadataURI = `data:application/json;base64,${Buffer.from(inline).toString("base64")}`;
2323
2323
  }
2324
2324
  try {
2325
- const { getAgentFeeBps: getAgentFeeBps2 } = await import("./vault-SV7UAREO.js");
2325
+ const { getAgentFeeBps: getAgentFeeBps2 } = await import("./vault-WC7AS7SM.js");
2326
2326
  const feeBps = await getAgentFeeBps2(vault);
2327
2327
  console.log(
2328
2328
  chalk4.yellow(
@@ -2373,7 +2373,7 @@ function registerStrategyProposeCommands(strategy2) {
2373
2373
  console.log(chalk4.yellow(` asset.approve(${clone}, <repaymentAmount>)`));
2374
2374
  }
2375
2375
  if (templateKey === "lighter-perp") {
2376
- const { lighterNextSteps } = await import("./lighter-preflight-YOVDIULH.js");
2376
+ const { lighterNextSteps } = await import("./lighter-preflight-ERF425PP.js");
2377
2377
  console.log();
2378
2378
  for (const line of lighterNextSteps(clone)) console.log(chalk4.yellow(line));
2379
2379
  }
@@ -2645,7 +2645,7 @@ function registerStrategyTemplateCommands(strategy2) {
2645
2645
  let prices = [];
2646
2646
  let priceSource = null;
2647
2647
  try {
2648
- const { getTokenPricesInAsset } = await import("./price-GZEQNKAF.js");
2648
+ const { getTokenPricesInAsset } = await import("./price-4QVQAIHX.js");
2649
2649
  prices = await getTokenPricesInAsset({
2650
2650
  tokens: allocations.map((a, i) => ({
2651
2651
  token: a.token,
@@ -3062,7 +3062,7 @@ function registerVeniceCommands(program2) {
3062
3062
  console.log(chalk6.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
3063
3063
  console.log(chalk6.dim(" Saved to ~/.sherwood/config.json"));
3064
3064
  try {
3065
- const { createVeniceProvisionAttestation, getEasScanUrl } = await import("./eas-KVH644YY.js");
3065
+ const { createVeniceProvisionAttestation, getEasScanUrl } = await import("./eas-JOU76WZ2.js");
3066
3066
  const attestation = await createVeniceProvisionAttestation(account.address);
3067
3067
  if (attestation) {
3068
3068
  console.log(chalk6.dim(` Attested: ${getEasScanUrl(attestation.uid)}`));
@@ -3418,7 +3418,7 @@ ${opts.prompt}`;
3418
3418
  console.log(chalk6.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
3419
3419
  }
3420
3420
  try {
3421
- const { createVeniceInferenceAttestation, getEasScanUrl } = await import("./eas-KVH644YY.js");
3421
+ const { createVeniceInferenceAttestation, getEasScanUrl } = await import("./eas-JOU76WZ2.js");
3422
3422
  const { keccak256: keccak2562, toHex, isAddress: isAddr } = await import("viem");
3423
3423
  const { getChainContracts: getChainContracts2 } = await import("./config-WIHIVOGZ.js");
3424
3424
  const { getChain: getActiveChain } = await import("./network-XQLQ4MSH.js");
@@ -4417,8 +4417,8 @@ function printSimulationResult(result, callType) {
4417
4417
  }
4418
4418
  async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
4419
4419
  try {
4420
- const xmtp = await import("./xmtp-TOPGDWX3.js");
4421
- const { getAccount: getAccount2 } = await import("./client-IFQ2TMCY.js");
4420
+ const xmtp = await import("./xmtp-NJXD7T7E.js");
4421
+ const { getAccount: getAccount2 } = await import("./client-4CKVYBRP.js");
4422
4422
  const group = await xmtp.getGroup("", subdomain);
4423
4423
  const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
4424
4424
  const criticals = allRisks.filter((r) => r.level === "critical");
@@ -10176,9 +10176,9 @@ try {
10176
10176
  } catch {
10177
10177
  }
10178
10178
  var require2 = createRequire(import.meta.url);
10179
- var CLI_VERSION = "0.90.1";
10179
+ var CLI_VERSION = "0.90.2";
10180
10180
  async function loadXmtp() {
10181
- return import("./xmtp-TOPGDWX3.js");
10181
+ return import("./xmtp-NJXD7T7E.js");
10182
10182
  }
10183
10183
  async function loadCron() {
10184
10184
  return import("./cron-E3UAZF5B.js");
@@ -10855,7 +10855,7 @@ vaultCmd.command("add").description("Register an agent on a vault (creator only)
10855
10855
  agentId = BigInt(opts.agentId);
10856
10856
  } else {
10857
10857
  spinner.text = "Looking up ERC-8004 identity from wallet...";
10858
- const { lookupAgentIdByWallet } = await import("./identity-ZMHBCTOK.js");
10858
+ const { lookupAgentIdByWallet } = await import("./identity-3BLNFZ42.js");
10859
10859
  const resolved = await lookupAgentIdByWallet(agentWallet);
10860
10860
  if (resolved === null) {
10861
10861
  spinner.fail("Agent wallet does not own an ERC-8004 identity NFT");
@@ -11558,7 +11558,7 @@ vaultCmd.command("redeem").description("Redeem vault shares for the underlying a
11558
11558
  var strategy = program.command("strategy").description("Strategy templates \u2014 list, clone, propose");
11559
11559
  registerStrategyTemplateCommands(strategy);
11560
11560
  program.command("providers").description("List available providers (research + swap routing)").action(async () => {
11561
- const { listProviders } = await import("./providers-3PSOZI6R.js");
11561
+ const { listProviders } = await import("./providers-P27BDYZ2.js");
11562
11562
  for (const info2 of listProviders()) {
11563
11563
  console.log(`
11564
11564
  ${info2.name} (${info2.type})`);
@@ -11568,7 +11568,7 @@ ${info2.name} (${info2.type})`);
11568
11568
  }
11569
11569
  });
11570
11570
  try {
11571
- const { registerChatCommands } = await import("./chat-FSAHNEIY.js");
11571
+ const { registerChatCommands } = await import("./chat-HS7OIE2Y.js");
11572
11572
  registerChatCommands(program);
11573
11573
  } catch {
11574
11574
  program.command("chat <name> [action] [actionArgs...]").description("Vault chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
@@ -11578,7 +11578,7 @@ try {
11578
11578
  process.exit(1);
11579
11579
  });
11580
11580
  }
11581
- var { registerSessionCommands } = await import("./session-LIMD5AG5.js");
11581
+ var { registerSessionCommands } = await import("./session-ZIJYGOAT.js");
11582
11582
  registerSessionCommands(program);
11583
11583
  registerVeniceCommands(program);
11584
11584
  registerAllowanceCommands(program);
@@ -11587,15 +11587,15 @@ registerProposalCommands(program);
11587
11587
  registerQueueCommands(program);
11588
11588
  registerGovernorCommands(program);
11589
11589
  registerGuardianCommands(program);
11590
- var { registerResearchCommands } = await import("./research-C4W7C5S6.js");
11590
+ var { registerResearchCommands } = await import("./research-N2R76ELJ.js");
11591
11591
  registerResearchCommands(program);
11592
- var { registerAgentCommands } = await import("./agent-DLLONQ76.js");
11592
+ var { registerAgentCommands } = await import("./agent-LVDMPKHK.js");
11593
11593
  registerAgentCommands(program);
11594
- var { registerTradeCommands } = await import("./trade-U5TZIZHF.js");
11594
+ var { registerTradeCommands } = await import("./trade-2J555BS7.js");
11595
11595
  registerTradeCommands(program);
11596
11596
  registerGridCommand(program);
11597
11597
  registerLighterCommands(program);
11598
- var { registerLaunchpadCommands } = await import("./launchpad-CEUSWTXH.js");
11598
+ var { registerLaunchpadCommands } = await import("./launchpad-ZVC7Z5JJ.js");
11599
11599
  registerLaunchpadCommands(program);
11600
11600
  var configCmd = program.command("config");
11601
11601
  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("--xmtp-group <subdomain:groupId>", "Cache an XMTP group ID for a vault (e.g. my-vault:abc123)").action((opts) => {
@@ -7,12 +7,13 @@ import {
7
7
  claimBlocker,
8
8
  readLaunchpad,
9
9
  registerLaunchpadCommands,
10
+ revertReason,
10
11
  stonkBondCall
11
- } from "./chunk-UKWKI4UC.js";
12
+ } from "./chunk-5G4SESMO.js";
12
13
  import "./chunk-T5NA6KOF.js";
13
14
  import "./chunk-GAQMHH44.js";
14
15
  import "./chunk-LSY4GYJ2.js";
15
- import "./chunk-YJEBZJ7Y.js";
16
+ import "./chunk-RYKETWBU.js";
16
17
  import "./chunk-JDTTJDGP.js";
17
18
  import "./chunk-XJR2YQK3.js";
18
19
  import "./chunk-SCWNKVNW.js";
@@ -25,6 +26,7 @@ export {
25
26
  claimBlocker,
26
27
  readLaunchpad,
27
28
  registerLaunchpadCommands,
29
+ revertReason,
28
30
  stonkBondCall
29
31
  };
30
- //# sourceMappingURL=launchpad-CEUSWTXH.js.map
32
+ //# sourceMappingURL=launchpad-ZVC7Z5JJ.js.map
@@ -109,7 +109,7 @@ async function lighterProposePreflight(client, p) {
109
109
  }
110
110
  async function runLighterProposePreflight(vault, opts, maxDrawdownBps) {
111
111
  const [{ getPublicClient }, { getNetwork }, chalk, tpl] = await Promise.all([
112
- import("./client-IFQ2TMCY.js"),
112
+ import("./client-4CKVYBRP.js"),
113
113
  import("./network-XQLQ4MSH.js"),
114
114
  import("chalk").then((m) => m.default),
115
115
  import("./lighter-perp-template-QRQUEV7E.js")
@@ -146,4 +146,4 @@ export {
146
146
  runLighterProposePreflight,
147
147
  unknownMarkets
148
148
  };
149
- //# sourceMappingURL=lighter-preflight-YOVDIULH.js.map
149
+ //# sourceMappingURL=lighter-preflight-ERF425PP.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  quote
3
- } from "./chunk-WKOTF5H6.js";
3
+ } from "./chunk-7GITFGA4.js";
4
4
  import "./chunk-T5NA6KOF.js";
5
5
  import {
6
6
  SYNTHRA
7
7
  } from "./chunk-LSY4GYJ2.js";
8
8
  import {
9
9
  getPublicClient
10
- } from "./chunk-YJEBZJ7Y.js";
10
+ } from "./chunk-RYKETWBU.js";
11
11
  import {
12
12
  getNetwork
13
13
  } from "./chunk-JDTTJDGP.js";
@@ -135,4 +135,4 @@ export {
135
135
  getTokenPriceInAsset,
136
136
  getTokenPricesInAsset
137
137
  };
138
- //# sourceMappingURL=price-GZEQNKAF.js.map
138
+ //# sourceMappingURL=price-4QVQAIHX.js.map
@@ -2,8 +2,8 @@ import {
2
2
  MessariProvider,
3
3
  NansenProvider,
4
4
  getResearchProvider
5
- } from "./chunk-25VV4W6X.js";
6
- import "./chunk-YJEBZJ7Y.js";
5
+ } from "./chunk-D5Y73ITZ.js";
6
+ import "./chunk-RYKETWBU.js";
7
7
  import {
8
8
  robinhoodTestnet
9
9
  } from "./chunk-JDTTJDGP.js";
@@ -28,4 +28,4 @@ export {
28
28
  getResearchProvider,
29
29
  listProviders
30
30
  };
31
- //# sourceMappingURL=providers-3PSOZI6R.js.map
31
+ //# sourceMappingURL=providers-P27BDYZ2.js.map
@@ -2,11 +2,11 @@ import {
2
2
  MESSARI_COST_ESTIMATE,
3
3
  NANSEN_COST_ESTIMATE,
4
4
  getResearchProvider
5
- } from "./chunk-25VV4W6X.js";
5
+ } from "./chunk-D5Y73ITZ.js";
6
6
  import {
7
7
  formatContractError,
8
8
  getAccount
9
- } from "./chunk-YJEBZJ7Y.js";
9
+ } from "./chunk-RYKETWBU.js";
10
10
  import "./chunk-JDTTJDGP.js";
11
11
  import "./chunk-XJR2YQK3.js";
12
12
 
@@ -16,7 +16,7 @@ import ora from "ora";
16
16
  import { confirm } from "@inquirer/prompts";
17
17
  import { isAddress } from "viem";
18
18
  async function loadXmtp() {
19
- return import("./xmtp-TOPGDWX3.js");
19
+ return import("./xmtp-NJXD7T7E.js");
20
20
  }
21
21
  var COST_ESTIMATES = {
22
22
  messari: MESSARI_COST_ESTIMATE,
@@ -83,7 +83,7 @@ function formatValue(value) {
83
83
  }
84
84
  async function postResearch(fundName, result, prompt) {
85
85
  const { pinJSON } = await import("./ipfs-M56BLMCW.js");
86
- const { createResearchAttestation, getEasScanUrl } = await import("./eas-KVH644YY.js");
86
+ const { createResearchAttestation, getEasScanUrl } = await import("./eas-JOU76WZ2.js");
87
87
  const xmtp = await loadXmtp();
88
88
  const pinSpinner = ora("Pinning research result to IPFS...").start();
89
89
  let resultUri;
@@ -315,4 +315,4 @@ function registerResearchCommands(program) {
315
315
  export {
316
316
  registerResearchCommands
317
317
  };
318
- //# sourceMappingURL=research-C4W7C5S6.js.map
318
+ //# sourceMappingURL=research-N2R76ELJ.js.map
@@ -11,19 +11,19 @@ import {
11
11
  getGuardianRegistryEvents,
12
12
  getStakedWoodEvents,
13
13
  getVaultEvents
14
- } from "./chunk-QQJAM24N.js";
14
+ } from "./chunk-IXU23PP5.js";
15
15
  import {
16
16
  resolveFund
17
- } from "./chunk-DCQELFSU.js";
17
+ } from "./chunk-6H6EFHDS.js";
18
18
  import {
19
19
  getGovernorOf
20
- } from "./chunk-QBOBGQQV.js";
20
+ } from "./chunk-V6XUXLJF.js";
21
21
  import {
22
22
  SHERWOOD
23
23
  } from "./chunk-LSY4GYJ2.js";
24
24
  import {
25
25
  getPublicClient
26
- } from "./chunk-YJEBZJ7Y.js";
26
+ } from "./chunk-RYKETWBU.js";
27
27
  import "./chunk-JDTTJDGP.js";
28
28
  import {
29
29
  loadConfig
@@ -36,7 +36,7 @@ import "./chunk-YMB4RJOR.js";
36
36
  // src/commands/session.ts
37
37
  import chalk from "chalk";
38
38
  async function loadXmtp() {
39
- return import("./xmtp-TOPGDWX3.js");
39
+ return import("./xmtp-NJXD7T7E.js");
40
40
  }
41
41
  async function resolveGovernor(vaultAddress) {
42
42
  const client = getPublicClient();
@@ -355,4 +355,4 @@ function registerSessionCommands(program) {
355
355
  export {
356
356
  registerSessionCommands
357
357
  };
358
- //# sourceMappingURL=session-LIMD5AG5.js.map
358
+ //# sourceMappingURL=session-ZIJYGOAT.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getResearchProvider
3
- } from "./chunk-25VV4W6X.js";
3
+ } from "./chunk-D5Y73ITZ.js";
4
4
  import "./chunk-EGJESQXZ.js";
5
5
  import {
6
6
  chatCompletion
7
- } from "./chunk-WTPIXSGL.js";
7
+ } from "./chunk-G3LPD43A.js";
8
8
  import {
9
9
  getQuote
10
- } from "./chunk-WKOTF5H6.js";
10
+ } from "./chunk-7GITFGA4.js";
11
11
  import "./chunk-T5NA6KOF.js";
12
12
  import {
13
13
  TOKENS
@@ -18,7 +18,7 @@ import {
18
18
  getPublicClient,
19
19
  sendTxWithRetry,
20
20
  waitForReceipt
21
- } from "./chunk-YJEBZJ7Y.js";
21
+ } from "./chunk-RYKETWBU.js";
22
22
  import {
23
23
  getChain,
24
24
  getExplorerUrl,
@@ -557,7 +557,7 @@ async function getCurrentPrice(tokenAddress, tokenDecimals, feeTier) {
557
557
  // src/commands/trade.ts
558
558
  var uniswap = new UniswapProvider();
559
559
  async function loadXmtp() {
560
- return import("./xmtp-TOPGDWX3.js");
560
+ return import("./xmtp-NJXD7T7E.js");
561
561
  }
562
562
  var ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
563
563
  var KNOWN_MEMECOINS = {
@@ -754,7 +754,7 @@ function registerTradeCommands(program) {
754
754
  }
755
755
  const wrapSpinner = ora("Wrapping ETH \u2192 WETH...").start();
756
756
  try {
757
- const { writeContractWithRetry: writeContractWithRetry2, waitForReceipt: waitForReceiptFn } = await import("./client-IFQ2TMCY.js");
757
+ const { writeContractWithRetry: writeContractWithRetry2, waitForReceipt: waitForReceiptFn } = await import("./client-4CKVYBRP.js");
758
758
  const wethAddr = TOKENS().WETH;
759
759
  const wrapHash = await writeContractWithRetry2({
760
760
  address: wethAddr,
@@ -877,7 +877,7 @@ function registerTradeCommands(program) {
877
877
  }
878
878
  console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
879
879
  try {
880
- const { createTradeAttestation, getEasScanUrl } = await import("./eas-KVH644YY.js");
880
+ const { createTradeAttestation, getEasScanUrl } = await import("./eas-JOU76WZ2.js");
881
881
  const { getChainContracts } = await import("./config-WIHIVOGZ.js");
882
882
  const { getChain: getActiveChain } = await import("./network-XQLQ4MSH.js");
883
883
  const vaultRecipient = getChainContracts(getActiveChain().id).vault;
@@ -1005,7 +1005,7 @@ function registerTradeCommands(program) {
1005
1005
  }
1006
1006
  console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
1007
1007
  try {
1008
- const { createTradeAttestation, getEasScanUrl } = await import("./eas-KVH644YY.js");
1008
+ const { createTradeAttestation, getEasScanUrl } = await import("./eas-JOU76WZ2.js");
1009
1009
  const { getChainContracts } = await import("./config-WIHIVOGZ.js");
1010
1010
  const { getChain: getActiveChain } = await import("./network-XQLQ4MSH.js");
1011
1011
  const vaultRecipient = getChainContracts(getActiveChain().id).vault;
@@ -1182,4 +1182,4 @@ function sleep(ms) {
1182
1182
  export {
1183
1183
  registerTradeCommands
1184
1184
  };
1185
- //# sourceMappingURL=trade-U5TZIZHF.js.map
1185
+ //# sourceMappingURL=trade-2J555BS7.js.map
@@ -22,11 +22,11 @@ import {
22
22
  removeDepositor,
23
23
  setAgentFeeBps,
24
24
  setVaultAddress
25
- } from "./chunk-OFGBQAUM.js";
26
- import "./chunk-QQJAM24N.js";
27
- import "./chunk-QBOBGQQV.js";
25
+ } from "./chunk-IDMSU2X4.js";
26
+ import "./chunk-IXU23PP5.js";
27
+ import "./chunk-V6XUXLJF.js";
28
28
  import "./chunk-LSY4GYJ2.js";
29
- import "./chunk-YJEBZJ7Y.js";
29
+ import "./chunk-RYKETWBU.js";
30
30
  import "./chunk-JDTTJDGP.js";
31
31
  import "./chunk-XJR2YQK3.js";
32
32
  import "./chunk-SCWNKVNW.js";
@@ -56,4 +56,4 @@ export {
56
56
  setAgentFeeBps,
57
57
  setVaultAddress
58
58
  };
59
- //# sourceMappingURL=vault-SV7UAREO.js.map
59
+ //# sourceMappingURL=vault-WC7AS7SM.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getTextRecord
3
- } from "./chunk-DCQELFSU.js";
3
+ } from "./chunk-6H6EFHDS.js";
4
4
  import "./chunk-LSY4GYJ2.js";
5
5
  import {
6
6
  getAccount
7
- } from "./chunk-YJEBZJ7Y.js";
7
+ } from "./chunk-RYKETWBU.js";
8
8
  import {
9
9
  getChainConfig
10
10
  } from "./chunk-JDTTJDGP.js";
@@ -315,4 +315,4 @@ export {
315
315
  sendReaction,
316
316
  streamMessages
317
317
  };
318
- //# sourceMappingURL=xmtp-TOPGDWX3.js.map
318
+ //# sourceMappingURL=xmtp-NJXD7T7E.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sherwoodagent/cli",
3
- "version": "0.90.1",
3
+ "version": "0.90.2",
4
4
  "description": "CLI for agent-managed onchain vaults — strategies, depositors, and XMTP chat",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/launchpad.ts"],"sourcesContent":["/**\n * Launchpad — template flags + operator commands.\n *\n * sherwood launchpad status <strategy> launch, reserve, claim window, fee venue\n * sherwood launchpad claim <strategy> take the signer's slice of the reserve\n * sherwood launchpad claim-for <strategy> <holder> pay a holder their slice (permissionless)\n * sherwood launchpad collect-fees <strategy> push accrued creator fees to the vault\n * sherwood launchpad finalize <strategy> graduate + bond a StonkBrokers launch\n *\n * Every write runs its own preflight and refuses before sending a transaction\n * that would revert. Every write honours the global `--calldata-only` flag.\n *\n * WHAT STATUS DELIBERATELY DOES NOT SHOW: a price for the launch token. The\n * template exists to acquire an asset the protocol refuses to price (its\n * settlement never sells the fund token, because that price is movable inside\n * the settling transaction), so this view prints balances and times only.\n */\n\nimport type { Command } from \"commander\";\nimport type { Address, Hex } from \"viem\";\nimport { formatUnits, isAddress } from \"viem\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport type { ChainId } from \"@sherwoodagent/sdk\";\n\nimport {\n getPublicClient,\n getAccount,\n writeContractWithRetry,\n waitForReceipt,\n formatContractError,\n} from \"../lib/client.js\";\nimport { getChain, getExplorerUrl } from \"../lib/network.js\";\nimport { isCalldataOnly, emitCalldata } from \"../lib/calldata.js\";\nimport { LAUNCHPAD_STRATEGY_ABI, LAUNCH_ADAPTER_ABI, SYNDICATE_VAULT_ABI, ERC20_ABI } from \"../lib/abis.js\";\nimport { LAUNCH_ADAPTERS } from \"../lib/addresses.js\";\nimport {\n decodeStonkVenueData,\n decodeSushiVenueData,\n encodeClaimCalldata,\n encodeClaimForCalldata,\n encodeCollectFeesCalldata,\n encodeFinalizeCalldata,\n sameAddr,\n type LaunchVenue,\n} from \"../strategies/launchpad-template.js\";\n\nconst ZERO: Address = \"0x0000000000000000000000000000000000000000\";\nconst ZERO_REF: Hex = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\nexport const STRATEGY_STATES = [\"Pending\", \"Executed\", \"Settled\"] as const;\n/** `ILaunchAdapter.LaunchPhase`, by ordinal. */\nexport const LAUNCH_PHASES = [\"None\", \"Curve\", \"Closing\", \"Live\", \"Failed\"] as const;\n\n// ── Template flags (registered on `strategy propose` / `clone` / `init`) ──\n\n/**\n * The Launchpad template's flags. Added to an existing command only where the\n * flag is not already declared, so a flag shared with another template (e.g.\n * `--swap-adapter`, `--max-drawdown-bps`) keeps its original declaration.\n */\nexport const LAUNCHPAD_TEMPLATE_OPTIONS: ReadonlyArray<readonly [string, string]> = [\n [\"--venue <venue>\", \"Launchpad: launch venue, sushi or stonk (default: sushi)\"],\n [\"--asset-in <n>\", \"Launchpad: vault-asset budget for the launch, in human units (required)\"],\n [\"--quote <token>\", \"Launchpad: quote token the fund token is paired against — symbol or address (required)\"],\n [\"--reserve <n>\", \"Launchpad: launch tokens held back for holders' claims, whole tokens or a percent of supply like 10% (required; at most 20%)\"],\n [\"--min-tokens-out <n>\", \"Launchpad: slippage floor on the dev buy, whole launch tokens (required; >= --reserve on Sushi)\"],\n [\"--claim-window <duration>\", \"Launchpad: how long holders may claim, e.g. 7d (required; at most 14d; clamped to the proposal duration − 5m)\"],\n [\"--token-name <name>\", \"Launchpad: launch token name (required)\"],\n [\"--token-symbol <symbol>\", \"Launchpad: launch token symbol (required)\"],\n [\"--min-quote-out <n>\", \"Launchpad: floor on the asset→quote swap, in quote units (default: adapter quote less --settle-slippage-bps)\"],\n [\"--deadline <ts|duration>\", \"Launchpad: venue deadline, unix seconds or a duration from now, 0 for none (default: governor collaboration + voting + execution windows + 1d)\"],\n [\"--settle-slippage-bps <bps>\", \"Settle-time slippage tolerance in bps, 1-1000 (Launchpad: quote conversion; CL: the settle swap, can only be tightened later; default 500)\"],\n [\"--max-fee-in <n>\", \"Launchpad: most the native launch fee may cost, in the token that pays it (default: live cost + 25%; lower than the live cost is refused)\"],\n [\"--quote-swap-route <spec>\", \"Launchpad: asset→quote route, 0x extraData or v3:<fee> / v4:<fee>:<ts> / v4path:… (default: best v3 tier quoted by the swap adapter)\"],\n [\"--fee-swap-route <spec>\", \"Launchpad: quote→fee-token route when the fee token is neither asset nor quote (default: best v3 tier)\"],\n [\"--launch-adapter <address>\", \"Launchpad: launch adapter override (default: LAUNCH_ADAPTERS()[venue])\"],\n [\"--swap-adapter <address>\", \"Swap adapter address\"],\n [\"--liquidity <mode>\", \"Launchpad/Sushi: standard or moon (default: standard)\"],\n [\"--fee-mode <mode>\", \"Launchpad/Sushi: fee disposition, direct, burn or buyback (default: direct; holders is refused)\"],\n [\"--stonk-supply <n>\", \"Launchpad/Stonk: total supply in whole tokens (default: 1000000000)\"],\n [\"--start-mcap <usd>\", \"Launchpad/Stonk: starting market cap in USD (default: 10000)\"],\n [\"--grad-mcap <usd>\", \"Launchpad/Stonk: graduation market cap in USD (default: 100000)\"],\n [\"--start-tax-bps <bps>\", \"Launchpad/Stonk: opening trade tax (default: 1000)\"],\n [\"--tax-decay-bps <bps>\", \"Launchpad/Stonk: tax decay per minute; start/decay × 60 is the curve window (default: 100 → 600s)\"],\n [\"--sells-disabled\", \"Launchpad/Stonk: disable sells on the curve\"],\n [\"--buffer-secs <n>\", \"Launchpad/Stonk: opening anti-snipe shield in seconds (default: 60)\"],\n [\"--unsold-mode <mode>\", \"Launchpad/Stonk: unsold supply at graduation, burn or lp (default: burn)\"],\n [\"--open-ended\", \"Launchpad/Stonk: no closing deadline (requires sells and --post-tax-bps 100-500)\"],\n [\"--post-tax-bps <bps>\", \"Launchpad/Stonk: tax after the decay schedule (default: 0, or 100 with --open-ended)\"],\n [\"--bond-venue <n>\", \"Launchpad/Stonk: AMM bond() mints the locked LP on (default: 0)\"],\n [\"--max-buy-ppm <n>\", \"Launchpad/Stonk: per-wallet buy cap in ppm of supply, 0 = none (default: 0; a cap also caps the fund's dev buy)\"],\n [\n \"--max-drawdown-bps <bps>\",\n \"Declared loss allowance. Launchpad default: --asset-in / totalAssets + 200 bps, because a launch settles as a loss of ~--asset-in; a lower value is refused\",\n ],\n];\n\nexport function addLaunchpadTemplateOptions(cmd: Command): Command {\n for (const [flags, description] of LAUNCHPAD_TEMPLATE_OPTIONS) {\n const long = flags.split(/[ ,]/)[0];\n if (cmd.options.some((o) => o.long === long)) continue;\n cmd.option(flags, description);\n }\n return cmd;\n}\n\n// ── Reads ──\n\nexport interface LaunchpadSnapshot {\n strategy: Address;\n state: (typeof STRATEGY_STATES)[number];\n vault: Address;\n proposer: Address;\n asset: Address;\n quoteToken: Address;\n launchAdapter: Address;\n swapAdapter: Address;\n venue: LaunchVenue | \"unknown\";\n venueData: Hex;\n launchToken: Address;\n launchRef: Hex;\n tokenName: string;\n tokenSymbol: string;\n launchSupply: bigint;\n reserveAmount: bigint;\n reserve: bigint;\n totalClaimed: bigint;\n snap: bigint;\n windowEnd: bigint;\n anyoneSettleAt: bigint;\n assetIn: bigint;\n maxFeeIn: bigint;\n phase: (typeof LAUNCH_PHASES)[number] | null;\n /** Latest block timestamp. */\n now: bigint;\n /** The vault's ERC-5805 clock (timestamp-based on v1). */\n vaultClock: bigint;\n}\n\n/** The subset of a viem PublicClient these commands read through. */\nexport interface LaunchpadReadClient {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readContract(args: any): Promise<any>;\n getBlock(args?: { blockTag?: \"latest\" }): Promise<{ timestamp: bigint }>;\n}\n\nfunction venueOf(adapter: Address): LaunchVenue | \"unknown\" {\n const a = LAUNCH_ADAPTERS() as Record<string, Address>;\n if (a.SUSHI && a.SUSHI !== ZERO && sameAddr(adapter, a.SUSHI)) return \"sushi\";\n if (a.STONK && a.STONK !== ZERO && sameAddr(adapter, a.STONK)) return \"stonk\";\n return \"unknown\";\n}\n\nexport async function readLaunchpad(strategy: Address, client: LaunchpadReadClient): Promise<LaunchpadSnapshot> {\n const read = (functionName: string, args?: unknown[]) =>\n client.readContract({ address: strategy, abi: LAUNCHPAD_STRATEGY_ABI, functionName, args });\n\n let name: string;\n try {\n name = (await read(\"name\")) as string;\n } catch {\n throw new Error(`${strategy} does not answer name() — not a strategy clone`);\n }\n if (name !== \"Launchpad\") throw new Error(`${strategy} is a \"${name}\" strategy, not Launchpad`);\n\n const [\n stateN, vault, proposer, asset, quoteToken, launchAdapter, swapAdapter, venueData, launchToken, launchRef,\n tokenName, tokenSymbol, launchSupply, reserveAmount, reserve, totalClaimed, snap, windowEnd, anyoneSettleAt,\n assetIn, maxFeeIn, block,\n ] = (await Promise.all([\n read(\"state\"), read(\"vault\"), read(\"proposer\"), read(\"asset\"), read(\"quoteToken\"), read(\"launchAdapter\"),\n read(\"swapAdapter\"), read(\"venueData\"), read(\"launchToken\"), read(\"launchRef\"), read(\"tokenName\"),\n read(\"tokenSymbol\"), read(\"launchSupply\"), read(\"reserveAmount\"), read(\"reserve\"), read(\"totalClaimed\"),\n read(\"snap\"), read(\"windowEnd\"), read(\"anyoneSettleAt\"), read(\"assetIn\"), read(\"maxFeeIn\"),\n client.getBlock({ blockTag: \"latest\" }),\n ])) as [\n number, Address, Address, Address, Address, Address, Address, Hex, Address, Hex, string, string, bigint, bigint,\n bigint, bigint, bigint, bigint, bigint, bigint, bigint, { timestamp: bigint },\n ];\n\n let phase: LaunchpadSnapshot[\"phase\"] = null;\n if (launchRef !== ZERO_REF) {\n try {\n const p = Number(\n await client.readContract({ address: launchAdapter, abi: LAUNCH_ADAPTER_ABI, functionName: \"phase\", args: [launchRef] }),\n );\n phase = LAUNCH_PHASES[p] ?? null;\n } catch {\n phase = null;\n }\n }\n\n let vaultClock = block.timestamp;\n try {\n vaultClock = BigInt(await client.readContract({ address: vault, abi: SYNDICATE_VAULT_ABI, functionName: \"clock\" }));\n } catch {\n /* v1 vaults are timestamp-clocked; fall back to the block timestamp */\n }\n\n return {\n strategy,\n state: STRATEGY_STATES[Number(stateN)] ?? \"Pending\",\n vault,\n proposer,\n asset,\n quoteToken,\n launchAdapter,\n swapAdapter,\n venue: venueOf(launchAdapter),\n venueData,\n launchToken,\n launchRef,\n tokenName,\n tokenSymbol,\n launchSupply,\n reserveAmount,\n reserve,\n totalClaimed,\n snap,\n windowEnd,\n anyoneSettleAt,\n assetIn,\n maxFeeIn,\n phase,\n now: block.timestamp,\n vaultClock,\n };\n}\n\n/**\n * Why `holder` cannot claim right now, or `null` when a claim would succeed.\n * Mirrors `LaunchpadStrategy._claim`'s gates in order.\n */\nexport function claimBlocker(\n s: LaunchpadSnapshot,\n h: { claimed: boolean; claimable: bigint; isQueue: boolean },\n): string | null {\n if (s.state !== \"Executed\") {\n return s.state === \"Pending\"\n ? \"the launch has not executed yet — there is no reserve to claim (NotClaimable)\"\n : \"the strategy has settled; the unclaimed reserve went to the vault in kind (NotClaimable)\";\n }\n if (s.now > s.windowEnd) return `the claim window closed at ${fmtTs(s.windowEnd)} (ClaimWindowClosed)`;\n if (s.vaultClock <= s.snap) return \"the snapshot is not final yet — claim from the next block (SnapshotNotFinal)\";\n if (h.claimed) return \"this holder already claimed (AlreadyClaimed)\";\n if (h.isQueue) return \"the vault's withdrawal queue cannot receive launch tokens (QueueCannotClaim)\";\n if (h.claimable === 0n) return \"this holder had no vault shares at the snapshot (ZeroEntitlement)\";\n return null;\n}\n\nasync function readHolder(\n s: LaunchpadSnapshot,\n holder: Address,\n client: LaunchpadReadClient,\n): Promise<{ claimed: boolean; claimable: bigint; isQueue: boolean }> {\n const [claimed, claimable, queue] = (await Promise.all([\n client.readContract({ address: s.strategy, abi: LAUNCHPAD_STRATEGY_ABI, functionName: \"claimed\", args: [holder] }),\n client.readContract({ address: s.strategy, abi: LAUNCHPAD_STRATEGY_ABI, functionName: \"claimable\", args: [holder] }),\n client\n .readContract({ address: s.vault, abi: SYNDICATE_VAULT_ABI, functionName: \"withdrawalQueue\" })\n .catch(() => ZERO),\n ])) as [boolean, bigint, Address];\n return { claimed, claimable, isQueue: queue !== ZERO && sameAddr(queue, holder) };\n}\n\nfunction fmtTs(ts: bigint): string {\n if (ts === 0n) return \"—\";\n return `${new Date(Number(ts) * 1000).toISOString()} (${ts})`;\n}\n\nfunction fmtCountdown(target: bigint, now: bigint): string {\n if (target === 0n) return \"\";\n if (target <= now) return \" — passed\";\n const secs = Number(target - now);\n const d = Math.floor(secs / 86400);\n const h = Math.floor((secs % 86400) / 3600);\n const m = Math.floor((secs % 3600) / 60);\n return ` — in ${d}d ${h}h ${m}m`;\n}\n\nfunction fmtTokens(v: bigint): string {\n return formatUnits(v, 18);\n}\n\nfunction parseAddressArg(raw: string, what: string): Address {\n if (!isAddress(raw)) {\n console.error(chalk.red(`Invalid ${what} address: ${raw}`));\n process.exit(1);\n }\n return raw as Address;\n}\n\nfunction venueDetail(s: LaunchpadSnapshot): string {\n if (s.venue === \"sushi\") {\n const v = decodeSushiVenueData(s.venueData);\n return v ? `Sushi Launchpad V2 — liquidity ${v.liquidityMode}, fee disposition ${v.feeMode}` : \"Sushi Launchpad V2 — unreadable venue data\";\n }\n if (s.venue === \"stonk\") {\n const v = decodeStonkVenueData(s.venueData);\n if (!v) return \"StonkBrokers — unreadable venue data\";\n return (\n `StonkBrokers — start $${formatUnits(v.startMcapUsd8, 8)}, graduation $${formatUnits(v.gradMcapUsd8, 8)}, ` +\n `tax ${v.startTaxBps} bps −${v.taxDecayPerMinuteBps}/min, ${v.openEnded ? \"open-ended\" : \"timed\"}, ` +\n `unsold ${v.unsoldMode === 0 ? \"burned\" : \"LP'd\"}`\n );\n }\n return `unrecognised launch adapter ${s.launchAdapter}`;\n}\n\n/** Emit one unsigned tx as a PreparedAction (the `--calldata-only` convention). */\nfunction emitSingleTx(to: Address, data: Hex, description: string): void {\n emitCalldata({\n txs: [{ to, data, value: \"0x0\", chainId: getChain().id as ChainId }],\n preconditions: [],\n description,\n });\n}\n\nasync function sendTx(label: string, address: Address, abi: unknown, functionName: string, args: unknown[]): Promise<void> {\n const spinner = ora(label).start();\n try {\n const hash = await writeContractWithRetry({\n account: getAccount(),\n chain: getChain(),\n address,\n abi,\n functionName,\n args,\n });\n const receipt = await waitForReceipt(hash);\n if (receipt.status === \"reverted\") throw new Error(`${functionName} reverted on-chain (${hash})`);\n spinner.succeed(`${label} done`);\n console.log(chalk.dim(` Tx: ${getExplorerUrl(hash)}`));\n } catch (err) {\n spinner.fail(`${label} failed`);\n console.error(chalk.red(formatContractError(err)));\n process.exit(1);\n }\n}\n\nasync function loadOrExit(strategyRaw: string): Promise<LaunchpadSnapshot> {\n const strategy = parseAddressArg(strategyRaw, \"strategy\");\n try {\n return await readLaunchpad(strategy, getPublicClient());\n } catch (err) {\n console.error(chalk.red(formatContractError(err)));\n process.exit(1);\n }\n}\n\nfunction signerAddress(): Address | null {\n try {\n return getAccount().address;\n } catch {\n return null;\n }\n}\n\n// ── Commands ──\n\nexport function registerLaunchpadCommands(program: Command): void {\n const lp = program\n .command(\"launchpad\")\n .description(\"Launchpad strategy operations: status, reserve claims, fee collection, Stonk finalize\");\n\n lp.command(\"status\")\n .description(\"Show a Launchpad strategy: launch, reserve, claim window, venue\")\n .argument(\"<strategy>\", \"LaunchpadStrategy clone address\")\n .option(\"--holder <address>\", \"Show this holder's claim (default: your wallet, when a key is configured)\")\n .option(\"--json\", \"Print JSON\")\n .action(async (strategyRaw: string, opts: { holder?: string; json?: boolean }) => {\n const s = await loadOrExit(strategyRaw);\n const client = getPublicClient();\n const holder = opts.holder ? parseAddressArg(opts.holder, \"holder\") : signerAddress();\n\n let holderView: { holder: Address; claimable: bigint; claimableNow: bigint; claimed: boolean; blocker: string | null } | null = null;\n if (holder) {\n const h = await readHolder(s, holder, client);\n const blocker = claimBlocker(s, h);\n // `claimable()` ignores the time gates on purpose; gate it here.\n holderView = { holder, claimable: h.claimable, claimableNow: blocker ? 0n : h.claimable, claimed: h.claimed, blocker };\n }\n\n let assetSymbol = \"asset\";\n let assetDecimals = 18;\n try {\n [assetSymbol, assetDecimals] = (await Promise.all([\n client.readContract({ address: s.asset, abi: ERC20_ABI, functionName: \"symbol\" }),\n client.readContract({ address: s.asset, abi: ERC20_ABI, functionName: \"decimals\" }),\n ])) as [string, number];\n } catch {\n /* cosmetic */\n }\n\n if (opts.json) {\n const out = {\n ...s,\n venueDetail: venueDetail(s),\n unclaimed: s.reserve - s.totalClaimed,\n holder: holderView,\n };\n console.log(JSON.stringify(out, (_k, v) => (typeof v === \"bigint\" ? v.toString() : v), 2));\n return;\n }\n\n const launched = s.launchToken !== ZERO;\n console.log();\n console.log(chalk.bold(`Launchpad ${s.strategy}`));\n console.log(` State: ${s.state}${s.phase ? ` (venue phase: ${s.phase})` : \"\"}`);\n console.log(` Venue: ${venueDetail(s)}`);\n console.log(` Launch adapter: ${s.launchAdapter}`);\n console.log(` Vault: ${s.vault}`);\n console.log(` Token: ${s.tokenName} (${s.tokenSymbol})${launched ? ` at ${s.launchToken}` : \" — not launched yet\"}`);\n if (launched) console.log(` launchRef: ${s.launchRef}`);\n console.log(` Budget: ${formatUnits(s.assetIn, assetDecimals)} ${assetSymbol}; quote ${s.quoteToken}`);\n console.log(` Supply: ${fmtTokens(s.launchSupply)}`);\n if (launched) {\n const unclaimed = s.reserve - s.totalClaimed;\n console.log(` Reserve: ${fmtTokens(s.reserve)} (claimed ${fmtTokens(s.totalClaimed)}, unclaimed ${fmtTokens(unclaimed)})`);\n console.log(` Snapshot: vault clock ${s.snap}`);\n console.log(` Claim window end: ${fmtTs(s.windowEnd)}${fmtCountdown(s.windowEnd, s.now)}`);\n console.log(` Anyone-settle at: ${fmtTs(s.anyoneSettleAt)}${fmtCountdown(s.anyoneSettleAt, s.now)}`);\n } else {\n console.log(` Reserve: ${fmtTokens(s.reserveAmount)} (configured)`);\n }\n console.log(chalk.dim(\" Creator fees are paid to the vault, not into the claim pot: `sherwood launchpad collect-fees`.\"));\n if (holderView) {\n console.log();\n console.log(` Holder ${holderView.holder}:`);\n console.log(` Entitlement: ${fmtTokens(holderView.claimable)}${holderView.claimed ? \" (already claimed)\" : \"\"}`);\n console.log(` Claimable now: ${fmtTokens(holderView.claimableNow)}`);\n if (holderView.blocker) console.log(chalk.dim(` Why not: ${holderView.blocker}`));\n }\n console.log();\n });\n\n lp.command(\"claim\")\n .description(\"Claim your pro-rata slice of the launch reserve (dividend in kind; shares are not burned)\")\n .argument(\"<strategy>\", \"LaunchpadStrategy clone address\")\n .option(\"--holder <address>\", \"With --calldata-only: the external signer, for the preflight\")\n .action(async (strategyRaw: string, opts: { holder?: string }) => {\n const s = await loadOrExit(strategyRaw);\n const holder = opts.holder ? parseAddressArg(opts.holder, \"holder\") : signerAddress();\n if (!holder && !isCalldataOnly()) {\n console.error(chalk.red(\"No signer configured — set a private key, or use --calldata-only --holder <address>.\"));\n process.exit(1);\n }\n if (holder) {\n const h = await readHolder(s, holder, getPublicClient());\n const blocker = claimBlocker(s, h);\n if (blocker) {\n console.error(chalk.red(`Cannot claim for ${holder}: ${blocker}`));\n process.exit(1);\n }\n if (!isCalldataOnly()) console.log(chalk.dim(` Claiming ${fmtTokens(h.claimable)} ${s.tokenSymbol}`));\n } else {\n const blocker = claimBlocker(s, { claimed: false, claimable: 1n, isQueue: false });\n if (blocker) {\n console.error(chalk.red(`Cannot claim: ${blocker}`));\n process.exit(1);\n }\n }\n if (isCalldataOnly()) {\n emitSingleTx(s.strategy, encodeClaimCalldata(), `Claim the signer's slice of the ${s.tokenSymbol} reserve from ${s.strategy}.`);\n return;\n }\n await sendTx(\"Claiming reserve\", s.strategy, LAUNCHPAD_STRATEGY_ABI, \"claim\", []);\n });\n\n lp.command(\"claim-for\")\n .description(\"Pay a holder their slice of the reserve (permissionless; tokens go to the holder, never the caller)\")\n .argument(\"<strategy>\", \"LaunchpadStrategy clone address\")\n .argument(\"<holder>\", \"Holder to pay\")\n .action(async (strategyRaw: string, holderRaw: string) => {\n const holder = parseAddressArg(holderRaw, \"holder\");\n const s = await loadOrExit(strategyRaw);\n const h = await readHolder(s, holder, getPublicClient());\n const blocker = claimBlocker(s, h);\n if (blocker) {\n console.error(chalk.red(`Cannot claim for ${holder}: ${blocker}`));\n process.exit(1);\n }\n if (isCalldataOnly()) {\n emitSingleTx(\n s.strategy,\n encodeClaimForCalldata(holder),\n `Pay ${holder} their ${fmtTokens(h.claimable)} ${s.tokenSymbol} reserve slice from ${s.strategy}.`,\n );\n return;\n }\n console.log(chalk.dim(` Paying ${holder} ${fmtTokens(h.claimable)} ${s.tokenSymbol}`));\n await sendTx(\"Claiming for holder\", s.strategy, LAUNCHPAD_STRATEGY_ABI, \"claimFor\", [holder]);\n });\n\n lp.command(\"collect-fees\")\n .description(\"Push the launch's accrued creator fees to the fund's vault (permissionless; never pays the caller)\")\n .argument(\"<strategy>\", \"LaunchpadStrategy clone address\")\n .action(async (strategyRaw: string) => {\n const s = await loadOrExit(strategyRaw);\n if (s.launchRef === ZERO_REF) {\n console.error(chalk.red(\"The launch has not executed yet — there is no launch to collect fees from.\"));\n process.exit(1);\n }\n if (isCalldataOnly()) {\n emitSingleTx(\n s.launchAdapter,\n encodeCollectFeesCalldata(s.launchRef),\n `collectFees(${s.launchRef}) on ${s.launchAdapter}: pays accrued creator fees to vault ${s.vault}.`,\n );\n return;\n }\n await sendTx(\"Collecting fees to the vault\", s.launchAdapter, LAUNCH_ADAPTER_ABI, \"collectFees\", [s.launchRef]);\n console.log(chalk.dim(` Fees (if any accrued) went to vault ${s.vault}; a later proposal decides what to do with them.`));\n });\n\n lp.command(\"finalize\")\n .description(\"Graduate + bond a StonkBrokers launch (no-op on Sushi, which is live from the launch block)\")\n .argument(\"<strategy>\", \"LaunchpadStrategy clone address\")\n .action(async (strategyRaw: string) => {\n const s = await loadOrExit(strategyRaw);\n if (s.launchRef === ZERO_REF) {\n console.error(chalk.red(\"The launch has not executed yet — nothing to finalize.\"));\n process.exit(1);\n }\n if (s.venue === \"sushi\" || s.phase === \"Live\") {\n console.log(\n chalk.yellow(\n s.venue === \"sushi\"\n ? \"Sushi launches are live from the launch block; finalize is a no-op there. Nothing sent.\"\n : \"The launch is already bonded (Live). Nothing sent.\",\n ),\n );\n return;\n }\n if (s.phase === \"Failed\") {\n console.log(chalk.yellow(\"The launch was aborted at the venue (Failed); there is nothing to graduate. Nothing sent.\"));\n return;\n }\n if (s.phase === \"Curve\") {\n console.log(\n chalk.yellow(\" The curve is still open (phase Curve): graduate will likely be skipped by the venue until it closes.\"),\n );\n }\n if (isCalldataOnly()) {\n emitSingleTx(s.launchAdapter, encodeFinalizeCalldata(s.launchRef), `finalize(${s.launchRef}) on ${s.launchAdapter}.`);\n return;\n }\n await sendTx(\"Finalizing launch\", s.launchAdapter, LAUNCH_ADAPTER_ABI, \"finalize\", [s.launchRef]);\n\n // FALLBACK for StonkLaunchAdapter builds without the `VenueLegStarved`\n // guard (sherwood-strategies#6). Their `cloneFinalize` calls the pad's\n // `bond` through a raw call that cannot revert the tx, so under the\n // estimated gas limit graduation runs, `bond` (~1.4M gas) runs out, and\n // the launch is left graduated-but-unbonded (phase Closing) with a\n // `VenueLegSkipped(\"bond\")` log. `bond` is permissionless at the venue,\n // so finish it there directly, and never fail the command over it.\n const after = await readLaunchpad(s.strategy, getPublicClient()).catch(() => null);\n if (after?.phase === \"Closing\") {\n await bondAtVenue(s.launchRef);\n }\n });\n}\n\n/** The clone's pad + launch id, read from the clone the launch ref names. */\nconst STONK_CLONE_VIEWS_ABI = [\n { type: \"function\", name: \"pad\", inputs: [], outputs: [{ name: \"\", type: \"address\" }], stateMutability: \"view\" },\n { type: \"function\", name: \"launchId\", inputs: [], outputs: [{ name: \"\", type: \"uint256\" }], stateMutability: \"view\" },\n] as const;\n\nexport const STONK_PAD_BOND_ABI = [\n { type: \"function\", name: \"bond\", inputs: [{ name: \"id\", type: \"uint256\" }], outputs: [], stateMutability: \"nonpayable\" },\n] as const;\n\n/**\n * Where a StonkBrokers launch is bonded: the ref's low 20 bytes are the\n * per-launch clone, which stores the pad and the pad's launch id.\n */\nexport async function stonkBondCall(\n launchRef: Hex,\n client: { readContract: (args: never) => Promise<unknown> },\n): Promise<{ pad: Address; launchId: bigint }> {\n const clone = `0x${launchRef.slice(-40)}` as Address;\n const read = client.readContract as (args: {\n address: Address;\n abi: typeof STONK_CLONE_VIEWS_ABI;\n functionName: \"pad\" | \"launchId\";\n }) => Promise<unknown>;\n const [pad, launchId] = await Promise.all([\n read({ address: clone, abi: STONK_CLONE_VIEWS_ABI, functionName: \"pad\" }),\n read({ address: clone, abi: STONK_CLONE_VIEWS_ABI, functionName: \"launchId\" }),\n ]);\n return { pad: pad as Address, launchId: launchId as bigint };\n}\n\nasync function bondAtVenue(launchRef: Hex): Promise<void> {\n let target: { pad: Address; launchId: bigint };\n try {\n target = await stonkBondCall(launchRef, getPublicClient() as never);\n } catch (err) {\n console.log(chalk.yellow(` Still graduated-but-unbonded, and the clone's pad could not be read: ${formatContractError(err)}`));\n return;\n }\n console.log(\n chalk.yellow(\n ` finalize left the launch graduated but unbonded (the adapter's bond leg ran out of gas).\\n` +\n ` Bonding it at the venue directly: pad ${target.pad} bond(${target.launchId}) — permissionless.`,\n ),\n );\n const spinner = ora(\"Bonding at the venue\").start();\n try {\n const hash = await writeContractWithRetry({\n account: getAccount(),\n chain: getChain(),\n address: target.pad,\n abi: STONK_PAD_BOND_ABI,\n functionName: \"bond\",\n args: [target.launchId],\n });\n const receipt = await waitForReceipt(hash);\n if (receipt.status === \"reverted\") throw new Error(`bond reverted on-chain (${hash})`);\n spinner.succeed(\"Bonded at the venue (phase Live)\");\n console.log(chalk.dim(` Tx: ${getExplorerUrl(hash)}`));\n } catch (err) {\n spinner.warn(\"The venue did not bond it yet\");\n console.log(chalk.dim(` ${formatContractError(err)} — re-run \\`launchpad finalize\\` later.`));\n }\n}\n"],"mappings":"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","names":[]}