@sherwoodagent/cli 0.80.0 → 0.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/{abis-OLIDCWDS.js → abis-ZQ6I3S6L.js} +2 -4
  2. package/dist/{addresses-EF5OQSKV.js → addresses-FGJ4I4IG.js} +3 -3
  3. package/dist/{agent-VLYILEUP.js → agent-QUINV725.js} +7 -7
  4. package/dist/{chat-56DDAGA2.js → chat-5TUHBSIA.js} +9 -9
  5. package/dist/{chunk-QK3FUTVI.js → chunk-27XY2HXV.js} +5 -5
  6. package/dist/{chunk-VJKZDHH3.js → chunk-3TLKNRZV.js} +10 -9
  7. package/dist/chunk-3TLKNRZV.js.map +1 -0
  8. package/dist/{chunk-RFJSV3EZ.js → chunk-4KJUX5SS.js} +5 -5
  9. package/dist/{chunk-K2NEFUEP.js → chunk-54CLRBPB.js} +5 -5
  10. package/dist/{chunk-QSYLZA4Z.js → chunk-6BVA4RIH.js} +2 -2
  11. package/dist/{chunk-MAG63U53.js → chunk-76DLC7CM.js} +4 -4
  12. package/dist/{chunk-BJ4G3TPP.js → chunk-EPQR6PJ4.js} +2 -2
  13. package/dist/{chunk-54WMDJTL.js → chunk-LZEV772I.js} +386 -5
  14. package/dist/chunk-LZEV772I.js.map +1 -0
  15. package/dist/{chunk-2LUTKS24.js → chunk-MC5QEPW3.js} +6 -6
  16. package/dist/{chunk-XW6NDXBA.js → chunk-PMRYC6SF.js} +12 -12
  17. package/dist/{chunk-XW6NDXBA.js.map → chunk-PMRYC6SF.js.map} +1 -1
  18. package/dist/{chunk-XDWYX5ZM.js → chunk-UHGWEJ24.js} +2 -2
  19. package/dist/{chunk-XDGCHURW.js → chunk-VR4VHX4D.js} +3 -3
  20. package/dist/chunk-VR4VHX4D.js.map +1 -0
  21. package/dist/{chunk-TU655ZTV.js → chunk-XSP64L7L.js} +1102 -480
  22. package/dist/chunk-XSP64L7L.js.map +1 -0
  23. package/dist/{chunk-UO4UITOY.js → chunk-Y6XOH23Y.js} +28 -7
  24. package/dist/chunk-Y6XOH23Y.js.map +1 -0
  25. package/dist/{client-25LF2O4P.js → client-VNSFNDF4.js} +3 -3
  26. package/dist/{eas-HHMRO37P.js → eas-PJ3Y4NDB.js} +6 -6
  27. package/dist/{governor-AL2XUGBE.js → governor-4ASVLOCI.js} +6 -6
  28. package/dist/index.js +4857 -4569
  29. package/dist/index.js.map +1 -1
  30. package/dist/{ipfs-RWSTXTZM.js → ipfs-EJ7IHXCU.js} +2 -2
  31. package/dist/{network-R45QDUYO.js → network-RI54LT2Y.js} +2 -2
  32. package/dist/{price-QO22NF5Q.js → price-JX2LFKFW.js} +6 -6
  33. package/dist/{providers-ALMXBRNW.js → providers-F6MNPMR4.js} +4 -4
  34. package/dist/{research-ICDDAAGV.js → research-5ZJTRILJ.js} +8 -8
  35. package/dist/{session-RSWSCMM5.js → session-AXLPYJHX.js} +11 -11
  36. package/dist/{trade-YNQVWUYZ.js → trade-BZM7K2F4.js} +15 -15
  37. package/dist/{vault-QKURBBSL.js → vault-AWQBFD4C.js} +9 -9
  38. package/dist/{xmtp-M2OBCCNR.js → xmtp-M74BRF3G.js} +6 -6
  39. package/package.json +1 -1
  40. package/dist/chunk-54WMDJTL.js.map +0 -1
  41. package/dist/chunk-TU655ZTV.js.map +0 -1
  42. package/dist/chunk-UO4UITOY.js.map +0 -1
  43. package/dist/chunk-VJKZDHH3.js.map +0 -1
  44. package/dist/chunk-XDGCHURW.js.map +0 -1
  45. /package/dist/{abis-OLIDCWDS.js.map → abis-ZQ6I3S6L.js.map} +0 -0
  46. /package/dist/{addresses-EF5OQSKV.js.map → addresses-FGJ4I4IG.js.map} +0 -0
  47. /package/dist/{agent-VLYILEUP.js.map → agent-QUINV725.js.map} +0 -0
  48. /package/dist/{chat-56DDAGA2.js.map → chat-5TUHBSIA.js.map} +0 -0
  49. /package/dist/{chunk-QK3FUTVI.js.map → chunk-27XY2HXV.js.map} +0 -0
  50. /package/dist/{chunk-RFJSV3EZ.js.map → chunk-4KJUX5SS.js.map} +0 -0
  51. /package/dist/{chunk-K2NEFUEP.js.map → chunk-54CLRBPB.js.map} +0 -0
  52. /package/dist/{chunk-QSYLZA4Z.js.map → chunk-6BVA4RIH.js.map} +0 -0
  53. /package/dist/{chunk-MAG63U53.js.map → chunk-76DLC7CM.js.map} +0 -0
  54. /package/dist/{chunk-BJ4G3TPP.js.map → chunk-EPQR6PJ4.js.map} +0 -0
  55. /package/dist/{chunk-2LUTKS24.js.map → chunk-MC5QEPW3.js.map} +0 -0
  56. /package/dist/{chunk-XDWYX5ZM.js.map → chunk-UHGWEJ24.js.map} +0 -0
  57. /package/dist/{client-25LF2O4P.js.map → client-VNSFNDF4.js.map} +0 -0
  58. /package/dist/{eas-HHMRO37P.js.map → eas-PJ3Y4NDB.js.map} +0 -0
  59. /package/dist/{governor-AL2XUGBE.js.map → governor-4ASVLOCI.js.map} +0 -0
  60. /package/dist/{ipfs-RWSTXTZM.js.map → ipfs-EJ7IHXCU.js.map} +0 -0
  61. /package/dist/{network-R45QDUYO.js.map → network-RI54LT2Y.js.map} +0 -0
  62. /package/dist/{price-QO22NF5Q.js.map → price-JX2LFKFW.js.map} +0 -0
  63. /package/dist/{providers-ALMXBRNW.js.map → providers-F6MNPMR4.js.map} +0 -0
  64. /package/dist/{research-ICDDAAGV.js.map → research-5ZJTRILJ.js.map} +0 -0
  65. /package/dist/{session-RSWSCMM5.js.map → session-AXLPYJHX.js.map} +0 -0
  66. /package/dist/{trade-YNQVWUYZ.js.map → trade-BZM7K2F4.js.map} +0 -0
  67. /package/dist/{vault-QKURBBSL.js.map → vault-AWQBFD4C.js.map} +0 -0
  68. /package/dist/{xmtp-M2OBCCNR.js.map → xmtp-M74BRF3G.js.map} +0 -0
@@ -2,7 +2,6 @@ import {
2
2
  BASE_STRATEGY_ABI,
3
3
  EAS_ABI,
4
4
  ERC20_ABI,
5
- HYPERLIQUID_PERP_STRATEGY_ABI,
6
5
  L2_REGISTRY_ABI,
7
6
  PORTFOLIO_STRATEGY_ABI,
8
7
  PROTOCOL_CONFIG_ABI,
@@ -16,12 +15,11 @@ import {
16
15
  SYNTHRA_QUOTER_ABI,
17
16
  UNISWAP_QUOTER_V2_ABI,
18
17
  VENICE_STAKING_ABI
19
- } from "./chunk-TU655ZTV.js";
18
+ } from "./chunk-XSP64L7L.js";
20
19
  export {
21
20
  BASE_STRATEGY_ABI,
22
21
  EAS_ABI,
23
22
  ERC20_ABI,
24
- HYPERLIQUID_PERP_STRATEGY_ABI,
25
23
  L2_REGISTRY_ABI,
26
24
  PORTFOLIO_STRATEGY_ABI,
27
25
  PROTOCOL_CONFIG_ABI,
@@ -36,4 +34,4 @@ export {
36
34
  UNISWAP_QUOTER_V2_ABI,
37
35
  VENICE_STAKING_ABI
38
36
  };
39
- //# sourceMappingURL=abis-OLIDCWDS.js.map
37
+ //# sourceMappingURL=abis-ZQ6I3S6L.js.map
@@ -18,8 +18,8 @@ import {
18
18
  isRobinhoodEquityFeed,
19
19
  robinhoodEquityMaxAge,
20
20
  symbolForTokenAddress
21
- } from "./chunk-XW6NDXBA.js";
22
- import "./chunk-VJKZDHH3.js";
21
+ } from "./chunk-PMRYC6SF.js";
22
+ import "./chunk-3TLKNRZV.js";
23
23
  import "./chunk-3TZIOAPH.js";
24
24
  export {
25
25
  AERODROME,
@@ -42,4 +42,4 @@ export {
42
42
  robinhoodEquityMaxAge,
43
43
  symbolForTokenAddress
44
44
  };
45
- //# sourceMappingURL=addresses-EF5OQSKV.js.map
45
+ //# sourceMappingURL=addresses-FGJ4I4IG.js.map
@@ -12,7 +12,7 @@ import {
12
12
  import {
13
13
  getResearchProvider,
14
14
  isX402WalletFunded
15
- } from "./chunk-XDWYX5ZM.js";
15
+ } from "./chunk-UHGWEJ24.js";
16
16
  import {
17
17
  HyperliquidProvider,
18
18
  calculateATR,
@@ -29,9 +29,9 @@ import {
29
29
  } from "./chunk-DBOINZYU.js";
30
30
  import {
31
31
  chatCompletion
32
- } from "./chunk-QSYLZA4Z.js";
33
- import "./chunk-BJ4G3TPP.js";
34
- import "./chunk-VJKZDHH3.js";
32
+ } from "./chunk-6BVA4RIH.js";
33
+ import "./chunk-EPQR6PJ4.js";
34
+ import "./chunk-3TLKNRZV.js";
35
35
  import {
36
36
  getVeniceApiKey
37
37
  } from "./chunk-3TZIOAPH.js";
@@ -5573,8 +5573,8 @@ var PortfolioTracker = class {
5573
5573
  }
5574
5574
  try {
5575
5575
  const { createPublicClient, http } = await import("viem");
5576
- const { getChain } = await import("./network-R45QDUYO.js");
5577
- const { BASE_STRATEGY_ABI, SYNDICATE_VAULT_ABI } = await import("./abis-OLIDCWDS.js");
5576
+ const { getChain } = await import("./network-RI54LT2Y.js");
5577
+ const { BASE_STRATEGY_ABI, SYNDICATE_VAULT_ABI } = await import("./abis-ZQ6I3S6L.js");
5578
5578
  void chain;
5579
5579
  const client = createPublicClient({
5580
5580
  chain: getChain(),
@@ -9550,4 +9550,4 @@ function formatFearGreed(value) {
9550
9550
  export {
9551
9551
  registerAgentCommands
9552
9552
  };
9553
- //# sourceMappingURL=agent-VLYILEUP.js.map
9553
+ //# sourceMappingURL=agent-QUINV725.js.map
@@ -1,35 +1,35 @@
1
1
  import {
2
2
  getFund,
3
3
  updateMetadata
4
- } from "./chunk-RFJSV3EZ.js";
4
+ } from "./chunk-4KJUX5SS.js";
5
5
  import {
6
6
  getTextRecord,
7
7
  resolveFund,
8
8
  setTextRecord
9
- } from "./chunk-QK3FUTVI.js";
9
+ } from "./chunk-27XY2HXV.js";
10
10
  import {
11
11
  ENS
12
- } from "./chunk-XW6NDXBA.js";
12
+ } from "./chunk-PMRYC6SF.js";
13
13
  import {
14
14
  formatContractError,
15
15
  getAccount
16
- } from "./chunk-BJ4G3TPP.js";
17
- import "./chunk-VJKZDHH3.js";
16
+ } from "./chunk-EPQR6PJ4.js";
17
+ import "./chunk-3TLKNRZV.js";
18
18
  import {
19
19
  cacheGroupId,
20
20
  getCachedGroupId
21
21
  } from "./chunk-3TZIOAPH.js";
22
- import "./chunk-TU655ZTV.js";
22
+ import "./chunk-XSP64L7L.js";
23
23
  import {
24
24
  fetchMetadata,
25
25
  uploadMetadata
26
- } from "./chunk-XDGCHURW.js";
26
+ } from "./chunk-VR4VHX4D.js";
27
27
 
28
28
  // src/commands/chat.ts
29
29
  import chalk from "chalk";
30
30
  import ora from "ora";
31
31
  async function loadXmtp() {
32
- return import("./xmtp-M2OBCCNR.js");
32
+ return import("./xmtp-M74BRF3G.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-56DDAGA2.js.map
566
+ //# sourceMappingURL=chat-5TUHBSIA.js.map
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  ENS,
3
3
  SHERWOOD
4
- } from "./chunk-XW6NDXBA.js";
4
+ } from "./chunk-PMRYC6SF.js";
5
5
  import {
6
6
  getPublicClient
7
- } from "./chunk-BJ4G3TPP.js";
7
+ } from "./chunk-EPQR6PJ4.js";
8
8
  import {
9
9
  VALID_NETWORKS,
10
10
  withNetwork
11
- } from "./chunk-VJKZDHH3.js";
11
+ } from "./chunk-3TLKNRZV.js";
12
12
  import {
13
13
  L2_REGISTRY_ABI,
14
14
  SYNDICATE_FACTORY_ABI
15
- } from "./chunk-TU655ZTV.js";
15
+ } from "./chunk-XSP64L7L.js";
16
16
 
17
17
  // src/lib/ens.ts
18
18
  import { namehash } from "viem/ens";
@@ -111,4 +111,4 @@ export {
111
111
  setTextRecord,
112
112
  getTextRecord
113
113
  };
114
- //# sourceMappingURL=chunk-QK3FUTVI.js.map
114
+ //# sourceMappingURL=chunk-27XY2HXV.js.map
@@ -19,21 +19,21 @@ var robinhoodTestnet = defineChain({
19
19
  },
20
20
  testnet: true
21
21
  });
22
+ var ROBINHOOD_FORK_PUBLIC_RPC = "https://virtual.robinhood-chain.eu.rpc.tenderly.co/moonwell/wormhole-bridge/231af1";
23
+ var ROBINHOOD_FORK_EXPLORER = "https://dashboard.tenderly.co/explorer/vnet/6ad5961e-fbca-452f-939f-ca9a8c020933";
22
24
  var robinhoodFork = defineChain({
23
25
  id: 9994663,
24
26
  name: "Robinhood Chain (fork)",
25
27
  nativeCurrency: { name: "Ethereum", symbol: "ETH", decimals: 18 },
26
28
  rpcUrls: {
27
29
  default: {
28
- http: [
29
- "https://virtual.robinhood-chain.eu.rpc.tenderly.co/moonwell/wormhole-bridge/f4e186"
30
- ]
30
+ http: [ROBINHOOD_FORK_PUBLIC_RPC]
31
31
  }
32
32
  },
33
33
  blockExplorers: {
34
34
  default: {
35
35
  name: "Tenderly",
36
- url: "https://dashboard.tenderly.co"
36
+ url: ROBINHOOD_FORK_EXPLORER
37
37
  }
38
38
  },
39
39
  testnet: true
@@ -56,11 +56,10 @@ var CHAIN_REGISTRY = {
56
56
  },
57
57
  "robinhood-fork": {
58
58
  chain: robinhoodFork,
59
- rpcFallbacks: [
60
- "https://virtual.robinhood-chain.eu.rpc.tenderly.co/moonwell/wormhole-bridge/f4e186"
61
- ],
59
+ rpcFallbacks: [ROBINHOOD_FORK_PUBLIC_RPC],
62
60
  rpcEnvVar: "ROBINHOOD_FORK_RPC_URL",
63
61
  explorerHost: "dashboard.tenderly.co",
62
+ explorerBaseUrl: ROBINHOOD_FORK_EXPLORER,
64
63
  easGraphqlUrl: null,
65
64
  easScanHost: null,
66
65
  xmtpEnv: "production",
@@ -128,7 +127,9 @@ function getRpcUrl() {
128
127
  return getRpcUrls()[0];
129
128
  }
130
129
  function getExplorerUrl(txHash) {
131
- return `https://${CHAIN_REGISTRY[_network].explorerHost}/tx/${txHash}`;
130
+ const cfg = CHAIN_REGISTRY[_network];
131
+ const base = cfg.explorerBaseUrl ?? `https://${cfg.explorerHost}`;
132
+ return `${base}/tx/${txHash}`;
132
133
  }
133
134
  function isTestnet() {
134
135
  return CHAIN_REGISTRY[_network].isTestnet;
@@ -153,4 +154,4 @@ export {
153
154
  getExplorerUrl,
154
155
  isTestnet
155
156
  };
156
- //# sourceMappingURL=chunk-VJKZDHH3.js.map
157
+ //# sourceMappingURL=chunk-3TLKNRZV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/network.ts"],"sourcesContent":["/**\n * Network state singleton.\n *\n * Called once at CLI startup via the --chain flag's preAction hook.\n * Every other module reads from here — never hardcodes a chain.\n *\n * Current deployment target: Robinhood L2 testnet (chain 46630) only. Sherwood\n * launches on Robinhood first; other chains may be added back later, at which\n * point they re-enter the Network union + CHAIN_REGISTRY below.\n */\n\nimport { type Chain, defineChain, parseEther } from \"viem\";\nimport { getConfigRpcUrl } from \"./config.js\";\n\n// ── Robinhood L2 Testnet (Arbitrum Orbit, chain ID 46630) ──\n\nexport const robinhoodTestnet = defineChain({\n id: 46630,\n name: \"Robinhood Chain Testnet\",\n nativeCurrency: { name: \"Ethereum\", symbol: \"ETH\", decimals: 18 },\n rpcUrls: {\n default: { http: [\"https://rpc.testnet.chain.robinhood.com\"] },\n },\n blockExplorers: {\n default: {\n name: \"Blockscout\",\n url: \"https://explorer.testnet.chain.robinhood.com\",\n },\n },\n testnet: true,\n});\n\n// ── Robinhood Chain mainnet fork (Tenderly Virtual TestNet, chain ID 9994663) ──\n//\n// A fork of Robinhood Chain *mainnet* (USDG stablecoin, official Uniswap v3+v4,\n// Chainlink push feeds, tokenized-stock liquidity). Used for mainnet-faithful\n// e2e + guardian-network simulations. Ephemeral: Tenderly vnets expire — the RPC\n// is overridable via ROBINHOOD_FORK_RPC_URL when a new vnet is minted.\n\n/**\n * The PUBLIC RPC endpoint of vnet `a3fb16`\n * (id 6ad5961e-fbca-452f-939f-ca9a8c020933) — safe to bundle and to hand to\n * users: it serves reads and accepts broadcast txs, but exposes no\n * state-cheat surface.\n *\n * Admin/cheat calls (`tenderly_setBalance`, `tenderly_setStorageAt`,\n * `evm_increaseTime`, …) need that vnet's *admin* RPC, which is private —\n * pull it from the Tenderly dashboard and pass it via ROBINHOOD_FORK_RPC_URL.\n *\n * Two vnets answer to chain id 9994663; block height is the tell — the live\n * one is past block 21,170,000, the stale one forked at ~4.4M.\n */\nconst ROBINHOOD_FORK_PUBLIC_RPC =\n \"https://virtual.robinhood-chain.eu.rpc.tenderly.co/moonwell/wormhole-bridge/231af1\";\n\n/**\n * Tenderly scopes a vnet explorer under its vnet id — the bare\n * `dashboard.tenderly.co` host resolves to the user's own dashboard, not to\n * this fork's blocks, so tx/address links must carry the full prefix.\n */\nconst ROBINHOOD_FORK_EXPLORER =\n \"https://dashboard.tenderly.co/explorer/vnet/6ad5961e-fbca-452f-939f-ca9a8c020933\";\n\nexport const robinhoodFork = defineChain({\n id: 9994663,\n name: \"Robinhood Chain (fork)\",\n nativeCurrency: { name: \"Ethereum\", symbol: \"ETH\", decimals: 18 },\n rpcUrls: {\n default: {\n http: [ROBINHOOD_FORK_PUBLIC_RPC],\n },\n },\n blockExplorers: {\n default: {\n name: \"Tenderly\",\n url: ROBINHOOD_FORK_EXPLORER,\n },\n },\n testnet: true,\n});\n\n// ── Types ──\n\nexport type Network = \"robinhood-testnet\" | \"robinhood-fork\";\n\nexport interface ChainConfig {\n chain: Chain;\n /**\n * Ordered list of public RPC URLs tried in sequence when no user RPC is set.\n * First entry is the primary; the rest are fallbacks used transparently via\n * viem's `fallback` transport on rate-limit / network errors.\n */\n rpcFallbacks: string[];\n /** Legacy env var for backwards compat (optional per chain) */\n rpcEnvVar?: string;\n explorerHost: string;\n /**\n * Full URL prefix for explorer links, when the explorer is not rooted at\n * `https://${explorerHost}` — a Tenderly vnet scopes its blocks under\n * `/explorer/vnet/<id>`. Defaults to `https://${explorerHost}`.\n */\n explorerBaseUrl?: string;\n /** EAS GraphQL endpoint — null if EAS is not available on this chain */\n easGraphqlUrl: string | null;\n /** EAS scan host — null if unavailable */\n easScanHost: string | null;\n xmtpEnv: \"production\" | \"dev\";\n isTestnet: boolean;\n /**\n * ETH held back for gas in the native-ETH-wrap deposit path — the floor and\n * fallback for the live per-tx cushion estimate (`estimateGasCushion` in\n * client.ts), NOT a fixed requirement. High-fee chains (Base) want a\n * Base-scale reserve; near-zero-fee chains (Robinhood testnet, ~14-wei base\n * fee) want a tiny one so a valid deposit isn't rejected client-side. Unset →\n * `DEFAULT_MIN_GAS_RESERVE`.\n */\n minGasReserve?: bigint;\n}\n\n/**\n * Base-scale default reserve, used when a chain omits `minGasReserve`. Matches\n * the old hardcoded 0.0005-ETH cushion so higher-fee chains keep prior behavior.\n */\nexport const DEFAULT_MIN_GAS_RESERVE = parseEther(\"0.0005\");\n\n// ── Chain Registry ──\n\nexport const CHAIN_REGISTRY: Record<Network, ChainConfig> = {\n \"robinhood-testnet\": {\n chain: robinhoodTestnet,\n rpcFallbacks: [\"https://rpc.testnet.chain.robinhood.com\"],\n rpcEnvVar: \"ROBINHOOD_TESTNET_RPC_URL\",\n explorerHost: \"explorer.testnet.chain.robinhood.com\",\n easGraphqlUrl: null,\n easScanHost: null,\n xmtpEnv: \"production\",\n isTestnet: true,\n // ~14-wei base fee: a full wrap+approve+deposit sequence costs a few\n // million wei (~1e-11 ETH). 0.00002 ETH is a generous floor that still\n // leaves a 0.00058-ETH wallet room to wrap 0.0005 and deposit.\n minGasReserve: parseEther(\"0.00002\"),\n },\n \"robinhood-fork\": {\n chain: robinhoodFork,\n rpcFallbacks: [ROBINHOOD_FORK_PUBLIC_RPC],\n rpcEnvVar: \"ROBINHOOD_FORK_RPC_URL\",\n explorerHost: \"dashboard.tenderly.co\",\n explorerBaseUrl: ROBINHOOD_FORK_EXPLORER,\n easGraphqlUrl: null,\n easScanHost: null,\n xmtpEnv: \"production\",\n isTestnet: true,\n // Robinhood-mainnet-fork gas (~0.17 gwei) is higher than testnet's ~14 wei —\n // keep a modest reserve so the ETH-wrap deposit path isn't rejected.\n minGasReserve: parseEther(\"0.0005\"),\n },\n};\n\nexport const VALID_NETWORKS = Object.keys(CHAIN_REGISTRY) as Network[];\n\nexport const DEFAULT_NETWORK: Network = \"robinhood-testnet\";\n\n// ── Singleton state ──\n\nlet _network: Network = DEFAULT_NETWORK;\n\nexport function setNetwork(n: Network) {\n const config = CHAIN_REGISTRY[n];\n if (!config) {\n throw new Error(\n `Unknown network: ${n}. Valid: ${VALID_NETWORKS.join(\", \")}`,\n );\n }\n _network = n;\n}\n\nexport function getNetwork(): Network {\n return _network;\n}\n\n/**\n * Run `fn` with the network singleton temporarily switched to `network`,\n * restoring the previous network in `finally`.\n *\n * The viem clients (`getPublicClient`, `getWalletClient`) auto-invalidate on\n * chain change, so callers get fresh per-chain RPC + chain context inside the\n * block. Used for cross-chain fund resolution.\n */\nexport async function withNetwork<T>(\n network: Network,\n fn: () => Promise<T>,\n): Promise<T> {\n const previous = _network;\n _network = network;\n try {\n return await fn();\n } finally {\n _network = previous;\n }\n}\n\nexport function getChainConfig(): ChainConfig {\n return CHAIN_REGISTRY[_network];\n}\n\n/**\n * Per-chain ETH gas reserve floor/fallback for the ETH-wrap deposit path.\n * Falls back to the Base-scale default when the active chain doesn't set one.\n */\nexport function getMinGasReserve(): bigint {\n return CHAIN_REGISTRY[_network].minGasReserve ?? DEFAULT_MIN_GAS_RESERVE;\n}\n\n/**\n * Dev/CI-only chain-id override (`SIM_CHAIN_ID`) for custom-chainId vnet forks.\n * viem asserts the node's chainId matches the chain definition on every write,\n * so signing for such a fork requires the id to be swapped at the source.\n *\n * Interlock: honored ONLY while `SIM_ADDRESSES_FILE` is also set (the vnet\n * e2e harness's address override). A bare SIM_CHAIN_ID does nothing, so this\n * can never redirect signing on a real network run.\n */\nexport function applyChainIdOverride(chain: Chain): Chain {\n const raw = process.env.SIM_CHAIN_ID;\n if (!raw || !process.env.SIM_ADDRESSES_FILE) return chain;\n const id = Number(raw);\n if (!Number.isInteger(id) || id <= 0) return chain;\n return { ...chain, id };\n}\n\nexport function getChain(): Chain {\n return applyChainIdOverride(CHAIN_REGISTRY[_network].chain);\n}\n\n/**\n * Ordered list of RPC URLs to try, deduped:\n * 1. User config (~/.sherwood/config.json) — honored first\n * 2. Legacy env var (ROBINHOOD_TESTNET_RPC_URL)\n * 3. Public fallback list from CHAIN_REGISTRY\n *\n * Fed to viem's `fallback()` transport so rate-limited RPCs transparently\n * advance to the next entry. See issue #182.\n */\nexport function getRpcUrls(): string[] {\n const cfg = CHAIN_REGISTRY[_network];\n const urls: string[] = [];\n\n const fromConfig = getConfigRpcUrl(_network);\n if (fromConfig) urls.push(fromConfig);\n\n if (cfg.rpcEnvVar && process.env[cfg.rpcEnvVar]) {\n urls.push(process.env[cfg.rpcEnvVar]!);\n }\n\n // Vnet harness (SIM_CHAIN_ID + SIM_ADDRESSES_FILE interlock): the fork RPC\n // is the ONLY valid endpoint — the public fallbacks point at the real\n // network. viem's fallback() otherwise rotates there on a vnet hiccup and\n // silently estimates gas/fees against MAINNET state (live finding: an\n // approve estimated at 21.9k gas on mainnet — no code at that address —\n // reverted out-of-gas on the vnet where it needs ~46k). A vnet call must\n // fail loudly, never retarget the real chain.\n if (process.env.SIM_CHAIN_ID && process.env.SIM_ADDRESSES_FILE && urls.length > 0) {\n return Array.from(new Set(urls));\n }\n\n urls.push(...cfg.rpcFallbacks);\n\n return Array.from(new Set(urls));\n}\n\nexport function getRpcUrl(): string {\n return getRpcUrls()[0];\n}\n\nexport function getExplorerUrl(txHash: string): string {\n const cfg = CHAIN_REGISTRY[_network];\n const base = cfg.explorerBaseUrl ?? `https://${cfg.explorerHost}`;\n return `${base}/tx/${txHash}`;\n}\n\nexport function isTestnet(): boolean {\n return CHAIN_REGISTRY[_network].isTestnet;\n}\n"],"mappings":"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","names":[]}
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  SHERWOOD
3
- } from "./chunk-XW6NDXBA.js";
3
+ } from "./chunk-PMRYC6SF.js";
4
4
  import {
5
5
  getAccount,
6
6
  getPublicClient,
7
7
  waitForReceipt,
8
8
  writeContractWithRetry
9
- } from "./chunk-BJ4G3TPP.js";
9
+ } from "./chunk-EPQR6PJ4.js";
10
10
  import {
11
11
  getChain
12
- } from "./chunk-VJKZDHH3.js";
12
+ } from "./chunk-3TLKNRZV.js";
13
13
  import {
14
14
  SYNDICATE_FACTORY_ABI
15
- } from "./chunk-TU655ZTV.js";
15
+ } from "./chunk-XSP64L7L.js";
16
16
 
17
17
  // src/lib/factory.ts
18
18
  import { decodeEventLog } from "viem";
@@ -144,4 +144,4 @@ export {
144
144
  getActiveFunds,
145
145
  updateMetadata
146
146
  };
147
- //# sourceMappingURL=chunk-RFJSV3EZ.js.map
147
+ //# sourceMappingURL=chunk-4KJUX5SS.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  EAS_CONTRACTS,
3
3
  EAS_SCHEMAS
4
- } from "./chunk-XW6NDXBA.js";
4
+ } from "./chunk-PMRYC6SF.js";
5
5
  import {
6
6
  getAccount,
7
7
  getPublicClient,
8
8
  waitForReceipt,
9
9
  writeContractWithRetry
10
- } from "./chunk-BJ4G3TPP.js";
10
+ } from "./chunk-EPQR6PJ4.js";
11
11
  import {
12
12
  CHAIN_REGISTRY,
13
13
  getChain,
@@ -15,10 +15,10 @@ import {
15
15
  getNetwork,
16
16
  isTestnet,
17
17
  withNetwork
18
- } from "./chunk-VJKZDHH3.js";
18
+ } from "./chunk-3TLKNRZV.js";
19
19
  import {
20
20
  EAS_ABI
21
- } from "./chunk-TU655ZTV.js";
21
+ } from "./chunk-XSP64L7L.js";
22
22
 
23
23
  // src/lib/eas.ts
24
24
  import { encodeAbiParameters, parseAbiParameters, decodeAbiParameters } from "viem";
@@ -453,4 +453,4 @@ export {
453
453
  queryApprovals,
454
454
  queryJoinRequests
455
455
  };
456
- //# sourceMappingURL=chunk-K2NEFUEP.js.map
456
+ //# sourceMappingURL=chunk-54CLRBPB.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getAccount
3
- } from "./chunk-BJ4G3TPP.js";
3
+ } from "./chunk-EPQR6PJ4.js";
4
4
  import {
5
5
  getVeniceApiKey,
6
6
  setVeniceApiKey
@@ -186,4 +186,4 @@ export {
186
186
  chatCompletion,
187
187
  listModels
188
188
  };
189
- //# sourceMappingURL=chunk-QSYLZA4Z.js.map
189
+ //# sourceMappingURL=chunk-6BVA4RIH.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  PROPOSAL_STATES,
3
3
  getProposal
4
- } from "./chunk-UO4UITOY.js";
4
+ } from "./chunk-Y6XOH23Y.js";
5
5
  import {
6
6
  getPublicClient
7
- } from "./chunk-BJ4G3TPP.js";
7
+ } from "./chunk-EPQR6PJ4.js";
8
8
  import {
9
9
  resolveMetadataSummary
10
- } from "./chunk-XDGCHURW.js";
10
+ } from "./chunk-VR4VHX4D.js";
11
11
 
12
12
  // src/lib/events.ts
13
13
  import { parseAbiItem } from "viem";
@@ -170,4 +170,4 @@ export {
170
170
  getCurrentBlock,
171
171
  enrichProposalEvents
172
172
  };
173
- //# sourceMappingURL=chunk-MAG63U53.js.map
173
+ //# sourceMappingURL=chunk-76DLC7CM.js.map
@@ -2,7 +2,7 @@ import {
2
2
  getChain,
3
3
  getMinGasReserve,
4
4
  getRpcUrls
5
- } from "./chunk-VJKZDHH3.js";
5
+ } from "./chunk-3TLKNRZV.js";
6
6
  import {
7
7
  requirePrivateKey
8
8
  } from "./chunk-3TZIOAPH.js";
@@ -524,4 +524,4 @@ export {
524
524
  writeContractWithRetry,
525
525
  waitForReceipt
526
526
  };
527
- //# sourceMappingURL=chunk-BJ4G3TPP.js.map
527
+ //# sourceMappingURL=chunk-EPQR6PJ4.js.map