@sherwoodagent/cli 0.90.0 → 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 (70) hide show
  1. package/dist/{agent-QU2OSWS4.js → agent-LVDMPKHK.js} +9 -9
  2. package/dist/agent-LVDMPKHK.js.map +1 -0
  3. package/dist/{chat-PFXIL6WT.js → chat-HS7OIE2Y.js} +8 -8
  4. package/dist/{chunk-KXUA5BEH.js → chunk-5G4SESMO.js} +47 -8
  5. package/dist/chunk-5G4SESMO.js.map +1 -0
  6. package/dist/{chunk-KPTKX226.js → chunk-6H6EFHDS.js} +4 -4
  7. package/dist/{chunk-ZCRVHITI.js → chunk-7GITFGA4.js} +4 -4
  8. package/dist/{chunk-WIUPOQNS.js → chunk-D5Y73ITZ.js} +2 -2
  9. package/dist/{chunk-2SIUEMPV.js → chunk-FS5DXFRG.js} +4 -4
  10. package/dist/{chunk-74QYNLJE.js → chunk-G3LPD43A.js} +3 -3
  11. package/dist/{chunk-J3JMMJLN.js → chunk-IDMSU2X4.js} +6 -6
  12. package/dist/{chunk-KRASHQRB.js → chunk-IXU23PP5.js} +3 -3
  13. package/dist/{chunk-LIW6K4OJ.js → chunk-JDTTJDGP.js} +2 -2
  14. package/dist/{chunk-3R57ETXQ.js → chunk-LSY4GYJ2.js} +2 -2
  15. package/dist/{chunk-DQZJULNP.js → chunk-POTFZJYN.js} +4 -4
  16. package/dist/{chunk-I7NYU4JB.js → chunk-RYKETWBU.js} +5 -3
  17. package/dist/{chunk-5XMQQ4LX.js → chunk-V6XUXLJF.js} +4 -4
  18. package/dist/{chunk-XQHRKFFH.js → chunk-WJWLM5QE.js} +6 -6
  19. package/dist/{chunk-QUAVAJWE.js → chunk-XJR2YQK3.js} +1 -15
  20. package/dist/chunk-XJR2YQK3.js.map +1 -0
  21. package/dist/{client-3BFK7TNL.js → client-4CKVYBRP.js} +4 -4
  22. package/dist/{config-UZ2GIXAO.js → config-WIHIVOGZ.js} +2 -6
  23. package/dist/{eas-YTAAJSLU.js → eas-JOU76WZ2.js} +6 -6
  24. package/dist/{governor-53PNPDCZ.js → governor-4XHJ52H4.js} +6 -6
  25. package/dist/{identity-M6UIVBNX.js → identity-3BLNFZ42.js} +7 -7
  26. package/dist/index.js +41 -47
  27. package/dist/index.js.map +1 -1
  28. package/dist/{launchpad-LHMBN4TV.js → launchpad-ZVC7Z5JJ.js} +8 -6
  29. package/dist/{lighter-preflight-R7C6HY3M.js → lighter-preflight-ERF425PP.js} +6 -6
  30. package/dist/{network-EZ5X2BF7.js → network-XQLQ4MSH.js} +3 -3
  31. package/dist/{price-PBFF6NFU.js → price-4QVQAIHX.js} +6 -6
  32. package/dist/{providers-22A42FKP.js → providers-P27BDYZ2.js} +5 -5
  33. package/dist/{research-ZH34O7YL.js → research-N2R76ELJ.js} +9 -9
  34. package/dist/{session-GSWEE4M3.js → session-ZIJYGOAT.js} +11 -11
  35. package/dist/{trade-SHK7GKSI.js → trade-2J555BS7.js} +17 -17
  36. package/dist/{vault-3T6UHCPE.js → vault-WC7AS7SM.js} +8 -8
  37. package/dist/{xmtp-EOMKXRTB.js → xmtp-NJXD7T7E.js} +6 -6
  38. package/package.json +1 -2
  39. package/dist/agent-QU2OSWS4.js.map +0 -1
  40. package/dist/chunk-KXUA5BEH.js.map +0 -1
  41. package/dist/chunk-QUAVAJWE.js.map +0 -1
  42. /package/dist/{chat-PFXIL6WT.js.map → chat-HS7OIE2Y.js.map} +0 -0
  43. /package/dist/{chunk-KPTKX226.js.map → chunk-6H6EFHDS.js.map} +0 -0
  44. /package/dist/{chunk-ZCRVHITI.js.map → chunk-7GITFGA4.js.map} +0 -0
  45. /package/dist/{chunk-WIUPOQNS.js.map → chunk-D5Y73ITZ.js.map} +0 -0
  46. /package/dist/{chunk-2SIUEMPV.js.map → chunk-FS5DXFRG.js.map} +0 -0
  47. /package/dist/{chunk-74QYNLJE.js.map → chunk-G3LPD43A.js.map} +0 -0
  48. /package/dist/{chunk-J3JMMJLN.js.map → chunk-IDMSU2X4.js.map} +0 -0
  49. /package/dist/{chunk-KRASHQRB.js.map → chunk-IXU23PP5.js.map} +0 -0
  50. /package/dist/{chunk-LIW6K4OJ.js.map → chunk-JDTTJDGP.js.map} +0 -0
  51. /package/dist/{chunk-3R57ETXQ.js.map → chunk-LSY4GYJ2.js.map} +0 -0
  52. /package/dist/{chunk-DQZJULNP.js.map → chunk-POTFZJYN.js.map} +0 -0
  53. /package/dist/{chunk-I7NYU4JB.js.map → chunk-RYKETWBU.js.map} +0 -0
  54. /package/dist/{chunk-5XMQQ4LX.js.map → chunk-V6XUXLJF.js.map} +0 -0
  55. /package/dist/{chunk-XQHRKFFH.js.map → chunk-WJWLM5QE.js.map} +0 -0
  56. /package/dist/{client-3BFK7TNL.js.map → client-4CKVYBRP.js.map} +0 -0
  57. /package/dist/{config-UZ2GIXAO.js.map → config-WIHIVOGZ.js.map} +0 -0
  58. /package/dist/{eas-YTAAJSLU.js.map → eas-JOU76WZ2.js.map} +0 -0
  59. /package/dist/{governor-53PNPDCZ.js.map → governor-4XHJ52H4.js.map} +0 -0
  60. /package/dist/{identity-M6UIVBNX.js.map → identity-3BLNFZ42.js.map} +0 -0
  61. /package/dist/{launchpad-LHMBN4TV.js.map → launchpad-ZVC7Z5JJ.js.map} +0 -0
  62. /package/dist/{lighter-preflight-R7C6HY3M.js.map → lighter-preflight-ERF425PP.js.map} +0 -0
  63. /package/dist/{network-EZ5X2BF7.js.map → network-XQLQ4MSH.js.map} +0 -0
  64. /package/dist/{price-PBFF6NFU.js.map → price-4QVQAIHX.js.map} +0 -0
  65. /package/dist/{providers-22A42FKP.js.map → providers-P27BDYZ2.js.map} +0 -0
  66. /package/dist/{research-ZH34O7YL.js.map → research-N2R76ELJ.js.map} +0 -0
  67. /package/dist/{session-GSWEE4M3.js.map → session-ZIJYGOAT.js.map} +0 -0
  68. /package/dist/{trade-SHK7GKSI.js.map → trade-2J555BS7.js.map} +0 -0
  69. /package/dist/{vault-3T6UHCPE.js.map → vault-WC7AS7SM.js.map} +0 -0
  70. /package/dist/{xmtp-EOMKXRTB.js.map → xmtp-NJXD7T7E.js.map} +0 -0
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  getFund,
3
3
  updateMetadata
4
- } from "./chunk-DQZJULNP.js";
4
+ } from "./chunk-POTFZJYN.js";
5
5
  import {
6
6
  getTextRecord,
7
7
  resolveFund,
8
8
  setTextRecord
9
- } from "./chunk-KPTKX226.js";
9
+ } from "./chunk-6H6EFHDS.js";
10
10
  import {
11
11
  ENS
12
- } from "./chunk-3R57ETXQ.js";
12
+ } from "./chunk-LSY4GYJ2.js";
13
13
  import {
14
14
  formatContractError,
15
15
  getAccount
16
- } from "./chunk-I7NYU4JB.js";
17
- import "./chunk-LIW6K4OJ.js";
16
+ } from "./chunk-RYKETWBU.js";
17
+ import "./chunk-JDTTJDGP.js";
18
18
  import {
19
19
  cacheGroupId,
20
20
  getCachedGroupId
21
- } from "./chunk-QUAVAJWE.js";
21
+ } from "./chunk-XJR2YQK3.js";
22
22
  import "./chunk-SCWNKVNW.js";
23
23
  import {
24
24
  fetchMetadata,
@@ -29,7 +29,7 @@ import {
29
29
  import chalk from "chalk";
30
30
  import ora from "ora";
31
31
  async function loadXmtp() {
32
- return import("./xmtp-EOMKXRTB.js");
32
+ return import("./xmtp-NJXD7T7E.js");
33
33
  }
34
34
  function formatTimestamp(date) {
35
35
  return `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}`;
@@ -563,4 +563,4 @@ function registerChatCommands(program) {
563
563
  export {
564
564
  registerChatCommands
565
565
  };
566
- //# sourceMappingURL=chat-PFXIL6WT.js.map
566
+ //# sourceMappingURL=chat-HS7OIE2Y.js.map
@@ -13,18 +13,20 @@ import {
13
13
  } from "./chunk-GAQMHH44.js";
14
14
  import {
15
15
  LAUNCH_ADAPTERS
16
- } from "./chunk-3R57ETXQ.js";
16
+ } from "./chunk-LSY4GYJ2.js";
17
17
  import {
18
+ CONTRACT_ERRORS_ABI,
19
+ decodeContractError,
18
20
  formatContractError,
19
21
  getAccount,
20
22
  getPublicClient,
21
23
  waitForReceipt,
22
24
  writeContractWithRetry
23
- } from "./chunk-I7NYU4JB.js";
25
+ } from "./chunk-RYKETWBU.js";
24
26
  import {
25
27
  getChain,
26
28
  getExplorerUrl
27
- } from "./chunk-LIW6K4OJ.js";
29
+ } from "./chunk-JDTTJDGP.js";
28
30
  import {
29
31
  ERC20_ABI,
30
32
  LAUNCHPAD_STRATEGY_ABI,
@@ -33,7 +35,7 @@ import {
33
35
  } from "./chunk-SCWNKVNW.js";
34
36
 
35
37
  // src/commands/launchpad.ts
36
- import { formatUnits, isAddress } from "viem";
38
+ import { BaseError, ContractFunctionRevertedError, formatUnits, isAddress } from "viem";
37
39
  import chalk from "chalk";
38
40
  import ora from "ora";
39
41
  var ZERO = "0x0000000000000000000000000000000000000000";
@@ -465,6 +467,19 @@ async function stonkBondCall(launchRef, client) {
465
467
  ]);
466
468
  return { pad, launchId };
467
469
  }
470
+ function revertReason(err) {
471
+ if (!(err instanceof BaseError)) return null;
472
+ const reverted = err.walk((e) => e instanceof ContractFunctionRevertedError);
473
+ if (!(reverted instanceof ContractFunctionRevertedError)) return null;
474
+ if (reverted.reason) return reverted.reason;
475
+ if (reverted.data && reverted.raw) {
476
+ const args = (reverted.data.args ?? []).map(String).join(", ");
477
+ const known = decodeContractError(reverted.raw);
478
+ return `${reverted.data.errorName}(${args})` + (known ? ` \u2014 ${known.message}` : "");
479
+ }
480
+ if (reverted.signature) return `unknown custom error ${reverted.signature}`;
481
+ return "reverted without a reason";
482
+ }
468
483
  async function bondAtVenue(launchRef) {
469
484
  let target;
470
485
  try {
@@ -473,10 +488,33 @@ async function bondAtVenue(launchRef) {
473
488
  console.log(chalk.yellow(` Still graduated-but-unbonded, and the clone's pad could not be read: ${formatContractError(err)}`));
474
489
  return;
475
490
  }
491
+ const call = `pad ${target.pad} bond(${target.launchId})`;
492
+ try {
493
+ await getPublicClient().simulateContract({
494
+ account: getAccount(),
495
+ address: target.pad,
496
+ abi: [...STONK_PAD_BOND_ABI, ...CONTRACT_ERRORS_ABI],
497
+ functionName: "bond",
498
+ args: [target.launchId]
499
+ });
500
+ } catch (err) {
501
+ const reason = revertReason(err);
502
+ console.error(
503
+ chalk.red(
504
+ reason === null ? ` finalize left the launch graduated but unbonded, and ${call} could not be simulated: ${formatContractError(err)}` : ` finalize left the launch graduated but unbonded: the venue refused bond: ${reason}`
505
+ )
506
+ );
507
+ console.error(
508
+ chalk.dim(
509
+ reason === null ? ` Nothing was sent. Re-run \`launchpad finalize\` to retry.` : ` ${call} reverts, so nothing was sent. Re-run \`launchpad finalize\` once the venue accepts bond.`
510
+ )
511
+ );
512
+ process.exit(1);
513
+ }
476
514
  console.log(
477
515
  chalk.yellow(
478
- ` finalize left the launch graduated but unbonded (the adapter's bond leg ran out of gas).
479
- Bonding it at the venue directly: pad ${target.pad} bond(${target.launchId}) \u2014 permissionless.`
516
+ ` finalize left the launch graduated but unbonded, and bond simulates cleanly, so the adapter's bond leg was likely gas-starved.
517
+ Bonding it at the venue directly: ${call} \u2014 permissionless.`
480
518
  )
481
519
  );
482
520
  const spinner = ora("Bonding at the venue").start();
@@ -508,6 +546,7 @@ export {
508
546
  claimBlocker,
509
547
  registerLaunchpadCommands,
510
548
  STONK_PAD_BOND_ABI,
511
- stonkBondCall
549
+ stonkBondCall,
550
+ revertReason
512
551
  };
513
- //# sourceMappingURL=chunk-KXUA5BEH.js.map
552
+ //# sourceMappingURL=chunk-5G4SESMO.js.map
@@ -0,0 +1 @@
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 { BaseError, ContractFunctionRevertedError, 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 { CONTRACT_ERRORS_ABI, decodeContractError } from \"../lib/errors.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 // Graduated but unbonded (phase Closing) after finalize has two causes:\n // the venue refused `bond` (the adapter logs `VenueLegSkipped(\"bond\")`),\n // or, on adapter builds without the `VenueLegStarved` guard\n // (sherwood-strategies#6), the bond leg (~1.4M gas) ran out of gas.\n // bondAtVenue simulates `bond` to tell them apart and only sends it for\n // starvation.\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\n/**\n * Why a simulated call reverted: the Error(string) reason, a custom error by\n * name (decoded against the CLI's known error ABIs), or the raw selector.\n * Null when the failure is not a revert (RPC or transport error).\n */\nexport function revertReason(err: unknown): string | null {\n if (!(err instanceof BaseError)) return null;\n const reverted = err.walk((e) => e instanceof ContractFunctionRevertedError);\n if (!(reverted instanceof ContractFunctionRevertedError)) return null;\n if (reverted.reason) return reverted.reason;\n if (reverted.data && reverted.raw) {\n const args = (reverted.data.args ?? []).map(String).join(\", \");\n const known = decodeContractError(reverted.raw);\n return `${reverted.data.errorName}(${args})` + (known ? ` — ${known.message}` : \"\");\n }\n if (reverted.signature) return `unknown custom error ${reverted.signature}`;\n return \"reverted without a reason\";\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 const call = `pad ${target.pad} bond(${target.launchId})`;\n try {\n await getPublicClient().simulateContract({\n account: getAccount(),\n address: target.pad,\n abi: [...STONK_PAD_BOND_ABI, ...CONTRACT_ERRORS_ABI],\n functionName: \"bond\",\n args: [target.launchId],\n });\n } catch (err) {\n const reason = revertReason(err);\n console.error(\n chalk.red(\n reason === null\n ? ` finalize left the launch graduated but unbonded, and ${call} could not be simulated: ${formatContractError(err)}`\n : ` finalize left the launch graduated but unbonded: the venue refused bond: ${reason}`,\n ),\n );\n console.error(\n chalk.dim(\n reason === null\n ? ` Nothing was sent. Re-run \\`launchpad finalize\\` to retry.`\n : ` ${call} reverts, so nothing was sent. Re-run \\`launchpad finalize\\` once the venue accepts bond.`,\n ),\n );\n process.exit(1);\n }\n console.log(\n chalk.yellow(\n ` finalize left the launch graduated but unbonded, and bond simulates cleanly, so the adapter's bond leg was likely gas-starved.\\n` +\n ` Bonding it at the venue directly: ${call} — 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":[]}
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  ENS,
3
3
  SHERWOOD
4
- } from "./chunk-3R57ETXQ.js";
4
+ } from "./chunk-LSY4GYJ2.js";
5
5
  import {
6
6
  getPublicClient
7
- } from "./chunk-I7NYU4JB.js";
7
+ } from "./chunk-RYKETWBU.js";
8
8
  import {
9
9
  VALID_NETWORKS,
10
10
  withNetwork
11
- } from "./chunk-LIW6K4OJ.js";
11
+ } from "./chunk-JDTTJDGP.js";
12
12
  import {
13
13
  L2_REGISTRY_ABI,
14
14
  SYNDICATE_FACTORY_ABI
@@ -111,4 +111,4 @@ export {
111
111
  setTextRecord,
112
112
  getTextRecord
113
113
  };
114
- //# sourceMappingURL=chunk-KPTKX226.js.map
114
+ //# sourceMappingURL=chunk-6H6EFHDS.js.map
@@ -14,13 +14,13 @@ import {
14
14
  TOKENS,
15
15
  UNISWAP,
16
16
  VENICE
17
- } from "./chunk-3R57ETXQ.js";
17
+ } from "./chunk-LSY4GYJ2.js";
18
18
  import {
19
19
  getPublicClient
20
- } from "./chunk-I7NYU4JB.js";
20
+ } from "./chunk-RYKETWBU.js";
21
21
  import {
22
22
  getNetwork
23
- } from "./chunk-LIW6K4OJ.js";
23
+ } from "./chunk-JDTTJDGP.js";
24
24
  import {
25
25
  LIGHTER_USDG,
26
26
  buildExecuteCalls,
@@ -2551,4 +2551,4 @@ export {
2551
2551
  applySlippage,
2552
2552
  encodeSwapPath
2553
2553
  };
2554
- //# sourceMappingURL=chunk-ZCRVHITI.js.map
2554
+ //# sourceMappingURL=chunk-7GITFGA4.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getAccount
3
- } from "./chunk-I7NYU4JB.js";
3
+ } from "./chunk-RYKETWBU.js";
4
4
 
5
5
  // src/lib/x402.ts
6
6
  var _x402Fetch = null;
@@ -635,4 +635,4 @@ export {
635
635
  NansenProvider,
636
636
  getResearchProvider
637
637
  };
638
- //# sourceMappingURL=chunk-WIUPOQNS.js.map
638
+ //# sourceMappingURL=chunk-D5Y73ITZ.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  EAS_CONTRACTS,
3
3
  EAS_SCHEMAS
4
- } from "./chunk-3R57ETXQ.js";
4
+ } from "./chunk-LSY4GYJ2.js";
5
5
  import {
6
6
  getAccount,
7
7
  getPublicClient,
8
8
  waitForReceipt,
9
9
  writeContractWithRetry
10
- } from "./chunk-I7NYU4JB.js";
10
+ } from "./chunk-RYKETWBU.js";
11
11
  import {
12
12
  CHAIN_REGISTRY,
13
13
  getChain,
@@ -15,7 +15,7 @@ import {
15
15
  getNetwork,
16
16
  isTestnet,
17
17
  withNetwork
18
- } from "./chunk-LIW6K4OJ.js";
18
+ } from "./chunk-JDTTJDGP.js";
19
19
  import {
20
20
  EAS_ABI
21
21
  } from "./chunk-SCWNKVNW.js";
@@ -569,4 +569,4 @@ export {
569
569
  queryApprovals,
570
570
  queryJoinRequests
571
571
  };
572
- //# sourceMappingURL=chunk-2SIUEMPV.js.map
572
+ //# sourceMappingURL=chunk-FS5DXFRG.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getAccount
3
- } from "./chunk-I7NYU4JB.js";
3
+ } from "./chunk-RYKETWBU.js";
4
4
  import {
5
5
  getVeniceApiKey,
6
6
  setVeniceApiKey
7
- } from "./chunk-QUAVAJWE.js";
7
+ } from "./chunk-XJR2YQK3.js";
8
8
 
9
9
  // src/lib/venice.ts
10
10
  import chalk from "chalk";
@@ -186,4 +186,4 @@ export {
186
186
  chatCompletion,
187
187
  listModels
188
188
  };
189
- //# sourceMappingURL=chunk-74QYNLJE.js.map
189
+ //# sourceMappingURL=chunk-G3LPD43A.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getLogsChunked
3
- } from "./chunk-KRASHQRB.js";
3
+ } from "./chunk-IXU23PP5.js";
4
4
  import {
5
5
  TOKENS
6
- } from "./chunk-3R57ETXQ.js";
6
+ } from "./chunk-LSY4GYJ2.js";
7
7
  import {
8
8
  GAS_UNITS,
9
9
  estimateGasCushion,
@@ -12,13 +12,13 @@ import {
12
12
  getWalletClient,
13
13
  waitForReceipt,
14
14
  writeContractWithRetry
15
- } from "./chunk-I7NYU4JB.js";
15
+ } from "./chunk-RYKETWBU.js";
16
16
  import {
17
17
  getChain
18
- } from "./chunk-LIW6K4OJ.js";
18
+ } from "./chunk-JDTTJDGP.js";
19
19
  import {
20
20
  getChainContracts
21
- } from "./chunk-QUAVAJWE.js";
21
+ } from "./chunk-XJR2YQK3.js";
22
22
  import {
23
23
  ERC20_ABI,
24
24
  SYNDICATE_VAULT_ABI
@@ -557,4 +557,4 @@ export {
557
557
  registerAgent,
558
558
  getVaultInfo
559
559
  };
560
- //# sourceMappingURL=chunk-J3JMMJLN.js.map
560
+ //# sourceMappingURL=chunk-IDMSU2X4.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  PROPOSAL_STATES,
3
3
  getProposal
4
- } from "./chunk-5XMQQ4LX.js";
4
+ } from "./chunk-V6XUXLJF.js";
5
5
  import {
6
6
  getPublicClient
7
- } from "./chunk-I7NYU4JB.js";
7
+ } from "./chunk-RYKETWBU.js";
8
8
  import {
9
9
  resolveMetadataSummary
10
10
  } from "./chunk-YMB4RJOR.js";
@@ -212,4 +212,4 @@ export {
212
212
  getCurrentBlock,
213
213
  enrichProposalEvents
214
214
  };
215
- //# sourceMappingURL=chunk-KRASHQRB.js.map
215
+ //# sourceMappingURL=chunk-IXU23PP5.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfigRpcUrl
3
- } from "./chunk-QUAVAJWE.js";
3
+ } from "./chunk-XJR2YQK3.js";
4
4
 
5
5
  // src/lib/network.ts
6
6
  import { defineChain, parseEther } from "viem";
@@ -186,4 +186,4 @@ export {
186
186
  getExplorerUrl,
187
187
  isTestnet
188
188
  };
189
- //# sourceMappingURL=chunk-LIW6K4OJ.js.map
189
+ //# sourceMappingURL=chunk-JDTTJDGP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getNetwork
3
- } from "./chunk-LIW6K4OJ.js";
3
+ } from "./chunk-JDTTJDGP.js";
4
4
 
5
5
  // src/lib/address-overrides.ts
6
6
  import { readFileSync } from "fs";
@@ -601,4 +601,4 @@ export {
601
601
  SYNTHRA,
602
602
  CHAINLINK
603
603
  };
604
- //# sourceMappingURL=chunk-3R57ETXQ.js.map
604
+ //# sourceMappingURL=chunk-LSY4GYJ2.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  SHERWOOD
3
- } from "./chunk-3R57ETXQ.js";
3
+ } from "./chunk-LSY4GYJ2.js";
4
4
  import {
5
5
  getAccount,
6
6
  getPublicClient,
7
7
  waitForReceipt,
8
8
  writeContractWithRetry
9
- } from "./chunk-I7NYU4JB.js";
9
+ } from "./chunk-RYKETWBU.js";
10
10
  import {
11
11
  getChain
12
- } from "./chunk-LIW6K4OJ.js";
12
+ } from "./chunk-JDTTJDGP.js";
13
13
  import {
14
14
  SYNDICATE_FACTORY_ABI
15
15
  } from "./chunk-SCWNKVNW.js";
@@ -144,4 +144,4 @@ export {
144
144
  getActiveFunds,
145
145
  updateMetadata
146
146
  };
147
- //# sourceMappingURL=chunk-DQZJULNP.js.map
147
+ //# sourceMappingURL=chunk-POTFZJYN.js.map
@@ -2,10 +2,10 @@ import {
2
2
  getChain,
3
3
  getMinGasReserve,
4
4
  getRpcUrls
5
- } from "./chunk-LIW6K4OJ.js";
5
+ } from "./chunk-JDTTJDGP.js";
6
6
  import {
7
7
  requirePrivateKey
8
- } from "./chunk-QUAVAJWE.js";
8
+ } from "./chunk-XJR2YQK3.js";
9
9
 
10
10
  // src/lib/client.ts
11
11
  import { createPublicClient, createWalletClient, fallback, http } from "viem";
@@ -761,6 +761,8 @@ async function waitForReceipt(hash) {
761
761
  }
762
762
 
763
763
  export {
764
+ CONTRACT_ERRORS_ABI,
765
+ decodeContractError,
764
766
  formatContractError,
765
767
  getPublicClient,
766
768
  getWalletClient,
@@ -775,4 +777,4 @@ export {
775
777
  writeContractWithRetry,
776
778
  waitForReceipt
777
779
  };
778
- //# sourceMappingURL=chunk-I7NYU4JB.js.map
780
+ //# sourceMappingURL=chunk-RYKETWBU.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  SHERWOOD
3
- } from "./chunk-3R57ETXQ.js";
3
+ } from "./chunk-LSY4GYJ2.js";
4
4
  import {
5
5
  getAccount,
6
6
  getPublicClient,
7
7
  waitForReceipt,
8
8
  writeContractWithRetry
9
- } from "./chunk-I7NYU4JB.js";
9
+ } from "./chunk-RYKETWBU.js";
10
10
  import {
11
11
  getChain
12
- } from "./chunk-LIW6K4OJ.js";
12
+ } from "./chunk-JDTTJDGP.js";
13
13
  import {
14
14
  PROTOCOL_CONFIG_ABI,
15
15
  SYNDICATE_FACTORY_ABI,
@@ -507,4 +507,4 @@ export {
507
507
  setMgmtSplit,
508
508
  setPerfSplit
509
509
  };
510
- //# sourceMappingURL=chunk-5XMQQ4LX.js.map
510
+ //# sourceMappingURL=chunk-V6XUXLJF.js.map
@@ -4,21 +4,21 @@ import {
4
4
  } from "./chunk-GAQMHH44.js";
5
5
  import {
6
6
  COORDINATION_NETWORK
7
- } from "./chunk-2SIUEMPV.js";
7
+ } from "./chunk-FS5DXFRG.js";
8
8
  import {
9
9
  AGENT_REGISTRY
10
- } from "./chunk-3R57ETXQ.js";
10
+ } from "./chunk-LSY4GYJ2.js";
11
11
  import {
12
12
  formatContractError,
13
13
  getAccount,
14
14
  getPublicClient,
15
15
  sendTxWithRetry,
16
16
  waitForReceipt
17
- } from "./chunk-I7NYU4JB.js";
17
+ } from "./chunk-RYKETWBU.js";
18
18
  import {
19
19
  getChain,
20
20
  withNetwork
21
- } from "./chunk-LIW6K4OJ.js";
21
+ } from "./chunk-JDTTJDGP.js";
22
22
  import {
23
23
  getAgentId,
24
24
  getIdentityChainId,
@@ -26,7 +26,7 @@ import {
26
26
  getVirtualsIdentity,
27
27
  setAgentId,
28
28
  setVirtualsIdentity
29
- } from "./chunk-QUAVAJWE.js";
29
+ } from "./chunk-XJR2YQK3.js";
30
30
  import {
31
31
  resolveMetadataSummary
32
32
  } from "./chunk-YMB4RJOR.js";
@@ -3062,4 +3062,4 @@ export {
3062
3062
  lookupAgentIdByWallet,
3063
3063
  registerIdentityCommands
3064
3064
  };
3065
- //# sourceMappingURL=chunk-XQHRKFFH.js.map
3065
+ //# sourceMappingURL=chunk-WJWLM5QE.js.map
@@ -16,10 +16,6 @@ var SETTINGS = {
16
16
  fromConfig: (c) => c.veniceApiKey,
17
17
  envVar: "VENICE_API_KEY"
18
18
  },
19
- anthropicApiKey: {
20
- fromConfig: (c) => c.anthropicApiKey,
21
- envVar: "ANTHROPIC_API_KEY"
22
- },
23
19
  uniswapApiKey: {
24
20
  fromConfig: (c) => c.uniswapApiKey,
25
21
  envVar: "UNISWAP_API_KEY"
@@ -94,14 +90,6 @@ function setVeniceApiKey(apiKey) {
94
90
  function getVeniceApiKey() {
95
91
  return resolveSetting("veniceApiKey", loadConfig(), process.env);
96
92
  }
97
- function setAnthropicApiKey(apiKey) {
98
- const config = loadConfig();
99
- config.anthropicApiKey = apiKey;
100
- saveConfig(config);
101
- }
102
- function getAnthropicApiKey() {
103
- return resolveSetting("anthropicApiKey", loadConfig(), process.env);
104
- }
105
93
  function setAgentId(agentId) {
106
94
  const config = loadConfig();
107
95
  config.agentId = agentId;
@@ -267,8 +255,6 @@ export {
267
255
  invalidateCachedGroupId,
268
256
  setVeniceApiKey,
269
257
  getVeniceApiKey,
270
- setAnthropicApiKey,
271
- getAnthropicApiKey,
272
258
  setAgentId,
273
259
  setVirtualsIdentity,
274
260
  getVirtualsIdentity,
@@ -295,4 +281,4 @@ export {
295
281
  getLighterKeyConfig,
296
282
  setLighterKeyConfig
297
283
  };
298
- //# sourceMappingURL=chunk-QUAVAJWE.js.map
284
+ //# sourceMappingURL=chunk-XJR2YQK3.js.map